diff --git a/.gitmodules b/.gitmodules index e69b21d11..6cb4606d7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,15 +7,19 @@ [submodule "third_party/gfxreconstruct/external/SPIRV-Headers"] path = third_party/gfxreconstruct/external/SPIRV-Headers url = https://github.com/KhronosGroup/SPIRV-Headers.git + shallow = true [submodule "third_party/gfxreconstruct/external/SPIRV-Reflect"] path = third_party/gfxreconstruct/external/SPIRV-Reflect url = https://github.com/KhronosGroup/SPIRV-Reflect.git + shallow = true [submodule "third_party/gfxreconstruct/external/Vulkan-Headers"] path = third_party/gfxreconstruct/external/Vulkan-Headers url = https://github.com/KhronosGroup/Vulkan-Headers.git + shallow = true [submodule "third_party/gfxreconstruct/external/OpenXR-SDK"] path = third_party/gfxreconstruct/external/OpenXR-SDK url = https://github.com/KhronosGroup/OpenXR-SDK.git + shallow = true [submodule "third_party/googletest"] path = third_party/googletest url = https://github.com/google/googletest.git diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 79a22183f..ba9b4ce07 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -85,7 +85,7 @@ Make sure to have built everything according to BUILD.md (don't forget the insta ```sh git subtree pull --prefix=third_party/gfxreconstruct https://github.com/LunarG/gfxreconstruct.git dev --squash ``` -1. Copy missing submodule entries from `//third_party/gfxreconstruct/.gitmodules` into `//.gitmodules` +1. Run `//scripts/incorporate_gfxr_submodules.py` so that the required submodules are cloned. 1. Update the submodules so that the merge commit includes the correct SHA: ```sh git submodule update --init --recursive diff --git a/dive_core/CMakeLists.txt b/dive_core/CMakeLists.txt index 9b78f8b4f..2221ceab9 100644 --- a/dive_core/CMakeLists.txt +++ b/dive_core/CMakeLists.txt @@ -143,7 +143,6 @@ target_include_directories( ${FREEDRENO_ISA_DIRECTORY} ${THIRDPARTY_DIRECTORY}/mesa/src/freedreno/common ${THIRDPARTY_DIRECTORY}/mesa/src/ - ${THIRDPARTY_DIRECTORY}/mesa/include/ ${THIRDPARTY_DIRECTORY}/libarchive/libarchive/ ) diff --git a/gfxr_dump_resources/gfxr_dump_resources.cpp b/gfxr_dump_resources/gfxr_dump_resources.cpp index 41304d52f..2cbf0927c 100644 --- a/gfxr_dump_resources/gfxr_dump_resources.cpp +++ b/gfxr_dump_resources/gfxr_dump_resources.cpp @@ -63,6 +63,10 @@ bool SaveAsJsonFile(const std::vector& dumpables, const char* filenam out << "{\n"; + out << " \"DumpResourcesOptions\": {\n"; + out << " \"DumpAllImageSubresources\": true\n"; + out << " },\n"; + out << " \"BeginCommandBuffer\": ["; for (int i = 0; i < dumpables.size(); ++i) { @@ -144,4 +148,4 @@ bool SaveAsJsonFile(const std::vector& dumpables, const char* filenam return true; } -} // namespace Dive::gfxr \ No newline at end of file +} // namespace Dive::gfxr diff --git a/gfxr_dump_resources/gfxr_dump_resources.h b/gfxr_dump_resources/gfxr_dump_resources.h index d48f78d97..f3581b70e 100644 --- a/gfxr_dump_resources/gfxr_dump_resources.h +++ b/gfxr_dump_resources/gfxr_dump_resources.h @@ -34,4 +34,4 @@ std::optional> FindDumpableResources(const char* filename // Returns false on error. bool SaveAsJsonFile(const std::vector& dumpables, const char* filename); -} // namespace Dive::gfxr \ No newline at end of file +} // namespace Dive::gfxr diff --git a/gfxr_ext/decode/dive_file_processor.cpp b/gfxr_ext/decode/dive_file_processor.cpp index 4cb562a93..c4448315f 100644 --- a/gfxr_ext/decode/dive_file_processor.cpp +++ b/gfxr_ext/decode/dive_file_processor.cpp @@ -44,9 +44,6 @@ bool ShouldCreateRenderDocCapture() } // namespace -// TODO GH #1195: frame numbering should be 1-based. -const uint32_t kFirstFrame = 0; - void DiveFileProcessor::SetLoopSingleFrameCount(uint64_t loop_single_frame_count) { loop_single_frame_count_ = loop_single_frame_count; @@ -92,153 +89,133 @@ bool DiveFileProcessor::WriteFile(const std::string& name, const std::string& co return true; } -bool DiveFileProcessor::ProcessFrameMarker(const format::BlockHeader& block_header, - format::MarkerType marker_type, bool& should_break) +bool DiveFileProcessor::ProcessFrameDelimiter(const FrameEndMarkerArgs& end_frame) { - // Read the rest of the frame marker data. Currently frame markers are not dispatched to - // decoders. - uint64_t frame_number = 0; - bool success = ReadBytes(&frame_number, sizeof(frame_number)); - - if (success) - { - // Validate frame end marker's frame number matches first_frame_ when - // capture_uses_frame_markers_ is true. - GFXRECON_ASSERT((marker_type != format::kEndMarker) || (!UsesFrameMarkers()) || - (frame_number == GetFirstFrame())); + // Single frame looping, despite the frame number never technically changing, increments + // current_frame_number_. However, this triggers an assert in + // FileProcessor::ProcessFrameDelimiter which detects when the current frame doesn't match + // what's in the file. (This likely detects bad GFXR files or out-of-order execution). Outside + // of modifying the assert, we can workaround it by manipulating current_frame_number_. + // + // Realistically, we could probably keep current_frame_number_ as 0 to improve interactions with + // other features like --skip-get-fence-ranges, FpsInfo, etc. However, the previous + // implementation allowed current_frame_number_ to increase so I'd rather not deviate at this + // time. + auto loop_current_frame_number = current_frame_number_; + current_frame_number_ = end_frame.frame_number - GetFirstFrame(); + bool is_frame_delimiter = FileProcessor::ProcessFrameDelimiter(end_frame); + current_frame_number_ = loop_current_frame_number; - for (auto decoder : decoders_) - { - if (marker_type == format::kEndMarker) - { - decoder->DispatchFrameEndMarker(frame_number); - } - else - { - GFXRECON_LOG_WARNING("Skipping unrecognized frame marker with type %u", - marker_type); - } - } - } - else +#if defined(__ANDROID__) + if (DivePM4Capture::GetInstance().IsPM4CaptureEnabled()) { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read frame marker data"); + DivePM4Capture::GetInstance().TryStopCapture(); } +#endif - // Break from loop on frame delimiter. - if (IsFrameDelimiter(block_header.type, marker_type)) + // At the last frame in the capture file, determine whether to jump back to the state end + // marker, or terminate replay if the loop count has been reached + bool finite_looping = loop_single_frame_count_ > 0; + // We expect current_frame_number_ to increment by 1 each loop. Ensure it doesn't jump around. + GFXRECON_ASSERT(current_frame_number_ < loop_single_frame_count_); + // Reaching the Frame End marker means that we've completed one loop. Thus, we have one fewer + // loops remaining. current_frame_number_ isn't incremented until after we return. + uint64_t loops_left = loop_single_frame_count_ - current_frame_number_ - 1; + if (finite_looping && loops_left == 0) { - // If the capture file contains frame markers, it will have a frame marker for every - // frame-ending API call such as vkQueuePresentKHR. If this is the first frame marker - // encountered, reset the frame count and ignore frame-ending API calls in - // IsFrameDelimiter(format::ApiCallId call_id). - if (!UsesFrameMarkers()) - { - SetUsesFrameMarkers(true); - current_frame_number_ = kFirstFrame; - } -#if defined(__ANDROID__) - if (DivePM4Capture::GetInstance().IsPM4CaptureEnabled()) - { - DivePM4Capture::GetInstance().TryStopCapture(); - } -#endif - // Make sure to increment the frame number on the way out. - ++current_frame_number_; - ++block_index_; - should_break = true; - - // At the last frame in the capture file, determine whether to jump back to the state end - // marker, or terminate replay if the loop count has been reached - if ((loop_single_frame_count_ > 0) && (current_frame_number_ >= loop_single_frame_count_)) + if (ShouldCreateRenderDocCapture()) { - if (ShouldCreateRenderDocCapture()) + // Finalize the RenderDoc capture after all loops have completed. While the intended + // use case is to capture only 1 frame (which can be accomplished by setting + // loop_single_frame_count_), I don't see any reason to prevent the user from + // capturing all loops if they really want to. + if (const RENDERDOC_API_1_0_0* renderdoc = GetRenderDocApi(); renderdoc != nullptr) { - // Finalize the RenderDoc capture after all loops have completed. While the intended - // use case is to capture only 1 frame (which can be accomplished by setting - // loop_single_frame_count_), I don't see any reason to prevent the user from - // capturing all loops if they really want to. - if (const RENDERDOC_API_1_0_0* renderdoc = GetRenderDocApi(); renderdoc != nullptr) - { - if (renderdoc->EndFrameCapture(/*device=*/nullptr, /*wndHandle=*/nullptr) != 1) - { - GFXRECON_LOG_WARNING( - "EndFrameCapture failed, RenderDoc .rdc capture likely not created!"); - } - } - else + if (renderdoc->EndFrameCapture(/*device=*/nullptr, /*wndHandle=*/nullptr) != 1) { GFXRECON_LOG_WARNING( - "GetRenderDocApi failed. Could not end RenderDoc capture!"); + "EndFrameCapture failed, RenderDoc .rdc capture likely not created!"); } } - - GFXRECON_LOG_INFO("Looped %d frames, terminating replay asap", current_frame_number_); - return success; + else + { + GFXRECON_LOG_WARNING("GetRenderDocApi failed. Could not end RenderDoc capture!"); + } } - GFXRECON_ASSERT(!gfxr_file_name_.empty()); - block_index_ = state_end_marker_block_index_; - SeekActiveFile(gfxr_file_name_, state_end_marker_file_offset_, util::platform::FileSeekSet); - should_break = false; + + GFXRECON_LOG_INFO("Looped %d frames, terminating replay asap", loop_single_frame_count_); + // The act of not seeking should cause replay to hit EOF and stop (assuming there is only + // one frame in the capture file) + return is_frame_delimiter; } - return success; + + // The block index is printed by --pbi-all. It helps correlate problematic blocks with manual + // inspection of capture file. Reset it to the loop point to make debugging easier. + block_index_ = state_end_marker_block_index_; + + std::shared_ptr gfxr_file = gfxr_file_.lock(); + GFXRECON_ASSERT(gfxr_file); + SeekActiveFile(gfxr_file, state_end_marker_file_offset_, util::platform::FileSeekSet); + + return is_frame_delimiter; } -bool DiveFileProcessor::ProcessStateMarker(const format::BlockHeader& block_header, - format::MarkerType marker_type) +void DiveFileProcessor::ProcessStateEndMarker(const StateEndMarkerArgs& state_end) { - bool success = FileProcessor::ProcessStateMarker(block_header, marker_type); - - if ((success) && (marker_type == format::kEndMarker)) - { - // Store state end marker offset - GFXRECON_ASSERT(!gfxr_file_name_.empty()); - state_end_marker_file_offset_ = TellFile(gfxr_file_name_); - state_end_marker_block_index_ = block_index_; - GFXRECON_LOG_INFO("Stored state end marker offset %d", state_end_marker_file_offset_); - GFXRECON_LOG_INFO("Single frame number %d", GetFirstFrame()); + FileProcessor::ProcessStateEndMarker(state_end); + + // Store state end marker offset + std::shared_ptr gfxr_file = gfxr_file_.lock(); + GFXRECON_ASSERT(gfxr_file); + state_end_marker_file_offset_ = gfxr_file->FileTell(); + // The block index is useful while debugging to match the call stack or --pbi output with the + // capture file. If it's not reset to the loop point then it just keeps counting up. + state_end_marker_block_index_ = block_index_; + GFXRECON_LOG_INFO("Stored state end marker offset %d", state_end_marker_file_offset_); + GFXRECON_LOG_INFO("Single frame number %d", GetFirstFrame()); #if defined(__ANDROID__) - if (DivePM4Capture::GetInstance().IsPM4CaptureEnabled()) - { - DivePM4Capture::GetInstance().TryStartCapture(); - } - // Tell other processes that replay has finished trim state loading. - // TODO: b/444647876 - Implementation that doesn't use global state (filesystem) - if (!std::ofstream(Dive::kReplayStateLoadedSignalFile)) + if (DivePM4Capture::GetInstance().IsPM4CaptureEnabled()) + { + DivePM4Capture::GetInstance().TryStartCapture(); + } + // Tell other processes that replay has finished trim state loading. + // TODO: b/444647876 - Implementation that doesn't use global state (filesystem) + if (!std::ofstream(Dive::kReplayStateLoadedSignalFile)) + { + GFXRECON_LOG_INFO( + "Failed to create a file signaling that trim state loading is " + "complete. This will impact our ability to gather metrics."); + } +#endif + // Don't bother trying to start a capture for infinite replay since it will never finish! + if (loop_single_frame_count_ > 0 && ShouldCreateRenderDocCapture()) + { + if (const RENDERDOC_API_1_0_0* renderdoc = GetRenderDocApi(); renderdoc != nullptr) { - GFXRECON_LOG_INFO( - "Failed to create a file signaling that trim state loading is " - "complete. This will impact our ability to gather metrics."); + renderdoc->SetCaptureFilePathTemplate( + Dive::GetRenderDocCaptureFilePathTemplate(gfxr_file->GetFilename()) + .string() + .c_str()); + // Let RenderDoc choose the Vulkan context and window handle since we typically only + // expect one of each. + renderdoc->StartFrameCapture(/*device=*/nullptr, /*wndHandle=*/nullptr); } -#endif - // Don't bother trying to start a capture for infinite replay since it will never finish! - if (loop_single_frame_count_ > 0 && ShouldCreateRenderDocCapture()) + else { - if (const RENDERDOC_API_1_0_0* renderdoc = GetRenderDocApi(); renderdoc != nullptr) - { - renderdoc->SetCaptureFilePathTemplate( - Dive::GetRenderDocCaptureFilePathTemplate(gfxr_file_name_).string().c_str()); - // Let RenderDoc choose the Vulkan context and window handle since we typically only - // expect one of each. - renderdoc->StartFrameCapture(/*device=*/nullptr, /*wndHandle=*/nullptr); - } - else - { - GFXRECON_LOG_DEBUG("GetRenderDocApi failed! Could not start RenderDoc capture."); - } + GFXRECON_LOG_DEBUG("GetRenderDocApi failed! Could not start RenderDoc capture."); } } - - return success; } void DiveFileProcessor::StoreBlockInfo() { - if (gfxr_file_name_.empty()) + std::shared_ptr gfxr_file = gfxr_file_.lock(); + if (!gfxr_file) { // Assuming that the first time StoreBlockInfo() is called, the active file is .gfxr file - gfxr_file_name_ = GetActiveFilename(); - GFXRECON_LOG_INFO("Storing active filename %s", gfxr_file_name_.c_str()); + gfxr_file = file_stack_.back().active_file; + gfxr_file_ = gfxr_file; + GFXRECON_LOG_INFO("Storing active filename %s", gfxr_file->GetFilename().c_str()); } if (!dive_block_data_) @@ -246,10 +223,10 @@ void DiveFileProcessor::StoreBlockInfo() return; } - int64_t offset = TellFile(gfxr_file_name_); + int64_t offset = gfxr_file->FileTell(); GFXRECON_ASSERT(offset > 0); dive_block_data_->AddOriginalBlock(block_index_, static_cast(offset)); } GFXRECON_END_NAMESPACE(decode) -GFXRECON_END_NAMESPACE(gfxrecon) \ No newline at end of file +GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/gfxr_ext/decode/dive_file_processor.h b/gfxr_ext/decode/dive_file_processor.h index 29992b726..996533373 100644 --- a/gfxr_ext/decode/dive_file_processor.h +++ b/gfxr_ext/decode/dive_file_processor.h @@ -23,6 +23,7 @@ limitations under the License. #include +#include "decode/block_parser.h" #include "decode/file_processor.h" #include "dive_block_data.h" @@ -41,11 +42,9 @@ class DiveFileProcessor : public FileProcessor bool WriteFile(const std::string& name, const std::string& content); protected: - bool ProcessFrameMarker(const format::BlockHeader& block_header, format::MarkerType marker_type, - bool& should_break) override; + bool ProcessFrameDelimiter(const FrameEndMarkerArgs& end_frame) override; - bool ProcessStateMarker(const format::BlockHeader& block_header, - format::MarkerType marker_type) override; + void ProcessStateEndMarker(const StateEndMarkerArgs& state_end) override; void StoreBlockInfo() override; @@ -63,8 +62,9 @@ class DiveFileProcessor : public FileProcessor // modifications std::shared_ptr dive_block_data_ = nullptr; - // Need to store this because the active file is sometimes the .gfxa one - std::string gfxr_file_name_ = ""; + // Need to store this because the active file is sometimes the .gfxa one. Since the parent class + // "owns" this value, avoid sharing ownership and accidentally extending lifetime beyond use. + std::weak_ptr gfxr_file_; }; GFXRECON_END_NAMESPACE(decode) diff --git a/scripts/incorporate_gfxr_submodules.py b/scripts/incorporate_gfxr_submodules.py new file mode 100644 index 000000000..281589141 --- /dev/null +++ b/scripts/incorporate_gfxr_submodules.py @@ -0,0 +1,302 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Combines //third_party/gfxreconstruct/.gitmodules with //.gitmodules. + +This is required as part of a subtree pull in order so that we can check out +GFXR submodules correctly. + +Limitations: + +- If GFXR deletes a submodule, this won't detect that. This will only add + new submodules or update existing ones. +- Does not handle git config multi-value variables +- Does not preserve whitespace at the end of git config values +""" + +import argparse +import dataclasses +import pathlib +import subprocess +import shutil +import sys + + +@dataclasses.dataclass +class ConfigName: + """A Python representation of a git config variable name. + + https://git-scm.com/docs/git-config#_syntax + """ + + section: str + subsection: str | None + key: str + + def __str__(self): + if self.subsection is None: + return f"{self.section}.{self.key}" + + return f"{self.section}.{self.subsection}.{self.key}" + + +@dataclasses.dataclass +class ConfigVariable: + """A Python representation of a git config variable. + + https://git-scm.com/docs/git-config#_syntax + """ + + name: ConfigName + value: str + + def __str__(self): + return f"{self.name}={self.value}" + + +class MissingSectionError(Exception): + """The git config name couldn't be parsed since it's missing a section.""" + + pass + + +class InvalidKeyError(Exception): + """The git config name couldn't be parsed since the key contains an + invalid character. + """ + + pass + + +def parse_name(name: str) -> ConfigName: + """Parses a git config name for its component parts. + + Args: + name: A name produced by `git config list --name-only` + + Returns: + The name decomposed into its component parts for easier processing. + + Raises: + MissingSectionError: If the name doesn't have a section + InvalidKeyError: If the key part of the name contains an invalid + character + """ + parts = name.split(".") + parts_len = len(parts) + if parts_len < 2: + raise MissingSectionError(name) + + section = parts[0] + key = parts[-1] + if "=" in key: + raise InvalidKeyError(key) + + if parts_len > 2: + subsection = ".".join(parts[1:-1]) + else: + subsection = None + + return ConfigName(section=section, subsection=subsection, key=key) + + +def git_config_list_name_only( + git: pathlib.Path, config_file: pathlib.Path +) -> list[ConfigName]: + """Runs `git config list --name-only` and parses the output. + + Args: + git: Path to the git executable + config_file: Path to the config file to list + + Returns: + All parsed names from `git config list --name-only` + + Raises: + subprocess.CompletedProcessError: If git returns a non-zero exit code + MissingSectionError: Couldn't parse the file since a section is + missing from a name + InvalidKeyError: Couldn't prase the file since a name contains a key + with an invalid character + """ + process = subprocess.run( + [str(git), "config", "list", "-f", str(config_file), "--name-only"], + text=True, + capture_output=True, + ) + process.check_returncode() + return [parse_name(name) for name in process.stdout.splitlines()] + + +def git_config_get( + git: pathlib.Path, config_file: pathlib.Path, name: ConfigName +) -> str: + """Runs `git config get` and returns the stdout. + + Args: + git: Path to the git executable + config_file: Path to the config file to read + name: The name of the value to get + + Returns: + The value of the name in the config. + + Raises: + subprocess.CompletedProcessError: If git returns a non-zero exit code + """ + process = subprocess.run( + [ + str(git), + "config", + "get", + "-f", + str(config_file), + str(name), + ], + text=True, + capture_output=True, + ) + process.check_returncode() + # git prints a trailing whitespace which we want to remove. Unfortunately, + # this will also remove any whitespace that is intentionally in the config + # file. This is not a requirement so I kept the simplest solution. + return process.stdout.rstrip() + + +def git_config_set( + git: pathlib.Path, config_file: pathlib.Path, variable: ConfigVariable +): + """Runs `git config set` to modify a variable. + + Args: + git: Path to the git executable + config_file: Path to the config file to modify + variable: The name to modify and the value to set it to. + + Raises: + subprocess.CompletedProcessError: If git returns a non-zero exit code + """ + subprocess.run( + [ + str(git), + "config", + "set", + "-f", + str(config_file), + str(variable.name), + str(variable.value), + ], + text=True, + capture_output=True, + ).check_returncode() + + +def list_variables( + git: pathlib.Path, config_file: pathlib.Path +) -> list[ConfigVariable]: + """Lists all variables in a git config file. + + Args: + git: Path to the git executable + config_file: Path to the config file to list + + Returns: + All parsed names from `git config list --name-only` + + Raises: + subprocess.CompletedProcessError: If git returns a non-zero exit code + MissingSectionError: Couldn't parse the file since a name is missing + the section + InvalidKeyError: Couldn't prase the file since a name contains a key + with an invalid character + """ + return [ + ConfigVariable(name, git_config_get(git, config_file, name)) + for name in git_config_list_name_only(git, config_file) + ] + + +def rebase_config_variable(variable: ConfigVariable, prefix: str) -> ConfigVariable: + """Relocates a submodule into a different directory. + + Args: + variable: The config to modify + prefix: The value prepended in order to rebase + + Returns: + A new variable with the subsection name and path values prepended with + the prefix + """ + new_name = ConfigName( + section=variable.name.section, + subsection=f"{prefix}/{variable.name.subsection}", + key=variable.name.key, + ) + + if variable.name.key == "path": + new_value = f"{prefix}/{variable.value}" + else: + new_value = variable.value + + return ConfigVariable(new_name, new_value) + + +def main(args: argparse.Namespace): + try: + variables = list_variables(args.git_path, args.override_gitmodules) + except subprocess.CalledProcessError as error: + print(f"subprocess.CalledProcessError: {error}") + if error.stdout: + print(f"stdout: {error.stdout}") + if error.stderr: + print(f"stderr: {error.stderr}") + sys.exit(1) + + prefix = args.override_gitmodules.relative_to(args.base_gitmodules.parent).parent + + for variable in variables: + if variable.name.subsection == "external/OpenXR-Docs": + print("Skipping 'external/OpenXR-Docs' since it's not required") + continue + + git_config_set( + args.git_path, + args.base_gitmodules, + rebase_config_variable(variable, prefix), + ) + + +def parse_args() -> argparse.Namespace: + repo_base_path = pathlib.Path(__file__).parent / ".." + parser = argparse.ArgumentParser() + parser.add_argument( + "--git_path", + type=pathlib.Path, + default=shutil.which("git"), + ) + parser.add_argument( + "--base_gitmodules", + type=pathlib.Path, + default=repo_base_path / ".gitmodules", + ) + parser.add_argument( + "--override_gitmodules", + type=pathlib.Path, + default=repo_base_path / "third_party" / "gfxreconstruct" / ".gitmodules", + ) + return parser.parse_args() + + +if __name__ == "__main__": + main(parse_args()) diff --git a/scripts/replay-with-dump.bat b/scripts/replay-with-dump.bat index 2b157b35b..b2229799c 100644 --- a/scripts/replay-with-dump.bat +++ b/scripts/replay-with-dump.bat @@ -112,7 +112,7 @@ IF %ERRORLEVEL% NEQ 0 ( :REPLAY call "%DIVE_CLIENT_CLI%" --command gfxr_replay ^ --gfxr_replay_file_path "%PUSH_DIR%/%GFXR_BASENAME%" ^ - --gfxr_replay_flags "--dump-resources %PUSH_DIR%/%JSON_BASENAME% --dump-resources-dir %DUMP_DIR% --dump-resources-dump-all-image-subresources" + --gfxr_replay_flags "--dump-resources %PUSH_DIR%/%JSON_BASENAME% --dump-resources-dir %DUMP_DIR%" adb pull "%DUMP_DIR%" IF %ERRORLEVEL% NEQ 0 ( diff --git a/scripts/replay-with-dump.sh b/scripts/replay-with-dump.sh index 870e47207..9e6b92a3d 100755 --- a/scripts/replay-with-dump.sh +++ b/scripts/replay-with-dump.sh @@ -58,7 +58,7 @@ if [ $# -eq 2 ]; then fi $DIVE_CLIENT_CLI --command gfxr_replay \ --gfxr_replay_file_path "$PUSH_DIR/$GFXR_BASENAME" \ - --gfxr_replay_flags "--dump-resources $PUSH_DIR/$JSON_BASENAME --dump-resources-dir $DUMP_DIR --dump-resources-dump-all-image-subresources" + --gfxr_replay_flags "--dump-resources $PUSH_DIR/$JSON_BASENAME --dump-resources-dir $DUMP_DIR" adb pull "$DUMP_DIR" echo "Results in $DUMP_DIR" diff --git a/scripts/update_gfxr.sh b/scripts/update_gfxr.sh new file mode 100644 index 000000000..c925c2c25 --- /dev/null +++ b/scripts/update_gfxr.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +set -eux + +readonly PREFIX="third_party/gfxreconstruct" +readonly REPOSITORY="https://github.com/LunarG/gfxreconstruct.git" +readonly REF="dev" + +# set up branch +# git checkout main +git checkout -b "subtree_pull_$(date +%s)" + +# do the pull; ignore the exit code (we'll figure out what to do later) +git subtree pull --prefix="${PREFIX}" "${REPOSITORY}" "${REF}" --squash || true +readonly squash_commit="$(cat .git/MERGE_HEAD)" + +# TODO validate squash_commit +git rev-parse "${squash_commit}" + +# Combine subtree submodules +python scripts/incorporate_gfxr_submodules.py + +# Since this is a subtree, need to checkout any submodule updates before add +git submodule update --init --recursive + +# Regenerate Vulkan code +python third_party/gfxreconstruct/framework/generated/generate_vulkan.py + +# Commit the merge conflicts. This gives reviewers a good idea of what you changed. +git add . +git commit -m "Merge commit '${squash_commit}' as '${PREFIX}'" + +# TODO what if no merge conflicts? + diff --git a/third_party/gfxreconstruct/.github/CODEOWNERS b/third_party/gfxreconstruct/.github/CODEOWNERS new file mode 100644 index 000000000..1251040a6 --- /dev/null +++ b/third_party/gfxreconstruct/.github/CODEOWNERS @@ -0,0 +1 @@ +* @LunarG/gfxreconstruct-architecture-reviewers diff --git a/third_party/gfxreconstruct/.github/workflows/ci_build.yml b/third_party/gfxreconstruct/.github/workflows/ci_build.yml index 954b0b5b5..480cce2ad 100644 --- a/third_party/gfxreconstruct/.github/workflows/ci_build.yml +++ b/third_party/gfxreconstruct/.github/workflows/ci_build.yml @@ -38,6 +38,8 @@ jobs: uses: actions/checkout@v4 with: submodules: 'recursive' + - name: Setup sccache + uses: mozilla-actions/sccache-action@v0.0.9 - name: Install build dependencies run: | sudo apt-get update @@ -51,21 +53,22 @@ jobs: then clang-format-14 --version git fetch origin ${{ github.base_ref }} # Fetch target branch to FETCH_HEAD for code style check. - python3 scripts/build.py --config ${{ matrix.config.type }} --check-code-style-base FETCH_HEAD --parallel 0 --test-apps python3 framework/generated/generate_vulkan.py # check generated code isn't out of date python3 framework/generated/generate_openxr.py # check generated code isn't out of date git diff --exit-code + python3 scripts/build.py --config ${{ matrix.config.type }} --check-code-style-base FETCH_HEAD --parallel 0 --test-apps else python3 scripts/build.py --config ${{ matrix.config.type }} --skip-check-code-style --parallel 0 --test-apps fi + env: + SCCACHE_GHA_ENABLED: on + CMAKE_C_COMPILER_LAUNCHER: sccache + CMAKE_CXX_COMPILER_LAUNCHER: sccache - name: Run test app test cases id: test_apps run: | cd ${{matrix.config.build_dir}}/linux/x64/output/test - sudo useradd test - sudo usermod -a -G docker test - chmod -R g+w . - sudo -n -u test ./run-tests.sh + sudo -n ./run-tests.sh - name: Upload test failure artifacts uses: actions/upload-artifact@v4 if: ${{ failure() && steps.test_apps.conclusion == 'failure' }} @@ -121,13 +124,13 @@ jobs: run: pip install ply - name: Run with VsDevCmd uses: ilammy/msvc-dev-cmd@v1 - - name: Install SDK 20348 + - name: Install SDK 26100 uses: GuillaumeFalourd/setup-windows10-sdk-action@v2 with: - sdk-version: 20348 + sdk-version: 26100 - name: Set WindowsSDKVersion run: - echo ("WindowsSDKVersion=10.0.20348.0\") >> $env:GITHUB_ENV + echo ("WindowsSDKVersion=10.0.26100.0\") >> $env:GITHUB_ENV - name: Clone repository from merge of PR branch and dev branch uses: actions/checkout@v4 with: @@ -195,6 +198,8 @@ jobs: uses: actions/checkout@v4 with: submodules: 'recursive' + - name: Setup sccache + uses: mozilla-actions/sccache-action@v0.0.9 - name: Cache dependencies id: cache-deps uses: actions/cache@v3 @@ -206,7 +211,13 @@ jobs: run: .github/workflows/scripts/build-dependencies-macos.sh - name: Run build script run: | - python3 scripts/build.py --skip-check-code-style --config ${{ matrix.config.type }} --cmake-extra "CMAKE_PREFIX_PATH=$HOME/deps" --cmake-extra CMAKE_OSX_DEPLOYMENT_TARGET=11.0 --parallel 0 --test-apps + python3 scripts/build.py --skip-check-code-style --config ${{ matrix.config.type }} --cmake-extra "CMAKE_PREFIX_PATH=$HOME/deps" --cmake-extra CMAKE_OSX_DEPLOYMENT_TARGET=13.3 --parallel 0 --test-apps + env: + SCCACHE_GHA_ENABLED: on + SCCACHE_CACHE_MULTIARCH: on + SCCACHE_IDLE_TIMEOUT: 0 + CMAKE_C_COMPILER_LAUNCHER: sccache + CMAKE_CXX_COMPILER_LAUNCHER: sccache - name: Run test app test cases id: test_apps run: | @@ -281,9 +292,8 @@ jobs: uses: actions/checkout@v4 with: submodules: 'recursive' - - name: Update submodules - run: | - git submodule update --init + - name: Setup sccache + uses: mozilla-actions/sccache-action@v0.0.9 - name: Set up Java uses: "actions/setup-java@v4" with: @@ -298,6 +308,10 @@ jobs: else sh gradlew assembleDebug -Parm64-v8a fi + env: + SCCACHE_GHA_ENABLED: on + CMAKE_C_COMPILER_LAUNCHER: sccache + CMAKE_CXX_COMPILER_LAUNCHER: sccache - name: Prepare artifacts run: | mkdir gfxreconstruct-dev diff --git a/third_party/gfxreconstruct/.github/workflows/release_build.yml b/third_party/gfxreconstruct/.github/workflows/release_build.yml index 4dd8a0ccb..1bc66ae82 100644 --- a/third_party/gfxreconstruct/.github/workflows/release_build.yml +++ b/third_party/gfxreconstruct/.github/workflows/release_build.yml @@ -24,6 +24,13 @@ on: push: tags: - v[0-9]* + workflow_dispatch: + inputs: + branch_name: + description: 'Branch to run workflow on' + required: true + default: 'dev' + type: string jobs: linux: @@ -35,7 +42,7 @@ jobs: config: - { name: "Ubuntu GCC Release", - os: ubuntu-20.04, + os: ubuntu-latest, artifact: "gfxreconstruct-ubuntu-gcc-release", cc: "gcc", cxx: "g++" } @@ -131,7 +138,7 @@ jobs: run: .github/workflows/scripts/build-dependencies-macos.sh - name: Run build script run: | - python3 scripts/build.py --skip-check-code-style --skip-tests --config ${{ matrix.config.type }} --cmake-extra "CMAKE_PREFIX_PATH=$HOME/deps" --cmake-extra CMAKE_OSX_DEPLOYMENT_TARGET=11.0 --parallel 0 + python3 scripts/build.py --skip-check-code-style --skip-tests --config ${{ matrix.config.type }} --cmake-extra "CMAKE_PREFIX_PATH=$HOME/deps" --cmake-extra CMAKE_OSX_DEPLOYMENT_TARGET=13.3 --parallel 0 - name: Prepare artifacts run: | cp LICENSE.txt ${{ matrix.config.build_dir }}/darwin/universal/output/bin/ @@ -155,19 +162,23 @@ jobs: fail-fast: false matrix: config: - - { - name: "Android Release/Debug", + - { + name: "Android Debug", + os: ubuntu-latest, + type: "debug", + artifact: "gfxreconstruct-android-debug", + } + - { + name: "Android Release", os: ubuntu-latest, - artifact: "gfxreconstruct-android" + type: "release", + artifact: "gfxreconstruct-android-release", } steps: - name: Clone repository uses: actions/checkout@v4 with: submodules: 'recursive' - - name: Update submodules - run: | - git submodule update --init - name: Set up Java uses: "actions/setup-java@v4" with: @@ -176,7 +187,13 @@ jobs: - name: Gradle build run: | cd android - sh gradlew assembleRelease assembleDebug + if [ "${{ matrix.config.type }}" == "release" ] + then + sh gradlew assembleRelease -Parm64-v8a + sh gradlew assembleRelease -Parmeabi-v7a + else + sh gradlew assembleDebug -Parm64-v8a + fi - name: Prepare artifacts run: | mkdir gfxreconstruct-dev @@ -186,9 +203,13 @@ jobs: cp LICENSE_ThirdParty.txt gfxreconstruct-dev/ cp USAGE_android.md gfxreconstruct-dev/ cp layer/vk_layer_settings.txt gfxreconstruct-dev/ - cp -r android/layer/build/intermediates/cxx/RelWithDebInfo/*/obj/arm64-v8a gfxreconstruct-dev/layer/ - cp -r android/layer/build/intermediates/cxx/RelWithDebInfo/*/obj/armeabi-v7a gfxreconstruct-dev/layer/ - cp android/tools/replay/build/outputs/apk/debug/replay-debug.apk gfxreconstruct-dev/tools/ + if [ "${{ matrix.config.type }}" == "release" ] + then + cp -r android/layer/build/intermediates/cxx/RelWithDebInfo/*/obj/arm64-v8a gfxreconstruct-dev/layer/ + cp -r android/layer/build/intermediates/cxx/RelWithDebInfo/*/obj/armeabi-v7a gfxreconstruct-dev/layer/ + else + cp android/tools/replay/build/outputs/apk/debug/replay-debug.apk gfxreconstruct-dev/tools/ + fi cp android/scripts/gfxrecon.py gfxreconstruct-dev/tools/ - name: Upload artifacts uses: actions/upload-artifact@v4 @@ -200,6 +221,7 @@ jobs: name: Create Release for Tag runs-on: ubuntu-latest needs: [ linux, windows, android, macOS ] + if: ${{ github.event_name == 'push' }} steps: - name: Clone repository uses: actions/checkout@v4 @@ -240,6 +262,7 @@ jobs: name: ${{ matrix.config.name }} runs-on: ${{ matrix.config.os }} needs: release + if: ${{ github.event_name == 'push' }} strategy: fail-fast: false matrix: diff --git a/third_party/gfxreconstruct/.github/workflows/scripts/build-dependencies-macos.sh b/third_party/gfxreconstruct/.github/workflows/scripts/build-dependencies-macos.sh index 12a28c5cc..6284a21f0 100755 --- a/third_party/gfxreconstruct/.github/workflows/scripts/build-dependencies-macos.sh +++ b/third_party/gfxreconstruct/.github/workflows/scripts/build-dependencies-macos.sh @@ -7,7 +7,7 @@ export MACOSX_DEPLOYMENT_TARGET=11.0 INSTALLDIR="${INSTALLDIR:-"$HOME/deps"}" NPROCS="${NPROCS:-$(getconf _NPROCESSORS_ONLN)}" ZSTD=1.5.5 -LZ4=1.9.4 +LZ4=1.10.0 ZLIB=1.3.1 mkdir deps-build @@ -19,7 +19,7 @@ export CXXFLAGS="-I$INSTALLDIR/include -Os $CXXFLAGS" cat > SHASUMS < Make Project` menu item or pressing `Ctrl+F9` +3. Build the project by selecting the `Build -> Make Project` menu item or pressing `CTRL+F9` #### Adding the Layer to Existing Projects diff --git a/third_party/gfxreconstruct/CMakeLists.txt b/third_party/gfxreconstruct/CMakeLists.txt index 6d8b1a670..5d617fcc9 100644 --- a/third_party/gfxreconstruct/CMakeLists.txt +++ b/third_party/gfxreconstruct/CMakeLists.txt @@ -32,7 +32,7 @@ set_property(GLOBAL PROPERTY TEST_SCRIPT ${CMAKE_ROOT}) include(GNUInstallDirs) -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 20) set(CXX_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" "${PROJECT_SOURCE_DIR}/external/cmake-modules") @@ -119,6 +119,12 @@ file(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/project_version_$.h" INPUT "${ # Since project_version_$.h differs per build, set a compiler definition that files can use to include it add_definitions(-DPROJECT_VERSION_HEADER_FILE="project_version_$.h") +# Isolate the repo SHA in a library to reduce the amount of recompilation on git commit, checkout, etc. +# Clients should #include PROJECT_VERSION_HEADER_FILE and call GetProjectVersionString() +configure_file("${PROJECT_SOURCE_DIR}/project_version_string.h.in" "${CMAKE_BINARY_DIR}/project_version_string.h") +add_library(project_version STATIC "${PROJECT_SOURCE_DIR}/project_version.cpp") +target_include_directories(project_version PUBLIC "${CMAKE_BINARY_DIR}") + option(BUILD_WERROR "Build with warnings as errors" ON) # Code checks @@ -170,12 +176,25 @@ if (MSVC) message(STATUS "CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION: " ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}) set(GFXR_ARM_WINDOWS_BUILD FALSE) + # These checks help also keeping `cmake-gui` behaviour consistent when default values are passed. + # Some IDEs pass -A in lowercase or in mixed case. # Normalize the CMAKE_GENERATOR_PLATFORM string to upper case to avoid architecture detection mismatch. - string(TOUPPER "${CMAKE_GENERATOR_PLATFORM}" NORMALIZED_CMAKE_GENERATOR_PLATFORM) - if (NORMALIZED_CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64") - set(GFXR_ARM_WINDOWS_BUILD TRUE) - endif () + # can't assume ${CMAKE_GENERATOR_PLATFORM} is always defined and/or non-empty! + if(NOT "${CMAKE_GENERATOR_PLATFORM}" STREQUAL "") + string(TOUPPER "${CMAKE_GENERATOR_PLATFORM}" NORMALIZED_CMAKE_GENERATOR_PLATFORM) + if (NORMALIZED_CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64") + set(GFXR_ARM_WINDOWS_BUILD TRUE) + endif() + else() + # No target platform is specified. Try to compute using native tools architecture. + string(TOUPPER "${CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE}" NORMALIZED_CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE) + if(NORMALIZED_CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE STREQUAL "ARM64") + set(GFXR_ARM_WINDOWS_BUILD TRUE) + endif() + endif() + + message(STATUS "GFXR_ARM_WINDOWS_BUILD: " ${GFXR_ARM_WINDOWS_BUILD}) # Default to using the precompiled LZ4 and ZLIB binaries for VisualStudio builds. set(PRECOMPILED_ARCH "64") @@ -209,7 +228,7 @@ if (MSVC) add_definitions(-DD3D12_SUPPORT) # Check Windows SDK version and print warning if there is a mismatch. - set(EXPECTED_WIN_SDK_VER "10.0.20348.0") + set(EXPECTED_WIN_SDK_VER "10.0.26100.0") if (NOT ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION} STREQUAL ${EXPECTED_WIN_SDK_VER}) message(WARNING "D3D12 support is authored against Windows SDK ${EXPECTED_WIN_SDK_VER}. Windows SDK version " @@ -286,6 +305,10 @@ if (APPLE) ${CMAKE_PREFIX_PATH}) endif () +if(ANDROID) + add_link_options(-Wl,-z,max-page-size=16384) +endif() + # GFXReconstruct provided find modules if (WIN32) find_package(Detours) @@ -393,6 +416,7 @@ target_include_directories(spirv_registry SYSTEM INTERFACE ${PROJECT_SOURCE_DIR} add_library(OpenXR INTERFACE) if (OPENXR_SUPPORT_ENABLED) + option(DYNAMIC_LOADER "" OFF) add_subdirectory(${PROJECT_SOURCE_DIR}/external/OpenXR-SDK) target_include_directories(OpenXR INTERFACE ${PROJECT_SOURCE_DIR}/external/OpenXR-SDK/include) target_compile_definitions(OpenXR INTERFACE XR_NO_PROTOTYPES ENABLE_OPENXR_SUPPORT=1) diff --git a/third_party/gfxreconstruct/CONTRIBUTING.md b/third_party/gfxreconstruct/CONTRIBUTING.md index c19d03d3c..d6e418625 100644 --- a/third_party/gfxreconstruct/CONTRIBUTING.md +++ b/third_party/gfxreconstruct/CONTRIBUTING.md @@ -147,7 +147,7 @@ Now you can freely create your branch ### Branch Naming Naming your branches a clear name will also help to identify what changes -are present in a branch just by looking at the availabe branches on your +are present in a branch just by looking at the available branches on your local machine or a remote repo. Because of this, we suggest naming in the following fashion: @@ -211,7 +211,9 @@ to differentiate the work from other people working in the repo. Changes to the GFXReconstruct project's C++ code should conform to the coding style defined by the -[Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html). +[Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html). Note the exception in the style guide for "STL-like" types and methods (e.g., `value_type`, +`begin`, `end`, `size`) to support concepts, range-based `for`, and `` +usage. These classes should conform to STL naming rules for their public interfaces, and should not duplicate types or methods in the Google style. C++ Code formatting is managed with a custom ClangFormat configuration file. This is the `.clang-format` file found at the base of the repo tree. @@ -222,7 +224,7 @@ for instructions on installing this version for your particular platform) C++ code formatting can be applied to pending changes with the `clang-format` or `git clang-format` commands. -Here's an example of the workflow using `clang-format` to clean up formating +Here's an example of the workflow using `clang-format` to clean up formatting issues in code changes: ```bash @@ -324,7 +326,7 @@ of the following repositories: * VkCube | [Vulkan-Tools Repository](https://github.com/KhronosGroup/Vulkan-Tools) * One or more samples | [Sascha Willems Vulkan Repository](https://github.com/SaschaWillems/Vulkan) -* One or more samples | [Khronos Vulkan Samples Repostiory](https://github.com/KhronosGroup/Vulkan-Samples) +* One or more samples | [Khronos Vulkan Samples Repository](https://github.com/KhronosGroup/Vulkan-Samples) If you modified one of the other tools, such as `gfxrecon-info` or `gfxrecon-convert`, make sure to generate the output and compare before @@ -461,19 +463,22 @@ pull request or other contribution to GitHub. ## Platform-specific ClangFormat Installation -The following is a collection of notes for obtaining ClangFormat version 9.0.1 +The following is a collection of notes for obtaining ClangFormat version 14 on various platforms. ### Visual Studio -- Visual Studio 2019 has built-in support for ClangFormat version 9. -- Visual Studio 2017 has built-in support for an older version of ClangFormat, - but can be changed to use a separately installed ClangFormat version 9 - by following the instructions described here: +- Different versions of Visual Studio have different versions of clang-format + built in. To ensure the best compatibility with GFXR's GitHub checks, version + 14 should be used: + - Install version 14 of clang-format.exe. + - clang-format.exe 14 is included when installing LLVM 14 + - The LLVM 14 release download is available on the [LLVM 14.0.6 release page on GitHub](https://github.com/llvm/llvm-project/releases/tag/llvmorg-14.0.6) + - Point Visual Studio to use the custom clang-format.exe: - Under **Tools->Options...**, expand **Text Editor > C/C++ > Formatting**. - At the bottom is a checkbox for **Use custom clang-format.exe file**. - Select this, and browse to the location of the 9.0.1 version of - `clang-format.exe` that was installed separately. + At the bottom is a checkbox for **Use custom path to clang-format.exe**. + Select this, and browse to the location of `clang-format.exe` that was + installed separately (e.g., `C:\Program Files\LLVM\bin\clang-format.exe`) ### Ubuntu diff --git a/third_party/gfxreconstruct/README.md b/third_party/gfxreconstruct/README.md index 92728e766..05d72acc7 100644 --- a/third_party/gfxreconstruct/README.md +++ b/third_party/gfxreconstruct/README.md @@ -78,7 +78,7 @@ more details **Legend** * :white_check_mark: : Supported -* :x: : Not Suported +* :x: : Not Supported * :large_orange_diamond: : Not supported on Android/Meta Quest, but Desktop tools support modifying the resulting captures * :construction: : Early Preview / Alpha / Beta diff --git a/third_party/gfxreconstruct/TESTING_test_apps.md b/third_party/gfxreconstruct/TESTING_test_apps.md index ba516cf6e..db62bf73d 100644 --- a/third_party/gfxreconstruct/TESTING_test_apps.md +++ b/third_party/gfxreconstruct/TESTING_test_apps.md @@ -90,7 +90,7 @@ To run the test apps and validate output against known good '.gfxr' files, build |---------------|------------------------------------|------------| |Windows| build/windows/x64/output/test |run-tests.ps1| |Linux| build/linux/x64/output/test |run-tests.sh| -|MacOs| build/darwin/universal/output/test |run-tests_macos.sh| +|macOS| build/darwin/universal/output/test |run-tests_macos.sh| ## **Run A Single Test App** diff --git a/third_party/gfxreconstruct/USAGE_android.md b/third_party/gfxreconstruct/USAGE_android.md index d330a669f..357e69767 100644 --- a/third_party/gfxreconstruct/USAGE_android.md +++ b/third_party/gfxreconstruct/USAGE_android.md @@ -19,6 +19,9 @@ to one of these other documents: * [GFXReconstruct for Desktop Vulkan](./USAGE_desktop_Vulkan.md) * [GFXReconstruct for Desktop D3D12](./USAGE_desktop_D3D12.md) +Additional instructions for debugging the GFXReconstruct capture layer on Android can be found here: + * [GFXReconstruct Capture layer debugging - Android](./docs/DEBUG_android.md) + ## Index 1. [Capturing API Calls](#capturing-api-calls) @@ -62,7 +65,7 @@ locations that can be tried are: - `/mnt/shell/emulated/0` Where `${Application Full Name}` is the full name of the application, such -as `com.khronos.vulkand_samples`. +as `com.khronos.vulkan_samples`. Some devices won't allow access to those folders for certain applications. In those cases, the following folders can be used, but will require `adb` root @@ -266,6 +269,18 @@ adb shell settings put global gpu_debug_layers VK_LAYER_LUNARG_gfxreconstruct adb shell settings put global gpu_debug_layer_app com.lunarg.gfxreconstruct.replay ``` +You can also restrict the layer to a specific application using these three steps: +1. Push the GFXReconstruct capture layer to `/data/local/debug/vulkan` directory. +2. Enable the global layer. +3. Set the `capture_process_name` capture option. + +For example like this: +``` +adb shell setprop debug.vulkan.layer.1 VK_LAYER_LUNARG_gfxreconstruct +adb shell setprop debug.gfxrecon.capture_process_name ${Package name} +``` + + If you attempt to capture and nothing is happening, check the `logcat` output. A successful run of GFXReconstruct should show a message like the following: @@ -302,8 +317,9 @@ option values. | Option | Property | Type | Description | | ---------------------------------------------- | ------------------------------------------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Capture File Name | debug.gfxrecon.capture_file | STRING | Path to use when creating the capture file. Default is: `/sdcard/gfxrecon_capture.gfxr` | +| Capture File Name | debug.gfxrecon.capture_file | STRING | Path to use when creating the capture file. Supports variable patterns for dynamic file paths, such as `${AppName}` (the application package name) and `${InternalDataPath}` (app's internal data directory, Android only). For example, `/sdcard/${AppName}/capture.gfxr` will expand to `/sdcard/com.example.your-android-app/capture.gfxr`. Default is: `/sdcard/gfxrecon_capture.gfxr` | | Capture Specific Frames | debug.gfxrecon.capture_frames | STRING | Specify one or more comma-separated frame ranges to capture. Each range will be written to its own file. A frame range can be specified as a single value, to specify a single frame to capture, or as two hyphenated values, to specify the first and last frame to capture. Frame ranges should be specified in ascending order and cannot overlap. Note that frame numbering is 1-based (i.e. the first frame is frame 1). Example: `200,301-305` will create two capture files, one containing a single frame and one containing five frames. Default is: Empty string (all frames are captured). | +| Capture Specific app | debug.gfxrecon.capture_process_name | STRING | Specify one app package name to be captured. Default is: "" | | Quit after capturing frame ranges | debug.gfxrecon.quit_after_capture_frames | BOOL | Setting it to `true` will force the application to terminate once all frame ranges specified by `debug.gfxrecon.capture_frames` have been captured. Default is: `false` | | Capture trigger for Android | debug.gfxrecon.capture_android_trigger | BOOL | Set during runtime to `true` to start capturing and to `false` to stop. If not set at all then it is disabled (non-trimmed capture). Default is not set. | | Capture Trigger Frames | debug.gfxrecon.capture_trigger_frames | STRING | Specify a limit on the number of frames to be captured via trim trigger. Example: `1` will capture exactly one frame when the trimming is triggered. Default is: Empty string (no limit) | @@ -327,10 +343,10 @@ option values. | Page Guard Persistent Memory | debug.gfxrecon.page_guard_persistent_memory | BOOL | When the `page_guard` memory tracking mode is enabled, this option changes the way that the shadow memory used to detect modifications to mapped memory is allocated. The default behavior is to allocate and copy the mapped memory range on map and free the allocation on unmap. When this option is enabled, an allocation with a size equal to that of the object being mapped is made once on the first map and is not freed until the object is destroyed. This option is intended to be used with applications that frequently map and unmap large memory ranges, to avoid frequent allocation and copy operations that can have a negative impact on performance. This option is ignored when GFXRECON_PAGE_GUARD_EXTERNAL_MEMORY is enabled. Default is `false` | | Page Guard Align Buffer Sizes | debug.gfxrecon.page_guard_align_buffer_sizes | BOOL | When the `page_guard` memory tracking mode is enabled, this option overrides the Vulkan API calls that report buffer memory properties to report that buffer sizes and alignments must be a multiple of the system page size. This option is intended to be used with applications that perform CPU writes and GPU writes/copies to different buffers that are bound to the same page of mapped memory, which may result in data being lost when copying pages from the `page_guard` shadow allocation to the real allocation. This data loss can result in visible corruption during capture. Forcing buffer sizes and alignments to a multiple of the system page size prevents multiple buffers from being bound to the same page, avoiding data loss from simultaneous CPU writes to the shadow allocation and GPU writes to the real allocation for different buffers bound to the same page. This option is only available for the Vulkan API. Default is `true` | | Omit calls with NULL AHardwareBuffer* | debug.gfxrecon.omit_null_hardware_buffers | BOOL | Some GFXReconstruct capture files may replay with a NULL AHardwareBuffer* parameter, for example, vkGetAndroidHardwareBufferPropertiesANDROID. Although this is invalid Vulkan usage, some drivers may ignore these calls and some may not. This option causes replay to omit Vulkan calls for which the AHardwareBuffer* would be NULL. Default is `false` | -| Page guard unblock SIGSEGV | debug.gfxrecon.page_guard_unblock_sigsegv | BOOL | When the `page_guard` memory tracking mode is enabled and in the case that SIGSEGV has been marked as blocked in thread's signal mask, setting this enviroment variable to `true` will forcibly re-enable the signal in the thread's signal mask. Default is `false` | -| Page guard signal handler watcher | debug.gfxrecon.page_guard_signal_handler_watcher | BOOL | When the `page_guard` memory tracking mode is enabled, setting this enviroment variable to `true` will spawn a thread which will periodically reinstall the `SIGSEGV` handler if it has been replaced by the application being traced. Default is `false` | +| Page guard unblock SIGSEGV | debug.gfxrecon.page_guard_unblock_sigsegv | BOOL | When the `page_guard` memory tracking mode is enabled and in the case that SIGSEGV has been marked as blocked in thread's signal mask, setting this environment variable to `true` will forcibly re-enable the signal in the thread's signal mask. Default is `false` | +| Page guard signal handler watcher | debug.gfxrecon.page_guard_signal_handler_watcher | BOOL | When the `page_guard` memory tracking mode is enabled, setting this environment variable to `true` will spawn a thread which will periodically reinstall the `SIGSEGV` handler if it has been replaced by the application being traced. Default is `false` | | Page guard signal handler watcher max restores | debug.gfxrecon.page_guard_signal_handler_watcher_max_restores | INTEGER | Sets the number of times the watcher will attempt to restore the signal handler. Setting it to a negative value will make the watcher thread run indefinitely. Default is `1` | -| Force FIFO present mode | debug.gfxrecon.force_fifo_present_mode | BOOL | When the `force_fifo_present_mode` is enabled, force all present modes in vkGetPhysicalDeviceSurfacePresentModesKHR to VK_PRESENT_MODE_FIFO_KHR, app present mode is set in vkCreateSwapchain to VK_PRESENT_MODE_FIFO_KHR. Otherwise the original present mode will be used. Default is: `true` | +| Force FIFO present mode | debug.gfxrecon.force_fifo_present_mode | BOOL | When the `force_fifo_present_mode` is enabled, force all present modes in vkGetPhysicalDeviceSurfacePresentModesKHR to VK_PRESENT_MODE_FIFO_KHR, app present mode is set in vkCreateSwapchain to VK_PRESENT_MODE_FIFO_KHR. Otherwise the original present mode will be used. Default is: `true` | #### Settings File @@ -361,6 +377,52 @@ in the GFXReconstruct GitHub repository at `layer/vk_layer_settings.txt`. Most binary distributions of the GFXReconstruct software will also include a sample settings file. +#### Layer Settings via VK_EXT_layer_settings + +An alternative way to configure the GFXReconstruct Vulkan capture layer is via the Vulkan +`VK_EXT_layer_settings` extension, which allows settings to be passed directly through the +Vulkan API at instance creation time. This is especially useful in environments where +environment variables and settings files are not available or convenient (such as some +launchers or embedded systems). + +GFXReconstruct supports reading capture options from `VkLayerSettingEXT` structures +provided in the `pNext` chain of `VkInstanceCreateInfo` when creating a Vulkan instance. +This allows you to specify settings programmatically, without relying on environment +variables or external files. + +To use this feature, add a `VkLayerSettingsCreateInfoEXT` structure to the `pNext` chain +of your `VkInstanceCreateInfo`, and include settings for the +`VK_LAYER_LUNARG_gfxreconstruct` layer. For example, to set the capture file name: + +```c +const char* capture_file_value[] = { "my_capture.gfxr" }; + +VkLayerSettingEXT capture_file_setting = { + .pLayerName = "VK_LAYER_LUNARG_gfxreconstruct", + .pSettingName = "capture_file", + .type = VK_LAYER_SETTING_TYPE_STRING_EXT, + .valueCount = 1, + .pValues = capture_file_value, +}; + +VkLayerSettingsCreateInfoEXT layer_settings_info = { + .sType = VK_STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT, + .pNext = NULL, + .settingCount = 1, + .pSettings = &capture_file_setting +}; + +VkInstanceCreateInfo instance_info = { + .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, + .pNext = &layer_settings_info, + // ... other fields ... +}; +``` + +Supported settings include: + +- `capture_file` (string): Path to use when creating the capture file (same as `GFXRECON_CAPTURE_FILE`). + #### Selecting Settings for the page_guard Memory Tracking Mode The default settings selected for the `page_guard` memory tracking mode are the @@ -474,7 +536,7 @@ some content may be fast enough using the trigger property may be difficult.) ### Asset files When doing a trimmed capture, `debug.gfxrecon.capture_use_asset_file` gives the -option to dump all assets (images, buffers and descriptors) separetly in a +option to dump all assets (images, buffers and descriptors) separately in a different capture file called the asset file. When this option is enabled assets are tracked and only those that are changed during a tracking period (outside of a trim range) are dumped into the asset file. This first time a @@ -710,6 +772,7 @@ usage: gfxrecon.py replay [-h] [-p LOCAL_FILE] [--version] [--log-level LEVEL] [--screenshot-prefix PREFIX] [--screenshot-interval INTERVAL] [--screenshot-size SIZE] [--screenshot-scale SCALE] + [--capture] [--sfa] [--opcd] [--surface-index N] [--sync] [--remove-unsupported] [--validate] [--onhb] [--use-colorspace-fallback] @@ -719,21 +782,11 @@ usage: gfxrecon.py replay [-h] [-p LOCAL_FILE] [--version] [--log-level LEVEL] [--flush-measurement-range] [--flush-inside-measurement-range] [--sgfs STATUS] [--sgfr FRAME-RANGES] [--wait-before-present] - [-m MODE] [--swapchain MODE] [--vssb] - [--use-captured-swapchain-indices] - [--dump-resources DUMP_RESOURCES] - [--dump-resources-before-draw] - [--dump-resources-image-format FORMAT] - [--dump-resources-scale DR_SCALE] + [-m MODE] [--swapchain MODE] [--present-mode MODE] + [--vssb] [--use-captured-swapchain-indices] + [--dump-resources .json] [--dump-resources-dir DIR] - [--dump-resources-dump-depth-attachment] - [--dump-resources-dump-color-attachment-index N] - [--dump-resources-dump-vertex-index-buffers] - [--dump-resources-json-output-per-command] - [--dump-resources-dump-immutable-resources] - [--dump-resources-dump-all-image-subresources] - [--dump-resources-dump-raw-images] - [--dump-resources-dump-separate-alpha] [--pbi-all] + [--pbi-all] [--pbis RANGES] [--pcj] [--save-pipeline-cache DEVICE_FILE] [--load-pipeline-cache DEVICE_FILE] @@ -813,6 +866,12 @@ options: Scale screenshot dimensions. Overrides --screenshot- size, if specified. Expects a number which can be decimal + --capture Capture the replaying GFXR file. Capture uses the same log + options as replay. All other capture option behavior and + usage is the same as when capturing with the GFXR layer. The + capture functionality is included in the `gfxrecon-replay` + executable--no GFXR capture layer is added to the Vulkan layer + chain. --sfa, --skip-failed-allocations Skip vkAllocateMemory, vkAllocateCommandBuffers, and vkAllocateDescriptorSets calls that failed during @@ -880,7 +939,7 @@ options: frame inside the measurement range. (forwarded to replay tool) --sgfs STATUS, --skip-get-fence-status STATUS - Specify behaviour to skip calls to vkWaitForFences and + Specify behavior to skip calls to vkWaitForFences and vkGetFenceStatus. Default is 0 - No skip (forwarded to replay tool) --sgfr FRAME-RANGES, --skip-get-fence-ranges FRAME-RANGES @@ -899,55 +958,22 @@ options: --swapchain MODE Choose a swapchain mode to replay. Available modes are: virtual, captured, offscreen (forwarded to replay tool) + --present-mode MODE Set swapchain's VkPresentModeKHR. Available modes are: + capture, immediate, mailbox, fifo, fifo_relaxed + (forwarded to replay tool) --vssb, --virtual-swapchain-skip-blit Skip blit to real swapchain to gain performance during replay. --use-captured-swapchain-indices Same as "--swapchain captured". Ignored if the "-- swapchain" option is used. - --dump-resources DUMP_RESOURCES - The capture file will be examined, and will be converted - to as used in --dump-resources . The - converted args will be used used as the args for dump - resources. - --dump-resources-before-draw - In addition to dumping gpu resources after the Vulkan - draw calls specified by the --dump-resources argument, - also dump resources before the draw calls. - --dump-resources-image-format FORMAT - Image file format to use when dumping image resources. - Available formats are: bmp, png - --dump-resources-scale DR_SCALE - tScale images generated by dump resources by the given - scale factor. The scale factor must be a floating - point number greater than 0. Values greater than 10 - are capped at 10. Default value is 1.0. + --dump-resources .json + Extract dump resources block indices and options from the + specified json file. The format for the json file is + documented in detail in vulkan_dump_resources.md. --dump-resources-dir DIR Directory to write dump resources output files. Default is "/sdcard" (forwarded to replay tool) - --dump-resources-dump-depth-attachment - Dump depth attachment when dumping a draw call. - Default is false. - --dump-resources-dump-color-attachment-index N - Specify which color attachment to dump when dumping - draw calls. It should be an unsigned zero based - integer. Default is to dump all color attachments. - --dump-resources-dump-vertex-index-buffers - Enables dumping of vertex and index buffers while - dumping draw call resources. Default is disabled. - --dump-resources-json-output-per-command - Enables storing a json output file for each dumped - command. Default is disabled. - --dump-resources-dump-immutable-resources - Dump immutable immutable shader resources. - --dump-resources-dump-all-image-subresources - Dump all available mip levels and layers when dumping - images. - --dump-resources-dump-raw-images - Dump images verbatim as raw binary files. - --dump-resources-dump-separate-alpha - Dump image alpha in a separate image file. --pbi-all Print all block information. --pbis RANGES Print block information between block index1 and block index2 @@ -985,8 +1011,8 @@ adb shell am force-stop com.lunarg.gfxreconstruct.replay adb shell am start -n "com.lunarg.gfxreconstruct.replay/android.app.NativeActivity" \ -a android.intent.action.MAIN \ -c android.intent.category.LAUNCHER \ - --es "args" \ - "" + --es args \ + '""' ``` If `gfxrecon-replay` was built with Vulkan Validation Layer support, diff --git a/third_party/gfxreconstruct/USAGE_desktop_D3D12.md b/third_party/gfxreconstruct/USAGE_desktop_D3D12.md index 05d4340cb..37ddeb70f 100644 --- a/third_party/gfxreconstruct/USAGE_desktop_D3D12.md +++ b/third_party/gfxreconstruct/USAGE_desktop_D3D12.md @@ -104,13 +104,13 @@ The capture layer will generate a warning message for unrecognized or invalid op Option | Environment Variable | Type | Description ------| ------------- |------|------------- -Capture File Name | GFXRECON_CAPTURE_FILE | STRING | Path to use when creating the capture file. Default is: `gfxrecon_capture.gfxr` +Capture File Name | GFXRECON_CAPTURE_FILE | STRING | Path to use when creating the capture file. Supports variable patterns for dynamic file paths, such as `${AppName}` (the application or executable name). Default is: `gfxrecon_capture.gfxr` Capture Specific Frames | GFXRECON_CAPTURE_FRAMES | STRING | Specify one or more comma-separated frame ranges to capture. Each range will be written to its own file. A frame range can be specified as a single value, to specify a single frame to capture, or as two hyphenated values, to specify the first and last frame to capture. Frame ranges should be specified in ascending order and cannot overlap. Note that frame numbering is 1-based (i.e. the first frame is frame 1). Example: `200,301-305` will create two capture files, one containing a single frame and one containing five frames. Default is: Empty string (all frames are captured). Quit after capturing frame ranges | GFXRECON_QUIT_AFTER_CAPTURE_FRAMES | BOOL | Setting it to `true` will force the application to terminate once all frame ranges specified by `GFXRECON_CAPTURE_FRAMES` have been captured. Default is: `false` Hotkey Capture Trigger | GFXRECON_CAPTURE_TRIGGER | STRING | Specify a hotkey (any one of F1-F12, TAB, CONTROL) that will be used to start/stop capture. Example: `F3` will set the capture trigger to F3 hotkey. One capture file will be generated for each pair of start/stop hotkey presses. Default is: Empty string (hotkey capture trigger is disabled). Hotkey Capture Trigger Frames | GFXRECON_CAPTURE_TRIGGER_FRAMES | STRING | Specify a limit on the number of frames to be captured via hotkey. Example: `1` will capture exactly one frame when the trigger key is pressed. Default is: Empty string (no limit) Capture Specific GPU Queue Submits | GFXRECON_CAPTURE_QUEUE_SUBMITS | STRING | Specify one or more comma-separated GPU queue submit call ranges to capture. Queue submit calls are `vkQueueSubmit` for Vulkan and `ID3D12CommandQueue::ExecuteCommandLists` for DX12. Queue submit ranges work as described above in `GFXRECON_CAPTURE_FRAMES` but on GPU queue submit calls instead of frames. The index is 0-based. Default is: Empty string (all queue submits are captured). -Capture Specific Draw Calls | GFXRECON_CAPTURE_DRAW_CALLS | STRING | Specify one index or a range indices drawacalls(include dispatch) based on a ExecuteCommandList index and a CommandList index to capture. The index is 0-based. The args are one submit index, one command index, one or a range indices of draw calls, one or a range indices of bundle draw calls(option), like "0,0,0" or "0,0,0-2" or "0,0,0-2,0". The forth arg is an option for bundle case. If the the 3rd arg is a bundle commandlist, but it doesn't set the 4th arg, it will set 0 as default. Default is: Empty string (all draw calls are captured). +Capture Specific Draw Calls | GFXRECON_CAPTURE_DRAW_CALLS | STRING | Specify one index or a range indices draw calls(include dispatch) based on a ExecuteCommandList index and a CommandList index to capture. The index is 0-based. The args are one submit index, one command index, one or a range indices of draw calls, one or a range indices of bundle draw calls(option), like "0,0,0" or "0,0,0-2" or "0,0,0-2,0". The forth arg is an option for bundle case. If the the 3rd arg is a bundle commandlist, but it doesn't set the 4th arg, it will set 0 as default. Default is: Empty string (all draw calls are captured). Capture File Compression Type | GFXRECON_CAPTURE_COMPRESSION_TYPE | STRING | Compression format to use with the capture file. Valid values are: `LZ4`, `ZLIB`, `ZSTD`, and `NONE`. Default is: `LZ4` Capture File Timestamp | GFXRECON_CAPTURE_FILE_TIMESTAMP | BOOL | Add a timestamp to the capture file as described by [Timestamps](#timestamps). Default is: `true` Capture File Flush After Write | GFXRECON_CAPTURE_FILE_FLUSH | BOOL | Flush output stream after each packet is written to the capture file. Default is: `false` @@ -133,6 +133,7 @@ Page Guard Persistent Memory | GFXRECON_PAGE_GUARD_PERSISTENT_MEMORY | BOOL | Wh Enable Debug Layer | GFXRECON_DEBUG_LAYER | BOOL | Direct3D 12 only option. Enable the Direct3D debug layer for Direct3D 12 application captures. Default is `false` Debug Device Lost | GFXRECON_DEBUG_DEVICE_LOST | BOOL | Direct3D 12 only option. Enables automatic injection of breadcrumbs into command buffers and page fault reporting. Used to debug device removed problems. Disable DXR Support | GFXRECON_DISABLE_DXR | BOOL | Direct3D 12 only option. Override the result of `CheckFeatureSupport` to report the `RaytracingTier` as `D3D12_RAYTRACING_TIER_NOT_SUPPORTED`. Default is `false` + Disable MetaCommmand Support | GFXRECON_DISABLE_META_COMMAND | BOOL | Direct3D 12 only option. Override the result of `CheckFeatureSupport` to report the D3D12_FEATURE_QUERY_META_COMMAND is invalid. Default is `false`. Some games might use DirectStorage to improve performance, GFXR could not fully support the feature. By using this option, could bypass the feature and force game to use regular I/O to read from hard disk. Acceleration Struct Size Padding | GFXRECON_ACCEL_STRUCT_PADDING | UINT | Direct3D 12 only option. Increase the required acceleration structure size that is reported to the application by calls to `GetRaytracingAccelerationStructurePrebuildInfo`. This can enable replay in environments with increased acceleration structure size requirements. The value should be specified as a percent of size increase. For example, a value of `5` would increase the reported acceleration structure sizes by `5%`. Default is `0` Force Command Serialization | GFXRECON_FORCE_COMMAND_SERIALIZATION | BOOL | Sets exclusive locks(unique_lock) for every ApiCall. It can avoid external multi-thread to cause captured issue. Enable Experimental RV Search | GFXRECON_RV_ANNOTATION_EXPERIMENTAL | BOOL | Direct3D 12 only option. Experimental feature to help enable replay of certain DXR/ExecuteIndirect workloads. RV annotation is a capture mode which attempts to detect when applications write Resource Values (RVs) to memory. Conceptually, RVs represent different types of GPU pointers that applications write as resource data. This capture mode writes GFXR-specific identifier values into unoccupied bits of application-facing RVs and then searches for the identifier values when the application performs a memory write. This allows GFXR to better track RV locations and eventually produce an RV-optimized capture file that may be replayed. Enabling this feature introduces performance overhead during capture, and may result in unstable capture and/or replay. diff --git a/third_party/gfxreconstruct/USAGE_desktop_OpenXR.md b/third_party/gfxreconstruct/USAGE_desktop_OpenXR.md index d772fa0b9..a15960e37 100644 --- a/third_party/gfxreconstruct/USAGE_desktop_OpenXR.md +++ b/third_party/gfxreconstruct/USAGE_desktop_OpenXR.md @@ -14,7 +14,7 @@ Copyright © 2022 Advanced Micro Devices, Inc. # GFXReconstruct API Capture and Replay - OpenXR ***This document describes the GFXReconstruct software for capturing and -replaying OpenXR on Desktop systems (i.e. Windows, Linux, MacOS).*** +replaying OpenXR on Desktop systems (i.e. Windows, Linux, macOS).*** If you are looking for capturing/replaying on a different platform, please refer to one of these other documents: diff --git a/third_party/gfxreconstruct/USAGE_desktop_Vulkan.md b/third_party/gfxreconstruct/USAGE_desktop_Vulkan.md index 7e508e95b..d56339ead 100644 --- a/third_party/gfxreconstruct/USAGE_desktop_Vulkan.md +++ b/third_party/gfxreconstruct/USAGE_desktop_Vulkan.md @@ -14,7 +14,7 @@ Copyright © 2022 Advanced Micro Devices, Inc. # GFXReconstruct API Capture and Replay - Vulkan ***This document describes the GFXReconstruct software for capturing and -replaying Vulkan API calls on Desktop systems (i.e. Windows, Linux, MacOS).*** +replaying Vulkan API calls on Desktop systems (i.e. Windows, Linux, macOS).*** If you are looking for capturing/replaying on a different platform, please refer to one of these other documents: @@ -125,6 +125,16 @@ The following command would be executed from the command line to set the export VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_gfxreconstruct ``` +#### Capture specific app + +##### Capture specific app for Windows + +set GFXRECON_CAPTURE_PROCESS_NAME=your_app_name + +##### Capture specific app for Linux + +export GFXRECON_CAPTURE_PROCESS_NAME=your_app_name + #### Understanding GFXReconstruct Layer Memory Capture The Vulkan API allows Vulkan memory objects to be mapped by an application @@ -274,8 +284,9 @@ option values. | Option | Environment Variable | Type | Description | | ---------------------------------------------- | ------------------------------------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Capture File Name | GFXRECON_CAPTURE_FILE | STRING | Path to use when creating the capture file. Default is: `gfxrecon_capture.gfxr` | +| Capture File Name | GFXRECON_CAPTURE_FILE | STRING | Path to use when creating the capture file. Supports variable patterns for dynamic file paths, such as `${AppName}` (the application or executable name). Default is: `gfxrecon_capture.gfxr` | | Capture Specific Frames | GFXRECON_CAPTURE_FRAMES | STRING | Specify one or more comma-separated frame ranges to capture. Each range will be written to its own file. A frame range can be specified as a single value, to specify a single frame to capture, or as two hyphenated values, to specify the first and last frame to capture. Frame ranges should be specified in ascending order and cannot overlap. Note that frame numbering is 1-based (i.e. the first frame is frame 1). Example: `200,301-305` will create two capture files, one containing a single frame and one containing five frames. Default is: Empty string (all frames are captured). | +| Capture specific app | GFXRECON_CAPTURE_PROCESS_NAME | STRING | Specify one app name to be captured. Default is: "" | | Quit after capturing frame ranges | GFXRECON_QUIT_AFTER_CAPTURE_FRAMES | BOOL | Setting it to `true` will force the application to terminate once all frame ranges specified by `GFXRECON_CAPTURE_FRAMES` have been captured. Default is: `false` | | Hotkey Capture Trigger | GFXRECON_CAPTURE_TRIGGER | STRING | Specify a hotkey (any one of F1-F12, TAB, CONTROL) that will be used to start/stop capture. Example: `F3` will set the capture trigger to F3 hotkey. One capture file will be generated for each pair of start/stop hotkey presses. Default is: Empty string (hotkey capture trigger is disabled). | | Hotkey Capture Trigger Frames | GFXRECON_CAPTURE_TRIGGER_FRAMES | STRING | Specify a limit on the number of frames to be captured via hotkey. Example: `1` will capture exactly one frame when the trigger key is pressed. Default is: Empty string (no limit) | @@ -301,12 +312,12 @@ option values. | Page Guard External Memory | GFXRECON_PAGE_GUARD_EXTERNAL_MEMORY | BOOL | When the `page_guard` memory tracking mode is enabled, use the VK_EXT_external_memory_host extension to eliminate the need for shadow memory allocations. For each memory allocation from a host visible memory type, the capture layer will create an allocation from system memory, which it can monitor for write access, and provide that allocation to vkAllocateMemory as external memory. Only available on Windows. Default is `false` | | Page Guard Persistent Memory | GFXRECON_PAGE_GUARD_PERSISTENT_MEMORY | BOOL | When the `page_guard` memory tracking mode is enabled, this option changes the way that the shadow memory used to detect modifications to mapped memory is allocated. The default behavior is to allocate and copy the mapped memory range on map and free the allocation on unmap. When this option is enabled, an allocation with a size equal to that of the object being mapped is made once on the first map and is not freed until the object is destroyed. This option is intended to be used with applications that frequently map and unmap large memory ranges, to avoid frequent allocation and copy operations that can have a negative impact on performance. This option is ignored when GFXRECON_PAGE_GUARD_EXTERNAL_MEMORY is enabled. Default is `false` | | Page Guard Align Buffer Sizes | GFXRECON_PAGE_GUARD_ALIGN_BUFFER_SIZES | BOOL | When the `page_guard` memory tracking mode is enabled, this option overrides the Vulkan API calls that report buffer memory properties to report that buffer sizes and alignments must be a multiple of the system page size. This option is intended to be used with applications that perform CPU writes and GPU writes/copies to different buffers that are bound to the same page of mapped memory, which may result in data being lost when copying pages from the `page_guard` shadow allocation to the real allocation. This data loss can result in visible corruption during capture. Forcing buffer sizes and alignments to a multiple of the system page size prevents multiple buffers from being bound to the same page, avoiding data loss from simultaneous CPU writes to the shadow allocation and GPU writes to the real allocation for different buffers bound to the same page. This option is only available for the Vulkan API. Default is `true` | -| Page Guard Unblock SIGSEGV | GFXRECON_PAGE_GUARD_UNBLOCK_SIGSEGV | BOOL | When the `page_guard` memory tracking mode is enabled and in the case that SIGSEGV has been marked as blocked in thread's signal mask, setting this enviroment variable to `true` will forcibly re-enable the signal in the thread's signal mask. Default is `false` | -| Page Guard Signal Handler Watcher | GFXRECON_PAGE_GUARD_SIGNAL_HANDLER_WATCHER | BOOL | When the `page_guard` memory tracking mode is enabled, setting this enviroment variable to `true` will spawn a thread which will will periodically reinstall the `SIGSEGV` handler if it has been replaced by the application being traced. Default is `false` | +| Page Guard Unblock SIGSEGV | GFXRECON_PAGE_GUARD_UNBLOCK_SIGSEGV | BOOL | When the `page_guard` memory tracking mode is enabled and in the case that SIGSEGV has been marked as blocked in thread's signal mask, setting this environment variable to `true` will forcibly re-enable the signal in the thread's signal mask. Default is `false` | +| Page Guard Signal Handler Watcher | GFXRECON_PAGE_GUARD_SIGNAL_HANDLER_WATCHER | BOOL | When the `page_guard` memory tracking mode is enabled, setting this environment variable to `true` will spawn a thread which will will periodically reinstall the `SIGSEGV` handler if it has been replaced by the application being traced. Default is `false` | | Page Guard Signal Handler Watcher Max Restores | GFXRECON_PAGE_GUARD_SIGNAL_HANDLER_WATCHER_MAX_RESTORES | INTEGER | Sets the number of times the watcher will attempt to restore the signal handler. Setting it to a negative will make the watcher thread run indefinitely. Default is `1` | | Force Command Serialization | GFXRECON_FORCE_COMMAND_SERIALIZATION | BOOL | Sets exclusive locks(unique_lock) for every ApiCall. It can avoid external multi-thread to cause captured issue. | -| Queue Zero Only | GFXRECON_QUEUE_ZERO_ONLY | BOOL | Forces to using only QueueFamilyIndex: 0 and queueCount: 1 on capturing to avoid replay error for unavailble VkQueue. | -| Allow Pipeline Compile Required | GFXRECON_ALLOW_PIPELINE_COMPILE_REQUIRED | BOOL | The default behaviour forces VK_PIPELINE_COMPILE_REQUIRED to be returned from Create*Pipelines calls which have VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT set, and skips dispatching and recording the calls. This forces applications to fallback to recompiling pipelines without caching, the Vulkan calls for which will be captured. Enabling this option causes capture to record the application's calls and implementation's return values unmodified, but the resulting captures are fragile to changes in Vulkan implementations if they use pipeline caching. | +| Queue Zero Only | GFXRECON_QUEUE_ZERO_ONLY | BOOL | Forces to using only QueueFamilyIndex: 0 and queueCount: 1 on capturing to avoid replay error for unavailable VkQueue. | +| Allow Pipeline Compile Required | GFXRECON_ALLOW_PIPELINE_COMPILE_REQUIRED | BOOL | The default behavior forces VK_PIPELINE_COMPILE_REQUIRED to be returned from Create*Pipelines calls which have VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT set, and skips dispatching and recording the calls. This forces applications to fallback to recompiling pipelines without caching, the Vulkan calls for which will be captured. Enabling this option causes capture to record the application's calls and implementation's return values unmodified, but the resulting captures are fragile to changes in Vulkan implementations if they use pipeline caching. | | Stop Recording Calls in Threads With Invalid Data | GFXRECON_SKIP_THREADS_WITH_INVALID_DATA | BOOL | When a thread is encountered which contains data that is unexpected, skip the data and mark the thread as skippable. This is important especially in OpenXR where other API commands (such as Vulkan) may be generated inside of the OpenXR commands, but may still be referenced in some fashion outside of the OpenXR commands. This results in issues during replay. So, this option prevents those commands, and the threads containing those commands from being recorded to the capture file. Default is `false` and it is only valid when OpenXR capture is enabled. | #### Memory Tracking Known Issues @@ -377,6 +388,52 @@ in the GFXReconstruct GitHub repository at `layer/vk_layer_settings.txt`. Most binary distributions of the GFXReconstruct software will also include a sample settings file. +#### Layer Settings via VK_EXT_layer_settings + +An alternative way to configure the GFXReconstruct Vulkan capture layer is via the Vulkan +`VK_EXT_layer_settings` extension, which allows settings to be passed directly through the +Vulkan API at instance creation time. This is especially useful in environments where +environment variables and settings files are not available or convenient (such as some +launchers or embedded systems). + +GFXReconstruct supports reading capture options from `VkLayerSettingEXT` structures +provided in the `pNext` chain of `VkInstanceCreateInfo` when creating a Vulkan instance. +This allows you to specify settings programmatically, without relying on environment +variables or external files. + +To use this feature, add a `VkLayerSettingsCreateInfoEXT` structure to the `pNext` chain +of your `VkInstanceCreateInfo`, and include settings for the +`VK_LAYER_LUNARG_gfxreconstruct` layer. For example, to set the capture file name: + +```c +const char* capture_file_value[] = { "my_capture.gfxr" }; + +VkLayerSettingEXT capture_file_setting = { + .pLayerName = "VK_LAYER_LUNARG_gfxreconstruct", + .pSettingName = "capture_file", + .type = VK_LAYER_SETTING_TYPE_STRING_EXT, + .valueCount = 1, + .pValues = capture_file_value, +}; + +VkLayerSettingsCreateInfoEXT layer_settings_info = { + .sType = VK_STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT, + .pNext = NULL, + .settingCount = 1, + .pSettings = &capture_file_setting +}; + +VkInstanceCreateInfo instance_info = { + .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, + .pNext = &layer_settings_info, + // ... other fields ... +}; +``` + +Supported settings include: + +- `capture_file` (string): Path to use when creating the capture file (same as `GFXRECON_CAPTURE_FILE`). + #### Selecting Settings for the page_guard Memory Tracking Mode The default settings selected for the `page_guard` memory tracking mode are the settings that are most likely to work on a given platform, but may not provide the best performance for all cases. @@ -455,7 +512,7 @@ configured to capture only from frame 100 through frame 200 into a new capture f ### Asset files When doing a trimmed capture, `GFXRECON_CAPTURE_USE_ASSET_FILE` gives the option to -dump all assets (images, buffers and descriptors) separetly in a different capture +dump all assets (images, buffers and descriptors) separately in a different capture file called the asset file. When this option is enabled assets are tracked and only those that are changed during a tracking period (outside of a trim range) are dumped into the asset file. This first time a trim range is encountered (or the @@ -557,12 +614,14 @@ gfxrecon-replay [-h | --help] [--version] [--cpu-mask ] [-- [--screenshot-dir ] [--screenshot-prefix ] [--screenshot-scale SCALE] [--screenshot-size WIDTHxHEIGHT] [--screenshot-interval ] + [--capture] [--sfa | --skip-failed-allocations] [--replace-shaders ] [--opcd | --omit-pipeline-cache-data] [--wsi ] [--surface-index ] [--remove-unsupported] [--validate] [-m | --memory-translation ] [--fwo | --force-windowed-origin ] [--swapchain MODE] [--use-captured-swapchain-indices] + [--present-mode ] [--mfr|--measurement-frame-range -] [--measurement-file ] [--quit-after-measurement-range] [--flush-measurement-range] @@ -570,21 +629,11 @@ gfxrecon-replay [-h | --help] [--version] [--cpu-mask ] [-- [--debug-messenger-level ] [--no-debug-popup] [--use-colorspace-fallback] [--wait-before-present] - [--dump-resources ] - [--dump-resources ] - [--dump-resources ] [--dump-resources .json] - [--dump-resources-before-draw] [--dump-resources-scale ] [--dump-resources-dir ] - [--dump-resources-image-format ] - [--dump-resources-dump-depth-attachment] - [--dump-resources-dump-color-attachment-index ] - [--dump-resources-dump-vertex-index-buffers] - [--dump-resources-json-output-per-command] - [--dump-resources-dump-immutable-resources] - [--dump-resources-dump-all-image-subresources] [--pbi-all] [--pbis ] [--pipeline-creation-jobs | --pcj ] + [--deduplicate-device] Required arguments: @@ -665,6 +714,12 @@ Optional arguments: unspecified screenshots will use the swapchain images dimensions. If --screenshot-scale is also specified then this option is ignored. + --capture Capture the replaying GFXR file. Capture uses the same log + options as replay. All other capture option behavior and + usage is the same as when capturing with the GFXR layer. The + capture functionality is included in the `gfxrecon-replay` + executable--no GFXR capture layer is added to the Vulkan layer + chain. --sfa Skip vkAllocateMemory, vkAllocateCommandBuffers, and vkAllocateDescriptorSets calls that failed during capture (same as --skip-failed-allocations). @@ -718,6 +773,13 @@ Optional arguments: capture directly on the swapchain setup for replay. offscreen Disable creating swapchains, surfaces and windows. To see rendering, add the --screenshots option. + --present-mode Set swapchain's VkPresentModeKHR. + Available modes are: + capture: Present mode used at capture time. + immediate: VK_PRESENT_MODE_IMMEDIATE_KHR + mailbox: VK_PRESENT_MODE_MAILBOX_KHR + fifo: VK_PRESENT_MODE_FIFO_KHR + fifo_relaxed: VK_PRESENT_MODE_FIFO_RELAXED_KHR --vssb Skip blit to real swapchain to gain performance during replay. --use-captured-swapchain-indices @@ -758,10 +820,10 @@ Optional arguments: This allows preserving frames when capturing a replay that uses. offscreen swapchain. --sgfs - Specify behaviour to skip calls to vkWaitForFences and vkGetFenceStatus: + Specify behavior to skip calls to vkWaitForFences and vkGetFenceStatus: status=0 : Don't skip status=1 : Skip unsuccessful calls - status=2 : Allways skip + status=2 : Always skip If no skip frame range is specified (--sgfr), the status applies to all frames. --sgfr @@ -771,65 +833,12 @@ Optional arguments: Force wait on completion of queue operations for all queues before calling Present. This is needed for accurate acquisition of instrumentation data on some platforms. - --dump-resources - The capture file will be examined, and - will be converted to as used in --dump-resources below. - The converted args will be used as the args for dump resources. - --dump-resources - is BeginCommandBuffer=,Draw=,BeginRenderPass=

, - NextSubpass=,EndRenderPass=,Dispatch=,TraceRays=, - QueueSubmit= - Dump gpu resources after the given vmCmdDraw*, vkCmdDispatch, or vkCmdTraceRaysKHR - is replayed. The parameter for each is a block index from the capture file. The - additional parameters are used to identify during which occurence of the - vkCmdDraw/vkCmdDispatch/vkCmdTraceRaysKHR resources will be dumped. NextSubPass can - be repeated 0 or more times to indicate subpasses within a render pass. Note that - the minimal set of parameters must be one of: - BeginCmdBuffer, Draw, BeginRenderPass, EndRenderPass, and QueueSubmit - BeginCmdBuffer, Dispatch and QueueSubmit - BeginCmdBuffer, TraceRays and QueueSubmit - --dump-resources - Extract --dump-resources block indices args from the specified file, with each line in - the file containing a comma or space separated list of the parameters to - --dump-resources . The file can contain multiple lines specifying multiple dumps. --dump-resources .json - Extract --dump-resources block indices args from the specified json file. The format for the - json file is documented in detail in the gfxreconstruct documentation. - --dump-resources-image-format - Image file format to use for image resource dumping. - Available formats are: - bmp Bitmap file format. This is the default format. - png Png file format. - --dump-resources-before-draw - In addition to dumping gpu resources after the CmdDraw, CmdDispatch and CmdTraceRays calls - specified by the --dump-resources , also dump resources before those - calls. - --dump-resources-scale - Scale images generated by dump resources by the given scale factor. The scale factor must - be a floating point number greater than 0. Values greater than 10 are capped at 10. Default - value is 1.0. + Extract dump resources block indices and options from the + specified json file. The format for the json file is + documented in detail in vulkan_dump_resources.md. --dump-resources-dir

Directory to write dump resources output files. Default is the current working directory. - --dump-resources-image-format - Image file format to use when dumping image resources. Available formats are: bmp, png - --dump-resources-dump-depth-attachment - Configures whether to dump the depth attachment when dumping draw calls. Default is disabled. - --dump-resources-dump-color-attachment-index - Specify which color attachment to dump when dumping draw calls. It should be an unsigned zero - based integer. Default is to dump all color attachments. - --dump-resources-dump-vertex-index-buffers - Enables dumping of vertex and index buffers while dumping draw call resources. - --dump-resources-json-output-per-command - Enables storing a json output file for each dumped command. Overrides default behavior which - is generating one output json file that contains the information for all dumped commands. - --dump-resources-dump-immutable-resources - Enables dumping of resources that are used as inputs in the commands requested for dumping. - --dump-resources-dump-all-image-subresources - Enables dumping of all image sub resources (mip map levels and array layers). - --dump-resources-dump-raw-images - When enabled all image resources will be dumped verbatim as raw bin files. - --dump-resources-dump-separate-alpha - When enabled alpha channel of dumped images will be dumped in a separate file. --pbi-all Print all block information. --pbis @@ -852,6 +861,9 @@ Optional arguments: `--load-pipeline-cache`. --quit-after-frame Specify a frame after which replay will terminate. + + --deduplicate-device + If set, at most one VkDevice will be created for each VkPhysicalDevice for RenderDoc and DXVK case. ``` ### Key Controls @@ -871,7 +883,7 @@ Virtual Swapchain insulates higher layers in the Vulkan stack from these problem ### Debug mode VMA errors -gfxrec-replay with the -m rebind option uses the Vulkan Memory Allocator library for memory allocations. If gfxrecon-replay is compiled debuggable, VMA_ASSERT errors in VMA can be trapped for debugging by setting GFXRECON_LOG_BREAK_ON_ERROR to true. +gfxrecon-replay with the -m rebind option uses the Vulkan Memory Allocator library for memory allocations. If gfxrecon-replay is compiled debuggable, VMA_ASSERT errors in VMA can be trapped for debugging by setting GFXRECON_LOG_BREAK_ON_ERROR to true. ### Fence skipping diff --git a/third_party/gfxreconstruct/android/build.gradle b/third_party/gfxreconstruct/android/build.gradle index 168d507af..0a2625a1b 100644 --- a/third_party/gfxreconstruct/android/build.gradle +++ b/third_party/gfxreconstruct/android/build.gradle @@ -7,7 +7,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:8.1.2' + classpath 'com.android.tools.build:gradle:8.13.0' // NOTE: Do not place your application dependencies here; they belong diff --git a/third_party/gfxreconstruct/android/framework/cmake-config/PlatformConfig.cmake b/third_party/gfxreconstruct/android/framework/cmake-config/PlatformConfig.cmake index 720f263e2..f2c5a8abf 100644 --- a/third_party/gfxreconstruct/android/framework/cmake-config/PlatformConfig.cmake +++ b/third_party/gfxreconstruct/android/framework/cmake-config/PlatformConfig.cmake @@ -1,4 +1,4 @@ -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 20) set(CXX_STANDARD_REQUIRED ON) # because the NDK sets CMAKE_FIND_ROOT_PATH_MODE_* to ONLY, it ignores @@ -61,6 +61,12 @@ file(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/project_version_$.h" INPUT "${ # Since project_version_$.h differs per build, set a compiler definition that files can use to include it add_definitions(-DPROJECT_VERSION_HEADER_FILE="project_version_$.h") +# Isolate the repo SHA in a library to reduce the amount of recompilation on git commit, checkout, etc. +# Clients should #include PROJECT_VERSION_HEADER_FILE and call GetProjectVersionString() +configure_file("${GFXRECON_SOURCE_DIR}/project_version_string.h.in" "${CMAKE_BINARY_DIR}/project_version_string.h") +add_library(project_version "${GFXRECON_SOURCE_DIR}/project_version.cpp") +target_include_directories(project_version PUBLIC "${CMAKE_BINARY_DIR}") + add_library(platform_specific INTERFACE) target_compile_definitions(platform_specific INTERFACE _FILE_OFFSET_BITS=64 diff --git a/third_party/gfxreconstruct/android/framework/decode/CMakeLists.txt b/third_party/gfxreconstruct/android/framework/decode/CMakeLists.txt index f5f531a1f..08ecbf0b9 100644 --- a/third_party/gfxreconstruct/android/framework/decode/CMakeLists.txt +++ b/third_party/gfxreconstruct/android/framework/decode/CMakeLists.txt @@ -4,6 +4,11 @@ target_sources(gfxrecon_decode PRIVATE ${GFXRECON_SOURCE_DIR}/framework/decode/annotation_handler.h ${GFXRECON_SOURCE_DIR}/framework/decode/api_decoder.h + ${GFXRECON_SOURCE_DIR}/framework/decode/api_payload.h + ${GFXRECON_SOURCE_DIR}/framework/decode/block_buffer.h + ${GFXRECON_SOURCE_DIR}/framework/decode/block_buffer.cpp + ${GFXRECON_SOURCE_DIR}/framework/decode/block_parser.h + ${GFXRECON_SOURCE_DIR}/framework/decode/block_parser.cpp ${GFXRECON_SOURCE_DIR}/framework/decode/common_consumer_base.h ${GFXRECON_SOURCE_DIR}/framework/decode/common_handle_mapping_util.h ${GFXRECON_SOURCE_DIR}/framework/decode/common_object_info_table.h @@ -67,6 +72,8 @@ target_sources(gfxrecon_decode $<$:${GFXRECON_SOURCE_DIR}/framework/decode/openxr_tracked_object_info_table.cpp> ${GFXRECON_SOURCE_DIR}/framework/decode/mark_injected_commands.h ${GFXRECON_SOURCE_DIR}/framework/decode/mark_injected_commands.cpp + ${GFXRECON_SOURCE_DIR}/framework/decode/parsed_block.h + ${GFXRECON_SOURCE_DIR}/framework/decode/parsed_block.cpp ${GFXRECON_SOURCE_DIR}/framework/decode/pointer_decoder_base.h ${GFXRECON_SOURCE_DIR}/framework/decode/pointer_decoder.h ${GFXRECON_SOURCE_DIR}/framework/decode/portability.h @@ -100,8 +107,6 @@ target_sources(gfxrecon_decode ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_captured_swapchain.h ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_captured_swapchain.cpp ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_enum_util.h - ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_feature_util.h - ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_feature_util.cpp ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_handle_mapping_util.h ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_handle_mapping_util.cpp ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_object_cleanup_util.h @@ -127,14 +132,19 @@ target_sources(gfxrecon_decode ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources.cpp ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_common.h ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_common.cpp + ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_as.h + ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_as.cpp ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_draw_calls.h ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_draw_calls.cpp ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_compute_ray_tracing.h ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_compute_ray_tracing.cpp ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_delegate.h ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_delegate.cpp + ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_delegate_dumped_resources.h ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_json.h ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_json.cpp + ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_transfer.h + ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_replay_dump_resources_transfer.cpp ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_resource_allocator.h ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_resource_initializer.h ${GFXRECON_SOURCE_DIR}/framework/decode/vulkan_resource_initializer.cpp @@ -172,7 +182,6 @@ target_sources(gfxrecon_decode ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_consumer.h ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_decoder.h ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_decoder.cpp - ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_feature_util.cpp ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_pnext_struct_decoder.cpp ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_replay_consumer.h ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_replay_consumer.cpp diff --git a/third_party/gfxreconstruct/android/framework/encode/CMakeLists.txt b/third_party/gfxreconstruct/android/framework/encode/CMakeLists.txt index 5bc383a76..06d465057 100644 --- a/third_party/gfxreconstruct/android/framework/encode/CMakeLists.txt +++ b/third_party/gfxreconstruct/android/framework/encode/CMakeLists.txt @@ -45,6 +45,9 @@ target_sources(gfxrecon_encode ${GFXRECON_SOURCE_DIR}/framework/encode/scoped_destroy_lock.h ${GFXRECON_SOURCE_DIR}/framework/encode/scoped_destroy_lock.cpp ${GFXRECON_SOURCE_DIR}/framework/encode/struct_pointer_encoder.h + ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_acceleration_structure_build_state.h + ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_capture_layer_settings.h + ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_capture_layer_settings.cpp ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_capture_manager.h ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_capture_manager.cpp ${GFXRECON_SOURCE_DIR}/framework/encode/vulkan_device_address_tracker.h @@ -93,4 +96,4 @@ target_include_directories(gfxrecon_encode ${CMAKE_BINARY_DIR} ${GFXRECON_SOURCE_DIR}/framework) -target_link_libraries(gfxrecon_encode gfxrecon_graphics gfxrecon_format gfxrecon_util vulkan_registry platform_specific android) +target_link_libraries(gfxrecon_encode gfxrecon_graphics gfxrecon_format gfxrecon_util vulkan_registry platform_specific project_version android) diff --git a/third_party/gfxreconstruct/android/framework/graphics/CMakeLists.txt b/third_party/gfxreconstruct/android/framework/graphics/CMakeLists.txt index 4a46e4964..a7da1f0d3 100644 --- a/third_party/gfxreconstruct/android/framework/graphics/CMakeLists.txt +++ b/third_party/gfxreconstruct/android/framework/graphics/CMakeLists.txt @@ -14,11 +14,14 @@ target_sources(gfxrecon_graphics ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_resources_util.cpp ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_util.h ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_util.cpp + ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_feature_util.h + ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_feature_util.cpp ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_struct_deep_copy.h ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_struct_get_pnext.h ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_dispatch_table.h ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_deep_copy.cpp ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_struct_deep_copy_stype.cpp + ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_feature_util.cpp ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_struct_extract_handles.h ${GFXRECON_SOURCE_DIR}/framework/graphics/vulkan_struct_extract_handles.cpp ) diff --git a/third_party/gfxreconstruct/android/framework/util/CMakeLists.txt b/third_party/gfxreconstruct/android/framework/util/CMakeLists.txt index c8ebd70a0..ab421ba09 100644 --- a/third_party/gfxreconstruct/android/framework/util/CMakeLists.txt +++ b/third_party/gfxreconstruct/android/framework/util/CMakeLists.txt @@ -19,15 +19,20 @@ target_sources(gfxrecon_util ${GFXRECON_SOURCE_DIR}/framework/util/argument_parser.cpp ${GFXRECON_SOURCE_DIR}/framework/util/buffer_writer.h ${GFXRECON_SOURCE_DIR}/framework/util/buffer_writer.cpp + ${GFXRECON_SOURCE_DIR}/framework/util/clock_cache.h ${GFXRECON_SOURCE_DIR}/framework/util/compressor.h ${GFXRECON_SOURCE_DIR}/framework/util/date_time.h ${GFXRECON_SOURCE_DIR}/framework/util/date_time.cpp ${GFXRECON_SOURCE_DIR}/framework/util/defines.h + ${GFXRECON_SOURCE_DIR}/framework/util/file_input_stream.h + ${GFXRECON_SOURCE_DIR}/framework/util/file_input_stream.cpp ${GFXRECON_SOURCE_DIR}/framework/util/file_output_stream.h ${GFXRECON_SOURCE_DIR}/framework/util/file_output_stream.cpp ${GFXRECON_SOURCE_DIR}/framework/util/file_path.h ${GFXRECON_SOURCE_DIR}/framework/util/file_path.cpp ${GFXRECON_SOURCE_DIR}/framework/util/hash.h + ${GFXRECON_SOURCE_DIR}/framework/util/heap_buffer.h + ${GFXRECON_SOURCE_DIR}/framework/util/heap_buffer.cpp ${GFXRECON_SOURCE_DIR}/framework/util/image_writer.h ${GFXRECON_SOURCE_DIR}/framework/util/image_writer.cpp ${GFXRECON_SOURCE_DIR}/framework/util/json_util.h @@ -53,6 +58,7 @@ target_sources(gfxrecon_util ${GFXRECON_SOURCE_DIR}/framework/util/platform.h ${GFXRECON_SOURCE_DIR}/framework/util/settings_loader.h ${GFXRECON_SOURCE_DIR}/framework/util/settings_loader.cpp + ${GFXRECON_SOURCE_DIR}/framework/util/span.h ${GFXRECON_SOURCE_DIR}/framework/util/spirv_helper.h ${GFXRECON_SOURCE_DIR}/framework/util/spirv_parsing_util.h ${GFXRECON_SOURCE_DIR}/framework/util/spirv_parsing_util.cpp @@ -60,6 +66,7 @@ target_sources(gfxrecon_util ${GFXRECON_SOURCE_DIR}/framework/util/strings.cpp ${GFXRECON_SOURCE_DIR}/framework/util/thread_data.h ${GFXRECON_SOURCE_DIR}/framework/util/thread_data.cpp + ${GFXRECON_SOURCE_DIR}/framework/util/type_traits_extras.h ${GFXRECON_SOURCE_DIR}/framework/util/to_string.h ${GFXRECON_SOURCE_DIR}/framework/util/to_string.cpp ${GFXRECON_SOURCE_DIR}/framework/util/options.h diff --git a/third_party/gfxreconstruct/android/gradle/wrapper/gradle-wrapper.jar b/third_party/gfxreconstruct/android/gradle/wrapper/gradle-wrapper.jar index f6b961fd5..1b33c55ba 100644 Binary files a/third_party/gfxreconstruct/android/gradle/wrapper/gradle-wrapper.jar and b/third_party/gfxreconstruct/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/third_party/gfxreconstruct/android/gradle/wrapper/gradle-wrapper.properties b/third_party/gfxreconstruct/android/gradle/wrapper/gradle-wrapper.properties index 5d0d485d7..ca025c83a 100644 --- a/third_party/gfxreconstruct/android/gradle/wrapper/gradle-wrapper.properties +++ b/third_party/gfxreconstruct/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ -#Tue Oct 22 12:46:14 MDT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-all.zip diff --git a/third_party/gfxreconstruct/android/gradlew b/third_party/gfxreconstruct/android/gradlew index cccdd3d51..23d15a936 100755 --- a/third_party/gfxreconstruct/android/gradlew +++ b/third_party/gfxreconstruct/android/gradlew @@ -1,78 +1,129 @@ -#!/usr/bin/env sh +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -81,92 +132,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=$((i+1)) + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" fi +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + exec "$JAVACMD" "$@" diff --git a/third_party/gfxreconstruct/android/gradlew.bat b/third_party/gfxreconstruct/android/gradlew.bat index f9553162f..5eed7ee84 100644 --- a/third_party/gfxreconstruct/android/gradlew.bat +++ b/third_party/gfxreconstruct/android/gradlew.bat @@ -1,84 +1,94 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH= + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/third_party/gfxreconstruct/android/layer/build.gradle b/third_party/gfxreconstruct/android/layer/build.gradle index 8e9173472..de53143fe 100644 --- a/third_party/gfxreconstruct/android/layer/build.gradle +++ b/third_party/gfxreconstruct/android/layer/build.gradle @@ -1,14 +1,12 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 33 + compileSdkVersion 34 namespace 'com.lunarg.gfxreconstruct.layer' ndkVersion '26.3.11579264' defaultConfig { minSdkVersion 26 targetSdkVersion 33 - versionCode 1 - versionName "1.0" ndk { if (project.hasProperty("armeabi-v7a")) { abiFilters 'armeabi-v7a' @@ -19,12 +17,12 @@ android { } else if (project.hasProperty("x86_64")) { abiFilters 'x86_64' } else { - abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' + abiFilters 'arm64-v8a', 'x86_64' } } externalNativeBuild { cmake { - cppFlags "-fexceptions", "-std=c++17", "-Wno-nullability-completeness" + cppFlags "-fexceptions", "-Wno-nullability-completeness" arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_static" if (project.hasProperty("DisableOpenXR")) { logger.info('GFXReconstruct layer built with NO OpenXr Support! [DisableOpenXR found]') diff --git a/third_party/gfxreconstruct/android/scripts/gfxrecon.py b/third_party/gfxreconstruct/android/scripts/gfxrecon.py index 1132c18b0..71a98cbcf 100644 --- a/third_party/gfxreconstruct/android/scripts/gfxrecon.py +++ b/third_party/gfxreconstruct/android/scripts/gfxrecon.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# Copyright (c) 2018-2023 LunarG, Inc. +# Copyright (c) 2018-2025 LunarG, Inc. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to @@ -108,6 +108,7 @@ def CreateReplayParser(): parser.add_argument('--screenshot-prefix', metavar='PREFIX', help='Prefix to apply to the screenshot file name. Default is "screenshot" (forwarded to replay tool)') parser.add_argument('--screenshot-size', metavar='SIZE', help='Screenshot dimensions. Ignored if --screenshot-scale is specified. Expected format is x.') parser.add_argument('--screenshot-scale', metavar='SCALE', help='Scale screenshot dimensions. Overrides --screenshot-size, if specified. Expects a number which can be decimal') + parser.add_argument('--capture', action='store_true', default=False, help='Capture the replaying GFXR file. Capture option behavior and usage is the same as when capturing with the GFXR layer. The capture functionality is included in the `gfxrecon-replay` executable--no GFXR capture layer is added to the Vulkan layer chain.') parser.add_argument('--sfa', '--skip-failed-allocations', action='store_true', default=False, help='Skip vkAllocateMemory, vkAllocateCommandBuffers, and vkAllocateDescriptorSets calls that failed during capture (forwarded to replay tool)') parser.add_argument('--opcd', '--omit-pipeline-cache-data', action='store_true', default=False, help='Omit pipeline cache data from calls to vkCreatePipelineCache and skip calls to vkGetPipelineCacheData (forwarded to replay tool)') parser.add_argument('--surface-index', metavar='N', help='Restrict rendering to the Nth surface object created. Used with captures that include multiple surfaces. Default is -1 (render to all surfaces; forwarded to replay tool)') @@ -122,28 +123,17 @@ def CreateReplayParser(): parser.add_argument('--quit-after-measurement-range', action='store_true', default=False, help='If this is specified the replayer will abort when it reaches the specified in the --measurement-frame-range argument. (forwarded to replay tool)') parser.add_argument('--flush-measurement-range', action='store_true', default=False, help='If this is specified the replayer will flush and wait for all current GPU work to finish at the start and end of the measurement range. (forwarded to replay tool)') parser.add_argument('--flush-inside-measurement-range', action='store_true', default=False, help='If this is specified the replayer will flush and wait for all current GPU work to finish at end of each frame inside the measurement range. (forwarded to replay tool)') - parser.add_argument('--sgfs', '--skip-get-fence-status', metavar='STATUS', default=0, help='Specify behaviour to skip calls to vkWaitForFences and vkGetFenceStatus. Default is 0 - No skip (forwarded to replay tool)') + parser.add_argument('--sgfs', '--skip-get-fence-status', metavar='STATUS', default=0, help='Specify behavior to skip calls to vkWaitForFences and vkGetFenceStatus. Default is 0 - No skip (forwarded to replay tool)') parser.add_argument('--sgfr', '--skip-get-fence-ranges', metavar='FRAME-RANGES', default='', help='Frame ranges where --sgfs applies. Default is all frames (forwarded to replay tool)') parser.add_argument('--wait-before-present', action='store_true', default=False, help='Force wait on completion of queue operations for all queues before calling Present. This is needed for accurate acquisition of instrumentation data on some platforms.') parser.add_argument('-m', '--memory-translation', metavar='MODE', choices=['none', 'remap', 'realign', 'rebind'], help='Enable memory translation for replay on GPUs with memory types that are not compatible with the capture GPU\'s memory types. Available modes are: none, remap, realign, rebind (forwarded to replay tool)') parser.add_argument('--swapchain', metavar='MODE', choices=['virtual', 'captured', 'offscreen'], help='Choose a swapchain mode to replay. Available modes are: virtual, captured, offscreen (forwarded to replay tool)') + parser.add_argument('--present-mode', metavar='MODE', choices=['capture', 'immediate', 'mailbox', 'fifo', 'fifo_relaxed'], help='Set swapchain\'s VkPresentModeKHR. Available modes are: auto, immediate, mailbox, fifo, fifo_relaxed (forwarded to replay tool)') parser.add_argument('--vssb', '--virtual-swapchain-skip-blit', action='store_true', default=False, help='Skip blit to real swapchain to gain performance during replay.') parser.add_argument('--use-captured-swapchain-indices', action='store_true', default=False, help='Same as "--swapchain captured". Ignored if the "--swapchain" option is used.') parser.add_argument('file', nargs='?', help='File on device to play (forwarded to replay tool)') - parser.add_argument('--dump-resources', metavar='DUMP_RESOURCES', help='The capture file will be examined, and will be converted to as used in --dump-resources . The converted args will be used used as the args for dump resources.') - parser.add_argument('--dump-resources-before-draw', action='store_true', default=False, help= 'In addition to dumping gpu resources after the Vulkan draw calls specified by the --dump-resources argument, also dump resources before the draw calls.') - parser.add_argument('--dump-resources-image-format', metavar='FORMAT', choices=['bmp', 'png'], help='Image file format to use when dumping image resources. Available formats are: bmp, png') - parser.add_argument('--dump-resources-scale', metavar='DR_SCALE', help='tScale images generated by dump resources by the given scale factor. The scale factor must be a floating point number greater than 0. Values greater than 10 are capped at 10. Default value is 1.0.') - parser.add_argument('--dump-resources-dir', metavar='DIR', help='Directory to write dump resources output files. Default is "/sdcard" (forwarded to replay tool)') - parser.add_argument('--dump-resources-dump-depth-attachment', action='store_true', default=False, help= 'Dump depth attachment when dumping a draw call. Default is false.') - parser.add_argument('--dump-resources-dump-color-attachment-index', metavar='N', help='Specify which color attachment to dump when dumping draw calls. It should be an unsigned zero based integer. Default is to dump all color attachments.') - parser.add_argument('--dump-resources-dump-vertex-index-buffers', action='store_true', default=False, help= 'Enables dumping of vertex and index buffers while dumping draw call resources. Default is disabled.') - parser.add_argument('--dump-resources-json-output-per-command', action='store_true', default=False, help= 'Enables storing a json output file for each dumped command. Default is disabled.') - parser.add_argument('--dump-resources-dump-immutable-resources', action='store_true', default=False, help= 'Dump immutable immutable shader resources.') - parser.add_argument('--dump-resources-dump-all-image-subresources', action='store_true', default=False, help= 'Dump all available mip levels and layers when dumping images.') - parser.add_argument('--dump-resources-dump-raw-images', action='store_true', default=False, help= 'Dump images verbatim as raw binary files.') - parser.add_argument('--dump-resources-dump-separate-alpha', action='store_true', default=False, help= 'Dump image alpha in a separate image file.') - parser.add_argument('--dump-resources-dump-unused-vertex-bindings', action='store_true', default=False, help= 'Dump a vertex binding even if no vertex attributes references it.') + parser.add_argument('--dump-resources', metavar='DUMP_RESOURCES', help='Extract dump resources block indices and options from the specified json file. The format for the json file is documented in detail in vulkan_dump_resources.md.') + parser.add_argument('--dump-resources-dir', metavar='DIR', help='Directory to write dump resources output files.') parser.add_argument('--pbi-all', action='store_true', default=False, help='Print all block information.') parser.add_argument('--pbis', metavar='RANGES', default=False, help='Print block information between block index1 and block index2') parser.add_argument('--pcj', '--pipeline-creation-jobs', action='store_true', default=False, help='Specify the number of pipeline-creation-jobs or background-threads.') @@ -223,6 +213,9 @@ def MakeExtrasString(args): arg_list.append('--screenshot-scale') arg_list.append('{}'.format(args.screenshot_scale)) + if args.capture: + arg_list.append('--capture') + if args.sfa: arg_list.append('--sfa') @@ -272,6 +265,10 @@ def MakeExtrasString(args): arg_list.append('--swapchain') arg_list.append('{}'.format(args.swapchain)) + if args.present_mode: + arg_list.append('--present-mode') + arg_list.append('{}'.format(args.present_mode)) + if args.offscreen_swapchain_frame_boundary: arg_list.append('--offscreen-swapchain-frame-boundary') @@ -297,49 +294,10 @@ def MakeExtrasString(args): arg_list.append('--dump-resources') arg_list.append('{}'.format(args.dump_resources)) - if args.dump_resources_before_draw: - arg_list.append('--dump-resources-before-draw') - - if args.dump_resources_image_format: - arg_list.append('--dump-resources-image-format') - arg_list.append('{}'.format(args.dump_resources_image_format)) - - if args.dump_resources_scale: - arg_list.append('--dump-resources-scale') - arg_list.append('{}'.format(args.dump_resources_scale)) - if args.dump_resources_dir: arg_list.append('--dump-resources-dir') arg_list.append('{}'.format(args.dump_resources_dir)) - if args.dump_resources_dump_depth_attachment: - arg_list.append('--dump-resources-dump-depth-attachment') - - if args.dump_resources_dump_color_attachment_index: - arg_list.append('--dump-resources-dump-color-attachment-index') - arg_list.append('{}'.format(args.dump_resources_dump_color_attachment_index)) - - if args.dump_resources_dump_vertex_index_buffers: - arg_list.append('--dump-resources-dump-vertex-index-buffers') - - if args.dump_resources_json_output_per_command: - arg_list.append('--dump-resources-json-output-per-command') - - if args.dump_resources_dump_immutable_resources: - arg_list.append('--dump-resources-dump-immutable-resources') - - if args.dump_resources_dump_all_image_subresources: - arg_list.append('--dump-resources-dump-all-image-subresources') - - if args.dump_resources_dump_raw_images: - arg_list.append('--dump-resources-dump-raw-images') - - if args.dump_resources_dump_separate_alpha: - arg_list.append('--dump-resources-dump-separate-alpha') - - if args.dump_resources_dump_unused_vertex_bindings: - arg_list.append('--dump-resources-dump-unused-vertex-bindings') - if args.pbi_all: arg_list.append('--pbi-all') @@ -417,8 +375,8 @@ def ReplayCommon(replay_args, activity): adb_start = 'adb shell am start -n {} -a {} -c {}'.format(activity, app_action, app_category) - cmd = ' '.join([adb_start, '--es', '"args"', '"{}"'.format(extras)]) - print('Executing:', cmd) + print(f'Executing: {adb_start} --es args \'"{extras}"\'') + cmd = ' '.join([adb_start, '--es', 'args', '"{}"'.format(extras)]) # Specify posix=False to prevent removal of quotes from adb extras. subprocess.check_call(shlex.split(cmd, posix=False)) diff --git a/third_party/gfxreconstruct/android/test/test_apps/launcher/build.gradle b/third_party/gfxreconstruct/android/test/test_apps/launcher/build.gradle index f4616caac..94808d608 100644 --- a/third_party/gfxreconstruct/android/test/test_apps/launcher/build.gradle +++ b/third_party/gfxreconstruct/android/test/test_apps/launcher/build.gradle @@ -1,9 +1,9 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 33 + compileSdkVersion 34 namespace 'com.lunarg.gfxreconstruct.test.test_apps.test_launcher' - ndkVersion '22.1.7171670' + ndkVersion '26.3.11579264' defaultConfig { applicationId "com.lunarg.gfxreconstruct.test.test_apps.test_launcher" minSdkVersion 26 @@ -20,12 +20,12 @@ android { } else if (project.hasProperty("x86_64")) { abiFilters 'x86_64' } else { - abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' + abiFilters 'arm64-v8a', 'x86_64' } } externalNativeBuild { cmake { - cppFlags "-fexceptions", "-std=c++17", "-Wno-nullability-completeness" + cppFlags "-fexceptions", "-Wno-nullability-completeness" arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_static" } } diff --git a/third_party/gfxreconstruct/android/test/test_apps/launcher/gfxrecon-test-launcher.map b/third_party/gfxreconstruct/android/test/test_apps/launcher/gfxrecon-test-launcher.map index 6fdfb32c4..a07729651 100644 --- a/third_party/gfxreconstruct/android/test/test_apps/launcher/gfxrecon-test-launcher.map +++ b/third_party/gfxreconstruct/android/test/test_apps/launcher/gfxrecon-test-launcher.map @@ -1,9 +1,6 @@ { global: ANativeActivity_onCreate; - MainGetCurrentBlockIndex; - MainGetLoadingTrimmedState; - SetInjectedCommandCallbacks; local: *; }; diff --git a/third_party/gfxreconstruct/android/tools/multi-win-replay/CMakeLists.txt b/third_party/gfxreconstruct/android/tools/multi-win-replay/CMakeLists.txt index c2692c855..be889602d 100644 --- a/third_party/gfxreconstruct/android/tools/multi-win-replay/CMakeLists.txt +++ b/third_party/gfxreconstruct/android/tools/multi-win-replay/CMakeLists.txt @@ -17,6 +17,7 @@ add_subdirectory(../../framework/util ${PROJECT_SOURCE_DIR}/../../framework/util add_subdirectory(../../framework/graphics ${PROJECT_SOURCE_DIR}/../../framework/graphics/build/tools/replay/${ANDROID_ABI}) add_subdirectory(../../framework/format ${PROJECT_SOURCE_DIR}/../../framework/format/build/tools/replay/${ANDROID_ABI}) add_subdirectory(../../framework/decode ${PROJECT_SOURCE_DIR}/../../framework/decode/build/tools/replay/${ANDROID_ABI}) +add_subdirectory(../../framework/encode ${PROJECT_SOURCE_DIR}/../../framework/encode/build/tools/replay/${ANDROID_ABI}) add_subdirectory(../../framework/application-multi-win ${PROJECT_SOURCE_DIR}/../../framework/application/build/tools/replay/${ANDROID_ABI}) # GOOGLE: Add subdirectories for gfxr_ext, putting binaries into the same dir as their base counterparts @@ -29,6 +30,9 @@ add_library(gfxrecon-replay ${GFXRECON_SOURCE_DIR}/tools/replay/parse_dump_resources_cli.cpp ${GFXRECON_SOURCE_DIR}/tools/replay/replay_settings.h ${GFXRECON_SOURCE_DIR}/tools/replay/replay_pre_processing.h + ${GFXRECON_SOURCE_DIR}/tools/replay/recapture_vulkan_entry.cpp + ${GFXRECON_SOURCE_DIR}/tools/replay/recapture_vulkan_entry.h + ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_recapture_func_table.h ${GFXRECON_SOURCE_DIR}/tools/replay/android_main.cpp) target_include_directories(gfxrecon-replay @@ -41,6 +45,7 @@ target_link_libraries( gfxrecon-replay gfxrecon_application_multiwin gfxrecon_decode + gfxrecon_encode gfxrecon_graphics gfxrecon_format platform_specific) diff --git a/third_party/gfxreconstruct/android/tools/multi-win-replay/build.gradle b/third_party/gfxreconstruct/android/tools/multi-win-replay/build.gradle index a50fbcc5b..30353cb84 100644 --- a/third_party/gfxreconstruct/android/tools/multi-win-replay/build.gradle +++ b/third_party/gfxreconstruct/android/tools/multi-win-replay/build.gradle @@ -1,9 +1,9 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 33 + compileSdkVersion 34 namespace 'com.lunarg.gfxreconstruct.replay' - ndkVersion '22.1.7171670' + ndkVersion '26.3.11579264' defaultConfig { applicationId "com.lunarg.gfxreconstruct.replay" minSdkVersion 26 @@ -20,12 +20,12 @@ android { } else if (project.hasProperty("x86_64")) { abiFilters 'x86_64' } else { - abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' + abiFilters 'arm64-v8a', 'x86_64' } } externalNativeBuild { cmake { - cppFlags "-fexceptions", "-std=c++17", "-Wno-nullability-completeness" + cppFlags "-fexceptions", "-Wno-nullability-completeness" arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_static" } } diff --git a/third_party/gfxreconstruct/android/tools/quest_replay/CMakeLists.txt b/third_party/gfxreconstruct/android/tools/quest_replay/CMakeLists.txt index 2970375b8..34cda2455 100644 --- a/third_party/gfxreconstruct/android/tools/quest_replay/CMakeLists.txt +++ b/third_party/gfxreconstruct/android/tools/quest_replay/CMakeLists.txt @@ -29,6 +29,7 @@ add_subdirectory(../../framework/util ${PROJECT_SOURCE_DIR}/../../framework/util add_subdirectory(../../framework/graphics ${PROJECT_SOURCE_DIR}/../../framework/graphics/build/tools/quest_replay/${ANDROID_ABI}) add_subdirectory(../../framework/format ${PROJECT_SOURCE_DIR}/../../framework/format/build/tools/quest_replay/${ANDROID_ABI}) add_subdirectory(../../framework/decode ${PROJECT_SOURCE_DIR}/../../framework/decode/build/tools/quest_replay/${ANDROID_ABI}) +add_subdirectory(../../framework/encode ${PROJECT_SOURCE_DIR}/../../framework/encode/build/tools/quest_replay/${ANDROID_ABI}) add_subdirectory(../../framework/application ${PROJECT_SOURCE_DIR}/../../framework/application/build/tools/quest_replay/${ANDROID_ABI}) add_subdirectory(${GFXRECON_SOURCE_DIR}/external/OpenXR-SDK ${PROJECT_SOURCE_DIR}/../../framework/application/build/tools/quest_replay_openxr/${ANDROID_ABI}) @@ -41,6 +42,9 @@ add_library(gfxrecon-quest-replay ${GFXRECON_SOURCE_DIR}/tools/replay/parse_dump_resources_cli.h ${GFXRECON_SOURCE_DIR}/tools/replay/parse_dump_resources_cli.cpp ${GFXRECON_SOURCE_DIR}/tools/replay/replay_settings.h + ${GFXRECON_SOURCE_DIR}/tools/replay/recapture_vulkan_entry.cpp + ${GFXRECON_SOURCE_DIR}/tools/replay/recapture_vulkan_entry.h + ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_recapture_func_table.h ${GFXRECON_SOURCE_DIR}/tools/replay/android_main.cpp) target_include_directories(gfxrecon-quest-replay @@ -57,6 +61,7 @@ target_link_libraries( nlohmann_json gfxrecon_application gfxrecon_decode + gfxrecon_encode gfxrecon_graphics gfxrecon_format platform_specific diff --git a/third_party/gfxreconstruct/android/tools/quest_replay/build.gradle b/third_party/gfxreconstruct/android/tools/quest_replay/build.gradle index 16d0a165f..9e0a36824 100644 --- a/third_party/gfxreconstruct/android/tools/quest_replay/build.gradle +++ b/third_party/gfxreconstruct/android/tools/quest_replay/build.gradle @@ -1,9 +1,9 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 33 + compileSdkVersion 34 namespace 'com.lunarg.gfxreconstruct.replay' - ndkVersion '22.1.7171670' + ndkVersion '26.3.11579264' defaultConfig { applicationId "com.lunarg.gfxreconstruct.replay" minSdkVersion 26 @@ -15,7 +15,7 @@ android { } externalNativeBuild { cmake { - cppFlags "-fexceptions", "-std=c++14", "-Wno-nullability-completeness" + cppFlags "-fexceptions", "-Wno-nullability-completeness" arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_static", "-DGFXRECON_ENABLE_OPENXR=ON" } } diff --git a/third_party/gfxreconstruct/android/tools/replay/CMakeLists.txt b/third_party/gfxreconstruct/android/tools/replay/CMakeLists.txt index 6b49c67c5..816d7849d 100644 --- a/third_party/gfxreconstruct/android/tools/replay/CMakeLists.txt +++ b/third_party/gfxreconstruct/android/tools/replay/CMakeLists.txt @@ -17,6 +17,7 @@ add_subdirectory(../../framework/util ${PROJECT_SOURCE_DIR}/../../framework/util add_subdirectory(../../framework/graphics ${PROJECT_SOURCE_DIR}/../../framework/graphics/build/tools/replay/${ANDROID_ABI}) add_subdirectory(../../framework/format ${PROJECT_SOURCE_DIR}/../../framework/format/build/tools/replay/${ANDROID_ABI}) add_subdirectory(../../framework/decode ${PROJECT_SOURCE_DIR}/../../framework/decode/build/tools/replay/${ANDROID_ABI}) +add_subdirectory(../../framework/encode ${PROJECT_SOURCE_DIR}/../../framework/encode/build/tools/replay/${ANDROID_ABI}) add_subdirectory(../../framework/application ${PROJECT_SOURCE_DIR}/../../framework/application/build/tools/replay/${ANDROID_ABI}) # GOOGLE: Add subdirectories for gfxr_ext, putting binaries into the same dir as their base counterparts @@ -29,6 +30,9 @@ add_library(gfxrecon-replay ${GFXRECON_SOURCE_DIR}/tools/replay/parse_dump_resources_cli.cpp ${GFXRECON_SOURCE_DIR}/tools/replay/replay_settings.h ${GFXRECON_SOURCE_DIR}/tools/replay/replay_pre_processing.h + ${GFXRECON_SOURCE_DIR}/tools/replay/recapture_vulkan_entry.cpp + ${GFXRECON_SOURCE_DIR}/tools/replay/recapture_vulkan_entry.h + ${GFXRECON_SOURCE_DIR}/framework/generated/generated_vulkan_recapture_func_table.h ${GFXRECON_SOURCE_DIR}/tools/replay/android_main.cpp) target_include_directories(gfxrecon-replay @@ -44,6 +48,8 @@ target_link_libraries( gfxrecon-replay gfxrecon_application gfxrecon_decode + gfxrecon_encode gfxrecon_graphics gfxrecon_format - platform_specific) + platform_specific + project_version) diff --git a/third_party/gfxreconstruct/android/tools/replay/build.gradle b/third_party/gfxreconstruct/android/tools/replay/build.gradle index c9a1025a1..88a7c3153 100644 --- a/third_party/gfxreconstruct/android/tools/replay/build.gradle +++ b/third_party/gfxreconstruct/android/tools/replay/build.gradle @@ -1,9 +1,9 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 33 + compileSdkVersion 34 namespace 'com.lunarg.gfxreconstruct.replay' - ndkVersion '22.1.7171670' + ndkVersion '26.3.11579264' defaultConfig { applicationId "com.lunarg.gfxreconstruct.replay" minSdkVersion 26 @@ -20,12 +20,12 @@ android { } else if (project.hasProperty("x86_64")) { abiFilters 'x86_64' } else { - abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' + abiFilters 'arm64-v8a', 'x86_64' } } externalNativeBuild { cmake { - cppFlags "-fexceptions", "-std=c++17", "-Wno-nullability-completeness" + cppFlags "-fexceptions", "-Wno-nullability-completeness" arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_static" } } diff --git a/third_party/gfxreconstruct/ci/Jenkinsfile b/third_party/gfxreconstruct/ci/Jenkinsfile new file mode 100644 index 000000000..bea5fa0b1 --- /dev/null +++ b/third_party/gfxreconstruct/ci/Jenkinsfile @@ -0,0 +1,98 @@ +pipeline { + agent none + + options { + disableConcurrentBuilds(abortPrevious: true) + buildDiscarder(logRotator( + daysToKeepStr: '90', + numToKeepStr: '100', + artifactDaysToKeepStr: '90', + artifactNumToKeepStr: '100' + )) + } + + stages { + stage('Per Commit Tests') { + steps { + script { + def tests + + // Checkout and load on any available node + node { + checkout scm + def runJob = load 'ci/runJob.groovy' + + tests = [ + 'Android Rel64': runJob.gfxrTestAndroid('Android R64', runJob.ReleaseMode, runJob.AndroidLabel, runJob.Bit64, "commit-suite.json"), + 'Android Dbg64': runJob.gfxrTestAndroid('Android D32', runJob.ReleaseMode, runJob.AndroidLabel, runJob.Bit32, "commit-suite.json"), + 'Linux Mesa Rel64': runJob.gfxrTestLinux('Linux Mesa Rel64', runJob.ReleaseMode, runJob.LinuxMesaLabel, runJob.Bit64, "commit-suite.json"), + 'Linux Mesa Dbg32': runJob.gfxrTestLinux('Linux Mesa Dbg32', runJob.ReleaseMode, runJob.LinuxMesaLabel, runJob.Bit32, "commit-suite.json"), + 'Linux Nnvidia Rel64': runJob.gfxrTestLinux('Linux Nvidia Rel64', runJob.ReleaseMode, runJob.LinuxNvidiaLabel, runJob.Bit64, "commit-suite.json"), + 'Linux Nnvidia Dbg32': runJob.gfxrTestLinux('Linux Nvidia Dbg32', runJob.ReleaseMode, runJob.LinuxNvidiaLabel, runJob.Bit32, "commit-suite.json"), + 'Mac': runJob.gfxrTestLinux('Mac', runJob.ReleaseMode, runJob.MacLabel, runJob.Bit64, "commit-suite.json"), + 'Windows AMD Rel64': runJob.gfxrTestWindows('Windows AMD Rel64', runJob.ReleaseMode, runJob.WinAMDLabel, runJob.Bit64, "commit-suite.json"), + 'Windows AMD Dbg32': runJob.gfxrTestWindows('Windows AMD Dbg32', runJob.ReleaseMode, runJob.WinAMDLabel, runJob.Bit32, "commit-suite.json"), + 'Windows Nvidia Rel64': runJob.gfxrTestWindows('Windows Nvidia Rel64', runJob.ReleaseMode, runJob.WinNvidiaLabel, runJob.Bit64, "commit-suite.json"), + 'Windows Nvidia Dbg32': runJob.gfxrTestWindows('Windows Nvidia Dbg32', runJob.ReleaseMode, runJob.WinNvidiaLabel, runJob.Bit32, "commit-suite.json"), + 'Windows11 AMD Rel64': runJob.gfxrTestWindows('Windows11 AMD Rel64', runJob.ReleaseMode, runJob.Win11AMDLabel, runJob.Bit64, "commit-suite.json"), + 'Windows11 AMD Dbg32': runJob.gfxrTestWindows('Windows11 AMD Dbg32', runJob.ReleaseMode, runJob.Win11AMDLabel, runJob.Bit32, "commit-suite.json"), + 'Windows11 ARM Rel64': runJob.gfxrTestWindows('Windows11 ARM Rel64', runJob.ReleaseMode, runJob.Win11ARMLabel, runJob.Bit64, "commit-suite.json"), + 'Windows11 ARM Dbg64': runJob.gfxrTestWindows('Windows11 ARM Dbg64', runJob.ReleaseMode, runJob.Win11ARMLabel, runJob.Bit64, "commit-suite.json") + ] + } + // parallel runs OUTSIDE the node block - each branch allocates its own node + parallel tests + } + } + } + + stage('Trigger Extended Tests') { + when { + branch 'dev' + } + + steps { + script { + def quietPeriodSeconds = calculateQuietPeriod() + build job: 'beau-lunarg/gfxreconstruct-pipeline-dev-extended', + wait: false, + propagate: false, + quietPeriod: quietPeriodSeconds + } + } + } + } +} + +// extended should only be run between 8pm and midnight, only on weekdays +// this function will calculate the amount of time to wait until the next time extended should run +def calculateQuietPeriod() { + def now = new Date() + def hour = now.getHours() + def dayOfWeek = now.getDay() // 0=Sun, 1=Mon, ..., 6=Sat + + // In window (Mon-Fri 8pm-midnight): run immediately + if (dayOfWeek >= 1 && dayOfWeek <= 5 && hour >= 20 && hour < 24) { + return 0 + } + + // Calculate seconds until next 8pm Mon-Fri + def target = now.clone() + target.setHours(20) + target.setMinutes(0) + target.setSeconds(0) + + // If today is weekday and before 8pm, target is today + if (dayOfWeek >= 1 && dayOfWeek <= 5 && hour < 20) { + // target is today at 8pm, already set + } + // If weekend or after midnight, find next weekday + else { + target = target + 1 // tomorrow + while (target.getDay() == 0 || target.getDay() == 6) { + target = target + 1 // skip weekend + } + } + + return (int) ((target.getTime() - now.getTime()) / 1000) +} \ No newline at end of file diff --git a/third_party/gfxreconstruct/ci/Jenkinsfile.extended b/third_party/gfxreconstruct/ci/Jenkinsfile.extended new file mode 100644 index 000000000..6bc673a6f --- /dev/null +++ b/third_party/gfxreconstruct/ci/Jenkinsfile.extended @@ -0,0 +1,37 @@ +pipeline { + agent none + + options { + disableConcurrentBuilds(abortPrevious: true) + buildDiscarder(logRotator( + daysToKeepStr: '90', + numToKeepStr: '100', + artifactDaysToKeepStr: '90', + artifactNumToKeepStr: '100' + )) + } + + stages { + stage('Extended Tests') { + steps { + script { + def tests + + node { + checkout scm + def runJob = load 'ci/runJob.groovy' + + tests = [ + 'Android Rel64': runJob.gfxrTestAndroid('Android R64 Ext', runJob.ReleaseMode, runJob.AndroidLabel, runJob.Bit64, "extended-suite.json"), + 'Linux Mesa Rel64': runJob.gfxrTestLinux('Linux Mesa Rel64 Ext', runJob.ReleaseMode, runJob.LinuxMesaLabel, runJob.Bit64, "extended-suite.json"), + 'Linux Nvidia Rel64': runJob.gfxrTestLinux('Linux Nvidia Rel64 Ext', runJob.ReleaseMode, runJob.LinuxNvidiaLabel, runJob.Bit64, "extended-suite.json"), + 'Windows AMD Rel64': runJob.gfxrTestWindows('Windows AMD Rel64 Ext', runJob.ReleaseMode, runJob.WinAMDExtendedLabel, runJob.Bit64, "extended-suite.json"), + 'Windows Nvidia Rel64': runJob.gfxrTestWindows('Windows Nvidia Rel64 Ext', runJob.ReleaseMode, runJob.WinNvidiaExtendedLabel, runJob.Bit64, "extended-suite.json"), + ] + } + parallel tests + } + } + } + } +} diff --git a/third_party/gfxreconstruct/ci/Jenkinsfile.extended-manual b/third_party/gfxreconstruct/ci/Jenkinsfile.extended-manual new file mode 100644 index 000000000..0f6b4c8dc --- /dev/null +++ b/third_party/gfxreconstruct/ci/Jenkinsfile.extended-manual @@ -0,0 +1,108 @@ +pipeline { + agent none + + parameters { + string( + name: 'PROJECT_REPO', + defaultValue: 'git@github.com:beau-lunarg/gfxreconstruct-pipeline-dev.git', + description: 'Project repository URL' + ) + string( + name: 'PROJECT_BRANCH', + defaultValue: 'dev', + description: 'Project branch to build' + ) + string( + name: 'TEST_REPO', + defaultValue: 'git@github.com:LunarG/VulkanTests', + description: 'Test repository URL' + ) + string( + name: 'TEST_BRANCH', + defaultValue: '', + description: 'Test repository branch (leave empty for default)' + ) + string( + name: 'TEST_SUITE_REPO', + defaultValue: 'git@github.com:LunarG/ci-gfxr-suites', + description: 'Test suite repository URL' + ) + string( + name: 'TEST_SUITE_BRANCH', + defaultValue: '', + description: 'Test suite repository branch (leave empty for default)' + ) + string( + name: 'TEST_SUITE', + defaultValue: 'extended-suite.json', + description: 'Test suite filename' + ) + + } + + options { + disableConcurrentBuilds(abortPrevious: true) + buildDiscarder(logRotator( + daysToKeepStr: '90', + numToKeepStr: '100', + artifactDaysToKeepStr: '90', + artifactNumToKeepStr: '100' + )) + } + + stages { + + stage('Extended Tests') { + steps { + script { + def tests + + node { + checkout scm + def runJob = load 'ci/runJob.groovy' + + tests = [ + 'Android Rel64': runJob.gfxrTestAndroidManual('Android R64', runJob.AndroidLabel, runJob.ReleaseMode, runJob.Bit64, params.TEST_SUITE, + params.PROJECT_REPO, + params.PROJECT_BRANCH, + params.TEST_REPO, + params.TEST_BRANCH, + params.TEST_SUITE_REPO, + params.TEST_SUITE_BRANCH), + 'Linux Mesa Rel64': runJob.gfxrTestLinuxManual('Linux Mesa Rel64', runJob.LinuxMesaLabel, runJob.ReleaseMode, runJob.Bit64, params.TEST_SUITE, + params.PROJECT_REPO, + params.PROJECT_BRANCH, + params.TEST_REPO, + params.TEST_BRANCH, + params.TEST_SUITE_REPO, + params.TEST_SUITE_BRANCH), + 'Linux Nnvidia Rel64': runJob.gfxrTestLinuxManual('Linux Nvidia Rel64', runJob.LinuxNvidiaLabel, runJob.ReleaseMode, runJob.Bit64, params.TEST_SUITE, + params.PROJECT_REPO, + params.PROJECT_BRANCH, + params.TEST_REPO, + params.TEST_BRANCH, + params.TEST_SUITE_REPO, + params.TEST_SUITE_BRANCH), + 'Windows AMD Rel64': runJob.gfxrTestWindowsManual('Windows AMD Rel64', runJob.WinAMDExtendedLabel, runJob.ReleaseMode, runJob.Bit64, params.TEST_SUITE, + params.PROJECT_REPO, + params.PROJECT_BRANCH, + params.TEST_REPO, + params.TEST_BRANCH, + params.TEST_SUITE_REPO, + params.TEST_SUITE_BRANCH), + 'Windows Nvidia Rel64': runJob.gfxrTestWindowsManual('Windows Nvidia Rel64', runJob.WinNvidiaExtendedLabel, runJob.ReleaseMode, runJob.Bit64, params.TEST_SUITE, + params.PROJECT_REPO, + params.PROJECT_BRANCH, + params.TEST_REPO, + params.TEST_BRANCH, + params.TEST_SUITE_REPO, + params.TEST_SUITE_BRANCH), + ] + } + parallel tests + } + } + } + } + +} \ No newline at end of file diff --git a/third_party/gfxreconstruct/ci/Jenkinsfile.manual b/third_party/gfxreconstruct/ci/Jenkinsfile.manual new file mode 100644 index 000000000..5799f272c --- /dev/null +++ b/third_party/gfxreconstruct/ci/Jenkinsfile.manual @@ -0,0 +1,148 @@ +pipeline { + agent none + + parameters { + string( + name: 'PROJECT_REPO', + defaultValue: 'git@github.com:beau-lunarg/gfxreconstruct-pipeline-dev.git', + description: 'Project repository URL' + ) + string( + name: 'PROJECT_BRANCH', + defaultValue: 'dev', + description: 'Project branch to build' + ) + string( + name: 'TEST_REPO', + defaultValue: 'git@github.com:LunarG/VulkanTests', + description: 'Test repository URL' + ) + string( + name: 'TEST_BRANCH', + defaultValue: '', + description: 'Test repository branch (leave empty for default)' + ) + string( + name: 'TEST_SUITE_REPO', + defaultValue: 'git@github.com:LunarG/ci-gfxr-suites', + description: 'Test suite repository URL' + ) + string( + name: 'TEST_SUITE_BRANCH', + defaultValue: '', + description: 'Test suite repository branch (leave empty for default)' + ) + string( + name: 'TEST_SUITE', + defaultValue: 'commit-suite.json', + description: 'Test suite filename' + ) + choice( + name: 'BUILD_MODE', + choices: ['Release', 'Debug'], + description: 'Build mode' + ) + choice( + name: 'BITS', + choices: ['64', '32'], + description: 'Build architecture' + ) + string( + name: 'NODES', + defaultValue: '', + description: 'Comma-separated list of nodes to run tests on' + ) + } + + options { + buildDiscarder(logRotator( + daysToKeepStr: '90', + numToKeepStr: '100', + artifactDaysToKeepStr: '90', + artifactNumToKeepStr: '100' + )) + } + + stages { + stage('Run Tests') { + steps { + script { + def tests = [:] + + node { + checkout scm + def runJob = load 'ci/runJob.groovy' + + def selectedNodes = params.NODES?.split(',')?.collect { it.trim() }?.findAll { it } + + if (!selectedNodes) { + currentBuild.result = 'NOT_BUILT' + echo 'No nodes selected. Run again with Build with Parameters.' + return + } + + selectedNodes.each { nodeName -> + def type = runJob.getNodeType(nodeName) + if (!type) { + error "Cannot determine type for node: ${nodeName}. Name must contain 'and', 'ubu', 'mac', 'wnapl', or 'win'." + } + + def closure + switch (type) { + case 'android': + closure = runJob.gfxrTestAndroidManual( + nodeName, + nodeName, + params.BUILD_MODE, + params.BITS, + params.TEST_SUITE, + params.PROJECT_REPO, + params.PROJECT_BRANCH, + params.TEST_REPO, + params.TEST_BRANCH, + params.TEST_SUITE_REPO, + params.TEST_SUITE_BRANCH + ) + break + case 'linux': + closure = runJob.gfxrTestLinuxManual( + nodeName, + nodeName, + params.BUILD_MODE, + params.BITS, + params.TEST_SUITE, + params.PROJECT_REPO, + params.PROJECT_BRANCH, + params.TEST_REPO, + params.TEST_BRANCH, + params.TEST_SUITE_REPO, + params.TEST_SUITE_BRANCH + ) + break + case 'windows': + closure = runJob.gfxrTestWindowsManual( + nodeName, + nodeName, + params.BUILD_MODE, + params.BITS, + params.TEST_SUITE, + params.PROJECT_REPO, + params.PROJECT_BRANCH, + params.TEST_REPO, + params.TEST_BRANCH, + params.TEST_SUITE_REPO, + params.TEST_SUITE_BRANCH + ) + break + } + + tests[nodeName] = closure + } + } + + parallel tests + } + } + } + } +} diff --git a/third_party/gfxreconstruct/ci/runJob.bat b/third_party/gfxreconstruct/ci/runJob.bat new file mode 100644 index 000000000..e8a6d24a4 --- /dev/null +++ b/third_party/gfxreconstruct/ci/runJob.bat @@ -0,0 +1,61 @@ +git submodule update --init --recursive +git describe --tags --always + +if not defined TEST_SUITE_BRANCH ( + if exist test_suite.ref ( + set /p TEST_SUITE_BRANCH=nul +goto :clone_suites +:clone_suites_done +cd ci-gfxr-suites +git checkout %TEST_SUITE_BRANCH% || exit /b +git submodule update --init --recursive +git describe --tags --always +cd .. + +if not defined TEST_COMMIT ( + if exist test.ref ( + set /p TEST_COMMIT=nul +goto :clone_tests +:clone_tests_done +cd VulkanTests +git checkout %TEST_COMMIT% || exit /b +git submodule update --init --recursive +git describe --tags --always +cd .. + +cmake --version +python --version + +python VulkanTests\gfxrecontest.py --compiler vs2022 --build-mode %BUILD_MODE% --bits %BITS% %WINDOWS_TEST_ARGS% --suite "ci-gfxr-suites\%GFXRECON_TRACE_SUBDIR%\%TEST_SUITE%" --trace-dir "%GFXRECON_TRACE_DIR%" --result-dir "%RESULTS_DIR%" \ No newline at end of file diff --git a/third_party/gfxreconstruct/ci/runJob.groovy b/third_party/gfxreconstruct/ci/runJob.groovy new file mode 100644 index 000000000..71d379b1d --- /dev/null +++ b/third_party/gfxreconstruct/ci/runJob.groovy @@ -0,0 +1,395 @@ +def gfxrTestWindows( + String name, + String buildMode, + String label, + String bits, + String testSuite +) { + echo "Creating closure for ${name} with label: ${label}" + return { + stage(name) { + echo "About to allocate node with label: ${label}" + node(label) { + echo "Running on node: ${env.NODE_NAME} with label requirement: ${label}" + + retry(3) { + try { + cleanWs(deleteDirs: true) + } catch (Exception e) { + sleep(time: 5) + throw e + } + } + + bat 'if exist vulkantest-results rmdir /s /q vulkantest-results' + + dir('gfxreconstruct') { + checkout scm + + withEnv([ + "PROJECT_REPO=${scm.userRemoteConfigs.first().url}", + "PROJECT_COMMIT=${env.GIT_COMMIT}", + "TEST_REPO=git@github.com:LunarG/VulkanTests", + "TEST_SUITE_REPO=git@github.com:LunarG/ci-gfxr-suites", + "TEST_SUITE=${testSuite}", + "BITS=${bits}", + "BUILD_MODE=${buildMode}", + "RESULTS_DIR=../vulkantest-results/${name}" + ]) { + bat 'ci/runJob.bat' + } + } + + archiveArtifacts( + artifacts: 'vulkantest-results/**', + excludes: 'vulkantest-results/**/*.gfxr,vulkantest-results/**/core*,vulkantest-results/**/*.jsonl', + allowEmptyArchive: false, + onlyIfSuccessful: false, + ) + } + } + } +} + +def gfxrTestLinux( + String name, + String buildMode, + String label, + String bits, + String testSuite +) { + return { + stage(name) { + node(label) { + echo "Running on node: ${env.NODE_NAME} with label requirement: ${label}" + + retry(3) { + try { + cleanWs(deleteDirs: true) + } catch (Exception e) { + sleep(time: 5) + throw e + } + } + + sh 'rm -rf vulkantest-results' + + dir('gfxreconstruct') { + checkout scm + + withEnv([ + "PROJECT_REPO=${scm.userRemoteConfigs.first().url}", + "PROJECT_COMMIT=${env.GIT_COMMIT}", + "TEST_REPO=git@github.com:LunarG/VulkanTests", + "TEST_SUITE_REPO=git@github.com:LunarG/ci-gfxr-suites", + "TEST_SUITE=${testSuite}", + "BITS=${bits}", + "BUILD_MODE=${buildMode}", + "RESULTS_DIR=../vulkantest-results/${name}" + ]) { + sh 'ci/runJob.sh' + } + } + + archiveArtifacts( + artifacts: 'vulkantest-results/**', + excludes: '**/*.gfxr,**/core,**/core.*,**.*.jsonl,**/*.gfxa', + allowEmptyArchive: false, + onlyIfSuccessful: false, + ) + } + } + } +} + +def gfxrTestAndroid( + String name, + String buildMode, + String label, + String bits, + String testSuite +) { + return { + stage(name) { + node(label) { + echo "Running on node: ${env.NODE_NAME} with label requirement: ${label}" + + retry(3) { + try { + cleanWs(deleteDirs: true) + } catch (Exception e) { + sleep(time: 5) + throw e + } + } + + sh 'rm -rf vulkantest-results' + + dir('gfxreconstruct') { + checkout scm + + withEnv([ + "PROJECT_REPO=${scm.userRemoteConfigs.first().url}", + "PROJECT_COMMIT=${env.GIT_COMMIT}", + "TEST_REPO=git@github.com:LunarG/VulkanTests", + "TEST_SUITE_REPO=git@github.com:LunarG/ci-gfxr-suites", + "TEST_SUITE=${testSuite}", + "BITS=${bits}", + "BUILD_MODE=${buildMode}", + "RESULTS_DIR=../vulkantest-results/${name}" + ]) { + sh 'ci/runJobAndroid.sh' + + } + } + + archiveArtifacts( + artifacts: 'vulkantest-results/**', + excludes: '**/*.gfxr,**/core,**/core.*,**.*.jsonl,**/*.gfxa', + allowEmptyArchive: false, + onlyIfSuccessful: false, + ) + + } + } + } +} + +// Derive job type from node name based on naming convention +def getNodeType(String nodeName) { + if (nodeName.contains('and')) { + return 'android' + } else if (nodeName.contains('wnapl') || nodeName.contains('mac')) { + return 'linux' + } else if (nodeName.contains('ubu')) { + return 'linux' + } else if (nodeName.contains('win')) { + return 'windows' + } else { + return null + } +} + +def gfxrTestWindowsManual( + String stageName, + String nodeLabel, + String buildMode, + String bits, + String testSuite, + String projectRepo, + String projectBranch, + String testRepo, + String testBranch, + String testSuiteRepo, + String testSuiteBranch +) { + return { + stage(stageName) { + node(nodeLabel) { + echo "Running on node: ${env.NODE_NAME} with label requirement: ${nodeLabel}" + + retry(3) { + try { + cleanWs(deleteDirs: true) + } catch (Exception e) { + sleep(time: 5) + throw e + } + } + + bat 'if exist vulkantest-results rmdir /s /q vulkantest-results' + + dir('gfxreconstruct') { + checkout([ + $class: 'GitSCM', + branches: [[name: projectBranch]], + userRemoteConfigs: [[url: projectRepo]] + ]) + + def commitHash = bat(script: '@git rev-parse HEAD', returnStdout: true).trim() + + withEnv([ + "PROJECT_REPO=${projectRepo}", + "PROJECT_COMMIT=${commitHash}", + "TEST_REPO=${testRepo}", + "TEST_BRANCH=${testBranch}", + "TEST_SUITE_REPO=${testSuiteRepo}", + "TEST_SUITE_BRANCH=${testSuiteBranch}", + "TEST_SUITE=${testSuite}", + "BITS=${bits}", + "BUILD_MODE=${buildMode}", + "RESULTS_DIR=../vulkantest-results/${stageName}" + ]) { + bat 'ci/runJob.bat' + } + } + + archiveArtifacts( + artifacts: 'vulkantest-results/**', + excludes: '**/*.gfxr,**/core,**/core.*,**.*.jsonl,**/*.gfxa', + allowEmptyArchive: true, + onlyIfSuccessful: false + ) + } + } + } +} + +def gfxrTestLinuxManual( + String stageName, + String nodeLabel, + String buildMode, + String bits, + String testSuite, + String projectRepo, + String projectBranch, + String testRepo, + String testBranch, + String testSuiteRepo, + String testSuiteBranch +) { + return { + stage(stageName) { + node(nodeLabel) { + echo "Running on node: ${env.NODE_NAME} with label requirement: ${nodeLabel}" + + retry(3) { + try { + cleanWs(deleteDirs: true) + } catch (Exception e) { + sleep(time: 5) + throw e + } + } + + sh 'rm -rf vulkantest-results' + + dir('gfxreconstruct') { + checkout([ + $class: 'GitSCM', + branches: [[name: projectBranch]], + userRemoteConfigs: [[url: projectRepo]] + ]) + + def commitHash = sh(script: 'git rev-parse HEAD', returnStdout: true).trim() + + withEnv([ + "PROJECT_REPO=${projectRepo}", + "PROJECT_COMMIT=${commitHash}", + "TEST_REPO=${testRepo}", + "TEST_BRANCH=${testBranch}", + "TEST_SUITE_REPO=${testSuiteRepo}", + "TEST_SUITE_BRANCH=${testSuiteBranch}", + "TEST_SUITE=${testSuite}", + "BITS=${bits}", + "BUILD_MODE=${buildMode}", + "RESULTS_DIR=../vulkantest-results/${stageName}" + ]) { + sh 'ci/runJob.sh' + } + + archiveArtifacts( + artifacts: 'vulkantest-results/**', + excludes: '**/*.gfxr,**/core,**/core.*,**.*.jsonl,**/*.gfxa', + allowEmptyArchive: true, + onlyIfSuccessful: false + ) + } + } + } + } +} + +def gfxrTestAndroidManual( + String stageName, + String nodeLabel, + String buildMode, + String bits, + String testSuite, + String projectRepo, + String projectBranch, + String testRepo, + String testBranch, + String testSuiteRepo, + String testSuiteBranch +) { + return { + stage(stageName) { + node(nodeLabel) { + echo "Running on node: ${env.NODE_NAME} with label requirement: ${nodeLabel}" + + retry(3) { + try { + cleanWs(deleteDirs: true) + } catch (Exception e) { + sleep(time: 5) + throw e + } + } + + sh 'rm -rf vulkantest-results' + + dir('gfxreconstruct') { + checkout([ + $class: 'GitSCM', + branches: [[name: projectBranch]], + userRemoteConfigs: [[url: projectRepo]] + ]) + + def commitHash = sh(script: 'git rev-parse HEAD', returnStdout: true).trim() + + withEnv([ + "PROJECT_REPO=${projectRepo}", + "PROJECT_COMMIT=${commitHash}", + "TEST_REPO=${testRepo}", + "TEST_BRANCH=${testBranch}", + "TEST_SUITE_REPO=${testSuiteRepo}", + "TEST_SUITE_BRANCH=${testSuiteBranch}", + "TEST_SUITE=${testSuite}", + "BITS=${bits}", + "BUILD_MODE=${buildMode}", + "RESULTS_DIR=../vulkantest-results/${stageName}" + ]) { + sh 'ci/runJobAndroid.sh' + } + + archiveArtifacts( + artifacts: 'vulkantest-results/**', + excludes: '**/*.gfxr,**/core,**/core.*,**.*.jsonl,**/*.gfxa', + allowEmptyArchive: true, + onlyIfSuccessful: false + ) + } + } + } + } +} + + +return [ + Bit64 : '64', + Bit32 : '32', + + ReleaseMode : 'Release', + DebugMode : 'Debug', + + AndroidLabel : 'Linux-Android-GFXR', + LinuxMesaLabel : 'Linux-Mesa-6800-stable', + LinuxNvidiaLabel : 'Linux-NVIDIA-950', + MacLabel : 'Mac-M2', + WinAMDLabel : 'Windows-AMD-6800-64G-RAID', + WinNvidiaLabel : 'Windows-NVIDIA-20XX-stable', + Win11AMDLabel : 'Windows11-AMD-6800-stable', + Win11ARMLabel : 'Windows11-ARM-GFXR', + WinAMDExtendedLabel: 'Windows-AMD-6800-tcwinamd2', + WinNvidiaExtendedLabel: 'Windows-NVIDIA-2080-stable-exclusive', + + gfxrTestWindows: this.&gfxrTestWindows, + gfxrTestLinux: this.&gfxrTestLinux, + gfxrTestAndroid: this.&gfxrTestAndroid, + + getNodeType: this.&getNodeType, + gfxrTestWindowsManual: this.&gfxrTestWindowsManual, + gfxrTestLinuxManual: this.&gfxrTestLinuxManual, + gfxrTestAndroidManual: this.&gfxrTestAndroidManual, +] \ No newline at end of file diff --git a/third_party/gfxreconstruct/ci/runJob.sh b/third_party/gfxreconstruct/ci/runJob.sh new file mode 100755 index 000000000..99f387027 --- /dev/null +++ b/third_party/gfxreconstruct/ci/runJob.sh @@ -0,0 +1,38 @@ +git submodule update --init --recursive +git describe --tags --always + +if [ -z "${TEST_SUITE_BRANCH:-}" ]; then + if [ -f "test_suite.ref" ]; then + IFS= read -r TEST_SUITE_BRANCH < test_suite.ref + else + TEST_SUITE_BRANCH="master" + fi + export TEST_SUITE_BRANCH +fi + +git clone --verbose $TEST_SUITE_REPO ci-gfxr-suites +cd ci-gfxr-suites +git checkout $TEST_SUITE_BRANCH +git submodule update --init --recursive +git describe --tags --always +cd .. + +if [ -z "${TEST_COMMIT:-}" ]; then + if [ -f "test.ref" ]; then + IFS= read -r TEST_COMMIT < test.ref + else + TEST_COMMIT="master" + fi + export TEST_COMMIT +fi + +git clone --verbose $TEST_REPO VulkanTests +cd VulkanTests +git checkout $TEST_COMMIT +git submodule update --init --recursive +git describe --tags --always +cd .. +cmake --version +python3 --version + +python3 VulkanTests/gfxrecontest.py --build-mode ${BUILD_MODE} --bits ${BITS} $LINUX_TEST_ARGS --suite "ci-gfxr-suites/$GFXRECON_TRACE_SUBDIR/$TEST_SUITE" --trace-dir "$GFXRECON_TRACE_DIR" --result-dir "$RESULTS_DIR" \ No newline at end of file diff --git a/third_party/gfxreconstruct/ci/runJobAndroid.sh b/third_party/gfxreconstruct/ci/runJobAndroid.sh new file mode 100755 index 000000000..607de8d2a --- /dev/null +++ b/third_party/gfxreconstruct/ci/runJobAndroid.sh @@ -0,0 +1,37 @@ +git submodule update --init --recursive +git describe --tags --always + +if [ -z "${TEST_SUITE_BRANCH:-}" ]; then + if [ -f "test_suite.ref" ]; then + IFS= read -r TEST_SUITE_BRANCH < test_suite.ref + else + TEST_SUITE_BRANCH="master" + fi + export TEST_SUITE_BRANCH +fi + +git clone --verbose $TEST_SUITE_REPO ci-gfxr-suites +cd ci-gfxr-suites +git checkout $TEST_SUITE_BRANCH +git submodule update --init --recursive +git describe --tags --always +cd .. + +if [ -z "${TEST_COMMIT:-}" ]; then + if [ -f "test.ref" ]; then + IFS= read -r TEST_COMMIT < test.ref + else + TEST_COMMIT="master" + fi + export TEST_COMMIT +fi + +git clone --verbose $TEST_REPO VulkanTests +cd VulkanTests +git checkout $TEST_COMMIT +git submodule update --init --recursive +git describe --tags --always +cd .. +cmake --version +python3 --version +python3 VulkanTests/gfxrecontest.py --os AndroidTestOS --build-mode $BUILD_MODE $ANDROID_TEST_ARGS --suite "ci-gfxr-suites/$GFXRECON_TRACE_SUBDIR/$TEST_SUITE" --trace-dir "$GFXRECON_TRACE_DIR" --result-dir "$RESULTS_DIR" \ No newline at end of file diff --git a/third_party/gfxreconstruct/cmake/CodeStyle.cmake b/third_party/gfxreconstruct/cmake/CodeStyle.cmake index 2811807d8..b549c7362 100644 --- a/third_party/gfxreconstruct/cmake/CodeStyle.cmake +++ b/third_party/gfxreconstruct/cmake/CodeStyle.cmake @@ -48,7 +48,12 @@ endif() macro(generate_target_source_files TARGET TARGET_SOURCE_FILES) get_target_property(${TARGET_SOURCE_FILES} ${TARGET} SOURCES) - list(FILTER ${TARGET_SOURCE_FILES} EXCLUDE REGEX ".+\.def|generated_.+") + + # Skip the following things from clang-format + # * Files under the /external/ folder + # * Files that end with the ".def" extension + # * Files that start with "generated_" + list(FILTER ${TARGET_SOURCE_FILES} EXCLUDE REGEX "/external/|.+\.def|generated_.+") endmacro() # Apply code style build directives diff --git a/third_party/gfxreconstruct/cmake/FindDXC.cmake b/third_party/gfxreconstruct/cmake/FindDXC.cmake index 9a935ece7..32844207c 100644 --- a/third_party/gfxreconstruct/cmake/FindDXC.cmake +++ b/third_party/gfxreconstruct/cmake/FindDXC.cmake @@ -16,17 +16,33 @@ if (${D3D12_SUPPORT}) set(DXC_ARCH "") # Some IDEs pass -A in lowercase or in mixed case. # Normalize the CMAKE_GENERATOR_PLATFORM string to upper case to avoid architecture detection mismatch. - string(TOUPPER "${CMAKE_GENERATOR_PLATFORM}" NORMALIZED_CMAKE_GENERATOR_PLATFORM) - if (NORMALIZED_CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64") - set(DXC_ARCH "arm64") - elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(DXC_ARCH "x64") - elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) - set(DXC_ARCH "x86") + # can't assume ${CMAKE_GENERATOR_PLATFORM} is always defined and/or non-empty! + if(NOT "${CMAKE_GENERATOR_PLATFORM}" STREQUAL "") + string(TOUPPER "${CMAKE_GENERATOR_PLATFORM}" NORMALIZED_CMAKE_GENERATOR_PLATFORM) + if (NORMALIZED_CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64") + set(DXC_ARCH "arm64") + elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(DXC_ARCH "x64") + elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(DXC_ARCH "x86") + endif() + else() + # No target platform is specified. Try to compute using native tools architecture. + string(TOUPPER "${CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE}" NORMALIZED_CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE) + + if(NORMALIZED_CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE STREQUAL "ARM64") + set(DXC_ARCH "arm64") + else() + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(DXC_ARCH "x64") + elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(DXC_ARCH "x86") + endif() + endif() endif() if(DXC_ARCH) - + message(STATUS "Selected DXC_ARCH: ${DXC_ARCH}") set(DXC_SDK_DIR "${CMAKE_BINARY_DIR}/external/DXC") set(DXC_SDK_URL "https://github.com/microsoft/DirectXShaderCompiler/releases/download/v1.8.2407/dxc_2024_07_31.zip") diff --git a/third_party/gfxreconstruct/cmake/Test.cmake b/third_party/gfxreconstruct/cmake/Test.cmake index 78b65e9db..e70145970 100644 --- a/third_party/gfxreconstruct/cmake/Test.cmake +++ b/third_party/gfxreconstruct/cmake/Test.cmake @@ -63,8 +63,7 @@ if (${RUN_TESTS}) endif() add_custom_target(${TARGET}RunTests ALL COMMAND "${PYTHON}" ${GFXReconstruct_SOURCE_DIR}/scripts/test.py - -c $<$:debug> $<$:release> - -a ${ARCHITECTURE} + --build-dir ${CMAKE_CURRENT_BINARY_DIR} --test-exe $ $<$>:"--test-args ${ARGN}"> WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) diff --git a/third_party/gfxreconstruct/docs/DEBUG_android.md b/third_party/gfxreconstruct/docs/DEBUG_android.md new file mode 100644 index 000000000..320b8ab1c --- /dev/null +++ b/third_party/gfxreconstruct/docs/DEBUG_android.md @@ -0,0 +1,154 @@ + + +

LunarG

+ +[![Creative Commons][1]][2] + +[1]: https://i.creativecommons.org/l/by-nd/4.0/88x31.png "Creative Commons License" +[2]: https://creativecommons.org/licenses/by-nd/4.0/ + +Copyright © 2025 LunarG, Inc. + +# GFXReconstruct Capture layer debugging - Android + +***This document describes how to debug the GFXReconstruct capture layer +on Android using lldb-server.*** + +## Index + +1. [Problem](#problem) +2. [Setting up lldb-server](#setting-up-lldb-server) +3. [Client setup](#client-setup) + 1. [VSCode](#vscode) + 2. [CLI](#cli) +4. [Waiting for debugger](#waiting-for-debugger) + +## Problem + +Android apps under development can be debugged easily through Android Studio. However, the GFXR capture layer is +a shared object file, not an individual app that can be debugged the easy way. + +This document illustrates a method by which the `lldb-server` binary included with the Android NDK can be used for debugging +a .so built in debug mode with any Android app. + +## Setting up lldb-server + +The first step is to locate and copy the lldb-server binary to a location on the Android device, +making sure to give it execute permissions as well. +``` +adb root +adb push $(find $ANDROID_NDK_HOME -path "*/aarch64/lldb-server") /data/local/tmp +adb shell chmod +x /data/local/tmp/lldb-server +``` + +Then, run the following command to start the server listening on port 9999 +``` +adb shell /data/local/tmp/lldb-server platform --server --listen localhost:9999 +``` + +lldb-server is now ready to accept connections from a client debugger. + +## Client setup + +On the client side, we need to launch `lldb` with options to do the following: + 1. Disable breaking on signals we don't care about (e.g. SIGSEGV) + 2. Load the capture layer's debug symbols + 3. Attach to the remote debugger on the phone + +You need two pieces of information before continuing: + 1. Your device's ID + 2. The path to the directory containing the compiled Android layer e.g. `android/layer/build/intermediates/cxx/Debug/3m4on72q/obj/arm64-v8a/` + +You can obtain your device's id with the `adb devices` command: +``` +> adb devices +List of devices attached +44021FDJH00229 device +``` + +We document two methods for attaching a client debugger to lldb-server: VScode, and CLI + +### VScode +To enable VScode to be the client debugger, you need to set up your +`launch.json` to be like the following: +``` +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Android", + "type": "lldb", + "request": "attach", + "pid": "${input:android_pid}", + "initCommands": [ + "platform select remote-android", + "platform connect connect://:9999", + "process handle -p true -s false -n false SIGSEGV", + "process handle -p true -s false -n false SIGBUS", + "process handle -p true -s false -n false SIGPWR", + "process handle -p true -s false -n false SIGXCPU", + "settings append target.exec-search-paths ${workspaceFolder}/android/layer/build/intermediates/cxx/Debug//obj//" + ] + } + ], + "inputs": [ + { + "id": "android_pid", + "type": "command", + "command": "shellCommand.execute", + "args": { + "command": "adb shell pidof " + } + } + ] +} +``` +When you go to Start Debugging, the `adb shell pidof` command will run, and present you with an +option whose content is the PID of the target process. Selecting this will launch lldb, and will +begin the process of automatically attaching to the remote debugger. + +Please note that the ability to allow shell output to be the input to VScode tasks +is provided by the [Tasks Shell Input](https://marketplace.visualstudio.com/items?itemName=augustocdias.tasks-shell-input) extension. + +### CLI + +If you prefer CLI-based debugging, then create an `lldbinit` file at the root of the repo with the following contents: +``` +platform select remote-android +platform connect connect://:9999 +process handle -p true -s false -n false SIGSEGV +process handle -p true -s false -n false SIGPWR +process handle -p true -s false -n false SIGXCPU +process handle -p true -s false -n false SIGBUS +settings append target.exec-search-paths android/layer/build/intermediates/cxx/Debug//obj// +attach +``` + +Then (assuming `lldb` is in $PATH) launch `lldb` with `lldb -s ./lldbinit` +From here `lldb` will connect, and present you with the typical `lldb` CLI. + + + +## Waiting for debugger + +It is often desired to be able to attach the debugger to the app as soon as it launches. + +Unfortunately, since we only have control over the layer, the best we can do is construct +an arbitrary spinlock in `VulkanCaptureManager::OverrideCreateInstance()` that we release +once the debugger has attached. + +At the start of `VulkanCaptureManager::OverrideCreateInstance`, add: +``` +while (util::platform::GetEnv("debug.gfxrecon.debug_wait") == "1") { + usleep(100000); +} +``` +So you can use `adb shell setprop debug.gfxrecon.debug_wait 1` to enable the spinlock, +and `adb shell setprop debug.gfxrecon.debug_wait 0` to disable it. + +This enables the following workflow: + 1. Start `lldb-server` + 2. Start the app with `debug.gfxrecon.debug_wait` set to `1` + 3. Launch the `lldb` client and wait for the connection, set breakpoints, etc. + 4. Set `debug.gfxrecon.debug_wait` to `0` to break the spinlock + 5. Use the debugger as normal diff --git a/third_party/gfxreconstruct/docs/GFXReconstruct Architectural Principles.md b/third_party/gfxreconstruct/docs/GFXReconstruct Architectural Principles.md new file mode 100644 index 000000000..8e6301ece --- /dev/null +++ b/third_party/gfxreconstruct/docs/GFXReconstruct Architectural Principles.md @@ -0,0 +1,221 @@ +# GFXReconstruct Architectural Principles + +![Design pillars](./img/pillars.png) + + +- [Purpose](#purpose) +- [Use Cases](#use-cases) + - [Reproduction](#reproduction) + - [Tooling](#tooling) + - [Silicon](#silicon) +- [Architectural Principles](#architectural-principles) + - [Best Effort](#best-effort) + - [Reconstruct](#reconstruct) + - [Preserve](#preserve) + - [Replay](#replay) + - [Workload](#workload) + - [Reproduce](#reproduce) + - [Performance](#performance) + - [Dependency](#dependency) +- [Backward Compatibility (major revision)](#backward-compatibility-within-a-major-revision) + - [Format](#format) + - [Interface](#interface) + - [Compatibility](#compatibility) + - [Invocation](#invocation) + - [Convert-JSON](#convert-json) + +--- + +# Purpose + +The purpose of GFXReconstruct is recording application graphics API calls to a file (hereafter called a “capture file”), replaying the API calls from a capture file, and processing capture files. The design, implementation, and use of the tools should be simple. The capture file content should preserve the application’s calls thoroughly and accurately. Replay should by default attempt to honor the application’s intent. + +We recognize broad categories of use for GFXReconstruct that we describe below. The definition of these “use cases” guides the definition of the principles. + +# Use Cases + +## USE-CASE-REPRODUCTION + +GFXReconstruct is intended primarily for reproduction of an application’s API calls for analysis, bug reporting, and testing. This use case prioritizes the integrity and fidelity of the captured data and reproduction of the data when replayed. While file storage and performance is valued, representing the application’s original API calls and intent when possible is paramount. This use case prioritizes using GFXR through one or more of its command-line tools or scripts and does not prioritize use of the internal classes or objects within the code itself. + +## USE-CASE-TOOLING + +GFXReconstruct is also valuable as a foundation for other tools that capture, process, and replay API calls. For this use case, tools using GFXReconstruct may opt in to relax the constraints on integrity and fidelity described in USE-CASE-REPRODUCTION and may select to modify the API call sequence to support capture and replay performance and responsiveness. This case raises the priority of the use of GFXReconstruct through its class structure and exposes some implementation details. + +## USE-CASE-SILICON + +A refinement of USE-CASE-REPRODUCTION is helpful for the purpose of development of new products. Replaying captured content on pre-production and hardware under development can help to evaluate functional completeness of hardwares and drivers prior to production. That development may require operation in environments with limited resources like low RAM, low or no local storage, and potentially transformations on the API call stream to support testing new features or the elimination of legacy features. + +# Architectural Principles + +## BESTEFFORT + +**Developers should apply their best effort to adhere to the spirit of the principles** + +If an exception is made to a principle, there should be a well-considered, documented reason. These principles are listed in rough order of decreasing importance so that a reasoned decision can be made if new development would necessarily conflict with one or the other of two principles. + +## RECONSTRUCT + +**A capture file should contain as much as possible all of the unmodified graphics API calls made by the application for the captured, trimmed range of frames.** + +It may contain more commands represented by Metadata commands but it should be possible to **reconstruct** the original app’s sequence of API commands from the captured “api call” blocks. + +* Implications: + * With no options enabled, capture should record as much as possible a “vanilla” capture that does not record additional graphics API calls. Graphics calls to retrieve additional information should be represented as metadata command blocks (e.g. existing FillMemoryCommandHeader “MetaData Command”) so that it is differentiated from the app’s calls. Graphics calls that must be modified to enable replay should be represented as or augmented with metadata command blocks (e.g. SetOpaqueAddressCommand). +* Benefits: + * It is possible to analyze an application’s API calls using the content of the capture file without the application. The user doesn’t have to determine what calls the capture layer modified or added. +* Exceptions: + * Because of the nature of trimming, Graphics API calls issued before the beginning of the trim range are likely to be rearranged and many omitted. The individual calls to create objects and change object state should remain as close to the original commands issued by the application as possible. + +## PRESERVE + +**The graphics API calls made by the application during capture should be passed to the implementation (or downchain when layering) with as little modification as is possible.** + +Capture should avoid changing the content of the application’s graphics commands. Some exceptions are necessary in order to save information required for replay or modify data so that replay is possible. + +* Implications: + * It *may* be acceptable for the user (through capture layer configuration from, as examples, environment variables, Android properties, or calls into the capture layer from another API layer or the application being captured) to *request* an annotated or altered capture. (e.g. A user may wish to save the GPU buffers used by drawing commands at capture time. However, the preferred technique for altering the application’s graphics command stream and saving additional information for a specialization of GFXR is to make an additional upchain or downchain layer separate from GFXR. For APIs without a formal third-party layering procedure (e.g. DirectX 12), we may implement a plugin architecture for pre- or post- function and method call alteration of commands.) + * Combined with the above principle “A capture file should contain as much as possible of all the graphics API calls made by the application”, a corollary is that API calls modified in capture should be stored in their original form in the capture file; a MetaData Command may encode additional information to signal to the replay application to also modify the calls on replay. +* Benefits: + * GFXR limits the differences between running the application with and without the capture layer. GFXR increases confidence that replay of the capture file will closely match the application’s execution without the capture layer. +* Exceptions: + * Capture enables the Vulkan device features bufferDeviceAddressCaptureReplay, rayTracingPipelineShaderGroupHandleCaptureReplay, and accelerationStructureCaptureReplay during capture of Vulkan applications (and in replay) to allow replay on the same device and driver of ray-tracing workloads. + * Capture may alter function calls (e.g. add USAGE flags to memory creation) that enable the use of those device features + * Before a trim range and, in particular, immediately before the first function within a trim range: + * GFXReconstruct may make API calls to query state, read memory contents, and synchronize with the underlying implementation. + * GFXReconstruct may remove some functions that pertained only to previous frame contents that are not included in the trim range. An example is if vkQueuePresentKHR was omitted from state setup, then vkWaitForFences + * Additionally, any changes in the future that may alter original application behavior should be configurable with a capture-time option. + +## REPLAY + +**Replay without user intervention in the **same** **environment** as capture is an explicit goal. ** + +Replay on the same GPU model as capture, on the same operating system, with the same driver revision, under the same or lower load conditions without additional user-provided options **is** an explicit goal. + +Replay on GPUs, operating systems, OS revisions, and driver revisions that differ from the capture environment, while a lower priority than replay on the same environment, is highly desired. Therefore capture must not make portable replay impossible. + +* Implications: + * Include modifications to the sequence of commands without which replay *in the same environment* would be unlikely to succeed. An example is “Virtual Swapchain”, without which swapchain image indices are likely to differ between capture and replay for all presentation modes except FIFO. +* Benefits: + * Users are not surprised by “replay” failing for a capture just taken. +* Exceptions: + * Android replay may require “--surface-index” parameter app to force selection of a particular surface. + +## GPU WORKLOAD + +**Replay should result in a GPU workload as similar to capture as possible unless requested by the user.** + +Shaders, resources, dependencies, memory access patterns, etc within the trim range should be as similar as possible to that which resulted from capture and without GFXReconstruct, unless requested by the user. Exceptions include requirements for replay in the same environment as capture, e.g. Virtual Swapchain for swapchain image index determinism. + +* Implications: + * Avoid additional Draw calls. + * Avoid introduced synchronization. +* Benefits: + * It is possible to analyze the utilization of the GPU by the application after the fact. +* Current Exceptions: + * Virtual Swapchain + * Replay is currently single-threaded; memory and object creation and access sequences may differ from the captured workload + +## REPRODUCE + +**Replayed command sequence should be as close to the captured command sequence as possible.** + +The replayed commands and methods should be as close to the sequence that was captured as possible except in cases in which changes are necessary (e.g. Virtual Swapchain) unless requested by the user. + +* Implications: + * For commands issued from a single thread within a trim range, the replayed sequence should be as close to identical as possible to the captured sequence except for prominently identified examples (e.g. DXR commands) + * For commands issued from multiple threads during capture, the sequence order is guaranteed not to differ at well defined synchronization points. + * For trimmed sequences, no order is guaranteed for the commands to create objects and set state. + * For trimmed sequences, GPU memory and graphics API state in replay at the beginning of the sequence are, as much as possible, the same as they would be if previous commands had not been trimmed. +* Benefits: + * Execution of code inside the graphics implementation is repeatable and closer to the code executed during capture, so analysis of the replayed commands applies to the application’s commands +* Current Exceptions: + * Virtual Swapchain + * Replay is currently single-threaded; memory and object creation and access sequences may differ from the captured workload + +## PERFORMANCE + +**All components but especially capture should be designed and implemented with an eye to reducing the impact on system performance.** + +We accept that the capture layer will reduce system performance and increase use of system memory during capture of the application. All components should be designed and implemented with an eye to performance, especially the capture layer. + +* Implications: + * Avoid locks and allocations + * Make large initial allocations, avoid repeated allocations + * Prefer grouping gpu-transfer operations, limit added queue submissions and synchronization (try to limit stalls when initiating trimmed capture) +* Benefits: + * Ease of use of the tools +* Current Exceptions + * We may have lots of STL maps doing small incremental heap allocations of their internal redblack tree nodes protected by locks (grep for std::map). + * We have plenty of std::vectors in local variables which may make multiple heap allocations and frees on every execution of their surrounding blocks of code (depending on optimization level?) + +## DEPENDENCY + +**Capture layer should not shell out / fork/exec / CreateProcess except whenever absolutely necessary** + +Capture and replay run on three different operating systems and the intersection of similar system tools that are installed by default is small. Expecting any system binaries other than the default will be awkward. Installing additional tools may be possible but we install the capture layer and gfxrecon-replay on demand on Android, and installing additional tools would add complexity. + +* Benefits: + * Reduce external dependencies + +# Backward Compatibility Within A Major Revision + +## FORMAT + +**Existing binary capture files will continue to be readable.** + +Existing block types and commands will continue to exist in format.h and the FileProcessor and Decoder will continue to read and decode those blocks. Blocks may be deprecated for writing to a file, which means adding "\_deprecated" to their enumerant and struct name and noting the new ID and block struct to use. (We've already done this for "kCreateHardwareBufferCommand\_deprecated". Note there exist kResizeWindowCommand and kResizeWindowCommand2 but the "2" denotes an extended command, not a replacement command.) + +## INTERFACE + +**Some object methods and function call signatures will be frozen.** + +A subset of the existing Consumer interface methods, utility library functions, namespaces, and global constants will continue with their current signatures. This allows others to subclass from the Consumer base classes and also call Consumers using the Consumer base class interfaces. Compatibility is currently limited to source code (eliminate or reduce compile time errors) but not binary compatibility. + +Existing method signatures should not be removed or altered for the base classes for VulkanConsumer, Dx12Consumer, MetadataConsumerBase, MarkerConsumerBase as of [v1.0.4](https://github.com/LunarG/gfxreconstruct/tree/v1.0.4). + +Existing function signatures should not be removed or altered for functions in “framework/util”: + +* date\_time.h +* defines.h +* driver\_info.h +* file\_output\_stream.h +* file\_path.h +* gpu\_va\_map.h +* gpu\_va\_range.h +* hash.h +* json\_util.h +* keyboard.h +* logging.h +* memory\_output\_stream.h +* monotonic\_allocator.h +* output\_stream.h +* platform.h +* strings.h +* to\_string.h + +Changes to functionality will be managed (in decreasing order of preference) by (A) versioning the class (e.g. “VulkanConsumer2”), or (B) versioning the method/function (e.g. “Dx12ConsumerBase::Process\_DriverInfo2”). + +## COMPATIBILITY + +**Default behavior should persist if possible** + +The default behavior of tools and capture layers should not change. + +## INVOCATION + +**Existing environment variables and command line options will not be deleted.** + +Existing environment variables and properties for capture as well as command line arguments to replay shall continue to work as implemented or be disabled with a non-fatal message so that scripts would not unexpectedly break. + +## CONVERT-JSON + +**Avoid changing JSON key names and value types.** + +The implicit schema (or possibly we need to create an explicit schema) of the JSON and JSONLines output of convert will not be changed except for deprecation of command IDs. New field names may be created. + +* Vulkan output as of version 1.0.4 +* Direct3D 12 output at version 1.0.4 + diff --git a/third_party/gfxreconstruct/docs/img/pillars.png b/third_party/gfxreconstruct/docs/img/pillars.png new file mode 100644 index 000000000..7b6977441 Binary files /dev/null and b/third_party/gfxreconstruct/docs/img/pillars.png differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/Update_Agility_SDK.md b/third_party/gfxreconstruct/external/AgilitySDK/Update_Agility_SDK.md index f53bf639f..58247eee9 100644 --- a/third_party/gfxreconstruct/external/AgilitySDK/Update_Agility_SDK.md +++ b/third_party/gfxreconstruct/external/AgilitySDK/Update_Agility_SDK.md @@ -1,5 +1,5 @@ # Current Agility SDK Version -- Version: `1.615.1` https://www.nuget.org/packages/Microsoft.Direct3D.D3D12/1.615.1 +- Version: `1.616.1` https://www.nuget.org/packages/Microsoft.Direct3D.D3D12/1.616.1 # Download Agility SDK - Find the target version in this webiste https://devblogs.microsoft.com/directx/directx12agility/. diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/D3D12Core.dll b/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/D3D12Core.dll index ade7fe302..76ed6cee8 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/D3D12Core.dll and b/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/D3D12Core.dll differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/D3D12Core.pdb b/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/D3D12Core.pdb index eb02f9e78..df9a92bde 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/D3D12Core.pdb and b/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/D3D12Core.pdb differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3d12SDKLayers.dll b/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3d12SDKLayers.dll index d79ec7748..d54f3db46 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3d12SDKLayers.dll and b/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3d12SDKLayers.dll differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3d12SDKLayers.pdb b/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3d12SDKLayers.pdb index c1b1df3bc..5ef2ff2c1 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3d12SDKLayers.pdb and b/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3d12SDKLayers.pdb differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3dconfig.exe b/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3dconfig.exe index 0769abadd..46a029cae 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3dconfig.exe and b/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3dconfig.exe differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3dconfig.pdb b/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3dconfig.pdb index 789965d5c..fc0dbe440 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3dconfig.pdb and b/third_party/gfxreconstruct/external/AgilitySDK/bin/arm64/d3dconfig.pdb differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/D3D12Core.dll b/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/D3D12Core.dll index c971524ce..30d385adb 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/D3D12Core.dll and b/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/D3D12Core.dll differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/D3D12Core.pdb b/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/D3D12Core.pdb index c69ffdbcd..2234afb9f 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/D3D12Core.pdb and b/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/D3D12Core.pdb differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3d12SDKLayers.dll b/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3d12SDKLayers.dll index 39199d77a..993978f55 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3d12SDKLayers.dll and b/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3d12SDKLayers.dll differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3d12SDKLayers.pdb b/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3d12SDKLayers.pdb index 76e236b58..4af02d681 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3d12SDKLayers.pdb and b/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3d12SDKLayers.pdb differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3dconfig.exe b/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3dconfig.exe index 992e78921..d2b52ffef 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3dconfig.exe and b/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3dconfig.exe differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3dconfig.pdb b/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3dconfig.pdb index eddc55e9f..a5bf5894b 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3dconfig.pdb and b/third_party/gfxreconstruct/external/AgilitySDK/bin/win32/d3dconfig.pdb differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/D3D12Core.dll b/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/D3D12Core.dll index dab7fbdb1..8cfea3259 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/D3D12Core.dll and b/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/D3D12Core.dll differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/D3D12Core.pdb b/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/D3D12Core.pdb index 074bcd8ee..493130cec 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/D3D12Core.pdb and b/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/D3D12Core.pdb differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3d12SDKLayers.dll b/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3d12SDKLayers.dll index 01d0392c9..e51626a23 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3d12SDKLayers.dll and b/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3d12SDKLayers.dll differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3d12SDKLayers.pdb b/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3d12SDKLayers.pdb index 77fe8efe9..e954f8841 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3d12SDKLayers.pdb and b/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3d12SDKLayers.pdb differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3dconfig.exe b/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3dconfig.exe index 2aaeff8c8..e4bc8e8b7 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3dconfig.exe and b/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3dconfig.exe differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3dconfig.pdb b/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3dconfig.pdb index f25f0cf2c..da5f0a27f 100644 Binary files a/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3dconfig.pdb and b/third_party/gfxreconstruct/external/AgilitySDK/bin/x64/d3dconfig.pdb differ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12.h b/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12.h index 06c37e43c..bdd86e1e3 100644 --- a/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12.h +++ b/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12.h @@ -493,6 +493,13 @@ typedef interface ID3D12Tools1 ID3D12Tools1; #endif /* __ID3D12Tools1_FWD_DEFINED__ */ +#ifndef __ID3D12Tools2_FWD_DEFINED__ +#define __ID3D12Tools2_FWD_DEFINED__ +typedef interface ID3D12Tools2 ID3D12Tools2; + +#endif /* __ID3D12Tools2_FWD_DEFINED__ */ + + #ifndef __ID3D12PageableTools_FWD_DEFINED__ #define __ID3D12PageableTools_FWD_DEFINED__ typedef interface ID3D12PageableTools ID3D12PageableTools; @@ -507,6 +514,13 @@ typedef interface ID3D12DeviceTools ID3D12DeviceTools; #endif /* __ID3D12DeviceTools_FWD_DEFINED__ */ +#ifndef __ID3D12DeviceTools1_FWD_DEFINED__ +#define __ID3D12DeviceTools1_FWD_DEFINED__ +typedef interface ID3D12DeviceTools1 ID3D12DeviceTools1; + +#endif /* __ID3D12DeviceTools1_FWD_DEFINED__ */ + + #ifndef __ID3D12SDKConfiguration_FWD_DEFINED__ #define __ID3D12SDKConfiguration_FWD_DEFINED__ typedef interface ID3D12SDKConfiguration ID3D12SDKConfiguration; @@ -1130,7 +1144,7 @@ extern "C"{ #define D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT ( 15 ) -#define D3D12_PREVIEW_SDK_VERSION ( 716 ) +#define D3D12_PREVIEW_SDK_VERSION ( 717 ) #define D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT ( 16 ) @@ -1263,7 +1277,7 @@ extern "C"{ #define D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT ( 2 ) -#define D3D12_SDK_VERSION ( 615 ) +#define D3D12_SDK_VERSION ( 616 ) #define D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES ( 32 ) @@ -1361,6 +1375,10 @@ extern "C"{ #define D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT ( 512 ) +#define D3D12_TIGHT_ALIGNMENT_MIN_COMMITTED_RESOURCE_ALIGNEMNT ( 4096 ) + +#define D3D12_TIGHT_ALIGNMENT_MIN_PLACED_RESOURCE_ALIGNEMNT ( 8 ) + #define D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES ( 65536 ) #define D3D12_TRACKED_WORKLOAD_MAX_INSTANCES ( 32 ) @@ -2353,6 +2371,7 @@ enum D3D12_FEATURE D3D12_FEATURE_PLACED_RESOURCE_SUPPORT_INFO = 51, D3D12_FEATURE_HARDWARE_COPY = 52, D3D12_FEATURE_D3D12_OPTIONS21 = 53, + D3D12_FEATURE_APPLICATION_SPECIFIC_DRIVER_STATE = 56, D3D12_FEATURE_BYTECODE_BYPASS_HASH_SUPPORTED = 57 } D3D12_FEATURE; @@ -2726,7 +2745,8 @@ enum D3D12_RAYTRACING_TIER { D3D12_RAYTRACING_TIER_NOT_SUPPORTED = 0, D3D12_RAYTRACING_TIER_1_0 = 10, - D3D12_RAYTRACING_TIER_1_1 = 11 + D3D12_RAYTRACING_TIER_1_1 = 11, + D3D12_RAYTRACING_TIER_1_2 = 12 } D3D12_RAYTRACING_TIER; typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS5 @@ -2924,6 +2944,11 @@ typedef struct D3D12_FEATURE_DATA_HARDWARE_COPY _Out_ BOOL Supported; } D3D12_FEATURE_DATA_HARDWARE_COPY; +typedef struct D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE + { + _Out_ BOOL Supported; + } D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE; + typedef struct D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED { _Out_ BOOL Supported; @@ -14384,7 +14409,8 @@ enum D3D12_RAYTRACING_PIPELINE_FLAGS { D3D12_RAYTRACING_PIPELINE_FLAG_NONE = 0, D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_TRIANGLES = 0x100, - D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200 + D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200, + D3D12_RAYTRACING_PIPELINE_FLAG_ALLOW_OPACITY_MICROMAPS = 0x400 } D3D12_RAYTRACING_PIPELINE_FLAGS; DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_PIPELINE_FLAGS ) @@ -14538,7 +14564,8 @@ typedef enum D3D12_RAYTRACING_GEOMETRY_TYPE { D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES = 0, - D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS = ( D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES + 1 ) + D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS = ( D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES + 1 ) , + D3D12_RAYTRACING_GEOMETRY_TYPE_OMM_TRIANGLES = ( D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS + 1 ) } D3D12_RAYTRACING_GEOMETRY_TYPE; typedef @@ -14548,7 +14575,9 @@ enum D3D12_RAYTRACING_INSTANCE_FLAGS D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_CULL_DISABLE = 0x1, D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_FRONT_COUNTERCLOCKWISE = 0x2, D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OPAQUE = 0x4, - D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE = 0x8 + D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE = 0x8, + D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OMM_2_STATE = 0x10, + D3D12_RAYTRACING_INSTANCE_FLAG_DISABLE_OMMS = 0x20 } D3D12_RAYTRACING_INSTANCE_FLAGS; DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_INSTANCE_FLAGS ) @@ -14598,6 +14627,51 @@ typedef struct D3D12_RAYTRACING_GEOMETRY_AABBS_DESC D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE AABBs; } D3D12_RAYTRACING_GEOMETRY_AABBS_DESC; +typedef +enum D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX + { + D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT = -1, + D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE = -2, + D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT = -3, + D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE = -4 + } D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX; + +typedef +enum D3D12_RAYTRACING_OPACITY_MICROMAP_STATE + { + D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_TRANSPARENT = 0, + D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_OPAQUE = 1, + D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_TRANSPARENT = 2, + D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_OPAQUE = 3 + } D3D12_RAYTRACING_OPACITY_MICROMAP_STATE; + +typedef +enum D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT + { + D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_2_STATE = 0x1, + D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_4_STATE = 0x2 + } D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT; + +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_DESC +{ + UINT ByteOffset; + UINT SubdivisionLevel : 16; + D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT Format : 16; +} D3D12_RAYTRACING_OPACITY_MICROMAP_DESC; +typedef struct D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC + { + D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE OpacityMicromapIndexBuffer; + DXGI_FORMAT OpacityMicromapIndexFormat; + UINT OpacityMicromapBaseLocation; + D3D12_GPU_VIRTUAL_ADDRESS OpacityMicromapArray; + } D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC; + +typedef struct D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC + { + const D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC *pTriangles; + const D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC *pOmmLinkage; + } D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC; + typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS { @@ -14607,7 +14681,9 @@ enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_TRACE = 0x4, D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_BUILD = 0x8, D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_MINIMIZE_MEMORY = 0x10, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE = 0x20 + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE = 0x20, + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_OMM_UPDATE = 0x40, + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_DISABLE_OMMS = 0x80 } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS; DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS ) @@ -14625,7 +14701,8 @@ typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE { D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL = 0, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL = 0x1 + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL = 0x1, + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_ARRAY = 0x2 } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE; typedef @@ -14670,12 +14747,20 @@ typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION // depending on Type field, NumDescs above is followed by either: // D3D12_RAY_TRACING_INSTANCE_DESC InstanceDescs[NumDescs] // or D3D12_RAY_TRACING_GEOMETRY_DESC GeometryDescs[NumDescs]. +// or D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC (NumDescs == 1 in this case). +// +// For D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC, the pOmmHistogram pointer becomes a GPUVA instead of CPU pointer +// // There is 4 bytes of padding between GeometryDesc structs in the array so alignment is natural when viewed by CPU. typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC { UINT64 SerializedSizeInBytes; - UINT64 NumBottomLevelAccelerationStructurePointers; + union + { + UINT64 NumBottomLevelAccelerationStructurePointers; + UINT64 NumBottomLevelAccelerationStructureHeaderAndPointerListPairs; + } ; } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC; typedef struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER @@ -14687,7 +14772,8 @@ typedef struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER typedef enum D3D12_SERIALIZED_DATA_TYPE { - D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE = 0 + D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE = 0, + D3D12_SERIALIZED_DATA_APPLICATION_SPECIFIC_DRIVER_STATE = 0x1 } D3D12_SERIALIZED_DATA_TYPE; typedef @@ -14708,6 +14794,39 @@ typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER UINT64 NumBottomLevelAccelerationStructurePointersAfterHeader; } D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER; +typedef +enum D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE + { + D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_NONE = 0, + D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BOTTOM_LEVEL_POINTERS = 0, + D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BLOCKS = 0xffffffff + } D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE; + +typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1 + { + D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER DriverMatchingIdentifier; + UINT64 SerializedSizeInBytesIncludingHeader; + UINT64 DeserializedSizeInBytes; + union + { + UINT NumBottomLevelAccelerationStructurePointersAfterHeader; + UINT NumBlocks; + } ; + D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE HeaderPostambleType; + } D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1; + +typedef +enum D3D12_SERIALIZED_BLOCK_TYPE + { + D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE_OPACITY_MICROMAPS = 0 + } D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE; + +typedef struct D3D12_RAYTRACING_SERIALIZED_BLOCK + { + D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE Type; + UINT64 NumBlockPointersAfterHeader; + } D3D12_RAYTRACING_SERIALIZED_BLOCK; + typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC { UINT64 CurrentSizeInBytes; @@ -14731,9 +14850,25 @@ typedef struct D3D12_RAYTRACING_GEOMETRY_DESC { D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC Triangles; D3D12_RAYTRACING_GEOMETRY_AABBS_DESC AABBs; + D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC OmmTriangles; } ; } D3D12_RAYTRACING_GEOMETRY_DESC; +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY + { + UINT Count; + UINT SubdivisionLevel; + D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT Format; + } D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY; + +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC + { + UINT NumOmmHistogramEntries; + const D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY *pOmmHistogram; + D3D12_GPU_VIRTUAL_ADDRESS InputBuffer; + D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE PerOmmDescs; + } D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC; + typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS { D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type; @@ -14745,6 +14880,7 @@ typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS D3D12_GPU_VIRTUAL_ADDRESS InstanceDescs; const D3D12_RAYTRACING_GEOMETRY_DESC *pGeometryDescs; const D3D12_RAYTRACING_GEOMETRY_DESC *const *ppGeometryDescs; + const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC *pOpacityMicromapArrayDesc; } ; } D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS; @@ -14763,6 +14899,29 @@ typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO UINT64 UpdateScratchDataSizeInBytes; } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO; +typedef +enum D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE + { + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE = 0, + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION = 0x1 + } D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE; + +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC + { + D3D12_GPU_VIRTUAL_ADDRESS DestBuffer; + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE InfoType; + } D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC; + +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC + { + UINT64 CurrentSizeInBytes; + } D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC; + +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC + { + UINT64 DecodedSizeInBytes; + } D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC; + typedef enum D3D12_RAY_FLAGS { @@ -14776,7 +14935,8 @@ enum D3D12_RAY_FLAGS D3D12_RAY_FLAG_CULL_OPAQUE = 0x40, D3D12_RAY_FLAG_CULL_NON_OPAQUE = 0x80, D3D12_RAY_FLAG_SKIP_TRIANGLES = 0x100, - D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200 + D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200, + D3D12_RAY_FLAG_FORCE_OMM_2_STATE = 0x400 } D3D12_RAY_FLAGS; DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAY_FLAGS ) @@ -28786,6 +28946,124 @@ EXTERN_C const IID IID_ID3D12Tools1; #endif /* __ID3D12Tools1_INTERFACE_DEFINED__ */ +#ifndef __ID3D12Tools2_INTERFACE_DEFINED__ +#define __ID3D12Tools2_INTERFACE_DEFINED__ + +/* interface ID3D12Tools2 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12Tools2; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("01d393c5-c9b0-42a1-958c-c26b02d4d097") + ID3D12Tools2 : public ID3D12Tools1 + { + public: + virtual HRESULT STDMETHODCALLTYPE SetApplicationSpecificDriverState( + _In_ IUnknown *pAdapter, + _In_opt_ ID3DBlob *pBlob) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12Tools2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12Tools2 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12Tools2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12Tools2 * This); + + DECLSPEC_XFGVIRT(ID3D12Tools, EnableShaderInstrumentation) + void ( STDMETHODCALLTYPE *EnableShaderInstrumentation )( + ID3D12Tools2 * This, + BOOL bEnable); + + DECLSPEC_XFGVIRT(ID3D12Tools, ShaderInstrumentationEnabled) + BOOL ( STDMETHODCALLTYPE *ShaderInstrumentationEnabled )( + ID3D12Tools2 * This); + + DECLSPEC_XFGVIRT(ID3D12Tools1, ReserveGPUVARangesAtCreate) + HRESULT ( STDMETHODCALLTYPE *ReserveGPUVARangesAtCreate )( + ID3D12Tools2 * This, + _In_reads_(uiNumRanges) D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pRanges, + _In_ UINT uiNumRanges); + + DECLSPEC_XFGVIRT(ID3D12Tools1, ClearReservedGPUVARangesList) + void ( STDMETHODCALLTYPE *ClearReservedGPUVARangesList )( + ID3D12Tools2 * This); + + DECLSPEC_XFGVIRT(ID3D12Tools2, SetApplicationSpecificDriverState) + HRESULT ( STDMETHODCALLTYPE *SetApplicationSpecificDriverState )( + ID3D12Tools2 * This, + _In_ IUnknown *pAdapter, + _In_opt_ ID3DBlob *pBlob); + + END_INTERFACE + } ID3D12Tools2Vtbl; + + interface ID3D12Tools2 + { + CONST_VTBL struct ID3D12Tools2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12Tools2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12Tools2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12Tools2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12Tools2_EnableShaderInstrumentation(This,bEnable) \ + ( (This)->lpVtbl -> EnableShaderInstrumentation(This,bEnable) ) + +#define ID3D12Tools2_ShaderInstrumentationEnabled(This) \ + ( (This)->lpVtbl -> ShaderInstrumentationEnabled(This) ) + + +#define ID3D12Tools2_ReserveGPUVARangesAtCreate(This,pRanges,uiNumRanges) \ + ( (This)->lpVtbl -> ReserveGPUVARangesAtCreate(This,pRanges,uiNumRanges) ) + +#define ID3D12Tools2_ClearReservedGPUVARangesList(This) \ + ( (This)->lpVtbl -> ClearReservedGPUVARangesList(This) ) + + +#define ID3D12Tools2_SetApplicationSpecificDriverState(This,pAdapter,pBlob) \ + ( (This)->lpVtbl -> SetApplicationSpecificDriverState(This,pAdapter,pBlob) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12Tools2_INTERFACE_DEFINED__ */ + + #ifndef __ID3D12PageableTools_INTERFACE_DEFINED__ #define __ID3D12PageableTools_INTERFACE_DEFINED__ @@ -28952,7 +29230,125 @@ EXTERN_C const IID IID_ID3D12DeviceTools; #endif /* __ID3D12DeviceTools_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0065 */ +/* interface __MIDL_itf_d3d12_0000_0066 */ +/* [local] */ + +typedef +enum D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS + { + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_UNKNOWN = 1, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_USED = 2, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_IGNORED = 3, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_NOT_SPECIFIED = 4 + } D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS; + + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0066_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0066_v0_0_s_ifspec; + +#ifndef __ID3D12DeviceTools1_INTERFACE_DEFINED__ +#define __ID3D12DeviceTools1_INTERFACE_DEFINED__ + +/* interface ID3D12DeviceTools1 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12DeviceTools1; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e30e9fc7-e641-4d6e-8a81-9dd9206ec47a") + ID3D12DeviceTools1 : public ID3D12DeviceTools + { + public: + virtual HRESULT STDMETHODCALLTYPE GetApplicationSpecificDriverState( + _COM_Outptr_ ID3DBlob **ppBlob) = 0; + + virtual D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS STDMETHODCALLTYPE GetApplicationSpecificDriverBlobStatus( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12DeviceTools1Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12DeviceTools1 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12DeviceTools1 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12DeviceTools1 * This); + + DECLSPEC_XFGVIRT(ID3D12DeviceTools, SetNextAllocationAddress) + void ( STDMETHODCALLTYPE *SetNextAllocationAddress )( + ID3D12DeviceTools1 * This, + _In_ D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress); + + DECLSPEC_XFGVIRT(ID3D12DeviceTools1, GetApplicationSpecificDriverState) + HRESULT ( STDMETHODCALLTYPE *GetApplicationSpecificDriverState )( + ID3D12DeviceTools1 * This, + _COM_Outptr_ ID3DBlob **ppBlob); + + DECLSPEC_XFGVIRT(ID3D12DeviceTools1, GetApplicationSpecificDriverBlobStatus) + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS ( STDMETHODCALLTYPE *GetApplicationSpecificDriverBlobStatus )( + ID3D12DeviceTools1 * This); + + END_INTERFACE + } ID3D12DeviceTools1Vtbl; + + interface ID3D12DeviceTools1 + { + CONST_VTBL struct ID3D12DeviceTools1Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12DeviceTools1_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12DeviceTools1_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12DeviceTools1_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12DeviceTools1_SetNextAllocationAddress(This,nextAllocationVirtualAddress) \ + ( (This)->lpVtbl -> SetNextAllocationAddress(This,nextAllocationVirtualAddress) ) + + +#define ID3D12DeviceTools1_GetApplicationSpecificDriverState(This,ppBlob) \ + ( (This)->lpVtbl -> GetApplicationSpecificDriverState(This,ppBlob) ) + +#define ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus(This) \ + ( (This)->lpVtbl -> GetApplicationSpecificDriverBlobStatus(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12DeviceTools1_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12_0000_0067 */ /* [local] */ typedef struct D3D12_SUBRESOURCE_DATA @@ -29103,8 +29499,8 @@ HRESULT WINAPI D3D12GetInterface( _In_ REFCLSID rclsid, _In_ REFIID riid, _COM_O -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0065_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0065_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0067_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0067_v0_0_s_ifspec; #ifndef __ID3D12SDKConfiguration_INTERFACE_DEFINED__ #define __ID3D12SDKConfiguration_INTERFACE_DEFINED__ @@ -29299,7 +29695,7 @@ EXTERN_C const IID IID_ID3D12SDKConfiguration1; #endif /* __ID3D12SDKConfiguration1_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0067 */ +/* interface __MIDL_itf_d3d12_0000_0069 */ /* [local] */ typedef @@ -29314,8 +29710,8 @@ enum D3D12_DEVICE_FACTORY_FLAGS DEFINE_ENUM_FLAG_OPERATORS( D3D12_DEVICE_FACTORY_FLAGS ) -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0067_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0067_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0069_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0069_v0_0_s_ifspec; #ifndef __ID3D12DeviceFactory_INTERFACE_DEFINED__ #define __ID3D12DeviceFactory_INTERFACE_DEFINED__ @@ -29476,7 +29872,7 @@ EXTERN_C const IID IID_ID3D12DeviceFactory; #endif /* __ID3D12DeviceFactory_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0068 */ +/* interface __MIDL_itf_d3d12_0000_0070 */ /* [local] */ typedef @@ -29507,8 +29903,8 @@ typedef struct D3D12_DEVICE_CONFIGURATION_DESC -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0068_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0068_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0070_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0070_v0_0_s_ifspec; #ifndef __ID3D12DeviceConfiguration_INTERFACE_DEFINED__ #define __ID3D12DeviceConfiguration_INTERFACE_DEFINED__ @@ -29796,7 +30192,7 @@ EXTERN_C const IID IID_ID3D12DeviceConfiguration1; #endif /* __ID3D12DeviceConfiguration1_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0070 */ +/* interface __MIDL_itf_d3d12_0000_0072 */ /* [local] */ typedef @@ -29836,8 +30232,8 @@ enum D3D12_SHADING_RATE_COMBINER -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0070_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0070_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0072_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0072_v0_0_s_ifspec; #ifndef __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__ #define __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__ @@ -30672,7 +31068,7 @@ EXTERN_C const IID IID_ID3D12GraphicsCommandList5; #endif /* __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0071 */ +/* interface __MIDL_itf_d3d12_0000_0073 */ /* [local] */ typedef struct D3D12_DISPATCH_MESH_ARGUMENTS @@ -30684,8 +31080,8 @@ typedef struct D3D12_DISPATCH_MESH_ARGUMENTS -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0071_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0071_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0073_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0073_v0_0_s_ifspec; #ifndef __ID3D12GraphicsCommandList6_INTERFACE_DEFINED__ #define __ID3D12GraphicsCommandList6_INTERFACE_DEFINED__ @@ -35263,7 +35659,7 @@ EXTERN_C const IID IID_ID3D12GBVDiagnostics; #endif /* __ID3D12GBVDiagnostics_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0078 */ +/* interface __MIDL_itf_d3d12_0000_0080 */ /* [local] */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ @@ -35331,8 +35727,10 @@ DEFINE_GUID(IID_ID3D12Device14,0x5f6e592d,0xd895,0x44c2,0x8e,0x4a,0x88,0xad,0x49 DEFINE_GUID(IID_ID3D12VirtualizationGuestDevice,0xbc66d368,0x7373,0x4943,0x87,0x57,0xfc,0x87,0xdc,0x79,0xe4,0x76); DEFINE_GUID(IID_ID3D12Tools,0x7071e1f0,0xe84b,0x4b33,0x97,0x4f,0x12,0xfa,0x49,0xde,0x65,0xc5); DEFINE_GUID(IID_ID3D12Tools1,0xe4fbc019,0xdd3c,0x43e1,0x8f,0x32,0x7f,0x64,0x95,0x75,0xf0,0xa0); +DEFINE_GUID(IID_ID3D12Tools2,0x01d393c5,0xc9b0,0x42a1,0x95,0x8c,0xc2,0x6b,0x02,0xd4,0xd0,0x97); DEFINE_GUID(IID_ID3D12PageableTools,0x8f1359db,0xd8d1,0x42f9,0xb5,0xcf,0x79,0xf4,0xcb,0xad,0x0d,0x3d); DEFINE_GUID(IID_ID3D12DeviceTools,0x2ea68e9c,0x19c3,0x4e47,0xa1,0x09,0x6c,0xda,0xdf,0xf0,0xac,0xa9); +DEFINE_GUID(IID_ID3D12DeviceTools1,0xe30e9fc7,0xe641,0x4d6e,0x8a,0x81,0x9d,0xd9,0x20,0x6e,0xc4,0x7a); DEFINE_GUID(IID_ID3D12SDKConfiguration,0xe9eb5314,0x33aa,0x42b2,0xa7,0x18,0xd7,0x7f,0x58,0xb1,0xf1,0xc7); DEFINE_GUID(IID_ID3D12SDKConfiguration1,0x8aaf9303,0xad25,0x48b9,0x9a,0x57,0xd9,0xc3,0x7e,0x00,0x9d,0x9f); DEFINE_GUID(IID_ID3D12DeviceFactory,0x61f307d3,0xd34e,0x4e7c,0x83,0x74,0x3b,0xa4,0xde,0x23,0xcc,0xcb); @@ -35348,8 +35746,8 @@ DEFINE_GUID(IID_ID3D12DSRDeviceFactory,0xf343d1a0,0xafe3,0x439f,0xb1,0x3d,0xcd,0 DEFINE_GUID(IID_ID3D12GBVDiagnostics,0x597985ab,0x9b75,0x4dbb,0xbe,0x23,0x07,0x61,0x19,0x5b,0xeb,0xee); -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0078_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0078_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0080_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0080_v0_0_s_ifspec; /* Additional Prototypes for ALL interfaces */ diff --git a/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12.idl b/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12.idl index 0bb8ed6db..faf878e5d 100644 --- a/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12.idl +++ b/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12.idl @@ -293,7 +293,7 @@ const UINT D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_END = 0xffffffff; const UINT D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff8; const UINT D3D12_PACKED_TILE = 0xffffffff; const UINT D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT = 15; -const UINT D3D12_PREVIEW_SDK_VERSION = 716; +const UINT D3D12_PREVIEW_SDK_VERSION = 717; const UINT D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT = 16; const UINT D3D12_PS_CS_UAV_REGISTER_COMPONENTS = 1; const UINT D3D12_PS_CS_UAV_REGISTER_COUNT = 8; @@ -361,7 +361,7 @@ const UINT D3D12_REQ_TEXTURECUBE_DIMENSION = 16384; const UINT D3D12_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL = 0; const UINT D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES = 0xffffffff; const UINT D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT = 2; -const UINT D3D12_SDK_VERSION = 615; +const UINT D3D12_SDK_VERSION = 616; const UINT D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES = 32; const UINT D3D12_SHADER_MAJOR_VERSION = 5; const UINT D3D12_SHADER_MAX_INSTANCES = 65535; @@ -414,6 +414,8 @@ const UINT D3D12_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR = 1; const UINT D3D12_TEXEL_ADDRESS_RANGE_BIT_COUNT = 16; const UINT D3D12_TEXTURE_DATA_PITCH_ALIGNMENT = 256; const UINT D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT = 512; +const UINT D3D12_TIGHT_ALIGNMENT_MIN_COMMITTED_RESOURCE_ALIGNEMNT = 4096; +const UINT D3D12_TIGHT_ALIGNMENT_MIN_PLACED_RESOURCE_ALIGNEMNT = 8; const UINT D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES = 65536; const UINT D3D12_TRACKED_WORKLOAD_MAX_INSTANCES = 32; const UINT D3D12_UAV_COUNTER_PLACEMENT_ALIGNMENT = 4096; @@ -1044,6 +1046,7 @@ typedef enum D3D12_FEATURE D3D12_FEATURE_PLACED_RESOURCE_SUPPORT_INFO = 51, D3D12_FEATURE_HARDWARE_COPY = 52, D3D12_FEATURE_D3D12_OPTIONS21 = 53, + D3D12_FEATURE_APPLICATION_SPECIFIC_DRIVER_STATE = 56, D3D12_FEATURE_BYTECODE_BYPASS_HASH_SUPPORTED = 57, } D3D12_FEATURE; @@ -1423,6 +1426,7 @@ typedef enum D3D12_RAYTRACING_TIER D3D12_RAYTRACING_TIER_NOT_SUPPORTED = 0, D3D12_RAYTRACING_TIER_1_0 = 10, D3D12_RAYTRACING_TIER_1_1 = 11, + D3D12_RAYTRACING_TIER_1_2 = 12, } D3D12_RAYTRACING_TIER; // D3D12_FEATURE_D3D12_OPTIONS5 @@ -1638,6 +1642,10 @@ typedef struct D3D12_FEATURE_DATA_HARDWARE_COPY [annotation("_Out_")] BOOL Supported; } D3D12_FEATURE_DATA_HARDWARE_COPY; +typedef struct D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE +{ + [annotation("_Out_")] BOOL Supported; +} D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE; typedef struct D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED { @@ -4579,7 +4587,8 @@ typedef enum D3D12_RAYTRACING_PIPELINE_FLAGS D3D12_RAYTRACING_PIPELINE_FLAG_NONE = 0x0, D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_TRIANGLES = 0x100, D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200, -} D3D12_RAYTRACING_PIPELINE_FLAGS; + D3D12_RAYTRACING_PIPELINE_FLAG_ALLOW_OPACITY_MICROMAPS = 0x400, +} D3D12_RAYTRACING_PIPELINE_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_PIPELINE_FLAGS )") typedef struct D3D12_RAYTRACING_PIPELINE_CONFIG1 @@ -4727,6 +4736,7 @@ typedef enum D3D12_RAYTRACING_GEOMETRY_TYPE { D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES, D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS, + D3D12_RAYTRACING_GEOMETRY_TYPE_OMM_TRIANGLES } D3D12_RAYTRACING_GEOMETRY_TYPE; typedef enum D3D12_RAYTRACING_INSTANCE_FLAGS @@ -4735,7 +4745,9 @@ typedef enum D3D12_RAYTRACING_INSTANCE_FLAGS D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_CULL_DISABLE = 0x1, D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_FRONT_COUNTERCLOCKWISE = 0x2, D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OPAQUE = 0x4, - D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE = 0x8 + D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE = 0x8, + D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OMM_2_STATE = 0x10, + D3D12_RAYTRACING_INSTANCE_FLAG_DISABLE_OMMS = 0x20 } D3D12_RAYTRACING_INSTANCE_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_INSTANCE_FLAGS )") @@ -4785,6 +4797,49 @@ typedef struct D3D12_RAYTRACING_GEOMETRY_AABBS_DESC D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE AABBs; } D3D12_RAYTRACING_GEOMETRY_AABBS_DESC; +typedef enum D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX +{ + D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT = -1, + D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE = -2, + D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT = -3, + D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE = -4, +} D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX; + +typedef enum D3D12_RAYTRACING_OPACITY_MICROMAP_STATE +{ + D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_TRANSPARENT = 0, + D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_OPAQUE = 1, + D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_TRANSPARENT = 2, + D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_OPAQUE = 3, +} D3D12_RAYTRACING_OPACITY_MICROMAP_STATE; + +typedef enum D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT +{ + D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_2_STATE = 0x1, + D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_4_STATE = 0x2, +} D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT; + +cpp_quote("typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_DESC") +cpp_quote("{") +cpp_quote(" UINT ByteOffset;") +cpp_quote(" UINT SubdivisionLevel : 16;") +cpp_quote(" D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT Format : 16;") +cpp_quote("} D3D12_RAYTRACING_OPACITY_MICROMAP_DESC;") + +typedef struct D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC +{ + D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE OpacityMicromapIndexBuffer; + DXGI_FORMAT OpacityMicromapIndexFormat; + UINT OpacityMicromapBaseLocation; + D3D12_GPU_VIRTUAL_ADDRESS OpacityMicromapArray; +} D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC; + +typedef struct D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC +{ + const D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC* pTriangles; + const D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC* pOmmLinkage; +} D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC; + typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS { D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_NONE = 0x00, @@ -4794,6 +4849,8 @@ typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_BUILD = 0x08, D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_MINIMIZE_MEMORY = 0x10, D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE = 0x20, + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_OMM_UPDATE = 0x40, + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_DISABLE_OMMS = 0x80, } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS )") @@ -4809,7 +4866,8 @@ typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE { D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL = 0x0, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL = 0x1 + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL = 0x1, + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_ARRAY = 0x2, } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE; typedef enum D3D12_ELEMENTS_LAYOUT @@ -4851,13 +4909,21 @@ cpp_quote("// Regarding D3D12_BUILD_RAY_TRACING_ACCELERATION_STRUCTURE_TOOLS_VIS cpp_quote("// depending on Type field, NumDescs above is followed by either:") cpp_quote("// D3D12_RAY_TRACING_INSTANCE_DESC InstanceDescs[NumDescs]") cpp_quote("// or D3D12_RAY_TRACING_GEOMETRY_DESC GeometryDescs[NumDescs].") +cpp_quote("// or D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC (NumDescs == 1 in this case).") +cpp_quote("//") +cpp_quote("// For D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC, the pOmmHistogram pointer becomes a GPUVA instead of CPU pointer") +cpp_quote("//") cpp_quote("// There is 4 bytes of padding between GeometryDesc structs in the array so alignment is natural when viewed by CPU.") cpp_quote("") typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC { UINT64 SerializedSizeInBytes; - UINT64 NumBottomLevelAccelerationStructurePointers; + union + { + UINT64 NumBottomLevelAccelerationStructurePointers; + UINT64 NumBottomLevelAccelerationStructureHeaderAndPointerListPairs; + }; } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC; typedef struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER @@ -4869,6 +4935,7 @@ typedef struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER typedef enum D3D12_SERIALIZED_DATA_TYPE { D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE = 0x0, + D3D12_SERIALIZED_DATA_APPLICATION_SPECIFIC_DRIVER_STATE = 0x1, } D3D12_SERIALIZED_DATA_TYPE; typedef enum D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS @@ -4888,6 +4955,37 @@ typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER UINT64 NumBottomLevelAccelerationStructurePointersAfterHeader; } D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER; +typedef enum D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE +{ + D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_NONE = 0, + D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BOTTOM_LEVEL_POINTERS = 0, + D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BLOCKS = 0xffffffff +} D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE; + +typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1 +{ + D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER DriverMatchingIdentifier; + UINT64 SerializedSizeInBytesIncludingHeader; + UINT64 DeserializedSizeInBytes; + union + { + UINT NumBottomLevelAccelerationStructurePointersAfterHeader; + UINT NumBlocks; + }; + D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE HeaderPostambleType; +} D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1; + +typedef enum D3D12_SERIALIZED_BLOCK_TYPE +{ + D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE_OPACITY_MICROMAPS = 0x0, +} D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE; + +typedef struct D3D12_RAYTRACING_SERIALIZED_BLOCK +{ + D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE Type; + UINT64 NumBlockPointersAfterHeader; +} D3D12_RAYTRACING_SERIALIZED_BLOCK; + typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC { UINT64 CurrentSizeInBytes; @@ -4909,11 +5007,27 @@ typedef struct D3D12_RAYTRACING_GEOMETRY_DESC D3D12_RAYTRACING_GEOMETRY_FLAGS Flags; union { - D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC Triangles; - D3D12_RAYTRACING_GEOMETRY_AABBS_DESC AABBs; + D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC Triangles; + D3D12_RAYTRACING_GEOMETRY_AABBS_DESC AABBs; + D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC OmmTriangles; }; } D3D12_RAYTRACING_GEOMETRY_DESC; +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY +{ + UINT Count; + UINT SubdivisionLevel; + D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT Format; +} D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY; + +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC +{ + UINT NumOmmHistogramEntries; + const D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY* pOmmHistogram; + D3D12_GPU_VIRTUAL_ADDRESS InputBuffer; + D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE PerOmmDescs; +} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC; + typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS { D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type; @@ -4925,6 +5039,7 @@ typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS D3D12_GPU_VIRTUAL_ADDRESS InstanceDescs; const D3D12_RAYTRACING_GEOMETRY_DESC* pGeometryDescs; const D3D12_RAYTRACING_GEOMETRY_DESC*const* ppGeometryDescs; + const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC* pOpacityMicromapArrayDesc; }; } D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS; @@ -4943,6 +5058,28 @@ typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO UINT64 UpdateScratchDataSizeInBytes; } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO; +typedef enum D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE +{ + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE = 0x0, + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION = 0x1, +} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE; + +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC +{ + D3D12_GPU_VIRTUAL_ADDRESS DestBuffer; + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE InfoType; +} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC; + +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC +{ + UINT64 CurrentSizeInBytes; +} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC; + +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC +{ + UINT64 DecodedSizeInBytes; +} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC; + typedef enum D3D12_RAY_FLAGS { D3D12_RAY_FLAG_NONE = 0x00, @@ -4956,6 +5093,7 @@ typedef enum D3D12_RAY_FLAGS D3D12_RAY_FLAG_CULL_NON_OPAQUE = 0x80, D3D12_RAY_FLAG_SKIP_TRIANGLES = 0x100, D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200, + D3D12_RAY_FLAG_FORCE_OMM_2_STATE = 0x400, } D3D12_RAY_FLAGS; cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAY_FLAGS )" ) @@ -6090,6 +6228,7 @@ interface ID3D12Device14 : ID3D12Device13 }; + [uuid(bc66d368-7373-4943-8757-fc87dc79e476), object, local, pointer_default(unique)] interface ID3D12VirtualizationGuestDevice : IUnknown @@ -6125,6 +6264,14 @@ interface ID3D12Tools1 void ClearReservedGPUVARangesList(); } +[uuid(01d393c5-c9b0-42a1-958c-c26b02d4d097), object, local, pointer_default(unique)] +interface ID3D12Tools2 + : ID3D12Tools1 +{ + HRESULT SetApplicationSpecificDriverState( + [annotation("_In_")] IUnknown* pAdapter, + [annotation("_In_opt_")] ID3DBlob* pBlob); +}; [uuid(8f1359db-d8d1-42f9-b5cf-79f4cbad0d3d), object, local, pointer_default(unique)] interface ID3D12PageableTools @@ -6142,6 +6289,23 @@ interface ID3D12DeviceTools [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress); } +typedef enum D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS +{ + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_UNKNOWN = 1, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_USED = 2, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_IGNORED = 3, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_NOT_SPECIFIED = 4, +} D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS; + +[uuid(e30e9fc7-e641-4d6e-8a81-9dd9206ec47a), object, local, pointer_default(unique)] +interface ID3D12DeviceTools1 + : ID3D12DeviceTools +{ + HRESULT GetApplicationSpecificDriverState( + [annotation("_COM_Outptr_")] ID3DBlob** ppBlob); + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS GetApplicationSpecificDriverBlobStatus(); +} + typedef struct D3D12_SUBRESOURCE_DATA { @@ -6620,8 +6784,10 @@ cpp_quote( "DEFINE_GUID(IID_ID3D12Device14,0x5f6e592d,0xd895,0x44c2,0x8e,0x4a,0x cpp_quote( "DEFINE_GUID(IID_ID3D12VirtualizationGuestDevice,0xbc66d368,0x7373,0x4943,0x87,0x57,0xfc,0x87,0xdc,0x79,0xe4,0x76);" ) cpp_quote( "DEFINE_GUID(IID_ID3D12Tools,0x7071e1f0,0xe84b,0x4b33,0x97,0x4f,0x12,0xfa,0x49,0xde,0x65,0xc5);" ) cpp_quote( "DEFINE_GUID(IID_ID3D12Tools1,0xe4fbc019,0xdd3c,0x43e1,0x8f,0x32,0x7f,0x64,0x95,0x75,0xf0,0xa0);" ) +cpp_quote( "DEFINE_GUID(IID_ID3D12Tools2,0x01d393c5,0xc9b0,0x42a1,0x95,0x8c,0xc2,0x6b,0x02,0xd4,0xd0,0x97);" ) cpp_quote( "DEFINE_GUID(IID_ID3D12PageableTools,0x8f1359db,0xd8d1,0x42f9,0xb5,0xcf,0x79,0xf4,0xcb,0xad,0x0d,0x3d);" ) cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceTools,0x2ea68e9c,0x19c3,0x4e47,0xa1,0x09,0x6c,0xda,0xdf,0xf0,0xac,0xa9);" ) +cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceTools1,0xe30e9fc7,0xe641,0x4d6e,0x8a,0x81,0x9d,0xd9,0x20,0x6e,0xc4,0x7a);" ) cpp_quote( "DEFINE_GUID(IID_ID3D12SDKConfiguration,0xe9eb5314,0x33aa,0x42b2,0xa7,0x18,0xd7,0x7f,0x58,0xb1,0xf1,0xc7);" ) cpp_quote( "DEFINE_GUID(IID_ID3D12SDKConfiguration1,0x8aaf9303,0xad25,0x48b9,0x9a,0x57,0xd9,0xc3,0x7e,0x00,0x9d,0x9f);" ) cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceFactory,0x61f307d3,0xd34e,0x4e7c,0x83,0x74,0x3b,0xa4,0xde,0x23,0xcc,0xcb);" ) diff --git a/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12sdklayers.h b/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12sdklayers.h index d4a1ab97c..0da7960c3 100644 --- a/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12sdklayers.h +++ b/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12sdklayers.h @@ -3359,7 +3359,9 @@ enum D3D12_MESSAGE_ID D3D12_MESSAGE_ID_APPLICATION_SPECIFIC_DRIVER_STATE_NOT_SUPPORTED = 1421, D3D12_MESSAGE_ID_RENDER_TARGET_OR_DEPTH_STENCIL_RESOUCE_NOT_INITIALIZED = 1422, D3D12_MESSAGE_ID_BYTECODE_VALIDATION_ERROR = 1423, - D3D12_MESSAGE_ID_D3D12_MESSAGES_END = ( D3D12_MESSAGE_ID_BYTECODE_VALIDATION_ERROR + 1 ) + D3D12_MESSAGE_ID_FENCE_ZERO_WAIT = 1424, + D3D12_MESSAGE_ID_NON_COMMON_RESOURCE_IN_COPY_QUEUE = 1425, + D3D12_MESSAGE_ID_D3D12_MESSAGES_END = ( D3D12_MESSAGE_ID_NON_COMMON_RESOURCE_IN_COPY_QUEUE + 1 ) } D3D12_MESSAGE_ID; typedef struct D3D12_MESSAGE diff --git a/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12sdklayers.idl b/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12sdklayers.idl index 957c3ad83..084ecfbd0 100644 --- a/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12sdklayers.idl +++ b/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12sdklayers.idl @@ -1508,6 +1508,8 @@ typedef enum D3D12_MESSAGE_ID { D3D12_MESSAGE_ID_APPLICATION_SPECIFIC_DRIVER_STATE_NOT_SUPPORTED = 1421, D3D12_MESSAGE_ID_RENDER_TARGET_OR_DEPTH_STENCIL_RESOUCE_NOT_INITIALIZED = 1422, D3D12_MESSAGE_ID_BYTECODE_VALIDATION_ERROR = 1423, + D3D12_MESSAGE_ID_FENCE_ZERO_WAIT = 1424, + D3D12_MESSAGE_ID_NON_COMMON_RESOURCE_IN_COPY_QUEUE = 1425, D3D12_MESSAGE_ID_D3D12_MESSAGES_END } D3D12_MESSAGE_ID; diff --git a/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12video.h b/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12video.h index bf5c42a60..f7c527e96 100644 --- a/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12video.h +++ b/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12video.h @@ -7566,7 +7566,8 @@ enum D3D12_VIDEO_ENCODER_VALIDATION_FLAGS D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_DATA_NOT_SUPPORTED = 0x1000, D3D12_VIDEO_ENCODER_VALIDATION_FLAG_QPMAP_NOT_SUPPORTED = 0x2000, D3D12_VIDEO_ENCODER_VALIDATION_FLAG_DIRTY_REGIONS_NOT_SUPPORTED = 0x4000, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_MOTION_SEARCH_NOT_SUPPORTED = 0x8000 + D3D12_VIDEO_ENCODER_VALIDATION_FLAG_MOTION_SEARCH_NOT_SUPPORTED = 0x8000, + D3D12_VIDEO_ENCODER_VALIDATION_FLAG_FRAME_ANALYSIS_NOT_SUPPORTED = 0x10000 } D3D12_VIDEO_ENCODER_VALIDATION_FLAGS; DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_VALIDATION_FLAGS) diff --git a/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12video.idl b/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12video.idl index 36d63bf44..acfd779f3 100644 --- a/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12video.idl +++ b/third_party/gfxreconstruct/external/AgilitySDK/include/d3d12video.idl @@ -2628,6 +2628,7 @@ typedef enum D3D12_VIDEO_ENCODER_VALIDATION_FLAGS D3D12_VIDEO_ENCODER_VALIDATION_FLAG_QPMAP_NOT_SUPPORTED = 0x2000, D3D12_VIDEO_ENCODER_VALIDATION_FLAG_DIRTY_REGIONS_NOT_SUPPORTED = 0x4000, D3D12_VIDEO_ENCODER_VALIDATION_FLAG_MOTION_SEARCH_NOT_SUPPORTED = 0x8000, + D3D12_VIDEO_ENCODER_VALIDATION_FLAG_FRAME_ANALYSIS_NOT_SUPPORTED = 0x10000, } D3D12_VIDEO_ENCODER_VALIDATION_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_VALIDATION_FLAGS)") diff --git a/third_party/gfxreconstruct/external/AgilitySDK/include/d3dx12/d3dx12_core.h b/third_party/gfxreconstruct/external/AgilitySDK/include/d3dx12/d3dx12_core.h index 20c9d2bd0..47e97b550 100644 --- a/third_party/gfxreconstruct/external/AgilitySDK/include/d3dx12/d3dx12_core.h +++ b/third_party/gfxreconstruct/external/AgilitySDK/include/d3dx12/d3dx12_core.h @@ -1496,6 +1496,389 @@ inline const CD3DX12_RESOURCE_DESC1* D3DX12ConditionallyExpandAPIDesc( } +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SHADER_RESOURCE_VIEW_DESC : public D3D12_SHADER_RESOURCE_VIEW_DESC +{ + CD3DX12_SHADER_RESOURCE_VIEW_DESC() = default; + explicit CD3DX12_SHADER_RESOURCE_VIEW_DESC( const D3D12_SHADER_RESOURCE_VIEW_DESC& o ) noexcept : + D3D12_SHADER_RESOURCE_VIEW_DESC(o) + {} + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC StructuredBuffer( + UINT NumElements, + UINT StructureByteStride, + UINT64 FirstElement = 0) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = DXGI_FORMAT_UNKNOWN; + desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + desc.Buffer.FirstElement = FirstElement; + desc.Buffer.NumElements = NumElements; + desc.Buffer.StructureByteStride = StructureByteStride; + desc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC RawBuffer( + UINT NumElements, + UINT64 FirstElement = 0) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = DXGI_FORMAT_R32_UINT; + desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + desc.Buffer.FirstElement = FirstElement; + desc.Buffer.NumElements = NumElements; + desc.Buffer.StructureByteStride = 0; + desc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC TypedBuffer( + DXGI_FORMAT Format, + UINT NumElements, + UINT64 FirstElement = 0, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.Buffer.FirstElement = FirstElement; + desc.Buffer.NumElements = NumElements; + desc.Buffer.StructureByteStride = 0; + desc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex1D( + DXGI_FORMAT Format, + UINT MipLevels = -1, + UINT MostDetailedMip = 0, + FLOAT ResourceMinLODClamp = 0.0f, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.Texture1D.MostDetailedMip = MostDetailedMip; + desc.Texture1D.MipLevels = MipLevels; + desc.Texture1D.ResourceMinLODClamp = ResourceMinLODClamp; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex1DArray( + DXGI_FORMAT Format, + UINT ArraySize = -1, + UINT MipLevels = -1, + UINT FirstArraySlice = 0, + UINT MostDetailedMip = 0, + FLOAT ResourceMinLODClamp = 0.0f, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1DARRAY; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.Texture1DArray.MostDetailedMip = MostDetailedMip; + desc.Texture1DArray.MipLevels = MipLevels; + desc.Texture1DArray.FirstArraySlice = FirstArraySlice; + desc.Texture1DArray.ArraySize = ArraySize; + desc.Texture1DArray.ResourceMinLODClamp = ResourceMinLODClamp; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex2D( + DXGI_FORMAT Format, + UINT MipLevels = -1, + UINT MostDetailedMip = 0, + UINT PlaneSlice = 0, + FLOAT ResourceMinLODClamp = 0.0f, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.Texture2D.MostDetailedMip = MostDetailedMip; + desc.Texture2D.MipLevels = MipLevels; + desc.Texture2D.PlaneSlice = PlaneSlice; + desc.Texture2D.ResourceMinLODClamp = ResourceMinLODClamp; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex2DArray( + DXGI_FORMAT Format, + UINT ArraySize = -1, + UINT MipLevels = -1, + UINT FirstArraySlice = 0, + UINT MostDetailedMip = 0, + UINT PlaneSlice = 0, + FLOAT ResourceMinLODClamp = 0.0f, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.Texture2DArray.MostDetailedMip = MostDetailedMip; + desc.Texture2DArray.MipLevels = MipLevels; + desc.Texture2DArray.FirstArraySlice = FirstArraySlice; + desc.Texture2DArray.ArraySize = ArraySize; + desc.Texture2DArray.PlaneSlice = PlaneSlice; + desc.Texture2DArray.ResourceMinLODClamp = ResourceMinLODClamp; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex2DMS( + DXGI_FORMAT Format, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + // desc.Texture2DMS.UnusedField_NothingToDefine = 0; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex2DMSArray( + DXGI_FORMAT Format, + UINT ArraySize, + UINT FirstArraySlice = 0, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.Texture2DMSArray.ArraySize = ArraySize; + desc.Texture2DMSArray.FirstArraySlice = FirstArraySlice; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex3D( + DXGI_FORMAT Format, + UINT MipLevels = -1, + UINT MostDetailedMip = 0, + FLOAT ResourceMinLODClamp = 0.0f, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.Texture3D.MostDetailedMip = MostDetailedMip; + desc.Texture3D.MipLevels = MipLevels; + desc.Texture3D.ResourceMinLODClamp = ResourceMinLODClamp; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC TexCube( + DXGI_FORMAT Format, + UINT MipLevels = -1, + UINT MostDetailedMip = 0, + FLOAT ResourceMinLODClamp = 0.0f, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.TextureCube.MostDetailedMip = MostDetailedMip; + desc.TextureCube.MipLevels = MipLevels; + desc.TextureCube.ResourceMinLODClamp = ResourceMinLODClamp; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC TexCubeArray( + DXGI_FORMAT Format, + UINT NumCubes, + UINT MipLevels = -1, + UINT First2DArrayFace = 0, + UINT MostDetailedMip = 0, + FLOAT ResourceMinLODClamp = 0.0f, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBEARRAY; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.TextureCubeArray.NumCubes = NumCubes; + desc.TextureCubeArray.MostDetailedMip = MostDetailedMip; + desc.TextureCubeArray.MipLevels = MipLevels; + desc.TextureCubeArray.First2DArrayFace = First2DArrayFace; + desc.TextureCubeArray.ResourceMinLODClamp = ResourceMinLODClamp; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC RaytracingAccelStruct( + D3D12_GPU_VIRTUAL_ADDRESS Location) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = DXGI_FORMAT_UNKNOWN; + desc.ViewDimension = D3D12_SRV_DIMENSION_RAYTRACING_ACCELERATION_STRUCTURE; + desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + desc.RaytracingAccelerationStructure.Location = Location; + return desc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_UNORDERED_ACCESS_VIEW_DESC : public D3D12_UNORDERED_ACCESS_VIEW_DESC +{ + CD3DX12_UNORDERED_ACCESS_VIEW_DESC() = default; + explicit CD3DX12_UNORDERED_ACCESS_VIEW_DESC( const D3D12_UNORDERED_ACCESS_VIEW_DESC& o ) noexcept : + D3D12_UNORDERED_ACCESS_VIEW_DESC(o) + {} + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC StructuredBuffer( + UINT NumElements, + UINT StructureByteStride, + UINT64 FirstElement = 0, + UINT64 CounterOffsetInBytes = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = DXGI_FORMAT_UNKNOWN; + desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + desc.Buffer.FirstElement = FirstElement; + desc.Buffer.NumElements = NumElements; + desc.Buffer.StructureByteStride = StructureByteStride; + desc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + desc.Buffer.CounterOffsetInBytes = CounterOffsetInBytes; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC RawBuffer( + UINT NumElements, + UINT64 FirstElement = 0, + UINT64 CounterOffsetInBytes = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = DXGI_FORMAT_R32_UINT; + desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + desc.Buffer.FirstElement = FirstElement; + desc.Buffer.NumElements = NumElements; + desc.Buffer.StructureByteStride = 0; + desc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_RAW; + desc.Buffer.CounterOffsetInBytes = CounterOffsetInBytes; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC TypedBuffer( + DXGI_FORMAT Format, + UINT NumElements, + UINT64 FirstElement = 0, + UINT64 CounterOffsetInBytes = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + desc.Buffer.FirstElement = FirstElement; + desc.Buffer.NumElements = NumElements; + desc.Buffer.StructureByteStride = 0; + desc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + desc.Buffer.CounterOffsetInBytes = CounterOffsetInBytes; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex1D( + DXGI_FORMAT Format, + UINT MipSlice = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE1D; + desc.Texture1D.MipSlice = MipSlice; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex1DArray( + DXGI_FORMAT Format, + UINT ArraySize = -1, + UINT FirstArraySlice = 0, + UINT MipSlice = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE1DARRAY; + desc.Texture1DArray.MipSlice = MipSlice; + desc.Texture1DArray.FirstArraySlice = FirstArraySlice; + desc.Texture1DArray.ArraySize = ArraySize; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex2D( + DXGI_FORMAT Format, + UINT MipSlice = 0, + UINT PlaneSlice = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; + desc.Texture2D.MipSlice = MipSlice; + desc.Texture2D.PlaneSlice = PlaneSlice; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex2DArray( + DXGI_FORMAT Format, + UINT ArraySize = -1, + UINT FirstArraySlice = 0, + UINT MipSlice = 0, + UINT PlaneSlice = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY; + desc.Texture2DArray.MipSlice = MipSlice; + desc.Texture2DArray.FirstArraySlice = FirstArraySlice; + desc.Texture2DArray.ArraySize = ArraySize; + desc.Texture2DArray.PlaneSlice = PlaneSlice; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex2DMS( + DXGI_FORMAT Format) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DMS; + //desc.Texture2DMS.UnusedField_NothingToDefine = 0; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex2DMSArray( + DXGI_FORMAT Format, + UINT ArraySize = -1, + UINT FirstArraySlice = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY; + desc.Texture2DMSArray.FirstArraySlice = FirstArraySlice; + desc.Texture2DMSArray.ArraySize = ArraySize; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex3D( + DXGI_FORMAT Format, + UINT WSize = -1, + UINT FirstWSlice = 0, + UINT MipSlice = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE3D; + desc.Texture3D.MipSlice = MipSlice; + desc.Texture3D.FirstWSlice = FirstWSlice; + desc.Texture3D.WSize = WSize; + return desc; + } +}; + //------------------------------------------------------------------------------------------------ struct CD3DX12_VIEW_INSTANCING_DESC : public D3D12_VIEW_INSTANCING_DESC { diff --git a/third_party/gfxreconstruct/external/AgilitySDK/include/d3dx12/d3dx12_resource_helpers.h b/third_party/gfxreconstruct/external/AgilitySDK/include/d3dx12/d3dx12_resource_helpers.h index d792d9c63..490c056e2 100644 --- a/third_party/gfxreconstruct/external/AgilitySDK/include/d3dx12/d3dx12_resource_helpers.h +++ b/third_party/gfxreconstruct/external/AgilitySDK/include/d3dx12/d3dx12_resource_helpers.h @@ -429,6 +429,12 @@ inline bool D3DX12GetCopyableFootprints( // Check if its a valid format D3DX12_ASSERT(D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FormatExists(Format)); + // D3DX12GetCopyableFootprints does not support buffers with width larger than UINT_MAX. + if (ResourceDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER && ResourceDesc.Width >= UINT_MAX) + { + return false; + } + const UINT WidthAlignment = D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetWidthAlignment( Format ); const UINT HeightAlignment = D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetHeightAlignment( Format ); const UINT16 DepthAlignment = UINT16( D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDepthAlignment( Format ) ); diff --git a/third_party/gfxreconstruct/external/AgilitySDK/include/d3dx12/d3dx12_state_object.h b/third_party/gfxreconstruct/external/AgilitySDK/include/d3dx12/d3dx12_state_object.h index b460c769d..7f319637f 100644 --- a/third_party/gfxreconstruct/external/AgilitySDK/include/d3dx12/d3dx12_state_object.h +++ b/third_party/gfxreconstruct/external/AgilitySDK/include/d3dx12/d3dx12_state_object.h @@ -65,12 +65,6 @@ class CD3DX12_STATE_OBJECT_DESC CD3DX12_STATE_OBJECT_DESC& operator=(CD3DX12_STATE_OBJECT_DESC&& other) = default; operator const D3D12_STATE_OBJECT_DESC& () { - // Do final preparation work - for (auto& ownedSubobject : m_OwnedSubobjectHelpers) - { - ownedSubobject->Finalize(); - } - #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) m_RepointedSubobjectVectors.clear(); m_RepointedPrograms.clear(); @@ -170,6 +164,14 @@ class CD3DX12_STATE_OBJECT_DESC return pSubobject; } + template + T* CreateSubobject(U&& arg) + { + T* pSubobject = new T(std::forward(arg), *this); + m_OwnedSubobjectHelpers.emplace_back(pSubobject); + return pSubobject; + } + private: D3D12_STATE_SUBOBJECT* TrackSubobject(D3D12_STATE_SUBOBJECT_TYPE Type, void* pDesc) { @@ -259,7 +261,6 @@ class CD3DX12_STATE_OBJECT_DESC { m_pSubobject = ContainingStateObject.TrackSubobject(Type(), Data()); } - virtual void Finalize() {}; operator const D3D12_STATE_SUBOBJECT& () const noexcept { return *m_pSubobject; } protected: virtual void* Data() noexcept = 0; @@ -303,6 +304,7 @@ class CD3DX12_STATE_OBJECT_DESC friend class CD3DX12_DEPTH_STENCIL1_SUBOBJECT; friend class CD3DX12_SAMPLE_MASK_SUBOBJECT; friend class CD3DX12_NODE_OUTPUT_OVERRIDES; + friend class CD3DX12_NODE_HELPER_BASE; friend class CD3DX12_SHADER_NODE; friend class CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES; friend class CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES; @@ -642,10 +644,23 @@ class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT { public: CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT() noexcept + : m_Desc({}) { Init(); } CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({}) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(const D3D12_RAYTRACING_SHADER_CONFIG &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(const D3D12_RAYTRACING_SHADER_CONFIG &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -664,11 +679,11 @@ class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG; } operator const D3D12_RAYTRACING_SHADER_CONFIG&() const noexcept { return m_Desc; } + operator D3D12_RAYTRACING_SHADER_CONFIG&() noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; } void* Data() noexcept override { return &m_Desc; } D3D12_RAYTRACING_SHADER_CONFIG m_Desc; @@ -680,10 +695,23 @@ class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT { public: CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT() noexcept + : m_Desc({}) { Init(); } CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({}) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(const D3D12_RAYTRACING_PIPELINE_CONFIG &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(const D3D12_RAYTRACING_PIPELINE_CONFIG &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -701,11 +729,11 @@ class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG; } operator const D3D12_RAYTRACING_PIPELINE_CONFIG&() const noexcept { return m_Desc; } + operator D3D12_RAYTRACING_PIPELINE_CONFIG&() noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; } void* Data() noexcept override { return &m_Desc; } D3D12_RAYTRACING_PIPELINE_CONFIG m_Desc; @@ -717,10 +745,23 @@ class CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT { public: CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT() noexcept + : m_Desc({}) { Init(); } CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({}) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(const D3D12_RAYTRACING_PIPELINE_CONFIG1 &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(const D3D12_RAYTRACING_PIPELINE_CONFIG1 &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -739,11 +780,11 @@ class CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG1; } operator const D3D12_RAYTRACING_PIPELINE_CONFIG1&() const noexcept { return m_Desc; } + operator D3D12_RAYTRACING_PIPELINE_CONFIG1&() noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; } void* Data() noexcept override { return &m_Desc; } D3D12_RAYTRACING_PIPELINE_CONFIG1 m_Desc; @@ -829,10 +870,23 @@ class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT { public: CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT() noexcept + : m_Desc({}) { Init(); } CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({}) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(const D3D12_STATE_OBJECT_CONFIG &desc) noexcept + : m_Desc(desc) + { + Init(); + } + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(const D3D12_STATE_OBJECT_CONFIG &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -850,11 +904,11 @@ class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG; } operator const D3D12_STATE_OBJECT_CONFIG&() const noexcept { return m_Desc; } + operator D3D12_STATE_OBJECT_CONFIG&() noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; } void* Data() noexcept override { return &m_Desc; } D3D12_STATE_OBJECT_CONFIG m_Desc; @@ -866,10 +920,23 @@ class CD3DX12_NODE_MASK_SUBOBJECT { public: CD3DX12_NODE_MASK_SUBOBJECT() noexcept + : m_Desc({}) { Init(); } CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({}) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_NODE_MASK_SUBOBJECT(const D3D12_NODE_MASK &desc) noexcept + : m_Desc(desc) + { + Init(); + } + CD3DX12_NODE_MASK_SUBOBJECT(const D3D12_NODE_MASK &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -887,11 +954,11 @@ class CD3DX12_NODE_MASK_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK; } operator const D3D12_NODE_MASK&() const noexcept { return m_Desc; } + operator D3D12_NODE_MASK&() noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; } void* Data() noexcept override { return &m_Desc; } D3D12_NODE_MASK m_Desc; @@ -912,6 +979,20 @@ class CD3DX12_STREAM_OUTPUT_SUBOBJECT Init(); AddToStateObject(ContainingStateObject); } + void AddSODeclEntry(const D3D12_SO_DECLARATION_ENTRY &entry) + { + m_soDecalEntries.emplace_back(D3D12_SO_DECLARATION_ENTRY{ + entry.Stream, + m_Strings.LocalCopy(entry.SemanticName), + entry.SemanticIndex, + entry.StartComponent, + entry.ComponentCount, + entry.OutputSlot + }); + m_Desc.NumEntries++; + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pSODeclaration = &m_soDecalEntries[0]; + } void SetSODeclEntries(const D3D12_SO_DECLARATION_ENTRY* soDeclEntries, UINT numEntries) { m_soDecalEntries.resize(numEntries); @@ -926,13 +1007,20 @@ class CD3DX12_STREAM_OUTPUT_SUBOBJECT soDeclEntries[i].OutputSlot }; } - // Below: using ugly way to get pointer in case .data() is not defined - m_Desc.pSODeclaration = &m_soDecalEntries[0]; m_Desc.NumEntries = numEntries; + // Below: using ugly way to get pointer in case .data() is not defined + if (numEntries > 0) + { + m_Desc.pSODeclaration = &m_soDecalEntries[0]; + } } void SetBufferStrides(const UINT* bufferStrides, UINT numStrides) { - m_Desc.pBufferStrides = bufferStrides; + for (UINT i = 0; i < numStrides; ++i) + { + m_Strides[i] = bufferStrides[i]; + } + m_Desc.pBufferStrides = m_Strides; m_Desc.NumStrides = numStrides; } void SetRasterizedStream(UINT rasterizedStream) @@ -955,6 +1043,7 @@ class CD3DX12_STREAM_OUTPUT_SUBOBJECT D3D12_STREAM_OUTPUT_DESC m_Desc; CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; std::vector m_soDecalEntries; + UINT m_Strides[D3D12_SO_STREAM_COUNT]; }; //------------------------------------------------------------------------------------------------ @@ -963,10 +1052,23 @@ class CD3DX12_BLEND_SUBOBJECT { public: CD3DX12_BLEND_SUBOBJECT() + : m_Desc(CD3DX12_BLEND_DESC(D3D12_DEFAULT)) { Init(); } CD3DX12_BLEND_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(CD3DX12_BLEND_DESC(D3D12_DEFAULT)) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_BLEND_SUBOBJECT(const D3D12_BLEND_DESC &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_BLEND_SUBOBJECT(const D3D12_BLEND_DESC &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -997,11 +1099,11 @@ class CD3DX12_BLEND_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_BLEND; } operator const D3D12_BLEND_DESC& () const noexcept { return m_Desc; } + operator D3D12_BLEND_DESC& () noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = CD3DX12_BLEND_DESC(D3D12_DEFAULT); } void* Data() noexcept override { return &m_Desc; } CD3DX12_BLEND_DESC m_Desc; @@ -1013,10 +1115,23 @@ class CD3DX12_RASTERIZER_SUBOBJECT { public: CD3DX12_RASTERIZER_SUBOBJECT() + : m_Desc(CD3DX12_RASTERIZER_DESC2(D3D12_DEFAULT)) { Init(); } CD3DX12_RASTERIZER_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(CD3DX12_RASTERIZER_DESC2(D3D12_DEFAULT)) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_RASTERIZER_SUBOBJECT(const D3D12_RASTERIZER_DESC2 &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_RASTERIZER_SUBOBJECT(const D3D12_RASTERIZER_DESC2 &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -1066,11 +1181,11 @@ class CD3DX12_RASTERIZER_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_RASTERIZER; } operator const D3D12_RASTERIZER_DESC2& () const noexcept { return m_Desc; } + operator D3D12_RASTERIZER_DESC2& () noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = CD3DX12_RASTERIZER_DESC2(D3D12_DEFAULT); } void* Data() noexcept override { return &m_Desc; } CD3DX12_RASTERIZER_DESC2 m_Desc; @@ -1082,10 +1197,23 @@ class CD3DX12_DEPTH_STENCIL2_SUBOBJECT { public: CD3DX12_DEPTH_STENCIL2_SUBOBJECT() + : m_Desc(CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEFAULT)) { Init(); } CD3DX12_DEPTH_STENCIL2_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEFAULT)) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_DEPTH_STENCIL2_SUBOBJECT(const D3D12_DEPTH_STENCIL_DESC2 &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_DEPTH_STENCIL2_SUBOBJECT(const D3D12_DEPTH_STENCIL_DESC2 &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -1137,11 +1265,11 @@ class CD3DX12_DEPTH_STENCIL2_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2; } operator const D3D12_DEPTH_STENCIL_DESC2& () const noexcept { return m_Desc; } + operator D3D12_DEPTH_STENCIL_DESC2& () noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEFAULT); } void* Data() noexcept override { return &m_Desc; } CD3DX12_DEPTH_STENCIL_DESC2 m_Desc; @@ -1173,43 +1301,25 @@ class CD3DX12_INPUT_LAYOUT_SUBOBJECT inputLayoutElementDesc.InputSlotClass, inputLayoutElementDesc.InstanceDataStepRate }); - ++m_numElements; + ++m_Desc.NumElements; + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pInputElementDescs = &m_inputLayoutElements[0]; } D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override { return D3D12_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT; } operator const D3D12_INPUT_LAYOUT_DESC& () const noexcept { return m_Desc; } - virtual void Finalize() override - { - if (m_numElements > 0) - { - std::list::iterator inputLayoutIt = m_inputLayoutElements.begin(); - m_inputLayoutElementsVector.resize(m_numElements); - for (UINT i = 0; inputLayoutIt != m_inputLayoutElements.end(); i++, inputLayoutIt++) - { - m_inputLayoutElementsVector[i] = *inputLayoutIt; - } - // Below: using ugly way to get pointer in case .data() is not defined - m_Desc.pInputElementDescs = &m_inputLayoutElementsVector[0]; - } - m_Desc.NumElements = m_numElements; - } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); m_Desc = {}; - m_Desc.pInputElementDescs = nullptr; - m_numElements = 0; m_inputLayoutElements.clear(); - m_inputLayoutElementsVector.clear(); } void* Data() noexcept override { return &m_Desc; } D3D12_INPUT_LAYOUT_DESC m_Desc; - std::list m_inputLayoutElements; - std::vector m_inputLayoutElementsVector; - UINT m_numElements; + std::vector m_inputLayoutElements; CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; }; @@ -1219,10 +1329,23 @@ class CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT { public: CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT() + : m_Desc(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED) { Init(); } CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -1236,6 +1359,7 @@ class CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE; } operator const D3D12_INDEX_BUFFER_STRIP_CUT_VALUE& () const noexcept { return m_Desc; } + operator D3D12_INDEX_BUFFER_STRIP_CUT_VALUE& () noexcept { return m_Desc; } private: void Init() noexcept { @@ -1251,10 +1375,23 @@ class CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT { public: CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT() + : m_Desc(D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED) { Init(); } CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT(D3D12_PRIMITIVE_TOPOLOGY_TYPE desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT(D3D12_PRIMITIVE_TOPOLOGY_TYPE desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -1268,6 +1405,7 @@ class CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY; } operator const D3D12_PRIMITIVE_TOPOLOGY_TYPE& () const noexcept { return m_Desc; } + operator D3D12_PRIMITIVE_TOPOLOGY_TYPE& () noexcept { return m_Desc; } private: void Init() noexcept { @@ -1283,10 +1421,23 @@ class CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT { public: CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT() + : m_Desc({}) { Init(); } CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({}) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT(const D3D12_RT_FORMAT_ARRAY &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT(const D3D12_RT_FORMAT_ARRAY &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -1304,11 +1455,11 @@ class CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS; } operator const D3D12_RT_FORMAT_ARRAY& () const noexcept { return m_Desc; } + operator D3D12_RT_FORMAT_ARRAY& () noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; } void* Data() noexcept override { return &m_Desc; } D3D12_RT_FORMAT_ARRAY m_Desc; @@ -1320,10 +1471,23 @@ class CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT { public: CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT() + : m_Desc(DXGI_FORMAT_UNKNOWN) { Init(); } CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(DXGI_FORMAT_UNKNOWN) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT(DXGI_FORMAT desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT(DXGI_FORMAT desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -1337,6 +1501,7 @@ class CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT; } operator const DXGI_FORMAT& () const noexcept { return m_Desc; } + operator DXGI_FORMAT& () noexcept { return m_Desc; } private: void Init() noexcept { @@ -1352,10 +1517,23 @@ class CD3DX12_SAMPLE_DESC_SUBOBJECT { public: CD3DX12_SAMPLE_DESC_SUBOBJECT() + : m_Desc({1, 0}) { Init(); } CD3DX12_SAMPLE_DESC_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({1, 0}) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_SAMPLE_DESC_SUBOBJECT(const DXGI_SAMPLE_DESC &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_SAMPLE_DESC_SUBOBJECT(const DXGI_SAMPLE_DESC &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -1373,6 +1551,7 @@ class CD3DX12_SAMPLE_DESC_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_DESC; } operator const DXGI_SAMPLE_DESC& () const noexcept { return m_Desc; } + operator DXGI_SAMPLE_DESC& () noexcept { return m_Desc; } private: void Init() noexcept { @@ -1389,10 +1568,23 @@ class CD3DX12_FLAGS_SUBOBJECT { public: CD3DX12_FLAGS_SUBOBJECT() + : m_Desc(D3D12_PIPELINE_STATE_FLAG_NONE) { Init(); } CD3DX12_FLAGS_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(D3D12_PIPELINE_STATE_FLAG_NONE) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_FLAGS_SUBOBJECT(D3D12_PIPELINE_STATE_FLAGS desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_FLAGS_SUBOBJECT(D3D12_PIPELINE_STATE_FLAGS desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -1406,11 +1598,11 @@ class CD3DX12_FLAGS_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_FLAGS; } operator const D3D12_PIPELINE_STATE_FLAGS& () const noexcept { return m_Desc; } + operator D3D12_PIPELINE_STATE_FLAGS& () noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; } void* Data() noexcept override { return &m_Desc; } D3D12_PIPELINE_STATE_FLAGS m_Desc; @@ -1432,7 +1624,7 @@ class CD3DX12_VIEW_INSTANCING_SUBOBJECT } void AddViewInstanceLocation(D3D12_VIEW_INSTANCE_LOCATION viewInstanceLocation) { - m_viewInstanceCount++; + m_Desc.ViewInstanceCount++; m_viewInstanceLocations.emplace_back( D3D12_VIEW_INSTANCE_LOCATION { @@ -1440,6 +1632,8 @@ class CD3DX12_VIEW_INSTANCING_SUBOBJECT viewInstanceLocation.RenderTargetArrayIndex } ); + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pViewInstanceLocations = &m_viewInstanceLocations[0]; } void SetFlags(D3D12_VIEW_INSTANCING_FLAGS flags) { @@ -1450,35 +1644,16 @@ class CD3DX12_VIEW_INSTANCING_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING; } operator const D3D12_VIEW_INSTANCING_DESC& () const noexcept { return m_Desc; } - virtual void Finalize() override - { - if (m_viewInstanceCount > 0) - { - m_viewInstanceLocationsVector.resize(m_viewInstanceCount); - std::list::iterator viewInstancingLocationIt = m_viewInstanceLocations.begin(); - for (UINT i = 0; viewInstancingLocationIt != m_viewInstanceLocations.end(); i++, viewInstancingLocationIt++) - { - m_viewInstanceLocationsVector[i] = *viewInstancingLocationIt; - } - // Below: using ugly way to get pointer in case .data() is not defined - m_Desc.pViewInstanceLocations = &m_viewInstanceLocationsVector[0]; - } - m_Desc.ViewInstanceCount = m_viewInstanceCount; - } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); m_Desc = CD3DX12_VIEW_INSTANCING_DESC(D3D12_DEFAULT); - m_viewInstanceCount = 0; m_viewInstanceLocations.clear(); - m_viewInstanceLocationsVector.clear(); } void* Data() noexcept override { return &m_Desc; } CD3DX12_VIEW_INSTANCING_DESC m_Desc; - UINT m_viewInstanceCount; - std::list m_viewInstanceLocations; - std::vector m_viewInstanceLocationsVector; + std::vector m_viewInstanceLocations; }; //------------------------------------------------------------------------------------------------ @@ -1487,10 +1662,23 @@ class CD3DX12_DEPTH_STENCIL_SUBOBJECT { public: CD3DX12_DEPTH_STENCIL_SUBOBJECT() + : m_Desc(CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT)) { Init(); } CD3DX12_DEPTH_STENCIL_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT)) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_DEPTH_STENCIL_SUBOBJECT(const D3D12_DEPTH_STENCIL_DESC &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_DEPTH_STENCIL_SUBOBJECT(const D3D12_DEPTH_STENCIL_DESC &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -1542,11 +1730,11 @@ class CD3DX12_DEPTH_STENCIL_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL; } operator const D3D12_DEPTH_STENCIL_DESC& () const noexcept { return m_Desc; } + operator D3D12_DEPTH_STENCIL_DESC& () noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT); } void* Data() noexcept override { return &m_Desc; } CD3DX12_DEPTH_STENCIL_DESC m_Desc; @@ -1558,10 +1746,23 @@ class CD3DX12_DEPTH_STENCIL1_SUBOBJECT { public: CD3DX12_DEPTH_STENCIL1_SUBOBJECT() + : m_Desc(CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEFAULT)) { Init(); } CD3DX12_DEPTH_STENCIL1_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEFAULT)) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_DEPTH_STENCIL1_SUBOBJECT(const D3D12_DEPTH_STENCIL_DESC1 &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_DEPTH_STENCIL1_SUBOBJECT(const D3D12_DEPTH_STENCIL_DESC1 &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -1617,11 +1818,11 @@ class CD3DX12_DEPTH_STENCIL1_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1; } operator const D3D12_DEPTH_STENCIL_DESC1& () const noexcept { return m_Desc; } + operator D3D12_DEPTH_STENCIL_DESC1& () noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEFAULT); } void* Data() noexcept override { return &m_Desc; } CD3DX12_DEPTH_STENCIL_DESC1 m_Desc; @@ -1633,10 +1834,23 @@ class CD3DX12_SAMPLE_MASK_SUBOBJECT { public: CD3DX12_SAMPLE_MASK_SUBOBJECT() + : m_Desc(0xffffffffu) { Init(); } CD3DX12_SAMPLE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(0xffffffffu) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_SAMPLE_MASK_SUBOBJECT(UINT desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_SAMPLE_MASK_SUBOBJECT(UINT desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) { Init(); AddToStateObject(ContainingStateObject); @@ -1650,6 +1864,7 @@ class CD3DX12_SAMPLE_MASK_SUBOBJECT return D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_MASK; } operator const UINT& () const noexcept { return m_Desc; } + operator UINT& () noexcept { return m_Desc; } private: void Init() noexcept { @@ -1680,72 +1895,32 @@ class CD3DX12_GENERIC_PROGRAM_SUBOBJECT void AddExport(LPCWSTR exportName) { m_Exports.emplace_back(m_Strings.LocalCopy(exportName)); - m_numExports++; + m_Desc.NumExports++; + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pExports = &m_Exports[0]; } void AddSubobject(const D3D12_STATE_SUBOBJECT& subobject) { m_Subobjects.emplace_back(&subobject); - m_numSubobjects++; + m_Desc.NumSubobjects++; + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.ppSubobjects = &m_Subobjects[0]; } D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override { return D3D12_STATE_SUBOBJECT_TYPE_GENERIC_PROGRAM; } operator const D3D12_GENERIC_PROGRAM_DESC& () const noexcept { return m_Desc; } - virtual void Finalize() override - { - // Set exports - if (m_numExports > 0) - { - m_ExportsVector.resize(m_numExports); - std::list::iterator exportIt = m_Exports.begin(); - for (UINT i = 0; exportIt != m_Exports.end(); i++, exportIt++) - { - m_ExportsVector[i] = *exportIt; - } - // Below: using ugly way to get pointer in case .data() is not defined - m_Desc.pExports = &m_ExportsVector[0]; - } - else - { - m_Desc.pExports = nullptr; - } - m_Desc.NumExports = m_numExports; - - // Set subobjects - if (m_numSubobjects > 0) - { - m_SubobjectsVector.resize(m_numSubobjects); - std::list::iterator subobjectIt = m_Subobjects.begin(); - for (UINT i = 0; subobjectIt != m_Subobjects.end(); i++, subobjectIt++) - { - m_SubobjectsVector[i] = *subobjectIt; - } - // Below: using ugly way to get pointer in case .data() is not defined - m_Desc.ppSubobjects = &m_SubobjectsVector[0]; - } - else - { - m_Desc.ppSubobjects = nullptr; - } - m_Desc.NumSubobjects = m_numSubobjects; - } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); m_Desc = {}; - m_numExports = 0; - m_numSubobjects = 0; } void* Data() noexcept override { return &m_Desc; } D3D12_GENERIC_PROGRAM_DESC m_Desc; - std::list m_Exports; - std::vector m_ExportsVector; - UINT m_numExports; - std::list m_Subobjects; - std::vector m_SubobjectsVector; - UINT m_numSubobjects; + std::vector m_Exports; + std::vector m_Subobjects; CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; }; @@ -1801,11 +1976,28 @@ class CD3DX12_NODE_OUTPUT_OVERRIDES UINT* m_pNumOutputOverrides; }; +//------------------------------------------------------------------------------------------------ +class CD3DX12_WORK_GRAPH_SUBOBJECT; + //------------------------------------------------------------------------------------------------ class CD3DX12_NODE_HELPER_BASE { +protected: + struct Backreference + { + CD3DX12_WORK_GRAPH_SUBOBJECT *m_pGraph; + UINT m_NodeIndex; + }; public: + CD3DX12_NODE_HELPER_BASE(const Backreference &BackRef) + : m_BackRef(BackRef) + { + } virtual ~CD3DX12_NODE_HELPER_BASE() = default; +protected: + D3D12_NODE *GetNode() const; + const Backreference m_BackRef; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; }; //------------------------------------------------------------------------------------------------ @@ -1815,20 +2007,18 @@ class CD3DX12_SHADER_NODE // Not specifying launch mode. { public: CD3DX12_SHADER_NODE( - D3D12_NODE* pNode, + const Backreference &BackRef, LPCWSTR _Shader = nullptr) + : CD3DX12_NODE_HELPER_BASE(BackRef) { - m_pDesc = pNode; - m_pDesc->NodeType = D3D12_NODE_TYPE_SHADER; + GetNode()->NodeType = D3D12_NODE_TYPE_SHADER; Shader(_Shader); } void Shader(LPCWSTR _Shader) { - m_pDesc->Shader.Shader = m_Strings.LocalCopy(_Shader); + GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader); } - D3D12_NODE* m_pDesc; -private: - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + LPCWSTR GetShaderName() const { return GetNode()->Shader.Shader; } }; //------------------------------------------------------------------------------------------------ @@ -1839,21 +2029,23 @@ class CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES { public: CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES( - D3D12_NODE* pNode, + const Backreference &BackRef, LPCWSTR _Shader = nullptr) : - m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) + CD3DX12_NODE_HELPER_BASE(BackRef), + m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) { Overrides = {}; - m_pDesc = pNode; - m_pDesc->NodeType = D3D12_NODE_TYPE_SHADER; - m_pDesc->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_BROADCASTING_LAUNCH; - m_pDesc->Shader.pBroadcastingLaunchOverrides = &Overrides; + D3D12_NODE *pNode = GetNode(); + pNode->NodeType = D3D12_NODE_TYPE_SHADER; + pNode->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_BROADCASTING_LAUNCH; + pNode->Shader.pBroadcastingLaunchOverrides = &Overrides; Shader(_Shader); } void Shader(LPCWSTR _Shader) { - m_pDesc->Shader.Shader = m_Strings.LocalCopy(_Shader); + GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader); } + LPCWSTR GetShaderName() const { return GetNode()->Shader.Shader; } void LocalRootArgumentsTableIndex(UINT index) { m_UINTs.emplace_front(index); @@ -1889,10 +2081,8 @@ class CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES return m_NodeOutputOverrides; } D3D12_BROADCASTING_LAUNCH_OVERRIDES Overrides; - D3D12_NODE* m_pDesc; private: // Cached parameters - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; std::forward_list m_UINTs; struct UINT3 { @@ -1913,21 +2103,23 @@ class CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES { public: CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES( - D3D12_NODE* pNode, + const Backreference &BackRef, LPCWSTR _Shader = nullptr) : - m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) + CD3DX12_NODE_HELPER_BASE(BackRef), + m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) { Overrides = {}; - m_pDesc = pNode; - m_pDesc->NodeType = D3D12_NODE_TYPE_SHADER; - m_pDesc->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_COALESCING_LAUNCH; - m_pDesc->Shader.pCoalescingLaunchOverrides = &Overrides; + D3D12_NODE *pNode = GetNode(); + pNode->NodeType = D3D12_NODE_TYPE_SHADER; + pNode->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_COALESCING_LAUNCH; + pNode->Shader.pCoalescingLaunchOverrides = &Overrides; Shader(_Shader); } void Shader(LPCWSTR _Shader) { - m_pDesc->Shader.Shader = m_Strings.LocalCopy(_Shader); + GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader); } + LPCWSTR GetShaderName() const { return GetNode()->Shader.Shader; } void LocalRootArgumentsTableIndex(UINT index) { m_UINTs.emplace_front(index); @@ -1953,10 +2145,8 @@ class CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES return m_NodeOutputOverrides; } D3D12_COALESCING_LAUNCH_OVERRIDES Overrides; - D3D12_NODE* m_pDesc; private: // Cached parameters - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; std::forward_list m_UINTs; struct UINT3 { @@ -1977,21 +2167,23 @@ class CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES { public: CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES( - D3D12_NODE* pNode, + const Backreference &BackRef, LPCWSTR _Shader = nullptr) : - m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) + CD3DX12_NODE_HELPER_BASE(BackRef), + m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) { Overrides = {}; - m_pDesc = pNode; - m_pDesc->NodeType = D3D12_NODE_TYPE_SHADER; - m_pDesc->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_THREAD_LAUNCH; - m_pDesc->Shader.pThreadLaunchOverrides = &Overrides; + D3D12_NODE *pNode = GetNode(); + pNode->NodeType = D3D12_NODE_TYPE_SHADER; + pNode->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_THREAD_LAUNCH; + pNode->Shader.pThreadLaunchOverrides = &Overrides; Shader(_Shader); } void Shader(LPCWSTR _Shader) { - m_pDesc->Shader.Shader = m_Strings.LocalCopy(_Shader); + GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader); } + LPCWSTR GetShaderName() const { return GetNode()->Shader.Shader; } void LocalRootArgumentsTableIndex(UINT index) { m_UINTs.emplace_front(index); @@ -2017,10 +2209,8 @@ class CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES return m_NodeOutputOverrides; } D3D12_THREAD_LAUNCH_OVERRIDES Overrides; - D3D12_NODE* m_pDesc; private: // Cached parameters - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; std::forward_list m_UINTs; std::forward_list m_NodeIDs; CD3DX12_NODE_OUTPUT_OVERRIDES m_NodeOutputOverrides; @@ -2037,21 +2227,23 @@ class CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES { public: CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES( - D3D12_NODE* pNode, + const Backreference &BackRef, LPCWSTR _Shader = nullptr) : - m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) + CD3DX12_NODE_HELPER_BASE(BackRef), + m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) { Overrides = {}; - m_pDesc = pNode; - m_pDesc->NodeType = D3D12_NODE_TYPE_SHADER; - m_pDesc->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_COMMON_COMPUTE; - m_pDesc->Shader.pThreadLaunchOverrides = &Overrides; + D3D12_NODE *pNode = GetNode(); + pNode->NodeType = D3D12_NODE_TYPE_SHADER; + pNode->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_COMMON_COMPUTE; + pNode->Shader.pThreadLaunchOverrides = &Overrides; Shader(_Shader); } void Shader(LPCWSTR _Shader) { - m_pDesc->Shader.Shader = m_Strings.LocalCopy(_Shader); + GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader); } + LPCWSTR GetShaderName() const { return GetNode()->Shader.Shader; } void LocalRootArgumentsTableIndex(UINT index) { m_UINTs.emplace_front(index); @@ -2077,10 +2269,8 @@ class CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES return m_NodeOutputOverrides; } D3D12_THREAD_LAUNCH_OVERRIDES Overrides; - D3D12_NODE* m_pDesc; private: // Cached parameters - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; std::forward_list m_UINTs; std::forward_list m_NodeIDs; CD3DX12_NODE_OUTPUT_OVERRIDES m_NodeOutputOverrides; @@ -2115,15 +2305,17 @@ class CD3DX12_WORK_GRAPH_SUBOBJECT void AddEntrypoint(D3D12_NODE_ID Entrypoint) { m_Entrypoints.emplace_back(D3D12_NODE_ID{ m_Strings.LocalCopy(Entrypoint.Name),Entrypoint.ArrayIndex }); - m_NumEntrypoints++; + m_Desc.NumEntrypoints++; + m_Desc.pEntrypoints = m_Entrypoints.data(); } template T* CreateNode() { m_NodeDescs.push_back({}); - m_NumNodes++; - T* pNodeHelper = new T(&m_NodeDescs.back()); + m_Desc.NumExplicitlyDefinedNodes++; + m_Desc.pExplicitlyDefinedNodes = m_NodeDescs.data(); + T* pNodeHelper = new T({this, (UINT)m_NodeDescs.size() - 1}); m_OwnedNodeHelpers.emplace_back(pNodeHelper); return pNodeHelper; } @@ -2161,47 +2353,27 @@ class CD3DX12_WORK_GRAPH_SUBOBJECT { return m_Desc; } - virtual void Finalize() override - { - m_EntrypointsVector.resize(m_NumEntrypoints); - std::list::iterator entryIt = m_Entrypoints.begin(); - for (UINT n = 0; n < m_NumEntrypoints; n++, entryIt++) - { - m_EntrypointsVector[n] = *entryIt; - } - m_Desc.NumEntrypoints = m_NumEntrypoints; - m_Desc.pEntrypoints = m_EntrypointsVector.data(); - - m_NodeDescsVector.resize(m_NumNodes); - std::list::iterator nodeIt = m_NodeDescs.begin(); - for (UINT n = 0; n < m_NumNodes; n++, nodeIt++) - { - m_NodeDescsVector[n] = *nodeIt; - } - m_Desc.NumExplicitlyDefinedNodes = m_NumNodes; - m_Desc.pExplicitlyDefinedNodes = m_NodeDescsVector.data(); - } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); m_Desc = {}; + m_Entrypoints.clear(); m_NodeDescs.clear(); - m_NodeDescsVector.clear(); - m_NumNodes = 0; - m_NumEntrypoints = 0; } void* Data() noexcept override { return &m_Desc; } D3D12_WORK_GRAPH_DESC m_Desc; - std::list m_Entrypoints; - UINT m_NumEntrypoints; - std::vector m_EntrypointsVector; - std::list m_NodeDescs; - UINT m_NumNodes; - std::vector m_NodeDescsVector; + std::vector m_Entrypoints; + std::vector m_NodeDescs; CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; - std::list> m_OwnedNodeHelpers; + std::vector> m_OwnedNodeHelpers; + friend class CD3DX12_NODE_HELPER_BASE; }; + +inline D3D12_NODE * CD3DX12_NODE_HELPER_BASE::GetNode() const +{ + return &m_BackRef.m_pGraph->m_NodeDescs[m_BackRef.m_NodeIndex]; +} #endif // D3D12_SDK_VERSION >= 612 #undef D3DX12_COM_PTR diff --git a/third_party/gfxreconstruct/external/Tocpp-Android-Template/.gitignore b/third_party/gfxreconstruct/external/Tocpp-Android-Template/.gitignore new file mode 100644 index 000000000..3bb19ffd7 --- /dev/null +++ b/third_party/gfxreconstruct/external/Tocpp-Android-Template/.gitignore @@ -0,0 +1 @@ +.gradle/ diff --git a/third_party/gfxreconstruct/external/Vulkan-Headers b/third_party/gfxreconstruct/external/Vulkan-Headers index 2cd90f9d2..450bd2232 160000 --- a/third_party/gfxreconstruct/external/Vulkan-Headers +++ b/third_party/gfxreconstruct/external/Vulkan-Headers @@ -1 +1 @@ -Subproject commit 2cd90f9d20df57eac214c148f3aed885372ddcfe +Subproject commit 450bd2232225d6c7728a4108055ac2e37cef6475 diff --git a/third_party/gfxreconstruct/framework/application/android_context.h b/third_party/gfxreconstruct/framework/application/android_context.h index 0c62eecb0..9c98967f9 100644 --- a/third_party/gfxreconstruct/framework/application/android_context.h +++ b/third_party/gfxreconstruct/framework/application/android_context.h @@ -63,6 +63,8 @@ class AndroidContext : public WsiContext void destroyNativeWindow(int window_index); + virtual const char* GetWsiName() override { return "ANDROID"; } + private: std::unique_ptr window_{}; struct android_app* android_app_{}; diff --git a/third_party/gfxreconstruct/framework/application/application.cpp b/third_party/gfxreconstruct/framework/application/application.cpp index c76853e48..3e5da8bf1 100644 --- a/third_party/gfxreconstruct/framework/application/application.cpp +++ b/third_party/gfxreconstruct/framework/application/application.cpp @@ -58,19 +58,20 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(application) Application::Application(const std::string& name, decode::FileProcessor* file_processor) : - Application(name, std::string(), file_processor) + Application(name, file_processor, std::string(), nullptr) {} Application::Application(const std::string& name, + decode::FileProcessor* file_processor, const std::string& cli_wsi_extension, - decode::FileProcessor* file_processor) : + void* platform_specific_wsi_data) : name_(name), file_processor_(file_processor), running_(false), paused_(false), pause_frame_(0), cli_wsi_extension_(cli_wsi_extension), fps_info_(nullptr) { if (!cli_wsi_extension_.empty()) { - InitializeWsiContext(cli_wsi_extension_.c_str()); + InitializeWsiContext(cli_wsi_extension_.c_str(), platform_specific_wsi_data); } } diff --git a/third_party/gfxreconstruct/framework/application/application.h b/third_party/gfxreconstruct/framework/application/application.h index c77d3aedd..7e3937069 100644 --- a/third_party/gfxreconstruct/framework/application/application.h +++ b/third_party/gfxreconstruct/framework/application/application.h @@ -46,7 +46,10 @@ class Application final public: Application(const std::string& name, decode::FileProcessor* file_processor); - Application(const std::string& name, const std::string& cli_wsi_extension, decode::FileProcessor* file_processor); + Application(const std::string& name, + decode::FileProcessor* file_processor, + const std::string& cli_wsi_extension, + void* platform_specific_wsi_data); ~Application(); diff --git a/third_party/gfxreconstruct/framework/application/display_context.h b/third_party/gfxreconstruct/framework/application/display_context.h index 92d9c007d..4bcc67e50 100644 --- a/third_party/gfxreconstruct/framework/application/display_context.h +++ b/third_party/gfxreconstruct/framework/application/display_context.h @@ -43,6 +43,8 @@ class DisplayContext : public WsiContext DisplayWindow* GetWindow() const { return window_.get(); } + virtual const char* GetWsiName() override { return "DISPLAY"; } + private: std::unique_ptr window_; }; diff --git a/third_party/gfxreconstruct/framework/application/headless_context.cpp b/third_party/gfxreconstruct/framework/application/headless_context.cpp index 4d6b6d433..5cd8e8c96 100644 --- a/third_party/gfxreconstruct/framework/application/headless_context.cpp +++ b/third_party/gfxreconstruct/framework/application/headless_context.cpp @@ -23,7 +23,7 @@ #include "application/headless_context.h" #include "application/application.h" #include "application/headless_window.h" -#include "decode/vulkan_feature_util.h" +#include "graphics/vulkan_feature_util.h" #include "graphics/vulkan_util.h" GFXRECON_BEGIN_NAMESPACE(gfxrecon) @@ -46,9 +46,9 @@ HeadlessContext::HeadlessContext(Application* application, bool dpi_aware) : Wsi get_instance_proc_addr(nullptr, "vkEnumerateInstanceExtensionProperties")); std::vector properties; - if (decode::feature_util::GetInstanceExtensions(instance_extension_proc, &properties) == VK_SUCCESS) + if (graphics::feature_util::GetInstanceExtensions(instance_extension_proc, &properties) == VK_SUCCESS) { - if (decode::feature_util::IsSupportedExtension(properties, VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME)) + if (graphics::feature_util::IsSupportedExtension(properties, VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME)) { supported = true; } diff --git a/third_party/gfxreconstruct/framework/application/headless_context.h b/third_party/gfxreconstruct/framework/application/headless_context.h index 963c8823e..603673d3a 100644 --- a/third_party/gfxreconstruct/framework/application/headless_context.h +++ b/third_party/gfxreconstruct/framework/application/headless_context.h @@ -35,6 +35,8 @@ class HeadlessContext : public WsiContext HeadlessContext(Application* application, bool dpi_aware = true); virtual void ProcessEvents(bool wait_for_input) override; + + virtual const char* GetWsiName() override { return "HEADLESS"; } }; GFXRECON_END_NAMESPACE(application) diff --git a/third_party/gfxreconstruct/framework/application/metal_context.h b/third_party/gfxreconstruct/framework/application/metal_context.h index 991808521..45a3f5701 100644 --- a/third_party/gfxreconstruct/framework/application/metal_context.h +++ b/third_party/gfxreconstruct/framework/application/metal_context.h @@ -36,7 +36,9 @@ class MetalContext : public WsiContext public: MetalContext(Application* application); - virtual void ProcessEvents(bool wait_for_input) override; + virtual void ProcessEvents(bool wait_for_input) override; + + virtual const char* GetWsiName() override { return "METAL"; } }; GFXRECON_END_NAMESPACE(application) diff --git a/third_party/gfxreconstruct/framework/application/wayland_context.cpp b/third_party/gfxreconstruct/framework/application/wayland_context.cpp index 591ab8839..769a08e16 100644 --- a/third_party/gfxreconstruct/framework/application/wayland_context.cpp +++ b/third_party/gfxreconstruct/framework/application/wayland_context.cpp @@ -367,10 +367,17 @@ void WaylandContext::HandlePointerButton( if (entry != wayland_context->wayland_windows_.end()) { - WaylandWindow* window = entry->second; if ((button == BTN_LEFT) && (state == WL_POINTER_BUTTON_STATE_PRESSED)) { - wl.shell_surface_move(window->GetShellSurface(), wayland_context->seat_, serial); + WaylandWindow* window = entry->second; + if (window->GetXdgToplevel() != nullptr) + { + wl.xdg->xdg_toplevel_move(window->GetXdgToplevel(), wayland_context->seat_, serial); + } + else if (window->GetShellSurface() != nullptr) + { + wl.shell_surface_move(window->GetShellSurface(), wayland_context->seat_, serial); + } } } } diff --git a/third_party/gfxreconstruct/framework/application/wayland_context.h b/third_party/gfxreconstruct/framework/application/wayland_context.h index 92d8a15ec..6e7f49e8e 100644 --- a/third_party/gfxreconstruct/framework/application/wayland_context.h +++ b/third_party/gfxreconstruct/framework/application/wayland_context.h @@ -71,6 +71,8 @@ class WaylandContext : public WsiContext virtual void ProcessEvents(bool wait_for_input) override; + virtual const char* GetWsiName() override { return "WAYLAND"; } + private: static void HandleRegistryGlobal(void* data, wl_registry* registry, uint32_t id, const char* interface, uint32_t version); diff --git a/third_party/gfxreconstruct/framework/application/win32_context.h b/third_party/gfxreconstruct/framework/application/win32_context.h index ea78b5e85..7fa86df6d 100644 --- a/third_party/gfxreconstruct/framework/application/win32_context.h +++ b/third_party/gfxreconstruct/framework/application/win32_context.h @@ -38,6 +38,8 @@ class Win32Context : public WsiContext virtual void ProcessEvents(bool wait_for_input) override; static LRESULT WINAPI WindowProc(HWND window, unsigned int msg, WPARAM wp, LPARAM lp); + + virtual const char* GetWsiName() override { return "WIN32"; } }; GFXRECON_END_NAMESPACE(application) diff --git a/third_party/gfxreconstruct/framework/application/wsi_context.h b/third_party/gfxreconstruct/framework/application/wsi_context.h index 8f1919d9a..65e6602d3 100644 --- a/third_party/gfxreconstruct/framework/application/wsi_context.h +++ b/third_party/gfxreconstruct/framework/application/wsi_context.h @@ -59,6 +59,8 @@ class WsiContext bool Valid() const; + virtual const char* GetWsiName() = 0; + protected: Application* application_; std::unique_ptr window_factory_; diff --git a/third_party/gfxreconstruct/framework/application/xcb_context.h b/third_party/gfxreconstruct/framework/application/xcb_context.h index 87d45c47b..1fa094b41 100644 --- a/third_party/gfxreconstruct/framework/application/xcb_context.h +++ b/third_party/gfxreconstruct/framework/application/xcb_context.h @@ -65,6 +65,8 @@ class XcbContext : public WsiContext virtual void ProcessEvents(bool wait_for_input) override; + virtual const char* GetWsiName() override { return "XCB"; } + private: typedef std::unordered_map XcbWindowMap; diff --git a/third_party/gfxreconstruct/framework/application/xlib_context.h b/third_party/gfxreconstruct/framework/application/xlib_context.h index 3447a75b3..5a0987a39 100644 --- a/third_party/gfxreconstruct/framework/application/xlib_context.h +++ b/third_party/gfxreconstruct/framework/application/xlib_context.h @@ -53,6 +53,8 @@ class XlibContext : public WsiContext virtual void ProcessEvents(bool wait_for_input) override; + virtual const char* GetWsiName() override { return "XLIB"; } + private: Display* display_{}; size_t display_open_count_{}; diff --git a/third_party/gfxreconstruct/framework/decode/CMakeLists.txt b/third_party/gfxreconstruct/framework/decode/CMakeLists.txt index 6f369ef91..076434d6c 100644 --- a/third_party/gfxreconstruct/framework/decode/CMakeLists.txt +++ b/third_party/gfxreconstruct/framework/decode/CMakeLists.txt @@ -42,6 +42,11 @@ target_sources(gfxrecon_decode PRIVATE ${CMAKE_CURRENT_LIST_DIR}/annotation_handler.h ${CMAKE_CURRENT_LIST_DIR}/api_decoder.h + ${CMAKE_CURRENT_LIST_DIR}/api_payload.h + ${CMAKE_CURRENT_LIST_DIR}/block_buffer.h + ${CMAKE_CURRENT_LIST_DIR}/block_buffer.cpp + ${CMAKE_CURRENT_LIST_DIR}/block_parser.h + ${CMAKE_CURRENT_LIST_DIR}/block_parser.cpp ${CMAKE_CURRENT_LIST_DIR}/common_consumer_base.h ${CMAKE_CURRENT_LIST_DIR}/common_handle_mapping_util.h ${CMAKE_CURRENT_LIST_DIR}/common_object_info_table.h @@ -123,6 +128,8 @@ target_sources(gfxrecon_decode $<$:${CMAKE_CURRENT_LIST_DIR}/openxr_tracked_object_info_table.cpp> ${CMAKE_CURRENT_LIST_DIR}/mark_injected_commands.h ${CMAKE_CURRENT_LIST_DIR}/mark_injected_commands.cpp + ${CMAKE_CURRENT_LIST_DIR}/parsed_block.cpp + ${CMAKE_CURRENT_LIST_DIR}/parsed_block.h ${CMAKE_CURRENT_LIST_DIR}/pointer_decoder_base.h ${CMAKE_CURRENT_LIST_DIR}/pointer_decoder.h ${CMAKE_CURRENT_LIST_DIR}/portability.h @@ -210,8 +217,6 @@ target_sources(gfxrecon_decode ${CMAKE_CURRENT_LIST_DIR}/marker_json_consumer.h ${CMAKE_CURRENT_LIST_DIR}/metadata_json_consumer.h ${CMAKE_CURRENT_LIST_DIR}/vulkan_enum_util.h - ${CMAKE_CURRENT_LIST_DIR}/vulkan_feature_util.h - ${CMAKE_CURRENT_LIST_DIR}/vulkan_feature_util.cpp ${CMAKE_CURRENT_LIST_DIR}/vulkan_handle_mapping_util.h ${CMAKE_CURRENT_LIST_DIR}/vulkan_handle_mapping_util.cpp ${CMAKE_CURRENT_LIST_DIR}/vulkan_object_cleanup_util.h @@ -235,12 +240,17 @@ target_sources(gfxrecon_decode ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources.cpp ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_common.h ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_common.cpp + ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_as.h + ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_as.cpp ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_draw_calls.h ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_draw_calls.cpp ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_compute_ray_tracing.h ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_compute_ray_tracing.cpp ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_delegate.h ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_delegate.cpp + ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_delegate_dumped_resources.h + ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_transfer.h + ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_transfer.cpp ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_json.h ${CMAKE_CURRENT_LIST_DIR}/vulkan_replay_dump_resources_json.cpp ${CMAKE_CURRENT_LIST_DIR}/vulkan_resource_allocator.h @@ -290,7 +300,6 @@ target_sources(gfxrecon_decode ${PROJECT_SOURCE_DIR}/framework/generated/generated_vulkan_enum_to_json.cpp ${PROJECT_SOURCE_DIR}/framework/generated/generated_vulkan_json_consumer.h ${PROJECT_SOURCE_DIR}/framework/generated/generated_vulkan_json_consumer.cpp - ${PROJECT_SOURCE_DIR}/framework/generated/generated_vulkan_feature_util.cpp ${PROJECT_SOURCE_DIR}/framework/generated/generated_vulkan_pnext_struct_decoder.cpp ${PROJECT_SOURCE_DIR}/framework/generated/generated_vulkan_referenced_resource_consumer.h ${PROJECT_SOURCE_DIR}/framework/generated/generated_vulkan_referenced_resource_consumer.cpp diff --git a/third_party/gfxreconstruct/framework/decode/api_decoder.h b/third_party/gfxreconstruct/framework/decode/api_decoder.h index 3cf2b89e8..0002fb130 100644 --- a/third_party/gfxreconstruct/framework/decode/api_decoder.h +++ b/third_party/gfxreconstruct/framework/decode/api_decoder.h @@ -83,9 +83,9 @@ class ApiDecoder virtual void DispatchDisplayMessageCommand(format::ThreadId thread_id, const std::string& message) = 0; - virtual void DispatchDriverInfo(format::ThreadId thread_id, format::DriverInfoBlock& info) = 0; + virtual void DispatchDriverInfo(format::ThreadId thread_id, const format::DriverInfoBlock& info) = 0; - virtual void DispatchExeFileInfo(format::ThreadId thread_id, format::ExeFileInfoBlock& info) = 0; + virtual void DispatchExeFileInfo(format::ThreadId thread_id, const format::ExeFileInfoBlock& info) = 0; virtual void DispatchFillMemoryCommand( format::ThreadId thread_id, uint64_t memory_id, uint64_t offset, uint64_t size, const uint8_t* data) = 0; @@ -145,6 +145,12 @@ class ApiDecoder format::HandleId object_id, uint64_t address) = 0; + virtual void DispatchSetOpaqueDescriptorDataCommand(format::ThreadId thread_id, + format::HandleId device_id, + format::HandleId object_id, + uint32_t data_size, + const uint8_t* data) = 0; + virtual void DispatchSetRayTracingShaderGroupHandlesCommand(format::ThreadId thread_id, format::HandleId device_id, format::HandleId buffer_id, @@ -160,7 +166,7 @@ class ApiDecoder virtual void DispatchBeginResourceInitCommand(format::ThreadId thread_id, format::HandleId device_id, - uint64_t max_resource_size, + uint64_t total_copy_size, uint64_t max_copy_size) = 0; virtual void DispatchEndResourceInitCommand(format::ThreadId thread_id, format::HandleId device_id) = 0; @@ -184,9 +190,9 @@ class ApiDecoder const uint8_t* data) = 0; virtual void DispatchInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) = 0; + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) = 0; virtual void DispatchGetDxgiAdapterInfo(const format::DxgiAdapterInfoCommandHeader& adapter_info_header){}; @@ -207,8 +213,8 @@ class ApiDecoder virtual void DispatchSetTlasToBlasDependencyCommand(format::HandleId tlas, const std::vector& blases){}; - virtual void DispatchSetEnvironmentVariablesCommand(format::SetEnvironmentVariablesCommand& header, - const char* env_string){}; + virtual void DispatchSetEnvironmentVariablesCommand(const format::SetEnvironmentVariablesCommand& header, + const char* env_string){}; virtual void DispatchVulkanAccelerationStructuresBuildMetaCommand(const uint8_t* parameter_buffer, size_t buffer_size){}; @@ -219,10 +225,11 @@ class ApiDecoder virtual void DispatchVulkanAccelerationStructuresWritePropertiesMetaCommand(const uint8_t* parameter_buffer, size_t buffer_size){}; - virtual void DispatchViewRelativeLocation(format::ThreadId thread_id, format::ViewRelativeLocation& location){}; + virtual void DispatchViewRelativeLocation(format::ThreadId thread_id, + const format::ViewRelativeLocation& location){}; - virtual void DispatchInitializeMetaCommand(format::InitializeMetaCommand& header, - const uint8_t* initialization_parameters_data){}; + virtual void DispatchInitializeMetaCommand(const format::InitializeMetaCommand& header, + const uint8_t* initialization_parameters_data){}; }; GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/api_payload.h b/third_party/gfxreconstruct/framework/decode/api_payload.h new file mode 100644 index 000000000..bcc38f2bb --- /dev/null +++ b/third_party/gfxreconstruct/framework/decode/api_payload.h @@ -0,0 +1,962 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_API_PAYLOAD_H +#define GFXRECON_API_PAYLOAD_H + +#include "api_decoder.h" // for ApiDecoder method pointers +#include "util/type_traits_extras.h" + +#include +#include +#include +#include +#include +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) + +// Define threshold for "by value" vs "heap" storage in the variant +struct CommandStoragePolicy +{ + // This size is picked to match FunctionCallArgs and MethodCallArgs which constitute more than 95% of total blocks + static constexpr size_t kInlineThreshold = 48; + template + static constexpr bool IsLarge() + { + return sizeof(T) > kInlineThreshold; + } +}; + +template +struct DispatchHasCallId : std::false_type +{}; + +template +struct DispatchHasCallId().call_id)>> : std::true_type +{}; + +template +struct DispatchHasMetaDataId : std::false_type +{}; + +template +struct DispatchHasMetaDataId().meta_data_id)>> : std::true_type +{}; + +template +struct DispatchHasData : std::false_type +{}; + +template +struct DispatchHasData().data)>> : std::true_type +{}; + +template +struct DispatchHasDataSize : std::false_type +{}; + +template +struct DispatchHasDataSize().data_size)>> : std::true_type +{}; + +template +struct DispatchHasCommandHeader : std::false_type +{}; + +template +struct DispatchHasCommandHeader().command_header)>> : std::true_type +{}; + +template +struct DispatchHasAllocGuard : std::false_type +{}; + +// ---- Flags base (one place for size and per-command booleans) ---------------- +// +// The flag traits class is a base class for each of the DispatchTraits specializations +// defined below. The flags control the storage and dispatch characteristics of the +// Command type. +template +struct DispatchFlagTraits +{ + static constexpr bool kIsLarge = CommandStoragePolicy::IsLarge(); + static constexpr bool kHasCallId = DispatchHasCallId::value; + static constexpr bool kHasMetaDataId = DispatchHasMetaDataId::value; + static constexpr bool kHasAllocGuard = DispatchHasAllocGuard::value; + static constexpr bool kHasData = DispatchHasData::value; + static constexpr bool kHasDataSize = DispatchHasDataSize::value; + static constexpr bool kHasCommandHeader = DispatchHasCommandHeader::value; +}; + +// --- Payload structs (argument order preserved) --- +// +// Each of the Info structures match the type and order of an ApiDecoder dispatch call. +// std::apply is used to pass references to the Info contents to the kDecoderMethod defined +// in the DispatchTraits object defined for the each of the Info structs. +struct FunctionCallArgs +{ + format::ApiCallId call_id; + ApiCallInfo call_info; + const uint8_t* data; + size_t data_size; + + auto GetTuple() const { return std::tie(call_id, call_info, data, data_size); } +}; +template <> +struct DispatchHasAllocGuard : std::true_type +{}; + +struct MethodCallArgs +{ + format::ApiCallId call_id; + format::HandleId object_id; + ApiCallInfo call_info; + const uint8_t* data; + size_t data_size; + + auto GetTuple() const { return std::tie(call_id, object_id, call_info, data, data_size); } +}; +template <> +struct DispatchHasAllocGuard : std::true_type +{}; + +struct StateBeginMarkerArgs +{ + uint64_t frame_number; + + auto GetTuple() const { return std::tie(frame_number); } +}; +struct StateEndMarkerArgs +{ + uint64_t frame_number; + + auto GetTuple() const { return std::tie(frame_number); } +}; +struct FrameEndMarkerArgs +{ + uint64_t frame_number; + + auto GetTuple() const { return std::tie(frame_number); } +}; +struct DisplayMessageArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + std::string message; + + auto GetTuple() const { return std::tie(thread_id, message); } +}; +struct DriverArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::DriverInfoBlock info; + + auto GetTuple() const { return std::tie(thread_id, info); } +}; +struct ExeFileArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::ExeFileInfoBlock info; + + auto GetTuple() const { return std::tie(thread_id, info); } +}; +struct FillMemoryArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + uint64_t memory_id; + uint64_t offset; + uint64_t data_size; + const uint8_t* data; + + auto GetTuple() const { return std::tie(thread_id, memory_id, offset, data_size, data); } +}; +struct FillMemoryResourceValueArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + size_t data_size; // Needed for deferred decompression, but not ApiDecoder + + format::FillMemoryResourceValueCommandHeader command_header; + const uint8_t* data; + + auto GetTuple() const { return std::tie(command_header, data); } +}; +struct ResizeWindowArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::HandleId surface_id; + uint32_t width; + uint32_t height; + + auto GetTuple() const { return std::tie(thread_id, surface_id, width, height); } +}; +struct ResizeWindow2Args +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::HandleId surface_id; + uint32_t width; + uint32_t height; + uint32_t pre_transform; + + auto GetTuple() const { return std::tie(thread_id, surface_id, width, height, pre_transform); } +}; +struct CreateHardwareBufferArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::HandleId device_id; + format::HandleId memory_id; + uint64_t buffer_id; + uint32_t format; + uint32_t width; + uint32_t height; + uint32_t stride; + uint64_t usage; + uint32_t layers; + std::vector plane_info; + + auto GetTuple() const + { + return std::tie( + thread_id, device_id, memory_id, buffer_id, format, width, height, stride, usage, layers, plane_info); + } +}; +struct DestroyHardwareBufferArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + uint64_t buffer_id; + + auto GetTuple() const { return std::tie(thread_id, buffer_id); } +}; +struct CreateHeapAllocationArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + uint64_t allocation_id; + uint64_t allocation_size; + + auto GetTuple() const { return std::tie(thread_id, allocation_id, allocation_size); } +}; +struct SetDevicePropertiesArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::HandleId physical_device_id; + uint32_t api_version; + uint32_t driver_version; + uint32_t vendor_id; + uint32_t device_id; + uint32_t device_type; + uint8_t pipeline_cache_uuid[format::kUuidSize]; + std::string device_name; + + auto GetTuple() const + { + return std::tie(thread_id, + physical_device_id, + api_version, + driver_version, + vendor_id, + device_id, + device_type, + pipeline_cache_uuid, + device_name); + } + + // This Info struct requires a constructor because it contains, is passed, and later provides + // a C array (pipeline_cache_uuid). When passed, the array decays to a uint8_t *, causing aggregate + // initialization to fail. The constructor accepts the C array by const reference and + // performs a memory copy of the contents. + SetDevicePropertiesArgs(format::MetaDataId meta_data_id_, + format::ThreadId thread_id_, + format::HandleId physical_device_id_, + uint32_t api_version_, + uint32_t driver_version_, + uint32_t vendor_id_, + uint32_t device_id_, + uint32_t device_type_, + const uint8_t (&pipeline_cache_uuid_)[format::kUuidSize], + const std::string& device_name_) : + meta_data_id(meta_data_id_), + thread_id(thread_id_), physical_device_id(physical_device_id_), api_version(api_version_), + driver_version(driver_version_), vendor_id(vendor_id_), device_id(device_id_), device_type(device_type_), + device_name(device_name_) + { + // + util::platform::MemoryCopy(pipeline_cache_uuid, format::kUuidSize, pipeline_cache_uuid_, format::kUuidSize); + } +}; +struct SetDeviceMemoryPropertiesArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::HandleId physical_device_id; + std::vector memory_types; + std::vector memory_heaps; + + auto GetTuple() const { return std::tie(thread_id, physical_device_id, memory_types, memory_heaps); } +}; +struct SetOpaqueAddressArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::HandleId device_id; + format::HandleId object_id; + uint64_t address; + + auto GetTuple() const { return std::tie(thread_id, device_id, object_id, address); } +}; +struct SetRayTracingShaderGroupHandlesArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::HandleId device_id; + format::HandleId buffer_id; + size_t data_size; + const uint8_t* data; + + auto GetTuple() const { return std::tie(thread_id, device_id, buffer_id, data_size, data); } +}; +struct SetSwapchainImageStateArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::HandleId device_id; + format::HandleId swapchain_id; + uint32_t last_presented_image; + std::vector image_state; + + auto GetTuple() const { return std::tie(thread_id, device_id, swapchain_id, last_presented_image, image_state); } +}; +struct BeginResourceInitArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::HandleId device_id; + uint64_t max_resource_size; + uint64_t max_copy_size; + + auto GetTuple() const { return std::tie(thread_id, device_id, max_resource_size, max_copy_size); } +}; +struct EndResourceInitArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::HandleId device_id; + + auto GetTuple() const { return std::tie(thread_id, device_id); } +}; +struct InitBufferArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::HandleId device_id; + format::HandleId buffer_id; + uint64_t data_size; + const uint8_t* data; + + auto GetTuple() const { return std::tie(thread_id, device_id, buffer_id, data_size, data); } +}; +struct InitImageArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::HandleId device_id; + format::HandleId image_id; + uint64_t data_size; + uint32_t aspect; + uint32_t layout; + std::vector level_sizes; + const uint8_t* data; + + auto GetTuple() const + { + return std::tie(thread_id, device_id, image_id, data_size, aspect, layout, level_sizes, data); + } +}; +struct InitSubresourceArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::InitSubresourceCommandHeader command_header; + const uint8_t* data; + + auto GetTuple() const { return std::tie(command_header, data); } +}; +struct InitDx12AccelerationStructureArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + // Note: the command header has uniquely named size field... so duplicate this info for visitor use + size_t data_size; // Needed for deferred decompression, but not ApiDecoder + + format::InitDx12AccelerationStructureCommandHeader command_header; + std::vector geometry_descs; + const uint8_t* data; + + auto GetTuple() const { return std::tie(command_header, geometry_descs, data); } +}; +struct GetDxgiAdapterArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::DxgiAdapterInfoCommandHeader adapter_info_header; + + auto GetTuple() const { return std::tie(adapter_info_header); } +}; +struct GetDx12RuntimeArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::Dx12RuntimeInfoCommandHeader runtime_info_header; + + auto GetTuple() const { return std::tie(runtime_info_header); } +}; +struct ExecuteBlocksFromFileArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + uint32_t n_blocks; + int64_t offset; + std::string filename; + + auto GetTuple() const { return std::tie(thread_id, n_blocks, offset, filename); } +}; +struct SetTlasToBlasDependencyArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::HandleId tlas; + std::vector blases; + + auto GetTuple() const { return std::tie(tlas, blases); } +}; +struct SetEnvironmentVariablesArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::SetEnvironmentVariablesCommand header; + const char* env_string; + + auto GetTuple() const { return std::tie(header, env_string); } +}; +struct VulkanAccelerationStructuresBuildMetaArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + const uint8_t* parameter_buffer; + size_t buffer_size; + + auto GetTuple() const { return std::tie(parameter_buffer, buffer_size); } +}; +template <> +struct DispatchHasAllocGuard : std::true_type +{}; + +struct VulkanAccelerationStructuresCopyMetaArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + const uint8_t* parameter_buffer; + size_t buffer_size; + + auto GetTuple() const { return std::tie(parameter_buffer, buffer_size); } +}; +template <> +struct DispatchHasAllocGuard : std::true_type +{}; + +struct VulkanAccelerationStructuresWritePropertiesMetaArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + const uint8_t* parameter_buffer; + size_t buffer_size; + + auto GetTuple() const { return std::tie(parameter_buffer, buffer_size); } +}; +template <> +struct DispatchHasAllocGuard : std::true_type +{}; + +struct ViewRelativeLocationArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::ViewRelativeLocation location; + + auto GetTuple() const { return std::tie(thread_id, location); } +}; +struct InitializeMetaArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::InitializeMetaCommand command_header; + const uint8_t* data; + + auto GetTuple() const { return std::tie(command_header, data); } +}; +struct AnnotationArgs +{ + uint64_t block_index; + format::AnnotationType type; + std::string label; + + // NOTE: The string name is intentionally *not* data to differ from the "data" fields that are uint8_t * + // parameter data for the next level Decode operations, simplifying DispatchHasData logic + std::string annotation_data; + + auto GetTuple() const { return std::tie(block_index, type, label, annotation_data); } +}; +struct SetOpaqueDescriptorDataArgs +{ + format::MetaDataId meta_data_id; // Needed by DispatchVisitor, but not ApiDecoder + + format::ThreadId thread_id; + format::HandleId device_id; + format::HandleId object_id; + uint32_t size; + const uint8_t* data; + + auto GetTuple() const { return std::tie(thread_id, device_id, object_id, size, data); } +}; + +// --- DispatchTraits specializations (kIsLarge via sizeof at compile time) --- +template +struct DispatchTraits; + +// ---- DispatchTraits specializations (inherit flags; no redundant kIsLarge) ---- +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DecodeFunctionCall; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DecodeMethodCall; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchStateBeginMarker; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchStateEndMarker; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchFrameEndMarker; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchDisplayMessageCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchDriverInfo; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchExeFileInfo; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchFillMemoryCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchFillMemoryResourceValueCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchResizeWindowCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchResizeWindowCommand2; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchCreateHardwareBufferCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchDestroyHardwareBufferCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchCreateHeapAllocationCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchSetDevicePropertiesCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchSetDeviceMemoryPropertiesCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchSetOpaqueAddressCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchSetRayTracingShaderGroupHandlesCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchSetSwapchainImageStateCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchBeginResourceInitCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchEndResourceInitCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchInitBufferCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchInitImageCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchInitSubresourceCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchInitDx12AccelerationStructureCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchGetDxgiAdapterInfo; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchGetDx12RuntimeInfo; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchExecuteBlocksFromFile; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchSetTlasToBlasDependencyCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchSetEnvironmentVariablesCommand; +}; + +template <> +struct DispatchTraits + : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchVulkanAccelerationStructuresBuildMetaCommand; +}; + +template <> +struct DispatchTraits + : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchVulkanAccelerationStructuresCopyMetaCommand; +}; + +template <> +struct DispatchTraits + : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchVulkanAccelerationStructuresWritePropertiesMetaCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchViewRelativeLocation; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchInitializeMetaCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + static constexpr auto kDecoderMethod = &ApiDecoder::DispatchSetOpaqueDescriptorDataCommand; +}; + +template <> +struct DispatchTraits : DispatchFlagTraits +{ + // Is not dispatched to decoders, and thus requires a custom DispatchVisitor::VisitCommand overload +}; + +// Store large payloads on heap; small ones by value +template +class DispatchStore +{ + public: + using ValueType = T; + constexpr static bool kIsLarge = DispatchTraits::kIsLarge; + using StoreType = std::conditional_t, T>; + + // Forwarding constructor handling l-values and r-values + // The enable_if_t restricts the constructor to only accept types compatible with T + // and to prevent hijacking copy or move constructors with this general constructor + template < + typename U, + typename = std::enable_if_t && !std::is_same_v, DispatchStore>, + DispatchStore>> + explicit DispatchStore(U&& args) : store_(MakeStore(std::forward(args))) + {} + DispatchStore() = default; + + const T& operator*() const + { + if constexpr (kIsLarge) + { + return *store_; + } + else + { + return store_; + } + } + + T& operator*() + { + if constexpr (kIsLarge) + { + return *store_; + } + else + { + return store_; + } + } + + const T* operator->() const + { + if constexpr (kIsLarge) + { + return store_.get(); + } + else + { + return &store_; + } + } + + T* operator->() + { + if constexpr (kIsLarge) + { + return store_.get(); + } + else + { + return &store_; + } + } + + private: + template + StoreType MakeStore(U&& input) + { + if constexpr (kIsLarge) + { + return std::make_unique(std::forward(input)); + } + else + { + return T(std::forward(input)); + } + } + + StoreType store_; +}; + +// --- Variant of all payloads (by DispatchStore policy) --- +using DispatchArgs = std::variant, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore, + DispatchStore>; + +// Helper to create DispatchArgs variant from arbitrary ArgPayload type, with sanity checks +template +inline DispatchArgs MakeDispatchArgs(ArgPayload&& payload) +{ + using Args = util::RemoveCvRef_t; + using ArgStore = DispatchStore; + + static_assert(util::IsVariantAlternative_v, + "Invalid ArgPayload type, not storable in DispatchArgs"); + static_assert(std::is_constructible_v, + "DispatchArgs alternative not constructible from supplied payload"); + + return DispatchArgs{ std::in_place_type, std::forward(payload) }; +} + +template +inline size_t GetDispatchArgsDataSize(Args& args) +{ + if constexpr (DispatchTraits::kHasDataSize) + { + return args.data_size; + } + else if constexpr (DispatchTraits::kHasCommandHeader) + { + return args.command_header.data_size; + } + return 0; +} + +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // GXFRECON_API_PAYLOAD_H diff --git a/third_party/gfxreconstruct/framework/decode/block_buffer.cpp b/third_party/gfxreconstruct/framework/decode/block_buffer.cpp new file mode 100644 index 000000000..d06588e67 --- /dev/null +++ b/third_party/gfxreconstruct/framework/decode/block_buffer.cpp @@ -0,0 +1,149 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#include "decode/block_buffer.h" +// TODO: Remove file_processor.h when preload_file_processor is converted to the common BlockParser/ParsedBlock approach +#include "decode/file_processor.h" +#include "format/format_util.h" + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) + +bool BlockBuffer::ReadBytes(void* buffer, size_t buffer_size) +{ + bool success = ReadBytesAt(buffer, buffer_size, read_pos_); + if (success) + { + read_pos_ += buffer_size; + } + return success; +} + +bool BlockBuffer::ReadBytesAt(void* buffer, size_t buffer_size, size_t at) const +{ + if (IsAvailableAt(buffer_size, at)) + { + memcpy(buffer, block_span_.data() + at, buffer_size); + return true; + } + return false; +} + +BlockBuffer::BlockSpan BlockBuffer::ReadSpan(size_t buffer_size) +{ + if (IsAvailableAt(buffer_size, read_pos_)) + { + const auto span_pos = read_pos_; + read_pos_ += buffer_size; + return BlockSpan(block_span_.data() + span_pos, buffer_size); + } + return BlockSpan(); +} + +// Create a block buffer from a block data span +// Reading the block header contents from the given span +BlockBuffer::BlockBuffer(util::DataSpan&& block_span) : read_pos_{ 0 }, block_span_(std::move(block_span)) +{ + InitBlockHeaderFromSpan(); +} + +void BlockBuffer::InitBlockHeaderFromSpan() +{ + GFXRECON_ASSERT(block_span_.IsValid()); + + // Block header is always at the start of the block span + read_pos_ = 0; + const bool success = ReadBytes(&header_, sizeof(format::BlockHeader)); + + // Bad or incorrect block data should never be present + const bool correct = success && block_span_.Size() == header_.size + sizeof(header_); + assert(correct); + + // Only report failure to read header, span size validity checks are done later in calling code + if (!success) + { + // Tag block buffer as invalid + block_span_.Reset(); + } +} + +// TODO: Remove this when preload_file_processor is converted to the common BlockParser/ParsedBlock approach +bool BlockBuffer::IsFrameDelimiter(const FileProcessor& file_processor) const +{ + if (!IsValid()) + { + return false; + } + + format::BlockType base_type = format::RemoveCompressedBlockBit(header_.type); + switch (base_type) + { + case format::BlockType::kFrameMarkerBlock: + format::MarkerType marker_type; + if (ReadAt(marker_type, sizeof(format::BlockHeader))) + { + return file_processor.IsFrameDelimiter(base_type, marker_type); + } + break; + case format::BlockType::kFunctionCallBlock: + case format::BlockType::kMethodCallBlock: + format::ApiCallId call_id; + if (ReadAt(call_id, sizeof(format::BlockHeader))) + { + return file_processor.IsFrameDelimiter(call_id); + } + break; + + case format::BlockType::kUnknownBlock: + case format::BlockType::kStateMarkerBlock: + case format::BlockType::kMetaDataBlock: + case format::BlockType::kCompressedMetaDataBlock: + case format::BlockType::kCompressedFunctionCallBlock: + case format::BlockType::kCompressedMethodCallBlock: + case format::BlockType::kAnnotation: + break; + } + return false; +} + +bool BlockBuffer::SeekForward(size_t size) +{ + if (IsAvailable(size)) + { + read_pos_ += size; + return true; + } + return false; +} + +bool BlockBuffer::SeekTo(size_t location) +{ + if (location <= Size()) + { + read_pos_ = location; + return true; + } + return false; +} + +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/block_buffer.h b/third_party/gfxreconstruct/framework/decode/block_buffer.h new file mode 100644 index 000000000..b52f9d4bb --- /dev/null +++ b/third_party/gfxreconstruct/framework/decode/block_buffer.h @@ -0,0 +1,123 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_DECODE_BLOCK_BUFFER_H +#define GFXRECON_DECODE_BLOCK_BUFFER_H + +#include "format/format.h" +#include "util/span.h" + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) + +// TODO: Remove this when preload_file_processor is converted to the common BlockParser/ParsedBlock approach +class FileProcessor; + +class BlockBuffer +{ + public: + using BlockSpan = util::DataSpan::OutputSpan; + // Validity means that it has a payload and the payload size is consistent with the block header + bool IsValid() const + { + return (block_span_.data() != nullptr) && (block_span_.size() == (header_.size + sizeof(format::BlockHeader))); + } + bool IsEof() const { return read_pos_ >= block_span_.size(); } + + template + bool Read(T& value) + { + bool success = ReadAt(value, read_pos_); + if (success) + { + read_pos_ += sizeof(T); + } + return success; + } + + template + bool ReadAt(T& value, size_t at) const + { + // Ensure that this isn't being misused. + static_assert(std::is_trivially_copyable_v, "Read requires a trivially copyable type"); + if (IsAvailableAt(sizeof(value), at)) + { + memcpy(&value, block_span_.data() + at, sizeof(value)); + return true; + } + return false; + } + + bool ReadBytes(void* buffer, size_t buffer_size); + bool ReadBytesAt(void* buffer, size_t buffer_size, size_t at) const; + + BlockSpan ReadSpan(size_t buffer_size); + + size_t Size() const { return block_span_.size(); } + const format::BlockHeader& Header() const { return header_; } + + size_t ReadPos() const { return read_pos_; } + size_t Remainder() const + { + GFXRECON_ASSERT(Size() >= read_pos_); + return Size() - read_pos_; + } + + BlockBuffer() = default; + BlockBuffer(util::DataSpan&& block_span); + + // TODO: Remove this when preload_file_processor is converted to the common BlockParser/ParsedBlock approach + bool IsFrameDelimiter(const FileProcessor& file_processor) const; + + void Reset() + { + read_pos_ = 0; + block_span_.Reset(); + }; + + const util::DataSpan& GetData() const noexcept { return block_span_; } + [[nodiscard]] util::DataSpan&& ReleaseData() noexcept { return std::move(block_span_); } + + [[nodiscard]] util::DataSpan MakeNonOwnedData() const noexcept + { + return util::DataSpan(block_span_, util::DataSpan::NonOwnedSpanTag{}); + } + + bool SeekForward(size_t size); + bool SeekTo(size_t size); + + bool IsAvailable(size_t size) const noexcept { return IsAvailableAt(size, read_pos_); } + bool IsAvailableAt(size_t size, size_t at) const noexcept { return Size() >= (at + size); } + + util::DataSpan& GetBlockStore() { return block_span_; } + void InitBlockHeaderFromSpan(); + + private: + size_t read_pos_{ 0 }; + uint64_t block_index_{ 0U }; + util::DataSpan block_span_; + format::BlockHeader header_; +}; + +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) +#endif // GFXRECON_DECODE_BLOCK_BUFFER_H diff --git a/third_party/gfxreconstruct/framework/decode/block_parser.cpp b/third_party/gfxreconstruct/framework/decode/block_parser.cpp new file mode 100644 index 000000000..3ac1d929e --- /dev/null +++ b/third_party/gfxreconstruct/framework/decode/block_parser.cpp @@ -0,0 +1,1794 @@ +/* +** Copyright (c) 2018 Valve Corporation +** Copyright (c) 2018-2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#include "decode/block_parser.h" +#include "format/format_util.h" + +#include +#include +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) + +// Parse the block header and load the whole block into a block buffer +BlockIOError BlockParser::ReadBlockBuffer(FileInputStreamPtr& input_stream, BlockBuffer& block_buffer) +{ + using BlockSizeType = decltype(format::BlockHeader::size); + BlockSizeType block_size; + BlockIOError status = kErrorNone; + + const size_t peeked_bytes = input_stream->PeekBytes(&block_size, sizeof(block_size)); + if (peeked_bytes == 0) + { + // We're at EOF without a single byte to read + status = input_stream->IsError() ? kErrorReadingBlockHeader : kEndOfFile; + } + else if (peeked_bytes < sizeof(block_size)) + { + // The file ended, but doesn't contain even a full header's information + status = kErrorReadingBlockHeader; + } + + if (status == kErrorNone) + { + // NOTE: If BlockSkippingFileProcessor performance is significantly harmed we could defer the data span read + // here For 32bit size_t is << BlockSizeType ... but expecting support for > 4GB blocks on 32 bit platforms + // isn't reasonable + constexpr size_t size_t_max = std::numeric_limits::max(); + constexpr BlockSizeType block_size_max = std::numeric_limits::max(); + constexpr bool small_size = size_t_max < std::numeric_limits::max(); + constexpr size_t block_header_size = sizeof(format::BlockHeader); + + GFXRECON_ASSERT(block_size <= (block_size_max - BlockSizeType(block_header_size))); + const BlockSizeType total_block_size = block_size + sizeof(format::BlockHeader); + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, total_block_size); + + if constexpr (small_size) + { + if (total_block_size > size_t_max) + { + // This is a fatal error (caller will catch). SkipBytes takes size_t and fseek takes *long*, + // which means we can't even skip this block on all 32 bit systems + status = kErrorReadingBlockData; + } + } + if (status == kErrorNone) + { + // Note this leave the BlockBuffer read position at the first byte following the header. + bool success = + input_stream->ReadOverwriteSpan(static_cast(total_block_size), block_buffer.GetBlockStore()); + if (success) + { + block_buffer.InitBlockHeaderFromSpan(); + } + else + { + status = kErrorReadingBlockData; + } + } + } + + if (status != kErrorNone) + { + block_buffer.Reset(); + } + + return status; +} + +void BlockParser::HandleBlockReadError(BlockIOError error_code, const char* error_message) +{ + GFXRECON_ASSERT(err_handler_); + err_handler_(error_code, error_message); +} + +bool BlockParser::ShouldDeferDecompression(size_t block_size) +{ + // NOTE: Using multiple ifs for clarity + if (decompression_policy_ == kAlways) + { + return false; + } + else if (decompression_policy_ == kNever) + { + return true; + } + + GFXRECON_ASSERT(decompression_policy_ == kQueueOptimized); + return block_size > kDeferThreshold; +} + +bool BlockParser::DecompressSpan(const BlockBuffer::BlockSpan& compressed_span, + size_t expanded_size, + ParsedBlock::UncompressedStore& uncompressed_buffer) +{ + GFXRECON_ASSERT(!compressed_span.empty()); + size_t uncompressed_size = compressor_->Decompress(compressed_span.size(), + reinterpret_cast(compressed_span.data()), + expanded_size, + uncompressed_buffer.GetAs()); + if (uncompressed_size == expanded_size) + { + return true; + } + else + { + HandleBlockReadError(kErrorReadingCompressedBlockData, "Failed to decompress block data"); + return false; + } +} + +ParsedBlock::UncompressedStore BlockParser::DecompressSpan(const BlockBuffer::BlockSpan& compressed_span, + size_t expanded_size) +{ + auto uncompressed_buffer = pool_->Acquire(expanded_size); + if (DecompressSpan(compressed_span, expanded_size, uncompressed_buffer)) + { + return uncompressed_buffer; + } + else + { + return ParsedBlock::UncompressedStore(); + } +} +const uint8_t* BlockParser::DecompressSpan(const BlockBuffer::BlockSpan& compressed_span, + size_t expanded_size, + UseParserLocalStorageTag) +{ + uncompressed_working_buffer_.ReserveDiscarding(expanded_size); + if (DecompressSpan(compressed_span, expanded_size, uncompressed_working_buffer_)) + { + return reinterpret_cast(uncompressed_working_buffer_.data()); + } + else + { + HandleBlockReadError(kErrorReadingCompressedBlockData, "Failed to decompress block data"); + return nullptr; + } +} +void BlockParser::WarnUnknownBlock(const BlockBuffer& block_buffer, const char* sub_type_label, uint32_t sub_type) +{ + const format::BlockHeader& block_header = block_buffer.Header(); + const format::BlockType block_type = block_header.type; + + const uint32_t type = static_cast(block_type); + const char* compressed = format::IsBlockCompressed(block_type) ? "compressed" : "uncompressed"; + + std::stringstream message; + if (nullptr != sub_type_label) + { + message << "Skipping unrecognized " << compressed << " " << sub_type_label << " with type " << sub_type; + } + else + { + message << "Skipping unrecognized %s file block with type " << block_type; + } + + GFXRECON_LOG_WARNING( + "%s (frame %" PRIu64 " block %" PRIu32 ")", message.str().c_str(), frame_number_, block_index_); +} + +// Create a block that is compressible with correct handling of both compression state and decompression policy +template +[[nodiscard]] ParsedBlock BlockParser::MakeCompressibleParsedBlock(BlockBuffer& block_buffer, + const BlockParser::ParameterReadResult& read_result, + ArgPayload&& args) +{ + if (read_result.is_compressed) + { + if (ShouldDeferDecompression(block_buffer.GetData().size())) + { + return ParsedBlock(ParsedBlock::DeferredDecompressBlockTag{}, + block_buffer, + block_reference_policy_, + std::forward(args)); + } + else + { + if (block_reference_policy_ == ParsedBlock::kNonOwnedReference) + { + // Use parser local storage for decompression to avoid retaining owned references in this mode + const uint8_t* uncompressed_data = + DecompressSpan(read_result.buffer, read_result.uncompressed_size, UseParserLocalStorageTag{}); + if (uncompressed_data == nullptr) + { + return ParsedBlock(ParsedBlock::InvalidBlockTag()); + } + args.data = uncompressed_data; + return ParsedBlock(ParsedBlock::DecompressedBlockTag{}, block_buffer, std::forward(args)); + } + + // Use owned uncompressed storage only as needed + UncompressedStore uncompressed_store = DecompressSpan(read_result.buffer, read_result.uncompressed_size); + args.data = uncompressed_store.template GetAs(); + if (uncompressed_store.empty()) + { + return ParsedBlock(ParsedBlock::InvalidBlockTag()); + } + return ParsedBlock(ParsedBlock::DecompressedBlockTag{}, + block_buffer, + block_reference_policy_, + std::move(uncompressed_store), + std::forward(args)); + } + } + else + { + return ParsedBlock( + ParsedBlock::UncompressedBlockTag{}, block_buffer, block_reference_policy_, std::forward(args)); + } +} +// Create a block that is never compressed with correct handling of both compression state and decompression policy +template +[[nodiscard]] ParsedBlock +BlockParser::MakeIncompressibleParsedBlock(BlockBuffer& block_buffer, ArgPayload&& args, bool references_block_buffer) +{ + return ParsedBlock(ParsedBlock::IncompressibleBlockTag{ block_buffer }, + block_buffer, + block_reference_policy_, + references_block_buffer, + std::forward(args)); +} + +ParsedBlock BlockParser::ParseBlock(BlockBuffer& block_buffer) +{ + // Note that header parsing has been done by the BlockParser before this call is made. + GFXRECON_ASSERT(block_buffer.ReadPos() == sizeof(format::BlockHeader)); + const format::BlockHeader& block_header = block_buffer.Header(); + format::BlockType base_type = format::RemoveCompressedBlockBit(block_header.type); + switch (base_type) + { + case format::kFunctionCallBlock: + return ParseFunctionCall(block_buffer); + break; + case format::kMethodCallBlock: + return ParseMethodCall(block_buffer); + break; + case format::kMetaDataBlock: + return ParseMetaData(block_buffer); + break; + case format::kFrameMarkerBlock: + return ParseFrameMarker(block_buffer); + break; + case format::kStateMarkerBlock: + return ParseStateMarker(block_buffer); + break; + case format::kAnnotation: + return ParseAnnotation(block_buffer); + break; + case format::kUnknownBlock: + default: + WarnUnknownBlock(block_buffer); + return ParsedBlock{ ParsedBlock::UnknownBlockTag(), block_buffer.ReleaseData() }; + break; + } +} + +// The parameter buffer always takes up the end of the block +// Default value for uncompressed_size is kReadSizeFromBuffer -- which is the behavior of Function and method call +BlockParser::ParameterReadResult +BlockParser::ReadParameterBuffer(const char* label, BlockBuffer& block_buffer, uint64_t uncompressed_size) +{ + ParameterReadResult result; // result.success initializes to true; + + auto error_string = [&result, label](const char* tag) { + std::stringstream err; + err << "Failed to read "; + if (result.is_compressed) + { + err << "compressed "; + } + err << std::string(label); + if (tag) + { + err << " " << tag; + } + return err; + }; + + result.is_compressed = format::IsBlockCompressed(block_buffer.Header().type); + size_t buffer_size = 0; + if (result.is_compressed) + { + // The data size is encoded just ahead of the compressed buffer + if (kReadSizeFromBuffer == uncompressed_size) + { + result.success = block_buffer.Read(uncompressed_size); + } + + // For passed in uncompressed sizes this is always true, but it centralized the conversion loss path + if (result.success) + { + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, uncompressed_size); + result.uncompressed_size = static_cast(uncompressed_size); + buffer_size = block_buffer.Remainder(); + } + else + { + HandleBlockReadError(kErrorReadingCompressedBlockHeader, error_string("size").str().c_str()); + result.success = false; + } + } + else + { + // For uncompressed blocks the data size is the parameter buffer size + result.uncompressed_size = block_buffer.Remainder(); + buffer_size = result.uncompressed_size; + } + + if (result.success) + { + // We only try to read the buffer (span), if no previous errors have occurred, and if non-empty. + if (buffer_size > 0) + { + result.buffer = block_buffer.ReadSpan(buffer_size); + result.success = result.buffer.size() == buffer_size; + + if (!result.success) + { + const BlockIOError error_code = + result.is_compressed ? kErrorReadingCompressedBlockData : kErrorReadingBlockData; + HandleBlockReadError(error_code, error_string("data").str().c_str()); + } + } + else + { + // Shouldn't ever been a compressed parameter buffer with an empty remainder + GFXRECON_ASSERT(!result.is_compressed); + + // Simplify compressed block handling, by never treating an empty span as compressed + result.is_compressed = false; + } + } + return result; +} + +ParsedBlock BlockParser::ParseFunctionCall(BlockBuffer& block_buffer) +{ + // The caller is responsible for reading the block and parsing the header + GFXRECON_ASSERT(block_buffer.ReadPos() == sizeof(format::BlockHeader)); + const format::BlockHeader& block_header = block_buffer.Header(); + format::ApiCallId api_call_id = format::ApiCallId::ApiCall_Unknown; + + ApiCallInfo call_info{ GetBlockIndex() }; + + bool success = block_buffer.Read(api_call_id); + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, block_header.size); + success = success && block_buffer.Read(call_info.thread_id); + + if (success) + { + const char* label = "function call block"; + ParameterReadResult read_result = ReadParameterBuffer(label, block_buffer); + + if (read_result.success) + { + return MakeCompressibleParsedBlock( + block_buffer, + read_result, + FunctionCallArgs{ api_call_id, + call_info, + reinterpret_cast(read_result.buffer.data()), + read_result.uncompressed_size }); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read function call block header"); + } + + return ParsedBlock(ParsedBlock::InvalidBlockTag()); +} + +ParsedBlock BlockParser::ParseMethodCall(BlockBuffer& block_buffer) +{ + // The caller is responsible for reading the block and parsing the header + GFXRECON_ASSERT(block_buffer.ReadPos() == sizeof(format::BlockHeader)); + const format::BlockHeader& block_header = block_buffer.Header(); + format::ApiCallId call_id = format::ApiCallId::ApiCall_Unknown; + bool success = block_buffer.Read(call_id); + + format::HandleId object_id = 0; + ApiCallInfo call_info{ GetBlockIndex() }; + + success = success && block_buffer.Read(object_id); + success = success && block_buffer.Read(call_info.thread_id); + + if (success) + { + const char* label = "method call block"; + ParameterReadResult read_result = ReadParameterBuffer(label, block_buffer); + if (read_result.success) + { + return MakeCompressibleParsedBlock( + block_buffer, + read_result, + MethodCallArgs{ call_id, + object_id, + call_info, + reinterpret_cast(read_result.buffer.data()), + read_result.uncompressed_size }); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read method call block header"); + } + + return ParsedBlock(ParsedBlock::InvalidBlockTag()); +} + +ParsedBlock BlockParser::ParseMetaData(BlockBuffer& block_buffer) +{ + // The caller is responsible for reading the block and parsing the header + GFXRECON_ASSERT(block_buffer.ReadPos() == sizeof(format::BlockHeader)); + const format::BlockHeader& block_header = block_buffer.Header(); + format::ApiCallId call_id = format::ApiCallId::ApiCall_Unknown; + format::MetaDataId meta_data_id; + bool success = block_buffer.Read(meta_data_id); + + if (!success) + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read function call block header"); + return ParsedBlock(ParsedBlock::InvalidBlockTag()); + } + + // Optional backing store for the various uncompressed metadata contents + + format::MetaDataType meta_data_type = format::GetMetaDataType(meta_data_id); + + if (meta_data_type == format::MetaDataType::kFillMemoryCommand) + { + format::FillMemoryCommandHeader header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.memory_id); + success = success && block_buffer.Read(header.memory_offset); + success = success && block_buffer.Read(header.memory_size); + + if (success) + { + const char* label = "fill memory meta-data block"; + ParameterReadResult read_result = ReadParameterBuffer(label, block_buffer, header.memory_size); + if (read_result.success) + { + return MakeCompressibleParsedBlock( + block_buffer, + read_result, + FillMemoryArgs{ meta_data_id, + header.thread_id, + header.memory_id, + header.memory_offset, + header.memory_size, + reinterpret_cast(read_result.buffer.data()) }); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read fill memory meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kFillMemoryResourceValueCommand) + { + format::FillMemoryResourceValueCommandHeader header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.resource_value_count); + + if (success) + { + // Uncompressed parameter_data size is computed and not encoded. + uint64_t parameter_data_size = + header.resource_value_count * (sizeof(format::ResourceValueType) + sizeof(uint64_t)); + + const char* label = "memory resource value meta-data block"; + ParameterReadResult read_result = ReadParameterBuffer(label, block_buffer, parameter_data_size); + + if (read_result.success) + { + return MakeCompressibleParsedBlock( + block_buffer, + read_result, + // Note that both the meta_data_id and the data_size are not passed to the decoder in Dispatch + // but needed by the Dispatch and Decompression visitors respectively. + FillMemoryResourceValueArgs{ meta_data_id, + read_result.uncompressed_size, + header, + reinterpret_cast(read_result.buffer.data()) }); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, + "Failed to read fill memory resource value meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kResizeWindowCommand) + { + format::ResizeWindowCommand command; + + success = block_buffer.Read(command.thread_id); + success = success && block_buffer.Read(command.surface_id); + success = success && block_buffer.Read(command.width); + success = success && block_buffer.Read(command.height); + + if (success) + { + // This command does not support compression + return MakeIncompressibleParsedBlock( + block_buffer, + ResizeWindowArgs{ meta_data_id, command.thread_id, command.surface_id, command.width, command.height }); + } + else + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read resize window meta-data block"); + } + } + else if (meta_data_type == format::MetaDataType::kResizeWindowCommand2) + { + + format::ResizeWindowCommand2 command; + + success = block_buffer.Read(command.thread_id); + success = success && block_buffer.Read(command.surface_id); + success = success && block_buffer.Read(command.width); + success = success && block_buffer.Read(command.height); + success = success && block_buffer.Read(command.pre_transform); + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, + ResizeWindow2Args{ meta_data_id, + command.thread_id, + command.surface_id, + command.width, + command.height, + command.pre_transform }); + } + else + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read resize window 2 meta-data block"); + } + } + else if (meta_data_type == format::MetaDataType::kExeFileInfoCommand) + { + format::ExeFileInfoBlock header; + success = block_buffer.Read(header.thread_id); + + success = success && block_buffer.ReadBytes(&header.info_record.ProductVersion, + gfxrecon::util::filepath::kMaxFilePropertySize); + success = success && block_buffer.ReadBytes(&header.info_record.FileVersion, + gfxrecon::util::filepath::kMaxFilePropertySize); + success = success && block_buffer.ReadBytes(&header.info_record.AppVersion, + sizeof(uint32_t) * gfxrecon::util::filepath::kFileVersionSize); + success = success && + block_buffer.ReadBytes(&header.info_record.AppName, gfxrecon::util::filepath::kMaxFilePropertySize); + success = success && block_buffer.ReadBytes(&header.info_record.CompanyName, + gfxrecon::util::filepath::kMaxFilePropertySize); + success = success && block_buffer.ReadBytes(&header.info_record.FileDescription, + gfxrecon::util::filepath::kMaxFilePropertySize); + success = success && block_buffer.ReadBytes(&header.info_record.InternalName, + gfxrecon::util::filepath::kMaxFilePropertySize); + success = success && block_buffer.ReadBytes(&header.info_record.OriginalFilename, + gfxrecon::util::filepath::kMaxFilePropertySize); + success = success && block_buffer.ReadBytes(&header.info_record.ProductName, + gfxrecon::util::filepath::kMaxFilePropertySize); + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, ExeFileArgs{ meta_data_id, header.thread_id, header }); + } + } + else if (meta_data_type == format::MetaDataType::kDriverInfoCommand) + { + format::DriverInfoBlock header; + success = block_buffer.Read(header.thread_id); + + success = + success && block_buffer.ReadBytes(&header.driver_record, gfxrecon::util::filepath::kMaxDriverInfoSize); + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, DriverArgs{ meta_data_id, header.thread_id, header }); + } + } + else if (meta_data_type == format::MetaDataType::kDisplayMessageCommand) + { + format::DisplayMessageCommandHeader header; + + success = block_buffer.Read(header.thread_id); + + if (success) + { + uint64_t message_size = block_header.size - sizeof(meta_data_id) - sizeof(header.thread_id); + + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, message_size); + const size_t data_size = static_cast(message_size); + BlockBuffer::BlockSpan parameter_data = block_buffer.ReadSpan(data_size); + success = parameter_data.size() == data_size; + + if (success) + { + const char* message_start = reinterpret_cast(parameter_data.data()); + std::string message(message_start, std::next(message_start, static_cast(message_size))); + + // This command does not support compression. + return MakeIncompressibleParsedBlock( + block_buffer, DisplayMessageArgs{ meta_data_id, header.thread_id, std::move(message) }); + } + else + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read display message meta-data block"); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read display message meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kCreateHardwareBufferCommand_deprecated) + { + format::CreateHardwareBufferCommandHeader_deprecated header; + + GFXRECON_LOG_WARNING_ONCE( + "This capture contains a deprecated metacommand to create an AHardwareBuffer. While still supported, this " + "metacommand may not correctly represent some state of the captured AHardwareBuffer."); + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.memory_id); + success = success && block_buffer.Read(header.buffer_id); + success = success && block_buffer.Read(header.format); + success = success && block_buffer.Read(header.width); + success = success && block_buffer.Read(header.height); + success = success && block_buffer.Read(header.stride); + success = success && block_buffer.Read(header.usage); + success = success && block_buffer.Read(header.layers); + success = success && block_buffer.Read(header.planes); + + if (success) + { + std::vector entries; + + for (uint64_t i = 0; i < header.planes; ++i) + { + format::HardwareBufferPlaneInfo entry; + + if (!block_buffer.Read(entry)) + { + success = false; + break; + } + + entries.emplace_back(std::move(entry)); + } + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, + CreateHardwareBufferArgs{ meta_data_id, + header.thread_id, + 0u, + header.memory_id, + header.buffer_id, + header.format, + header.width, + header.height, + header.stride, + header.usage, + header.layers, + std::move(entries) }); + } + else + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read create hardware buffer meta-data block"); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, + "Failed to read create hardware buffer meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kCreateHardwareBufferCommand_deprecated2) + { + format::CreateHardwareBufferCommandHeader_deprecated2 header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.memory_id); + success = success && block_buffer.Read(header.buffer_id); + success = success && block_buffer.Read(header.format); + success = success && block_buffer.Read(header.width); + success = success && block_buffer.Read(header.height); + success = success && block_buffer.Read(header.stride); + success = success && block_buffer.Read(header.usage); + success = success && block_buffer.Read(header.layers); + success = success && block_buffer.Read(header.planes); + + if (success) + { + std::vector entries; + + for (uint64_t i = 0; i < header.planes; ++i) + { + format::HardwareBufferPlaneInfo entry; + + if (!block_buffer.Read(entry)) + { + success = false; + break; + } + + entries.emplace_back(std::move(entry)); + } + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, + CreateHardwareBufferArgs{ meta_data_id, + header.thread_id, + 0u, + header.memory_id, + header.buffer_id, + header.format, + header.width, + header.height, + header.stride, + header.usage, + header.layers, + std::move(entries) }); + } + else + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read create hardware buffer meta-data block"); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, + "Failed to read create hardware buffer meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kCreateHardwareBufferCommand) + { + format::CreateHardwareBufferCommandHeader header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.device_id); + success = success && block_buffer.Read(header.memory_id); + success = success && block_buffer.Read(header.buffer_id); + success = success && block_buffer.Read(header.format); + success = success && block_buffer.Read(header.width); + success = success && block_buffer.Read(header.height); + success = success && block_buffer.Read(header.stride); + success = success && block_buffer.Read(header.usage); + success = success && block_buffer.Read(header.layers); + success = success && block_buffer.Read(header.planes); + + if (success) + { + std::vector entries; + + for (uint64_t i = 0; i < header.planes; ++i) + { + format::HardwareBufferPlaneInfo entry; + + if (!block_buffer.Read(entry)) + { + success = false; + break; + } + + entries.emplace_back(std::move(entry)); + } + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, + CreateHardwareBufferArgs{ meta_data_id, + header.thread_id, + header.device_id, + header.memory_id, + header.buffer_id, + header.format, + header.width, + header.height, + header.stride, + header.usage, + header.layers, + std::move(entries) }); + } + else + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read create hardware buffer meta-data block"); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, + "Failed to read create hardware buffer meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kDestroyHardwareBufferCommand) + { + format::DestroyHardwareBufferCommand command; + + success = block_buffer.Read(command.thread_id); + success = success && block_buffer.Read(command.buffer_id); + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock( + block_buffer, DestroyHardwareBufferArgs{ meta_data_id, command.thread_id, command.buffer_id }); + } + else + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read destroy hardware buffer meta-data block"); + } + } + else if (meta_data_type == format::MetaDataType::kCreateHeapAllocationCommand) + { + format::CreateHeapAllocationCommand header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.allocation_id); + success = success && block_buffer.Read(header.allocation_size); + + if (success) + { + + // This command does not support compression. + return MakeIncompressibleParsedBlock( + block_buffer, + CreateHeapAllocationArgs{ + meta_data_id, header.thread_id, header.allocation_id, header.allocation_size }); + } + else + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read create heap allocation meta-data block"); + } + } + else if (meta_data_type == format::MetaDataType::kSetDevicePropertiesCommand) + { + format::SetDevicePropertiesCommand header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.physical_device_id); + success = success && block_buffer.Read(header.api_version); + success = success && block_buffer.Read(header.driver_version); + success = success && block_buffer.Read(header.vendor_id); + success = success && block_buffer.Read(header.device_id); + success = success && block_buffer.Read(header.device_type); + success = success && block_buffer.ReadBytes(&header.pipeline_cache_uuid, format::kUuidSize); + success = success && block_buffer.Read(header.device_name_len); + + if (success) + { + char device_name[format::kMaxPhysicalDeviceNameSize]; + + if (header.device_name_len < format::kMaxPhysicalDeviceNameSize) + { + success = success && block_buffer.ReadBytes(&device_name, header.device_name_len); + device_name[header.device_name_len] = '\0'; + } + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, + SetDevicePropertiesArgs(meta_data_id, + header.thread_id, + header.physical_device_id, + header.api_version, + header.driver_version, + header.vendor_id, + header.device_id, + header.device_type, + header.pipeline_cache_uuid, + device_name)); + } + else + { + HandleBlockReadError(kErrorReadingBlockData, + "Failed to read set device memory properties meta-data block"); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, + "Failed to read set device memory properties meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kSetDeviceMemoryPropertiesCommand) + { + format::SetDeviceMemoryPropertiesCommand header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.physical_device_id); + success = success && block_buffer.Read(header.memory_type_count); + success = success && block_buffer.Read(header.memory_heap_count); + + if (success) + { + std::vector types; + std::vector heaps; + + for (uint32_t i = 0; i < header.memory_type_count; ++i) + { + format::DeviceMemoryType type; + + if (!block_buffer.Read(type)) + { + success = false; + break; + } + + types.emplace_back(std::move(type)); + } + + for (uint32_t i = 0; i < header.memory_heap_count; ++i) + { + format::DeviceMemoryHeap heap; + + if (!block_buffer.Read(heap)) + { + success = false; + break; + } + + heaps.emplace_back(std::move(heap)); + } + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock( + block_buffer, + SetDeviceMemoryPropertiesArgs{ + meta_data_id, header.thread_id, header.physical_device_id, types, std::move(heaps) }); + } + else + { + HandleBlockReadError(kErrorReadingBlockData, + "Failed to read set device memory properties meta-data block"); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, + "Failed to read set device memory properties meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kSetOpaqueAddressCommand) + { + format::SetOpaqueAddressCommand header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.device_id); + success = success && block_buffer.Read(header.object_id); + success = success && block_buffer.Read(header.address); + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock( + block_buffer, + SetOpaqueAddressArgs{ + meta_data_id, header.thread_id, header.device_id, header.object_id, header.address }); + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read set opaque address meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kSetRayTracingShaderGroupHandlesCommand) + { + format::SetRayTracingShaderGroupHandlesCommandHeader header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.device_id); + success = success && block_buffer.Read(header.pipeline_id); + success = success && block_buffer.Read(header.data_size); + + // Read variable size shader group handle data into parameter_data. + BlockBuffer::BlockSpan parameter_data; + if (success) + { + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, header.data_size); + size_t data_size = static_cast(header.data_size); + parameter_data = block_buffer.ReadSpan(data_size); + success = parameter_data.size() == data_size; + } + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock( + block_buffer, + SetRayTracingShaderGroupHandlesArgs{ meta_data_id, + header.thread_id, + header.device_id, + header.pipeline_id, + static_cast(header.data_size), + reinterpret_cast(parameter_data.data()) }, + true /* references block buffer */); + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, + "Failed to read set ray tracing shader group handles meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kSetSwapchainImageStateCommand) + { + format::SetSwapchainImageStateCommandHeader header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.device_id); + success = success && block_buffer.Read(header.swapchain_id); + success = success && block_buffer.Read(header.last_presented_image); + success = success && block_buffer.Read(header.image_info_count); + + if (success) + { + std::vector entries; + + for (uint32_t i = 0; i < header.image_info_count; ++i) + { + format::SwapchainImageStateInfo entry; + + if (!block_buffer.Read(entry)) + { + success = false; + break; + } + + entries.emplace_back(std::move(entry)); + } + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, + SetSwapchainImageStateArgs{ meta_data_id, + header.thread_id, + header.device_id, + header.swapchain_id, + header.last_presented_image, + std::move(entries) }); + } + else + { + HandleBlockReadError(kErrorReadingBlockData, + "Failed to read set swapchain image state meta-data block"); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, + "Failed to read set swapchain image state meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kBeginResourceInitCommand) + { + format::BeginResourceInitCommand header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.device_id); + success = success && block_buffer.Read(header.total_copy_size); + success = success && block_buffer.Read(header.max_copy_size); + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock( + block_buffer, + BeginResourceInitArgs{ + meta_data_id, header.thread_id, header.device_id, header.total_copy_size, header.max_copy_size }); + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read begin resource init meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kEndResourceInitCommand) + { + format::EndResourceInitCommand header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.device_id); + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock( + block_buffer, EndResourceInitArgs{ meta_data_id, header.thread_id, header.device_id }); + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read end resource init meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kInitBufferCommand) + { + format::InitBufferCommandHeader header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.device_id); + success = success && block_buffer.Read(header.buffer_id); + success = success && block_buffer.Read(header.data_size); + + if (success) + { + const char* label = "init buffer data meta-data block"; + ParameterReadResult read_result = ReadParameterBuffer(label, block_buffer, header.data_size); + if (read_result.success) + { + return MakeCompressibleParsedBlock( + block_buffer, + read_result, + InitBufferArgs{ meta_data_id, + header.thread_id, + header.device_id, + header.buffer_id, + header.data_size, + reinterpret_cast(read_result.buffer.data()) }); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read init buffer data meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kInitImageCommand) + { + format::InitImageCommandHeader header; + std::vector level_sizes; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.device_id); + success = success && block_buffer.Read(header.image_id); + success = success && block_buffer.Read(header.data_size); + success = success && block_buffer.Read(header.aspect); + success = success && block_buffer.Read(header.layout); + success = success && block_buffer.Read(header.level_count); + + if (success && (header.level_count > 0)) + { + level_sizes.resize(header.level_count); + success = + success && block_buffer.ReadBytes(level_sizes.data(), header.level_count * sizeof(level_sizes[0])); + } + + if (success) + { + const char* label = "init image data meta-data block"; + ParameterReadResult read_result = ReadParameterBuffer(label, block_buffer, header.data_size); + assert(header.data_size == std::accumulate(level_sizes.begin(), level_sizes.end(), 0ull)); + + if (read_result.success) + { + return MakeCompressibleParsedBlock( + block_buffer, + read_result, + InitImageArgs{ meta_data_id, + header.thread_id, + header.device_id, + header.image_id, + header.data_size, + header.aspect, + header.layout, + level_sizes, + reinterpret_cast(read_result.buffer.data()) }); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read init image data meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kInitSubresourceCommand) + { + format::InitSubresourceCommandHeader header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.device_id); + success = success && block_buffer.Read(header.resource_id); + success = success && block_buffer.Read(header.subresource); + success = success && block_buffer.Read(header.initial_state); + success = success && block_buffer.Read(header.resource_state); + success = success && block_buffer.Read(header.barrier_flags); + success = success && block_buffer.Read(header.data_size); + + if (success) + { + const char* label = "init subresource data meta-data block"; + ParameterReadResult read_result = ReadParameterBuffer(label, block_buffer, header.data_size); + + if (read_result.success) + { + return MakeCompressibleParsedBlock( + block_buffer, + read_result, + InitSubresourceArgs{ + meta_data_id, header, reinterpret_cast(read_result.buffer.data()) }); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, + "Failed to read init subresource data meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kInitDx12AccelerationStructureCommand) + { + // Parse command header. + format::InitDx12AccelerationStructureCommandHeader header; + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.dest_acceleration_structure_data); + success = success && block_buffer.Read(header.copy_source_gpu_va); + success = success && block_buffer.Read(header.copy_mode); + success = success && block_buffer.Read(header.inputs_type); + success = success && block_buffer.Read(header.inputs_flags); + success = success && block_buffer.Read(header.inputs_num_instance_descs); + success = success && block_buffer.Read(header.inputs_num_geometry_descs); + success = success && block_buffer.Read(header.inputs_data_size); + + // Parse geometry descs. + std::vector geom_descs; + if (success) + { + for (uint32_t i = 0; i < header.inputs_num_geometry_descs; ++i) + { + format::InitDx12AccelerationStructureGeometryDesc geom_desc; + success = success && block_buffer.Read(geom_desc.geometry_type); + success = success && block_buffer.Read(geom_desc.geometry_flags); + success = success && block_buffer.Read(geom_desc.aabbs_count); + success = success && block_buffer.Read(geom_desc.aabbs_stride); + success = success && block_buffer.Read(geom_desc.triangles_has_transform); + success = success && block_buffer.Read(geom_desc.triangles_index_format); + success = success && block_buffer.Read(geom_desc.triangles_vertex_format); + success = success && block_buffer.Read(geom_desc.triangles_index_count); + success = success && block_buffer.Read(geom_desc.triangles_vertex_count); + success = success && block_buffer.Read(geom_desc.triangles_vertex_stride); + geom_descs.push_back(geom_desc); + } + } + + BlockBuffer::BlockSpan parameter_data; + if (success) + { + const char* label = "init DX12 acceleration structure meta-data block"; + ParameterReadResult read_result = ReadParameterBuffer(label, block_buffer, header.inputs_data_size); + if (read_result.success) + { + return MakeCompressibleParsedBlock( + block_buffer, + read_result, + InitDx12AccelerationStructureArgs{ meta_data_id, + read_result.uncompressed_size, + header, + geom_descs, + reinterpret_cast(read_result.buffer.data()) }); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, + "Failed to read init DX12 acceleration structure meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kDxgiAdapterInfoCommand) + { + format::DxgiAdapterInfoCommandHeader adapter_info_header; + memset(&adapter_info_header, 0, sizeof(adapter_info_header)); + + success = block_buffer.Read(adapter_info_header.thread_id); + + success = success && block_buffer.Read(adapter_info_header.adapter_desc.Description); + success = success && block_buffer.Read(adapter_info_header.adapter_desc.VendorId); + success = success && block_buffer.Read(adapter_info_header.adapter_desc.DeviceId); + success = success && block_buffer.Read(adapter_info_header.adapter_desc.SubSysId); + success = success && block_buffer.Read(adapter_info_header.adapter_desc.Revision); + success = success && block_buffer.Read(adapter_info_header.adapter_desc.DedicatedVideoMemory); + success = success && block_buffer.Read(adapter_info_header.adapter_desc.DedicatedSystemMemory); + success = success && block_buffer.Read(adapter_info_header.adapter_desc.SharedSystemMemory); + success = success && block_buffer.Read(adapter_info_header.adapter_desc.LuidLowPart); + success = success && block_buffer.Read(adapter_info_header.adapter_desc.LuidHighPart); + success = success && block_buffer.Read(adapter_info_header.adapter_desc.extra_info); + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, GetDxgiAdapterArgs{ meta_data_id, adapter_info_header }); + } + else + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read adapter info meta-data block"); + } + } + else if (meta_data_type == format::MetaDataType::kDx12RuntimeInfoCommand) + { + format::Dx12RuntimeInfoCommandHeader dx12_runtime_info_header; + memset(&dx12_runtime_info_header, 0, sizeof(dx12_runtime_info_header)); + + success = block_buffer.Read(dx12_runtime_info_header.thread_id); + success = success && block_buffer.Read(dx12_runtime_info_header.runtime_info.version); + success = success && block_buffer.Read(dx12_runtime_info_header.runtime_info.src); + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, + GetDx12RuntimeArgs{ meta_data_id, dx12_runtime_info_header }); + } + else + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read runtime info meta-data block"); + } + } + else if (meta_data_type == format::MetaDataType::kParentToChildDependency) + { + format::ParentToChildDependencyHeader header; + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.dependency_type); + success = success && block_buffer.Read(header.parent_id); + success = success && block_buffer.Read(header.child_count); + + if (success) + { + switch (header.dependency_type) + { + case format::kAccelerationStructuresDependency: + { + std::vector blases; + blases.resize(header.child_count); + + for (uint32_t i = 0; i < header.child_count; ++i) + { + success = success && block_buffer.Read(blases[i]); + } + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock( + block_buffer, + SetTlasToBlasDependencyArgs{ meta_data_id, header.parent_id, std::move(blases) }); + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, + "Failed to read TLAS to BLAS dependency meta-data block header"); + } + } + break; + + default: + success = false; + HandleBlockReadError(kErrorReadingBlockHeader, + "Corrupted parent to child dependency meta-data block header"); + break; + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, + "Failed to read parent to child dependency meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kSetEnvironmentVariablesCommand) + { + format::SetEnvironmentVariablesCommand header; + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.string_length); + if (!success) + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read environment variable block header"); + return ParsedBlock(ParsedBlock::InvalidBlockTag()); + } + + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, header.string_length); + const size_t data_size = static_cast(header.string_length); + BlockBuffer::BlockSpan parameter_data = block_buffer.ReadSpan(data_size); + success = parameter_data.size() == data_size; + + if (!success) + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read environment variable block data"); + return ParsedBlock(ParsedBlock::InvalidBlockTag()); + } + + const char* env_string = reinterpret_cast(parameter_data.data()); + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, + SetEnvironmentVariablesArgs{ meta_data_id, header, env_string }, + true /* references block buffer */); + } + else if (meta_data_type == format::MetaDataType::kVulkanBuildAccelerationStructuresCommand) + { + format::VulkanMetaBuildAccelerationStructuresHeader header{}; + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, block_header.size); + const size_t parameter_buffer_size = static_cast(block_header.size) - sizeof(meta_data_id); + BlockBuffer::BlockSpan parameter_data = block_buffer.ReadSpan(parameter_buffer_size); + success = parameter_data.size() == parameter_buffer_size; + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock( + block_buffer, + VulkanAccelerationStructuresBuildMetaArgs{ + meta_data_id, reinterpret_cast(parameter_data.data()), parameter_buffer_size }, + true /* references block buffer */); + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, + "Failed to read acceleration structure init meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kVulkanCopyAccelerationStructuresCommand) + { + format::VulkanCopyAccelerationStructuresCommandHeader header{}; + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, block_header.size); + const size_t parameter_buffer_size = static_cast(block_header.size) - sizeof(meta_data_id); + BlockBuffer::BlockSpan parameter_data = block_buffer.ReadSpan(parameter_buffer_size); + success = parameter_data.size() == parameter_buffer_size; + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock( + block_buffer, + VulkanAccelerationStructuresCopyMetaArgs{ + meta_data_id, reinterpret_cast(parameter_data.data()), parameter_buffer_size }, + true /* references block buffer */); + } + } + else if (meta_data_type == format::MetaDataType::kVulkanWriteAccelerationStructuresPropertiesCommand) + { + format::VulkanCopyAccelerationStructuresCommandHeader header{}; + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, block_header.size); + const size_t parameter_buffer_size = static_cast(block_header.size) - sizeof(meta_data_id); + BlockBuffer::BlockSpan parameter_data = block_buffer.ReadSpan(parameter_buffer_size); + success = parameter_data.size() == parameter_buffer_size; + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock( + block_buffer, + VulkanAccelerationStructuresWritePropertiesMetaArgs{ + meta_data_id, reinterpret_cast(parameter_data.data()), parameter_buffer_size }, + true /* references block buffer */); + } + } + else if (meta_data_type == format::MetaDataType::kExecuteBlocksFromFile) + { + format::ExecuteBlocksFromFile exec_from_file; + success = block_buffer.Read(exec_from_file.thread_id); + success = success && block_buffer.Read(exec_from_file.n_blocks); + success = success && block_buffer.Read(exec_from_file.offset); + success = success && block_buffer.Read(exec_from_file.filename_length); + + if (success) + { + std::string filename_c_str(exec_from_file.filename_length, '\0'); + success = success && block_buffer.ReadBytes(filename_c_str.data(), exec_from_file.filename_length); + if (success) + { + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, + ExecuteBlocksFromFileArgs{ meta_data_id, + exec_from_file.thread_id, + exec_from_file.n_blocks, + exec_from_file.offset, + std::move(filename_c_str) }); + } + } + } + + if (!success) + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read runtime info meta-data block"); + } + } + else if (meta_data_type == format::MetaDataType::kViewRelativeLocation) + { + format::ViewRelativeLocation Location; + format::ThreadId thread_id; + success = block_buffer.Read(thread_id); + + format::ViewRelativeLocation location; + if (success) + { + success = block_buffer.Read(location); + } + + if (success) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, + ViewRelativeLocationArgs{ meta_data_id, thread_id, location }); + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to ViewRelativeLocation meta-data block"); + } + } + else if (meta_data_type == format::MetaDataType::kInitializeMetaCommand) + { + format::InitializeMetaCommand header; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.capture_id); + success = success && block_buffer.Read(header.block_index); + success = success && block_buffer.Read(header.total_number_of_initializemetacommand); + success = success && block_buffer.Read(header.data_size); + + if (success) + { + const char* label = "init subresource data meta-data block"; + ParameterReadResult read_result = ReadParameterBuffer(label, block_buffer, header.data_size); + + if (read_result.success) + { + return MakeCompressibleParsedBlock( + block_buffer, + read_result, + InitializeMetaArgs{ + meta_data_id, header, reinterpret_cast(read_result.buffer.data()) }); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, + "Failed to read init subresource data meta-data block header"); + } + } + else if (meta_data_type == format::MetaDataType::kSetOpaqueCaptureDescriptorDataCommand) + { + // This command does not support compression. + GFXRECON_ASSERT(block_header.type != format::BlockType::kCompressedMetaDataBlock); + + format::SetOpaqueDescriptorDataCommand header{}; + + success = block_buffer.Read(header.thread_id); + success = success && block_buffer.Read(header.device_id); + success = success && block_buffer.Read(header.object_id); + success = success && block_buffer.Read(header.data_size); + + if (success) + { + const char* label = "fill opaque descriptor-data block"; + ParameterReadResult read_result = ReadParameterBuffer(label, block_buffer, header.data_size); + + return MakeIncompressibleParsedBlock( + block_buffer, + SetOpaqueDescriptorDataArgs{ meta_data_id, + header.thread_id, + header.device_id, + header.object_id, + header.data_size, + reinterpret_cast(read_result.buffer.data()) }, + true /* references block buffer */); + } + + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read set opaque address meta-data block header"); + } + else + { + if (meta_data_type >= format::MetaDataType::kBeginExperimentalReservedRange || + meta_data_type == format::MetaDataType::kReserved23 || meta_data_type == format::MetaDataType::kReserved25) + { + // Only log a warning once if the capture file contains blocks that are a "reserved" meta data type. + GFXRECON_LOG_WARNING_ONCE("This capture file contains meta-data block(s) with reserved type(s) that are " + "not supported. Unsupported meta-data block types will be skipped."); + } + else + { + // Unrecognized metadata type. + WarnUnknownBlock(block_buffer, "meta-data block", static_cast(meta_data_type)); + } + + // Handle unsupported meta-data block. + if (!format::IsBlockCompressed(block_header.type)) + { + // Without the ability to parse the block, the uncompressed size cannot be determined, nor can the + // beginning of the parameter buffer. Thus only uncompressed, unknown meta-data blocks can safely + // be passed through, even as unknown. + // + // A warning has been generated above + return ParsedBlock(ParsedBlock::UnknownBlockTag(), block_buffer.ReleaseData()); + } + else + { + HandleBlockReadError(kErrorUnsupportedBlockType, + "Unrecognized compressed meta-data block type is not supported"); + } + } + + return ParsedBlock(ParsedBlock::InvalidBlockTag()); +} + +ParsedBlock BlockParser::ParseFrameMarker(BlockBuffer& block_buffer) +{ + // The caller is responsible for reading the block and parsing the header + GFXRECON_ASSERT(block_buffer.ReadPos() == sizeof(format::BlockHeader)); + const format::BlockHeader& block_header = block_buffer.Header(); + format::MarkerType marker_type = format::MarkerType::kUnknownMarker; + + bool success = block_buffer.Read(marker_type); + if (!success) + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read frame marker block header"); + return ParsedBlock(ParsedBlock::InvalidBlockTag()); + } + + // Read the rest of the frame marker data. Currently frame markers are not dispatched to decoders. + uint64_t frame_number = 0; + success = success && block_buffer.Read(frame_number); + + if (success) + { + // Unlike most blocks, only one subtype results in a dispatchable command + if (marker_type == format::kEndMarker) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, FrameEndMarkerArgs{ frame_number }); + } + else + { + WarnUnknownBlock(block_buffer, "frame marker", static_cast(marker_type)); + return ParsedBlock(ParsedBlock::UnknownBlockTag(), block_buffer.ReleaseData()); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read frame marker data"); + } + + return ParsedBlock(ParsedBlock::InvalidBlockTag()); +} + +ParsedBlock BlockParser::ParseStateMarker(BlockBuffer& block_buffer) +{ + // The caller is responsible for reading the block and parsing the header + GFXRECON_ASSERT(block_buffer.ReadPos() == sizeof(format::BlockHeader)); + const format::BlockHeader& block_header = block_buffer.Header(); + format::MarkerType marker_type = format::MarkerType::kUnknownMarker; + + bool success = block_buffer.Read(marker_type); + if (!success) + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read state marker block header"); + return ParsedBlock(ParsedBlock::InvalidBlockTag()); + } + + uint64_t frame_number = 0; + success = success && block_buffer.Read(frame_number); + + if (success) + { + if (marker_type == format::kBeginMarker) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, StateBeginMarkerArgs{ frame_number }); + } + else if (marker_type == format::kEndMarker) + { + // This command does not support compression. + return MakeIncompressibleParsedBlock(block_buffer, StateEndMarkerArgs{ frame_number }); + } + else + { + WarnUnknownBlock(block_buffer, "state marker", static_cast(marker_type)); + return ParsedBlock(ParsedBlock::UnknownBlockTag(), block_buffer.ReleaseData()); + } + } + else + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read state marker data"); + } + + return ParsedBlock(ParsedBlock::InvalidBlockTag()); +} + +ParsedBlock BlockParser::ParseAnnotation(BlockBuffer& block_buffer) +{ + // The caller is responsible for reading the block and parsing the header + GFXRECON_ASSERT(block_buffer.ReadPos() == sizeof(format::BlockHeader)); + const format::BlockHeader& block_header = block_buffer.Header(); + format::AnnotationType annotation_type = format::AnnotationType::kUnknown; + + bool success = block_buffer.Read(annotation_type); + if (!success) + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read annotation block header"); + return ParsedBlock(ParsedBlock::InvalidBlockTag()); + } + + decltype(format::AnnotationHeader::label_length) label_length = 0; + decltype(format::AnnotationHeader::data_length) data_length = 0; + + success = block_buffer.Read(label_length); + success = success && block_buffer.Read(data_length); + if (success) + { + if ((label_length > 0) || (data_length > 0)) + { + std::string label; + std::string data; + const auto size_sum = label_length + data_length; + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, size_sum); + const size_t total_length = static_cast(size_sum); + + BlockBuffer::BlockSpan parameter_data = block_buffer.ReadSpan(total_length); + success = parameter_data.size() == total_length; + + if (success) + { + if (label_length > 0) + { + const char* label_start = reinterpret_cast(parameter_data.data()); + label.assign(label_start, std::next(label_start, label_length)); + } + + if (data_length > 0) + { + const char* data_start = + std::next(reinterpret_cast(parameter_data.data()), label_length); + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, data_length); + data.assign(data_start, std::next(data_start, static_cast(data_length))); + } + + // This command does not support compression. + return MakeIncompressibleParsedBlock( + block_buffer, AnnotationArgs{ block_index_, annotation_type, std::move(label), std::move(data) }); + } + else + { + HandleBlockReadError(kErrorReadingBlockData, "Failed to read annotation block"); + } + } + } + else + { + HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read annotation block header"); + } + + return ParsedBlock(ParsedBlock::InvalidBlockTag()); +} + +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/block_parser.h b/third_party/gfxreconstruct/framework/decode/block_parser.h new file mode 100644 index 000000000..49714639c --- /dev/null +++ b/third_party/gfxreconstruct/framework/decode/block_parser.h @@ -0,0 +1,181 @@ +/* +** Copyright (c) 2018 Valve Corporation +** Copyright (c) 2018-2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_DECODE_BLOCK_PARSER_H +#define GFXRECON_DECODE_BLOCK_PARSER_H + +#include "decode/parsed_block.h" +#include "util/heap_buffer.h" +#include "util/file_input_stream.h" + +#include +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) + +// As the BlockParser is doing all the Read/Peek, this is the best place to define this +// NOTE: Eventually FileInputStream will be an abstract base class for whatever input stream is in use +using FileInputStream = util::FStreamFileInputStream; +using FileInputStreamPtr = std::shared_ptr; + +enum BlockIOError : int32_t +{ + kEndOfFile = 1, // when block reading is EOF at a block boundary + kErrorNone = 0, + kErrorInvalidFileDescriptor = -1, + kErrorOpeningFile = -2, + kErrorReadingFile = -3, // ferror() return true at start of file + kErrorReadingFileHeader = -4, + kErrorReadingBlockHeader = -5, + kErrorReadingCompressedBlockHeader = -6, + kErrorReadingBlockData = -7, + kErrorReadingCompressedBlockData = -8, + kErrorInvalidFourCC = -9, + kErrorUnsupportedCompressionType = -10, + kErrorSeekingFile = -11, // Additional error types from FileTransformer + kErrorWritingFile = -12, + kErrorWritingFileHeader = -13, + kErrorWritingBlockHeader = -14, + kErrorWritingCompressedBlockHeader = -15, + kErrorWritingBlockData = -16, + kErrorWritingCompressedBlockData = -17, + kErrorCopyingBlockData = -18, + kErrorUnsupportedBlockType = -19 + +}; + +// TODO: Find a better allocator (or improve this one), and share with FileInputStream +using BufferPool = util::HeapBufferPool::PoolPtr; + +class BlockParser +{ + public: + // The three use cases are: + // Always: non-preloaded replay + // Never: file transforming tools that pass through most blocks without decoding + // Queue Optimized: pre-loaded replay of ParsedBlocks + enum DecompressionPolicy + { + kAlways = 0, // Always decompress parameter data when parsing blocks + kNever, // Never decompress parameter data when parsing blocks + kQueueOptimized, // Decompress only "small" blocks deferring large block to JIT decompression, suitable for + // block preload/preparsed content + }; + + // The threshold is based on a trade off, maximize the number blocks with no decompression at replay + // but minimizing the memory overhead of the non-deferred compressions. + // + // Threshhold data came from a histogram of numerous large traces and is chosen as a trade-off + // that allows the majority of blocks to be decompressed when parsed and enqueued (for preloaded replay), while + // the 3/4 of the *bytes* are not decompressed when enqueued, limiting the memory impact + static constexpr size_t kDeferThreshold = 96 + sizeof(format::BlockHeader); // 83% of blocks, 26% of bytes + + using UncompressedStore = ParsedBlock::UncompressedStore; + + void SetFrameNumber(uint64_t frame_number) noexcept { frame_number_ = frame_number; } + void SetBlockIndex(uint64_t block_index) noexcept { block_index_ = block_index; } + + [[nodiscard]] uint64_t GetFrameNumber() const noexcept { return frame_number_; } + [[nodiscard]] uint64_t GetBlockIndex() const noexcept { return block_index_; } + + // Parse the block header and load a block buffer + BlockIOError ReadBlockBuffer(FileInputStreamPtr& input_stream, BlockBuffer& block_buffer); + + // Define parsers for every block and sub-block type + ParsedBlock ParseBlock(BlockBuffer& block_buffer); + ParsedBlock ParseFunctionCall(BlockBuffer& block_buffer); + ParsedBlock ParseMethodCall(BlockBuffer& block_buffer); + ParsedBlock ParseMetaData(BlockBuffer& block_buffer); + ParsedBlock ParseFrameMarker(BlockBuffer& block_buffer); + ParsedBlock ParseStateMarker(BlockBuffer& block_buffer); + ParsedBlock ParseAnnotation(BlockBuffer& block_buffer); + + void HandleBlockReadError(BlockIOError error_code, const char* error_message); + void + WarnUnknownBlock(const BlockBuffer& block_buffer, const char* sub_type_label = nullptr, uint32_t sub_type = 0U); + + bool ShouldDeferDecompression(size_t block_size); + + // Control use of parser local storage for decompression + struct UseParserLocalStorageTag + {}; + bool DecompressSpan(const BlockBuffer::BlockSpan& compressed_span, + size_t expanded_size, + ParsedBlock::UncompressedStore& uncompressed_buffer); + ParsedBlock::UncompressedStore DecompressSpan(const BlockBuffer::BlockSpan& compressed_span, size_t expanded_size); + const uint8_t* + DecompressSpan(const BlockBuffer::BlockSpan& compressed_span, size_t expanded_size, UseParserLocalStorageTag); + + using ErrorHandler = std::function; + BlockParser(ErrorHandler err, BufferPool& pool, util::Compressor* compressor) : + pool_(pool), err_handler_(std::move(err)), compressor_(compressor) + {} + BlockParser() = delete; + + void SetDecompressionPolicy(DecompressionPolicy policy) noexcept { decompression_policy_ = policy; } + void SetBlockReferencePolicy(ParsedBlock::BlockReferencePolicy policy) noexcept + { + block_reference_policy_ = policy; + } + + DecompressionPolicy GetDecompressionPolicy() const noexcept { return decompression_policy_; } + ParsedBlock::BlockReferencePolicy GetBlockReferencePolicy() const noexcept { return block_reference_policy_; } + + private: + struct ParameterReadResult + { + bool success = true; + bool is_compressed = false; + size_t uncompressed_size = 0; + BlockBuffer::BlockSpan buffer; + }; + + template + [[nodiscard]] ParsedBlock MakeCompressibleParsedBlock(BlockBuffer& block_buffer, + const BlockParser::ParameterReadResult& result, + ArgPayload&& args); + + template + ParsedBlock + MakeIncompressibleParsedBlock(BlockBuffer& block_buffer, ArgPayload&& args, bool references_block_buffer = false); + + constexpr static uint64_t kReadSizeFromBuffer = std::numeric_limits::max(); + ParameterReadResult + ReadParameterBuffer(const char* label, BlockBuffer& block_buffer, uint64_t uncompressed_size = kReadSizeFromBuffer); + + BufferPool pool_; // TODO: Get a better pool, and share with FileInputStream + ErrorHandler err_handler_; + util::Compressor* compressor_ = nullptr; + DecompressionPolicy decompression_policy_ = DecompressionPolicy::kAlways; + ParsedBlock::BlockReferencePolicy block_reference_policy_ = ParsedBlock::BlockReferencePolicy::kNonOwnedReference; + + uint64_t frame_number_ = 0; + uint64_t block_index_ = 0; + + ParsedBlock::UncompressedStore uncompressed_working_buffer_; +}; + +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) +#endif // GFXRECON_DECODE_BLOCK_PARSER_H diff --git a/third_party/gfxreconstruct/framework/decode/common_consumer_base.h b/third_party/gfxreconstruct/framework/decode/common_consumer_base.h index 92e65e414..893db56de 100644 --- a/third_party/gfxreconstruct/framework/decode/common_consumer_base.h +++ b/third_party/gfxreconstruct/framework/decode/common_consumer_base.h @@ -54,10 +54,15 @@ class CommonConsumerBase : public MetadataConsumerBase, public MarkerConsumerBas virtual void SetCurrentFrameNumber(uint64_t frame_number) { frame_number_ = frame_number; } - virtual void ProcessSetEnvironmentVariablesCommand(format::SetEnvironmentVariablesCommand& header, - const char* env_string) + virtual void ProcessSetEnvironmentVariablesCommand(const format::SetEnvironmentVariablesCommand& header, + const char* env_string) {} + virtual void PushRecaptureHandleId(const format::HandleId* id) {} + virtual void PushRecaptureHandleIds(const format::HandleId* id_array, uint64_t id_count) {} + virtual void ClearRecaptureHandleIds() {} + virtual bool IsRecapture() { return false; } + protected: uint64_t frame_number_{ 0 }; }; diff --git a/third_party/gfxreconstruct/framework/decode/common_struct_handle_mappers.h b/third_party/gfxreconstruct/framework/decode/common_struct_handle_mappers.h index 556574a6b..0c0b7090d 100644 --- a/third_party/gfxreconstruct/framework/decode/common_struct_handle_mappers.h +++ b/third_party/gfxreconstruct/framework/decode/common_struct_handle_mappers.h @@ -23,6 +23,8 @@ #ifndef GFXRECON_DECODE_COMMON_HANDLE_MAPPERS_H #define GFXRECON_DECODE_COMMON_HANDLE_MAPPERS_H +#include "decode/common_consumer_base.h" + template void MapStructArrayHandles(T* structs, size_t len, const CommonObjectInfoTable& object_info_table) { @@ -66,6 +68,19 @@ void AddStructArrayHandles(format::HandleId parent_id, } } +template +void PushRecaptureStructArrayHandleIds(const T* id_wrappers, size_t id_len, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrappers != nullptr) + { + for (size_t i = 0; i < id_len; ++i) + { + PushRecaptureStructHandleIds(&id_wrappers[i], consumer); + } + } +} + template void SetStructArrayHandleLengths(T* wrappers, size_t len) { diff --git a/third_party/gfxreconstruct/framework/decode/custom_ags_decoder.h b/third_party/gfxreconstruct/framework/decode/custom_ags_decoder.h index d935571ef..f5323db6a 100644 --- a/third_party/gfxreconstruct/framework/decode/custom_ags_decoder.h +++ b/third_party/gfxreconstruct/framework/decode/custom_ags_decoder.h @@ -53,9 +53,9 @@ class AgsDecoder : public ApiDecoder virtual void DispatchDisplayMessageCommand(format::ThreadId thread_id, const std::string& message) override {} - virtual void DispatchDriverInfo(format::ThreadId thread_id, format::DriverInfoBlock& info) override {} + virtual void DispatchDriverInfo(format::ThreadId thread_id, const format::DriverInfoBlock& info) override {} - virtual void DispatchExeFileInfo(format::ThreadId thread_id, format::ExeFileInfoBlock& info) override {} + virtual void DispatchExeFileInfo(format::ThreadId thread_id, const format::ExeFileInfoBlock& info) override {} virtual void DispatchFillMemoryCommand( format::ThreadId thread_id, uint64_t memory_id, uint64_t offset, uint64_t size, const uint8_t* data) override @@ -182,9 +182,16 @@ class AgsDecoder : public ApiDecoder {} virtual void DispatchInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) override + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) override + {} + + void DispatchSetOpaqueDescriptorDataCommand(format::ThreadId thread_id, + format::HandleId device_id, + format::HandleId object_id, + uint32_t data_size, + const uint8_t* data) override {} protected: diff --git a/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_decoders.cpp b/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_decoders.cpp index 42b29d13e..860c5794d 100644 --- a/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_decoders.cpp +++ b/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_decoders.cpp @@ -671,6 +671,68 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_REN return bytes_read; } +size_t DecodeStruct(const uint8_t* buffer, + size_t buffer_size, + Decoded_D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1* value = wrapper->decoded_value; + + wrapper->DriverMatchingIdentifier = + DecodeAllocator::Allocate(); + wrapper->DriverMatchingIdentifier->decoded_value = &(value->DriverMatchingIdentifier); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->DriverMatchingIdentifier); + bytes_read += ValueDecoder::DecodeUInt64Value( + (buffer + bytes_read), (buffer_size - bytes_read), &(value->SerializedSizeInBytesIncludingHeader)); + bytes_read += ValueDecoder::DecodeUInt64Value( + (buffer + bytes_read), (buffer_size - bytes_read), &(value->DeserializedSizeInBytes)); + bytes_read += + ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->HeaderPostambleType)); + + switch (value->HeaderPostambleType) + { + case D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BOTTOM_LEVEL_POINTERS: + bytes_read += + ValueDecoder::DecodeUInt32Value((buffer + bytes_read), + (buffer_size - bytes_read), + &(value->NumBottomLevelAccelerationStructurePointersAfterHeader)); + break; + case D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BLOCKS: + bytes_read += + ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->NumBlocks)); + break; + default: + GFXRECON_LOG_FATAL_ONCE( + "Unrecognized D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1 union type %u", + value->HeaderPostambleType); + break; + } + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, + size_t buffer_size, + Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeUInt64Value( + (buffer + bytes_read), (buffer_size - bytes_read), &(value->SerializedSizeInBytes)); + bytes_read += + ValueDecoder::DecodeUInt64Value((buffer + bytes_read), + (buffer_size - bytes_read), + &(value->NumBottomLevelAccelerationStructureHeaderAndPointerListPairs)); + + return bytes_read; +} + + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_LARGE_INTEGER* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); @@ -683,6 +745,30 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_LARGE_INT return bytes_read; } +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_DESC* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + D3D12_RAYTRACING_OPACITY_MICROMAP_DESC* value = wrapper->decoded_value; + + // subdivision_level and format are bit-field. It cannot take the address of a bit-field. + UINT subdivision_level; + D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT format; + bytes_read += + ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->ByteOffset)); + + bytes_read += + ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(subdivision_level)); + value->SubdivisionLevel = subdivision_level; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(format)); + value->Format = format; + + return bytes_read; +} + + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_PIPELINE_STATE_STREAM_DESC* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); diff --git a/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_decoders.h b/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_decoders.h index 610b7903b..5714abadb 100644 --- a/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_decoders.h +++ b/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_decoders.h @@ -368,6 +368,29 @@ struct Decoded_D3D12_DISPATCH_GRAPH_DESC Decoded_D3D12_MULTI_NODE_CPU_INPUT* multi_node_cpu_input{ nullptr }; }; +struct Decoded_D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1 +{ + using struct_type = D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1; + + D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1* decoded_value{ nullptr }; + + Decoded_D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER* DriverMatchingIdentifier{ nullptr }; +}; + +struct Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC +{ + using struct_type = D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC; + + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC* decoded_value{ nullptr }; +}; + +struct Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_DESC +{ + using struct_type = D3D12_RAYTRACING_OPACITY_MICROMAP_DESC; + + D3D12_RAYTRACING_OPACITY_MICROMAP_DESC* decoded_value{ nullptr }; +}; + GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_decoders_forward.h b/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_decoders_forward.h index da1d574cc..f41ae0d5a 100644 --- a/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_decoders_forward.h +++ b/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_decoders_forward.h @@ -68,14 +68,21 @@ size_t DecodeStruct(const uint8_t* size_t buffer_size, Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS* wrapper); size_t - DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA* wrapper); +DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA* wrapper); size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RENDER_PASS_BEGINNING_ACCESS* wrapper); size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RENDER_PASS_ENDING_ACCESS* wrapper); +size_t DecodeStruct(const uint8_t* buffer, + size_t buffer_size, + Decoded_D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1* wrapper); +size_t DecodeStruct(const uint8_t* buffer, + size_t buffer_size, + Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC* wrapper); // Platform types. struct Decoded_LARGE_INTEGER; size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_LARGE_INTEGER* wrapper); +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_DESC* wrapper); // Types requiring special processing. struct Decoded_D3D12_PIPELINE_STATE_STREAM_DESC; diff --git a/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_object_mappers.cpp b/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_object_mappers.cpp index e18354b3d..0ef22b445 100644 --- a/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_object_mappers.cpp +++ b/third_party/gfxreconstruct/framework/decode/custom_dx12_struct_object_mappers.cpp @@ -386,12 +386,31 @@ void MapStructObjects(Decoded_D3D12_BARRIER_GROUP* wrapper, { if (wrapper != nullptr) { - auto length = wrapper->texture_barriers->GetLength(); - auto wrappers = wrapper->texture_barriers->GetMetaStructPointer(); + if (wrapper->decoded_value->Type == D3D12_BARRIER_TYPE_TEXTURE) + { + auto length = wrapper->texture_barriers->GetLength(); + auto wrappers = wrapper->texture_barriers->GetMetaStructPointer(); - for (size_t i = 0; i < length; ++i) + for (size_t i = 0; i < length; ++i) + { + MapStructObjects(&wrappers[i], object_info_table, gpu_va_map); + } + } + else if (wrapper->decoded_value->Type == D3D12_BARRIER_TYPE_BUFFER) + { + auto length = wrapper->buffer_barriers->GetLength(); + auto wrappers = wrapper->buffer_barriers->GetMetaStructPointer(); + + for (size_t i = 0; i < length; ++i) + { + MapStructObjects(&wrappers[i], object_info_table, gpu_va_map); + } + } + else { - MapStructObjects(&wrappers[i], object_info_table, gpu_va_map); + // D3D12_BARRIER_TYPE_GLOBAL + // no handling required for this type because there are + // no api handles to patch in this struct. } } } diff --git a/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_decoders.cpp b/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_decoders.cpp index f748a8041..eeff34cbf 100644 --- a/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_decoders.cpp +++ b/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_decoders.cpp @@ -26,7 +26,6 @@ #include "decode/decode_allocator.h" #include "decode/value_decoder.h" #include "generated/generated_vulkan_struct_decoders.h" -#include "util/defines.h" #include "util/logging.h" #include @@ -563,5 +562,179 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageTo return bytes_read; } +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLayerSettingEXT* wrapper) +{ + GFXRECON_ASSERT((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkLayerSettingEXT* value = wrapper->decoded_value; + + bytes_read += wrapper->pLayerName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pLayerName = wrapper->pLayerName.GetPointer(); + bytes_read += wrapper->pSettingName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSettingName = wrapper->pSettingName.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); + bytes_read += + ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->valueCount)); + + switch (value->type) + { + case VK_LAYER_SETTING_TYPE_BOOL32_EXT: + case VK_LAYER_SETTING_TYPE_UINT32_EXT: + bytes_read += wrapper->pValues.DecodeUInt32(buffer + bytes_read, buffer_size - bytes_read); + value->pValues = static_cast(wrapper->pValues.GetPointer()); + break; + case VK_LAYER_SETTING_TYPE_INT32_EXT: + bytes_read += wrapper->pValues.DecodeInt32(buffer + bytes_read, buffer_size - bytes_read); + value->pValues = static_cast(wrapper->pValues.GetPointer()); + break; + case VK_LAYER_SETTING_TYPE_INT64_EXT: + bytes_read += wrapper->pValues.DecodeInt64(buffer + bytes_read, buffer_size - bytes_read); + value->pValues = static_cast(wrapper->pValues.GetPointer()); + break; + case VK_LAYER_SETTING_TYPE_UINT64_EXT: + bytes_read += wrapper->pValues.DecodeUInt64(buffer + bytes_read, buffer_size - bytes_read); + value->pValues = static_cast(wrapper->pValues.GetPointer()); + break; + case VK_LAYER_SETTING_TYPE_FLOAT32_EXT: + bytes_read += wrapper->pValues.DecodeFloat(buffer + bytes_read, buffer_size - bytes_read); + value->pValues = static_cast(wrapper->pValues.GetPointer()); + break; + case VK_LAYER_SETTING_TYPE_FLOAT64_EXT: + bytes_read += wrapper->pValues.DecodeDouble(buffer + bytes_read, buffer_size - bytes_read); + value->pValues = static_cast(wrapper->pValues.GetPointer()); + break; + case VK_LAYER_SETTING_TYPE_STRING_EXT: + { + uint32_t attrib; + ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &attrib); + + // VkLayerSettingEXT was incorrectly encoded for strings before 23f420bd as void* but also decoded + // that way (correctly for the encoding). Decoding captures from before 23f420bd will potentially + // crash, so detect captures encoded the incorrect way and attempt to handle them gracefully. + + bool is_string = (attrib & format::PointerAttributes::kIsString) == format::PointerAttributes::kIsString; + + if (is_string) + { + bytes_read += wrapper->string_decoder.Decode(buffer + bytes_read, buffer_size - bytes_read); + value->pValues = static_cast(wrapper->string_decoder.GetPointer()); + } + else + { + GFXRECON_LOG_INFO("Detected and discarding VkLayerSettingEXT string value incorrectly encoded as " + "void*. Settings will not be passed downstream. See commit 23f420bd."); + // XXX Note that it is unlikely the encoded buffer (1 uint8_t) will contain the captured layer settings + // settings. Decode a uint8_t buffer to move past the data and discard the results. + bytes_read += wrapper->pValues.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); + value->valueCount = 0; + } + break; + } + case VK_LAYER_SETTING_TYPE_MAX_ENUM_EXT: + break; + } + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorDataEXT* wrapper) +{ + GFXRECON_ASSERT((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkDescriptorDataEXT* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeUInt64Value( + (buffer + bytes_read), (buffer_size - bytes_read), &(value->accelerationStructure)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorGetInfoEXT* wrapper) +{ + GFXRECON_ASSERT((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkDescriptorGetInfoEXT* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &wrapper->pNext); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += + ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &wrapper->decoded_type); + value->type = wrapper->decoded_type; + + wrapper->data = DecodeAllocator::Allocate(); + wrapper->data->decoded_value = &(value->data); + + switch (wrapper->decoded_type) + { + case VK_DESCRIPTOR_TYPE_SAMPLER: + bytes_read += wrapper->data->pSampler.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->data.pSampler = wrapper->data->pSampler.GetHandlePointer(); + break; + case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: + wrapper->data->pCombinedImageSampler = + DecodeAllocator::Allocate>(); + bytes_read += + wrapper->data->pCombinedImageSampler->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->data.pCombinedImageSampler = wrapper->data->pCombinedImageSampler->GetPointer(); + break; + case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: + wrapper->data->pInputAttachmentImage = + DecodeAllocator::Allocate>(); + bytes_read += + wrapper->data->pInputAttachmentImage->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->data.pInputAttachmentImage = wrapper->data->pInputAttachmentImage->GetPointer(); + break; + case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: + wrapper->data->pSampledImage = + DecodeAllocator::Allocate>(); + bytes_read += wrapper->data->pSampledImage->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->data.pSampledImage = wrapper->data->pSampledImage->GetPointer(); + break; + case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: + wrapper->data->pStorageImage = + DecodeAllocator::Allocate>(); + bytes_read += wrapper->data->pStorageImage->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->data.pStorageImage = wrapper->data->pStorageImage->GetPointer(); + break; + case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: + wrapper->data->pUniformTexelBuffer = + DecodeAllocator::Allocate>(); + bytes_read += wrapper->data->pUniformTexelBuffer->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->data.pUniformTexelBuffer = wrapper->data->pUniformTexelBuffer->GetPointer(); + break; + case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: + wrapper->data->pStorageTexelBuffer = + DecodeAllocator::Allocate>(); + bytes_read += wrapper->data->pStorageTexelBuffer->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->data.pStorageTexelBuffer = wrapper->data->pStorageTexelBuffer->GetPointer(); + break; + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: + wrapper->data->pUniformBuffer = + DecodeAllocator::Allocate>(); + bytes_read += wrapper->data->pUniformBuffer->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->data.pUniformBuffer = wrapper->data->pUniformBuffer->GetPointer(); + break; + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + wrapper->data->pStorageBuffer = + DecodeAllocator::Allocate>(); + bytes_read += wrapper->data->pStorageBuffer->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->data.pStorageBuffer = wrapper->data->pStorageBuffer->GetPointer(); + break; + case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: + case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV: + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->data); + value->data.accelerationStructure = wrapper->data->decoded_value->accelerationStructure; + break; + default: + break; + } + + return bytes_read; +} + GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_decoders.h b/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_decoders.h index 1976990f7..8477ab8c5 100644 --- a/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_decoders.h +++ b/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_decoders.h @@ -24,6 +24,7 @@ #ifndef GFXRECON_DECODE_CUSTOM_STRUCT_DECODERS_H #define GFXRECON_DECODE_CUSTOM_STRUCT_DECODERS_H +#include "string_array_decoder.h" #include "format/platform_types.h" #include "decode/custom_vulkan_struct_decoders_forward.h" #include "decode/descriptor_update_template_decoder.h" @@ -33,7 +34,6 @@ #include "decode/struct_pointer_decoder.h" #include "decode/vulkan_pnext_node.h" #include "generated/generated_vulkan_struct_decoders_forward.h" -#include "util/defines.h" #include "vulkan/vulkan.h" @@ -233,12 +233,12 @@ struct Decoded_VkIndirectCommandsLayoutTokenEXT { using struct_type = VkIndirectCommandsLayoutTokenEXT; - VkIndirectCommandsLayoutTokenEXT* decoded_value; + VkIndirectCommandsLayoutTokenEXT* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; VkIndirectCommandsTokenTypeEXT decoded_type; - Decoded_VkIndirectCommandsTokenDataEXT* data; - uint32_t offset; + Decoded_VkIndirectCommandsTokenDataEXT* data{ nullptr }; + uint32_t offset{}; }; struct Decoded_VkCopyMemoryToImageInfo @@ -289,6 +289,48 @@ struct Decoded_VkImageToMemoryCopy Decoded_VkExtent3D* imageExtent{ nullptr }; }; +struct Decoded_VkLayerSettingEXT +{ + using struct_type = VkLayerSettingEXT; + + VkLayerSettingEXT* decoded_value{ nullptr }; + + StringDecoder pLayerName; + StringDecoder pSettingName; + PointerDecoder pValues; + + // if type is VK_LAYER_SETTING_TYPE_STRING_EXT we need to decode an array of strings + StringArrayDecoder string_decoder; +}; + +struct Decoded_VkDescriptorDataEXT +{ + using struct_type = VkDescriptorDataEXT; + + VkDescriptorDataEXT* decoded_value{ nullptr }; + + HandlePointerDecoder pSampler; + StructPointerDecoder* pCombinedImageSampler{ nullptr }; + StructPointerDecoder* pInputAttachmentImage{ nullptr }; + StructPointerDecoder* pSampledImage{ nullptr }; + StructPointerDecoder* pStorageImage{ nullptr }; + StructPointerDecoder* pUniformTexelBuffer{ nullptr }; + StructPointerDecoder* pStorageTexelBuffer{ nullptr }; + StructPointerDecoder* pUniformBuffer{ nullptr }; + StructPointerDecoder* pStorageBuffer{ nullptr }; +}; + +struct Decoded_VkDescriptorGetInfoEXT +{ + using struct_type = VkDescriptorGetInfoEXT; + + VkDescriptorGetInfoEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + VkDescriptorType decoded_type; + Decoded_VkDescriptorDataEXT* data{ nullptr }; +}; + GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_decoders_forward.h b/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_decoders_forward.h index 2d5c2aff3..9f038d2d7 100644 --- a/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_decoders_forward.h +++ b/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_decoders_forward.h @@ -41,6 +41,7 @@ struct Decoded_VkAccelerationStructureMotionInstanceNV; struct Decoded_VkPerformanceValueDataINTEL; struct Decoded_VkIndirectExecutionSetInfoEXT; struct Decoded_VkIndirectCommandsTokenDataEXT; +struct Decoded_VkDescriptorDataEXT; size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkClearColorValue* wrapper); size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkClearValue* wrapper); @@ -50,6 +51,7 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceO size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureGeometryDataKHR* wrapper); size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureMotionInstanceNV* wrapper); +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorDataEXT* wrapper); // Decoded struct wrappers for Vulkan structures that require special processing. struct Decoded_VkDescriptorImageInfo; @@ -63,6 +65,8 @@ struct Decoded_VkCopyMemoryToImageInfo; struct Decoded_VkMemoryToImageCopy; struct Decoded_VkCopyImageToMemoryInfo; struct Decoded_VkImageToMemoryCopy; +struct Decoded_VkLayerSettingEXT; +struct Decoded_VkDescriptorGetInfoEXT; size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorImageInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkWriteDescriptorSet* wrapper); @@ -75,6 +79,8 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyMem size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryToImageCopy* wrapper); size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyImageToMemoryInfo* wrapper); size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageToMemoryCopy* wrapper); +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLayerSettingEXT* wrapper); +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorGetInfoEXT* wrapper); // Decoded struct wrappers for SECURITY_ATTRIBUTES and related WIN32 structures. struct Decoded_ACL; diff --git a/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_handle_mappers.cpp b/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_handle_mappers.cpp index 873dd19f6..faac652cb 100644 --- a/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_handle_mappers.cpp +++ b/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_handle_mappers.cpp @@ -190,5 +190,36 @@ void MapStructHandles(Decoded_VkCopyImageToMemoryInfo* wrapper, const CommonObje } } +void MapStructHandles(Decoded_VkDescriptorGetInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkDescriptorGetInfoEXT* value = wrapper->decoded_value; + switch (value->type) + { + case VK_DESCRIPTOR_TYPE_SAMPLER: + value->data.pSampler = handle_mapping::MapHandleArray( + &wrapper->data->pSampler, object_info_table, &CommonObjectInfoTable::GetVkSamplerInfo); + break; + case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: + MapStructHandles( + value->type, wrapper->data->pCombinedImageSampler->GetMetaStructPointer(), object_info_table); + break; + case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: + MapStructHandles( + value->type, wrapper->data->pInputAttachmentImage->GetMetaStructPointer(), object_info_table); + break; + case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: + MapStructHandles(value->type, wrapper->data->pSampledImage->GetMetaStructPointer(), object_info_table); + break; + case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: + MapStructHandles(value->type, wrapper->data->pStorageImage->GetMetaStructPointer(), object_info_table); + break; + default: + break; + } + } +} + GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_handle_mappers.h b/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_handle_mappers.h index c532b8307..c9178f5c8 100644 --- a/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_handle_mappers.h +++ b/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_handle_mappers.h @@ -25,10 +25,6 @@ #include "decode/common_object_info_table.h" #include "decode/custom_vulkan_struct_decoders_forward.h" -#include "decode/vulkan_pnext_node.h" -#include "util/defines.h" - -#include "vulkan/vulkan.h" GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) @@ -49,6 +45,8 @@ void MapStructHandles(Decoded_VkCopyMemoryToImageInfo* wrapper, const CommonObje void MapStructHandles(Decoded_VkCopyImageToMemoryInfo* wrapper, const CommonObjectInfoTable& object_info_table); +void MapStructHandles(Decoded_VkDescriptorGetInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table); + GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_to_json.cpp b/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_to_json.cpp index 40709568a..ee0facb46 100644 --- a/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_to_json.cpp +++ b/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_to_json.cpp @@ -28,10 +28,10 @@ #include "decode/custom_vulkan_struct_decoders.h" #include "util/platform.h" -#include "util/defines.h" #include "nlohmann/json.hpp" #include "vulkan/vulkan.h" +#include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) @@ -564,5 +564,133 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageToMemoryCop } } +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLayerSettingEXT* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkLayerSettingEXT& decoded_value = *data->decoded_value; + const Decoded_VkLayerSettingEXT& meta_struct = *data; + + FieldToJson(jdata["pLayerName"], &meta_struct.pLayerName, options); + FieldToJson(jdata["pSettingName"], &meta_struct.pSettingName, options); + FieldToJson(jdata["type"], decoded_value.type, options); + FieldToJson(jdata["valueCount"], decoded_value.valueCount, options); + + auto typed_json_array = [](const auto* ptr, size_t num_elements) -> nlohmann::json { + return nlohmann::json(std::span(ptr, ptr + num_elements)); + }; + + auto& value_out_json = jdata["pValues"]; + + switch (decoded_value.type) + { + case VK_LAYER_SETTING_TYPE_BOOL32_EXT: + value_out_json = + typed_json_array(static_cast(decoded_value.pValues), decoded_value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_INT32_EXT: + value_out_json = + typed_json_array(static_cast(decoded_value.pValues), decoded_value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_UINT32_EXT: + value_out_json = + typed_json_array(static_cast(decoded_value.pValues), decoded_value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_INT64_EXT: + value_out_json = + typed_json_array(static_cast(decoded_value.pValues), decoded_value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_UINT64_EXT: + value_out_json = + typed_json_array(static_cast(decoded_value.pValues), decoded_value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_FLOAT32_EXT: + value_out_json = + typed_json_array(static_cast(decoded_value.pValues), decoded_value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_FLOAT64_EXT: + value_out_json = + typed_json_array(static_cast(decoded_value.pValues), decoded_value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_STRING_EXT: + { + const auto* string_array = static_cast(decoded_value.pValues); + value_out_json = nlohmann::json::array(); + + for (uint32_t i = 0; i < decoded_value.valueCount; ++i) + { + auto str_view = std::string_view(string_array[i]); + value_out_json.push_back(str_view); + } + } + break; + case VK_LAYER_SETTING_TYPE_MAX_ENUM_EXT: + GFXRECON_ASSERT(false); + break; + } + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, + VkDescriptorType discriminant, + const Decoded_VkDescriptorDataEXT* data, + const util::JsonOptions& options) +{ + if (data && data->decoded_value) + { + switch (discriminant) + { + case VK_DESCRIPTOR_TYPE_SAMPLER: + HandleToJson(jdata["pSampler"], &data->pSampler, options); + break; + case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: + FieldToJson(jdata["pCombinedImageSampler"], data->pCombinedImageSampler, options); + break; + case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: + FieldToJson(jdata["pInputAttachmentImage"], data->pInputAttachmentImage, options); + break; + case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: + FieldToJson(jdata["pSampledImage"], data->pSampledImage, options); + break; + case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: + FieldToJson(jdata["pStorageImage"], data->pStorageImage, options); + break; + case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: + FieldToJson(jdata["pUniformTexelBuffer"], data->pUniformTexelBuffer, options); + break; + case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: + FieldToJson(jdata["pStorageTexelBuffer"], data->pStorageTexelBuffer, options); + break; + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: + FieldToJson(jdata["pUniformBuffer"], data->pUniformBuffer, options); + break; + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + FieldToJson(jdata["pStorageBuffer"], data->pStorageBuffer, options); + break; + case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: + FieldToJsonAsHex(jdata["accelerationStructure"], data->decoded_value->accelerationStructure, options); + break; + default: + jdata = "Invalid DescriptorType: " + std::to_string(discriminant); + break; + } + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, + const Decoded_VkDescriptorGetInfoEXT* data, + const util::JsonOptions& options) +{ + if (data && data->decoded_value) + { + const auto& decoded_value = *data->decoded_value; + const auto& meta_struct = *data; + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["type"], decoded_value.type, options); + FieldToJson(jdata["data"], decoded_value.type, meta_struct.data, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_to_json.h b/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_to_json.h index 2842cadcf..754b173a6 100644 --- a/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_to_json.h +++ b/third_party/gfxreconstruct/framework/decode/custom_vulkan_struct_to_json.h @@ -147,6 +147,15 @@ void FieldToJson(nlohmann::ordered_json& jdata, const format::DeviceMemoryHeap& data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, + VkDescriptorType discriminant, + const Decoded_VkDescriptorDataEXT* data, + const util::JsonOptions& options = util::JsonOptions()); + +void FieldToJson(nlohmann::ordered_json& jdata, + const Decoded_VkDescriptorGetInfoEXT* data, + const util::JsonOptions& options = util::JsonOptions()); + template void FieldToJson(nlohmann::ordered_json& jdata, const std::vector& data, @@ -159,6 +168,10 @@ void FieldToJson(nlohmann::ordered_json& jdata, } } +void FieldToJson(nlohmann::ordered_json& jdata, + const Decoded_VkLayerSettingEXT* data, + const util::JsonOptions& options = util::JsonOptions()); + GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/decoder_util.h b/third_party/gfxreconstruct/framework/decode/decoder_util.h index bd867ab1f..ca0463339 100644 --- a/third_party/gfxreconstruct/framework/decode/decoder_util.h +++ b/third_party/gfxreconstruct/framework/decode/decoder_util.h @@ -56,8 +56,9 @@ bool IsComplete(std::vector& consumers, uint64_t block_index) { VkQueue queue = VK_NULL_HANDLE; - const auto queue_family_flags = device_info->queue_family_creation_flags.find(queue_family_index); - assert(queue_family_flags != device_info->queue_family_creation_flags.end()); + const auto queue_family_flags = + device_info->enabled_queue_family_flags.queue_family_creation_flags.find(queue_family_index); + assert(queue_family_flags != device_info->enabled_queue_family_flags.queue_family_creation_flags.end()); // If the queue has flags, it has to use GetDeviceQueue2 to get it. if (queue_family_flags->second != 0) diff --git a/third_party/gfxreconstruct/framework/decode/dx12_acceleration_structure_builder.cpp b/third_party/gfxreconstruct/framework/decode/dx12_acceleration_structure_builder.cpp index 02c8b5ed9..6c83adc42 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_acceleration_structure_builder.cpp +++ b/third_party/gfxreconstruct/framework/decode/dx12_acceleration_structure_builder.cpp @@ -189,7 +189,7 @@ void Dx12AccelerationStructureBuilder::SetupBuild( // non-zero GPU VA must be set for values that will be used. const D3D12_GPU_VIRTUAL_ADDRESS kDefaultGpuVa = 1; - // Reconstruct accleration structure build descs. + // Reconstruct acceleration structure build descs. temp_geometry_descs_.clear(); if (inputs_desc.Type == D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL) { @@ -270,7 +270,7 @@ void Dx12AccelerationStructureBuilder::SetupBuild( scratch_buffer_size_, prebuild_info.ScratchDataSizeInBytes, D3D12_HEAP_TYPE_DEFAULT, - D3D12_RESOURCE_STATE_UNORDERED_ACCESS, + D3D12_RESOURCE_STATE_COMMON, D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS); UpdateBufferSize(device5_, inputs_buffer_, @@ -319,6 +319,19 @@ void Dx12AccelerationStructureBuilder::ExecuteBuild(const graphics::Dx12GpuVaMap hr = command_list4_->Reset(command_allocator_, nullptr); GFXRECON_ASSERT(SUCCEEDED(hr)); + D3D12_RESOURCE_TRANSITION_BARRIER transition; + transition.pResource = scratch_buffer_.GetInterfacePtr(); + transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + transition.StateBefore = D3D12_RESOURCE_STATE_COMMON; + transition.StateAfter = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + + D3D12_RESOURCE_BARRIER barrier; + barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + barrier.Transition = transition; + + command_list4_->ResourceBarrier(1, &barrier); + // Add the build command. command_list4_->BuildRaytracingAccelerationStructure(&build_desc, 0, nullptr); diff --git a/third_party/gfxreconstruct/framework/decode/dx12_consumer_base.h b/third_party/gfxreconstruct/framework/decode/dx12_consumer_base.h index 76483617c..a0a95daa2 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_consumer_base.h +++ b/third_party/gfxreconstruct/framework/decode/dx12_consumer_base.h @@ -49,9 +49,9 @@ class Dx12ConsumerBase : public MetadataConsumerBase, public MarkerConsumerBase virtual bool IsComplete(uint64_t block_index) { return false; } virtual void ProcessInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) {} virtual void ProcessDxgiAdapterInfo(const format::DxgiAdapterInfoCommandHeader& adapter_info_header) {} @@ -83,8 +83,8 @@ class Dx12ConsumerBase : public MetadataConsumerBase, public MarkerConsumerBase UINT SrcDepthPitch) {} - virtual void ProcessSetEnvironmentVariablesCommand(format::SetEnvironmentVariablesCommand& header, - const char* env_string) {}; + virtual void ProcessSetEnvironmentVariablesCommand(const format::SetEnvironmentVariablesCommand& header, + const char* env_string){}; virtual void ProcessInitializeMetaCommand(const format::InitializeMetaCommand& command_header, const uint8_t* parameters_data) diff --git a/third_party/gfxreconstruct/framework/decode/dx12_decoder_base.cpp b/third_party/gfxreconstruct/framework/decode/dx12_decoder_base.cpp index 581432119..e5e9930c4 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_decoder_base.cpp +++ b/third_party/gfxreconstruct/framework/decode/dx12_decoder_base.cpp @@ -296,9 +296,9 @@ void Dx12DecoderBase::DispatchInitSubresourceCommand(const format::InitSubresour } void Dx12DecoderBase::DispatchInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) { for (auto consumer : consumers_) { @@ -322,8 +322,8 @@ void Dx12DecoderBase::DispatchGetDx12RuntimeInfo(const format::Dx12RuntimeInfoCo } } -void Dx12DecoderBase::DispatchInitializeMetaCommand(format::InitializeMetaCommand& header, - const uint8_t* initialization_parameters_data) +void Dx12DecoderBase::DispatchInitializeMetaCommand(const format::InitializeMetaCommand& header, + const uint8_t* initialization_parameters_data) { for (auto consumer : consumers_) { @@ -331,8 +331,8 @@ void Dx12DecoderBase::DispatchInitializeMetaCommand(format::InitializeMetaComman } } -void Dx12DecoderBase::DispatchSetEnvironmentVariablesCommand(format::SetEnvironmentVariablesCommand& header, - const char* env_string) +void Dx12DecoderBase::DispatchSetEnvironmentVariablesCommand(const format::SetEnvironmentVariablesCommand& header, + const char* env_string) { for (auto consumer : consumers_) { diff --git a/third_party/gfxreconstruct/framework/decode/dx12_decoder_base.h b/third_party/gfxreconstruct/framework/decode/dx12_decoder_base.h index c9e1f85a9..f9d45dfc0 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_decoder_base.h +++ b/third_party/gfxreconstruct/framework/decode/dx12_decoder_base.h @@ -90,7 +90,7 @@ class Dx12DecoderBase : public ApiDecoder virtual void DispatchDisplayMessageCommand(format::ThreadId thread_id, const std::string& message) override; - virtual void DispatchDriverInfo(format::ThreadId thread_id, format::DriverInfoBlock& info) + virtual void DispatchDriverInfo(format::ThreadId thread_id, const format::DriverInfoBlock& info) { for (auto consumer : consumers_) { @@ -98,7 +98,7 @@ class Dx12DecoderBase : public ApiDecoder } } - virtual void DispatchExeFileInfo(format::ThreadId thread_id, format::ExeFileInfoBlock& info) + virtual void DispatchExeFileInfo(format::ThreadId thread_id, const format::ExeFileInfoBlock& info) { for (auto consumer : consumers_) { @@ -203,24 +203,31 @@ class Dx12DecoderBase : public ApiDecoder const uint8_t* data) override; virtual void DispatchInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) override; + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) override; virtual void DispatchGetDxgiAdapterInfo(const format::DxgiAdapterInfoCommandHeader& adapter_info_header) override; virtual void DispatchGetDx12RuntimeInfo(const format::Dx12RuntimeInfoCommandHeader& dx12_runtime_info_header) override; - virtual void DispatchSetEnvironmentVariablesCommand(format::SetEnvironmentVariablesCommand& header, - const char* env_string) override; + virtual void DispatchSetEnvironmentVariablesCommand(const format::SetEnvironmentVariablesCommand& header, + const char* env_string) override; virtual void SetCurrentBlockIndex(uint64_t block_index) override; virtual void SetCurrentApiCallId(format::ApiCallId api_call_id) override; - virtual void DispatchInitializeMetaCommand(format::InitializeMetaCommand& header, - const uint8_t* initialization_parameters_data) override; + virtual void DispatchInitializeMetaCommand(const format::InitializeMetaCommand& header, + const uint8_t* initialization_parameters_data) override; + + void DispatchSetOpaqueDescriptorDataCommand(format::ThreadId thread_id, + format::HandleId device_id, + format::HandleId object_id, + uint32_t data_size, + const uint8_t* data) override + {} protected: const std::vector& GetConsumers() const { return consumers_; } diff --git a/third_party/gfxreconstruct/framework/decode/dx12_dump_resources.cpp b/third_party/gfxreconstruct/framework/decode/dx12_dump_resources.cpp index f26b9dfae..333ef6107 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_dump_resources.cpp +++ b/third_party/gfxreconstruct/framework/decode/dx12_dump_resources.cpp @@ -2371,7 +2371,7 @@ void DefaultDx12DumpResourcesDelegate::BeginDumpResources(const std::string& util::platform::FileOpen(&json_file_handle_, file_path.c_str(), "w"); header_["D3D12SDKVersion"] = std::to_string(D3D12SDKVersion); - header_["gfxreconversion"] = GFXRECON_PROJECT_VERSION_STRING; + header_["gfxreconversion"] = GetProjectVersionString(); header_["captureFile"] = capture_file_name; auto& dr_options = header_["dumpResourcesOptions"]; diff --git a/third_party/gfxreconstruct/framework/decode/dx12_enum_util.h b/third_party/gfxreconstruct/framework/decode/dx12_enum_util.h index d79a16377..c18bcca94 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_enum_util.h +++ b/third_party/gfxreconstruct/framework/decode/dx12_enum_util.h @@ -76,6 +76,9 @@ static std::string GetResultValueString(HRESULT result) case D3D12_ERROR_ADAPTER_NOT_FOUND: return "D3D12_ERROR_ADAPTER_NOT_FOUND"; case D3D12_ERROR_DRIVER_VERSION_MISMATCH: return "D3D12_ERROR_DRIVER_VERSION_MISMATCH"; case D3D12_ERROR_INVALID_REDIST: return "D3D12_ERROR_INVALID_REDIST"; + case DXGI_STATUS_OCCLUDED: return "DXGI_STATUS_OCCLUDED"; + case DXGI_STATUS_MODE_CHANGED: return "DXGI_STATUS_MODE_CHANGED"; + case DXGI_STATUS_MODE_CHANGE_IN_PROGRESS: return "DXGI_STATUS_MODE_CHANGE_IN_PROGRESS"; default: return std::to_string(result); } // clang-format on @@ -134,6 +137,9 @@ static const char* GetResultDescription(HRESULT result) case D3D12_ERROR_ADAPTER_NOT_FOUND: return "The specified cached PSO was created on a different adapter and cannot be reused on the current adapter."; case D3D12_ERROR_DRIVER_VERSION_MISMATCH: return "The specified cached PSO was created on a different driver version and cannot be reused on the current adapter."; case D3D12_ERROR_INVALID_REDIST: return "The D3D12 SDK version configuration of the host exe is invalid."; + case DXGI_STATUS_OCCLUDED: return "The window content is not visible. When receiving this status, an application can stop rendering and use DXGI_PRESENT_TEST to determine when to resume rendering. You will not receive DXGI_STATUS_OCCLUDED if you're using a flip model swap chain."; + case DXGI_STATUS_MODE_CHANGED: return "The desktop display mode has been changed, there might be color conversion/stretching. The application should call IDXGISwapChain::ResizeBuffers to match the new display mode."; + case DXGI_STATUS_MODE_CHANGE_IN_PROGRESS: return "IDXGISwapChain::ResizeTarget and IDXGISwapChain::SetFullscreenState will return DXGI_STATUS_MODE_CHANGE_IN_PROGRESS if a fullscreen/windowed mode transition is occurring when either API is called."; default: return "An error has occurred"; } // clang-format on diff --git a/third_party/gfxreconstruct/framework/decode/dx12_experimental_resource_value_tracker.cpp b/third_party/gfxreconstruct/framework/decode/dx12_experimental_resource_value_tracker.cpp index 0500f0993..5db349067 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_experimental_resource_value_tracker.cpp +++ b/third_party/gfxreconstruct/framework/decode/dx12_experimental_resource_value_tracker.cpp @@ -507,12 +507,13 @@ void Dx12ExperimentalResourceValueTracker::PostProcessCopyTextureRegion( (src_copy_location->Type == D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT)) { auto resource = dst_copy_location->pResource; - if (resource != format::kNullHandleId) + if (resource != nullptr) { auto device = graphics::dx12::GetDeviceComPtrFromChild(resource); const auto& placed_footprint = src_copy_location->PlacedFootprint; uint64_t copy_size = 0; - device->GetCopyableFootprints(&resource->GetDesc(), + auto desc = resource->GetDesc(); + device->GetCopyableFootprints(&desc, dst_copy_location->SubresourceIndex, 1, placed_footprint.Offset, diff --git a/third_party/gfxreconstruct/framework/decode/dx12_json_consumer_base.cpp b/third_party/gfxreconstruct/framework/decode/dx12_json_consumer_base.cpp index 164e0dd8e..760ac966c 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_json_consumer_base.cpp +++ b/third_party/gfxreconstruct/framework/decode/dx12_json_consumer_base.cpp @@ -58,6 +58,7 @@ bool Dx12JsonConsumerBase::IsValid() const void Dx12JsonConsumerBase::ProcessCreateHeapAllocationCommand(uint64_t allocation_id, uint64_t allocation_size) { + writer_->SetCurrentBlockIndex(block_index_); const util::JsonOptions& json_options = writer_->GetOptions(); auto& jdata = writer_->WriteMetaCommandStart("CreateHeapAllocationCommand"); FieldToJson(jdata["allocation_id"], allocation_id, json_options); @@ -68,6 +69,7 @@ void Dx12JsonConsumerBase::ProcessCreateHeapAllocationCommand(uint64_t allocatio void Dx12JsonConsumerBase::ProcessInitSubresourceCommand(const format::InitSubresourceCommandHeader& command_header, const uint8_t* data) { + writer_->SetCurrentBlockIndex(block_index_); const util::JsonOptions& json_options = writer_->GetOptions(); auto& jdata = writer_->WriteMetaCommandStart("InitSubresourceCommand"); @@ -89,10 +91,11 @@ void Dx12JsonConsumerBase::ProcessInitSubresourceCommand(const format::InitSubre /// captures as part of establishing the GPU memory state at the start of the trimmed /// range. void Dx12JsonConsumerBase::ProcessInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) { + writer_->SetCurrentBlockIndex(block_index_); const util::JsonOptions& json_options = writer_->GetOptions(); auto& jdata = writer_->WriteMetaCommandStart("InitDx12AccelerationStructureCommand"); FieldToJson(jdata["thread_id"], command_header.thread_id, json_options); @@ -128,6 +131,7 @@ void Dx12JsonConsumerBase::ProcessInitDx12AccelerationStructureCommand( void Dx12JsonConsumerBase::ProcessFillMemoryResourceValueCommand( const format::FillMemoryResourceValueCommandHeader& command_header, const uint8_t* data) { + writer_->SetCurrentBlockIndex(block_index_); const util::JsonOptions& json_options = writer_->GetOptions(); auto& jdata = writer_->WriteMetaCommandStart("FillMemoryResourceValueCommand"); FieldToJson(jdata["thread_id"], command_header.thread_id, json_options); @@ -147,6 +151,7 @@ void Dx12JsonConsumerBase::ProcessFillMemoryResourceValueCommand( void Dx12JsonConsumerBase::ProcessDxgiAdapterInfo(const format::DxgiAdapterInfoCommandHeader& adapter_info_header) { + writer_->SetCurrentBlockIndex(block_index_); const util::JsonOptions& json_options = writer_->GetOptions(); auto& jdata = writer_->WriteMetaCommandStart("DxgiAdapterInfo"); FieldToJson(jdata["thread_id"], adapter_info_header.thread_id, json_options); @@ -157,6 +162,7 @@ void Dx12JsonConsumerBase::ProcessDxgiAdapterInfo(const format::DxgiAdapterInfoC /// @see DriverInfoBlock in format.h void Dx12JsonConsumerBase::Process_DriverInfo(const char* info_record) { + writer_->SetCurrentBlockIndex(block_index_); const util::JsonOptions& json_options = writer_->GetOptions(); auto& jdata = writer_->WriteMetaCommandStart("DriverInfo"); char driver_record[gfxrecon::util::filepath::kMaxDriverInfoSize + 1]; @@ -170,6 +176,7 @@ void Dx12JsonConsumerBase::Process_DriverInfo(const char* info_record) void Dx12JsonConsumerBase::ProcessDx12RuntimeInfo(const format::Dx12RuntimeInfoCommandHeader& runtime_info_header) { + writer_->SetCurrentBlockIndex(block_index_); const util::JsonOptions& json_options = writer_->GetOptions(); auto& jdata = writer_->WriteMetaCommandStart("Dx12RuntimeInfoCommandHeader"); diff --git a/third_party/gfxreconstruct/framework/decode/dx12_json_consumer_base.h b/third_party/gfxreconstruct/framework/decode/dx12_json_consumer_base.h index f0fb3c054..eb3b75365 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_json_consumer_base.h +++ b/third_party/gfxreconstruct/framework/decode/dx12_json_consumer_base.h @@ -51,9 +51,9 @@ class Dx12JsonConsumerBase : public Dx12Consumer virtual void ProcessInitSubresourceCommand(const format::InitSubresourceCommandHeader& command_header, const uint8_t* data) override; virtual void ProcessInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) override; + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) override; virtual void ProcessFillMemoryResourceValueCommand(const format::FillMemoryResourceValueCommandHeader& command_header, const uint8_t* data) override; diff --git a/third_party/gfxreconstruct/framework/decode/dx12_object_info.h b/third_party/gfxreconstruct/framework/decode/dx12_object_info.h index f54e2dbd9..30d30bd1b 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_object_info.h +++ b/third_party/gfxreconstruct/framework/decode/dx12_object_info.h @@ -92,33 +92,6 @@ struct D3D12StateObjectInfo; struct D3D12ResourceInfo; struct D3D12CommandSignatureInfo; -// Util function for getting the extra info object from a DxObjectInfo. -template -T* GetExtraInfo(DxObjectInfo* info) -{ - if ((info != nullptr) && (info->extra_info != nullptr) && (info->extra_info->extra_info_type == T::kType)) - { - return static_cast(info->extra_info.get()); - } - - GFXRECON_LOG_FATAL("%s object does not have an associated info structure", T::kObjectType); - - return nullptr; -} - -template -const T* GetExtraInfo(const DxObjectInfo* info) -{ - if ((info != nullptr) && (info->extra_info != nullptr) && (info->extra_info->extra_info_type == T::kType)) - { - return static_cast(info->extra_info.get()); - } - - GFXRECON_LOG_FATAL("%s object does not have an associated info structure", T::kObjectType); - - return nullptr; -} - struct MappedMemoryInfo { uint32_t count{ 0 }; ///< Number of times that the memory has been mapped. @@ -223,6 +196,33 @@ struct DxObjectInfo std::unordered_map array_counts; }; +// Util function for getting the extra info object from a DxObjectInfo. +template +T* GetExtraInfo(DxObjectInfo* info) +{ + if ((info != nullptr) && (info->extra_info != nullptr) && (info->extra_info->extra_info_type == T::kType)) + { + return static_cast(info->extra_info.get()); + } + + GFXRECON_LOG_FATAL("%s object does not have an associated info structure", T::kObjectType); + + return nullptr; +} + +template +const T* GetExtraInfo(const DxObjectInfo* info) +{ + if ((info != nullptr) && (info->extra_info != nullptr) && (info->extra_info->extra_info_type == T::kType)) + { + return static_cast(info->extra_info.get()); + } + + GFXRECON_LOG_FATAL("%s object does not have an associated info structure", T::kObjectType); + + return nullptr; +} + struct DxgiSwapchainInfo : DxObjectExtraInfo { static constexpr DxObjectInfoType kType = DxObjectInfoType::kIDxgiSwapchainInfo; diff --git a/third_party/gfxreconstruct/framework/decode/dx12_object_mapping_util.h b/third_party/gfxreconstruct/framework/decode/dx12_object_mapping_util.h index d917ffee0..a4235a1a1 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_object_mapping_util.h +++ b/third_party/gfxreconstruct/framework/decode/dx12_object_mapping_util.h @@ -108,12 +108,6 @@ static T** MapObjectArray(HandlePointerDecoder* handles_pointer, const Dx12O return handles; } -template -static void AddObject(const format::HandleId* p_id, T** pp_object, Dx12ObjectInfoTable* object_info_table) -{ - AddObject(p_id, pp_object, DxObjectInfo{}, object_info_table); -} - template static void AddObject(const format::HandleId* p_id, T** pp_object, @@ -146,6 +140,12 @@ static void AddObject(const format::HandleId* p_id, } } +template +static void AddObject(const format::HandleId* p_id, T** pp_object, Dx12ObjectInfoTable* object_info_table) +{ + AddObject(p_id, pp_object, DxObjectInfo{}, object_info_table); +} + static void RemoveObject(format::HandleId id, Dx12ObjectInfoTable* object_info_table) { assert(object_info_table != nullptr); diff --git a/third_party/gfxreconstruct/framework/decode/dx12_object_scanning_consumer.cpp b/third_party/gfxreconstruct/framework/decode/dx12_object_scanning_consumer.cpp index ee53af2ae..1649232c9 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_object_scanning_consumer.cpp +++ b/third_party/gfxreconstruct/framework/decode/dx12_object_scanning_consumer.cpp @@ -156,9 +156,9 @@ void Dx12ObjectScanningConsumer::ProcessFillMemoryResourceValueCommand( } void Dx12ObjectScanningConsumer::ProcessInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) { dxr_workload_ = true; } diff --git a/third_party/gfxreconstruct/framework/decode/dx12_object_scanning_consumer.h b/third_party/gfxreconstruct/framework/decode/dx12_object_scanning_consumer.h index dd9922679..9f0e621e8 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_object_scanning_consumer.h +++ b/third_party/gfxreconstruct/framework/decode/dx12_object_scanning_consumer.h @@ -112,20 +112,19 @@ class Dx12ObjectScanningConsumer : public Dx12ObjectScanningConsumerBase ProcessFillMemoryResourceValueCommand(const format::FillMemoryResourceValueCommandHeader& command_header, const uint8_t* data); - virtual void Dx12ObjectScanningConsumer::ProcessInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data); - - virtual void - Dx12ObjectScanningConsumer::Process_ID3D12GraphicsCommandList_ExecuteIndirect(const ApiCallInfo& call_info, - format::HandleId object_id, - format::HandleId pCommandSignature, - UINT MaxCommandCount, - format::HandleId pArgumentBuffer, - UINT64 ArgumentBufferOffset, - format::HandleId pCountBuffer, - UINT64 CountBufferOffset) override; + virtual void ProcessInitDx12AccelerationStructureCommand( + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data); + + void Process_ID3D12GraphicsCommandList_ExecuteIndirect(const ApiCallInfo& call_info, + format::HandleId object_id, + format::HandleId pCommandSignature, + UINT MaxCommandCount, + format::HandleId pArgumentBuffer, + UINT64 ArgumentBufferOffset, + format::HandleId pCountBuffer, + UINT64 CountBufferOffset) override; }; GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/dx12_replay_consumer_base.cpp b/third_party/gfxreconstruct/framework/decode/dx12_replay_consumer_base.cpp index 1f00bceca..0424214ea 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_replay_consumer_base.cpp +++ b/third_party/gfxreconstruct/framework/decode/dx12_replay_consumer_base.cpp @@ -118,10 +118,11 @@ void InitialResourceExtraInfo(HandlePointerDecoder* resource_decoder, Dx12ReplayConsumerBase::Dx12ReplayConsumerBase(std::shared_ptr application, const DxReplayOptions& options) : - application_(application), options_(options), current_message_length_(0), info_queue_(nullptr), - resource_data_util_(nullptr), frame_buffer_renderer_(nullptr), debug_layer_enabled_(false), - set_auto_breadcrumbs_enablement_(false), set_breadcrumb_context_enablement_(false), - set_page_fault_enablement_(false), loading_trim_state_(false), fps_info_(nullptr), frame_end_marker_count_(0) + application_(application), + options_(options), current_message_length_(0), info_queue_(nullptr), resource_data_util_(nullptr), + frame_buffer_renderer_(nullptr), debug_layer_enabled_(false), set_auto_breadcrumbs_enablement_(false), + set_breadcrumb_context_enablement_(false), set_page_fault_enablement_(false), loading_trim_state_(false), + fps_info_(nullptr), unique_proxy_window_id_counter_(0), frame_end_marker_count_(0) { if (options_.enable_validation_layer) { @@ -565,14 +566,14 @@ void Dx12ReplayConsumerBase::ApplyBatchedResourceInitInfo( } void Dx12ReplayConsumerBase::ProcessBeginResourceInitCommand(format::HandleId device_id, - uint64_t max_resource_size, + uint64_t total_copy_size, uint64_t max_copy_size) { - GFXRECON_UNREFERENCED_PARAMETER(max_copy_size); - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, max_resource_size); + GFXRECON_UNREFERENCED_PARAMETER(total_copy_size); + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, max_copy_size); auto device = MapObject(device_id); - resource_data_util_ = std::make_unique(device, max_resource_size); + resource_data_util_ = std::make_unique(device, max_copy_size); } void Dx12ReplayConsumerBase::ProcessEndResourceInitCommand(format::HandleId device_id) @@ -683,7 +684,7 @@ void Dx12ReplayConsumerBase::ProcessInitializeMetaCommand(const format::Initiali GFXRECON_ASSERT(SUCCEEDED(hr)); } - if (command_header.initialization_parameters_data_size > 0) + if (command_header.data_size > 0) { if (meta_command_guids_.find(meta_command_obj) != meta_command_guids_.end()) { @@ -691,7 +692,7 @@ void Dx12ReplayConsumerBase::ProcessInitializeMetaCommand(const format::Initiali meta_command_guids_[meta_command_obj], D3D12_META_COMMAND_PARAMETER_STAGE_INITIALIZATION, const_cast(parameters_data), - command_header.initialization_parameters_data_size); + command_header.data_size); } else { @@ -701,8 +702,7 @@ void Dx12ReplayConsumerBase::ProcessInitializeMetaCommand(const format::Initiali if (resource_data_util_ != nullptr) { - resource_data_util_->InitializeMetaCommand( - meta_command_obj, parameters_data, command_header.initialization_parameters_data_size); + resource_data_util_->InitializeMetaCommand(meta_command_obj, parameters_data, command_header.data_size); if (command_header.block_index == command_header.total_number_of_initializemetacommand) { @@ -731,9 +731,9 @@ void Dx12ReplayConsumerBase::ProcessInitializeMetaCommand(const format::Initiali } void Dx12ReplayConsumerBase::ProcessInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) { if (!accel_struct_builder_) { @@ -949,7 +949,11 @@ void* Dx12ReplayConsumerBase::PreProcessExternalObject(uint64_t object_ void* object = nullptr; switch (call_id) { + case format::ApiCallId::ApiCall_IDXGIFactory2_RegisterStereoStatusEvent: + case format::ApiCallId::ApiCall_IDXGIFactory2_RegisterOcclusionStatusEvent: + case format::ApiCallId::ApiCall_IDXGIAdapter3_RegisterHardwareContentProtectionTeardownStatusEvent: case format::ApiCallId::ApiCall_IDXGIAdapter3_RegisterVideoMemoryBudgetChangeNotificationEvent: + case format::ApiCallId::ApiCall_IDXGIFactory7_RegisterAdaptersChangedEvent: object = GetEventObject(object_id, false); break; case format::ApiCallId::ApiCall_IDXGIFactory_MakeWindowAssociation: @@ -966,6 +970,19 @@ void* Dx12ReplayConsumerBase::PreProcessExternalObject(uint64_t object_ // These are pointers to user data for callback functions. Return nullptr for the replay callbacks that // don't expect user data. break; + case format::ApiCallId::ApiCall_ID3D12Device_OpenSharedHandle: + { + auto entry = shared_handles_.find(object_id); + if (entry != shared_handles_.end()) + { + object = entry->second; + } + else + { + GFXRECON_LOG_ERROR("%s: Unable to retrieve NTHandle.", call_name); + } + break; + } default: GFXRECON_LOG_WARNING("Skipping object handle mapping for unsupported external object type processed by %s", call_name); @@ -975,19 +992,23 @@ void* Dx12ReplayConsumerBase::PreProcessExternalObject(uint64_t object_ } void Dx12ReplayConsumerBase::PostProcessExternalObject( - HRESULT replay_result, void* object, uint64_t* object_id, format::ApiCallId call_id, const char* call_name) + HRESULT replay_result, void** object, uint64_t* object_id, format::ApiCallId call_id, const char* call_name) { - GFXRECON_UNREFERENCED_PARAMETER(replay_result); - GFXRECON_UNREFERENCED_PARAMETER(object_id); - GFXRECON_UNREFERENCED_PARAMETER(object); - switch (call_id) { case format::ApiCallId::ApiCall_IDXGISurface1_GetDC: case format::ApiCallId::ApiCall_IDXGIFactory_GetWindowAssociation: case format::ApiCallId::ApiCall_IDXGISwapChain1_GetHwnd: break; - + case format::ApiCallId::ApiCall_IDXGIResource_GetSharedHandle: + case format::ApiCallId::ApiCall_IDXGIResource1_CreateSharedHandle: + case format::ApiCallId::ApiCall_ID3D12Device_CreateSharedHandle: + case format::ApiCallId::ApiCall_ID3D12Device_OpenSharedHandleByName: + if (SUCCEEDED(replay_result) && (object_id != nullptr) && (object != nullptr)) + { + shared_handles_.insert(std::make_pair(*object_id, *object)); + } + break; default: GFXRECON_LOG_WARNING("Skipping object handle mapping for unsupported external object type processed by %s", call_name); @@ -1104,12 +1125,14 @@ HRESULT Dx12ReplayConsumerBase::OverrideCreateSwapChainForHwnd( DxObjectInfo* restrict_to_output_info, HandlePointerDecoder* swapchain) { + GFXRECON_ASSERT((desc != nullptr) && (full_screen_desc != nullptr)); + return CreateSwapChainForHwnd(replay_object_info, original_result, device_info, hwnd_id, - desc, - full_screen_desc, + desc->GetPointer(), + full_screen_desc->GetPointer(), restrict_to_output_info, swapchain); } @@ -1205,10 +1228,35 @@ Dx12ReplayConsumerBase::OverrideCreateSwapChainForCoreWindow(DxObjectInfo* repla DxObjectInfo* restrict_to_output_info, HandlePointerDecoder* swapchain) { + GFXRECON_ASSERT(desc != nullptr); + GFXRECON_UNREFERENCED_PARAMETER(window_info); - return CreateSwapChainForHwnd( - replay_object_info, original_result, device_info, 0, desc, nullptr, restrict_to_output_info, swapchain); + auto desc_pointer = desc->GetPointer(); + + // Depending on creation parameters, the original application may have performed multi-plane rendering to a single + // surface with multiple swapchains. The HWND swapchain can't support this behavior, so related creation parameters + // must be cleared before swapchain creation. Replay will also have to create a separate window for each swapchain, + // so content that was composited by the original application will appear in different windows during replay. + if ((desc_pointer->AlphaMode == DXGI_ALPHA_MODE_PREMULTIPLIED) || + (desc_pointer->AlphaMode == DXGI_ALPHA_MODE_STRAIGHT)) + { + desc_pointer->AlphaMode = DXGI_ALPHA_MODE_UNSPECIFIED; + } + + if ((desc_pointer->Flags & DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER) == DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER) + { + desc_pointer->Flags &= ~DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER; + } + + return CreateSwapChainForHwnd(replay_object_info, + original_result, + device_info, + GetUniqueProxyWindowId(), + desc_pointer, + nullptr, + restrict_to_output_info, + swapchain); } HRESULT @@ -1219,8 +1267,28 @@ Dx12ReplayConsumerBase::OverrideCreateSwapChainForComposition(DxObjectInfo* repl DxObjectInfo* restrict_to_output_info, HandlePointerDecoder* swapchain) { - return CreateSwapChainForHwnd( - replay_object_info, original_result, device_info, 0, desc, nullptr, restrict_to_output_info, swapchain); + GFXRECON_ASSERT(desc != nullptr); + + auto desc_pointer = desc->GetPointer(); + + // Depending on creation parameters, the original application may have combined the output of multiple swapchains + // via composition. The HWND swapchain can't support this behavior, so related creation parameters must be cleared + // before swapchain creation. Replay will also have to create a separate window for each swapchain, so content that + // was composited by the original application will appear in different windows during replay. + if ((desc_pointer->AlphaMode == DXGI_ALPHA_MODE_PREMULTIPLIED) || + (desc_pointer->AlphaMode == DXGI_ALPHA_MODE_STRAIGHT)) + { + desc_pointer->AlphaMode = DXGI_ALPHA_MODE_UNSPECIFIED; + } + + return CreateSwapChainForHwnd(replay_object_info, + original_result, + device_info, + GetUniqueProxyWindowId(), + desc_pointer, + nullptr, + restrict_to_output_info, + swapchain); } HRESULT Dx12ReplayConsumerBase::OverrideEnumAdapterByLuid(DxObjectInfo* replay_object_info, @@ -1483,8 +1551,7 @@ void Dx12ReplayConsumerBase::DetectAdapters() void Dx12ReplayConsumerBase::AddAdapterLuid(const LUID& capture_luid, const LUID& replay_luid) { - auto key = ((static_cast(capture_luid.HighPart) << 32) & 0xFFFFFFFF00000000) | - (static_cast(capture_luid.LowPart) & 0xFFFFFFFF); + auto key = pack_luid(capture_luid); if (key != 0) { @@ -1494,8 +1561,7 @@ void Dx12ReplayConsumerBase::AddAdapterLuid(const LUID& capture_luid, const LUID LUID Dx12ReplayConsumerBase::GetAdapterLuid(const LUID& capture_luid) { - auto key = ((static_cast(capture_luid.HighPart) << 32) & 0xFFFFFFFF00000000) | - (static_cast(capture_luid.LowPart) & 0xFFFFFFFF); + auto key = pack_luid(capture_luid); auto value = adapter_luid_map_.find(key); if (value != adapter_luid_map_.end()) @@ -2446,7 +2512,7 @@ void Dx12ReplayConsumerBase::OverrideResourceUnmap(DxObjectInfo* GFXRECON_ASSERT(memory_info.count > 0); --(memory_info.count); - auto& map_entry = mapped_memory_.find(memory_info.memory_id); + auto map_entry = mapped_memory_.find(memory_info.memory_id); if (map_entry != mapped_memory_.end()) { GFXRECON_ASSERT(map_entry->second.ref_count > 0); @@ -2984,31 +3050,29 @@ void* Dx12ReplayConsumerBase::OverrideGetShaderIdentifier(DxObjectInfo* return new_shader_identifier_ptr; } -HRESULT Dx12ReplayConsumerBase::CreateSwapChainForHwnd( - DxObjectInfo* replay_object_info, - HRESULT original_result, - DxObjectInfo* device_info, - uint64_t hwnd_id, - StructPointerDecoder* desc, - StructPointerDecoder* full_screen_desc, - DxObjectInfo* restrict_to_output_info, - HandlePointerDecoder* swapchain) +HRESULT Dx12ReplayConsumerBase::CreateSwapChainForHwnd(DxObjectInfo* replay_object_info, + HRESULT original_result, + DxObjectInfo* device_info, + uint64_t hwnd_id, + DXGI_SWAP_CHAIN_DESC1* desc, + DXGI_SWAP_CHAIN_FULLSCREEN_DESC* full_screen_desc, + DxObjectInfo* restrict_to_output_info, + HandlePointerDecoder* swapchain) { - assert((device_info != nullptr) && (device_info->object != nullptr) && (desc != nullptr)); + GFXRECON_ASSERT((device_info != nullptr) && (device_info->object != nullptr)); - auto desc_pointer = desc->GetPointer(); HRESULT result = E_FAIL; Window* window = nullptr; auto wsi_context = application_ ? application_->GetWsiContext("", true) : nullptr; auto window_factory = wsi_context ? wsi_context->GetWindowFactory() : nullptr; - if (window_factory != nullptr && desc_pointer != nullptr) + if ((window_factory != nullptr) && (desc != nullptr)) { - ReplaceWindowedResolution(desc_pointer->Width, desc_pointer->Height); + ReplaceWindowedResolution(desc->Width, desc->Height); window = window_factory->Create(options_.window_topleft_x, options_.window_topleft_y, - desc_pointer->Width, - desc_pointer->Height, + desc->Width, + desc->Height, options_.force_windowed || options_.force_windowed_origin); } @@ -3030,25 +3094,18 @@ HRESULT Dx12ReplayConsumerBase::CreateSwapChainForHwnd( restrict_to_output = static_cast(restrict_to_output_info->object); } - DXGI_SWAP_CHAIN_FULLSCREEN_DESC* full_screen_desc_ptr = nullptr; - if ((full_screen_desc != nullptr) && (options_.force_windowed != true) && - (options_.force_windowed_origin != true)) + if (options_.force_windowed || options_.force_windowed_origin) { - full_screen_desc_ptr = full_screen_desc->GetPointer(); + full_screen_desc = nullptr; } result = replay_object->CreateSwapChainForHwnd( - device, hwnd, desc_pointer, full_screen_desc_ptr, restrict_to_output, swapchain->GetHandlePointer()); + device, hwnd, desc, full_screen_desc, restrict_to_output, swapchain->GetHandlePointer()); if (SUCCEEDED(result)) { auto object_info = static_cast(swapchain->GetConsumerData(0)); - SetSwapchainInfo(object_info, - window, - hwnd_id, - hwnd, - desc_pointer->BufferCount, - device, - (full_screen_desc_ptr == nullptr)); + SetSwapchainInfo( + object_info, window, hwnd_id, hwnd, desc->BufferCount, device, (full_screen_desc == nullptr)); } else { @@ -3237,12 +3294,12 @@ void Dx12ReplayConsumerBase::DestroyObjectExtraInfo(DxObjectInfo* info, bool rel for (const auto& entry : resource_info->mapped_memory_info) { - auto& mapped_info = entry.second; - auto& entry = mapped_memory_.find(mapped_info.memory_id); - if (entry != mapped_memory_.end()) + auto& mapped_info = entry.second; + auto mapped_memory_it = mapped_memory_.find(mapped_info.memory_id); + if (mapped_memory_it != mapped_memory_.end()) { - entry->second.ref_count -= mapped_info.count; - if (entry->second.ref_count == 0) + mapped_memory_it->second.ref_count -= mapped_info.count; + if (mapped_memory_it->second.ref_count == 0) { mapped_memory_.erase(mapped_info.memory_id); } @@ -4340,6 +4397,46 @@ HRESULT Dx12ReplayConsumerBase::OverrideCreateRootSignature(DxObjectInfo* return replay_result; } +HRESULT Dx12ReplayConsumerBase::OverrideOpenSharedHandle(DxObjectInfo* device_object_info, + HRESULT original_result, + uint64_t NTHandle, + Decoded_GUID riid, + HandlePointerDecoder* ppvObj) +{ + GFXRECON_UNREFERENCED_PARAMETER(original_result); + + auto device = static_cast(device_object_info->object); + auto in_NTHandle = static_cast(PreProcessExternalObject( + NTHandle, format::ApiCallId::ApiCall_ID3D12Device_OpenSharedHandle, "ID3D12Device_OpenSharedHandle")); + auto& riid_value = *riid.decoded_value; + auto out_p_ppvObj = ppvObj->GetPointer(); + auto out_hp_ppvObj = ppvObj->GetHandlePointer(); + auto replay_result = device->OpenSharedHandle(in_NTHandle, riid_value, out_hp_ppvObj); + + if (SUCCEEDED(replay_result) && !ppvObj->IsNull()) + { + if (IsEqualIID(riid_value, __uuidof(ID3D12Resource)) || IsEqualIID(riid_value, __uuidof(ID3D12Resource1)) || + IsEqualIID(riid_value, __uuidof(ID3D12Resource2))) + { + // For standard resource creation, the resource state would be initilized based on the InitialState + // parameter. For this case, we don't know what the initial state was so initilize to the common state. + InitialResourceExtraInfo(ppvObj, D3D12_RESOURCE_STATE_COMMON, false); + } + else if (IsEqualIID(riid_value, __uuidof(ID3D12Fence)) || IsEqualIID(riid_value, __uuidof(ID3D12Fence1))) + { + auto fence_info = std::make_unique(); + + // For ID3D12Device::CreateFence, this would be initialized with the InitialValue parameter. For this case, + // we don't know what the initial value was so initialize to zero. + fence_info->last_signaled_value = 0; + + SetExtraInfo(ppvObj, std::move(fence_info)); + } + } + + return replay_result; +} + HRESULT Dx12ReplayConsumerBase::OverrideCreateStateObject(DxObjectInfo* device5_object_info, HRESULT original_result, @@ -4899,7 +4996,7 @@ void Dx12ReplayConsumerBase::MapMetaCommandParameters(ID3D12Device5* while (data_offset < parameters_data_sizeinbytes) { parameters_data += data_offset; - for each (auto desc in parameter_descs) + for (auto desc : parameter_descs) { switch (desc.Type) { diff --git a/third_party/gfxreconstruct/framework/decode/dx12_replay_consumer_base.h b/third_party/gfxreconstruct/framework/decode/dx12_replay_consumer_base.h index 32003f6f6..3ee046c2f 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_replay_consumer_base.h +++ b/third_party/gfxreconstruct/framework/decode/dx12_replay_consumer_base.h @@ -64,7 +64,7 @@ class Dx12ReplayConsumerBase : public Dx12Consumer virtual ~Dx12ReplayConsumerBase() override; - virtual void Process_ExeFileInfo(util::filepath::FileInfo& info_record) + virtual void Process_ExeFileInfo(const util::filepath::FileInfo& info_record) { gfxrecon::util::filepath::CheckReplayerName(info_record.AppName); } @@ -94,9 +94,9 @@ class Dx12ReplayConsumerBase : public Dx12Consumer virtual void ProcessCreateHeapAllocationCommand(uint64_t allocation_id, uint64_t allocation_size) override; - virtual void ProcessBeginResourceInitCommand(format::HandleId device_id, - uint64_t max_resource_size, - uint64_t max_copy_size) override; + void ProcessBeginResourceInitCommand(format::HandleId device_id, + uint64_t total_copy_size, + uint64_t max_copy_size) override; virtual void ProcessEndResourceInitCommand(format::HandleId device_id) override; @@ -110,9 +110,9 @@ class Dx12ReplayConsumerBase : public Dx12Consumer const uint8_t* data) override; virtual void ProcessInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) override; + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) override; virtual void ProcessInitializeMetaCommand(const format::InitializeMetaCommand& command_header, const uint8_t* parameters_data) override; @@ -443,7 +443,7 @@ class Dx12ReplayConsumerBase : public Dx12Consumer void* PreProcessExternalObject(uint64_t object_id, format::ApiCallId call_id, const char* call_name); void PostProcessExternalObject( - HRESULT replay_result, void* object, uint64_t* object_id, format::ApiCallId call_id, const char* call_name); + HRESULT replay_result, void** object, uint64_t* object_id, format::ApiCallId call_id, const char* call_name); ULONG OverrideAddRef(DxObjectInfo* replay_object_info, ULONG original_result); @@ -965,6 +965,12 @@ class Dx12ReplayConsumerBase : public Dx12Consumer Decoded_GUID riid, HandlePointerDecoder* root_signature_decoder); + HRESULT OverrideOpenSharedHandle(DxObjectInfo* device_object_info, + HRESULT original_result, + uint64_t NTHandle, + Decoded_GUID riid, + HandlePointerDecoder* ppvObj); + HRESULT OverrideCreateStateObject(DxObjectInfo* device5_object_info, HRESULT original_result, StructPointerDecoder* desc_decoder, @@ -1182,15 +1188,20 @@ class Dx12ReplayConsumerBase : public Dx12Consumer void RaiseFatalError(const char* message) const; + uint64_t GetUniqueProxyWindowId() + { + return ++unique_proxy_window_id_counter_; + } + HRESULT - CreateSwapChainForHwnd(DxObjectInfo* replay_object_info, - HRESULT original_result, - DxObjectInfo* device_info, - uint64_t hwnd_id, - StructPointerDecoder* desc, - StructPointerDecoder* full_screen_desc, - DxObjectInfo* restrict_to_output_info, - HandlePointerDecoder* swapchain); + CreateSwapChainForHwnd(DxObjectInfo* replay_object_info, + HRESULT original_result, + DxObjectInfo* device_info, + uint64_t hwnd_id, + DXGI_SWAP_CHAIN_DESC1* desc, + DXGI_SWAP_CHAIN_FULLSCREEN_DESC* full_screen_desc, + DxObjectInfo* restrict_to_output_info, + HandlePointerDecoder* swapchain); void SetSwapchainInfo(DxObjectInfo* info, Window* window, @@ -1278,6 +1289,7 @@ class Dx12ReplayConsumerBase : public Dx12Consumer std::unordered_map heap_allocations_; std::unordered_map event_objects_; std::unordered_map adapter_luid_map_; + std::unordered_map shared_handles_; std::function fatal_error_handler_; Dx12DescriptorMap descriptor_map_; graphics::Dx12GpuVaMap gpu_va_map_; @@ -1300,6 +1312,7 @@ class Dx12ReplayConsumerBase : public Dx12Consumer std::string screenshot_file_prefix_; util::ScreenshotFormat screenshot_format_; std::unique_ptr screenshot_handler_; + uint64_t unique_proxy_window_id_counter_; std::unordered_map resource_init_infos_; uint64_t frame_end_marker_count_; std::unordered_map meta_command_guids_; diff --git a/third_party/gfxreconstruct/framework/decode/dx12_resource_value_mapper.cpp b/third_party/gfxreconstruct/framework/decode/dx12_resource_value_mapper.cpp index 3cad0f3f3..f3b3300de 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_resource_value_mapper.cpp +++ b/third_party/gfxreconstruct/framework/decode/dx12_resource_value_mapper.cpp @@ -501,6 +501,7 @@ void Dx12ResourceValueMapper::PostProcessExecuteIndirect(DxObjectInfo* command_l command_signature_extra_info->byte_stride, state_object_extra_info); } + SourceCopyResources(command_list_extra_info->resource_copies, command_list_extra_info->resource_value_info_map); } } @@ -579,6 +580,8 @@ void Dx12ResourceValueMapper::PostProcessBuildRaytracingAccelerationStructure( GFXRECON_LOG_ERROR("Unknown BuildRaytracingAccelerationStructure DescsLayout: %d", static_cast(build_desc->Inputs.DescsLayout)); } + SourceCopyResources(command_list_extra_info->resource_copies, + command_list_extra_info->resource_value_info_map); } else { @@ -793,6 +796,7 @@ void Dx12ResourceValueMapper::PostProcessDispatchRays( state_object_extra_info = GetExtraInfo(command_list_extra_info->active_state_object); } GetDispatchRaysResourceValues(command_list_extra_info->resource_value_info_map, state_object_extra_info, *desc); + SourceCopyResources(command_list_extra_info->resource_copies, command_list_extra_info->resource_value_info_map); } void Dx12ResourceValueMapper::PostProcessSetPipelineState1(DxObjectInfo* command_list4_object_info, @@ -912,6 +916,17 @@ void Dx12ResourceValueMapper::RemoveGpuDescriptorHeap(uint64_t capture_gpu_start } } +void Dx12ResourceValueMapper::SourceCopyResources(std::vector& copy_infos, + ResourceValueInfoMap& resource_value_info_map) +{ + const auto copies_size = copy_infos.size(); + for (size_t i = 0; i < copies_size; ++i) + { + auto& copy_info = copy_infos[copies_size - i - 1]; + CopyResourceValues(copy_info, resource_value_info_map); + } +} + void Dx12ResourceValueMapper::CopyResourceValues(const ResourceCopyInfo& copy_info, ResourceValueInfoMap& resource_value_info_map) { @@ -919,7 +934,10 @@ void Dx12ResourceValueMapper::CopyResourceValues(const ResourceCopyInfo& copy_in auto dst_iter = resource_value_info_map.find(copy_info.dst_resource_object_info); if (dst_iter != resource_value_info_map.end()) { - GFXRECON_ASSERT(!dst_iter->second.empty()); + if (dst_iter->second.empty()) + { + return; + } auto& dst_values = dst_iter->second; auto& src_values = resource_value_info_map[copy_info.src_resource_object_info]; @@ -1043,16 +1061,11 @@ void Dx12ResourceValueMapper::ProcessResourceMappings(ProcessResourceMappingsArg auto resource_value_info_map = std::move(args.resource_value_info_map); args.resource_value_info_map.clear(); - const auto copies_size = args.resource_copies.size(); std::map resource_data_to_revert; while (!resource_value_info_map.empty()) { // Process resource copies so values are mapped in the source resource. - for (size_t i = 0; i < copies_size; ++i) - { - auto& copy_info = args.resource_copies[copies_size - i - 1]; - CopyResourceValues(copy_info, resource_value_info_map); - } + SourceCopyResources(args.resource_copies, resource_value_info_map); // Apply the resource value mappings to the resources on the GPU. ResourceValueInfoMap indirect_values_map; @@ -1063,6 +1076,7 @@ void Dx12ResourceValueMapper::ProcessResourceMappings(ProcessResourceMappingsArg } // Track mapped values that were copied to other resources. + const auto copies_size = args.resource_copies.size(); for (size_t i = 0; i < copies_size; ++i) { auto& copy_info = args.resource_copies[i]; diff --git a/third_party/gfxreconstruct/framework/decode/dx12_resource_value_mapper.h b/third_party/gfxreconstruct/framework/decode/dx12_resource_value_mapper.h index 771f73a77..2d97556e3 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_resource_value_mapper.h +++ b/third_party/gfxreconstruct/framework/decode/dx12_resource_value_mapper.h @@ -174,6 +174,8 @@ class Dx12ResourceValueMapper void ProcessResourceMappings(ProcessResourceMappingsArgs args); + void SourceCopyResources(std::vector& copy_infos, ResourceValueInfoMap& resource_value_info_map); + bool MapValue(const ResourceValueInfo& value_info, std::vector& result_data, format::HandleId resource_id, diff --git a/third_party/gfxreconstruct/framework/decode/dx12_stats_consumer.h b/third_party/gfxreconstruct/framework/decode/dx12_stats_consumer.h index e007b9c41..85e846f27 100644 --- a/third_party/gfxreconstruct/framework/decode/dx12_stats_consumer.h +++ b/third_party/gfxreconstruct/framework/decode/dx12_stats_consumer.h @@ -122,7 +122,7 @@ class Dx12StatsConsumer : public Dx12Consumer InsertAdapter(new_adapter, gfxr_cmd_adapters_); format::HandleId object_id = graphics::dx12::ExtractAdapterCaptureId(new_adapter.extra_info); - const int64_t luid = (new_adapter.LuidHighPart << 31) | new_adapter.LuidLowPart; + const int64_t luid = pack_luid(new_adapter); adapter_submission_mapping_.adapter_to_luid_map[object_id] = luid; } @@ -256,9 +256,9 @@ class Dx12StatsConsumer : public Dx12Consumer } virtual void ProcessInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) { dxr_workload_ = true; } @@ -351,7 +351,7 @@ class Dx12StatsConsumer : public Dx12Consumer bool valid_adapter = false; for (const auto& adapter : adapters) { - const int64_t adapter_luid = (adapter.LuidHighPart << 31) | adapter.LuidLowPart; + const int64_t adapter_luid = pack_luid(adapter); if (workload_luid == adapter_luid) { valid_adapter = true; diff --git a/third_party/gfxreconstruct/framework/decode/file_processor.cpp b/third_party/gfxreconstruct/framework/decode/file_processor.cpp index d0b0a8045..0a0e321d7 100644 --- a/third_party/gfxreconstruct/framework/decode/file_processor.cpp +++ b/third_party/gfxreconstruct/framework/decode/file_processor.cpp @@ -24,18 +24,9 @@ #include "decode/file_processor.h" -#include "decode/decode_allocator.h" -#include "format/format.h" #include "format/format_util.h" -#include "util/compressor.h" -#include "util/file_path.h" #include "util/logging.h" -#include "util/platform.h" -#include -#include -#include -#include #include GFXRECON_BEGIN_NAMESPACE(gfxrecon) @@ -46,8 +37,9 @@ const uint32_t kFirstFrame = 0; FileProcessor::FileProcessor() : current_frame_number_(kFirstFrame), error_state_(kErrorInvalidFileDescriptor), bytes_read_(0), - annotation_handler_(nullptr), compressor_(nullptr), block_index_(0), api_call_index_(0), block_limit_(0), - capture_uses_frame_markers_(false), first_frame_(kFirstFrame + 1), loading_trimmed_capture_state_(false) + annotation_handler_(nullptr), compressor_(nullptr), block_index_(0), block_limit_(0), + pending_capture_uses_frame_markers_(false), capture_uses_frame_markers_(false), first_frame_(kFirstFrame + 1), + loading_trimmed_capture_state_(false), pool_(util::HeapBufferPool::Create()) {} FileProcessor::FileProcessor(uint64_t block_limit) : FileProcessor() @@ -57,17 +49,6 @@ FileProcessor::FileProcessor(uint64_t block_limit) : FileProcessor() FileProcessor::~FileProcessor() { - if (nullptr != compressor_) - { - delete compressor_; - compressor_ = nullptr; - } - - for (auto& file : active_files_) - { - util::platform::FileClose(file.second.fd); - } - DecodeAllocator::DestroyInstance(); } @@ -81,11 +62,10 @@ void FileProcessor::WaitDecodersIdle() bool FileProcessor::Initialize(const std::string& filename) { - bool success = OpenFile(filename); + bool success = SetActiveFile(filename, true); if (success) { - success = SetActiveFile(filename, true); success = success && ProcessFileHeader(); } else @@ -94,10 +74,21 @@ bool FileProcessor::Initialize(const std::string& filename) error_state_ = kErrorOpeningFile; } - // Find absolute path of capture file if (success) { + // Find absolute path of capture file absolute_path_ = util::filepath::GetBasedir(filename); + + // Initialize block parser, with the compressor created during file header processing. + auto err_handler = BlockParser::ErrorHandler{ [this](BlockIOError err, const char* message) { + HandleBlockReadError(err, message); + } }; + block_parser_ = std::make_unique(err_handler, pool_, compressor_.get()); + success = block_parser_.get() != nullptr; + if (!success) + { + error_state_ = kErrorOpeningFile; + } } return success; @@ -113,51 +104,34 @@ std::string FileProcessor::ApplyAbsolutePath(const std::string& file) return absolute_path_ + file; } -bool FileProcessor::OpenFile(const std::string& filename) +bool FileProcessor::ProcessNextFrame() +{ + auto block_processor = [this]() { return this->ProcessBlocksOneFrame(); }; + return DoProcessNextFrame(block_processor); +} + +bool FileProcessor::ProcessBlocksOneFrame() { - if (active_files_.find(filename) == active_files_.end()) + for (ApiDecoder* decoder : decoders_) { - FILE* fd; - int result = util::platform::FileOpen(&fd, filename.c_str(), "rb"); - if (result || fd == nullptr) - { - GFXRECON_LOG_ERROR("Failed to open file %s", filename.c_str()); - error_state_ = kErrorOpeningFile; - return false; - } - else - { - active_files_.emplace(std::piecewise_construct, std::forward_as_tuple(filename), std::forward_as_tuple(fd)); - error_state_ = kErrorNone; - } + decoder->SetCurrentFrameNumber(current_frame_number_); } - - return true; + block_parser_->SetDecompressionPolicy(BlockParser::DecompressionPolicy::kAlways); + return ProcessBlocks(); } -bool FileProcessor::ProcessNextFrame() +bool FileProcessor::DoProcessNextFrame(const std::function& block_processor) { bool success = IsFileValid(); if (success) { - for (ApiDecoder* decoder : decoders_) - { - decoder->SetCurrentFrameNumber(current_frame_number_); - } - success = ProcessBlocks(); + + success = block_processor(); } else { - // If not EOF, determine reason for invalid state. - if (GetFileDescriptor() == nullptr) - { - error_state_ = kErrorInvalidFileDescriptor; - } - else if (ferror(GetFileDescriptor())) - { - error_state_ = kErrorReadingFile; - } + error_state_ = CheckFileStatus(); } return success; @@ -221,20 +195,26 @@ bool FileProcessor::ContinueDecoding() bool FileProcessor::ProcessFileHeader() { - bool success = false; - format::FileHeader file_header{}; + bool success = false; + file_header_ = format::FileHeader(); - ActiveFiles& active_file = active_files_[file_stack_.front().filename]; + assert(file_stack_.front().active_file); - if (ReadBytes(&file_header, sizeof(file_header))) + if (ReadBytes(&file_header_, sizeof(file_header_))) { - success = format::ValidateFileHeader(file_header); + success = format::ValidateFileHeader(file_header_); if (success) { - file_options_.resize(file_header.num_options); + auto file_version = GFXRECON_MAKE_FILE_VERSION(file_header_.major_version, file_header_.minor_version); + if (file_version >= GFXRECON_EXPLICIT_FRAME_MARKER_FILE_VERSION) + { + capture_uses_frame_markers_ = true; + } - size_t option_data_size = file_header.num_options * sizeof(format::FileOptionPair); + file_options_.resize(file_header_.num_options); + + size_t option_data_size = file_header_.num_options * sizeof(format::FileOptionPair); success = ReadBytes(file_options_.data(), option_data_size); @@ -253,7 +233,7 @@ bool FileProcessor::ProcessFileHeader() } } - compressor_ = format::CreateCompressor(enabled_options_.compression_type); + compressor_.reset(format::CreateCompressor(enabled_options_.compression_type)); if ((compressor_ == nullptr) && (enabled_options_.compression_type != format::CompressionType::kNone)) { @@ -301,8 +281,15 @@ void FileProcessor::DecrementRemainingCommands() bool FileProcessor::ProcessBlocks() { - format::BlockHeader block_header; - bool success = true; + BlockBuffer block_buffer; + bool success = true; + + BlockParser& block_parser = GetBlockParser(); + // NOTE: To test deferred decompression operation uncomment next line + // block_parser.SetDecompressionPolicy(BlockParser::DecompressionPolicy::kQueueOptimized); + + ProcessVisitor process_visitor(*this); + DispatchVisitor dispatch_visitor(decoders_, annotation_handler_); while (success) { @@ -311,7 +298,7 @@ bool FileProcessor::ProcessBlocks() if (success) { - success = ReadBlockHeader(&block_header); + success = GetBlockBuffer(block_parser, block_buffer); for (auto decoder : decoders_) { @@ -320,163 +307,49 @@ bool FileProcessor::ProcessBlocks() if (success) { - if (format::RemoveCompressedBlockBit(block_header.type) == format::BlockType::kFunctionCallBlock) - { - format::ApiCallId api_call_id = format::ApiCallId::ApiCall_Unknown; - - success = ReadBytes(&api_call_id, sizeof(api_call_id)); - - if (success) - { - bool should_break = false; - success = ProcessFunctionCall(block_header, api_call_id, should_break); - - if (should_break) - { - break; - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read function call block header"); - } - } - else if (format::RemoveCompressedBlockBit(block_header.type) == format::BlockType::kMethodCallBlock) - { - format::ApiCallId api_call_id = format::ApiCallId::ApiCall_Unknown; - - success = ReadBytes(&api_call_id, sizeof(api_call_id)); - - if (success) - { - bool should_break = false; - success = ProcessMethodCall(block_header, api_call_id, should_break); - - if (should_break) - { - break; - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read function call block header"); - } - } - else if (format::RemoveCompressedBlockBit(block_header.type) == format::BlockType::kMetaDataBlock) + if (SkipBlockProcessing()) { - format::MetaDataId meta_data_id = format::MakeMetaDataId( - format::ApiFamilyId::ApiFamily_None, format::MetaDataType::kUnknownMetaDataType); - - success = ReadBytes(&meta_data_id, sizeof(meta_data_id)); - - if (success) - { - success = ProcessMetaData(block_header, meta_data_id); - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read meta-data block header"); - } + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, block_buffer.Header().size); } - else if (block_header.type == format::BlockType::kFrameMarkerBlock) + else { - format::MarkerType marker_type = format::MarkerType::kUnknownMarker; - uint64_t frame_number = 0; + block_parser.SetBlockIndex(block_index_); + block_parser.SetFrameNumber(current_frame_number_); + // NOTE: upon successful parsing, the block_buffer block data has been moved to the + // parsed_block, though the block header is still valid. + ParsedBlock parsed_block = block_parser.ParseBlock(block_buffer); - success = ReadBytes(&marker_type, sizeof(marker_type)); - - if (success) + // NOTE: Visitable is either Ready or DeferredDecompression, + // Invalid, Unknown, and Skip are not Visitable + if (parsed_block.IsVisitable()) { - bool should_break = false; - success = ProcessFrameMarker(block_header, marker_type, should_break); - - if (should_break) + // Deferred decompress failure implies a late uncovering of an invalid block. + success = parsed_block.Decompress(block_parser); // Safe without testing block state. + if (success) { - break; + std::visit(process_visitor, parsed_block.GetArgs()); + success = process_visitor.IsSuccess(); + if (success) + { + std::visit(dispatch_visitor, parsed_block.GetArgs()); + } } } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read frame marker header"); - } - } - else if (block_header.type == format::BlockType::kStateMarkerBlock) - { - format::MarkerType marker_type = format::MarkerType::kUnknownMarker; - uint64_t frame_number = 0; - - success = ReadBytes(&marker_type, sizeof(marker_type)); - - if (success) - { - success = ProcessStateMarker(block_header, marker_type); - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read state marker header"); - } - } - else if (block_header.type == format::BlockType::kAnnotation) - { - if (annotation_handler_ != nullptr) - { - format::AnnotationType annotation_type = format::AnnotationType::kUnknown; - success = ReadBytes(&annotation_type, sizeof(annotation_type)); + // NOTE: Warnings for unknown/invalid blocks are handled in the BlockParser - if (success) - { - success = ProcessAnnotation(block_header, annotation_type); - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read annotation block header"); - } - } - else + if (process_visitor.IsFrameDelimiter()) { - // If there is no annotation handler to process the annotation, we can skip the annotation - // block. - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, block_header.size); - success = SkipBytes(static_cast(block_header.size)); + // The ProcessVisitor (pre-dispatch) is not the right place to update the frame state, so do it + // here + UpdateEndFrameState(); + break; } } - else - { - // Unrecognized block type. - GFXRECON_LOG_WARNING("Skipping unrecognized file block with type %u (frame %u block %" PRIu64 ")", - block_header.type, - current_frame_number_, - block_index_); - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, block_header.size); - success = SkipBytes(static_cast(block_header.size)); - } } else { - if (!feof(GetFileDescriptor())) - { - // No data has been read for the current block, so we don't use 'HandleBlockReadError' here, as it - // assumes that the block header has been successfully read and will print an incomplete block at - // end of file warning when the file is at EOF without an error. For this case (the normal EOF case) - // we print nothing at EOF, or print an error message and set the error code directly when not at - // EOF. - GFXRECON_LOG_ERROR("Failed to read block header (frame %u block %" PRIu64 ")", - current_frame_number_, - block_index_); - error_state_ = kErrorReadingBlockHeader; - } - else - { - assert(!file_stack_.empty()); - - ActiveFileContext& current_file = GetCurrentFile(); - if (current_file.execute_till_eof) - { - file_stack_.pop_back(); - success = !file_stack_.empty(); - } - } + success = HandleBlockEof("read", true); } } ++block_index_; @@ -487,69 +360,45 @@ bool FileProcessor::ProcessBlocks() return success; } -bool FileProcessor::ReadBlockHeader(format::BlockHeader* block_header) +// While ReadBlockBuffer both reads the block header and the block body, checks for +// the correct sizing of the block payload are done by the caller +bool FileProcessor::ReadBlockBuffer(BlockParser& parser, BlockBuffer& block_buffer) { - assert(block_header != nullptr); - // GOOGLE: Store info about block offset before any bytes are read StoreBlockInfo(); - bool success = false; - - if (ReadBytes(block_header, sizeof(*block_header))) + bool success = true; + BlockIOError status = parser.ReadBlockBuffer(GetCurrentFile().active_file, block_buffer); + if (status == kErrorNone) { - success = true; + bytes_read_ += block_buffer.Size(); } - - return success; -} - -bool FileProcessor::ReadParameterBuffer(size_t buffer_size) -{ - if (buffer_size > parameter_buffer_.size()) + else { - parameter_buffer_.resize(buffer_size); + // Caller handles end of file on block boundaries + if (status != kEndOfFile) + { + HandleBlockReadError(status, "Failed to read next block"); + } + success = false; } - - return ReadBytes(parameter_buffer_.data(), buffer_size); + return success; } -bool FileProcessor::ReadCompressedParameterBuffer(size_t compressed_buffer_size, - size_t expected_uncompressed_size, - size_t* uncompressed_buffer_size) +// Preloading overloads this to get preloaded blocks +bool FileProcessor::GetBlockBuffer(BlockParser& parser, BlockBuffer& block_buffer) { - // This should only be null if initialization failed. - assert(compressor_ != nullptr); - - if (compressed_buffer_size > compressed_parameter_buffer_.size()) - { - compressed_parameter_buffer_.resize(compressed_buffer_size); - } - - if (ReadBytes(compressed_parameter_buffer_.data(), compressed_buffer_size)) - { - if (parameter_buffer_.size() < expected_uncompressed_size) - { - parameter_buffer_.resize(expected_uncompressed_size); - } - - size_t uncompressed_size = compressor_->Decompress( - compressed_buffer_size, compressed_parameter_buffer_, expected_uncompressed_size, ¶meter_buffer_); - if ((0 < uncompressed_size) && (uncompressed_size == expected_uncompressed_size)) - { - *uncompressed_buffer_size = uncompressed_size; - return true; - } - } - return false; + return ReadBlockBuffer(parser, block_buffer); } bool FileProcessor::ReadBytes(void* buffer, size_t buffer_size) { - auto file_entry = active_files_.find(file_stack_.back().filename); - assert(file_entry != active_files_.end()); + // File entry is non-const to allow read bytes to be non-const (i.e. potentially reflect a stateful operation) + // without forcing use of mutability + const auto& active_file = file_stack_.back().active_file; + GFXRECON_ASSERT(active_file); - if (util::platform::FileRead(buffer, buffer_size, file_entry->second.fd)) + if (active_file->ReadBytes(buffer, buffer_size)) { bytes_read_ += buffer_size; return true; @@ -557,28 +406,30 @@ bool FileProcessor::ReadBytes(void* buffer, size_t buffer_size) return false; } -bool FileProcessor::SkipBytes(size_t skip_size) +util::DataSpan FileProcessor::ReadSpan(size_t bytes) { - auto file_entry = active_files_.find(file_stack_.back().filename); - assert(file_entry != active_files_.end()); + // File entry is non-const to allow read bytes to be non-const (i.e. potentially reflect a stateful operation) + // without forcing use of mutability + auto& active_file = file_stack_.back().active_file; + GFXRECON_ASSERT(active_file); - bool success = util::platform::FileSeek(file_entry->second.fd, skip_size, util::platform::FileSeekCurrent); - - if (success) + util::DataSpan read_span = active_file->ReadSpan(bytes); + if (!read_span.empty()) { - // These technically count as bytes read/processed. - bytes_read_ += skip_size; + // Note: Should this += read_span.size() instead... though current behavior of ReadSpan doesn't support partial + // reads + bytes_read_ += bytes; } - - return success; + return read_span; } -bool FileProcessor::SeekActiveFile(const std::string& filename, int64_t offset, util::platform::FileSeekOrigin origin) +bool FileProcessor::SeekActiveFile(const FileInputStreamPtr& active_file, + int64_t offset, + util::platform::FileSeekOrigin origin) { - auto file_entry = active_files_.find(file_stack_.back().filename); - assert(file_entry != active_files_.end()); + GFXRECON_ASSERT(active_file); - bool success = util::platform::FileSeek(file_entry->second.fd, offset, origin); + bool success = active_file->FileSeek(offset, origin); if (success && origin == util::platform::FileSeekCurrent) { @@ -591,20 +442,46 @@ bool FileProcessor::SeekActiveFile(const std::string& filename, int64_t offset, bool FileProcessor::SeekActiveFile(int64_t offset, util::platform::FileSeekOrigin origin) { - return SeekActiveFile(file_stack_.back().filename, offset, origin); + return SeekActiveFile(file_stack_.back().active_file, offset, origin); } bool FileProcessor::SetActiveFile(const std::string& filename, bool execute_till_eof) { - if (active_files_.find(filename) != active_files_.end()) + + // Look for the name stream in the cache + auto cached_stream = stream_cache_.Lookup(filename); + + FileInputStreamPtr active_file; + if (cached_stream.has_value()) { - file_stack_.emplace_back(filename, execute_till_eof); - return true; + active_file = std::move(*cached_stream); + + // Only valid streams in the cache + GFXRECON_ASSERT(active_file); + GFXRECON_ASSERT(active_file->IsOpen()); } else { - return false; + // No stream in cache, create one + active_file = std::make_shared(); + bool opened = active_file->Open(filename); + + if (!opened || !active_file->IsOpen()) + { + GFXRECON_LOG_ERROR("Failed to open file %s", filename.c_str()); + error_state_ = kErrorOpeningFile; + return false; + } + + // It's possible we'll want to use the input streams more than once, (kExecuteBlocksFromFile, usage often + // does in test cases), so we'll stash off the stream's shared pointer to a cache + stream_cache_.Insert(active_file); } + + // Now that we have a new stream or old, push it on the stack + file_stack_.emplace_back(std::move(active_file), execute_till_eof); + error_state_ = kErrorNone; + return true; } bool FileProcessor::SetActiveFile(const std::string& filename, @@ -612,10 +489,10 @@ bool FileProcessor::SetActiveFile(const std::string& filename, util::platform::FileSeekOrigin origin, bool execute_till_eof) { - if (active_files_.find(filename) != active_files_.end()) + bool success = SetActiveFile(filename, execute_till_eof); + if (success) { - file_stack_.emplace_back(filename, execute_till_eof); - return SeekActiveFile(filename, offset, origin); + return SeekActiveFile(file_stack_.back().active_file, offset, origin); } else { @@ -623,13 +500,13 @@ bool FileProcessor::SetActiveFile(const std::string& filename, } } -void FileProcessor::HandleBlockReadError(Error error_code, const char* error_message) +void FileProcessor::HandleBlockReadError(BlockIOError error_code, const char* error_message) { - auto file_entry = active_files_.find(file_stack_.back().filename); - assert(file_entry != active_files_.end()); + GFXRECON_ASSERT(!file_stack_.empty()); + const auto& active_file = file_stack_.back().active_file; // Report incomplete block at end of file as a warning, other I/O errors as an error. - if (feof(file_entry->second.fd) && !ferror(file_entry->second.fd)) + if (active_file->IsEof() && !active_file->IsError()) { GFXRECON_LOG_WARNING("Incomplete block at end of file"); } @@ -640,1846 +517,172 @@ void FileProcessor::HandleBlockReadError(Error error_code, const char* error_mes } } -bool FileProcessor::ProcessFunctionCall(const format::BlockHeader& block_header, - format::ApiCallId call_id, - bool& should_break) +void FileProcessor::UpdateEndFrameState() { - size_t parameter_buffer_size = static_cast(block_header.size) - sizeof(call_id); - uint64_t uncompressed_size = 0; - ApiCallInfo call_info{ block_index_ }; - bool success = ReadBytes(&call_info.thread_id, sizeof(call_info.thread_id)); - - if (success) + if (pending_capture_uses_frame_markers_) { - parameter_buffer_size -= sizeof(call_info.thread_id); - - if (format::IsBlockCompressed(block_header.type)) - { - parameter_buffer_size -= sizeof(uncompressed_size); - success = ReadBytes(&uncompressed_size, sizeof(uncompressed_size)); - - if (success) - { - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, uncompressed_size); - - size_t actual_size = 0; - success = ReadCompressedParameterBuffer( - parameter_buffer_size, static_cast(uncompressed_size), &actual_size); + // If the capture file contains frame markers, it will have a frame marker for every + // frame-ending API call such as vkQueuePresentKHR. If this is the first frame marker + // encountered, reset the frame count and ignore frame-ending API calls in + // IsFrameDelimiter(format::ApiCallId call_id). + GFXRECON_ASSERT(!capture_uses_frame_markers_); + capture_uses_frame_markers_ = true; + pending_capture_uses_frame_markers_ = false; + current_frame_number_ = kFirstFrame; + GFXRECON_LOG_WARNING("Explicit frame markers found in file format (0.0) file w/ gfxrecon-version < (1.0.1). " + "Patch input file format with 'gfxrecon-file-version-patch'"); + } - if (success) - { - assert(actual_size == uncompressed_size); - parameter_buffer_size = static_cast(uncompressed_size); - } - else - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read compressed function call block data"); - } - } - else - { - HandleBlockReadError(kErrorReadingCompressedBlockHeader, - "Failed to read compressed function call block header"); - } - } - else - { - success = ReadParameterBuffer(parameter_buffer_size); + // Make sure to increment the frame number on the way out. + ++current_frame_number_; + ++block_index_; +} - if (!success) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read function call block data"); - } - } +bool FileProcessor::ProcessFrameDelimiter(gfxrecon::format::ApiCallId call_id) +{ + return IsFrameDelimiter(call_id); +} - if (success) +bool FileProcessor::ProcessFrameDelimiter(const FrameEndMarkerArgs& end_frame) +{ + // Validate frame end marker's frame number matches current_frame_number_ when capture_uses_frame_markers_ is + // true. + GFXRECON_ASSERT((!capture_uses_frame_markers_) || + (current_frame_number_ == (end_frame.frame_number - first_frame_))); + if (IsFrameDelimiter(format::BlockType::kFrameMarkerBlock, format::MarkerType::kEndMarker)) + { + // If this is the first FrameEndMarker, this frame has side effects to be applied after dispatch + if (!capture_uses_frame_markers_) { - for (auto decoder : decoders_) - { - if (decoder->SupportsApiCall(call_id)) - { - DecodeAllocator::Begin(); - decoder->SetCurrentApiCallId(call_id); - decoder->DecodeFunctionCall(call_id, call_info, parameter_buffer_.data(), parameter_buffer_size); - DecodeAllocator::End(); - } - } + pending_capture_uses_frame_markers_ = true; } + return true; } - else + return false; +} +bool FileProcessor::ProcessExecuteBlocksFromFile(const ExecuteBlocksFromFileArgs& exec_from_file) +{ + std::string filename = util::filepath::Join(absolute_path_, exec_from_file.filename); + + // Check for self references + if (!filename.compare(file_stack_.back().active_file->GetFilename())) { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read function call block header"); + GFXRECON_LOG_WARNING("ExecuteBlocksFromFile is referencing itself. Probably this is not intentional."); } - // Break from loop on frame delimiter. - if (IsFrameDelimiter(call_id)) + bool success = + SetActiveFile(filename, exec_from_file.offset, util::platform::FileSeekSet, exec_from_file.n_blocks == 0); + + if (success) { - // Make sure to increment the frame number on the way out. - ++current_frame_number_; - ++block_index_; - should_break = true; + // We need to add 1 because it will be decremented right after this function returns + file_stack_.back().remaining_commands = exec_from_file.n_blocks + 1; } + return success; } -bool FileProcessor::ProcessMethodCall(const format::BlockHeader& block_header, - format::ApiCallId call_id, - bool& should_break) +void FileProcessor::ProcessStateBeginMarker(const StateBeginMarkerArgs& state_begin) { - size_t parameter_buffer_size = static_cast(block_header.size) - sizeof(call_id); - uint64_t uncompressed_size = 0; - format::HandleId object_id = 0; - ApiCallInfo call_info{ block_index_ }; + GFXRECON_LOG_INFO("Loading state for captured frame %" PRId64, state_begin.frame_number); + loading_trimmed_capture_state_ = true; +} - bool success = ReadBytes(&object_id, sizeof(object_id)); - success = success && ReadBytes(&call_info.thread_id, sizeof(call_info.thread_id)); +void FileProcessor::ProcessStateEndMarker(const StateEndMarkerArgs& state_end) +{ + GFXRECON_LOG_INFO("Finished loading state for captured frame %" PRId64, state_end.frame_number); + first_frame_ = state_end.frame_number; + loading_trimmed_capture_state_ = false; +} - if (success) +void FileProcessor::ProcessAnnotation(const AnnotationArgs& annotation) +{ + // We can infer the presence of frame markers from the operations version + if (annotation.type == gfxrecon::format::AnnotationType::kJson && + annotation.label.compare(gfxrecon::format::kAnnotationLabelOperation) == 0) { - parameter_buffer_size -= (sizeof(object_id) + sizeof(call_info.thread_id)); - - if (format::IsBlockCompressed(block_header.type)) - { - parameter_buffer_size -= sizeof(uncompressed_size); - success = ReadBytes(&uncompressed_size, sizeof(uncompressed_size)); - - if (success) - { - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, uncompressed_size); - - size_t actual_size = 0; - success = ReadCompressedParameterBuffer( - parameter_buffer_size, static_cast(uncompressed_size), &actual_size); - - if (success) - { - assert(actual_size == uncompressed_size); - parameter_buffer_size = static_cast(uncompressed_size); - } - else - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read compressed function call block data"); - } - } - else - { - HandleBlockReadError(kErrorReadingCompressedBlockHeader, - "Failed to read compressed function call block header"); - } - } - else + // This is an operations annotation containing the version of the capture tool. + format::GfxrVersion version = format::ParseVersionFromOperations(annotation.annotation_data.c_str()); + if (version.SupportsFrameMarkers()) { - success = ReadParameterBuffer(parameter_buffer_size); - - if (!success) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read function call block data"); - } + GFXRECON_ASSERT(current_frame_number_ == kFirstFrame); + capture_uses_frame_markers_ = true; + file_supports_frame_markers_ = true; } + } +} - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsApiCall(call_id)) - { - DecodeAllocator::Begin(); - decoder->SetCurrentApiCallId(call_id); - decoder->DecodeMethodCall( - call_id, object_id, call_info, parameter_buffer_.data(), parameter_buffer_size); - DecodeAllocator::End(); - } - } +bool FileProcessor::IsFrameDelimiter(format::BlockType block_type, format::MarkerType marker_type) const +{ + return ((block_type == format::BlockType::kFrameMarkerBlock) && (marker_type == format::MarkerType::kEndMarker)); +} - ++api_call_index_; - } +bool FileProcessor::IsFrameDelimiter(format::ApiCallId call_id) const +{ + if (capture_uses_frame_markers_) + { + return false; } else { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read function call block header"); + // This code is deprecated and no new API calls should be added. Instead, end of frame markers are used to track + // the file processor's frame count. + return ((call_id == format::ApiCallId::ApiCall_vkQueuePresentKHR) || + (call_id == format::ApiCallId::ApiCall_vkFrameBoundaryANDROID) || + (call_id == format::ApiCallId::ApiCall_IDXGISwapChain_Present) || + (call_id == format::ApiCallId::ApiCall_IDXGISwapChain1_Present1) || + (call_id == format::ApiCallId::ApiCall_xrEndFrame)); } +} - // Break from loop on frame delimiter. - if (IsFrameDelimiter(call_id)) - { - // Make sure to increment the frame number on the way out. - ++current_frame_number_; - ++block_index_; - should_break = true; - } - return success; -} - -bool FileProcessor::ProcessMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id) -{ - bool success = false; - - format::MetaDataType meta_data_type = format::GetMetaDataType(meta_data_id); - - if (meta_data_type == format::MetaDataType::kFillMemoryCommand) - { - format::FillMemoryCommandHeader header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.memory_id, sizeof(header.memory_id)); - success = success && ReadBytes(&header.memory_offset, sizeof(header.memory_offset)); - success = success && ReadBytes(&header.memory_size, sizeof(header.memory_size)); - - if (success) - { - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, header.memory_size); - - if (format::IsBlockCompressed(block_header.type)) - { - size_t uncompressed_size = 0; - size_t compressed_size = static_cast(block_header.size) - sizeof(meta_data_id) - - sizeof(header.thread_id) - sizeof(header.memory_id) - - sizeof(header.memory_offset) - sizeof(header.memory_size); - - success = ReadCompressedParameterBuffer( - compressed_size, static_cast(header.memory_size), &uncompressed_size); - } - else - { - success = ReadParameterBuffer(static_cast(header.memory_size)); - } - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchFillMemoryCommand(header.thread_id, - header.memory_id, - header.memory_offset, - header.memory_size, - parameter_buffer_.data()); - } - } - } - else - { - if (format::IsBlockCompressed(block_header.type)) - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read fill memory meta-data block"); - } - else - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read fill memory meta-data block"); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read fill memory meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kFillMemoryResourceValueCommand) - { - format::FillMemoryResourceValueCommandHeader header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = ReadBytes(&header.resource_value_count, sizeof(header.resource_value_count)); - - if (success) - { - uint64_t data_size = header.resource_value_count * (sizeof(format::ResourceValueType) + sizeof(uint64_t)); - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, data_size); - - if (format::IsBlockCompressed(block_header.type)) - { - size_t uncompressed_size = 0; - size_t compressed_size = static_cast(block_header.size) - sizeof(meta_data_id) - - sizeof(header.thread_id) - sizeof(header.resource_value_count); - size_t uncompressed_data = static_cast(data_size); - success = ReadCompressedParameterBuffer(compressed_size, uncompressed_data, &uncompressed_size); - } - else - { - success = ReadParameterBuffer(static_cast(data_size)); - } - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchFillMemoryResourceValueCommand(header, parameter_buffer_.data()); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockData, - "Failed to read fill memory resource value meta-data block"); - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read fill memory resource value meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kResizeWindowCommand) - { - // This command does not support compression. - assert(block_header.type != format::BlockType::kCompressedMetaDataBlock); - - format::ResizeWindowCommand command; - - success = ReadBytes(&command.thread_id, sizeof(command.thread_id)); - success = success && ReadBytes(&command.surface_id, sizeof(command.surface_id)); - success = success && ReadBytes(&command.width, sizeof(command.width)); - success = success && ReadBytes(&command.height, sizeof(command.height)); - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchResizeWindowCommand( - command.thread_id, command.surface_id, command.width, command.height); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read resize window meta-data block"); - } - } - else if (meta_data_type == format::MetaDataType::kResizeWindowCommand2) - { - // This command does not support compression. - assert(block_header.type != format::BlockType::kCompressedMetaDataBlock); - - format::ResizeWindowCommand2 command; - - success = ReadBytes(&command.thread_id, sizeof(command.thread_id)); - success = success && ReadBytes(&command.surface_id, sizeof(command.surface_id)); - success = success && ReadBytes(&command.width, sizeof(command.width)); - success = success && ReadBytes(&command.height, sizeof(command.height)); - success = success && ReadBytes(&command.pre_transform, sizeof(command.pre_transform)); - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchResizeWindowCommand2( - command.thread_id, command.surface_id, command.width, command.height, command.pre_transform); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read resize window 2 meta-data block"); - } - } - else if (meta_data_type == format::MetaDataType::kExeFileInfoCommand) - { - format::ExeFileInfoBlock header; - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - - success = - success && ReadBytes(&header.info_record.ProductVersion, gfxrecon::util::filepath::kMaxFilePropertySize); - success = success && ReadBytes(&header.info_record.FileVersion, gfxrecon::util::filepath::kMaxFilePropertySize); - success = success && ReadBytes(&header.info_record.AppVersion, - sizeof(uint32_t) * gfxrecon::util::filepath::kFileVersionSize); - success = success && ReadBytes(&header.info_record.AppName, gfxrecon::util::filepath::kMaxFilePropertySize); - success = success && ReadBytes(&header.info_record.CompanyName, gfxrecon::util::filepath::kMaxFilePropertySize); - success = - success && ReadBytes(&header.info_record.FileDescription, gfxrecon::util::filepath::kMaxFilePropertySize); - success = - success && ReadBytes(&header.info_record.InternalName, gfxrecon::util::filepath::kMaxFilePropertySize); - success = - success && ReadBytes(&header.info_record.OriginalFilename, gfxrecon::util::filepath::kMaxFilePropertySize); - success = success && ReadBytes(&header.info_record.ProductName, gfxrecon::util::filepath::kMaxFilePropertySize); - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchExeFileInfo(header.thread_id, header); - } - } - } - } - else if (meta_data_type == format::MetaDataType::kDriverInfoCommand) - { - format::DriverInfoBlock header; - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - - success = success && ReadBytes(&header.driver_record, gfxrecon::util::filepath::kMaxDriverInfoSize); - - if (success) - { - for (auto decoder : decoders_) - { - decoder->DispatchDriverInfo(header.thread_id, header); - } - } - } - else if (meta_data_type == format::MetaDataType::kDisplayMessageCommand) - { - // This command does not support compression. - assert(block_header.type != format::BlockType::kCompressedMetaDataBlock); - - format::DisplayMessageCommandHeader header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - - if (success) - { - uint64_t message_size = block_header.size - sizeof(meta_data_id) - sizeof(header.thread_id); - - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, message_size); - - success = ReadParameterBuffer(static_cast(message_size)); - - if (success) - { - auto message_start = parameter_buffer_.begin(); - std::string message(message_start, std::next(message_start, static_cast(message_size))); - - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchDisplayMessageCommand(header.thread_id, message); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read display message meta-data block"); - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read display message meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kCreateHardwareBufferCommand_deprecated) - { - format::CreateHardwareBufferCommandHeader_deprecated header; - - GFXRECON_LOG_WARNING_ONCE( - "This capture contains a deprecated metacommand to create an AHardwareBuffer. While still supported, this " - "metacommand may not correctly represent some state of the captured AHardwareBuffer."); - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.memory_id, sizeof(header.memory_id)); - success = success && ReadBytes(&header.buffer_id, sizeof(header.buffer_id)); - success = success && ReadBytes(&header.format, sizeof(header.format)); - success = success && ReadBytes(&header.width, sizeof(header.width)); - success = success && ReadBytes(&header.height, sizeof(header.height)); - success = success && ReadBytes(&header.stride, sizeof(header.stride)); - success = success && ReadBytes(&header.usage, sizeof(header.usage)); - success = success && ReadBytes(&header.layers, sizeof(header.layers)); - success = success && ReadBytes(&header.planes, sizeof(header.planes)); - - if (success) - { - std::vector entries; - - for (uint64_t i = 0; i < header.planes; ++i) - { - format::HardwareBufferPlaneInfo entry; - - if (!ReadBytes(&entry, sizeof(entry))) - { - success = false; - break; - } - - entries.emplace_back(std::move(entry)); - } - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchCreateHardwareBufferCommand(header.thread_id, - 0u, - header.memory_id, - header.buffer_id, - header.format, - header.width, - header.height, - header.stride, - header.usage, - header.layers, - entries); - } - } - } - else - { - if (format::IsBlockCompressed(block_header.type)) - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read create hardware buffer meta-data block"); - } - else - { - HandleBlockReadError(kErrorReadingBlockData, - "Failed to read create hardware buffer meta-data block"); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read create hardware buffer meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kCreateHardwareBufferCommand_deprecated2) - { - format::CreateHardwareBufferCommandHeader_deprecated2 header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.memory_id, sizeof(header.memory_id)); - success = success && ReadBytes(&header.buffer_id, sizeof(header.buffer_id)); - success = success && ReadBytes(&header.format, sizeof(header.format)); - success = success && ReadBytes(&header.width, sizeof(header.width)); - success = success && ReadBytes(&header.height, sizeof(header.height)); - success = success && ReadBytes(&header.stride, sizeof(header.stride)); - success = success && ReadBytes(&header.usage, sizeof(header.usage)); - success = success && ReadBytes(&header.layers, sizeof(header.layers)); - success = success && ReadBytes(&header.planes, sizeof(header.planes)); - - if (success) - { - std::vector entries; - - for (uint64_t i = 0; i < header.planes; ++i) - { - format::HardwareBufferPlaneInfo entry; - - if (!ReadBytes(&entry, sizeof(entry))) - { - success = false; - break; - } - - entries.emplace_back(std::move(entry)); - } - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchCreateHardwareBufferCommand(header.thread_id, - 0u, - header.memory_id, - header.buffer_id, - header.format, - header.width, - header.height, - header.stride, - header.usage, - header.layers, - entries); - } - } - } - else - { - if (format::IsBlockCompressed(block_header.type)) - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read create hardware buffer meta-data block"); - } - else - { - HandleBlockReadError(kErrorReadingBlockData, - "Failed to read create hardware buffer meta-data block"); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read create hardware buffer meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kCreateHardwareBufferCommand) - { - format::CreateHardwareBufferCommandHeader header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.device_id, sizeof(header.device_id)); - success = success && ReadBytes(&header.memory_id, sizeof(header.memory_id)); - success = success && ReadBytes(&header.buffer_id, sizeof(header.buffer_id)); - success = success && ReadBytes(&header.format, sizeof(header.format)); - success = success && ReadBytes(&header.width, sizeof(header.width)); - success = success && ReadBytes(&header.height, sizeof(header.height)); - success = success && ReadBytes(&header.stride, sizeof(header.stride)); - success = success && ReadBytes(&header.usage, sizeof(header.usage)); - success = success && ReadBytes(&header.layers, sizeof(header.layers)); - success = success && ReadBytes(&header.planes, sizeof(header.planes)); - - if (success) - { - std::vector entries; - - for (uint64_t i = 0; i < header.planes; ++i) - { - format::HardwareBufferPlaneInfo entry; - - if (!ReadBytes(&entry, sizeof(entry))) - { - success = false; - break; - } - - entries.emplace_back(std::move(entry)); - } - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchCreateHardwareBufferCommand(header.thread_id, - header.device_id, - header.memory_id, - header.buffer_id, - header.format, - header.width, - header.height, - header.stride, - header.usage, - header.layers, - entries); - } - } - } - else - { - if (format::IsBlockCompressed(block_header.type)) - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read create hardware buffer meta-data block"); - } - else - { - HandleBlockReadError(kErrorReadingBlockData, - "Failed to read create hardware buffer meta-data block"); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read create hardware buffer meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kDestroyHardwareBufferCommand) - { - format::DestroyHardwareBufferCommand command; - - success = ReadBytes(&command.thread_id, sizeof(command.thread_id)); - success = success && ReadBytes(&command.buffer_id, sizeof(command.buffer_id)); - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchDestroyHardwareBufferCommand(command.thread_id, command.buffer_id); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read destroy hardware buffer meta-data block"); - } - } - else if (meta_data_type == format::MetaDataType::kCreateHeapAllocationCommand) - { - // This command does not support compression. - assert(block_header.type != format::BlockType::kCompressedMetaDataBlock); - - format::CreateHeapAllocationCommand header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.allocation_id, sizeof(header.allocation_id)); - success = success && ReadBytes(&header.allocation_size, sizeof(header.allocation_size)); - - if (success) - { - for (auto decoder : decoders_) - { - decoder->DispatchCreateHeapAllocationCommand( - header.thread_id, header.allocation_id, header.allocation_size); - } - } - else - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read create heap allocation meta-data block"); - } - } - else if (meta_data_type == format::MetaDataType::kSetDevicePropertiesCommand) - { - // This command does not support compression. - assert(block_header.type != format::BlockType::kCompressedMetaDataBlock); - - format::SetDevicePropertiesCommand header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.physical_device_id, sizeof(header.physical_device_id)); - success = success && ReadBytes(&header.api_version, sizeof(header.api_version)); - success = success && ReadBytes(&header.driver_version, sizeof(header.driver_version)); - success = success && ReadBytes(&header.vendor_id, sizeof(header.vendor_id)); - success = success && ReadBytes(&header.device_id, sizeof(header.device_id)); - success = success && ReadBytes(&header.device_type, sizeof(header.device_type)); - success = success && ReadBytes(&header.pipeline_cache_uuid, format::kUuidSize); - success = success && ReadBytes(&header.device_name_len, sizeof(header.device_name_len)); - - if (success) - { - char device_name[format::kMaxPhysicalDeviceNameSize]; - - if (header.device_name_len < format::kMaxPhysicalDeviceNameSize) - { - success = success && ReadBytes(&device_name, header.device_name_len); - device_name[header.device_name_len] = '\0'; - } - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchSetDevicePropertiesCommand(header.thread_id, - header.physical_device_id, - header.api_version, - header.driver_version, - header.vendor_id, - header.device_id, - header.device_type, - header.pipeline_cache_uuid, - device_name); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockData, - "Failed to read set device memory properties meta-data block"); - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read set device memory properties meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kSetDeviceMemoryPropertiesCommand) - { - // This command does not support compression. - assert(block_header.type != format::BlockType::kCompressedMetaDataBlock); - - format::SetDeviceMemoryPropertiesCommand header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.physical_device_id, sizeof(header.physical_device_id)); - success = success && ReadBytes(&header.memory_type_count, sizeof(header.memory_type_count)); - success = success && ReadBytes(&header.memory_heap_count, sizeof(header.memory_heap_count)); - - if (success) - { - std::vector types; - std::vector heaps; - - for (uint32_t i = 0; i < header.memory_type_count; ++i) - { - format::DeviceMemoryType type; - - if (!ReadBytes(&type, sizeof(type))) - { - success = false; - break; - } - - types.emplace_back(std::move(type)); - } - - for (uint32_t i = 0; i < header.memory_heap_count; ++i) - { - format::DeviceMemoryHeap heap; - - if (!ReadBytes(&heap, sizeof(heap))) - { - success = false; - break; - } - - heaps.emplace_back(std::move(heap)); - } - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchSetDeviceMemoryPropertiesCommand( - header.thread_id, header.physical_device_id, types, heaps); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockData, - "Failed to read set device memory properties meta-data block"); - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read set device memory properties meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kSetOpaqueAddressCommand) - { - // This command does not support compression. - assert(block_header.type != format::BlockType::kCompressedMetaDataBlock); - - format::SetOpaqueAddressCommand header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.device_id, sizeof(header.device_id)); - success = success && ReadBytes(&header.object_id, sizeof(header.object_id)); - success = success && ReadBytes(&header.address, sizeof(header.address)); - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchSetOpaqueAddressCommand( - header.thread_id, header.device_id, header.object_id, header.address); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read set opaque address meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kSetRayTracingShaderGroupHandlesCommand) - { - // This command does not support compression. - assert(block_header.type != format::BlockType::kCompressedMetaDataBlock); - - format::SetRayTracingShaderGroupHandlesCommandHeader header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.device_id, sizeof(header.device_id)); - success = success && ReadBytes(&header.pipeline_id, sizeof(header.pipeline_id)); - success = success && ReadBytes(&header.data_size, sizeof(header.data_size)); - - // Read variable size shader group handle data into parameter_buffer_. - success = success && ReadParameterBuffer(static_cast(header.data_size)); - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchSetRayTracingShaderGroupHandlesCommand(header.thread_id, - header.device_id, - header.pipeline_id, - static_cast(header.data_size), - parameter_buffer_.data()); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read set ray tracing shader group handles meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kSetSwapchainImageStateCommand) - { - // This command does not support compression. - assert(block_header.type != format::BlockType::kCompressedMetaDataBlock); - - format::SetSwapchainImageStateCommandHeader header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.device_id, sizeof(header.device_id)); - success = success && ReadBytes(&header.swapchain_id, sizeof(header.swapchain_id)); - success = success && ReadBytes(&header.last_presented_image, sizeof(header.last_presented_image)); - success = success && ReadBytes(&header.image_info_count, sizeof(header.image_info_count)); - - if (success) - { - std::vector entries; - - for (uint32_t i = 0; i < header.image_info_count; ++i) - { - format::SwapchainImageStateInfo entry; - - if (!ReadBytes(&entry, sizeof(entry))) - { - success = false; - break; - } - - entries.emplace_back(std::move(entry)); - } - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchSetSwapchainImageStateCommand(header.thread_id, - header.device_id, - header.swapchain_id, - header.last_presented_image, - entries); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockData, - "Failed to read set swapchain image state meta-data block"); - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read set swapchain image state meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kBeginResourceInitCommand) - { - // This command does not support compression. - assert(block_header.type != format::BlockType::kCompressedMetaDataBlock); - - format::BeginResourceInitCommand header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.device_id, sizeof(header.device_id)); - success = success && ReadBytes(&header.max_resource_size, sizeof(header.max_resource_size)); - success = success && ReadBytes(&header.max_copy_size, sizeof(header.max_copy_size)); - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchBeginResourceInitCommand( - header.thread_id, header.device_id, header.max_resource_size, header.max_copy_size); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read begin resource init meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kEndResourceInitCommand) - { - // This command does not support compression. - assert(block_header.type != format::BlockType::kCompressedMetaDataBlock); - - format::EndResourceInitCommand header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.device_id, sizeof(header.device_id)); - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchEndResourceInitCommand(header.thread_id, header.device_id); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read end resource init meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kInitBufferCommand) - { - format::InitBufferCommandHeader header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.device_id, sizeof(header.device_id)); - success = success && ReadBytes(&header.buffer_id, sizeof(header.buffer_id)); - success = success && ReadBytes(&header.data_size, sizeof(header.data_size)); - - if (success) - { - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, header.data_size); - - if (format::IsBlockCompressed(block_header.type)) - { - size_t uncompressed_size = 0; - size_t compressed_size = - static_cast(block_header.size) - (sizeof(header) - sizeof(header.meta_header.block_header)); - - success = ReadCompressedParameterBuffer( - compressed_size, static_cast(header.data_size), &uncompressed_size); - } - else - { - success = ReadParameterBuffer(static_cast(header.data_size)); - } - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchInitBufferCommand(header.thread_id, - header.device_id, - header.buffer_id, - header.data_size, - parameter_buffer_.data()); - } - } - } - else - { - if (format::IsBlockCompressed(block_header.type)) - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read init buffer data meta-data block"); - } - else - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read init buffer data meta-data block"); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read init buffer data meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kInitImageCommand) - { - format::InitImageCommandHeader header; - std::vector level_sizes; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.device_id, sizeof(header.device_id)); - success = success && ReadBytes(&header.image_id, sizeof(header.image_id)); - success = success && ReadBytes(&header.data_size, sizeof(header.data_size)); - success = success && ReadBytes(&header.aspect, sizeof(header.aspect)); - success = success && ReadBytes(&header.layout, sizeof(header.layout)); - success = success && ReadBytes(&header.level_count, sizeof(header.level_count)); - - if (success && (header.level_count > 0)) - { - level_sizes.resize(header.level_count); - success = success && ReadBytes(level_sizes.data(), header.level_count * sizeof(level_sizes[0])); - } - - if (success && (header.data_size > 0)) - { - assert(header.data_size == std::accumulate(level_sizes.begin(), level_sizes.end(), 0ull)); - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, header.data_size); - - if (format::IsBlockCompressed(block_header.type)) - { - size_t uncompressed_size = 0; - size_t compressed_size = static_cast(block_header.size) - - (sizeof(header) - sizeof(header.meta_header.block_header)) - - (level_sizes.size() * sizeof(level_sizes[0])); - - success = ReadCompressedParameterBuffer( - compressed_size, static_cast(header.data_size), &uncompressed_size); - } - else - { - success = ReadParameterBuffer(static_cast(header.data_size)); - } - } - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchInitImageCommand(header.thread_id, - header.device_id, - header.image_id, - header.data_size, - header.aspect, - header.layout, - level_sizes, - parameter_buffer_.data()); - } - } - } - else - { - if (format::IsBlockCompressed(block_header.type)) - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read init image data meta-data block"); - } - else - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read init image data meta-data block"); - } - } - } - else if (meta_data_type == format::MetaDataType::kInitSubresourceCommand) - { - format::InitSubresourceCommandHeader header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.device_id, sizeof(header.device_id)); - success = success && ReadBytes(&header.resource_id, sizeof(header.resource_id)); - success = success && ReadBytes(&header.subresource, sizeof(header.subresource)); - success = success && ReadBytes(&header.initial_state, sizeof(header.initial_state)); - success = success && ReadBytes(&header.resource_state, sizeof(header.resource_state)); - success = success && ReadBytes(&header.barrier_flags, sizeof(header.barrier_flags)); - success = success && ReadBytes(&header.data_size, sizeof(header.data_size)); - - if (success) - { - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, header.data_size); - - if (format::IsBlockCompressed(block_header.type)) - { - size_t uncompressed_size = 0; - size_t compressed_size = - static_cast(block_header.size) - (sizeof(header) - sizeof(header.meta_header.block_header)); - - success = ReadCompressedParameterBuffer( - compressed_size, static_cast(header.data_size), &uncompressed_size); - } - else - { - success = ReadParameterBuffer(static_cast(header.data_size)); - } - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchInitSubresourceCommand(header, parameter_buffer_.data()); - } - } - } - else - { - if (format::IsBlockCompressed(block_header.type)) - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read init subresource data meta-data block"); - } - else - { - HandleBlockReadError(kErrorReadingBlockData, - "Failed to read init subresource data meta-data block"); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read init subresource data meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kInitDx12AccelerationStructureCommand) - { - // Parse command header. - format::InitDx12AccelerationStructureCommandHeader header; - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && - ReadBytes(&header.dest_acceleration_structure_data, sizeof(header.dest_acceleration_structure_data)); - success = success && ReadBytes(&header.copy_source_gpu_va, sizeof(header.copy_source_gpu_va)); - success = success && ReadBytes(&header.copy_mode, sizeof(header.copy_mode)); - success = success && ReadBytes(&header.inputs_type, sizeof(header.inputs_type)); - success = success && ReadBytes(&header.inputs_flags, sizeof(header.inputs_flags)); - success = success && ReadBytes(&header.inputs_num_instance_descs, sizeof(header.inputs_num_instance_descs)); - success = success && ReadBytes(&header.inputs_num_geometry_descs, sizeof(header.inputs_num_geometry_descs)); - success = success && ReadBytes(&header.inputs_data_size, sizeof(header.inputs_data_size)); - - // Parse geometry descs. - std::vector geom_descs; - if (success) - { - for (uint32_t i = 0; i < header.inputs_num_geometry_descs; ++i) - { - format::InitDx12AccelerationStructureGeometryDesc geom_desc; - success = success && ReadBytes(&geom_desc.geometry_type, sizeof(geom_desc.geometry_type)); - success = success && ReadBytes(&geom_desc.geometry_flags, sizeof(geom_desc.geometry_flags)); - success = success && ReadBytes(&geom_desc.aabbs_count, sizeof(geom_desc.aabbs_count)); - success = success && ReadBytes(&geom_desc.aabbs_stride, sizeof(geom_desc.aabbs_stride)); - success = - success && ReadBytes(&geom_desc.triangles_has_transform, sizeof(geom_desc.triangles_has_transform)); - success = - success && ReadBytes(&geom_desc.triangles_index_format, sizeof(geom_desc.triangles_index_format)); - success = - success && ReadBytes(&geom_desc.triangles_vertex_format, sizeof(geom_desc.triangles_vertex_format)); - success = - success && ReadBytes(&geom_desc.triangles_index_count, sizeof(geom_desc.triangles_index_count)); - success = - success && ReadBytes(&geom_desc.triangles_vertex_count, sizeof(geom_desc.triangles_vertex_count)); - success = - success && ReadBytes(&geom_desc.triangles_vertex_stride, sizeof(geom_desc.triangles_vertex_stride)); - geom_descs.push_back(geom_desc); - } - } - - if (success) - { - if (header.inputs_data_size > 0) - { - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, header.inputs_data_size); - - if (format::IsBlockCompressed(block_header.type)) - { - size_t uncompressed_size = 0; - size_t compressed_size = - static_cast(block_header.size) - - (sizeof(header) - sizeof(header.meta_header.block_header)) - - (sizeof(format::InitDx12AccelerationStructureGeometryDesc) * header.inputs_num_geometry_descs); - - success = ReadCompressedParameterBuffer( - compressed_size, static_cast(header.inputs_data_size), &uncompressed_size); - } - else - { - success = ReadParameterBuffer(static_cast(header.inputs_data_size)); - } - } - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchInitDx12AccelerationStructureCommand( - header, geom_descs, parameter_buffer_.data()); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockData, - "Failed to read init DX12 acceleration structure meta-data block"); - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read init DX12 acceleration structure meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kDxgiAdapterInfoCommand) - { - format::DxgiAdapterInfoCommandHeader adapter_info_header; - memset(&adapter_info_header, 0, sizeof(adapter_info_header)); - - success = ReadBytes(&adapter_info_header.thread_id, sizeof(adapter_info_header.thread_id)); - - success = success && ReadBytes(&adapter_info_header.adapter_desc.Description, - sizeof(adapter_info_header.adapter_desc.Description)); - success = success && ReadBytes(&adapter_info_header.adapter_desc.VendorId, - sizeof(adapter_info_header.adapter_desc.VendorId)); - success = success && ReadBytes(&adapter_info_header.adapter_desc.DeviceId, - sizeof(adapter_info_header.adapter_desc.DeviceId)); - success = success && ReadBytes(&adapter_info_header.adapter_desc.SubSysId, - sizeof(adapter_info_header.adapter_desc.SubSysId)); - success = success && ReadBytes(&adapter_info_header.adapter_desc.Revision, - sizeof(adapter_info_header.adapter_desc.Revision)); - success = success && ReadBytes(&adapter_info_header.adapter_desc.DedicatedVideoMemory, - sizeof(adapter_info_header.adapter_desc.DedicatedVideoMemory)); - success = success && ReadBytes(&adapter_info_header.adapter_desc.DedicatedSystemMemory, - sizeof(adapter_info_header.adapter_desc.DedicatedSystemMemory)); - success = success && ReadBytes(&adapter_info_header.adapter_desc.SharedSystemMemory, - sizeof(adapter_info_header.adapter_desc.SharedSystemMemory)); - success = success && ReadBytes(&adapter_info_header.adapter_desc.LuidLowPart, - sizeof(adapter_info_header.adapter_desc.LuidLowPart)); - success = success && ReadBytes(&adapter_info_header.adapter_desc.LuidHighPart, - sizeof(adapter_info_header.adapter_desc.LuidHighPart)); - success = success && ReadBytes(&adapter_info_header.adapter_desc.extra_info, - sizeof(adapter_info_header.adapter_desc.extra_info)); - - if (success) - { - for (auto decoder : decoders_) - { - decoder->DispatchGetDxgiAdapterInfo(adapter_info_header); - } - } - else - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read adapter info meta-data block"); - } - } - else if (meta_data_type == format::MetaDataType::kDx12RuntimeInfoCommand) - { - format::Dx12RuntimeInfoCommandHeader dx12_runtime_info_header; - memset(&dx12_runtime_info_header, 0, sizeof(dx12_runtime_info_header)); - - success = ReadBytes(&dx12_runtime_info_header.thread_id, sizeof(dx12_runtime_info_header.thread_id)); - - success = success && ReadBytes(&dx12_runtime_info_header.runtime_info.version, - sizeof(dx12_runtime_info_header.runtime_info.version)); - - success = success && ReadBytes(&dx12_runtime_info_header.runtime_info.src, - sizeof(dx12_runtime_info_header.runtime_info.src)); - - if (success) - { - for (auto decoder : decoders_) - { - decoder->DispatchGetDx12RuntimeInfo(dx12_runtime_info_header); - } - } - else - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read runtime info meta-data block"); - } - } - else if (meta_data_type == format::MetaDataType::kParentToChildDependency) - { - // This command does not support compression. - assert(block_header.type != format::BlockType::kCompressedMetaDataBlock); - - format::ParentToChildDependencyHeader header; - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.dependency_type, sizeof(header.dependency_type)); - success = success && ReadBytes(&header.parent_id, sizeof(header.parent_id)); - success = success && ReadBytes(&header.child_count, sizeof(header.child_count)); - - if (success) - { - switch (header.dependency_type) - { - case format::kAccelerationStructuresDependency: - { - std::vector blases; - blases.resize(header.child_count); - - for (uint32_t i = 0; i < header.child_count; ++i) - { - success = success && ReadBytes(&blases[i], sizeof(blases[i])); - } - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchSetTlasToBlasDependencyCommand(header.parent_id, blases); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read TLAS to BLAS dependency meta-data block header"); - } - } - break; - - default: - success = false; - HandleBlockReadError(kErrorReadingBlockHeader, - "Corrupted parent to child dependency meta-data block header"); - break; - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read parent to child dependency meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kSetEnvironmentVariablesCommand) - { - format::SetEnvironmentVariablesCommand header; - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.string_length, sizeof(header.string_length)); - if (!success) - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read environment variable block header"); - return success; - } - - success = ReadParameterBuffer(static_cast(header.string_length)); - if (!success) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read environment variable block data"); - return success; - } - - const char* env_string = (const char*)parameter_buffer_.data(); - for (auto decoder : decoders_) - { - decoder->DispatchSetEnvironmentVariablesCommand(header, env_string); - } - } - else if (meta_data_type == format::MetaDataType::kVulkanBuildAccelerationStructuresCommand) - { - format::VulkanMetaBuildAccelerationStructuresHeader header{}; - size_t parameter_buffer_size = static_cast(block_header.size) - sizeof(meta_data_id); - success = ReadParameterBuffer(parameter_buffer_size); - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - DecodeAllocator::Begin(); - - decoder->DispatchVulkanAccelerationStructuresBuildMetaCommand(parameter_buffer_.data(), - parameter_buffer_size); - - DecodeAllocator::End(); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read acceleration structure init meta-data block header"); - } - } - else if (meta_data_type == format::MetaDataType::kVulkanCopyAccelerationStructuresCommand) - { - format::VulkanCopyAccelerationStructuresCommandHeader header{}; - size_t parameter_buffer_size = static_cast(block_header.size) - sizeof(meta_data_id); - success = ReadParameterBuffer(parameter_buffer_size); - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - DecodeAllocator::Begin(); - - decoder->DispatchVulkanAccelerationStructuresCopyMetaCommand(parameter_buffer_.data(), - parameter_buffer_size); - - DecodeAllocator::End(); - } - } - } - } - else if (meta_data_type == format::MetaDataType::kVulkanWriteAccelerationStructuresPropertiesCommand) - { - format::VulkanCopyAccelerationStructuresCommandHeader header{}; - size_t parameter_buffer_size = static_cast(block_header.size) - sizeof(meta_data_id); - success = ReadParameterBuffer(parameter_buffer_size); - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - DecodeAllocator::Begin(); - - decoder->DispatchVulkanAccelerationStructuresWritePropertiesMetaCommand(parameter_buffer_.data(), - parameter_buffer_size); - - DecodeAllocator::End(); - } - } - } - } - else if (meta_data_type == format::MetaDataType::kExecuteBlocksFromFile) - { - format::ExecuteBlocksFromFile exec_from_file; - success = ReadBytes(&exec_from_file.thread_id, sizeof(exec_from_file.thread_id)); - success = success && ReadBytes(&exec_from_file.n_blocks, sizeof(exec_from_file.n_blocks)); - success = success && ReadBytes(&exec_from_file.offset, sizeof(exec_from_file.offset)); - success = success && ReadBytes(&exec_from_file.filename_length, sizeof(exec_from_file.filename_length)); - - if (success) - { - std::string filename_c_str(exec_from_file.filename_length, '\0'); - success = success && ReadBytes(filename_c_str.data(), exec_from_file.filename_length); - if (success) - { - std::string filename = util::filepath::Join(absolute_path_, filename_c_str); - - // Check for self references - if (!filename.compare(file_stack_.back().filename)) - { - GFXRECON_LOG_WARNING( - "ExecuteBlocksFromFile is referencing itself. Probably this is not intentional."); - } - - success = OpenFile(filename); - if (success) - { - for (auto decoder : decoders_) - { - decoder->DispatchExecuteBlocksFromFile( - exec_from_file.thread_id, exec_from_file.n_blocks, exec_from_file.offset, filename); - } - - SetActiveFile( - filename, exec_from_file.offset, util::platform::FileSeekSet, exec_from_file.n_blocks == 0); - // We need to add 1 because it will be decremented right after this function returns - file_stack_.back().remaining_commands = exec_from_file.n_blocks + 1; - } - } - } - - if (!success) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read runtime info meta-data block"); - } - } - else if (meta_data_type == format::MetaDataType::kViewRelativeLocation) - { - // This command does not support compression. - assert(block_header.type != format::BlockType::kCompressedMetaDataBlock); - - format::ViewRelativeLocation Location; - format::ThreadId thread_id; - success = ReadBytes(&thread_id, sizeof(thread_id)); - - format::ViewRelativeLocation location; - if (success) - { - success = ReadBytes(&location, sizeof(location)); - } - - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchViewRelativeLocation(thread_id, location); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to ViewRelativeLocation meta-data block"); - } - } - else if (meta_data_type == format::MetaDataType::kInitializeMetaCommand) - { - format::InitializeMetaCommand header; - - success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.capture_id, sizeof(header.capture_id)); - success = success && ReadBytes(&header.block_index, sizeof(header.block_index)); - success = success && ReadBytes(&header.total_number_of_initializemetacommand, - sizeof(header.total_number_of_initializemetacommand)); - success = success && ReadBytes(&header.initialization_parameters_data_size, - sizeof(header.initialization_parameters_data_size)); - - if (success) - { - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, header.initialization_parameters_data_size); - if (header.initialization_parameters_data_size > 0) - { - if (format::IsBlockCompressed(block_header.type)) - { - size_t uncompressed_size = 0; - size_t compressed_size = static_cast(block_header.size) - - (sizeof(header) - sizeof(header.meta_header.block_header)); - - success = - ReadCompressedParameterBuffer(compressed_size, - static_cast(header.initialization_parameters_data_size), - &uncompressed_size); - } - else - { - success = ReadParameterBuffer(static_cast(header.initialization_parameters_data_size)); - } - } - if (success) - { - for (auto decoder : decoders_) - { - if (decoder->SupportsMetaDataId(meta_data_id)) - { - decoder->DispatchInitializeMetaCommand(header, parameter_buffer_.data()); - } - } - } - else - { - if (format::IsBlockCompressed(block_header.type)) - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read init subresource data meta-data block"); - } - else - { - HandleBlockReadError(kErrorReadingBlockData, - "Failed to read init subresource data meta-data block"); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read init subresource data meta-data block header"); - } - } - else - { - if ((meta_data_type == format::MetaDataType::kReserved23) || - (meta_data_type == format::MetaDataType::kReserved25)) - { - // Only log a warning once if the capture file contains blocks that are a "reserved" meta data type. - GFXRECON_LOG_WARNING_ONCE("This capture file contains meta-data block(s) with reserved type(s) that are " - "not supported. Unsupported meta-data block types will be skipped."); - } - else - { - // Unrecognized metadata type. - GFXRECON_LOG_WARNING("Skipping unrecognized meta-data block with type %" PRIu16, meta_data_type); - } - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, block_header.size); - success = SkipBytes(static_cast(block_header.size) - sizeof(meta_data_id)); - } - - return success; -} - -bool FileProcessor::ProcessFrameMarker(const format::BlockHeader& block_header, - format::MarkerType marker_type, - bool& should_break) +void FileProcessor::PrintBlockInfo() const { - // Read the rest of the frame marker data. Currently frame markers are not dispatched to decoders. - uint64_t frame_number = 0; - bool success = ReadBytes(&frame_number, sizeof(frame_number)); - - if (success) - { - // Validate frame end marker's frame number matches current_frame_number_ when capture_uses_frame_markers_ is - // true. - GFXRECON_ASSERT((marker_type != format::kEndMarker) || (!capture_uses_frame_markers_) || - (current_frame_number_ == (frame_number - first_frame_))); - - for (auto decoder : decoders_) - { - if (marker_type == format::kEndMarker) - { - decoder->DispatchFrameEndMarker(frame_number); - } - else - { - GFXRECON_LOG_WARNING("Skipping unrecognized frame marker with type %u", marker_type); - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read frame marker data"); - } - - // Break from loop on frame delimiter. - if (IsFrameDelimiter(block_header.type, marker_type)) + if (enable_print_block_info_ && ((block_index_from_ < 0 || block_index_to_ < 0) || + (block_index_from_ <= block_index_ && block_index_to_ >= block_index_))) { - // If the capture file contains frame markers, it will have a frame marker for every - // frame-ending API call such as vkQueuePresentKHR. If this is the first frame marker - // encountered, reset the frame count and ignore frame-ending API calls in - // IsFrameDelimiter(format::ApiCallId call_id). - if (!capture_uses_frame_markers_) - { - capture_uses_frame_markers_ = true; - current_frame_number_ = kFirstFrame; - } - - // Make sure to increment the frame number on the way out. - ++current_frame_number_; - ++block_index_; - should_break = true; + GFXRECON_LOG_INFO( + "block info: index: %" PRIu64 ", current frame: %" PRIu64 "", block_index_, current_frame_number_); } - return success; } -bool FileProcessor::ProcessStateMarker(const format::BlockHeader& block_header, format::MarkerType marker_type) +bool FileProcessor::HandleBlockEof(const char* operation, bool report_frame_and_block) { - uint64_t frame_number = 0; - bool success = ReadBytes(&frame_number, sizeof(frame_number)); - if (success) + bool success = false; + if (!AtEof()) { - if (marker_type == format::kBeginMarker) + // No data has been read for the current block, so we don't use 'HandleBlockReadError' here, as it + // assumes that the block header has been successfully read and will print an incomplete block at + // end of file warning when the file is at EOF without an error. For this case (the normal EOF case) + // we print nothing at EOF, or print an error message and set the error code directly when not at + // EOF. + if (report_frame_and_block) { - GFXRECON_LOG_INFO("Loading state for captured frame %" PRId64, frame_number); - loading_trimmed_capture_state_ = true; + GFXRECON_LOG_ERROR("Failed to %s block header (frame %u block %" PRIu64 ")", + operation, + current_frame_number_, + block_index_); } - else if (marker_type == format::kEndMarker) + else { - GFXRECON_LOG_INFO("Finished loading state for captured frame %" PRId64, frame_number); - first_frame_ = frame_number; - loading_trimmed_capture_state_ = false; + GFXRECON_LOG_ERROR("Failed to %s block header", operation); } - for (auto decoder : decoders_) - { - if (marker_type == format::kBeginMarker) - { - decoder->DispatchStateBeginMarker(frame_number); - } - else if (marker_type == format::kEndMarker) - { - decoder->DispatchStateEndMarker(frame_number); - } - else - { - GFXRECON_LOG_WARNING("Skipping unrecognized state marker with type %u", marker_type); - } - } + error_state_ = kErrorReadingBlockHeader; } else { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read state marker data"); - } - - return success; -} - -bool FileProcessor::ProcessAnnotation(const format::BlockHeader& block_header, format::AnnotationType annotation_type) -{ - bool success = false; - decltype(format::AnnotationHeader::label_length) label_length = 0; - decltype(format::AnnotationHeader::data_length) data_length = 0; + GFXRECON_ASSERT(!file_stack_.empty()); - success = ReadBytes(&label_length, sizeof(label_length)); - success = success && ReadBytes(&data_length, sizeof(data_length)); - if (success) - { - if ((label_length > 0) || (data_length > 0)) + ActiveFileContext& current_file = GetCurrentFile(); + if (current_file.execute_till_eof) { - std::string label; - std::string data; - const auto size_sum = label_length + data_length; - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, size_sum); - const size_t total_length = static_cast(size_sum); - - success = ReadParameterBuffer(total_length); - if (success) - { - if (label_length > 0) - { - auto label_start = parameter_buffer_.begin(); - label.assign(label_start, std::next(label_start, label_length)); - } - - if (data_length > 0) - { - auto data_start = std::next(parameter_buffer_.begin(), label_length); - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, data_length); - data.assign(data_start, std::next(data_start, static_cast(data_length))); - } - - assert(annotation_handler_ != nullptr); - annotation_handler_->ProcessAnnotation(block_index_, annotation_type, label, data); - } - else - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read annotation block"); - } + file_stack_.pop_back(); + success = !file_stack_.empty(); } } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read annotation block header"); - } - return success; } -bool FileProcessor::IsFrameDelimiter(format::BlockType block_type, format::MarkerType marker_type) const -{ - return ((block_type == format::BlockType::kFrameMarkerBlock) && (marker_type == format::MarkerType::kEndMarker)); -} - -bool FileProcessor::IsFrameDelimiter(format::ApiCallId call_id) const -{ - if (capture_uses_frame_markers_) - { - return false; - } - else - { - // This code is deprecated and no new API calls should be added. Instead, end of frame markers are used to track - // the file processor's frame count. - return ((call_id == format::ApiCallId::ApiCall_vkQueuePresentKHR) || - (call_id == format::ApiCallId::ApiCall_vkFrameBoundaryANDROID) || - (call_id == format::ApiCallId::ApiCall_IDXGISwapChain_Present) || - (call_id == format::ApiCallId::ApiCall_IDXGISwapChain1_Present1) || - (call_id == format::ApiCallId::ApiCall_xrEndFrame)); - } -} - -void FileProcessor::PrintBlockInfo() const -{ - if (enable_print_block_info_ && ((block_index_from_ < 0 || block_index_to_ < 0) || - (block_index_from_ <= block_index_ && block_index_to_ >= block_index_))) - { - GFXRECON_LOG_INFO( - "block info: index: %" PRIu64 ", current frame: %" PRIu64 "", block_index_, current_frame_number_); - } -} - -// GOOGLE: Retrieve name of current active file -std::string FileProcessor::GetActiveFilename() -{ - GFXRECON_ASSERT(!file_stack_.empty()); - return file_stack_.back().filename; -} - -// GOOGLE: [single-frame-looping] Active file tell utility -int64_t FileProcessor::TellFile(const std::string& filename) -{ - auto file_entry = active_files_.find(filename); - assert(file_entry != active_files_.end()); - - return util::platform::FileTell(file_entry->second.fd); -} - GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/file_processor.h b/third_party/gfxreconstruct/framework/decode/file_processor.h index 8b48fe78f..6060703a8 100644 --- a/third_party/gfxreconstruct/framework/decode/file_processor.h +++ b/third_party/gfxreconstruct/framework/decode/file_processor.h @@ -1,6 +1,6 @@ /* ** Copyright (c) 2018 Valve Corporation -** Copyright (c) 2018 LunarG, Inc. +** Copyright (c) 2018-2025 LunarG, Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -28,14 +28,24 @@ #include "format/format.h" #include "decode/annotation_handler.h" #include "decode/api_decoder.h" +#include "decode/api_payload.h" +#include "decode/block_parser.h" +#include "util/clock_cache.h" #include "util/compressor.h" #include "util/defines.h" +#include "decode/decode_allocator.h" +#include "util/logging.h" +#include "util/file_input_stream.h" #include #include #include #include +#include +#include +#include #include +#include // ParsedBlock #include #include #include @@ -43,24 +53,47 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) -class FileProcessor +// TODO: Find a better home for the visitors and utilities +template +struct DecoderAllocGuard +{}; + +template <> +struct DecoderAllocGuard { - public: - enum Error : int32_t + DecoderAllocGuard& operator=(const DecoderAllocGuard&) = delete; + DecoderAllocGuard(DecoderAllocGuard&&) = delete; + DecoderAllocGuard& operator=(DecoderAllocGuard&&) = delete; + DecoderAllocGuard() { DecodeAllocator::Begin(); } + ~DecoderAllocGuard() noexcept { DecodeAllocator::End(); } +}; + +template +static bool DecoderSupportsDispatch(ApiDecoder& decoder, const Args& args) +{ + if constexpr (DispatchTraits::kHasCallId) { - kErrorNone = 0, - kErrorInvalidFileDescriptor = -1, - kErrorOpeningFile = -2, - kErrorReadingFile = -3, // ferror() returned true at start of frame processing. - kErrorReadingFileHeader = -4, - kErrorReadingBlockHeader = -5, - kErrorReadingCompressedBlockHeader = -6, - kErrorReadingBlockData = -7, - kErrorReadingCompressedBlockData = -8, - kErrorInvalidFourCC = -9, - kErrorUnsupportedCompressionType = -10 - }; + return decoder.SupportsApiCall(args.call_id); + } + else if constexpr (DispatchTraits::kHasMetaDataId) + { + return decoder.SupportsMetaDataId(args.meta_data_id); + } + return true; +} +template +static void SetDecoderApiCallId(ApiDecoder& decoder, const Args& args) +{ + if constexpr (DispatchTraits::kHasCallId) + { + decoder.SetCurrentApiCallId(args.call_id); + } +} + +class FileProcessor +{ + public: enum BlockProcessReturn : int32_t { kSuccess = 0, @@ -105,7 +138,7 @@ class FileProcessor uint64_t GetNumBytesRead() const { return bytes_read_; } - Error GetErrorState() const { return error_state_; } + BlockIOError GetErrorState() const { return error_state_; } bool EntireFileWasProcessed() const { @@ -114,18 +147,12 @@ class FileProcessor return true; } - const auto file_entry = active_files_.find(file_stack_.front().filename); - if (file_entry != active_files_.end()) - { - return (feof(file_entry->second.fd) != 0); - } - else - { - return false; - } + return file_stack_.front().active_file->IsEof(); } - bool UsesFrameMarkers() const { return capture_uses_frame_markers_; } + bool UsesFrameMarkers() const { return capture_uses_frame_markers_; } + bool FileSupportsFrameMarkers() const { return file_supports_frame_markers_; } + const format::FileHeader& GetFileHeader() const { return file_header_; } void SetPrintBlockInfoFlag(bool enable_print_block_info, int64_t block_index_from, int64_t block_index_to) { @@ -134,78 +161,236 @@ class FileProcessor block_index_to_ = block_index_to; } - protected: - bool ContinueDecoding(); + bool IsFrameDelimiter(format::BlockType block_type, format::MarkerType marker_type) const; + bool IsFrameDelimiter(format::ApiCallId call_id) const; - bool ReadBlockHeader(format::BlockHeader* block_header); + void HandleBlockReadError(BlockIOError error_code, const char* error_message); - virtual bool ReadBytes(void* buffer, size_t buffer_size); + bool ProcessExecuteBlocksFromFile(const ExecuteBlocksFromFileArgs& execute_blocks_info); + void ProcessStateBeginMarker(const StateBeginMarkerArgs& state_begin); - bool SkipBytes(size_t skip_size); + // GOOGLE: [single-frame-looping] Allow overriding State End to know where to start looping from. NOTE This happens + // before dispatch to consumers. + virtual void ProcessStateEndMarker(const StateEndMarkerArgs& state_end); - bool ProcessFunctionCall(const format::BlockHeader& block_header, format::ApiCallId call_id, bool& should_break); + void ProcessAnnotation(const AnnotationArgs& annotation); - bool ProcessMethodCall(const format::BlockHeader& block_header, format::ApiCallId call_id, bool& should_break); + protected: + bool DoProcessNextFrame(const std::function& block_processor); + bool ProcessBlocksOneFrame(); - bool ProcessMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id); + bool ContinueDecoding(); - bool IsFrameDelimiter(format::BlockType block_type, format::MarkerType marker_type) const; + util::DataSpan ReadSpan(size_t buffer_size); + bool ReadBytes(void* buffer, size_t buffer_size); - bool IsFrameDelimiter(format::ApiCallId call_id) const; + // Reads block header, from input stream. + bool ReadBlockBuffer(BlockParser& parser, BlockBuffer& buffer); - void HandleBlockReadError(Error error_code, const char* error_message); + // Gets the block buffer from input stream or preloaded data if available + virtual bool GetBlockBuffer(BlockParser& parser, BlockBuffer& block_buffer); - bool ProcessAnnotation(const format::BlockHeader& block_header, format::AnnotationType annotation_type); + void UpdateEndFrameState(); + + // Returns whether the call_id is a frame delimiter and handles frame delimiting logic + bool ProcessFrameDelimiter(format::ApiCallId call_id); + // GOOGLE: [single-frame-looping] Allow overriding Frame End to know when to loop. NOTE This happens before dispatch + // to consumers. + virtual bool ProcessFrameDelimiter(const FrameEndMarkerArgs& end_frame); void PrintBlockInfo() const; + bool HandleBlockEof(const char* operation, bool report_frame_and_block); + protected: uint64_t current_frame_number_; std::vector decoders_; AnnotationHandler* annotation_handler_; - Error error_state_; + BlockIOError error_state_; uint64_t bytes_read_; /// @brief Incremented at the end of every block successfully processed. uint64_t block_index_; protected: - FILE* GetFileDescriptor() + BlockIOError CheckFileStatus() const { - assert(!file_stack_.empty()); - - if (!file_stack_.empty()) + if (file_stack_.empty()) { - auto file_entry = active_files_.find(file_stack_.back().filename); - assert(file_entry != active_files_.end()); - - return file_entry->second.fd; + return kErrorInvalidFileDescriptor; } - else + const auto& active_file = file_stack_.back().active_file; + // If not EOF, determine reason for invalid state. + if (!active_file->IsOpen()) + { + return kErrorInvalidFileDescriptor; + } + else if (active_file->IsError()) + { + return kErrorReadingFile; + } + + return kErrorNone; + } + + bool AtEof() const + { + if (file_stack_.empty()) { - return nullptr; + return true; } + return file_stack_.back().active_file->IsEof(); + } + + BlockParser& GetBlockParser() + { + GFXRECON_ASSERT(block_parser_.get() != nullptr); + return *block_parser_; } private: - bool ProcessFileHeader(); + class DispatchVisitor + { + public: + template + void operator()(const Args& args) + { + constexpr auto decode_method = DispatchTraits::kDecoderMethod; + for (auto decoder : decoders_) + { + if (DecoderSupportsDispatch(*decoder, args)) + { + [[maybe_unused]] DecoderAllocGuard::kHasAllocGuard> alloc_guard{}; + SetDecoderApiCallId(*decoder, args); + auto dispatch_call = [&decoder, decode_method](auto&&... expanded_args) { + (decoder->*decode_method)(std::forward(expanded_args)...); + }; + std::apply(dispatch_call, args.GetTuple()); + } + } + } + void operator()(const AnnotationArgs& annotation) + { + if (annotation_handler_) + { + auto annotation_call = [this](auto&&... expanded_args) { + annotation_handler_->ProcessAnnotation(std::forward(expanded_args)...); + }; + std::apply(annotation_call, annotation.GetTuple()); + } + } - virtual bool ProcessBlocks(); + // Avoid unpacking the Arg from it's store in the Arg specific overloads + template + void operator()(const DispatchStore& store) + { + this->operator()(*store); + } + + DispatchVisitor(const std::vector& decoders, AnnotationHandler* annotation_handler) : + decoders_(decoders), annotation_handler_(annotation_handler) + {} + + private: + const std::vector& decoders_; + AnnotationHandler* annotation_handler_; + }; + + class ProcessVisitor + { + public: + // NOTE: All overloads should set all state, as the caller is *reusing* the Visitor object across a number of + // std::visit calls + + // Frame boundary control + void operator()(const FunctionCallArgs& function_call) + { + is_frame_delimiter = file_processor_.ProcessFrameDelimiter(function_call.call_id); + success = true; + } + + void operator()(const MethodCallArgs& method_call) + { + is_frame_delimiter = file_processor_.ProcessFrameDelimiter(method_call.call_id); + success = true; + } + + void operator()(const FrameEndMarkerArgs& end_frame) + { + // The block and marker type are implied by the Args type + is_frame_delimiter = file_processor_.ProcessFrameDelimiter(end_frame); + success = true; + } + + // I/O Control + void operator()(const ExecuteBlocksFromFileArgs& execute_blocks) + { + // The block and marker type are implied by the Args type + is_frame_delimiter = false; + success = file_processor_.ProcessExecuteBlocksFromFile(execute_blocks); + } + + // State Marker control + void operator()(const StateBeginMarkerArgs& state_begin) + { + // The block and marker type are implied by the Args type + is_frame_delimiter = false; + success = true; + file_processor_.ProcessStateBeginMarker(state_begin); + } + + void operator()(const StateEndMarkerArgs& state_end) + { + // The block and marker type are implied by the Args type + is_frame_delimiter = false; + success = true; + file_processor_.ProcessStateEndMarker(state_end); + } + + void operator()(const AnnotationArgs& annotation) + { + // The block and marker type are implied by the Command type + is_frame_delimiter = false; + success = true; + file_processor_.ProcessAnnotation(annotation); + } - bool ReadParameterBuffer(size_t buffer_size); + template + void operator()(const Args&) + { + // The default behavior for a Visit is a successful, non-frame-delimiter + is_frame_delimiter = false; + success = true; + } + + // Avoid unpacking the Arg from it's store in the Arg specific overloads + template + void operator()(const DispatchStore& store) + { + this->operator()(*store); + } + + bool IsSuccess() const { return success; } + bool IsFrameDelimiter() const { return is_frame_delimiter; } + ProcessVisitor(FileProcessor& file_processor) : file_processor_(file_processor) {} + + private: + bool is_frame_delimiter = false; + bool success = true; + FileProcessor& file_processor_; + }; + + bool ProcessFileHeader(); + bool ProcessBlocks(); - bool ReadCompressedParameterBuffer(size_t compressed_buffer_size, - size_t expected_uncompressed_size, - size_t* uncompressed_buffer_size); + // NOTE: These two can't be const as derived class updates state. + virtual bool SkipBlockProcessing() { return false; } // No block skipping in base class bool IsFileValid() const { if (!file_stack_.empty()) { - auto file_entry = active_files_.find(file_stack_.back().filename); - assert(file_entry != active_files_.end()); - - return (file_entry->second.fd && !feof(file_entry->second.fd) && !ferror(file_entry->second.fd)); + return file_stack_.back().active_file->IsReady(); } else { @@ -213,8 +398,11 @@ class FileProcessor } } - bool OpenFile(const std::string& filename); + // GOOGLE: [single-frame-looping] Let subclasses seek to support looping + protected: + bool SeekActiveFile(const FileInputStreamPtr& file, int64_t offset, util::platform::FileSeekOrigin origin); + private: bool SeekActiveFile(int64_t offset, util::platform::FileSeekOrigin origin); bool SetActiveFile(const std::string& filename, bool execute_till_eof); @@ -231,63 +419,65 @@ class FileProcessor private: std::vector file_options_; format::EnabledOptions enabled_options_; - std::vector parameter_buffer_; - std::vector compressed_parameter_buffer_; - util::Compressor* compressor_; - uint64_t api_call_index_; + std::vector uncompressed_buffer_; uint64_t block_limit_; - bool capture_uses_frame_markers_; + bool pending_capture_uses_frame_markers_{ false }; + bool capture_uses_frame_markers_{ false }; + bool file_supports_frame_markers_{ false }; uint64_t first_frame_; bool enable_print_block_info_{ false }; int64_t block_index_from_{ 0 }; int64_t block_index_to_{ 0 }; bool loading_trimmed_capture_state_; - struct ActiveFiles - { - ActiveFiles() {} - - ActiveFiles(FILE* fd_) : fd(fd_) {} + // GOOGLE: [enable-gpu-time] Use by DiveFileProcessor to store GPU time stats CSV + protected: + std::string absolute_path_; - FILE* fd{ nullptr }; - }; + private: + format::FileHeader file_header_; - std::unordered_map active_files_; + protected: + BufferPool pool_; + std::unique_ptr compressor_; + std::unique_ptr block_parser_; struct ActiveFileContext { - ActiveFileContext(std::string filename_) : filename(std::move(filename_)){}; - ActiveFileContext(std::string filename_, bool execute_till_eof_) : - filename(std::move(filename_)), execute_till_eof(execute_till_eof_){}; + ActiveFileContext(FileInputStreamPtr&& active_file_, bool execute_til_eof_ = false) : + active_file(std::move(active_file_)), execute_till_eof(execute_til_eof_) {}; - std::string filename; - uint32_t remaining_commands{ 0 }; - bool execute_till_eof{ false }; + FileInputStreamPtr active_file; + uint32_t remaining_commands{ 0 }; + bool execute_till_eof{ false }; }; + std::deque file_stack_; private: ActiveFileContext& GetCurrentFile() { - assert(file_stack_.size()); - + GFXRECON_ASSERT(file_stack_.size()); return file_stack_.back(); } + struct InputStreamGetKey + { + const std::string& operator()(const FileInputStreamPtr& input_stream) + { + GFXRECON_ASSERT(input_stream); + return input_stream->GetFilename(); + } + }; + using ActiveStreamCache = util::ClockCache; + ActiveStreamCache stream_cache_; + // GOOGLE: Access modifications for derived FileProcessor classes protected: - uint64_t GetFirstFrame() const { return first_frame_; } - void SetUsesFrameMarkers(bool uses_frame_markers) { capture_uses_frame_markers_ = uses_frame_markers; } - std::string GetActiveFilename(); - bool SeekActiveFile(const std::string& filename, int64_t offset, util::platform::FileSeekOrigin origin); - int64_t TellFile(const std::string& filename); - virtual bool - ProcessFrameMarker(const format::BlockHeader& block_header, format::MarkerType marker_type, bool& should_break); - virtual bool ProcessStateMarker(const format::BlockHeader& block_header, format::MarkerType marker_type); + uint64_t GetFirstFrame() const { return first_frame_; } virtual void StoreBlockInfo() {} - bool run_without_decoders_ = false; - std::string absolute_path_; + bool run_without_decoders_ = false; }; GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/file_transformer.cpp b/third_party/gfxreconstruct/framework/decode/file_transformer.cpp index f426b73e0..8e6acf434 100644 --- a/third_party/gfxreconstruct/framework/decode/file_transformer.cpp +++ b/third_party/gfxreconstruct/framework/decode/file_transformer.cpp @@ -32,17 +32,13 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) FileTransformer::FileTransformer() : - input_file_(nullptr), output_file_(nullptr), bytes_read_(0), bytes_written_(0), - error_state_(kErrorInvalidFileDescriptor), loading_state_(false) + input_file_(std::make_shared()), output_file_(nullptr), bytes_read_(0), bytes_written_(0), + error_state_(kErrorInvalidFileDescriptor), loading_state_(false), pool_(util::HeapBufferPool::Create()) {} FileTransformer::~FileTransformer() { - if (input_file_ != nullptr) - { - fclose(input_file_); - } - + // Note: input_file_ is closed by destructor if (output_file_ != nullptr) { fclose(output_file_); @@ -59,11 +55,12 @@ bool FileTransformer::Initialize(const std::string& input_filename, bool success = false; - int32_t result = util::platform::FileOpen(&input_file_, input_filename.c_str(), "rb"); + GFXRECON_ASSERT(input_file_ != nullptr); + bool open_input = input_file_->Open(input_filename.c_str()); - if ((result == 0) && (input_file_ != nullptr)) + if (open_input && input_file_->IsOpen()) { - result = util::platform::FileOpen(&output_file_, output_filename.c_str(), "wb"); + int32_t result = util::platform::FileOpen(&output_file_, output_filename.c_str(), "wb"); if ((result == 0) && (output_file_ != nullptr)) { @@ -81,23 +78,37 @@ bool FileTransformer::Initialize(const std::string& input_filename, error_state_ = kErrorOpeningFile; } + if (success) + { + // We wait until after "ProcessFileHeader" as that is where compressor_ is initialized + auto err_handler = [this](BlockIOError err, const char* message) { HandleBlockReadError(err, message); }; + block_parser_ = + std::make_unique(BlockParser::ErrorHandler{ err_handler }, pool_, compressor_.get()); + success = block_parser_ != nullptr; + if (success) + { + block_parser_->SetDecompressionPolicy(BlockParser::kNever); + } + else + { + error_state_ = kErrorOpeningFile; + } + } + if (success) { error_state_ = kErrorNone; } else { - if (input_file_ != nullptr) - { - fclose(input_file_); - input_file_ = nullptr; - } + input_file_->Close(); if (output_file_ != nullptr) { fclose(output_file_); output_file_ = nullptr; } + block_parser_.reset(); } return success; @@ -141,20 +152,52 @@ bool FileTransformer::Process() } block_index_ = 0; + BlockBuffer block_buffer; + while (success) { - success = ProcessNextBlock(); - block_index_++; + BlockIOError status = block_parser_->ReadBlockBuffer(input_file_, block_buffer); + success = status == kErrorNone; + if (success) + { + // Track bytes read by the parser, since we aren't using ReadBytes here + bytes_read_ += block_buffer.Size(); + block_parser_->SetBlockIndex(block_index_); + ParsedBlock parsed_block = block_parser_->ParseBlock(block_buffer); + + // There are four states for a parsed block + // kReady and kDeferredDecompress are "Visitable" + // kUnknown is an unknown block type, passed through + // kInvalid implies !IsValid (and thus !success) + success = parsed_block.IsValid(); + if (success) + { + if (parsed_block.IsVisitable()) + { + auto visit_call = [this, &parsed_block](auto&& args) { + return this->ProcessNextBlock(parsed_block, *args); + }; + success = std::visit(visit_call, parsed_block.GetArgs()); + } + else + { + // Unknown block types are passed through unparsed + GFXRECON_ASSERT(parsed_block.IsUnknown()); + success = WriteBytes(parsed_block); + } + block_index_++; + } + } } if (!success && (error_state_ == kErrorNone)) { // If a failure occured, but no error code was set, check for a file error. - if ((input_file_ == nullptr) || (output_file_ == nullptr)) + if ((input_file_.get() == nullptr) || !input_file_->IsOpen() || (output_file_ == nullptr)) { error_state_ = kErrorInvalidFileDescriptor; } - else if (ferror(input_file_)) + else if (input_file_->IsError()) { error_state_ = kErrorReadingFile; } @@ -223,117 +266,41 @@ bool FileTransformer::ProcessFileHeader() return success; } -bool FileTransformer::ProcessNextBlock() +template +bool FileTransformer::ProcessNextBlock(ParsedBlock& parsed_block, const Args& /* args */) { - format::BlockHeader block_header; - bool success = true; + // Drop the args parameter, as Decompress mutates Args, and we don't want to + // confuse maintainers (or the compiler) by passing a const Args& that is modified. - success = ReadBlockHeader(&block_header); + bool success = true; - if (success) + // Dispatch to appropriate processing function based on Args type + if constexpr (std::is_same_v) { - if (format::RemoveCompressedBlockBit(block_header.type) == format::BlockType::kFunctionCallBlock) - { - format::ApiCallId api_call_id = format::ApiCallId::ApiCall_Unknown; - - success = ReadBytes(&api_call_id, sizeof(api_call_id)); - - if (success) - { - success = ProcessFunctionCall(block_header, api_call_id); - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read function call block header"); - } - } - else if (format::RemoveCompressedBlockBit(block_header.type) == format::BlockType::kMetaDataBlock) - { - format::MetaDataId meta_data_id = - format::MakeMetaDataId(format::ApiFamilyId::ApiFamily_None, format::MetaDataType::kUnknownMetaDataType); - - success = ReadBytes(&meta_data_id, sizeof(meta_data_id)); - - if (success) - { - success = ProcessMetaData(block_header, meta_data_id); - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read meta-data block header"); - } - } - else if (block_header.type == format::BlockType::kStateMarkerBlock) - { - format::MarkerType marker_type = format::MarkerType::kUnknownMarker; - uint64_t frame_number = 0; - - success = ReadBytes(&marker_type, sizeof(marker_type)); - - if (success) - { - success = ProcessStateMarker(block_header, marker_type); - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read state marker header"); - } - } - else if (format::RemoveCompressedBlockBit(block_header.type) == format::BlockType::kMethodCallBlock) - { - format::ApiCallId api_call_id = format::ApiCallId::ApiCall_Unknown; - - success = ReadBytes(&api_call_id, sizeof(api_call_id)); - - if (success) - { - success = ProcessMethodCall(block_header, api_call_id, block_index_); - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read method call block header"); - } - } - else - { - // Copy the block to the output file. - success = WriteBlockHeader(block_header); - - if (success) - { - success = CopyBytes(block_header.size); - - if (!success) - { - GFXRECON_LOG_ERROR("Failed to write block data"); - error_state_ = kErrorWritingBlockData; - } - } - } + success = ProcessFunctionCall(parsed_block); } - else + else if constexpr (std::is_same_v) { - if (!feof(input_file_)) - { - // If we have not hit a normal EOF condition, report an error reading the block header. - GFXRECON_LOG_ERROR("Failed to read block header"); - error_state_ = kErrorReadingBlockHeader; - } + success = ProcessMethodCall(parsed_block); } - - return success; -} - -bool FileTransformer::ReadBlockHeader(format::BlockHeader* block_header) -{ - assert(block_header != nullptr); - - if (ReadBytes(block_header, sizeof(*block_header))) + else if constexpr (std::is_same_v) { - return true; + success = ProcessStateBeginMarker(parsed_block); } - - return false; + else if constexpr (std::is_same_v) + { + success = ProcessStateEndMarker(parsed_block); + } + else if constexpr (DispatchTraits::kHasMetaDataId) + { + success = ProcessMetaData(parsed_block); // MetaData processing will revisit + } + else + { + // These block types have no transformation interface defined, pass them through directly + success = WriteBytes(parsed_block); + } + return success; } bool FileTransformer::WriteBlockHeader(const format::BlockHeader& block_header) @@ -348,50 +315,9 @@ bool FileTransformer::WriteBlockHeader(const format::BlockHeader& block_header) return true; } -bool FileTransformer::ReadParameterBuffer(size_t buffer_size) -{ - if (buffer_size > parameter_buffer_.size()) - { - parameter_buffer_.resize(buffer_size); - } - - return ReadBytes(parameter_buffer_.data(), buffer_size); -} - -bool FileTransformer::ReadCompressedParameterBuffer(size_t compressed_buffer_size, - size_t expected_uncompressed_size, - size_t* uncompressed_buffer_size) -{ - // This should only be null if initialization failed. - assert(compressor_ != nullptr); - - if (compressed_buffer_size > compressed_parameter_buffer_.size()) - { - compressed_parameter_buffer_.resize(compressed_buffer_size); - } - - if (ReadBytes(compressed_parameter_buffer_.data(), compressed_buffer_size)) - { - if (parameter_buffer_.size() < expected_uncompressed_size) - { - parameter_buffer_.resize(expected_uncompressed_size); - } - - size_t uncompressed_size = compressor_->Decompress( - compressed_buffer_size, compressed_parameter_buffer_, expected_uncompressed_size, ¶meter_buffer_); - if ((0 < uncompressed_size) && (uncompressed_size == expected_uncompressed_size)) - { - *uncompressed_buffer_size = uncompressed_size; - return true; - } - } - - return false; -} - bool FileTransformer::ReadBytes(void* buffer, size_t buffer_size) { - if (util::platform::FileRead(buffer, buffer_size, input_file_)) + if (input_file_->ReadBytes(buffer, buffer_size)) { bytes_read_ += buffer_size; return true; @@ -409,37 +335,21 @@ bool FileTransformer::WriteBytes(const void* buffer, size_t buffer_size) return false; } -bool FileTransformer::SkipBytes(uint64_t skip_size) -{ - bool success = util::platform::FileSeek(input_file_, skip_size, util::platform::FileSeekCurrent); - - if (success) - { - // These technically count as bytes read/processed. - bytes_read_ += skip_size; - } - - return success; -} - -bool FileTransformer::CopyBytes(uint64_t copy_size) +bool FileTransformer::WriteBytes(const ParsedBlock& parsed_block) { - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, copy_size); - if (ReadParameterBuffer(static_cast(copy_size))) + const util::DataSpan& block_span = parsed_block.GetBlockData(); + if (!WriteBytes(block_span.data(), block_span.size())) { - if (WriteBytes(parameter_buffer_.data(), static_cast(copy_size))) - { - return true; - } + HandleBlockWriteError(kErrorWritingBlockData, "Failed to write passthrough block data"); + return false; } - - return false; + return true; } void FileTransformer::HandleBlockReadError(Error error_code, const char* error_message) { // Report incomplete block at end of file as a warning, other I/O errors as an error. - if (feof(input_file_) && !ferror(input_file_)) + if (input_file_->IsEof() && !input_file_->IsError()) { GFXRECON_LOG_WARNING("Incomplete block at end of file"); } @@ -456,25 +366,13 @@ void FileTransformer::HandleBlockWriteError(Error error_code, const char* error_ error_state_ = error_code; } -void FileTransformer::HandleBlockCopyError(Error error_code, const char* error_message) -{ - if (ferror(output_file_)) - { - HandleBlockWriteError(error_code, error_message); - } - else - { - HandleBlockReadError(error_code, error_message); - } -} - bool FileTransformer::CreateCompressor(format::CompressionType type, std::unique_ptr* compressor) { assert(compressor != nullptr); if (type != format::CompressionType::kNone) { - (*compressor) = std::unique_ptr(format::CreateCompressor(type)); + compressor->reset(format::CreateCompressor(type)); if ((*compressor) == nullptr) { @@ -504,111 +402,35 @@ bool FileTransformer::WriteFileHeader(const format::FileHeader& return success; } -bool FileTransformer::ProcessFunctionCall(const format::BlockHeader& block_header, format::ApiCallId call_id) +// Default Behavior for most blocks is pass-through +bool FileTransformer::ProcessFunctionCall(ParsedBlock& parsed_block) { - // Copy block data from old file to new file. - if (!WriteBlockHeader(block_header)) - { - return false; - } - - if (!WriteBytes(&call_id, sizeof(call_id))) - { - HandleBlockWriteError(kErrorWritingBlockHeader, "Failed to write function call block header"); - return false; - } - - if (!CopyBytes(block_header.size - sizeof(call_id))) - { - HandleBlockCopyError(kErrorCopyingBlockData, "Failed to copy function call block data"); - return false; - } - - return true; + return WriteBytes(parsed_block); } -bool FileTransformer::ProcessMethodCall(const format::BlockHeader& block_header, - format::ApiCallId call_id, - uint64_t block_index) +bool FileTransformer::ProcessMethodCall(ParsedBlock& parsed_block) { - // Copy block data from old file to new file. - if (!WriteBlockHeader(block_header)) - { - return false; - } - - if (!WriteBytes(&call_id, sizeof(call_id))) - { - HandleBlockWriteError(kErrorWritingBlockHeader, "Failed to write method call block header"); - return false; - } - - if (!CopyBytes(block_header.size - sizeof(call_id))) - { - HandleBlockCopyError(kErrorCopyingBlockData, "Failed to copy method call block data"); - return false; - } - - return true; + return WriteBytes(parsed_block); } -bool FileTransformer::ProcessMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id) +// Because of the numerous Args types for MetaDataBlock, any override of ProcessMetaData +// will need to use the visitor pattern to specialize operations on the kHasMetaDataId +// Arg type current in the DispatchArgs variant +bool FileTransformer::ProcessMetaData(ParsedBlock& parsed_block) { - // Copy block data from old file to new file. - if (!WriteBlockHeader(block_header)) - { - return false; - } - - if (!WriteBytes(&meta_data_id, sizeof(meta_data_id))) - { - HandleBlockWriteError(kErrorWritingBlockHeader, "Failed to write meta-data block header"); - return false; - } - - if (!CopyBytes(block_header.size - sizeof(meta_data_id))) - { - HandleBlockCopyError(kErrorCopyingBlockData, "Failed to copy meta-data block data"); - return false; - } - - return true; + return WriteBytes(parsed_block); } -bool FileTransformer::ProcessStateMarker(const format::BlockHeader& block_header, format::MarkerType marker_type) +bool FileTransformer::ProcessStateBeginMarker(ParsedBlock& parsed_block) { - // Copy marker data from old file to new file. - uint64_t frame_number = 0; - - if (ReadBytes(&frame_number, sizeof(frame_number))) - { - if (marker_type == format::kBeginMarker) - { - loading_state_ = true; - } - else if (marker_type == format::kEndMarker) - { - loading_state_ = false; - } - - format::Marker marker; - marker.header = block_header; - marker.marker_type = marker_type; - marker.frame_number = frame_number; - - if (!WriteBytes(&marker, sizeof(marker))) - { - HandleBlockWriteError(kErrorWritingBlockData, "Failed to write state marker data"); - return false; - } - } - else - { - HandleBlockWriteError(kErrorReadingBlockData, "Failed to read state marker data"); - return false; - } + loading_state_ = true; + return WriteBytes(parsed_block); +} - return true; +bool FileTransformer::ProcessStateEndMarker(ParsedBlock& parsed_block) +{ + loading_state_ = false; + return WriteBytes(parsed_block); } GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/file_transformer.h b/third_party/gfxreconstruct/framework/decode/file_transformer.h index 34eee6fac..1d640e883 100644 --- a/third_party/gfxreconstruct/framework/decode/file_transformer.h +++ b/third_party/gfxreconstruct/framework/decode/file_transformer.h @@ -23,6 +23,7 @@ #ifndef GFXRECON_DECODE_FILE_TRANSFORMER_H #define GFXRECON_DECODE_FILE_TRANSFORMER_H +#include "decode/block_parser.h" #include "format/format.h" #include "util/defines.h" #include "util/compressor.h" @@ -37,31 +38,6 @@ GFXRECON_BEGIN_NAMESPACE(decode) class FileTransformer { - public: - enum Error : int32_t - { - kErrorNone = 0, - kErrorInvalidFileDescriptor = -1, - kErrorOpeningFile = -2, - kErrorReadingFile = -3, - kErrorReadingFileHeader = -4, - kErrorReadingBlockHeader = -5, - kErrorReadingCompressedBlockHeader = -6, - kErrorReadingBlockData = -7, - kErrorReadingCompressedBlockData = -8, - kErrorInvalidFourCC = -9, - kErrorUnsupportedCompressionType = -10, - kErrorSeekingFile = -11, - kErrorWritingFile = -12, - kErrorWritingFileHeader = -13, - kErrorWritingBlockHeader = -14, - kErrorWritingCompressedBlockHeader = -15, - kErrorWritingBlockData = -16, - kErrorWritingCompressedBlockData = -17, - kErrorCopyingBlockData = -18, - kErrorUnsupportedBlockType = -19 - }; - public: FileTransformer(); @@ -80,17 +56,23 @@ class FileTransformer uint64_t GetNumBytesWritten() const { return bytes_written_; } - Error GetErrorState() const { return error_state_; } + BlockIOError GetErrorState() const { return error_state_; } + + using Error = BlockIOError; protected: + // ProcessMetaData blocks need more than bool to report back from their visit. + enum VisitResult + { + kError = 0, + kSuccess, + kNeedsPassthrough, + }; + bool IsFileValid(FILE* fd) const { return ((fd != nullptr) && !feof(fd) && !ferror(fd)); } bool IsLoadingState() const { return loading_state_; } - std::vector& GetParameterBuffer() { return parameter_buffer_; } - - const std::vector& GetParameterBuffer() const { return parameter_buffer_; } - std::vector& GetCompressedParameterBuffer() { return compressed_parameter_buffer_; } const std::vector& GetCompressedParameterBuffer() const { return compressed_parameter_buffer_; } @@ -101,64 +83,52 @@ class FileTransformer bool WriteBlockHeader(const format::BlockHeader& block_header); - bool ReadParameterBuffer(size_t buffer_size); - - bool ReadCompressedParameterBuffer(size_t compressed_buffer_size, - size_t expected_uncompressed_size, - size_t* uncompressed_buffer_size); - bool ReadBytes(void* buffer, size_t buffer_size); bool WriteBytes(const void* buffer, size_t buffer_size); - - bool SkipBytes(uint64_t skip_size); - - bool CopyBytes(uint64_t copy_size); + bool WriteBytes(const ParsedBlock& parsed_block); void HandleBlockReadError(Error error_code, const char* error_message); void HandleBlockWriteError(Error error_code, const char* error_message); - void HandleBlockCopyError(Error error_code, const char* error_message); - bool CreateCompressor(format::CompressionType type, std::unique_ptr* compressor); virtual bool WriteFileHeader(const format::FileHeader& header, const std::vector& options); - virtual bool ProcessFunctionCall(const format::BlockHeader& block_header, format::ApiCallId call_id); - - virtual bool - ProcessMethodCall(const format::BlockHeader& block_header, format::ApiCallId call_id, uint64_t block_index = 0); - - virtual bool ProcessMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id); - - virtual bool ProcessStateMarker(const format::BlockHeader& block_header, format::MarkerType marker_type); + virtual bool ProcessFunctionCall(ParsedBlock& parsed_block); + virtual bool ProcessMethodCall(ParsedBlock& parsed_block); + virtual bool ProcessMetaData(ParsedBlock& parsed_block); + virtual bool ProcessStateBeginMarker(ParsedBlock& parsed_block); + virtual bool ProcessStateEndMarker(ParsedBlock& parsed_block); uint64_t GetCurrentBlockIndex() { return block_index_; } + BlockParser& GetBlockParser() { return *block_parser_; } + private: bool ProcessFileHeader(); - bool ProcessNextBlock(); - - bool ReadBlockHeader(format::BlockHeader* block_header); + template + bool ProcessNextBlock(ParsedBlock& parsed_block, const Args& args); private: - std::string input_filename_; - std::string output_filename_; - std::string tool_; - FILE* input_file_; - FILE* output_file_; - std::vector file_options_; - format::EnabledOptions enabled_options_; - uint64_t bytes_read_; - uint64_t bytes_written_; - Error error_state_; - bool loading_state_; - std::vector parameter_buffer_; - std::vector compressed_parameter_buffer_; - std::unique_ptr compressor_; - uint64_t block_index_{ 0 }; + std::string input_filename_; + std::string output_filename_; + std::string tool_; + FileInputStreamPtr input_file_; + FILE* output_file_; + std::vector file_options_; + format::EnabledOptions enabled_options_; + uint64_t bytes_read_; + uint64_t bytes_written_; + Error error_state_; + bool loading_state_; + std::vector compressed_parameter_buffer_; + std::unique_ptr compressor_; + std::unique_ptr block_parser_; + uint64_t block_index_{ 0 }; + BufferPool pool_; }; GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/info_consumer.h b/third_party/gfxreconstruct/framework/decode/info_consumer.h index 1cd4b87d9..30202862e 100644 --- a/third_party/gfxreconstruct/framework/decode/info_consumer.h +++ b/third_party/gfxreconstruct/framework/decode/info_consumer.h @@ -35,6 +35,9 @@ class InfoConsumer public: InfoConsumer() {} InfoConsumer(bool short_version) { short_version_ = short_version; } + struct NoMaxBlockTag + {}; + InfoConsumer(const NoMaxBlockTag&) { no_max_block_ = true; } const std::string GetAppExeName() const { return exe_info.AppName; } const uint32_t* GetAppVersion() const { return exe_info.AppVersion; } const char* GetCompanyName() const { return exe_info.CompanyName; } @@ -46,7 +49,7 @@ class InfoConsumer const char* GetProductVersion() const { return exe_info.ProductVersion; } const std::vector& GetEnvironmentVariables() const { return env_vars; } - void Process_ExeFileInfo(gfxrecon::util::filepath::FileInfo& info) + void Process_ExeFileInfo(const gfxrecon::util::filepath::FileInfo& info) { exe_info = info; found_exe_info_ = true; @@ -65,7 +68,11 @@ class InfoConsumer bool IsComplete(uint64_t current_block_index) { - if (short_version_ == true) + if (no_max_block_) + { + return false; + } + else if (short_version_ == true) { return (current_block_index >= MaxBlockIdx) || (found_exe_info_ && found_driver_info_); } @@ -75,7 +82,8 @@ class InfoConsumer } } - void Process_SetEnvironmentVariablesCommand(format::SetEnvironmentVariablesCommand& header, const char* env_string) + void Process_SetEnvironmentVariablesCommand(const format::SetEnvironmentVariablesCommand& header, + const char* env_string) { env_vars = util::strings::SplitString(std::string_view(env_string), format::kEnvironmentStringDelimeter); } @@ -84,6 +92,7 @@ class InfoConsumer static int const MaxBlockIdx = 50; char driver_info[gfxrecon::util::filepath::kMaxDriverInfoSize] = {}; bool short_version_{ false }; + bool no_max_block_{ false }; bool found_driver_info_{ false }; gfxrecon::util::filepath::FileInfo exe_info = {}; bool found_exe_info_{ false }; diff --git a/third_party/gfxreconstruct/framework/decode/info_decoder.cpp b/third_party/gfxreconstruct/framework/decode/info_decoder.cpp index 53d08aab6..61d15f77c 100644 --- a/third_party/gfxreconstruct/framework/decode/info_decoder.cpp +++ b/third_party/gfxreconstruct/framework/decode/info_decoder.cpp @@ -32,7 +32,7 @@ bool InfoDecoder::IsComplete(uint64_t block_index) return decode::IsComplete(consumers_, block_index); } -void InfoDecoder::DispatchExeFileInfo(format::ThreadId thread_id, format::ExeFileInfoBlock& info) +void InfoDecoder::DispatchExeFileInfo(format::ThreadId thread_id, const format::ExeFileInfoBlock& info) { GFXRECON_UNREFERENCED_PARAMETER(thread_id); @@ -42,7 +42,7 @@ void InfoDecoder::DispatchExeFileInfo(format::ThreadId thread_id, format::ExeFil } } -void InfoDecoder::DispatchDriverInfo(format::ThreadId thread_id, format::DriverInfoBlock& info) +void InfoDecoder::DispatchDriverInfo(format::ThreadId thread_id, const format::DriverInfoBlock& info) { GFXRECON_UNREFERENCED_PARAMETER(thread_id); @@ -52,8 +52,8 @@ void InfoDecoder::DispatchDriverInfo(format::ThreadId thread_id, format::DriverI } } -void InfoDecoder::DispatchSetEnvironmentVariablesCommand(format::SetEnvironmentVariablesCommand& header, - const char* env_string) +void InfoDecoder::DispatchSetEnvironmentVariablesCommand(const format::SetEnvironmentVariablesCommand& header, + const char* env_string) { for (auto consumer : consumers_) { diff --git a/third_party/gfxreconstruct/framework/decode/info_decoder.h b/third_party/gfxreconstruct/framework/decode/info_decoder.h index dc88b77db..72559855f 100644 --- a/third_party/gfxreconstruct/framework/decode/info_decoder.h +++ b/third_party/gfxreconstruct/framework/decode/info_decoder.h @@ -45,9 +45,9 @@ class InfoDecoder : public ApiDecoder virtual void WaitIdle() override{}; - virtual void DispatchDriverInfo(format::ThreadId thread_id, format::DriverInfoBlock& info) override; + virtual void DispatchDriverInfo(format::ThreadId thread_id, const format::DriverInfoBlock& info) override; - virtual void DispatchExeFileInfo(format::ThreadId thread_id, format::ExeFileInfoBlock& info) override; + virtual void DispatchExeFileInfo(format::ThreadId thread_id, const format::ExeFileInfoBlock& info) override; void AddConsumer(InfoConsumer* consumer) { consumers_.push_back(consumer); } @@ -143,6 +143,13 @@ class InfoDecoder : public ApiDecoder uint64_t address) override {} + void DispatchSetOpaqueDescriptorDataCommand(format::ThreadId thread_id, + format::HandleId device_id, + format::HandleId object_id, + uint32_t data_size, + const uint8_t* data) override + {} + virtual void DispatchSetRayTracingShaderGroupHandlesCommand(format::ThreadId thread_id, format::HandleId device_id, format::HandleId buffer_id, @@ -188,13 +195,13 @@ class InfoDecoder : public ApiDecoder {} virtual void DispatchInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) override + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) override {} - virtual void DispatchSetEnvironmentVariablesCommand(format::SetEnvironmentVariablesCommand& header, - const char* env_string) override; + virtual void DispatchSetEnvironmentVariablesCommand(const format::SetEnvironmentVariablesCommand& header, + const char* env_string) override; private: std::vector consumers_; diff --git a/third_party/gfxreconstruct/framework/decode/json_writer.cpp b/third_party/gfxreconstruct/framework/decode/json_writer.cpp index 5dfc0ade1..0ad0d9c91 100644 --- a/third_party/gfxreconstruct/framework/decode/json_writer.cpp +++ b/third_party/gfxreconstruct/framework/decode/json_writer.cpp @@ -113,7 +113,10 @@ void JsonWriter::WriteBlockEnd() /// while the main thread gets on with building the tree for the next block. // Dominates profiling (2/2): const std::string block = - json_data_.dump(json_options_.format == util::JsonFormat::JSONL ? -1 : util::kJsonIndentWidth); + json_data_.dump(json_options_.format == util::JsonFormat::JSONL ? -1 : util::kJsonIndentWidth, + ' ', + false, + nlohmann::json::error_handler_t::replace); Write(*os_, block); os_->Flush(); } @@ -224,7 +227,7 @@ void RepresentBinaryFile(JsonWriter& writer, { std::string filename = writer.GenerateFilename(filename_base); std::string basename = gfxrecon::util::filepath::Join(json_options.data_sub_dir, filename); - std::string filepath = gfxrecon::util::filepath::Join(json_options.root_dir, basename); + std::string filepath = gfxrecon::util::filepath::Join(json_options.root_dir, filename); if (writer.WriteBinaryFile(filepath, data_size, data)) { FieldToJson(jdata, basename, json_options); diff --git a/third_party/gfxreconstruct/framework/decode/mark_injected_commands.cpp b/third_party/gfxreconstruct/framework/decode/mark_injected_commands.cpp index 72b1acf1a..a402cde7b 100644 --- a/third_party/gfxreconstruct/framework/decode/mark_injected_commands.cpp +++ b/third_party/gfxreconstruct/framework/decode/mark_injected_commands.cpp @@ -24,6 +24,7 @@ #include "util/defines.h" #include "util/logging.h" #include "mark_injected_commands.h" +#include "encode/capture_manager.h" GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) @@ -57,6 +58,10 @@ void BeginInjectedCommands() injecting_api_calls_g = true; #endif + // When replay is injecting commands, force Handle ID generation to generate a new, default ID instead of using any + // Handle IDs that were specified using CommonCaptureManager::PushUniqueId(). + encode::CommonCaptureManager::SetForceDefaultUniqueId(true); + BeginInjectCommands_fp(InjectCommandsData_ptr); } @@ -69,6 +74,8 @@ void EndInjectedCommands() #endif EndInjectCommands_fp(InjectCommandsData_ptr); + + encode::CommonCaptureManager::SetForceDefaultUniqueId(false); } GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/metadata_consumer_base.h b/third_party/gfxreconstruct/framework/decode/metadata_consumer_base.h index 8c9ddb111..bbc597e97 100644 --- a/third_party/gfxreconstruct/framework/decode/metadata_consumer_base.h +++ b/third_party/gfxreconstruct/framework/decode/metadata_consumer_base.h @@ -37,7 +37,7 @@ GFXRECON_BEGIN_NAMESPACE(decode) class MetadataConsumerBase { public: - virtual void Process_ExeFileInfo(util::filepath::FileInfo& info_record) {} + virtual void Process_ExeFileInfo(const util::filepath::FileInfo& info_record) {} virtual void ProcessDisplayMessageCommand(const std::string& message) {} virtual void ProcessFillMemoryCommand(uint64_t memory_id, uint64_t offset, uint64_t size, const uint8_t* data) {} virtual void @@ -74,9 +74,17 @@ class MetadataConsumerBase const std::vector& memory_types, const std::vector& memory_heaps) {} + virtual void ProcessSetOpaqueAddressCommand(format::HandleId device_id, format::HandleId object_id, uint64_t address) {} + + virtual void ProcessSetOpaqueDescriptorDataCommand(format::HandleId device_id, + format::HandleId object_id, + uint32_t data_size, + const uint8_t* data) + {} + virtual void ProcessSetRayTracingShaderGroupHandlesCommand(format::HandleId device_id, format::HandleId pipeline_id, size_t data_size, @@ -87,9 +95,11 @@ class MetadataConsumerBase uint32_t last_presented_image, const std::vector& image_state) {} + virtual void - ProcessBeginResourceInitCommand(format::HandleId device_id, uint64_t max_resource_size, uint64_t max_copy_size) + ProcessBeginResourceInitCommand(format::HandleId device_id, uint64_t total_copy_size, uint64_t max_copy_size) {} + virtual void ProcessEndResourceInitCommand(format::HandleId device_id) {} virtual void ProcessInitBufferCommand(format::HandleId device_id, format::HandleId buffer_id, @@ -111,22 +121,24 @@ class MetadataConsumerBase virtual void SetCurrentBlockIndex(uint64_t block_index) {} - virtual void ProcessBuildVulkanAccelerationStructuresMetaCommand( + virtual void ProcessVulkanBuildAccelerationStructuresCommand( format::HandleId device_id, uint32_t info_count, StructPointerDecoder* geometry_infos, StructPointerDecoder* range_infos) {} - virtual void ProcessCopyVulkanAccelerationStructuresMetaCommand( + virtual void ProcessVulkanCopyAccelerationStructuresCommand( format::HandleId device_id, StructPointerDecoder* copy_infos) {} - virtual void ProcessVulkanAccelerationStructuresWritePropertiesMetaCommand( - format::HandleId device_id, VkQueryType query_type, format::HandleId acceleration_structure_id) + virtual void ProcessVulkanWriteAccelerationStructuresPropertiesCommand(format::HandleId device_id, + VkQueryType query_type, + format::HandleId acceleration_structure_id) {} - virtual void ProcessViewRelativeLocation(format::ThreadId thread_id, format::ViewRelativeLocation& location){}; + virtual void ProcessViewRelativeLocation(format::ThreadId thread_id, const format::ViewRelativeLocation& location) { + }; virtual void ProcessInitializeMetaCommand(const format::InitializeMetaCommand& command_header, const uint8_t* parameters_data) diff --git a/third_party/gfxreconstruct/framework/decode/metadata_json_consumer.h b/third_party/gfxreconstruct/framework/decode/metadata_json_consumer.h index 090fb0ea4..f32274d94 100644 --- a/third_party/gfxreconstruct/framework/decode/metadata_json_consumer.h +++ b/third_party/gfxreconstruct/framework/decode/metadata_json_consumer.h @@ -25,9 +25,10 @@ #ifndef GFXRECON_DECODE_METADATA_JSON_CONSUMER_H #define GFXRECON_DECODE_METADATA_JSON_CONSUMER_H +#include "decode/custom_vulkan_struct_to_json.h" +#include "format/format_json.h" #include "util/defines.h" #include "util/file_path.h" -#include "format/format_json.h" GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) @@ -80,7 +81,7 @@ class MetadataJsonConsumer : public Base WriteBlockEnd(); } - virtual void Process_ExeFileInfo(gfxrecon::util::filepath::FileInfo& info) override + virtual void Process_ExeFileInfo(const gfxrecon::util::filepath::FileInfo& info) override { const util::JsonOptions& json_options = GetOptions(); auto& jdata = WriteMetaCommandStart("ExeFileInfo"); @@ -188,6 +189,20 @@ class MetadataJsonConsumer : public Base WriteBlockEnd(); } + void ProcessSetOpaqueDescriptorDataCommand(format::HandleId device_id, + format::HandleId object_id, + uint32_t data_size, + const uint8_t* data) override + { + const JsonOptions& json_options = GetJsonOptions(); + auto& jdata = WriteMetaCommandStart("SetOpaqueDescriptorDataCommand"); + HandleToJson(jdata["device_id"], device_id, json_options); + HandleToJson(jdata["object_id"], object_id, json_options); + FieldToJson(jdata["data_size"], data_size, json_options); + RepresentBinaryFile(*(this->writer_), jdata[format::kNameData], "opaque_descriptor_data.bin", data_size, data); + WriteBlockEnd(); + } + virtual void ProcessSetRayTracingShaderGroupHandlesCommand(format::HandleId device_id, format::HandleId pipeline_id, size_t data_size, @@ -224,9 +239,7 @@ class MetadataJsonConsumer : public Base const util::JsonOptions& json_options = GetJsonOptions(); auto& jdata = WriteMetaCommandStart("InitializeMetaCommand"); HandleToJson(jdata["MetaCommand_id"], command_header.capture_id, json_options); - FieldToJson(jdata["InitializationParametersDataSizeInBytes"], - command_header.initialization_parameters_data_size, - json_options); + FieldToJson(jdata["InitializationParametersDataSizeInBytes"], command_header.data_size, json_options); WriteBlockEnd(); } @@ -237,6 +250,8 @@ class MetadataJsonConsumer : public Base const JsonOptions& json_options = GetJsonOptions(); auto& jdata = WriteMetaCommandStart("BeginResourceInitCommand"); HandleToJson(jdata["device_id"], device_id, json_options); + + // TODO: should be "total_copy_size" FieldToJson(jdata["max_resource_size"], max_resource_size, json_options); FieldToJson(jdata["max_copy_size"], max_copy_size, json_options); WriteBlockEnd(); @@ -283,8 +298,8 @@ class MetadataJsonConsumer : public Base WriteBlockEnd(); } - virtual void ProcessSetEnvironmentVariablesCommand(format::SetEnvironmentVariablesCommand& header, - const char* env_string) override + virtual void ProcessSetEnvironmentVariablesCommand(const format::SetEnvironmentVariablesCommand& header, + const char* env_string) override { const JsonOptions& json_options = GetJsonOptions(); auto& json_data = WriteMetaCommandStart("SetEnvironmentVariablesCommand"); @@ -314,6 +329,40 @@ class MetadataJsonConsumer : public Base WriteBlockEnd(); } + virtual void ProcessVulkanBuildAccelerationStructuresCommand( + format::HandleId device_id, + uint32_t info_count, + StructPointerDecoder* geometry_infos, + StructPointerDecoder* range_infos) override + { + auto& jdata = WriteMetaCommandStart("ProcessVulkanBuildAccelerationStructuresCommand"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata["infoCount"], info_count, json_options); + FieldToJson(jdata["pInfos"], geometry_infos, json_options); + FieldToJson(jdata["ppBuildRangeInfos"], range_infos, json_options); + WriteBlockEnd(); + } + + void ProcessVulkanCopyAccelerationStructuresCommand( + format::HandleId device_id, + StructPointerDecoder* copy_infos) override + { + auto& jdata = WriteMetaCommandStart("VulkanCopyAccelerationStructuresCommand"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata["pInfo"], copy_infos, json_options); + WriteBlockEnd(); + } + + virtual void ProcessVulkanWriteAccelerationStructuresPropertiesCommand( + format::HandleId device_id, VkQueryType query_type, format::HandleId acceleration_structure_id) override + { + auto& jdata = WriteMetaCommandStart("VulkanWriteAccelerationStructuresPropertiesCommand"); + const JsonOptions& json_options = GetJsonOptions(); + HandleToJson(jdata["device_id"], device_id, json_options); + FieldToJson(jdata["queryType"], query_type, json_options); + HandleToJson(jdata["acceleration_structure_id"], acceleration_structure_id, json_options); + } + /// @} }; diff --git a/third_party/gfxreconstruct/framework/decode/openxr_decoder_base.cpp b/third_party/gfxreconstruct/framework/decode/openxr_decoder_base.cpp index cf2d95ca1..59b8e2b73 100644 --- a/third_party/gfxreconstruct/framework/decode/openxr_decoder_base.cpp +++ b/third_party/gfxreconstruct/framework/decode/openxr_decoder_base.cpp @@ -82,7 +82,8 @@ void OpenXrDecoderBase::SetCurrentBlockIndex(uint64_t block_index) } } -void OpenXrDecoderBase::DispatchViewRelativeLocation(format::ThreadId thread_id, format::ViewRelativeLocation& location) +void OpenXrDecoderBase::DispatchViewRelativeLocation(format::ThreadId thread_id, + const format::ViewRelativeLocation& location) { for (auto consumer : consumers_) { diff --git a/third_party/gfxreconstruct/framework/decode/openxr_decoder_base.h b/third_party/gfxreconstruct/framework/decode/openxr_decoder_base.h index c22322154..d8d71a219 100644 --- a/third_party/gfxreconstruct/framework/decode/openxr_decoder_base.h +++ b/third_party/gfxreconstruct/framework/decode/openxr_decoder_base.h @@ -86,8 +86,8 @@ class OpenXrDecoderBase : public ApiDecoder virtual void SetCurrentBlockIndex(uint64_t block_index) override; - virtual void DispatchViewRelativeLocation(format::ThreadId thread_id, - format::ViewRelativeLocation& location) override; + virtual void DispatchViewRelativeLocation(format::ThreadId thread_id, + const format::ViewRelativeLocation& location) override; // Unused stubs virtual void DecodeFunctionCall(format::ApiCallId call_id, @@ -95,8 +95,8 @@ class OpenXrDecoderBase : public ApiDecoder const uint8_t* parameter_buffer, size_t buffer_size) override {} - virtual void DispatchDriverInfo(format::ThreadId thread_id, format::DriverInfoBlock& info) override {} - virtual void DispatchExeFileInfo(format::ThreadId thread_id, format::ExeFileInfoBlock& info) override {} + virtual void DispatchDriverInfo(format::ThreadId thread_id, const format::DriverInfoBlock& info) override {} + virtual void DispatchExeFileInfo(format::ThreadId thread_id, const format::ExeFileInfoBlock& info) override {} virtual void DispatchFillMemoryCommand( format::ThreadId thread_id, uint64_t memory_id, uint64_t offset, uint64_t size, const uint8_t* data) override {} @@ -154,6 +154,12 @@ class OpenXrDecoderBase : public ApiDecoder format::HandleId object_id, uint64_t address) override {} + virtual void DispatchSetOpaqueDescriptorDataCommand(format::ThreadId thread_id, + format::HandleId device_id, + format::HandleId object_id, + uint32_t data_size, + const uint8_t* data) override + {} virtual void DispatchSetRayTracingShaderGroupHandlesCommand(format::ThreadId thread_id, format::HandleId device_id, format::HandleId buffer_id, @@ -192,9 +198,9 @@ class OpenXrDecoderBase : public ApiDecoder const uint8_t* data) override {} virtual void DispatchInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) override + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) override {} protected: diff --git a/third_party/gfxreconstruct/framework/decode/openxr_json_consumer_base.cpp b/third_party/gfxreconstruct/framework/decode/openxr_json_consumer_base.cpp index eab7b8bbd..9504f6ad6 100644 --- a/third_party/gfxreconstruct/framework/decode/openxr_json_consumer_base.cpp +++ b/third_party/gfxreconstruct/framework/decode/openxr_json_consumer_base.cpp @@ -325,8 +325,8 @@ void OpenXrExportJsonConsumerBase::Process_xrPollEvent(const ApiCallInfo& WriteBlockEnd(); } -void OpenXrExportJsonConsumerBase::ProcessViewRelativeLocation(format::ThreadId thread_id, - format::ViewRelativeLocation& location) +void OpenXrExportJsonConsumerBase::ProcessViewRelativeLocation(format::ThreadId thread_id, + const format::ViewRelativeLocation& location) { const util::JsonOptions& json_options = writer_->GetOptions(); // TODO: Fold this into a override for WriteMetaCommandStart if we add many more meta data blocks diff --git a/third_party/gfxreconstruct/framework/decode/openxr_json_consumer_base.h b/third_party/gfxreconstruct/framework/decode/openxr_json_consumer_base.h index fd11f2e46..359b1ad93 100644 --- a/third_party/gfxreconstruct/framework/decode/openxr_json_consumer_base.h +++ b/third_party/gfxreconstruct/framework/decode/openxr_json_consumer_base.h @@ -128,7 +128,7 @@ class OpenXrExportJsonConsumerBase : public OpenXrConsumer XrResult returnValue, format::HandleId instance, StructPointerDecoder* eventData) override; - void ProcessViewRelativeLocation(format::ThreadId thread_id, format::ViewRelativeLocation& location) override; + void ProcessViewRelativeLocation(format::ThreadId thread_id, const format::ViewRelativeLocation& location) override; uint32_t submit_index_{ 0 }; // index of submissions across the trace diff --git a/third_party/gfxreconstruct/framework/decode/openxr_replay_common_state.h b/third_party/gfxreconstruct/framework/decode/openxr_replay_common_state.h index b9d5ad0f1..4b5336509 100644 --- a/third_party/gfxreconstruct/framework/decode/openxr_replay_common_state.h +++ b/third_party/gfxreconstruct/framework/decode/openxr_replay_common_state.h @@ -1,59 +1,59 @@ -/* -** Copyright (c) 2024 LunarG, Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and associated documentation files (the "Software"), -** to deal in the Software without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Software, and to permit persons to whom the -** Software is furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -** DEALINGS IN THE SOFTWARE. -*/ - -#ifndef GFXRECON_DECODE_OPENXR_REPLAY_COMMON_STATE_H -#define GFXRECON_DECODE_OPENXR_REPLAY_COMMON_STATE_H - -#if ENABLE_OPENXR_SUPPORT -#include "application/application.h" -#include "decode/vulkan_replay_consumer_base.h" - -GFXRECON_BEGIN_NAMESPACE(gfxrecon) -GFXRECON_BEGIN_NAMESPACE(decode) -GFXRECON_BEGIN_NAMESPACE(openxr) - -// Supported graphics bindings for OpenXr replay -enum class GraphicsBindingType -{ - kVulkan, - kUnknown -}; - -template -class BaseReplayData -{ - public: - using HandleType = T; - BaseReplayData(HandleType handle) : handle_(handle) {} - HandleType GetHandle() const { return handle_; } - - protected: - HandleType handle_; -}; - -GFXRECON_END_NAMESPACE(openxr) -GFXRECON_END_NAMESPACE(decode) -GFXRECON_END_NAMESPACE(gfxrecon) - -#endif // ENABLE_OPENXR_SUPPORT - -#endif // GFXRECON_DECODE_OPENXR_REPLAY_COMMON_STATE_H +/* +** Copyright (c) 2024 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_DECODE_OPENXR_REPLAY_COMMON_STATE_H +#define GFXRECON_DECODE_OPENXR_REPLAY_COMMON_STATE_H + +#if ENABLE_OPENXR_SUPPORT +#include "application/application.h" +#include "decode/vulkan_replay_consumer_base.h" + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) +GFXRECON_BEGIN_NAMESPACE(openxr) + +// Supported graphics bindings for OpenXr replay +enum class GraphicsBindingType +{ + kVulkan, + kUnknown +}; + +template +class BaseReplayData +{ + public: + using HandleType = T; + BaseReplayData(HandleType handle) : handle_(handle) {} + HandleType GetHandle() const { return handle_; } + + protected: + HandleType handle_; +}; + +GFXRECON_END_NAMESPACE(openxr) +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // ENABLE_OPENXR_SUPPORT + +#endif // GFXRECON_DECODE_OPENXR_REPLAY_COMMON_STATE_H diff --git a/third_party/gfxreconstruct/framework/decode/openxr_replay_consumer_base.cpp b/third_party/gfxreconstruct/framework/decode/openxr_replay_consumer_base.cpp index 86f88515d..2e826dcb6 100644 --- a/third_party/gfxreconstruct/framework/decode/openxr_replay_consumer_base.cpp +++ b/third_party/gfxreconstruct/framework/decode/openxr_replay_consumer_base.cpp @@ -1502,8 +1502,8 @@ void OpenXrReplayConsumerBase::Process_xrReleaseSwapchainImage( CheckResult("xrReleaseSwapchainImage", returnValue, replay_result, call_info); } -void OpenXrReplayConsumerBase::ProcessViewRelativeLocation(format::ThreadId thread_id, - format::ViewRelativeLocation& location) +void OpenXrReplayConsumerBase::ProcessViewRelativeLocation(format::ThreadId thread_id, + const format::ViewRelativeLocation& location) { // Create a proxy space for a given space_id at a view relative location XrSession replay_session = diff --git a/third_party/gfxreconstruct/framework/decode/openxr_replay_consumer_base.h b/third_party/gfxreconstruct/framework/decode/openxr_replay_consumer_base.h index eaeb1ff05..50935e5d5 100644 --- a/third_party/gfxreconstruct/framework/decode/openxr_replay_consumer_base.h +++ b/third_party/gfxreconstruct/framework/decode/openxr_replay_consumer_base.h @@ -161,7 +161,7 @@ class OpenXrReplayConsumerBase : public OpenXrConsumer format::HandleId swapchain, StructPointerDecoder* releaseInfo) override; - void ProcessViewRelativeLocation(format::ThreadId thread_id, format::ViewRelativeLocation& location) override; + void ProcessViewRelativeLocation(format::ThreadId thread_id, const format::ViewRelativeLocation& location) override; virtual void Process_xrEndFrame(const ApiCallInfo& call_info, XrResult returnValue, diff --git a/third_party/gfxreconstruct/framework/decode/openxr_replay_session_state.cpp b/third_party/gfxreconstruct/framework/decode/openxr_replay_session_state.cpp index 69de5d207..48d0dec8b 100644 --- a/third_party/gfxreconstruct/framework/decode/openxr_replay_session_state.cpp +++ b/third_party/gfxreconstruct/framework/decode/openxr_replay_session_state.cpp @@ -1,154 +1,154 @@ -/* -** Copyright (c) 2024 LunarG, Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and associated documentation files (the "Software"), -** to deal in the Software without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Software, and to permit persons to whom the -** Software is furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -** DEALINGS IN THE SOFTWARE. -*/ - -#if ENABLE_OPENXR_SUPPORT - -#include "decode/openxr_replay_session_state.h" -#include "decode/openxr_replay_swapchain_state.h" -#include "decode/openxr_object_info.h" - -GFXRECON_BEGIN_NAMESPACE(gfxrecon) -GFXRECON_BEGIN_NAMESPACE(decode) -GFXRECON_BEGIN_NAMESPACE(openxr) - -VulkanGraphicsBinding::VulkanGraphicsBinding(VulkanReplayConsumerBase& vulkan_consumer, - const Decoded_XrGraphicsBindingVulkanKHR& xr_binding) : - XrGraphicsBindingVulkanKHR(*xr_binding.decoded_value), - vulkan_consumer(&vulkan_consumer), instance_table(vulkan_consumer.GetInstanceTable(physicalDevice)), - device_table(vulkan_consumer.GetDeviceTable(device)), instance_id(xr_binding.instance), device_id(xr_binding.device) -{ - next = nullptr; // We don't have a safe (deep) copy of the original so stub out the copies downchain pointer - - // Touch up the queue - device_table->GetDeviceQueue(device, queueFamilyIndex, queueIndex, &queue); -} - -XrResult VulkanGraphicsBinding::ResetCommandBuffer(VulkanSwapchainInfo::ProxyImage& proxy) const -{ - XrResult xr_result = XR_SUCCESS; - uint32_t kTimeout = std::numeric_limits::max(); // WIP: Better timeout and timeout reporting - VkResult vk_result = device_table->WaitForFences(device, 1, &proxy.cb_fence, VK_TRUE, kTimeout); - - if (vk_result != VK_SUCCESS) - { - xr_result = XR_ERROR_RUNTIME_FAILURE; - - // WIP: Properly log and handle this - assert(xr_result == XR_SUCCESS); - } - - // Create and submit the ILT need to for - device_table->ResetFences(device, 1, &proxy.cb_fence); - return xr_result; -} - -bool SessionData::AddGraphicsBinding(const GraphicsBinding& binding) -{ - graphics_binding_ = binding; - return graphics_binding_.IsValid(); -} - -void SessionData::AddReferenceSpaces(uint32_t count, const XrReferenceSpaceType* replay_spaces) -{ - reference_spaces_.clear(); - for (uint32_t space = 0; space < count; space++) - { - reference_spaces_.insert(replay_spaces[space]); - } -} - -void SessionData::AddViewRelativeProxySpace(const encode::OpenXrInstanceTable* instance_table, - const format::ViewRelativeLocation& location, - const XrSpace replay_space) -{ - - // View space at view relative location - XrReferenceSpaceCreateInfo view_relative_ci = { XR_TYPE_REFERENCE_SPACE_CREATE_INFO, - nullptr, - XR_REFERENCE_SPACE_TYPE_VIEW, - { { location.qx, location.qy, location.qz, location.qw }, - { location.x, location.y, location.z } } }; - - XrSpace view_relative_space = XR_NULL_HANDLE; - // TODO: Cleanup this reference space object at DestroySession time - XrResult result = instance_table->CreateReferenceSpace(handle_, &view_relative_ci, &view_relative_space); - - if (XR_SUCCEEDED(result)) - { - proxy_spaces_[replay_space] = view_relative_space; - } - else - { - GFXRECON_LOG_WARNING("Unable to create view relative space for %" PRIu64, location.space_id); - } -} - -void SessionData::ClearViewRelativeProxySpaces(const encode::OpenXrInstanceTable* instance_table) -{ - assert(instance_table); - for (const auto& proxy : proxy_spaces_) - { - if (proxy.second != XR_NULL_HANDLE) - { - instance_table->DestroySpace(proxy.second); - } - } - proxy_spaces_.clear(); -} - -void SessionData::ClearSwapchains(CommonObjectInfoTable& table) -{ - for (format::HandleId swapchain : swapchains_) - { - OpenXrSwapchainInfo* swapchain_data = table.GetXrSwapchainInfo(swapchain); - assert((swapchain_data != nullptr) && swapchain_data->replay_data); - swapchain_data->replay_data->Clear(); - } - swapchains_.clear(); -} - -void SessionData::RemapFrameEndSpaces(XrFrameEndInfo& frame_end_info) -{ - const XrCompositionLayerBaseHeader* const* layers = frame_end_info.layers; - if (!layers) - return; - - // Replace all spaces in the composition layer with view relative proxies - for (uint32_t layer_index = 0; layer_index < frame_end_info.layerCount; layer_index++) - { - XrCompositionLayerBaseHeader* layer = const_cast(layers[layer_index]); - if (layer && (layer->space != XR_NULL_HANDLE)) - { - auto found_it = proxy_spaces_.find(layer->space); - if (found_it != proxy_spaces_.end()) - { - layer->space = found_it->second; - } - } - } -} - -GFXRECON_END_NAMESPACE(openxr) -GFXRECON_END_NAMESPACE(decode) -GFXRECON_END_NAMESPACE(gfxrecon) - -#endif // ENABLE_OPENXR_SUPPORT +/* +** Copyright (c) 2024 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#if ENABLE_OPENXR_SUPPORT + +#include "decode/openxr_replay_session_state.h" +#include "decode/openxr_replay_swapchain_state.h" +#include "decode/openxr_object_info.h" + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) +GFXRECON_BEGIN_NAMESPACE(openxr) + +VulkanGraphicsBinding::VulkanGraphicsBinding(VulkanReplayConsumerBase& vulkan_consumer, + const Decoded_XrGraphicsBindingVulkanKHR& xr_binding) : + XrGraphicsBindingVulkanKHR(*xr_binding.decoded_value), + vulkan_consumer(&vulkan_consumer), instance_table(vulkan_consumer.GetInstanceTable(physicalDevice)), + device_table(vulkan_consumer.GetDeviceTable(device)), instance_id(xr_binding.instance), device_id(xr_binding.device) +{ + next = nullptr; // We don't have a safe (deep) copy of the original so stub out the copies downchain pointer + + // Touch up the queue + device_table->GetDeviceQueue(device, queueFamilyIndex, queueIndex, &queue); +} + +XrResult VulkanGraphicsBinding::ResetCommandBuffer(VulkanSwapchainInfo::ProxyImage& proxy) const +{ + XrResult xr_result = XR_SUCCESS; + uint32_t kTimeout = std::numeric_limits::max(); // WIP: Better timeout and timeout reporting + VkResult vk_result = device_table->WaitForFences(device, 1, &proxy.cb_fence, VK_TRUE, kTimeout); + + if (vk_result != VK_SUCCESS) + { + xr_result = XR_ERROR_RUNTIME_FAILURE; + + // WIP: Properly log and handle this + assert(xr_result == XR_SUCCESS); + } + + // Create and submit the ILT need to for + device_table->ResetFences(device, 1, &proxy.cb_fence); + return xr_result; +} + +bool SessionData::AddGraphicsBinding(const GraphicsBinding& binding) +{ + graphics_binding_ = binding; + return graphics_binding_.IsValid(); +} + +void SessionData::AddReferenceSpaces(uint32_t count, const XrReferenceSpaceType* replay_spaces) +{ + reference_spaces_.clear(); + for (uint32_t space = 0; space < count; space++) + { + reference_spaces_.insert(replay_spaces[space]); + } +} + +void SessionData::AddViewRelativeProxySpace(const encode::OpenXrInstanceTable* instance_table, + const format::ViewRelativeLocation& location, + const XrSpace replay_space) +{ + + // View space at view relative location + XrReferenceSpaceCreateInfo view_relative_ci = { XR_TYPE_REFERENCE_SPACE_CREATE_INFO, + nullptr, + XR_REFERENCE_SPACE_TYPE_VIEW, + { { location.qx, location.qy, location.qz, location.qw }, + { location.x, location.y, location.z } } }; + + XrSpace view_relative_space = XR_NULL_HANDLE; + // TODO: Cleanup this reference space object at DestroySession time + XrResult result = instance_table->CreateReferenceSpace(handle_, &view_relative_ci, &view_relative_space); + + if (XR_SUCCEEDED(result)) + { + proxy_spaces_[replay_space] = view_relative_space; + } + else + { + GFXRECON_LOG_WARNING("Unable to create view relative space for %" PRIu64, location.space_id); + } +} + +void SessionData::ClearViewRelativeProxySpaces(const encode::OpenXrInstanceTable* instance_table) +{ + assert(instance_table); + for (const auto& proxy : proxy_spaces_) + { + if (proxy.second != XR_NULL_HANDLE) + { + instance_table->DestroySpace(proxy.second); + } + } + proxy_spaces_.clear(); +} + +void SessionData::ClearSwapchains(CommonObjectInfoTable& table) +{ + for (format::HandleId swapchain : swapchains_) + { + OpenXrSwapchainInfo* swapchain_data = table.GetXrSwapchainInfo(swapchain); + assert((swapchain_data != nullptr) && swapchain_data->replay_data); + swapchain_data->replay_data->Clear(); + } + swapchains_.clear(); +} + +void SessionData::RemapFrameEndSpaces(XrFrameEndInfo& frame_end_info) +{ + const XrCompositionLayerBaseHeader* const* layers = frame_end_info.layers; + if (!layers) + return; + + // Replace all spaces in the composition layer with view relative proxies + for (uint32_t layer_index = 0; layer_index < frame_end_info.layerCount; layer_index++) + { + XrCompositionLayerBaseHeader* layer = const_cast(layers[layer_index]); + if (layer && (layer->space != XR_NULL_HANDLE)) + { + auto found_it = proxy_spaces_.find(layer->space); + if (found_it != proxy_spaces_.end()) + { + layer->space = found_it->second; + } + } + } +} + +GFXRECON_END_NAMESPACE(openxr) +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // ENABLE_OPENXR_SUPPORT diff --git a/third_party/gfxreconstruct/framework/decode/openxr_replay_session_state.h b/third_party/gfxreconstruct/framework/decode/openxr_replay_session_state.h index d9e28f200..6996f3748 100644 --- a/third_party/gfxreconstruct/framework/decode/openxr_replay_session_state.h +++ b/third_party/gfxreconstruct/framework/decode/openxr_replay_session_state.h @@ -1,143 +1,143 @@ -/* -** Copyright (c) 2024 LunarG, Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and associated documentation files (the "Software"), -** to deal in the Software without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Software, and to permit persons to whom the -** Software is furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -** DEALINGS IN THE SOFTWARE. -*/ - -#ifndef GFXRECON_DECODE_OPENXR_REPLAY_SESSION_STATE_H -#define GFXRECON_DECODE_OPENXR_REPLAY_SESSION_STATE_H - -#if ENABLE_OPENXR_SUPPORT - -#include -#include -#include -#include "application/application.h" -#include "generated/generated_openxr_struct_decoders.h" -#include "decode/openxr_replay_common_state.h" - -GFXRECON_BEGIN_NAMESPACE(gfxrecon) -GFXRECON_BEGIN_NAMESPACE(decode) -GFXRECON_BEGIN_NAMESPACE(openxr) - -// Virtual swapchain information -struct VulkanSwapchainInfo -{ - - // Structure necessary to track the necessary information related to the virtual swapchain images - struct ProxyImage - { - VkImage image{ VK_NULL_HANDLE }; - VkDeviceMemory memory{ VK_NULL_HANDLE }; - VkFence cb_fence{ VK_NULL_HANDLE }; - VkCommandBuffer command_buffer{ VK_NULL_HANDLE }; - }; - - VkImageCreateInfo image_create_info{ VK_STRUCTURE_TYPE_MAX_ENUM }; - VkImageSubresourceRange whole_range; - VkImageLayout layout; - XrVulkanSwapchainCreateInfoMETA xr_info_meta{ XR_TYPE_UNKNOWN }; // Backing store for deep copy - - std::vector proxy_images; - std::vector replay_images; - VkCommandPool command_pool = VK_NULL_HANDLE; -}; - -struct VulkanGraphicsBinding : public XrGraphicsBindingVulkanKHR -{ - VulkanGraphicsBinding(VulkanReplayConsumerBase& vulkan_consumer, const Decoded_XrGraphicsBindingVulkanKHR& xr); - VulkanReplayConsumerBase* vulkan_consumer = nullptr; - const graphics::VulkanInstanceTable* instance_table{ nullptr }; - const graphics::VulkanDeviceTable* device_table{ nullptr }; - format::HandleId instance_id{ format::kNullHandleId }; - format::HandleId device_id{ format::kNullHandleId }; - VkQueue queue = VK_NULL_HANDLE; - - XrResult ResetCommandBuffer(VulkanSwapchainInfo::ProxyImage& proxy) const; -}; - -class GraphicsBinding -{ - public: - GraphicsBinding() : type(GraphicsBindingType::kUnknown){}; - GraphicsBinding(const VulkanGraphicsBinding& binding) : type(GraphicsBindingType::kVulkan) - { - vulkan_binding.emplace(binding); - } - GraphicsBindingType GetType() const { return type; } - bool IsValid() const { return type != GraphicsBindingType::kUnknown; } - bool IsVulkan() const { return type == GraphicsBindingType::kVulkan; } - - const VulkanGraphicsBinding& GetVulkanBinding() const - { - assert(type == GraphicsBindingType::kVulkan); - assert(vulkan_binding.has_value()); - return *vulkan_binding; - } - - private: - GraphicsBindingType type; - - // NOTE: Add other supported bindings here - std::optional vulkan_binding; -}; - -class SessionData : public BaseReplayData -{ - using Base = BaseReplayData; - - public: - using ReferenceSpaceSet = std::unordered_set; - using ViewRelativeProxySpaceMap = std::unordered_map; - - SessionData(XrSession session) : Base(session) {} - bool AddGraphicsBinding(const GraphicsBinding& binding); - const GraphicsBinding& GetGraphicsBinding() const { return graphics_binding_; } - - void AddReferenceSpaces(uint32_t count, const XrReferenceSpaceType* replay_spaces); - void SetDisplayTime(const XrTime& predicted) { last_display_time_ = predicted; } - XrTime GetDisplayTime() const { return last_display_time_; } - - void AddViewRelativeProxySpace(const encode::OpenXrInstanceTable* instance_table, - const format::ViewRelativeLocation& location, - XrSpace replay_space); - void ClearViewRelativeProxySpaces(const encode::OpenXrInstanceTable* instance_table); - void ClearSwapchains(CommonObjectInfoTable& table); - - void RemapFrameEndSpaces(XrFrameEndInfo& frame_end_info); - void AddSwapchain(format::HandleId swapchain) { swapchains_.insert(swapchain); } - void RemoveSwapchain(format::HandleId swapchain) { swapchains_.erase(swapchain); } - - protected: - ReferenceSpaceSet reference_spaces_; - ViewRelativeProxySpaceMap proxy_spaces_; - - XrTime last_display_time_ = XrTime(); - - // These are the replay handles - GraphicsBinding graphics_binding_; - std::unordered_set swapchains_; -}; - -GFXRECON_END_NAMESPACE(openxr) -GFXRECON_END_NAMESPACE(decode) -GFXRECON_END_NAMESPACE(gfxrecon) -#endif // ENABLE_OPENXR_SUPPORT - -#endif // GFXRECON_DECODE_OPENXR_REPLAY_SESSION_STATE_H +/* +** Copyright (c) 2024 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_DECODE_OPENXR_REPLAY_SESSION_STATE_H +#define GFXRECON_DECODE_OPENXR_REPLAY_SESSION_STATE_H + +#if ENABLE_OPENXR_SUPPORT + +#include +#include +#include +#include "application/application.h" +#include "generated/generated_openxr_struct_decoders.h" +#include "decode/openxr_replay_common_state.h" + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) +GFXRECON_BEGIN_NAMESPACE(openxr) + +// Virtual swapchain information +struct VulkanSwapchainInfo +{ + + // Structure necessary to track the necessary information related to the virtual swapchain images + struct ProxyImage + { + VkImage image{ VK_NULL_HANDLE }; + VkDeviceMemory memory{ VK_NULL_HANDLE }; + VkFence cb_fence{ VK_NULL_HANDLE }; + VkCommandBuffer command_buffer{ VK_NULL_HANDLE }; + }; + + VkImageCreateInfo image_create_info{ VK_STRUCTURE_TYPE_MAX_ENUM }; + VkImageSubresourceRange whole_range; + VkImageLayout layout; + XrVulkanSwapchainCreateInfoMETA xr_info_meta{ XR_TYPE_UNKNOWN }; // Backing store for deep copy + + std::vector proxy_images; + std::vector replay_images; + VkCommandPool command_pool = VK_NULL_HANDLE; +}; + +struct VulkanGraphicsBinding : public XrGraphicsBindingVulkanKHR +{ + VulkanGraphicsBinding(VulkanReplayConsumerBase& vulkan_consumer, const Decoded_XrGraphicsBindingVulkanKHR& xr); + VulkanReplayConsumerBase* vulkan_consumer = nullptr; + const graphics::VulkanInstanceTable* instance_table{ nullptr }; + const graphics::VulkanDeviceTable* device_table{ nullptr }; + format::HandleId instance_id{ format::kNullHandleId }; + format::HandleId device_id{ format::kNullHandleId }; + VkQueue queue = VK_NULL_HANDLE; + + XrResult ResetCommandBuffer(VulkanSwapchainInfo::ProxyImage& proxy) const; +}; + +class GraphicsBinding +{ + public: + GraphicsBinding() : type(GraphicsBindingType::kUnknown){}; + GraphicsBinding(const VulkanGraphicsBinding& binding) : type(GraphicsBindingType::kVulkan) + { + vulkan_binding.emplace(binding); + } + GraphicsBindingType GetType() const { return type; } + bool IsValid() const { return type != GraphicsBindingType::kUnknown; } + bool IsVulkan() const { return type == GraphicsBindingType::kVulkan; } + + const VulkanGraphicsBinding& GetVulkanBinding() const + { + assert(type == GraphicsBindingType::kVulkan); + assert(vulkan_binding.has_value()); + return *vulkan_binding; + } + + private: + GraphicsBindingType type; + + // NOTE: Add other supported bindings here + std::optional vulkan_binding; +}; + +class SessionData : public BaseReplayData +{ + using Base = BaseReplayData; + + public: + using ReferenceSpaceSet = std::unordered_set; + using ViewRelativeProxySpaceMap = std::unordered_map; + + SessionData(XrSession session) : Base(session) {} + bool AddGraphicsBinding(const GraphicsBinding& binding); + const GraphicsBinding& GetGraphicsBinding() const { return graphics_binding_; } + + void AddReferenceSpaces(uint32_t count, const XrReferenceSpaceType* replay_spaces); + void SetDisplayTime(const XrTime& predicted) { last_display_time_ = predicted; } + XrTime GetDisplayTime() const { return last_display_time_; } + + void AddViewRelativeProxySpace(const encode::OpenXrInstanceTable* instance_table, + const format::ViewRelativeLocation& location, + XrSpace replay_space); + void ClearViewRelativeProxySpaces(const encode::OpenXrInstanceTable* instance_table); + void ClearSwapchains(CommonObjectInfoTable& table); + + void RemapFrameEndSpaces(XrFrameEndInfo& frame_end_info); + void AddSwapchain(format::HandleId swapchain) { swapchains_.insert(swapchain); } + void RemoveSwapchain(format::HandleId swapchain) { swapchains_.erase(swapchain); } + + protected: + ReferenceSpaceSet reference_spaces_; + ViewRelativeProxySpaceMap proxy_spaces_; + + XrTime last_display_time_ = XrTime(); + + // These are the replay handles + GraphicsBinding graphics_binding_; + std::unordered_set swapchains_; +}; + +GFXRECON_END_NAMESPACE(openxr) +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) +#endif // ENABLE_OPENXR_SUPPORT + +#endif // GFXRECON_DECODE_OPENXR_REPLAY_SESSION_STATE_H diff --git a/third_party/gfxreconstruct/framework/decode/openxr_replay_swapchain_state.cpp b/third_party/gfxreconstruct/framework/decode/openxr_replay_swapchain_state.cpp index 6985fdb38..7333eb3dd 100644 --- a/third_party/gfxreconstruct/framework/decode/openxr_replay_swapchain_state.cpp +++ b/third_party/gfxreconstruct/framework/decode/openxr_replay_swapchain_state.cpp @@ -1,675 +1,675 @@ -/* -** Copyright (c) 2024 LunarG, Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and associated documentation files (the "Software"), -** to deal in the Software without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Software, and to permit persons to whom the -** Software is furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -** DEALINGS IN THE SOFTWARE. -*/ -#if ENABLE_OPENXR_SUPPORT - -#include "Vulkan-Utility-Libraries/vk_format_utils.h" - -#include "decode/openxr_replay_swapchain_state.h" -// #include "decode/vulkan_replay_consumer_base.h" - -#include - -GFXRECON_BEGIN_NAMESPACE(gfxrecon) -GFXRECON_BEGIN_NAMESPACE(decode) -GFXRECON_BEGIN_NAMESPACE(openxr) - -void SwapchainData::InitSwapchainData(const GraphicsBinding& binding, - const XrSwapchainCreateInfo& info, - XrSwapchain replay_handle) -{ - // Save off a reference to the session's graphics binding information - graphics_binding_ = &binding; - - // Store off a shallow copy - create_info_ = info; - create_info_.next = nullptr; // Add supported deep copies below - - if (binding.IsVulkan()) - { - // The type of the swapchain must match the type of the session - swapchain_graphics_info_.type = GraphicsBindingType::kVulkan; - swapchain_graphics_info_.vulkan_info.emplace(); - InitSwapchainData(info, *swapchain_graphics_info_.vulkan_info); - } - else - { - // WIP: Properly log and handle this - // WIP: For now catch this to ensure we don't need support - GFXRECON_LOG_FATAL("Unsupported graphics binding"); - } -} - -XrResult SwapchainData::ImportReplaySwapchain(StructPointerDecoder* images) -{ - XrResult result = XR_SUCCESS; - XrSwapchainImageBaseHeader* replay_images = images->GetOutputPointer(); - size_t replay_image_count = images->GetOutputLength(); - - if (replay_image_count == 0) - { - return result; - } - assert(replay_images); - - if (graphics_binding_->IsVulkan()) - { - XrSwapchainImageVulkanKHR* vk_images = reinterpret_cast(replay_images); - assert(vk_images->type == XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR); - assert(swapchain_graphics_info_.vulkan_info.has_value()); - VulkanSwapchainInfo& vk_info = *swapchain_graphics_info_.vulkan_info; - vk_info.replay_images = std::vector(vk_images, vk_images + replay_image_count); - } - else - { - result = XR_ERROR_RUNTIME_FAILURE; // Our version of replay can't handle any other binding than those above - } - - return result; -} - -XrResult SwapchainData::InitVirtualSwapchain(PointerDecoder* imageCountOutput, - StructPointerDecoder* capture_images) -{ - // This call is invalid without a Session with a graphics binding specified - assert(graphics_binding_); - - XrResult result = XR_ERROR_API_VERSION_UNSUPPORTED; // WIP: Determine if there is a better code for this - - if (graphics_binding_->IsVulkan()) - { - auto* vk_capture_images = - reinterpret_cast*>(capture_images); - result = InitVirtualSwapchain(imageCountOutput, vk_capture_images); - } - else - { - // This call is only supported for Vulkan graphics bindings - // WIP: Properly log and handle this - GFXRECON_LOG_FATAL("Unsupported graphics binding"); - return XR_ERROR_RUNTIME_FAILURE; - } - return result; -} - -XrResult SwapchainData::InitVirtualSwapchain(PointerDecoder* imageCountOutput, - StructPointerDecoder* capture_images) -{ - - // Unpack the graphics binding info, we shouldn't be called unless the binding *is* Vulkan - assert(graphics_binding_->IsVulkan()); - - XrResult xr_result = XR_SUCCESS; // WIP: Determine if there is a better code for this - - const VulkanGraphicsBinding& vk_binding = graphics_binding_->GetVulkanBinding(); - const VkDevice vk_device = vk_binding.device; - const format::HandleId device_id = vk_binding.device_id; - const VkPhysicalDevice vk_physical = vk_binding.physicalDevice; - auto* device_table = vk_binding.device_table; - auto* instance_table = vk_binding.instance_table; - - assert(swapchain_graphics_info_.vulkan_info.has_value()); - VulkanSwapchainInfo& vk_swap = *swapchain_graphics_info_.vulkan_info; - - // Allocate command buffers - VkCommandPoolCreateInfo create_info = { VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, - nullptr, - VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, - vk_binding.queueFamilyIndex }; - - VkResult vk_result = device_table->CreateCommandPool(vk_device, &create_info, nullptr, &vk_swap.command_pool); - // WIP: Properly log and handle this - assert(vk_result == VK_SUCCESS); - - VkCommandBufferAllocateInfo cb_alloc_info = { - VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, - nullptr, - vk_swap.command_pool, - VK_COMMAND_BUFFER_LEVEL_PRIMARY, - 1, - }; - - VkFenceCreateInfo cb_fence_info = { - VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, - nullptr, - VK_FENCE_CREATE_SIGNALED_BIT // The first thing we do is wait on the signal - }; - - // Create the virtual images - uint32_t* output_count = imageCountOutput->GetPointer(); - assert(output_count); - - const Decoded_XrSwapchainImageVulkanKHR* wrappers = capture_images->GetMetaStructPointer(); - - VulkanSwapchainInfo::ProxyImage proxy; - - vk_swap.proxy_images.reserve(*output_count); - - for (uint32_t image_entry = 0; image_entry < *output_count; image_entry++) - { - const format::HandleId& image_id = wrappers[image_entry].image; - - vk_result = device_table->CreateImage(vk_device, &vk_swap.image_create_info, nullptr, &proxy.image); - // WIP: Properly log and handle this - assert(vk_result == VK_SUCCESS); - - VkMemoryRequirements memory_reqs{}; - device_table->GetImageMemoryRequirements(vk_device, proxy.image, &memory_reqs); - - VkMemoryPropertyFlags property_flags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - uint32_t memory_type_index = std::numeric_limits::max(); - { - VkPhysicalDeviceMemoryProperties properties; - instance_table->GetPhysicalDeviceMemoryProperties(vk_physical, &properties); - - for (uint32_t i = 0; i < properties.memoryTypeCount; i++) - { - if ((memory_reqs.memoryTypeBits & (1 << i)) && - ((properties.memoryTypes[i].propertyFlags & property_flags) != 0)) - { - memory_type_index = i; - break; - } - } - assert(memory_type_index != std::numeric_limits::max()); - } - - if (memory_type_index == std::numeric_limits::max()) - { - // WIP: Properly log and handle this - break; - } - - VkMemoryAllocateInfo alloc_info = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO }; - alloc_info.pNext = nullptr; - alloc_info.memoryTypeIndex = memory_type_index; - alloc_info.allocationSize = memory_reqs.size; - - vk_result = device_table->AllocateMemory(vk_device, &alloc_info, nullptr, &proxy.memory); - - if (vk_result != VK_SUCCESS) - { - // WIP: Properly log and handle this - break; - } - - vk_result = device_table->BindImageMemory(vk_device, proxy.image, proxy.memory, 0); - - if (vk_result != VK_SUCCESS) - { - // WIP: Properly log and handle this - break; - } - - vk_result = device_table->AllocateCommandBuffers(vk_device, &cb_alloc_info, &proxy.command_buffer); - if (vk_result != VK_SUCCESS) - { - // WIP: Properly log and handle this - break; - } - - vk_result = device_table->CreateFence(vk_device, &cb_fence_info, nullptr, &proxy.cb_fence); - if (vk_result != VK_SUCCESS) - { - // WIP: Properly log and handle this - break; - } - - // Now tell the Vulkan Consumer to map the proxy image to the matching captured image id - VulkanImageInfo handle_info; - handle_info.handle = proxy.image; - handle_info.memory = proxy.memory; - handle_info.is_swapchain_image = true; - vk_binding.vulkan_consumer->AddImageHandle(device_id, image_id, proxy.image, std::move(handle_info)); - - vk_swap.proxy_images.emplace_back(proxy); - - // Safe the unwind on sucess - proxy = VulkanSwapchainInfo::ProxyImage(); - } - - if (vk_result != VK_SUCCESS) - { - xr_result = XR_ERROR_VALIDATION_FAILURE; // WIP: Determine if there is a better code for this - } - - // If we failed above, need to unwind any work in progress. - // WIP: Decide what to do about partial swapchain construction - if (proxy.memory != VK_NULL_HANDLE) - { - device_table->FreeMemory(vk_device, proxy.memory, nullptr); - } - - if (proxy.image != VK_NULL_HANDLE) - { - device_table->DestroyImage(vk_device, proxy.image, nullptr); - } - - if (proxy.command_buffer != VK_NULL_HANDLE) - { - device_table->DestroyFence(vk_device, proxy.cb_fence, nullptr); - } - - if (proxy.command_buffer != VK_NULL_HANDLE) - { - device_table->FreeCommandBuffers(vk_device, vk_swap.command_pool, 1, &proxy.command_buffer); - } - - return xr_result; -} - -XrResult SwapchainData::AcquireSwapchainImage(uint32_t capture_index, uint32_t replay_index) -{ - capture_to_replay_map_[capture_index] = replay_index; - acquire_release_fifo_.push_front(capture_index); - - if (graphics_binding_->IsVulkan()) - { - return AcquireSwapchainImage(capture_index, replay_index, *swapchain_graphics_info_.vulkan_info); - } - - // WIP: Properly log and handle this - GFXRECON_LOG_FATAL("Unsupported graphics binding"); - return XR_ERROR_VALIDATION_FAILURE; -} - -XrResult SwapchainData::ReleaseSwapchainImage(StructPointerDecoder* releaseInfo) -{ - XrResult xr_result = XR_SUCCESS; - - if (graphics_binding_->IsVulkan()) - { - return ReleaseSwapchainImage(releaseInfo, *swapchain_graphics_info_.vulkan_info); - } - - // WIP: Properly log and handle this - GFXRECON_LOG_FATAL("Unsupported graphics binding"); - return XR_ERROR_VALIDATION_FAILURE; -} - -void SwapchainData::WaitedWithoutTimeout() -{ - // WIP: Do we need to track anything here? - // The calling order will be enforced by the runtime at replay time, and if the application - // didn't handle XR_TIMEOUT correctly, that's an invalid trace, which the replay runtime may respond poorly - // to, but it's unsure whether we can do anything about it. -} - -void SwapchainData::Clear() -{ - if (graphics_binding_->IsVulkan()) - { - Clear(*swapchain_graphics_info_.vulkan_info); - swapchain_graphics_info_.vulkan_info.reset(); - } -} - -void SwapchainData::Clear(VulkanSwapchainInfo& vk_swap) -{ - assert(graphics_binding_->IsVulkan()); - const VulkanGraphicsBinding& vk_binding = graphics_binding_->GetVulkanBinding(); - const VkDevice vk_device = vk_binding.device; - auto* device_table = vk_binding.device_table; - - for (auto& proxy : vk_swap.proxy_images) - { - device_table->DestroyImage(vk_device, proxy.image, nullptr); - device_table->FreeMemory(vk_device, proxy.memory, nullptr); - device_table->DestroyFence(vk_device, proxy.cb_fence, nullptr); - } - - vk_swap.proxy_images.clear(); - device_table->DestroyCommandPool(vk_device, vk_swap.command_pool, nullptr); - vk_swap.command_pool = VK_NULL_HANDLE; -} - -XrResult SwapchainData::AcquireSwapchainImage(uint32_t capture_index, uint32_t replay_index, VulkanSwapchainInfo& swap) -{ - // Unpack the graphics binding info, we shouldn't be called unless the binding *is* Vulkan - assert(graphics_binding_->IsVulkan()); - - XrResult xr_result = XR_SUCCESS; // WIP: Determine if there is a better code for this - - const VulkanGraphicsBinding& vk_binding = graphics_binding_->GetVulkanBinding(); - const VkDevice vk_device = vk_binding.device; - auto* device_table = vk_binding.device_table; - - VulkanSwapchainInfo::ProxyImage& proxy = swap.proxy_images[capture_index]; - xr_result = vk_binding.ResetCommandBuffer(proxy); - if (!XR_SUCCEEDED(xr_result)) - { - assert(XR_SUCCEEDED(xr_result)); - return xr_result; - } - - VkCommandBufferBeginInfo cb_begin = { - VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, nullptr, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, nullptr - }; - - VkImageMemoryBarrier barrier = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, - nullptr, - VK_ACCESS_MEMORY_READ_BIT | - VK_ACCESS_MEMORY_WRITE_BIT, // WIP: Determine the optimal set of accesses - VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, - VK_IMAGE_LAYOUT_UNDEFINED, - swap.layout, - VK_QUEUE_FAMILY_IGNORED, - VK_QUEUE_FAMILY_IGNORED, - proxy.image, - swap.whole_range }; - - VkResult vk_result = device_table->BeginCommandBuffer(proxy.command_buffer, &cb_begin); - if (vk_result != VK_SUCCESS) - return XR_ERROR_RUNTIME_FAILURE; - - device_table->CmdPipelineBarrier(proxy.command_buffer, - VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, - VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, - 0, - 0, - nullptr, - 0, - nullptr, - 1, - &barrier); - vk_result = device_table->EndCommandBuffer(proxy.command_buffer); - if (vk_result != VK_SUCCESS) - return XR_ERROR_RUNTIME_FAILURE; - - VkSubmitInfo submit_info = { VK_STRUCTURE_TYPE_SUBMIT_INFO, nullptr, 0, nullptr, nullptr, 1, - &proxy.command_buffer, 0, nullptr }; - vk_result = device_table->QueueSubmit(vk_binding.queue, 1, &submit_info, proxy.cb_fence); - if (vk_result != VK_SUCCESS) - return XR_ERROR_RUNTIME_FAILURE; - - return XR_SUCCESS; -} - -XrResult SwapchainData::ReleaseSwapchainImage(StructPointerDecoder* releaseInfo, - VulkanSwapchainInfo& vk_swap) -{ - - // Unpack the graphics binding info, we shouldn't be called unless the binding *is* Vulkan - assert(graphics_binding_->IsVulkan()); - - XrResult xr_result = XR_SUCCESS; // WIP: Determine if there is a better code for this - - const VulkanGraphicsBinding& vk_binding = graphics_binding_->GetVulkanBinding(); - const VkDevice vk_device = vk_binding.device; - const format::HandleId device_id = vk_binding.device_id; - const VkPhysicalDevice vk_physical = vk_binding.physicalDevice; - auto* device_table = vk_binding.device_table; - auto* instance_table = vk_binding.instance_table; - - // Copy the head of the AcquireRelease FIFO from the proxy image to the replay image - assert(!acquire_release_fifo_.empty()); - uint32_t capture_index = acquire_release_fifo_.back(); - acquire_release_fifo_.pop_back(); - auto replay_it = capture_to_replay_map_.find(capture_index); - assert(replay_it != capture_to_replay_map_.end()); - uint32_t replay_index = replay_it->second; - VkImage replay_image = vk_swap.replay_images[replay_index].image; - capture_to_replay_map_.erase(replay_it); - - VulkanSwapchainInfo::ProxyImage& proxy = vk_swap.proxy_images[capture_index]; - xr_result = vk_binding.ResetCommandBuffer(proxy); - assert(XR_SUCCEEDED(xr_result)); - - VkCommandBufferBeginInfo cb_begin = { - VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, nullptr, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, nullptr - }; - - VkImageMemoryBarrier barriers[2] = { - { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, - nullptr, - VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, // WIP: Determine the optimal set of accesses - VK_ACCESS_TRANSFER_READ_BIT, - vk_swap.layout, - VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - VK_QUEUE_FAMILY_IGNORED, - VK_QUEUE_FAMILY_IGNORED, - proxy.image, - vk_swap.whole_range }, - { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, - nullptr, - VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, // WIP: Determine the optimal set of accesses - VK_ACCESS_TRANSFER_WRITE_BIT, - vk_swap.layout, - VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, - VK_QUEUE_FAMILY_IGNORED, - VK_QUEUE_FAMILY_IGNORED, - replay_image, - vk_swap.whole_range } - - }; - - VkResult vk_result = device_table->BeginCommandBuffer(proxy.command_buffer, &cb_begin); - if (vk_result != VK_SUCCESS) - return XR_ERROR_RUNTIME_FAILURE; - - device_table->CmdPipelineBarrier(proxy.command_buffer, - VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, - VK_PIPELINE_STAGE_TRANSFER_BIT, - 0, - 0, - nullptr, - 0, - nullptr, - 2, - barriers); - - VkImageSubresourceLayers subres_layers = { - vk_swap.whole_range.aspectMask, 0, vk_swap.whole_range.baseArrayLayer, vk_swap.whole_range.layerCount - }; - VkOffset3D zero_offset = { 0, 0, 0 }; - VkExtent3D mip_extent = vk_swap.image_create_info.extent; - - VkImageCopy copy_region = { - subres_layers, zero_offset, subres_layers, zero_offset, vk_swap.image_create_info.extent - }; - - uint32_t mip_count = vk_swap.image_create_info.mipLevels; - std::vector copy_regions; - copy_regions.reserve(mip_count); - for (uint32_t mip_level = 0; mip_level < mip_count; mip_level++) - { - subres_layers.mipLevel = mip_level; - - VkExtent3D mip_extent = vk_swap.image_create_info.extent; - mip_extent.width >>= mip_level; - mip_extent.height >>= mip_level; - - VkImageCopy copy_region = { subres_layers, zero_offset, subres_layers, zero_offset, mip_extent }; - copy_regions.push_back(copy_region); - } - - device_table->CmdCopyImage(proxy.command_buffer, - proxy.image, - VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - replay_image, - VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, - mip_count, - copy_regions.data()); - - // Transition replay to the required layout - // We'll defer the proxy image transition until the next acquire - barriers[1].oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; - barriers[1].newLayout = vk_swap.layout; - barriers[1].srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; - barriers[1].dstAccessMask = - VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT; // WIP: Determine the optimal set of accesses - - device_table->CmdPipelineBarrier(proxy.command_buffer, - VK_PIPELINE_STAGE_TRANSFER_BIT, - VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, - 0, - 0, - nullptr, - 0, - nullptr, - 1, - &barriers[1]); - vk_result = device_table->EndCommandBuffer(proxy.command_buffer); - if (vk_result != VK_SUCCESS) - return XR_ERROR_RUNTIME_FAILURE; - - VkSubmitInfo submit_info = { VK_STRUCTURE_TYPE_SUBMIT_INFO, nullptr, 0, nullptr, nullptr, 1, - &proxy.command_buffer, 0, nullptr }; - vk_result = device_table->QueueSubmit(vk_binding.queue, 1, &submit_info, proxy.cb_fence); - if (vk_result != VK_SUCCESS) - return XR_ERROR_RUNTIME_FAILURE; - - return XR_SUCCESS; -} - -void SwapchainData::MapVulkanSwapchainImageFlags(XrSwapchainUsageFlags xr_flags, VkImageCreateInfo& info) -{ - // NOTE: This is Vulkan specific. - struct ImageUsageMap - { - XrSwapchainUsageFlags xr; - VkImageUsageFlagBits vk; - }; - struct ImageCreateMap - { - XrSwapchainUsageFlags xr; - VkImageCreateFlagBits vk; - }; - static std::array usage_map = { - { { XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT }, - { XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT }, - { XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT, VK_IMAGE_USAGE_STORAGE_BIT }, - { XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT, VK_IMAGE_USAGE_TRANSFER_SRC_BIT }, - { XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT, VK_IMAGE_USAGE_TRANSFER_DST_BIT }, - { XR_SWAPCHAIN_USAGE_SAMPLED_BIT, VK_IMAGE_USAGE_SAMPLED_BIT }, - { XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR, VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT } } - }; - static std::array create_map = { { - { XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT, VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT }, - } }; - - XrSwapchainUsageFlags mapped_flags = 0; - for (const auto& entry : usage_map) - { - if (entry.xr & xr_flags) - { - info.usage |= entry.vk; - mapped_flags |= entry.xr; - } - } - for (const auto& entry : create_map) - { - if (entry.xr & xr_flags) - { - info.flags |= entry.vk; - mapped_flags |= entry.xr; - } - } - // WIP: Properly log and handle this - assert(xr_flags == mapped_flags); -} - -XrResult SwapchainData::InitSwapchainData(const XrSwapchainCreateInfo& xr_info, VulkanSwapchainInfo& vk_swap) -{ - XrResult xr_result = XR_SUCCESS; // WIP: Determine if there is a better code for this - - // Set up the flags and usages - VkImageCreateInfo& image_create_info = vk_swap.image_create_info; - image_create_info = VkImageCreateInfo{ VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, nullptr }; - - MapVulkanSwapchainImageFlags(xr_info.usageFlags, image_create_info); - - // Grab supported extension structs - auto xr_info_meta = gfxrecon::util::GetNextOfType(xr_info.next); - if (xr_info_meta) - { - // Apply the extension information - image_create_info.usage |= xr_info_meta->additionalUsageFlags; - image_create_info.flags |= xr_info_meta->additionalCreateFlags; - - // Backing store for the deep copy is within the VulkanSwapchainInfo - vk_swap.xr_info_meta = *xr_info_meta; - vk_swap.xr_info_meta.next = nullptr; - create_info_.next = &vk_swap.xr_info_meta; - } - - // Need to be able to copy to the real swapchain - image_create_info.usage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; - - // Cube swapchains specific flags - if (xr_info.faceCount == 6) - { - image_create_info.flags |= VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT; - } - - // And the reset of the create info - image_create_info.imageType = VK_IMAGE_TYPE_2D; - image_create_info.format = static_cast(xr_info.format); - VkExtent3D& extent = image_create_info.extent; - extent.width = xr_info.width; - extent.height = xr_info.height; - extent.depth = 1U; - image_create_info.mipLevels = xr_info.mipCount; - - // NOTE: Not sure if these are in face major or array major order, but shouldn't matter - // to replay unless runtimes vary. - image_create_info.arrayLayers = xr_info.arraySize * xr_info.faceCount, - - image_create_info.samples = VK_SAMPLE_COUNT_1_BIT; - image_create_info.tiling = VK_IMAGE_TILING_OPTIMAL; - - image_create_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; - image_create_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; - - VkImageSubresourceRange& subres_range = vk_swap.whole_range; - subres_range.aspectMask = 0; - subres_range.aspectMask |= vkuFormatHasDepth(image_create_info.format) ? VK_IMAGE_ASPECT_DEPTH_BIT : 0; - subres_range.aspectMask |= vkuFormatHasStencil(image_create_info.format) ? VK_IMAGE_ASPECT_STENCIL_BIT : 0; - - if (subres_range.aspectMask) - { - vk_swap.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; - } - else if (vkuFormatIsColor(image_create_info.format)) - { - subres_range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; - vk_swap.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; - } - else - { - // WIP: Properly log and handle this - assert(subres_range.aspectMask); - vk_swap.layout = VK_IMAGE_LAYOUT_UNDEFINED; - } - - subres_range.baseMipLevel = 0; - subres_range.levelCount = image_create_info.mipLevels; - subres_range.baseArrayLayer = 0; - subres_range.layerCount = image_create_info.arrayLayers; - - return xr_result; -} - -GFXRECON_END_NAMESPACE(openxr) -GFXRECON_END_NAMESPACE(decode) -GFXRECON_END_NAMESPACE(gfxrecon) - -#endif // ENABLE_OPENXR_SUPPORT +/* +** Copyright (c) 2024 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ +#if ENABLE_OPENXR_SUPPORT + +#include "Vulkan-Utility-Libraries/vk_format_utils.h" + +#include "decode/openxr_replay_swapchain_state.h" +// #include "decode/vulkan_replay_consumer_base.h" + +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) +GFXRECON_BEGIN_NAMESPACE(openxr) + +void SwapchainData::InitSwapchainData(const GraphicsBinding& binding, + const XrSwapchainCreateInfo& info, + XrSwapchain replay_handle) +{ + // Save off a reference to the session's graphics binding information + graphics_binding_ = &binding; + + // Store off a shallow copy + create_info_ = info; + create_info_.next = nullptr; // Add supported deep copies below + + if (binding.IsVulkan()) + { + // The type of the swapchain must match the type of the session + swapchain_graphics_info_.type = GraphicsBindingType::kVulkan; + swapchain_graphics_info_.vulkan_info.emplace(); + InitSwapchainData(info, *swapchain_graphics_info_.vulkan_info); + } + else + { + // WIP: Properly log and handle this + // WIP: For now catch this to ensure we don't need support + GFXRECON_LOG_FATAL("Unsupported graphics binding"); + } +} + +XrResult SwapchainData::ImportReplaySwapchain(StructPointerDecoder* images) +{ + XrResult result = XR_SUCCESS; + XrSwapchainImageBaseHeader* replay_images = images->GetOutputPointer(); + size_t replay_image_count = images->GetOutputLength(); + + if (replay_image_count == 0) + { + return result; + } + assert(replay_images); + + if (graphics_binding_->IsVulkan()) + { + XrSwapchainImageVulkanKHR* vk_images = reinterpret_cast(replay_images); + assert(vk_images->type == XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR); + assert(swapchain_graphics_info_.vulkan_info.has_value()); + VulkanSwapchainInfo& vk_info = *swapchain_graphics_info_.vulkan_info; + vk_info.replay_images = std::vector(vk_images, vk_images + replay_image_count); + } + else + { + result = XR_ERROR_RUNTIME_FAILURE; // Our version of replay can't handle any other binding than those above + } + + return result; +} + +XrResult SwapchainData::InitVirtualSwapchain(PointerDecoder* imageCountOutput, + StructPointerDecoder* capture_images) +{ + // This call is invalid without a Session with a graphics binding specified + assert(graphics_binding_); + + XrResult result = XR_ERROR_API_VERSION_UNSUPPORTED; // WIP: Determine if there is a better code for this + + if (graphics_binding_->IsVulkan()) + { + auto* vk_capture_images = + reinterpret_cast*>(capture_images); + result = InitVirtualSwapchain(imageCountOutput, vk_capture_images); + } + else + { + // This call is only supported for Vulkan graphics bindings + // WIP: Properly log and handle this + GFXRECON_LOG_FATAL("Unsupported graphics binding"); + return XR_ERROR_RUNTIME_FAILURE; + } + return result; +} + +XrResult SwapchainData::InitVirtualSwapchain(PointerDecoder* imageCountOutput, + StructPointerDecoder* capture_images) +{ + + // Unpack the graphics binding info, we shouldn't be called unless the binding *is* Vulkan + assert(graphics_binding_->IsVulkan()); + + XrResult xr_result = XR_SUCCESS; // WIP: Determine if there is a better code for this + + const VulkanGraphicsBinding& vk_binding = graphics_binding_->GetVulkanBinding(); + const VkDevice vk_device = vk_binding.device; + const format::HandleId device_id = vk_binding.device_id; + const VkPhysicalDevice vk_physical = vk_binding.physicalDevice; + auto* device_table = vk_binding.device_table; + auto* instance_table = vk_binding.instance_table; + + assert(swapchain_graphics_info_.vulkan_info.has_value()); + VulkanSwapchainInfo& vk_swap = *swapchain_graphics_info_.vulkan_info; + + // Allocate command buffers + VkCommandPoolCreateInfo create_info = { VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, + nullptr, + VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, + vk_binding.queueFamilyIndex }; + + VkResult vk_result = device_table->CreateCommandPool(vk_device, &create_info, nullptr, &vk_swap.command_pool); + // WIP: Properly log and handle this + assert(vk_result == VK_SUCCESS); + + VkCommandBufferAllocateInfo cb_alloc_info = { + VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, + nullptr, + vk_swap.command_pool, + VK_COMMAND_BUFFER_LEVEL_PRIMARY, + 1, + }; + + VkFenceCreateInfo cb_fence_info = { + VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, + nullptr, + VK_FENCE_CREATE_SIGNALED_BIT // The first thing we do is wait on the signal + }; + + // Create the virtual images + uint32_t* output_count = imageCountOutput->GetPointer(); + assert(output_count); + + const Decoded_XrSwapchainImageVulkanKHR* wrappers = capture_images->GetMetaStructPointer(); + + VulkanSwapchainInfo::ProxyImage proxy; + + vk_swap.proxy_images.reserve(*output_count); + + for (uint32_t image_entry = 0; image_entry < *output_count; image_entry++) + { + const format::HandleId& image_id = wrappers[image_entry].image; + + vk_result = device_table->CreateImage(vk_device, &vk_swap.image_create_info, nullptr, &proxy.image); + // WIP: Properly log and handle this + assert(vk_result == VK_SUCCESS); + + VkMemoryRequirements memory_reqs{}; + device_table->GetImageMemoryRequirements(vk_device, proxy.image, &memory_reqs); + + VkMemoryPropertyFlags property_flags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; + uint32_t memory_type_index = std::numeric_limits::max(); + { + VkPhysicalDeviceMemoryProperties properties; + instance_table->GetPhysicalDeviceMemoryProperties(vk_physical, &properties); + + for (uint32_t i = 0; i < properties.memoryTypeCount; i++) + { + if ((memory_reqs.memoryTypeBits & (1 << i)) && + ((properties.memoryTypes[i].propertyFlags & property_flags) != 0)) + { + memory_type_index = i; + break; + } + } + assert(memory_type_index != std::numeric_limits::max()); + } + + if (memory_type_index == std::numeric_limits::max()) + { + // WIP: Properly log and handle this + break; + } + + VkMemoryAllocateInfo alloc_info = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO }; + alloc_info.pNext = nullptr; + alloc_info.memoryTypeIndex = memory_type_index; + alloc_info.allocationSize = memory_reqs.size; + + vk_result = device_table->AllocateMemory(vk_device, &alloc_info, nullptr, &proxy.memory); + + if (vk_result != VK_SUCCESS) + { + // WIP: Properly log and handle this + break; + } + + vk_result = device_table->BindImageMemory(vk_device, proxy.image, proxy.memory, 0); + + if (vk_result != VK_SUCCESS) + { + // WIP: Properly log and handle this + break; + } + + vk_result = device_table->AllocateCommandBuffers(vk_device, &cb_alloc_info, &proxy.command_buffer); + if (vk_result != VK_SUCCESS) + { + // WIP: Properly log and handle this + break; + } + + vk_result = device_table->CreateFence(vk_device, &cb_fence_info, nullptr, &proxy.cb_fence); + if (vk_result != VK_SUCCESS) + { + // WIP: Properly log and handle this + break; + } + + // Now tell the Vulkan Consumer to map the proxy image to the matching captured image id + VulkanImageInfo handle_info; + handle_info.handle = proxy.image; + handle_info.memory = proxy.memory; + handle_info.is_swapchain_image = true; + vk_binding.vulkan_consumer->AddImageHandle(device_id, image_id, proxy.image, std::move(handle_info)); + + vk_swap.proxy_images.emplace_back(proxy); + + // Safe the unwind on sucess + proxy = VulkanSwapchainInfo::ProxyImage(); + } + + if (vk_result != VK_SUCCESS) + { + xr_result = XR_ERROR_VALIDATION_FAILURE; // WIP: Determine if there is a better code for this + } + + // If we failed above, need to unwind any work in progress. + // WIP: Decide what to do about partial swapchain construction + if (proxy.memory != VK_NULL_HANDLE) + { + device_table->FreeMemory(vk_device, proxy.memory, nullptr); + } + + if (proxy.image != VK_NULL_HANDLE) + { + device_table->DestroyImage(vk_device, proxy.image, nullptr); + } + + if (proxy.command_buffer != VK_NULL_HANDLE) + { + device_table->DestroyFence(vk_device, proxy.cb_fence, nullptr); + } + + if (proxy.command_buffer != VK_NULL_HANDLE) + { + device_table->FreeCommandBuffers(vk_device, vk_swap.command_pool, 1, &proxy.command_buffer); + } + + return xr_result; +} + +XrResult SwapchainData::AcquireSwapchainImage(uint32_t capture_index, uint32_t replay_index) +{ + capture_to_replay_map_[capture_index] = replay_index; + acquire_release_fifo_.push_front(capture_index); + + if (graphics_binding_->IsVulkan()) + { + return AcquireSwapchainImage(capture_index, replay_index, *swapchain_graphics_info_.vulkan_info); + } + + // WIP: Properly log and handle this + GFXRECON_LOG_FATAL("Unsupported graphics binding"); + return XR_ERROR_VALIDATION_FAILURE; +} + +XrResult SwapchainData::ReleaseSwapchainImage(StructPointerDecoder* releaseInfo) +{ + XrResult xr_result = XR_SUCCESS; + + if (graphics_binding_->IsVulkan()) + { + return ReleaseSwapchainImage(releaseInfo, *swapchain_graphics_info_.vulkan_info); + } + + // WIP: Properly log and handle this + GFXRECON_LOG_FATAL("Unsupported graphics binding"); + return XR_ERROR_VALIDATION_FAILURE; +} + +void SwapchainData::WaitedWithoutTimeout() +{ + // WIP: Do we need to track anything here? + // The calling order will be enforced by the runtime at replay time, and if the application + // didn't handle XR_TIMEOUT correctly, that's an invalid trace, which the replay runtime may respond poorly + // to, but it's unsure whether we can do anything about it. +} + +void SwapchainData::Clear() +{ + if (graphics_binding_->IsVulkan()) + { + Clear(*swapchain_graphics_info_.vulkan_info); + swapchain_graphics_info_.vulkan_info.reset(); + } +} + +void SwapchainData::Clear(VulkanSwapchainInfo& vk_swap) +{ + assert(graphics_binding_->IsVulkan()); + const VulkanGraphicsBinding& vk_binding = graphics_binding_->GetVulkanBinding(); + const VkDevice vk_device = vk_binding.device; + auto* device_table = vk_binding.device_table; + + for (auto& proxy : vk_swap.proxy_images) + { + device_table->DestroyImage(vk_device, proxy.image, nullptr); + device_table->FreeMemory(vk_device, proxy.memory, nullptr); + device_table->DestroyFence(vk_device, proxy.cb_fence, nullptr); + } + + vk_swap.proxy_images.clear(); + device_table->DestroyCommandPool(vk_device, vk_swap.command_pool, nullptr); + vk_swap.command_pool = VK_NULL_HANDLE; +} + +XrResult SwapchainData::AcquireSwapchainImage(uint32_t capture_index, uint32_t replay_index, VulkanSwapchainInfo& swap) +{ + // Unpack the graphics binding info, we shouldn't be called unless the binding *is* Vulkan + assert(graphics_binding_->IsVulkan()); + + XrResult xr_result = XR_SUCCESS; // WIP: Determine if there is a better code for this + + const VulkanGraphicsBinding& vk_binding = graphics_binding_->GetVulkanBinding(); + const VkDevice vk_device = vk_binding.device; + auto* device_table = vk_binding.device_table; + + VulkanSwapchainInfo::ProxyImage& proxy = swap.proxy_images[capture_index]; + xr_result = vk_binding.ResetCommandBuffer(proxy); + if (!XR_SUCCEEDED(xr_result)) + { + assert(XR_SUCCEEDED(xr_result)); + return xr_result; + } + + VkCommandBufferBeginInfo cb_begin = { + VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, nullptr, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, nullptr + }; + + VkImageMemoryBarrier barrier = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, + nullptr, + VK_ACCESS_MEMORY_READ_BIT | + VK_ACCESS_MEMORY_WRITE_BIT, // WIP: Determine the optimal set of accesses + VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, + VK_IMAGE_LAYOUT_UNDEFINED, + swap.layout, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + proxy.image, + swap.whole_range }; + + VkResult vk_result = device_table->BeginCommandBuffer(proxy.command_buffer, &cb_begin); + if (vk_result != VK_SUCCESS) + return XR_ERROR_RUNTIME_FAILURE; + + device_table->CmdPipelineBarrier(proxy.command_buffer, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + 0, + 0, + nullptr, + 0, + nullptr, + 1, + &barrier); + vk_result = device_table->EndCommandBuffer(proxy.command_buffer); + if (vk_result != VK_SUCCESS) + return XR_ERROR_RUNTIME_FAILURE; + + VkSubmitInfo submit_info = { VK_STRUCTURE_TYPE_SUBMIT_INFO, nullptr, 0, nullptr, nullptr, 1, + &proxy.command_buffer, 0, nullptr }; + vk_result = device_table->QueueSubmit(vk_binding.queue, 1, &submit_info, proxy.cb_fence); + if (vk_result != VK_SUCCESS) + return XR_ERROR_RUNTIME_FAILURE; + + return XR_SUCCESS; +} + +XrResult SwapchainData::ReleaseSwapchainImage(StructPointerDecoder* releaseInfo, + VulkanSwapchainInfo& vk_swap) +{ + + // Unpack the graphics binding info, we shouldn't be called unless the binding *is* Vulkan + assert(graphics_binding_->IsVulkan()); + + XrResult xr_result = XR_SUCCESS; // WIP: Determine if there is a better code for this + + const VulkanGraphicsBinding& vk_binding = graphics_binding_->GetVulkanBinding(); + const VkDevice vk_device = vk_binding.device; + const format::HandleId device_id = vk_binding.device_id; + const VkPhysicalDevice vk_physical = vk_binding.physicalDevice; + auto* device_table = vk_binding.device_table; + auto* instance_table = vk_binding.instance_table; + + // Copy the head of the AcquireRelease FIFO from the proxy image to the replay image + assert(!acquire_release_fifo_.empty()); + uint32_t capture_index = acquire_release_fifo_.back(); + acquire_release_fifo_.pop_back(); + auto replay_it = capture_to_replay_map_.find(capture_index); + assert(replay_it != capture_to_replay_map_.end()); + uint32_t replay_index = replay_it->second; + VkImage replay_image = vk_swap.replay_images[replay_index].image; + capture_to_replay_map_.erase(replay_it); + + VulkanSwapchainInfo::ProxyImage& proxy = vk_swap.proxy_images[capture_index]; + xr_result = vk_binding.ResetCommandBuffer(proxy); + assert(XR_SUCCEEDED(xr_result)); + + VkCommandBufferBeginInfo cb_begin = { + VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, nullptr, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, nullptr + }; + + VkImageMemoryBarrier barriers[2] = { + { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, + nullptr, + VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, // WIP: Determine the optimal set of accesses + VK_ACCESS_TRANSFER_READ_BIT, + vk_swap.layout, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + proxy.image, + vk_swap.whole_range }, + { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, + nullptr, + VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, // WIP: Determine the optimal set of accesses + VK_ACCESS_TRANSFER_WRITE_BIT, + vk_swap.layout, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + replay_image, + vk_swap.whole_range } + + }; + + VkResult vk_result = device_table->BeginCommandBuffer(proxy.command_buffer, &cb_begin); + if (vk_result != VK_SUCCESS) + return XR_ERROR_RUNTIME_FAILURE; + + device_table->CmdPipelineBarrier(proxy.command_buffer, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + 0, + 0, + nullptr, + 0, + nullptr, + 2, + barriers); + + VkImageSubresourceLayers subres_layers = { + vk_swap.whole_range.aspectMask, 0, vk_swap.whole_range.baseArrayLayer, vk_swap.whole_range.layerCount + }; + VkOffset3D zero_offset = { 0, 0, 0 }; + VkExtent3D mip_extent = vk_swap.image_create_info.extent; + + VkImageCopy copy_region = { + subres_layers, zero_offset, subres_layers, zero_offset, vk_swap.image_create_info.extent + }; + + uint32_t mip_count = vk_swap.image_create_info.mipLevels; + std::vector copy_regions; + copy_regions.reserve(mip_count); + for (uint32_t mip_level = 0; mip_level < mip_count; mip_level++) + { + subres_layers.mipLevel = mip_level; + + VkExtent3D mip_extent = vk_swap.image_create_info.extent; + mip_extent.width >>= mip_level; + mip_extent.height >>= mip_level; + + VkImageCopy copy_region = { subres_layers, zero_offset, subres_layers, zero_offset, mip_extent }; + copy_regions.push_back(copy_region); + } + + device_table->CmdCopyImage(proxy.command_buffer, + proxy.image, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + replay_image, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + mip_count, + copy_regions.data()); + + // Transition replay to the required layout + // We'll defer the proxy image transition until the next acquire + barriers[1].oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + barriers[1].newLayout = vk_swap.layout; + barriers[1].srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + barriers[1].dstAccessMask = + VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT; // WIP: Determine the optimal set of accesses + + device_table->CmdPipelineBarrier(proxy.command_buffer, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + 0, + 0, + nullptr, + 0, + nullptr, + 1, + &barriers[1]); + vk_result = device_table->EndCommandBuffer(proxy.command_buffer); + if (vk_result != VK_SUCCESS) + return XR_ERROR_RUNTIME_FAILURE; + + VkSubmitInfo submit_info = { VK_STRUCTURE_TYPE_SUBMIT_INFO, nullptr, 0, nullptr, nullptr, 1, + &proxy.command_buffer, 0, nullptr }; + vk_result = device_table->QueueSubmit(vk_binding.queue, 1, &submit_info, proxy.cb_fence); + if (vk_result != VK_SUCCESS) + return XR_ERROR_RUNTIME_FAILURE; + + return XR_SUCCESS; +} + +void SwapchainData::MapVulkanSwapchainImageFlags(XrSwapchainUsageFlags xr_flags, VkImageCreateInfo& info) +{ + // NOTE: This is Vulkan specific. + struct ImageUsageMap + { + XrSwapchainUsageFlags xr; + VkImageUsageFlagBits vk; + }; + struct ImageCreateMap + { + XrSwapchainUsageFlags xr; + VkImageCreateFlagBits vk; + }; + static std::array usage_map = { + { { XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT }, + { XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT }, + { XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT, VK_IMAGE_USAGE_STORAGE_BIT }, + { XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT, VK_IMAGE_USAGE_TRANSFER_SRC_BIT }, + { XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT, VK_IMAGE_USAGE_TRANSFER_DST_BIT }, + { XR_SWAPCHAIN_USAGE_SAMPLED_BIT, VK_IMAGE_USAGE_SAMPLED_BIT }, + { XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR, VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT } } + }; + static std::array create_map = { { + { XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT, VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT }, + } }; + + XrSwapchainUsageFlags mapped_flags = 0; + for (const auto& entry : usage_map) + { + if (entry.xr & xr_flags) + { + info.usage |= entry.vk; + mapped_flags |= entry.xr; + } + } + for (const auto& entry : create_map) + { + if (entry.xr & xr_flags) + { + info.flags |= entry.vk; + mapped_flags |= entry.xr; + } + } + // WIP: Properly log and handle this + assert(xr_flags == mapped_flags); +} + +XrResult SwapchainData::InitSwapchainData(const XrSwapchainCreateInfo& xr_info, VulkanSwapchainInfo& vk_swap) +{ + XrResult xr_result = XR_SUCCESS; // WIP: Determine if there is a better code for this + + // Set up the flags and usages + VkImageCreateInfo& image_create_info = vk_swap.image_create_info; + image_create_info = VkImageCreateInfo{ VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, nullptr }; + + MapVulkanSwapchainImageFlags(xr_info.usageFlags, image_create_info); + + // Grab supported extension structs + auto xr_info_meta = gfxrecon::util::GetNextOfType(xr_info.next); + if (xr_info_meta) + { + // Apply the extension information + image_create_info.usage |= xr_info_meta->additionalUsageFlags; + image_create_info.flags |= xr_info_meta->additionalCreateFlags; + + // Backing store for the deep copy is within the VulkanSwapchainInfo + vk_swap.xr_info_meta = *xr_info_meta; + vk_swap.xr_info_meta.next = nullptr; + create_info_.next = &vk_swap.xr_info_meta; + } + + // Need to be able to copy to the real swapchain + image_create_info.usage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; + + // Cube swapchains specific flags + if (xr_info.faceCount == 6) + { + image_create_info.flags |= VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT; + } + + // And the reset of the create info + image_create_info.imageType = VK_IMAGE_TYPE_2D; + image_create_info.format = static_cast(xr_info.format); + VkExtent3D& extent = image_create_info.extent; + extent.width = xr_info.width; + extent.height = xr_info.height; + extent.depth = 1U; + image_create_info.mipLevels = xr_info.mipCount; + + // NOTE: Not sure if these are in face major or array major order, but shouldn't matter + // to replay unless runtimes vary. + image_create_info.arrayLayers = xr_info.arraySize * xr_info.faceCount, + + image_create_info.samples = VK_SAMPLE_COUNT_1_BIT; + image_create_info.tiling = VK_IMAGE_TILING_OPTIMAL; + + image_create_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + image_create_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + + VkImageSubresourceRange& subres_range = vk_swap.whole_range; + subres_range.aspectMask = 0; + subres_range.aspectMask |= vkuFormatHasDepth(image_create_info.format) ? VK_IMAGE_ASPECT_DEPTH_BIT : 0; + subres_range.aspectMask |= vkuFormatHasStencil(image_create_info.format) ? VK_IMAGE_ASPECT_STENCIL_BIT : 0; + + if (subres_range.aspectMask) + { + vk_swap.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + } + else if (vkuFormatIsColor(image_create_info.format)) + { + subres_range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + vk_swap.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + } + else + { + // WIP: Properly log and handle this + assert(subres_range.aspectMask); + vk_swap.layout = VK_IMAGE_LAYOUT_UNDEFINED; + } + + subres_range.baseMipLevel = 0; + subres_range.levelCount = image_create_info.mipLevels; + subres_range.baseArrayLayer = 0; + subres_range.layerCount = image_create_info.arrayLayers; + + return xr_result; +} + +GFXRECON_END_NAMESPACE(openxr) +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // ENABLE_OPENXR_SUPPORT diff --git a/third_party/gfxreconstruct/framework/decode/parsed_block.cpp b/third_party/gfxreconstruct/framework/decode/parsed_block.cpp new file mode 100644 index 000000000..d11671940 --- /dev/null +++ b/third_party/gfxreconstruct/framework/decode/parsed_block.cpp @@ -0,0 +1,155 @@ +/* +** Copyright (c) 2018 Valve Corporation +** Copyright (c) 2018-2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#include "decode/block_parser.h" +#include "decode/parsed_block.h" + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) + +template +BlockBuffer::BlockSpan ParsedBlock::GetCompressedSpan(Args& args) +{ + if constexpr (DispatchTraits::kHasData) + { + // The data field for a deferred decompresion points to the start of the compressed block + GFXRECON_ASSERT(state_ == kDeferredDecompress); + GFXRECON_ASSERT(!block_data_.empty()); + // Assure that the data pointer is within block_data span (part 1) + GFXRECON_ASSERT(args.data >= block_data_.GetDataAs()); + const size_t offset = args.data - block_data_.GetDataAs(); + + // Assure that the data pointer is within block_data span (part 2) + GFXRECON_ASSERT(offset <= block_data_.size()); + return block_data_.AsSpan(offset); + } + return BlockBuffer::BlockSpan(); +} + +bool ParsedBlock::Decompress(BlockParser& parser) +{ + // Shouldn't call this unless we know it's needed + // Also, not safe if it isn't needed... + if (!NeedsDecompression()) + { + return IsReady(); + } + + auto decompress = [this, &parser](auto&& args_store) { + auto& args = *args_store; + using Args = std::decay_t; + if constexpr (DispatchTraits::kHasData) + { + auto compressed_span = GetCompressedSpan(args); + auto uncompressed_size = GetDispatchArgsDataSize(args); + UncompressedStore uncompressed_store = parser.DecompressSpan(compressed_span, uncompressed_size); + if (!uncompressed_store.empty()) + { + // Patch the data buffer pointer, and shift ownership of the backing store to the parsed block + args.data = uncompressed_store.template GetAs(); + UpdateUncompressedStore(std::move(uncompressed_store)); + } + } + }; + + std::visit(decompress, dispatch_args_); + return IsReady(); +} + +void ParsedBlock::UpdateUncompressedStore(UncompressedStore&& from_store) +{ + GFXRECON_ASSERT(state_ == kDeferredDecompress); + state_ = kReady; + uncompressed_store_ = std::move(from_store); +} + +util::DataSpan ParsedBlock::MakeIncompressibleBlockData(BlockBuffer& block_buffer, + BlockReferencePolicy policy, + bool references_block_buffer) noexcept +{ + if ((policy == ParsedBlock::kOwnedReference) || + ((policy == ParsedBlock::kOwnedReferenceAsNeeded) && references_block_buffer)) + { + // Use case: + // Preload replay of incompressible blocks that reference the raw block data as the *Arg::data parameter + // buffer + return block_buffer.ReleaseData(); + } + + // Use case: + // Immediate dispatch or usage within the life span of the block buffer + return block_buffer.MakeNonOwnedData(); +} + +util::DataSpan ParsedBlock::MakeUncompressedBlockData(BlockBuffer& block_buffer, BlockReferencePolicy policy) noexcept +{ + if ((policy == ParsedBlock::kOwnedReference) || (policy == ParsedBlock::kOwnedReferenceAsNeeded)) + { + // Use case: + // Preload replay noncompressed blocks that reference the raw block data as the *Arg::data parameter buffer + return block_buffer.ReleaseData(); + } + + // Use case: + // Immediate dispatch or usage within the life span of the block buffer + return block_buffer.MakeNonOwnedData(); +} + +util::DataSpan ParsedBlock::MakeDecompressedBlockData(BlockBuffer& block_buffer, BlockReferencePolicy policy) noexcept +{ + if (policy == kOwnedReference) + { + // Use case: + // If decoders/consumer that require block data exist during Preload replay + return block_buffer.ReleaseData(); + } + else if (policy == kNonOwnedReference) + { + // Use case: + // For immediate dispatch with raw block consuming decoder/consumers or + return block_buffer.MakeNonOwnedData(); + } + + // Use case: + // Preload replay without raw block consuming decoder/consumers (likely/performance mode of + // operation) NOTE: it is invalid to access the raw block data in this use case + return util::DataSpan(); +} + +util::DataSpan ParsedBlock::MakeDeferredDecompressBlockData(BlockBuffer& block_buffer, + BlockReferencePolicy policy) noexcept +{ + if (policy == kNonOwnedReference) + { + // Use case: + // FileTransformer does deferred decompression within the lifespan of the block_buffer + return block_buffer.MakeNonOwnedData(); + } + + // Use case: + // Preload replay deferred decompression is long after the block_buffer has be reused or destructed + return block_buffer.ReleaseData(); +} + +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/parsed_block.h b/third_party/gfxreconstruct/framework/decode/parsed_block.h new file mode 100644 index 000000000..c6b4c6558 --- /dev/null +++ b/third_party/gfxreconstruct/framework/decode/parsed_block.h @@ -0,0 +1,266 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_DECODE_PARSED_BLOCK_H +#define GFXRECON_DECODE_PARSED_BLOCK_H + +#include "format/format_util.h" +#include "decode/api_payload.h" +#include "decode/block_buffer.h" +#include "format/format_util.h" +#include "util/span.h" + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) + +class BlockParser; + +// ----------------------------------------------------------------------------- +// ParsedBlock +// +// Purpose: +// ParsedBlock owns a captured block (mapped or heap), plus optional +// uncompressed data and decoded arguments. +// +// The current form is intentionally verbose for prototype and implementation +// of Parser/Processor logic but can be significantly reduced. +// +// Current status: +// sizeof(ParsedBlock) ~ 136 B +// +// Oversized elements: +// Uses util::DataSpan for ownership/view coupling (48 B). +// UncompressedStore holds HeapBufferPool::Entry +// (Entry = 24 B, includes embedded pool* 8 B). +// +// Improvement plan (target size ~ 104-112 B): +// * Rewrite util::DataSpan as util::DataBuffer: +// - DataBuffer wraps valid storage variants (mapped or heap). +// - Removes data_/size_ shortcuts from DataSpan. +// - data()/size() provided via visitor (slow path). +// - Use make_span(buffer, off, len) for fast, non-owning access. +// - Expected savings: ~16 B (on 64-bit). +// +// * Refactor UncompressedStore: +// - Perhap refactor Entry to hide pool as prefix to the allocation +// - Perhaps hide HeapBuffer size as hidden prefix +// - Expected saving: 8-16 B +// +// * Keep DispatchArgs (56 B) for now: +// - Size matches ~95% of blocks. +// - 8-byte variant overhead simplifies anonymized usage. +// ----------------------------------------------------------------------------- +class ParsedBlock +{ + public: + enum BlockState + { + kInvalid = 0, // Set on read error (typically block size doesn't match expected parsed size) + kUnknown, // Set when block is of an unknown type (no parsing done beyond header) + kReady, // Set when block is decompressed, or doesn't need to be + kDeferredDecompress, // Set when block type is compressed, but decompression was suppressed + }; + + // In order to minimize memory migration overhead for both preloaded and non-preloaded dispatch, we have three + // modes of operation: + // + // kNonOwnedReference: + // For immediate dispatch of ParsedBlocks, unowned references are sufficient. + // NOTE: As the ParsedBlock's constructed under this policy may have pointers referring to the BlockBuffer + // contents, the ParsedBlock must not be retained or used after BlockBuffer reuse/reset/destruction. + // kOwnedReferenceAsNeeded: + // For preloaded dispatch, we can minimize the retained memory by only owning references for blocks that are + // actually referenced during replay (either uncompressed, or deferred compressed) + // kOwnedReference: + // For preloaded dispatch where raw block data is needed after parsing (for example to support re-compression) + // or Decoders/Consumers that want to access the raw block data. + // + enum BlockReferencePolicy + { + kNonOwnedReference, // Store a "Borrowed" reference to the block data buffer + kOwnedReferenceAsNeeded, // Store an owned reference as needed, or not at all + kOwnedReference // Always store an owned reference to the block data buffer + }; + + using PoolEntry = util::HeapBufferPool::Entry; // Placeholder for buffer pool + using UncompressedStore = PoolEntry; + + bool IsValid() const { return state_ != BlockState::kInvalid; } + bool IsReady() const { return state_ == BlockState::kReady; } + bool IsVisitable() const { return (state_ == BlockState::kReady) || (state_ == BlockState::kDeferredDecompress); } + bool IsUnknown() const { return state_ == BlockState::kUnknown; } + bool NeedsDecompression() const { return state_ == BlockState::kDeferredDecompress; } + BlockState GetState() const { return state_; } + const util::DataSpan& GetBlockData() const { return block_data_; } + const DispatchArgs& GetArgs() const { return dispatch_args_; } + explicit operator bool() const { return IsValid(); } + + template + bool Holds() const + { + using Store = DispatchStore; + return std::holds_alternative(dispatch_args_); + } + + template + const T& Get() const + { + using Store = DispatchStore; + GFXRECON_ASSERT(Holds()); + return *(std::get(dispatch_args_)); + } + + template + T& Get() + { + using Store = DispatchStore; + GFXRECON_ASSERT(Holds()); + return *(std::get(dispatch_args_)); + } + + // Move only (has owning data) + ParsedBlock(ParsedBlock&&) noexcept = default; + ParsedBlock& operator=(ParsedBlock&&) noexcept = default; + + // Copy verboten + ParsedBlock(const ParsedBlock&) = delete; + ParsedBlock& operator=(const ParsedBlock&) = delete; + + // The *BlockTag tags aren't really needed, we could just overload on BlockState or UncompressedStore, but I want to + // make this more obvious. The goal is to allow simple constructors covering all use cases to ensure RVO works + // well. + // + // NOTE: Passing tags "by value" to avoid adding unnecessary references to the call stack, also consistent with STL + // tag argument usage + + // Create an empty block with no valid data + struct InvalidBlockTag + {}; + ParsedBlock(const InvalidBlockTag) : block_data_(), uncompressed_store_(), state_(BlockState::kInvalid) {} + + // Create an unparsed block, either because the block type is unknown, or that is known, but has no + // matching Args struct + struct UnknownBlockTag + {}; + ParsedBlock(const UnknownBlockTag, util::DataSpan&& block_data) : + block_data_(std::move(block_data)), uncompressed_store_(), state_(BlockState::kUnknown) + {} + + // Create a block that must not be compressed with asserts on tag construction + struct IncompressibleBlockTag + { + IncompressibleBlockTag() = delete; + IncompressibleBlockTag(const BlockBuffer& block_buffer) + { + GFXRECON_ASSERT(!format::IsBlockCompressed(block_buffer.Header().type)); + } + }; + static util::DataSpan MakeIncompressibleBlockData(BlockBuffer& block_buffer, + BlockReferencePolicy policy, + bool references_block_buffer) noexcept; + template + ParsedBlock(IncompressibleBlockTag, + BlockBuffer& block_buffer, + BlockReferencePolicy policy, + bool references_block_buffer, + ArgPayload&& args) : + block_data_(MakeIncompressibleBlockData(block_buffer, policy, references_block_buffer)), + uncompressed_store_(), dispatch_args_(MakeDispatchArgs(std::forward(args))), state_(kReady) + {} + + // Create a non-compressed block of a compressible block base type + // TODO: Is there a clean way to static assert that a block *type* is compressible here? + struct UncompressedBlockTag + {}; + static util::DataSpan MakeUncompressedBlockData(BlockBuffer& block_buffer, BlockReferencePolicy policy) noexcept; + template + ParsedBlock(UncompressedBlockTag, BlockBuffer& block_buffer, BlockReferencePolicy policy, ArgPayload&& args) : + block_data_(MakeUncompressedBlockData(block_buffer, policy)), uncompressed_store_(), + dispatch_args_(MakeDispatchArgs(std::forward(args))), state_(kReady) + {} + + // Create a block that has been decompressed on construction + struct DecompressedBlockTag + {}; + static util::DataSpan MakeDecompressedBlockData(BlockBuffer& block_buffer, BlockReferencePolicy policy) noexcept; + + // For owned uncompressed store + template + ParsedBlock(DecompressedBlockTag, + BlockBuffer& block_buffer, + BlockReferencePolicy policy, + UncompressedStore&& uncompressed_store, + ArgPayload&& args) : + block_data_(MakeDecompressedBlockData(block_buffer, policy)), + uncompressed_store_(std::move(uncompressed_store)), + dispatch_args_(MakeDispatchArgs(std::forward(args))), state_(kReady) + {} + + // For unowned uncompressed store + template + ParsedBlock(DecompressedBlockTag, const BlockBuffer& block_buffer, ArgPayload&& args) : + block_data_(block_buffer.MakeNonOwnedData()), uncompressed_store_(), + dispatch_args_(MakeDispatchArgs(std::forward(args))), state_(kReady) + {} + + // Created a block with deferred decompression + struct DeferredDecompressBlockTag + {}; + static util::DataSpan MakeDeferredDecompressBlockData(BlockBuffer& block_buffer, + BlockReferencePolicy policy) noexcept; + template + ParsedBlock(DeferredDecompressBlockTag, BlockBuffer& block_buffer, BlockReferencePolicy policy, ArgPayload&& args) : + block_data_(MakeDeferredDecompressBlockData(block_buffer, policy)), uncompressed_store_(), + dispatch_args_(MakeDispatchArgs(std::forward(args))), state_(kDeferredDecompress) + {} + + [[nodiscard]] bool Decompress(BlockParser& parser); + + private: + template + BlockBuffer::BlockSpan GetCompressedSpan(Args& args); + void UpdateUncompressedStore(UncompressedStore&& from_store); + + template + void TouchUpArgsData() + { + using Args = std::decay_t; + static_assert(DispatchTraits::kHasData); + // Get is valid on empty (returns nullptr) + Get().data = uncompressed_store_.template GetAs(); + } + + // The original contents of the read block (also backing store for uncompressed parameter views) + util::DataSpan block_data_; + + // Backing store for the uncompressed parameter buffer, if needed. + UncompressedStore uncompressed_store_; + + // Variant of all parsed results + DispatchArgs dispatch_args_; // Variant with a type decoded block + BlockState state_ = BlockState::kInvalid; +}; + +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // GFXRECON_DECODE_PARSED_BLOCK_H diff --git a/third_party/gfxreconstruct/framework/decode/pointer_decoder.h b/third_party/gfxreconstruct/framework/decode/pointer_decoder.h index e8baf65a2..a7f554beb 100644 --- a/third_party/gfxreconstruct/framework/decode/pointer_decoder.h +++ b/third_party/gfxreconstruct/framework/decode/pointer_decoder.h @@ -121,6 +121,7 @@ class PointerDecoder : public PointerDecoderBase size_t DecodeInt64(const uint8_t* buffer, size_t buffer_size) { return DecodeFrom(buffer, buffer_size); } size_t DecodeUInt64(const uint8_t* buffer, size_t buffer_size) { return DecodeFrom(buffer, buffer_size); } size_t DecodeFloat(const uint8_t* buffer, size_t buffer_size) { return DecodeFrom(buffer, buffer_size); } + size_t DecodeDouble(const uint8_t* buffer, size_t buffer_size) { return DecodeFrom(buffer, buffer_size); } // Decode pointer to a void pointer, encoded with ParameterEncoder::EncodeVoidPtrPtr. size_t DecodeVoidPtr(const uint8_t* buffer, size_t buffer_size) { return DecodeFrom(buffer, buffer_size); } diff --git a/third_party/gfxreconstruct/framework/decode/preload_file_processor.cpp b/third_party/gfxreconstruct/framework/decode/preload_file_processor.cpp index 3740668a0..94d6781be 100644 --- a/third_party/gfxreconstruct/framework/decode/preload_file_processor.cpp +++ b/third_party/gfxreconstruct/framework/decode/preload_file_processor.cpp @@ -27,45 +27,25 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) -PreloadFileProcessor::PreloadFileProcessor() : status_(PreloadStatus::kInactive) {} +PreloadFileProcessor::PreloadFileProcessor() {} void PreloadFileProcessor::PreloadNextFrames(size_t count) { - status_ = PreloadStatus::kRecord; while (--count != 0U) { - ProcessNextFrame(); + DoProcessNextFrame([this]() { return this->PreloadBlocksOneFrame(); }); } - status_ = PreloadStatus::kReplay; + preload_block_data_ = std::move(pending_block_data_); } -PreloadFileProcessor::PreloadBuffer::PreloadBuffer() : replay_offset_(0) {} - -void PreloadFileProcessor::PreloadBuffer::Reserve(size_t size) +bool PreloadFileProcessor::PreloadBlocksOneFrame() { - container_.reserve(container_.size() + size); -} - -size_t PreloadFileProcessor::PreloadBuffer::Read(void* destination, size_t destination_size) -{ - auto remaining_buffer_data = container_.size() - replay_offset_; - auto read_size = destination_size > remaining_buffer_data ? remaining_buffer_data : destination_size; - memcpy(destination, &container_[replay_offset_], read_size); - replay_offset_ += read_size; - return read_size; -} + BlockBuffer block_buffer; + bool success = true; -void PreloadFileProcessor::PreloadBuffer::Reset() -{ - container_.clear(); - container_.shrink_to_fit(); - replay_offset_ = 0; -} - -bool PreloadFileProcessor::ProcessBlocks() -{ - format::BlockHeader block_header; - bool success = true; + BlockParser block_parser([this](BlockIOError err, const char* message) { HandleBlockReadError(err, message); }, + pool_, + compressor_.get()); while (success) { @@ -74,271 +54,67 @@ bool PreloadFileProcessor::ProcessBlocks() if (success) { - success = ReadBlockHeader(&block_header); - - if (status_ != PreloadStatus::kRecord) - { - // Since block_index isn't relevant during recording, skip setting it in the decoders - for (auto* decoder : decoders_) - { - decoder->SetCurrentBlockIndex(block_index_); - } - } - + success = ReadBlockBuffer(block_parser, block_buffer); if (success) { - if (format::RemoveCompressedBlockBit(block_header.type) == format::BlockType::kFunctionCallBlock) - { - format::ApiCallId api_call_id = format::ApiCallId::ApiCall_Unknown; - - success = ReadBytes(&api_call_id, sizeof(api_call_id)); - - if (success) - { - const auto is_frame_delimiter = IsFrameDelimiter(api_call_id); - if (status_ == PreloadStatus::kRecord) - { - success = ReadParameterBytes(block_header, api_call_id, preload_buffer_); - if (!success) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read function call block data"); - } - - if (is_frame_delimiter) - { - break; - } - } - else - { - bool should_break = false; - success = ProcessFunctionCall(block_header, api_call_id, should_break); - if (should_break) - { - break; - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read function call block header"); - } - } - else if (format::RemoveCompressedBlockBit(block_header.type) == format::BlockType::kMethodCallBlock) - { - format::ApiCallId api_call_id = format::ApiCallId::ApiCall_Unknown; - - success = ReadBytes(&api_call_id, sizeof(api_call_id)); - - if (success) - { - const auto is_frame_delimiter = IsFrameDelimiter(api_call_id); - if (status_ == PreloadStatus::kRecord) - { - success = ReadParameterBytes(block_header, api_call_id, preload_buffer_); - if (!success) - { - HandleBlockReadError(kErrorReadingBlockData, - "Failed to preload method call block data"); - } - if (is_frame_delimiter) - { - break; - } - } - else - { - bool should_break = false; - success = ProcessMethodCall(block_header, api_call_id, should_break); - if (should_break) - { - break; - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read function call block header"); - } - } - else if (format::RemoveCompressedBlockBit(block_header.type) == format::BlockType::kMetaDataBlock) - { - if (status_ == PreloadStatus::kRecord) - { - success = ReadParameterBytes(block_header, preload_buffer_); - if (!success) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to preload meta-data block"); - } - } - else - { - format::MetaDataId meta_data_id = format::MakeMetaDataId( - format::ApiFamilyId::ApiFamily_None, format::MetaDataType::kUnknownMetaDataType); + // Valid checks for the presence and size of the data span matching the header + success = block_buffer.IsValid(); - success = ReadBytes(&meta_data_id, sizeof(meta_data_id)); - - if (success) - { - success = ProcessMetaData(block_header, meta_data_id); - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read meta-data block header"); - } - } - } - else if (block_header.type == format::BlockType::kFrameMarkerBlock) - { - format::MarkerType marker_type = format::MarkerType::kUnknownMarker; - uint64_t frame_number = 0; - - success = ReadBytes(&marker_type, sizeof(marker_type)); - - if (success) - { - if (status_ == PreloadStatus::kRecord) - { - const auto is_frame_delimiter = IsFrameDelimiter(block_header.type, marker_type); - success = ReadParameterBytes(block_header, marker_type, preload_buffer_); - if (!success) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to preload frame marker block"); - } - if (is_frame_delimiter) - { - break; - } - } - else - { - bool should_break = false; - success = ProcessFrameMarker(block_header, marker_type, should_break); - - if (should_break) - { - break; - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read frame marker header"); - } - } - else if (block_header.type == format::BlockType::kStateMarkerBlock) - { - format::MarkerType marker_type = format::MarkerType::kUnknownMarker; - uint64_t frame_number = 0; - - if (status_ == PreloadStatus::kRecord) - { - success = ReadParameterBytes(block_header, preload_buffer_); - if (!success) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to preload state marker block data"); - } - } - else - { - success = ReadBytes(&marker_type, sizeof(marker_type)); - - if (success) - { - success = ProcessStateMarker(block_header, marker_type); - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read state marker header"); - } - } - } - else if (block_header.type == format::BlockType::kAnnotation) + if (success) { - if (annotation_handler_ != nullptr) + // Note: in order to support kExecuteBlocksFromFile in preload, we need to add special case logic + // to look for the meta data block here, and allow it to push itself on the stack, and then + // add command counting here as well. + const bool end_of_frame = block_buffer.IsFrameDelimiter(*this); + // Record the block data for replay, Moves DataSpan out of BlockBuffer, so don't use after this. + // NOTE: It is intentional to only store only the data span to make preload lightweight a possible + pending_block_data_.emplace_back(std::move(block_buffer.ReleaseData())); + if (end_of_frame) { - if (status_ == PreloadStatus::kRecord) - { - success = ReadParameterBytes(block_header, preload_buffer_); - if (!success) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to preload annotation block data"); - } - } - else - { - format::AnnotationType annotation_type = format::AnnotationType::kUnknown; - - success = ReadBytes(&annotation_type, sizeof(annotation_type)); - - if (success) - { - success = ProcessAnnotation(block_header, annotation_type); - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read annotation block header"); - } - } - } - else - { - // If there is no annotation handler to process the annotation, we can skip the annotation - // block. - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, block_header.size); - success = SkipBytes(static_cast(block_header.size)); + // GFXRECON_LOG_INFO("Frame delimiter encountered during preload, ending frame preload."); + break; } } else { - // Unrecognized block type. - GFXRECON_LOG_WARNING("Skipping unrecognized file block with type %u", block_header.type); - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, block_header.size); - success = SkipBytes(static_cast(block_header.size)); + std::string msg = "Failed to preload block data of size " + + std::to_string(block_buffer.Header().size) + " for block type " + + format::ToString(block_buffer.Header().type); + HandleBlockReadError(kErrorReadingBlockData, msg.c_str()); } } else { - if (feof(GetFileDescriptor()) == 0) - { - // No data has been read for the current block, so we don't use 'HandleBlockReadError' here, as - // it assumes that the block header has been successfully read and will print an incomplete - // block at end of file warning when the file is at EOF without an error. For this case (the - // normal EOF case) we print nothing at EOF, or print an error message and set the error code - // directly when not at EOF. - GFXRECON_LOG_ERROR("Failed to read block header"); - error_state_ = kErrorReadingBlockHeader; - } + // We can succeed at EOF, if there are more files on the stack. + success = HandleBlockEof("preload", false /* no frame or block info */); } } - if (status_ != PreloadStatus::kRecord) - { - ++block_index_; - } } return success; } -bool PreloadFileProcessor::ReadBytes(void* buffer, size_t buffer_size) +// Grab the block data off the front of the +bool PreloadFileProcessor::GetBlockBuffer(BlockParser& block_parser, BlockBuffer& block_buffer) { - size_t bytes_read = 0; - if (status_ == PreloadStatus::kReplay) - { - bytes_read = preload_buffer_.Read(buffer, buffer_size); - if (preload_buffer_.ReplayFinished()) - { - status_ = PreloadStatus::kInactive; - } - } - else + // Quick escape + if (preload_block_data_.empty()) { - bytes_read = util::platform::FileRead(buffer, buffer_size, GetFileDescriptor()); + return Base::GetBlockBuffer(block_parser, block_buffer); } - bytes_read_ += bytes_read; - return bytes_read == buffer_size; + block_buffer = BlockBuffer(std::move(preload_block_data_.front())); + preload_block_data_.pop_front(); + + // Caller expects read position just past header + // Again the pattern is to validate the header presense, not span consistency + bool success = block_buffer.SeekTo(sizeof(format::BlockHeader)); + + // However, preload should never add data the doesn't result in a valid block_buffer. + // Should have failed in preload. + GFXRECON_ASSERT(block_buffer.IsValid()); + + return success; } GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/preload_file_processor.h b/third_party/gfxreconstruct/framework/decode/preload_file_processor.h index 521a379f5..eb441e383 100644 --- a/third_party/gfxreconstruct/framework/decode/preload_file_processor.h +++ b/third_party/gfxreconstruct/framework/decode/preload_file_processor.h @@ -24,6 +24,8 @@ #ifndef GFXRECON_DECODE_PRELOAD_FILE_PROCESSOR_H #define GFXRECON_DECODE_PRELOAD_FILE_PROCESSOR_H +#include + #include "decode/file_processor.h" #include "format/format_util.h" @@ -33,79 +35,22 @@ GFXRECON_BEGIN_NAMESPACE(decode) class PreloadFileProcessor : public FileProcessor { public: + using Base = FileProcessor; PreloadFileProcessor(); // Preloads *count* frames to continuous, expandable memory buffer void PreloadNextFrames(size_t count); + // Replaces ProcessBlocksOneFrame() to just read blocks into memory buffer + bool PreloadBlocksOneFrame(); private: - class PreloadBuffer - { - public: - PreloadBuffer(); - - // Ensures the buffer can store additional *size* bytes - void Reserve(size_t size); - - // Copies the preloaded data from the internal container into the provided destination buffer - // Accounts for current replay position - size_t Read(void* destination, size_t destination_size); - - // Copies provided object of type T into the preload buffer - // Returns a pointer to inserted object in the container - template - inline void* Add(T* data) - { - return &*container_.insert( - container_.end(), reinterpret_cast(data), reinterpret_cast(data) + sizeof(T)); - } - - // Allocates *size* bytes in the preload buffer - // Returns the pointer to initialized memory - inline void* Add(size_t size) { return &*container_.insert(container_.end(), size, 0); } - - // Indicates whether the preloaded calls have been replayed in full - inline bool ReplayFinished() { return !container_.empty() && replay_offset_ >= container_.size(); } - - // Clears the preload buffer, resets internal state - void Reset(); - - private: - std::vector container_; - size_t replay_offset_; - - } preload_buffer_; - - enum class PreloadStatus - { - kInactive, - kRecord, - kReplay - } status_; - - template - bool ReadParameterBytes(format::BlockHeader& block_header, T& data, PreloadBuffer& preload_buffer) - { - preload_buffer.Reserve(sizeof(block_header) + block_header.size); - preload_buffer.Add(&block_header); - preload_buffer.Add(&data); - size_t parameters_size = block_header.size - sizeof(T); - void* parameter_buffer = preload_buffer.Add(parameters_size); - return ReadBytes(parameter_buffer, parameters_size); - } - - bool ReadParameterBytes(format::BlockHeader& block_header, PreloadBuffer& preload_buffer) - { - preload_buffer.Reserve(sizeof(block_header) + block_header.size); - preload_buffer.Add(&block_header); - size_t parameters_size = block_header.size; - void* parameter_buffer = preload_buffer.Add(parameters_size); - return ReadBytes(parameter_buffer, parameters_size); - } - - bool ProcessBlocks() override; + bool GetBlockBuffer(BlockParser& block_parser, BlockBuffer& block_buffer) override; - bool ReadBytes(void* buffer, size_t buffer_size) override; + // NOTE: We only need to store the block image, we can reconstitute the block header on replay. + // Given the number (sometimes 1,000's) of blocks/frame, not storing BlockBuffer's here is + // the compact choice + std::deque pending_block_data_; + std::deque preload_block_data_; }; GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/screenshot_handler.cpp b/third_party/gfxreconstruct/framework/decode/screenshot_handler.cpp index 705724e7f..89465c93f 100644 --- a/third_party/gfxreconstruct/framework/decode/screenshot_handler.cpp +++ b/third_party/gfxreconstruct/framework/decode/screenshot_handler.cpp @@ -195,7 +195,7 @@ void ScreenshotHandler::WriteImage(const std::string& filen if (result == VK_SUCCESS) { - auto image_aspect_mask = graphics::GetFormatAspectMask(format); + auto image_aspect_mask = graphics::GetFormatAspects(format); // Transition source image from image_layout to the TRANSFER_DST layout. VkImageMemoryBarrier image_barrier = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER }; @@ -226,7 +226,7 @@ void ScreenshotHandler::WriteImage(const std::string& filen // The 'copy_image' is the image to be used with the image to buffer copy. VkImage copy_image = image; - auto copy_image_aspect_mask = graphics::GetFormatAspectMask(copy_format); + auto copy_image_aspect_mask = graphics::GetFormatAspects(copy_format); if (copy_resource.convert_image != VK_NULL_HANDLE) { diff --git a/third_party/gfxreconstruct/framework/decode/stat_decoder_base.h b/third_party/gfxreconstruct/framework/decode/stat_decoder_base.h index a52813664..27ea25a15 100644 --- a/third_party/gfxreconstruct/framework/decode/stat_decoder_base.h +++ b/third_party/gfxreconstruct/framework/decode/stat_decoder_base.h @@ -45,9 +45,9 @@ class StatDecoderBase : public ApiDecoder virtual void WaitIdle() override{}; - virtual void DispatchDriverInfo(format::ThreadId thread_id, format::DriverInfoBlock& info) override {} + virtual void DispatchDriverInfo(format::ThreadId thread_id, const format::DriverInfoBlock& info) override {} - virtual void DispatchExeFileInfo(format::ThreadId thread_id, format::ExeFileInfoBlock& info) override {} + virtual void DispatchExeFileInfo(format::ThreadId thread_id, const format::ExeFileInfoBlock& info) override {} void AddConsumer(StatConsumerBase* consumer) { consumers_.push_back(consumer); } @@ -143,6 +143,13 @@ class StatDecoderBase : public ApiDecoder uint64_t address) override {} + void DispatchSetOpaqueDescriptorDataCommand(format::ThreadId thread_id, + format::HandleId device_id, + format::HandleId object_id, + uint32_t data_size, + const uint8_t* data) override + {} + virtual void DispatchSetRayTracingShaderGroupHandlesCommand(format::ThreadId thread_id, format::HandleId device_id, format::HandleId buffer_id, @@ -188,9 +195,9 @@ class StatDecoderBase : public ApiDecoder {} virtual void DispatchInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) override + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) override {} private: diff --git a/third_party/gfxreconstruct/framework/decode/struct_pointer_decoder.h b/third_party/gfxreconstruct/framework/decode/struct_pointer_decoder.h index b21bf97a5..8beef4f25 100644 --- a/third_party/gfxreconstruct/framework/decode/struct_pointer_decoder.h +++ b/third_party/gfxreconstruct/framework/decode/struct_pointer_decoder.h @@ -171,7 +171,7 @@ class StructPointerDecoder : public PointerDecoderBase decoded_structs_[i].decoded_value = &struct_memory_[i]; // Note: We only expect this class to be used with structs that have a decode_struct function. - // If an error is encoutered here due to a new struct type, the struct decoders need to be + // If an error is encountered here due to a new struct type, the struct decoders need to be // updated to support the new type. bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), &decoded_structs_[i]); } @@ -232,7 +232,7 @@ class StructPointerDecoder : public PointerDecoderBase decoded_structs_[i].decoded_value = &struct_memory_[i]; // Note: We only expect this class to be used with structs that have a decode_struct function. - // If an error is encoutered here due to a new struct type, the struct decoders need to be + // If an error is encountered here due to a new struct type, the struct decoders need to be // updated to support the new type. bytes_read += T::DecodeAppropriate((buffer + bytes_read), (buffer_size - bytes_read), &decoded_structs_[i]); @@ -319,8 +319,8 @@ class StructPointerDecoder : public PointerDecoderBase { inner_decoded_structs[j].decoded_value = &inner_struct_memory[j]; // Note: We only expect this class to be used with structs that have a decode_struct function. - // If an error is encoutered here due to a new struct type, the struct decoders need to be - // updated to support the new type. + // If an error is encountered here due to a new struct type, the struct decoders need to + // be updated to support the new type. bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), &inner_decoded_structs[j]); } @@ -393,8 +393,8 @@ class StructPointerDecoder : public PointerDecoderBase { inner_decoded_structs[j].decoded_value = &inner_struct_memory[j]; // Note: We only expect this class to be used with structs that have a decode_struct function. - // If an error is encoutered here due to a new struct type, the struct decoders need to be - // updated to support the new type. + // If an error is encountered here due to a new struct type, the struct decoders need to + // be updated to support the new type. bytes_read += T::DecodeAppropriate( (buffer + bytes_read), (buffer_size - bytes_read), &inner_decoded_structs[j]); } diff --git a/third_party/gfxreconstruct/framework/decode/test/main.cpp b/third_party/gfxreconstruct/framework/decode/test/main.cpp index 28613c430..350e0e18c 100644 --- a/third_party/gfxreconstruct/framework/decode/test/main.cpp +++ b/third_party/gfxreconstruct/framework/decode/test/main.cpp @@ -32,7 +32,7 @@ #include "format/format.h" #include "format/format_util.h" -#include "vulkan/vulkan.h" +#include "decode/block_parser.h" #include @@ -150,3 +150,16 @@ TEST_CASE("handle IDs need to be mapped to valid handles", "[wrapper]") gfxrecon::util::Log::Release(); } + +TEST_CASE("BlockParser basic usage", "[wrapper]") +{ + bool err_triggered = false; + auto err_handler = [&err_triggered](gfxrecon::decode::BlockIOError, const char*) { err_triggered = true; }; + + auto buffer_pool = gfxrecon::util::HeapBufferPool::Create(); + gfxrecon::decode::BlockParser block_parser(err_handler, buffer_pool, nullptr); + + // this should trigger some error + block_parser.HandleBlockReadError(gfxrecon::decode::BlockIOError::kErrorReadingBlockData, "fatal fake error"); + REQUIRE(err_triggered); +} \ No newline at end of file diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_address_replacer.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_address_replacer.cpp index 2378aa884..2b70134d0 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_address_replacer.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_address_replacer.cpp @@ -28,6 +28,8 @@ #include "util/alignment_utils.h" #include "util/logging.h" +#include + GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) @@ -121,7 +123,7 @@ struct QueueSubmitHelper } } - void swap(QueueSubmitHelper& other) + void swap(QueueSubmitHelper& other) noexcept { std::swap(device_table, other.device_table); std::swap(device, other.device); @@ -179,7 +181,7 @@ decode::VulkanAddressReplacer::buffer_context_t::operator=(buffer_context_t othe return *this; } -void decode::VulkanAddressReplacer::buffer_context_t::swap(buffer_context_t& other) +void decode::VulkanAddressReplacer::buffer_context_t::swap(buffer_context_t& other) noexcept { std::swap(resource_allocator, other.resource_allocator); std::swap(num_bytes, other.num_bytes); @@ -224,10 +226,53 @@ decode::VulkanAddressReplacer::acceleration_structure_asset_t::~acceleration_str } } +decode::VulkanAddressReplacer::submit_asset_t::submit_asset_t(submit_asset_t&& other) noexcept : submit_asset_t() +{ + swap(other); +} + +decode::VulkanAddressReplacer::submit_asset_t& +decode::VulkanAddressReplacer::submit_asset_t::operator=(submit_asset_t other) +{ + swap(other); + return *this; +} + +void decode::VulkanAddressReplacer::submit_asset_t::swap(submit_asset_t& other) noexcept +{ + std::swap(device, other.device); + std::swap(command_pool, other.command_pool); + std::swap(command_buffer, other.command_buffer); + std::swap(fence, other.fence); + std::swap(signal_semaphore, other.signal_semaphore); + std::swap(destroy_fence_fn, other.destroy_fence_fn); + std::swap(free_command_buffers_fn, other.free_command_buffers_fn); + std::swap(destroy_semaphore_fn, other.destroy_semaphore_fn); +} + +decode::VulkanAddressReplacer::submit_asset_t::~submit_asset_t() +{ + if (device != VK_NULL_HANDLE) + { + if (destroy_fence_fn != nullptr && fence != VK_NULL_HANDLE) + { + destroy_fence_fn(device, fence, nullptr); + } + if (free_command_buffers_fn != nullptr && command_buffer != VK_NULL_HANDLE) + { + free_command_buffers_fn(device, command_pool, 1, &command_buffer); + } + if (destroy_semaphore_fn != nullptr && signal_semaphore != VK_NULL_HANDLE) + { + destroy_semaphore_fn(device, signal_semaphore, nullptr); + } + } +} + VulkanAddressReplacer::VulkanAddressReplacer(const VulkanDeviceInfo* device_info, const graphics::VulkanDeviceTable* device_table, const graphics::VulkanInstanceTable* instance_table, - const decode::CommonObjectInfoTable& object_table) : + decode::CommonObjectInfoTable& object_table) : device_table_(device_table), object_table_(&object_table) { @@ -267,9 +312,8 @@ void VulkanAddressReplacer::SetRaytracingProperties(const decode::VulkanPhysical replay_acceleration_structure_properties_ = *physical_device_info->replay_device_info->acceleration_structure_properties; } - GFXRECON_ASSERT(physical_device_info_->replay_device_info->memory_properties.has_value()); - memory_properties_ = *physical_device_info_->replay_device_info->memory_properties; } + capture_memory_properties_ = physical_device_info_->capture_memory_properties; } if (capture_ray_properties_ && replay_ray_properties_) @@ -291,6 +335,8 @@ VulkanAddressReplacer::~VulkanAddressReplacer() pipeline_context_map_.clear(); shadow_sbt_map_.clear(); shadow_as_map_.clear(); + submit_asset_map_.clear(); + submit_asset_ = {}; if (pipeline_bda_ != VK_NULL_HANDLE) { @@ -308,34 +354,26 @@ VulkanAddressReplacer::~VulkanAddressReplacer() { device_table_->DestroyPipelineLayout(device_, pipeline_layout_, nullptr); } - if (query_pool_ != VK_NULL_HANDLE) { device_table_->DestroyQueryPool(device_, query_pool_, nullptr); } - if (fence_ != VK_NULL_HANDLE) - { - device_table_->DestroyFence(device_, fence_, nullptr); - } - if (command_buffer_ != VK_NULL_HANDLE) - { - GFXRECON_ASSERT(command_pool_ != VK_NULL_HANDLE); - device_table_->FreeCommandBuffers(device_, command_pool_, 1, &command_buffer_); - } if (command_pool_ != VK_NULL_HANDLE) { device_table_->DestroyCommandPool(device_, command_pool_, nullptr); } } -void VulkanAddressReplacer::UpdateBufferAddresses(const VulkanCommandBufferInfo* command_buffer_info, - const VkDeviceAddress* addresses, - uint32_t num_addresses, - const decode::VulkanDeviceAddressTracker& address_tracker) +VkSemaphore VulkanAddressReplacer::UpdateBufferAddresses( + const VulkanCommandBufferInfo* command_buffer_info, + const VkDeviceAddress* addresses, + uint32_t num_addresses, + const decode::VulkanDeviceAddressTracker& address_tracker, + const std::optional>>& wait_semaphores) { if (addresses != nullptr && num_addresses > 0) { - GFXRECON_LOG_INFO_ONCE("VulkanAddressReplacer::UpdateBufferAddresses(): Replay is adjusting mismatching " + GFXRECON_LOG_INFO_ONCE("VulkanAddressReplacer::UpdateBufferAddresses(): Replay is adjusting " "buffer-device-addresses in-place using a compute-dispatch"); storage_bda_binary_.clear(); @@ -349,20 +387,157 @@ void VulkanAddressReplacer::UpdateBufferAddresses(const VulkanCommandBufferInfo* if (command_buffer_info != nullptr) { - run_compute_replace( - command_buffer_info, addresses, num_addresses, address_tracker, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT); + if (!wait_semaphores) + { + run_compute_replace( + command_buffer_info, addresses, num_addresses, address_tracker, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT); + } + else + { + // don't inject into the command-buffer, instead use a separate submit + submit_asset_t& submit_asset = submit_asset_map_[command_buffer_info->handle]; + if (!init_queue_assets() || !create_submit_asset(submit_asset)) + { + GFXRECON_LOG_WARNING_ONCE( + "VulkanAddressReplacer::UpdateBufferAddresses: could not create required submit-assets"); + return VK_NULL_HANDLE; + } + + device_table_->ResetFences(device_, 1, &submit_asset.fence); + + VkCommandBufferBeginInfo command_buffer_begin_info; + command_buffer_begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + command_buffer_begin_info.pNext = nullptr; + command_buffer_begin_info.flags = 0; + command_buffer_begin_info.pInheritanceInfo = nullptr; + device_table_->BeginCommandBuffer(submit_asset.command_buffer, &command_buffer_begin_info); + + VulkanCommandBufferInfo fake_info = {}; + fake_info.handle = submit_asset.command_buffer; + run_compute_replace( + &fake_info, addresses, num_addresses, address_tracker, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT); + + device_table_->EndCommandBuffer(submit_asset.command_buffer); + + std::vector semaphore_handles(wait_semaphores->size()); + std::vector semaphore_values(wait_semaphores->size()); + std::vector wait_dst_stages(wait_semaphores->size(), + VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); + + for (uint32_t i = 0; i < wait_semaphores->size(); ++i) + { + semaphore_handles[i] = wait_semaphores.value()[i].first; + semaphore_values[i] = wait_semaphores.value()[i].second; + } + + VkTimelineSemaphoreSubmitInfo timeline_info = {}; + timeline_info.sType = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO; + timeline_info.waitSemaphoreValueCount = wait_semaphores->size(); + timeline_info.pWaitSemaphoreValues = wait_semaphores->empty() ? nullptr : semaphore_values.data(); + + VkSubmitInfo submit_info = { VK_STRUCTURE_TYPE_SUBMIT_INFO }; + submit_info.pNext = &timeline_info; + submit_info.waitSemaphoreCount = wait_semaphores->size(); + submit_info.pWaitSemaphores = wait_semaphores->empty() ? nullptr : semaphore_handles.data(); + submit_info.pWaitDstStageMask = wait_semaphores->empty() ? nullptr : wait_dst_stages.data(); + submit_info.commandBufferCount = 1; + submit_info.pCommandBuffers = &submit_asset.command_buffer; + submit_info.signalSemaphoreCount = 1; + submit_info.pSignalSemaphores = &submit_asset.signal_semaphore; + + // submit + device_table_->QueueSubmit(queue_, 1, &submit_info, submit_asset.fence); + + // return signal-semaphore + return submit_asset.signal_semaphore; + } } else if (init_queue_assets()) { // reset/submit/sync command-buffer - QueueSubmitHelper queue_submit_helper(device_table_, device_, command_buffer_, queue_, fence_); + QueueSubmitHelper queue_submit_helper( + device_table_, device_, submit_asset_.command_buffer, queue_, submit_asset_.fence); VulkanCommandBufferInfo fake_info = {}; - fake_info.handle = command_buffer_; + fake_info.handle = submit_asset_.command_buffer; run_compute_replace( &fake_info, addresses, num_addresses, address_tracker, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT); } } + return VK_NULL_HANDLE; +} + +void VulkanAddressReplacer::ResolveBufferAddresses(VulkanCommandBufferInfo* command_buffer_info, + const decode::VulkanDeviceAddressTracker& address_tracker) +{ + for (const auto& [buffer_info, offset_pairs] : command_buffer_info->addresses_to_resolve) + { + // TODO: implement read-back for device-local GPU buffer using a compute-dispatch or vkCmdCopyBuffers + if (!(buffer_info->memory_property_flags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)) + { + GFXRECON_LOG_WARNING_ONCE("%s: is required for buffer-handle: %d -- but currently only implemented for " + "host-visible buffers. replay is likely going to fail.", + __func__, + buffer_info->capture_id); + continue; + } + + // map buffer + void* ptr = nullptr; + VkResult result = + resource_allocator_->MapResourceMemoryDirect(VK_WHOLE_SIZE, 0, &ptr, buffer_info->allocator_data); + + if (result == VK_SUCCESS && ptr != nullptr) + { + for (const auto& [offset, stride] : offset_pairs) + { + // read an address from mapped pointer + VkDeviceAddress buffer_address = + *reinterpret_cast(static_cast(ptr) + offset); + + auto* found_buffer_info = address_tracker.GetBufferByCaptureDeviceAddress(buffer_address); + bool already_replaced = false; + + // consider already replaced address + if (found_buffer_info == nullptr) + { + found_buffer_info = address_tracker.GetBufferByReplayDeviceAddress(buffer_address); + already_replaced = found_buffer_info; + } + GFXRECON_ASSERT(found_buffer_info); + + // ensure buffer exists and replacement actually required + if (found_buffer_info != nullptr && found_buffer_info->replay_address != 0 && + found_buffer_info->capture_address != found_buffer_info->replay_address) + { + VkDeviceAddress base_address = + already_replaced ? found_buffer_info->replay_address : found_buffer_info->capture_address; + uint32_t address_offset = buffer_address - base_address; + + // this addresses is inside another referenced buffer -> record for replacement + VkDeviceAddress address = found_buffer_info->replay_address + address_offset; + + VkDeviceAddress range_end = found_buffer_info->replay_address + found_buffer_info->size; + command_buffer_info->addresses_to_replace.insert(address); + + if (stride > 0) + { + address += stride; + for (; address < range_end; address += stride) + { + command_buffer_info->addresses_to_replace.insert(address); + } + } + } + } + + // unmap buffer again + resource_allocator_->UnmapResourceMemoryDirect(buffer_info->allocator_data); + } + } + + // everything is resolved, clear + command_buffer_info->addresses_to_resolve.clear(); } void VulkanAddressReplacer::ProcessCmdPushConstants(const VulkanCommandBufferInfo* command_buffer_info, @@ -377,7 +552,7 @@ void VulkanAddressReplacer::ProcessCmdPushConstants(const VulkanCommandBufferInf GFXRECON_ASSERT(command_buffer_info != nullptr && data != nullptr); for (const auto& [bind_point, pipeline_id] : command_buffer_info->bound_pipelines) { - auto* pipeline_info = object_table_->GetVkPipelineInfo(pipeline_id); + const auto* pipeline_info = object_table_->GetVkPipelineInfo(pipeline_id); GFXRECON_ASSERT(pipeline_info != nullptr); if (pipeline_info != nullptr) { @@ -393,7 +568,7 @@ void VulkanAddressReplacer::ProcessCmdPushConstants(const VulkanCommandBufferInf if (buffer_info != nullptr && buffer_info->replay_address != 0) { GFXRECON_LOG_INFO_ONCE("VulkanAddressReplacer::ProcessCmdPushConstants(): Replay is adjusting " - "mismatching buffer-device-addresses in push-constants"); + "buffer-device-addresses in push-constants"); uint32_t address_offset = *address - buffer_info->capture_address; *address = buffer_info->replay_address + address_offset; } @@ -410,12 +585,20 @@ void VulkanAddressReplacer::ProcessCmdBindDescriptorSets(VulkanCommandBufferInfo HandlePointerDecoder* pDescriptorSets, VulkanDeviceAddressTracker& address_tracker) { - auto* pipeline_info = object_table_->GetVkPipelineInfo(command_buffer_info->bound_pipelines[pipelineBindPoint]); + const auto* pipeline_info = + object_table_->GetVkPipelineInfo(command_buffer_info->bound_pipelines[pipelineBindPoint]); if (pipeline_info == nullptr) { return; }; + std::map, VkWriteDescriptorSetInlineUniformBlock> sets_requiring_update; + + using set_key_t = std::tuple; + + // map used to identify chained pointer-accesses (identical set/binding/offsets) + std::set dup_map; + for (const auto& buffer_ref_info : pipeline_info->buffer_reference_infos) { if (buffer_ref_info.source != util::SpirVParsingUtil::BufferReferenceLocation::UNIFORM_BUFFER && @@ -425,8 +608,16 @@ void VulkanAddressReplacer::ProcessCmdBindDescriptorSets(VulkanCommandBufferInfo continue; } GFXRECON_ASSERT(buffer_ref_info.set <= descriptorSetCount); + + set_key_t set_key = { static_cast(buffer_ref_info.source), + buffer_ref_info.set, + buffer_ref_info.binding, + buffer_ref_info.buffer_offset }; + + // we need a mutable pointer, to allow for in-place corrections auto* descriptor_set_info = object_table_->GetVkDescriptorSetInfo(pDescriptorSets->GetPointer()[buffer_ref_info.set]); + if (descriptor_set_info == nullptr) { continue; @@ -439,57 +630,125 @@ void VulkanAddressReplacer::ProcessCmdBindDescriptorSets(VulkanCommandBufferInfo "descriptor while sanitizing buffer-references."); continue; } - const auto& descriptor = it->second; + auto& descriptor_set_binding_info = it->second; - GFXRECON_ASSERT(!descriptor.buffer_info.empty()); + // we expect a buffer or inline-uniform-block + GFXRECON_ASSERT(!descriptor_set_binding_info.buffer_info.empty() || + !descriptor_set_binding_info.inline_uniform_block.empty()); - for (auto& desc_buffer_info : descriptor.buffer_info) + for (auto& [binding, desc_buffer_info] : descriptor_set_binding_info.buffer_info) { - auto* buffer_info = const_cast(desc_buffer_info.second.buffer_info); - if (buffer_info == nullptr) - { - continue; - }; + auto* buffer_info = const_cast(desc_buffer_info.buffer_info); - // we only track buffers with device-addresses here - if (auto* tracked_buffer = address_tracker.GetBufferByCaptureDeviceAddress(buffer_info->capture_address)) - { - // assert we got buffer-tracking correct - GFXRECON_ASSERT(tracked_buffer == buffer_info); - } - else + if (buffer_info != nullptr) { - // patch an existing uniform-buffer and retrieve a buffer-address for it - decode::BeginInjectedCommands(); - VkBufferDeviceAddressInfo address_info = {}; - address_info.sType = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO; - address_info.buffer = buffer_info->handle; - buffer_info->capture_address = buffer_info->replay_address = - get_device_address_fn_(device_, &address_info); - GFXRECON_ASSERT(buffer_info->replay_address != 0); - decode::EndInjectedCommands(); - - // track newly acquired buffer/address - address_tracker.TrackBuffer(buffer_info); - } + // we only track buffers with device-addresses here + if (auto* tracked_buffer = + address_tracker.GetBufferByCaptureDeviceAddress(buffer_info->capture_address)) + { + // assert we got buffer-tracking correct + GFXRECON_ASSERT(tracked_buffer == buffer_info); + } + else + { + // patch an existing uniform-buffer and retrieve a buffer-address for it + decode::BeginInjectedCommands(); + VkBufferDeviceAddressInfo address_info = {}; + address_info.sType = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO; + address_info.buffer = buffer_info->handle; + buffer_info->capture_address = buffer_info->replay_address = + get_device_address_fn_(device_, &address_info); + GFXRECON_ASSERT(buffer_info->replay_address != 0); + decode::EndInjectedCommands(); + + // track newly acquired buffer/address + address_tracker.TrackBuffer(buffer_info); + } - VkDeviceAddress address = - buffer_info->replay_address + desc_buffer_info.second.offset + buffer_ref_info.buffer_offset; - VkDeviceAddress range_end = - address + std::min(buffer_info->size - desc_buffer_info.second.offset, - desc_buffer_info.second.range); - command_buffer_info->addresses_to_replace.insert(address); + VkDeviceSize offset = desc_buffer_info.offset + buffer_ref_info.buffer_offset; - if (buffer_ref_info.array_stride) - { - address += buffer_ref_info.array_stride; - for (; address < range_end; address += buffer_ref_info.array_stride) + // detected a chain of pointer-accesses + if (dup_map.contains(set_key)) { + command_buffer_info->addresses_to_resolve[buffer_info].emplace_back(static_cast(offset), + buffer_ref_info.array_stride); + } + else + { + // collect addresses to-fix using a gpu-dispatch + VkDeviceAddress address = buffer_info->replay_address + offset; + VkDeviceAddress range_end = + address + std::min(buffer_info->size - offset, desc_buffer_info.range); command_buffer_info->addresses_to_replace.insert(address); + + if (buffer_ref_info.array_stride) + { + address += buffer_ref_info.array_stride; + for (; address < range_end; address += buffer_ref_info.array_stride) + { + command_buffer_info->addresses_to_replace.insert(address); + } + } } } } + + if (buffer_ref_info.buffer_offset < descriptor_set_binding_info.inline_uniform_block.size()) + { + // find addresses in inline-uniform-block and replace in-place. + auto* address = reinterpret_cast(descriptor_set_binding_info.inline_uniform_block.data() + + buffer_ref_info.buffer_offset); + + auto* buffer_info = address_tracker.GetBufferByCaptureDeviceAddress(*address); + + // ensure buffer exists and replacement actually required + if (buffer_info != nullptr && buffer_info->replay_address != 0 && + buffer_info->capture_address != buffer_info->replay_address) + { + GFXRECON_LOG_INFO_ONCE("VulkanAddressReplacer::ProcessCmdBindDescriptorSets(): Replay is adjusting " + "buffer-device-addresses in inline-uniform-block"); + uint32_t address_offset = *address - buffer_info->capture_address; + *address = buffer_info->replay_address + address_offset; + + // TODO: come back for this. we don't treat arrays in push-constants and here, but probably should + GFXRECON_ASSERT(buffer_ref_info.array_stride == 0); + + // batch descriptor-updates + auto& write_inline_uniform_block = + sets_requiring_update[{ descriptor_set_info->handle, buffer_ref_info.binding }]; + write_inline_uniform_block.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK; + write_inline_uniform_block.dataSize = descriptor_set_binding_info.inline_uniform_block.size(); + write_inline_uniform_block.pData = descriptor_set_binding_info.inline_uniform_block.data(); + } + } + + dup_map.insert(set_key); + } // pipeline_info->buffer_reference_infos + + std::vector descriptor_updates; + descriptor_updates.reserve(sets_requiring_update.size()); + + for (const auto& [pair, write_inline_uniform_block] : sets_requiring_update) + { + const auto& [descriptor_set, binding] = pair; + + // requires an injected call to vkUpdateDescriptorSets in order to correct addresses + VkWriteDescriptorSet& write_descriptor_set = descriptor_updates.emplace_back(); + write_descriptor_set.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + write_descriptor_set.descriptorType = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK; + write_descriptor_set.descriptorCount = write_inline_uniform_block.dataSize; + write_descriptor_set.dstSet = descriptor_set; + write_descriptor_set.dstBinding = binding; + write_descriptor_set.pNext = &write_inline_uniform_block; + } + + if (!descriptor_updates.empty()) + { + // mark injected commands + MarkInjectedCommandsHelper mark_injected_commands_helper; + device_table_->UpdateDescriptorSets(device_, descriptor_updates.size(), descriptor_updates.data(), 0, nullptr); } + if (!command_buffer_info->inside_renderpass) { std::vector addresses_to_replace(command_buffer_info->addresses_to_replace.begin(), @@ -655,7 +914,7 @@ void VulkanAddressReplacer::ProcessCmdTraceRays( if (valid_sbt_alignment_) { - GFXRECON_LOG_INFO_ONCE("VulkanAddressReplacer::ProcessCmdTraceRays: Replay is adjusting mismatching " + GFXRECON_LOG_INFO_ONCE("VulkanAddressReplacer::ProcessCmdTraceRays: Replay is adjusting " "raytracing shader-group-handles"); // rewrite group-handles in-place @@ -674,7 +933,7 @@ void VulkanAddressReplacer::ProcessCmdTraceRays( } else { - GFXRECON_LOG_INFO_ONCE("VulkanAddressReplacer::ProcessCmdTraceRays: Replay is adjusting mismatching " + GFXRECON_LOG_INFO_ONCE("VulkanAddressReplacer::ProcessCmdTraceRays: Replay is adjusting " "raytracing shader-binding-tables using shadow-buffers"); // output-handles @@ -779,7 +1038,7 @@ void VulkanAddressReplacer::ProcessCmdTraceRays( // set previous compute-pipeline, if any if (command_buffer_info->bound_pipelines.count(VK_PIPELINE_BIND_POINT_COMPUTE)) { - auto* previous_pipeline = object_table_->GetVkPipelineInfo( + const auto* previous_pipeline = object_table_->GetVkPipelineInfo( command_buffer_info->bound_pipelines.at(VK_PIPELINE_BIND_POINT_COMPUTE)); GFXRECON_ASSERT(previous_pipeline); if (previous_pipeline != nullptr) @@ -810,7 +1069,7 @@ void VulkanAddressReplacer::ProcessCmdBuildAccelerationStructuresKHR( uint32_t info_count, VkAccelerationStructureBuildGeometryInfoKHR* build_geometry_infos, VkAccelerationStructureBuildRangeInfoKHR** build_range_infos, - const VulkanDeviceAddressTracker& address_tracker) + VulkanDeviceAddressTracker& address_tracker) { GFXRECON_ASSERT(device_table_ != nullptr); @@ -831,11 +1090,14 @@ void VulkanAddressReplacer::ProcessCmdBuildAccelerationStructuresKHR( // keep track of used handles buffer_set.insert(buffer_info->handle); - uint64_t offset = capture_address - buffer_info->capture_address; + if (buffer_info->capture_address != buffer_info->replay_address) + { + uint64_t offset = capture_address - buffer_info->capture_address; - // in-place address-remap via const-cast - capture_address = buffer_info->replay_address + offset; - return true; + // in-place address-remap via const-cast + capture_address = buffer_info->replay_address + offset; + return true; + } } return false; }; @@ -878,40 +1140,79 @@ void VulkanAddressReplacer::ProcessCmdBuildAccelerationStructuresKHR( // retrieve VkAccelerationStructureKHR -> VkBuffer -> check/correct size auto* acceleration_structure_info = address_tracker.GetAccelerationStructureByHandle(build_geometry_info.dstAccelerationStructure); + GFXRECON_ASSERT(acceleration_structure_info != nullptr); + + VkDeviceAddress as_replay_address = 0; + if (acceleration_structure_info != nullptr) { auto* buffer_info = address_tracker.GetBufferByHandle(acceleration_structure_info->buffer); as_buffer_usable = buffer_info != nullptr && buffer_info->size >= build_size_info.accelerationStructureSize; + + if (acceleration_structure_info->replay_address != 0) + { + as_replay_address = acceleration_structure_info->replay_address; + } + else if (buffer_info != nullptr && buffer_info->replay_address != 0) + { + as_replay_address = buffer_info->replay_address + acceleration_structure_info->offset; + } + else + { + // last resort is to obtain a AS device-address -> issue vulkan-call, get device-address + VkBufferDeviceAddressInfo address_info = {}; + address_info.sType = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO; + address_info.buffer = acceleration_structure_info->buffer; + as_replay_address = + get_device_address_fn_(device_, &address_info) + acceleration_structure_info->offset; + + // adjust/assign queried address and start tracking + auto* accel_info_mut = + object_table_->GetVkAccelerationStructureKHRInfo(acceleration_structure_info->capture_id); + accel_info_mut->replay_address = as_replay_address; + address_tracker.TrackAccelerationStructure(accel_info_mut); + } } + GFXRECON_ASSERT(as_replay_address); // determine required size of scratch-buffer - uint32_t scratch_size = build_geometry_info.mode == VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR - ? build_size_info.buildScratchSize - : build_size_info.updateScratchSize; + uint32_t scratch_size = build_geometry_info.mode == VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR + ? build_size_info.buildScratchSize + : build_size_info.updateScratchSize; + + // scratch-buffer: check for nullptr and size bool scratch_buffer_usable = scratch_buffer_info != nullptr && scratch_buffer_info->size >= scratch_size; + // scratch-buffer: check usage-flags + auto scratch_usage_flags = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT; + scratch_buffer_usable = + scratch_buffer_usable && (scratch_buffer_info->usage & scratch_usage_flags) == scratch_usage_flags; + + // scratch-buffer: check for alignment + scratch_buffer_usable = + scratch_buffer_usable && + (build_geometry_info.scratchData.deviceAddress % + replay_acceleration_structure_properties_->minAccelerationStructureScratchOffsetAlignment) == 0; + if (!as_buffer_usable || !scratch_buffer_usable) { MarkInjectedCommandsHelper mark_injected_commands_helper; GFXRECON_LOG_INFO_ONCE( - "VulkanAddressReplacer::ProcessCmdBuildAccelerationStructuresKHR: Replay is adjusting mismatching " + "VulkanAddressReplacer::ProcessCmdBuildAccelerationStructuresKHR: Replay is adjusting " "acceleration-structures using shadow-structures and -buffers"); // now definitely requiring address-replacement force_replace = true; - auto& replacement_as = shadow_as_map_[build_geometry_info.dstAccelerationStructure]; + auto& replacement_as = shadow_as_map_[as_replay_address]; if (replacement_as.handle == VK_NULL_HANDLE) { if (as_buffer_usable) { - replacement_as.handle = build_geometry_info.dstAccelerationStructure; - auto accel_info = address_tracker.GetAccelerationStructureByHandle( - build_geometry_info.dstAccelerationStructure); - GFXRECON_ASSERT(accel_info != nullptr && accel_info->replay_address != 0); - replacement_as.address = accel_info->replay_address; + replacement_as.handle = build_geometry_info.dstAccelerationStructure; + replacement_as.address = as_replay_address; } else { @@ -928,7 +1229,7 @@ void VulkanAddressReplacer::ProcessCmdBuildAccelerationStructuresKHR( } // check/correct source acceleration-structure - swap_acceleration_structure_handle(build_geometry_info.srcAccelerationStructure); + swap_acceleration_structure_handle(build_geometry_info.srcAccelerationStructure, address_tracker); // hot swap acceleration-structure handle build_geometry_info.dstAccelerationStructure = replacement_as.handle; @@ -998,16 +1299,20 @@ void VulkanAddressReplacer::ProcessCmdBuildAccelerationStructuresKHR( case VK_GEOMETRY_TYPE_INSTANCES_KHR: { auto& instances = geometry->geometry.instances; - address_remap(instances.data.deviceAddress); - // replace VkAccelerationStructureInstanceKHR::accelerationStructureReference inside buffer - for (uint32_t k = 0; k < range_infos[j].primitiveCount; ++k) + // check if replacement is actually required + if (address_remap(instances.data.deviceAddress)) { - VkDeviceAddress accel_structure_reference = - instances.data.deviceAddress + k * sizeof(VkAccelerationStructureInstanceKHR) + - offsetof(VkAccelerationStructureInstanceKHR, accelerationStructureReference); - addresses_to_replace.push_back(accel_structure_reference); + // replace VkAccelerationStructureInstanceKHR::accelerationStructureReference inside buffer + for (uint32_t k = 0; k < range_infos[j].primitiveCount; ++k) + { + VkDeviceAddress accel_structure_reference = + instances.data.deviceAddress + k * sizeof(VkAccelerationStructureInstanceKHR) + + offsetof(VkAccelerationStructureInstanceKHR, accelerationStructureReference); + addresses_to_replace.push_back(accel_structure_reference); + } } + break; } default: @@ -1023,24 +1328,17 @@ void VulkanAddressReplacer::ProcessCmdBuildAccelerationStructuresKHR( { // prepare linear hashmap storage_bda_binary_.clear(); - auto acceleration_structure_map = address_tracker.GetAccelerationStructureDeviceAddressMap(); + const auto& acceleration_structure_map = address_tracker.GetAccelerationStructureDeviceAddressMap(); for (const auto& [capture_address, replay_address] : acceleration_structure_map) { - auto* accel_info = address_tracker.GetAccelerationStructureByCaptureDeviceAddress(capture_address); - GFXRECON_ASSERT(accel_info != nullptr); - if (force_replace || capture_address != replay_address) { auto new_address = replay_address; - // extra look-up required for potentially replaced AS - if (accel_info != nullptr) + auto shadow_as_it = shadow_as_map_.find(replay_address); + if (shadow_as_it != shadow_as_map_.end()) { - auto shadow_as_it = shadow_as_map_.find(accel_info->handle); - if (shadow_as_it != shadow_as_map_.end()) - { - new_address = shadow_as_it->second.address; - } + new_address = shadow_as_it->second.address; } // store addresses we will need to replace @@ -1086,24 +1384,32 @@ void VulkanAddressReplacer::ProcessCmdCopyAccelerationStructuresKHR( } // correct in-place - swap_acceleration_structure_handle(info->src); - swap_acceleration_structure_handle(info->dst); + swap_acceleration_structure_handle(info->src, address_tracker); + swap_acceleration_structure_handle(info->dst, address_tracker); } } void VulkanAddressReplacer::ProcessCmdWriteAccelerationStructuresPropertiesKHR( - uint32_t count, - VkAccelerationStructureKHR* acceleration_structures, - VkQueryType query_type, - VkQueryPool pool, - uint32_t first_query) + uint32_t count, + VkAccelerationStructureKHR* acceleration_structures, + VkQueryType query_type, + VkQueryPool pool, + uint32_t first_query, + const decode::VulkanDeviceAddressTracker& address_tracker) { for (uint32_t i = 0; i < count; ++i) { - auto shadow_as_it = shadow_as_map_.find(acceleration_structures[i]); - if (shadow_as_it != shadow_as_map_.end()) + // retrieve VkAccelerationStructureKHR -> VkDeviceAddress + const auto* acceleration_structure_info = + address_tracker.GetAccelerationStructureByHandle(acceleration_structures[i]); + + if (acceleration_structure_info != nullptr) { - acceleration_structures[i] = shadow_as_it->second.handle; + auto shadow_as_it = shadow_as_map_.find(acceleration_structure_info->replay_address); + if (shadow_as_it != shadow_as_map_.end()) + { + acceleration_structures[i] = shadow_as_it->second.handle; + } } if (query_type == VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR) @@ -1117,7 +1423,8 @@ void VulkanAddressReplacer::ProcessCmdWriteAccelerationStructuresPropertiesKHR( void VulkanAddressReplacer::ProcessUpdateDescriptorSets(uint32_t descriptor_write_count, VkWriteDescriptorSet* descriptor_writes, uint32_t descriptor_copy_count, - VkCopyDescriptorSet* descriptor_copies) + VkCopyDescriptorSet* descriptor_copies, + const decode::VulkanDeviceAddressTracker& address_tracker) { GFXRECON_UNREFERENCED_PARAMETER(descriptor_copy_count); GFXRECON_UNREFERENCED_PARAMETER(descriptor_copies); @@ -1141,15 +1448,23 @@ void VulkanAddressReplacer::ProcessUpdateDescriptorSets(uint32_t de { for (uint32_t j = 0; j < write_as->accelerationStructureCount; ++j) { - auto acceleration_structure_it = shadow_as_map_.find(write_as->pAccelerationStructures[j]); - if (acceleration_structure_it != shadow_as_map_.end()) + // retrieve VkAccelerationStructureKHR -> VkDeviceAddress + const auto* acceleration_structure_info = + address_tracker.GetAccelerationStructureByHandle(write_as->pAccelerationStructures[j]); + + if (acceleration_structure_info != nullptr) { - // we found an existing replacement-structure -> swap - auto* out_array = const_cast(write_as->pAccelerationStructures); - out_array[j] = acceleration_structure_it->second.handle; + auto acceleration_structure_it = shadow_as_map_.find(acceleration_structure_info->replay_address); + if (acceleration_structure_it != shadow_as_map_.end() && + acceleration_structure_it->second.storage.num_bytes > 0) + { + // we found an existing replacement-structure -> swap + auto* out_array = const_cast(write_as->pAccelerationStructures); + out_array[j] = acceleration_structure_it->second.handle; - GFXRECON_LOG_INFO_ONCE("VulkanAddressReplacer::ProcessUpdateDescriptorSets: Replay adjusted " - "AccelerationStructure handles") + GFXRECON_LOG_INFO_ONCE("VulkanAddressReplacer::ProcessUpdateDescriptorSets: Replay adjusted " + "AccelerationStructure handles") + } } } } @@ -1194,22 +1509,24 @@ void VulkanAddressReplacer::ProcessBuildVulkanAccelerationStructuresMetaCommand( uint32_t info_count, VkAccelerationStructureBuildGeometryInfoKHR* geometry_infos, VkAccelerationStructureBuildRangeInfoKHR** range_infos, - const decode::VulkanDeviceAddressTracker& address_tracker) + decode::VulkanDeviceAddressTracker& address_tracker) { if (info_count > 0 && init_queue_assets()) { // reset/submit/sync command-buffer - QueueSubmitHelper queue_submit_helper(device_table_, device_, command_buffer_, queue_, fence_); + QueueSubmitHelper queue_submit_helper( + device_table_, device_, submit_asset_.command_buffer, queue_, submit_asset_.fence); // dummy-wrapper VulkanCommandBufferInfo command_buffer_info = {}; - command_buffer_info.handle = command_buffer_; + command_buffer_info.handle = submit_asset_.command_buffer; ProcessCmdBuildAccelerationStructuresKHR( &command_buffer_info, info_count, geometry_infos, range_infos, address_tracker); // issue build-command MarkInjectedCommandsHelper mark_injected_commands_helper; - device_table_->CmdBuildAccelerationStructuresKHR(command_buffer_, info_count, geometry_infos, range_infos); + device_table_->CmdBuildAccelerationStructuresKHR( + submit_asset_.command_buffer, info_count, geometry_infos, range_infos); } } @@ -1221,7 +1538,8 @@ void VulkanAddressReplacer::ProcessCopyVulkanAccelerationStructuresMetaCommand( if (copy_infos != nullptr && info_count > 0 && init_queue_assets()) { // reset/submit/sync command-buffer - QueueSubmitHelper queue_submit_helper(device_table_, device_, command_buffer_, queue_, fence_); + QueueSubmitHelper queue_submit_helper( + device_table_, device_, submit_asset_.command_buffer, queue_, submit_asset_.fence); for (uint32_t i = 0; i < info_count; ++i) { @@ -1233,7 +1551,7 @@ void VulkanAddressReplacer::ProcessCopyVulkanAccelerationStructuresMetaCommand( // issue copy command MarkInjectedCommandsHelper mark_injected_commands_helper; - device_table_->CmdCopyAccelerationStructureKHR(command_buffer_, copy_info); + device_table_->CmdCopyAccelerationStructureKHR(submit_asset_.command_buffer, copy_info); } else { @@ -1244,20 +1562,24 @@ void VulkanAddressReplacer::ProcessCopyVulkanAccelerationStructuresMetaCommand( } void VulkanAddressReplacer::ProcessVulkanAccelerationStructuresWritePropertiesMetaCommand( - VkQueryType query_type, VkAccelerationStructureKHR acceleration_structure) + VkQueryType query_type, + VkAccelerationStructureKHR acceleration_structure, + const decode::VulkanDeviceAddressTracker& address_tracker) { if (init_queue_assets()) { // reset/submit/sync command-buffer - QueueSubmitHelper queue_submit_helper(device_table_, device_, command_buffer_, queue_, fence_); + QueueSubmitHelper queue_submit_helper( + device_table_, device_, submit_asset_.command_buffer, queue_, submit_asset_.fence); - ProcessCmdWriteAccelerationStructuresPropertiesKHR(1, &acceleration_structure, query_type, query_pool_, 0); + ProcessCmdWriteAccelerationStructuresPropertiesKHR( + 1, &acceleration_structure, query_type, query_pool_, 0, address_tracker); // issue vkCmdResetQueryPool and vkCmdWriteAccelerationStructuresPropertiesKHR MarkInjectedCommandsHelper mark_injected_commands_helper; - device_table_->CmdResetQueryPool(command_buffer_, query_pool_, 0, 1); + device_table_->CmdResetQueryPool(submit_asset_.command_buffer, query_pool_, 0, 1); device_table_->CmdWriteAccelerationStructuresPropertiesKHR( - command_buffer_, 1, &acceleration_structure, query_type, query_pool_, 0); + submit_asset_.command_buffer, 1, &acceleration_structure, query_type, query_pool_, 0); } VkDeviceSize compact_size = 0; @@ -1409,33 +1731,6 @@ bool VulkanAddressReplacer::init_queue_assets() return false; } - VkCommandBufferAllocateInfo alloc_info = {}; - alloc_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; - alloc_info.pNext = nullptr; - alloc_info.commandPool = command_pool_; - alloc_info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; - alloc_info.commandBufferCount = 1; - result = device_table_->AllocateCommandBuffers(device_, &alloc_info, &command_buffer_); - if (result != VK_SUCCESS) - { - GFXRECON_LOG_ERROR("VulkanAddressReplacer: internal command-buffer creation failed"); - return false; - } - - // Because this command buffer was not allocated through the loader, it must be assigned a dispatch table. - graphics::copy_dispatch_table_from_device(device_, command_buffer_); - - VkFenceCreateInfo fence_create_info; - fence_create_info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; - fence_create_info.pNext = nullptr; - fence_create_info.flags = VK_FENCE_CREATE_SIGNALED_BIT; - result = device_table_->CreateFence(device_, &fence_create_info, nullptr, &fence_); - if (result != VK_SUCCESS) - { - GFXRECON_LOG_ERROR("VulkanAddressReplacer: internal fence creation failed"); - return false; - } - VkQueryPoolCreateInfo pool_info; pool_info.sType = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO; pool_info.pNext = nullptr; @@ -1452,7 +1747,9 @@ bool VulkanAddressReplacer::init_queue_assets() device_table_->GetDeviceQueue(device_, 0, 0, &queue_); GFXRECON_ASSERT(queue_ != VK_NULL_HANDLE); - return queue_ != VK_NULL_HANDLE; + + bool submit_asset_created = create_submit_asset(submit_asset_); + return queue_ != VK_NULL_HANDLE && submit_asset_created; } bool VulkanAddressReplacer::create_buffer(VulkanAddressReplacer::buffer_context_t& buffer_context, @@ -1460,13 +1757,13 @@ bool VulkanAddressReplacer::create_buffer(VulkanAddressReplacer::buffer_context_ uint32_t usage_flags, uint32_t min_alignment, bool use_host_mem, - const std::string& name) + const std::string& name) const { GFXRECON_ASSERT(util::is_pow_2(min_alignment)); // 4kB min-size constexpr uint32_t min_buffer_size = 1 << 12; - num_bytes = std::max(util::aligned_value(num_bytes, min_alignment), min_buffer_size); + num_bytes = std::max(util::aligned_value(num_bytes + min_alignment, min_alignment), min_buffer_size); // nothing to do if (num_bytes <= buffer_context.num_bytes) @@ -1499,20 +1796,12 @@ bool VulkanAddressReplacer::create_buffer(VulkanAddressReplacer::buffer_context_ device_table_->GetBufferMemoryRequirements(device_, buffer_context.buffer, &memory_requirements); VkMemoryPropertyFlags memory_property_flags = - use_host_mem ? VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT + use_host_mem ? VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT : VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - uint32_t memory_type_index = - graphics::GetMemoryTypeIndex(memory_properties_, memory_requirements.memoryTypeBits, memory_property_flags); - - if (memory_type_index == std::numeric_limits::max() && use_host_mem) - { - /* fallback to coherent */ - memory_type_index = - graphics::GetMemoryTypeIndex(memory_properties_, - memory_requirements.memoryTypeBits, - VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); - } + // derive the capture-time(!) memory-index from memory_property_flags + const uint32_t memory_type_index = graphics::GetMemoryTypeIndex( + capture_memory_properties_, memory_requirements.memoryTypeBits, memory_property_flags); GFXRECON_ASSERT(memory_type_index != std::numeric_limits::max()); @@ -1574,6 +1863,7 @@ bool VulkanAddressReplacer::create_buffer(VulkanAddressReplacer::buffer_context_ result = resource_allocator_->MapResourceMemoryDirect( VK_WHOLE_SIZE, 0, &buffer_context.mapped_data, buffer_context.allocator_data); buffer_context.mapped_data = static_cast(buffer_context.mapped_data) + offset; + GFXRECON_ASSERT(result == VK_SUCCESS); return result == VK_SUCCESS; } return true; @@ -1584,7 +1874,7 @@ void VulkanAddressReplacer::barrier(VkCommandBuffer command_buffer, VkPipelineStageFlags src_stage, VkAccessFlags src_access, VkPipelineStageFlags dst_stage, - VkAccessFlags dst_access) + VkAccessFlags dst_access) const { VkBufferMemoryBarrier barrier = {}; barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER; @@ -1599,15 +1889,22 @@ void VulkanAddressReplacer::barrier(VkCommandBuffer command_buffer, command_buffer, src_stage, dst_stage, VkDependencyFlags(0), 0, nullptr, 1, &barrier, 0, nullptr); } -bool VulkanAddressReplacer::swap_acceleration_structure_handle(VkAccelerationStructureKHR& handle) +bool VulkanAddressReplacer::swap_acceleration_structure_handle( + VkAccelerationStructureKHR& handle, const decode::VulkanDeviceAddressTracker& address_tracker) { if (handle != VK_NULL_HANDLE) { - auto shadow_as_it = shadow_as_map_.find(handle); - if (shadow_as_it != shadow_as_map_.end()) + // retrieve VkAccelerationStructureKHR -> VkDeviceAddress + const auto* acceleration_structure_info = address_tracker.GetAccelerationStructureByHandle(handle); + + if (acceleration_structure_info != nullptr) { - handle = shadow_as_it->second.handle; - return true; + auto shadow_as_it = shadow_as_map_.find(acceleration_structure_info->replay_address); + if (shadow_as_it != shadow_as_map_.end()) + { + handle = shadow_as_it->second.handle; + return true; + } } } return false; @@ -1617,12 +1914,26 @@ void VulkanAddressReplacer::DestroyShadowResources(VkAccelerationStructureKHR ha { if (handle != VK_NULL_HANDLE) { - auto remove_as_it = shadow_as_map_.find(handle); + auto remove_as_size_it = as_compact_sizes_.find(handle); + if (remove_as_size_it != as_compact_sizes_.end()) + { + as_compact_sizes_.erase(remove_as_size_it); + } + } +} - if (remove_as_it != shadow_as_map_.end()) +void VulkanAddressReplacer::DestroyShadowResources(const VulkanBufferInfo* buffer_info) +{ + if (buffer_info != nullptr) + { + for (const auto& [replay_address, as_infos] : buffer_info->acceleration_structures) { - MarkInjectedCommandsHelper mark_injected_commands_helper; - shadow_as_map_.erase(remove_as_it); + auto remove_shadow_as_it = shadow_as_map_.find(replay_address); + if (remove_shadow_as_it != shadow_as_map_.end()) + { + MarkInjectedCommandsHelper mark_injected_commands_helper; + shadow_as_map_.erase(remove_shadow_as_it); + } } } } @@ -1632,7 +1943,6 @@ void VulkanAddressReplacer::DestroyShadowResources(VkCommandBuffer handle) if (handle != VK_NULL_HANDLE) { auto shadow_sbt_it = shadow_sbt_map_.find(handle); - if (shadow_sbt_it != shadow_sbt_map_.end()) { MarkInjectedCommandsHelper mark_injected_commands_helper; @@ -1640,12 +1950,18 @@ void VulkanAddressReplacer::DestroyShadowResources(VkCommandBuffer handle) } auto pipeline_sbt_it = pipeline_context_map_.find(handle); - if (pipeline_sbt_it != pipeline_context_map_.end()) { MarkInjectedCommandsHelper mark_injected_commands_helper; pipeline_context_map_.erase(pipeline_sbt_it); } + + auto submit_asset_it = submit_asset_map_.find(handle); + if (submit_asset_it != submit_asset_map_.end()) + { + MarkInjectedCommandsHelper mark_injected_commands_helper; + submit_asset_map_.erase(submit_asset_it); + } } } @@ -1694,6 +2010,65 @@ bool VulkanAddressReplacer::create_acceleration_asset(VulkanAddressReplacer::acc return true; } +bool VulkanAddressReplacer::create_submit_asset(submit_asset_t& submit_asset) +{ + // clear previous content and setup + submit_asset.device = device_; + submit_asset.command_pool = command_pool_; + submit_asset.destroy_fence_fn = device_table_->DestroyFence; + submit_asset.free_command_buffers_fn = device_table_->FreeCommandBuffers; + submit_asset.destroy_semaphore_fn = device_table_->DestroySemaphore; + + if (submit_asset.command_buffer == VK_NULL_HANDLE) + { + VkCommandBufferAllocateInfo alloc_info = {}; + alloc_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; + alloc_info.pNext = nullptr; + alloc_info.commandPool = command_pool_; + alloc_info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; + alloc_info.commandBufferCount = 1; + VkResult result = device_table_->AllocateCommandBuffers(device_, &alloc_info, &submit_asset.command_buffer); + if (result != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("VulkanAddressReplacer: internal command-buffer creation failed"); + return false; + } + + // Because this command buffer was not allocated through the loader, it must be assigned a dispatch table. + graphics::copy_dispatch_table_from_device(device_, submit_asset.command_buffer); + } + + // create a fence + if (submit_asset.fence == VK_NULL_HANDLE) + { + VkFenceCreateInfo fence_create_info; + fence_create_info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; + fence_create_info.pNext = nullptr; + fence_create_info.flags = VK_FENCE_CREATE_SIGNALED_BIT; + VkResult result = device_table_->CreateFence(device_, &fence_create_info, nullptr, &submit_asset.fence); + if (result != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("VulkanAddressReplacer: internal fence creation failed"); + return false; + } + } + + // create a signal-semaphore + if (submit_asset.signal_semaphore == VK_NULL_HANDLE) + { + VkSemaphoreCreateInfo semaphore_create_info = {}; + semaphore_create_info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; + VkResult result = + device_table_->CreateSemaphore(device_, &semaphore_create_info, nullptr, &submit_asset.signal_semaphore); + if (result != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("VulkanAddressReplacer: internal semaphore creation failed"); + return false; + } + } + return true; +} + void VulkanAddressReplacer::run_compute_replace(const VulkanCommandBufferInfo* command_buffer_info, const VkDeviceAddress* addresses, uint32_t num_addresses, @@ -1779,6 +2154,17 @@ void VulkanAddressReplacer::run_compute_replace(const VulkanCommandBufferInfo* replacer_params.num_handles = num_addresses; + // pre memory-barrier + for (const auto& buf : buffer_set) + { + barrier(command_buffer_info->handle, + buf, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, + VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, + VK_ACCESS_SHADER_WRITE_BIT); + } + device_table_->CmdBindPipeline(command_buffer_info->handle, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline_bda_); // NOTE: using push-constants here requires us to re-establish the previous data, if any @@ -1800,7 +2186,7 @@ void VulkanAddressReplacer::run_compute_replace(const VulkanCommandBufferInfo* VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_WRITE_BIT, sync_stage, - VK_ACCESS_SHADER_READ_BIT); + VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT); } // synchronize host-reads @@ -1812,9 +2198,9 @@ void VulkanAddressReplacer::run_compute_replace(const VulkanCommandBufferInfo* VK_ACCESS_HOST_READ_BIT); // set previous compute-pipeline, if any - if (command_buffer_info->bound_pipelines.count(VK_PIPELINE_BIND_POINT_COMPUTE)) + if (command_buffer_info->bound_pipelines.contains(VK_PIPELINE_BIND_POINT_COMPUTE)) { - auto* previous_pipeline = + const auto* previous_pipeline = object_table_->GetVkPipelineInfo(command_buffer_info->bound_pipelines.at(VK_PIPELINE_BIND_POINT_COMPUTE)); GFXRECON_ASSERT(previous_pipeline); @@ -1864,7 +2250,7 @@ void VulkanAddressReplacer::update_global_hashmap(VkCommandBuffer command_buffer { return false; } - auto& hashmap_control_block = *reinterpret_cast(hashmap_control_block_bda_binary_.mapped_data); + auto& hashmap_control_block = *static_cast(hashmap_control_block_bda_binary_.mapped_data); if (init_address_blacklist) { @@ -1896,7 +2282,7 @@ void VulkanAddressReplacer::update_global_hashmap(VkCommandBuffer command_buffer VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT); - auto& current_control_block = *reinterpret_cast(hashmap_control_block_bda_binary_.mapped_data); + auto& current_control_block = *static_cast(hashmap_control_block_bda_binary_.mapped_data); current_control_block.capacity = hashmap_storage_bda_binary_.num_bytes / hashmap_elem_size; current_control_block.storage = hashmap_storage_bda_binary_.device_address; }; @@ -1922,7 +2308,7 @@ void VulkanAddressReplacer::update_global_hashmap(VkCommandBuffer command_buffer if (!init_address_blacklist) { - float load_factor = + const float load_factor = static_cast(hashmap_control_block.size) / static_cast(hashmap_control_block.capacity); if (load_factor > max_load_factor) { @@ -1945,7 +2331,7 @@ void VulkanAddressReplacer::update_global_hashmap(VkCommandBuffer command_buffer { std::optional queue_submit_helper; - if (command_buffer != command_buffer_) + if (command_buffer != submit_asset_.command_buffer) { if (!init_queue_assets()) { @@ -1953,8 +2339,9 @@ void VulkanAddressReplacer::update_global_hashmap(VkCommandBuffer command_buffer } // reset/submit/sync command-buffer - queue_submit_helper = QueueSubmitHelper(device_table_, device_, command_buffer_, queue_, fence_); - command_buffer = command_buffer_; + queue_submit_helper = + QueueSubmitHelper(device_table_, device_, submit_asset_.command_buffer, queue_, submit_asset_.fence); + command_buffer = submit_asset_.command_buffer; } if (init_address_blacklist) @@ -1967,7 +2354,12 @@ void VulkanAddressReplacer::update_global_hashmap(VkCommandBuffer command_buffer GFXRECON_ASSERT(previous_hashmap_control_block && previous_hashmap_storage_bda_binary); GFXRECON_ASSERT(hashmap_control_block_bda_binary_.buffer == VK_NULL_HANDLE && hashmap_storage_bda_binary_.buffer == VK_NULL_HANDLE); - auto& previous_control_block = *reinterpret_cast(previous_hashmap_control_block->mapped_data); + + // defer cleanup of previous control-block + hashmap_control_block_bda_binary_prev_ = std::move(*previous_hashmap_control_block); + + auto& previous_control_block = + *static_cast(hashmap_control_block_bda_binary_prev_.mapped_data); // create new storage- and control-blocks create_control_block(); @@ -1980,11 +2372,12 @@ void VulkanAddressReplacer::update_global_hashmap(VkCommandBuffer command_buffer VkDeviceAddress hashmap_new = 0; }; rehash_params_t rehash_params; - rehash_params.hashmap_old = previous_hashmap_control_block->device_address; + rehash_params.hashmap_old = hashmap_control_block_bda_binary_prev_.device_address; rehash_params.hashmap_new = hashmap_control_block_bda_binary_.device_address; - device_table_->CmdBindPipeline(command_buffer_, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline_bda_rehash_); - device_table_->CmdPushConstants(command_buffer_, + device_table_->CmdBindPipeline( + submit_asset_.command_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline_bda_rehash_); + device_table_->CmdPushConstants(submit_asset_.command_buffer, pipeline_layout_, VK_SHADER_STAGE_COMPUTE_BIT, 0, @@ -1992,7 +2385,8 @@ void VulkanAddressReplacer::update_global_hashmap(VkCommandBuffer command_buffer &rehash_params); // dispatch workgroups constexpr uint32_t wg_size = 32; - device_table_->CmdDispatch(command_buffer_, util::div_up(previous_control_block.capacity, wg_size), 1, 1); + device_table_->CmdDispatch( + submit_asset_.command_buffer, util::div_up(previous_control_block.capacity, wg_size), 1, 1); } } } diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_address_replacer.h b/third_party/gfxreconstruct/framework/decode/vulkan_address_replacer.h index f44c9aba0..45c4e0490 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_address_replacer.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_address_replacer.h @@ -46,7 +46,7 @@ class VulkanAddressReplacer VulkanAddressReplacer(const VulkanDeviceInfo* device_info, const graphics::VulkanDeviceTable* device_table, const graphics::VulkanInstanceTable* instance_table, - const decode::CommonObjectInfoTable& object_table); + decode::CommonObjectInfoTable& object_table); //! prevent copying VulkanAddressReplacer(const VulkanAddressReplacer&) = delete; @@ -64,21 +64,48 @@ class VulkanAddressReplacer void SetRaytracingProperties(const decode::VulkanPhysicalDeviceInfo* physical_device_info); /** - * @brief UpdateBufferAddresses will replace buffer-device-address in gpu-memory, + * @brief UpdateBufferAddresses will replace buffer-device-addresses in gpu-memory, * at locations pointed to by @param addresses. * - * Replacement will be performed using a compute-dispatch injected into @param command_buffer_info. + * Replacement will be performed using a compute-dispatch. + * Depending on scenario this dispatch will be submitted differently: * - * @param command_buffer_info optional VulkanCommandBufferInfo* or nullptr to use an internal command-buffer + * 1) in case 'command_buffer_info' is not nullptr and 'wait-semaphores' is std::nullopt: + * - Inject the dispatch into 'command_buffer_info' + * + * 2) in case 'command_buffer_info' is not nullptr and wait-semaphores were provided: + * - Submit the dispatch with a separate submission, wait on semaphores and return a signal-semaphore + * for that queue-submission. 'command_buffer_info' will merely be used to track lifetime of internal assets. + * + * 3) lastly, if command_buffer_info' is a nullptr: + * - submit the dispatch locally, sync via internal fence + * + * @param command_buffer_info optional VulkanCommandBufferInfo* or nullptr * @param addresses array of device-addresses * @param num_addresses number of addresses * @param address_tracker const reference to a VulkanDeviceAddressTracker, used for mapping device-addresses + * @param wait_semaphores optional array of (timeline) wait-semaphores, along with their wait-values + * @return an optional Semaphore that will be signaled or VK_NULL_HANDLE */ - void UpdateBufferAddresses(const VulkanCommandBufferInfo* command_buffer_info, - const VkDeviceAddress* addresses, - uint32_t num_addresses, - const decode::VulkanDeviceAddressTracker& address_tracker); + VkSemaphore + UpdateBufferAddresses(const VulkanCommandBufferInfo* command_buffer_info, + const VkDeviceAddress* addresses, + uint32_t num_addresses, + const decode::VulkanDeviceAddressTracker& address_tracker, + const std::optional>>& wait_semaphores = {}); + /** + * @brief 'ResolveBufferAddresses' can be used to identify buffers which are referenced + * by buffer-device-addresses. + * + * This routine allows resolving pointer-chains (to some degree) and identify additional BDA-locations + * that require address remapping/replacement. + * + * @param command_buffer_info a provided command_buffer_info containing locations to resolve + * @param address_tracker const reference to a VulkanDeviceAddressTracker, used for mapping device-addresses + */ + void ResolveBufferAddresses(VulkanCommandBufferInfo* command_buffer_info, + const decode::VulkanDeviceAddressTracker& address_tracker); /** * @brief ProcessCmdPushConstants will check and potentially correct input-parameters to 'vkCmdPushConstants', * replacing any used buffer-device-addresses in-place. @@ -175,13 +202,14 @@ class VulkanAddressReplacer * @param info_count number of elements in 'build_geometry_infos' * @param build_geometry_infos provided array of VkAccelerationStructureBuildGeometryInfoKHR * @param build_range_infos provided array of VkAccelerationStructureBuildRangeInfoKHR* - * @param address_tracker const reference to a VulkanDeviceAddressTracker, used for mapping device-addresses + * @param address_tracker reference to a VulkanDeviceAddressTracker, used for mapping device-addresses + * and potentially update tracked information */ void ProcessCmdBuildAccelerationStructuresKHR(const VulkanCommandBufferInfo* command_buffer_info, uint32_t info_count, VkAccelerationStructureBuildGeometryInfoKHR* build_geometry_infos, VkAccelerationStructureBuildRangeInfoKHR** build_range_infos, - const decode::VulkanDeviceAddressTracker& address_tracker); + decode::VulkanDeviceAddressTracker& address_tracker); /** * @brief ProcessCmdCopyAccelerationStructuresKHR will check @@ -202,12 +230,15 @@ class VulkanAddressReplacer * @param query_type the query's type * @param pool provided VkQuerypool handle * @param first_query index of first query + * @param address_tracker const reference to a VulkanDeviceAddressTracker, + * used for mapping device-addresses */ void ProcessCmdWriteAccelerationStructuresPropertiesKHR(uint32_t count, VkAccelerationStructureKHR* acceleration_structures, VkQueryType query_type, VkQueryPool pool, - uint32_t first_query); + uint32_t first_query, + const decode::VulkanDeviceAddressTracker& address_tracker); /** * @brief ProcessUpdateDescriptorSets will check @@ -217,11 +248,14 @@ class VulkanAddressReplacer * @param descriptor_writes provided array of VkWriteDescriptorSet * @param descriptor_copy_count element count in descriptor_copies * @param descriptor_copies provided array of VkCopyDescriptorSet + * @param address_tracker const reference to a VulkanDeviceAddressTracker, + * used for mapping device-addresses */ - void ProcessUpdateDescriptorSets(uint32_t descriptor_write_count, - VkWriteDescriptorSet* descriptor_writes, - uint32_t descriptor_copy_count, - VkCopyDescriptorSet* descriptor_copies); + void ProcessUpdateDescriptorSets(uint32_t descriptor_write_count, + VkWriteDescriptorSet* descriptor_writes, + uint32_t descriptor_copy_count, + VkCopyDescriptorSet* descriptor_copies, + const decode::VulkanDeviceAddressTracker& address_tracker); /** * @brief ProcessGetQueryPoolResults will check for running queries and attempt to extract information @@ -261,7 +295,7 @@ class VulkanAddressReplacer ProcessBuildVulkanAccelerationStructuresMetaCommand(uint32_t info_count, VkAccelerationStructureBuildGeometryInfoKHR* geometry_infos, VkAccelerationStructureBuildRangeInfoKHR** range_infos, - const decode::VulkanDeviceAddressTracker& address_tracker); + decode::VulkanDeviceAddressTracker& address_tracker); /** * @brief Process information contained in a metadata-block in order to copy acceleration-structures. @@ -281,9 +315,10 @@ class VulkanAddressReplacer * @param query_type type of query * @param acceleration_structure provided acceleration-structure handle */ - void - ProcessVulkanAccelerationStructuresWritePropertiesMetaCommand(VkQueryType query_type, - VkAccelerationStructureKHR acceleration_structure); + void ProcessVulkanAccelerationStructuresWritePropertiesMetaCommand( + VkQueryType query_type, + VkAccelerationStructureKHR acceleration_structure, + const decode::VulkanDeviceAddressTracker& address_tracker); /** * @brief DestroyShadowResources should be called upon destruction of provided VkAccelerationStructureKHR handle, @@ -293,6 +328,14 @@ class VulkanAddressReplacer */ void DestroyShadowResources(VkAccelerationStructureKHR handle); + /** + * @brief DestroyShadowResources should be called upon destruction of a VkBuffer-handle, + * allowing this class to free potential resources associated with it. + * + * @param buffer_info a provided VulkanBufferInfo struct + */ + void DestroyShadowResources(const VulkanBufferInfo* buffer_info); + /** * @brief DestroyShadowResources should be called upon destruction of provided VkCommandBuffer handle, * allowing this class to free potential resources associated with it. @@ -319,7 +362,7 @@ class VulkanAddressReplacer buffer_context_t(buffer_context_t&& other) noexcept; ~buffer_context_t(); buffer_context_t& operator=(buffer_context_t other); - void swap(buffer_context_t& other); + void swap(buffer_context_t& other) noexcept; }; struct pipeline_context_t @@ -351,6 +394,29 @@ class VulkanAddressReplacer bool operator<(const bda_element_t& other) const { return capture_address < other.capture_address; } }; + struct submit_asset_t + { + // members required for cleanup + VkDevice device = VK_NULL_HANDLE; + VkCommandPool command_pool = VK_NULL_HANDLE; + + // actual payload + VkCommandBuffer command_buffer = VK_NULL_HANDLE; + VkFence fence = VK_NULL_HANDLE; + VkSemaphore signal_semaphore = VK_NULL_HANDLE; + + PFN_vkDestroyFence destroy_fence_fn = nullptr; + PFN_vkFreeCommandBuffers free_command_buffers_fn = nullptr; + PFN_vkDestroySemaphore destroy_semaphore_fn = nullptr; + + submit_asset_t() = default; + submit_asset_t(const submit_asset_t&) = delete; + submit_asset_t(submit_asset_t&& other) noexcept; + submit_asset_t& operator=(submit_asset_t other); + ~submit_asset_t(); + void swap(submit_asset_t& other) noexcept; + }; + [[nodiscard]] bool init_pipeline(); [[nodiscard]] bool init_queue_assets(); @@ -368,25 +434,28 @@ class VulkanAddressReplacer uint32_t usage_flags = 0, uint32_t min_alignment = 0, bool use_host_mem = true, - const std::string& name = "GFXR VulkanAddressReplacer Buffer"); + const std::string& name = "GFXR VulkanAddressReplacer Buffer") const; [[nodiscard]] bool create_acceleration_asset(acceleration_structure_asset_t& as_asset, VkAccelerationStructureTypeKHR type, size_t num_buffer_bytes, size_t num_scratch_bytes); + [[nodiscard]] bool create_submit_asset(submit_asset_t& submit_asset); + void barrier(VkCommandBuffer command_buffer, VkBuffer buffer, VkPipelineStageFlags src_stage, VkAccessFlags src_access, VkPipelineStageFlags dst_stage, - VkAccessFlags dst_access); + VkAccessFlags dst_access) const; - bool swap_acceleration_structure_handle(VkAccelerationStructureKHR& handle); + bool swap_acceleration_structure_handle(VkAccelerationStructureKHR& handle, + const decode::VulkanDeviceAddressTracker& address_tracker); - const graphics::VulkanDeviceTable* device_table_ = nullptr; - const decode::CommonObjectInfoTable* object_table_ = nullptr; - VkPhysicalDeviceMemoryProperties memory_properties_ = {}; + const graphics::VulkanDeviceTable* device_table_ = nullptr; + decode::CommonObjectInfoTable* object_table_ = nullptr; + VkPhysicalDeviceMemoryProperties capture_memory_properties_ = {}; std::optional capture_ray_properties_{}, replay_ray_properties_{}; std::optional replay_acceleration_structure_properties_{}; bool valid_sbt_alignment_ = true; @@ -407,12 +476,11 @@ class VulkanAddressReplacer // pipeline enabling rehashing buffer-device-addresses (BDA), utility VkPipeline pipeline_bda_rehash_ = VK_NULL_HANDLE; - // required assets for submitting meta-commands - VkCommandPool command_pool_ = VK_NULL_HANDLE; - VkCommandBuffer command_buffer_ = VK_NULL_HANDLE; - VkFence fence_ = VK_NULL_HANDLE; - VkQueue queue_ = VK_NULL_HANDLE; - VkQueryPool query_pool_ = VK_NULL_HANDLE; + // required assets for submitting (meta-)commands that do not provide an existing command-buffer + VkCommandPool command_pool_ = VK_NULL_HANDLE; + VkQueryPool query_pool_ = VK_NULL_HANDLE; + VkQueue queue_ = VK_NULL_HANDLE; + submit_asset_t submit_asset_ = {}; util::linear_hashmap hashmap_sbt_; std::unordered_map shadow_sbt_map_; @@ -420,24 +488,32 @@ class VulkanAddressReplacer std::vector storage_bda_binary_; // storage- and control-buffers for a global hashmap acting as address-filter - buffer_context_t hashmap_storage_bda_binary_ = {}; - buffer_context_t hashmap_control_block_bda_binary_ = {}; + buffer_context_t hashmap_storage_bda_binary_ = {}; + buffer_context_t hashmap_control_block_bda_binary_ = {}; + buffer_context_t hashmap_control_block_bda_binary_prev_ = {}; // pipeline-contexts per command-buffer std::unordered_map> pipeline_context_map_; // resources related to acceleration-structures - std::unordered_map shadow_as_map_; + std::unordered_map shadow_as_map_; // currently running compaction queries. pool -> AS -> query-pool-index std::unordered_map> as_compact_queries_; std::unordered_map as_compact_sizes_; + // submit_assets per command-buffer (required when UpdateAddresses can't be injected directly) + std::unordered_map submit_asset_map_; + // required function pointers PFN_vkGetBufferDeviceAddress get_device_address_fn_ = nullptr; PFN_vkGetPhysicalDeviceProperties2 get_physical_device_properties_fn_ = nullptr; PFN_vkSetDebugUtilsObjectNameEXT set_debug_utils_object_name_fn_ = nullptr; }; + +using VulkanPerDeviceAddressReplacers = + std::unordered_map; + GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_address_replacer_shaders.h b/third_party/gfxreconstruct/framework/decode/vulkan_address_replacer_shaders.h index 629b665b9..ae776d22b 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_address_replacer_shaders.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_address_replacer_shaders.h @@ -154,7 +154,6 @@ void main() #extension GL_EXT_scalar_block_layout : require #extension GL_EXT_shader_explicit_arithmetic_types_int64 : require #extension GL_EXT_shader_atomic_int64 : require -// #extension GL_EXT_debug_printf : enable /// -> hash.glsl uint xxhash32(uint lhs, uint rhs) @@ -273,8 +272,7 @@ uint64_t map_address(const sorted_array_t array, uint64_t capture_address) return k_null_handle; } -layout(buffer_reference, std430) buffer BufferDeviceAddressPtr{ uint64_t buffer_device_address; }; -layout(buffer_reference, std430) buffer readonly AddressArray{ BufferDeviceAddressPtr v[]; }; +layout(buffer_reference, std430) buffer readonly AddressArray{ uint64_t v[]; }; struct replacer_params_bda_t { @@ -292,6 +290,30 @@ layout(push_constant, std430) uniform pc replacer_params_bda_t params; }; +layout(buffer_reference, std430) buffer BufferDeviceAddressPtr{ uint64_t buffer_device_address; }; +layout(buffer_reference, std430) buffer PaddedBufferDeviceAddressPtr{ uint pad; uint64_t buffer_device_address; }; + +//! helper to read a VkDeviceAddress from address 'ptr', read-access is 8-byte aligned +uint64_t read_address(uint64_t ptr) +{ + return (ptr & 7UL) != 0 ? PaddedBufferDeviceAddressPtr(ptr & ~7).buffer_device_address : + BufferDeviceAddressPtr(ptr).buffer_device_address; +} + +//! helper to write a VkDeviceAddress to address 'ptr', write-access is 8-byte aligned +void write_address(uint64_t ptr, uint64_t value) +{ + if((ptr & 7UL) != 0) + { + PaddedBufferDeviceAddressPtr pad_helper = PaddedBufferDeviceAddressPtr(ptr & ~7); + pad_helper.buffer_device_address = value; + } + else + { + BufferDeviceAddressPtr(ptr).buffer_device_address = value; + } +} + layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in; void main() @@ -299,19 +321,19 @@ void main() uint gid = gl_GlobalInvocationID.x; if(gid >= params.num_handles){ return; } - uint64_t input_address = params.input_handles.v[gid].buffer_device_address; + uint64_t input_address = read_address(params.input_handles.v[gid]); // check if we have replaced + cached this address already, avoid double-replacements - if(hashmap_get(params.address_blacklist, uint64_t(params.input_handles.v[gid])) != input_address) + if(hashmap_get(params.address_blacklist, params.input_handles.v[gid]) != input_address) { // binary-search lookup uint64_t result = map_address(params.device_address_array, input_address); // keep track of mapped address - hashmap_set(params.address_blacklist, uint64_t(params.input_handles.v[gid]), result); + hashmap_set(params.address_blacklist, params.input_handles.v[gid], result); // write remapped or original value to output-array - params.output_handles.v[gid].buffer_device_address = is_null(result) ? input_address : result; + write_address(params.output_handles.v[gid], is_null(result) ? input_address : result); } } #endif // g_replacer_bda_binary_comp @@ -673,240 +695,256 @@ static const std::array g_replacer_sbt_comp = { }; const std::vector g_replacer_bda_binary_comp = { - 0x07230203, 0x00010300, 0x0008000b, 0x00000365, 0x00000000, 0x00020011, 0x00000001, 0x00020011, 0x0000000b, - 0x00020011, 0x0000000c, 0x00020011, 0x000014b6, 0x00020011, 0x000014e3, 0x0008000a, 0x5f565053, 0x5f545845, - 0x63736564, 0x74706972, 0x695f726f, 0x7865646e, 0x00676e69, 0x0009000a, 0x5f565053, 0x5f52484b, 0x73796870, - 0x6c616369, 0x6f74735f, 0x65676172, 0x6675625f, 0x00726566, 0x0006000b, 0x00000001, 0x4c534c47, 0x6474732e, - 0x3035342e, 0x00000000, 0x0003000e, 0x000014e4, 0x00000001, 0x0006000f, 0x00000005, 0x00000004, 0x6e69616d, - 0x00000000, 0x0000014c, 0x00060010, 0x00000004, 0x00000011, 0x00000020, 0x00000001, 0x00000001, 0x00030003, - 0x00000002, 0x000001cc, 0x00070004, 0x455f4c47, 0x625f5458, 0x65666675, 0x65725f72, 0x65726566, 0x0065636e, - 0x00080004, 0x455f4c47, 0x625f5458, 0x65666675, 0x65725f72, 0x65726566, 0x3265636e, 0x00000000, 0x00080004, - 0x455f4c47, 0x735f5458, 0x616c6163, 0x6c625f72, 0x5f6b636f, 0x6f79616c, 0x00007475, 0x00080004, 0x455f4c47, - 0x735f5458, 0x65646168, 0x74615f72, 0x63696d6f, 0x746e695f, 0x00003436, 0x000d0004, 0x455f4c47, 0x735f5458, - 0x65646168, 0x78655f72, 0x63696c70, 0x615f7469, 0x68746972, 0x6974656d, 0x79745f63, 0x5f736570, 0x36746e69, - 0x00000034, 0x00040005, 0x00000004, 0x6e69616d, 0x00000000, 0x00050005, 0x0000001a, 0x68736148, 0x5070614d, - 0x00007274, 0x00050006, 0x0000001a, 0x00000000, 0x726f7473, 0x00656761, 0x00050006, 0x0000001a, 0x00000001, - 0x657a6973, 0x00000000, 0x00060006, 0x0000001a, 0x00000002, 0x61706163, 0x79746963, 0x00000000, 0x00060005, - 0x0000001b, 0x68736168, 0x5f70616d, 0x6d657469, 0x0000745f, 0x00040006, 0x0000001b, 0x00000000, 0x0079656b, - 0x00050006, 0x0000001b, 0x00000001, 0x756c6176, 0x00000065, 0x00060005, 0x0000001d, 0x68736148, 0x5370614d, - 0x61726f74, 0x00006567, 0x00040006, 0x0000001d, 0x00000000, 0x00000076, 0x00060005, 0x0000002b, 0x726f7473, - 0x5f656761, 0x6d657469, 0x0000745f, 0x00040006, 0x0000002b, 0x00000000, 0x0079656b, 0x00050006, 0x0000002b, - 0x00000001, 0x756c6176, 0x00000065, 0x00050006, 0x0000002b, 0x00000002, 0x657a6973, 0x00000000, 0x00040005, - 0x0000002d, 0x726f7453, 0x00656761, 0x00040006, 0x0000002d, 0x00000000, 0x00000076, 0x00080005, 0x0000014c, - 0x475f6c67, 0x61626f6c, 0x766e496c, 0x7461636f, 0x496e6f69, 0x00000044, 0x00060005, 0x00000151, 0x74726f73, - 0x615f6465, 0x79617272, 0x0000745f, 0x00050006, 0x00000151, 0x00000000, 0x726f7473, 0x00656761, 0x00060006, - 0x00000151, 0x00000001, 0x5f6d756e, 0x6d657469, 0x00000073, 0x00050006, 0x00000151, 0x00000002, 0x64646170, - 0x00676e69, 0x00080005, 0x00000153, 0x6c706572, 0x72656361, 0x7261705f, 0x5f736d61, 0x5f616462, 0x00000074, - 0x00090006, 0x00000153, 0x00000000, 0x69766564, 0x615f6563, 0x65726464, 0x615f7373, 0x79617272, 0x00000000, - 0x00080006, 0x00000153, 0x00000001, 0x72646461, 0x5f737365, 0x63616c62, 0x73696c6b, 0x00000074, 0x00070006, - 0x00000153, 0x00000002, 0x75706e69, 0x61685f74, 0x656c646e, 0x00000073, 0x00070006, 0x00000153, 0x00000003, - 0x7074756f, 0x685f7475, 0x6c646e61, 0x00007365, 0x00060006, 0x00000153, 0x00000004, 0x5f6d756e, 0x646e6168, - 0x0073656c, 0x00060005, 0x00000156, 0x72646441, 0x41737365, 0x79617272, 0x00000000, 0x00040006, 0x00000156, - 0x00000000, 0x00000076, 0x00080005, 0x00000157, 0x66667542, 0x65447265, 0x65636976, 0x72646441, 0x50737365, - 0x00007274, 0x00090006, 0x00000157, 0x00000000, 0x66667562, 0x645f7265, 0x63697665, 0x64615f65, 0x73657264, - 0x00000073, 0x00030005, 0x00000159, 0x00006370, 0x00050006, 0x00000159, 0x00000000, 0x61726170, 0x0000736d, - 0x00030005, 0x0000015b, 0x00000000, 0x00030047, 0x0000001a, 0x00000002, 0x00050048, 0x0000001a, 0x00000000, - 0x00000023, 0x00000000, 0x00050048, 0x0000001a, 0x00000001, 0x00000023, 0x00000008, 0x00050048, 0x0000001a, - 0x00000002, 0x00000023, 0x0000000c, 0x00050048, 0x0000001b, 0x00000000, 0x00000023, 0x00000000, 0x00050048, - 0x0000001b, 0x00000001, 0x00000023, 0x00000008, 0x00040047, 0x0000001c, 0x00000006, 0x00000010, 0x00030047, - 0x0000001d, 0x00000002, 0x00040048, 0x0000001d, 0x00000000, 0x00000018, 0x00050048, 0x0000001d, 0x00000000, - 0x00000023, 0x00000000, 0x00050048, 0x0000002b, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x0000002b, - 0x00000001, 0x00000023, 0x00000008, 0x00050048, 0x0000002b, 0x00000002, 0x00000023, 0x00000010, 0x00040047, - 0x0000002c, 0x00000006, 0x00000018, 0x00030047, 0x0000002d, 0x00000002, 0x00040048, 0x0000002d, 0x00000000, - 0x00000018, 0x00050048, 0x0000002d, 0x00000000, 0x00000023, 0x00000000, 0x00040047, 0x0000014c, 0x0000000b, - 0x0000001c, 0x00050048, 0x00000151, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000151, 0x00000001, - 0x00000023, 0x00000008, 0x00050048, 0x00000151, 0x00000002, 0x00000023, 0x0000000c, 0x00050048, 0x00000153, - 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000153, 0x00000001, 0x00000023, 0x00000010, 0x00050048, - 0x00000153, 0x00000002, 0x00000023, 0x00000018, 0x00050048, 0x00000153, 0x00000003, 0x00000023, 0x00000020, - 0x00050048, 0x00000153, 0x00000004, 0x00000023, 0x00000028, 0x00040047, 0x00000155, 0x00000006, 0x00000008, - 0x00030047, 0x00000156, 0x00000002, 0x00040048, 0x00000156, 0x00000000, 0x00000018, 0x00050048, 0x00000156, - 0x00000000, 0x00000023, 0x00000000, 0x00030047, 0x00000157, 0x00000002, 0x00050048, 0x00000157, 0x00000000, - 0x00000023, 0x00000000, 0x00030047, 0x00000159, 0x00000002, 0x00050048, 0x00000159, 0x00000000, 0x00000023, - 0x00000000, 0x00040047, 0x000001a4, 0x0000000b, 0x00000019, 0x00020013, 0x00000002, 0x00030021, 0x00000003, - 0x00000002, 0x00040015, 0x00000006, 0x00000020, 0x00000000, 0x00040015, 0x0000000d, 0x00000040, 0x00000000, - 0x00020014, 0x0000000e, 0x00030027, 0x00000018, 0x000014e5, 0x00030027, 0x00000019, 0x000014e5, 0x0005001e, - 0x0000001a, 0x00000019, 0x00000006, 0x00000006, 0x0004001e, 0x0000001b, 0x0000000d, 0x0000000d, 0x0003001d, - 0x0000001c, 0x0000001b, 0x0003001e, 0x0000001d, 0x0000001c, 0x00040020, 0x00000019, 0x000014e5, 0x0000001d, - 0x00040020, 0x00000018, 0x000014e5, 0x0000001a, 0x00030027, 0x00000029, 0x000014e5, 0x0005001e, 0x0000002b, - 0x0000000d, 0x0000000d, 0x0000000d, 0x0003001d, 0x0000002c, 0x0000002b, 0x0003001e, 0x0000002d, 0x0000002c, - 0x00040020, 0x00000029, 0x000014e5, 0x0000002d, 0x0004002b, 0x00000006, 0x00000035, 0x165667b1, 0x0004002b, - 0x00000006, 0x00000038, 0xc2b2ae3d, 0x0004002b, 0x00000006, 0x0000003b, 0x27d4eb2f, 0x00040015, 0x0000003d, - 0x00000020, 0x00000001, 0x0004002b, 0x0000003d, 0x0000003e, 0x00000011, 0x0004002b, 0x0000003d, 0x00000041, - 0x0000000f, 0x0004002b, 0x00000006, 0x00000045, 0x85ebca77, 0x0004002b, 0x0000003d, 0x0000004d, 0x0000000d, - 0x0004002b, 0x0000003d, 0x00000053, 0x00000010, 0x0005002b, 0x0000000d, 0x00000058, 0x00000000, 0x00000000, - 0x0005002b, 0x0000000d, 0x0000005d, 0x00000020, 0x00000000, 0x0005002b, 0x0000000d, 0x00000061, 0xffffffff, - 0x00000000, 0x0004002b, 0x00000006, 0x00000064, 0x00000000, 0x0004002b, 0x0000003d, 0x00000071, 0x00000002, - 0x00040020, 0x00000072, 0x000014e5, 0x00000006, 0x0004002b, 0x00000006, 0x00000083, 0x00000001, 0x0004002b, - 0x0000003d, 0x0000008a, 0x00000000, 0x00040020, 0x0000008b, 0x000014e5, 0x00000019, 0x00040020, 0x0000008f, - 0x000014e5, 0x0000001b, 0x0004002b, 0x0000003d, 0x00000095, 0x00000001, 0x00040020, 0x000000cb, 0x000014e5, - 0x0000000d, 0x0004002b, 0x00000006, 0x00000110, 0x00000002, 0x0005002b, 0x0000000d, 0x00000124, 0x00000001, - 0x00000000, 0x00040017, 0x0000014a, 0x00000006, 0x00000003, 0x00040020, 0x0000014b, 0x00000001, 0x0000014a, - 0x0004003b, 0x0000014b, 0x0000014c, 0x00000001, 0x00040020, 0x0000014d, 0x00000001, 0x00000006, 0x0005001e, - 0x00000151, 0x00000029, 0x00000006, 0x00000006, 0x00030027, 0x00000152, 0x000014e5, 0x0007001e, 0x00000153, - 0x00000151, 0x00000018, 0x00000152, 0x00000152, 0x00000006, 0x00030027, 0x00000154, 0x000014e5, 0x0003001d, - 0x00000155, 0x00000154, 0x0003001e, 0x00000156, 0x00000155, 0x0003001e, 0x00000157, 0x0000000d, 0x00040020, - 0x00000154, 0x000014e5, 0x00000157, 0x00040020, 0x00000152, 0x000014e5, 0x00000156, 0x0003001e, 0x00000159, - 0x00000153, 0x00040020, 0x0000015a, 0x00000009, 0x00000159, 0x0004003b, 0x0000015a, 0x0000015b, 0x00000009, - 0x0004002b, 0x0000003d, 0x0000015c, 0x00000004, 0x00040020, 0x0000015d, 0x00000009, 0x00000006, 0x00040020, - 0x00000165, 0x00000009, 0x00000152, 0x00040020, 0x00000169, 0x000014e5, 0x00000154, 0x00040020, 0x0000016e, - 0x00000009, 0x00000018, 0x00040020, 0x0000017d, 0x00000009, 0x00000151, 0x0004002b, 0x0000003d, 0x00000197, - 0x00000003, 0x0004002b, 0x00000006, 0x000001a3, 0x00000020, 0x0006002c, 0x0000014a, 0x000001a4, 0x000001a3, - 0x00000083, 0x00000083, 0x0003002a, 0x0000000e, 0x000001a7, 0x00030029, 0x0000000e, 0x000001aa, 0x00030001, - 0x0000000d, 0x00000357, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200f8, 0x00000005, - 0x000300f7, 0x000001a5, 0x00000000, 0x000300fb, 0x00000064, 0x000001a6, 0x000200f8, 0x000001a6, 0x00050041, - 0x0000014d, 0x0000014e, 0x0000014c, 0x00000064, 0x0004003d, 0x00000006, 0x0000014f, 0x0000014e, 0x00060041, - 0x0000015d, 0x0000015e, 0x0000015b, 0x0000008a, 0x0000015c, 0x0004003d, 0x00000006, 0x0000015f, 0x0000015e, - 0x000500ae, 0x0000000e, 0x00000160, 0x0000014f, 0x0000015f, 0x000300f7, 0x00000162, 0x00000000, 0x000400fa, - 0x00000160, 0x00000161, 0x00000162, 0x000200f8, 0x00000161, 0x000200f9, 0x000001a5, 0x000200f8, 0x00000162, - 0x00060041, 0x00000165, 0x00000166, 0x0000015b, 0x0000008a, 0x00000071, 0x0004003d, 0x00000152, 0x00000167, - 0x00000166, 0x00060041, 0x00000169, 0x0000016a, 0x00000167, 0x0000008a, 0x0000014f, 0x0006003d, 0x00000154, - 0x0000016b, 0x0000016a, 0x00000002, 0x00000008, 0x00050041, 0x000000cb, 0x0000016c, 0x0000016b, 0x0000008a, - 0x0006003d, 0x0000000d, 0x0000016d, 0x0000016c, 0x00000002, 0x00000010, 0x00060041, 0x0000016e, 0x0000016f, - 0x0000015b, 0x0000008a, 0x00000095, 0x0004003d, 0x00000018, 0x00000170, 0x0000016f, 0x0006003d, 0x00000154, - 0x00000175, 0x0000016a, 0x00000002, 0x00000008, 0x00040075, 0x0000000d, 0x00000176, 0x00000175, 0x000300f7, - 0x000001fb, 0x00000000, 0x000300fb, 0x00000064, 0x000001c5, 0x000200f8, 0x000001c5, 0x000500aa, 0x0000000e, - 0x000001ff, 0x00000176, 0x00000058, 0x000400a8, 0x0000000e, 0x000001c7, 0x000001ff, 0x000300f7, 0x000001cc, - 0x00000000, 0x000400fa, 0x000001c7, 0x000001c8, 0x000001cc, 0x000200f8, 0x000001c8, 0x00050041, 0x00000072, - 0x000001c9, 0x00000170, 0x00000071, 0x0006003d, 0x00000006, 0x000001ca, 0x000001c9, 0x00000002, 0x00000004, - 0x000500aa, 0x0000000e, 0x000001cb, 0x000001ca, 0x00000064, 0x000200f9, 0x000001cc, 0x000200f8, 0x000001cc, - 0x000700f5, 0x0000000e, 0x000001cd, 0x000001ff, 0x000001c5, 0x000001cb, 0x000001c8, 0x000300f7, 0x000001cf, - 0x00000000, 0x000400fa, 0x000001cd, 0x000001ce, 0x000001cf, 0x000200f8, 0x000001ce, 0x000200f9, 0x000001fb, - 0x000200f8, 0x000001cf, 0x000500c2, 0x0000000d, 0x00000207, 0x00000176, 0x0000005d, 0x00040071, 0x00000006, - 0x00000208, 0x00000207, 0x000500c7, 0x0000000d, 0x0000020a, 0x00000176, 0x00000061, 0x00040071, 0x00000006, - 0x0000020b, 0x0000020a, 0x00050080, 0x00000006, 0x00000212, 0x0000020b, 0x00000035, 0x000500c4, 0x00000006, - 0x00000217, 0x00000212, 0x0000003e, 0x000500c2, 0x00000006, 0x00000219, 0x00000212, 0x00000041, 0x000500c5, - 0x00000006, 0x0000021a, 0x00000217, 0x00000219, 0x00050084, 0x00000006, 0x0000021b, 0x0000003b, 0x0000021a, - 0x000500c2, 0x00000006, 0x0000021e, 0x0000021b, 0x00000041, 0x000500c6, 0x00000006, 0x0000021f, 0x0000021b, - 0x0000021e, 0x00050084, 0x00000006, 0x00000220, 0x00000045, 0x0000021f, 0x000500c2, 0x00000006, 0x00000223, - 0x00000220, 0x0000004d, 0x000500c6, 0x00000006, 0x00000224, 0x00000220, 0x00000223, 0x00050084, 0x00000006, - 0x00000225, 0x00000038, 0x00000224, 0x000500c2, 0x00000006, 0x00000228, 0x00000225, 0x00000053, 0x000500c6, - 0x00000006, 0x00000229, 0x00000225, 0x00000228, 0x00050080, 0x00000006, 0x0000022e, 0x00000208, 0x00000035, - 0x00050084, 0x00000006, 0x00000230, 0x00000229, 0x00000038, 0x00050080, 0x00000006, 0x00000231, 0x0000022e, - 0x00000230, 0x000500c4, 0x00000006, 0x00000233, 0x00000231, 0x0000003e, 0x000500c2, 0x00000006, 0x00000235, - 0x00000231, 0x00000041, 0x000500c5, 0x00000006, 0x00000236, 0x00000233, 0x00000235, 0x00050084, 0x00000006, - 0x00000237, 0x0000003b, 0x00000236, 0x000500c2, 0x00000006, 0x0000023a, 0x00000237, 0x00000041, 0x000500c6, - 0x00000006, 0x0000023b, 0x00000237, 0x0000023a, 0x00050084, 0x00000006, 0x0000023c, 0x00000045, 0x0000023b, - 0x000500c2, 0x00000006, 0x0000023f, 0x0000023c, 0x0000004d, 0x000500c6, 0x00000006, 0x00000240, 0x0000023c, - 0x0000023f, 0x00050084, 0x00000006, 0x00000241, 0x00000038, 0x00000240, 0x000500c2, 0x00000006, 0x00000244, - 0x00000241, 0x00000053, 0x000500c6, 0x00000006, 0x00000245, 0x00000241, 0x00000244, 0x000200f9, 0x000001d1, - 0x000200f8, 0x000001d1, 0x000700f5, 0x00000006, 0x00000347, 0x00000245, 0x000001cf, 0x000001f7, 0x000001f5, - 0x000400f6, 0x000001f8, 0x000001f5, 0x00000000, 0x000200f9, 0x000001d2, 0x000200f8, 0x000001d2, 0x00050041, - 0x00000072, 0x000001d3, 0x00000170, 0x00000071, 0x0006003d, 0x00000006, 0x000001d4, 0x000001d3, 0x00000002, - 0x00000004, 0x00050082, 0x00000006, 0x000001d5, 0x000001d4, 0x00000083, 0x000500c7, 0x00000006, 0x000001d7, - 0x00000347, 0x000001d5, 0x00050041, 0x0000008b, 0x000001d8, 0x00000170, 0x0000008a, 0x0006003d, 0x00000019, - 0x000001d9, 0x000001d8, 0x00000002, 0x00000010, 0x00060041, 0x0000008f, 0x000001db, 0x000001d9, 0x0000008a, - 0x000001d7, 0x0006003d, 0x0000001b, 0x000001dc, 0x000001db, 0x00000002, 0x00000010, 0x00050051, 0x0000000d, - 0x000001dd, 0x000001dc, 0x00000000, 0x00050051, 0x0000000d, 0x000001df, 0x000001dc, 0x00000001, 0x000500aa, - 0x0000000e, 0x00000248, 0x000001dd, 0x00000058, 0x000300f7, 0x000001f4, 0x00000000, 0x000400fa, 0x00000248, - 0x000001e4, 0x000001e5, 0x000200f8, 0x000001e4, 0x000200f9, 0x000001f8, 0x000200f8, 0x000001e5, 0x000500aa, - 0x0000000e, 0x000001e8, 0x00000176, 0x000001dd, 0x000300f7, 0x000001ee, 0x00000000, 0x000400fa, 0x000001e8, - 0x000001e9, 0x000001ee, 0x000200f8, 0x000001e9, 0x000500aa, 0x0000000e, 0x0000024b, 0x000001df, 0x00000058, - 0x000400a8, 0x0000000e, 0x000001ed, 0x0000024b, 0x000200f9, 0x000001ee, 0x000200f8, 0x000001ee, 0x000700f5, - 0x0000000e, 0x000001ef, 0x000001e8, 0x000001e5, 0x000001ed, 0x000001e9, 0x000300f7, 0x000001f3, 0x00000000, - 0x000400fa, 0x000001ef, 0x000001f0, 0x000001f3, 0x000200f8, 0x000001f0, 0x000200f9, 0x000001f8, 0x000200f8, - 0x000001f3, 0x000200f9, 0x000001f4, 0x000200f8, 0x000001f4, 0x000200f9, 0x000001f5, 0x000200f8, 0x000001f5, - 0x00050080, 0x00000006, 0x000001f7, 0x000001d7, 0x00000095, 0x000200f9, 0x000001d1, 0x000200f8, 0x000001f8, - 0x000700f5, 0x0000000d, 0x0000034b, 0x00000058, 0x000001e4, 0x000001df, 0x000001f0, 0x000300f7, 0x000001fa, - 0x00000000, 0x000400fa, 0x000001aa, 0x000001fb, 0x000001fa, 0x000200f8, 0x000001fa, 0x000200f9, 0x000001fb, - 0x000200f8, 0x000001fb, 0x000900f5, 0x0000000d, 0x0000034a, 0x00000058, 0x000001ce, 0x0000034b, 0x000001f8, - 0x0000034b, 0x000001fa, 0x000500ab, 0x0000000e, 0x00000179, 0x0000034a, 0x0000016d, 0x000300f7, 0x0000017b, - 0x00000000, 0x000400fa, 0x00000179, 0x0000017a, 0x0000017b, 0x000200f8, 0x0000017a, 0x00060041, 0x0000017d, - 0x0000017e, 0x0000015b, 0x0000008a, 0x0000008a, 0x0004003d, 0x00000151, 0x0000017f, 0x0000017e, 0x00050051, - 0x00000029, 0x00000182, 0x0000017f, 0x00000000, 0x00050051, 0x00000006, 0x00000185, 0x0000017f, 0x00000001, - 0x000300f7, 0x0000029c, 0x00000000, 0x000300fb, 0x00000064, 0x00000254, 0x000200f8, 0x00000254, 0x000500aa, - 0x0000000e, 0x00000256, 0x00000185, 0x00000064, 0x000300f7, 0x00000258, 0x00000000, 0x000400fa, 0x00000256, - 0x00000257, 0x00000258, 0x000200f8, 0x00000257, 0x000200f9, 0x0000029c, 0x000200f8, 0x00000258, 0x00050082, - 0x00000006, 0x0000025a, 0x00000185, 0x00000083, 0x000200f9, 0x0000025b, 0x000200f8, 0x0000025b, 0x000700f5, - 0x00000006, 0x0000034d, 0x0000025a, 0x00000258, 0x00000364, 0x00000298, 0x000700f5, 0x00000006, 0x0000034c, - 0x00000064, 0x00000258, 0x00000362, 0x00000298, 0x000500b2, 0x0000000e, 0x0000025f, 0x0000034c, 0x0000034d, - 0x000400f6, 0x00000299, 0x00000298, 0x00000000, 0x000400fa, 0x0000025f, 0x00000260, 0x00000299, 0x000200f8, - 0x00000260, 0x00050082, 0x00000006, 0x00000264, 0x0000034d, 0x0000034c, 0x00050086, 0x00000006, 0x00000265, - 0x00000264, 0x00000110, 0x00050080, 0x00000006, 0x00000266, 0x0000034c, 0x00000265, 0x00070041, 0x000000cb, - 0x0000026a, 0x00000182, 0x0000008a, 0x00000266, 0x0000008a, 0x0006003d, 0x0000000d, 0x0000026b, 0x0000026a, - 0x00000002, 0x00000008, 0x000500ae, 0x0000000e, 0x0000026c, 0x0000016d, 0x0000026b, 0x000300f7, 0x0000027a, - 0x00000000, 0x000400fa, 0x0000026c, 0x0000026d, 0x0000027a, 0x000200f8, 0x0000026d, 0x0006003d, 0x0000000d, - 0x00000272, 0x0000026a, 0x00000002, 0x00000008, 0x00070041, 0x000000cb, 0x00000275, 0x00000182, 0x0000008a, - 0x00000266, 0x00000071, 0x0006003d, 0x0000000d, 0x00000276, 0x00000275, 0x00000002, 0x00000008, 0x0007000c, - 0x0000000d, 0x00000277, 0x00000001, 0x00000029, 0x00000276, 0x00000124, 0x00050080, 0x0000000d, 0x00000278, - 0x00000272, 0x00000277, 0x000500b0, 0x0000000e, 0x00000279, 0x0000016d, 0x00000278, 0x000200f9, 0x0000027a, - 0x000200f8, 0x0000027a, 0x000700f5, 0x0000000e, 0x0000027b, 0x0000026c, 0x00000260, 0x00000279, 0x0000026d, - 0x000300f7, 0x00000297, 0x00000000, 0x000400fa, 0x0000027b, 0x0000027c, 0x00000289, 0x000200f8, 0x0000027c, - 0x0006003d, 0x0000000d, 0x00000281, 0x0000026a, 0x00000002, 0x00000008, 0x00050082, 0x0000000d, 0x00000282, - 0x0000016d, 0x00000281, 0x00070041, 0x000000cb, 0x00000285, 0x00000182, 0x0000008a, 0x00000266, 0x00000095, - 0x0006003d, 0x0000000d, 0x00000286, 0x00000285, 0x00000002, 0x00000008, 0x00050080, 0x0000000d, 0x00000288, - 0x00000286, 0x00000282, 0x000200f9, 0x00000299, 0x000200f8, 0x00000289, 0x0006003d, 0x0000000d, 0x0000028e, - 0x0000026a, 0x00000002, 0x00000008, 0x000500b0, 0x0000000e, 0x0000028f, 0x0000016d, 0x0000028e, 0x000300f7, - 0x00000296, 0x00000000, 0x000400fa, 0x0000028f, 0x00000290, 0x00000293, 0x000200f8, 0x00000290, 0x00050082, - 0x00000006, 0x00000292, 0x00000266, 0x00000083, 0x000200f9, 0x00000296, 0x000200f8, 0x00000293, 0x00050080, - 0x00000006, 0x00000295, 0x00000266, 0x00000083, 0x000200f9, 0x00000296, 0x000200f8, 0x00000296, 0x000700f5, - 0x00000006, 0x00000364, 0x00000292, 0x00000290, 0x0000034d, 0x00000293, 0x000700f5, 0x00000006, 0x00000362, - 0x0000034c, 0x00000290, 0x00000295, 0x00000293, 0x000200f9, 0x00000297, 0x000200f8, 0x00000297, 0x000200f9, - 0x00000298, 0x000200f8, 0x00000298, 0x000200f9, 0x0000025b, 0x000200f8, 0x00000299, 0x000700f5, 0x0000000d, - 0x00000353, 0x00000357, 0x0000025b, 0x00000288, 0x0000027c, 0x000700f5, 0x0000000e, 0x0000034e, 0x000001a7, - 0x0000025b, 0x000001aa, 0x0000027c, 0x000300f7, 0x0000029b, 0x00000000, 0x000400fa, 0x0000034e, 0x0000029c, - 0x0000029b, 0x000200f8, 0x0000029b, 0x000200f9, 0x0000029c, 0x000200f8, 0x0000029c, 0x000900f5, 0x0000000d, - 0x00000352, 0x00000058, 0x00000257, 0x00000353, 0x00000299, 0x00000058, 0x0000029b, 0x0006003d, 0x00000154, - 0x00000193, 0x0000016a, 0x00000002, 0x00000008, 0x00040075, 0x0000000d, 0x00000194, 0x00000193, 0x000300f7, - 0x000002e8, 0x00000000, 0x000300fb, 0x00000064, 0x000002a3, 0x000200f8, 0x000002a3, 0x000500aa, 0x0000000e, - 0x000002eb, 0x00000194, 0x00000058, 0x000400a8, 0x0000000e, 0x000002a5, 0x000002eb, 0x000300f7, 0x000002aa, - 0x00000000, 0x000400fa, 0x000002a5, 0x000002a6, 0x000002aa, 0x000200f8, 0x000002a6, 0x00050041, 0x00000072, - 0x000002a7, 0x00000170, 0x00000071, 0x0006003d, 0x00000006, 0x000002a8, 0x000002a7, 0x00000002, 0x00000004, - 0x000500aa, 0x0000000e, 0x000002a9, 0x000002a8, 0x00000064, 0x000200f9, 0x000002aa, 0x000200f8, 0x000002aa, - 0x000700f5, 0x0000000e, 0x000002ab, 0x000002eb, 0x000002a3, 0x000002a9, 0x000002a6, 0x000300f7, 0x000002ad, - 0x00000000, 0x000400fa, 0x000002ab, 0x000002ac, 0x000002ad, 0x000200f8, 0x000002ac, 0x000200f9, 0x000002e8, - 0x000200f8, 0x000002ad, 0x000500c2, 0x0000000d, 0x000002f3, 0x00000194, 0x0000005d, 0x00040071, 0x00000006, - 0x000002f4, 0x000002f3, 0x000500c7, 0x0000000d, 0x000002f6, 0x00000194, 0x00000061, 0x00040071, 0x00000006, - 0x000002f7, 0x000002f6, 0x00050080, 0x00000006, 0x000002fe, 0x000002f7, 0x00000035, 0x000500c4, 0x00000006, - 0x00000303, 0x000002fe, 0x0000003e, 0x000500c2, 0x00000006, 0x00000305, 0x000002fe, 0x00000041, 0x000500c5, - 0x00000006, 0x00000306, 0x00000303, 0x00000305, 0x00050084, 0x00000006, 0x00000307, 0x0000003b, 0x00000306, - 0x000500c2, 0x00000006, 0x0000030a, 0x00000307, 0x00000041, 0x000500c6, 0x00000006, 0x0000030b, 0x00000307, - 0x0000030a, 0x00050084, 0x00000006, 0x0000030c, 0x00000045, 0x0000030b, 0x000500c2, 0x00000006, 0x0000030f, - 0x0000030c, 0x0000004d, 0x000500c6, 0x00000006, 0x00000310, 0x0000030c, 0x0000030f, 0x00050084, 0x00000006, - 0x00000311, 0x00000038, 0x00000310, 0x000500c2, 0x00000006, 0x00000314, 0x00000311, 0x00000053, 0x000500c6, - 0x00000006, 0x00000315, 0x00000311, 0x00000314, 0x00050080, 0x00000006, 0x0000031a, 0x000002f4, 0x00000035, - 0x00050084, 0x00000006, 0x0000031c, 0x00000315, 0x00000038, 0x00050080, 0x00000006, 0x0000031d, 0x0000031a, - 0x0000031c, 0x000500c4, 0x00000006, 0x0000031f, 0x0000031d, 0x0000003e, 0x000500c2, 0x00000006, 0x00000321, - 0x0000031d, 0x00000041, 0x000500c5, 0x00000006, 0x00000322, 0x0000031f, 0x00000321, 0x00050084, 0x00000006, - 0x00000323, 0x0000003b, 0x00000322, 0x000500c2, 0x00000006, 0x00000326, 0x00000323, 0x00000041, 0x000500c6, - 0x00000006, 0x00000327, 0x00000323, 0x00000326, 0x00050084, 0x00000006, 0x00000328, 0x00000045, 0x00000327, - 0x000500c2, 0x00000006, 0x0000032b, 0x00000328, 0x0000004d, 0x000500c6, 0x00000006, 0x0000032c, 0x00000328, - 0x0000032b, 0x00050084, 0x00000006, 0x0000032d, 0x00000038, 0x0000032c, 0x000500c2, 0x00000006, 0x00000330, - 0x0000032d, 0x00000053, 0x000500c6, 0x00000006, 0x00000331, 0x0000032d, 0x00000330, 0x000200f9, 0x000002af, - 0x000200f8, 0x000002af, 0x000700f5, 0x00000006, 0x0000035d, 0x00000331, 0x000002ad, 0x000002e4, 0x000002e2, - 0x000400f6, 0x000002e5, 0x000002e2, 0x00000000, 0x000200f9, 0x000002b0, 0x000200f8, 0x000002b0, 0x00050041, - 0x00000072, 0x000002b1, 0x00000170, 0x00000071, 0x0006003d, 0x00000006, 0x000002b2, 0x000002b1, 0x00000002, - 0x00000004, 0x00050082, 0x00000006, 0x000002b3, 0x000002b2, 0x00000083, 0x000500c7, 0x00000006, 0x000002b5, - 0x0000035d, 0x000002b3, 0x00050041, 0x0000008b, 0x000002b6, 0x00000170, 0x0000008a, 0x0006003d, 0x00000019, - 0x000002b7, 0x000002b6, 0x00000002, 0x00000010, 0x00070041, 0x000000cb, 0x000002b9, 0x000002b7, 0x0000008a, - 0x000002b5, 0x0000008a, 0x0006003d, 0x0000000d, 0x000002ba, 0x000002b9, 0x00000002, 0x00000010, 0x000500ab, - 0x0000000e, 0x000002bc, 0x000002ba, 0x00000194, 0x000300f7, 0x000002dd, 0x00000000, 0x000400fa, 0x000002bc, - 0x000002bd, 0x000002dd, 0x000200f8, 0x000002bd, 0x000500aa, 0x0000000e, 0x00000334, 0x000002ba, 0x00000058, - 0x000400a8, 0x0000000e, 0x000002c0, 0x00000334, 0x000300f7, 0x000002c9, 0x00000000, 0x000400fa, 0x000002c0, - 0x000002c1, 0x000002c9, 0x000200f8, 0x000002c1, 0x0006003d, 0x00000019, 0x000002c3, 0x000002b6, 0x00000002, - 0x00000010, 0x00070041, 0x000000cb, 0x000002c5, 0x000002c3, 0x0000008a, 0x000002b5, 0x00000095, 0x0006003d, - 0x0000000d, 0x000002c6, 0x000002c5, 0x00000002, 0x00000008, 0x000500aa, 0x0000000e, 0x00000337, 0x000002c6, - 0x00000058, 0x000400a8, 0x0000000e, 0x000002c8, 0x00000337, 0x000200f9, 0x000002c9, 0x000200f8, 0x000002c9, - 0x000700f5, 0x0000000e, 0x000002ca, 0x000002c0, 0x000002bd, 0x000002c8, 0x000002c1, 0x000300f7, 0x000002cc, - 0x00000000, 0x000400fa, 0x000002ca, 0x000002cb, 0x000002cc, 0x000200f8, 0x000002cb, 0x000200f9, 0x000002e2, - 0x000200f8, 0x000002cc, 0x0006003d, 0x00000019, 0x000002ce, 0x000002b6, 0x00000002, 0x00000010, 0x00070041, - 0x000000cb, 0x000002d0, 0x000002ce, 0x0000008a, 0x000002b5, 0x0000008a, 0x000900e6, 0x0000000d, 0x000002d2, - 0x000002d0, 0x00000083, 0x00000064, 0x00000064, 0x00000194, 0x000002ba, 0x000500aa, 0x0000000e, 0x0000033a, - 0x000002d2, 0x00000058, 0x000400a8, 0x0000000e, 0x000002d5, 0x0000033a, 0x000500ab, 0x0000000e, 0x000002d7, - 0x000002d2, 0x00000194, 0x000500a7, 0x0000000e, 0x000002d8, 0x000002d5, 0x000002d7, 0x000300f7, 0x000002da, - 0x00000000, 0x000400fa, 0x000002d8, 0x000002d9, 0x000002da, 0x000200f8, 0x000002d9, 0x000200f9, 0x000002e2, - 0x000200f8, 0x000002da, 0x00050041, 0x00000072, 0x000002db, 0x00000170, 0x00000095, 0x000700ea, 0x00000006, - 0x000002dc, 0x000002db, 0x00000083, 0x00000064, 0x00000083, 0x000200f9, 0x000002dd, 0x000200f8, 0x000002dd, - 0x0006003d, 0x00000019, 0x000002df, 0x000002b6, 0x00000002, 0x00000010, 0x00070041, 0x000000cb, 0x000002e1, - 0x000002df, 0x0000008a, 0x000002b5, 0x00000095, 0x0005003e, 0x000002e1, 0x00000352, 0x00000002, 0x00000008, - 0x000200f9, 0x000002e5, 0x000200f8, 0x000002e2, 0x00050080, 0x00000006, 0x000002e4, 0x000002b5, 0x00000095, - 0x000200f9, 0x000002af, 0x000200f8, 0x000002e5, 0x000300f7, 0x000002e7, 0x00000000, 0x000400fa, 0x000001aa, - 0x000002e8, 0x000002e7, 0x000200f8, 0x000002e7, 0x000200f9, 0x000002e8, 0x000200f8, 0x000002e8, 0x00060041, - 0x00000165, 0x00000198, 0x0000015b, 0x0000008a, 0x00000197, 0x0004003d, 0x00000152, 0x00000199, 0x00000198, - 0x00060041, 0x00000169, 0x0000019b, 0x00000199, 0x0000008a, 0x0000014f, 0x0006003d, 0x00000154, 0x0000019c, - 0x0000019b, 0x00000002, 0x00000008, 0x000500aa, 0x0000000e, 0x0000033d, 0x00000352, 0x00000058, 0x000600a9, - 0x0000000d, 0x000001a1, 0x0000033d, 0x0000016d, 0x00000352, 0x00050041, 0x000000cb, 0x000001a2, 0x0000019c, - 0x0000008a, 0x0005003e, 0x000001a2, 0x000001a1, 0x00000002, 0x00000010, 0x000200f9, 0x0000017b, 0x000200f8, - 0x0000017b, 0x000200f9, 0x000001a5, 0x000200f8, 0x000001a5, 0x000100fd, 0x00010038 + 0x07230203, 0x00010300, 0x0008000b, 0x000003bc, 0x00000000, 0x00020011, 0x00000001, 0x00020011, 0x0000000b, + 0x00020011, 0x0000000c, 0x00020011, 0x000014e3, 0x0009000a, 0x5f565053, 0x5f52484b, 0x73796870, 0x6c616369, + 0x6f74735f, 0x65676172, 0x6675625f, 0x00726566, 0x0006000b, 0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, + 0x00000000, 0x0003000e, 0x000014e4, 0x00000001, 0x0006000f, 0x00000005, 0x00000004, 0x6e69616d, 0x00000000, + 0x00000180, 0x00060010, 0x00000004, 0x00000011, 0x00000020, 0x00000001, 0x00000001, 0x00030003, 0x00000002, + 0x000001cc, 0x00070004, 0x455f4c47, 0x625f5458, 0x65666675, 0x65725f72, 0x65726566, 0x0065636e, 0x00080004, + 0x455f4c47, 0x625f5458, 0x65666675, 0x65725f72, 0x65726566, 0x3265636e, 0x00000000, 0x00080004, 0x455f4c47, + 0x735f5458, 0x616c6163, 0x6c625f72, 0x5f6b636f, 0x6f79616c, 0x00007475, 0x00080004, 0x455f4c47, 0x735f5458, + 0x65646168, 0x74615f72, 0x63696d6f, 0x746e695f, 0x00003436, 0x000d0004, 0x455f4c47, 0x735f5458, 0x65646168, + 0x78655f72, 0x63696c70, 0x615f7469, 0x68746972, 0x6974656d, 0x79745f63, 0x5f736570, 0x36746e69, 0x00000034, + 0x00040005, 0x00000004, 0x6e69616d, 0x00000000, 0x00050005, 0x0000001a, 0x68736148, 0x5070614d, 0x00007274, + 0x00050006, 0x0000001a, 0x00000000, 0x726f7473, 0x00656761, 0x00050006, 0x0000001a, 0x00000001, 0x657a6973, + 0x00000000, 0x00060006, 0x0000001a, 0x00000002, 0x61706163, 0x79746963, 0x00000000, 0x00060005, 0x0000001b, + 0x68736168, 0x5f70616d, 0x6d657469, 0x0000745f, 0x00040006, 0x0000001b, 0x00000000, 0x0079656b, 0x00050006, + 0x0000001b, 0x00000001, 0x756c6176, 0x00000065, 0x00060005, 0x0000001d, 0x68736148, 0x5370614d, 0x61726f74, + 0x00006567, 0x00040006, 0x0000001d, 0x00000000, 0x00000076, 0x00060005, 0x0000002b, 0x726f7473, 0x5f656761, + 0x6d657469, 0x0000745f, 0x00040006, 0x0000002b, 0x00000000, 0x0079656b, 0x00050006, 0x0000002b, 0x00000001, + 0x756c6176, 0x00000065, 0x00050006, 0x0000002b, 0x00000002, 0x657a6973, 0x00000000, 0x00040005, 0x0000002d, + 0x726f7453, 0x00656761, 0x00040006, 0x0000002d, 0x00000000, 0x00000076, 0x000a0005, 0x0000015d, 0x64646150, + 0x75426465, 0x72656666, 0x69766544, 0x64416563, 0x73657264, 0x72745073, 0x00000000, 0x00040006, 0x0000015d, + 0x00000000, 0x00646170, 0x00090006, 0x0000015d, 0x00000001, 0x66667562, 0x645f7265, 0x63697665, 0x64615f65, + 0x73657264, 0x00000073, 0x00080005, 0x00000164, 0x66667542, 0x65447265, 0x65636976, 0x72646441, 0x50737365, + 0x00007274, 0x00090006, 0x00000164, 0x00000000, 0x66667562, 0x645f7265, 0x63697665, 0x64615f65, 0x73657264, + 0x00000073, 0x00080005, 0x00000180, 0x475f6c67, 0x61626f6c, 0x766e496c, 0x7461636f, 0x496e6f69, 0x00000044, + 0x00060005, 0x00000185, 0x74726f73, 0x615f6465, 0x79617272, 0x0000745f, 0x00050006, 0x00000185, 0x00000000, + 0x726f7473, 0x00656761, 0x00060006, 0x00000185, 0x00000001, 0x5f6d756e, 0x6d657469, 0x00000073, 0x00050006, + 0x00000185, 0x00000002, 0x64646170, 0x00676e69, 0x00080005, 0x00000187, 0x6c706572, 0x72656361, 0x7261705f, + 0x5f736d61, 0x5f616462, 0x00000074, 0x00090006, 0x00000187, 0x00000000, 0x69766564, 0x615f6563, 0x65726464, + 0x615f7373, 0x79617272, 0x00000000, 0x00080006, 0x00000187, 0x00000001, 0x72646461, 0x5f737365, 0x63616c62, + 0x73696c6b, 0x00000074, 0x00070006, 0x00000187, 0x00000002, 0x75706e69, 0x61685f74, 0x656c646e, 0x00000073, + 0x00070006, 0x00000187, 0x00000003, 0x7074756f, 0x685f7475, 0x6c646e61, 0x00007365, 0x00060006, 0x00000187, + 0x00000004, 0x5f6d756e, 0x646e6168, 0x0073656c, 0x00060005, 0x00000189, 0x72646441, 0x41737365, 0x79617272, + 0x00000000, 0x00040006, 0x00000189, 0x00000000, 0x00000076, 0x00030005, 0x0000018a, 0x00006370, 0x00050006, + 0x0000018a, 0x00000000, 0x61726170, 0x0000736d, 0x00030005, 0x0000018c, 0x00000000, 0x00030047, 0x0000001a, + 0x00000002, 0x00050048, 0x0000001a, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x0000001a, 0x00000001, + 0x00000023, 0x00000008, 0x00050048, 0x0000001a, 0x00000002, 0x00000023, 0x0000000c, 0x00050048, 0x0000001b, + 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x0000001b, 0x00000001, 0x00000023, 0x00000008, 0x00040047, + 0x0000001c, 0x00000006, 0x00000010, 0x00030047, 0x0000001d, 0x00000002, 0x00040048, 0x0000001d, 0x00000000, + 0x00000018, 0x00050048, 0x0000001d, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x0000002b, 0x00000000, + 0x00000023, 0x00000000, 0x00050048, 0x0000002b, 0x00000001, 0x00000023, 0x00000008, 0x00050048, 0x0000002b, + 0x00000002, 0x00000023, 0x00000010, 0x00040047, 0x0000002c, 0x00000006, 0x00000018, 0x00030047, 0x0000002d, + 0x00000002, 0x00040048, 0x0000002d, 0x00000000, 0x00000018, 0x00050048, 0x0000002d, 0x00000000, 0x00000023, + 0x00000000, 0x00030047, 0x0000015d, 0x00000002, 0x00050048, 0x0000015d, 0x00000000, 0x00000023, 0x00000000, + 0x00050048, 0x0000015d, 0x00000001, 0x00000023, 0x00000008, 0x00030047, 0x00000164, 0x00000002, 0x00050048, + 0x00000164, 0x00000000, 0x00000023, 0x00000000, 0x00040047, 0x00000180, 0x0000000b, 0x0000001c, 0x00050048, + 0x00000185, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000185, 0x00000001, 0x00000023, 0x00000008, + 0x00050048, 0x00000185, 0x00000002, 0x00000023, 0x0000000c, 0x00050048, 0x00000187, 0x00000000, 0x00000023, + 0x00000000, 0x00050048, 0x00000187, 0x00000001, 0x00000023, 0x00000010, 0x00050048, 0x00000187, 0x00000002, + 0x00000023, 0x00000018, 0x00050048, 0x00000187, 0x00000003, 0x00000023, 0x00000020, 0x00050048, 0x00000187, + 0x00000004, 0x00000023, 0x00000028, 0x00040047, 0x00000188, 0x00000006, 0x00000008, 0x00030047, 0x00000189, + 0x00000002, 0x00040048, 0x00000189, 0x00000000, 0x00000018, 0x00050048, 0x00000189, 0x00000000, 0x00000023, + 0x00000000, 0x00030047, 0x0000018a, 0x00000002, 0x00050048, 0x0000018a, 0x00000000, 0x00000023, 0x00000000, + 0x00040047, 0x000001d4, 0x0000000b, 0x00000019, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, + 0x00040015, 0x00000006, 0x00000020, 0x00000000, 0x00040015, 0x0000000d, 0x00000040, 0x00000000, 0x00020014, + 0x0000000e, 0x00030027, 0x00000018, 0x000014e5, 0x00030027, 0x00000019, 0x000014e5, 0x0005001e, 0x0000001a, + 0x00000019, 0x00000006, 0x00000006, 0x0004001e, 0x0000001b, 0x0000000d, 0x0000000d, 0x0003001d, 0x0000001c, + 0x0000001b, 0x0003001e, 0x0000001d, 0x0000001c, 0x00040020, 0x00000019, 0x000014e5, 0x0000001d, 0x00040020, + 0x00000018, 0x000014e5, 0x0000001a, 0x00030027, 0x00000029, 0x000014e5, 0x0005001e, 0x0000002b, 0x0000000d, + 0x0000000d, 0x0000000d, 0x0003001d, 0x0000002c, 0x0000002b, 0x0003001e, 0x0000002d, 0x0000002c, 0x00040020, + 0x00000029, 0x000014e5, 0x0000002d, 0x0004002b, 0x00000006, 0x0000003e, 0x165667b1, 0x0004002b, 0x00000006, + 0x00000041, 0xc2b2ae3d, 0x0004002b, 0x00000006, 0x00000044, 0x27d4eb2f, 0x00040015, 0x00000046, 0x00000020, + 0x00000001, 0x0004002b, 0x00000046, 0x00000047, 0x00000011, 0x0004002b, 0x00000046, 0x0000004a, 0x0000000f, + 0x0004002b, 0x00000006, 0x0000004e, 0x85ebca77, 0x0004002b, 0x00000046, 0x00000056, 0x0000000d, 0x0004002b, + 0x00000046, 0x0000005c, 0x00000010, 0x0005002b, 0x0000000d, 0x00000061, 0x00000000, 0x00000000, 0x0005002b, + 0x0000000d, 0x00000066, 0x00000020, 0x00000000, 0x0005002b, 0x0000000d, 0x0000006a, 0xffffffff, 0x00000000, + 0x0004002b, 0x00000006, 0x0000006d, 0x00000000, 0x0004002b, 0x00000046, 0x0000007a, 0x00000002, 0x00040020, + 0x0000007b, 0x000014e5, 0x00000006, 0x0004002b, 0x00000006, 0x0000008c, 0x00000001, 0x0004002b, 0x00000046, + 0x00000093, 0x00000000, 0x00040020, 0x00000094, 0x000014e5, 0x00000019, 0x00040020, 0x00000098, 0x000014e5, + 0x0000001b, 0x0004002b, 0x00000046, 0x0000009e, 0x00000001, 0x00040020, 0x000000d4, 0x000014e5, 0x0000000d, + 0x0004002b, 0x00000006, 0x00000119, 0x00000002, 0x0005002b, 0x0000000d, 0x0000012d, 0x00000001, 0x00000000, + 0x0005002b, 0x0000000d, 0x00000153, 0x00000007, 0x00000000, 0x0005002b, 0x0000000d, 0x0000015a, 0xfffffff8, + 0xffffffff, 0x00030027, 0x0000015c, 0x000014e5, 0x0004001e, 0x0000015d, 0x00000006, 0x0000000d, 0x00040020, + 0x0000015c, 0x000014e5, 0x0000015d, 0x00030027, 0x00000163, 0x000014e5, 0x0003001e, 0x00000164, 0x0000000d, + 0x00040020, 0x00000163, 0x000014e5, 0x00000164, 0x00040017, 0x0000017e, 0x00000006, 0x00000003, 0x00040020, + 0x0000017f, 0x00000001, 0x0000017e, 0x0004003b, 0x0000017f, 0x00000180, 0x00000001, 0x00040020, 0x00000181, + 0x00000001, 0x00000006, 0x0005001e, 0x00000185, 0x00000029, 0x00000006, 0x00000006, 0x00030027, 0x00000186, + 0x000014e5, 0x0007001e, 0x00000187, 0x00000185, 0x00000018, 0x00000186, 0x00000186, 0x00000006, 0x0003001d, + 0x00000188, 0x0000000d, 0x0003001e, 0x00000189, 0x00000188, 0x00040020, 0x00000186, 0x000014e5, 0x00000189, + 0x0003001e, 0x0000018a, 0x00000187, 0x00040020, 0x0000018b, 0x00000009, 0x0000018a, 0x0004003b, 0x0000018b, + 0x0000018c, 0x00000009, 0x0004002b, 0x00000046, 0x0000018d, 0x00000004, 0x00040020, 0x0000018e, 0x00000009, + 0x00000006, 0x00040020, 0x00000196, 0x00000009, 0x00000186, 0x00040020, 0x0000019e, 0x00000009, 0x00000018, + 0x00040020, 0x000001ac, 0x00000009, 0x00000185, 0x0004002b, 0x00000046, 0x000001c5, 0x00000003, 0x0004002b, + 0x00000006, 0x000001d3, 0x00000020, 0x0006002c, 0x0000017e, 0x000001d4, 0x000001d3, 0x0000008c, 0x0000008c, + 0x0003002a, 0x0000000e, 0x000001d7, 0x00030029, 0x0000000e, 0x000001da, 0x00030001, 0x0000000d, 0x000003ae, + 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200f8, 0x00000005, 0x000300f7, 0x000001d5, + 0x00000000, 0x000300fb, 0x0000006d, 0x000001d6, 0x000200f8, 0x000001d6, 0x00050041, 0x00000181, 0x00000182, + 0x00000180, 0x0000006d, 0x0004003d, 0x00000006, 0x00000183, 0x00000182, 0x00060041, 0x0000018e, 0x0000018f, + 0x0000018c, 0x00000093, 0x0000018d, 0x0004003d, 0x00000006, 0x00000190, 0x0000018f, 0x000500ae, 0x0000000e, + 0x00000191, 0x00000183, 0x00000190, 0x000300f7, 0x00000193, 0x00000000, 0x000400fa, 0x00000191, 0x00000192, + 0x00000193, 0x000200f8, 0x00000192, 0x000200f9, 0x000001d5, 0x000200f8, 0x00000193, 0x00060041, 0x00000196, + 0x00000197, 0x0000018c, 0x00000093, 0x0000007a, 0x0004003d, 0x00000186, 0x00000198, 0x00000197, 0x00060041, + 0x000000d4, 0x0000019b, 0x00000198, 0x00000093, 0x00000183, 0x0006003d, 0x0000000d, 0x0000019c, 0x0000019b, + 0x00000002, 0x00000008, 0x000500c7, 0x0000000d, 0x000001f2, 0x0000019c, 0x00000153, 0x000500ab, 0x0000000e, + 0x000001f3, 0x000001f2, 0x00000061, 0x000300f7, 0x000001ff, 0x00000000, 0x000400fa, 0x000001f3, 0x000001f4, + 0x000001fa, 0x000200f8, 0x000001f4, 0x000500c7, 0x0000000d, 0x000001f6, 0x0000019c, 0x0000015a, 0x00040078, + 0x0000015c, 0x000001f7, 0x000001f6, 0x00050041, 0x000000d4, 0x000001f8, 0x000001f7, 0x0000009e, 0x0006003d, + 0x0000000d, 0x000001f9, 0x000001f8, 0x00000002, 0x00000008, 0x000200f9, 0x000001ff, 0x000200f8, 0x000001fa, + 0x00040078, 0x00000163, 0x000001fc, 0x0000019c, 0x00050041, 0x000000d4, 0x000001fd, 0x000001fc, 0x00000093, + 0x0006003d, 0x0000000d, 0x000001fe, 0x000001fd, 0x00000002, 0x00000010, 0x000200f9, 0x000001ff, 0x000200f8, + 0x000001ff, 0x000700f5, 0x0000000d, 0x0000039c, 0x000001f9, 0x000001f4, 0x000001fe, 0x000001fa, 0x00060041, + 0x0000019e, 0x0000019f, 0x0000018c, 0x00000093, 0x0000009e, 0x0004003d, 0x00000018, 0x000001a0, 0x0000019f, + 0x0006003d, 0x0000000d, 0x000001a5, 0x0000019b, 0x00000002, 0x00000008, 0x000300f7, 0x0000023e, 0x00000000, + 0x000300fb, 0x0000006d, 0x00000208, 0x000200f8, 0x00000208, 0x000500aa, 0x0000000e, 0x00000242, 0x000001a5, + 0x00000061, 0x000400a8, 0x0000000e, 0x0000020a, 0x00000242, 0x000300f7, 0x0000020f, 0x00000000, 0x000400fa, + 0x0000020a, 0x0000020b, 0x0000020f, 0x000200f8, 0x0000020b, 0x00050041, 0x0000007b, 0x0000020c, 0x000001a0, + 0x0000007a, 0x0006003d, 0x00000006, 0x0000020d, 0x0000020c, 0x00000002, 0x00000004, 0x000500aa, 0x0000000e, + 0x0000020e, 0x0000020d, 0x0000006d, 0x000200f9, 0x0000020f, 0x000200f8, 0x0000020f, 0x000700f5, 0x0000000e, + 0x00000210, 0x00000242, 0x00000208, 0x0000020e, 0x0000020b, 0x000300f7, 0x00000212, 0x00000000, 0x000400fa, + 0x00000210, 0x00000211, 0x00000212, 0x000200f8, 0x00000211, 0x000200f9, 0x0000023e, 0x000200f8, 0x00000212, + 0x000500c2, 0x0000000d, 0x0000024a, 0x000001a5, 0x00000066, 0x00040071, 0x00000006, 0x0000024b, 0x0000024a, + 0x000500c7, 0x0000000d, 0x0000024d, 0x000001a5, 0x0000006a, 0x00040071, 0x00000006, 0x0000024e, 0x0000024d, + 0x00050080, 0x00000006, 0x00000255, 0x0000024e, 0x0000003e, 0x000500c4, 0x00000006, 0x0000025a, 0x00000255, + 0x00000047, 0x000500c2, 0x00000006, 0x0000025c, 0x00000255, 0x0000004a, 0x000500c5, 0x00000006, 0x0000025d, + 0x0000025a, 0x0000025c, 0x00050084, 0x00000006, 0x0000025e, 0x00000044, 0x0000025d, 0x000500c2, 0x00000006, + 0x00000261, 0x0000025e, 0x0000004a, 0x000500c6, 0x00000006, 0x00000262, 0x0000025e, 0x00000261, 0x00050084, + 0x00000006, 0x00000263, 0x0000004e, 0x00000262, 0x000500c2, 0x00000006, 0x00000266, 0x00000263, 0x00000056, + 0x000500c6, 0x00000006, 0x00000267, 0x00000263, 0x00000266, 0x00050084, 0x00000006, 0x00000268, 0x00000041, + 0x00000267, 0x000500c2, 0x00000006, 0x0000026b, 0x00000268, 0x0000005c, 0x000500c6, 0x00000006, 0x0000026c, + 0x00000268, 0x0000026b, 0x00050080, 0x00000006, 0x00000271, 0x0000024b, 0x0000003e, 0x00050084, 0x00000006, + 0x00000273, 0x0000026c, 0x00000041, 0x00050080, 0x00000006, 0x00000274, 0x00000271, 0x00000273, 0x000500c4, + 0x00000006, 0x00000276, 0x00000274, 0x00000047, 0x000500c2, 0x00000006, 0x00000278, 0x00000274, 0x0000004a, + 0x000500c5, 0x00000006, 0x00000279, 0x00000276, 0x00000278, 0x00050084, 0x00000006, 0x0000027a, 0x00000044, + 0x00000279, 0x000500c2, 0x00000006, 0x0000027d, 0x0000027a, 0x0000004a, 0x000500c6, 0x00000006, 0x0000027e, + 0x0000027a, 0x0000027d, 0x00050084, 0x00000006, 0x0000027f, 0x0000004e, 0x0000027e, 0x000500c2, 0x00000006, + 0x00000282, 0x0000027f, 0x00000056, 0x000500c6, 0x00000006, 0x00000283, 0x0000027f, 0x00000282, 0x00050084, + 0x00000006, 0x00000284, 0x00000041, 0x00000283, 0x000500c2, 0x00000006, 0x00000287, 0x00000284, 0x0000005c, + 0x000500c6, 0x00000006, 0x00000288, 0x00000284, 0x00000287, 0x000200f9, 0x00000214, 0x000200f8, 0x00000214, + 0x000700f5, 0x00000006, 0x0000039d, 0x00000288, 0x00000212, 0x0000023a, 0x00000238, 0x000400f6, 0x0000023b, + 0x00000238, 0x00000000, 0x000200f9, 0x00000215, 0x000200f8, 0x00000215, 0x00050041, 0x0000007b, 0x00000216, + 0x000001a0, 0x0000007a, 0x0006003d, 0x00000006, 0x00000217, 0x00000216, 0x00000002, 0x00000004, 0x00050082, + 0x00000006, 0x00000218, 0x00000217, 0x0000008c, 0x000500c7, 0x00000006, 0x0000021a, 0x0000039d, 0x00000218, + 0x00050041, 0x00000094, 0x0000021b, 0x000001a0, 0x00000093, 0x0006003d, 0x00000019, 0x0000021c, 0x0000021b, + 0x00000002, 0x00000010, 0x00060041, 0x00000098, 0x0000021e, 0x0000021c, 0x00000093, 0x0000021a, 0x0006003d, + 0x0000001b, 0x0000021f, 0x0000021e, 0x00000002, 0x00000010, 0x00050051, 0x0000000d, 0x00000220, 0x0000021f, + 0x00000000, 0x00050051, 0x0000000d, 0x00000222, 0x0000021f, 0x00000001, 0x000500aa, 0x0000000e, 0x0000028b, + 0x00000220, 0x00000061, 0x000300f7, 0x00000237, 0x00000000, 0x000400fa, 0x0000028b, 0x00000227, 0x00000228, + 0x000200f8, 0x00000227, 0x000200f9, 0x0000023b, 0x000200f8, 0x00000228, 0x000500aa, 0x0000000e, 0x0000022b, + 0x000001a5, 0x00000220, 0x000300f7, 0x00000231, 0x00000000, 0x000400fa, 0x0000022b, 0x0000022c, 0x00000231, + 0x000200f8, 0x0000022c, 0x000500aa, 0x0000000e, 0x0000028e, 0x00000222, 0x00000061, 0x000400a8, 0x0000000e, + 0x00000230, 0x0000028e, 0x000200f9, 0x00000231, 0x000200f8, 0x00000231, 0x000700f5, 0x0000000e, 0x00000232, + 0x0000022b, 0x00000228, 0x00000230, 0x0000022c, 0x000300f7, 0x00000236, 0x00000000, 0x000400fa, 0x00000232, + 0x00000233, 0x00000236, 0x000200f8, 0x00000233, 0x000200f9, 0x0000023b, 0x000200f8, 0x00000236, 0x000200f9, + 0x00000237, 0x000200f8, 0x00000237, 0x000200f9, 0x00000238, 0x000200f8, 0x00000238, 0x00050080, 0x00000006, + 0x0000023a, 0x0000021a, 0x0000009e, 0x000200f9, 0x00000214, 0x000200f8, 0x0000023b, 0x000700f5, 0x0000000d, + 0x000003a1, 0x00000061, 0x00000227, 0x00000222, 0x00000233, 0x000300f7, 0x0000023d, 0x00000000, 0x000400fa, + 0x000001da, 0x0000023e, 0x0000023d, 0x000200f8, 0x0000023d, 0x000200f9, 0x0000023e, 0x000200f8, 0x0000023e, + 0x000900f5, 0x0000000d, 0x000003a0, 0x00000061, 0x00000211, 0x000003a1, 0x0000023b, 0x000003a1, 0x0000023d, + 0x000500ab, 0x0000000e, 0x000001a8, 0x000003a0, 0x0000039c, 0x000300f7, 0x000001aa, 0x00000000, 0x000400fa, + 0x000001a8, 0x000001a9, 0x000001aa, 0x000200f8, 0x000001a9, 0x00060041, 0x000001ac, 0x000001ad, 0x0000018c, + 0x00000093, 0x00000093, 0x0004003d, 0x00000185, 0x000001ae, 0x000001ad, 0x00050051, 0x00000029, 0x000001b1, + 0x000001ae, 0x00000000, 0x00050051, 0x00000006, 0x000001b4, 0x000001ae, 0x00000001, 0x000300f7, 0x000002df, + 0x00000000, 0x000300fb, 0x0000006d, 0x00000297, 0x000200f8, 0x00000297, 0x000500aa, 0x0000000e, 0x00000299, + 0x000001b4, 0x0000006d, 0x000300f7, 0x0000029b, 0x00000000, 0x000400fa, 0x00000299, 0x0000029a, 0x0000029b, + 0x000200f8, 0x0000029a, 0x000200f9, 0x000002df, 0x000200f8, 0x0000029b, 0x00050082, 0x00000006, 0x0000029d, + 0x000001b4, 0x0000008c, 0x000200f9, 0x0000029e, 0x000200f8, 0x0000029e, 0x000700f5, 0x00000006, 0x000003a3, + 0x0000029d, 0x0000029b, 0x000003bb, 0x000002db, 0x000700f5, 0x00000006, 0x000003a2, 0x0000006d, 0x0000029b, + 0x000003b9, 0x000002db, 0x000500b2, 0x0000000e, 0x000002a2, 0x000003a2, 0x000003a3, 0x000400f6, 0x000002dc, + 0x000002db, 0x00000000, 0x000400fa, 0x000002a2, 0x000002a3, 0x000002dc, 0x000200f8, 0x000002a3, 0x00050082, + 0x00000006, 0x000002a7, 0x000003a3, 0x000003a2, 0x00050086, 0x00000006, 0x000002a8, 0x000002a7, 0x00000119, + 0x00050080, 0x00000006, 0x000002a9, 0x000003a2, 0x000002a8, 0x00070041, 0x000000d4, 0x000002ad, 0x000001b1, + 0x00000093, 0x000002a9, 0x00000093, 0x0006003d, 0x0000000d, 0x000002ae, 0x000002ad, 0x00000002, 0x00000008, + 0x000500ae, 0x0000000e, 0x000002af, 0x0000039c, 0x000002ae, 0x000300f7, 0x000002bd, 0x00000000, 0x000400fa, + 0x000002af, 0x000002b0, 0x000002bd, 0x000200f8, 0x000002b0, 0x0006003d, 0x0000000d, 0x000002b5, 0x000002ad, + 0x00000002, 0x00000008, 0x00070041, 0x000000d4, 0x000002b8, 0x000001b1, 0x00000093, 0x000002a9, 0x0000007a, + 0x0006003d, 0x0000000d, 0x000002b9, 0x000002b8, 0x00000002, 0x00000008, 0x0007000c, 0x0000000d, 0x000002ba, + 0x00000001, 0x00000029, 0x000002b9, 0x0000012d, 0x00050080, 0x0000000d, 0x000002bb, 0x000002b5, 0x000002ba, + 0x000500b0, 0x0000000e, 0x000002bc, 0x0000039c, 0x000002bb, 0x000200f9, 0x000002bd, 0x000200f8, 0x000002bd, + 0x000700f5, 0x0000000e, 0x000002be, 0x000002af, 0x000002a3, 0x000002bc, 0x000002b0, 0x000300f7, 0x000002da, + 0x00000000, 0x000400fa, 0x000002be, 0x000002bf, 0x000002cc, 0x000200f8, 0x000002bf, 0x0006003d, 0x0000000d, + 0x000002c4, 0x000002ad, 0x00000002, 0x00000008, 0x00050082, 0x0000000d, 0x000002c5, 0x0000039c, 0x000002c4, + 0x00070041, 0x000000d4, 0x000002c8, 0x000001b1, 0x00000093, 0x000002a9, 0x0000009e, 0x0006003d, 0x0000000d, + 0x000002c9, 0x000002c8, 0x00000002, 0x00000008, 0x00050080, 0x0000000d, 0x000002cb, 0x000002c9, 0x000002c5, + 0x000200f9, 0x000002dc, 0x000200f8, 0x000002cc, 0x0006003d, 0x0000000d, 0x000002d1, 0x000002ad, 0x00000002, + 0x00000008, 0x000500b0, 0x0000000e, 0x000002d2, 0x0000039c, 0x000002d1, 0x000300f7, 0x000002d9, 0x00000000, + 0x000400fa, 0x000002d2, 0x000002d3, 0x000002d6, 0x000200f8, 0x000002d3, 0x00050082, 0x00000006, 0x000002d5, + 0x000002a9, 0x0000008c, 0x000200f9, 0x000002d9, 0x000200f8, 0x000002d6, 0x00050080, 0x00000006, 0x000002d8, + 0x000002a9, 0x0000008c, 0x000200f9, 0x000002d9, 0x000200f8, 0x000002d9, 0x000700f5, 0x00000006, 0x000003bb, + 0x000002d5, 0x000002d3, 0x000003a3, 0x000002d6, 0x000700f5, 0x00000006, 0x000003b9, 0x000003a2, 0x000002d3, + 0x000002d8, 0x000002d6, 0x000200f9, 0x000002da, 0x000200f8, 0x000002da, 0x000200f9, 0x000002db, 0x000200f8, + 0x000002db, 0x000200f9, 0x0000029e, 0x000200f8, 0x000002dc, 0x000700f5, 0x0000000d, 0x000003a9, 0x000003ae, + 0x0000029e, 0x000002cb, 0x000002bf, 0x000700f5, 0x0000000e, 0x000003a4, 0x000001d7, 0x0000029e, 0x000001da, + 0x000002bf, 0x000300f7, 0x000002de, 0x00000000, 0x000400fa, 0x000003a4, 0x000002df, 0x000002de, 0x000200f8, + 0x000002de, 0x000200f9, 0x000002df, 0x000200f8, 0x000002df, 0x000900f5, 0x0000000d, 0x000003a8, 0x00000061, + 0x0000029a, 0x000003a9, 0x000002dc, 0x00000061, 0x000002de, 0x0006003d, 0x0000000d, 0x000001c2, 0x0000019b, + 0x00000002, 0x00000008, 0x000300f7, 0x0000032b, 0x00000000, 0x000300fb, 0x0000006d, 0x000002e6, 0x000200f8, + 0x000002e6, 0x000500aa, 0x0000000e, 0x0000032e, 0x000001c2, 0x00000061, 0x000400a8, 0x0000000e, 0x000002e8, + 0x0000032e, 0x000300f7, 0x000002ed, 0x00000000, 0x000400fa, 0x000002e8, 0x000002e9, 0x000002ed, 0x000200f8, + 0x000002e9, 0x00050041, 0x0000007b, 0x000002ea, 0x000001a0, 0x0000007a, 0x0006003d, 0x00000006, 0x000002eb, + 0x000002ea, 0x00000002, 0x00000004, 0x000500aa, 0x0000000e, 0x000002ec, 0x000002eb, 0x0000006d, 0x000200f9, + 0x000002ed, 0x000200f8, 0x000002ed, 0x000700f5, 0x0000000e, 0x000002ee, 0x0000032e, 0x000002e6, 0x000002ec, + 0x000002e9, 0x000300f7, 0x000002f0, 0x00000000, 0x000400fa, 0x000002ee, 0x000002ef, 0x000002f0, 0x000200f8, + 0x000002ef, 0x000200f9, 0x0000032b, 0x000200f8, 0x000002f0, 0x000500c2, 0x0000000d, 0x00000336, 0x000001c2, + 0x00000066, 0x00040071, 0x00000006, 0x00000337, 0x00000336, 0x000500c7, 0x0000000d, 0x00000339, 0x000001c2, + 0x0000006a, 0x00040071, 0x00000006, 0x0000033a, 0x00000339, 0x00050080, 0x00000006, 0x00000341, 0x0000033a, + 0x0000003e, 0x000500c4, 0x00000006, 0x00000346, 0x00000341, 0x00000047, 0x000500c2, 0x00000006, 0x00000348, + 0x00000341, 0x0000004a, 0x000500c5, 0x00000006, 0x00000349, 0x00000346, 0x00000348, 0x00050084, 0x00000006, + 0x0000034a, 0x00000044, 0x00000349, 0x000500c2, 0x00000006, 0x0000034d, 0x0000034a, 0x0000004a, 0x000500c6, + 0x00000006, 0x0000034e, 0x0000034a, 0x0000034d, 0x00050084, 0x00000006, 0x0000034f, 0x0000004e, 0x0000034e, + 0x000500c2, 0x00000006, 0x00000352, 0x0000034f, 0x00000056, 0x000500c6, 0x00000006, 0x00000353, 0x0000034f, + 0x00000352, 0x00050084, 0x00000006, 0x00000354, 0x00000041, 0x00000353, 0x000500c2, 0x00000006, 0x00000357, + 0x00000354, 0x0000005c, 0x000500c6, 0x00000006, 0x00000358, 0x00000354, 0x00000357, 0x00050080, 0x00000006, + 0x0000035d, 0x00000337, 0x0000003e, 0x00050084, 0x00000006, 0x0000035f, 0x00000358, 0x00000041, 0x00050080, + 0x00000006, 0x00000360, 0x0000035d, 0x0000035f, 0x000500c4, 0x00000006, 0x00000362, 0x00000360, 0x00000047, + 0x000500c2, 0x00000006, 0x00000364, 0x00000360, 0x0000004a, 0x000500c5, 0x00000006, 0x00000365, 0x00000362, + 0x00000364, 0x00050084, 0x00000006, 0x00000366, 0x00000044, 0x00000365, 0x000500c2, 0x00000006, 0x00000369, + 0x00000366, 0x0000004a, 0x000500c6, 0x00000006, 0x0000036a, 0x00000366, 0x00000369, 0x00050084, 0x00000006, + 0x0000036b, 0x0000004e, 0x0000036a, 0x000500c2, 0x00000006, 0x0000036e, 0x0000036b, 0x00000056, 0x000500c6, + 0x00000006, 0x0000036f, 0x0000036b, 0x0000036e, 0x00050084, 0x00000006, 0x00000370, 0x00000041, 0x0000036f, + 0x000500c2, 0x00000006, 0x00000373, 0x00000370, 0x0000005c, 0x000500c6, 0x00000006, 0x00000374, 0x00000370, + 0x00000373, 0x000200f9, 0x000002f2, 0x000200f8, 0x000002f2, 0x000700f5, 0x00000006, 0x000003b4, 0x00000374, + 0x000002f0, 0x00000327, 0x00000325, 0x000400f6, 0x00000328, 0x00000325, 0x00000000, 0x000200f9, 0x000002f3, + 0x000200f8, 0x000002f3, 0x00050041, 0x0000007b, 0x000002f4, 0x000001a0, 0x0000007a, 0x0006003d, 0x00000006, + 0x000002f5, 0x000002f4, 0x00000002, 0x00000004, 0x00050082, 0x00000006, 0x000002f6, 0x000002f5, 0x0000008c, + 0x000500c7, 0x00000006, 0x000002f8, 0x000003b4, 0x000002f6, 0x00050041, 0x00000094, 0x000002f9, 0x000001a0, + 0x00000093, 0x0006003d, 0x00000019, 0x000002fa, 0x000002f9, 0x00000002, 0x00000010, 0x00070041, 0x000000d4, + 0x000002fc, 0x000002fa, 0x00000093, 0x000002f8, 0x00000093, 0x0006003d, 0x0000000d, 0x000002fd, 0x000002fc, + 0x00000002, 0x00000010, 0x000500ab, 0x0000000e, 0x000002ff, 0x000002fd, 0x000001c2, 0x000300f7, 0x00000320, + 0x00000000, 0x000400fa, 0x000002ff, 0x00000300, 0x00000320, 0x000200f8, 0x00000300, 0x000500aa, 0x0000000e, + 0x00000377, 0x000002fd, 0x00000061, 0x000400a8, 0x0000000e, 0x00000303, 0x00000377, 0x000300f7, 0x0000030c, + 0x00000000, 0x000400fa, 0x00000303, 0x00000304, 0x0000030c, 0x000200f8, 0x00000304, 0x0006003d, 0x00000019, + 0x00000306, 0x000002f9, 0x00000002, 0x00000010, 0x00070041, 0x000000d4, 0x00000308, 0x00000306, 0x00000093, + 0x000002f8, 0x0000009e, 0x0006003d, 0x0000000d, 0x00000309, 0x00000308, 0x00000002, 0x00000008, 0x000500aa, + 0x0000000e, 0x0000037a, 0x00000309, 0x00000061, 0x000400a8, 0x0000000e, 0x0000030b, 0x0000037a, 0x000200f9, + 0x0000030c, 0x000200f8, 0x0000030c, 0x000700f5, 0x0000000e, 0x0000030d, 0x00000303, 0x00000300, 0x0000030b, + 0x00000304, 0x000300f7, 0x0000030f, 0x00000000, 0x000400fa, 0x0000030d, 0x0000030e, 0x0000030f, 0x000200f8, + 0x0000030e, 0x000200f9, 0x00000325, 0x000200f8, 0x0000030f, 0x0006003d, 0x00000019, 0x00000311, 0x000002f9, + 0x00000002, 0x00000010, 0x00070041, 0x000000d4, 0x00000313, 0x00000311, 0x00000093, 0x000002f8, 0x00000093, + 0x000900e6, 0x0000000d, 0x00000315, 0x00000313, 0x0000008c, 0x0000006d, 0x0000006d, 0x000001c2, 0x000002fd, + 0x000500aa, 0x0000000e, 0x0000037d, 0x00000315, 0x00000061, 0x000400a8, 0x0000000e, 0x00000318, 0x0000037d, + 0x000500ab, 0x0000000e, 0x0000031a, 0x00000315, 0x000001c2, 0x000500a7, 0x0000000e, 0x0000031b, 0x00000318, + 0x0000031a, 0x000300f7, 0x0000031d, 0x00000000, 0x000400fa, 0x0000031b, 0x0000031c, 0x0000031d, 0x000200f8, + 0x0000031c, 0x000200f9, 0x00000325, 0x000200f8, 0x0000031d, 0x00050041, 0x0000007b, 0x0000031e, 0x000001a0, + 0x0000009e, 0x000700ea, 0x00000006, 0x0000031f, 0x0000031e, 0x0000008c, 0x0000006d, 0x0000008c, 0x000200f9, + 0x00000320, 0x000200f8, 0x00000320, 0x0006003d, 0x00000019, 0x00000322, 0x000002f9, 0x00000002, 0x00000010, + 0x00070041, 0x000000d4, 0x00000324, 0x00000322, 0x00000093, 0x000002f8, 0x0000009e, 0x0005003e, 0x00000324, + 0x000003a8, 0x00000002, 0x00000008, 0x000200f9, 0x00000328, 0x000200f8, 0x00000325, 0x00050080, 0x00000006, + 0x00000327, 0x000002f8, 0x0000009e, 0x000200f9, 0x000002f2, 0x000200f8, 0x00000328, 0x000300f7, 0x0000032a, + 0x00000000, 0x000400fa, 0x000001da, 0x0000032b, 0x0000032a, 0x000200f8, 0x0000032a, 0x000200f9, 0x0000032b, + 0x000200f8, 0x0000032b, 0x00060041, 0x00000196, 0x000001c6, 0x0000018c, 0x00000093, 0x000001c5, 0x0004003d, + 0x00000186, 0x000001c7, 0x000001c6, 0x000500aa, 0x0000000e, 0x00000380, 0x000003a8, 0x00000061, 0x000600a9, + 0x0000000d, 0x000001cd, 0x00000380, 0x0000039c, 0x000003a8, 0x00060041, 0x000000d4, 0x000001cf, 0x000001c7, + 0x00000093, 0x00000183, 0x0006003d, 0x0000000d, 0x000001d0, 0x000001cf, 0x00000002, 0x00000008, 0x000500c7, + 0x0000000d, 0x00000384, 0x000001d0, 0x00000153, 0x000500ab, 0x0000000e, 0x00000385, 0x00000384, 0x00000061, + 0x000300f7, 0x00000392, 0x00000000, 0x000400fa, 0x00000385, 0x00000386, 0x0000038d, 0x000200f8, 0x00000386, + 0x000500c7, 0x0000000d, 0x00000388, 0x000001d0, 0x0000015a, 0x00040078, 0x0000015c, 0x00000389, 0x00000388, + 0x00050041, 0x000000d4, 0x0000038c, 0x00000389, 0x0000009e, 0x0005003e, 0x0000038c, 0x000001cd, 0x00000002, + 0x00000008, 0x000200f9, 0x00000392, 0x000200f8, 0x0000038d, 0x00040078, 0x00000163, 0x0000038f, 0x000001d0, + 0x00050041, 0x000000d4, 0x00000391, 0x0000038f, 0x00000093, 0x0005003e, 0x00000391, 0x000001cd, 0x00000002, + 0x00000010, 0x000200f9, 0x00000392, 0x000200f8, 0x00000392, 0x000200f9, 0x000001aa, 0x000200f8, 0x000001aa, + 0x000200f9, 0x000001d5, 0x000200f8, 0x000001d5, 0x000100fd, 0x00010038 }; const std::vector g_replacer_rehash_comp = { diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_captured_swapchain.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_captured_swapchain.cpp index bb1552089..9a2497d56 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_captured_swapchain.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_captured_swapchain.cpp @@ -457,8 +457,7 @@ void VulkanCapturedSwapchain::ProcessSetSwapchainImageStatePreAcquire( { image_barrier.newLayout = image_layout; image_barrier.image = image; - image_barrier.subresourceRange.aspectMask = - graphics::GetFormatAspectMask(image_entry->format); + image_barrier.subresourceRange.aspectMask = graphics::GetFormatAspects(image_entry->format); result = device_table_->BeginCommandBuffer(transition_command, &begin_info); @@ -657,7 +656,7 @@ void VulkanCapturedSwapchain::ProcessSetSwapchainImageStateQueueSubmit( if (result == VK_SUCCESS) { image_barrier.image = image; - image_barrier.subresourceRange.aspectMask = graphics::GetFormatAspectMask(image_entry->format); + image_barrier.subresourceRange.aspectMask = graphics::GetFormatAspects(image_entry->format); present_info.pImageIndices = &image_index; result = device_table_->BeginCommandBuffer(command, &begin_info); diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_cpp_consumer_base.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_cpp_consumer_base.cpp index c6fe57853..67082fdb3 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_cpp_consumer_base.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_cpp_consumer_base.cpp @@ -340,6 +340,7 @@ void VulkanCppConsumerBase::PrintOutGlobalVar() } util::platform::FileClose(global_file_); + global_file_ = nullptr; } else { @@ -461,6 +462,7 @@ void VulkanCppConsumerBase::Destroy() { WriteMainFooter(); util::platform::FileClose(main_file_); + main_file_ = nullptr; if (platform_ != GfxToCppPlatform::PLATFORM_ANDROID) { PrintOutCMakeFile(); diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_cpp_structs.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_cpp_structs.cpp index c202aff27..40aae5daa 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_cpp_structs.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_cpp_structs.cpp @@ -1492,5 +1492,116 @@ std::string GenerateStruct_VkImageToMemoryCopy(std::ostream& out, return variable_name; } +std::string GenerateStruct_VkLayerSettingEXT(std::ostream& out, + const VkLayerSettingEXT* structInfo, + Decoded_VkLayerSettingEXT* metaInfo, + VulkanCppConsumerBase& consumer) +{ + GFXRECON_UNREFERENCED_PARAMETER(metaInfo); + + std::stringstream struct_body; + std::string pvalues_array = "NULL"; + + if (structInfo->pValues != nullptr) + { + std::string pvalues_values; + std::string pvalues_typestr; + + switch (structInfo->type) + { + case VK_LAYER_SETTING_TYPE_BOOL32_EXT: + case VK_LAYER_SETTING_TYPE_UINT32_EXT: + pvalues_typestr = "uint32_t "; + break; + case VK_LAYER_SETTING_TYPE_INT32_EXT: + pvalues_typestr = "int32_t "; + break; + case VK_LAYER_SETTING_TYPE_INT64_EXT: + pvalues_typestr = "int64_t "; + break; + case VK_LAYER_SETTING_TYPE_UINT64_EXT: + pvalues_typestr = "uint64_t "; + break; + case VK_LAYER_SETTING_TYPE_FLOAT32_EXT: + pvalues_typestr = "float "; + break; + case VK_LAYER_SETTING_TYPE_FLOAT64_EXT: + pvalues_typestr = "double "; + break; + case VK_LAYER_SETTING_TYPE_STRING_EXT: + pvalues_typestr = "const char* "; + break; + case VK_LAYER_SETTING_TYPE_MAX_ENUM_EXT: + GFXRECON_ASSERT(false); + break; + } + + for (uint32_t i = 0; i < structInfo->valueCount; ++i) + { + std::string val; + switch (structInfo->type) + { + case VK_LAYER_SETTING_TYPE_BOOL32_EXT: + case VK_LAYER_SETTING_TYPE_UINT32_EXT: + val = std::to_string(static_cast(structInfo->pValues)[i]); + break; + case VK_LAYER_SETTING_TYPE_INT32_EXT: + val = std::to_string(static_cast(structInfo->pValues)[i]); + break; + case VK_LAYER_SETTING_TYPE_INT64_EXT: + val = std::to_string(static_cast(structInfo->pValues)[i]); + break; + case VK_LAYER_SETTING_TYPE_UINT64_EXT: + val = std::to_string(static_cast(structInfo->pValues)[i]); + break; + case VK_LAYER_SETTING_TYPE_FLOAT32_EXT: + val = std::to_string(static_cast(structInfo->pValues)[i]); + break; + case VK_LAYER_SETTING_TYPE_FLOAT64_EXT: + val = std::to_string(static_cast(structInfo->pValues)[i]); + break; + case VK_LAYER_SETTING_TYPE_STRING_EXT: + { + const auto* string_array = static_cast(structInfo->pValues); + val = std::string("\"") + string_array[i] + "\""; + } + break; + case VK_LAYER_SETTING_TYPE_MAX_ENUM_EXT: + GFXRECON_ASSERT(false); + break; + } + pvalues_values += val + ", "; + } + pvalues_array = "pValues_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << pvalues_typestr << pvalues_array << "[] = {" << pvalues_values << "};" << std::endl; + } + struct_body << "\t" << VulkanCppConsumerBase::ToEscape(structInfo->pLayerName) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pSettingName) << "," << std::endl; + struct_body << "\t\t\t" + << "VkLayerSettingTypeEXT(" << structInfo->type << ")" + << "," << std::endl; + struct_body << "\t\t\t" << structInfo->valueCount << "," << std::endl; + struct_body << "\t\t\t" << pvalues_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "layerSettingEXT"); + out << "\t\t" + << "VkLayerSettingEXT " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" + << "};" << std::endl; + return variable_name; +} + +std::string GenerateStruct_VkDescriptorGetInfoEXT(std::ostream& out, + const VkDescriptorGetInfoEXT* structInfo, + Decoded_VkDescriptorGetInfoEXT* metaInfo, + VulkanCppConsumerBase& consumer) +{ + GFXRECON_UNREFERENCED_PARAMETER(out); + GFXRECON_UNREFERENCED_PARAMETER(structInfo); + GFXRECON_UNREFERENCED_PARAMETER(metaInfo); + GFXRECON_UNREFERENCED_PARAMETER(consumer); + return {}; +} + GFXRECON_END_NAMESPACE(gfxrecon) GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_cpp_structs.h b/third_party/gfxreconstruct/framework/decode/vulkan_cpp_structs.h index 9d4a8840f..f7ffa2d2c 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_cpp_structs.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_cpp_structs.h @@ -22,9 +22,7 @@ #include "custom_vulkan_struct_decoders.h" #include "vulkan/vulkan.h" - -#include -#include +#include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) @@ -157,6 +155,16 @@ std::string GenerateStruct_VkImageToMemoryCopy(std::ostream& out, Decoded_VkImageToMemoryCopy* metaInfo, VulkanCppConsumerBase& consumer); +std::string GenerateStruct_VkLayerSettingEXT(std::ostream& out, + const VkLayerSettingEXT* structInfo, + Decoded_VkLayerSettingEXT* metaInfo, + VulkanCppConsumerBase& consumer); + +std::string GenerateStruct_VkDescriptorGetInfoEXT(std::ostream& out, + const VkDescriptorGetInfoEXT* structInfo, + Decoded_VkDescriptorGetInfoEXT* metaInfo, + VulkanCppConsumerBase& consumer); + GFXRECON_END_NAMESPACE(gfxrecon) GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_cpp_template_strings.h b/third_party/gfxreconstruct/framework/decode/vulkan_cpp_template_strings.h index 9d0521678..b71e7a507 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_cpp_template_strings.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_cpp_template_strings.h @@ -313,9 +313,9 @@ XCBApp appdata(%d, %d); )"; static const char* sXcbCMakeFile = R"( -cmake_minimum_required(VERSION 3.3) +cmake_minimum_required(VERSION 3.16.3) project(vulkan_app) -set (CMAKE_CXX_STANDARD 11) +set (CMAKE_CXX_STANDARD 20) include_directories(${PROJECT_SOURCE_DIR}/src/) file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/src/*.cpp) file(GLOB MAIN_FILE ${PROJECT_SOURCE_DIR}/*.cpp) @@ -579,9 +579,9 @@ WaylandApp appdata(%d, %d); )"; static const char* sWaylandCMakeFile = R"( -cmake_minimum_required(VERSION 3.7) +cmake_minimum_required(VERSION 3.16.3) project(vulkan_app) -set (CMAKE_CXX_STANDARD 11) +set (CMAKE_CXX_STANDARD 20) find_program(WAYLAND_SCANNER NAMES wayland-scanner REQUIRED) set(XDG_SHELL_PROTOCOL_C ${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-protocol.c) @@ -1008,9 +1008,9 @@ Win32App appdata(%d, %d); )"; static const char* sWin32CMakeFile = R"( -cmake_minimum_required(VERSION 3.3) +cmake_minimum_required(VERSION 3.16.3) project(vulkan_app) -set (CMAKE_CXX_STANDARD 11) +set (CMAKE_CXX_STANDARD 20) include_directories(${PROJECT_SOURCE_DIR}/src/) file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/src/*.cpp) file(GLOB MAIN_FILE ${PROJECT_SOURCE_DIR}/*.cpp) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_decoder_base.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_decoder_base.cpp index 1ef572cba..2119bc89f 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_decoder_base.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_decoder_base.cpp @@ -83,7 +83,7 @@ void VulkanDecoderBase::DispatchFillMemoryCommand( } } -void VulkanDecoderBase::DispatchExeFileInfo(format::ThreadId thread_id, format::ExeFileInfoBlock& info) +void VulkanDecoderBase::DispatchExeFileInfo(format::ThreadId thread_id, const format::ExeFileInfoBlock& info) { for (auto consumer : consumers_) { @@ -220,6 +220,20 @@ void VulkanDecoderBase::DispatchSetOpaqueAddressCommand(format::ThreadId thread_ } } +void VulkanDecoderBase::DispatchSetOpaqueDescriptorDataCommand(format::ThreadId thread_id, + format::HandleId device_id, + format::HandleId object_id, + uint32_t data_size, + const uint8_t* data) +{ + GFXRECON_UNREFERENCED_PARAMETER(thread_id); + + for (auto consumer : consumers_) + { + consumer->ProcessSetOpaqueDescriptorDataCommand(device_id, object_id, data_size, data); + } +} + void VulkanDecoderBase::DispatchSetRayTracingShaderGroupHandlesCommand(format::ThreadId thread_id, format::HandleId device_id, format::HandleId pipeline_id, @@ -552,8 +566,8 @@ void VulkanDecoderBase::DispatchSetTlasToBlasDependencyCommand(format::HandleId } } -void VulkanDecoderBase::DispatchSetEnvironmentVariablesCommand(format::SetEnvironmentVariablesCommand& header, - const char* env_string) +void VulkanDecoderBase::DispatchSetEnvironmentVariablesCommand(const format::SetEnvironmentVariablesCommand& header, + const char* env_string) { for (auto consumer : consumers_) { @@ -591,7 +605,7 @@ void VulkanDecoderBase::DispatchVulkanAccelerationStructuresBuildMetaCommand(con for (auto consumer : consumers_) { - consumer->ProcessBuildVulkanAccelerationStructuresMetaCommand( + consumer->ProcessVulkanBuildAccelerationStructuresCommand( device_id, pInfos.GetLength(), &pInfos, &ppRangeInfos); } } @@ -607,7 +621,7 @@ void VulkanDecoderBase::DispatchVulkanAccelerationStructuresCopyMetaCommand(cons for (auto consumer : consumers_) { - consumer->ProcessCopyVulkanAccelerationStructuresMetaCommand(device_id, &pInfos); + consumer->ProcessVulkanCopyAccelerationStructuresCommand(device_id, &pInfos); } } @@ -625,7 +639,7 @@ void VulkanDecoderBase::DispatchVulkanAccelerationStructuresWritePropertiesMetaC for (auto consumer : consumers_) { - consumer->ProcessVulkanAccelerationStructuresWritePropertiesMetaCommand( + consumer->ProcessVulkanWriteAccelerationStructuresPropertiesCommand( device_id, query_type, acceleration_structure_id); } } diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_decoder_base.h b/third_party/gfxreconstruct/framework/decode/vulkan_decoder_base.h index bc5e8eafe..5758d074e 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_decoder_base.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_decoder_base.h @@ -145,6 +145,12 @@ class VulkanDecoderBase : public ApiDecoder format::HandleId object_id, uint64_t address) override; + void DispatchSetOpaqueDescriptorDataCommand(format::ThreadId thread_id, + format::HandleId device_id, + format::HandleId object_id, + uint32_t data_size, + const uint8_t* data) override; + virtual void DispatchSetRayTracingShaderGroupHandlesCommand(format::ThreadId thread_id, format::HandleId device_id, format::HandleId pipeline_id, @@ -187,17 +193,17 @@ class VulkanDecoderBase : public ApiDecoder const std::vector& blases) override; virtual void DispatchInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) override + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) override {} - virtual void DispatchDriverInfo(format::ThreadId thread_id, format::DriverInfoBlock& info) override {} + virtual void DispatchDriverInfo(format::ThreadId thread_id, const format::DriverInfoBlock& info) override {} - virtual void DispatchExeFileInfo(format::ThreadId thread_id, format::ExeFileInfoBlock& info) override; + virtual void DispatchExeFileInfo(format::ThreadId thread_id, const format::ExeFileInfoBlock& info) override; - virtual void DispatchSetEnvironmentVariablesCommand(format::SetEnvironmentVariablesCommand& header, - const char* env_string) override; + virtual void DispatchSetEnvironmentVariablesCommand(const format::SetEnvironmentVariablesCommand& header, + const char* env_string) override; virtual void SetCurrentBlockIndex(uint64_t block_index) override; diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_default_allocator.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_default_allocator.cpp index 6361cd976..fb5b9c1fb 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_default_allocator.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_default_allocator.cpp @@ -82,9 +82,10 @@ VkResult VulkanDefaultAllocator::CreateBuffer(const VkBufferCreateInfo* creat if (allocator_data != nullptr) { - auto resource_alloc_info = new ResourceAllocInfo; - resource_alloc_info->capture_id = capture_id; - (*allocator_data) = reinterpret_cast(resource_alloc_info); + auto resource_alloc_info = new ResourceAllocInfo; + resource_alloc_info->object_type = VK_OBJECT_TYPE_BUFFER; + resource_alloc_info->capture_id = capture_id; + (*allocator_data) = reinterpret_cast(resource_alloc_info); result = functions_.create_buffer(device_, create_info, allocation_callbacks, buffer); } @@ -115,9 +116,10 @@ VkResult VulkanDefaultAllocator::CreateImage(const VkImageCreateInfo* create if (allocator_data != nullptr) { - auto resource_alloc_info = new ResourceAllocInfo; - resource_alloc_info->capture_id = capture_id; - (*allocator_data) = reinterpret_cast(resource_alloc_info); + auto resource_alloc_info = new ResourceAllocInfo; + resource_alloc_info->object_type = VK_OBJECT_TYPE_IMAGE; + resource_alloc_info->capture_id = capture_id; + (*allocator_data) = reinterpret_cast(resource_alloc_info); result = functions_.create_image(device_, create_info, allocation_callbacks, image); } @@ -142,26 +144,18 @@ VkResult VulkanDefaultAllocator::CreateVideoSession(const VkVideoSessionCreateIn const VkAllocationCallbacks* allocation_callbacks, format::HandleId capture_id, VkVideoSessionKHR* session, - std::vector* allocator_datas) + ResourceData* allocator_data) { VkResult result = VK_ERROR_INITIALIZATION_FAILED; - if (allocator_datas != nullptr) + if (allocator_data != nullptr) { - result = functions_.create_video_session(device_, create_info, allocation_callbacks, session); + auto resource_alloc_info = new ResourceAllocInfo; + resource_alloc_info->object_type = VK_OBJECT_TYPE_VIDEO_SESSION_KHR; + resource_alloc_info->capture_id = capture_id; + (*allocator_data) = reinterpret_cast(resource_alloc_info); - if (result >= 0) - { - uint32_t count = 0; - functions_.get_video_session_memory_requirements(device_, *session, &count, nullptr); - allocator_datas->resize(count); - for (auto& allocator_data : *allocator_datas) - { - auto resource_alloc_info = new ResourceAllocInfo; - resource_alloc_info->capture_id = capture_id; - allocator_data = reinterpret_cast(resource_alloc_info); - } - } + result = functions_.create_video_session(device_, create_info, allocation_callbacks, session); } return result; @@ -169,15 +163,12 @@ VkResult VulkanDefaultAllocator::CreateVideoSession(const VkVideoSessionCreateIn void VulkanDefaultAllocator::DestroyVideoSession(VkVideoSessionKHR session, const VkAllocationCallbacks* allocation_callbacks, - std::vector allocator_datas) + ResourceData allocator_data) { - for (auto allocator_data : allocator_datas) + if (allocator_data != 0) { - if (allocator_data != 0) - { - auto resource_alloc_info = reinterpret_cast(allocator_data); - delete resource_alloc_info; - } + auto resource_alloc_info = reinterpret_cast(allocator_data); + delete resource_alloc_info; } functions_.destroy_video_session(device_, session, allocation_callbacks); @@ -226,7 +217,7 @@ VkResult VulkanDefaultAllocator::GetVideoSessionMemoryRequirementsKHR(VkVideoSessionKHR video_session, uint32_t* memory_requirements_count, VkVideoSessionMemoryRequirementsKHR* memory_requirements, - std::vector allocator_datas) + ResourceData allocator_datas) { return functions_.get_video_session_memory_requirements( device_, video_session, memory_requirements_count, memory_requirements); @@ -274,6 +265,51 @@ void VulkanDefaultAllocator::GetDeviceMemoryCommitment(VkDeviceMemory memory, functions_.get_device_memory_commitment(device_, memory, committed_memory_in_bytes); } +bool VulkanDefaultAllocator::UpdateAllocInfo(ResourceData allocator_resource_data, + MemoryInfoType memory_info_type, + VkDeviceMemory memory, + VkDeviceSize memory_offset, + MemoryData allocator_memory_data, + VkMemoryPropertyFlags* bind_memory_property) +{ + if ((allocator_resource_data != 0) && (allocator_memory_data != 0)) + { + auto resource_alloc_info = reinterpret_cast(allocator_resource_data); + resource_alloc_info->memory_info_type = memory_info_type; + + switch (memory_info_type) + { + case MemoryInfoType::kBasic: + { + if (resource_alloc_info->bound_memory_infos.empty()) + { + resource_alloc_info->bound_memory_infos.resize(1); + } + resource_alloc_info->bound_memory_infos[0].memory = memory; + resource_alloc_info->bound_memory_infos[0].offset = memory_offset; + break; + } + case MemoryInfoType::kSparse: + case MemoryInfoType::kVideoSession: + { + BoundMemoryInfo info{}; + info.memory = memory; + info.offset = memory_offset; + resource_alloc_info->bound_memory_infos.emplace_back(info); + break; + } + default: + return false; + } + + auto memory_alloc_info = reinterpret_cast(allocator_memory_data); + (*bind_memory_property) = memory_alloc_info->property_flags; + + return true; + } + return false; +} + VkResult VulkanDefaultAllocator::BindBufferMemory(VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memory_offset, @@ -289,16 +325,12 @@ VkResult VulkanDefaultAllocator::BindBufferMemory(VkBuffer buffer, if (result == VK_SUCCESS) { - if ((allocator_buffer_data != 0) && (allocator_memory_data != 0)) - { - auto resource_alloc_info = reinterpret_cast(allocator_buffer_data); - resource_alloc_info->bound_memory = memory; - resource_alloc_info->bound_offset = memory_offset; - - auto memory_alloc_info = reinterpret_cast(allocator_memory_data); - (*bind_memory_properties) = memory_alloc_info->property_flags; - } - else + if (!UpdateAllocInfo(allocator_buffer_data, + MemoryInfoType::kBasic, + memory, + memory_offset, + allocator_memory_data, + bind_memory_properties)) { GFXRECON_LOG_WARNING("VulkanDefaultAllocator binding a VkBuffer object to a VkDeviceMemory object " "without allocator data"); @@ -329,16 +361,12 @@ VkResult VulkanDefaultAllocator::BindBufferMemory2(uint32_t auto allocator_buffer_data = allocator_buffer_datas[i]; auto allocator_memory_data = allocator_memory_datas[i]; - if ((allocator_buffer_data != 0) && (allocator_memory_data != 0)) - { - auto resource_alloc_info = reinterpret_cast(allocator_buffer_data); - resource_alloc_info->bound_memory = bind_infos[i].memory; - resource_alloc_info->bound_offset = bind_infos[i].memoryOffset; - - auto memory_alloc_info = reinterpret_cast(allocator_memory_data); - bind_memory_properties[i] = memory_alloc_info->property_flags; - } - else + if (!UpdateAllocInfo(allocator_buffer_data, + MemoryInfoType::kBasic, + bind_infos[i].memory, + bind_infos[i].memoryOffset, + allocator_memory_data, + &bind_memory_properties[i])) { GFXRECON_LOG_WARNING("VulkanDefaultAllocator binding a VkBuffer object to a VkDeviceMemory object " "without allocator data"); @@ -365,17 +393,12 @@ VkResult VulkanDefaultAllocator::BindImageMemory(VkImage image, if (result == VK_SUCCESS) { - - if ((allocator_image_data != 0) && (allocator_memory_data != 0)) - { - auto resource_alloc_info = reinterpret_cast(allocator_image_data); - resource_alloc_info->bound_memory = memory; - resource_alloc_info->bound_offset = memory_offset; - - auto memory_alloc_info = reinterpret_cast(allocator_memory_data); - (*bind_memory_properties) = memory_alloc_info->property_flags; - } - else + if (!UpdateAllocInfo(allocator_image_data, + MemoryInfoType::kBasic, + memory, + memory_offset, + allocator_memory_data, + bind_memory_properties)) { GFXRECON_LOG_WARNING("VulkanDefaultAllocator binding a VkImage object to a VkDeviceMemory object " "without allocator data"); @@ -405,17 +428,13 @@ VkResult VulkanDefaultAllocator::BindImageMemory2(uint32_t b { auto allocator_image_data = allocator_image_datas[i]; auto allocator_memory_data = allocator_memory_datas[i]; - - if ((allocator_image_data != 0) && (allocator_memory_data != 0)) - { - auto resource_alloc_info = reinterpret_cast(allocator_image_data); - resource_alloc_info->bound_memory = bind_infos[i].memory; - resource_alloc_info->bound_offset = bind_infos[i].memoryOffset; - - auto memory_alloc_info = reinterpret_cast(allocator_memory_data); - bind_memory_properties[i] = memory_alloc_info->property_flags; - } - else + + if (!UpdateAllocInfo(allocator_image_data, + MemoryInfoType::kBasic, + bind_infos[i].memory, + bind_infos[i].memoryOffset, + allocator_memory_data, + &bind_memory_properties[i])) { GFXRECON_LOG_WARNING("VulkanDefaultAllocator binding a VkImage object to a VkDeviceMemory object " "without allocator data"); @@ -430,13 +449,13 @@ VkResult VulkanDefaultAllocator::BindImageMemory2(uint32_t b VkResult VulkanDefaultAllocator::BindVideoSessionMemory(VkVideoSessionKHR video_session, uint32_t bind_info_count, const VkBindVideoSessionMemoryInfoKHR* bind_infos, - const ResourceData* allocator_session_datas, + const ResourceData allocator_session_data, const MemoryData* allocator_memory_datas, VkMemoryPropertyFlags* bind_memory_properties) { VkResult result = VK_ERROR_INITIALIZATION_FAILED; - if ((bind_infos != nullptr) && (allocator_session_datas != nullptr) && (allocator_memory_datas != nullptr) && + if ((bind_infos != nullptr) && (allocator_session_data != 0) && (allocator_memory_datas != nullptr) && (bind_memory_properties != nullptr)) { result = functions_.bind_video_session_memory(device_, video_session, bind_info_count, bind_infos); @@ -445,19 +464,14 @@ VkResult VulkanDefaultAllocator::BindVideoSessionMemory(VkVideoSessionKHR { for (uint32_t i = 0; i < bind_info_count; ++i) { - auto allocator_session_data = allocator_session_datas[i]; auto allocator_memory_data = allocator_memory_datas[i]; - - if ((allocator_session_data != 0) && (allocator_memory_data != 0)) - { - auto resource_alloc_info = reinterpret_cast(allocator_session_data); - resource_alloc_info->bound_memory = bind_infos[i].memory; - resource_alloc_info->bound_offset = bind_infos[i].memoryOffset; - - auto memory_alloc_info = reinterpret_cast(allocator_memory_data); - bind_memory_properties[i] = memory_alloc_info->property_flags; - } - else + + if (!UpdateAllocInfo(allocator_session_data, + MemoryInfoType::kVideoSession, + bind_infos[i].memory, + bind_infos[i].memoryOffset, + allocator_memory_data, + &bind_memory_properties[i])) { GFXRECON_LOG_WARNING("VulkanDefaultAllocator binding a VkVideoSessionKHR object to a " "VkDeviceMemory object without allocator data"); @@ -499,6 +513,34 @@ VkResult VulkanDefaultAllocator::MapMemory(VkDeviceMemory memory, return result; } +VkResult +VulkanDefaultAllocator::MapMemory2(const VkMemoryMapInfo* memory_map_info, void** data, MemoryData allocator_data) +{ + GFXRECON_UNREFERENCED_PARAMETER(allocator_data); + + VkResult result = VK_ERROR_INITIALIZATION_FAILED; + + if (data != nullptr) + { + result = functions_.map_memory2(device_, memory_map_info, data); + + if (result >= 0) + { + if (allocator_data != 0) + { + auto memory_alloc_info = reinterpret_cast(allocator_data); + memory_alloc_info->mapped_pointer = static_cast(*data); + } + else + { + GFXRECON_LOG_WARNING("VulkanDefaultAllocator mapping a VkDeviceMemory object without allocator data"); + } + } + } + + return result; +} + void VulkanDefaultAllocator::UnmapMemory(VkDeviceMemory memory, MemoryData allocator_data) { if (allocator_data != 0) @@ -510,6 +552,19 @@ void VulkanDefaultAllocator::UnmapMemory(VkDeviceMemory memory, MemoryData alloc functions_.unmap_memory(device_, memory); } +VkResult VulkanDefaultAllocator::UnmapMemory2(const VkMemoryUnmapInfo* memory_unmap_info, MemoryData allocator_data) +{ + GFXRECON_UNREFERENCED_PARAMETER(allocator_data); + + if (allocator_data != 0) + { + auto memory_alloc_info = reinterpret_cast(allocator_data); + memory_alloc_info->mapped_pointer = nullptr; + } + + return functions_.unmap_memory2(device_, memory_unmap_info); +} + VkResult VulkanDefaultAllocator::FlushMappedMemoryRanges(uint32_t memory_range_count, const VkMappedMemoryRange* memory_ranges, const MemoryData* allocator_datas) @@ -657,10 +712,10 @@ void VulkanDefaultAllocator::ReportBindImage2Incompatibility(uint32_t void VulkanDefaultAllocator::ReportBindVideoSessionIncompatibility(VkVideoSessionKHR video_session, uint32_t bind_info_count, const VkBindVideoSessionMemoryInfoKHR* bind_infos, - const ResourceData* allocator_resource_datas, - const MemoryData* allocator_memory_datas) + const ResourceData allocator_resource_data, + const MemoryData* allocator_memory_datas) { - GFXRECON_UNREFERENCED_PARAMETER(allocator_resource_datas); + GFXRECON_UNREFERENCED_PARAMETER(allocator_resource_data); if ((bind_infos != nullptr) && (allocator_memory_datas != nullptr)) { @@ -684,6 +739,99 @@ void VulkanDefaultAllocator::ReportBindVideoSessionIncompatibility(VkVideoSessio } } +void VulkanDefaultAllocator::ReportBindAccelerationStructureMemoryNVIncompatibility( + uint32_t bind_info_count, + const VkBindAccelerationStructureMemoryInfoNV* bind_infos, + const ResourceData* allocator_acc_datas, + const MemoryData* allocator_memory_datas) +{ + GFXRECON_UNREFERENCED_PARAMETER(allocator_acc_datas); + + if ((bind_infos != nullptr) && (allocator_memory_datas != nullptr)) + { + std::vector reqs(bind_info_count); + std::vector reqs2(bind_info_count); + + VkAccelerationStructureMemoryRequirementsInfoNV acc_reqs_info{}; + acc_reqs_info.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV; + + for (uint32_t i = 0; i < bind_info_count; ++i) + { + acc_reqs_info.accelerationStructure = bind_infos[i].accelerationStructure; + + reqs2[i] = {}; + reqs2[i].sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2; + + functions_.get_acceleration_structure_memory_requirements_nv(device_, &acc_reqs_info, &reqs2[i]); + + reqs[i] = reqs2[i].memoryRequirements; + } + + ReportBindIncompatibility(reqs.data(), allocator_memory_datas, bind_info_count); + } +} + +void VulkanDefaultAllocator::ReportQueueBindSparseIncompatibility(VkQueue queue, + uint32_t bind_info_count, + const VkBindSparseInfo* bind_infos, + VkFence fence, + const ResourceData* allocator_buf_datas, + const MemoryData* allocator_buf_mem_datas, + const ResourceData* allocator_img_op_datas, + const MemoryData* allocator_img_op_mem_datas, + const ResourceData* allocator_img_datas, + const MemoryData* allocator_img_mem_datas) +{ + uint32_t alc_buf_i = 0; + uint32_t alc_img_op_i = 0; + uint32_t alc_img_i = 0; + + uint32_t alc_buf_mem_i = 0; + uint32_t alc_img_op_mem_i = 0; + uint32_t alc_img_mem_i = 0; + + for (uint32_t i = 0; i < bind_info_count; ++i) + { + const auto* bind_info = &bind_infos[i]; + + for (uint32_t buf_i = 0; buf_i < bind_info->bufferBindCount; ++buf_i) + { + for (uint32_t mem_i = 0; mem_i < bind_info->pBufferBinds[buf_i].bindCount; ++mem_i) + { + ReportBindBufferIncompatibility(bind_info->pBufferBinds[buf_i].buffer, + allocator_buf_datas[alc_buf_i], + allocator_buf_mem_datas[alc_buf_mem_i]); + ++alc_buf_mem_i; + } + ++alc_buf_i; + } + + for (uint32_t img_op_i = 0; img_op_i < bind_info->imageOpaqueBindCount; ++img_op_i) + { + for (uint32_t mem_i = 0; mem_i < bind_info->pImageOpaqueBinds[img_op_i].bindCount; ++mem_i) + { + ReportBindImageIncompatibility(bind_info->pImageOpaqueBinds[img_op_i].image, + allocator_img_op_datas[alc_img_op_i], + allocator_img_op_mem_datas[alc_img_op_mem_i]); + ++alc_img_op_mem_i; + } + ++alc_img_op_i; + } + + for (uint32_t img_i = 0; img_i < bind_info->imageBindCount; ++img_i) + { + for (uint32_t mem_i = 0; mem_i < bind_info->pImageBinds[img_i].bindCount; ++mem_i) + { + ReportBindImageIncompatibility(bind_info->pImageBinds[img_i].image, + allocator_img_datas[alc_img_i], + allocator_img_mem_datas[alc_img_mem_i]); + ++alc_img_mem_i; + } + ++alc_img_i; + } + } +} + void VulkanDefaultAllocator::ReportBindIncompatibility(const VkMemoryRequirements* requirements, const MemoryData* allocator_memory_datas, uint32_t resource_count) @@ -726,10 +874,33 @@ VkResult VulkanDefaultAllocator::MapResourceMemoryDirect(VkDeviceSize size, { auto resource_alloc_info = reinterpret_cast(allocator_data); - if (resource_alloc_info->bound_memory != VK_NULL_HANDLE) + if (!resource_alloc_info->bound_memory_infos.empty() && + resource_alloc_info->bound_memory_infos[0].memory != VK_NULL_HANDLE) { - result = functions_.map_memory( - device_, resource_alloc_info->bound_memory, resource_alloc_info->bound_offset, size, flags, data); + result = functions_.map_memory(device_, + resource_alloc_info->bound_memory_infos[0].memory, + resource_alloc_info->bound_memory_infos[0].offset, + size, + flags, + data); + } + + // TODO: Implement it when it's necessary. + if (resource_alloc_info->bound_memory_infos.size() > 1) + { + switch (resource_alloc_info->memory_info_type) + { + case MemoryInfoType::kSparse: + GFXRECON_LOG_WARNING("VulkanDefaultAllocator::MapResourceMemoryDirect map only the first memory of " + "sparse memories."); + break; + case MemoryInfoType::kVideoSession: + GFXRECON_LOG_WARNING( + "VulkanDefaultAllocator::MapResourceMemoryDirect map only the first memory of VideoSession."); + break; + default: + break; + } } } @@ -741,10 +912,29 @@ void VulkanDefaultAllocator::UnmapResourceMemoryDirect(ResourceData allocator_da if (allocator_data != 0) { auto resource_alloc_info = reinterpret_cast(allocator_data); + + if (!resource_alloc_info->bound_memory_infos.empty() && + resource_alloc_info->bound_memory_infos[0].memory != VK_NULL_HANDLE) + { + functions_.unmap_memory(device_, resource_alloc_info->bound_memory_infos[0].memory); + } - if (resource_alloc_info->bound_memory != VK_NULL_HANDLE) + // TODO: Implement it when it's necessary. + if (resource_alloc_info->bound_memory_infos.size() > 1) { - functions_.unmap_memory(device_, resource_alloc_info->bound_memory); + switch (resource_alloc_info->memory_info_type) + { + case MemoryInfoType::kSparse: + GFXRECON_LOG_WARNING("VulkanDefaultAllocator::UnmapResourceMemoryDirect unmap only the first " + "memory of sparse memories."); + break; + case MemoryInfoType::kVideoSession: + GFXRECON_LOG_WARNING("VulkanDefaultAllocator::UnmapResourceMemoryDirect unmap only the first " + "memory of VideoSession."); + break; + default: + break; + } } } } @@ -774,5 +964,229 @@ VkResult VulkanDefaultAllocator::Allocate(const VkMemoryAllocateInfo* allocate_ return result; } +void VulkanDefaultAllocator::SetDeviceMemoryPriority(VkDeviceMemory memory, float priority, MemoryData allocator_data) +{ + GFXRECON_UNREFERENCED_PARAMETER(allocator_data); + functions_.set_device_memory_priority(device_, memory, priority); +} + +VkResult +VulkanDefaultAllocator::GetMemoryRemoteAddressNV(const VkMemoryGetRemoteAddressInfoNV* memory_get_remote_address_info, + VkRemoteAddressNV* address, + MemoryData allocator_data) +{ + GFXRECON_UNREFERENCED_PARAMETER(allocator_data); + return functions_.get_memory_remote_address_nv(device_, memory_get_remote_address_info, address); +} + +VkResult VulkanDefaultAllocator::CreateAccelerationStructureNV(const VkAccelerationStructureCreateInfoNV* create_info, + const VkAllocationCallbacks* allocation_callbacks, + format::HandleId capture_id, + VkAccelerationStructureNV* acc_str, + ResourceData* allocator_data) +{ + VkResult result = VK_ERROR_INITIALIZATION_FAILED; + + if (allocator_data != nullptr) + { + auto resource_alloc_info = new ResourceAllocInfo; + resource_alloc_info->object_type = VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV; + resource_alloc_info->capture_id = capture_id; + (*allocator_data) = reinterpret_cast(resource_alloc_info); + + result = functions_.create_acceleration_structure_nv(device_, create_info, allocation_callbacks, acc_str); + } + + return result; +} + +void VulkanDefaultAllocator::DestroyAccelerationStructureNV(VkAccelerationStructureNV acc_str, + const VkAllocationCallbacks* allocation_callbacks, + ResourceData allocator_data) +{ + if (allocator_data != 0) + { + auto resource_alloc_info = reinterpret_cast(allocator_data); + delete resource_alloc_info; + } + + functions_.destroy_acceleration_structure_nv(device_, acc_str, allocation_callbacks); +} + +void VulkanDefaultAllocator::GetAccelerationStructureMemoryRequirementsNV( + const VkAccelerationStructureMemoryRequirementsInfoNV* info, + VkMemoryRequirements2KHR* memory_requirements, + ResourceData allocator_data) +{ + functions_.get_acceleration_structure_memory_requirements_nv(device_, info, memory_requirements); +} + +VkResult +VulkanDefaultAllocator::BindAccelerationStructureMemoryNV(uint32_t bind_info_count, + const VkBindAccelerationStructureMemoryInfoNV* bind_infos, + const ResourceData* allocator_acc_datas, + const MemoryData* allocator_memory_datas, + VkMemoryPropertyFlags* bind_memory_properties) +{ + VkResult result = VK_ERROR_INITIALIZATION_FAILED; + + if ((bind_infos != nullptr) && (allocator_acc_datas != nullptr) && (allocator_memory_datas != nullptr) && + (bind_memory_properties != nullptr)) + { + result = functions_.bind_acceleration_structure_memory_nv(device_, bind_info_count, bind_infos); + + if (result == VK_SUCCESS) + { + for (uint32_t i = 0; i < bind_info_count; ++i) + { + auto allocator_acc_data = allocator_acc_datas[i]; + auto allocator_memory_data = allocator_memory_datas[i]; + + if (!UpdateAllocInfo(allocator_acc_data, + MemoryInfoType::kBasic, + bind_infos[i].memory, + bind_infos[i].memoryOffset, + allocator_memory_data, + &bind_memory_properties[i])) + { + GFXRECON_LOG_WARNING("VulkanDefaultAllocator binding a VkAccelerationStructureNV object to a " + "VkDeviceMemory object without allocator data"); + } + } + } + } + + return result; +} + +VkResult VulkanDefaultAllocator::GetMemoryFd(const VkMemoryGetFdInfoKHR* get_fd_info, + int* pFd, + MemoryData allocator_data) +{ + GFXRECON_UNREFERENCED_PARAMETER(allocator_data); + return functions_.get_memory_fd(device_, get_fd_info, pFd); +} + +VkResult VulkanDefaultAllocator::QueueBindSparse(VkQueue queue, + uint32_t bind_info_count, + const VkBindSparseInfo* bind_infos, + VkFence fence, + ResourceData* allocator_buf_datas, + const MemoryData* allocator_buf_mem_datas, + VkMemoryPropertyFlags* bind_buf_mem_properties, + ResourceData* allocator_img_op_datas, + const MemoryData* allocator_img_op_mem_datas, + VkMemoryPropertyFlags* bind_img_op_mem_properties, + ResourceData* allocator_img_datas, + const MemoryData* allocator_img_mem_datas, + VkMemoryPropertyFlags* bind_img_mem_properties) +{ + VkResult result = VK_ERROR_INITIALIZATION_FAILED; + + if (bind_infos != nullptr) + { + result = functions_.queue_bind_sparse(queue, bind_info_count, bind_infos, fence); + + if (result == VK_SUCCESS) + { + uint32_t alc_buf_i = 0; + uint32_t alc_img_op_i = 0; + uint32_t alc_img_i = 0; + + uint32_t alc_buf_mem_i = 0; + uint32_t alc_img_op_mem_i = 0; + uint32_t alc_img_mem_i = 0; + + for (uint32_t i = 0; i < bind_info_count; ++i) + { + const auto* bind_info = &bind_infos[i]; + + for (uint32_t buf_i = 0; buf_i < bind_info->bufferBindCount; ++buf_i) + { + auto bind = bind_info->pBufferBinds[buf_i]; + auto alc_buf_data = allocator_buf_datas[alc_buf_i]; + + for (uint32_t mem_i = 0; mem_i < bind.bindCount; ++mem_i) + { + auto alc_buf_mem_data = allocator_buf_mem_datas[alc_buf_mem_i]; + + if (bind.pBinds[mem_i].memory != VK_NULL_HANDLE && + !UpdateAllocInfo(alc_buf_data, + MemoryInfoType::kSparse, + bind.pBinds[mem_i].memory, + bind.pBinds[mem_i].memoryOffset, + alc_buf_mem_data, + &bind_buf_mem_properties[alc_buf_mem_i])) + { + GFXRECON_LOG_WARNING("VulkanDefaultAllocator binding a VkBuffer object to a " + "VkDeviceMemory object on QueueBindSparse without allocator data"); + } + ++alc_buf_mem_i; + } + ++alc_buf_i; + } + + for (uint32_t img_op_i = 0; img_op_i < bind_info->imageOpaqueBindCount; ++img_op_i) + { + auto bind = bind_info->pImageOpaqueBinds[img_op_i]; + auto alc_img_op_data = allocator_img_op_datas[alc_img_op_i]; + + for (uint32_t mem_i = 0; mem_i < bind.bindCount; ++mem_i) + { + auto alc_img_op_mem_data = allocator_img_op_mem_datas[alc_img_op_mem_i]; + + if (bind.pBinds[mem_i].memory != VK_NULL_HANDLE && + !UpdateAllocInfo(alc_img_op_data, + MemoryInfoType::kSparse, + bind.pBinds[mem_i].memory, + bind.pBinds[mem_i].memoryOffset, + alc_img_op_mem_data, + &bind_img_op_mem_properties[alc_img_op_mem_i])) + { + GFXRECON_LOG_WARNING("VulkanDefaultAllocator binding a opaque VkImage object to a " + "VkDeviceMemory object on QueueBindSparse without allocator data"); + } + ++alc_img_op_mem_i; + } + ++alc_img_op_i; + } + + for (uint32_t img_i = 0; img_i < bind_info->imageBindCount; ++img_i) + { + auto bind = bind_info->pImageBinds[img_i]; + auto alc_img_data = allocator_img_datas[alc_img_i]; + + for (uint32_t mem_i = 0; mem_i < bind.bindCount; ++mem_i) + { + auto alc_img_mem_data = allocator_img_mem_datas[alc_img_mem_i]; + + if (bind.pBinds[mem_i].memory != VK_NULL_HANDLE && + !UpdateAllocInfo(alc_img_data, + MemoryInfoType::kSparse, + bind.pBinds[mem_i].memory, + bind.pBinds[mem_i].memoryOffset, + alc_img_mem_data, + &bind_img_mem_properties[alc_img_mem_i])) + { + GFXRECON_LOG_WARNING("VulkanDefaultAllocator binding a VkImage object to a " + "VkDeviceMemory object on QueueBindSparse without allocator data"); + } + ++alc_img_mem_i; + } + ++alc_img_i; + } + } + } + } + return result; +} + +uint64_t VulkanDefaultAllocator::GetDeviceMemoryOpaqueCaptureAddress(const VkDeviceMemoryOpaqueCaptureAddressInfo* info, + MemoryData allocator_data) +{ + GFXRECON_UNREFERENCED_PARAMETER(allocator_data); + return functions_.get_device_memory_opaque_capture_address(device_, info); +} + GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_default_allocator.h b/third_party/gfxreconstruct/framework/decode/vulkan_default_allocator.h index 20a4ad75e..5160c26c7 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_default_allocator.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_default_allocator.h @@ -76,11 +76,11 @@ class VulkanDefaultAllocator : public VulkanResourceAllocator const VkAllocationCallbacks* allocation_callbacks, format::HandleId capture_id, VkVideoSessionKHR* session, - std::vector* allocator_datas) override; + ResourceData* allocator_data) override; virtual void DestroyVideoSession(VkVideoSessionKHR session, const VkAllocationCallbacks* allocation_callbacks, - std::vector allocator_datas) override; + ResourceData allocator_data) override; virtual void GetBufferMemoryRequirements(VkBuffer buffer, VkMemoryRequirements* memory_requirements, @@ -107,7 +107,7 @@ class VulkanDefaultAllocator : public VulkanResourceAllocator virtual VkResult GetVideoSessionMemoryRequirementsKHR(VkVideoSessionKHR video_session, uint32_t* memory_requirements_count, VkVideoSessionMemoryRequirementsKHR* memory_requirements, - std::vector allocator_datas) override; + ResourceData allocator_datas) override; virtual VkResult AllocateMemory(const VkMemoryAllocateInfo* allocate_info, const VkAllocationCallbacks* allocation_callbacks, @@ -152,7 +152,7 @@ class VulkanDefaultAllocator : public VulkanResourceAllocator virtual VkResult BindVideoSessionMemory(VkVideoSessionKHR video_session, uint32_t bind_info_count, const VkBindVideoSessionMemoryInfoKHR* bind_infos, - const ResourceData* allocator_session_datas, + const ResourceData allocator_session_data, const MemoryData* allocator_memory_datas, VkMemoryPropertyFlags* bind_memory_properties) override; @@ -163,8 +163,13 @@ class VulkanDefaultAllocator : public VulkanResourceAllocator void** data, MemoryData allocator_data) override; + virtual VkResult + MapMemory2(const VkMemoryMapInfo* memory_map_info, void** data, MemoryData allocator_data) override; + virtual void UnmapMemory(VkDeviceMemory memory, MemoryData allocator_data) override; + virtual VkResult UnmapMemory2(const VkMemoryUnmapInfo* memory_unmap_info, MemoryData allocator_data) override; + virtual VkResult FlushMappedMemoryRanges(uint32_t memory_range_count, const VkMappedMemoryRange* memory_ranges, const MemoryData* allocator_datas) override; @@ -207,9 +212,26 @@ class VulkanDefaultAllocator : public VulkanResourceAllocator virtual void ReportBindVideoSessionIncompatibility(VkVideoSessionKHR video_session, uint32_t bind_info_count, const VkBindVideoSessionMemoryInfoKHR* bind_infos, - const ResourceData* allocator_resource_datas, + const ResourceData allocator_resource_data, const MemoryData* allocator_memory_datas) override; + virtual void + ReportBindAccelerationStructureMemoryNVIncompatibility(uint32_t bind_info_count, + const VkBindAccelerationStructureMemoryInfoNV* bind_infos, + const ResourceData* allocator_acc_datas, + const MemoryData* allocator_memory_datas) override; + + virtual void ReportQueueBindSparseIncompatibility(VkQueue queue, + uint32_t bind_info_count, + const VkBindSparseInfo* bind_infos, + VkFence fence, + const ResourceData* allocator_buf_datas, + const MemoryData* allocator_buf_mem_datas, + const ResourceData* allocator_img_op_datas, + const MemoryData* allocator_img_op_mem_datas, + const ResourceData* allocator_img_datas, + const MemoryData* allocator_img_mem_datas) override; + // Direct allocation methods that perform memory allocation and resource creation without performing memory // translation. These methods allow the replay tool to allocate staging resources through the resource allocator so // that the allocator is aware of all allocations performed at replay. @@ -305,12 +327,73 @@ class VulkanDefaultAllocator : public VulkanResourceAllocator virtual bool SupportBindVideoSessionMemory() override { return false; } + virtual void SetDeviceMemoryPriority(VkDeviceMemory memory, float priority, MemoryData allocator_data) override; + + virtual VkResult GetMemoryRemoteAddressNV(const VkMemoryGetRemoteAddressInfoNV* memory_get_remote_address_info, + VkRemoteAddressNV* address, + MemoryData allocator_data) override; + + virtual VkResult CreateAccelerationStructureNV(const VkAccelerationStructureCreateInfoNV* create_info, + const VkAllocationCallbacks* allocation_callbacks, + format::HandleId capture_id, + VkAccelerationStructureNV* acc_str, + ResourceData* allocator_data) override; + + virtual void DestroyAccelerationStructureNV(VkAccelerationStructureNV acc_str, + const VkAllocationCallbacks* allocation_callbacks, + ResourceData allocator_data) override; + + virtual void + GetAccelerationStructureMemoryRequirementsNV(const VkAccelerationStructureMemoryRequirementsInfoNV* info, + VkMemoryRequirements2KHR* memory_requirements, + ResourceData allocator_data) override; + + virtual VkResult BindAccelerationStructureMemoryNV(uint32_t bind_info_count, + const VkBindAccelerationStructureMemoryInfoNV* bind_infos, + const ResourceData* allocator_acc_datas, + const MemoryData* allocator_memory_datas, + VkMemoryPropertyFlags* bind_memory_properties) override; + + virtual VkResult GetMemoryFd(const VkMemoryGetFdInfoKHR* get_fd_info, int* pFd, MemoryData allocator_data) override; + + virtual VkResult QueueBindSparse(VkQueue queue, + uint32_t bind_info_count, + const VkBindSparseInfo* bind_infos, + VkFence fence, + ResourceData* allocator_buf_datas, + const MemoryData* allocator_buf_mem_datas, + VkMemoryPropertyFlags* bind_buf_mem_properties, + ResourceData* allocator_img_op_datas, + const MemoryData* allocator_img_op_mem_datas, + VkMemoryPropertyFlags* bind_img_op_mem_properties, + ResourceData* allocator_img_datas, + const MemoryData* allocator_img_mem_datas, + VkMemoryPropertyFlags* bind_img_mem_properties) override; + + virtual uint64_t GetDeviceMemoryOpaqueCaptureAddress(const VkDeviceMemoryOpaqueCaptureAddressInfo* info, + MemoryData allocator_data) override; + protected: + + enum MemoryInfoType + { + kBasic, // single: buffer, image, acceleration_structure_nv + kSparse, // array: buffer, image + kVideoSession // array: video_session + }; + + struct BoundMemoryInfo + { + VkDeviceMemory memory{ VK_NULL_HANDLE }; + VkDeviceSize offset{ 0 }; + }; + struct ResourceAllocInfo { - format::HandleId capture_id{ format::kNullHandleId }; - VkDeviceMemory bound_memory{ VK_NULL_HANDLE }; - VkDeviceSize bound_offset{ 0 }; + MemoryInfoType memory_info_type; + std::vector bound_memory_infos; + VkObjectType object_type{ VK_OBJECT_TYPE_UNKNOWN }; + format::HandleId capture_id{ format::kNullHandleId }; }; struct MemoryAllocInfo @@ -343,6 +426,13 @@ class VulkanDefaultAllocator : public VulkanResourceAllocator const MemoryData* allocator_memory_datas, uint32_t resource_count); + bool UpdateAllocInfo(ResourceData allocator_resource_data, + MemoryInfoType memory_info_type, + VkDeviceMemory memory, + VkDeviceSize memory_offset, + MemoryData allocator_memory_data, + VkMemoryPropertyFlags* bind_memory_property); + private: VkDevice device_; Functions functions_; diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_device_address_tracker.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_device_address_tracker.cpp index cb97ae33b..97db96129 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_device_address_tracker.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_device_address_tracker.cpp @@ -26,7 +26,7 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) -VulkanDeviceAddressTracker::VulkanDeviceAddressTracker(const VulkanObjectInfoTable& object_info_table) : +VulkanDeviceAddressTracker::VulkanDeviceAddressTracker(VulkanObjectInfoTable& object_info_table) : object_info_table_(object_info_table) {} @@ -38,14 +38,16 @@ void decode::VulkanDeviceAddressTracker::TrackBuffer(const decode::VulkanBufferI if (buffer_info->capture_address != 0) { buffer_capture_addresses_[buffer_info->capture_address] = buffer_info->capture_id; + + // if a capture-address is known, we also know the replay-address + address_lookup_helper_map_[buffer_info->capture_address] = { buffer_info->replay_address, + buffer_info->size }; } // track replay device address if (buffer_info->replay_address != 0) { - buffer_replay_addresses_[buffer_info->replay_address] = buffer_info->capture_id; - address_lookup_helper_map_[buffer_info->capture_address] = { buffer_info->replay_address, - buffer_info->size }; + buffer_replay_addresses_[buffer_info->replay_address] = buffer_info->capture_id; } // track vulkan-handle @@ -64,6 +66,11 @@ void VulkanDeviceAddressTracker::RemoveBuffer(const VulkanBufferInfo* buffer_inf buffer_replay_addresses_.erase(buffer_info->replay_address); buffer_handles_.erase(buffer_info->handle); address_lookup_helper_map_.erase(buffer_info->capture_address); + + for (const auto& [capture_address, as_info] : buffer_info->acceleration_structures) + { + acceleration_structure_addresses_.erase(capture_address); + } } } @@ -72,11 +79,35 @@ void VulkanDeviceAddressTracker::TrackAccelerationStructure( { if (acceleration_structure_info != nullptr) { + auto* buffer_info = GetBufferByHandle(acceleration_structure_info->buffer); + // track capture device address if (acceleration_structure_info->capture_address != 0) { - acceleration_structure_capture_addresses_[acceleration_structure_info->capture_address] = - acceleration_structure_info->capture_id; + // if a capture-address is known, we also know the replay-address + acceleration_structure_addresses_[acceleration_structure_info->capture_address] = + acceleration_structure_info->replay_address; + + // we can derive the buffer-device address from AS device-address, if necessary + if (buffer_info != nullptr) + { + buffer_info->capture_address = + acceleration_structure_info->capture_address - acceleration_structure_info->offset; + } + } + + if (acceleration_structure_info->replay_address != 0) + { + // we can derive the buffer-device address from AS device-address, if necessary + if (buffer_info != nullptr) + { + // if not already present, keep track of AS<->VkBuffer association + buffer_info->acceleration_structures[acceleration_structure_info->replay_address].insert( + object_info_table_.GetVkAccelerationStructureKHRInfo(acceleration_structure_info->capture_id)); + + buffer_info->replay_address = + acceleration_structure_info->replay_address - acceleration_structure_info->offset; + } } // track vulkan-handle @@ -85,6 +116,9 @@ void VulkanDeviceAddressTracker::TrackAccelerationStructure( acceleration_structure_handles_[acceleration_structure_info->handle] = acceleration_structure_info->capture_id; } + + // potentially update tracked address-information for linked buffer + TrackBuffer(buffer_info); } } @@ -93,15 +127,22 @@ void VulkanDeviceAddressTracker::RemoveAccelerationStructure( { if (acceleration_structure_info != nullptr) { - acceleration_structure_capture_addresses_.erase(acceleration_structure_info->capture_address); acceleration_structure_handles_.erase(acceleration_structure_info->handle); + auto* buffer_info = GetBufferByHandle(acceleration_structure_info->buffer); + + if (buffer_info != nullptr) + { + buffer_info->acceleration_structures[acceleration_structure_info->replay_address].erase( + acceleration_structure_info); + } } } const decode::VulkanBufferInfo* -decode::VulkanDeviceAddressTracker::GetBufferByCaptureDeviceAddress(VkDeviceAddress capture_address) const +decode::VulkanDeviceAddressTracker::GetBufferByCaptureDeviceAddress(VkDeviceAddress capture_address, + size_t* offset) const { - return GetBufferInfo(capture_address, buffer_capture_addresses_); + return GetBufferInfo(capture_address, buffer_capture_addresses_, offset); } const decode::VulkanBufferInfo* @@ -110,6 +151,17 @@ decode::VulkanDeviceAddressTracker::GetBufferByReplayDeviceAddress(VkDeviceAddre return GetBufferInfo(replay_address, buffer_replay_addresses_); } +VulkanBufferInfo* VulkanDeviceAddressTracker::GetBufferByHandle(VkBuffer handle) +{ + auto handle_it = buffer_handles_.find(handle); + if (handle_it != buffer_handles_.end()) + { + const auto& [h, handle_id] = *handle_it; + return object_info_table_.GetVkBufferInfo(handle_id); + } + return nullptr; +} + const VulkanBufferInfo* VulkanDeviceAddressTracker::GetBufferByHandle(VkBuffer handle) const { auto handle_it = buffer_handles_.find(handle); @@ -123,7 +175,8 @@ const VulkanBufferInfo* VulkanDeviceAddressTracker::GetBufferByHandle(VkBuffer h const VulkanBufferInfo* VulkanDeviceAddressTracker::GetBufferInfo(VkDeviceAddress device_address, - const VulkanDeviceAddressTracker::buffer_address_map_t& address_map) const + const VulkanDeviceAddressTracker::buffer_address_map_t& address_map, + size_t* offset) const { if (!address_map.empty()) { @@ -149,6 +202,11 @@ VulkanDeviceAddressTracker::GetBufferInfo(VkDeviceAddress { if (device_address < found_address + found_buffer->size) { + if (offset != nullptr) + { + *offset = device_address - found_address; + } + return found_buffer; } } @@ -156,16 +214,21 @@ VulkanDeviceAddressTracker::GetBufferInfo(VkDeviceAddress return nullptr; } -const VulkanAccelerationStructureKHRInfo* -VulkanDeviceAddressTracker::GetAccelerationStructureByCaptureDeviceAddress(VkDeviceAddress capture_address) const +const std::unordered_set& +VulkanDeviceAddressTracker::GetAccelerationStructuresByCaptureDeviceAddress(VkDeviceAddress capture_address) const { - auto address_it = acceleration_structure_capture_addresses_.find(capture_address); - if (address_it != acceleration_structure_capture_addresses_.end()) + // delegate query to buffer + const auto* buffer_info = GetBufferByCaptureDeviceAddress(capture_address); + if (buffer_info != nullptr) { - const auto& [found_address, acceleration_structure_handle] = *address_it; - return object_info_table_.GetVkAccelerationStructureKHRInfo(acceleration_structure_handle); + auto handle_set_it = buffer_info->acceleration_structures.find(capture_address); + if (handle_set_it != buffer_info->acceleration_structures.end()) + { + return handle_set_it->second; + } } - return nullptr; + static const std::unordered_set empty_set; + return empty_set; } [[nodiscard]] const VulkanAccelerationStructureKHRInfo* @@ -180,21 +243,10 @@ VulkanDeviceAddressTracker::GetAccelerationStructureByHandle(VkAccelerationStruc return nullptr; } -std::unordered_map +const std::unordered_map& VulkanDeviceAddressTracker::GetAccelerationStructureDeviceAddressMap() const { - std::unordered_map ret; - for (const auto& [address, handleId] : acceleration_structure_capture_addresses_) - { - const VulkanAccelerationStructureKHRInfo* acceleration_structure_info = - object_info_table_.GetVkAccelerationStructureKHRInfo(handleId); - - if (acceleration_structure_info != nullptr && acceleration_structure_info->replay_address != 0) - { - ret[address] = acceleration_structure_info->replay_address; - } - } - return ret; + return acceleration_structure_addresses_; } const std::unordered_map& diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_device_address_tracker.h b/third_party/gfxreconstruct/framework/decode/vulkan_device_address_tracker.h index 20174da3f..515189048 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_device_address_tracker.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_device_address_tracker.h @@ -24,6 +24,7 @@ #ifndef GFXRECON_DECODE_VULKAN_BUFFER_TRACKER_H #define GFXRECON_DECODE_VULKAN_BUFFER_TRACKER_H +#include "decode/common_object_info_table.h" #include "decode/vulkan_object_info.h" #include "vulkan_object_info_table.h" #include @@ -34,7 +35,7 @@ GFXRECON_BEGIN_NAMESPACE(decode) class VulkanDeviceAddressTracker { public: - explicit VulkanDeviceAddressTracker(const VulkanObjectInfoTable& object_info_table); + explicit VulkanDeviceAddressTracker(VulkanObjectInfoTable& object_info_table); //! prevent copying VulkanDeviceAddressTracker(const VulkanDeviceAddressTracker&) = delete; @@ -77,9 +78,12 @@ class VulkanDeviceAddressTracker * @brief Retrieve a buffer by providing a capture-time VkDeviceAddress within its range. * * @param capture_address a capture-time VkDeviceAddress pointing inside a buffer. + * @param offset a pointer to a size_t where the offset from the base of + * the buffer is returned. Can be null and in this case is ignored * @return a const-pointer to a found BufferInfo or nullptr. */ - [[nodiscard]] const VulkanBufferInfo* GetBufferByCaptureDeviceAddress(VkDeviceAddress capture_address) const; + [[nodiscard]] const VulkanBufferInfo* GetBufferByCaptureDeviceAddress(VkDeviceAddress capture_address, + size_t* offset = nullptr) const; /** * @brief Retrieve a buffer by providing a replay-time VkDeviceAddress within its range. @@ -93,18 +97,27 @@ class VulkanDeviceAddressTracker * @brief Retrieve a buffer info-struct by providing its vulkan-handle. * * @param handle a capture-time VkBuffer handle. - * @return a const-pointer to a found BufferInfo or nullptr. + * @return a (const-) pointer to a found BufferInfo or nullptr. */ + [[nodiscard]] VulkanBufferInfo* GetBufferByHandle(VkBuffer handle); [[nodiscard]] const VulkanBufferInfo* GetBufferByHandle(VkBuffer handle) const; /** - * @brief Retrieve an acceleration-structure by providing a capture-time VkDeviceAddress. + * @brief Retrieve a set of acceleration-structure handles by providing a capture-time VkDeviceAddress. + * + * @note AccelerationStructures can be aliases and reference the same buffer. + * There is also a direct correspondence between AS-addresses and the address of associated buffers. + * + * -> AS-address == buffer-address + AS-offset + * + * So this function is just a helper and will look-up an associated buffer instead, + * and delegate the actual query to that. * * @param capture_address a capture-time VkDeviceAddress for an acceleration-structure. - * @return a const-pointer to a found AccelerationStructureKHRInfo or nullptr. + * @return a const-ref to a set of (alias) const AccelerationStructureKHRInfo*. */ - [[nodiscard]] const VulkanAccelerationStructureKHRInfo* - GetAccelerationStructureByCaptureDeviceAddress(VkDeviceAddress capture_address) const; + [[nodiscard]] const std::unordered_set& + GetAccelerationStructuresByCaptureDeviceAddress(VkDeviceAddress capture_address) const; /** * @brief Retrieve an acceleration-structure info-struct by providing its vulkan-handle. @@ -120,7 +133,8 @@ class VulkanDeviceAddressTracker * * @return a lookup-table for acceleration-structure addresses. */ - [[nodiscard]] std::unordered_map GetAccelerationStructureDeviceAddressMap() const; + [[nodiscard]] const std::unordered_map& + GetAccelerationStructureDeviceAddressMap() const; //! aggregate to group an address and size struct device_address_range_t @@ -142,11 +156,12 @@ class VulkanDeviceAddressTracker using buffer_address_map_t = std::map; [[nodiscard]] const VulkanBufferInfo* GetBufferInfo(VkDeviceAddress device_address, - const buffer_address_map_t& address_map) const; + const buffer_address_map_t& address_map, + size_t* offset = nullptr) const; - const VulkanObjectInfoTable& object_info_table_; - buffer_address_map_t buffer_capture_addresses_, buffer_replay_addresses_; - std::unordered_map acceleration_structure_capture_addresses_; + VulkanObjectInfoTable& object_info_table_; + buffer_address_map_t buffer_capture_addresses_, buffer_replay_addresses_; + std::unordered_map acceleration_structure_addresses_; std::unordered_map buffer_handles_; std::unordered_map acceleration_structure_handles_; @@ -154,6 +169,9 @@ class VulkanDeviceAddressTracker std::unordered_map address_lookup_helper_map_; }; +using VulkanPerDeviceAddressTrackers = + std::unordered_map; + GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_object_info.h b/third_party/gfxreconstruct/framework/decode/vulkan_object_info.h index 69673e42f..74249a16f 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_object_info.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_object_info.h @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -88,6 +89,8 @@ enum PhysicalDeviceArrayIndices : uint32_t kShaderEXTArrayGetShaderBinaryDataEXT = 21, kPhysicalDeviceArrayGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = 22, kPhysicalDeviceArrayGetPhysicalDeviceCooperativeVectorPropertiesNV = 23, + kPhysicalDeviceArrayEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM = 24, + kPhysicalDeviceArrayGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM = 25, // Aliases for extensions functions that were promoted to core. kPhysicalDeviceArrayGetPhysicalDeviceQueueFamilyProperties2KHR = @@ -108,6 +111,8 @@ enum DeviceArrayIndices : uint32_t kPhysicalDeviceArrayGetPhysicalDeviceCooperativeMatrixPropertiesKHR = 6, kPhysicalDeviceArrayGetPhysicalDeviceCalibrateableTimeDomainsKHR = 7, kDeviceArrayGetPipelineBinaryDataKHR = 8, + kDeviceArrayGetDataGraphPipelineSessionBindPointRequirementsARM = 9, + kDeviceArrayGetDataGraphPipelineAvailablePropertiesARM = 10, // Aliases for extensions functions that were promoted to core. kDeviceArrayGetImageSparseMemoryRequirements2KHR = kDeviceArrayGetImageSparseMemoryRequirements2, @@ -172,6 +177,14 @@ struct VulkanReplayDeviceInfo std::optional driver_properties; std::optional raytracing_properties; std::optional acceleration_structure_properties; + std::optional descriptor_buffer_properties; + + bool IsPropertiesNull() const + { + // Not include memory properties. + return properties == std::nullopt || driver_properties == std::nullopt || + raytracing_properties == std::nullopt || acceleration_structure_properties == std::nullopt; + } }; template @@ -228,7 +241,6 @@ typedef VulkanObjectInfo VulkanDisplayMode typedef VulkanObjectInfo VulkanDebugReportCallbackEXTInfo; typedef VulkanObjectInfo VulkanIndirectCommandsLayoutNVInfo; typedef VulkanObjectInfo VulkanDebugUtilsMessengerEXTInfo; -typedef VulkanObjectInfo VulkanAccelerationStructureNVInfo; typedef VulkanObjectInfo VulkanPerformanceConfigurationINTELInfo; typedef VulkanObjectInfo VulkanMicromapEXTInfo; typedef VulkanObjectInfo VulkanOpticalFlowSessionNVInfo; @@ -291,6 +303,9 @@ struct VulkanPhysicalDeviceInfo : public VulkanObjectInfo // capture raytracing (shader-binding-table) properties std::optional capture_raytracing_properties = {}; + // capture descriptor-buffer properties (VK_EXT_descriptor_buffer) + std::optional capture_descriptor_buffer_properties = {}; + // Closest matching replay device. VulkanReplayDeviceInfo* replay_device_info{ nullptr }; @@ -303,33 +318,57 @@ struct VulkanPhysicalDeviceInfo : public VulkanObjectInfo // When Non-null, the GetVkObject will recur on the alias Id format::HandleId vulkan_alias{ format::kNullHandleId }; + + // keep track of queried surface-formats + std::optional> surface_formats; }; struct VulkanDeviceInfo : public VulkanObjectInfo { VkPhysicalDevice parent{ VK_NULL_HANDLE }; - std::unique_ptr allocator; + std::shared_ptr allocator; std::unordered_map array_counts; - std::unordered_map opaque_addresses; + std::unordered_map opaque_addresses; + std::unordered_map> opaque_descriptor_data; // Map pipeline ID to ray tracing shader group handle capture replay data. - std::unordered_map> shader_group_handles; + std::unordered_map> shader_group_handles; // The following values are only used when loading the initial state for trimmed files. std::vector extensions; - std::unique_ptr resource_initializer; + std::shared_ptr resource_initializer; // Physical device property & feature state at device creation graphics::VulkanDevicePropertyFeatureInfo property_feature_info; - std::unordered_map queue_family_creation_flags; - std::vector queue_family_index_enabled; + struct EnabledQueueFamilyFlags + { + std::unordered_map queue_family_creation_flags; + std::unordered_map queue_family_properties_flags; + + std::vector queue_family_index_enabled; + } enabled_queue_family_flags; std::vector replay_device_group; // For use with device deduplication - bool is_duplicate{ false }; + format::HandleId duplicate_source_id{ format::kNullHandleId }; + + void copy_characteristics(const VulkanDeviceInfo* source_info) + { + parent = source_info->parent; + allocator = source_info->allocator; + array_counts = source_info->array_counts; + opaque_addresses = source_info->opaque_addresses; + shader_group_handles = source_info->shader_group_handles; + extensions = source_info->extensions; + resource_initializer = source_info->resource_initializer; + property_feature_info = source_info->property_feature_info; + enabled_queue_family_flags = source_info->enabled_queue_family_flags; + replay_device_group = source_info->replay_device_group; + duplicate_source_id = source_info->capture_id; + } }; struct VulkanQueueInfo : public VulkanObjectInfo @@ -368,6 +407,7 @@ struct VulkanDeviceMemoryInfo : public VulkanObjectInfo VulkanResourceAllocator::MemoryData allocator_data{ 0 }; }; +struct VulkanAccelerationStructureKHRInfo; struct VulkanBufferInfo : public VulkanObjectInfo { // The following values are only used for memory portability. @@ -378,9 +418,15 @@ struct VulkanBufferInfo : public VulkanObjectInfo // This is only used when loading the initial state for trimmed files. VkMemoryPropertyFlags memory_property_flags{ 0 }; + std::vector sparse_memory_property_flags; + VkBufferUsageFlags usage{ 0 }; VkDeviceSize size{ 0 }; uint32_t queue_family_index{ 0 }; + + // map acceleration-structure replay-addresses to existing (alias) AS-handles + std::unordered_map> + acceleration_structures; }; struct VulkanBufferViewInfo : public VulkanObjectInfo @@ -405,6 +451,8 @@ struct VulkanImageInfo : public VulkanObjectInfo // This is only used when loading the initial state for trimmed files. VkMemoryPropertyFlags memory_property_flags{ 0 }; + std::vector sparse_memory_property_flags; + VkImageUsageFlags usage{ 0 }; VkImageType type{}; VkFormat format{}; @@ -473,7 +521,7 @@ struct VulkanPipelineInfo : public VulkanObjectInfoAsync std::unordered_map array_counts; // keep track of existing usage of buffer-references - std::vector buffer_reference_infos; + std::set buffer_reference_infos; // map capture- to replay-time shader-group-handles std::unordered_map shader_group_handle_map; @@ -616,7 +664,7 @@ struct VulkanVideoSessionKHRInfo : VulkanObjectInfo std::unordered_map array_counts; // The following values are only used for memory portability. - std::vector allocator_datas; + VulkanResourceAllocator::ResourceData allocator_data; // This is only used when loading the initial state for trimmed files. std::vector memory_property_flags; @@ -644,7 +692,12 @@ struct VulkanCommandBufferInfo : public VulkanPoolObjectInfo // collect buffer-device-addresses of locations to replace before submit std::unordered_set addresses_to_replace; - bool inside_renderpass = false; + + // maps buffers to (offset/stride)-pairs that need to be resolved + // (read back pointers, resolve additional buffers) + std::unordered_map>> addresses_to_resolve; + + bool inside_renderpass = false; }; struct VulkanRenderPassInfo : public VulkanObjectInfo @@ -677,6 +730,35 @@ struct VulkanDescriptorTypeBufferInfo VkDeviceSize range; }; +struct VulkanAccelerationStructureKHRInfo : public VulkanObjectInfo +{ + VkDeviceAddress capture_address = 0; + VkDeviceAddress replay_address = 0; + + VkAccelerationStructureTypeKHR type = VK_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_KHR; + + //! associated buffer + VkBuffer buffer = VK_NULL_HANDLE; + VkDeviceSize offset = 0; + VkDeviceSize size = 0; +}; + +struct VulkanAccelerationStructureNVInfo : public VulkanObjectInfo +{ + // The following values are only used for memory portability. + VulkanResourceAllocator::ResourceData allocator_data{ 0 }; + + // This is only used when loading the initial state for trimmed files. + VkMemoryPropertyFlags memory_property_flags{ 0 }; +}; + +struct VulkanDataGraphPipelineSessionARMInfo : public VulkanObjectInfo +{ + // The following values are only used for memory portability. + VulkanResourceAllocator::ResourceData allocator_data{ 0 }; + VkDataGraphPipelineSessionCreateFlagsARM flags{}; +}; + struct VulkanDescriptorSetBindingInfo { VkDescriptorType desc_type{ VK_DESCRIPTOR_TYPE_MAX_ENUM }; @@ -684,10 +766,11 @@ struct VulkanDescriptorSetBindingInfo // Use a map to represent array as many entries can be left unpopulated. // Use a sorted map so that array indices are printed in order in the json output - std::map image_info; - std::map buffer_info; - std::map texel_buffer_view_info; - std::vector inline_uniform_block; + std::map image_info; + std::map buffer_info; + std::map texel_buffer_view_info; + std::map acceleration_structs_khr_info; + std::vector inline_uniform_block; }; struct VulkanDescriptorSetInfo : public VulkanPoolObjectInfo @@ -697,17 +780,6 @@ struct VulkanDescriptorSetInfo : public VulkanPoolObjectInfo VulkanDescriptorBindingsInfo descriptors; }; -struct VulkanAccelerationStructureKHRInfo : public VulkanObjectInfo -{ - VkDeviceAddress capture_address = 0; - VkDeviceAddress replay_address = 0; - - VkAccelerationStructureTypeKHR type = VK_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_KHR; - - //! associated buffer - VkBuffer buffer = VK_NULL_HANDLE; -}; - // // Handle alias types for extension handle types that have been promoted to core types. // diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_offscreen_swapchain.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_offscreen_swapchain.cpp index 4516ca990..ca8b4bd18 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_offscreen_swapchain.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_offscreen_swapchain.cpp @@ -300,12 +300,6 @@ VkResult VulkanOffscreenSwapchain::SignalSemaphoresFence(const VulkanQueueInfo* const VkSemaphore* signal_semaphores, VkFence fence) { - uint32_t queue_family_index = default_queue_family_index_; - if (queue_info) - { - queue_family_index = queue_info->family_index; - } - VkPipelineStageFlags wait_stage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; VkSubmitInfo submit_info = { VK_STRUCTURE_TYPE_SUBMIT_INFO }; diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_pre_process_consumer.h b/third_party/gfxreconstruct/framework/decode/vulkan_pre_process_consumer.h index df99d1890..9d168e333 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_pre_process_consumer.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_pre_process_consumer.h @@ -29,6 +29,7 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) const std::string DUMP_ARG_BEGIN_COMMAND_BUFFER = "BeginCommandBuffer"; +const std::string DUMP_ARG_TRANSFER = "Transfer"; const std::string DUMP_ARG_DRAW = "Draw"; const std::string DUMP_ARG_RENDER_PASS = "RenderPass"; const std::string DUMP_ARG_BEGIN_RENDER_PASS = "BeginRenderPass"; @@ -724,4 +725,4 @@ class VulkanPreProcessConsumer : public VulkanConsumer GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) -#endif // GFXRECON_DECODE_VULKAN_PRE_PROCESS_CONSUMER_H \ No newline at end of file +#endif // GFXRECON_DECODE_VULKAN_PRE_PROCESS_CONSUMER_H diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_realign_allocator.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_realign_allocator.cpp index 246d26935..3ab52274a 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_realign_allocator.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_realign_allocator.cpp @@ -211,23 +211,23 @@ VkResult VulkanRealignAllocator::BindImageMemory2(uint32_t b VkResult VulkanRealignAllocator::BindVideoSessionMemory(VkVideoSessionKHR video_session, uint32_t bind_info_count, const VkBindVideoSessionMemoryInfoKHR* bind_infos, - const ResourceData* allocator_session_datas, + const ResourceData allocator_session_data, const MemoryData* allocator_memory_datas, VkMemoryPropertyFlags* bind_memory_properties) { std::unique_ptr realign_bind_infos; - if ((allocator_session_datas != nullptr) && (bind_infos != nullptr)) + if ((allocator_session_data != 0) && (bind_infos != nullptr)) { realign_bind_infos = std::make_unique(bind_info_count); + auto resource_info = GetResourceAllocInfo(allocator_session_data); - for (uint32_t i = 0; i < bind_info_count; ++i) + if (resource_info != nullptr) { - realign_bind_infos[i] = bind_infos[i]; - - auto resource_info = GetResourceAllocInfo(allocator_session_datas[i]); - if (resource_info != nullptr) + for (uint32_t i = 0; i < bind_info_count; ++i) { + realign_bind_infos[i] = bind_infos[i]; + // Update video seesion to new binding offset from first pass data collected from resource tracking. auto tracked_session_info = tracked_object_table_->GetTrackedVkResourceInfo(resource_info->capture_id); if (tracked_session_info != nullptr) @@ -241,11 +241,23 @@ VkResult VulkanRealignAllocator::BindVideoSessionMemory(VkVideoSessionKHR return VulkanDefaultAllocator::BindVideoSessionMemory(video_session, bind_info_count, realign_bind_infos.get(), - allocator_session_datas, + allocator_session_data, allocator_memory_datas, bind_memory_properties); } +VkResult +VulkanRealignAllocator::BindAccelerationStructureMemoryNV(uint32_t bind_info_count, + const VkBindAccelerationStructureMemoryInfoNV* bind_infos, + const ResourceData* allocator_acc_datas, + const MemoryData* allocator_memory_datas, + VkMemoryPropertyFlags* bind_memory_properties) +{ + GFXRECON_LOG_FATAL("-m realign doesn't support BindAccelerationStructureMemoryNV. VK_NV_ray_tracing is deprecated. " + "It won't get more support."); + return VK_ERROR_EXTENSION_NOT_PRESENT; +} + VkResult VulkanRealignAllocator::MapMemory(VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_realign_allocator.h b/third_party/gfxreconstruct/framework/decode/vulkan_realign_allocator.h index 5efb0191e..c64df13fc 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_realign_allocator.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_realign_allocator.h @@ -78,10 +78,16 @@ class VulkanRealignAllocator : public VulkanDefaultAllocator virtual VkResult BindVideoSessionMemory(VkVideoSessionKHR video_session, uint32_t bind_info_count, const VkBindVideoSessionMemoryInfoKHR* bind_infos, - const ResourceData* allocator_session_datas, + const ResourceData allocator_session_data, const MemoryData* allocator_memory_datas, VkMemoryPropertyFlags* bind_memory_properties) override; + virtual VkResult BindAccelerationStructureMemoryNV(uint32_t bind_info_count, + const VkBindAccelerationStructureMemoryInfoNV* bind_infos, + const ResourceData* allocator_acc_datas, + const MemoryData* allocator_memory_datas, + VkMemoryPropertyFlags* bind_memory_properties) override; + virtual VkResult MapMemory(VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_rebind_allocator.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_rebind_allocator.cpp index 31911ed73..d6ab6b0c0 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_rebind_allocator.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_rebind_allocator.cpp @@ -66,6 +66,7 @@ #include #include +#include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) @@ -161,18 +162,8 @@ VkResult VulkanRebindAllocator::Initialize(uint32_t result = functions_.create_command_pool(device_, &cmd_pool_info, NULL, &cmd_pool_); assert(result == VK_SUCCESS); - VkCommandBufferAllocateInfo cmd_buff_alloc_info = {}; - cmd_buff_alloc_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; - cmd_buff_alloc_info.pNext = NULL; - cmd_buff_alloc_info.commandPool = cmd_pool_; - cmd_buff_alloc_info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; - cmd_buff_alloc_info.commandBufferCount = 1; - functions_.get_device_queue(device_, staging_queue_family_, 0, &staging_queue_); - result = functions_.allocate_command_buffers(device_, &cmd_buff_alloc_info, &cmd_buffer_); - assert(result == VK_SUCCESS); - // Select creation flags from enabled extensions. bool have_memory_reqs2 = false; bool have_dedicated_allocation = false; @@ -226,7 +217,7 @@ VkResult VulkanRebindAllocator::Initialize(uint32_t void VulkanRebindAllocator::Destroy() { - functions_.free_command_buffers(device_, cmd_pool_, 1, &cmd_buffer_); + ClearStagingResources(); functions_.destroy_command_pool(device_, cmd_pool_, nullptr); if (allocator_ != VK_NULL_HANDLE) @@ -253,13 +244,14 @@ VkResult VulkanRebindAllocator::CreateBuffer(const VkBufferCreateInfo* create { auto modified_info = *create_info; modified_info.size = util::aligned_value(create_info->size, min_buffer_alignment_); - result = functions_.create_buffer(device_, &modified_info, nullptr, buffer); + + result = functions_.create_buffer(device_, &modified_info, allocator_->GetAllocationCallbacks(), buffer); if (result >= 0) { auto resource_alloc_info = new ResourceAllocInfo; resource_alloc_info->usage = create_info->usage; - resource_alloc_info->object_type = ObjectType::buffer; + resource_alloc_info->object_type = VK_OBJECT_TYPE_BUFFER; (*allocator_data) = reinterpret_cast(resource_alloc_info); if (create_info->pNext != nullptr) @@ -277,28 +269,16 @@ void VulkanRebindAllocator::DestroyBuffer(VkBuffer buffer, ResourceData allocator_data) { GFXRECON_UNREFERENCED_PARAMETER(allocation_callbacks); + GFXRECON_ASSERT(buffer != VK_NULL_HANDLE); if (allocator_data != 0) { - assert(buffer != VK_NULL_HANDLE); - auto resource_alloc_info = reinterpret_cast(allocator_data); - auto memory_alloc_info = resource_alloc_info->memory_info; - - if (memory_alloc_info != nullptr) - { - memory_alloc_info->original_buffers.erase(buffer); - } - - if (resource_alloc_info->mapped_pointer != nullptr) - { - vmaUnmapMemory(allocator_, resource_alloc_info->allocation); - } - - vmaDestroyBuffer(allocator_, buffer, resource_alloc_info->allocation); - + RemoveVmaMemoryInfo(*resource_alloc_info, VK_HANDLE_TO_UINT64(buffer)); delete resource_alloc_info; } + + vmaDestroyBuffer(allocator_, buffer, VK_NULL_HANDLE); } VkResult VulkanRebindAllocator::CreateImage(const VkImageCreateInfo* create_info, @@ -314,7 +294,7 @@ VkResult VulkanRebindAllocator::CreateImage(const VkImageCreateInfo* create_ if ((create_info != nullptr) && (image != nullptr) && (allocator_data != nullptr)) { - result = functions_.create_image(device_, create_info, allocation_callbacks, image); + result = functions_.create_image(device_, create_info, allocator_->GetAllocationCallbacks(), image); if (result >= 0) { @@ -323,7 +303,7 @@ VkResult VulkanRebindAllocator::CreateImage(const VkImageCreateInfo* create_ resource_alloc_info->tiling = create_info->tiling; resource_alloc_info->height = create_info->extent.height; resource_alloc_info->format = create_info->format; - resource_alloc_info->object_type = ObjectType::image; + resource_alloc_info->object_type = VK_OBJECT_TYPE_IMAGE; (*allocator_data) = reinterpret_cast(resource_alloc_info); if (create_info->pNext != nullptr) @@ -341,60 +321,42 @@ void VulkanRebindAllocator::DestroyImage(VkImage image, ResourceData allocator_data) { GFXRECON_UNREFERENCED_PARAMETER(allocation_callbacks); + GFXRECON_ASSERT(image != VK_NULL_HANDLE); if (allocator_data != 0) { - assert(image != VK_NULL_HANDLE); - auto resource_alloc_info = reinterpret_cast(allocator_data); - auto memory_alloc_info = resource_alloc_info->memory_info; - - if (memory_alloc_info != nullptr) - { - memory_alloc_info->original_images.erase(image); - } - - if (resource_alloc_info->mapped_pointer != nullptr) - { - vmaUnmapMemory(allocator_, resource_alloc_info->allocation); - } - - vmaDestroyImage(allocator_, image, resource_alloc_info->allocation); - + RemoveVmaMemoryInfo(*resource_alloc_info, VK_HANDLE_TO_UINT64(image)); delete resource_alloc_info; } + + vmaDestroyImage(allocator_, image, VK_NULL_HANDLE); } VkResult VulkanRebindAllocator::CreateVideoSession(const VkVideoSessionCreateInfoKHR* create_info, const VkAllocationCallbacks* allocation_callbacks, format::HandleId capture_id, VkVideoSessionKHR* session, - std::vector* allocator_datas) + ResourceData* allocator_data) { GFXRECON_UNREFERENCED_PARAMETER(allocation_callbacks); GFXRECON_UNREFERENCED_PARAMETER(capture_id); VkResult result = VK_ERROR_INITIALIZATION_FAILED; - if ((create_info != nullptr) && (session != nullptr) && (allocator_datas != nullptr)) + if ((create_info != nullptr) && (session != nullptr) && (allocator_data != nullptr)) { - result = functions_.create_video_session(device_, create_info, allocation_callbacks, session); + result = functions_.create_video_session(device_, create_info, allocator_->GetAllocationCallbacks(), session); if (result >= 0) { - uint32_t count = 0; - functions_.get_video_session_memory_requirements(device_, *session, &count, nullptr); - allocator_datas->resize(count); - for (auto& allocator_data : *allocator_datas) - { - auto resource_alloc_info = new ResourceAllocInfo; - resource_alloc_info->object_type = ObjectType::video_session; - allocator_data = reinterpret_cast(resource_alloc_info); + auto resource_alloc_info = new ResourceAllocInfo; + resource_alloc_info->object_type = VK_OBJECT_TYPE_VIDEO_SESSION_KHR; + (*allocator_data) = reinterpret_cast(resource_alloc_info); - if (create_info->pNext != nullptr) - { - resource_alloc_info->uses_extensions = true; - } + if (create_info->pNext != nullptr) + { + resource_alloc_info->uses_extensions = true; } } } @@ -404,38 +366,18 @@ VkResult VulkanRebindAllocator::CreateVideoSession(const VkVideoSessionCreateInf void VulkanRebindAllocator::DestroyVideoSession(VkVideoSessionKHR session, const VkAllocationCallbacks* allocation_callbacks, - std::vector allocator_datas) + ResourceData allocator_data) { - // TODO: VMA doesn't support video session(vmaDestroyVideoSession). Do it ourselves until VMA support it. GFXRECON_UNREFERENCED_PARAMETER(allocation_callbacks); + GFXRECON_ASSERT(session != VK_NULL_HANDLE); - uint32_t index = 0; - for (auto& allocator_data : allocator_datas) + if (allocator_data != 0) { - if (allocator_data != 0) - { - auto resource_alloc_info = reinterpret_cast(allocator_data); - auto memory_alloc_info = resource_alloc_info->memory_info; - - if (memory_alloc_info != nullptr) - { - memory_alloc_info->original_sessions.erase(session); - } - - if (resource_alloc_info->allocation != VK_NULL_HANDLE) - { - if (resource_alloc_info->mapped_pointer != nullptr) - { - vmaUnmapMemory(allocator_, resource_alloc_info->allocation); - } - allocator_->FreeMemory(1, &resource_alloc_info->allocation); - } - delete resource_alloc_info; - } - ++index; + auto* resource_alloc_info = reinterpret_cast(allocator_data); + RemoveVmaMemoryInfo(*resource_alloc_info, VK_HANDLE_TO_UINT64(session)); + delete resource_alloc_info; } - allocator_datas.clear(); - GFXRECON_ASSERT(session != VK_NULL_HANDLE); + functions_.destroy_video_session(allocator_->m_hDevice, session, allocator_->GetAllocationCallbacks()); } @@ -445,10 +387,14 @@ void VulkanRebindAllocator::GetBufferMemoryRequirements(VkBuffer bu { if (allocator_data != 0) { - auto resource_alloc_info = reinterpret_cast(allocator_data); - resource_alloc_info->original_size = memory_requirements->size; - } + auto resource_alloc_info = reinterpret_cast(allocator_data); + if (resource_alloc_info->capture_mem_reqs.empty()) + { + resource_alloc_info->capture_mem_reqs.resize(1); + } + resource_alloc_info->capture_mem_reqs[0] = *memory_requirements; + } functions_.get_buffer_memory_requirements(device_, buffer, memory_requirements); } @@ -458,10 +404,14 @@ void VulkanRebindAllocator::GetBufferMemoryRequirements2(const VkBufferMemoryReq { if (allocator_data != 0) { - auto resource_alloc_info = reinterpret_cast(allocator_data); - resource_alloc_info->original_size = memory_requirements->memoryRequirements.size; - } + auto resource_alloc_info = reinterpret_cast(allocator_data); + if (resource_alloc_info->capture_mem_reqs.empty()) + { + resource_alloc_info->capture_mem_reqs.resize(1); + } + resource_alloc_info->capture_mem_reqs[0] = memory_requirements->memoryRequirements; + } functions_.get_buffer_memory_requirements2(device_, info, memory_requirements); } @@ -504,10 +454,14 @@ void VulkanRebindAllocator::GetImageMemoryRequirements(VkImage ima { if (allocator_data != 0) { - auto resource_alloc_info = reinterpret_cast(allocator_data); - resource_alloc_info->original_size = memory_requirements->size; - } + auto resource_alloc_info = reinterpret_cast(allocator_data); + if (resource_alloc_info->capture_mem_reqs.empty()) + { + resource_alloc_info->capture_mem_reqs.resize(1); + } + resource_alloc_info->capture_mem_reqs[0] = *memory_requirements; + } functions_.get_image_memory_requirements(device_, image, memory_requirements); } @@ -517,10 +471,14 @@ void VulkanRebindAllocator::GetImageMemoryRequirements2(const VkImageMemoryRequi { if (allocator_data != 0) { - auto resource_alloc_info = reinterpret_cast(allocator_data); - resource_alloc_info->original_size = memory_requirements->memoryRequirements.size; - } + auto resource_alloc_info = reinterpret_cast(allocator_data); + if (resource_alloc_info->capture_mem_reqs.empty()) + { + resource_alloc_info->capture_mem_reqs.resize(1); + } + resource_alloc_info->capture_mem_reqs[0] = memory_requirements->memoryRequirements; + } functions_.get_image_memory_requirements2(device_, info, memory_requirements); } @@ -528,21 +486,19 @@ VkResult VulkanRebindAllocator::GetVideoSessionMemoryRequirementsKHR(VkVideoSessionKHR video_session, uint32_t* memory_requirements_count, VkVideoSessionMemoryRequirementsKHR* memory_requirements, - std::vector allocator_datas) + ResourceData allocator_data) { - if (memory_requirements != nullptr) + if (allocator_data != 0 && *memory_requirements_count > 0) { - GFXRECON_ASSERT(*memory_requirements_count == allocator_datas.size()); + auto resource_alloc_info = reinterpret_cast(allocator_data); + + resource_alloc_info->capture_mem_reqs.resize(*memory_requirements_count); + for (uint32_t i = 0; i < *memory_requirements_count; ++i) { - if (allocator_datas[i] != 0) - { - auto resource_alloc_info = reinterpret_cast(allocator_datas[i]); - resource_alloc_info->original_size = memory_requirements[i].memoryRequirements.size; - } + resource_alloc_info->capture_mem_reqs[i] = memory_requirements[i].memoryRequirements; } } - return functions_.get_video_session_memory_requirements( device_, video_session, memory_requirements_count, memory_requirements); } @@ -565,8 +521,10 @@ VkResult VulkanRebindAllocator::AllocateMemory(const VkMemoryAllocateInfo* allo // memory allocation that will be used to reconstruct the content of the original memory object. The // reconstructed data will be used to populate the memory allocations created by VMA. auto memory_alloc_info = new MemoryAllocInfo; + memory_alloc_info->capture_id = capture_id; memory_alloc_info->allocation_size = allocate_info->allocationSize; memory_alloc_info->original_index = allocate_info->memoryTypeIndex; + memory_alloc_info->is_free = false; (*memory) = format::FromHandleId(kPlaceholderHandleId); (*allocator_data) = reinterpret_cast(memory_alloc_info); @@ -597,36 +555,162 @@ void VulkanRebindAllocator::FreeMemory(VkDeviceMemory memory, if (memory_alloc_info->ahb) { - functions_.free_memory(device_, memory_alloc_info->ahb_memory, nullptr); + functions_.free_memory(device_, memory_alloc_info->ahb_memory, allocator_->GetAllocationCallbacks()); } + memory_alloc_info->is_free = true; - for (const auto& entry : memory_alloc_info->original_buffers) + // All objects are destroyed and the memory is freed, so delete the MemoryAllocInfo. + if (memory_alloc_info->original_objects.empty()) { - entry.second->memory_info = nullptr; + delete memory_alloc_info; } + } +} + +VkResult +VulkanRebindAllocator::AllocateMemoryForBuffer(VkBuffer buffer, + VkDeviceSize memory_offset, + const VkPhysicalDeviceMemoryProperties& device_memory_properties, + ResourceAllocInfo& resource_alloc_info, + MemoryAllocInfo& memory_alloc_info, + VmaMemoryInfo** vma_mem_info) +{ + VkMemoryRequirements capture_req = {}; + if (resource_alloc_info.capture_mem_reqs.size() > 0) + { + capture_req = resource_alloc_info.capture_mem_reqs[0]; + } - for (const auto& entry : memory_alloc_info->original_images) + VkMemoryRequirements replay_req = {}; + bool requires_dedicated_allocation = false; + bool prefers_dedicated_allocation = false; + allocator_->GetBufferMemoryRequirements( + buffer, replay_req, requires_dedicated_allocation, prefers_dedicated_allocation); + + replay_req.alignment = std::max(replay_req.alignment, min_buffer_alignment_); + + VmaAllocationCreateInfo create_info{}; + create_info.flags = 0; + create_info.usage = + GetBufferMemoryUsage(resource_alloc_info.usage, + device_memory_properties.memoryTypes[memory_alloc_info.original_index].propertyFlags, + replay_req); + create_info.requiredFlags = 0; + create_info.preferredFlags = 0; + create_info.memoryTypeBits = 0; + create_info.pool = VK_NULL_HANDLE; + create_info.pUserData = nullptr; + + if (FindVmaMemoryInfo(memory_alloc_info, + memory_offset, + capture_req, + replay_req, + requires_dedicated_allocation, + prefers_dedicated_allocation, + create_info, + vma_mem_info)) + { + return VK_SUCCESS; + } + + VmaMemoryInfo mem_info = {}; + mem_info.memory_info = &memory_alloc_info; + mem_info.capture_mem_req = capture_req; + mem_info.replay_mem_req = replay_req; + mem_info.requires_dedicated_allocation = requires_dedicated_allocation; + mem_info.prefers_dedicated_allocation = prefers_dedicated_allocation; + mem_info.alc_create_info = create_info; + mem_info.offset_from_original_device_memory = memory_offset; + + auto result = + vmaAllocateMemoryForBuffer(allocator_, buffer, &create_info, &mem_info.allocation, &mem_info.allocation_info); + + if (result >= 0) + { + memory_alloc_info.vma_mem_infos.emplace_back(std::make_unique(mem_info)); + *vma_mem_info = memory_alloc_info.vma_mem_infos.back().get(); + } + return result; +} + +void VulkanRebindAllocator::UpdateAllocInfo(ResourceAllocInfo& resource_alloc_info, + uint64_t object_handle, + MemoryInfoType memory_info_type, + MemoryAllocInfo& memory_alloc_info, + VmaMemoryInfo& vma_mem_info, + VkMemoryPropertyFlags& bind_memory_property) +{ + resource_alloc_info.memory_info_type = memory_info_type; + + switch (memory_info_type) + { + case MemoryInfoType::kBasic: { - entry.second->memory_info = nullptr; + if (resource_alloc_info.bound_memory_infos.empty()) + { + resource_alloc_info.bound_memory_infos.resize(1); + } + resource_alloc_info.bound_memory_infos[0] = &vma_mem_info; + ++vma_mem_info.reference_count; + break; } - - for (const auto& entry : memory_alloc_info->original_sessions) + case MemoryInfoType::kSparse: + case MemoryInfoType::kVideoSession: { - entry.second->memory_info = nullptr; + bool is_found = false; + for (const auto& mem_info : resource_alloc_info.bound_memory_infos) + { + if (mem_info == &vma_mem_info) + { + is_found = true; + break; + } + } + + if (!is_found) + { + resource_alloc_info.bound_memory_infos.push_back(&vma_mem_info); + ++vma_mem_info.reference_count; + } + break; } + default: + break; + } - delete memory_alloc_info; + VkMemoryPropertyFlags property_flags = + replay_memory_properties_.memoryTypes[vma_mem_info.allocation_info.memoryType].propertyFlags; + + if ((property_flags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) + { + vma_mem_info.is_host_visible = true; } -} -void VulkanRebindAllocator::GetDeviceMemoryCommitment(VkDeviceMemory memory, - VkDeviceSize* committed_memory_in_bytes, - MemoryData allocator_data) -{ - // We don't have a valid memory handle for this call. - GFXRECON_UNREFERENCED_PARAMETER(memory); - GFXRECON_UNREFERENCED_PARAMETER(committed_memory_in_bytes); - GFXRECON_UNREFERENCED_PARAMETER(allocator_data); + memory_alloc_info.original_objects.insert(std::make_pair(object_handle, &resource_alloc_info)); + + if (memory_alloc_info.original_content != nullptr) + { + // Memory has been mapped and written prior to bind. Copy the original content to the new + // allocation to ensure it contains the correct data. + + // If the buffer is bigger at replay time than at capture time, you don't want to read + // memory_alloc_info->original_content out of bounds + VkDeviceSize copy_size = + std::min(vma_mem_info.allocation_info.size, + memory_alloc_info.allocation_size - vma_mem_info.offset_from_original_device_memory); + + WriteBoundResource(&resource_alloc_info, + &vma_mem_info, + vma_mem_info.offset_from_original_device_memory, + 0, + copy_size, + memory_alloc_info.original_content.get()); + } + + bind_memory_property = property_flags; + + SetBindingDebugUtilsNameAndTag( + &memory_alloc_info, &resource_alloc_info, vma_mem_info.allocation_info.deviceMemory, object_handle); } VkResult VulkanRebindAllocator::BindBufferMemory(VkBuffer buffer, @@ -644,75 +728,36 @@ VkResult VulkanRebindAllocator::BindBufferMemory(VkBuffer if ((buffer != VK_NULL_HANDLE) && (allocator_buffer_data != 0) && (allocator_memory_data != 0) && (bind_memory_properties != nullptr)) { - VmaAllocation allocation = VK_NULL_HANDLE; - auto resource_alloc_info = reinterpret_cast(allocator_buffer_data); - auto memory_alloc_info = reinterpret_cast(allocator_memory_data); - - VkMemoryRequirements requirements; - functions_.get_buffer_memory_requirements(device_, buffer, &requirements); - requirements.alignment = std::max(requirements.alignment, min_buffer_alignment_); - - VmaAllocationCreateInfo create_info; - create_info.flags = 0; - create_info.usage = - GetBufferMemoryUsage(resource_alloc_info->usage, - device_memory_properties.memoryTypes[memory_alloc_info->original_index].propertyFlags, - requirements); - create_info.requiredFlags = 0; - create_info.preferredFlags = 0; - create_info.memoryTypeBits = 0; - create_info.pool = VK_NULL_HANDLE; - create_info.pUserData = nullptr; - - VmaAllocationInfo allocation_info; - result = vmaAllocateMemoryForBuffer(allocator_, buffer, &create_info, &allocation, &allocation_info); + auto resource_alloc_info = reinterpret_cast(allocator_buffer_data); + auto memory_alloc_info = reinterpret_cast(allocator_memory_data); + VmaMemoryInfo* vma_mem_info = nullptr; + + result = AllocateMemoryForBuffer( + buffer, memory_offset, device_memory_properties, *resource_alloc_info, *memory_alloc_info, &vma_mem_info); if (result >= 0) { - result = vmaBindBufferMemory(allocator_, allocation, buffer); - - if (result >= 0) - { - resource_alloc_info->allocation = allocation; - resource_alloc_info->mapped_pointer = nullptr; - resource_alloc_info->memory_info = memory_alloc_info; - resource_alloc_info->original_offset = memory_offset; - resource_alloc_info->rebind_offset = allocation_info.offset; - resource_alloc_info->rebind_size = allocation_info.size; + GFXRECON_ASSERT(vma_mem_info); - VkMemoryPropertyFlags property_flags = - replay_memory_properties_.memoryTypes[allocation_info.memoryType].propertyFlags; + auto offset = GetRebindOffsetFromVMA(memory_offset, *vma_mem_info); - if ((property_flags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) - { - resource_alloc_info->is_host_visible = true; - } - - memory_alloc_info->original_buffers.insert(std::make_pair(buffer, resource_alloc_info)); - - if (memory_alloc_info->original_content != nullptr) - { - // Memory has been mapped and written prior to bind. Copy the original content to the new - // allocation to ensure it contains the correct data. - - // If the buffer is bigger at replay time than at capture time, you don't want to read - // memory_alloc_info->original_content out of bounds - VkDeviceSize copy_size = - std::min(allocation_info.size, memory_alloc_info->allocation_size - memory_offset); - - WriteBoundResource( - resource_alloc_info, memory_offset, 0, copy_size, memory_alloc_info->original_content.get()); - } + result = vmaBindBufferMemory2(allocator_, vma_mem_info->allocation, offset, buffer, nullptr); - (*bind_memory_properties) = property_flags; - - SetBindingDebugUtilsNameAndTag(memory_alloc_info, - resource_alloc_info, - allocation_info.deviceMemory, - VK_OBJECT_TYPE_BUFFER, - VK_HANDLE_TO_UINT64(buffer)); + if (result >= 0) + { + UpdateAllocInfo(*resource_alloc_info, + VK_HANDLE_TO_UINT64(buffer), + MemoryInfoType::kBasic, + *memory_alloc_info, + *vma_mem_info, + *bind_memory_properties); } } + else + { + GFXRECON_LOG_WARNING("AllocateMemory failed: %s in Rebind BindBufferMemory.", + util::ToString(result).c_str()); + } } return result; @@ -737,81 +782,42 @@ VkResult VulkanRebindAllocator::BindBufferMemory2(uint32_t if ((buffer != VK_NULL_HANDLE) && (allocator_buffer_data != 0) && (allocator_memory_data != 0)) { - VmaAllocation allocation = VK_NULL_HANDLE; - auto resource_alloc_info = reinterpret_cast(allocator_buffer_data); - auto memory_alloc_info = reinterpret_cast(allocator_memory_data); - - VkMemoryRequirements requirements; - functions_.get_buffer_memory_requirements(device_, buffer, &requirements); - requirements.alignment = std::max(requirements.alignment, min_buffer_alignment_); - - VmaAllocationCreateInfo create_info; - create_info.flags = 0; - create_info.usage = GetBufferMemoryUsage( - resource_alloc_info->usage, - capture_memory_properties_.memoryTypes[memory_alloc_info->original_index].propertyFlags, - requirements); - create_info.requiredFlags = 0; - create_info.preferredFlags = 0; - create_info.memoryTypeBits = 0; - create_info.pool = VK_NULL_HANDLE; - create_info.pUserData = nullptr; - - VmaAllocationInfo allocation_info; - result = vmaAllocateMemoryForBuffer(allocator_, buffer, &create_info, &allocation, &allocation_info); + auto resource_alloc_info = reinterpret_cast(allocator_buffer_data); + auto memory_alloc_info = reinterpret_cast(allocator_memory_data); + VmaMemoryInfo* vma_mem_info = nullptr; + + result = AllocateMemoryForBuffer(buffer, + bind_infos[i].memoryOffset, + capture_memory_properties_, + *resource_alloc_info, + *memory_alloc_info, + &vma_mem_info); if (result >= 0) { + GFXRECON_ASSERT(vma_mem_info); + auto bind_info = &bind_infos[i]; + auto offset = GetRebindOffsetFromVMA(bind_info->memoryOffset, *vma_mem_info); - result = vmaBindBufferMemory2(allocator_, allocation, 0, buffer, bind_info->pNext); + result = + vmaBindBufferMemory2(allocator_, vma_mem_info->allocation, offset, buffer, bind_info->pNext); if (result >= 0) { - resource_alloc_info->allocation = allocation; - resource_alloc_info->mapped_pointer = nullptr; - resource_alloc_info->memory_info = memory_alloc_info; - resource_alloc_info->original_offset = bind_info->memoryOffset; - resource_alloc_info->rebind_offset = allocation_info.offset; - resource_alloc_info->rebind_size = allocation_info.size; - - VkMemoryPropertyFlags property_flags = - replay_memory_properties_.memoryTypes[allocation_info.memoryType].propertyFlags; - - if ((property_flags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == - VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) - { - resource_alloc_info->is_host_visible = true; - } - - if (memory_alloc_info->original_content != nullptr) - { - // Memory has been mapped and written prior to bind. Copy the original content to the new - // allocation to ensure it contains the correct data. - - // If the buffer is bigger at replay time than at capture time, you don't want to read - // memory_alloc_info->original_content out of bounds - VkDeviceSize copy_size = std::min( - allocation_info.size, memory_alloc_info->allocation_size - bind_info->memoryOffset); - - WriteBoundResource(resource_alloc_info, - bind_info->memoryOffset, - 0, - copy_size, - memory_alloc_info->original_content.get()); - } - - memory_alloc_info->original_buffers.insert(std::make_pair(buffer, resource_alloc_info)); - - bind_memory_properties[i] = property_flags; - - SetBindingDebugUtilsNameAndTag(memory_alloc_info, - resource_alloc_info, - allocation_info.deviceMemory, - VK_OBJECT_TYPE_BUFFER, - VK_HANDLE_TO_UINT64(buffer)); + UpdateAllocInfo(*resource_alloc_info, + VK_HANDLE_TO_UINT64(buffer), + MemoryInfoType::kBasic, + *memory_alloc_info, + *vma_mem_info, + bind_memory_properties[i]); } } + else + { + GFXRECON_LOG_WARNING("AllocateMemory failed: %s in Rebind BindBufferMemory2.", + util::ToString(result).c_str()); + } } } } @@ -821,6 +827,8 @@ VkResult VulkanRebindAllocator::BindBufferMemory2(uint32_t VkResult VulkanRebindAllocator::AllocateAHBMemory(MemoryAllocInfo* memory_alloc_info, const VkImage image) { + GFXRECON_ASSERT(memory_alloc_info->ahb != nullptr); + VkImportAndroidHardwareBufferInfoANDROID importAHBInfo; importAHBInfo.sType = VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID; importAHBInfo.pNext = nullptr; @@ -831,17 +839,20 @@ VkResult VulkanRebindAllocator::AllocateAHBMemory(MemoryAllocInfo* memory_alloc_ dedicatedAllocateInfo.pNext = &importAHBInfo; dedicatedAllocateInfo.image = image; - VkMemoryRequirements memoryRequirements; - functions_.get_image_memory_requirements(device_, image, &memoryRequirements); + VkAndroidHardwareBufferPropertiesANDROID androidHardwareBufferProperties; + androidHardwareBufferProperties.sType = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID; + androidHardwareBufferProperties.pNext = nullptr; + functions_.get_android_hardware_buffer_properties( + device_, memory_alloc_info->ahb, &androidHardwareBufferProperties); VkMemoryAllocateInfo allocate_info{}; allocate_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; allocate_info.pNext = &dedicatedAllocateInfo; - allocate_info.allocationSize = std::max(memory_alloc_info->allocation_size, memoryRequirements.size); + allocate_info.allocationSize = androidHardwareBufferProperties.allocationSize; allocate_info.memoryTypeIndex = replay_memory_properties_.memoryTypeCount; for (uint32_t i = 0; i < replay_memory_properties_.memoryTypeCount; ++i) { - if ((memoryRequirements.memoryTypeBits & (1 << i)) && + if ((androidHardwareBufferProperties.memoryTypeBits & (1 << i)) && (replay_memory_properties_.memoryTypes[i].propertyFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) == VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) { @@ -853,6 +864,82 @@ VkResult VulkanRebindAllocator::AllocateAHBMemory(MemoryAllocInfo* memory_alloc_ return result; } +VkResult VulkanRebindAllocator::AllocateMemoryForImage(VkImage image, + VkDeviceSize memory_offset, + const VkPhysicalDeviceMemoryProperties& device_memory_properties, + ResourceAllocInfo& resource_alloc_info, + MemoryAllocInfo& memory_alloc_info, + VmaMemoryInfo** vma_mem_info) +{ + VkMemoryRequirements capture_req = {}; + if (resource_alloc_info.capture_mem_reqs.size() > 0) + { + capture_req = resource_alloc_info.capture_mem_reqs[0]; + } + + VkMemoryRequirements replay_req = {}; + bool requires_dedicated_allocation = false; + bool prefers_dedicated_allocation = false; + allocator_->GetImageMemoryRequirements( + image, replay_req, requires_dedicated_allocation, prefers_dedicated_allocation); + + VmaAllocationCreateInfo create_info{}; + create_info.flags = 0; + create_info.usage = + GetImageMemoryUsage(resource_alloc_info.usage, + resource_alloc_info.tiling, + device_memory_properties.memoryTypes[memory_alloc_info.original_index].propertyFlags, + replay_req); + create_info.requiredFlags = 0; + create_info.preferredFlags = 0; + create_info.memoryTypeBits = 0; + create_info.pool = VK_NULL_HANDLE; + create_info.pUserData = nullptr; + + if (FindVmaMemoryInfo(memory_alloc_info, + memory_offset, + capture_req, + replay_req, + requires_dedicated_allocation, + prefers_dedicated_allocation, + create_info, + vma_mem_info)) + { + return VK_SUCCESS; + } + + VmaMemoryInfo mem_info = {}; + mem_info.memory_info = &memory_alloc_info; + mem_info.capture_mem_req = capture_req; + mem_info.replay_mem_req = replay_req; + mem_info.requires_dedicated_allocation = requires_dedicated_allocation; + mem_info.prefers_dedicated_allocation = prefers_dedicated_allocation; + mem_info.alc_create_info = create_info; + mem_info.offset_from_original_device_memory = memory_offset; + + auto result = + vmaAllocateMemoryForImage(allocator_, image, &create_info, &mem_info.allocation, &mem_info.allocation_info); + + if (result >= 0) + { + memory_alloc_info.vma_mem_infos.emplace_back(std::make_unique(mem_info)); + *vma_mem_info = memory_alloc_info.vma_mem_infos.back().get(); + } + return result; +} + +VkDeviceSize VulkanRebindAllocator::GetRebindOffsetFromVMA(VkDeviceSize original_offset, + const VmaMemoryInfo& vma_mem_info) +{ + return original_offset - vma_mem_info.offset_from_original_device_memory; +} + +VkDeviceSize VulkanRebindAllocator::GetRebindOffsetFromOriginalDeviceMemory(VkDeviceSize original_offset, + const VmaMemoryInfo& vma_mem_info) +{ + return GetRebindOffsetFromVMA(original_offset, vma_mem_info) + vma_mem_info.allocation_info.offset; +} + VkResult VulkanRebindAllocator::BindImageMemory(VkImage image, VkDeviceMemory memory, VkDeviceSize memory_offset, @@ -881,77 +968,39 @@ VkResult VulkanRebindAllocator::BindImageMemory(VkImage } else { - VmaAllocation allocation = VK_NULL_HANDLE; - auto resource_alloc_info = reinterpret_cast(allocator_image_data); - - VkMemoryRequirements requirements; - functions_.get_image_memory_requirements(device_, image, &requirements); + auto resource_alloc_info = reinterpret_cast(allocator_image_data); + VmaMemoryInfo* vma_mem_info = nullptr; - VmaAllocationCreateInfo create_info; - create_info.flags = 0; - create_info.usage = GetImageMemoryUsage( - resource_alloc_info->usage, - resource_alloc_info->tiling, - device_memory_properties.memoryTypes[memory_alloc_info->original_index].propertyFlags, - requirements); - create_info.requiredFlags = 0; - create_info.preferredFlags = 0; - create_info.memoryTypeBits = 0; - create_info.pool = VK_NULL_HANDLE; - create_info.pUserData = nullptr; - - VmaAllocationInfo allocation_info; - result = vmaAllocateMemoryForImage(allocator_, image, &create_info, &allocation, &allocation_info); + result = AllocateMemoryForImage(image, + memory_offset, + device_memory_properties, + *resource_alloc_info, + *memory_alloc_info, + &vma_mem_info); if (result >= 0) { - result = vmaBindImageMemory(allocator_, allocation, image); - - if (result >= 0) - { - resource_alloc_info->allocation = allocation; - resource_alloc_info->mapped_pointer = nullptr; - resource_alloc_info->memory_info = memory_alloc_info; - resource_alloc_info->original_offset = memory_offset; - resource_alloc_info->rebind_offset = allocation_info.offset; - resource_alloc_info->rebind_size = allocation_info.size; - - VkMemoryPropertyFlags property_flags = - replay_memory_properties_.memoryTypes[allocation_info.memoryType].propertyFlags; - - if ((property_flags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) - { - resource_alloc_info->is_host_visible = true; - } + GFXRECON_ASSERT(vma_mem_info); - memory_alloc_info->original_images.insert(std::make_pair(image, resource_alloc_info)); + auto offset = GetRebindOffsetFromVMA(memory_offset, *vma_mem_info); - if (memory_alloc_info->original_content != nullptr) - { - // Memory has been mapped and written prior to bind. Copy the original content to the new - // allocation to ensure it contains the correct data. - - // If the image is bigger at replay time than at capture time, you don't want to read - // memory_alloc_info->original_content out of bounds - VkDeviceSize copy_size = - std::min(allocation_info.size, memory_alloc_info->allocation_size - memory_offset); - - WriteBoundResource(resource_alloc_info, - memory_offset, - 0, - copy_size, - memory_alloc_info->original_content.get()); - } + result = vmaBindImageMemory2(allocator_, vma_mem_info->allocation, offset, image, nullptr); - (*bind_memory_properties) = property_flags; - - SetBindingDebugUtilsNameAndTag(memory_alloc_info, - resource_alloc_info, - allocation_info.deviceMemory, - VK_OBJECT_TYPE_IMAGE, - VK_HANDLE_TO_UINT64(image)); + if (result >= 0) + { + UpdateAllocInfo(*resource_alloc_info, + VK_HANDLE_TO_UINT64(image), + MemoryInfoType::kBasic, + *memory_alloc_info, + *vma_mem_info, + *bind_memory_properties); } } + else + { + GFXRECON_LOG_WARNING("AllocateMemory failed: %s in Rebind BindImageMemory.", + util::ToString(result).c_str()); + } } } @@ -977,11 +1026,11 @@ VkResult VulkanRebindAllocator::BindImageMemory2(uint32_t bi if ((image != VK_NULL_HANDLE) && (allocator_image_data != 0) && (allocator_memory_data != 0)) { - auto memory_alloc_info = reinterpret_cast(allocator_memory_data); + auto memory_alloc_info = reinterpret_cast(allocator_memory_data); + VkDeviceSize memory_offset = bind_infos[i].memoryOffset; + if (memory_alloc_info->ahb) { - VkDeviceSize memory_offset = bind_infos[i].memoryOffset; - result = AllocateAHBMemory(memory_alloc_info, image); if (result >= 0) @@ -997,80 +1046,42 @@ VkResult VulkanRebindAllocator::BindImageMemory2(uint32_t bi } else { - VmaAllocation allocation = VK_NULL_HANDLE; - auto resource_alloc_info = reinterpret_cast(allocator_image_data); - - VkMemoryRequirements requirements; - functions_.get_image_memory_requirements(device_, image, &requirements); - - VmaAllocationCreateInfo create_info; - create_info.flags = 0; - create_info.usage = GetImageMemoryUsage( - resource_alloc_info->usage, - resource_alloc_info->tiling, - capture_memory_properties_.memoryTypes[memory_alloc_info->original_index].propertyFlags, - requirements); - create_info.requiredFlags = 0; - create_info.preferredFlags = 0; - create_info.memoryTypeBits = 0; - create_info.pool = VK_NULL_HANDLE; - create_info.pUserData = nullptr; - - VmaAllocationInfo allocation_info; - result = vmaAllocateMemoryForImage(allocator_, image, &create_info, &allocation, &allocation_info); + auto resource_alloc_info = reinterpret_cast(allocator_image_data); + VmaMemoryInfo* vma_mem_info = nullptr; + + result = AllocateMemoryForImage(image, + memory_offset, + capture_memory_properties_, + *resource_alloc_info, + *memory_alloc_info, + &vma_mem_info); if (result >= 0) { + GFXRECON_ASSERT(vma_mem_info); + auto bind_info = &bind_infos[i]; - result = vmaBindImageMemory2(allocator_, allocation, 0, image, bind_info->pNext); + auto offset = GetRebindOffsetFromVMA(memory_offset, *vma_mem_info); + + result = + vmaBindImageMemory2(allocator_, vma_mem_info->allocation, offset, image, bind_info->pNext); if (result >= 0) { - resource_alloc_info->allocation = allocation; - resource_alloc_info->mapped_pointer = nullptr; - resource_alloc_info->memory_info = memory_alloc_info; - resource_alloc_info->original_offset = bind_info->memoryOffset; - resource_alloc_info->rebind_offset = allocation_info.offset; - resource_alloc_info->rebind_size = allocation_info.size; - - VkMemoryPropertyFlags property_flags = - replay_memory_properties_.memoryTypes[allocation_info.memoryType].propertyFlags; - - if ((property_flags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == - VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) - { - resource_alloc_info->is_host_visible = true; - } - - if (memory_alloc_info->original_content != nullptr) - { - // Memory has been mapped and written prior to bind. Copy the original content to the - // new allocation to ensure it contains the correct data. - - // If the image is bigger at replay time than at capture time, you don't want to read - // memory_alloc_info->original_content out of bounds - VkDeviceSize copy_size = std::min( - allocation_info.size, memory_alloc_info->allocation_size - bind_info->memoryOffset); - - WriteBoundResource(resource_alloc_info, - bind_info->memoryOffset, - 0, - copy_size, - memory_alloc_info->original_content.get()); - } - - memory_alloc_info->original_images.insert(std::make_pair(image, resource_alloc_info)); - - bind_memory_properties[i] = property_flags; - - SetBindingDebugUtilsNameAndTag(memory_alloc_info, - resource_alloc_info, - allocation_info.deviceMemory, - VK_OBJECT_TYPE_IMAGE, - VK_HANDLE_TO_UINT64(image)); + UpdateAllocInfo(*resource_alloc_info, + VK_HANDLE_TO_UINT64(image), + MemoryInfoType::kBasic, + *memory_alloc_info, + *vma_mem_info, + bind_memory_properties[i]); } } + else + { + GFXRECON_LOG_WARNING("AllocateMemory failed: %s in Rebind BindImageMemory2.", + util::ToString(result).c_str()); + } } } } @@ -1082,166 +1093,105 @@ VkResult VulkanRebindAllocator::BindImageMemory2(uint32_t bi VkResult VulkanRebindAllocator::BindVideoSessionMemory(VkVideoSessionKHR video_session, uint32_t bind_info_count, const VkBindVideoSessionMemoryInfoKHR* bind_infos, - const ResourceData* allocator_session_datas, + const ResourceData allocator_session_data, const MemoryData* allocator_memory_datas, VkMemoryPropertyFlags* bind_memory_properties) { - // TODO: VMA doesn't support video session(vmaAllocateMemoryForVideoSession and vmaBindVideoSessionMemory). - // Do it ourselves until VMA support it. VkResult result = VK_ERROR_INITIALIZATION_FAILED; - if ((video_session != VK_NULL_HANDLE) && (bind_infos != nullptr) && (allocator_session_datas != nullptr) && + if ((video_session != VK_NULL_HANDLE) && (bind_infos != nullptr) && (allocator_session_data != 0) && (allocator_memory_datas != nullptr) && (bind_memory_properties != nullptr)) { - uint32_t session_requirements_count = 0; - functions_.get_video_session_memory_requirements(device_, video_session, &session_requirements_count, nullptr); + uint32_t replay_req_count = 0; + functions_.get_video_session_memory_requirements(device_, video_session, &replay_req_count, nullptr); VkVideoSessionMemoryRequirementsKHR reqs = {}; reqs.sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_MEMORY_REQUIREMENTS_KHR; - std::vector session_requirements(session_requirements_count, reqs); - functions_.get_video_session_memory_requirements( - device_, video_session, &session_requirements_count, session_requirements.data()); + std::vector replay_reqs(replay_req_count, reqs); + functions_.get_video_session_memory_requirements(device_, video_session, &replay_req_count, replay_reqs.data()); + + auto resource_alloc_info = reinterpret_cast(allocator_session_data); // Use replay MemoryRequeirements to AllocateMemory and Bind. - for (uint32_t mem_index = 0; mem_index < session_requirements_count; ++mem_index) + for (uint32_t bind_i = 0; bind_i < bind_info_count; ++bind_i) { - uintptr_t allocator_session_data = allocator_session_datas[mem_index]; - uintptr_t allocator_memory_data = allocator_memory_datas[mem_index]; + uintptr_t allocator_memory_data = allocator_memory_datas[bind_i]; + if (allocator_memory_data == 0) + { + continue; + } + + auto* memory_alloc_info = reinterpret_cast(allocator_memory_data); + const auto& bind_info = bind_infos[bind_i]; + auto replay_req = replay_reqs[bind_info.memoryBindIndex].memoryRequirements; - if (allocator_session_data != 0) + auto usage = GetVideoSessionMemoryUsage( + capture_memory_properties_.memoryTypes[memory_alloc_info->original_index].propertyFlags, replay_req); + + VkMemoryRequirements capture_req = {}; + if (resource_alloc_info->capture_mem_reqs.size() > bind_info.memoryBindIndex) { - VmaAllocation allocation = VK_NULL_HANDLE; - auto resource_alloc_info = reinterpret_cast(allocator_session_data); + capture_req = resource_alloc_info->capture_mem_reqs[bind_info.memoryBindIndex]; + } - // if allocator_memory_data is 0, it means replay MemoryRequirements has more count. - MemoryAllocInfo* memory_alloc_info = (allocator_memory_data == 0) - ? new MemoryAllocInfo - : reinterpret_cast(allocator_memory_data); + VmaMemoryInfo* vma_mem_info = nullptr; + + auto result = VmaAllocateMemory(*memory_alloc_info, + bind_info.memoryOffset, + capture_req, + replay_req, + false, + false, + VK_NULL_HANDLE, + VK_NULL_HANDLE, + usage, + &vma_mem_info); + if (result >= 0) + { + GFXRECON_ASSERT(vma_mem_info); - auto requirements = session_requirements[mem_index].memoryRequirements; - if (allocator_memory_data == 0) - { - memory_alloc_info->allocation_size = requirements.size; - memory_alloc_info->original_index = requirements.memoryTypeBits; - } - VmaAllocationCreateInfo create_info; - create_info.flags = 0; - create_info.usage = GetVideoSeesionMemoryUsage( - capture_memory_properties_.memoryTypes[memory_alloc_info->original_index].propertyFlags, - requirements); - create_info.requiredFlags = 0; - create_info.preferredFlags = 0; - create_info.memoryTypeBits = 0; - create_info.pool = VK_NULL_HANDLE; - create_info.pUserData = nullptr; - - VmaAllocationInfo allocation_info; - result = allocator_->AllocateMemory(session_requirements[mem_index].memoryRequirements, - false, - false, - VK_NULL_HANDLE, // dedicatedBuffer - VK_NULL_HANDLE, // dedicatedImage - VmaBufferImageUsage::UNKNOWN, // dedicatedBufferImageUsage - create_info, - VMA_SUBALLOCATION_TYPE_FREE, - 1, // allocationCount - &allocation); - - if (result == VK_SUCCESS) - { - allocator_->GetAllocationInfo(allocation, &allocation_info); - } + VkBindVideoSessionMemoryInfoKHR modified_bind_info = bind_info; + modified_bind_info.memory = vma_mem_info->allocation_info.deviceMemory; + modified_bind_info.memoryOffset = + GetRebindOffsetFromOriginalDeviceMemory(bind_info.memoryOffset, *vma_mem_info); - if (result >= 0) + switch (vma_mem_info->allocation->GetType()) { - VkBindVideoSessionMemoryInfoKHR modified_bind_info{}; - modified_bind_info.sType = VK_STRUCTURE_TYPE_BIND_VIDEO_SESSION_MEMORY_INFO_KHR; - modified_bind_info.memoryBindIndex = mem_index; - modified_bind_info.memoryOffset = 0; - modified_bind_info.memorySize = session_requirements[mem_index].memoryRequirements.size; - - switch (allocation->GetType()) + case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED: { - case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED: - { - modified_bind_info.memory = allocation->GetMemory(); - result = - functions_.bind_video_session_memory(device_, video_session, 1, &modified_bind_info); - break; - } - case VmaAllocation_T::ALLOCATION_TYPE_BLOCK: - { - VmaDeviceMemoryBlock* const pBlock = allocation->GetBlock(); - VMA_ASSERT(pBlock && - "Binding Video Seesion to allocation that doesn't belong to any block."); - - // This lock is important so that we don't call vkBind... and/or vkMap... simultaneously - // on the same VkDeviceMemory from multiple threads. - VmaMutexLock lock(pBlock->m_MapAndBindMutex, allocator_->m_UseMutex); - modified_bind_info.memory = pBlock->m_hMemory; - modified_bind_info.memoryOffset += allocation->GetOffset(); - result = - functions_.bind_video_session_memory(device_, video_session, 1, &modified_bind_info); - break; - } - default: - VMA_ASSERT(0); + result = functions_.bind_video_session_memory(device_, video_session, 1, &modified_bind_info); + break; } - - if (result >= 0) + case VmaAllocation_T::ALLOCATION_TYPE_BLOCK: { - resource_alloc_info->allocation = allocation; - resource_alloc_info->mapped_pointer = nullptr; - resource_alloc_info->memory_info = memory_alloc_info; - - // The new bind_infos's index and captured bind_infos's index meanings are different. - VkDeviceSize src_offset = 0; - - for (uint32_t i = 0; i < bind_info_count; ++i) - { - if (bind_infos[i].memoryBindIndex == mem_index) - { - src_offset = bind_infos[mem_index].memoryOffset; - break; - } - } - - resource_alloc_info->original_offset = src_offset; - resource_alloc_info->rebind_offset = allocation_info.offset; - resource_alloc_info->rebind_size = allocation_info.size; - - VkMemoryPropertyFlags property_flags = - replay_memory_properties_.memoryTypes[allocation_info.memoryType].propertyFlags; - - if ((property_flags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == - VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) - { - resource_alloc_info->is_host_visible = true; - } - - if (memory_alloc_info->original_content != nullptr) - { - // Memory has been mapped and written prior to bind. Copy the original content to the new - // allocation to ensure it contains the correct data. - - // If the session is bigger at replay time than at capture time, you don't want to read - // memory_alloc_info->original_content out of bounds - VkDeviceSize copy_size = - std::min(allocation_info.size, memory_alloc_info->allocation_size - src_offset); - - WriteBoundResource(resource_alloc_info, - src_offset, - 0, - copy_size, - memory_alloc_info->original_content.get()); - } - - memory_alloc_info->original_sessions.insert(std::make_pair(video_session, resource_alloc_info)); - - bind_memory_properties[mem_index] = property_flags; + VmaDeviceMemoryBlock* const pBlock = vma_mem_info->allocation->GetBlock(); + VMA_ASSERT(pBlock && "Binding Video Session to allocation that doesn't belong to any block."); + + // This lock is important so that we don't call vkBind... and/or vkMap... simultaneously + // on the same VkDeviceMemory from multiple threads. + VmaMutexLock lock(pBlock->m_MapAndBindMutex, allocator_->m_UseMutex); + result = functions_.bind_video_session_memory(device_, video_session, 1, &modified_bind_info); + break; } + default: + VMA_ASSERT(0); + } + + if (result >= 0) + { + UpdateAllocInfo(*resource_alloc_info, + VK_HANDLE_TO_UINT64(video_session), + MemoryInfoType::kVideoSession, + *memory_alloc_info, + *vma_mem_info, + bind_memory_properties[bind_i]); } } + else + { + GFXRECON_LOG_WARNING("AllocateMemory failed: %s in Rebind BindVideoSessionMemory.", + util::ToString(result).c_str()); + } } } @@ -1273,6 +1223,23 @@ VkResult VulkanRebindAllocator::MapMemory(VkDeviceMemory memory, return result; } +VkResult +VulkanRebindAllocator::MapMemory2(const VkMemoryMapInfo* memory_map_info, void** data, MemoryData allocator_data) +{ + VkResult result = VK_ERROR_MEMORY_MAP_FAILED; + + if (allocator_data != 0) + { + auto memory_alloc_info = reinterpret_cast(allocator_data); + memory_alloc_info->is_mapped = true; + memory_alloc_info->mapped_offset = memory_map_info->offset; + result = VK_SUCCESS; + (*data) = reinterpret_cast(kPlaceholderAddress); + } + + return result; +} + void VulkanRebindAllocator::UnmapMemory(VkDeviceMemory memory, MemoryData allocator_data) { GFXRECON_UNREFERENCED_PARAMETER(memory); @@ -1285,16 +1252,29 @@ void VulkanRebindAllocator::UnmapMemory(VkDeviceMemory memory, MemoryData alloca } } -VkResult VulkanRebindAllocator::FlushMappedMemoryRanges(uint32_t memory_range_count, - const VkMappedMemoryRange* memory_ranges, - const MemoryData* allocator_datas) +VkResult VulkanRebindAllocator::UnmapMemory2(const VkMemoryUnmapInfo* memory_unmap_info, MemoryData allocator_data) { - return UpdateMappedMemoryRanges(memory_range_count, memory_ranges, allocator_datas, vmaFlushAllocation); -} + GFXRECON_UNREFERENCED_PARAMETER(memory_unmap_info); -VkResult VulkanRebindAllocator::InvalidateMappedMemoryRanges(uint32_t memory_range_count, - const VkMappedMemoryRange* memory_ranges, - const MemoryData* allocator_datas) + if (allocator_data != 0) + { + auto memory_alloc_info = reinterpret_cast(allocator_data); + memory_alloc_info->is_mapped = false; + memory_alloc_info->mapped_offset = 0; + } + return VK_SUCCESS; +} + +VkResult VulkanRebindAllocator::FlushMappedMemoryRanges(uint32_t memory_range_count, + const VkMappedMemoryRange* memory_ranges, + const MemoryData* allocator_datas) +{ + return UpdateMappedMemoryRanges(memory_range_count, memory_ranges, allocator_datas, vmaFlushAllocation); +} + +VkResult VulkanRebindAllocator::InvalidateMappedMemoryRanges(uint32_t memory_range_count, + const VkMappedMemoryRange* memory_ranges, + const MemoryData* allocator_datas) { return UpdateMappedMemoryRanges(memory_range_count, memory_ranges, allocator_datas, vmaInvalidateAllocation); } @@ -1310,34 +1290,39 @@ VkResult VulkanRebindAllocator::SetDebugUtilsObjectNameEXT(VkDevice case VK_OBJECT_TYPE_DEVICE_MEMORY: { MemoryAllocInfo* memory_alloc_info = reinterpret_cast(allocator_data); - if (memory_alloc_info->original_buffers.empty() && memory_alloc_info->original_images.empty()) + GFXRECON_ASSERT(memory_alloc_info); + + if (memory_alloc_info->vma_mem_infos.empty()) { memory_alloc_info->debug_utils_name = name_info->pObjectName; return VK_SUCCESS; } else { - VmaAllocationInfo allocation_info; - if (!memory_alloc_info->original_buffers.empty()) - { - auto it = memory_alloc_info->original_buffers.begin(); - vmaGetAllocationInfo(allocator_, it->second->allocation, &allocation_info); - } - else - { - auto it = memory_alloc_info->original_images.begin(); - vmaGetAllocationInfo(allocator_, it->second->allocation, &allocation_info); - } - - name_info->objectHandle = VK_HANDLE_TO_UINT64(allocation_info.deviceMemory); + name_info->objectHandle = + VK_HANDLE_TO_UINT64(memory_alloc_info->vma_mem_infos[0]->allocation_info.deviceMemory); + break; } break; } case VK_OBJECT_TYPE_BUFFER: case VK_OBJECT_TYPE_IMAGE: + case VK_OBJECT_TYPE_VIDEO_SESSION_KHR: + case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV: { ResourceAllocInfo* resource_alloc_info = reinterpret_cast(allocator_data); - if (resource_alloc_info->memory_info == nullptr) + + bool found_memory_info = false; + for (const auto& mem_info : resource_alloc_info->bound_memory_infos) + { + if (mem_info->memory_info) + { + found_memory_info = true; + break; + } + } + + if (!found_memory_info) { resource_alloc_info->debug_utils_name = name_info->pObjectName; return VK_SUCCESS; @@ -1365,7 +1350,9 @@ VkResult VulkanRebindAllocator::SetDebugUtilsObjectTagEXT(VkDevice case VK_OBJECT_TYPE_DEVICE_MEMORY: { MemoryAllocInfo* memory_alloc_info = reinterpret_cast(allocator_data); - if (memory_alloc_info->original_buffers.empty() && memory_alloc_info->original_images.empty()) + GFXRECON_ASSERT(memory_alloc_info); + + if (memory_alloc_info->vma_mem_infos.empty()) { std::vector& buffer = memory_alloc_info->debug_utils_tag; const uint8_t* data = reinterpret_cast(tag_info->pTag); @@ -1378,27 +1365,30 @@ VkResult VulkanRebindAllocator::SetDebugUtilsObjectTagEXT(VkDevice } else { - VmaAllocationInfo allocation_info; - if (!memory_alloc_info->original_buffers.empty()) - { - auto it = memory_alloc_info->original_buffers.begin(); - vmaGetAllocationInfo(allocator_, it->second->allocation, &allocation_info); - } - else - { - auto it = memory_alloc_info->original_images.begin(); - vmaGetAllocationInfo(allocator_, it->second->allocation, &allocation_info); - } - - tag_info->objectHandle = VK_HANDLE_TO_UINT64(allocation_info.deviceMemory); + tag_info->objectHandle = + VK_HANDLE_TO_UINT64(memory_alloc_info->vma_mem_infos[0]->allocation_info.deviceMemory); + break; } break; } case VK_OBJECT_TYPE_BUFFER: case VK_OBJECT_TYPE_IMAGE: + case VK_OBJECT_TYPE_VIDEO_SESSION_KHR: + case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV: { ResourceAllocInfo* resource_alloc_info = reinterpret_cast(allocator_data); - if (resource_alloc_info->memory_info == nullptr) + + bool found_memory_info = false; + for (const auto& mem_info : resource_alloc_info->bound_memory_infos) + { + if (mem_info->memory_info) + { + found_memory_info = true; + break; + } + } + + if (!found_memory_info) { std::vector& buffer = resource_alloc_info->debug_utils_tag; const uint8_t* data = reinterpret_cast(tag_info->pTag); @@ -1454,19 +1444,12 @@ VkResult VulkanRebindAllocator::WriteMappedMemoryRange(MemoryData allocator_ VkDeviceSize write_end = write_start + size; // Copy to the resources that were bound to this range at capture. - for (const auto& entry : memory_alloc_info->original_buffers) + for (const auto& entry : memory_alloc_info->original_objects) { - UpdateBoundResource(entry.second, write_start, write_end, data); - } - - for (const auto& entry : memory_alloc_info->original_images) - { - UpdateBoundResource(entry.second, write_start, write_end, data); - } - - for (const auto& entry : memory_alloc_info->original_sessions) - { - UpdateBoundResource(entry.second, write_start, write_end, data); + for (auto& entry_bound : entry.second->bound_memory_infos) + { + UpdateBoundResource(entry.second, entry_bound, write_start, write_end, data); + } } result = VK_SUCCESS; @@ -1532,142 +1515,258 @@ void VulkanRebindAllocator::ReportBindImage2Incompatibility(uint32_t void VulkanRebindAllocator::ReportBindVideoSessionIncompatibility(VkVideoSessionKHR video_session, uint32_t bind_info_count, const VkBindVideoSessionMemoryInfoKHR* bind_infos, - const ResourceData* allocator_resource_datas, - const MemoryData* allocator_memory_datas) + const ResourceData allocator_resource_data, + const MemoryData* allocator_memory_datas) { GFXRECON_UNREFERENCED_PARAMETER(video_session); GFXRECON_UNREFERENCED_PARAMETER(bind_infos); GFXRECON_UNREFERENCED_PARAMETER(allocator_memory_datas); - ReportBindIncompatibility(allocator_resource_datas, bind_info_count); + ReportBindIncompatibility(&allocator_resource_data, 1); +} + +void VulkanRebindAllocator::ReportBindAccelerationStructureMemoryNVIncompatibility( + uint32_t bind_info_count, + const VkBindAccelerationStructureMemoryInfoNV* bind_infos, + const ResourceData* allocator_acc_datas, + const MemoryData* allocator_memory_datas) +{ + GFXRECON_UNREFERENCED_PARAMETER(bind_infos); + GFXRECON_UNREFERENCED_PARAMETER(allocator_memory_datas); } -void VulkanRebindAllocator::WriteBoundResourceDirect( - ResourceAllocInfo* resource_alloc_info, size_t src_offset, size_t dst_offset, size_t data_size, const uint8_t* data) +void VulkanRebindAllocator::ReportQueueBindSparseIncompatibility(VkQueue queue, + uint32_t bind_info_count, + const VkBindSparseInfo* bind_infos, + VkFence fence, + const ResourceData* allocator_buf_datas, + const MemoryData* allocator_buf_mem_datas, + const ResourceData* allocator_img_op_datas, + const MemoryData* allocator_img_op_mem_datas, + const ResourceData* allocator_img_datas, + const MemoryData* allocator_img_mem_datas) { - if (resource_alloc_info->object_type == ObjectType::buffer) + GFXRECON_UNREFERENCED_PARAMETER(queue); + GFXRECON_UNREFERENCED_PARAMETER(fence); + GFXRECON_UNREFERENCED_PARAMETER(allocator_buf_mem_datas); + GFXRECON_UNREFERENCED_PARAMETER(allocator_img_op_mem_datas); + GFXRECON_UNREFERENCED_PARAMETER(allocator_img_mem_datas); + + uint32_t buf_count = 0; + uint32_t img_op_count = 0; + uint32_t img_count = 0; + + for (uint32_t i = 0; i < bind_info_count; ++i) + { + const auto* bind_info = &bind_infos[i]; + buf_count += bind_info->bufferBindCount; + img_op_count += bind_info->imageOpaqueBindCount; + img_count += bind_info->imageBindCount; + } + + if (buf_count > 0) + { + ReportBindIncompatibility(allocator_buf_datas, buf_count); + } + if (img_op_count > 0) + { + ReportBindIncompatibility(allocator_img_op_datas, img_op_count); + } + if (img_count > 0) { - util::platform::MemoryCopy(static_cast(resource_alloc_info->mapped_pointer) + dst_offset, - data_size, - data + src_offset, - data_size); + ReportBindIncompatibility(allocator_img_datas, img_count); } - else if (resource_alloc_info->object_type == ObjectType::image) +} + +void VulkanRebindAllocator::WriteBoundResourceDirect(ResourceAllocInfo* resource_alloc_info, + VmaMemoryInfo* bound_memory_info, + size_t src_offset, + size_t dst_offset, + size_t data_size, + const uint8_t* data) +{ + switch (resource_alloc_info->object_type) { - if (!resource_alloc_info->layouts.empty()) + case VK_OBJECT_TYPE_BUFFER: { - if (resource_alloc_info->layouts.size() == 1) + util::platform::MemoryCopy(static_cast(bound_memory_info->mapped_pointer) + dst_offset, + data_size, + data + src_offset, + data_size); + break; + } + case VK_OBJECT_TYPE_IMAGE: + { + if (!resource_alloc_info->layouts.empty()) { - const auto& layouts = resource_alloc_info->layouts[0]; + if (resource_alloc_info->layouts.size() == 1) + { + const auto& layouts = resource_alloc_info->layouts[0]; - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, layouts.original.rowPitch); - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, layouts.rebind.rowPitch); + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, layouts.original.rowPitch); + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, layouts.rebind.rowPitch); - size_t original_row_pitch = static_cast(layouts.original.rowPitch); - size_t rebind_row_pitch = static_cast(layouts.rebind.rowPitch); + size_t original_row_pitch = static_cast(layouts.original.rowPitch); + size_t rebind_row_pitch = static_cast(layouts.rebind.rowPitch); - resource::CopyImageSubresourceMemory(static_cast(resource_alloc_info->mapped_pointer), - data + src_offset, - dst_offset, - data_size, - rebind_row_pitch, - original_row_pitch, - resource_alloc_info->height); + resource::CopyImageSubresourceMemory(static_cast(bound_memory_info->mapped_pointer), + data + src_offset, + dst_offset, + data_size, + rebind_row_pitch, + original_row_pitch, + resource_alloc_info->height); + } + else + { + // TODO: multi-plane image format support when strides do not match. + GFXRECON_LOG_ERROR("Skipping mapped memory write for image with multiple subresources: support " + "not yet implemented"); + } } else { - // TODO: multi-plane image format support when strides do not match. - GFXRECON_LOG_ERROR("Skipping mapped memory write for image with multiple subresources: support " - "not yet implemented"); + GFXRECON_LOG_WARNING("Image subresource layout info is not available for mapped memory write; " + "capture/replay memory alignment differences will not be handled properly"); + + util::platform::MemoryCopy(static_cast(bound_memory_info->mapped_pointer) + dst_offset, + data_size, + data + src_offset, + data_size); } + break; } - else + case VK_OBJECT_TYPE_VIDEO_SESSION_KHR: { - GFXRECON_LOG_WARNING("Image subresource layout info is not available for mapped memory write; " - "capture/replay memory alignment differences will not be handled properly"); - - util::platform::MemoryCopy(static_cast(resource_alloc_info->mapped_pointer) + dst_offset, - data_size, - data + src_offset, - data_size); + // TODO: implement direct video session copy + GFXRECON_LOG_WARNING("Skipping video session in direct write: support not yet implemented"); + break; } - } - else if (resource_alloc_info->object_type == ObjectType::video_session) - { - // TODO: implement direct video session copy - GFXRECON_LOG_WARNING("Skipping video session in direct write: support not yet implemented"); + case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV: + { + // TODO: Implement it when it's necessary. + GFXRECON_LOG_WARNING("Skipping acceleration structure NV in direct write: support not yet implemented"); + break; + } + default: + break; } } -void VulkanRebindAllocator::WriteBoundResourceStaging( - ResourceAllocInfo* resource_alloc_info, size_t src_offset, size_t dst_offset, size_t data_size, const uint8_t* data) +void VulkanRebindAllocator::WriteBoundResourceStaging(ResourceAllocInfo* resource_alloc_info, + VmaMemoryInfo* bound_memory_info, + size_t src_offset, + size_t dst_offset, + size_t data_size, + const uint8_t* data) { - if (resource_alloc_info->object_type == ObjectType::image && dst_offset != 0) + if (resource_alloc_info->object_type == VK_OBJECT_TYPE_IMAGE && dst_offset != 0) { // TODO: implement offset based stagging image copy GFXRECON_LOG_WARNING("Skipping image with offset in staging write: support not yet implemented"); return; } - if (resource_alloc_info->object_type == ObjectType::video_session) + if (resource_alloc_info->object_type == VK_OBJECT_TYPE_VIDEO_SESSION_KHR) { - // TODO: implement stagging video session copy + // TODO: Implement it when it's necessary. GFXRECON_LOG_WARNING("Skipping video session in staging write: support not yet implemented"); return; } - VkBuffer staging_buf{}; - VkBufferCreateInfo staging_buf_create_info{}; - staging_buf_create_info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; - staging_buf_create_info.size = data_size; - staging_buf_create_info.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; + if (resource_alloc_info->object_type == VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV) + { + // TODO: Implement it when it's necessary. + GFXRECON_LOG_WARNING("Skipping acceleration structure NV in staging write: support not yet implemented"); + return; + } + + std::vector waiting_semaphores; + std::vector waiting_semaphores_dst_stage_mask; + + for (const auto& staging_resource : staging_resources_) + { + bool is_already_in_use = + resource_alloc_info == staging_resource.resource_alloc_info && + (dst_offset == staging_resource.dst_offset || dst_offset + data_size > staging_resource.dst_offset); + + if (is_already_in_use) + { + // If we have a scenario in which there are multiple staging copies on the same memory range before a + // queue submit we are forced to chain them to avoid data corruption + GFXRECON_LOG_WARNING("Detected multiple staging writes on the same resource before a vkQueueSubmit, " + "staging writes will be chained."); + waiting_semaphores.push_back(staging_resource.staging_semaphore); + waiting_semaphores_dst_stage_mask.push_back(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT); + } + } + + // The following operations will be submitted and waited upon at the time of the next trace file VkQueueSubmit + StagingResources staging_resources{}; + staging_resources.resource_alloc_info = resource_alloc_info; + staging_resources.dst_offset = dst_offset; + + VkCommandBufferAllocateInfo cmd_buff_alloc_info = {}; + cmd_buff_alloc_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; + cmd_buff_alloc_info.pNext = nullptr; + cmd_buff_alloc_info.commandPool = cmd_pool_; + cmd_buff_alloc_info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; + cmd_buff_alloc_info.commandBufferCount = 1; + + VkResult result = functions_.allocate_command_buffers(device_, &cmd_buff_alloc_info, &staging_resources.cmd_buffer); + + if (result == VK_SUCCESS) + { + VkBufferCreateInfo staging_buf_create_info{}; + staging_buf_create_info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; + staging_buf_create_info.size = data_size; + staging_buf_create_info.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; - VmaAllocation staging_alloc{}; - VmaAllocationInfo staging_alloc_info{}; - VmaAllocationCreateInfo staging_alloc_create_info = {}; - staging_alloc_create_info.flags = - VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT; - staging_alloc_create_info.usage = VMA_MEMORY_USAGE_CPU_ONLY; + VmaAllocationInfo staging_alloc_info{}; + VmaAllocationCreateInfo staging_alloc_create_info = {}; + staging_alloc_create_info.flags = + VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT; + staging_alloc_create_info.usage = VMA_MEMORY_USAGE_CPU_ONLY; - VkResult result = vmaCreateBuffer(allocator_, - &staging_buf_create_info, - &staging_alloc_create_info, - &staging_buf, - &staging_alloc, - &staging_alloc_info); + result = vmaCreateBuffer(allocator_, + &staging_buf_create_info, + &staging_alloc_create_info, + &staging_resources.staging_buf, + &staging_resources.staging_alloc, + &staging_alloc_info); + } - void* copy_mapped_pointer{ resource_alloc_info->mapped_pointer }; + void* copy_mapped_pointer{ bound_memory_info->mapped_pointer }; if (result == VK_SUCCESS) { - result = vmaMapMemory(allocator_, staging_alloc, &resource_alloc_info->mapped_pointer); + result = vmaMapMemory(allocator_, staging_resources.staging_alloc, &bound_memory_info->mapped_pointer); } if (result == VK_SUCCESS) { - WriteBoundResourceDirect(resource_alloc_info, src_offset, 0, data_size, data); - resource_alloc_info->mapped_pointer = copy_mapped_pointer; - vmaFlushAllocation(allocator_, staging_alloc, 0, VK_WHOLE_SIZE); - vmaUnmapMemory(allocator_, staging_alloc); + WriteBoundResourceDirect(resource_alloc_info, bound_memory_info, src_offset, 0, data_size, data); + bound_memory_info->mapped_pointer = copy_mapped_pointer; + vmaFlushAllocation(allocator_, staging_resources.staging_alloc, 0, VK_WHOLE_SIZE); + vmaUnmapMemory(allocator_, staging_resources.staging_alloc); VkCommandBufferBeginInfo cmd_buf_begin_info = {}; cmd_buf_begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; - result = functions_.begin_command_buffer(cmd_buffer_, &cmd_buf_begin_info); + result = functions_.begin_command_buffer(staging_resources.cmd_buffer, &cmd_buf_begin_info); } if (result == VK_SUCCESS) { - if (resource_alloc_info->object_type == ObjectType::image) + if (resource_alloc_info->object_type == VK_OBJECT_TYPE_IMAGE) { VkImage original_image{}; - for (const std::pair& elt : - resource_alloc_info->memory_info->original_images) + for (const auto& elt : bound_memory_info->memory_info->original_objects) { if (elt.second == resource_alloc_info) { - original_image = elt.first; + original_image = UINT64_TO_VK_HANDLE(VkImage, elt.first); break; } } @@ -1693,21 +1792,23 @@ void VulkanRebindAllocator::WriteBoundResourceStaging( region.imageSubresource = { aspect_flags, 0, 0, 1 }; region.imageOffset = { 0, 0, 0 }; region.imageExtent = { 1, 1, 1 }; - functions_.cmd_copy_buffer_to_image( - cmd_buffer_, staging_buf, original_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ®ion); + functions_.cmd_copy_buffer_to_image(staging_resources.cmd_buffer, + staging_resources.staging_buf, + original_image, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + 1, + ®ion); } - result = functions_.end_command_buffer(cmd_buffer_); } } - else if (resource_alloc_info->object_type == ObjectType::buffer) + else if (resource_alloc_info->object_type == VK_OBJECT_TYPE_BUFFER) { VkBuffer original_buffer{}; - for (const std::pair& elt : - resource_alloc_info->memory_info->original_buffers) + for (const auto& elt : bound_memory_info->memory_info->original_objects) { if (elt.second == resource_alloc_info) { - original_buffer = elt.first; + original_buffer = UINT64_TO_VK_HANDLE(VkBuffer, elt.first); break; } } @@ -1719,42 +1820,66 @@ void VulkanRebindAllocator::WriteBoundResourceStaging( copy_region.dstOffset = dst_offset; copy_region.size = data_size; - functions_.cmd_copy_buffer(cmd_buffer_, staging_buf, original_buffer, 1, ©_region); - result = functions_.end_command_buffer(cmd_buffer_); + functions_.cmd_copy_buffer( + staging_resources.cmd_buffer, staging_resources.staging_buf, original_buffer, 1, ©_region); } } } if (result == VK_SUCCESS) { - VkSubmitInfo compute_submit_info{}; - compute_submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; - compute_submit_info.commandBufferCount = 1; - compute_submit_info.pCommandBuffers = &cmd_buffer_; + result = functions_.end_command_buffer(staging_resources.cmd_buffer); + } + + if (result == VK_SUCCESS) + { + VkSemaphoreCreateInfo semaphore_create_info{}; + semaphore_create_info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; - result = functions_.queue_submit(staging_queue_, 1, &compute_submit_info, VK_NULL_HANDLE); + result = + functions_.create_semaphore(device_, &semaphore_create_info, nullptr, &staging_resources.staging_semaphore); } if (result == VK_SUCCESS) { - result = functions_.queue_wait_idle(staging_queue_); + VkFenceCreateInfo fence_create_info{}; + fence_create_info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; + + result = functions_.create_fence(device_, &fence_create_info, nullptr, &staging_resources.staging_fence); } if (result == VK_SUCCESS) { - result = functions_.reset_command_buffer(cmd_buffer_, VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT); + VkSubmitInfo compute_submit_info{}; + compute_submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + compute_submit_info.commandBufferCount = 1; + compute_submit_info.pCommandBuffers = &staging_resources.cmd_buffer; + compute_submit_info.waitSemaphoreCount = waiting_semaphores.size(); + compute_submit_info.pWaitSemaphores = waiting_semaphores.data(); + compute_submit_info.pWaitDstStageMask = waiting_semaphores_dst_stage_mask.data(); + compute_submit_info.signalSemaphoreCount = 1; + compute_submit_info.pSignalSemaphores = &staging_resources.staging_semaphore; + compute_submit_info.pSignalSemaphores = &staging_resources.staging_semaphore; + + result = functions_.queue_submit(staging_queue_, 1, &compute_submit_info, staging_resources.staging_fence); } - vmaDestroyBuffer(allocator_, staging_buf, staging_alloc); + if (result == VK_SUCCESS) + { + staging_resources_.push_back(staging_resources); + } } void VulkanRebindAllocator::WriteBoundResource(ResourceAllocInfo* resource_alloc_info, + VmaMemoryInfo* bound_memory_info, VkDeviceSize src_offset, VkDeviceSize dst_offset, VkDeviceSize data_size, const uint8_t* data) { - assert(resource_alloc_info != nullptr); + GFXRECON_ASSERT(resource_alloc_info != nullptr); + GFXRECON_ASSERT(bound_memory_info != nullptr); + GFXRECON_ASSERT(bound_memory_info->memory_info != nullptr); GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, src_offset); GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, dst_offset); @@ -1764,19 +1889,20 @@ void VulkanRebindAllocator::WriteBoundResource(ResourceAllocInfo* resource_alloc size_t copy_dst_offset = static_cast(dst_offset); size_t copy_size = static_cast(data_size); - if (resource_alloc_info->is_host_visible) + if (bound_memory_info->is_host_visible) { VkResult result = VK_SUCCESS; - if (resource_alloc_info->mapped_pointer == nullptr) + if (bound_memory_info->mapped_pointer == nullptr) { // After first map, the allocation will stay mapped until it is destroyed. - result = vmaMapMemory(allocator_, resource_alloc_info->allocation, &resource_alloc_info->mapped_pointer); + result = vmaMapMemory(allocator_, bound_memory_info->allocation, &bound_memory_info->mapped_pointer); } if (result == VK_SUCCESS) { - WriteBoundResourceDirect(resource_alloc_info, copy_src_offset, copy_dst_offset, copy_size, data); + WriteBoundResourceDirect( + resource_alloc_info, bound_memory_info, copy_src_offset, copy_dst_offset, copy_size, data); } else { @@ -1786,29 +1912,35 @@ void VulkanRebindAllocator::WriteBoundResource(ResourceAllocInfo* resource_alloc } else { - WriteBoundResourceStaging(resource_alloc_info, copy_src_offset, copy_dst_offset, copy_size, data); + WriteBoundResourceStaging( + resource_alloc_info, bound_memory_info, copy_src_offset, copy_dst_offset, copy_size, data); } } -bool VulkanRebindAllocator::TranslateMemoryRange(const ResourceAllocInfo* resource_alloc_info, - VkDeviceSize original_start, - VkDeviceSize original_end, - VkDeviceSize* src_offset, - VkDeviceSize* dst_offset, - VkDeviceSize* data_size) +bool VulkanRebindAllocator::TranslateMemoryRange(const VmaMemoryInfo* bound_memory_info, + VkDeviceSize original_start, + VkDeviceSize original_end, + VkDeviceSize* src_offset, + VkDeviceSize* dst_offset, + VkDeviceSize* data_size) { assert((src_offset != nullptr) && (dst_offset != nullptr) && (data_size)); - VkDeviceSize resource_start = resource_alloc_info->original_offset; + if (bound_memory_info->memory_info == nullptr) + { + return false; + } + + VkDeviceSize resource_start = bound_memory_info->offset_from_original_device_memory; + auto original_size = bound_memory_info->memory_info->allocation_size; + auto rebind_size = bound_memory_info->replay_mem_req.size; // This should correspond to the offset to the end of the resource at capture time. // // However, if the rebind size is smaller than the original size, we don't want data_size to be big enough to cause // an overflow, so the original size is artifically clamped to the rebind size. VkDeviceSize resource_end = - resource_start + (resource_alloc_info->original_size != 0 - ? std::min(resource_alloc_info->original_size, resource_alloc_info->rebind_size) - : resource_alloc_info->rebind_size); + resource_start + (original_size != 0 ? std::min(original_size, rebind_size) : rebind_size); // Range ends are exclusive. if ((resource_end <= original_start) || (original_end <= resource_start)) @@ -1849,6 +1981,7 @@ bool VulkanRebindAllocator::TranslateMemoryRange(const ResourceAllocInfo* resour } void VulkanRebindAllocator::UpdateBoundResource(ResourceAllocInfo* resource_alloc_info, + VmaMemoryInfo* bound_memory_info, VkDeviceSize write_start, VkDeviceSize write_end, const uint8_t* data) @@ -1859,16 +1992,16 @@ void VulkanRebindAllocator::UpdateBoundResource(ResourceAllocInfo* resource_allo VkDeviceSize dst_offset = 0; VkDeviceSize data_size = 0; - if (TranslateMemoryRange(resource_alloc_info, write_start, write_end, &src_offset, &dst_offset, &data_size)) + if (TranslateMemoryRange(bound_memory_info, write_start, write_end, &src_offset, &dst_offset, &data_size)) { - WriteBoundResource(resource_alloc_info, src_offset, dst_offset, data_size, data); + WriteBoundResource(resource_alloc_info, bound_memory_info, src_offset, dst_offset, data_size, data); } } VkResult VulkanRebindAllocator::UpdateMappedMemoryRange( - ResourceAllocInfo* resource_alloc_info, - VkDeviceSize original_start, - VkDeviceSize original_end, + VmaMemoryInfo* bound_memory_info, + VkDeviceSize original_start, + VkDeviceSize original_end, VkResult (*update_func)(VmaAllocator, VmaAllocation, VkDeviceSize, VkDeviceSize)) { VkResult result = VK_SUCCESS; @@ -1876,17 +2009,17 @@ VkResult VulkanRebindAllocator::UpdateMappedMemoryRange( VkDeviceSize dst_offset = 0; VkDeviceSize data_size = 0; - if (TranslateMemoryRange(resource_alloc_info, original_start, original_end, &src_offset, &dst_offset, &data_size)) + if (TranslateMemoryRange(bound_memory_info, original_start, original_end, &src_offset, &dst_offset, &data_size)) { - if (resource_alloc_info->mapped_pointer == nullptr) + if (bound_memory_info->mapped_pointer == nullptr) { // After first map, the allocation will stay mapped until it is destroyed. - result = vmaMapMemory(allocator_, resource_alloc_info->allocation, &resource_alloc_info->mapped_pointer); + result = vmaMapMemory(allocator_, bound_memory_info->allocation, &bound_memory_info->mapped_pointer); } if (result == VK_SUCCESS) { - result = update_func(allocator_, resource_alloc_info->allocation, dst_offset, data_size); + result = update_func(allocator_, bound_memory_info->allocation, dst_offset, data_size); } } @@ -1920,27 +2053,14 @@ VkResult VulkanRebindAllocator::UpdateMappedMemoryRanges( VkDeviceSize range_start = memory_ranges[i].offset; VkDeviceSize range_end = range_start + size; - for (const auto& entry : memory_alloc_info->original_buffers) - { - if (UpdateMappedMemoryRange(entry.second, range_start, range_end, update_func) != VK_SUCCESS) - { - result = VK_ERROR_MEMORY_MAP_FAILED; - } - } - - for (const auto& entry : memory_alloc_info->original_images) - { - if (UpdateMappedMemoryRange(entry.second, range_start, range_end, update_func) != VK_SUCCESS) - { - result = VK_ERROR_MEMORY_MAP_FAILED; - } - } - - for (const auto& entry : memory_alloc_info->original_sessions) + for (const auto& entry : memory_alloc_info->original_objects) { - if (UpdateMappedMemoryRange(entry.second, range_start, range_end, update_func) != VK_SUCCESS) + for (auto& entry_bound : entry.second->bound_memory_infos) { - result = VK_ERROR_MEMORY_MAP_FAILED; + if (UpdateMappedMemoryRange(entry_bound, range_start, range_end, update_func) != VK_SUCCESS) + { + result = VK_ERROR_MEMORY_MAP_FAILED; + } } } } @@ -2074,7 +2194,7 @@ VmaMemoryUsage VulkanRebindAllocator::GetImageMemoryUsage(VkImageUsageFlags return AdjustMemoryUsage(memory_usage, replay_requirements); } -VmaMemoryUsage VulkanRebindAllocator::GetVideoSeesionMemoryUsage(VkMemoryPropertyFlags capture_properties, +VmaMemoryUsage VulkanRebindAllocator::GetVideoSessionMemoryUsage(VkMemoryPropertyFlags capture_properties, const VkMemoryRequirements& replay_requirements) { // Start with CPU_TO_GPU usage. @@ -2201,18 +2321,41 @@ VkResult VulkanRebindAllocator::MapResourceMemoryDirect(VkDeviceSize size, { auto resource_alloc_info = reinterpret_cast(allocator_data); - if (resource_alloc_info->mapped_pointer == nullptr) + if (!resource_alloc_info->bound_memory_infos.empty()) { - result = vmaMapMemory(allocator_, resource_alloc_info->allocation, &resource_alloc_info->mapped_pointer); - } - else - { - result = VK_SUCCESS; + auto& mem_info = resource_alloc_info->bound_memory_infos[0]; + + if (mem_info->mapped_pointer == nullptr) + { + result = vmaMapMemory(allocator_, mem_info->allocation, &mem_info->mapped_pointer); + } + else + { + result = VK_SUCCESS; + } + + if (result == VK_SUCCESS) + { + (*data) = reinterpret_cast(mem_info->mapped_pointer); + } } - if (result == VK_SUCCESS) + // TODO: Implement it when it's necessary. + if (resource_alloc_info->bound_memory_infos.size() > 1) { - (*data) = reinterpret_cast(resource_alloc_info->mapped_pointer); + switch (resource_alloc_info->memory_info_type) + { + case MemoryInfoType::kSparse: + GFXRECON_LOG_WARNING("VulkanRebindAllocator::MapResourceMemoryDirect map only the first memory of " + "sparse memories."); + break; + case MemoryInfoType::kVideoSession: + GFXRECON_LOG_WARNING( + "VulkanRebindAllocator::MapResourceMemoryDirect map only the first memory of VideoSession."); + break; + default: + break; + } } } @@ -2222,7 +2365,6 @@ VkResult VulkanRebindAllocator::MapResourceMemoryDirect(VkDeviceSize size, void VulkanRebindAllocator::SetBindingDebugUtilsNameAndTag(const MemoryAllocInfo* memory_alloc_info, const ResourceAllocInfo* resource_alloc_info, VkDeviceMemory device_memory, - VkObjectType resource_type, uint64_t resource_handle) { VkDebugUtilsObjectNameInfoEXT name_info; @@ -2255,7 +2397,7 @@ void VulkanRebindAllocator::SetBindingDebugUtilsNameAndTag(const MemoryAllocInfo if (!resource_alloc_info->debug_utils_name.empty()) { - name_info.objectType = resource_type; + name_info.objectType = resource_alloc_info->object_type; name_info.objectHandle = resource_handle; name_info.pObjectName = resource_alloc_info->debug_utils_name.c_str(); @@ -2264,7 +2406,7 @@ void VulkanRebindAllocator::SetBindingDebugUtilsNameAndTag(const MemoryAllocInfo if (!resource_alloc_info->debug_utils_tag.empty()) { - tag_info.objectType = resource_type; + tag_info.objectType = resource_alloc_info->object_type; tag_info.objectHandle = resource_handle; tag_info.tagName = resource_alloc_info->debug_utils_tag_name; tag_info.tagSize = resource_alloc_info->debug_utils_tag.size(); @@ -2274,5 +2416,809 @@ void VulkanRebindAllocator::SetBindingDebugUtilsNameAndTag(const MemoryAllocInfo } } +VkResult VulkanRebindAllocator::VmaAllocateMemory(MemoryAllocInfo& memory_alloc_info, + VkDeviceSize original_offset, + const VkMemoryRequirements& capture_mem_req, + const VkMemoryRequirements& replay_mem_req, + bool requires_dedicated_allocation, + bool prefers_dedicated_allocation, + VkBuffer dedicated_buffer, + VkImage dedicated_image, + VmaMemoryUsage usage, + VmaMemoryInfo** vma_mem_info) +{ + VmaAllocationCreateInfo create_info{}; + create_info.flags = 0; + create_info.usage = usage; + create_info.requiredFlags = 0; + create_info.preferredFlags = 0; + create_info.memoryTypeBits = 0; + create_info.pool = VK_NULL_HANDLE; + create_info.pUserData = nullptr; + + if (FindVmaMemoryInfo(memory_alloc_info, + original_offset, + capture_mem_req, + replay_mem_req, + requires_dedicated_allocation, + prefers_dedicated_allocation, + create_info, + vma_mem_info)) + { + return VK_SUCCESS; + } + + VmaMemoryInfo mem_info = {}; + mem_info.memory_info = &memory_alloc_info; + mem_info.capture_mem_req = capture_mem_req; + mem_info.replay_mem_req = replay_mem_req; + mem_info.requires_dedicated_allocation = requires_dedicated_allocation; + mem_info.prefers_dedicated_allocation = prefers_dedicated_allocation; + mem_info.alc_create_info = create_info; + mem_info.offset_from_original_device_memory = original_offset; + + VmaSuballocationType suballoc_type = VmaSuballocationType::VMA_SUBALLOCATION_TYPE_FREE; + + if (dedicated_buffer != VK_NULL_HANDLE) + { + suballoc_type = VmaSuballocationType::VMA_SUBALLOCATION_TYPE_BUFFER; + } + else if (dedicated_image != VK_NULL_HANDLE) + { + suballoc_type = VmaSuballocationType::VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN; + } + + auto result = allocator_->AllocateMemory(replay_mem_req, + requires_dedicated_allocation, + prefers_dedicated_allocation, + dedicated_buffer, + dedicated_image, + VmaBufferImageUsage::UNKNOWN, + create_info, + suballoc_type, + 1, + &mem_info.allocation); + if (result >= 0) + { + allocator_->GetAllocationInfo(mem_info.allocation, &mem_info.allocation_info); + + memory_alloc_info.vma_mem_infos.emplace_back(std::make_unique(mem_info)); + *vma_mem_info = memory_alloc_info.vma_mem_infos.back().get(); + } + return result; +} + +void VulkanRebindAllocator::GetDeviceMemoryCommitment(VkDeviceMemory memory, + VkDeviceSize* committed_memory_in_bytes, + MemoryData allocator_data) +{ + VkDeviceMemory modified_mem = VK_NULL_HANDLE; + MemoryAllocInfo* memory_alloc_info = reinterpret_cast(allocator_data); + GFXRECON_ASSERT(memory_alloc_info); + + if (memory_alloc_info->vma_mem_infos.empty()) + { + GFXRECON_LOG_WARNING("There's no allocations or memory is VK_NULL_HANDLE. Skip GetDeviceMemoryCommitment"); + return; + } + + for (const auto& mem_info : memory_alloc_info->vma_mem_infos) + { + GFXRECON_ASSERT(mem_info->allocation); + modified_mem = mem_info->allocation_info.deviceMemory; + + switch (mem_info->allocation->GetType()) + { + case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED: + { + functions_.get_device_memory_commitment(device_, modified_mem, committed_memory_in_bytes); + break; + } + case VmaAllocation_T::ALLOCATION_TYPE_BLOCK: + { + VmaDeviceMemoryBlock* const pBlock = mem_info->allocation->GetBlock(); + VMA_ASSERT(pBlock && "GetDeviceMemoryCommitment to allocation that doesn't belong to any block."); + + VmaMutexLock lock(pBlock->m_MapAndBindMutex, allocator_->m_UseMutex); + functions_.get_device_memory_commitment(device_, modified_mem, committed_memory_in_bytes); + break; + } + default: + VMA_ASSERT(0); + } + } +} + +void VulkanRebindAllocator::SetDeviceMemoryPriority(VkDeviceMemory memory, float priority, MemoryData allocator_data) +{ + VkDeviceMemory modified_mem = VK_NULL_HANDLE; + MemoryAllocInfo* memory_alloc_info = reinterpret_cast(allocator_data); + GFXRECON_ASSERT(memory_alloc_info); + + if (memory_alloc_info->vma_mem_infos.empty()) + { + GFXRECON_LOG_WARNING("There's no allocations or memory is VK_NULL_HANDLE. Skip SetDeviceMemoryPriority"); + return; + } + + for (const auto& mem_info : memory_alloc_info->vma_mem_infos) + { + GFXRECON_ASSERT(mem_info->allocation); + modified_mem = mem_info->allocation_info.deviceMemory; + + switch (mem_info->allocation->GetType()) + { + case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED: + { + functions_.set_device_memory_priority(device_, modified_mem, priority); + break; + } + case VmaAllocation_T::ALLOCATION_TYPE_BLOCK: + { + VmaDeviceMemoryBlock* const pBlock = mem_info->allocation->GetBlock(); + VMA_ASSERT(pBlock && "SetDeviceMemoryPriority to allocation that doesn't belong to any block."); + + VmaMutexLock lock(pBlock->m_MapAndBindMutex, allocator_->m_UseMutex); + functions_.set_device_memory_priority(device_, modified_mem, priority); + break; + } + default: + VMA_ASSERT(0); + } + } +} + +VkResult +VulkanRebindAllocator::GetMemoryRemoteAddressNV(const VkMemoryGetRemoteAddressInfoNV* memory_get_remote_address_info, + VkRemoteAddressNV* address, + MemoryData allocator_data) +{ + auto modified_get_mem_remote_addr_info = *memory_get_remote_address_info; + MemoryAllocInfo* memory_alloc_info = reinterpret_cast(allocator_data); + GFXRECON_ASSERT(memory_alloc_info); + + if (memory_alloc_info->vma_mem_infos.empty()) + { + GFXRECON_LOG_WARNING("There's no allocations or memory is VK_NULL_HANDLE. Skip GetMemoryRemoteAddressNV"); + return VK_SUCCESS; + } + + auto result = VK_ERROR_INITIALIZATION_FAILED; + + for (const auto& mem_info : memory_alloc_info->vma_mem_infos) + { + GFXRECON_ASSERT(mem_info->allocation); + modified_get_mem_remote_addr_info.memory = mem_info->allocation_info.deviceMemory; + + switch (mem_info->allocation->GetType()) + { + case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED: + { + result = functions_.get_memory_remote_address_nv(device_, &modified_get_mem_remote_addr_info, address); + break; + } + case VmaAllocation_T::ALLOCATION_TYPE_BLOCK: + { + VmaDeviceMemoryBlock* const pBlock = mem_info->allocation->GetBlock(); + VMA_ASSERT(pBlock && "GetMemoryRemoteAddressNV to allocation that doesn't belong to any block."); + + VmaMutexLock lock(pBlock->m_MapAndBindMutex, allocator_->m_UseMutex); + result = functions_.get_memory_remote_address_nv(device_, &modified_get_mem_remote_addr_info, address); + break; + } + default: + VMA_ASSERT(0); + } + } + return result; +} + +VkResult VulkanRebindAllocator::CreateAccelerationStructureNV(const VkAccelerationStructureCreateInfoNV* create_info, + const VkAllocationCallbacks* allocation_callbacks, + format::HandleId capture_id, + VkAccelerationStructureNV* acc_str, + ResourceData* allocator_data) +{ + GFXRECON_UNREFERENCED_PARAMETER(allocation_callbacks); + GFXRECON_UNREFERENCED_PARAMETER(capture_id); + + GFXRECON_LOG_FATAL("-m rebind doesn't support CreateAccelerationStructureNV. VK_NV_ray_tracing is deprecated. It " + "won't get more support."); + return VK_ERROR_EXTENSION_NOT_PRESENT; +} + +void VulkanRebindAllocator::DestroyAccelerationStructureNV(VkAccelerationStructureNV acc_str, + const VkAllocationCallbacks* allocation_callbacks, + ResourceData allocator_data) +{ + GFXRECON_UNREFERENCED_PARAMETER(allocation_callbacks); + + GFXRECON_LOG_FATAL("-m rebind doesn't support DestroyAccelerationStructureNV. VK_NV_ray_tracing is deprecated. It " + "won't get more support."); +} + +void VulkanRebindAllocator::GetAccelerationStructureMemoryRequirementsNV( + const VkAccelerationStructureMemoryRequirementsInfoNV* info, + VkMemoryRequirements2KHR* memory_requirements, + ResourceData allocator_data) +{ + GFXRECON_LOG_FATAL("-m rebind doesn't support GetAccelerationStructureMemoryRequirementsNV. VK_NV_ray_tracing is " + "deprecated. It won't get more support."); +} + +VkResult +VulkanRebindAllocator::BindAccelerationStructureMemoryNV(uint32_t bind_info_count, + const VkBindAccelerationStructureMemoryInfoNV* bind_infos, + const ResourceData* allocator_acc_datas, + const MemoryData* allocator_memory_datas, + VkMemoryPropertyFlags* bind_memory_properties) +{ + GFXRECON_LOG_FATAL("-m rebind doesn't support BindAccelerationStructureMemoryNV. VK_NV_ray_tracing is deprecated. " + "It won't get more support."); + return VK_ERROR_EXTENSION_NOT_PRESENT; +} + +VkResult +VulkanRebindAllocator::GetMemoryFd(const VkMemoryGetFdInfoKHR* get_fd_info, int* pFd, MemoryData allocator_data) +{ + auto modified_get_fd_info = *get_fd_info; + MemoryAllocInfo* memory_alloc_info = reinterpret_cast(allocator_data); + GFXRECON_ASSERT(memory_alloc_info); + + if (memory_alloc_info->vma_mem_infos.empty()) + { + GFXRECON_LOG_WARNING("There's no allocations or memory is VK_NULL_HANDLE. Skip GetMemoryFd"); + return VK_SUCCESS; + } + + auto result = VK_ERROR_INITIALIZATION_FAILED; + + for (const auto& mem_info : memory_alloc_info->vma_mem_infos) + { + GFXRECON_ASSERT(mem_info->allocation); + modified_get_fd_info.memory = mem_info->allocation_info.deviceMemory; + + switch (mem_info->allocation->GetType()) + { + case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED: + { + result = functions_.get_memory_fd(device_, &modified_get_fd_info, pFd); + break; + } + case VmaAllocation_T::ALLOCATION_TYPE_BLOCK: + { + VmaDeviceMemoryBlock* const pBlock = mem_info->allocation->GetBlock(); + VMA_ASSERT(pBlock && "GetMemoryFd to allocation that doesn't belong to any block."); + + VmaMutexLock lock(pBlock->m_MapAndBindMutex, allocator_->m_UseMutex); + result = functions_.get_memory_fd(device_, &modified_get_fd_info, pFd); + break; + } + default: + VMA_ASSERT(0); + } + } + return result; +} + +bool VulkanRebindAllocator::FindVmaMemoryInfo(MemoryAllocInfo& memory_alloc_info, + VkDeviceSize original_offset, + const VkMemoryRequirements& capture_mem_req, + const VkMemoryRequirements& replay_mem_req, + bool requires_dedicated_allocation, + bool prefers_dedicated_allocation, + const VmaAllocationCreateInfo& alc_create_info, + VmaMemoryInfo** vma_mem_info) +{ + if (requires_dedicated_allocation || prefers_dedicated_allocation) + { + return false; + } + + for (auto& mem_info : memory_alloc_info.vma_mem_infos) + { + if (mem_info->is_compatible(original_offset, capture_mem_req, replay_mem_req, alc_create_info)) + { + *vma_mem_info = mem_info.get(); + return true; + } + } + return false; +} + +void VulkanRebindAllocator::RemoveVmaMemoryInfo(ResourceAllocInfo& resource_alloc_info, uint64_t object_hanlde) +{ + // It could bind sparse memories. It could have plural memories. + for (auto& mem_info : resource_alloc_info.bound_memory_infos) + { + auto mem_alc_info = mem_info->memory_info; + GFXRECON_ASSERT(mem_alc_info != VK_NULL_HANDLE); + + --mem_info->reference_count; + if (mem_info->reference_count == 0) + { + if (mem_info->allocation != VK_NULL_HANDLE) + { + if (mem_info->mapped_pointer != nullptr) + { + vmaUnmapMemory(allocator_, mem_info->allocation); + } + vmaFreeMemory(allocator_, mem_info->allocation); + } + + for (auto entry = mem_alc_info->vma_mem_infos.begin(); entry != mem_alc_info->vma_mem_infos.end();) + { + if (entry->get() == mem_info) + { + mem_alc_info->vma_mem_infos.erase(entry); + break; + } + else + { + ++entry; + } + } + } + + // All objects are destroyed and the memory is freed, so delete the MemoryAllocInfo. + mem_alc_info->original_objects.erase(object_hanlde); + if (mem_alc_info->is_free && mem_alc_info->original_objects.empty()) + { + delete mem_alc_info; + } + } +} + +template +void VulkanRebindAllocator::RebindSparseMemory(const T& original_memory_bind, + T& modified_memory_bind, + ResourceAllocInfo* res_alloc_info, + MemoryAllocInfo* mem_alloc_info, + S vma_mem_blocks, + std::vector& vma_memory_infos, + VkBuffer buffer, + VkImage image, + const std::string& type_string, + VkDeviceSize alloc_size) +{ + static_assert(std::is_same_v || std::is_same_v); + + VmaMemoryInfo*& vma_mem_info = vma_memory_infos.emplace_back(nullptr); + + VkMemoryRequirements capture_req = {}; + if (!res_alloc_info->capture_mem_reqs.empty()) + { + capture_req = res_alloc_info->capture_mem_reqs[0]; + } + + modified_memory_bind.memory = VK_NULL_HANDLE; + + // memory could be nullptr, but bind_infos's memory isn't real, so using mem_alloc_info to check it. + if (mem_alloc_info) + { + VkMemoryRequirements replay_req = {}; + bool requires_dedicated_allocation = false; + bool prefers_dedicated_allocation = false; + + if (buffer != VK_NULL_HANDLE) + { + GFXRECON_ASSERT(image == VK_NULL_HANDLE); + allocator_->GetBufferMemoryRequirements( + buffer, replay_req, requires_dedicated_allocation, prefers_dedicated_allocation); + + replay_req.alignment = std::max(replay_req.alignment, min_buffer_alignment_); + } + else + { + GFXRECON_ASSERT(image != VK_NULL_HANDLE); + allocator_->GetImageMemoryRequirements( + image, replay_req, requires_dedicated_allocation, prefers_dedicated_allocation); + } + + if constexpr (std::is_same_v) + { + alloc_size = std::min(replay_req.size, mem_alloc_info->allocation_size - original_memory_bind.memoryOffset); + } + + if (alloc_size > 0) + { + replay_req.size = alloc_size; + } + + if (capture_req.size != 0) + { + capture_req.size = alloc_size; + } + + VmaMemoryUsage usage; + if (buffer != VK_NULL_HANDLE) + { + usage = GetBufferMemoryUsage( + res_alloc_info->usage, + capture_memory_properties_.memoryTypes[mem_alloc_info->original_index].propertyFlags, + replay_req); + } + else + { + usage = GetImageMemoryUsage( + res_alloc_info->usage, + res_alloc_info->tiling, + capture_memory_properties_.memoryTypes[mem_alloc_info->original_index].propertyFlags, + replay_req); + } + + VkResult result = VmaAllocateMemory(*mem_alloc_info, + original_memory_bind.memoryOffset, + capture_req, + replay_req, + requires_dedicated_allocation, + prefers_dedicated_allocation, + buffer, + image, + usage, + &vma_mem_info); + if (result < 0) + { + GFXRECON_LOG_WARNING("AllocateMemory failed: %s in Rebind QueueBindSparse %s.", + util::ToString(result).c_str(), + type_string.c_str()); + return; + } + + GFXRECON_ASSERT(vma_mem_info); + modified_memory_bind.memory = vma_mem_info->allocation_info.deviceMemory; + modified_memory_bind.memoryOffset = + GetRebindOffsetFromOriginalDeviceMemory(original_memory_bind.memoryOffset, *vma_mem_info); + } + + if (allocator_->m_UseMutex && vma_mem_info != nullptr && vma_mem_info->allocation != nullptr && + vma_mem_info->allocation->GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK) + { + VmaDeviceMemoryBlock* const pBlock = vma_mem_info->allocation->GetBlock(); + VMA_ASSERT(pBlock && "QueueBindSparse to allocation that doesn't belong to any block."); + + if (vma_mem_blocks.find(pBlock) == vma_mem_blocks.end()) + { + vma_mem_blocks.insert(pBlock); + } + } +} + +VkResult VulkanRebindAllocator::QueueBindSparse(VkQueue queue, + uint32_t bind_info_count, + const VkBindSparseInfo* bind_infos, + VkFence fence, + ResourceData* allocator_buf_datas, + const MemoryData* allocator_buf_mem_datas, + VkMemoryPropertyFlags* bind_buf_mem_properties, + ResourceData* allocator_img_op_datas, + const MemoryData* allocator_img_op_mem_datas, + VkMemoryPropertyFlags* bind_img_op_mem_properties, + ResourceData* allocator_img_datas, + const MemoryData* allocator_img_mem_datas, + VkMemoryPropertyFlags* bind_img_mem_properties) +{ + VkResult result = VK_ERROR_INITIALIZATION_FAILED; + + if (bind_info_count == 0) + { + return result; + } + + std::vector modified_bind_infos(bind_infos, bind_infos + bind_info_count); + + std::vector> modified_buffer_bind_infos(bind_info_count); + std::vector> modified_image_opaque_bind_infos(bind_info_count); + std::vector> modified_image_bind_infos(bind_info_count); + + std::vector> memory_binds; + std::vector> image_memory_binds; + + std::unordered_set vma_mem_blocks; + std::vector vma_memory_infos; + + uint32_t alc_buf_i = 0; + uint32_t alc_img_op_i = 0; + uint32_t alc_img_i = 0; + + uint32_t alc_buf_mem_i = 0; + uint32_t alc_img_op_mem_i = 0; + uint32_t alc_img_mem_i = 0; + + for (uint32_t i = 0; i < bind_info_count; ++i) + { + const VkBindSparseInfo& original_bind_info = bind_infos[i]; + VkBindSparseInfo& modified_bind_info = modified_bind_infos[i]; + + modified_buffer_bind_infos[i] = { original_bind_info.pBufferBinds, + original_bind_info.pBufferBinds + original_bind_info.bufferBindCount }; + modified_image_opaque_bind_infos[i] = { original_bind_info.pImageOpaqueBinds, + original_bind_info.pImageOpaqueBinds + + original_bind_info.imageOpaqueBindCount }; + modified_image_bind_infos[i] = { original_bind_info.pImageBinds, + original_bind_info.pImageBinds + original_bind_info.imageBindCount }; + + for (uint32_t buf_i = 0; buf_i < original_bind_info.bufferBindCount; ++buf_i) + { + const VkSparseBufferMemoryBindInfo& original_buffer_bind_info = original_bind_info.pBufferBinds[buf_i]; + VkSparseBufferMemoryBindInfo& modified_buffer_bind_info = modified_buffer_bind_infos[i][buf_i]; + + memory_binds.emplace_back(original_buffer_bind_info.pBinds, + original_buffer_bind_info.pBinds + original_buffer_bind_info.bindCount); + + for (uint32_t buf_mem_i = 0; buf_mem_i < original_buffer_bind_info.bindCount; ++buf_mem_i) + { + const VkSparseMemoryBind& original_memory_bind = original_buffer_bind_info.pBinds[buf_mem_i]; + MemoryAllocInfo* mem_alloc_info = + reinterpret_cast(allocator_buf_mem_datas[alc_buf_mem_i]); + RebindSparseMemory>( + original_memory_bind, + memory_binds.back()[buf_mem_i], + reinterpret_cast(allocator_buf_datas[alc_buf_i]), + mem_alloc_info, + vma_mem_blocks, + vma_memory_infos, + original_buffer_bind_info.buffer, + VK_NULL_HANDLE, + "buffer", + original_memory_bind.size); + ++alc_buf_mem_i; + } + + modified_buffer_bind_info.pBinds = memory_binds.back().data(); + + ++alc_buf_i; + } + + for (uint32_t img_op_i = 0; img_op_i < original_bind_info.imageOpaqueBindCount; ++img_op_i) + { + const VkSparseImageOpaqueMemoryBindInfo& original_image_opaque_bind_info = + original_bind_info.pImageOpaqueBinds[img_op_i]; + VkSparseImageOpaqueMemoryBindInfo& modified_image_opaque_bind_info = + modified_image_opaque_bind_infos[i][img_op_i]; + + memory_binds.emplace_back(original_image_opaque_bind_info.pBinds, + original_image_opaque_bind_info.pBinds + + original_image_opaque_bind_info.bindCount); + + for (uint32_t img_op_mem_i = 0; img_op_mem_i < original_image_opaque_bind_info.bindCount; ++img_op_mem_i) + { + const VkSparseMemoryBind& original_memory_bind = original_image_opaque_bind_info.pBinds[img_op_mem_i]; + auto* mem_alloc_info = reinterpret_cast(allocator_img_op_mem_datas[alc_img_op_mem_i]); + RebindSparseMemory>( + original_memory_bind, + memory_binds.back()[img_op_mem_i], + reinterpret_cast(allocator_img_op_datas[alc_img_op_i]), + mem_alloc_info, + vma_mem_blocks, + vma_memory_infos, + VK_NULL_HANDLE, + original_image_opaque_bind_info.image, + "imageOpaque", + original_memory_bind.size); + ++alc_img_op_mem_i; + } + + modified_image_opaque_bind_info.pBinds = memory_binds.back().data(); + + ++alc_img_op_i; + } + + for (uint32_t img_i = 0; img_i < original_bind_info.imageBindCount; ++img_i) + { + const VkSparseImageMemoryBindInfo& original_image_bind_info = original_bind_info.pImageBinds[img_i]; + VkSparseImageMemoryBindInfo& modified_image_bind_info = modified_image_bind_infos[i][img_i]; + + image_memory_binds.emplace_back(original_image_bind_info.pBinds, + original_image_bind_info.pBinds + original_image_bind_info.bindCount); + + for (uint32_t img_mem_i = 0; img_mem_i < original_image_bind_info.bindCount; ++img_mem_i) + { + const VkSparseImageMemoryBind& original_memory_bind = original_image_bind_info.pBinds[img_mem_i]; + auto* mem_alloc_info = reinterpret_cast(allocator_img_mem_datas[alc_img_mem_i]); + + RebindSparseMemory>( + original_memory_bind, + image_memory_binds.back()[img_mem_i], + reinterpret_cast(allocator_img_datas[alc_img_i]), + mem_alloc_info, + vma_mem_blocks, + vma_memory_infos, + VK_NULL_HANDLE, + original_image_bind_info.image, + "image", + 0); + + ++alc_img_mem_i; + } + modified_image_bind_info.pBinds = image_memory_binds.back().data(); + ++alc_img_i; + } + + modified_bind_info.bufferBindCount = modified_buffer_bind_infos[i].size(); + modified_bind_info.pBufferBinds = modified_buffer_bind_infos[i].data(); + modified_bind_info.imageOpaqueBindCount = modified_image_opaque_bind_infos[i].size(); + modified_bind_info.pImageOpaqueBinds = modified_image_opaque_bind_infos[i].data(); + modified_bind_info.imageBindCount = modified_image_bind_infos[i].size(); + modified_bind_info.pImageBinds = modified_image_bind_infos[i].data(); + } + + for (VmaDeviceMemoryBlock* block : vma_mem_blocks) + { + block->m_MapAndBindMutex.Lock(); + } + + result = functions_.queue_bind_sparse(queue, modified_bind_infos.size(), modified_bind_infos.data(), fence); + + for (VmaDeviceMemoryBlock* block : vma_mem_blocks) + { + block->m_MapAndBindMutex.Unlock(); + } + + if (result == VK_SUCCESS) + { + alc_buf_i = 0; + alc_img_op_i = 0; + alc_img_i = 0; + + alc_buf_mem_i = 0; + alc_img_op_mem_i = 0; + alc_img_mem_i = 0; + + uint32_t vma_mem_info_i = 0; + + for (const VkBindSparseInfo& bind_info : modified_bind_infos) + { + for (uint32_t buf_i = 0; buf_i < bind_info.bufferBindCount; ++buf_i) + { + const VkSparseBufferMemoryBindInfo& buffer_bind_info = bind_info.pBufferBinds[buf_i]; + + for (uint32_t buf_mem_i = 0; buf_mem_i < buffer_bind_info.bindCount; ++buf_mem_i) + { + auto res_alloc_info = reinterpret_cast(allocator_buf_datas[alc_buf_i]); + auto mem_alloc_info = reinterpret_cast(allocator_buf_mem_datas[alc_buf_mem_i]); + + if (mem_alloc_info != nullptr) + { + UpdateAllocInfo(*res_alloc_info, + VK_HANDLE_TO_UINT64(buffer_bind_info.buffer), + MemoryInfoType::kSparse, + *mem_alloc_info, + *vma_memory_infos[vma_mem_info_i], + bind_buf_mem_properties[alc_buf_mem_i]); + } + + ++vma_mem_info_i; + ++alc_buf_mem_i; + } + ++alc_buf_i; + } + + for (uint32_t img_op_i = 0; img_op_i < bind_info.imageOpaqueBindCount; ++img_op_i) + { + const VkSparseImageOpaqueMemoryBindInfo& image_opaque_bind_info = bind_info.pImageOpaqueBinds[img_op_i]; + + for (uint32_t img_op_mem_i = 0; img_op_mem_i < image_opaque_bind_info.bindCount; ++img_op_mem_i) + { + auto res_alloc_info = reinterpret_cast(allocator_img_op_datas[alc_img_op_i]); + auto mem_alloc_info = + reinterpret_cast(allocator_img_op_mem_datas[alc_img_op_mem_i]); + + if (mem_alloc_info != nullptr) + { + UpdateAllocInfo(*res_alloc_info, + VK_HANDLE_TO_UINT64(image_opaque_bind_info.image), + MemoryInfoType::kSparse, + *mem_alloc_info, + *vma_memory_infos[vma_mem_info_i], + bind_img_op_mem_properties[alc_img_op_mem_i]); + } + + ++vma_mem_info_i; + ++alc_img_op_mem_i; + } + ++alc_img_op_i; + } + + for (uint32_t img_i = 0; img_i < bind_info.imageBindCount; ++img_i) + { + const VkSparseImageMemoryBindInfo& image_bind_info = bind_info.pImageBinds[img_i]; + + for (uint32_t img_mem_i = 0; img_mem_i < image_bind_info.bindCount; ++img_mem_i) + { + auto res_alloc_info = reinterpret_cast(allocator_img_datas[alc_img_i]); + auto mem_alloc_info = reinterpret_cast(allocator_img_mem_datas[alc_img_mem_i]); + + if (mem_alloc_info != nullptr) + { + UpdateAllocInfo(*res_alloc_info, + VK_HANDLE_TO_UINT64(image_bind_info.image), + MemoryInfoType::kSparse, + *mem_alloc_info, + *vma_memory_infos[vma_mem_info_i], + bind_img_mem_properties[alc_img_mem_i]); + } + + ++vma_mem_info_i; + ++alc_img_mem_i; + } + ++alc_img_i; + } + } + } + + return result; +} + +uint64_t VulkanRebindAllocator::GetDeviceMemoryOpaqueCaptureAddress(const VkDeviceMemoryOpaqueCaptureAddressInfo* info, + MemoryData allocator_data) +{ + auto modified_info = *info; + MemoryAllocInfo* memory_alloc_info = reinterpret_cast(allocator_data); + GFXRECON_ASSERT(memory_alloc_info); + + if (memory_alloc_info->vma_mem_infos.empty()) + { + GFXRECON_LOG_WARNING( + "There's no allocations or memory is VK_NULL_HANDLE. Skip GetDeviceMemoryOpaqueCaptureAddress"); + return 0; + } + + uint64_t result = 0; + + for (const auto& mem_info : memory_alloc_info->vma_mem_infos) + { + modified_info.memory = mem_info->allocation_info.deviceMemory; + + switch (mem_info->allocation->GetType()) + { + case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED: + { + result = functions_.get_device_memory_opaque_capture_address(device_, &modified_info); + break; + } + case VmaAllocation_T::ALLOCATION_TYPE_BLOCK: + { + VmaDeviceMemoryBlock* const pBlock = mem_info->allocation->GetBlock(); + VMA_ASSERT(pBlock && + "GetDeviceMemoryOpaqueCaptureAddress to allocation that doesn't belong to any block."); + + VmaMutexLock lock(pBlock->m_MapAndBindMutex, allocator_->m_UseMutex); + result = functions_.get_device_memory_opaque_capture_address(device_, &modified_info); + break; + } + default: + VMA_ASSERT(0); + } + } + return result; +} + +void VulkanRebindAllocator::ClearStagingResources() +{ + if (staging_resources_.empty()) + { + return; + } + const uint64_t num_fences = staging_resources_.size(); + std::vector fences(num_fences); + for (uint64_t i = 0; i < num_fences; i++) + { + fences[i] = staging_resources_[i].staging_fence; + } + functions_.wait_for_fences(device_, num_fences, fences.data(), VK_TRUE, UINT64_MAX); + std::vector cmd_buffers_to_delete; + + for (auto& staging_resource : staging_resources_) + { + cmd_buffers_to_delete.push_back(staging_resource.cmd_buffer); + functions_.destroy_fence(device_, staging_resource.staging_fence, nullptr); + functions_.destroy_semaphore(device_, staging_resource.staging_semaphore, nullptr); + vmaDestroyBuffer(allocator_, staging_resource.staging_buf, staging_resource.staging_alloc); + } + functions_.free_command_buffers(device_, cmd_pool_, cmd_buffers_to_delete.size(), cmd_buffers_to_delete.data()); + staging_resources_.clear(); +} + GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_rebind_allocator.h b/third_party/gfxreconstruct/framework/decode/vulkan_rebind_allocator.h index 13fd3a333..91ddc36ab 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_rebind_allocator.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_rebind_allocator.h @@ -80,11 +80,11 @@ class VulkanRebindAllocator : public VulkanResourceAllocator const VkAllocationCallbacks* allocation_callbacks, format::HandleId capture_id, VkVideoSessionKHR* session, - std::vector* allocator_datas) override; + ResourceData* allocator_data) override; virtual void DestroyVideoSession(VkVideoSessionKHR session, const VkAllocationCallbacks* allocation_callbacks, - std::vector allocator_datas) override; + ResourceData allocator_data) override; virtual void GetBufferMemoryRequirements(VkBuffer buffer, VkMemoryRequirements* memory_requirements, @@ -111,7 +111,7 @@ class VulkanRebindAllocator : public VulkanResourceAllocator virtual VkResult GetVideoSessionMemoryRequirementsKHR(VkVideoSessionKHR video_session, uint32_t* memory_requirements_count, VkVideoSessionMemoryRequirementsKHR* memory_requirements, - std::vector allocator_datas) override; + ResourceData allocator_data) override; virtual VkResult AllocateMemory(const VkMemoryAllocateInfo* allocate_info, const VkAllocationCallbacks* allocation_callbacks, @@ -174,7 +174,7 @@ class VulkanRebindAllocator : public VulkanResourceAllocator virtual VkResult BindVideoSessionMemory(VkVideoSessionKHR video_session, uint32_t bind_info_count, const VkBindVideoSessionMemoryInfoKHR* bind_infos, - const ResourceData* allocator_session_datas, + const ResourceData allocator_session_data, const MemoryData* allocator_memory_datas, VkMemoryPropertyFlags* bind_memory_properties) override; @@ -185,8 +185,13 @@ class VulkanRebindAllocator : public VulkanResourceAllocator void** data, MemoryData allocator_data) override; + virtual VkResult + MapMemory2(const VkMemoryMapInfo* memory_map_info, void** data, MemoryData allocator_data) override; + virtual void UnmapMemory(VkDeviceMemory memory, MemoryData allocator_data) override; + virtual VkResult UnmapMemory2(const VkMemoryUnmapInfo* memory_unmap_info, MemoryData allocator_data) override; + virtual VkResult FlushMappedMemoryRanges(uint32_t memory_range_count, const VkMappedMemoryRange* memory_ranges, const MemoryData* allocator_datas) override; @@ -229,9 +234,26 @@ class VulkanRebindAllocator : public VulkanResourceAllocator virtual void ReportBindVideoSessionIncompatibility(VkVideoSessionKHR video_session, uint32_t bind_info_count, const VkBindVideoSessionMemoryInfoKHR* bind_infos, - const ResourceData* allocator_resource_datas, + const ResourceData allocator_resource_data, const MemoryData* allocator_memory_datas) override; + virtual void + ReportBindAccelerationStructureMemoryNVIncompatibility(uint32_t bind_info_count, + const VkBindAccelerationStructureMemoryInfoNV* bind_infos, + const ResourceData* allocator_acc_datas, + const MemoryData* allocator_memory_datas) override; + + virtual void ReportQueueBindSparseIncompatibility(VkQueue queue, + uint32_t bind_info_count, + const VkBindSparseInfo* bind_infos, + VkFence fence, + const ResourceData* allocator_buf_datas, + const MemoryData* allocator_buf_mem_datas, + const ResourceData* allocator_img_op_datas, + const MemoryData* allocator_img_op_mem_datas, + const ResourceData* allocator_img_datas, + const MemoryData* allocator_img_mem_datas) override; + // Direct allocation methods that perform memory allocation and resource creation without performing memory // translation. These methods allow the replay tool to allocate staging resources through the resource allocator so // that the allocator is aware of all allocations performed at replay. @@ -336,6 +358,54 @@ class VulkanRebindAllocator : public VulkanResourceAllocator virtual bool SupportsOpaqueDeviceAddresses() override { return false; } virtual bool SupportBindVideoSessionMemory() override { return true; } + virtual void SetDeviceMemoryPriority(VkDeviceMemory memory, float priority, MemoryData allocator_data) override; + + virtual VkResult GetMemoryRemoteAddressNV(const VkMemoryGetRemoteAddressInfoNV* memory_get_remote_address_info, + VkRemoteAddressNV* address, + MemoryData allocator_data) override; + + virtual VkResult CreateAccelerationStructureNV(const VkAccelerationStructureCreateInfoNV* create_info, + const VkAllocationCallbacks* allocation_callbacks, + format::HandleId capture_id, + VkAccelerationStructureNV* acc_str, + ResourceData* allocator_data) override; + + virtual void DestroyAccelerationStructureNV(VkAccelerationStructureNV acc_str, + const VkAllocationCallbacks* allocation_callbacks, + ResourceData allocator_data) override; + + virtual void + GetAccelerationStructureMemoryRequirementsNV(const VkAccelerationStructureMemoryRequirementsInfoNV* info, + VkMemoryRequirements2KHR* memory_requirements, + ResourceData allocator_data) override; + + virtual VkResult BindAccelerationStructureMemoryNV(uint32_t bind_info_count, + const VkBindAccelerationStructureMemoryInfoNV* bind_infos, + const ResourceData* allocator_acc_datas, + const MemoryData* allocator_memory_datas, + VkMemoryPropertyFlags* bind_memory_properties) override; + + virtual VkResult GetMemoryFd(const VkMemoryGetFdInfoKHR* get_fd_info, int* pFd, MemoryData allocator_data) override; + + virtual VkResult QueueBindSparse(VkQueue queue, + uint32_t bind_info_count, + const VkBindSparseInfo* bind_infos, + VkFence fence, + ResourceData* allocator_buf_datas, + const MemoryData* allocator_buf_mem_datas, + VkMemoryPropertyFlags* bind_buf_mem_properties, + ResourceData* allocator_img_op_datas, + const MemoryData* allocator_img_op_mem_datas, + VkMemoryPropertyFlags* bind_img_op_mem_properties, + ResourceData* allocator_img_datas, + const MemoryData* allocator_img_mem_datas, + VkMemoryPropertyFlags* bind_img_mem_properties) override; + + virtual uint64_t GetDeviceMemoryOpaqueCaptureAddress(const VkDeviceMemoryOpaqueCaptureAddressInfo* info, + MemoryData allocator_data) override; + + void ClearStagingResources() override; + private: struct MemoryAllocInfo; @@ -346,30 +416,85 @@ class VulkanRebindAllocator : public VulkanResourceAllocator VkSubresourceLayout rebind{}; }; - enum ObjectType + enum MemoryInfoType + { + kBasic, // single: buffer, image + kSparse, // array: buffer, image + kVideoSession // array: video_session + }; + + // Create a new allocation for a binding memory case. + struct VmaMemoryInfo { - none = 0, - buffer = 1, - image = 2, - video_session = 3, + MemoryAllocInfo* memory_info{ nullptr }; + VkMemoryRequirements capture_mem_req{}; + VkMemoryRequirements replay_mem_req{}; + + // If requires_dedicated_allocation or prefers_dedicated_allocation is true, the object should have an its own + // memory, not shared. + bool requires_dedicated_allocation = false; + bool prefers_dedicated_allocation = false; + + VmaAllocationCreateInfo alc_create_info{}; + VkDeviceSize offset_from_original_device_memory{ 0 }; + uint64_t reference_count{ 0 }; + + VmaAllocation allocation{ VK_NULL_HANDLE }; + VmaAllocationInfo allocation_info{}; + + bool is_host_visible{ false }; + void* mapped_pointer{ nullptr }; + + [[nodiscard]] bool is_compatible(VkDeviceSize offset, + const VkMemoryRequirements& capture_req, + const VkMemoryRequirements& replay_req, + const VmaAllocationCreateInfo& create_info) const + { + // If capture_req.size is 0, it means the memory requirement is not recorded in the capture file. + // It didn't call vkGetImageMemoryRequirements or vkGetBufferMemoryRequirements before, like swapchain + // images. We can't be sure it's compatible. + if (capture_req.size == 0) + { + return false; + } + + // memory offset and size is in the range. mem_req and create_info are the same. + if ((offset >= offset_from_original_device_memory) && + ((offset + capture_req.size) <= (offset_from_original_device_memory + capture_mem_req.size)) && + ((offset + replay_req.size) <= (offset_from_original_device_memory + replay_mem_req.size)) && + (replay_req.alignment == replay_mem_req.alignment) && + (replay_req.memoryTypeBits == replay_mem_req.memoryTypeBits) && + (create_info.flags == alc_create_info.flags) && (create_info.usage == alc_create_info.usage) && + (create_info.requiredFlags == alc_create_info.requiredFlags) && + (create_info.preferredFlags == alc_create_info.preferredFlags) && + (create_info.memoryTypeBits == alc_create_info.memoryTypeBits) && + (create_info.pool == alc_create_info.pool) && (create_info.priority == alc_create_info.priority) && + !requires_dedicated_allocation && !prefers_dedicated_allocation) + { + // GetRebindOffsetFromOriginalDeviceMemory + auto offset_from_device_memory = offset - offset_from_original_device_memory + allocation_info.offset; + // memoryOffset is must be an integer multiple of the VkMemoryRequirements::alignment + if (offset_from_device_memory % replay_req.alignment == 0) + { + return true; + } + } + return false; + } }; struct ResourceAllocInfo { - MemoryAllocInfo* memory_info{ nullptr }; - VmaAllocation allocation{ VK_NULL_HANDLE }; - bool is_host_visible{ false }; - void* mapped_pointer{ nullptr }; - VkDeviceSize original_offset{ 0 }; - VkDeviceSize rebind_offset{ 0 }; - VkDeviceSize original_size{ 0 }; - VkDeviceSize rebind_size{ 0 }; - ObjectType object_type{ none }; - VkFlags usage{ 0 }; - VkImageTiling tiling{}; - uint32_t height{ 0 }; - bool uses_extensions{ false }; - VkFormat format{ VK_FORMAT_UNDEFINED }; + MemoryInfoType memory_info_type; + std::vector bound_memory_infos; // VideoSession and sparse could be multiple bindings. + std::vector capture_mem_reqs{}; + + VkObjectType object_type{ VK_OBJECT_TYPE_UNKNOWN }; + VkFlags usage{ 0 }; + VkImageTiling tiling{}; + uint32_t height{ 0 }; + bool uses_extensions{ false }; + VkFormat format{ VK_FORMAT_UNDEFINED }; std::string debug_utils_name; std::vector debug_utils_tag; @@ -382,36 +507,52 @@ class VulkanRebindAllocator : public VulkanResourceAllocator struct MemoryAllocInfo { + format::HandleId capture_id{ format::kNullHandleId }; VkDeviceSize allocation_size{ 0 }; uint32_t original_index{ std::numeric_limits::max() }; bool is_mapped{ false }; VkDeviceSize mapped_offset{ 0 }; - AHardwareBuffer* ahb{ nullptr }; - VkDeviceMemory ahb_memory{ VK_NULL_HANDLE }; + AHardwareBuffer* ahb{ nullptr }; + VkDeviceMemory ahb_memory{ VK_NULL_HANDLE }; std::unique_ptr original_content; - std::unordered_map original_buffers; - std::unordered_map original_images; - std::unordered_map original_sessions; + std::unordered_map original_objects; // Key is object handle. + + std::vector> vma_mem_infos; std::string debug_utils_name; std::vector debug_utils_tag; uint64_t debug_utils_tag_name; + bool is_free{ false }; + }; + + struct StagingResources + { + VkCommandBuffer cmd_buffer; + VkBuffer staging_buf; + VkSemaphore staging_semaphore; + VmaAllocation staging_alloc; + ResourceAllocInfo* resource_alloc_info; + size_t dst_offset; + VkFence staging_fence; }; private: void WriteBoundResource(ResourceAllocInfo* resource_alloc_info, + VmaMemoryInfo* bound_memory_info, VkDeviceSize src_offset, VkDeviceSize dst_offset, VkDeviceSize data_size, const uint8_t* data); void WriteBoundResourceStaging(ResourceAllocInfo* resource_alloc_info, + VmaMemoryInfo* bound_memory_info, size_t src_offset, size_t dst_offset, size_t data_size, const uint8_t* data); void WriteBoundResourceDirect(ResourceAllocInfo* resource_alloc_info, + VmaMemoryInfo* bound_memory_info, size_t src_offset, size_t dst_offset, size_t data_size, @@ -421,21 +562,22 @@ class VulkanRebindAllocator : public VulkanResourceAllocator // resource overlapped with the original range, the src_offset is the offset from the start of the original // resource, the dst_offset is the offset from the start of the new resource allocation, and the data_size is the // region of the resource that overlaps with the original memory region. - bool TranslateMemoryRange(const ResourceAllocInfo* resource_alloc_info, - VkDeviceSize oiriginal_start, - VkDeviceSize original_end, - VkDeviceSize* src_offset, - VkDeviceSize* dst_offset, - VkDeviceSize* data_size); + bool TranslateMemoryRange(const VmaMemoryInfo* bound_memory_info, + VkDeviceSize oiriginal_start, + VkDeviceSize original_end, + VkDeviceSize* src_offset, + VkDeviceSize* dst_offset, + VkDeviceSize* data_size); void UpdateBoundResource(ResourceAllocInfo* resource_alloc_info, + VmaMemoryInfo* bound_memory_info, VkDeviceSize write_start, VkDeviceSize write_end, const uint8_t* data); - VkResult UpdateMappedMemoryRange(ResourceAllocInfo* resource_alloc_info, - VkDeviceSize oiriginal_start, - VkDeviceSize original_end, + VkResult UpdateMappedMemoryRange(VmaMemoryInfo* bound_memory_info, + VkDeviceSize oiriginal_start, + VkDeviceSize original_end, VkResult (*update_func)(VmaAllocator, VmaAllocation, VkDeviceSize, VkDeviceSize)); VkResult UpdateMappedMemoryRanges(uint32_t memory_range_count, @@ -452,7 +594,7 @@ class VulkanRebindAllocator : public VulkanResourceAllocator VkMemoryPropertyFlags capture_properties, const VkMemoryRequirements& replay_requirements); - VmaMemoryUsage GetVideoSeesionMemoryUsage(VkMemoryPropertyFlags capture_properties, + VmaMemoryUsage GetVideoSessionMemoryUsage(VkMemoryPropertyFlags capture_properties, const VkMemoryRequirements& replay_requirements); VmaMemoryUsage AdjustMemoryUsage(VmaMemoryUsage desired_usage, const VkMemoryRequirements& replay_requirements); @@ -480,10 +622,70 @@ class VulkanRebindAllocator : public VulkanResourceAllocator void SetBindingDebugUtilsNameAndTag(const MemoryAllocInfo* memory_alloc_info, const ResourceAllocInfo* resource_alloc_info, VkDeviceMemory device_memory, - VkObjectType resource_type, uint64_t resource_handle); - private: + VkResult AllocateMemoryForBuffer(VkBuffer buffer, + VkDeviceSize memory_offset, + const VkPhysicalDeviceMemoryProperties& device_memory_properties, + ResourceAllocInfo& resource_alloc_info, + MemoryAllocInfo& memory_alloc_info, + VmaMemoryInfo** vma_mem_info); + + VkResult AllocateMemoryForImage(VkImage image, + VkDeviceSize memory_offset, + const VkPhysicalDeviceMemoryProperties& device_memory_properties, + ResourceAllocInfo& resource_alloc_info, + MemoryAllocInfo& memory_alloc_info, + VmaMemoryInfo** vma_mem_info); + + // If it's bind by vma function, like vmaBindBufferMemory2, vmaBindBufferImage2, get the offset from it. + VkDeviceSize GetRebindOffsetFromVMA(VkDeviceSize original_offset, const VmaMemoryInfo& vma_mem_info); + + // If it bind by vk function, like vkBindVideoSessionMemory, vkQueueBindSparse, get the offset from it. + VkDeviceSize GetRebindOffsetFromOriginalDeviceMemory(VkDeviceSize original_offset, + const VmaMemoryInfo& vma_mem_info); + + VkResult VmaAllocateMemory(MemoryAllocInfo& memory_alloc_info, + VkDeviceSize original_offset, + const VkMemoryRequirements& capture_mem_req, + const VkMemoryRequirements& replay_mem_req, + bool requires_dedicated_allocation, + bool prefers_dedicated_allocation, + VkBuffer dedicated_buffer, + VkImage dedicated_image, + VmaMemoryUsage usage, + VmaMemoryInfo** vma_mem_info); + + static bool FindVmaMemoryInfo(MemoryAllocInfo& memory_alloc_info, + VkDeviceSize original_offset, + const VkMemoryRequirements& capture_mem_req, + const VkMemoryRequirements& replay_mem_req, + bool requires_dedicated_allocation, + bool prefers_dedicated_allocation, + const VmaAllocationCreateInfo& alc_create_info, + VmaMemoryInfo** vma_mem_info); + + void RemoveVmaMemoryInfo(ResourceAllocInfo& resource_alloc_info, uint64_t object_handle); + + void UpdateAllocInfo(ResourceAllocInfo& resource_alloc_info, + uint64_t object_handle, + MemoryInfoType memory_info_type, + MemoryAllocInfo& memory_alloc_info, + VmaMemoryInfo& vma_mem_info, + VkMemoryPropertyFlags& bind_memory_property); + + template + void RebindSparseMemory(const T& original_memory_bind, + T& modified_memory_bind, + ResourceAllocInfo* res_alloc_info, + MemoryAllocInfo* mem_alloc_info, + S vma_mem_blocks, + std::vector& vma_memory_infos, + VkBuffer buffer, + VkImage image, + const std::string& type_string, + VkDeviceSize alloc_size); + VkDevice device_ = VK_NULL_HANDLE; VmaAllocator allocator_; Functions functions_; @@ -491,13 +693,14 @@ class VulkanRebindAllocator : public VulkanResourceAllocator VkPhysicalDeviceType capture_device_type_; VkPhysicalDeviceMemoryProperties capture_memory_properties_; VkPhysicalDeviceMemoryProperties replay_memory_properties_; - VkCommandBuffer cmd_buffer_ = VK_NULL_HANDLE; VkCommandPool cmd_pool_ = VK_NULL_HANDLE; VkQueue staging_queue_ = VK_NULL_HANDLE; uint32_t staging_queue_family_{}; //! define a general minimum alignment for buffers uint32_t min_buffer_alignment_ = 128; + + std::vector staging_resources_{}; }; GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_consumer_base.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_replay_consumer_base.cpp index 929cd3a22..dbdda31be 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_consumer_base.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_consumer_base.cpp @@ -1,7 +1,7 @@ /* ** Copyright (c) 2018-2020 Valve Corporation ** Copyright (c) 2018-2025 LunarG, Inc. -** Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. +** Copyright (c) 2023-2025 Advanced Micro Devices, Inc. All rights reserved. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -27,12 +27,14 @@ #include "decode/descriptor_update_template_decoder.h" #include "decode/resource_util.h" #include "decode/vulkan_captured_swapchain.h" +#include "decode/vulkan_device_address_tracker.h" #include "decode/vulkan_object_info.h" #include "decode/vulkan_virtual_swapchain.h" #include "decode/vulkan_offscreen_swapchain.h" #include "decode/vulkan_address_replacer.h" #include "decode/vulkan_enum_util.h" -#include "decode/vulkan_feature_util.h" +#include "encode/vulkan_capture_manager.h" +#include "graphics/vulkan_feature_util.h" #include "decode/vulkan_object_cleanup_util.h" #include "format/format.h" #include "format/format_util.h" @@ -50,7 +52,6 @@ #include "util/hash.h" #include "util/platform.h" #include "util/logging.h" -#include "util/linear_hashmap.h" #include "decode/mark_injected_commands.h" #include "spirv_reflect.h" @@ -58,29 +59,30 @@ #include "generated/generated_vulkan_enum_to_string.h" #include "util/to_string.h" #include "vulkan/vulkan_core.h" +#include "Vulkan-Utility-Libraries/vk_format_utils.h" #include -#include -#include #include #include #include #include +#include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) -const size_t kMaxEventStatusRetries = 16; -const size_t kMaxQueryPoolResultsRetries = 16; +const size_t kMaxEventStatusRetries = 16; const char kUnknownDeviceLabel[] = ""; const char kValidationLayerName[] = "VK_LAYER_KHRONOS_validation"; const std::unordered_set kSurfaceExtensions = { - VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, VK_MVK_IOS_SURFACE_EXTENSION_NAME, VK_MVK_MACOS_SURFACE_EXTENSION_NAME, - VK_KHR_MIR_SURFACE_EXTENSION_NAME, VK_NN_VI_SURFACE_EXTENSION_NAME, VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME, - VK_KHR_WIN32_SURFACE_EXTENSION_NAME, VK_KHR_XCB_SURFACE_EXTENSION_NAME, VK_KHR_XLIB_SURFACE_EXTENSION_NAME, - VK_EXT_METAL_SURFACE_EXTENSION_NAME, + VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, VK_MVK_IOS_SURFACE_EXTENSION_NAME, + VK_MVK_MACOS_SURFACE_EXTENSION_NAME, VK_KHR_MIR_SURFACE_EXTENSION_NAME, + VK_NN_VI_SURFACE_EXTENSION_NAME, VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME, + VK_KHR_WIN32_SURFACE_EXTENSION_NAME, VK_KHR_XCB_SURFACE_EXTENSION_NAME, + VK_KHR_XLIB_SURFACE_EXTENSION_NAME, VK_EXT_METAL_SURFACE_EXTENSION_NAME, + VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME, }; // Device extensions to enable for trimming state setup, when available. @@ -90,6 +92,20 @@ const std::unordered_set kFunctionsAllowedToReturnDifferentCodeThan "vkSetDebugUtilsObjectNameEXT", "vkSetDebugUtilsObjectTagEXT" }; +// LUT containing an allow-list of differing Vulkan return-types (mapping: capture -> replay) +const std::unordered_map kResultValuesAllowedDifferentCodeThanCapture = { + + { VK_TIMEOUT, VK_SUCCESS }, + { VK_NOT_READY, VK_SUCCESS }, + { VK_ERROR_OUT_OF_DATE_KHR, VK_SUCCESS }, + { VK_SUBOPTIMAL_KHR, VK_SUCCESS }, + + // silences: [gfxrecon] WARNING - API call vkGetEventStatus returned value VK_EVENT_SET that does not match return + // value from capture file: VK_EVENT_RESET. + // -> considered harmless and 'can' create a lot of noise. + { VK_EVENT_RESET, VK_EVENT_SET }, +}; + static VKAPI_ATTR VkBool32 VKAPI_CALL DebugReportCallback(VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, @@ -189,8 +205,7 @@ static uint32_t GetHardwareBufferFormatBpp(uint32_t format) VulkanReplayConsumerBase::VulkanReplayConsumerBase(std::shared_ptr application, const VulkanReplayOptions& options) : - options_(options), - loader_handle_(nullptr), get_instance_proc_addr_(nullptr), create_instance_proc_(nullptr), + options_(options), loader_handle_(nullptr), get_instance_proc_addr_(nullptr), create_instance_proc_(nullptr), application_(application), loading_trim_state_(false), replaying_trimmed_capture_(false), fps_info_(nullptr), have_imported_semaphores_(false), omitted_pipeline_cache_data_(false) { @@ -273,6 +288,10 @@ VulkanReplayConsumerBase::~VulkanReplayConsumerBase() background_queue_.join_all(); main_thread_queue_.poll(); + // This will call the destructor for dump resources. + // This needs to be done before parent devices are destroyed + resource_dumper_ = nullptr; + // Cleanup screenshot resources before destroying device. object_info_table_->VisitVkDeviceInfo([this](const VulkanDeviceInfo* info) { assert(info != nullptr); @@ -314,8 +333,6 @@ VulkanReplayConsumerBase::~VulkanReplayConsumerBase() graphics::ReleaseLoader(loader_handle_); } - resource_dumper_ = nullptr; - CommonObjectInfoTable::ReleaseSingleton(); object_info_table_ = nullptr; } @@ -350,6 +367,11 @@ void VulkanReplayConsumerBase::ProcessStateEndMarker(uint64_t frame_number) { fps_info_->ProcessStateEndMarker(frame_number); } + + if (options_.dumping_resources) + { + resource_dumper_->ProcessStateEndMarker(); + } } void VulkanReplayConsumerBase::ProcessDisplayMessageCommand(const std::string& message) @@ -942,6 +964,20 @@ void VulkanReplayConsumerBase::ProcessSetOpaqueAddressCommand(format::HandleId d } } +void VulkanReplayConsumerBase::ProcessSetOpaqueDescriptorDataCommand(format::HandleId device_id, + format::HandleId object_id, + uint32_t data_size, + const uint8_t* data) +{ + VulkanDeviceInfo* device_info = object_info_table_->GetVkDeviceInfo(device_id); + + if (device_info != nullptr && data != nullptr && data_size > 0) + { + // Store the opaque descriptor-data to use at object creation. + device_info->opaque_descriptor_data[object_id] = { data, data + data_size }; + } +} + void VulkanReplayConsumerBase::ProcessSetRayTracingShaderGroupHandlesCommand(format::HandleId device_id, format::HandleId pipeline_id, size_t data_size, @@ -1000,16 +1036,14 @@ void VulkanReplayConsumerBase::ProcessSetSwapchainImageStateCommand( } void VulkanReplayConsumerBase::ProcessBeginResourceInitCommand(format::HandleId device_id, - uint64_t max_resource_size, + uint64_t total_copy_size, uint64_t max_copy_size) { - GFXRECON_UNREFERENCED_PARAMETER(max_resource_size); - VulkanDeviceInfo* device_info = object_info_table_->GetVkDeviceInfo(device_id); if (device_info != nullptr) { - assert(device_info->handle != VK_NULL_HANDLE); + GFXRECON_ASSERT(device_info->handle != VK_NULL_HANDLE); VkResult result = VK_SUCCESS; VkDevice device = device_info->handle; @@ -1017,19 +1051,21 @@ void VulkanReplayConsumerBase::ProcessBeginResourceInitCommand(format::HandleId VkDeviceMemory memory = VK_NULL_HANDLE; auto allocator = device_info->allocator.get(); - assert(allocator != nullptr); + GFXRECON_ASSERT(allocator != nullptr); auto table = GetDeviceTable(device); - assert(table != nullptr); + GFXRECON_ASSERT(table != nullptr); VkPhysicalDevice physical_device = device_info->parent; - assert(physical_device != VK_NULL_HANDLE); + GFXRECON_ASSERT(physical_device != VK_NULL_HANDLE); - VkPhysicalDeviceMemoryProperties properties; + VkPhysicalDeviceProperties properties; + VkPhysicalDeviceMemoryProperties memory_properties; auto instance_table = GetInstanceTable(physical_device); - assert(instance_table != nullptr); + GFXRECON_ASSERT(instance_table != nullptr); - instance_table->GetPhysicalDeviceMemoryProperties(physical_device, &properties); + instance_table->GetPhysicalDeviceProperties(physical_device, &properties); + instance_table->GetPhysicalDeviceMemoryProperties(physical_device, &memory_properties); const auto& available_extensions = device_info->extensions; bool have_shader_stencil_write = false; @@ -1041,8 +1077,14 @@ void VulkanReplayConsumerBase::ProcessBeginResourceInitCommand(format::HandleId have_shader_stencil_write = true; } - device_info->resource_initializer = std::make_unique( - device_info, max_copy_size, properties, have_shader_stencil_write, allocator, table); + device_info->resource_initializer = std::make_shared(device_info, + total_copy_size, + max_copy_size, + properties, + memory_properties, + have_shader_stencil_write, + allocator, + table); } } @@ -1107,6 +1149,11 @@ void VulkanReplayConsumerBase::ProcessInitBufferCommand(format::HandleId device_ } } } + + if (options_.dumping_resources) + { + resource_dumper_->ProcessInitBufferCommand(block_index_, device_id, buffer_id, data_size, data); + } } else { @@ -1243,6 +1290,18 @@ void VulkanReplayConsumerBase::ProcessInitImageCommand(format::HandleId image_id, image); } + + if (options_.dumping_resources) + { + VkCommandBuffer command_buffer = VK_NULL_HANDLE; + if (!copy_regions.empty()) + { + initializer->BeginCommandBuffer(image_info->queue_family_index, &command_buffer); + } + + resource_dumper_->ProcessInitImageCommand( + command_buffer, block_index_, device_id, image_id, data_size, aspect, layout, level_sizes, data); + } } } else @@ -1267,6 +1326,59 @@ void VulkanReplayConsumerBase::ProcessInitImageCommand(format::HandleId } } +void VulkanReplayConsumerBase::SetupForRecapture(PFN_vkGetInstanceProcAddr get_instance_proc_addr, + PFN_vkCreateInstance create_instance, + PFN_vkCreateDevice create_device) +{ + GFXRECON_ASSERT(options_.capture); + + GFXRECON_ASSERT((get_instance_proc_addr_ == nullptr) && + "SetupForRecapture should be called before InitializeLoader().") + get_instance_proc_addr_ = get_instance_proc_addr; + + gfxrecon::encode::VulkanCaptureManager::SetLayerFuncs(create_instance, create_device); + + // Logger is already initialized by replay, so inform capture manager not to initialize it again. + gfxrecon::encode::CommonCaptureManager::SetInitializeLog(false); + + gfxrecon::encode::CommonCaptureManager::SetDefaultUniqueIdOffset(kRecaptureHandleIdOffset); + gfxrecon::encode::CommonCaptureManager::SetForceDefaultUniqueId(false); +} + +void VulkanReplayConsumerBase::PushRecaptureHandleId(const format::HandleId* id) +{ + if (options_.capture && id != nullptr && *id < kRecaptureHandleIdOffset) + { + encode::CommonCaptureManager::PushUniqueId(*id); + } +} + +void VulkanReplayConsumerBase::PushRecaptureHandleIds(const format::HandleId* id_array, uint64_t id_count) +{ + if (options_.capture && id_array != nullptr) + { + if (id_array != nullptr) + { + for (uint64_t i = 0; i < id_count; ++i) + { + auto id = id_array[id_count - i - 1]; + if (id < kRecaptureHandleIdOffset) + { + encode::CommonCaptureManager::PushUniqueId(id); + } + } + } + } +} + +void VulkanReplayConsumerBase::ClearRecaptureHandleIds() +{ + if (options_.capture) + { + encode::CommonCaptureManager::ClearUniqueIds(); + } +} + void VulkanReplayConsumerBase::SetFatalErrorHandler(std::function handler) { fatal_error_handler_ = handler; @@ -1288,7 +1400,9 @@ void VulkanReplayConsumerBase::RaiseFatalError(const char* message) const void VulkanReplayConsumerBase::InitializeLoader() { loader_handle_ = graphics::InitializeLoader(); - if (loader_handle_ != nullptr) + + // Only get get_instance_proc_addr_ from the loader if it wasn't already set via SetupForRecapture() + if ((loader_handle_ != nullptr) && (get_instance_proc_addr_ == nullptr)) { get_instance_proc_addr_ = reinterpret_cast( util::platform::GetProcAddress(loader_handle_, "vkGetInstanceProcAddr")); @@ -1426,36 +1540,46 @@ void VulkanReplayConsumerBase::CheckResult(const char* func_name, { if (original != replay) { - const bool is_func_allowed_to_differ = kFunctionsAllowedToReturnDifferentCodeThanCapture.count(func_name); + // check allow-listed functions + bool accept_return_code = kFunctionsAllowedToReturnDifferentCodeThanCapture.contains(func_name); - if (!is_func_allowed_to_differ && (replay < 0) && (replay != VK_ERROR_FORMAT_NOT_SUPPORTED)) + // check allow-listed capture/replay VkResult-values + if (const auto it = kResultValuesAllowedDifferentCodeThanCapture.find(original); + it != kResultValuesAllowedDifferentCodeThanCapture.end()) { - // Raise a fatal error if replay produced an error that did not occur during capture. Format not supported - // errors are not treated as fatal, but will be reported as warnings below, allowing the replay to attempt - // to continue for the case where an application may have queried for formats that it did not use. - GFXRECON_LOG_FATAL( - "API call at index: %d thread: %d %s returned error value %s that does not match the result from the " - "capture file: %s. Replay cannot continue.", - call_info.index, - call_info.thread_id, - func_name, - util::ToString(replay).c_str(), - util::ToString(original).c_str()); - - RaiseFatalError(enumutil::GetResultDescription(replay)); + accept_return_code = accept_return_code || replay == it->second; } - else if (!((replay == VK_SUCCESS) && - ((original == VK_TIMEOUT) || (original == VK_NOT_READY) || (original == VK_ERROR_OUT_OF_DATE_KHR) || - (original == VK_SUBOPTIMAL_KHR))) || - is_func_allowed_to_differ) + + if (!accept_return_code) { - // Report differences between replay result and capture result, unless the replay results indicates - // that a wait operation completed before the original or a WSI function succeeded when the original failed. - GFXRECON_LOG_WARNING( - "API call %s returned value %s that does not match return value from capture file: %s.", - func_name, - util::ToString(replay).c_str(), - util::ToString(original).c_str()); + if (replay < 0 && replay != VK_ERROR_FORMAT_NOT_SUPPORTED) + { + // Raise a fatal error if replay produced an error that did not occur during capture. Format not + // supported errors are not treated as fatal, but will be reported as warnings below, allowing the + // replay to attempt to continue for the case where an application may have queried for formats that it + // did not use. + GFXRECON_LOG_FATAL("API call at index: %d thread: %d %s returned error value %s that does not match " + "the result from the " + "capture file: %s. Replay cannot continue.", + call_info.index, + call_info.thread_id, + func_name, + util::ToString(replay).c_str(), + util::ToString(original).c_str()); + + RaiseFatalError(enumutil::GetResultDescription(replay)); + } + else + { + // Report differences between replay result and capture result, unless the replay results indicates + // that a wait operation completed before the original or a WSI function succeeded when the original + // failed. + GFXRECON_LOG_WARNING( + "API call %s returned value %s that does not match return value from capture file: %s.", + func_name, + util::ToString(replay).c_str(), + util::ToString(original).c_str()); + } } } } @@ -1589,32 +1713,55 @@ void VulkanReplayConsumerBase::SetPhysicalDeviceProperties(VulkanPhysicalDeviceI replay_device_info->properties = *replay_properties; } -void VulkanReplayConsumerBase::SetPhysicalDeviceProperties(VulkanPhysicalDeviceInfo* physical_device_info, - const VkPhysicalDeviceProperties2* capture_properties, - const VkPhysicalDeviceProperties2* replay_properties) +void VulkanReplayConsumerBase::SetPhysicalDeviceProperties2(VulkanPhysicalDeviceInfo* physical_device_info, + const VkPhysicalDeviceProperties2* capture_properties, + const VkPhysicalDeviceProperties2* replay_properties) { SetPhysicalDeviceProperties(physical_device_info, &capture_properties->properties, &replay_properties->properties); - if (auto ray_capture_props = + if (auto* ray_capture_props = graphics::vulkan_struct_get_pnext(capture_properties)) { physical_device_info->capture_raytracing_properties = *ray_capture_props; } - if (auto ray_replay_props = + if (auto* driver_properties_replay_props = + graphics::vulkan_struct_get_pnext(replay_properties)) + { + physical_device_info->replay_device_info->driver_properties = *driver_properties_replay_props; + physical_device_info->replay_device_info->driver_properties->pNext = nullptr; + } + + if (auto* ray_replay_props = graphics::vulkan_struct_get_pnext(replay_properties)) { physical_device_info->replay_device_info->raytracing_properties = *ray_replay_props; physical_device_info->replay_device_info->raytracing_properties->pNext = nullptr; } - if (auto acceleration_structure_replay_props = + if (auto* acceleration_structure_replay_props = graphics::vulkan_struct_get_pnext(replay_properties)) { physical_device_info->replay_device_info->acceleration_structure_properties = *acceleration_structure_replay_props; physical_device_info->replay_device_info->acceleration_structure_properties->pNext = nullptr; } + + // VK_EXT_descriptor_buffer: capture-properties + if (auto* capture_descriptor_buffer_props = + graphics::vulkan_struct_get_pnext(capture_properties)) + { + physical_device_info->capture_descriptor_buffer_properties = *capture_descriptor_buffer_props; + physical_device_info->capture_descriptor_buffer_properties->pNext = nullptr; + } + + // VK_EXT_descriptor_buffer: replay-properties + if (auto* descriptor_buffer_props = + graphics::vulkan_struct_get_pnext(replay_properties)) + { + physical_device_info->replay_device_info->descriptor_buffer_properties = *descriptor_buffer_props; + physical_device_info->replay_device_info->descriptor_buffer_properties->pNext = nullptr; + } } void VulkanReplayConsumerBase::SetPhysicalDeviceMemoryProperties( @@ -1739,11 +1886,11 @@ bool VulkanReplayConsumerBase::GetOverrideDevice(VulkanInstanceInfo* insta VkPhysicalDevice replay_device = replay_devices[i]; auto replay_device_info = &instance_info->replay_device_info[replay_device]; - if (replay_device_info->properties == std::nullopt) + if (replay_device_info->IsPropertiesNull()) { graphics::VulkanDeviceUtil::GetReplayDeviceProperties(physical_device_info->parent_info, GetInstanceTable(physical_device_info->handle), - physical_device_info->handle, + replay_device, replay_device_info); } @@ -1825,11 +1972,11 @@ bool VulkanReplayConsumerBase::GetOverrideDeviceGroup(VulkanInstanceInfo* auto replay_device = replay_group_prop.physicalDevices[j]; auto replay_device_info = &instance_info->replay_device_info[replay_device]; - if (replay_device_info->properties == std::nullopt) + if (replay_device_info->IsPropertiesNull()) { graphics::VulkanDeviceUtil::GetReplayDeviceProperties(physical_device_info->parent_info, GetInstanceTable(physical_device_info->handle), - physical_device_info->handle, + replay_device, replay_device_info); } @@ -1880,7 +2027,7 @@ void VulkanReplayConsumerBase::GetMatchingDevice(VulkanInstanceInfo* insta auto replay_device_info = physical_device_info->replay_device_info; assert(replay_device_info != nullptr); - if (replay_device_info->properties == std::nullopt) + if (replay_device_info->IsPropertiesNull()) { graphics::VulkanDeviceUtil::GetReplayDeviceProperties(physical_device_info->parent_info, GetInstanceTable(physical_device_info->handle), @@ -1904,7 +2051,7 @@ void VulkanReplayConsumerBase::GetMatchingDevice(VulkanInstanceInfo* insta // Skip the current physical device, which we already know is not a match. if (physical_device != current_device) { - if (replay_info.properties == std::nullopt) + if (replay_info.IsPropertiesNull()) { graphics::VulkanDeviceUtil::GetReplayDeviceProperties(physical_device_info->parent_info, GetInstanceTable(physical_device), @@ -1929,7 +2076,8 @@ void VulkanReplayConsumerBase::InitializeReplayDumpResources() { if (resource_dumper_ == nullptr) { - resource_dumper_ = std::make_unique(options_, object_info_table_); + resource_dumper_ = std::make_unique( + options_, object_info_table_, _device_address_trackers, instance_tables_, device_tables_); GFXRECON_ASSERT(resource_dumper_); } } @@ -2161,43 +2309,60 @@ void VulkanReplayConsumerBase::InitializeResourceAllocator(const VulkanPhysicalD functions.get_physical_device_memory_properties = instance_table->GetPhysicalDeviceMemoryProperties; functions.get_instance_proc_addr = instance_table->GetInstanceProcAddr; - functions.allocate_memory = device_table->AllocateMemory; - functions.free_memory = device_table->FreeMemory; - functions.get_device_memory_commitment = device_table->GetDeviceMemoryCommitment; - functions.map_memory = device_table->MapMemory; - functions.unmap_memory = device_table->UnmapMemory; - functions.flush_memory_ranges = device_table->FlushMappedMemoryRanges; - functions.invalidate_memory_ranges = device_table->InvalidateMappedMemoryRanges; - functions.create_buffer = device_table->CreateBuffer; - functions.destroy_buffer = device_table->DestroyBuffer; - functions.get_buffer_memory_requirements = device_table->GetBufferMemoryRequirements; - functions.bind_buffer_memory = device_table->BindBufferMemory; - functions.cmd_copy_buffer = device_table->CmdCopyBuffer; - functions.create_image = device_table->CreateImage; - functions.destroy_image = device_table->DestroyImage; - functions.get_image_memory_requirements = device_table->GetImageMemoryRequirements; - functions.get_image_subresource_layout = device_table->GetImageSubresourceLayout; - functions.bind_image_memory = device_table->BindImageMemory; - functions.get_device_proc_addr = device_table->GetDeviceProcAddr; - functions.get_device_queue = device_table->GetDeviceQueue; - functions.create_command_pool = device_table->CreateCommandPool; - functions.allocate_command_buffers = device_table->AllocateCommandBuffers; - functions.begin_command_buffer = device_table->BeginCommandBuffer; - functions.cmd_copy_buffer = device_table->CmdCopyBuffer; - functions.cmd_copy_buffer_to_image = device_table->CmdCopyBufferToImage; - functions.end_command_buffer = device_table->EndCommandBuffer; - functions.queue_submit = device_table->QueueSubmit; - functions.queue_wait_idle = device_table->QueueWaitIdle; - functions.reset_command_buffer = device_table->ResetCommandBuffer; - functions.free_command_buffers = device_table->FreeCommandBuffers; - functions.destroy_command_pool = device_table->DestroyCommandPool; - functions.create_video_session = device_table->CreateVideoSessionKHR; - functions.destroy_video_session = device_table->DestroyVideoSessionKHR; - functions.bind_video_session_memory = device_table->BindVideoSessionMemoryKHR; - functions.get_video_session_memory_requirements = device_table->GetVideoSessionMemoryRequirementsKHR; + functions.allocate_memory = device_table->AllocateMemory; + functions.free_memory = device_table->FreeMemory; + functions.get_device_memory_commitment = device_table->GetDeviceMemoryCommitment; + functions.map_memory = device_table->MapMemory; + functions.unmap_memory = device_table->UnmapMemory; + functions.flush_memory_ranges = device_table->FlushMappedMemoryRanges; + functions.invalidate_memory_ranges = device_table->InvalidateMappedMemoryRanges; + functions.create_buffer = device_table->CreateBuffer; + functions.destroy_buffer = device_table->DestroyBuffer; + functions.get_buffer_memory_requirements = device_table->GetBufferMemoryRequirements; + functions.bind_buffer_memory = device_table->BindBufferMemory; + functions.create_image = device_table->CreateImage; + functions.destroy_image = device_table->DestroyImage; + functions.get_image_memory_requirements = device_table->GetImageMemoryRequirements; + functions.get_image_subresource_layout = device_table->GetImageSubresourceLayout; + functions.bind_image_memory = device_table->BindImageMemory; + functions.get_device_proc_addr = device_table->GetDeviceProcAddr; + functions.get_device_queue = device_table->GetDeviceQueue; + functions.create_command_pool = device_table->CreateCommandPool; + functions.allocate_command_buffers = device_table->AllocateCommandBuffers; + functions.begin_command_buffer = device_table->BeginCommandBuffer; + functions.cmd_copy_buffer = device_table->CmdCopyBuffer; + functions.cmd_copy_buffer_to_image = device_table->CmdCopyBufferToImage; + functions.end_command_buffer = device_table->EndCommandBuffer; + functions.queue_submit = device_table->QueueSubmit; + functions.queue_wait_idle = device_table->QueueWaitIdle; + functions.reset_command_buffer = device_table->ResetCommandBuffer; + functions.free_command_buffers = device_table->FreeCommandBuffers; + functions.destroy_command_pool = device_table->DestroyCommandPool; + functions.create_video_session = device_table->CreateVideoSessionKHR; + functions.destroy_video_session = device_table->DestroyVideoSessionKHR; + functions.bind_video_session_memory = device_table->BindVideoSessionMemoryKHR; + functions.get_video_session_memory_requirements = device_table->GetVideoSessionMemoryRequirementsKHR; + functions.map_memory2 = device_table->MapMemory2KHR; + functions.unmap_memory2 = device_table->UnmapMemory2KHR; + functions.set_device_memory_priority = device_table->SetDeviceMemoryPriorityEXT; + functions.get_memory_remote_address_nv = device_table->GetMemoryRemoteAddressNV; + functions.create_acceleration_structure_nv = device_table->CreateAccelerationStructureNV; + functions.destroy_acceleration_structure_nv = device_table->DestroyAccelerationStructureNV; + functions.bind_acceleration_structure_memory_nv = device_table->BindAccelerationStructureMemoryNV; + functions.get_acceleration_structure_memory_requirements_nv = + device_table->GetAccelerationStructureMemoryRequirementsNV; + functions.queue_bind_sparse = device_table->QueueBindSparse; + functions.create_semaphore = device_table->CreateSemaphore; + functions.destroy_semaphore = device_table->DestroySemaphore; + functions.get_memory_fd = device_table->GetMemoryFdKHR; + functions.get_device_memory_opaque_capture_address = device_table->GetDeviceMemoryOpaqueCaptureAddressKHR; functions.get_physical_device_queue_family_properties = instance_table->GetPhysicalDeviceQueueFamilyProperties; functions.set_debug_utils_object_name = instance_table->SetDebugUtilsObjectNameEXT; functions.set_debug_utils_object_tag = instance_table->SetDebugUtilsObjectTagEXT; + functions.get_android_hardware_buffer_properties = device_table->GetAndroidHardwareBufferPropertiesANDROID; + functions.create_fence = device_table->CreateFence; + functions.wait_for_fences = device_table->WaitForFences; + functions.destroy_fence = device_table->DestroyFence; if (physical_device_info->parent_info.api_version >= VK_MAKE_VERSION(1, 1, 0)) { @@ -2719,9 +2884,23 @@ void VulkanReplayConsumerBase::ModifyCreateInstanceInfo( } } + // If a WSI was specified by CLI but there was none at capture time, it's possible to end up with a surface + // extension without having VK_KHR_surface. Check for that and fix that. + if (!graphics::feature_util::IsSupportedExtension(modified_extensions, VK_KHR_SURFACE_EXTENSION_NAME)) + { + for (const std::string& current_extension : modified_extensions) + { + if (kSurfaceExtensions.find(current_extension) != kSurfaceExtensions.end()) + { + modified_extensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME); + break; + } + } + } + // Sanity checks depending on extension availability std::vector available_extensions; - if (feature_util::GetInstanceExtensions(instance_extension_proc, &available_extensions) == VK_SUCCESS) + if (graphics::feature_util::GetInstanceExtensions(instance_extension_proc, &available_extensions) == VK_SUCCESS) { // Always enable portability enumeration if available modified_create_info.flags &= ~VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; @@ -2739,26 +2918,27 @@ void VulkanReplayConsumerBase::ModifyCreateInstanceInfo( if (modified_create_info.pApplicationInfo != nullptr && modified_create_info.pApplicationInfo->apiVersion < VK_MAKE_VERSION(1, 1, 0)) { - feature_util::EnableExtensionIfSupported( + graphics::feature_util::EnableExtensionIfSupported( available_extensions, &modified_extensions, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); } if (options_.remove_unsupported_features) { // Remove enabled extensions that are not available from the replay instance. - feature_util::RemoveUnsupportedExtensions(available_extensions, &modified_extensions); + graphics::feature_util::RemoveUnsupportedExtensions(available_extensions, &modified_extensions); } else if (options_.use_colorspace_fallback) { for (auto& extension_name : kColorSpaceExtensionNames) { - feature_util::RemoveExtensionIfUnsupported(available_extensions, &modified_extensions, extension_name); + graphics::feature_util::RemoveExtensionIfUnsupported( + available_extensions, &modified_extensions, extension_name); } } else { // Remove enabled extensions that are ignorable from the replay instance. - feature_util::RemoveIgnorableExtensions(available_extensions, &modified_extensions); + graphics::feature_util::RemoveIgnorableExtensions(available_extensions, &modified_extensions); } } else @@ -2771,7 +2951,7 @@ void VulkanReplayConsumerBase::ModifyCreateInstanceInfo( // debug messages from layers are displayed during replay. // Note that if the app also included one or more VkDebugUtilsMessengerCreateInfoEXT structs // in the pNext chain, those messengers will also be created. - if (feature_util::IsSupportedExtension(available_extensions, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)) + if (graphics::feature_util::IsSupportedExtension(available_extensions, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)) { modified_extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); @@ -2809,9 +2989,9 @@ void VulkanReplayConsumerBase::ModifyCreateInstanceInfo( if (options_.enable_validation_layer) { std::vector available_layers; - if (feature_util::GetInstanceLayers(instance_layer_proc, &available_layers) == VK_SUCCESS) + if (graphics::feature_util::GetInstanceLayers(instance_layer_proc, &available_layers) == VK_SUCCESS) { - if (feature_util::IsSupportedLayer(available_layers, kValidationLayerName)) + if (graphics::feature_util::IsSupportedLayer(available_layers, kValidationLayerName)) { modified_layers.push_back(kValidationLayerName); } @@ -3058,7 +3238,7 @@ void VulkanReplayConsumerBase::ModifyCreateDeviceInfo( // Add VK_EXT_frame_boundary if an option uses it if (options_.offscreen_swapchain_frame_boundary) { - if (!feature_util::IsSupportedExtension(modified_extensions, VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME)) + if (!graphics::feature_util::IsSupportedExtension(modified_extensions, VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME)) { modified_extensions.push_back(VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME); } @@ -3066,32 +3246,55 @@ void VulkanReplayConsumerBase::ModifyCreateDeviceInfo( // Sanity checks depending on extension availability std::vector available_extensions; - if (feature_util::GetDeviceExtensions( + if (graphics::feature_util::GetDeviceExtensions( physical_device, instance_table->EnumerateDeviceExtensionProperties, &available_extensions) == VK_SUCCESS) { - // If VK_EXT_frame_boundary is not supported but requested, fake it - bool ext_frame_boundary_is_supported = - feature_util::IsSupportedExtension(available_extensions, VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME); - bool ext_frame_boundary_is_requested = - feature_util::IsSupportedExtension(modified_extensions, VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME); + // helper to 'fake' support for certain extensions, if necessary. + // checks if an extension is requested, but not supported. + // if so, the extension will be removed from 'modified_extensions' and added to 'faked_extensions_'. + auto sanitize_faked_extension = + [this, &available_extensions, &modified_extensions](const char* ext_name) -> bool { + if (graphics::feature_util::IsSupportedExtension(modified_extensions, ext_name) && + !graphics::feature_util::IsSupportedExtension(available_extensions, ext_name)) + { + auto iter = std::find_if( + modified_extensions.begin(), modified_extensions.end(), [ext_name](const char* extension) { + return util::platform::StringCompare(ext_name, extension) == 0; + }); + if (iter != modified_extensions.end()) + { + GFXRECON_LOG_WARNING("faking extension-support for: %s", ext_name); + modified_extensions.erase(iter); + faked_extensions_.push_back(ext_name); + return true; + } + } + return false; + }; - if (ext_frame_boundary_is_requested && !ext_frame_boundary_is_supported) + // Fake VK_EXT_frame_boundary if requested, but not supported + if (sanitize_faked_extension(VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME)) { - auto iter = std::find_if(modified_extensions.begin(), modified_extensions.end(), [](const char* extension) { - return util::platform::StringCompare(VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME, extension) == 0; - }); - modified_extensions.erase(iter); + // also remove related feature-struct from pnext-chain + if (graphics::vulkan_struct_remove_pnext(&modified_create_info)) + { + GFXRECON_LOG_WARNING( + "VkPhysicalDeviceFrameBoundaryFeaturesEXT instance was removed from replay device creation"); + } } + // Fake VK_GOOGLE_display_timing if requested, but not supported + sanitize_faked_extension(VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME); + if (options_.remove_unsupported_features) { - feature_util::RemoveUnsupportedExtensions(available_extensions, &modified_extensions); + graphics::feature_util::RemoveUnsupportedExtensions(available_extensions, &modified_extensions); } else { // Remove enabled extensions that are not available on the replay device, but // that can still be safely ignored. - feature_util::RemoveIgnorableExtensions(available_extensions, &modified_extensions); + graphics::feature_util::RemoveIgnorableExtensions(available_extensions, &modified_extensions); } } else @@ -3108,12 +3311,12 @@ void VulkanReplayConsumerBase::ModifyCreateDeviceInfo( physical_device_info->parent_info, instance_table, physical_device, &modified_create_info); // Abort on/Remove unsupported features - feature_util::CheckUnsupportedFeatures(physical_device, - instance_table->GetPhysicalDeviceFeatures, - instance_table->GetPhysicalDeviceFeatures2, - modified_create_info.pNext, - modified_create_info.pEnabledFeatures, - options_.remove_unsupported_features); + graphics::feature_util::CheckUnsupportedFeatures(physical_device, + instance_table->GetPhysicalDeviceFeatures, + instance_table->GetPhysicalDeviceFeatures2, + modified_create_info.pNext, + modified_create_info.pEnabledFeatures, + options_.remove_unsupported_features); } VkResult VulkanReplayConsumerBase::PostCreateDeviceUpdateState(VulkanPhysicalDeviceInfo* physical_device_info, @@ -3138,12 +3341,12 @@ VkResult VulkanReplayConsumerBase::PostCreateDeviceUpdateState(VulkanPhysicalDev auto replay_device_info = physical_device_info->replay_device_info; GFXRECON_ASSERT(replay_device_info != nullptr); + auto table = GetInstanceTable(physical_device); + GFXRECON_ASSERT(table != nullptr); + if (replay_device_info->memory_properties == std::nullopt) { // Memory properties weren't queried before device creation, so retrieve them now. - auto table = GetInstanceTable(physical_device); - GFXRECON_ASSERT(table != nullptr); - replay_device_info->memory_properties = VkPhysicalDeviceMemoryProperties(); table->GetPhysicalDeviceMemoryProperties(physical_device, &replay_device_info->memory_properties.value()); } @@ -3155,7 +3358,7 @@ VkResult VulkanReplayConsumerBase::PostCreateDeviceUpdateState(VulkanPhysicalDev create_state.modified_create_info.enabledExtensionCount); InitializeResourceAllocator(physical_device_info, replay_device, enabled_extensions, allocator); - device_info->allocator = std::unique_ptr(allocator); + device_info->allocator = std::shared_ptr(allocator); // Track state of physical device properties and features at device creation device_info->property_feature_info = create_state.property_feature_info; @@ -3170,8 +3373,17 @@ VkResult VulkanReplayConsumerBase::PostCreateDeviceUpdateState(VulkanPhysicalDev create_state.modified_create_info.queueCreateInfoCount, 0, max); - device_info->queue_family_index_enabled.clear(); - device_info->queue_family_index_enabled.resize(max_queue_family + 1, false); + device_info->enabled_queue_family_flags.queue_family_index_enabled.clear(); + device_info->enabled_queue_family_flags.queue_family_index_enabled.resize(max_queue_family + 1, false); + + uint32_t phys_dev_queue_families_count = 0; + std::vector phys_dev_queue_props; + table->GetPhysicalDeviceQueueFamilyProperties(physical_device, &phys_dev_queue_families_count, nullptr); + GFXRECON_ASSERT(phys_dev_queue_families_count); + + phys_dev_queue_props.resize(phys_dev_queue_families_count); + table->GetPhysicalDeviceQueueFamilyProperties( + physical_device, &phys_dev_queue_families_count, phys_dev_queue_props.data()); for (uint32_t q = 0; q < create_state.modified_create_info.queueCreateInfoCount; ++q) { @@ -3180,8 +3392,9 @@ VkResult VulkanReplayConsumerBase::PostCreateDeviceUpdateState(VulkanPhysicalDev // queues and one describes queues that are not protected-capable", an assert is too strict here. Prefer the // queue that is not protected-capable for now. if (const auto queue_family_creation_flags = - device_info->queue_family_creation_flags.find(queue_create_info->queueFamilyIndex); - queue_family_creation_flags != device_info->queue_family_creation_flags.end()) + device_info->enabled_queue_family_flags.queue_family_creation_flags.find( + queue_create_info->queueFamilyIndex); + queue_family_creation_flags != device_info->enabled_queue_family_flags.queue_family_creation_flags.end()) { GFXRECON_LOG_INFO( "pQueueCreateInfos[%u].queueFamilyIndex=%u was already seen! New flags: 0x%x. Old flags: 0x%x", @@ -3195,8 +3408,11 @@ VkResult VulkanReplayConsumerBase::PostCreateDeviceUpdateState(VulkanPhysicalDev continue; } } - device_info->queue_family_creation_flags[queue_create_info->queueFamilyIndex] = queue_create_info->flags; - device_info->queue_family_index_enabled[queue_create_info->queueFamilyIndex] = true; + device_info->enabled_queue_family_flags.queue_family_creation_flags[queue_create_info->queueFamilyIndex] = + queue_create_info->flags; + device_info->enabled_queue_family_flags.queue_family_index_enabled[queue_create_info->queueFamilyIndex] = true; + device_info->enabled_queue_family_flags.queue_family_properties_flags[queue_create_info->queueFamilyIndex] = + phys_dev_queue_props[queue_create_info->queueFamilyIndex].queueFlags; } // Restore modified property/feature create info values to the original application values @@ -3205,6 +3421,30 @@ VkResult VulkanReplayConsumerBase::PostCreateDeviceUpdateState(VulkanPhysicalDev return VK_SUCCESS; } +VulkanDeviceInfo* +VulkanReplayConsumerBase::FindkDuplicateDeviceInfo(const VulkanPhysicalDeviceInfo* physical_device_info, + const StructPointerDecoder* create_info) +{ + auto it = device_phy_id_map_.find(physical_device_info->capture_id); + if (it != device_phy_id_map_.end()) + { + auto* extant_device_info = object_info_table_->GetVkDeviceInfo(it->second); + // TODO: It might have to check if two create info are the same. + return extant_device_info; + } + return nullptr; +} + +VkResult VulkanReplayConsumerBase::SetDuplicateDeviceInfo(VkDevice* replay_device, + VulkanDeviceInfo* device_info, + VulkanDeviceInfo* extant_device_info) +{ + *replay_device = extant_device_info->handle; + device_info->copy_characteristics(extant_device_info); + + return VK_SUCCESS; +} + VkResult VulkanReplayConsumerBase::OverrideCreateDevice(VkResult original_result, VulkanPhysicalDeviceInfo* physical_device_info, @@ -3221,20 +3461,13 @@ VulkanReplayConsumerBase::OverrideCreateDevice(VkResult origina GFXRECON_ASSERT(device_info); // If we're doing device deduplication, check if we've already seen this create device request - std::bitset casted_uuid; - util::platform::MemoryCopy( - &casted_uuid, format::kUuidSize, physical_device_info->capture_pipeline_cache_uuid, VK_UUID_SIZE); if (options_.do_device_deduplication) { - auto it = device_uuid_map_.find(casted_uuid); - if (it != device_uuid_map_.end()) + auto* extant_device_info = FindkDuplicateDeviceInfo(physical_device_info, pCreateInfo); + if (extant_device_info) { // We have seen this device before - VkDevice& extant_device = device_uuid_map_[casted_uuid]; - device_info->is_duplicate = true; - VkDevice* replay_device = pDevice->GetHandlePointer(); - *replay_device = extant_device; - return VK_SUCCESS; + return SetDuplicateDeviceInfo(pDevice->GetHandlePointer(), device_info, extant_device_info); } } @@ -3273,7 +3506,8 @@ VulkanReplayConsumerBase::OverrideCreateDevice(VkResult origina if (options_.do_device_deduplication) { // Insert this device info into map - device_uuid_map_.insert(std::pair(casted_uuid, *replay_device)); + auto capture_id = *pDevice->GetPointer(); + device_phy_id_map_.insert(std::pair(physical_device_info->capture_id, capture_id)); } return result; @@ -3286,7 +3520,7 @@ void VulkanReplayConsumerBase::OverrideDestroyDevice( { VkDevice device = VK_NULL_HANDLE; - if (device_info != nullptr && !device_info->is_duplicate) + if (device_info != nullptr && device_info->duplicate_source_id == format::kNullHandleId) { device = device_info->handle; @@ -3593,7 +3827,7 @@ void VulkanReplayConsumerBase::OverrideGetPhysicalDeviceProperties2( // This can be set by ProcessSetDevicePropertiesCommand, but older files will not contain that data. auto capture_properties = pProperties->GetPointer(); - SetPhysicalDeviceProperties(physical_device_info, capture_properties, replay_properties); + SetPhysicalDeviceProperties2(physical_device_info, capture_properties, replay_properties); } void VulkanReplayConsumerBase::OverrideGetPhysicalDeviceMemoryProperties( @@ -3808,12 +4042,18 @@ VkResult VulkanReplayConsumerBase::OverrideGetFenceStatus(PFN_vkGetFenceStatus return result; } - // If you find this loop to be infinite consider adding a limit in the same way - // it is done for GetEventStatus and GetQueryPoolResults. - do + if (original_result == VK_SUCCESS) { - result = func(device, fence); - } while ((original_result == VK_SUCCESS) && (result == VK_NOT_READY)); + // Replay is usually faster than the original application, so there is a good chance the fence is still not + // ready. In this case, we make sure the fence is signaled by waiting for it. + BeginInjectedCommands(); + result = + GetDeviceTable(device)->WaitForFences(device, 1, &fence, VK_TRUE, std::numeric_limits::max()); + EndInjectedCommands(); + GFXRECON_ASSERT(result == VK_SUCCESS); + } + + result = func(device, fence); return result; } @@ -3833,10 +4073,7 @@ VkResult VulkanReplayConsumerBase::OverrideGetEventStatus(PFN_vkGetEventStatus do { result = func(device, event); - } while ((((original_result == VK_EVENT_SET) && (result == VK_EVENT_RESET)) || - ((original_result == VK_EVENT_RESET) && (result == VK_EVENT_SET))) && - (++retries <= kMaxEventStatusRetries)); - + } while (original_result == VK_EVENT_SET && result == VK_EVENT_RESET && ++retries <= kMaxEventStatusRetries); return result; } @@ -3851,33 +4088,37 @@ VkResult VulkanReplayConsumerBase::OverrideGetQueryPoolResults(PFN_vkGetQueryPoo VkDeviceSize stride, VkQueryResultFlags flags) { - assert((device_info != nullptr) && (query_pool_info != nullptr) && (pData != nullptr) && - (pData->GetOutputPointer() != nullptr)); + GFXRECON_ASSERT((device_info != nullptr) && (query_pool_info != nullptr) && (pData != nullptr) && + (pData->GetOutputPointer() != nullptr)); - VkResult result; VkDevice device = device_info->handle; VkQueryPool query_pool = query_pool_info->handle; - size_t retries = 0; - do + if (original_result == VK_SUCCESS) { - result = func(device, query_pool, firstQuery, queryCount, dataSize, pData->GetOutputPointer(), stride, flags); - } while (((original_result == VK_SUCCESS) && (result == VK_NOT_READY)) && - (++retries <= kMaxQueryPoolResultsRetries)); + // instead of polling (busy-waiting) vkGetQueryPoolResults, we just wait + flags |= VK_QUERY_RESULT_WAIT_BIT; + } - auto& address_replacer = GetDeviceAddressReplacer(device_info); - address_replacer.ProcessGetQueryPoolResults( - device, query_pool, firstQuery, queryCount, dataSize, pData->GetOutputPointer(), stride, flags); + VkResult result = + func(device, query_pool, firstQuery, queryCount, dataSize, pData->GetOutputPointer(), stride, flags); + + if (result == VK_SUCCESS) + { + auto& address_replacer = GetDeviceAddressReplacer(device_info); + address_replacer.ProcessGetQueryPoolResults( + device, query_pool, firstQuery, queryCount, dataSize, pData->GetOutputPointer(), stride, flags); + } return result; } -VkResult VulkanReplayConsumerBase::OverrideQueueSubmit(PFN_vkQueueSubmit func, - uint64_t index, - VkResult original_result, - const VulkanQueueInfo* queue_info, - uint32_t submitCount, - const StructPointerDecoder* pSubmits, - const VulkanFenceInfo* fence_info) +VkResult VulkanReplayConsumerBase::OverrideQueueSubmit(PFN_vkQueueSubmit func, + uint64_t index, + VkResult original_result, + const VulkanQueueInfo* queue_info, + uint32_t submitCount, + StructPointerDecoder* pSubmits, + const VulkanFenceInfo* fence_info) { assert((queue_info != nullptr) && (pSubmits != nullptr)); @@ -3887,6 +4128,9 @@ VkResult VulkanReplayConsumerBase::OverrideQueueSubmit(PFN_vkQueueSubmit fu auto submit_info_data = pSubmits->GetMetaStructPointer(); VkFence fence = VK_NULL_HANDLE; + // semaphores potentially used by replacer helper-submission(s), defined here to ensure lifetime + std::vector semaphores(submitCount); + if (fence_info != nullptr) { fence = fence_info->handle; @@ -3895,31 +4139,73 @@ VkResult VulkanReplayConsumerBase::OverrideQueueSubmit(PFN_vkQueueSubmit fu auto* device_info = GetObjectInfoTable().GetVkDeviceInfo(queue_info->parent_id); GFXRECON_ASSERT(device_info != nullptr); + auto allocator = device_info->allocator.get(); + GFXRECON_ASSERT(allocator != nullptr); + allocator->ClearStagingResources(); + if (UseAddressReplacement(device_info) && submit_info_data != nullptr) { - std::vector addresses_to_replace; + const auto& address_tracker = GetDeviceAddressTracker(device_info); + auto& address_replacer = GetDeviceAddressReplacer(device_info); for (uint32_t i = 0; i < submitCount; i++) { - uint32_t num_command_buffers = submit_info_data[i].pCommandBuffers.GetLength(); - auto* cmd_buf_handles = submit_info_data[i].pCommandBuffers.GetPointer(); + std::vector addresses_to_replace; + + uint32_t num_command_buffers = submit_info_data[i].pCommandBuffers.GetLength(); + auto* cmd_buf_handles = submit_info_data[i].pCommandBuffers.GetPointer(); + bool sync_wait_semaphores = false; + + // used to track lifetime of VulkanAddressReplacer internal resources + const VulkanCommandBufferInfo* cmd_buf_info = nullptr; + for (uint32_t c = 0; c < num_command_buffers; ++c) { auto* command_buffer_info = GetObjectInfoTable().GetVkCommandBufferInfo(cmd_buf_handles[c]); GFXRECON_ASSERT(command_buffer_info != nullptr); + + // resolve pointer-chains, discover additional referenced buffers + address_replacer.ResolveBufferAddresses(command_buffer_info, address_tracker); + + // collect buffer-device-address from all command-buffers addresses_to_replace.insert(addresses_to_replace.end(), command_buffer_info->addresses_to_replace.begin(), command_buffer_info->addresses_to_replace.end()); + sync_wait_semaphores |= !command_buffer_info->addresses_to_replace.empty(); + if (cmd_buf_info == nullptr) + { + cmd_buf_info = command_buffer_info; + } } - } - if (!addresses_to_replace.empty()) - { - auto& address_replacer = GetDeviceAddressReplacer(device_info); - address_replacer.UpdateBufferAddresses(nullptr, - addresses_to_replace.data(), - addresses_to_replace.size(), - GetDeviceAddressTracker(device_info)); + if (sync_wait_semaphores) + { + VkSubmitInfo& submit_info_mut = pSubmits->GetPointer()[i]; + auto wait_semaphores = graphics::StripWaitSemaphores(&submit_info_mut); + semaphores[i] = address_replacer.UpdateBufferAddresses(cmd_buf_info, + addresses_to_replace.data(), + addresses_to_replace.size(), + GetDeviceAddressTracker(device_info), + wait_semaphores); + GFXRECON_ASSERT(semaphores[i] != VK_NULL_HANDLE); + + // inject wait-semaphore into submit-info + submit_info_mut.waitSemaphoreCount = 1; + submit_info_mut.pWaitSemaphores = &semaphores[i]; + + // If waitSemaphoreCount was 0, pWaitDstStageMask might be nullptr. + // Make sure it points to valid data in all cases. + static VkPipelineStageFlags wait_stage_mask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; + submit_info_mut.pWaitDstStageMask = &wait_stage_mask; + + // handle potential timeline-semaphores in pnext-chain + if (auto* timeline_info = + graphics::vulkan_struct_get_pnext(&submit_info_mut)) + { + timeline_info->waitSemaphoreValueCount = 0; + timeline_info->pWaitSemaphoreValues = nullptr; + } + } } } @@ -4019,7 +4305,7 @@ VkResult VulkanReplayConsumerBase::OverrideQueueSubmit(PFN_vkQueueSubmit fu resource_dumper_->MustDumpQueueSubmitIndex(index)) { resource_dumper_->QueueSubmit( - modified_submit_infos, *GetDeviceTable(queue_info->handle), queue_info->handle, fence, index); + modified_submit_infos, *GetDeviceTable(queue_info->handle), queue_info, fence, index); } else { @@ -4082,20 +4368,21 @@ VkResult VulkanReplayConsumerBase::OverrideQueueSubmit(PFN_vkQueueSubmit fu return result; } -VkResult VulkanReplayConsumerBase::OverrideQueueSubmit2(PFN_vkQueueSubmit2 func, - VkResult original_result, - const VulkanQueueInfo* queue_info, - uint32_t submitCount, - const StructPointerDecoder* pSubmits, - const VulkanFenceInfo* fence_info) +VkResult VulkanReplayConsumerBase::OverrideQueueSubmit2(PFN_vkQueueSubmit2 func, + VkResult original_result, + const VulkanQueueInfo* queue_info, + uint32_t submitCount, + StructPointerDecoder* pSubmits, + const VulkanFenceInfo* fence_info) { assert((queue_info != nullptr) && (pSubmits != nullptr)); VkResult result = VK_SUCCESS; const VkSubmitInfo2* submit_infos = pSubmits->GetPointer(); assert(submitCount == 0 || submit_infos != nullptr); - auto submit_info_data = pSubmits->GetMetaStructPointer(); - VkFence fence = VK_NULL_HANDLE; + auto submit_info_data = pSubmits->GetMetaStructPointer(); + VkFence fence = VK_NULL_HANDLE; + std::vector semaphore_infos(submitCount); if (fence_info != nullptr) { @@ -4105,32 +4392,68 @@ VkResult VulkanReplayConsumerBase::OverrideQueueSubmit2(PFN_vkQueueSubmit2 f auto* device_info = GetObjectInfoTable().GetVkDeviceInfo(queue_info->parent_id); GFXRECON_ASSERT(device_info != nullptr); + auto allocator = device_info->allocator.get(); + GFXRECON_ASSERT(allocator != nullptr); + allocator->ClearStagingResources(); + if (UseAddressReplacement(device_info) && submit_info_data != nullptr) { - std::vector addresses_to_replace; + const auto& address_tracker = GetDeviceAddressTracker(device_info); + auto& address_replacer = GetDeviceAddressReplacer(device_info); for (uint32_t i = 0; i < submitCount; i++) { - uint32_t num_command_buffers = submit_info_data[i].pCommandBufferInfos->GetLength(); - auto* cmd_buf_info_metas = submit_info_data[i].pCommandBufferInfos->GetMetaStructPointer(); + std::vector addresses_to_replace; + + uint32_t num_command_buffers = submit_info_data[i].pCommandBufferInfos->GetLength(); + auto* cmd_buf_info_metas = submit_info_data[i].pCommandBufferInfos->GetMetaStructPointer(); + bool sync_wait_semaphores = false; + + // used to track lifetime of VulkanAddressReplacer internal resources + const VulkanCommandBufferInfo* cmd_buf_info = nullptr; + for (uint32_t c = 0; c < num_command_buffers; ++c) { auto* command_buffer_info = GetObjectInfoTable().GetVkCommandBufferInfo(cmd_buf_info_metas[c].commandBuffer); GFXRECON_ASSERT(command_buffer_info != nullptr); + + // resolve pointer-chains, discover additional referenced buffers + address_replacer.ResolveBufferAddresses(command_buffer_info, address_tracker); + + // collect buffer-device-address from all command-buffers addresses_to_replace.insert(addresses_to_replace.end(), command_buffer_info->addresses_to_replace.begin(), command_buffer_info->addresses_to_replace.end()); + sync_wait_semaphores |= !command_buffer_info->addresses_to_replace.empty(); + if (cmd_buf_info == nullptr) + { + cmd_buf_info = command_buffer_info; + } } - } - if (!addresses_to_replace.empty()) - { - auto& address_replacer = GetDeviceAddressReplacer(device_info); - address_replacer.UpdateBufferAddresses(nullptr, - addresses_to_replace.data(), - addresses_to_replace.size(), - GetDeviceAddressTracker(device_info)); + if (sync_wait_semaphores) + { + VkSubmitInfo2& submit_info_mut = pSubmits->GetPointer()[i]; + auto wait_semaphores = graphics::StripWaitSemaphores(&submit_info_mut); + + VkSemaphoreSubmitInfo& semaphore_info = semaphore_infos[i]; + semaphore_info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO; + semaphore_info.value = 1; + semaphore_info.stageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; + + // runs replacer, sync via semaphore + semaphore_info.semaphore = address_replacer.UpdateBufferAddresses(cmd_buf_info, + addresses_to_replace.data(), + addresses_to_replace.size(), + GetDeviceAddressTracker(device_info), + wait_semaphores); + GFXRECON_ASSERT(semaphore_info.semaphore != VK_NULL_HANDLE); + + // inject wait-semaphores into submit-info + submit_info_mut.waitSemaphoreInfoCount = 1; + submit_info_mut.pWaitSemaphoreInfos = &semaphore_info; + } } } // Only attempt to filter imported semaphores if we know at least one has been imported. @@ -4291,21 +4614,176 @@ VulkanReplayConsumerBase::OverrideQueueBindSparse(PFN_vkQueueBindSparse { assert((queue_info != nullptr) && (pBindInfo != nullptr) && !pBindInfo->IsNull()); - VkResult result = VK_SUCCESS; - const VkBindSparseInfo* bind_infos = pBindInfo->GetPointer(); - VkFence fence = VK_NULL_HANDLE; + auto result = VK_SUCCESS; + const auto* meta_bind_infos = pBindInfo->GetMetaStructPointer(); + const auto* bind_infos = pBindInfo->GetPointer(); + VkFence fence = VK_NULL_HANDLE; if (fence_info != nullptr) { fence = fence_info->handle; } + auto* device_info = GetObjectInfoTable().GetVkDeviceInfo(queue_info->parent_id); + GFXRECON_ASSERT(device_info != nullptr); + auto allocator = device_info->allocator.get(); + GFXRECON_ASSERT(allocator != nullptr); + + std::vector buf_infos; + std::vector buf_mem_infos; + std::vector allocator_buf_datas; + std::vector allocator_buf_mem_datas; + std::vector buf_mem_prop_flags; + + std::vector img_op_infos; + std::vector img_op_mem_infos; + std::vector allocator_img_op_datas; + std::vector allocator_img_op_mem_datas; + std::vector img_op_mem_prop_flags; + + std::vector img_infos; + std::vector img_mem_infos; + std::vector allocator_img_datas; + std::vector allocator_img_mem_datas; + std::vector img_mem_prop_flags; + + for (uint32_t i = 0; i < bindInfoCount; ++i) + { + const auto* meta_bind_info = &meta_bind_infos[i]; + + const auto buf_len = meta_bind_infos->pBufferBinds->GetLength(); + const auto* meta_bufs = meta_bind_infos->pBufferBinds->GetMetaStructPointer(); + + for (uint32_t buf_i = 0; buf_i < buf_len; ++buf_i) + { + auto buf_info = object_info_table_->GetVkBufferInfo(meta_bufs[buf_i].buffer); + buf_infos.push_back(buf_info); + + if (buf_info != nullptr) + { + allocator_buf_datas.push_back(buf_info->allocator_data); + } + else + { + allocator_buf_datas.push_back(0); + } + + const auto mem_len = meta_bufs[buf_i].pBinds->GetLength(); + const auto* meta_mems = meta_bufs[buf_i].pBinds->GetMetaStructPointer(); + + for (uint32_t mem_i = 0; mem_i < mem_len; ++mem_i) + { + auto mem_info = object_info_table_->GetVkDeviceMemoryInfo(meta_mems[mem_i].memory); + buf_mem_infos.push_back(mem_info); + + if (mem_info != nullptr) + { + allocator_buf_mem_datas.push_back(mem_info->allocator_data); + } + else + { + allocator_buf_mem_datas.push_back(0); + } + } + } + + auto img_op_len = meta_bind_infos->pImageOpaqueBinds->GetLength(); + const auto* meta_img_ops = meta_bind_infos->pImageOpaqueBinds->GetMetaStructPointer(); + + for (uint32_t img_op_i = 0; img_op_i < img_op_len; ++img_op_i) + { + auto img_info = object_info_table_->GetVkImageInfo(meta_img_ops[img_op_i].image); + img_op_infos.push_back(img_info); + + if (img_info != nullptr) + { + allocator_img_op_datas.push_back(img_info->allocator_data); + } + else + { + allocator_img_op_datas.push_back(0); + } + + const auto mem_len = meta_img_ops[img_op_i].pBinds->GetLength(); + const auto* meta_mems = meta_img_ops[img_op_i].pBinds->GetMetaStructPointer(); + + for (uint32_t mem_i = 0; mem_i < mem_len; ++mem_i) + { + auto mem_info = object_info_table_->GetVkDeviceMemoryInfo(meta_mems[mem_i].memory); + img_op_mem_infos.push_back(mem_info); + + if (mem_info != nullptr) + { + allocator_img_op_mem_datas.push_back(mem_info->allocator_data); + } + else + { + allocator_img_op_mem_datas.push_back(0); + } + } + } + + auto img_len = meta_bind_infos->pImageBinds->GetLength(); + const auto* meta_imgs = meta_bind_infos->pImageBinds->GetMetaStructPointer(); + + for (uint32_t img_i = 0; img_i < img_len; ++img_i) + { + auto img_info = object_info_table_->GetVkImageInfo(meta_imgs[img_i].image); + img_infos.push_back(img_info); + + if (img_info != nullptr) + { + allocator_img_datas.push_back(img_info->allocator_data); + } + else + { + allocator_img_datas.push_back(0); + } + + const auto mem_len = meta_imgs[img_i].pBinds->GetLength(); + const auto* meta_mems = meta_imgs[img_i].pBinds->GetMetaStructPointer(); + + for (uint32_t mem_i = 0; mem_i < mem_len; ++mem_i) + { + auto mem_info = object_info_table_->GetVkDeviceMemoryInfo(meta_mems[mem_i].memory); + img_mem_infos.push_back(mem_info); + + if (mem_info != nullptr) + { + allocator_img_mem_datas.push_back(mem_info->allocator_data); + } + else + { + allocator_img_mem_datas.push_back(0); + } + } + } + } + + buf_mem_prop_flags.resize(allocator_buf_mem_datas.size(), 0); + img_op_mem_prop_flags.resize(allocator_img_op_mem_datas.size(), 0); + img_mem_prop_flags.resize(allocator_img_mem_datas.size(), 0); + + std::vector modified_bind_infos(bind_infos, std::next(bind_infos, bindInfoCount)); + // Only attempt to filter imported semaphores if we know at least one has been imported. // If rendering is restricted to a specific surface, shadow semaphore and forward progress state will need to be // tracked. if ((!have_imported_semaphores_) && (options_.surface_index == -1)) { - result = func(queue_info->handle, bindInfoCount, bind_infos, fence); + result = allocator->QueueBindSparse(queue_info->handle, + static_cast(modified_bind_infos.size()), + modified_bind_infos.data(), + fence, + allocator_buf_datas.data(), + allocator_buf_mem_datas.data(), + buf_mem_prop_flags.data(), + allocator_img_op_datas.data(), + allocator_img_op_mem_datas.data(), + img_op_mem_prop_flags.data(), + allocator_img_datas.data(), + allocator_img_mem_datas.data(), + img_mem_prop_flags.data()); } else { @@ -4339,13 +4817,24 @@ VulkanReplayConsumerBase::OverrideQueueBindSparse(PFN_vkQueueBindSparse if (altered_submits.empty()) { - result = func(queue_info->handle, bindInfoCount, bind_infos, fence); + result = allocator->QueueBindSparse(queue_info->handle, + static_cast(modified_bind_infos.size()), + modified_bind_infos.data(), + fence, + allocator_buf_datas.data(), + allocator_buf_mem_datas.data(), + buf_mem_prop_flags.data(), + allocator_img_op_datas.data(), + allocator_img_op_mem_datas.data(), + img_op_mem_prop_flags.data(), + allocator_img_datas.data(), + allocator_img_mem_datas.data(), + img_mem_prop_flags.data()); } else { // Make shallow copies of the VkBindSparseInfo structures and change pWaitSemaphores to reference a copy of // the original semaphore array with the imported semaphores omitted. - std::vector modified_bind_infos(bind_infos, std::next(bind_infos, bindInfoCount)); std::vector> semaphore_memory(altered_submits.size()); std::vector wait_semaphores; @@ -4393,19 +4882,96 @@ VulkanReplayConsumerBase::OverrideQueueBindSparse(PFN_vkQueueBindSparse modified_bind_info.pWaitSemaphores = signal_semaphores.data(); } - result = func(queue_info->handle, - static_cast(modified_bind_infos.size()), - modified_bind_infos.data(), - fence); + result = allocator->QueueBindSparse(queue_info->handle, + static_cast(modified_bind_infos.size()), + modified_bind_infos.data(), + fence, + allocator_buf_datas.data(), + allocator_buf_mem_datas.data(), + buf_mem_prop_flags.data(), + allocator_img_op_datas.data(), + allocator_img_op_mem_datas.data(), + img_op_mem_prop_flags.data(), + allocator_img_datas.data(), + allocator_img_mem_datas.data(), + img_mem_prop_flags.data()); } } - return result; -} + if (result == VK_SUCCESS) + { + uint32_t buf_prop_i = 0; + uint32_t img_op_prop_i = 0; + uint32_t img_prop_i = 0; -VkResult VulkanReplayConsumerBase::OverrideCreateDescriptorSetLayout( - PFN_vkCreateDescriptorSetLayout func, - VkResult original_result, + for (uint32_t i = 0; i < bindInfoCount; ++i) + { + const auto* bind_info = &bind_infos[i]; + + for (uint32_t buf_i = 0; buf_i < bind_info->bufferBindCount; ++buf_i) + { + auto* info = buf_infos[buf_i]; + + if (info != nullptr) + { + for (uint32_t mem_i = 0; mem_i < bind_info->pBufferBinds[buf_i].bindCount; ++mem_i) + { + info->sparse_memory_property_flags.push_back(buf_mem_prop_flags[buf_prop_i]); + ++buf_prop_i; + } + } + } + + for (uint32_t img_op_i = 0; img_op_i < bind_info->imageOpaqueBindCount; ++img_op_i) + { + auto* info = img_op_infos[img_op_i]; + + if (info != nullptr) + { + for (uint32_t mem_i = 0; mem_i < bind_info->pImageOpaqueBinds[img_op_i].bindCount; ++mem_i) + { + info->sparse_memory_property_flags.push_back(img_op_mem_prop_flags[img_op_prop_i]); + ++img_op_prop_i; + } + } + } + + for (uint32_t img_i = 0; img_i < bind_info->imageBindCount; ++img_i) + { + auto* info = img_infos[img_i]; + + if (info != nullptr) + { + for (uint32_t mem_i = 0; mem_i < bind_info->pImageBinds[img_i].bindCount; ++mem_i) + { + info->sparse_memory_property_flags.push_back(img_mem_prop_flags[img_prop_i]); + ++img_prop_i; + } + } + } + } + } + else if (original_result == VK_SUCCESS) + { + // When bind fails at replay, but succeeded at capture, check for memory incompatibilities and recommend + // enabling memory translation. + allocator->ReportQueueBindSparseIncompatibility(queue_info->handle, + static_cast(modified_bind_infos.size()), + modified_bind_infos.data(), + fence, + allocator_buf_datas.data(), + allocator_buf_mem_datas.data(), + allocator_img_op_datas.data(), + allocator_img_op_mem_datas.data(), + allocator_img_datas.data(), + allocator_img_mem_datas.data()); + } + return result; +} + +VkResult VulkanReplayConsumerBase::OverrideCreateDescriptorSetLayout( + PFN_vkCreateDescriptorSetLayout func, + VkResult original_result, const VulkanDeviceInfo* device_info, StructPointerDecoder* pCreateInfo, StructPointerDecoder* pAllocator, @@ -4578,7 +5144,7 @@ VkResult VulkanReplayConsumerBase::OverrideAllocateDescriptorSets( GFXRECON_LOG_INFO( "A new VkDescriptorPool object (handle = 0x%" PRIx64 ") has been created to replace a VkDescriptorPool object (ID = %" PRIu64 ", handle = 0x%" PRIx64 - ") that has run our of pool memory (vkAllocateDescriptorSets returned VK_ERROR_OUT_OF_POOL_MEMORY)", + ") that has run out of pool memory (vkAllocateDescriptorSets returned VK_ERROR_OUT_OF_POOL_MEMORY)", new_pool, pool_info->capture_id, pool_info->handle); @@ -4823,7 +5389,7 @@ VkResult VulkanReplayConsumerBase::OverrideAllocateMemory( auto allocator = device_info->allocator.get(); assert(allocator != nullptr); - VulkanResourceAllocator::MemoryData allocator_data; + VulkanResourceAllocator::MemoryData allocator_data = 0; auto* modified_allocate_info = const_cast(pAllocateInfo->GetPointer()); auto replay_memory = pMemory->GetHandlePointer(); @@ -4878,11 +5444,17 @@ VkResult VulkanReplayConsumerBase::OverrideAllocateMemory( } #endif + VkMemoryOpaqueCaptureAddressAllocateInfo address_info = { + VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO + }; + VkMemoryAllocateFlagsInfo flags_info = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO }; + while (current_struct != nullptr) { if (current_struct->sType == VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO) { - auto alloc_flags_info = reinterpret_cast(current_struct); + auto* alloc_flags_info = reinterpret_cast(current_struct); + flags_info = *alloc_flags_info; if ((alloc_flags_info->flags & VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT) == VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT) { @@ -4933,10 +5505,18 @@ VkResult VulkanReplayConsumerBase::OverrideAllocateMemory( current_struct = current_struct->pNext; } - if (uses_address && !address_override_found) + if (device_info->property_feature_info.feature_descriptorBufferCaptureReplay && + !UseAddressReplacement(device_info)) { - // Insert VkMemoryOpaqueCaptureAddressAllocateInfo into front of pNext chain before allocating + uses_address = true; + flags_info.pNext = nullptr; + flags_info.flags |= + VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT | VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT; + graphics::vulkan_struct_add_pnext(modified_allocate_info, &flags_info); + } + if (uses_address && !address_override_found) + { // The Vulkan spec states: If the pNext chain includes a VkImportMemoryHostPointerInfoEXT structure, // VkMemoryOpaqueCaptureAddressAllocateInfo::opaqueCaptureAddress must be zero // (https://vulkan.lunarg.com/doc/view/1.3.216.0/linux/1.3-extensions/vkspec.html#VUID-VkMemoryAllocateInfo-pNext-03332) @@ -4945,26 +5525,18 @@ VkResult VulkanReplayConsumerBase::OverrideAllocateMemory( opaque_address = 0; } - VkMemoryOpaqueCaptureAddressAllocateInfo address_info = { - VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO, - modified_allocate_info->pNext, - opaque_address - }; - modified_allocate_info->pNext = &address_info; - - result = allocator->AllocateMemory( - modified_allocate_info, GetAllocationCallbacks(pAllocator), capture_id, replay_memory, &allocator_data); - } - else - { - result = allocator->AllocateMemory( - modified_allocate_info, GetAllocationCallbacks(pAllocator), capture_id, replay_memory, &allocator_data); + // Insert VkMemoryOpaqueCaptureAddressAllocateInfo into front of pNext chain before allocating + address_info.opaqueCaptureAddress = opaque_address; + graphics::vulkan_struct_add_pnext(modified_allocate_info, &address_info); } - if ((result == VK_SUCCESS) && (modified_allocate_info != nullptr) && ((*replay_memory) != VK_NULL_HANDLE)) + result = allocator->AllocateMemory( + modified_allocate_info, GetAllocationCallbacks(pAllocator), capture_id, replay_memory, &allocator_data); + + if (result == VK_SUCCESS && modified_allocate_info != nullptr && *replay_memory != VK_NULL_HANDLE) { - auto memory_info = reinterpret_cast(pMemory->GetConsumerData(0)); - assert(memory_info != nullptr); + auto* memory_info = static_cast(pMemory->GetConsumerData(0)); + GFXRECON_ASSERT(memory_info != nullptr); memory_info->allocator = allocator; memory_info->allocator_data = allocator_data; @@ -5172,7 +5744,6 @@ VkResult VulkanReplayConsumerBase::OverrideBindBufferMemory2( assert((replay_bind_infos != nullptr) && (replay_bind_meta_infos != nullptr)); std::vector buffer_infos; - std::vector memory_infos; std::vector allocator_buffer_datas(bindInfoCount, 0); std::vector allocator_memory_datas(bindInfoCount, 0); std::vector memory_property_flags(bindInfoCount, 0); @@ -5185,7 +5756,6 @@ VkResult VulkanReplayConsumerBase::OverrideBindBufferMemory2( auto memory_info = object_info_table_->GetVkDeviceMemoryInfo(bind_meta_info->memory); buffer_infos.push_back(buffer_info); - memory_infos.push_back(memory_info); if (buffer_info != nullptr) { @@ -5289,7 +5859,6 @@ VkResult VulkanReplayConsumerBase::OverrideBindImageMemory2( assert((replay_bind_infos != nullptr) && (replay_bind_meta_infos != nullptr)); std::vector image_infos; - std::vector memory_infos; std::vector allocator_image_datas(bindInfoCount, 0); std::vector allocator_memory_datas(bindInfoCount, 0); std::vector memory_property_flags(bindInfoCount, 0); @@ -5302,7 +5871,6 @@ VkResult VulkanReplayConsumerBase::OverrideBindImageMemory2( auto memory_info = object_info_table_->GetVkDeviceMemoryInfo(bind_meta_info->memory); image_infos.push_back(image_info); - memory_infos.push_back(memory_info); if (image_info != nullptr) { @@ -5375,44 +5943,41 @@ VkResult VulkanReplayConsumerBase::OverrideBindVideoSessionMemoryKHR( auto replay_bind_meta_infos = pBindSessionMemoryInfos->GetMetaStructPointer(); GFXRECON_ASSERT((replay_bind_infos != nullptr) && (replay_bind_meta_infos != nullptr)); - uint32_t session_mem_count = video_session_info->allocator_datas.size(); - std::vector memory_infos; - std::vector allocator_session_datas(session_mem_count, 0); - std::vector allocator_memory_datas(session_mem_count, 0); - std::vector memory_property_flags(session_mem_count, 0); + VulkanResourceAllocator::ResourceData allocator_session_data = video_session_info->allocator_data; - for (uint32_t mem_index = 0; mem_index < session_mem_count; ++mem_index) + std::vector allocator_memory_datas(bindSessionMemoryInfoCount, 0); + std::vector memory_property_flags(bindSessionMemoryInfoCount, 0); + + for (uint32_t i = 0; i < bindSessionMemoryInfoCount; ++i) { - allocator_session_datas[mem_index] = video_session_info->allocator_datas[mem_index]; + const auto* bind_meta_info = &replay_bind_meta_infos[i]; + auto memory_info = object_info_table_->GetVkDeviceMemoryInfo(bind_meta_info->memory); - for (uint32_t i = 0; i < bindSessionMemoryInfoCount; ++i) + if (memory_info != nullptr) { - const auto* bind_meta_info = &replay_bind_meta_infos[i]; - if (mem_index == bind_meta_info->decoded_value->memoryBindIndex) - { - auto memory_info = object_info_table_->GetVkDeviceMemoryInfo(bind_meta_info->memory); - memory_infos.push_back(memory_info); - - if (memory_info != nullptr) - { - allocator_memory_datas[mem_index] = memory_info->allocator_data; - } - } + allocator_memory_datas[i] = memory_info->allocator_data; } } + VkResult result = allocator->BindVideoSessionMemory(video_session_info->handle, bindSessionMemoryInfoCount, replay_bind_infos, - allocator_session_datas.data(), + allocator_session_data, allocator_memory_datas.data(), memory_property_flags.data()); if (result == VK_SUCCESS) { - video_session_info->memory_property_flags.resize(session_mem_count); - for (uint32_t i = 0; i < session_mem_count; ++i) + for (uint32_t i = 0; i < bindSessionMemoryInfoCount; ++i) { - video_session_info->memory_property_flags[i] = memory_property_flags[i]; + const auto* bind_meta_info = &replay_bind_meta_infos[i]; + const auto mem_i = bind_meta_info->decoded_value->memoryBindIndex; + + if (mem_i >= video_session_info->memory_property_flags.size()) + { + video_session_info->memory_property_flags.resize(mem_i + 1, 0); + } + video_session_info->memory_property_flags[mem_i] = memory_property_flags[i]; } } else if (original_result == VK_SUCCESS) @@ -5422,7 +5987,7 @@ VkResult VulkanReplayConsumerBase::OverrideBindVideoSessionMemoryKHR( allocator->ReportBindVideoSessionIncompatibility(video_session_info->handle, bindSessionMemoryInfoCount, replay_bind_infos, - allocator_session_datas.data(), + allocator_session_data, allocator_memory_datas.data()); } @@ -5432,7 +5997,7 @@ VkResult VulkanReplayConsumerBase::OverrideBindVideoSessionMemoryKHR( VkResult VulkanReplayConsumerBase::OverrideCreateBuffer(PFN_vkCreateBuffer func, VkResult original_result, - const VulkanDeviceInfo* device_info, + VulkanDeviceInfo* device_info, const StructPointerDecoder* pCreateInfo, const StructPointerDecoder* pAllocator, HandlePointerDecoder* pBuffer) @@ -5480,9 +6045,18 @@ VulkanReplayConsumerBase::OverrideCreateBuffer(PFN_vkCreateBuffer bool force_address = UseAddressReplacement(device_info) && (replay_create_info->usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT || replay_create_info->usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT); + VkBufferCreateFlags address_create_flags = 0; VkBufferUsageFlags address_usage_flags = 0; + // for buffer-device-addresses or when using VK_EXT_descriptor_buffer we inject those structs in pNext-chain + VkBufferOpaqueCaptureAddressCreateInfo opaque_address_info = { + VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO + }; + VkOpaqueCaptureDescriptorDataCreateInfoEXT opaque_descriptor_info = { + VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT + }; + auto* buffer_info = reinterpret_cast(pBuffer->GetConsumerData(0)); GFXRECON_ASSERT(buffer_info != nullptr); @@ -5505,14 +6079,12 @@ VulkanReplayConsumerBase::OverrideCreateBuffer(PFN_vkCreateBuffer if (device_info->property_feature_info.feature_bufferDeviceAddressCaptureReplay && !UseAddressReplacement(device_info)) { - if ((replay_create_info->usage & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT) == - VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT) + if (replay_create_info->usage & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT) { uses_address = true; address_create_flags |= VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT; } - if ((replay_create_info->usage & VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR) == - VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR) + if (replay_create_info->usage & VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR) { uses_address = true; address_create_flags |= VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT; @@ -5520,22 +6092,34 @@ VulkanReplayConsumerBase::OverrideCreateBuffer(PFN_vkCreateBuffer } } - if (uses_address) + if (device_info->property_feature_info.feature_descriptorBufferCaptureReplay && !UseAddressReplacement(device_info)) { - VkBufferOpaqueCaptureAddressCreateInfo address_info = { - VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO - }; + if (auto it = device_info->opaque_descriptor_data.find(capture_id); + it != device_info->opaque_descriptor_data.end()) + { + modified_create_info.flags |= VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT; + + opaque_descriptor_info.opaqueCaptureDescriptorData = it->second.data(); + + // add to pNext-chain + graphics::vulkan_struct_add_pnext(&modified_create_info, &opaque_descriptor_info); + } + else + { + GFXRECON_LOG_DEBUG("Opaque descriptor-data is not available for VkBuffer object (ID = %" PRIu64 ")", + capture_id); + } + } + if (uses_address) + { auto entry = device_info->opaque_addresses.find(capture_id); if (entry != device_info->opaque_addresses.end()) { - address_info.opaqueCaptureAddress = entry->second; + opaque_address_info.opaqueCaptureAddress = entry->second; - // The shallow copy of VkBufferCreateInfo references the same pNext list from the copy source. We insert - // the buffer address extension struct at the start of the list to avoid modifying the original by appending - // to the end. - address_info.pNext = modified_create_info.pNext; - modified_create_info.pNext = &address_info; + // add to pNext-chain + graphics::vulkan_struct_add_pnext(&modified_create_info, &opaque_address_info); modified_create_info.flags |= address_create_flags; modified_create_info.usage |= address_usage_flags; @@ -5545,23 +6129,19 @@ VulkanReplayConsumerBase::OverrideCreateBuffer(PFN_vkCreateBuffer GFXRECON_LOG_DEBUG("Opaque device address is not available for VkBuffer object (ID = %" PRIu64 ")", capture_id); } - - result = allocator->CreateBuffer( - &modified_create_info, GetAllocationCallbacks(pAllocator), capture_id, replay_buffer, &allocator_data); } else if (force_address) { modified_create_info.usage |= VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT; - result = allocator->CreateBuffer( - &modified_create_info, GetAllocationCallbacks(pAllocator), capture_id, replay_buffer, &allocator_data); - } - else - { - result = allocator->CreateBuffer( - &modified_create_info, GetAllocationCallbacks(pAllocator), capture_id, replay_buffer, &allocator_data); } - if ((result == VK_SUCCESS) && (replay_create_info != nullptr) && ((*replay_buffer) != VK_NULL_HANDLE)) + result = allocator->CreateBuffer( + &modified_create_info, GetAllocationCallbacks(pAllocator), capture_id, replay_buffer, &allocator_data); + + // clean potential opaque creation-data + device_info->opaque_descriptor_data.erase(capture_id); + + if (result == VK_SUCCESS && replay_create_info != nullptr && *replay_buffer != VK_NULL_HANDLE) { buffer_info->allocator_data = allocator_data; buffer_info->usage = replay_create_info->usage; @@ -5636,6 +6216,9 @@ void VulkanReplayConsumerBase::OverrideDestroyBuffer( allocator->DestroyBuffer(buffer, GetAllocationCallbacks(pAllocator), allocator_data); + // free potential shadow-resources associated with this buffer + GetDeviceAddressReplacer(device_info).DestroyShadowResources(buffer_info); + // remove from device-address tracking GetDeviceAddressTracker(device_info).RemoveBuffer(buffer_info); } @@ -5643,7 +6226,7 @@ void VulkanReplayConsumerBase::OverrideDestroyBuffer( VkResult VulkanReplayConsumerBase::OverrideCreateImage(PFN_vkCreateImage func, VkResult original_result, - const VulkanDeviceInfo* device_info, + VulkanDeviceInfo* device_info, const StructPointerDecoder* pCreateInfo, const StructPointerDecoder* pAllocator, HandlePointerDecoder* pImage) @@ -5664,6 +6247,10 @@ VulkanReplayConsumerBase::OverrideCreateImage(PFN_vkCreateImage auto replay_create_info = pCreateInfo->GetPointer(); VkImageCreateInfo modified_create_info = *replay_create_info; + VkOpaqueCaptureDescriptorDataCreateInfoEXT opaque_descriptor_info = { + VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT + }; + // replaying a trimmed capture or dump-resources might require us to copy from images // NOTE: we skip TRANSFER_SRC_BIT flag when other incompatible flags are present if ((replaying_trimmed_capture_ || options_.dumping_resources) && @@ -5684,6 +6271,24 @@ VulkanReplayConsumerBase::OverrideCreateImage(PFN_vkCreateImage } } + if (device_info->property_feature_info.feature_descriptorBufferCaptureReplay && !UseAddressReplacement(device_info)) + { + if (auto it = device_info->opaque_descriptor_data.find(capture_id); + it != device_info->opaque_descriptor_data.end()) + { + modified_create_info.flags |= VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT; + + // add to pNext-chain + opaque_descriptor_info.opaqueCaptureDescriptorData = it->second.data(); + graphics::vulkan_struct_add_pnext(&modified_create_info, &opaque_descriptor_info); + } + else + { + GFXRECON_LOG_DEBUG("Opaque descriptor-data is not available for VkImage object (ID = %" PRIu64 ")", + capture_id); + } + } + // The original image might be external and it might be an unknown format, so perform any // work necessary to handle these scenarios. auto* external_memory = graphics::vulkan_struct_get_pnext(&modified_create_info); @@ -5720,7 +6325,7 @@ VulkanReplayConsumerBase::OverrideCreateImage(PFN_vkCreateImage VkResult result = allocator->CreateImage( &modified_create_info, GetAllocationCallbacks(pAllocator), capture_id, replay_image, &allocator_data); - if ((result == VK_SUCCESS) && ((*replay_image) != VK_NULL_HANDLE)) + if (result == VK_SUCCESS && *replay_image != VK_NULL_HANDLE) { auto image_info = reinterpret_cast(pImage->GetConsumerData(0)); GFXRECON_ASSERT(image_info != nullptr); @@ -5766,6 +6371,9 @@ VulkanReplayConsumerBase::OverrideCreateImage(PFN_vkCreateImage } } + // clean potential opaque creation-data + device_info->opaque_descriptor_data.erase(capture_id); + return result; } @@ -5868,21 +6476,21 @@ VkResult VulkanReplayConsumerBase::OverrideCreateVideoSessionKHR( auto allocator = device_info->allocator.get(); GFXRECON_ASSERT(allocator != nullptr); - VkResult result = VK_SUCCESS; - std::vector allocator_datas; - auto replay_session = pVideoSession->GetHandlePointer(); - auto capture_id = (*pVideoSession->GetPointer()); - auto replay_create_info = pCreateInfo->GetPointer(); + VkResult result = VK_SUCCESS; + VulkanResourceAllocator::ResourceData allocator_data; + auto replay_session = pVideoSession->GetHandlePointer(); + auto capture_id = (*pVideoSession->GetPointer()); + auto replay_create_info = pCreateInfo->GetPointer(); result = allocator->CreateVideoSession( - replay_create_info, GetAllocationCallbacks(pAllocator), capture_id, replay_session, &allocator_datas); + replay_create_info, GetAllocationCallbacks(pAllocator), capture_id, replay_session, &allocator_data); if ((result == VK_SUCCESS) && (replay_create_info != nullptr) && ((*replay_session) != VK_NULL_HANDLE)) { auto session_info = reinterpret_cast(pVideoSession->GetConsumerData(0)); GFXRECON_ASSERT(session_info != nullptr); - session_info->allocator_datas = allocator_datas; + session_info->allocator_data = allocator_data; session_info->queue_family_index = replay_create_info->queueFamilyIndex; } @@ -5902,18 +6510,18 @@ void VulkanReplayConsumerBase::OverrideDestroyVideoSessionKHR( auto allocator = device_info->allocator.get(); GFXRECON_ASSERT(allocator != nullptr); - VkVideoSessionKHR session = VK_NULL_HANDLE; - std::vector allocator_datas; + VkVideoSessionKHR session = VK_NULL_HANDLE; + VulkanResourceAllocator::ResourceData allocator_data; if (video_session_info != nullptr) { - session = video_session_info->handle; - allocator_datas = video_session_info->allocator_datas; + session = video_session_info->handle; + allocator_data = video_session_info->allocator_data; - video_session_info->allocator_datas.clear(); + video_session_info->allocator_data = 0; } - allocator->DestroyVideoSession(session, GetAllocationCallbacks(pAllocator), allocator_datas); + allocator->DestroyVideoSession(session, GetAllocationCallbacks(pAllocator), allocator_data); } void VulkanReplayConsumerBase::OverrideGetBufferMemoryRequirements( @@ -6048,7 +6656,7 @@ VkResult VulkanReplayConsumerBase::OverrideGetVideoSessionMemoryRequirementsKHR( video_session_info->handle, pMemoryRequirementsCount->GetPointer(), pMemoryRequirements == nullptr ? nullptr : pMemoryRequirements->GetPointer(), - video_session_info->allocator_datas); + video_session_info->allocator_data); } template @@ -6417,53 +7025,6 @@ void VulkanReplayConsumerBase::OverrideDestroyDescriptorUpdateTemplate( func(device, descriptor_update_template, GetAllocationCallbacks(pAllocator)); } -static VkDescriptorType SpvReflectToVkDescriptorType(SpvReflectDescriptorType type) -{ - switch (type) - { - case SPV_REFLECT_DESCRIPTOR_TYPE_SAMPLER: - return VK_DESCRIPTOR_TYPE_SAMPLER; - - case SPV_REFLECT_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: - return VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; - - case SPV_REFLECT_DESCRIPTOR_TYPE_SAMPLED_IMAGE: - return VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE; - - case SPV_REFLECT_DESCRIPTOR_TYPE_STORAGE_IMAGE: - return VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; - - case SPV_REFLECT_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: - return VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER; - - case SPV_REFLECT_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: - return VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER; - - case SPV_REFLECT_DESCRIPTOR_TYPE_UNIFORM_BUFFER: - return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; - - case SPV_REFLECT_DESCRIPTOR_TYPE_STORAGE_BUFFER: - return VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; - - case SPV_REFLECT_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: - return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC; - - case SPV_REFLECT_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: - return VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC; - - case SPV_REFLECT_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: - return VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT; - - case SPV_REFLECT_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: - return VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR; - - default: - GFXRECON_LOG_WARNING("%s(): Unrecognised SPIRV-Reflect descriptor type"); - assert(0); - return VK_DESCRIPTOR_TYPE_MAX_ENUM; - } -} - VkResult VulkanReplayConsumerBase::OverrideCreateShaderModule( PFN_vkCreateShaderModule func, VkResult original_result, @@ -6499,8 +7060,6 @@ VkResult VulkanReplayConsumerBase::OverrideCreateShaderModule( // Replace shader in 'override_info' std::unique_ptr file_code; - const uint32_t* const orig_code = original_info->pCode; - const size_t orig_size = original_info->codeSize; uint64_t handle_id = *pShaderModule->GetPointer(); std::string file_name = "sh" + std::to_string(handle_id); std::string file_path = util::filepath::Join(options_.replace_shader_dir, file_name); @@ -6795,6 +7354,11 @@ VkResult VulkanReplayConsumerBase::OverrideResetDescriptorPool(PFN_vkResetDescri return func(device_info->handle, pool_info->handle, flags); } +bool VulkanReplayConsumerBase::IsExtensionBeingFaked(const char* extension) +{ + return graphics::feature_util::IsSupportedExtension(faked_extensions_, extension); +} + VkResult VulkanReplayConsumerBase::OverrideCreateDebugReportCallbackEXT( PFN_vkCreateDebugReportCallbackEXT func, VkResult original_result, @@ -6867,6 +7431,10 @@ uintptr_t VulkanReplayConsumerBase::GetObjectAllocatorData(VkObjectType object_t return GetObjectInfoTable().GetVkBufferInfo(handle_id)->allocator_data; case VK_OBJECT_TYPE_IMAGE: return GetObjectInfoTable().GetVkImageInfo(handle_id)->allocator_data; + case VK_OBJECT_TYPE_VIDEO_SESSION_KHR: + return GetObjectInfoTable().GetVkVideoSessionKHRInfo(handle_id)->allocator_data; + case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV: + return GetObjectInfoTable().GetVkAccelerationStructureNVInfo(handle_id)->allocator_data; default: return 0; } @@ -6890,14 +7458,55 @@ VkResult VulkanReplayConsumerBase::OverrideSetDebugUtilsObjectNameEXT( VkDebugUtilsObjectNameInfoEXT* info = meta_info->decoded_value; GFXRECON_ASSERT(info != nullptr); - uintptr_t allocator_data = GetObjectAllocatorData(info->objectType, meta_info->objectHandle); - - if (allocator_data != 0) + // a VkPipeline is currently being compiled asynchronously -> defer setting the debug-name + if (info->objectType == VK_OBJECT_TYPE_PIPELINE && IsUsedByAsyncTask(meta_info->objectHandle)) + { + format::HandleId pipeline_id = meta_info->objectHandle; + size_t info_size = graphics::vulkan_struct_deep_copy(info, 1, nullptr); + std::vector info_copy(info_size); + graphics::vulkan_struct_deep_copy(info, 1, info_copy.data()); + auto& async_handle_asset = async_tracked_handles_[pipeline_id]; + async_handle_asset.post_build_fn = [this, + device = device_info->handle, + pipeline_id, + func, + info_copy = std::move(info_copy), + original_result]() mutable { + auto* info = reinterpret_cast(info_copy.data()); + + // correct referenced handle in info. this would sync, but task is already done + VkPipeline pipeline = handle_mapping::MapHandle( + pipeline_id, GetObjectInfoTable(), &CommonObjectInfoTable::GetVkPipelineInfo); + GFXRECON_ASSERT(pipeline != VK_NULL_HANDLE); + info->objectHandle = (uint64_t)pipeline; + + VkResult result = func(device, info); + + if (result != original_result) + { + GFXRECON_LOG_WARNING("VkDebugUtilsObjectNameInfoEXT was deferred for VkPipeline: %d - result: '%d' " + "does not match original: '%d'", + pipeline_id, + result, + original_result); + } + }; + return original_result; + } + else { - // depending on which allocator is used, the call might get deferred until resources are actually bound - return allocator->SetDebugUtilsObjectNameEXT(device_info->handle, info, allocator_data); + // correct referenced handle in info + MapStructHandles(meta_info, GetObjectInfoTable()); + + uintptr_t allocator_data = GetObjectAllocatorData(info->objectType, meta_info->objectHandle); + + if (allocator_data != 0) + { + // depending on which allocator is used, the call might get deferred until resources are actually bound + return allocator->SetDebugUtilsObjectNameEXT(device_info->handle, info, allocator_data); + } + return func(device_info->handle, info); } - return func(device_info->handle, info); } VkResult VulkanReplayConsumerBase::OverrideSetDebugUtilsObjectTagEXT( @@ -6928,6 +7537,57 @@ VkResult VulkanReplayConsumerBase::OverrideSetDebugUtilsObjectTagEXT( return func(device_info->handle, info); } +VkResult VulkanReplayConsumerBase::OverrideGetPhysicalDeviceSurfaceFormatsKHR( + PFN_vkGetPhysicalDeviceSurfaceFormatsKHR func, + VkResult original_result, + decode::VulkanPhysicalDeviceInfo* physical_device_info, + decode::VulkanSurfaceKHRInfo* surface_info, + PointerDecoder* pSurfaceFormatCount, + StructPointerDecoder* pSurfaceFormats) +{ + GFXRECON_ASSERT(physical_device_info != nullptr && surface_info != nullptr); + + uint32_t* surface_format_count = pSurfaceFormatCount->GetPointer(); + VkSurfaceFormatKHR* surface_formats = pSurfaceFormats->GetPointer(); + + VkResult result = func(physical_device_info->handle, surface_info->handle, surface_format_count, surface_formats); + + if (surface_formats != nullptr) + { + physical_device_info->surface_formats = { surface_formats, surface_formats + *surface_format_count }; + } + return result; +} + +VkResult VulkanReplayConsumerBase::OverrideGetPhysicalDeviceSurfaceFormats2KHR( + PFN_vkGetPhysicalDeviceSurfaceFormats2KHR func, + VkResult original_result, + decode::VulkanPhysicalDeviceInfo* physical_device_info, + StructPointerDecoder* surface_info, + PointerDecoder* pSurfaceFormatCount, + StructPointerDecoder* pSurfaceFormats) +{ + GFXRECON_ASSERT(physical_device_info != nullptr && surface_info != nullptr); + + uint32_t* surface_format_count = pSurfaceFormatCount->GetPointer(); + VkSurfaceFormat2KHR* surface_formats = pSurfaceFormats->GetPointer(); + + VkResult result = + func(physical_device_info->handle, surface_info->GetPointer(), surface_format_count, surface_formats); + + if (surface_formats != nullptr) + { + // init optional value + physical_device_info->surface_formats.emplace(); + + for (uint32_t i = 0; i < *surface_format_count; ++i) + { + physical_device_info->surface_formats->push_back(surface_formats[i].surfaceFormat); + } + } + return result; +} + VkResult VulkanReplayConsumerBase::OverrideCreateSwapchainKHR( PFN_vkCreateSwapchainKHR func, VkResult original_result, @@ -6944,15 +7604,19 @@ VkResult VulkanReplayConsumerBase::OverrideCreateSwapchainKHR( VkResult result = VK_SUCCESS; auto replay_create_info = pCreateInfo->GetPointer(); GFXRECON_ASSERT(replay_create_info != nullptr); - auto replay_swapchain = pSwapchain->GetHandlePointer(); - auto swapchain_info = reinterpret_cast(pSwapchain->GetConsumerData(0)); - assert(swapchain_info != nullptr); + VkSwapchainKHR* replay_swapchain = pSwapchain->GetHandlePointer(); + auto* swapchain_info = reinterpret_cast(pSwapchain->GetConsumerData(0)); + GFXRECON_ASSERT(swapchain_info != nullptr); + + VkSwapchainCreateInfoKHR modified_create_info = (*replay_create_info); + + // might be passed via pNext-chain + std::optional format_list_create_info; + constexpr VkFormat fallback_color_formats[2] = { VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_B8G8R8A8_SRGB }; // Ignore swapchain creation if surface creation was skipped when rendering is restricted to a specific surface. if (replay_create_info->surface != VK_NULL_HANDLE) { - VkSwapchainCreateInfoKHR modified_create_info = (*replay_create_info); - // Ensure that the window has been resized properly. For Android, this ensures that we will set the proper // screen orientation when the swapchain pre-transform specifies a 90 or 270 degree rotation for older files // that do not include a ResizeWindowCmd2 command. @@ -7009,6 +7673,49 @@ VkResult VulkanReplayConsumerBase::OverrideCreateSwapchainKHR( supported_extension_iterator == instance_info->util_info.enabled_extensions.end(); } + // check if 'replay_create_info->imageFormat' is supported, + // do nothing if we got no information about available surfaces + bool surface_format_supported = !physical_device_info->surface_formats; + if (physical_device_info->surface_formats) + { + for (const auto& supported : *physical_device_info->surface_formats) + { + if (supported.format == replay_create_info->imageFormat) + { + surface_format_supported = true; + break; + } + } + } + + if (!surface_format_supported) + { + // handle VK_KHR_swapchain_mutable_format + if (modified_create_info.flags & VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR) + { + if (auto* format_list_pnext = + graphics::vulkan_struct_get_pnext(&modified_create_info)) + { + const auto* view_formats = format_list_pnext->pViewFormats; + const auto* view_formats_end = view_formats + format_list_pnext->viewFormatCount; + bool mutable_srgb = std::any_of(view_formats, view_formats_end, vkuFormatIsSRGB); + + // overwrite existing VkImageFormatListCreateInfo + format_list_create_info = *format_list_pnext; + format_list_create_info->viewFormatCount = mutable_srgb ? 2 : 1; + format_list_create_info->pViewFormats = fallback_color_formats; + graphics::vulkan_struct_add_pnext(&modified_create_info, + &format_list_create_info.value()); + } + } + + // fallback to a safe surface-format + modified_create_info.imageFormat = fallback_color_formats[0]; + GFXRECON_LOG_WARNING_ONCE( + "Replay adjusted unsupported surface imageFormat (%d) to VK_FORMAT_B8G8R8A8_UNORM", + replay_create_info->imageFormat); + } + if (colorspace_extension_used_unsupported) { if (options_.use_colorspace_fallback) @@ -7025,41 +7732,81 @@ VkResult VulkanReplayConsumerBase::OverrideCreateSwapchainKHR( } } - const VkBaseInStructure* current = reinterpret_cast(modified_create_info.pNext); - while (current != nullptr) + if (auto* compression_control = + graphics::vulkan_struct_get_pnext(&modified_create_info)) { - if (current->sType == VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT) + swapchain_info->compression_control = std::make_shared(*compression_control); + VkImageCompressionControlEXT* copy_target = swapchain_info->compression_control.get(); + copy_target->pNext = nullptr; + + // If the fixed rate flags are present, then create a copy for the internal version of + // the structure used to pass to swapchain image creation. + if (compression_control->compressionControlPlaneCount > 0 && + compression_control->pFixedRateFlags != nullptr) + { + std::copy(compression_control->pFixedRateFlags, + compression_control->pFixedRateFlags + compression_control->compressionControlPlaneCount, + std::back_inserter(swapchain_info->compression_fixed_rate_flags)); + copy_target->pFixedRateFlags = swapchain_info->compression_fixed_rate_flags.data(); + } + else { - const VkImageCompressionControlEXT* compression_control = - reinterpret_cast(current); + // Set everything as if the count was 0 because it could only get here if there was + // nothing in it already, or there was no valid data. + copy_target->compressionControlPlaneCount = 0; + copy_target->pFixedRateFlags = nullptr; + swapchain_info->compression_fixed_rate_flags.clear(); + } + } - swapchain_info->compression_control = - std::make_shared(*compression_control); - VkImageCompressionControlEXT* copy_target = swapchain_info->compression_control.get(); + if (options_.present_mode_option != util::PresentModeOption::kCapture) + { + VkPresentModeKHR present_mode = modified_create_info.presentMode; - // If the fixed rate flags are present, then create a copy for the internal version of - // the structure used to pass to swapchain image creation. - if (compression_control->compressionControlPlaneCount > 0 && - compression_control->pFixedRateFlags != nullptr) - { - std::copy(compression_control->pFixedRateFlags, - compression_control->pFixedRateFlags + compression_control->compressionControlPlaneCount, - std::back_inserter(swapchain_info->compression_fixed_rate_flags)); - copy_target->pFixedRateFlags = swapchain_info->compression_fixed_rate_flags.data(); - } - else - { - // Set everything as if the count was 0 because it could only get here if there was - // nothing in it already, or there was no valid data. - copy_target->compressionControlPlaneCount = 0; - copy_target->pFixedRateFlags = nullptr; - swapchain_info->compression_fixed_rate_flags.clear(); - } - copy_target->pNext = nullptr; - break; + switch (options_.present_mode_option) + { + case util::PresentModeOption::kImmediate: + present_mode = VK_PRESENT_MODE_IMMEDIATE_KHR; + break; + case util::PresentModeOption::kMailbox: + present_mode = VK_PRESENT_MODE_MAILBOX_KHR; + break; + case util::PresentModeOption::kFifo: + present_mode = VK_PRESENT_MODE_FIFO_KHR; + break; + case util::PresentModeOption::kFifoRelaxed: + present_mode = VK_PRESENT_MODE_FIFO_RELAXED_KHR; + break; + default: + // If something else, just leave it untouched. + break; } - current = current->pNext; + auto instance_table = GetInstanceTable(physical_device_info->parent); + + uint32_t present_mode_count; + instance_table->GetPhysicalDeviceSurfacePresentModesKHR( + physical_device_info->handle, modified_create_info.surface, &present_mode_count, nullptr); + + std::vector supported_present_modes(present_mode_count); + instance_table->GetPhysicalDeviceSurfacePresentModesKHR(physical_device_info->handle, + modified_create_info.surface, + &present_mode_count, + supported_present_modes.data()); + + bool is_supported = + std::find(supported_present_modes.begin(), supported_present_modes.end(), present_mode) != + supported_present_modes.end(); + + if (is_supported) + { + modified_create_info.presentMode = present_mode; + } + else + { + GFXRECON_LOG_ERROR("Swapchain present mode '%s' is requested but not supported", + util::ToString(present_mode).c_str()) + } } result = swapchain_->CreateSwapchainKHR(original_result, @@ -7085,14 +7832,14 @@ VkResult VulkanReplayConsumerBase::OverrideCreateSwapchainKHR( swapchain_info->surface_id = format::kNullHandleId; } - swapchain_info->image_flags = replay_create_info->flags; - swapchain_info->image_array_layers = replay_create_info->imageArrayLayers; - swapchain_info->image_usage = replay_create_info->imageUsage; - swapchain_info->image_sharing_mode = replay_create_info->imageSharingMode; + swapchain_info->image_flags = modified_create_info.flags; + swapchain_info->image_array_layers = modified_create_info.imageArrayLayers; + swapchain_info->image_usage = modified_create_info.imageUsage; + swapchain_info->image_sharing_mode = modified_create_info.imageSharingMode; swapchain_info->device_info = device_info; - swapchain_info->width = replay_create_info->imageExtent.width; - swapchain_info->height = replay_create_info->imageExtent.height; - swapchain_info->format = replay_create_info->imageFormat; + swapchain_info->width = modified_create_info.imageExtent.width; + swapchain_info->height = modified_create_info.imageExtent.height; + swapchain_info->format = modified_create_info.imageFormat; if ((result == VK_SUCCESS) && ((*replay_swapchain) != VK_NULL_HANDLE)) { @@ -7637,14 +8384,14 @@ VulkanReplayConsumerBase::OverrideQueuePresentKHR(PFN_vkQueuePresentKHR uint32_t replay_index = 0; result = swapchain_->AcquireNextImageKHR(original_result, - device_table->AcquireNextImageKHR, - swapchain_info->device_info, - swapchain_info, - std::numeric_limits::max(), - VK_NULL_HANDLE, - acquire_fence, - capture_image_index, - &replay_index); + device_table->AcquireNextImageKHR, + swapchain_info->device_info, + swapchain_info, + std::numeric_limits::max(), + VK_NULL_HANDLE, + acquire_fence, + capture_image_index, + &replay_index); GFXRECON_ASSERT((result == VK_SUCCESS) || (result == VK_SUBOPTIMAL_KHR)); result = device_table->WaitForFences( @@ -7663,92 +8410,75 @@ VulkanReplayConsumerBase::OverrideQueuePresentKHR(PFN_vkQueuePresentKHR } } - // If a swapchain was removed, pNext stucts that reference the swapchain need to be modified as well. + // If a swapchain was removed, pNext structs that reference that swapchain need to be modified as well. if (!removed_swapchain_indices_.empty()) { - const VkBaseInStructure* next = reinterpret_cast(modified_present_info.pNext); - while (next != nullptr) + if (const auto* device_group_present_info = + graphics::vulkan_struct_get_pnext(&modified_present_info)) { - switch (next->sType) + if (device_group_present_info->pDeviceMasks != nullptr) { - case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR: + for (uint32_t i = 0; i < present_info->swapchainCount; ++i) { - const VkDeviceGroupPresentInfoKHR* pNext = - reinterpret_cast(next); - - if (pNext->pDeviceMasks != nullptr) + if (removed_swapchain_indices_.find(i) == removed_swapchain_indices_.end()) { - for (uint32_t i = 0; i < present_info->swapchainCount; ++i) - { - if (removed_swapchain_indices_.find(i) == removed_swapchain_indices_.end()) - { - modified_device_masks_.push_back(pNext->pDeviceMasks[i]); - } - } - - assert(valid_swapchains_.size() == modified_device_masks_.size()); - - modified_device_group_present_info.pNext = pNext->pNext; - modified_device_group_present_info.swapchainCount = - static_cast(modified_device_masks_.size()); - modified_device_group_present_info.pDeviceMasks = modified_device_masks_.data(); - modified_device_group_present_info.mode = pNext->mode; - pNext = &modified_device_group_present_info; + modified_device_masks_.push_back(device_group_present_info->pDeviceMasks[i]); } - break; } - case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR: - { - const VkPresentRegionsKHR* pNext = reinterpret_cast(next); - if (pNext->pRegions != nullptr) - { - for (uint32_t i = 0; i < present_info->swapchainCount; ++i) - { - if (removed_swapchain_indices_.find(i) == removed_swapchain_indices_.end()) - { - modified_regions_.push_back(pNext->pRegions[i]); - } - } + GFXRECON_ASSERT(valid_swapchains_.size() == modified_device_masks_.size()); + modified_device_group_present_info.swapchainCount = + static_cast(modified_device_masks_.size()); + modified_device_group_present_info.pDeviceMasks = modified_device_masks_.data(); + modified_device_group_present_info.mode = device_group_present_info->mode; - assert(valid_swapchains_.size() == modified_regions_.size()); + // replace previous VkDeviceGroupPresentInfoKHR + graphics::vulkan_struct_add_pnext(&modified_present_info, &modified_device_group_present_info); + } + } - modified_present_region_info.pNext = pNext->pNext; - modified_present_region_info.swapchainCount = - static_cast(modified_regions_.size()); - modified_present_region_info.pRegions = modified_regions_.data(); - pNext = &modified_present_region_info; + if (const auto* present_regions = + graphics::vulkan_struct_get_pnext(&modified_present_info)) + { + if (present_regions->pRegions != nullptr) + { + for (uint32_t i = 0; i < present_info->swapchainCount; ++i) + { + if (removed_swapchain_indices_.find(i) == removed_swapchain_indices_.end()) + { + modified_regions_.push_back(present_regions->pRegions[i]); } - break; } - case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE: - { - const VkPresentTimesInfoGOOGLE* pNext = reinterpret_cast(next); - if (pNext->pTimes != nullptr) - { - for (uint32_t i = 0; i < present_info->swapchainCount; ++i) - { - if (removed_swapchain_indices_.find(i) == removed_swapchain_indices_.end()) - { - modified_times_.push_back(pNext->pTimes[i]); - } - } + GFXRECON_ASSERT(valid_swapchains_.size() == modified_regions_.size()); + modified_present_region_info.swapchainCount = static_cast(modified_regions_.size()); + modified_present_region_info.pRegions = modified_regions_.data(); - assert(valid_swapchains_.size() == modified_times_.size()); + // replacing previous VkPresentRegionsKHR + graphics::vulkan_struct_add_pnext(&modified_present_info, &modified_present_region_info); + } + } - modified_present_times_info.pNext = pNext->pNext; - modified_present_times_info.swapchainCount = static_cast(modified_times_.size()); - modified_present_times_info.pTimes = modified_times_.data(); - pNext = &modified_present_times_info; + if (const auto* present_times_info = + graphics::vulkan_struct_get_pnext(&modified_present_info)) + { + if (present_times_info->pTimes != nullptr) + { + for (uint32_t i = 0; i < present_info->swapchainCount; ++i) + { + if (removed_swapchain_indices_.find(i) == removed_swapchain_indices_.end()) + { + modified_times_.push_back(present_times_info->pTimes[i]); } - break; } - default: - break; - } - next = reinterpret_cast(next->pNext); + GFXRECON_ASSERT(valid_swapchains_.size() == modified_times_.size()); + modified_present_times_info.swapchainCount = static_cast(modified_times_.size()); + modified_present_times_info.pTimes = modified_times_.data(); + + // replace previous VkPresentTimesInfoGOOGLE + graphics::vulkan_struct_add_pnext(&modified_present_info, &modified_present_times_info); + } } } @@ -7807,14 +8537,14 @@ VulkanReplayConsumerBase::OverrideQueuePresentKHR(PFN_vkQueuePresentKHR uint32_t replay_index = 0; result = swapchain_->AcquireNextImageKHR(original_result, - device_table->AcquireNextImageKHR, - swapchain_info->device_info, - swapchain_info, - std::numeric_limits::max(), - VK_NULL_HANDLE, - acquire_fence, - capture_image_index, - &replay_index); + device_table->AcquireNextImageKHR, + swapchain_info->device_info, + swapchain_info, + std::numeric_limits::max(), + VK_NULL_HANDLE, + acquire_fence, + capture_image_index, + &replay_index); GFXRECON_ASSERT((result == VK_SUCCESS) || (result == VK_SUBOPTIMAL_KHR)); result = device_table->WaitForFences( @@ -8403,15 +9133,15 @@ void VulkanReplayConsumerBase::OverrideDestroySurfaceKHR( VkResult VulkanReplayConsumerBase::OverrideCreateAccelerationStructureKHR( PFN_vkCreateAccelerationStructureKHR func, VkResult original_result, - const VulkanDeviceInfo* device_info, + VulkanDeviceInfo* device_info, const StructPointerDecoder* pCreateInfo, const StructPointerDecoder* pAllocator, HandlePointerDecoder* pAccelerationStructureKHR) { GFXRECON_UNREFERENCED_PARAMETER(original_result); - assert((device_info != nullptr) && (pCreateInfo != nullptr) && (pAccelerationStructureKHR != nullptr) && - !pAccelerationStructureKHR->IsNull() && (pAccelerationStructureKHR->GetHandlePointer() != nullptr)); + GFXRECON_ASSERT(device_info != nullptr && pCreateInfo != nullptr && pAccelerationStructureKHR != nullptr && + !pAccelerationStructureKHR->IsNull() && pAccelerationStructureKHR->GetHandlePointer() != nullptr); VkResult result = VK_SUCCESS; auto replay_accel_struct = pAccelerationStructureKHR->GetHandlePointer(); @@ -8419,6 +9149,11 @@ VkResult VulkanReplayConsumerBase::OverrideCreateAccelerationStructureKHR( auto replay_create_info = pCreateInfo->GetPointer(); VkDevice device = device_info->handle; + // injected into pNext when using VK_EXT_descriptor_buffer + VkOpaqueCaptureDescriptorDataCreateInfoEXT opaque_descriptor_info = { + VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT + }; + // keep track of associated buffer auto* acceleration_structure_info = reinterpret_cast(pAccelerationStructureKHR->GetConsumerData(0)); @@ -8426,6 +9161,20 @@ VkResult VulkanReplayConsumerBase::OverrideCreateAccelerationStructureKHR( acceleration_structure_info->capture_id = capture_id; acceleration_structure_info->type = replay_create_info->type; acceleration_structure_info->buffer = replay_create_info->buffer; + acceleration_structure_info->offset = replay_create_info->offset; + acceleration_structure_info->size = replay_create_info->size; + + auto& address_tracker = GetDeviceAddressTracker(device_info); + auto* buffer_info = address_tracker.GetBufferByHandle(acceleration_structure_info->buffer); + + // associated buffer has already queried a device-address, meaning we also got the AS device-address + if (buffer_info != nullptr && buffer_info->replay_address != 0) + { + acceleration_structure_info->capture_address = buffer_info->capture_address + replay_create_info->offset; + acceleration_structure_info->replay_address = buffer_info->replay_address + replay_create_info->offset; + } + + VkAccelerationStructureCreateInfoKHR modified_create_info = *replay_create_info; // even when available, the feature also requires allocator-support bool use_capture_replay_feature = device_info->property_feature_info.feature_accelerationStructureCaptureReplay && @@ -8434,7 +9183,6 @@ VkResult VulkanReplayConsumerBase::OverrideCreateAccelerationStructureKHR( if (use_capture_replay_feature) { // Set opaque device address - VkAccelerationStructureCreateInfoKHR modified_create_info = (*replay_create_info); modified_create_info.createFlags |= VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR; auto entry = device_info->opaque_addresses.find(capture_id); if (entry != device_info->opaque_addresses.end()) @@ -8451,14 +9199,33 @@ VkResult VulkanReplayConsumerBase::OverrideCreateAccelerationStructureKHR( "Opaque device address is not available for VkAccelerationStructureKHR object (ID = %" PRIu64 ")", capture_id); } - - result = func(device, &modified_create_info, GetAllocationCallbacks(pAllocator), replay_accel_struct); } - else + + if (device_info->property_feature_info.feature_descriptorBufferCaptureReplay && !UseAddressReplacement(device_info)) { - result = func(device, replay_create_info, GetAllocationCallbacks(pAllocator), replay_accel_struct); + if (auto it = device_info->opaque_descriptor_data.find(capture_id); + it != device_info->opaque_descriptor_data.end()) + { + modified_create_info.createFlags |= + VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT; + + // add to pNext-chain + opaque_descriptor_info.opaqueCaptureDescriptorData = it->second.data(); + graphics::vulkan_struct_add_pnext(&modified_create_info, &opaque_descriptor_info); + } + else + { + GFXRECON_LOG_DEBUG( + "Opaque descriptor-data is not available for VkAccelerationStructureKHR object (ID = %" PRIu64 ")", + capture_id); + } } + result = func(device, &modified_create_info, GetAllocationCallbacks(pAllocator), replay_accel_struct); + + // clean potential opaque creation-data + device_info->opaque_descriptor_data.erase(capture_id); + // track newly created acceleration-structure acceleration_structure_info->handle = replay_accel_struct ? *replay_accel_struct : VK_NULL_HANDLE; GetDeviceAddressTracker(device_info).TrackAccelerationStructure(acceleration_structure_info); @@ -8488,6 +9255,11 @@ void VulkanReplayConsumerBase::OverrideDestroyAccelerationStructureKHR( // free potential shadow-resources GetDeviceAddressReplacer(device_info).DestroyShadowResources(acceleration_structure); + + if (options_.dumping_resources) + { + resource_dumper_->HandleDestroyAccelerationStructureKHR(acceleration_structure_info); + } } func(device_info->handle, acceleration_structure, GetAllocationCallbacks(pAllocator)); } @@ -8504,6 +9276,14 @@ void VulkanReplayConsumerBase::OverrideCmdBuildAccelerationStructuresKHR( VkAccelerationStructureBuildGeometryInfoKHR* build_geometry_infos = pInfos->GetPointer(); VkAccelerationStructureBuildRangeInfoKHR** build_range_infos = ppBuildRangeInfos->GetPointer(); + // Dump resources handler for CmdBuildAccelerationStructuresKHR is expecting the device addresses unchanged so it + // needs to be called before the address replacer + if (options_.dumping_resources) + { + resource_dumper_->OverrideCmdBuildAccelerationStructuresKHR( + command_buffer_info, *GetDeviceTable(device_info->handle), infoCount, pInfos, ppBuildRangeInfos); + } + if (UseAddressReplacement(device_info)) { auto& address_tracker = GetDeviceAddressTracker(device_info); @@ -8525,6 +9305,14 @@ void VulkanReplayConsumerBase::OverrideCmdCopyAccelerationStructureKHR( VulkanDeviceInfo* device_info = object_info_table_->GetVkDeviceInfo(command_buffer_info->parent_id); GFXRECON_ASSERT(device_info != nullptr) + if (options_.dumping_resources) + { + const auto* info_meta = pInfo->GetMetaStructPointer(); + const auto* src = object_info_table_->GetVkAccelerationStructureKHRInfo(info_meta->src); + const auto* dst = object_info_table_->GetVkAccelerationStructureKHRInfo(info_meta->dst); + resource_dumper_->HandleCmdCopyAccelerationStructureKHR(*GetDeviceTable(device_info->handle), src, dst); + } + VkCommandBuffer command_buffer = command_buffer_info->handle; VkCopyAccelerationStructureInfoKHR* info = pInfo->GetPointer(); @@ -8556,7 +9344,7 @@ void VulkanReplayConsumerBase::OverrideCmdWriteAccelerationStructuresPropertiesK { auto& address_replacer = GetDeviceAddressReplacer(device_info); address_replacer.ProcessCmdWriteAccelerationStructuresPropertiesKHR( - count, acceleration_structs, queryType, query_pool, firstQuery); + count, acceleration_structs, queryType, query_pool, firstQuery, GetDeviceAddressTracker(device_info)); } func(command_buffer, count, acceleration_structs, queryType, query_pool, firstQuery); } @@ -8626,7 +9414,7 @@ VkResult VulkanReplayConsumerBase::OverrideCreateRayTracingPipelinesKHR( uint32_t group_info_count = in_pCreateInfos[create_info_i].groupCount; bool has_data = (device_info->shader_group_handles.find(pipeline_capture_id) != - device_info->shader_group_handles.end()); + device_info->shader_group_handles.end()); if (has_data) { @@ -8807,7 +9595,7 @@ VulkanReplayConsumerBase::OverrideDeferredOperationJoinKHR(PFN_vkDeferredOperati uint32_t max_threads = std::thread::hardware_concurrency(); uint32_t thread_count = std::min(vkGetDeferredOperationMaxConcurrencyKHR(device, deferred_operation), max_threads); - bool deferred_operation_completed = false; + std::atomic_bool deferred_operation_completed = false; std::vector> deferred_operation_joins; for (uint32_t i = 0; i < thread_count; i++) @@ -8816,13 +9604,13 @@ VulkanReplayConsumerBase::OverrideDeferredOperationJoinKHR(PFN_vkDeferredOperati deferred_operation_joins.emplace_back( std::async(std::launch::async, [func, device, deferred_operation, &deferred_operation_completed]() { VkResult result = VK_ERROR_UNKNOWN; - while (result != VK_SUCCESS && !deferred_operation_completed) + while (result != VK_SUCCESS && !(deferred_operation_completed.load(std::memory_order_acquire))) { result = func(device, deferred_operation); assert(result == VK_SUCCESS || result == VK_THREAD_DONE_KHR || result == VK_THREAD_IDLE_KHR); if (result == VK_SUCCESS) { - deferred_operation_completed = true; + deferred_operation_completed.store(true, std::memory_order_release); } } })); @@ -8901,11 +9689,38 @@ void VulkanReplayConsumerBase::OverrideGetAccelerationStructureDeviceAddressKHR( VulkanAccelerationStructureKHRInfo* acceleration_structure_info = GetObjectInfoTable().GetVkAccelerationStructureKHRInfo(pInfo->GetMetaStructPointer()->accelerationStructure); GFXRECON_ASSERT(acceleration_structure_info != nullptr); + + // if already set during AS-creation, expect addresses to match + if (acceleration_structure_info->capture_address) + { + GFXRECON_ASSERT(acceleration_structure_info->capture_address == original_result); + GFXRECON_ASSERT(acceleration_structure_info->replay_address == replay_address); + } acceleration_structure_info->capture_address = original_result; acceleration_structure_info->replay_address = replay_address; + auto& address_tracker = GetDeviceAddressTracker(device_info); + auto* buffer_info = address_tracker.GetBufferByHandle(acceleration_structure_info->buffer); + GFXRECON_ASSERT(buffer_info != nullptr); + + if (buffer_info != nullptr) + { + // buffer has not queried its address (yet), so we start tracking it here + if (buffer_info->capture_address == 0) + { + buffer_info->capture_address = + acceleration_structure_info->capture_address - acceleration_structure_info->offset; + buffer_info->replay_address = + acceleration_structure_info->replay_address - acceleration_structure_info->offset; + address_tracker.TrackBuffer(buffer_info); + } + } + + // we expect to know the corresponding buffer-device-address + GFXRECON_ASSERT(replay_address == buffer_info->replay_address + acceleration_structure_info->offset); + // track device-address - GetDeviceAddressTracker(device_info).TrackAccelerationStructure(acceleration_structure_info); + address_tracker.TrackAccelerationStructure(acceleration_structure_info); if (device_info->allocator->SupportsOpaqueDeviceAddresses()) { @@ -9060,6 +9875,7 @@ void VulkanReplayConsumerBase::ClearCommandBufferInfo(VulkanCommandBufferInfo* c command_buffer_info->push_constant_stage_flags = 0; command_buffer_info->push_constant_pipeline_layout = VK_NULL_HANDLE; command_buffer_info->addresses_to_replace.clear(); + command_buffer_info->addresses_to_resolve.clear(); command_buffer_info->inside_renderpass = false; // free potential shadow-resources associated with this command-buffer @@ -9086,11 +9902,11 @@ VkResult VulkanReplayConsumerBase::OverrideBeginCommandBuffer( } VkResult res = VK_SUCCESS; - if (options_.dumping_resources && resource_dumper_->DumpingBeginCommandBufferIndex(index)) + if (options_.dumping_resources) { const VulkanDeviceInfo* device = GetObjectInfoTable().GetVkDeviceInfo(command_buffer_info->parent_id); - res = resource_dumper_->CloneCommandBuffer( + res = resource_dumper_->BeginCommandBuffer( index, command_buffer_info, GetDeviceTable(device->handle), GetInstanceTable(device->parent), begin_info); } @@ -9401,10 +10217,67 @@ void VulkanReplayConsumerBase::OverrideCmdTraceRaysKHR( } } +void VulkanReplayConsumerBase::OverrideCmdTraceRaysIndirectKHR( + PFN_vkCmdTraceRaysIndirectKHR func, + VulkanCommandBufferInfo* command_buffer_info, + StructPointerDecoder* pRaygenShaderBindingTable, + StructPointerDecoder* pMissShaderBindingTable, + StructPointerDecoder* pHitShaderBindingTable, + StructPointerDecoder* pCallableShaderBindingTable, + VkDeviceAddress indirectDeviceAddress) +{ + if (command_buffer_info != nullptr) + { + const VulkanDeviceInfo* device_info = GetObjectInfoTable().GetVkDeviceInfo(command_buffer_info->parent_id); + VkCommandBuffer commandBuffer = command_buffer_info->handle; + VkStridedDeviceAddressRegionKHR* in_pRaygenShaderBindingTable = pRaygenShaderBindingTable->GetPointer(); + VkStridedDeviceAddressRegionKHR* in_pMissShaderBindingTable = pMissShaderBindingTable->GetPointer(); + VkStridedDeviceAddressRegionKHR* in_pHitShaderBindingTable = pHitShaderBindingTable->GetPointer(); + VkStridedDeviceAddressRegionKHR* in_pCallableShaderBindingTable = pCallableShaderBindingTable->GetPointer(); + + if (UseAddressReplacement(device_info)) + { + // identify buffer(s) by their device-address + const auto& address_tracker = GetDeviceAddressTracker(device_info); + auto& address_replacer = GetDeviceAddressReplacer(device_info); + + GFXRECON_ASSERT(command_buffer_info->bound_pipelines.count(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR)); + auto bound_pipeline = GetObjectInfoTable().GetVkPipelineInfo( + command_buffer_info->bound_pipelines[VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR]); + GFXRECON_ASSERT(bound_pipeline != nullptr) + + address_replacer.ProcessCmdTraceRays(command_buffer_info, + in_pRaygenShaderBindingTable, + in_pMissShaderBindingTable, + in_pHitShaderBindingTable, + in_pCallableShaderBindingTable, + address_tracker, + bound_pipeline->shader_group_handle_map); + + // remap indirect buffer-address + auto* indirect_buffer_info = address_tracker.GetBufferByCaptureDeviceAddress(indirectDeviceAddress); + GFXRECON_ASSERT(indirect_buffer_info != nullptr); + + if (indirect_buffer_info != nullptr) + { + uint64_t offset = indirectDeviceAddress - indirect_buffer_info->capture_address; + indirectDeviceAddress = indirect_buffer_info->replay_address + offset; + } + } + + func(commandBuffer, + in_pRaygenShaderBindingTable, + in_pMissShaderBindingTable, + in_pHitShaderBindingTable, + in_pCallableShaderBindingTable, + indirectDeviceAddress); + } +} + VkResult VulkanReplayConsumerBase::OverrideCreateImageView( PFN_vkCreateImageView func, VkResult original_result, - const VulkanDeviceInfo* device_info, + VulkanDeviceInfo* device_info, StructPointerDecoder* create_info_decoder, StructPointerDecoder* allocator_decoder, HandlePointerDecoder* view_decoder) @@ -9414,8 +10287,16 @@ VkResult VulkanReplayConsumerBase::OverrideCreateImageView( const VkAllocationCallbacks* allocator = GetAllocationCallbacks(allocator_decoder); VkImageView* out_view = view_decoder->GetHandlePointer(); + auto capture_id = *view_decoder->GetPointer(); VkImageViewCreateInfo modified_create_info = *create_info; + VkOpaqueCaptureDescriptorDataCreateInfoEXT opaque_descriptor_info = { + VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT + }; + + auto* img_info = GetObjectInfoTable().GetVkImageInfo(create_info_decoder->GetMetaStructPointer()->image); + GFXRECON_ASSERT(img_info != nullptr); + // If image has external format, this format is undefined. if (modified_create_info.format == VK_FORMAT_UNDEFINED) { @@ -9426,17 +10307,92 @@ VkResult VulkanReplayConsumerBase::OverrideCreateImageView( modified_create_info.format = VK_FORMAT_R8G8B8A8_UNORM; } } + else if (img_info->is_swapchain_image && img_info->format != modified_create_info.format) + { + // for swapchain-images set image-view to a fallback format, avoid issues with distorted HDR/SRGB colors + modified_create_info.format = + vkuFormatIsSRGB(modified_create_info.format) ? VK_FORMAT_B8G8R8A8_SRGB : VK_FORMAT_B8G8R8A8_UNORM; + } + + if (device_info->property_feature_info.feature_descriptorBufferCaptureReplay && !UseAddressReplacement(device_info)) + { + if (auto it = device_info->opaque_descriptor_data.find(capture_id); + it != device_info->opaque_descriptor_data.end()) + { + modified_create_info.flags |= VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT; + + // add to pNext-chain + opaque_descriptor_info.opaqueCaptureDescriptorData = it->second.data(); + graphics::vulkan_struct_add_pnext(&modified_create_info, &opaque_descriptor_info); + } + else + { + GFXRECON_LOG_DEBUG("Opaque descriptor-data is not available for VkImageView object (ID = %" PRIu64 ")", + capture_id); + } + } VkResult result = func(device, &modified_create_info, allocator, out_view); - if ((result == VK_SUCCESS) && ((*out_view) != VK_NULL_HANDLE)) + if (result == VK_SUCCESS && *out_view != VK_NULL_HANDLE) { - auto image_view_info = reinterpret_cast(view_decoder->GetConsumerData(0)); + auto* image_view_info = static_cast(view_decoder->GetConsumerData(0)); GFXRECON_ASSERT(image_view_info != nullptr); image_view_info->image_id = create_info_decoder->GetMetaStructPointer()->image; } + // clean potential opaque creation-data + device_info->opaque_descriptor_data.erase(capture_id); + + return result; +} + +VkResult +VulkanReplayConsumerBase::OverrideCreateSampler(PFN_vkCreateSampler func, + VkResult original_result, + VulkanDeviceInfo* device_info, + StructPointerDecoder* create_info_decoder, + StructPointerDecoder* allocator_decoder, + HandlePointerDecoder* sampler_decoder) +{ + GFXRECON_UNREFERENCED_PARAMETER(original_result); + + VkDevice device = device_info->handle; + const VkSamplerCreateInfo* create_info = create_info_decoder->GetPointer(); + const VkAllocationCallbacks* allocator = GetAllocationCallbacks(allocator_decoder); + VkSampler* out_sampler = sampler_decoder->GetHandlePointer(); + + auto capture_id = *sampler_decoder->GetPointer(); + VkSamplerCreateInfo modified_create_info = *create_info; + + VkOpaqueCaptureDescriptorDataCreateInfoEXT opaque_descriptor_info = { + VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT + }; + + if (device_info->property_feature_info.feature_descriptorBufferCaptureReplay && !UseAddressReplacement(device_info)) + { + if (auto it = device_info->opaque_descriptor_data.find(capture_id); + it != device_info->opaque_descriptor_data.end()) + { + modified_create_info.flags |= VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT; + + // add to pNext-chain + opaque_descriptor_info.opaqueCaptureDescriptorData = it->second.data(); + graphics::vulkan_struct_add_pnext(&modified_create_info, &opaque_descriptor_info); + } + else + { + GFXRECON_LOG_DEBUG("Opaque descriptor-data is not available for VkSampler object (ID = %" PRIu64 ")", + capture_id); + } + } + + VkResult result = func(device, &modified_create_info, allocator, out_sampler); + + // clean potential opaque creation-data + device_info->opaque_descriptor_data.erase(capture_id); + return result; } @@ -10139,7 +11095,13 @@ void VulkanReplayConsumerBase::UpdateDescriptorSetInfoWithTemplate( case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: { - desc_set_info->descriptors[binding_index].desc_type = type; + const format::HandleId* as_ids = decoder->GetAccelerationStructureKHRHandleIdsPointer(); + for (uint32_t i = 0; i < count; ++i) + { + const uint32_t array_index = dst_array_element + i; + const auto* as_info = object_info_table_->GetVkAccelerationStructureKHRInfo(as_ids[i]); + desc_set_info->descriptors[binding_index].acceleration_structs_khr_info[array_index] = as_info; + } accel_struct_count += count; } break; @@ -10388,7 +11350,7 @@ void VulkanReplayConsumerBase::Process_vkCreateRayTracingPipelinesKHR( } } -void VulkanReplayConsumerBase::ProcessCopyVulkanAccelerationStructuresMetaCommand( +void VulkanReplayConsumerBase::ProcessVulkanCopyAccelerationStructuresCommand( format::HandleId device, StructPointerDecoder* copy_infos) { if (loading_trim_state_) @@ -10398,14 +11360,28 @@ void VulkanReplayConsumerBase::ProcessCopyVulkanAccelerationStructuresMetaComman MapStructArrayHandles(copy_infos->GetMetaStructPointer(), copy_infos->GetLength(), GetObjectInfoTable()); - const auto& address_tracker = GetDeviceAddressTracker(device_info); - auto& address_replacer = GetDeviceAddressReplacer(device_info); - address_replacer.ProcessCopyVulkanAccelerationStructuresMetaCommand( - copy_infos->GetLength(), copy_infos->GetPointer(), address_tracker); + if (options_.dumping_resources) + { + const auto* info_meta = copy_infos->GetMetaStructPointer(); + if (info_meta != nullptr) + { + const auto* src = object_info_table_->GetVkAccelerationStructureKHRInfo(info_meta->src); + const auto* dst = object_info_table_->GetVkAccelerationStructureKHRInfo(info_meta->dst); + resource_dumper_->HandleCmdCopyAccelerationStructureKHR(*GetDeviceTable(device_info->handle), src, dst); + } + } + + if (UseAddressReplacement(device_info)) + { + const auto& address_tracker = GetDeviceAddressTracker(device_info); + auto& address_replacer = GetDeviceAddressReplacer(device_info); + address_replacer.ProcessCopyVulkanAccelerationStructuresMetaCommand( + copy_infos->GetLength(), copy_infos->GetPointer(), address_tracker); + } } } -void VulkanReplayConsumerBase::ProcessBuildVulkanAccelerationStructuresMetaCommand( +void VulkanReplayConsumerBase::ProcessVulkanBuildAccelerationStructuresCommand( format::HandleId device, uint32_t info_count, StructPointerDecoder* pInfos, @@ -10416,21 +11392,42 @@ void VulkanReplayConsumerBase::ProcessBuildVulkanAccelerationStructuresMetaComma VulkanDeviceInfo* device_info = GetObjectInfoTable().GetVkDeviceInfo(device); GFXRECON_ASSERT(device_info != nullptr); - if (UseAddressReplacement(device_info)) - { - MapStructArrayHandles(pInfos->GetMetaStructPointer(), pInfos->GetLength(), GetObjectInfoTable()); + MapStructArrayHandles(pInfos->GetMetaStructPointer(), pInfos->GetLength(), GetObjectInfoTable()); + + VkAccelerationStructureBuildGeometryInfoKHR* build_geometry_infos = pInfos->GetPointer(); + VkAccelerationStructureBuildRangeInfoKHR** range_infos = ppRangeInfos->GetPointer(); - VkAccelerationStructureBuildGeometryInfoKHR* build_geometry_infos = pInfos->GetPointer(); - VkAccelerationStructureBuildRangeInfoKHR** range_infos = ppRangeInfos->GetPointer(); + // Dump resources handler for CmdBuildAccelerationStructuresKHR is expecting the device addresses unchanged so + // it needs to be called before the address replacer + if (options_.dumping_resources) + { + resource_dumper_->OverrideCmdBuildAccelerationStructuresKHR( + nullptr, *GetDeviceTable(device_info->handle), info_count, pInfos, ppRangeInfos); + } + if (UseAddressReplacement(device_info)) + { GetDeviceAddressReplacer(device_info) .ProcessBuildVulkanAccelerationStructuresMetaCommand( info_count, pInfos->GetPointer(), ppRangeInfos->GetPointer(), GetDeviceAddressTracker(device_info)); } + + if (options_.dumping_resources) + { + ApiCallInfo call_info{ block_index_, 0 }; + resource_dumper_->Process_vkCmdBuildAccelerationStructuresKHR( + call_info, + GetDeviceTable(device_info->handle)->CmdBuildAccelerationStructuresKHR, + VK_NULL_HANDLE, + info_count, + pInfos, + ppRangeInfos, + false); + } } } -void VulkanReplayConsumerBase::ProcessVulkanAccelerationStructuresWritePropertiesMetaCommand( +void VulkanReplayConsumerBase::ProcessVulkanWriteAccelerationStructuresPropertiesCommand( format::HandleId device_id, VkQueryType query_type, format::HandleId acceleration_structure_id) { if (loading_trim_state_) @@ -10444,7 +11441,8 @@ void VulkanReplayConsumerBase::ProcessVulkanAccelerationStructuresWritePropertie acceleration_structure_id, &VulkanObjectInfoTable::GetVkAccelerationStructureKHRInfo); GetDeviceAddressReplacer(device_info) - .ProcessVulkanAccelerationStructuresWritePropertiesMetaCommand(query_type, acceleration_structure); + .ProcessVulkanAccelerationStructuresWritePropertiesMetaCommand( + query_type, acceleration_structure, GetDeviceAddressTracker(device_info)); } } } @@ -10462,11 +11460,15 @@ void VulkanReplayConsumerBase::OverrideUpdateDescriptorSets( VkWriteDescriptorSet* in_pDescriptorWrites = p_descriptor_writes->GetPointer(); VkCopyDescriptorSet* in_pDescriptorCopies = p_pescriptor_copies->GetPointer(); + if (UseAddressReplacement(device_info)) { // check/correct specific resource handles (i.e. VkAccelerationStructure) auto& address_replacer = GetDeviceAddressReplacer(device_info); - address_replacer.ProcessUpdateDescriptorSets( - descriptor_write_count, in_pDescriptorWrites, descriptor_copy_count, in_pDescriptorCopies); + address_replacer.ProcessUpdateDescriptorSets(descriptor_write_count, + in_pDescriptorWrites, + descriptor_copy_count, + in_pDescriptorCopies, + GetDeviceAddressTracker(device_info)); } func( @@ -10476,22 +11478,41 @@ void VulkanReplayConsumerBase::OverrideUpdateDescriptorSets( if (UseExtraDescriptorInfo(device_info)) { const auto* writes_meta = p_descriptor_writes->GetMetaStructPointer(); + for (uint32_t s = 0; s < descriptor_write_count; ++s) { - VulkanDescriptorSetInfo* dst_desc_set_info = - GetObjectInfoTable().GetVkDescriptorSetInfo(writes_meta[s].dstSet); - assert(dst_desc_set_info != nullptr); + const auto& write_meta = writes_meta[s]; + VulkanDescriptorSetInfo* dst_desc_set_info = GetObjectInfoTable().GetVkDescriptorSetInfo(write_meta.dstSet); + GFXRECON_ASSERT(dst_desc_set_info != nullptr); + + const VkWriteDescriptorSet* write = write_meta.decoded_value; + GFXRECON_ASSERT(write != nullptr); - for (uint32_t i = 0; i < in_pDescriptorWrites[s].descriptorCount; ++i) + const uint32_t binding = write->dstBinding; + GFXRECON_ASSERT(dst_desc_set_info->descriptors.find(binding) != dst_desc_set_info->descriptors.end()); + auto& descriptor_set_binding_info = dst_desc_set_info->descriptors[binding]; + GFXRECON_ASSERT(descriptor_set_binding_info.desc_type == write->descriptorType); + + if (auto* inline_uniform_block_write = + graphics::vulkan_struct_get_pnext(write); + inline_uniform_block_write != nullptr && + write->descriptorType == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK) { - const VkWriteDescriptorSet* write = writes_meta[s].decoded_value; - assert(write != nullptr); + const uint32_t offset = write->dstArrayElement; + const uint32_t size = write->descriptorCount; + GFXRECON_ASSERT(descriptor_set_binding_info.inline_uniform_block.size() >= offset + size); + util::platform::MemoryCopy(descriptor_set_binding_info.inline_uniform_block.data() + offset, + size, + inline_uniform_block_write->pData, + size); - const uint32_t binding = write->dstBinding; - const uint32_t arr_idx = write->dstArrayElement + i; + // skip iterating individual bytes in below loop + continue; + } - assert(dst_desc_set_info->descriptors.find(binding) != dst_desc_set_info->descriptors.end()); - assert(dst_desc_set_info->descriptors[binding].desc_type == write->descriptorType); + for (uint32_t i = 0; i < write->descriptorCount; ++i) + { + const uint32_t arr_idx = write->dstArrayElement + i; switch (write->descriptorType) { @@ -10500,12 +11521,10 @@ void VulkanReplayConsumerBase::OverrideUpdateDescriptorSets( case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: { - dst_desc_set_info->descriptors[binding].image_info[arr_idx].image_layout = - in_pDescriptorWrites[s].pImageInfo[i].imageLayout; - - dst_desc_set_info->descriptors[binding].image_info[arr_idx].image_view_info = - object_info_table_->GetVkImageViewInfo( - writes_meta[s].pImageInfo->GetMetaStructPointer()[i].imageView); + auto& desc_image_info = descriptor_set_binding_info.image_info[arr_idx]; + desc_image_info.image_layout = write->pImageInfo[i].imageLayout; + desc_image_info.image_view_info = object_info_table_->GetVkImageViewInfo( + write_meta.pImageInfo->GetMetaStructPointer()[i].imageView); } break; @@ -10514,48 +11533,38 @@ void VulkanReplayConsumerBase::OverrideUpdateDescriptorSets( case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: { - dst_desc_set_info->descriptors[binding].buffer_info[arr_idx].buffer_info = - object_info_table_->GetVkBufferInfo( - writes_meta[s].pBufferInfo->GetMetaStructPointer()[i].buffer); - - dst_desc_set_info->descriptors[binding].buffer_info[arr_idx].offset = - in_pDescriptorWrites[s].pBufferInfo[i].offset; - - dst_desc_set_info->descriptors[binding].buffer_info[arr_idx].range = - in_pDescriptorWrites[s].pBufferInfo[i].range; + auto& desc_buffer_info = descriptor_set_binding_info.buffer_info[arr_idx]; + desc_buffer_info.buffer_info = object_info_table_->GetVkBufferInfo( + write_meta.pBufferInfo->GetMetaStructPointer()[i].buffer); + desc_buffer_info.offset = write->pBufferInfo[i].offset; + desc_buffer_info.range = write->pBufferInfo[i].range; } break; case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: { - dst_desc_set_info->descriptors[binding].texel_buffer_view_info[arr_idx] = + descriptor_set_binding_info.texel_buffer_view_info[arr_idx] = object_info_table_->GetVkBufferViewInfo(writes_meta[s].pTexelBufferView.GetPointer()[i]); } break; - case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK: + case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: { - const VkBaseOutStructure* pnext = reinterpret_cast(write->pNext); - while (pnext != nullptr) + const auto* as_descriptors_meta = + GetPNextMetaStruct(write_meta.pNext); + if (as_descriptors_meta != nullptr) { - if (pnext->sType == VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK) + const auto* as_ids = as_descriptors_meta->pAccelerationStructures.GetPointer(); + for (uint32_t as = 0; as < as_descriptors_meta->decoded_value->accelerationStructureCount; + ++as) { - const VkWriteDescriptorSetInlineUniformBlock* inline_uni_block_write = - reinterpret_cast(pnext); - - const uint32_t offset = write->dstArrayElement; - const uint32_t size = write->descriptorCount; - assert(dst_desc_set_info->descriptors[binding].inline_uniform_block.size() >= - offset + size); - util::platform::MemoryCopy( - dst_desc_set_info->descriptors[binding].inline_uniform_block.data() + offset, - size, - inline_uni_block_write->pData, - size); - break; + const auto* as_info = object_info_table_->GetVkAccelerationStructureKHRInfo(as_ids[as]); + if (as_info != nullptr) + { + descriptor_set_binding_info.acceleration_structs_khr_info[arr_idx] = as_info; + } } - pnext = pnext->pNext; } } break; @@ -10611,6 +11620,7 @@ void VulkanReplayConsumerBase::OverrideUpdateDescriptorSets( create_info->codeSize = file_size; GFXRECON_LOG_INFO("Replacement shader found: %s", file_path.c_str()); replaced_file_code.emplace_back(std::move(file_code)); + util::platform::FileClose(fp); } } pNext = const_cast(base->pNext); @@ -10755,8 +11765,6 @@ VkResult VulkanReplayConsumerBase::OverrideCreateComputePipelines( for (size_t i = 0; i < create_info_count; i++) { auto* create_info = &create_infos[i]; - const void* orig_code = create_info->pCode; - size_t orig_size = create_info->codeSize; uint64_t handle_id = shaders[i]; std::string file_name = "sh" + std::to_string(handle_id); std::string file_path = util::filepath::Join(options_.replace_shader_dir, file_name); @@ -10774,6 +11782,7 @@ VkResult VulkanReplayConsumerBase::OverrideCreateComputePipelines( create_info->codeSize = file_size; GFXRECON_LOG_INFO("Replacement shader found: %s", file_path.c_str()); replaced_file_code.emplace_back(std::move(file_code)); + util::platform::FileClose(fp); } } @@ -10948,6 +11957,94 @@ void VulkanReplayConsumerBase::OverrideDestroyShaderModule( func(in_device, in_shader_module, in_pAllocator); } +VkResult VulkanReplayConsumerBase::OverrideGetPastPresentationTimingGOOGLE( + PFN_vkGetPastPresentationTimingGOOGLE func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + const VulkanSwapchainKHRInfo* swapchain_info, + PointerDecoder* pPresentationTimingCount, + StructPointerDecoder* pPresentationTimings) +{ + if (!IsExtensionBeingFaked(VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME)) + { + return func(device_info->handle, + swapchain_info->handle, + pPresentationTimingCount->GetPointer(), + pPresentationTimings->GetPointer()); + } + return VK_SUCCESS; +} + +VkResult VulkanReplayConsumerBase::OverrideGetRefreshCycleDurationGOOGLE( + PFN_vkGetRefreshCycleDurationGOOGLE func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + const VulkanSwapchainKHRInfo* swapchain_info, + StructPointerDecoder* pDisplayTimingProperties) +{ + if (!IsExtensionBeingFaked(VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME)) + { + return func(device_info->handle, swapchain_info->handle, pDisplayTimingProperties->GetPointer()); + } + return VK_SUCCESS; +} + +void VulkanReplayConsumerBase::OverrideGetDescriptorEXT( + PFN_vkGetDescriptorEXT func, + VulkanDeviceInfo* device_info, + StructPointerDecoder* pDescriptorInfo, + size_t dataSize, + PointerDecoder* pDescriptor) +{ + GFXRECON_ASSERT(device_info != nullptr && !pDescriptorInfo->IsNull() && pDescriptorInfo->GetPointer() != nullptr && + pDescriptor->GetOutputPointer() != nullptr); + + VkDevice device = device_info->handle; + VkDescriptorGetInfoEXT* in_pDescriptorInfo = pDescriptorInfo->GetPointer(); + void* out_pDescriptor = pDescriptor->GetOutputPointer(); + + func(device, in_pDescriptorInfo, dataSize, out_pDescriptor); + + if (UseAddressReplacement(device_info)) + { + GFXRECON_LOG_WARNING("%s: portable replays using '-m rebind' are currently not supported for " + "VK_EXT_descriptor_buffer -> Replay is likely going to fail", + __func__); + + // TODO: portability -> correct BDAs/descriptors/mem-layout for descriptor-buffers + } + else + { + // relying on 'descriptorBufferCaptureReplay' we assume this data to match + GFXRECON_ASSERT(pDescriptor->GetLength() == pDescriptor->GetOutputLength()); + GFXRECON_ASSERT(memcmp(pDescriptor->GetPointer(), pDescriptor->GetOutputPointer(), pDescriptor->GetLength()) == + 0); + } +} + +void VulkanReplayConsumerBase::OverrideCmdBindDescriptorBuffersEXT( + PFN_vkCmdBindDescriptorBuffersEXT func, + VulkanCommandBufferInfo* commandBuffer_info, + uint32_t bufferCount, + StructPointerDecoder* pBindingInfos) +{ + GFXRECON_ASSERT(commandBuffer_info != nullptr && pBindingInfos->GetPointer() != nullptr); + + VulkanDeviceInfo* device_info = object_info_table_->GetVkDeviceInfo(commandBuffer_info->parent_id); + VkCommandBuffer command_buffer = commandBuffer_info->handle; + VkDescriptorBufferBindingInfoEXT* in_pBindingInfos = pBindingInfos->GetPointer(); + + if (UseAddressReplacement(device_info)) + { + // auto& address_tracker = GetDeviceAddressTracker(device_info); + // auto& address_replacer = GetDeviceAddressReplacer(device_info); + // address_replacer.ProcessCmdBindDescriptorBuffersEXT( + // commandBuffer_info, bufferCount, in_pBindingInfos, address_tracker); + } + + func(command_buffer, bufferCount, in_pBindingInfos); +} + std::function()> VulkanReplayConsumerBase::AsyncCreateGraphicsPipelines( PFN_vkCreateGraphicsPipelines func, VkResult returnValue, @@ -10999,6 +12096,9 @@ std::function()> VulkanReplayConsumer { std::copy_n(pPipelines->GetPointer(), createInfoCount, pipeline_ids.begin()); + // insert self-dependencies on pipeline_ids, in order to track/detect them as async-tasks + handle_deps.insert(pipeline_ids.begin(), pipeline_ids.end()); + sync_fn = [this, parent_id = pPipelines->GetPointer()[0]]() { MapHandle(parent_id, &VulkanObjectInfoTable::GetVkPipelineInfo); }; @@ -11027,9 +12127,11 @@ std::function()> VulkanReplayConsumer replaced_file_code = ReplaceShaders(createInfoCount, create_infos, pipeline_ids.data()); } + PushRecaptureHandleIds(pipeline_ids.data(), pipeline_ids.size()); VkResult replay_result = func( device_info->handle, pipeline_cache, createInfoCount, create_infos, in_pAllocator, out_pipelines.data()); CheckResult("vkCreateGraphicsPipelines", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); // schedule dependency-clear on main-thread MainThreadQueue().post([this, @@ -11097,12 +12199,18 @@ std::function()> VulkanReplayConsumerBase::As uint32_t num_bytes = graphics::vulkan_struct_deep_copy(in_pCreateInfos, createInfoCount, nullptr); std::vector create_info_data(num_bytes); graphics::vulkan_struct_deep_copy(in_pCreateInfos, createInfoCount, create_info_data.data()); + std::vector pipeline_ids(createInfoCount); // extract handle-dependencies and track those auto handle_deps = graphics::vulkan_struct_extract_handle_ids(pCreateInfos); std::function sync_fn; if (pPipelines != nullptr && createInfoCount > 0) { + std::copy_n(pPipelines->GetPointer(), createInfoCount, pipeline_ids.begin()); + + // insert self-dependencies on pipeline_ids, in order to track/detect them as async-tasks + handle_deps.insert(pipeline_ids.begin(), pipeline_ids.end()); + sync_fn = [this, parent_id = pPipelines->GetPointer()[0]]() { MapHandle(parent_id, &VulkanObjectInfoTable::GetVkPipelineInfo); }; @@ -11120,12 +12228,15 @@ std::function()> VulkanReplayConsumerBase::As in_pAllocator, createInfoCount, create_info_data = std::move(create_info_data), - handle_deps = std::move(handle_deps)]() mutable -> handle_create_result_t { + handle_deps = std::move(handle_deps), + pipeline_ids = std::move(pipeline_ids)]() mutable -> handle_create_result_t { std::vector out_pipelines(createInfoCount); - auto create_infos = reinterpret_cast(create_info_data.data()); + auto create_infos = reinterpret_cast(create_info_data.data()); + PushRecaptureHandleIds(pipeline_ids.data(), pipeline_ids.size()); VkResult replay_result = func( device_info->handle, pipeline_cache, createInfoCount, create_infos, in_pAllocator, out_pipelines.data()); CheckResult("vkCreateComputePipelines", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); // schedule dependency-clear on main-thread MainThreadQueue().post([this, @@ -11211,8 +12322,10 @@ VulkanReplayConsumerBase::AsyncCreateShadersEXT(PFN_vkCreateShadersEXT replaced_file_code = ReplaceShaders(createInfoCount, create_infos, shaders.data()); } + PushRecaptureHandleIds(shaders.data(), shaders.size()); VkResult replay_result = func(device_handle, createInfoCount, create_infos, in_pAllocator, out_shaders.data()); CheckResult("vkCreateShadersEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); if (replay_result == VK_SUCCESS) { @@ -11256,9 +12369,9 @@ void VulkanReplayConsumerBase::ClearAsyncHandles(const std::unordered_set(create_info->pInitialData); uuid_match = memcmp(cache_header->pipelineCacheUUID, - physical_device_info->replay_device_info->properties->pipelineCacheUUID, - VK_UUID_SIZE) == 0; + physical_device_info->replay_device_info->properties->pipelineCacheUUID, + VK_UUID_SIZE) == 0; } return uuid_match; } @@ -11336,7 +12454,7 @@ void VulkanReplayConsumerBase::LoadPipelineCache(format::HandleId id, std::vecto if (error) { GFXRECON_LOG_ERROR("Could not open pipeline cache file '%s' for loading. Error: '%s'", - options_.save_pipeline_cache_filename.c_str(), + options_.load_pipeline_cache_filename.c_str(), strerror(error)); return; } @@ -11533,5 +12651,289 @@ void VulkanReplayConsumerBase::DestroyInternalInstanceResources(const VulkanInst } } +void VulkanReplayConsumerBase::OverrideGetDeviceMemoryCommitment(PFN_vkGetDeviceMemoryCommitment func, + const VulkanDeviceInfo* device_info, + const VulkanDeviceMemoryInfo* memory_info, + PointerDecoder* pCommittedMemoryInBytes) +{ + auto* committed_memory_in_bytes = + pCommittedMemoryInBytes->IsNull() + ? nullptr + : pCommittedMemoryInBytes->AllocateOutputData(1, static_cast(0)); + + auto allocator = device_info->allocator.get(); + GFXRECON_ASSERT(allocator != nullptr); + + allocator->GetDeviceMemoryCommitment(memory_info->handle, committed_memory_in_bytes, memory_info->allocator_data); +} + +VkResult VulkanReplayConsumerBase::OverrideMapMemory2(PFN_vkMapMemory2 func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + StructPointerDecoder* pMemoryMapInfo, + void** ppData) +{ + const auto* meta_memory_map_info = pMemoryMapInfo->GetMetaStructPointer(); + const auto* memory_map_info = pMemoryMapInfo->GetPointer(); + + auto allocator = device_info->allocator.get(); + GFXRECON_ASSERT(allocator != nullptr); + + const auto* memory_info = object_info_table_->GetVkDeviceMemoryInfo(meta_memory_map_info->memory); + + return allocator->MapMemory2(memory_map_info, ppData, memory_info->allocator_data); +} + +VkResult +VulkanReplayConsumerBase::OverrideUnmapMemory2(PFN_vkUnmapMemory2 func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + StructPointerDecoder* pMemoryUnmapInfo) +{ + const auto* meta_memory_unmap_info = pMemoryUnmapInfo->GetMetaStructPointer(); + const auto* memory_unmap_info = pMemoryUnmapInfo->GetPointer(); + + auto allocator = device_info->allocator.get(); + GFXRECON_ASSERT(allocator != nullptr); + + const auto* memory_info = object_info_table_->GetVkDeviceMemoryInfo(meta_memory_unmap_info->memory); + + return allocator->UnmapMemory2(memory_unmap_info, memory_info->allocator_data); +} + +void VulkanReplayConsumerBase::OverrideSetDeviceMemoryPriorityEXT(PFN_vkSetDeviceMemoryPriorityEXT func, + const VulkanDeviceInfo* device_info, + const VulkanDeviceMemoryInfo* memory_info, + float priority) +{ + auto allocator = device_info->allocator.get(); + GFXRECON_ASSERT(allocator != nullptr); + + allocator->SetDeviceMemoryPriority(memory_info->handle, priority, memory_info->allocator_data); +} + +VkResult VulkanReplayConsumerBase::OverrideGetMemoryRemoteAddressNV( + PFN_vkGetMemoryRemoteAddressNV func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + StructPointerDecoder* pMemoryGetRemoteAddressInfo, + VkRemoteAddressNV* pAddress) +{ + const auto* meta_mem_get_remote_address_info = pMemoryGetRemoteAddressInfo->GetMetaStructPointer(); + const auto* mem_get_remote_address_info = pMemoryGetRemoteAddressInfo->GetPointer(); + + auto allocator = device_info->allocator.get(); + GFXRECON_ASSERT(allocator != nullptr); + + VulkanResourceAllocator::MemoryData allocator_data = 0; + + auto memory_info = object_info_table_->GetVkDeviceMemoryInfo(meta_mem_get_remote_address_info->memory); + + if (memory_info != nullptr) + { + allocator_data = memory_info->allocator_data; + } + + return allocator->GetMemoryRemoteAddressNV(mem_get_remote_address_info, pAddress, memory_info->allocator_data); +} + +VkResult VulkanReplayConsumerBase::OverrideCreateAccelerationStructureNV( + PFN_vkCreateAccelerationStructureNV func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pAccelerationStructure) +{ + GFXRECON_UNREFERENCED_PARAMETER(original_result); + + GFXRECON_ASSERT((device_info != nullptr) && (pCreateInfo != nullptr) && (pAccelerationStructure != nullptr) && + !pAccelerationStructure->IsNull() && (pAccelerationStructure->GetHandlePointer() != nullptr)); + + auto allocator = device_info->allocator.get(); + GFXRECON_ASSERT(allocator != nullptr); + + VkResult result = VK_SUCCESS; + VulkanResourceAllocator::ResourceData allocator_data; + auto replay_acc_str = pAccelerationStructure->GetHandlePointer(); + auto capture_id = (*pAccelerationStructure->GetPointer()); + auto replay_create_info = pCreateInfo->GetPointer(); + + result = allocator->CreateAccelerationStructureNV( + replay_create_info, GetAllocationCallbacks(pAllocator), capture_id, replay_acc_str, &allocator_data); + + if ((result == VK_SUCCESS) && (replay_create_info != nullptr) && ((*replay_acc_str) != VK_NULL_HANDLE)) + { + auto acc_str_info = + reinterpret_cast(pAccelerationStructure->GetConsumerData(0)); + GFXRECON_ASSERT(acc_str_info != nullptr); + + acc_str_info->allocator_data = allocator_data; + } + + return result; +} + +void VulkanReplayConsumerBase::OverrideDestroyAccelerationStructureNV( + PFN_vkDestroyAccelerationStructureNV func, + const VulkanDeviceInfo* device_info, + VulkanAccelerationStructureNVInfo* acc_str_info, + StructPointerDecoder* pAllocator) +{ + GFXRECON_UNREFERENCED_PARAMETER(func); + + auto allocator = device_info->allocator.get(); + GFXRECON_ASSERT(allocator != nullptr); + + VkAccelerationStructureNV acc_str = VK_NULL_HANDLE; + VulkanResourceAllocator::ResourceData allocator_data = 0; + + if (acc_str_info != nullptr) + { + acc_str = acc_str_info->handle; + allocator_data = acc_str_info->allocator_data; + + acc_str_info->allocator_data = 0; + } + + allocator->DestroyAccelerationStructureNV(acc_str, GetAllocationCallbacks(pAllocator), allocator_data); +} + +void VulkanReplayConsumerBase::OverrideGetAccelerationStructureMemoryRequirementsNV( + PFN_vkGetAccelerationStructureMemoryRequirementsNV func, + const VulkanDeviceInfo* device_info, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) +{ + GFXRECON_UNREFERENCED_PARAMETER(func); + + const auto* meta_info = pInfo->GetMetaStructPointer(); + const auto* info = pInfo->GetPointer(); + auto* mem_reqs = pMemoryRequirements->IsNull() ? nullptr : pMemoryRequirements->AllocateOutputData(1); + auto acc_info = object_info_table_->GetVkAccelerationStructureNVInfo(meta_info->accelerationStructure); + + auto allocator = device_info->allocator.get(); + GFXRECON_ASSERT(allocator != nullptr); + + allocator->GetAccelerationStructureMemoryRequirementsNV(info, mem_reqs, acc_info->allocator_data); +} + +VkResult VulkanReplayConsumerBase::OverrideBindAccelerationStructureMemoryNV( + PFN_vkBindAccelerationStructureMemoryNV func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + uint32_t bindInfoCount, + StructPointerDecoder* pBindInfos) +{ + const auto* meta_bind_infos = pBindInfos->GetMetaStructPointer(); + const auto* bind_infos = pBindInfos->GetPointer(); + + auto allocator = device_info->allocator.get(); + GFXRECON_ASSERT(allocator != nullptr); + + std::vector acc_infos; + std::vector memory_infos; + std::vector allocator_acc_datas(bindInfoCount, 0); + std::vector allocator_memory_datas(bindInfoCount, 0); + std::vector memory_property_flags(bindInfoCount, 0); + + for (uint32_t i = 0; i < bindInfoCount; ++i) + { + const auto* meta_bind_info = &meta_bind_infos[i]; + + auto acc_info = object_info_table_->GetVkAccelerationStructureNVInfo(meta_bind_info->accelerationStructure); + auto memory_info = object_info_table_->GetVkDeviceMemoryInfo(meta_bind_info->memory); + + acc_infos.push_back(acc_info); + memory_infos.push_back(memory_info); + + if (acc_info != nullptr) + { + allocator_acc_datas[i] = acc_info->allocator_data; + } + + if (memory_info != nullptr) + { + allocator_memory_datas[i] = memory_info->allocator_data; + } + } + + auto result = allocator->BindAccelerationStructureMemoryNV(bindInfoCount, + bind_infos, + allocator_acc_datas.data(), + allocator_memory_datas.data(), + memory_property_flags.data()); + if (result == VK_SUCCESS) + { + + for (uint32_t i = 0; i < bindInfoCount; ++i) + { + auto acc_info = acc_infos[i]; + + if (acc_info != nullptr) + { + acc_info->memory_property_flags = memory_property_flags[i]; + } + } + } + else if (original_result == VK_SUCCESS) + { + // When bind fails at replay, but succeeded at capture, check for memory incompatibilities and recommend + // enabling memory translation. + allocator->ReportBindAccelerationStructureMemoryNVIncompatibility( + bindInfoCount, bind_infos, allocator_acc_datas.data(), allocator_memory_datas.data()); + } + return result; +} + +VkResult +VulkanReplayConsumerBase::OverrideGetMemoryFdKHR(PFN_vkGetMemoryFdKHR func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + StructPointerDecoder* pGetFdInfo, + PointerDecoder* pFd) +{ + const auto* meta_get_fd_info = pGetFdInfo->GetMetaStructPointer(); + const auto* get_fd_info = pGetFdInfo->GetPointer(); + auto* fd = pFd->IsNull() ? nullptr : pFd->AllocateOutputData(1, static_cast(0)); + + auto allocator = device_info->allocator.get(); + GFXRECON_ASSERT(allocator != nullptr); + + VulkanResourceAllocator::MemoryData allocator_data = 0; + + auto memory_info = object_info_table_->GetVkDeviceMemoryInfo(meta_get_fd_info->memory); + + if (memory_info != nullptr) + { + allocator_data = memory_info->allocator_data; + } + + return allocator->GetMemoryFd(get_fd_info, fd, memory_info->allocator_data); +} + +void VulkanReplayConsumerBase::OverrideGetDeviceMemoryOpaqueCaptureAddress( + PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR func, + const VulkanDeviceInfo* device_info, + StructPointerDecoder* pInfo) +{ + const auto* meta_info = pInfo->GetMetaStructPointer(); + const auto* info = pInfo->GetPointer(); + + auto allocator = device_info->allocator.get(); + GFXRECON_ASSERT(allocator != nullptr); + + VulkanResourceAllocator::MemoryData allocator_data = 0; + + auto memory_info = object_info_table_->GetVkDeviceMemoryInfo(meta_info->memory); + + if (memory_info != nullptr) + { + allocator_data = memory_info->allocator_data; + } + + allocator->GetDeviceMemoryOpaqueCaptureAddress(info, allocator_data); +} + GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_consumer_base.h b/third_party/gfxreconstruct/framework/decode/vulkan_replay_consumer_base.h index b770d93d3..752a9d29a 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_consumer_base.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_consumer_base.h @@ -83,7 +83,7 @@ class VulkanReplayConsumerBase : public VulkanConsumer void SetCurrentFrameNumber(uint64_t frame_number) override; - void Process_ExeFileInfo(util::filepath::FileInfo& info_record) override + void Process_ExeFileInfo(const util::filepath::FileInfo& info_record) override { gfxrecon::util::filepath::CheckReplayerName(info_record.AppName); } @@ -141,6 +141,11 @@ class VulkanReplayConsumerBase : public VulkanConsumer virtual void ProcessSetOpaqueAddressCommand(format::HandleId device_id, format::HandleId object_id, uint64_t address) override; + void ProcessSetOpaqueDescriptorDataCommand(format::HandleId device_id, + format::HandleId object_id, + uint32_t data_size, + const uint8_t* data) override; + virtual void ProcessSetRayTracingShaderGroupHandlesCommand(format::HandleId device_id, format::HandleId pipeline_id, size_t data_size, @@ -152,11 +157,11 @@ class VulkanReplayConsumerBase : public VulkanConsumer uint32_t last_presented_image, const std::vector& image_info) override; - virtual void ProcessBeginResourceInitCommand(format::HandleId device_id, - uint64_t max_resource_size, - uint64_t max_copy_size) override; + void ProcessBeginResourceInitCommand(format::HandleId device_id, + uint64_t total_copy_size, + uint64_t max_copy_size) override; - virtual void ProcessEndResourceInitCommand(format::HandleId device_id) override; + void ProcessEndResourceInitCommand(format::HandleId device_id) override; virtual void ProcessInitBufferCommand(format::HandleId device_id, format::HandleId buffer_id, @@ -206,17 +211,18 @@ class VulkanReplayConsumerBase : public VulkanConsumer StructPointerDecoder* pAllocator, HandlePointerDecoder* pPipelines) override; - void ProcessBuildVulkanAccelerationStructuresMetaCommand( + void ProcessVulkanBuildAccelerationStructuresCommand( format::HandleId device, uint32_t info_count, StructPointerDecoder* pInfos, StructPointerDecoder* ppRangeInfos) override; - void ProcessCopyVulkanAccelerationStructuresMetaCommand( + void ProcessVulkanCopyAccelerationStructuresCommand( format::HandleId device, StructPointerDecoder* copy_info) override; - void ProcessVulkanAccelerationStructuresWritePropertiesMetaCommand( - format::HandleId device_id, VkQueryType query_type, format::HandleId acceleration_structure_id) override; + void ProcessVulkanWriteAccelerationStructuresPropertiesCommand(format::HandleId device_id, + VkQueryType query_type, + format::HandleId acceleration_structure_id) override; template void AllowCompileDuringPipelineCreation(uint32_t create_info_count, const T* create_infos) @@ -699,20 +705,20 @@ class VulkanReplayConsumerBase : public VulkanConsumer VkDeviceSize stride, VkQueryResultFlags flags); - VkResult OverrideQueueSubmit(PFN_vkQueueSubmit func, - uint64_t index, - VkResult original_result, - const VulkanQueueInfo* queue_info, - uint32_t submitCount, - const StructPointerDecoder* pSubmits, - const VulkanFenceInfo* fence_info); - - VkResult OverrideQueueSubmit2(PFN_vkQueueSubmit2 func, - VkResult original_result, - const VulkanQueueInfo* queue_info, - uint32_t submitCount, - const StructPointerDecoder* pSubmits, - const VulkanFenceInfo* fence_info); + VkResult OverrideQueueSubmit(PFN_vkQueueSubmit func, + uint64_t index, + VkResult original_result, + const VulkanQueueInfo* queue_info, + uint32_t submitCount, + StructPointerDecoder* pSubmits, + const VulkanFenceInfo* fence_info); + + VkResult OverrideQueueSubmit2(PFN_vkQueueSubmit2 func, + VkResult original_result, + const VulkanQueueInfo* queue_info, + uint32_t submitCount, + StructPointerDecoder* pSubmits, + const VulkanFenceInfo* fence_info); VkResult OverrideQueueBindSparse(PFN_vkQueueBindSparse func, VkResult original_result, @@ -862,7 +868,7 @@ class VulkanReplayConsumerBase : public VulkanConsumer VkResult OverrideCreateBuffer(PFN_vkCreateBuffer func, VkResult original_result, - const VulkanDeviceInfo* device_info, + VulkanDeviceInfo* device_info, const StructPointerDecoder* pCreateInfo, const StructPointerDecoder* pAllocator, HandlePointerDecoder* pBuffer); @@ -881,7 +887,7 @@ class VulkanReplayConsumerBase : public VulkanConsumer VkResult OverrideCreateImage(PFN_vkCreateImage func, VkResult original_result, - const VulkanDeviceInfo* device_info, + VulkanDeviceInfo* device_info, const StructPointerDecoder* pCreateInfo, const StructPointerDecoder* pAllocator, HandlePointerDecoder* pImage); @@ -1045,6 +1051,22 @@ class VulkanReplayConsumerBase : public VulkanConsumer const VulkanDeviceInfo* device_info, StructPointerDecoder* tag_info); + VkResult + OverrideGetPhysicalDeviceSurfaceFormatsKHR(PFN_vkGetPhysicalDeviceSurfaceFormatsKHR func, + VkResult original_result, + decode::VulkanPhysicalDeviceInfo* physical_device_info, + decode::VulkanSurfaceKHRInfo* surface_info, + PointerDecoder* pSurfaceFormatCount, + StructPointerDecoder* pSurfaceFormats); + + VkResult OverrideGetPhysicalDeviceSurfaceFormats2KHR( + PFN_vkGetPhysicalDeviceSurfaceFormats2KHR func, + VkResult original_result, + decode::VulkanPhysicalDeviceInfo* physical_device_info, + StructPointerDecoder* surface_info, + PointerDecoder* pSurfaceFormatCount, + StructPointerDecoder* pSurfaceFormats); + VkResult OverrideCreateSwapchainKHR(PFN_vkCreateSwapchainKHR func, VkResult original_result, VulkanDeviceInfo* device_info, @@ -1218,7 +1240,7 @@ class VulkanReplayConsumerBase : public VulkanConsumer VkResult OverrideCreateAccelerationStructureKHR( PFN_vkCreateAccelerationStructureKHR func, VkResult original_result, - const VulkanDeviceInfo* device_info, + VulkanDeviceInfo* device_info, const StructPointerDecoder* pCreateInfo, const StructPointerDecoder* pAllocator, HandlePointerDecoder* pAccelerationStructureKHR); @@ -1381,6 +1403,15 @@ class VulkanReplayConsumerBase : public VulkanConsumer uint32_t height, uint32_t depth); + void OverrideCmdTraceRaysIndirectKHR( + PFN_vkCmdTraceRaysIndirectKHR func, + VulkanCommandBufferInfo* command_buffer_info, + StructPointerDecoder* pRaygenShaderBindingTable, + StructPointerDecoder* pMissShaderBindingTable, + StructPointerDecoder* pHitShaderBindingTable, + StructPointerDecoder* pCallableShaderBindingTable, + VkDeviceAddress indirectDeviceAddress); + void OverrideCmdBeginRenderPass2(PFN_vkCmdBeginRenderPass2 func, VulkanCommandBufferInfo* command_buffer_info, @@ -1389,11 +1420,18 @@ class VulkanReplayConsumerBase : public VulkanConsumer VkResult OverrideCreateImageView(PFN_vkCreateImageView func, VkResult original_result, - const VulkanDeviceInfo* device_info, + VulkanDeviceInfo* device_info, StructPointerDecoder* create_info_decoder, StructPointerDecoder* allocator_decoder, HandlePointerDecoder* view_decoder); + VkResult OverrideCreateSampler(PFN_vkCreateSampler func, + VkResult original_result, + VulkanDeviceInfo* device_info, + StructPointerDecoder* create_info_decoder, + StructPointerDecoder* allocator_decoder, + HandlePointerDecoder* sampler_decoder); + VkResult OverrideCreateFramebuffer(PFN_vkCreateFramebuffer func, VkResult original_result, const VulkanDeviceInfo* device_info, @@ -1472,6 +1510,98 @@ class VulkanReplayConsumerBase : public VulkanConsumer const StructPointerDecoder* pAllocator, HandlePointerDecoder* pSampler); + void OverrideGetDeviceMemoryCommitment(PFN_vkGetDeviceMemoryCommitment func, + const VulkanDeviceInfo* device_info, + const VulkanDeviceMemoryInfo* memory_info, + PointerDecoder* pCommittedMemoryInBytes); + + VkResult OverrideMapMemory2(PFN_vkMapMemory2 func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + StructPointerDecoder* pMemoryMapInfo, + void** ppData); + + VkResult OverrideUnmapMemory2(PFN_vkUnmapMemory2 func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + StructPointerDecoder* pMemoryUnmapInfo); + + void OverrideSetDeviceMemoryPriorityEXT(PFN_vkSetDeviceMemoryPriorityEXT func, + const VulkanDeviceInfo* device_info, + const VulkanDeviceMemoryInfo* memory_info, + float priority); + + VkResult OverrideGetMemoryRemoteAddressNV( + PFN_vkGetMemoryRemoteAddressNV func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + StructPointerDecoder* pMemoryGetRemoteAddressInfo, + VkRemoteAddressNV* pAddress); + + VkResult OverrideCreateAccelerationStructureNV( + PFN_vkCreateAccelerationStructureNV func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pAccelerationStructure); + + void OverrideDestroyAccelerationStructureNV(PFN_vkDestroyAccelerationStructureNV func, + const VulkanDeviceInfo* device_info, + VulkanAccelerationStructureNVInfo* acc_str_info, + StructPointerDecoder* pAllocator); + + void OverrideGetAccelerationStructureMemoryRequirementsNV( + PFN_vkGetAccelerationStructureMemoryRequirementsNV func, + const VulkanDeviceInfo* device_info, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements); + + VkResult OverrideBindAccelerationStructureMemoryNV( + PFN_vkBindAccelerationStructureMemoryNV func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + uint32_t bindInfoCount, + StructPointerDecoder* pBindInfos); + + VkResult OverrideGetMemoryFdKHR(PFN_vkGetMemoryFdKHR func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + StructPointerDecoder* pGetFdInfo, + PointerDecoder* pFd); + + void OverrideGetDeviceMemoryOpaqueCaptureAddress( + PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR func, + const VulkanDeviceInfo* device_info, + StructPointerDecoder* pInfo); + + VkResult OverrideGetPastPresentationTimingGOOGLE( + PFN_vkGetPastPresentationTimingGOOGLE func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + const VulkanSwapchainKHRInfo* swapchain_info, + PointerDecoder* pPresentationTimingCount, + StructPointerDecoder* pPresentationTimings); + + VkResult OverrideGetRefreshCycleDurationGOOGLE( + PFN_vkGetRefreshCycleDurationGOOGLE func, + VkResult original_result, + const VulkanDeviceInfo* device_info, + const VulkanSwapchainKHRInfo* swapchain_info, + StructPointerDecoder* pDisplayTimingProperties); + + void OverrideGetDescriptorEXT(PFN_vkGetDescriptorEXT func, + VulkanDeviceInfo* device_info, + StructPointerDecoder* pDescriptorInfo, + size_t dataSize, + PointerDecoder* pDescriptor); + + void + OverrideCmdBindDescriptorBuffersEXT(PFN_vkCmdBindDescriptorBuffersEXT func, + VulkanCommandBufferInfo* commandBuffer_info, + uint32_t bufferCount, + StructPointerDecoder* pBindingInfos); + std::function()> AsyncCreateGraphicsPipelines(PFN_vkCreateGraphicsPipelines func, VkResult returnValue, @@ -1508,6 +1638,25 @@ class VulkanReplayConsumerBase : public VulkanConsumer std::unique_ptr resource_dumper_; + //// Begin recapture members + private: + // UINT64_MAX = 18446744073709551615ULL + static constexpr uint64_t kRecaptureHandleIdOffset = 10000000000000000000ULL; + + public: + // Provide a custom implementation of vkGetInstanceProcAddr for the replay consumer to use to find Vulkan functions. + // For example, this is used during recapture to return the capture layer's Vulkan functions. + void SetupForRecapture(PFN_vkGetInstanceProcAddr get_instance_proc_addr, + PFN_vkCreateInstance create_instance, + PFN_vkCreateDevice create_device); + + virtual void PushRecaptureHandleId(const format::HandleId* id) override; + virtual void PushRecaptureHandleIds(const format::HandleId* id_array, uint64_t id_count) override; + virtual void ClearRecaptureHandleIds() override; + virtual bool IsRecapture() override { return options_.capture; } + + //// End recapture members + private: void RaiseFatalError(const char* message) const; @@ -1537,9 +1686,9 @@ class VulkanReplayConsumerBase : public VulkanConsumer const VkPhysicalDeviceProperties* capture_properties, const VkPhysicalDeviceProperties* replay_properties); - void SetPhysicalDeviceProperties(VulkanPhysicalDeviceInfo* physical_device_info, - const VkPhysicalDeviceProperties2* capture_properties, - const VkPhysicalDeviceProperties2* replay_properties); + void SetPhysicalDeviceProperties2(VulkanPhysicalDeviceInfo* physical_device_info, + const VkPhysicalDeviceProperties2* capture_properties, + const VkPhysicalDeviceProperties2* replay_properties); void SetPhysicalDeviceMemoryProperties(VulkanPhysicalDeviceInfo* physical_device_info, const VkPhysicalDeviceMemoryProperties* capture_properties, @@ -1688,8 +1837,17 @@ class VulkanReplayConsumerBase : public VulkanConsumer VkPipeline* pipelines, uint32_t pipelineCount); + bool IsExtensionBeingFaked(const char* extension); + void DestroyInternalInstanceResources(const VulkanInstanceInfo* instance_info); + VulkanDeviceInfo* FindkDuplicateDeviceInfo(const VulkanPhysicalDeviceInfo* physical_device_info, + const StructPointerDecoder* create_info); + + VkResult SetDuplicateDeviceInfo(VkDevice* replay_device, + VulkanDeviceInfo* device_info, + VulkanDeviceInfo* extant_device_info); + private: struct HardwareBufferInfo { @@ -1718,29 +1876,29 @@ class VulkanReplayConsumerBase : public VulkanConsumer typedef std::unordered_map HardwareBufferMemoryMap; private: - util::platform::LibraryHandle loader_handle_; - PFN_vkGetInstanceProcAddr get_instance_proc_addr_; - PFN_vkCreateInstance create_instance_proc_; - std::unordered_map get_device_proc_addrs_; - std::unordered_map create_device_procs_; - std::unordered_map instance_tables_; - std::unordered_map device_tables_; - std::unordered_map, VkDevice> device_uuid_map_; - std::function fatal_error_handler_; - std::shared_ptr application_; - CommonObjectInfoTable* object_info_table_; - bool loading_trim_state_; - bool replaying_trimmed_capture_; - SwapchainImageTracker swapchain_image_tracker_; - HardwareBufferMap hardware_buffers_; - HardwareBufferMemoryMap hardware_buffer_memory_info_; - std::unique_ptr screenshot_handler_; - std::unique_ptr swapchain_; - std::string screenshot_file_prefix_; - graphics::FpsInfo* fps_info_; - - std::unordered_map _device_address_trackers; - std::unordered_map _device_address_replacers; + util::platform::LibraryHandle loader_handle_; + PFN_vkGetInstanceProcAddr get_instance_proc_addr_; + PFN_vkCreateInstance create_instance_proc_; + std::unordered_map get_device_proc_addrs_; + std::unordered_map create_device_procs_; + graphics::InstanceDispatchTablesMap instance_tables_; + graphics::DeviceDispatchTablesMap device_tables_; + std::unordered_map device_phy_id_map_; + std::function fatal_error_handler_; + std::shared_ptr application_; + CommonObjectInfoTable* object_info_table_; + bool loading_trim_state_; + bool replaying_trimmed_capture_; + SwapchainImageTracker swapchain_image_tracker_; + HardwareBufferMap hardware_buffers_; + HardwareBufferMemoryMap hardware_buffer_memory_info_; + std::unique_ptr screenshot_handler_; + std::unique_ptr swapchain_; + std::string screenshot_file_prefix_; + graphics::FpsInfo* fps_info_; + + VulkanPerDeviceAddressTrackers _device_address_trackers; + VulkanPerDeviceAddressReplacers _device_address_replacers; util::ThreadPool main_thread_queue_; util::ThreadPool background_queue_; @@ -1752,7 +1910,7 @@ class VulkanReplayConsumerBase : public VulkanConsumer std::function sync_fn; //! function used to defer deletion of a tracked async-dependency - std::function destroy_fn; + std::function post_build_fn; }; //! stores handles used/referenced by currently running async tasks std::unordered_map async_tracked_handles_; @@ -1785,6 +1943,10 @@ class VulkanReplayConsumerBase : public VulkanConsumer std::vector capture_image_indices_; std::vector swapchain_infos_; + // faked extensions is a list of currently bypassed extensions. + // goal is to allow replay when 'benign' extensions are missing during replay. + std::vector faked_extensions_; + protected: // Used by pipeline cache handling, there are the following two cases for the flag to be set: // diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources.cpp index 313ceffa1..a9c3eef5e 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources.cpp @@ -1,5 +1,5 @@ /* -** Copyright (c) 2024 LunarG, Inc. +** Copyright (c) 2024-2025 LunarG, Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -20,12 +20,17 @@ ** DEALINGS IN THE SOFTWARE. */ -#include "decode/vulkan_object_info.h" +#include "decode/custom_vulkan_struct_decoders.h" +#include "decode/vulkan_device_address_tracker.h" +#include "decode/vulkan_replay_dump_resources_common.h" #include "decode/vulkan_replay_dump_resources_compute_ray_tracing.h" +#include "decode/vulkan_replay_dump_resources_delegate.h" #include "decode/vulkan_replay_dump_resources_draw_calls.h" +#include "decode/vulkan_replay_dump_resources_transfer.h" +#include "decode/vulkan_object_info.h" #include "decode/vulkan_replay_options.h" -#include "decode/vulkan_replay_dump_resources_delegate.h" #include "format/format.h" +#include "format/format_util.h" #include "generated/generated_vulkan_enum_to_string.h" #include "generated/generated_vulkan_struct_decoders.h" #include "vulkan_replay_dump_resources.h" @@ -33,14 +38,16 @@ #include "graphics/vulkan_struct_get_pnext.h" #include "util/logging.h" +#include #include -#include +#include #include #include #include #include #include #include + #if !defined(WIN32) #include #endif @@ -48,16 +55,27 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) -VulkanReplayDumpResourcesBase::VulkanReplayDumpResourcesBase(const VulkanReplayOptions& options, - CommonObjectInfoTable* object_info_table) : - QueueSubmit_indices_(options.QueueSubmit_Indices), - recording_(false), dump_resources_before_(options.dump_resources_before), object_info_table_(object_info_table), +VulkanReplayDumpResourcesBase::VulkanReplayDumpResourcesBase(const VulkanReplayOptions& options, + CommonObjectInfoTable* object_info_table, + const VulkanPerDeviceAddressTrackers& address_trackers, + const graphics::InstanceDispatchTablesMap& instance_tables, + const graphics::DeviceDispatchTablesMap& device_tables) : + BeginCommandBufferQueueSubmit_Indices_(options.BeginCommandBufferQueueSubmit_Indices), + active_contexts_(0), dump_resources_before_(options.dump_resources_before), object_info_table_(object_info_table), output_json_per_command(options.dump_resources_json_per_command), default_delegate_(nullptr), - user_delegate_(nullptr), active_delegate_(nullptr) + user_delegate_(nullptr), active_delegate_(nullptr), address_trackers_(address_trackers), + dump_as_build_input_buffers_(options.dump_resources_dump_build_AS_input_buffers) { capture_filename = std::filesystem::path(options.capture_filename).stem().string(); - if (!options.Draw_Indices.size() && !options.Dispatch_Indices.size() && !options.TraceRays_Indices.size()) + if (options.dump_resources_binary_file_compression_type != format::CompressionType::kNone) + { + compressor_ = std::unique_ptr( + format::CreateCompressor(options.dump_resources_binary_file_compression_type)); + } + + if (options.Draw_Indices.empty() && options.Dispatch_Indices.empty() && options.TraceRays_Indices.empty() && + options.Transfer_Indices.empty()) { return; } @@ -79,100 +97,169 @@ VulkanReplayDumpResourcesBase::VulkanReplayDumpResourcesBase(const VulkanReplayO active_delegate_->Open(); } - for (size_t i = 0; i < options.BeginCommandBuffer_Indices.size(); ++i) + for (size_t i = 0; i < BeginCommandBufferQueueSubmit_Indices_.size(); ++i) { - const uint64_t bcb_index = options.BeginCommandBuffer_Indices[i]; - const bool has_draw = i < options.Draw_Indices.size() && options.Draw_Indices[i].size(); - const bool has_dispatch = (i < options.Dispatch_Indices.size() && options.Dispatch_Indices[i].size()) || + const decode::Index qs_index = BeginCommandBufferQueueSubmit_Indices_[i].second; + const decode::Index bcb_index = BeginCommandBufferQueueSubmit_Indices_[i].first; + const bool has_draw = i < options.Draw_Indices.size() && options.Draw_Indices[i].size(); + const bool has_dispatch = (i < options.Dispatch_Indices.size() && options.Dispatch_Indices[i].size()) || (i < options.TraceRays_Indices.size() && options.TraceRays_Indices[i].size()); - const bool has_secondaries = - ((i < options.ExecuteCommands_Indices.size()) && !options.ExecuteCommands_Indices[i].empty()); + const bool has_transfer = options.Transfer_Indices.size() && options.Transfer_Indices[i].size(); if (has_draw) { - draw_call_contexts.emplace(std::piecewise_construct, - std::forward_as_tuple(bcb_index), - std::forward_as_tuple(&options.Draw_Indices[i], - &options.RenderPass_Indices[i], - *object_info_table, - options, - *active_delegate_)); + draw_call_contexts_.emplace( + std::piecewise_construct, + std::forward_as_tuple(bcb_index, qs_index), + std::forward_as_tuple(std::make_unique(&options.Draw_Indices[i], + &options.RenderPass_Indices[i], + options.DrawSubresources, + *object_info_table, + options, + *active_delegate_, + compressor_.get(), + acceleration_structures_context_, + address_trackers))); } if (has_dispatch) { - dispatch_ray_contexts.emplace( + dispatch_ray_contexts_.emplace(std::piecewise_construct, + std::forward_as_tuple(bcb_index, qs_index), + std::forward_as_tuple(std::make_unique( + (options.Dispatch_Indices.size() && options.Dispatch_Indices[i].size()) + ? &options.Dispatch_Indices[i] + : nullptr, + options.DispatchSubresources, + (options.TraceRays_Indices.size() && options.TraceRays_Indices[i].size()) + ? &options.TraceRays_Indices[i] + : nullptr, + options.TraceRaysSubresources, + *object_info_table_, + options, + *active_delegate_, + compressor_.get(), + acceleration_structures_context_, + address_trackers))); + } + + if (has_transfer) + { + transfer_contexts_.emplace( std::piecewise_construct, - std::forward_as_tuple(bcb_index), - std::forward_as_tuple((options.Dispatch_Indices.size() && options.Dispatch_Indices[i].size()) - ? &options.Dispatch_Indices[i] - : nullptr, - (options.TraceRays_Indices.size() && options.TraceRays_Indices[i].size()) - ? &options.TraceRays_Indices[i] - : nullptr, - *object_info_table_, - options, - *active_delegate_)); + std::forward_as_tuple(bcb_index, qs_index), + std::forward_as_tuple(std::make_unique(&options.Transfer_Indices[i], + *object_info_table_, + instance_tables, + device_tables, + options, + *active_delegate_, + address_trackers, + acceleration_structures_context_, + compressor_.get()))); + } + + if (!qs_index && !bcb_index) + { + // Zero BeginCommandBuffer and QueueSubmit indices indicates that there is request to dump transfer commands + // from the state setup section. + active_contexts_ = 1; } } // Once all contexts are created do a second pass and assign the secondaries to the primaries the are executed from - for (size_t i = 0; i < options.BeginCommandBuffer_Indices.size() && i < options.ExecuteCommands_Indices.size(); ++i) + for (size_t i = 0; + i < options.BeginCommandBufferQueueSubmit_Indices.size() && i < options.ExecuteCommands_Indices.size(); + ++i) { if (options.ExecuteCommands_Indices[i].empty()) { continue; } - const uint64_t bcb_index = options.BeginCommandBuffer_Indices[i]; + const decode::Index bcb_index = BeginCommandBufferQueueSubmit_Indices_[i].first; + const decode::Index qs_index = BeginCommandBufferQueueSubmit_Indices_[i].second; - DrawCallsDumpingContext* primary_dc_context = FindDrawCallCommandBufferContext(bcb_index); + std::vector> primary_dc_contexts = + FindDrawCallDumpingContexts(bcb_index); for (auto& [execute_commands_index, secondary_bcbs] : options.ExecuteCommands_Indices[i]) { for (auto& secondary_bcb : secondary_bcbs) { - DrawCallsDumpingContext* dc_secondary_context = FindDrawCallCommandBufferContext(secondary_bcb); - if (dc_secondary_context != nullptr) + std::vector> secondary_dc_contexts = + FindDrawCallDumpingContexts(secondary_bcb); + if (!secondary_dc_contexts.empty()) { - if (primary_dc_context == nullptr) + if (primary_dc_contexts.empty()) { - auto new_primary = - draw_call_contexts.emplace(std::piecewise_construct, - std::forward_as_tuple(bcb_index), - std::forward_as_tuple(nullptr, - &options.RenderPass_Indices[i], - *object_info_table, - options, - *active_delegate_)); - - primary_dc_context = FindDrawCallCommandBufferContext(bcb_index); + auto [new_primary_it, success] = + draw_call_contexts_.emplace(std::piecewise_construct, + std::forward_as_tuple(bcb_index, qs_index), + std::forward_as_tuple(std::make_unique( + nullptr, + &options.RenderPass_Indices[i], + options.DrawSubresources, + *object_info_table, + options, + *active_delegate_, + compressor_.get(), + acceleration_structures_context_, + address_trackers))); + GFXRECON_ASSERT(success); + + primary_dc_contexts.push_back(new_primary_it->second); } - primary_dc_context->AssignSecondary(execute_commands_index, dc_secondary_context); + for (auto prim_contex : primary_dc_contexts) + { + for (auto sec_context : secondary_dc_contexts) + { + prim_contex->AssignSecondary(execute_commands_index, sec_context); + } + } } } } - DispatchTraceRaysDumpingContext* primary_disp_context = FindDispatchRaysCommandBufferContext(bcb_index); + std::vector> primary_disp_contexts = + FindDispatchTraceRaysContexts(bcb_index); for (auto& execute_commands : options.ExecuteCommands_Indices[i]) { const uint64_t execute_commands_index = execute_commands.first; for (auto& secondary : execute_commands.second) { - DispatchTraceRaysDumpingContext* disp_secondary_context = - FindDispatchRaysCommandBufferContext(secondary); - if (disp_secondary_context != nullptr) + std::vector> secondary_disp_contexts = + FindDispatchTraceRaysContexts(secondary); + if (!secondary_disp_contexts.empty()) { - if (primary_disp_context == nullptr) + if (primary_disp_contexts.empty()) { - dispatch_ray_contexts.emplace( + auto [new_primary_it, success] = dispatch_ray_contexts_.emplace( std::piecewise_construct, - std::forward_as_tuple(bcb_index), - std::forward_as_tuple(nullptr, nullptr, *object_info_table_, options, *active_delegate_)); + std::forward_as_tuple(bcb_index, qs_index), + std::forward_as_tuple( + std::make_unique(nullptr, + options.DispatchSubresources, + nullptr, + options.TraceRaysSubresources, + *object_info_table_, + options, + *active_delegate_, + compressor_.get(), + acceleration_structures_context_, + address_trackers))); + GFXRECON_ASSERT(success); + + primary_disp_contexts.push_back(new_primary_it->second); + } - primary_disp_context = FindDispatchRaysCommandBufferContext(bcb_index); + for (auto prim_context : primary_disp_contexts) + { + for (auto sec_context : secondary_disp_contexts) + { + prim_context->AssignSecondary(execute_commands_index, sec_context); + } } - primary_disp_context->AssignSecondary(execute_commands_index, disp_secondary_context); } } } @@ -182,18 +269,22 @@ VulkanReplayDumpResourcesBase::VulkanReplayDumpResourcesBase(const VulkanReplayO // secondaries. This is done in a separate pass since we need to be sure that all assignments have been completed. if (!options.ExecuteCommands_Indices.empty()) { - for (size_t i = 0; i < options.BeginCommandBuffer_Indices.size(); ++i) + for (size_t i = 0; i < BeginCommandBufferQueueSubmit_Indices_.size(); ++i) { if (options.ExecuteCommands_Indices[i].empty()) { continue; } - const uint64_t bcb_index = options.BeginCommandBuffer_Indices[i]; - DrawCallsDumpingContext* primary_dc_context = FindDrawCallCommandBufferContext(bcb_index); - if (primary_dc_context != nullptr) + const uint64_t bcb_index = BeginCommandBufferQueueSubmit_Indices_[i].first; + std::vector> primary_dc_contexts = + FindDrawCallDumpingContexts(bcb_index); + if (!primary_dc_contexts.empty()) { - primary_dc_context->RecaclulateCommandBuffers(); + for (std::shared_ptr prim_context : primary_dc_contexts) + { + prim_context->RecaclulateCommandBuffers(); + } } } } @@ -213,140 +304,236 @@ void VulkanReplayDumpResourcesBase::Release() active_delegate_ = nullptr; default_delegate_ = nullptr; } - draw_call_contexts.clear(); - dispatch_ray_contexts.clear(); - cmd_buf_begin_map_.clear(); - QueueSubmit_indices_.clear(); + draw_call_contexts_.clear(); + dispatch_ray_contexts_.clear(); + cb_bcb_map_.clear(); + BeginCommandBufferQueueSubmit_Indices_.clear(); - recording_ = false; + acceleration_structures_context_.clear(); } -DrawCallsDumpingContext* -VulkanReplayDumpResourcesBase::FindDrawCallCommandBufferContext(VkCommandBuffer original_command_buffer) +std::vector> +VulkanReplayDumpResourcesBase::FindDrawCallDumpingContexts(VkCommandBuffer original_command_buffer) { - auto begin_entry = cmd_buf_begin_map_.find(original_command_buffer); - if (begin_entry == cmd_buf_begin_map_.end()) + std::vector> contexts; + + auto begin_entry = cb_bcb_map_.find(original_command_buffer); + if (begin_entry == cb_bcb_map_.end()) { - return nullptr; + return contexts; } - auto context_entry = draw_call_contexts.find(begin_entry->second); - if (context_entry == draw_call_contexts.end()) + const decode::Index bcb_index = begin_entry->second; + for (auto it = draw_call_contexts_.begin(); it != draw_call_contexts_.end(); ++it) { - return nullptr; + if (it->first.first == bcb_index) + { + contexts.push_back(it->second); + } } - DrawCallsDumpingContext* context = &context_entry->second; - return context; + return contexts; } -const DrawCallsDumpingContext* -VulkanReplayDumpResourcesBase::FindDrawCallCommandBufferContext(VkCommandBuffer original_command_buffer) const +std::shared_ptr +VulkanReplayDumpResourcesBase::FindDrawCallContext(VkCommandBuffer original_command_buffer, decode::Index qs_index) { - auto begin_entry = cmd_buf_begin_map_.find(original_command_buffer); - if (begin_entry == cmd_buf_begin_map_.end()) + auto begin_entry = cb_bcb_map_.find(original_command_buffer); + if (begin_entry == cb_bcb_map_.end()) { return nullptr; } - const auto context_entry = draw_call_contexts.find(begin_entry->second); - if (context_entry == draw_call_contexts.end()) + const decode::Index bcb_index = begin_entry->second; + for (auto it = draw_call_contexts_.begin(); it != draw_call_contexts_.end(); ++it) { - return nullptr; + if (it->first.first == bcb_index && it->first.second == qs_index) + { + return it->second; + } } - const DrawCallsDumpingContext* context = &context_entry->second; - return context; + return nullptr; } -DrawCallsDumpingContext* VulkanReplayDumpResourcesBase::FindDrawCallCommandBufferContext(uint64_t bcb_id) +std::vector> +VulkanReplayDumpResourcesBase::FindDrawCallDumpingContexts(uint64_t bcb_id) { - auto context_entry = draw_call_contexts.find(bcb_id); - if (context_entry == draw_call_contexts.end()) + std::vector> contexts; + + for (auto it = draw_call_contexts_.begin(); it != draw_call_contexts_.end(); ++it) { - return nullptr; + if (it->first.first == bcb_id) + { + contexts.push_back(it->second); + } } - DrawCallsDumpingContext* context = &context_entry->second; - return context; + return contexts; } -const DrawCallsDumpingContext* VulkanReplayDumpResourcesBase::FindDrawCallCommandBufferContext(uint64_t bcb_id) const +std::vector> +VulkanReplayDumpResourcesBase::FindDispatchTraceRaysContexts(uint64_t bcb_id) { - const auto context_entry = draw_call_contexts.find(bcb_id); - if (context_entry == draw_call_contexts.end()) + std::vector> contexts; + + for (auto it = dispatch_ray_contexts_.begin(); it != dispatch_ray_contexts_.end(); ++it) { - return nullptr; + if (it->first.first == bcb_id) + { + contexts.push_back(it->second); + } } - const DrawCallsDumpingContext* context = &context_entry->second; - return context; + return contexts; } -DispatchTraceRaysDumpingContext* VulkanReplayDumpResourcesBase::FindDispatchRaysCommandBufferContext(uint64_t bcb_id) +std::vector> +VulkanReplayDumpResourcesBase::FindDispatchTraceRaysContexts(VkCommandBuffer original_command_buffer) { - auto context_entry = dispatch_ray_contexts.find(bcb_id); - if (context_entry == dispatch_ray_contexts.end()) + std::vector> contexts; + + auto bcb_entry = cb_bcb_map_.find(original_command_buffer); + if (bcb_entry == cb_bcb_map_.end()) { - return nullptr; + return contexts; + } + + const decode::Index bcb_index = bcb_entry->second; + for (auto it = dispatch_ray_contexts_.begin(); it != dispatch_ray_contexts_.end(); ++it) + { + if (it->first.first == bcb_index) + { + contexts.push_back(it->second); + } } - DispatchTraceRaysDumpingContext* context = &context_entry->second; - return context; + return contexts; } -const DispatchTraceRaysDumpingContext* -VulkanReplayDumpResourcesBase::FindDispatchRaysCommandBufferContext(uint64_t bcb_id) const +std::shared_ptr +VulkanReplayDumpResourcesBase::FindDispatchTraceRaysContext(VkCommandBuffer original_command_buffer, + decode::Index qs_index) { - const auto context_entry = dispatch_ray_contexts.find(bcb_id); - if (context_entry == dispatch_ray_contexts.end()) + auto bcb_entry = cb_bcb_map_.find(original_command_buffer); + if (bcb_entry == cb_bcb_map_.end()) { return nullptr; } - const DispatchTraceRaysDumpingContext* context = &context_entry->second; - return context; + const decode::Index bcb_index = bcb_entry->second; + for (auto it = dispatch_ray_contexts_.begin(); it != dispatch_ray_contexts_.end(); ++it) + { + if (it->first.first == bcb_index && it->first.second == qs_index) + { + return it->second; + } + } + + return nullptr; } -DispatchTraceRaysDumpingContext* -VulkanReplayDumpResourcesBase::FindDispatchRaysCommandBufferContext(VkCommandBuffer original_command_buffer) +std::vector> +VulkanReplayDumpResourcesBase::FindTransferContextCmdIndex(uint64_t cmd_index) { - auto bcb_entry = cmd_buf_begin_map_.find(original_command_buffer); - if (bcb_entry == cmd_buf_begin_map_.end()) + std::vector> transf_contexts; + for (auto& transf_context : transfer_contexts_) { - return nullptr; + const CommandIndices& cmd_indices = transf_context.second->GetCommandIndices(); + if (std::find(cmd_indices.begin(), cmd_indices.end(), cmd_index) != cmd_indices.end()) + { + transf_contexts.push_back(transf_context.second); + } } - auto dr_context_entry = dispatch_ray_contexts.find(bcb_entry->second); - if (dr_context_entry == dispatch_ray_contexts.end()) + return transf_contexts; +} + +std::vector> +VulkanReplayDumpResourcesBase::FindTransferContextBcbIndex(uint64_t bcb_index) const +{ + std::vector> transf_contexts; + + for (auto& transf_context : transfer_contexts_) { - return nullptr; + if (transf_context.first.first == bcb_index) + { + transf_contexts.push_back(transf_context.second); + } } - DispatchTraceRaysDumpingContext* context = &dr_context_entry->second; - return context; + return transf_contexts; } -const DispatchTraceRaysDumpingContext* -VulkanReplayDumpResourcesBase::FindDispatchRaysCommandBufferContext(VkCommandBuffer original_command_buffer) const +std::shared_ptr VulkanReplayDumpResourcesBase::FindTransferContextBcbQsIndex(uint64_t bcb_index, + uint64_t qs_index) { - const auto bcb_entry = cmd_buf_begin_map_.find(original_command_buffer); - if (bcb_entry == cmd_buf_begin_map_.end()) + for (auto& transf_context : transfer_contexts_) { - return nullptr; + if (transf_context.first.first == bcb_index && transf_context.first.second == qs_index) + { + return transf_context.second; + } } - const auto dr_context_entry = dispatch_ray_contexts.find(bcb_entry->second); - if (dr_context_entry == dispatch_ray_contexts.end()) + return nullptr; +} + +std::shared_ptr +VulkanReplayDumpResourcesBase::FindTransferContext(VkCommandBuffer original_command_buffer, decode::Index qs_index) +{ + auto bcb_entry = cb_bcb_map_.find(original_command_buffer); + if (bcb_entry == cb_bcb_map_.end()) { return nullptr; } - const DispatchTraceRaysDumpingContext* context = &dr_context_entry->second; - return context; + const decode::Index bcb_index = bcb_entry->second; + for (auto& transf_context : transfer_contexts_) + { + if (transf_context.first.first == bcb_index && transf_context.first.second == qs_index) + { + return transf_context.second; + } + } + + return nullptr; +} + +void VulkanReplayDumpResourcesBase::ReleaseDrawCallContexts(decode::Index qs_index) +{ + for (const auto& [qs_bcb_pair, context] : draw_call_contexts_) + { + if (qs_bcb_pair.second == qs_index) + { + --active_contexts_; + } + } +} + +void VulkanReplayDumpResourcesBase::ReleaseDispatchTraceRaysContexts(decode::Index qs_index) +{ + for (const auto& [qs_bcb_pair, context] : dispatch_ray_contexts_) + { + if (qs_bcb_pair.second == qs_index) + { + --active_contexts_; + } + } +} + +void VulkanReplayDumpResourcesBase::ReleaseTransferContexts(decode::Index qs_index) +{ + for (const auto& [qs_bcb_pair, context] : transfer_contexts_) + { + if (qs_bcb_pair.second == qs_index) + { + --active_contexts_; + } + } } -VkResult VulkanReplayDumpResourcesBase::CloneCommandBuffer(uint64_t bcb_index, +VkResult VulkanReplayDumpResourcesBase::BeginCommandBuffer(uint64_t bcb_index, VulkanCommandBufferInfo* original_command_buffer_info, const graphics::VulkanDeviceTable* device_table, const graphics::VulkanInstanceTable* inst_table, @@ -355,36 +542,40 @@ VkResult VulkanReplayDumpResourcesBase::CloneCommandBuffer(uint64_t assert(device_table); assert(inst_table); - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(bcb_index); - if (dc_context != nullptr) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(bcb_index); + for (auto dc_context : dc_contexts) { VkResult res = - dc_context->CloneCommandBuffer(original_command_buffer_info, device_table, inst_table, begin_info); + dc_context->BeginCommandBuffer(original_command_buffer_info, device_table, inst_table, begin_info); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Cloning command buffer for dumping draw calls failed (%s).", util::ToString(res).c_str()) return res; } - - cmd_buf_begin_map_[original_command_buffer_info->handle] = bcb_index; - recording_ = true; } - DispatchTraceRaysDumpingContext* dr_context = FindDispatchRaysCommandBufferContext(bcb_index); - if (dr_context != nullptr) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(bcb_index); + for (auto dr_context : dr_contexts) { VkResult res = - dr_context->CloneCommandBuffer(original_command_buffer_info, device_table, inst_table, begin_info); + dr_context->BeginCommandBuffer(original_command_buffer_info, device_table, inst_table, begin_info); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Cloning command buffer for dumping compute/ray tracing failed (%s).", util::ToString(res).c_str()) return res; } + } + + const std::vector> transf_contexts = + FindTransferContextBcbIndex(bcb_index); - cmd_buf_begin_map_[original_command_buffer_info->handle] = bcb_index; - recording_ = true; + if (!dr_contexts.empty() || !dc_contexts.empty() || !transf_contexts.empty()) + { + active_contexts_ += dr_contexts.size() + dc_contexts.size() + transf_contexts.size(); + cb_bcb_map_[original_command_buffer_info->handle] = bcb_index; } return VK_SUCCESS; @@ -398,45 +589,25 @@ void VulkanReplayDumpResourcesBase::OverrideCmdDraw(const ApiCallInfo& call_info uint32_t first_vertex, uint32_t first_instance) { - assert(IsRecording(original_command_buffer)); - - const uint64_t dc_index = call_info.index; - const bool must_dump = MustDumpDrawCall(original_command_buffer, dc_index); - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); + GFXRECON_ASSERT(IsRecording()); - // Finalize draw call command buffer before the actual draw call in order - // to handle dumping render targets before the draw call - if (dump_resources_before_ && must_dump) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { - assert(dc_context != nullptr); - dc_context->FinalizeCommandBuffer(); - UpdateRecordingStatus(original_command_buffer); + dc_context->CmdDraw( + call_info, func, original_command_buffer, vertex_count, instance_count, first_vertex, first_instance); } - if (must_dump) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - dc_context->InsertNewDrawParameters(dc_index, vertex_count, instance_count, first_vertex, first_instance); - } - - CommandBufferIterator first, last; - GetDrawCallActiveCommandBuffers(original_command_buffer, first, last); - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, vertex_count, instance_count, first_vertex, first_instance); - } - - VkCommandBuffer dr_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dr_command_buffer != VK_NULL_HANDLE) - { - func(dr_command_buffer, vertex_count, instance_count, first_vertex, first_instance); - } - - if (must_dump) - { - assert(dc_context != nullptr); - - dc_context->FinalizeCommandBuffer(); - UpdateRecordingStatus(original_command_buffer); + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, vertex_count, instance_count, first_vertex, first_instance); + } } } @@ -446,49 +617,35 @@ void VulkanReplayDumpResourcesBase::OverrideCmdDrawIndexed(const ApiCallInfo& uint32_t index_count, uint32_t instance_count, uint32_t first_index, - int32_t vertexOffset, + int32_t vertex_offset, uint32_t first_instance) { - assert(IsRecording(original_command_buffer)); - - const uint64_t dc_index = call_info.index; - const bool must_dump = MustDumpDrawCall(original_command_buffer, dc_index); - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - - // Finalize draw call command buffer before the actual draw call in order - // to handle dumping render targets before the draw call - if (dump_resources_before_ && must_dump) - { - assert(dc_context != nullptr); - dc_context->FinalizeCommandBuffer(); - UpdateRecordingStatus(original_command_buffer); - } + GFXRECON_ASSERT(IsRecording()); - // Copy vertex attribute info - if (dc_context != nullptr && must_dump) - { - dc_context->InsertNewDrawIndexedParameters( - dc_index, index_count, instance_count, first_index, vertexOffset, first_instance); - } - - CommandBufferIterator first, last; - GetDrawCallActiveCommandBuffers(original_command_buffer, first, last); - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, index_count, instance_count, first_index, vertexOffset, first_instance); - } + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); - VkCommandBuffer dr_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dr_command_buffer != VK_NULL_HANDLE) + for (auto dc_context : dc_contexts) { - func(dr_command_buffer, index_count, instance_count, first_index, vertexOffset, first_instance); + dc_context->CmdDrawIndexed(call_info, + func, + original_command_buffer, + index_count, + instance_count, + first_index, + vertex_offset, + first_instance); } - if (must_dump) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - assert(dc_context != nullptr); - dc_context->FinalizeCommandBuffer(); - UpdateRecordingStatus(original_command_buffer); + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, index_count, instance_count, first_index, vertex_offset, first_instance); + } } } @@ -500,45 +657,25 @@ void VulkanReplayDumpResourcesBase::OverrideCmdDrawIndirect(const ApiCallInfo& uint32_t draw_count, uint32_t stride) { - assert(IsRecording(original_command_buffer)); - - const uint64_t dc_index = call_info.index; - const bool must_dump = MustDumpDrawCall(original_command_buffer, dc_index); - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); + GFXRECON_ASSERT(IsRecording()); - // Finalize draw call command buffer before the actual draw call in order - // to handle dumping render targets before the draw call - if (dump_resources_before_ && must_dump) - { - assert(dc_context != nullptr); - dc_context->FinalizeCommandBuffer(); - UpdateRecordingStatus(original_command_buffer); - } - - // Copy vertex attribute info - if (dc_context != nullptr && must_dump) - { - dc_context->InsertNewDrawIndirectParameters(dc_index, buffer_info, offset, draw_count, stride); - } - - CommandBufferIterator first, last; - GetDrawCallActiveCommandBuffers(original_command_buffer, first, last); - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, buffer_info->handle, offset, draw_count, stride); - } + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); - VkCommandBuffer dr_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dr_command_buffer != VK_NULL_HANDLE) + for (auto dc_context : dc_contexts) { - func(dr_command_buffer, buffer_info->handle, offset, draw_count, stride); + dc_context->CmdDrawIndirect(call_info, func, original_command_buffer, buffer_info, offset, draw_count, stride); } - if (must_dump) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - assert(dc_context != nullptr); - dc_context->FinalizeCommandBuffer(); - UpdateRecordingStatus(original_command_buffer); + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, buffer_info->handle, offset, draw_count, stride); + } } } @@ -550,44 +687,26 @@ void VulkanReplayDumpResourcesBase::OverrideCmdDrawIndexedIndirect(const ApiCall uint32_t draw_count, uint32_t stride) { - assert(IsRecording(original_command_buffer)); - - const uint64_t dc_index = call_info.index; - const bool must_dump = MustDumpDrawCall(original_command_buffer, dc_index); - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - - // Finalize draw call command buffer before the actual draw call in order - // to handle dumping render targets before the draw call - if (dump_resources_before_ && must_dump) - { - assert(dc_context != nullptr); - dc_context->FinalizeCommandBuffer(); - UpdateRecordingStatus(original_command_buffer); - } - - if (dc_context != nullptr && must_dump) - { - dc_context->InsertNewDrawIndexedIndirectParameters(dc_index, buffer_info, offset, draw_count, stride); - } + GFXRECON_ASSERT(IsRecording()); - CommandBufferIterator first, last; - GetDrawCallActiveCommandBuffers(original_command_buffer, first, last); - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, buffer_info->handle, offset, draw_count, stride); - } + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); - VkCommandBuffer dr_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dr_command_buffer != VK_NULL_HANDLE) + for (auto dc_context : dc_contexts) { - func(dr_command_buffer, buffer_info->handle, offset, draw_count, stride); + dc_context->CmdDrawIndexedIndirect( + call_info, func, original_command_buffer, buffer_info, offset, draw_count, stride); } - if (must_dump) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - assert(dc_context != nullptr); - dc_context->FinalizeCommandBuffer(); - UpdateRecordingStatus(original_command_buffer); + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, buffer_info->handle, offset, draw_count, stride); + } } } @@ -602,57 +721,39 @@ void VulkanReplayDumpResourcesBase::HandleCmdDrawIndirectCount(const ApiCallInfo uint32_t stride, DrawCallsDumpingContext::DrawCallType drawcall_type) { - assert(IsRecording(original_command_buffer)); - - const uint64_t dc_index = call_info.index; - const bool must_dump = MustDumpDrawCall(original_command_buffer, dc_index); - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - - // Finalize draw call command buffer before the actual draw call in order - // to handle dumping render targets before the draw call - if (dump_resources_before_ && must_dump) - { - assert(dc_context != nullptr); - dc_context->FinalizeCommandBuffer(); - UpdateRecordingStatus(original_command_buffer); - } - - if (dc_context != nullptr && must_dump) - { - dc_context->InsertNewIndirectCountParameters(dc_index, - buffer_info, - offset, - count_buffer_info, - count_buffer_offset, - max_draw_count, - stride, - drawcall_type); - } - - CommandBufferIterator first, last; - GetDrawCallActiveCommandBuffers(original_command_buffer, first, last); - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, buffer_info->handle, offset, count_buffer_info->handle, count_buffer_offset, max_draw_count, stride); - } - - VkCommandBuffer dr_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dr_command_buffer != VK_NULL_HANDLE) - { - func(dr_command_buffer, - buffer_info->handle, - offset, - count_buffer_info->handle, - count_buffer_offset, - max_draw_count, - stride); - } - - if (must_dump) - { - assert(dc_context != nullptr); - dc_context->FinalizeCommandBuffer(); - UpdateRecordingStatus(original_command_buffer); + GFXRECON_ASSERT(IsRecording()); + + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) + { + dc_context->CmdDrawIndirectCount(call_info, + func, + original_command_buffer, + buffer_info, + offset, + count_buffer_info, + count_buffer_offset, + max_draw_count, + stride, + drawcall_type); + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, + buffer_info->handle, + offset, + count_buffer_info->handle, + count_buffer_offset, + max_draw_count, + stride); + } } } @@ -668,57 +769,39 @@ void VulkanReplayDumpResourcesBase::HandleCmdDrawIndexedIndirectCount( uint32_t stride, DrawCallsDumpingContext::DrawCallType drawcall_type) { - assert(IsRecording(original_command_buffer)); - - const uint64_t dc_index = call_info.index; - const bool must_dump = MustDumpDrawCall(original_command_buffer, dc_index); - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - - // Finalize draw call command buffer before the actual draw call in order - // to handle dumping render targets before the draw call - if (dump_resources_before_ && must_dump) - { - assert(dc_context != nullptr); - dc_context->FinalizeCommandBuffer(); - UpdateRecordingStatus(original_command_buffer); - } - - if (dc_context != nullptr && must_dump) - { - dc_context->InsertNewDrawIndexedIndirectCountParameters(dc_index, - buffer_info, - offset, - count_buffer_info, - count_buffer_offset, - max_draw_count, - stride, - drawcall_type); - } - - CommandBufferIterator first, last; - GetDrawCallActiveCommandBuffers(original_command_buffer, first, last); - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, buffer_info->handle, offset, count_buffer_info->handle, count_buffer_offset, max_draw_count, stride); - } - - VkCommandBuffer dr_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dr_command_buffer != VK_NULL_HANDLE) - { - func(dr_command_buffer, - buffer_info->handle, - offset, - count_buffer_info->handle, - count_buffer_offset, - max_draw_count, - stride); - } - - if (must_dump) - { - assert(dc_context != nullptr); - dc_context->FinalizeCommandBuffer(); - UpdateRecordingStatus(original_command_buffer); + GFXRECON_ASSERT(IsRecording()); + + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) + { + dc_context->CmdDrawIndexedIndirectCount(call_info, + func, + original_command_buffer, + buffer_info, + offset, + count_buffer_info, + count_buffer_offset, + max_draw_count, + stride, + drawcall_type); + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, + buffer_info->handle, + offset, + count_buffer_info->handle, + count_buffer_offset, + max_draw_count, + stride); + } } } @@ -729,56 +812,65 @@ void VulkanReplayDumpResourcesBase::OverrideCmdBeginRenderPass( StructPointerDecoder* pRenderPassBegin, VkSubpassContents contents) { - assert(IsRecording(original_command_buffer)); - - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - if (dc_context != nullptr && dc_context->ShouldHandleRenderPass(call_info.index)) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { - const auto render_pass_info_meta = pRenderPassBegin->GetMetaStructPointer(); - auto framebuffer_id = render_pass_info_meta->framebuffer; - auto render_pass_id = render_pass_info_meta->renderPass; + if (dc_context->ShouldHandleRenderPass(call_info.index)) + { + const auto render_pass_info_meta = pRenderPassBegin->GetMetaStructPointer(); + auto framebuffer_id = render_pass_info_meta->framebuffer; + auto render_pass_id = render_pass_info_meta->renderPass; - const VulkanFramebufferInfo* framebuffer_info = object_info_table_->GetVkFramebufferInfo(framebuffer_id); - assert(framebuffer_info); + const VulkanFramebufferInfo* framebuffer_info = object_info_table_->GetVkFramebufferInfo(framebuffer_id); + assert(framebuffer_info); - VulkanRenderPassInfo* render_pass_info = object_info_table_->GetVkRenderPassInfo(render_pass_id); - assert(render_pass_info); + VulkanRenderPassInfo* render_pass_info = object_info_table_->GetVkRenderPassInfo(render_pass_id); + assert(render_pass_info); - // The attachments for imageless framebuffers are provided in the pNext chain of vkCmdBeginRenderPass - if ((framebuffer_info->framebuffer_flags & VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT) == - VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT) - { - const auto* attachment_begin_info = GetPNextMetaStruct( - pRenderPassBegin->GetMetaStructPointer()->pNext); - GFXRECON_ASSERT(attachment_begin_info); + // The attachments for imageless framebuffers are provided in the pNext chain of vkCmdBeginRenderPass + if ((framebuffer_info->framebuffer_flags & VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT) == + VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT) + { + const auto* attachment_begin_info = GetPNextMetaStruct( + pRenderPassBegin->GetMetaStructPointer()->pNext); + GFXRECON_ASSERT(attachment_begin_info); - uint32_t num_attachments = attachment_begin_info->pAttachments.GetLength(); - const format::HandleId* handle_ids = attachment_begin_info->pAttachments.GetPointer(); + uint32_t num_attachments = attachment_begin_info->pAttachments.GetLength(); + const format::HandleId* handle_ids = attachment_begin_info->pAttachments.GetPointer(); - GFXRECON_ASSERT(num_attachments == render_pass_info->attachment_description_final_layouts.size()); - render_pass_info->begin_renderpass_override_attachments.assign(handle_ids, handle_ids + num_attachments); - } + GFXRECON_ASSERT(num_attachments == render_pass_info->attachment_description_final_layouts.size()); + render_pass_info->begin_renderpass_override_attachments.assign(handle_ids, + handle_ids + num_attachments); + } - // Do not record vkCmdBeginRenderPass commands in current DrawCall context command buffers. - // It will be handled by DrawCallsDumpingContext::BeginRenderPass - const auto* renderpass_begin_info = pRenderPassBegin->GetPointer(); - VkResult res = dc_context->BeginRenderPass(render_pass_info, framebuffer_info, renderpass_begin_info, contents); - assert(res == VK_SUCCESS); - } - else if (dc_context != nullptr) - { - CommandBufferIterator first, last; - dc_context->GetDrawCallActiveCommandBuffers(first, last); - for (CommandBufferIterator it = first; it < last; ++it) + // Do not record vkCmdBeginRenderPass commands in current DrawCall context command buffers. + // It will be handled by DrawCallsDumpingContext::BeginRenderPass + const auto* renderpass_begin_info = pRenderPassBegin->GetPointer(); + VkResult res = + dc_context->BeginRenderPass(render_pass_info, framebuffer_info, renderpass_begin_info, contents); + assert(res == VK_SUCCESS); + } + else { - func(*it, pRenderPassBegin->GetPointer(), contents); + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pRenderPassBegin->GetPointer(), contents); + } } } - VkCommandBuffer dr_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dr_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - func(dr_command_buffer, pRenderPassBegin->GetPointer(), contents); + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, pRenderPassBegin->GetPointer(), contents); + } } } @@ -789,58 +881,68 @@ void VulkanReplayDumpResourcesBase::OverrideCmdBeginRenderPass2( StructPointerDecoder* pRenderPassBegin, StructPointerDecoder* pSubpassBeginInfo) { - assert(IsRecording(original_command_buffer)); + GFXRECON_ASSERT(IsRecording()); - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - if (dc_context != nullptr && dc_context->ShouldHandleRenderPass(call_info.index)) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { - const auto render_pass_info_meta = pRenderPassBegin->GetMetaStructPointer(); - auto framebuffer_id = render_pass_info_meta->framebuffer; - auto render_pass_id = render_pass_info_meta->renderPass; + if (dc_context->ShouldHandleRenderPass(call_info.index)) + { + const auto render_pass_info_meta = pRenderPassBegin->GetMetaStructPointer(); + auto framebuffer_id = render_pass_info_meta->framebuffer; + auto render_pass_id = render_pass_info_meta->renderPass; - const VulkanFramebufferInfo* framebuffer_info = object_info_table_->GetVkFramebufferInfo(framebuffer_id); - assert(framebuffer_info); + const VulkanFramebufferInfo* framebuffer_info = object_info_table_->GetVkFramebufferInfo(framebuffer_id); + assert(framebuffer_info); - VulkanRenderPassInfo* render_pass_info = object_info_table_->GetVkRenderPassInfo(render_pass_id); - assert(render_pass_info); + VulkanRenderPassInfo* render_pass_info = object_info_table_->GetVkRenderPassInfo(render_pass_id); + assert(render_pass_info); - if ((framebuffer_info->framebuffer_flags & VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT) == - VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT) - { - // The attachments for imageless framebuffers are provided in the pNext chain of vkCmdBeginRenderPass - const auto* attachment_begin_info = GetPNextMetaStruct( - pRenderPassBegin->GetMetaStructPointer()->pNext); - GFXRECON_ASSERT(attachment_begin_info); + if ((framebuffer_info->framebuffer_flags & VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT) == + VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT) + { + // The attachments for imageless framebuffers are provided in the pNext chain of vkCmdBeginRenderPass + const auto* attachment_begin_info = GetPNextMetaStruct( + pRenderPassBegin->GetMetaStructPointer()->pNext); + GFXRECON_ASSERT(attachment_begin_info); - uint32_t num_attachments = attachment_begin_info->pAttachments.GetLength(); - const format::HandleId* handle_ids = attachment_begin_info->pAttachments.GetPointer(); + uint32_t num_attachments = attachment_begin_info->pAttachments.GetLength(); + const format::HandleId* handle_ids = attachment_begin_info->pAttachments.GetPointer(); - GFXRECON_ASSERT(num_attachments == render_pass_info->attachment_description_final_layouts.size()); - render_pass_info->begin_renderpass_override_attachments.assign(handle_ids, handle_ids + num_attachments); - } + GFXRECON_ASSERT(num_attachments == render_pass_info->attachment_description_final_layouts.size()); + render_pass_info->begin_renderpass_override_attachments.assign(handle_ids, + handle_ids + num_attachments); + } - // Do not record vkCmdBeginRenderPass commands in current DrawCall context command buffers. - // It will be handled by DrawCallsDumpingContext::BeginRenderPass - const auto* renderpass_begin_info = pRenderPassBegin->GetPointer(); - VkResult res = dc_context->BeginRenderPass( - render_pass_info, framebuffer_info, renderpass_begin_info, pSubpassBeginInfo->GetPointer()->contents); + // Do not record vkCmdBeginRenderPass commands in current DrawCall context command buffers. + // It will be handled by DrawCallsDumpingContext::BeginRenderPass + const auto* renderpass_begin_info = pRenderPassBegin->GetPointer(); + VkResult res = dc_context->BeginRenderPass( + render_pass_info, framebuffer_info, renderpass_begin_info, pSubpassBeginInfo->GetPointer()->contents); - assert(res == VK_SUCCESS); - } - else if (dc_context != nullptr) - { - CommandBufferIterator first, last; - dc_context->GetDrawCallActiveCommandBuffers(first, last); - for (CommandBufferIterator it = first; it < last; ++it) + assert(res == VK_SUCCESS); + } + else { - func(*it, pRenderPassBegin->GetPointer(), pSubpassBeginInfo->GetPointer()); + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pRenderPassBegin->GetPointer(), pSubpassBeginInfo->GetPointer()); + } } } - VkCommandBuffer dr_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dr_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - func(dr_command_buffer, pRenderPassBegin->GetPointer(), pSubpassBeginInfo->GetPointer()); + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, pRenderPassBegin->GetPointer(), pSubpassBeginInfo->GetPointer()); + } } } @@ -850,29 +952,38 @@ void VulkanReplayDumpResourcesBase::OverrideCmdNextSubpass(const ApiCallInfo& VkSubpassContents contents) { assert(original_command_buffer != VK_NULL_HANDLE); - assert(IsRecording(original_command_buffer)); + GFXRECON_ASSERT(IsRecording()); // Do not record NextSubpass commands in current DrawCall context command buffers. // It will be handled by DrawCallsDumpingContext::NextSubpass - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - if (dc_context != nullptr && dc_context->ShouldHandleRenderPass(call_info.index)) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { - dc_context->NextSubpass(contents); - } - else if (dc_context != nullptr) - { - CommandBufferIterator first, last; - dc_context->GetDrawCallActiveCommandBuffers(first, last); - for (CommandBufferIterator it = first; it < last; ++it) + if (dc_context->ShouldHandleRenderPass(call_info.index)) + { + dc_context->NextSubpass(contents); + } + else { - func(*it, contents); + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, contents); + } } } - VkCommandBuffer dr_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dr_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - func(dr_command_buffer, contents); + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, contents); + } } } @@ -884,29 +995,39 @@ void VulkanReplayDumpResourcesBase::OverrideCmdNextSubpass2( StructPointerDecoder* pSubpassEndInfo) { assert(original_command_buffer != VK_NULL_HANDLE); - assert(IsRecording(original_command_buffer)); + GFXRECON_ASSERT(IsRecording()); - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - if (dc_context != nullptr && dc_context->ShouldHandleRenderPass(call_info.index)) - { - // Do not record NextSubpass commands in current DrawCall context command buffers. - // It will be handled by DrawCallsDumpingContext::NextSubpass - dc_context->NextSubpass(pSubpassBeginInfo->GetPointer()->contents); - } - else if (dc_context != nullptr) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + + for (auto dc_context : dc_contexts) { - CommandBufferIterator first, last; - dc_context->GetDrawCallActiveCommandBuffers(first, last); - for (CommandBufferIterator it = first; it < last; ++it) + if (dc_context->ShouldHandleRenderPass(call_info.index)) { - func(*it, pSubpassBeginInfo->GetPointer(), pSubpassEndInfo->GetPointer()); + // Do not record NextSubpass commands in current DrawCall context command buffers. + // It will be handled by DrawCallsDumpingContext::NextSubpass + dc_context->NextSubpass(pSubpassBeginInfo->GetPointer()->contents); + } + else + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pSubpassBeginInfo->GetPointer(), pSubpassEndInfo->GetPointer()); + } } } - VkCommandBuffer dr_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dr_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - func(dr_command_buffer, pSubpassBeginInfo->GetPointer(), pSubpassEndInfo->GetPointer()); + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, pSubpassBeginInfo->GetPointer(), pSubpassEndInfo->GetPointer()); + } } } @@ -914,29 +1035,38 @@ void VulkanReplayDumpResourcesBase::OverrideCmdEndRenderPass(const ApiCallInfo& PFN_vkCmdEndRenderPass func, VkCommandBuffer original_command_buffer) { - assert(IsRecording(original_command_buffer)); + GFXRECON_ASSERT(IsRecording()); - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - if (dc_context != nullptr && dc_context->ShouldHandleRenderPass(call_info.index)) - { - // Do not record EndRenderPass commands in current DrawCall context command buffers. - // It will be handled by DrawCallsDumpingContext::EndRenderPass - dc_context->EndRenderPass(); - } - else if (dc_context != nullptr) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { - CommandBufferIterator first, last; - dc_context->GetDrawCallActiveCommandBuffers(first, last); - for (CommandBufferIterator it = first; it < last; ++it) + if (dc_context->ShouldHandleRenderPass(call_info.index)) { - func(*it); + // Do not record EndRenderPass commands in current DrawCall context command buffers. + // It will be handled by DrawCallsDumpingContext::EndRenderPass + dc_context->EndRenderPass(); + } + else + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it); + } } } - VkCommandBuffer dr_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dr_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - func(dr_command_buffer); + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer); + } } } @@ -946,29 +1076,38 @@ void VulkanReplayDumpResourcesBase::OverrideCmdEndRenderPass2( VkCommandBuffer original_command_buffer, StructPointerDecoder* pSubpassEndInfo) { - assert(IsRecording(original_command_buffer)); + GFXRECON_ASSERT(IsRecording()); - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - if (dc_context != nullptr && dc_context->ShouldHandleRenderPass(call_info.index)) - { - // Do not record EndRenderPass commands in current DrawCall context command buffers. - // It will be handled by DrawCallsDumpingContext::EndRenderPass - dc_context->EndRenderPass(); - } - else if (dc_context != nullptr) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { - CommandBufferIterator first, last; - dc_context->GetDrawCallActiveCommandBuffers(first, last); - for (CommandBufferIterator it = first; it < last; ++it) + if (dc_context->ShouldHandleRenderPass(call_info.index)) + { + // Do not record EndRenderPass commands in current DrawCall context command buffers. + // It will be handled by DrawCallsDumpingContext::EndRenderPass + dc_context->EndRenderPass(); + } + else { - func(*it, pSubpassEndInfo->GetPointer()); + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pSubpassEndInfo->GetPointer()); + } } } - VkCommandBuffer dr_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dr_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - func(dr_command_buffer, pSubpassEndInfo->GetPointer()); + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, pSubpassEndInfo->GetPointer()); + } } } @@ -979,29 +1118,33 @@ void VulkanReplayDumpResourcesBase::OverrideCmdBindPipeline(const ApiCallInfo& const VulkanPipelineInfo* pipeline) { assert(pipeline); - assert(IsRecording(original_command_buffer)); + GFXRECON_ASSERT(IsRecording()); - CommandBufferIterator first, last; - if (GetDrawCallActiveCommandBuffers(original_command_buffer, first, last)) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { + dc_context->BindPipeline(pipelineBindPoint, pipeline); + + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { func(*it, pipelineBindPoint, pipeline->handle); } - - DrawCallsDumpingContext* context = FindDrawCallCommandBufferContext(original_command_buffer); - assert(context); - context->BindPipeline(pipelineBindPoint, pipeline); } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pipelineBindPoint, pipeline->handle); + dr_context->BindPipeline(pipelineBindPoint, pipeline); - DispatchTraceRaysDumpingContext* context = FindDispatchRaysCommandBufferContext(original_command_buffer); - GFXRECON_ASSERT(context != nullptr); - context->BindPipeline(pipelineBindPoint, pipeline); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pipelineBindPoint, pipeline->handle); + } } } @@ -1016,7 +1159,7 @@ void VulkanReplayDumpResourcesBase::OverrideCmdBindDescriptorSets(const ApiCallI uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) { - assert(IsRecording(original_command_buffer)); + GFXRECON_ASSERT(IsRecording()); assert(descriptor_sets_ids); std::vector desc_set_handles(descriptor_sets_count, VK_NULL_HANDLE); @@ -1030,18 +1173,34 @@ void VulkanReplayDumpResourcesBase::OverrideCmdBindDescriptorSets(const ApiCallI desc_set_handles[i] = (desc_set_info != nullptr) ? desc_set_info->handle : VK_NULL_HANDLE; } - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - if (dc_context) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { dc_context->BindDescriptorSets( pipeline_bind_point, first_set, desc_set_infos, dynamicOffsetCount, pDynamicOffsets); + + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, + pipeline_bind_point, + layout_info->handle, + first_set, + descriptor_sets_count, + desc_set_handles.data(), + dynamicOffsetCount, + pDynamicOffsets); + } } - CommandBufferIterator first, last; - GetDrawCallActiveCommandBuffers(original_command_buffer, first, last); - for (CommandBufferIterator it = first; it < last; ++it) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - func(*it, + VkCommandBuffer dr_cmd_buf = dr_context->GetDispatchRaysCommandBuffer(); + func(dr_cmd_buf, pipeline_bind_point, layout_info->handle, first_set, @@ -1049,26 +1208,70 @@ void VulkanReplayDumpResourcesBase::OverrideCmdBindDescriptorSets(const ApiCallI desc_set_handles.data(), dynamicOffsetCount, pDynamicOffsets); + + dr_context->BindDescriptorSets( + pipeline_bind_point, first_set, desc_set_infos, dynamicOffsetCount, pDynamicOffsets); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdBindDescriptorSets2( + const ApiCallInfo& call_info, + PFN_vkCmdBindDescriptorSets2 func, + VkCommandBuffer original_command_buffer, + StructPointerDecoder* pBindDescriptorSetsInfo) +{ + const auto bind_meta = pBindDescriptorSetsInfo->GetMetaStructPointer(); + + std::vector bind_points = + ShaderStageFlagsToPipelineBindPoints(bind_meta->decoded_value->stageFlags); + + const auto layout_info = object_info_table_->GetVkPipelineLayoutInfo(bind_meta->layout); + + std::vector desc_set_infos(bind_meta->decoded_value->descriptorSetCount, nullptr); + + for (uint32_t i = 0; i < bind_meta->decoded_value->descriptorSetCount; ++i) + { + const VulkanDescriptorSetInfo* desc_set_info = + object_info_table_->GetVkDescriptorSetInfo(bind_meta->pDescriptorSets.GetPointer()[i]); + desc_set_infos[i] = desc_set_info; } - VkCommandBuffer dr_cmd_buf = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dr_cmd_buf != VK_NULL_HANDLE) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { - func(dr_cmd_buf, - pipeline_bind_point, - layout_info->handle, - first_set, - descriptor_sets_count, - desc_set_handles.data(), - dynamicOffsetCount, - pDynamicOffsets); + for (const auto bind_point : bind_points) + { + dc_context->BindDescriptorSets(bind_point, + bind_meta->decoded_value->firstSet, + desc_set_infos, + bind_meta->decoded_value->dynamicOffsetCount, + bind_meta->decoded_value->pDynamicOffsets); + } + + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pBindDescriptorSetsInfo->GetPointer()); + } } - DispatchTraceRaysDumpingContext* dr_context = FindDispatchRaysCommandBufferContext(original_command_buffer); - if (dr_context) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - dr_context->BindDescriptorSets( - pipeline_bind_point, first_set, desc_set_infos, dynamicOffsetCount, pDynamicOffsets); + VkCommandBuffer dr_cmd_buf = dr_context->GetDispatchRaysCommandBuffer(); + func(dr_cmd_buf, pBindDescriptorSetsInfo->GetPointer()); + + for (const auto bind_point : bind_points) + { + dr_context->BindDescriptorSets(bind_point, + bind_meta->decoded_value->firstSet, + desc_set_infos, + bind_meta->decoded_value->dynamicOffsetCount, + bind_meta->decoded_value->pDynamicOffsets); + } } } @@ -1082,26 +1285,29 @@ void VulkanReplayDumpResourcesBase::OverrideCmdBindIndexBuffer(const ApiCallInfo // buffer can be VK_NULL_HANDLE/NULL VkBuffer buffer_handle = buffer != nullptr ? buffer->handle : VK_NULL_HANDLE; - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(original_command_buffer, first, last); - if (found) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { + dc_context->BindIndexBuffer(call_info.index, buffer, offset, indexType); + + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { func(*it, buffer_handle, offset, indexType); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, buffer_handle, offset, indexType); - } - - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - if (dc_context != nullptr) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - dc_context->BindIndexBuffer(call_info.index, buffer, offset, indexType); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, buffer_handle, offset, indexType); + } } } @@ -1116,26 +1322,29 @@ void VulkanReplayDumpResourcesBase::OverrideCmdBindIndexBuffer2KHR(const ApiCall // buffer can be VK_NULL_HANDLE/NULL VkBuffer buffer_handle = buffer != nullptr ? buffer->handle : VK_NULL_HANDLE; - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(original_command_buffer, first, last); - if (found) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { func(*it, buffer_handle, offset, size, indexType); } - } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, buffer_handle, offset, size, indexType); + dc_context->BindIndexBuffer(call_info.index, buffer, offset, indexType, size); } - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - if (dc_context != nullptr) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - dc_context->BindIndexBuffer(call_info.index, buffer, offset, indexType, size); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, buffer_handle, offset, size, indexType); + } } } @@ -1147,42 +1356,41 @@ void VulkanReplayDumpResourcesBase::OverrideCmdBindVertexBuffers(const ApiCallIn const format::HandleId* buffer_ids, const VkDeviceSize* pOffsets) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(original_command_buffer, first, last); - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - std::vector buffer_infos(bindingCount, nullptr); std::vector buffer_handles(bindingCount, VK_NULL_HANDLE); - if (found || dispatch_rays_command_buffer != VK_NULL_HANDLE) + for (uint32_t i = 0; i < bindingCount; ++i) { - for (uint32_t i = 0; i < bindingCount; ++i) - { - // Buffer can be VK_NULL_HANDLE - const VulkanBufferInfo* buffer_info = object_info_table_->GetVkBufferInfo(buffer_ids[i]); + // Buffer can be VK_NULL_HANDLE + const VulkanBufferInfo* buffer_info = object_info_table_->GetVkBufferInfo(buffer_ids[i]); - buffer_infos[i] = buffer_info; - buffer_handles[i] = buffer_info != nullptr ? buffer_info->handle : VK_NULL_HANDLE; - } + buffer_infos[i] = buffer_info; + buffer_handles[i] = buffer_info != nullptr ? buffer_info->handle : VK_NULL_HANDLE; } - if (found) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { + GFXRECON_ASSERT(buffer_infos.size() == bindingCount); + dc_context->BindVertexBuffers(call_info.index, firstBinding, buffer_infos, pOffsets); + + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { func(*it, firstBinding, bindingCount, buffer_handles.data(), pOffsets); } } - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, firstBinding, bindingCount, buffer_handles.data(), pOffsets); - } - - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - if (dc_context != nullptr && bindingCount) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - assert(buffer_infos.size() == bindingCount); - dc_context->BindVertexBuffers(call_info.index, firstBinding, buffer_infos, pOffsets); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstBinding, bindingCount, buffer_handles.data(), pOffsets); + } } } @@ -1199,9 +1407,12 @@ void VulkanReplayDumpResourcesBase::OverrideCmdSetVertexInputEXT( const VkVertexInputAttributeDescription2EXT* in_pVertexAttributeDescriptions = pVertexAttributeDescriptions->GetPointer(); - CommandBufferIterator first, last; - if (GetDrawCallActiveCommandBuffers(original_command_buffer, first, last)) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { func(*it, @@ -1211,21 +1422,25 @@ void VulkanReplayDumpResourcesBase::OverrideCmdSetVertexInputEXT( in_pVertexAttributeDescriptions); } - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); dc_context->SetVertexInput(vertexBindingDescriptionCount, in_pVertexBindingDescriptions, vertexAttributeDescriptionCount, in_pVertexAttributeDescriptions); } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, - vertexBindingDescriptionCount, - in_pVertexBindingDescriptions, - vertexAttributeDescriptionCount, - in_pVertexAttributeDescriptions); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, + vertexBindingDescriptionCount, + in_pVertexBindingDescriptions, + vertexAttributeDescriptionCount, + in_pVertexAttributeDescriptions); + } } } @@ -1267,28 +1482,24 @@ void VulkanReplayDumpResourcesBase::HandleCmdBindVertexBuffers2(const ApiCallInf const VkDeviceSize* pSizes, const VkDeviceSize* pStrides) { - CommandBufferIterator first, last; - bool dc_found = GetDrawCallActiveCommandBuffers(original_command_buffer, first, last); - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - std::vector buffer_handles(bindingCount); - if (dc_found || dispatch_rays_command_buffer != VK_NULL_HANDLE) + for (uint32_t i = 0; i < bindingCount; ++i) { - for (uint32_t i = 0; i < bindingCount; ++i) - { - const VulkanBufferInfo* buffer_info = object_info_table_->GetVkBufferInfo(pBuffers_ids[i]); - buffer_handles[i] = (buffer_info != nullptr) ? buffer_info->handle : VK_NULL_HANDLE; - } + const VulkanBufferInfo* buffer_info = object_info_table_->GetVkBufferInfo(pBuffers_ids[i]); + buffer_handles[i] = (buffer_info != nullptr) ? buffer_info->handle : VK_NULL_HANDLE; } - if (dc_found) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { func(*it, firstBinding, bindingCount, buffer_handles.data(), pOffsets, pSizes, pStrides); } - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); if (dc_context != nullptr && bindingCount) { std::vector buffer_infos(bindingCount); @@ -1304,15 +1515,21 @@ void VulkanReplayDumpResourcesBase::HandleCmdBindVertexBuffers2(const ApiCallInf } } - if (dispatch_rays_command_buffer) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, - firstBinding, - bindingCount, - buffer_handles.data(), - pOffsets, - pSizes, - pStrides); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, + firstBinding, + bindingCount, + buffer_handles.data(), + pOffsets, + pSizes, + pStrides); + } } } @@ -1323,48 +1540,26 @@ void VulkanReplayDumpResourcesBase::OverrideCmdDispatch(const ApiCallInfo& call_ uint32_t groupCountY, uint32_t groupCountZ) { - assert(IsRecording(original_command_buffer)); - - const uint64_t disp_index = call_info.index; - const bool must_dump = MustDumpDispatch(original_command_buffer, disp_index); - DispatchTraceRaysDumpingContext* dr_context = FindDispatchRaysCommandBufferContext(original_command_buffer); - - if (must_dump) - { - dr_context->InsertNewDispatchParameters(disp_index, groupCountX, groupCountY, groupCountZ); - } + GFXRECON_ASSERT(IsRecording()); - if (dump_resources_before_ && must_dump) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - assert(dr_context != nullptr); - - dr_context->CloneDispatchMutableResources(disp_index, true); - dr_context->FinalizeCommandBuffer(true); + dr_context->CmdDispatch(call_info, func, original_command_buffer, groupCountX, groupCountY, groupCountZ); } - CommandBufferIterator first, last; - if (GetDrawCallActiveCommandBuffers(original_command_buffer, first, last)) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { func(*it, groupCountX, groupCountY, groupCountZ); } } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, groupCountX, groupCountY, groupCountZ); - } - - if (must_dump) - { - assert(dr_context != nullptr); - - dr_context->CloneDispatchMutableResources(disp_index, false); - dr_context->FinalizeCommandBuffer(true); - UpdateRecordingStatus(original_command_buffer); - } } void VulkanReplayDumpResourcesBase::OverrideCmdDispatchIndirect(const ApiCallInfo& call_info, @@ -1373,48 +1568,26 @@ void VulkanReplayDumpResourcesBase::OverrideCmdDispatchIndirect(const ApiCallInf const VulkanBufferInfo* buffer_info, VkDeviceSize offset) { - assert(IsRecording(original_command_buffer)); - - const uint64_t disp_index = call_info.index; - const bool must_dump = MustDumpDispatch(original_command_buffer, disp_index); - DispatchTraceRaysDumpingContext* dr_context = FindDispatchRaysCommandBufferContext(original_command_buffer); - - if (must_dump) - { - dr_context->InsertNewDispatchParameters(disp_index, buffer_info, offset); - } + GFXRECON_ASSERT(IsRecording()); - if (dump_resources_before_ && must_dump) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - assert(dr_context != nullptr); - - dr_context->CloneDispatchMutableResources(disp_index, true); - dr_context->FinalizeCommandBuffer(true); + dr_context->CmdDispatchIndirect(call_info, func, original_command_buffer, buffer_info, offset); } - CommandBufferIterator first, last; - if (GetDrawCallActiveCommandBuffers(original_command_buffer, first, last)) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { func(*it, buffer_info->handle, offset); } } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, buffer_info->handle, offset); - } - - if (must_dump) - { - assert(dr_context != nullptr); - - dr_context->CloneDispatchMutableResources(disp_index, false); - dr_context->FinalizeCommandBuffer(true); - UpdateRecordingStatus(original_command_buffer); - } } void VulkanReplayDumpResourcesBase::OverrideCmdTraceRaysKHR( @@ -1429,42 +1602,35 @@ void VulkanReplayDumpResourcesBase::OverrideCmdTraceRaysKHR( uint32_t height, uint32_t depth) { - assert(IsRecording(original_command_buffer)); - - const uint64_t tr_index = call_info.index; - const bool must_dump = MustDumpTraceRays(original_command_buffer, tr_index); - DispatchTraceRaysDumpingContext* dr_context = FindDispatchRaysCommandBufferContext(original_command_buffer); + GFXRECON_ASSERT(IsRecording()); const VkStridedDeviceAddressRegionKHR* in_pRaygenShaderBindingTable = pRaygenShaderBindingTable->GetPointer(); const VkStridedDeviceAddressRegionKHR* in_pMissShaderBindingTable = pMissShaderBindingTable->GetPointer(); const VkStridedDeviceAddressRegionKHR* in_pHitShaderBindingTable = pHitShaderBindingTable->GetPointer(); const VkStridedDeviceAddressRegionKHR* in_pCallableShaderBindingTable = pCallableShaderBindingTable->GetPointer(); - if (must_dump) - { - assert(dr_context != nullptr); - - dr_context->InsertNewTraceRaysParameters(tr_index, - in_pRaygenShaderBindingTable, - in_pMissShaderBindingTable, - in_pHitShaderBindingTable, - in_pCallableShaderBindingTable, - width, - height, - depth); - } - - if (dump_resources_before_ && must_dump) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - assert(dr_context != nullptr); - - dr_context->CloneTraceRaysMutableResources(tr_index, true); - dr_context->FinalizeCommandBuffer(true); + dr_context->CmdTraceRaysKHR(call_info, + func, + original_command_buffer, + pRaygenShaderBindingTable, + pMissShaderBindingTable, + pHitShaderBindingTable, + pCallableShaderBindingTable, + width, + height, + depth); } - CommandBufferIterator first, last; - if (GetDrawCallActiveCommandBuffers(original_command_buffer, first, last)) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { func(*it, @@ -1477,28 +1643,6 @@ void VulkanReplayDumpResourcesBase::OverrideCmdTraceRaysKHR( depth); } } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, - in_pRaygenShaderBindingTable, - in_pMissShaderBindingTable, - in_pHitShaderBindingTable, - in_pCallableShaderBindingTable, - width, - height, - depth); - } - - if (must_dump) - { - assert(dr_context != nullptr); - - dr_context->CloneTraceRaysMutableResources(tr_index, false); - dr_context->FinalizeCommandBuffer(false); - UpdateRecordingStatus(original_command_buffer); - } } void VulkanReplayDumpResourcesBase::OverrideCmdTraceRaysIndirectKHR( @@ -1511,40 +1655,33 @@ void VulkanReplayDumpResourcesBase::OverrideCmdTraceRaysIndirectKHR( StructPointerDecoder* pCallableShaderBindingTable, VkDeviceAddress indirectDeviceAddress) { - assert(IsRecording(original_command_buffer)); - - const uint64_t tr_index = call_info.index; - const bool must_dump = MustDumpTraceRays(original_command_buffer, tr_index); - DispatchTraceRaysDumpingContext* dr_context = FindDispatchRaysCommandBufferContext(original_command_buffer); + GFXRECON_ASSERT(IsRecording()); const VkStridedDeviceAddressRegionKHR* in_pRaygenShaderBindingTable = pRaygenShaderBindingTable->GetPointer(); const VkStridedDeviceAddressRegionKHR* in_pMissShaderBindingTable = pMissShaderBindingTable->GetPointer(); const VkStridedDeviceAddressRegionKHR* in_pHitShaderBindingTable = pHitShaderBindingTable->GetPointer(); const VkStridedDeviceAddressRegionKHR* in_pCallableShaderBindingTable = pCallableShaderBindingTable->GetPointer(); - if (must_dump) - { - assert(dr_context != nullptr); - - dr_context->InsertNewTraceRaysIndirectParameters(tr_index, - in_pRaygenShaderBindingTable, - in_pMissShaderBindingTable, - in_pHitShaderBindingTable, - in_pCallableShaderBindingTable, - indirectDeviceAddress); - } - - if (dump_resources_before_ && must_dump) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - assert(dr_context != nullptr); - - dr_context->CloneTraceRaysMutableResources(tr_index, true); - dr_context->FinalizeCommandBuffer(true); + dr_context->CmdTraceRaysIndirectKHR(call_info, + func, + original_command_buffer, + pRaygenShaderBindingTable, + pMissShaderBindingTable, + pHitShaderBindingTable, + pCallableShaderBindingTable, + indirectDeviceAddress); } - CommandBufferIterator first, last; - if (GetDrawCallActiveCommandBuffers(original_command_buffer, first, last)) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_contest : dc_contexts) { + CommandBufferIterator first, last; + dc_contest->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { func(*it, @@ -1555,26 +1692,6 @@ void VulkanReplayDumpResourcesBase::OverrideCmdTraceRaysIndirectKHR( indirectDeviceAddress); } } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, - in_pRaygenShaderBindingTable, - in_pMissShaderBindingTable, - in_pHitShaderBindingTable, - in_pCallableShaderBindingTable, - indirectDeviceAddress); - } - - if (must_dump) - { - assert(dr_context != nullptr); - - dr_context->CloneTraceRaysMutableResources(tr_index, false); - dr_context->FinalizeCommandBuffer(false); - UpdateRecordingStatus(original_command_buffer); - } } void VulkanReplayDumpResourcesBase::OverrideCmdTraceRaysIndirect2KHR(const ApiCallInfo& call_info, @@ -1582,62 +1699,39 @@ void VulkanReplayDumpResourcesBase::OverrideCmdTraceRaysIndirect2KHR(const ApiCa VkCommandBuffer original_command_buffer, VkDeviceAddress indirectDeviceAddress) { - assert(IsRecording(original_command_buffer)); - - const uint64_t tr_index = call_info.index; - const bool must_dump = MustDumpTraceRays(original_command_buffer, tr_index); - DispatchTraceRaysDumpingContext* dr_context = FindDispatchRaysCommandBufferContext(original_command_buffer); + GFXRECON_ASSERT(IsRecording()); - if (must_dump) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - assert(dr_context != nullptr); - - dr_context->InsertNewTraceRaysIndirect2Parameters(tr_index, indirectDeviceAddress); - } - - if (dump_resources_before_ && must_dump) - { - assert(dr_context != nullptr); - - dr_context->CloneTraceRaysMutableResources(tr_index, true); - dr_context->FinalizeCommandBuffer(true); + dr_context->CmdTraceRaysIndirect2KHR(call_info, func, original_command_buffer, indirectDeviceAddress); } - CommandBufferIterator first, last; - if (GetDrawCallActiveCommandBuffers(original_command_buffer, first, last)) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { func(*it, indirectDeviceAddress); } } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(original_command_buffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, indirectDeviceAddress); - } - - if (must_dump) - { - assert(dr_context != nullptr); - - dr_context->CloneTraceRaysMutableResources(tr_index, false); - dr_context->FinalizeCommandBuffer(false); - UpdateRecordingStatus(original_command_buffer); - } } void VulkanReplayDumpResourcesBase::OverrideCmdBeginRendering( const ApiCallInfo& call_info, PFN_vkCmdBeginRendering func, - VkCommandBuffer commandBuffer, + VkCommandBuffer original_command_buffer, StructPointerDecoder* pRenderingInfo) { - assert(IsRecording(commandBuffer)); + assert(IsRecording()); - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(commandBuffer); - if (dc_context != nullptr) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { if (dc_context->ShouldHandleRenderPass(call_info.index)) { @@ -1697,30 +1791,36 @@ void VulkanReplayDumpResourcesBase::OverrideCmdBeginRendering( } } - VkCommandBuffer dr_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dr_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - func(dr_command_buffer, pRenderingInfo->GetPointer()); + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, pRenderingInfo->GetPointer()); + } } } void VulkanReplayDumpResourcesBase::OverrideCmdBeginRenderingKHR( const ApiCallInfo& call_info, PFN_vkCmdBeginRenderingKHR func, - VkCommandBuffer commandBuffer, + VkCommandBuffer original_command_buffer, StructPointerDecoder* pRenderingInfo) { - OverrideCmdBeginRendering(call_info, func, commandBuffer, pRenderingInfo); + OverrideCmdBeginRendering(call_info, func, original_command_buffer, pRenderingInfo); } void VulkanReplayDumpResourcesBase::OverrideCmdEndRendering(const ApiCallInfo& call_info, PFN_vkCmdEndRendering func, - VkCommandBuffer commandBuffer) + VkCommandBuffer original_command_buffer) { - assert(IsRecording(commandBuffer)); + assert(IsRecording()); - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(commandBuffer); - if (dc_context != nullptr) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { if (dc_context->ShouldHandleRenderPass(call_info.index)) { @@ -1735,77 +1835,33 @@ void VulkanReplayDumpResourcesBase::OverrideCmdEndRendering(const ApiCallInfo& } } - VkCommandBuffer dr_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dr_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { - func(dr_command_buffer); + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer); + } } } void VulkanReplayDumpResourcesBase::OverrideCmdEndRenderingKHR(const ApiCallInfo& call_info, PFN_vkCmdEndRenderingKHR func, - VkCommandBuffer commandBuffer) -{ - OverrideCmdEndRendering(call_info, func, commandBuffer); -} - -bool VulkanReplayDumpResourcesBase::MustDumpDrawCall(VkCommandBuffer original_command_buffer, uint64_t index) const -{ - assert(original_command_buffer != VK_NULL_HANDLE); - assert(IsRecording(original_command_buffer)); - - const DrawCallsDumpingContext* context = FindDrawCallCommandBufferContext(original_command_buffer); - if (context != nullptr) - { - return context->MustDumpDrawCall(index); - } - else - { - return false; - } -} - -bool VulkanReplayDumpResourcesBase::MustDumpDispatch(VkCommandBuffer original_command_buffer, uint64_t index) const -{ - assert(original_command_buffer != VK_NULL_HANDLE); - assert(IsRecording(original_command_buffer)); - - const DispatchTraceRaysDumpingContext* context = FindDispatchRaysCommandBufferContext(original_command_buffer); - if (context != nullptr) - { - return context->MustDumpDispatch(index); - } - else - { - return false; - } -} - -bool VulkanReplayDumpResourcesBase::MustDumpTraceRays(VkCommandBuffer original_command_buffer, uint64_t index) const + VkCommandBuffer original_command_buffer) { - assert(original_command_buffer != VK_NULL_HANDLE); - assert(IsRecording(original_command_buffer)); - - const DispatchTraceRaysDumpingContext* context = FindDispatchRaysCommandBufferContext(original_command_buffer); - if (context != nullptr) - { - return context->MustDumpTraceRays(index); - } - else - { - return false; - } + OverrideCmdEndRendering(call_info, func, original_command_buffer); } VkResult VulkanReplayDumpResourcesBase::QueueSubmit(const std::vector& submit_infos, const graphics::VulkanDeviceTable& device_table, - VkQueue queue, + const VulkanQueueInfo* queue_info, VkFence fence, uint64_t index) { - bool pre_submit = false; - bool submitted = false; - VkResult res = VK_SUCCESS; + bool pre_submit = false; + bool submitted = false; // First do a submission with all command buffer except the ones we are interested in std::vector modified_submit_infos = submit_infos; @@ -1817,12 +1873,8 @@ VkResult VulkanReplayDumpResourcesBase::QueueSubmit(const std::vectorDumpStart(); + } + if (pre_submit) { - res = - device_table.QueueSubmit(queue, modified_submit_infos.size(), modified_submit_infos.data(), VK_NULL_HANDLE); + VkResult res = device_table.QueueSubmit( + queue_info->handle, modified_submit_infos.size(), modified_submit_infos.data(), fence); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR( @@ -1854,18 +1911,31 @@ VkResult VulkanReplayDumpResourcesBase::QueueSubmit(const std::vectorhandle); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("QueueWaitIdle failed with %s", util::ToString(res).c_str()); Release(); return res; } - } - if (!output_json_per_command) - { - active_delegate_->DumpStart(); + for (auto [bcb_qs_pair, transf_context] : transfer_contexts_) + { + if (bcb_qs_pair.second == index) + { + res = transf_context->DumpTransferCommands(bcb_qs_pair.first, index); + submitted = true; + if (res != VK_SUCCESS) + { + Release(); + RaiseFatalError(("Dumping transfer failed (" + util::ToString(res) + ")").c_str()); + return res; + } + + // Keep track of active contexts. + ReleaseTransferContexts(index); + } + } } for (size_t s = 0; s < submit_infos.size(); s++) @@ -1882,16 +1952,11 @@ VkResult VulkanReplayDumpResourcesBase::QueueSubmit(const std::vector dc_context = FindDrawCallContext(command_buffer_handles[o], index); if (dc_context != nullptr) { - assert(cmd_buf_begin_map_.find(command_buffer_handles[o]) != cmd_buf_begin_map_.end()); - - res = dc_context->DumpDrawCalls( - queue, index, cmd_buf_begin_map_[command_buffer_handles[o]], modified_submit_infos[s], fence); + VkResult res = dc_context->DumpDrawCalls( + queue_info->handle, index, cb_bcb_map_[command_buffer_handles[o]], modified_submit_infos[s], fence); if (res != VK_SUCCESS) { Release(); @@ -1899,14 +1964,22 @@ VkResult VulkanReplayDumpResourcesBase::QueueSubmit(const std::vector dr_context = + FindDispatchTraceRaysContext(command_buffer_handles[o], index); if (dr_context != nullptr) { - assert(cmd_buf_begin_map_.find(command_buffer_handles[o]) != cmd_buf_begin_map_.end()); - res = dr_context->DumpDispatchTraceRays( - queue, index, cmd_buf_begin_map_[command_buffer_handles[o]], modified_submit_infos[s], fence); + VkResult res = dr_context->DumpDispatchTraceRays(queue_info->handle, + index, + cb_bcb_map_[command_buffer_handles[o]], + modified_submit_infos[s], + fence, + !submitted); if (res != VK_SUCCESS) { Release(); @@ -1915,6 +1988,9 @@ VkResult VulkanReplayDumpResourcesBase::QueueSubmit(const std::vectorDumpEnd(); @@ -1935,7 +2009,7 @@ VkResult VulkanReplayDumpResourcesBase::QueueSubmit(const std::vectorhandle, submit_infos.size(), submit_infos.data(), fence); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR( @@ -1944,14 +2018,17 @@ VkResult VulkanReplayDumpResourcesBase::QueueSubmit(const std::vectorsecond == index) + { + return true; + } } + + return false; } -bool VulkanReplayDumpResourcesBase::GetDrawCallActiveCommandBuffers(VkCommandBuffer original_command_buffer, - CommandBufferIterator& first, - CommandBufferIterator& last) const +void VulkanReplayDumpResourcesBase::ResetCommandBuffer(VkCommandBuffer original_command_buffer) { - assert(IsRecording(original_command_buffer)); - - const DrawCallsDumpingContext* stack = FindDrawCallCommandBufferContext(original_command_buffer); - - if (stack != nullptr) - { - stack->GetDrawCallActiveCommandBuffers(first, last); - return true; - } - else - { - return false; - } -} - -VkCommandBuffer -VulkanReplayDumpResourcesBase::GetDispatchRaysCommandBuffer(VkCommandBuffer original_command_buffer) const -{ - assert(IsRecording(original_command_buffer)); - - const DispatchTraceRaysDumpingContext* context = FindDispatchRaysCommandBufferContext(original_command_buffer); - - if (context != nullptr) - { - VkCommandBuffer dr_command_buffer = context->GetDispatchRaysCommandBuffer(); - assert(dr_command_buffer != VK_NULL_HANDLE); - - return dr_command_buffer; - } - else - { - return VK_NULL_HANDLE; - } -} - -bool VulkanReplayDumpResourcesBase::UpdateRecordingStatus(VkCommandBuffer original_command_buffer) -{ - assert(recording_); - - recording_ = !QueueSubmit_indices_.empty(); - - return recording_; -} - -bool VulkanReplayDumpResourcesBase::MustDumpQueueSubmitIndex(uint64_t index) const -{ - return std::find(QueueSubmit_indices_.begin(), QueueSubmit_indices_.end(), index) != QueueSubmit_indices_.end(); -} - -bool VulkanReplayDumpResourcesBase::IsRecording(VkCommandBuffer original_command_buffer) const -{ - if (recording_) - { - const DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - if (dc_context) - { - if (dc_context->IsRecording()) - { - return true; - } - } - - const DispatchTraceRaysDumpingContext* dr_context = - FindDispatchRaysCommandBufferContext(original_command_buffer); - if (dr_context != nullptr) - { - if (dr_context->IsRecording()) - { - return true; - } - } - } - - return false; -} - -uint64_t -VulkanReplayDumpResourcesBase::GetBeginCommandBufferIndexOfCommandBuffer(VkCommandBuffer original_command_buffer) const -{ - const auto& entry = cmd_buf_begin_map_.find(original_command_buffer); - if (entry != cmd_buf_begin_map_.end()) - { - return entry->second; - } - else - { - return 0; - } -} - -void VulkanReplayDumpResourcesBase::ResetCommandBuffer(VkCommandBuffer original_command_buffer) -{ - DrawCallsDumpingContext* dc_context = FindDrawCallCommandBufferContext(original_command_buffer); - if (dc_context != nullptr) + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(original_command_buffer); + for (auto dc_context : dc_contexts) { dc_context->Release(); } - DispatchTraceRaysDumpingContext* dr_context = FindDispatchRaysCommandBufferContext(original_command_buffer); - if (dr_context != nullptr) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(original_command_buffer); + for (auto dr_context : dr_contexts) { dr_context->Release(); } @@ -2169,6 +2153,9 @@ void VulkanReplayDumpResourcesBase::DumpGraphicsPipelineInfos( pipeline_info->dynamic_vertex_input = gpl_ppl->dynamic_vertex_input; pipeline_info->dynamic_vertex_binding_stride = gpl_ppl->dynamic_vertex_binding_stride; } + + // Accumulate shader stages from the other pipelines from the library + pipeline_info->shader_stages |= gpl_ppl->shader_stages; } } @@ -2194,12 +2181,13 @@ void VulkanReplayDumpResourcesBase::OverrideEndCommandBuffer(const ApiCallInfo& PFN_vkEndCommandBuffer func, VkCommandBuffer commandBuffer) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - DispatchTraceRaysDumpingContext* context = FindDispatchRaysCommandBufferContext(commandBuffer); - if (context != nullptr) + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - context->EndCommandBuffer(); + dr_context->EndCommandBuffer(); } } } @@ -2210,36 +2198,43 @@ void VulkanReplayDumpResourcesBase::OverrideCmdExecuteCommands(const ApiCallInfo uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers) { - CommandBufferIterator primary_first, primary_last; - if (GetDrawCallActiveCommandBuffers(commandBuffer, primary_first, primary_last)) + const std::vector> dc_primary_contexts = + FindDrawCallDumpingContexts(commandBuffer); + + for (auto dc_primary_context : dc_primary_contexts) { - DrawCallsDumpingContext* primary_context = FindDrawCallCommandBufferContext(commandBuffer); - GFXRECON_ASSERT(primary_context != nullptr); + CommandBufferIterator primary_first, primary_last; + dc_primary_context->GetDrawCallActiveCommandBuffers(primary_first, primary_last); - if (primary_context->ShouldHandleExecuteCommands(call_info.index)) + if (dc_primary_context->ShouldHandleExecuteCommands(call_info.index)) { uint32_t finalized_primaries = 0; for (uint32_t i = 0; i < commandBufferCount; ++i) { - const DrawCallsDumpingContext* secondary_context = FindDrawCallCommandBufferContext(pCommandBuffers[i]); - if (secondary_context != nullptr) + const std::vector> dc_secondary_contexts = + FindDrawCallDumpingContexts(pCommandBuffers[i]); + if (!dc_secondary_contexts.empty()) { - const std::vector& secondarys_command_buffers = - secondary_context->GetCommandBuffers(); - - GFXRECON_ASSERT(secondarys_command_buffers.size() <= - primary_last - (primary_first + finalized_primaries)); - for (size_t scb = 0; scb < secondarys_command_buffers.size(); ++scb) - { - func(*(primary_first + finalized_primaries), 1, &secondarys_command_buffers[scb]); - primary_context->FinalizeCommandBuffer(); - ++finalized_primaries; - } - - // All primaries have been finalized. Nothing else to do - if (finalized_primaries == primary_last - primary_first) + for (auto dc_secondary_context : dc_secondary_contexts) { - break; + const std::vector& secondarys_command_buffers = + dc_secondary_context->GetCommandBuffers(); + + GFXRECON_ASSERT(secondarys_command_buffers.size() <= + primary_last - (primary_first + finalized_primaries)); + for (size_t scb = 0; scb < secondarys_command_buffers.size(); ++scb) + { + func(*(primary_first + finalized_primaries), 1, &secondarys_command_buffers[scb]); + dc_primary_context->FinalizeCommandBuffer(); + dc_primary_context->MergeRenderPasses(*dc_secondary_context); + ++finalized_primaries; + } + + // All primaries have been finalized. Nothing else to do + if (finalized_primaries == primary_last - primary_first) + { + break; + } } } else @@ -2252,7 +2247,7 @@ void VulkanReplayDumpResourcesBase::OverrideCmdExecuteCommands(const ApiCallInfo } } } - primary_context->UpdateSecondaries(); + dc_primary_context->UpdateSecondaries(); } else { @@ -2263,35 +2258,41 @@ void VulkanReplayDumpResourcesBase::OverrideCmdExecuteCommands(const ApiCallInfo } } - if (IsRecording(commandBuffer)) + if (IsRecording()) { - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_primary_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_primary_context : dr_primary_contexts) { - DispatchTraceRaysDumpingContext* primary_context = FindDispatchRaysCommandBufferContext(commandBuffer); - GFXRECON_ASSERT(primary_context != nullptr); - - if (primary_context->ShouldHandleExecuteCommands(call_info.index)) + VkCommandBuffer dispatch_rays_command_buffer = dr_primary_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) { - for (uint32_t i = 0; i < commandBufferCount; ++i) + if (dr_primary_context->ShouldHandleExecuteCommands(call_info.index)) { - const DispatchTraceRaysDumpingContext* secondary_context = - FindDispatchRaysCommandBufferContext(pCommandBuffers[i]); - if (secondary_context != nullptr) - { - VkCommandBuffer secondary_command_buffer = secondary_context->GetDispatchRaysCommandBuffer(); - func(dispatch_rays_command_buffer, 1, &secondary_command_buffer); - } - else + for (uint32_t i = 0; i < commandBufferCount; ++i) { - func(dispatch_rays_command_buffer, 1, &pCommandBuffers[i]); + const std::vector> dr_secondary_contexts = + FindDispatchTraceRaysContexts(pCommandBuffers[i]); + if (!dr_secondary_contexts.empty()) + { + for (auto dr_secondary_context : dr_secondary_contexts) + { + VkCommandBuffer secondary_command_buffer = + dr_secondary_context->GetDispatchRaysCommandBuffer(); + func(dispatch_rays_command_buffer, 1, &secondary_command_buffer); + } + } + else + { + func(dispatch_rays_command_buffer, 1, &pCommandBuffers[i]); + } } + dr_primary_context->UpdateSecondaries(); + } + else + { + func(dispatch_rays_command_buffer, commandBufferCount, pCommandBuffers); } - primary_context->UpdateSecondaries(); - } - else - { - func(dispatch_rays_command_buffer, commandBufferCount, pCommandBuffers); } } } @@ -2310,5 +2311,931 @@ void VulkanReplayDumpResourcesBase::RaiseFatalError(const char* message) const } } +void VulkanReplayDumpResourcesBase::OverrideCmdBuildAccelerationStructuresKHR( + const VulkanCommandBufferInfo* original_command_buffer, + const graphics::VulkanDeviceTable& device_table, + uint32_t infoCount, + StructPointerDecoder* pInfos, + StructPointerDecoder* ppBuildRangeInfos) +{ + auto* p_infos_meta = pInfos->GetMetaStructPointer(); + const auto* p_infos = p_infos_meta->decoded_value; + const VkAccelerationStructureBuildRangeInfoKHR* const* range_infos = ppBuildRangeInfos->GetPointer(); + + for (uint32_t i = 0; i < infoCount; ++i) + { + const auto* dst_as = + object_info_table_->GetVkAccelerationStructureKHRInfo(p_infos_meta[i].dstAccelerationStructure); + GFXRECON_ASSERT(dst_as != nullptr); + + auto entry = acceleration_structures_context_.find(dst_as); + if (entry != acceleration_structures_context_.end()) + { + // Call destructor to release any resources + acceleration_structures_context_.erase(entry); + } + + auto new_entry = + acceleration_structures_context_.emplace(dst_as, + std::make_shared( + dst_as, device_table, *object_info_table_, address_trackers_)); + + VkResult res = new_entry.first->second->CloneBuildAccelerationStructuresInputBuffers( + (original_command_buffer != nullptr) ? original_command_buffer->handle : VK_NULL_HANDLE, + &p_infos_meta[i], + range_infos[i], + dump_as_build_input_buffers_); + if (res != VK_SUCCESS) + { + return; + } + } +} + +void VulkanReplayDumpResourcesBase::HandleCmdCopyAccelerationStructureKHR( + const graphics::VulkanDeviceTable& device_table, + const VulkanAccelerationStructureKHRInfo* src, + const VulkanAccelerationStructureKHRInfo* dst) +{ + GFXRECON_ASSERT(src != nullptr); + GFXRECON_ASSERT(dst != nullptr); + + const auto src_context_entry = acceleration_structures_context_.find(src); + if (src_context_entry == acceleration_structures_context_.end()) + { + return; + } + + const auto dst_context_entry = acceleration_structures_context_.find(dst); + if (dst_context_entry != acceleration_structures_context_.end()) + { + acceleration_structures_context_.erase(dst_context_entry); + } + + acceleration_structures_context_.emplace(dst, src_context_entry->second); +} + +void VulkanReplayDumpResourcesBase::HandleDestroyAccelerationStructureKHR( + const VulkanAccelerationStructureKHRInfo* as_info) +{ + if (as_info != nullptr) + { + const auto& entry = acceleration_structures_context_.find(as_info); + if (entry != acceleration_structures_context_.end()) + { + acceleration_structures_context_.erase(entry); + } + } +} + +void VulkanReplayDumpResourcesBase::ProcessInitBufferCommand( + uint64_t cmd_index, format::HandleId device_id, format::HandleId buffer_id, uint64_t data_size, const uint8_t* data) +{ + std::shared_ptr transf_context = FindTransferContextBcbQsIndex(0, 0); + if (transf_context != nullptr) + { + transf_context->HandleInitBufferCommand(cmd_index, device_id, buffer_id, data_size, data); + } +} + +void VulkanReplayDumpResourcesBase::ProcessInitImageCommand(VkCommandBuffer command_buffer, + uint64_t cmd_index, + format::HandleId device_id, + format::HandleId image_id, + uint64_t data_size, + uint32_t aspect, + uint32_t layout, + const std::vector& level_sizes, + const uint8_t* data) +{ + std::shared_ptr transf_context = FindTransferContextBcbQsIndex(0, 0); + if (transf_context != nullptr) + { + transf_context->HandleInitImageCommand(command_buffer, + cmd_index, + device_id, + image_id, + data_size, + static_cast(aspect), + static_cast(layout), + level_sizes, + data); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdCopyBuffer(const ApiCallInfo& call_info, + PFN_vkCmdCopyBuffer func, + VkCommandBuffer commandBuffer, + const VulkanBufferInfo* srcBuffer, + const VulkanBufferInfo* dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, srcBuffer->handle, dstBuffer->handle, regionCount, pRegions->GetPointer()); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, srcBuffer->handle, dstBuffer->handle, regionCount, pRegions->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdCopyBuffer( + call_info, commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions->GetPointer(), before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdCopyBuffer2( + const ApiCallInfo& call_info, + PFN_vkCmdCopyBuffer2 func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyBufferInfo, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pCopyBufferInfo->GetPointer()); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, pCopyBufferInfo->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdCopyBuffer2(call_info, commandBuffer, pCopyBufferInfo, before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdCopyBuffer2KHR( + const ApiCallInfo& call_info, + PFN_vkCmdCopyBuffer2KHR func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyBufferInfo, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pCopyBufferInfo->GetPointer()); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, pCopyBufferInfo->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdCopyBuffer2(call_info, commandBuffer, pCopyBufferInfo, before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdCopyBufferToImage( + const ApiCallInfo& call_info, + PFN_vkCmdCopyBufferToImage func, + VkCommandBuffer commandBuffer, + const VulkanBufferInfo* srcBuffer, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, srcBuffer->handle, dstImage->handle, dstImageLayout, regionCount, pRegions->GetPointer()); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, + srcBuffer->handle, + dstImage->handle, + dstImageLayout, + regionCount, + pRegions->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdCopyBufferToImage(call_info, + commandBuffer, + srcBuffer, + dstImage, + dstImageLayout, + regionCount, + pRegions->GetPointer(), + before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdCopyBufferToImage2( + const ApiCallInfo& call_info, + PFN_vkCmdCopyBufferToImage2 func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyBufferToImageInfo, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pCopyBufferToImageInfo->GetPointer()); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, pCopyBufferToImageInfo->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdCopyBufferToImage2(call_info, commandBuffer, pCopyBufferToImageInfo, before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdCopyBufferToImage2KHR( + const ApiCallInfo& call_info, + PFN_vkCmdCopyBufferToImage2KHR func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyBufferToImageInfo, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pCopyBufferToImageInfo->GetPointer()); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dr_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dr_command_buffer != VK_NULL_HANDLE) + { + func(dr_command_buffer, pCopyBufferToImageInfo->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdCopyBufferToImage2(call_info, commandBuffer, pCopyBufferToImageInfo, before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdCopyImage(const ApiCallInfo& call_info, + PFN_vkCmdCopyImage func, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, + srcImage->handle, + srcImageLayout, + dstImage->handle, + dstImageLayout, + regionCount, + pRegions->GetPointer()); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, + srcImage->handle, + srcImageLayout, + dstImage->handle, + dstImageLayout, + regionCount, + pRegions->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdCopyImage(call_info, + commandBuffer, + srcImage, + srcImageLayout, + dstImage, + dstImageLayout, + regionCount, + pRegions->GetPointer(), + before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdCopyImage2( + const ApiCallInfo& call_info, + PFN_vkCmdCopyImage2 func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyImageInfo, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pCopyImageInfo->GetPointer()); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pCopyImageInfo->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdCopyImage2(call_info, commandBuffer, pCopyImageInfo, before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdCopyImage2KHR( + const ApiCallInfo& call_info, + PFN_vkCmdCopyImage2KHR func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyImageInfo, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pCopyImageInfo->GetPointer()); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pCopyImageInfo->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdCopyImage2(call_info, commandBuffer, pCopyImageInfo, before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdCopyImageToBuffer( + const ApiCallInfo& call_info, + PFN_vkCmdCopyImageToBuffer func, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanBufferInfo* dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, srcImage->handle, srcImageLayout, dstBuffer->handle, regionCount, pRegions->GetPointer()); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, + srcImage->handle, + srcImageLayout, + dstBuffer->handle, + regionCount, + pRegions->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdCopyImageToBuffer(call_info, + commandBuffer, + srcImage, + srcImageLayout, + dstBuffer, + regionCount, + pRegions->GetPointer(), + before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdCopyImageToBuffer2( + const ApiCallInfo& call_info, + PFN_vkCmdCopyImageToBuffer2 func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyImageToBufferInfo, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pCopyImageToBufferInfo->GetPointer()); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pCopyImageToBufferInfo->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdCopyImageToBuffer2(call_info, commandBuffer, pCopyImageToBufferInfo, before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdCopyImageToBuffer2KHR( + const ApiCallInfo& call_info, + PFN_vkCmdCopyImageToBuffer2 func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyImageToBufferInfo, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pCopyImageToBufferInfo->GetPointer()); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pCopyImageToBufferInfo->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdCopyImageToBuffer2(call_info, commandBuffer, pCopyImageToBufferInfo, before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdBlitImage(const ApiCallInfo& call_info, + PFN_vkCmdBlitImage func, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + VkFilter filter, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, + srcImage->handle, + srcImageLayout, + dstImage->handle, + dstImageLayout, + regionCount, + pRegions->GetPointer(), + filter); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, + srcImage->handle, + srcImageLayout, + dstImage->handle, + dstImageLayout, + regionCount, + pRegions->GetPointer(), + filter); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdBlitImage(call_info, + commandBuffer, + srcImage, + srcImageLayout, + dstImage, + dstImageLayout, + regionCount, + pRegions->GetPointer(), + filter, + before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdBlitImage2( + const ApiCallInfo& call_info, + PFN_vkCmdBlitImage2 func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pBlitImageInfo, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pBlitImageInfo->GetPointer()); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pBlitImageInfo->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdBlitImage2(call_info, commandBuffer, pBlitImageInfo, before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdBlitImage2KHR( + const ApiCallInfo& call_info, + PFN_vkCmdBlitImage2KHR func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pBlitImageInfo, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + const std::vector> dc_contexts = + FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pBlitImageInfo->GetPointer()); + } + } + + const std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pBlitImageInfo->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdBlitImage2(call_info, commandBuffer, pBlitImageInfo, before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdBuildAccelerationStructuresKHR( + const ApiCallInfo& call_info, + PFN_vkCmdBuildAccelerationStructuresKHR func, + VkCommandBuffer commandBuffer, + uint32_t infoCount, + StructPointerDecoder* pInfos, + StructPointerDecoder* ppBuildRangeInfos, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command && commandBuffer != VK_NULL_HANDLE) + { + VkAccelerationStructureBuildGeometryInfoKHR* build_geometry_infos = pInfos->GetPointer(); + VkAccelerationStructureBuildRangeInfoKHR** build_range_infos = ppBuildRangeInfos->GetPointer(); + + std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + bool found = dc_context->GetDrawCallActiveCommandBuffers(first, last); + if (found) + { + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, infoCount, build_geometry_infos, build_range_infos); + } + } + } + + std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto& dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, infoCount, build_geometry_infos, build_range_infos); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdBuildAccelerationStructuresKHR( + call_info, commandBuffer, infoCount, pInfos, ppBuildRangeInfos, before_command); + } +} + +void VulkanReplayDumpResourcesBase::OverrideCmdCopyAccelerationStructureKHR( + const ApiCallInfo& call_info, + PFN_vkCmdCopyAccelerationStructureKHR func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pInfo, + bool before_command) +{ + // In case DumpBeforeCommand is true, draw call and compute/ray tracing contexts need to be handled only once + if (!before_command) + { + std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + bool found = dc_context->GetDrawCallActiveCommandBuffers(first, last); + if (found) + { + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pInfo->GetPointer()); + } + } + } + + std::vector> dr_contexts = + FindDispatchTraceRaysContexts(commandBuffer); + for (auto& dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pInfo->GetPointer()); + } + } + } + + std::vector> transf_contexts = FindTransferContextCmdIndex(call_info.index); + for (auto transf_context : transf_contexts) + { + transf_context->HandleCmdCopyAccelerationStructureKHR(call_info, commandBuffer, pInfo, before_command); + } +} + +void VulkanReplayDumpResourcesBase::ProcessStateEndMarker() +{ + std::shared_ptr transfer_context = FindTransferContextBcbQsIndex(0, 0); + if (transfer_context != nullptr) + { + VkResult res = transfer_context->DumpTransferCommands(0, 0); + if (res != VK_SUCCESS) + { + Release(); + RaiseFatalError(("Dumping transfer commands from state setup section failed failed (" + + util::ToString(res) + ")") + .c_str()); + } + + // ProcessStateEndMarker marks the end of the state setup section. If a TransferDumpingContext was assigned to + // dump transfer commands from there then now it becomes inactive. + ReleaseTransferContexts(0); + } +} + GFXRECON_END_NAMESPACE(gfxrecon) GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources.h b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources.h index 90544fdc4..fe322a655 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources.h @@ -25,20 +25,23 @@ #include "decode/api_decoder.h" #include "decode/common_object_info_table.h" +#include "decode/vulkan_device_address_tracker.h" #include "decode/vulkan_object_info.h" #include "decode/vulkan_replay_options.h" -#include "decode/struct_pointer_decoder.h" #include "decode/vulkan_replay_dump_resources_common.h" #include "decode/vulkan_replay_dump_resources_draw_calls.h" +#include "decode/vulkan_replay_dump_resources_transfer.h" #include "decode/vulkan_replay_dump_resources_compute_ray_tracing.h" #include "generated/generated_vulkan_dispatch_table.h" #include "format/format.h" #include "generated/generated_vulkan_struct_decoders.h" +#include "util/compressor.h" #include "util/defines.h" #include "vulkan/vulkan_core.h" #include #include +#include #include #include #include @@ -51,11 +54,15 @@ class VulkanReplayDumpResourcesBase public: VulkanReplayDumpResourcesBase() = delete; - VulkanReplayDumpResourcesBase(const VulkanReplayOptions& options, CommonObjectInfoTable* object_info_table); + VulkanReplayDumpResourcesBase(const VulkanReplayOptions& options, + CommonObjectInfoTable* object_info_table, + const VulkanPerDeviceAddressTrackers& address_trackers, + const graphics::InstanceDispatchTablesMap& instance_tables, + const graphics::DeviceDispatchTablesMap& device_tables); ~VulkanReplayDumpResourcesBase(); - VkResult CloneCommandBuffer(uint64_t bcb_index, + VkResult BeginCommandBuffer(uint64_t bcb_index, VulkanCommandBufferInfo* original_command_buffer_info, const graphics::VulkanDeviceTable* device_table, const graphics::VulkanInstanceTable* inst_table, @@ -315,6 +322,12 @@ class VulkanReplayDumpResourcesBase uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets); + void + OverrideCmdBindDescriptorSets2(const ApiCallInfo& call_info, + PFN_vkCmdBindDescriptorSets2 func, + VkCommandBuffer original_command_buffer, + StructPointerDecoder* pBindDescriptorSetsInfo); + void OverrideCmdBindIndexBuffer(const ApiCallInfo& call_info, PFN_vkCmdBindIndexBuffer func, VkCommandBuffer original_command_buffer, @@ -395,34 +408,18 @@ class VulkanReplayDumpResourcesBase VkResult QueueSubmit(const std::vector& modified_submit_infos, const graphics::VulkanDeviceTable& device_table, - VkQueue queue, + const VulkanQueueInfo* queue, VkFence fence, uint64_t index); bool MustDumpQueueSubmitIndex(uint64_t index) const; - bool MustDumpDrawCall(VkCommandBuffer original_command_buffer, uint64_t dc_index) const; - - bool MustDumpDispatch(VkCommandBuffer original_command_buffer, uint64_t index) const; - - bool MustDumpTraceRays(VkCommandBuffer original_command_buffer, uint64_t index) const; - - bool DumpingBeginCommandBufferIndex(uint64_t index) const; - - bool IsRecording(VkCommandBuffer original_command_buffer) const; - - bool GetDrawCallActiveCommandBuffers(VkCommandBuffer original_command_buffer, - CommandBufferIterator& first, - CommandBufferIterator& last) const; - - VkCommandBuffer GetDispatchRaysCommandBuffer(VkCommandBuffer original_command_buffer) const; + bool IsRecording() const { return active_contexts_; } void Release(); void ResetCommandBuffer(VkCommandBuffer original_command_buffer); - uint64_t GetBeginCommandBufferIndexOfCommandBuffer(VkCommandBuffer original_command_buffer) const; - void DumpGraphicsPipelineInfos(const StructPointerDecoder* pCreateInfos, uint32_t createInfoCount, HandlePointerDecoder* pPipelines); @@ -460,6 +457,23 @@ class VulkanReplayDumpResourcesBase pipeline_info->shader_stages |= static_cast(in_p_create_infos[i].pStages[ss].stage); } + + // handle optional VkPipelineLibraryCreateInfoKHR + const auto* pipeline_library_info = + GetPNextMetaStruct(create_info_meta->pNext); + if (pipeline_library_info != nullptr) + { + const uint32_t library_count = pipeline_library_info->pLibraries.GetLength(); + const format::HandleId* ppl_ids = pipeline_library_info->pLibraries.GetPointer(); + + for (uint32_t lib_idx = 0; lib_idx < library_count; ++lib_idx) + { + const VulkanPipelineInfo* gpl_ppl = object_info_table_->GetVkPipelineInfo(ppl_ids[lib_idx]); + + // Accumulate shader stages from the other pipelines from the library + pipeline_info->shader_stages |= gpl_ppl->shader_stages; + } + } } } } @@ -492,25 +506,197 @@ class VulkanReplayDumpResourcesBase void DumpResourcesSetFatalErrorHandler(std::function handler); - private: - bool UpdateRecordingStatus(VkCommandBuffer original_command_buffer); - - DispatchTraceRaysDumpingContext* FindDispatchRaysCommandBufferContext(uint64_t bcb_id); - - const DispatchTraceRaysDumpingContext* FindDispatchRaysCommandBufferContext(uint64_t bcb_id) const; - - DispatchTraceRaysDumpingContext* FindDispatchRaysCommandBufferContext(VkCommandBuffer original_command_buffer); - - const DispatchTraceRaysDumpingContext* - FindDispatchRaysCommandBufferContext(VkCommandBuffer original_command_buffer) const; + // Handles population of acceleration_structures_context_ map. For each AS that is build an entry in that map is + // created and the input buffers are cloned + void OverrideCmdBuildAccelerationStructuresKHR( + const VulkanCommandBufferInfo* original_command_buffer, + const graphics::VulkanDeviceTable& device_table, + uint32_t infoCount, + StructPointerDecoder* pInfos, + StructPointerDecoder* ppBuildRangeInfos); + + // Like OverrideCmdBuildAccelerationStructuresKHR Handles population of acceleration_structures_context_ map. + // In this case of copying AS it simply makes the new entry in the map to point at the src AS's entry. + void HandleCmdCopyAccelerationStructureKHR(const graphics::VulkanDeviceTable& device_table, + const VulkanAccelerationStructureKHRInfo* src, + const VulkanAccelerationStructureKHRInfo* dst); + + void HandleDestroyAccelerationStructureKHR(const VulkanAccelerationStructureKHRInfo* as_info); + + void ProcessStateEndMarker(); + + std::vector> + FindDrawCallDumpingContexts(VkCommandBuffer original_command_buffer); + + std::vector> + FindDispatchTraceRaysContexts(VkCommandBuffer original_command_buffer); + + void ProcessInitBufferCommand(uint64_t cmd_index, + format::HandleId device_id, + format::HandleId buffer_id, + uint64_t data_size, + const uint8_t* data); + + void ProcessInitImageCommand(VkCommandBuffer command_buffer, + uint64_t cmd_index, + format::HandleId device_id, + format::HandleId image_id, + uint64_t data_size, + uint32_t aspect, + uint32_t layout, + const std::vector& level_sizes, + const uint8_t* data); + + void OverrideCmdCopyBuffer(const ApiCallInfo& call_info, + PFN_vkCmdCopyBuffer func, + VkCommandBuffer commandBuffer, + const VulkanBufferInfo* srcBuffer, + const VulkanBufferInfo* dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command); + + void OverrideCmdCopyBuffer2(const ApiCallInfo& call_info, + PFN_vkCmdCopyBuffer2 func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyBufferInfo, + bool before_command); + + void OverrideCmdCopyBuffer2KHR(const ApiCallInfo& call_info, + PFN_vkCmdCopyBuffer2KHR func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyBufferInfo, + bool before_command); + + void OverrideCmdCopyBufferToImage(const ApiCallInfo& call_info, + PFN_vkCmdCopyBufferToImage func, + VkCommandBuffer commandBuffer, + const VulkanBufferInfo* srcBuffer, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command); + + void OverrideCmdCopyBufferToImage2(const ApiCallInfo& call_info, + PFN_vkCmdCopyBufferToImage2 func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyBufferToImageInfo, + bool before_command); - DrawCallsDumpingContext* FindDrawCallCommandBufferContext(VkCommandBuffer original_command_buffer); + void + OverrideCmdCopyBufferToImage2KHR(const ApiCallInfo& call_info, + PFN_vkCmdCopyBufferToImage2KHR func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyBufferToImageInfo, + bool before_command); + + void OverrideCmdCopyImage(const ApiCallInfo& call_info, + PFN_vkCmdCopyImage func, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command); + + void OverrideCmdCopyImage2(const ApiCallInfo& call_info, + PFN_vkCmdCopyImage2 func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyImageInfo, + bool before_command); + + void OverrideCmdCopyImage2KHR(const ApiCallInfo& call_info, + PFN_vkCmdCopyImage2KHR func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyImageInfo, + bool before_command); + + void OverrideCmdCopyImageToBuffer(const ApiCallInfo& call_info, + PFN_vkCmdCopyImageToBuffer func, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanBufferInfo* dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command); + + void OverrideCmdCopyImageToBuffer2(const ApiCallInfo& call_info, + PFN_vkCmdCopyImageToBuffer2 func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyImageToBufferInfo, + bool before_command); - const DrawCallsDumpingContext* FindDrawCallCommandBufferContext(VkCommandBuffer original_command_buffer) const; + void + OverrideCmdCopyImageToBuffer2KHR(const ApiCallInfo& call_info, + PFN_vkCmdCopyImageToBuffer2 func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyImageToBufferInfo, + bool before_command); + + void OverrideCmdBlitImage(const ApiCallInfo& call_info, + PFN_vkCmdBlitImage func, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + VkFilter filter, + bool before_command); + + void OverrideCmdBlitImage2(const ApiCallInfo& call_info, + PFN_vkCmdBlitImage2 func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pBlitImageInfo, + bool before_command); + + void OverrideCmdBlitImage2KHR(const ApiCallInfo& call_info, + PFN_vkCmdBlitImage2KHR func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pBlitImageInfo, + bool before_command); + + void OverrideCmdBuildAccelerationStructuresKHR( + const ApiCallInfo& call_info, + PFN_vkCmdBuildAccelerationStructuresKHR func, + VkCommandBuffer commandBuffer, + uint32_t infoCount, + StructPointerDecoder* pInfos, + StructPointerDecoder* ppBuildRangeInfos, + bool before_command); - DrawCallsDumpingContext* FindDrawCallCommandBufferContext(uint64_t bcb_id); + void + OverrideCmdCopyAccelerationStructureKHR(const ApiCallInfo& call_info, + PFN_vkCmdCopyAccelerationStructureKHR func, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pInfo, + bool before_command); - const DrawCallsDumpingContext* FindDrawCallCommandBufferContext(uint64_t bcb_id) const; + private: + std::vector> FindDispatchTraceRaysContexts(uint64_t bcb_id); + std::shared_ptr + FindDispatchTraceRaysContext(VkCommandBuffer original_command_buffer, decode::Index qs_index); + + std::vector> FindDrawCallDumpingContexts(uint64_t bcb_id); + std::shared_ptr FindDrawCallContext(VkCommandBuffer original_command_buffer, + decode::Index qs_index); + + // Transfer contexts search funcs + std::vector> FindTransferContextBcbIndex(uint64_t bcb_index) const; + std::vector> FindTransferContextCmdIndex(uint64_t cmd_index); + std::shared_ptr FindTransferContextBcbQsIndex(uint64_t bcb_index, uint64_t qs_index); + std::shared_ptr FindTransferContext(VkCommandBuffer original_command_buffer, + decode::Index qs_index); + + // Context tracking. These functions should be called when a dumping context has done its job. + void ReleaseDrawCallContexts(decode::Index qs_index); + void ReleaseDispatchTraceRaysContexts(decode::Index qs_index); + void ReleaseTransferContexts(decode::Index qs_index); void HandleCmdBindVertexBuffers2(const ApiCallInfo& call_info, PFN_vkCmdBindVertexBuffers2 func, @@ -547,13 +733,29 @@ class VulkanReplayDumpResourcesBase // Mapping between the original VkCommandBuffer handle and BeginCommandBuffer index std::unordered_map cmd_buf_begin_map_; - std::vector QueueSubmit_indices_; + // BeginCommandBuffer - QueueSubmit pairs + std::vector BeginCommandBufferQueueSubmit_Indices_; - // One per BeginCommandBuffer index - std::unordered_map draw_call_contexts; - std::unordered_map dispatch_ray_contexts; + // Mapping between the original VkCommandBuffer handle and its BeginCommandBuffer indices we care about + std::unordered_map cb_bcb_map_; + + // DrawCall dumping contexts. One per BeginCommandBuffer - QueueSubmit pair + std::map> draw_call_contexts_; + + // Dispatch-TraceRays call dumping contexts. One per BeginCommandBuffer - QueueSubmit pair + std::map> dispatch_ray_contexts_; + + // Transfer call dumping contexts. One per BeginCommandBuffer - QueueSubmit pair + std::map> transfer_contexts_; + + // Keep track of the number of active dumping contexts. A context is considered active when it's associated + // BeginCommandBuffer is issued and until it is submitted in its associated QueueSubmit index. + // + // TransferDumpingContext is a bit different as it is not strictly associated with a command buffer and as a result + // it does not require to a BeginCommandBuffer to become active. This is convenient in cases when dumping transfer + // commands from the state setup section which are not recorded as part of a Vulkan command buffer + size_t active_contexts_; - bool recording_; bool dump_resources_before_; CommonObjectInfoTable* object_info_table_; bool output_json_per_command; @@ -562,8 +764,15 @@ class VulkanReplayDumpResourcesBase VulkanDumpResourcesDelegate* user_delegate_; VulkanDumpResourcesDelegate* active_delegate_; + std::unique_ptr compressor_; + std::string capture_filename; + const VulkanPerDeviceAddressTrackers& address_trackers_; + + DumpResourcesAccelerationStructuresContext acceleration_structures_context_; + bool dump_as_build_input_buffers_; + std::function fatal_error_handler_; void RaiseFatalError(const char* message) const; }; diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_as.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_as.cpp new file mode 100644 index 000000000..f525297f0 --- /dev/null +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_as.cpp @@ -0,0 +1,726 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#include "decode/vulkan_replay_dump_resources_copy_array_of_pointers.h" +#include "decode/vulkan_replay_dump_resources_as.h" +#include "decode/vulkan_replay_dump_resources_common.h" +#include "generated/generated_vulkan_enum_to_string.h" + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) + +struct PushConstantBlock +{ + VkDeviceAddress array_of_pointers; + VkDeviceAddress out_buffer; + uint32_t count; +}; + +static VkResult CreateComputeResources(const graphics::VulkanDeviceTable& device_table, + VkDevice device, + VkPipeline* compute_ppl, + VkPipelineLayout* ppl_layout) +{ + GFXRECON_ASSERT(compute_ppl != nullptr); + GFXRECON_ASSERT(ppl_layout != nullptr); + + // We'll be using push constants to upload the device addresses to the compute shader + const VkPushConstantRange push_constant_range{ VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof(PushConstantBlock) }; + const VkPipelineLayoutCreateInfo pipelineLayoutCI{ + VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, nullptr, 0, 0, nullptr, 1, &push_constant_range + }; + + VkResult res = device_table.CreatePipelineLayout(device, &pipelineLayoutCI, nullptr, ppl_layout); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_WARNING("vkCreatePipelineLayout failed (%s)", util::ToString(res).c_str()); + return res; + } + + const VkShaderModuleCreateInfo sci = { + VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, nullptr, 0, sizeof(g_CompShaderMain), g_CompShaderMain + }; + VkShaderModule compute_shader; + res = device_table.CreateShaderModule(device, &sci, nullptr, &compute_shader); + if (res != VK_SUCCESS) + { + device_table.DestroyPipelineLayout(device, *ppl_layout, nullptr); + GFXRECON_LOG_WARNING("vkCreateShaderModule failed (%s)", util::ToString(res).c_str()); + return res; + } + + const VkPipelineShaderStageCreateInfo stage_ci = { VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, + nullptr, + 0, + VK_SHADER_STAGE_COMPUTE_BIT, + compute_shader, + "ComputeMain", + nullptr }; + + const VkComputePipelineCreateInfo ppl_ci = { + VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, nullptr, 0, stage_ci, *ppl_layout, VK_NULL_HANDLE, 0 + }; + + res = device_table.CreateComputePipelines(device, VK_NULL_HANDLE, 1, &ppl_ci, nullptr, compute_ppl); + if (res != VK_SUCCESS) + { + device_table.DestroyPipelineLayout(device, *ppl_layout, nullptr); + GFXRECON_LOG_WARNING("vkCreateComputePipelines failed (%s)", util::ToString(res).c_str()); + } + + device_table.DestroyShaderModule(device, compute_shader, nullptr); + + return VK_SUCCESS; +} + +VkResult AccelerationStructureDumpResourcesContext::CloneBuildAccelerationStructuresInputBuffers( + VkCommandBuffer original_command_buffer, + const Decoded_VkAccelerationStructureBuildGeometryInfoKHR* p_infos_meta, + const VkAccelerationStructureBuildRangeInfoKHR* range_infos, + bool dump_as_build_input_buffers) +{ + const auto* p_infos = p_infos_meta->decoded_value; + + if (p_infos->pGeometries == nullptr) + { + return VK_SUCCESS; + } + + const VulkanDeviceInfo* device_info = object_info_table.GetVkDeviceInfo(as_info->parent_id); + GFXRECON_ASSERT(device_info != nullptr); + + // kVulkanBuildAccelerationStructuresCommand will not have a command buffer like + // vkCmdBuildAccelerationStructuresKHR. We create one so we can submit our commands. + TemporaryCommandBuffer temp_cmd_buff; + if (original_command_buffer == VK_NULL_HANDLE) + { + CreateAndBeginCommandBuffer(&FindComputeQueueFamilyIndex, device_info, device_table, temp_cmd_buff); + GFXRECON_ASSERT(temp_cmd_buff.command_buffer != VK_NULL_HANDLE); + } + + const VkDevice device = device_info->handle; + const VkCommandBuffer command_buffer = + original_command_buffer == VK_NULL_HANDLE ? temp_cmd_buff.command_buffer : original_command_buffer; + + GFXRECON_ASSERT(p_infos_meta->pGeometries != nullptr); + const auto* p_geometries_meta = p_infos_meta->pGeometries->GetMetaStructPointer(); + + const VulkanPhysicalDeviceInfo* phys_dev_info = object_info_table.GetVkPhysicalDeviceInfo(device_info->parent_id); + GFXRECON_ASSERT(phys_dev_info != nullptr); + + const VkPhysicalDeviceMemoryProperties& mem_props = phys_dev_info->replay_device_info->memory_properties.value(); + + const auto address_tracker_entry = address_trackers.find(device_info); + if (address_tracker_entry == address_trackers.end()) + { + GFXRECON_LOG_WARNING("Could not detect address tracker for device %" PRIu64, device_info->capture_id); + return VK_ERROR_UNKNOWN; + } + + const VulkanDeviceAddressTracker& device_address_tracker = address_tracker_entry->second; + + for (uint32_t g = 0; g < p_infos->geometryCount; ++g) + { + // Either pGeometries or ppGeometries is used. The other one must be NULL + const VkAccelerationStructureGeometryKHR* const geometry = + p_infos->pGeometries != nullptr ? &p_infos->pGeometries[g] : p_infos->ppGeometries[g]; + + switch (geometry->geometryType) + { + case VK_GEOMETRY_TYPE_TRIANGLES_KHR: + { + // If dumping build input buffers is not requested then we only care about getting the TLAS instance + // buffer. + if (!dump_as_build_input_buffers) + { + continue; + } + + auto& new_variant = as_build_objects.emplace_back( + std::in_place_type); + auto& new_triangles = std::get(new_variant); + + const VkAccelerationStructureBuildRangeInfoKHR& range = range_infos[g]; + const VkAccelerationStructureGeometryTrianglesDataKHR& triangles = geometry->geometry.triangles; + + size_t buffer_device_address_offset; + const VulkanBufferInfo* vertex_buffer_info = device_address_tracker.GetBufferByCaptureDeviceAddress( + triangles.vertexData.deviceAddress, &buffer_device_address_offset); + if (vertex_buffer_info == nullptr) + { + continue; + } + + GFXRECON_ASSERT(vertex_buffer_info->size > buffer_device_address_offset); + + size_t vertex_buffer_size = (triangles.maxVertex + 1) * triangles.vertexStride; + // Check if we are exceeding the size of the input vertex buffer. This could happen in case of + // malformed data (too much maxVertex). + if (buffer_device_address_offset + vertex_buffer_size > vertex_buffer_info->size) + { + vertex_buffer_size = vertex_buffer_info->size - buffer_device_address_offset; + } + + new_triangles.vertex_format = triangles.vertexFormat; + new_triangles.max_vertex = triangles.maxVertex; + new_triangles.vertex_buffer_size = vertex_buffer_size; + new_triangles.vertex_buffer_stride = triangles.vertexStride; + new_triangles.range = range; + + VkResult res = CreateVkBuffer(vertex_buffer_size, + device_table, + device, + nullptr, + nullptr, + &mem_props, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + &new_triangles.vertex_buffer, + &new_triangles.vertex_buffer_memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Failed cloning vertex buffer used as input in " + "vkCmdBuildAccelerationstructuresKHR (%s)", + util::ToString(res).c_str()); + continue; + } + + // Copy vertex buffer + const std::vector copy_region{ VkBufferCopy{ + static_cast(buffer_device_address_offset), 0, vertex_buffer_size } }; + CopyBufferAndBarrier( + command_buffer, device_table, vertex_buffer_info->handle, new_triangles.vertex_buffer, copy_region); + + // Index buffer + new_triangles.index_type = triangles.indexType; + if (triangles.indexType != VK_INDEX_TYPE_NONE_KHR) + { + const VulkanBufferInfo* index_buffer_info = device_address_tracker.GetBufferByCaptureDeviceAddress( + triangles.indexData.deviceAddress, &buffer_device_address_offset); + + if (index_buffer_info != nullptr) + { + const size_t index_buffer_size = + 3 * range.primitiveCount * VkIndexTypeToBytes(triangles.indexType); + new_triangles.index_type = triangles.indexType; + new_triangles.index_buffer_size = index_buffer_size; + + res = CreateVkBuffer(index_buffer_size, + device_table, + device, + nullptr, + nullptr, + &mem_props, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + &new_triangles.index_buffer, + &new_triangles.index_buffer_memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Failed cloning index buffer used as input in " + "vkCmdBuildAccelerationstructuresKHR (%s)", + util::ToString(res).c_str()); + + continue; + } + + // Copy Index buffer + const VkDeviceSize src_offset = static_cast(range.primitiveOffset) + + static_cast(buffer_device_address_offset); + const std::vector copy_region{ VkBufferCopy{ src_offset, 0, index_buffer_size } }; + CopyBufferAndBarrier(command_buffer, + device_table, + index_buffer_info->handle, + new_triangles.index_buffer, + copy_region); + } + } + + // Transformation matrix + if (triangles.transformData.deviceAddress) + { + const VulkanBufferInfo* transform_buffer_info = + device_address_tracker.GetBufferByCaptureDeviceAddress(triangles.transformData.deviceAddress, + &buffer_device_address_offset); + if (transform_buffer_info == nullptr) + { + continue; + } + + const size_t transform_buffer_size = sizeof(VkTransformMatrixKHR); + new_triangles.transform_buffer_size = transform_buffer_size; + + res = CreateVkBuffer(transform_buffer_size, + device_table, + device, + nullptr, + nullptr, + &mem_props, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + &new_triangles.transform_buffer, + &new_triangles.transform_buffer_memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Failed cloning transform buffer used as input in " + "vkCmdBuildAccelerationstructuresKHR (%s)", + util::ToString(res).c_str()); + + continue; + } + + // Copy transform buffer + const VkDeviceSize src_offset = static_cast(buffer_device_address_offset); + const std::vector copy_region{ VkBufferCopy{ + src_offset, 0, static_cast(transform_buffer_size) } }; + CopyBufferAndBarrier(command_buffer, + device_table, + transform_buffer_info->handle, + new_triangles.transform_buffer, + copy_region); + } + } + break; + + case VK_GEOMETRY_TYPE_AABBS_KHR: + { + // If dumping build input buffers is not requested then we only care about getting the TLAS instance + // buffer. + if (!dump_as_build_input_buffers) + { + continue; + } + + const VkAccelerationStructureGeometryAabbsDataKHR& aabbs = geometry->geometry.aabbs; + + size_t buffer_device_address_offset; + const VulkanBufferInfo* aabb_buffer_info = device_address_tracker.GetBufferByCaptureDeviceAddress( + aabbs.data.deviceAddress, &buffer_device_address_offset); + GFXRECON_ASSERT(aabb_buffer_info != nullptr); + if (aabb_buffer_info == nullptr) + { + continue; + } + + auto& new_variant = + as_build_objects.emplace_back(std::in_place_type); + auto& new_aabbs = std::get(new_variant); + + const VkAccelerationStructureBuildRangeInfoKHR& range = range_infos[g]; + new_aabbs.buffer_size = range.primitiveCount * sizeof(VkAabbPositionsKHR); + new_aabbs.range = range; + + VkResult res = CreateVkBuffer(new_aabbs.buffer_size, + device_table, + device, + nullptr, + nullptr, + &mem_props, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + &new_aabbs.buffer, + &new_aabbs.buffer_memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Failed cloning AABB buffer used as input in " + "vkCmdBuildAccelerationstructuresKHR (%s)", + util::ToString(res).c_str()); + + continue; + } + + // Copy AABBs + { + // Spec does not explicity state what happens for 0 stride. + // We will assume tightly packed data. + const size_t region_count = + (aabbs.stride == sizeof(VkAabbPositionsKHR) || !aabbs.stride) ? 1 : range.primitiveCount; + + const VkDeviceSize src_buffer_offset = static_cast(buffer_device_address_offset) + + static_cast(range.primitiveOffset); + + std::vector regions(region_count); + if (region_count == 1) + { + regions[0].dstOffset = 0; + regions[0].srcOffset = src_buffer_offset; + regions[0].size = new_aabbs.buffer_size; + } + else + { + VkDeviceSize src_region_offset = src_buffer_offset; + VkDeviceSize dst_region_offset = 0; + const VkDeviceSize region_size = static_cast(sizeof(VkAabbPositionsKHR)); + for (auto& region : regions) + { + region.srcOffset = src_region_offset; + src_region_offset += aabbs.stride; + + region.dstOffset = dst_region_offset; + dst_region_offset += region_size; + + region.size = region_size; + } + } + + CopyBufferAndBarrier( + command_buffer, device_table, aabb_buffer_info->handle, new_aabbs.buffer, regions); + } + } + break; + + case VK_GEOMETRY_TYPE_INSTANCES_KHR: + { + const VkAccelerationStructureBuildRangeInfoKHR& range = range_infos[g]; + const VkAccelerationStructureGeometryInstancesDataKHR& instances = geometry->geometry.instances; + + auto& new_variant = as_build_objects.emplace_back( + std::in_place_type); + auto& new_instances = std::get(new_variant); + new_instances.array_of_pointers = instances.arrayOfPointers; + + // Addresses and VkAccelerationStructureInstanceKHR structures should be tightly packed + const size_t instance_buffer_stride = sizeof(VkAccelerationStructureInstanceKHR); + const size_t instance_buffer_size = range.primitiveCount * instance_buffer_stride; + new_instances.instance_count = range.primitiveCount; + new_instances.instance_buffer_size = instance_buffer_size; + + size_t buffer_device_address_offset; + const VulkanBufferInfo* instances_buffer_info = device_address_tracker.GetBufferByCaptureDeviceAddress( + instances.data.deviceAddress, &buffer_device_address_offset); + if (instances_buffer_info == nullptr) + { + continue; + } + + if (!instances.arrayOfPointers) + { + VkResult res = CreateVkBuffer(instance_buffer_size, + device_table, + device, + nullptr, + nullptr, + &mem_props, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + &new_instances.instance_buffer, + &new_instances.instance_buffer_memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Failed cloning instances buffer used as input in " + "vkCmdBuildAccelerationstructuresKHR (%s)", + util::ToString(res).c_str()); + continue; + } + + // Copy instance buffer + const VkDeviceSize src_offset = static_cast(buffer_device_address_offset) + + static_cast(range.primitiveOffset); + const std::vector copy_region{ VkBufferCopy{ src_offset, 0, instance_buffer_size } }; + CopyBufferAndBarrier(command_buffer, + device_table, + instances_buffer_info->handle, + new_instances.instance_buffer, + copy_region); + } + else + { + // If instances.arrayOfPointers is true then we go through a compute path + CreateComputeResources( + device_table, device, &new_instances.compute_ppl, &new_instances.compute_ppl_layout); + + // In this case we will also need VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT + VkResult res = + CreateVkBuffer(instance_buffer_size, + device_table, + device, + nullptr, + nullptr, + &mem_props, + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT | + VK_BUFFER_USAGE_TRANSFER_DST_BIT, + &new_instances.instance_buffer, + &new_instances.instance_buffer_memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Failed cloning instances buffer used as input in " + "vkCmdBuildAccelerationstructuresKHR (%s)", + util::ToString(res).c_str()); + continue; + } + + const VkBufferDeviceAddressInfo bdai = { VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, + nullptr, + new_instances.instance_buffer }; + const VkDeviceAddress output_buffer_device_address = + device_table.GetBufferDeviceAddress(device, &bdai); + + device_table.CmdBindPipeline( + command_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, new_instances.compute_ppl); + + const PushConstantBlock references{ instances.data.deviceAddress, + output_buffer_device_address, + range.primitiveCount }; + device_table.CmdPushConstants(command_buffer, + new_instances.compute_ppl_layout, + VK_SHADER_STAGE_COMPUTE_BIT, + 0, + sizeof(PushConstantBlock), + &references); + + device_table.CmdDispatch(command_buffer, 1, 1, 1); + + const VkBufferMemoryBarrier buff_barrier = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, + nullptr, + VK_ACCESS_SHADER_WRITE_BIT, + VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_HOST_READ_BIT, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + new_instances.instance_buffer, + 0, + VK_WHOLE_SIZE }; + device_table.CmdPipelineBarrier(command_buffer, + VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + 0, + 0, + nullptr, + 1, + &buff_barrier, + 0, + nullptr); + } + } + break; + + default: + GFXRECON_LOG_ERROR("Unhandled acceleration structure geometry type") + } + } + + if (original_command_buffer == nullptr) + { + SubmitAndDestroyCommandBuffer(temp_cmd_buff); + } + + return VK_SUCCESS; +} + +VkResult AccelerationStructureDumpResourcesContext::CloneBuildAccelerationStructuresInputBuffers( + VkCommandBuffer original_command_buffer, + const AccelerationStructureDumpResourcesContext& src_context, + bool dump_as_build_input_buffers) +{ + GFXRECON_ASSERT(original_command_buffer != VK_NULL_HANDLE); + + const VulkanDeviceInfo* device_info = object_info_table.GetVkDeviceInfo(as_info->parent_id); + GFXRECON_ASSERT(device_info != nullptr); + + const VulkanPhysicalDeviceInfo* phys_dev_info = object_info_table.GetVkPhysicalDeviceInfo(device_info->parent_id); + GFXRECON_ASSERT(phys_dev_info != nullptr); + + const VkPhysicalDeviceMemoryProperties& mem_props = phys_dev_info->replay_device_info->memory_properties.value(); + + // Clone serialized data + if (src_context.serialized_data.buffer != VK_NULL_HANDLE) + { + VkResult res = CreateVkBuffer(src_context.serialized_data.size, + device_table, + device_info->handle, + nullptr, + nullptr, + &mem_props, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, + &serialized_data.buffer, + &serialized_data.memory); + if (res != VK_SUCCESS) + { + return res; + } + + serialized_data.size = src_context.serialized_data.size; + + // Clone buffer's content + const std::vector copy_region{ VkBufferCopy{ 0, 0, serialized_data.size } }; + CopyBufferAndBarrier(original_command_buffer, + device_table, + src_context.serialized_data.buffer, + serialized_data.buffer, + copy_region); + } + + for (const auto& build_object : src_context.as_build_objects) + { + if (const auto* triangles = std::get_if(&build_object)) + { + GFXRECON_ASSERT(triangles->vertex_buffer != VK_NULL_HANDLE && + triangles->vertex_buffer_memory != VK_NULL_HANDLE && + triangles->vertex_format != VK_FORMAT_UNDEFINED); + + auto& new_variant = + as_build_objects.emplace_back(std::in_place_type); + auto& new_triangles = std::get(new_variant); + + VkResult res = CreateVkBuffer(triangles->vertex_buffer_size, + device_table, + device_info->handle, + nullptr, + nullptr, + &mem_props, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + &new_triangles.vertex_buffer, + &new_triangles.vertex_buffer_memory); + if (res != VK_SUCCESS) + { + return res; + } + + new_triangles.vertex_buffer_size = triangles->vertex_buffer_size; + new_triangles.vertex_format = triangles->vertex_format; + new_triangles.vertex_buffer_stride = triangles->vertex_buffer_stride; + new_triangles.max_vertex = triangles->max_vertex; + + if (triangles->index_type != VK_INDEX_TYPE_NONE_KHR) + { + GFXRECON_ASSERT(triangles->index_buffer_size); + + res = CreateVkBuffer(triangles->index_type, + device_table, + device_info->handle, + nullptr, + nullptr, + &mem_props, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + &new_triangles.index_buffer, + &new_triangles.index_buffer_memory); + if (res != VK_SUCCESS) + { + return res; + } + + new_triangles.index_type = triangles->index_type; + new_triangles.index_buffer_size = triangles->index_buffer_size; + + const std::vector copy_region{ VkBufferCopy{ 0, 0, triangles->index_buffer_size } }; + CopyBufferAndBarrier(original_command_buffer, + device_table, + triangles->index_buffer, + new_triangles.index_buffer, + copy_region); + } + + if (triangles->transform_buffer != VK_NULL_HANDLE) + { + GFXRECON_ASSERT(triangles->transform_buffer_size); + + res = CreateVkBuffer(triangles->transform_buffer_size, + device_table, + device_info->handle, + nullptr, + nullptr, + &mem_props, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + &new_triangles.transform_buffer, + &new_triangles.transform_buffer_memory); + if (res != VK_SUCCESS) + { + return res; + } + + new_triangles.transform_buffer_size = triangles->transform_buffer_size; + + const std::vector copy_region{ VkBufferCopy{ 0, 0, triangles->transform_buffer_size } }; + CopyBufferAndBarrier(original_command_buffer, + device_table, + triangles->transform_buffer, + new_triangles.transform_buffer, + copy_region); + } + } + else if (const auto* aabbs = std::get_if(&build_object)) + { + GFXRECON_ASSERT(aabbs->buffer != VK_NULL_HANDLE); + + auto& new_variant = + as_build_objects.emplace_back(std::in_place_type); + auto& new_aabbs = std::get(new_variant); + + VkResult res = CreateVkBuffer(aabbs->buffer_size, + device_table, + device_info->handle, + nullptr, + nullptr, + &mem_props, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + &new_aabbs.buffer, + &new_aabbs.buffer_memory); + if (res != VK_SUCCESS) + { + return res; + } + + new_aabbs.buffer_size = aabbs->buffer_size; + + const std::vector copy_region{ VkBufferCopy{ 0, 0, aabbs->buffer_size } }; + CopyBufferAndBarrier(original_command_buffer, device_table, aabbs->buffer, new_aabbs.buffer, copy_region); + } + else if (const auto* instance = std::get_if(&build_object)) + { + GFXRECON_ASSERT(instance->instance_buffer != VK_NULL_HANDLE); + + auto& new_variant = + as_build_objects.emplace_back(std::in_place_type); + auto& new_instance = std::get(new_variant); + + VkResult res = CreateVkBuffer(instance->instance_buffer_size, + device_table, + device_info->handle, + nullptr, + nullptr, + &mem_props, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + &new_instance.instance_buffer, + &new_instance.instance_buffer_memory); + if (res != VK_SUCCESS) + { + return res; + } + + new_instance.instance_buffer_size = instance->instance_buffer_size; + new_instance.instance_count = instance->instance_count; + + const std::vector copy_region{ VkBufferCopy{ 0, 0, instance->instance_buffer_size } }; + CopyBufferAndBarrier(original_command_buffer, + device_table, + instance->instance_buffer, + new_instance.instance_buffer, + copy_region); + } + else + { + GFXRECON_LOG_ERROR("Unexpected build input buffer"); + GFXRECON_ASSERT(0); + return VK_ERROR_UNKNOWN; + } + } + + return VK_SUCCESS; +} + +GFXRECON_END_NAMESPACE(gfxrecon) +GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_as.h b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_as.h new file mode 100644 index 000000000..a5c438259 --- /dev/null +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_as.h @@ -0,0 +1,139 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_VULKAN_REPLAY_DUMP_RESOURCES_AS_H +#define GFXRECON_VULKAN_REPLAY_DUMP_RESOURCES_AS_H + +#include "decode/vulkan_device_address_tracker.h" +#include "decode/common_object_info_table.h" +#include "decode/vulkan_object_info.h" +#include "generated/generated_vulkan_struct_decoders.h" +#include "decode/custom_vulkan_struct_decoders.h" +#include "util/defines.h" + +#include +#include +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) + +struct AccelerationStructureDumpResourcesContext +{ + AccelerationStructureDumpResourcesContext() = delete; + + AccelerationStructureDumpResourcesContext(const VulkanAccelerationStructureKHRInfo* ai, + const graphics::VulkanDeviceTable& dt, + const CommonObjectInfoTable& oit, + const VulkanPerDeviceAddressTrackers& at) : + as_info(ai), + device_table(dt), object_info_table(oit), address_trackers(at) + {} + + ~AccelerationStructureDumpResourcesContext() { ReleaseResources(); } + + struct Triangles + { + VkFormat vertex_format{ VK_FORMAT_UNDEFINED }; + uint32_t max_vertex{ 0 }; + VkDeviceSize vertex_buffer_size{ 0 }; + VkDeviceSize vertex_buffer_stride{ 0 }; + VkBuffer vertex_buffer{ VK_NULL_HANDLE }; + VkDeviceMemory vertex_buffer_memory{ VK_NULL_HANDLE }; + + VkIndexType index_type{ VK_INDEX_TYPE_NONE_KHR }; + VkDeviceSize index_buffer_size{ 0 }; + VkBuffer index_buffer{ VK_NULL_HANDLE }; + VkDeviceMemory index_buffer_memory{ VK_NULL_HANDLE }; + + VkDeviceSize transform_buffer_size{ 0 }; + VkBuffer transform_buffer{ VK_NULL_HANDLE }; + VkDeviceMemory transform_buffer_memory{ VK_NULL_HANDLE }; + + VkAccelerationStructureBuildRangeInfoKHR range; + }; + + struct AABBS + { + VkDeviceSize buffer_size{ 0 }; + VkBuffer buffer{ VK_NULL_HANDLE }; + VkDeviceMemory buffer_memory{ VK_NULL_HANDLE }; + + VkAccelerationStructureBuildRangeInfoKHR range; + }; + + struct Instances + { + bool array_of_pointers{ false }; + + uint32_t instance_count{ 0 }; + uint32_t instance_buffer_size{ 0 }; + VkBuffer instance_buffer{ VK_NULL_HANDLE }; + VkDeviceMemory instance_buffer_memory{ VK_NULL_HANDLE }; + + // Used to fetch the instance buffers in case + // VkAccelerationStructureGeometryInstancesDataKHR.arrayOfPointers is true + VkPipeline compute_ppl{ VK_NULL_HANDLE }; + VkPipelineLayout compute_ppl_layout{ VK_NULL_HANDLE }; + }; + + std::vector> as_build_objects; + + struct + { + VkDeviceSize size{ 0 }; + VkBuffer buffer{ VK_NULL_HANDLE }; + VkDeviceMemory memory{ VK_NULL_HANDLE }; + } serialized_data; + + // Clones buffers used as inputs in vkCmdBuildAccelerationStructuresKHR command. + VkResult CloneBuildAccelerationStructuresInputBuffers( + VkCommandBuffer original_command_buffer, + const Decoded_VkAccelerationStructureBuildGeometryInfoKHR* p_infos_meta, + const VkAccelerationStructureBuildRangeInfoKHR* range_infos, + bool dump_as_build_input_buffers); + + // Clones input buffers from src_context + VkResult CloneBuildAccelerationStructuresInputBuffers(VkCommandBuffer original_command_buffer, + const AccelerationStructureDumpResourcesContext& src_context, + bool dump_as_build_input_buffers); + + void ReleaseResources(); + + const graphics::VulkanDeviceTable& device_table; + const CommonObjectInfoTable& object_info_table; + const VulkanAccelerationStructureKHRInfo* as_info; + const VulkanPerDeviceAddressTrackers& address_trackers; +}; + +using DumpResourcesAccelerationStructuresContext = + std::unordered_map>; + +void FreeAccelerationStructureContextResources(const graphics::VulkanDeviceTable& device_table, + VkDevice device, + AccelerationStructureDumpResourcesContext& as_context); + +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // GFXRECON_VULKAN_REPLAY_DUMP_RESOURCES_AS_H diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_common.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_common.cpp index 77849b86b..e8ad18f6c 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_common.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_common.cpp @@ -20,58 +20,65 @@ ** DEALINGS IN THE SOFTWARE. */ +#include "decode/common_object_info_table.h" +#include "decode/vulkan_device_address_tracker.h" +#include "decode/vulkan_object_info.h" #include "decode/vulkan_replay_dump_resources_common.h" -#include "util/logging.h" -#include "util/image_writer.h" -#include "util/buffer_writer.h" +#include "generated/generated_vulkan_struct_decoders.h" #include "generated/generated_vulkan_enum_to_string.h" #include "graphics/vulkan_resources_util.h" -#include "util/to_string.h" -#include "vulkan/vulkan_core.h" +#include "graphics/vulkan_util.h" +#include "util/logging.h" +#include "util/platform.h" #include "Vulkan-Utility-Libraries/vk_format_utils.h" #include +#include #include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) -static util::imagewriter::DataFormats VkFormatToImageWriterDataFormat(VkFormat format) +ImageDumpResult CanDumpImage(const graphics::VulkanInstanceTable* instance_table, + VkPhysicalDevice phys_dev, + const VulkanImageInfo* image_info) { - switch (format) + GFXRECON_ASSERT(instance_table != nullptr); + GFXRECON_ASSERT(phys_dev != VK_NULL_HANDLE); + GFXRECON_ASSERT(image_info != nullptr); + + VkFormatProperties format_properties{}; + instance_table->GetPhysicalDeviceFormatProperties(phys_dev, image_info->format, &format_properties); + + // A format might not be supported on the replay implementation. Check before attempting to dump + if ((image_info->tiling == VK_IMAGE_TILING_OPTIMAL && + format_properties.optimalTilingFeatures == VkFormatFeatureFlags(0)) || + (image_info->tiling == VK_IMAGE_TILING_LINEAR && + format_properties.linearTilingFeatures == VkFormatFeatureFlags(0))) { - case VK_FORMAT_R8G8B8_SRGB: - case VK_FORMAT_R8G8B8_UNORM: - return util::imagewriter::DataFormats::kFormat_RGB; - - case VK_FORMAT_R8G8B8A8_SRGB: - case VK_FORMAT_R8G8B8A8_UNORM: - return util::imagewriter::DataFormats::kFormat_RGBA; - - case VK_FORMAT_B8G8R8_SRGB: - case VK_FORMAT_B8G8R8_UNORM: - return util::imagewriter::DataFormats::kFormat_BGR; - - case VK_FORMAT_B8G8R8A8_SRGB: - case VK_FORMAT_B8G8R8A8_UNORM: - return util::imagewriter::DataFormats::kFormat_BGRA; - - case VK_FORMAT_D32_SFLOAT: - case VK_FORMAT_D32_SFLOAT_S8_UINT: - return util::imagewriter::DataFormats::kFormat_D32_FLOAT; - - case VK_FORMAT_D24_UNORM_S8_UINT: - case VK_FORMAT_X8_D24_UNORM_PACK32: - return util::imagewriter::DataFormats::kFormat_D24_UNORM; - - case VK_FORMAT_D16_UNORM: - return util::imagewriter::DataFormats::kFormat_D16_UNORM; + GFXRECON_LOG_WARNING("Format %s is not supported by the implementation", + util::ToString(image_info->format).c_str()); + return ImageDumpResult::kFormatNotSupported; + } - default: - GFXRECON_LOG_ERROR("%s isn't supported in VkFormatToImageWriterDataFormat", - util::ToString(format).c_str()); - return util::imagewriter::DataFormats::kFormat_UNSPECIFIED; + // Check for multisampled images that cannot be resolved + if (image_info->sample_count != VK_SAMPLE_COUNT_1_BIT) + { + if ((image_info->tiling == VK_IMAGE_TILING_OPTIMAL && + (format_properties.optimalTilingFeatures & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) != + VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) || + (image_info->tiling == VK_IMAGE_TILING_LINEAR && + (format_properties.linearTilingFeatures & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) != + VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)) + { + GFXRECON_LOG_WARNING("Multisampled image with format %s does not support " + "\"VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT\" will not be dumped.", + util::ToString(image_info->format).c_str()); + return ImageDumpResult::kCanNotResolve; + } } + + return ImageDumpResult::kCanDump; } const char* ImageFileExtension(DumpedImageFormat image_format) @@ -96,7 +103,7 @@ static VkFormat ChooseDestinationImageFormat(VkFormat format) if (vkuFormatIsSRGB(format)) { - dst_format = vkuFormatHasAlpha(format) ? VK_FORMAT_B8G8R8A8_SRGB : VK_FORMAT_B8G8R8_SRGB; + dst_format = VK_FORMAT_B8G8R8A8_SRGB; } else if (vkuFormatIsDepthOrStencil(format)) { @@ -106,37 +113,18 @@ static VkFormat ChooseDestinationImageFormat(VkFormat format) } else { - dst_format = vkuFormatHasAlpha(format) ? VK_FORMAT_B8G8R8A8_UNORM : VK_FORMAT_B8G8R8_UNORM; + dst_format = VK_FORMAT_B8G8R8A8_UNORM; } return dst_format; } -uint32_t GetMemoryTypeIndex(const VkPhysicalDeviceMemoryProperties& memory_properties, - uint32_t type_bits, - VkMemoryPropertyFlags property_flags) -{ - uint32_t memory_type_index = std::numeric_limits::max(); - - for (uint32_t i = 0; i < memory_properties.memoryTypeCount; ++i) - { - if ((type_bits & (1 << i)) && - ((memory_properties.memoryTypes[i].propertyFlags & property_flags) == property_flags)) - { - memory_type_index = i; - break; - } - } - - return memory_type_index; -} - -VkResult CloneImage(CommonObjectInfoTable& object_info_table, - const graphics::VulkanDeviceTable* device_table, - const VkPhysicalDeviceMemoryProperties* replay_device_phys_mem_props, - const VulkanImageInfo* image_info, - VkImage* new_image, - VkDeviceMemory* new_image_memory) +VkResult CreateVkImage(const CommonObjectInfoTable& object_info_table, + const graphics::VulkanDeviceTable* device_table, + const VkPhysicalDeviceMemoryProperties* replay_device_phys_mem_props, + const VulkanImageInfo* image_info, + VkImage* new_image, + VkDeviceMemory* new_image_memory) { VkImageCreateInfo ci; ci.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; @@ -149,9 +137,9 @@ VkResult CloneImage(CommonObjectInfoTable& object_info_table, ci.arrayLayers = image_info->layer_count; ci.samples = image_info->sample_count; ci.tiling = image_info->tiling; - ci.usage = image_info->usage | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT; + ci.usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT; ci.sharingMode = VK_SHARING_MODE_EXCLUSIVE; - ci.queueFamilyIndexCount = image_info->queue_family_index; + ci.queueFamilyIndexCount = 0; ci.pQueueFamilyIndices = nullptr; ci.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; @@ -174,8 +162,8 @@ VkResult CloneImage(CommonObjectInfoTable& object_info_table, mem_alloc_info.allocationSize = mem_reqs.size; assert(replay_device_phys_mem_props); - uint32_t index = - GetMemoryTypeIndex(*replay_device_phys_mem_props, mem_reqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + uint32_t index = graphics::GetMemoryTypeIndex( + *replay_device_phys_mem_props, mem_reqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); if (index == std::numeric_limits::max()) { GFXRECON_LOG_ERROR("%s failed to find an appropriate memory type", __func__) @@ -202,82 +190,6 @@ VkResult CloneImage(CommonObjectInfoTable& object_info_table, return VK_SUCCESS; } -VkResult CloneBuffer(CommonObjectInfoTable& object_info_table, - const graphics::VulkanDeviceTable* device_table, - const VkPhysicalDeviceMemoryProperties* replay_device_phys_mem_props, - const VulkanBufferInfo* buffer_info, - VkBuffer* new_buffer, - VkDeviceMemory* new_buffer_memory, - VkDeviceSize override_size) -{ - assert(device_table); - assert(new_buffer); - assert(buffer_info); - assert(buffer_info->size || override_size); - - VkBufferCreateInfo ci; - ci.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; - ci.pNext = nullptr; - ci.flags = VkBufferCreateFlags(0); - ci.size = override_size ? override_size : buffer_info->size; - ci.usage = buffer_info->usage | VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT; - ci.sharingMode = VK_SHARING_MODE_EXCLUSIVE; - ci.queueFamilyIndexCount = buffer_info->queue_family_index; - ci.pQueueFamilyIndices = nullptr; - - const VulkanDeviceInfo* device_info = object_info_table.GetVkDeviceInfo(buffer_info->parent_id); - VkDevice device = device_info->handle; - - VkResult res = device_table->CreateBuffer(device, &ci, nullptr, new_buffer); - if (res != VK_SUCCESS) - { - GFXRECON_LOG_ERROR("CreateBuffer failed with %s", util::ToString(res).c_str()); - return res; - } - - VkMemoryRequirements mem_reqs = {}; - VkMemoryAllocateInfo mem_alloc_info = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, nullptr }; - - device_table->GetBufferMemoryRequirements(device, *new_buffer, &mem_reqs); - mem_alloc_info.allocationSize = mem_reqs.size; - - assert(replay_device_phys_mem_props); - uint32_t index = - GetMemoryTypeIndex(*replay_device_phys_mem_props, mem_reqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); - if (index == std::numeric_limits::max()) - { - GFXRECON_LOG_ERROR("%s failed to find an appropriate memory type", __func__) - return VK_ERROR_INITIALIZATION_FAILED; - } - - mem_alloc_info.memoryTypeIndex = index; - - VkMemoryAllocateFlagsInfo mem_alloc_flags_info = {}; - mem_alloc_flags_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO; - if (ci.usage & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT) - { - mem_alloc_flags_info.flags |= VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT; - } - mem_alloc_info.pNext = &mem_alloc_flags_info; - - assert(new_buffer_memory); - res = device_table->AllocateMemory(device, &mem_alloc_info, nullptr, new_buffer_memory); - - if (res != VK_SUCCESS) - { - GFXRECON_LOG_ERROR("AllocateMemory failed with %s", util::ToString(res).c_str()); - return res; - } - - res = device_table->BindBufferMemory(device, *new_buffer, *new_buffer_memory, 0); - if (res != VK_SUCCESS) - { - GFXRECON_LOG_ERROR("BindBufferMemory failed with %s", util::ToString(res).c_str()); - return res; - } - return VK_SUCCESS; -} - uint32_t VkIndexTypeToBytes(VkIndexType type) { switch (type) @@ -414,31 +326,23 @@ MinMaxVertexIndex FindMinMaxVertexIndices(const std::vector& index_data } } -VkResult DumpImageToFile(const VulkanImageInfo* image_info, - const VulkanDeviceInfo* device_info, - const graphics::VulkanDeviceTable* device_table, - const graphics::VulkanInstanceTable* instance_table, - CommonObjectInfoTable& object_info_table, - const std::vector& filenames, - float scale, - bool& scaling_supported, - util::ScreenshotFormat image_file_format, - bool dump_all_subresources, - bool dump_image_raw, - bool dump_separate_alpha, - VkImageLayout layout) +VkResult DumpImage(DumpedImage& dumped_image, + VkImageLayout layout, + float scale, + bool dump_image_raw, + const VkImageSubresourceRange& subresource_range, + DumpedImageHostData& data, + const VulkanDeviceInfo* device_info, + const graphics::VulkanDeviceTable* device_table, + const graphics::VulkanInstanceTable* instance_table, + const CommonObjectInfoTable& object_info_table) { - assert(image_info != nullptr); - assert(device_info != nullptr); - assert(device_table != nullptr); - assert(instance_table != nullptr); - - std::vector aspects; - GetFormatAspects(image_info->format, aspects); + GFXRECON_ASSERT(device_info != nullptr); + GFXRECON_ASSERT(device_table != nullptr); + GFXRECON_ASSERT(instance_table != nullptr); - const uint32_t total_files = - dump_all_subresources ? (aspects.size() * image_info->layer_count * image_info->level_count) : aspects.size(); - assert(total_files == filenames.size()); + const VulkanImageInfo* image_info = dumped_image.image_info; + GFXRECON_ASSERT(image_info != nullptr); const VulkanPhysicalDeviceInfo* phys_dev_info = object_info_table.GetVkPhysicalDeviceInfo(device_info->parent_id); assert(phys_dev_info); @@ -449,14 +353,53 @@ VkResult DumpImageToFile(const VulkanImageInfo* image_info, *instance_table, *phys_dev_info->replay_device_info->memory_properties); - const VkFormat dst_format = dump_image_raw ? image_info->format : ChooseDestinationImageFormat(image_info->format); - - uint32_t f = 0; - for (size_t i = 0; i < aspects.size(); ++i) + // Choose the format in which the image will be dumped from the gpu into the host memory + VkFormat dst_format; { - const VkImageAspectFlagBits aspect = aspects[i]; + // When dumping images raw, the data will be fetched in the same format, otherwise they will be transformed into + // a VK_FORMAT_B8G8R8A8_* format, more suitable for dumping in an image file. + const VkFormat target_format = + dump_image_raw ? image_info->format : ChooseDestinationImageFormat(image_info->format); + + if (target_format != image_info->format) + { + // Check if we can convert the image into the desired format + const bool is_blit_supported = + resource_util.IsBlitSupported(image_info->format, image_info->tiling, target_format); + + // If we cannot convert then we will dump the image verbatim into a binary finaly + dst_format = is_blit_supported ? target_format : image_info->format; + } + else + { + dst_format = image_info->format; + } + } + + // Scale can be greater than one so we need to check if we can scale that much + const bool scaling_supported = resource_util.IsScalingSupported( + image_info->format, image_info->tiling, dst_format, image_info->type, image_info->extent, scale); + + dumped_image.scaling_failed = (scale != 1.0f && !scaling_supported); + dumped_image.dumped_format = dst_format; + + const VkImageSubresourceRange modified_subresource_range = + FilterImageSubresourceRange(subresource_range, image_info); + + std::vector aspects; + graphics::AspectFlagsToFlagBits(modified_subresource_range.aspectMask, aspects); + + const uint32_t total_subresources = + aspects.size() * (modified_subresource_range.layerCount * modified_subresource_range.levelCount); + + data.resize(total_subresources); - std::vector data; + // data will hold dumped data for all aspects and sub resources, total_subresources in total. + // VulkanResourcesUtil::ReadImageResource dumps all subresources for a specific aspect. + // For that reason keep a different counter for the data vector + size_t data_index = 0; + for (const auto aspect : aspects) + { std::vector subresource_offsets; std::vector subresource_sizes; @@ -479,39 +422,25 @@ VkResult DumpImageToFile(const VulkanImageInfo* image_info, image_resource.dst_format = dst_format; image_resource.all_layers_per_level = false; - scaling_supported = resource_util.IsScalingSupported(image_resource.format, - image_resource.tiling, - dst_format, - image_resource.type, - image_resource.extent, - scale); - const bool blit_supported = - resource_util.IsBlitSupported(image_resource.format, image_resource.tiling, dst_format); - const bool use_blit = (image_resource.format != dst_format && blit_supported) || - (image_resource.scale != 1.0f && scaling_supported); - - VkExtent3D scaled_extent = { - static_cast(std::max(static_cast(image_resource.extent.width) * scale, 1.0f)), - static_cast(std::max(static_cast(image_resource.extent.height) * scale, 1.0f)), - static_cast(std::max(static_cast(image_resource.extent.depth) * scale, 1.0f)) - }; + const VkExtent3D scaled_extent = (scale != 1.0f && scaling_supported) + ? graphics::ScaleExtent(image_info->extent, scale) + : image_info->extent; image_resource.resource_size = - resource_util.GetImageResourceSizesOptimal(image_resource.image, - use_blit ? dst_format : image_resource.format, - image_resource.type, - use_blit ? scaled_extent : image_resource.extent, - image_resource.level_count, - image_resource.layer_count, - image_resource.tiling, + resource_util.GetImageResourceSizesOptimal(dst_format, + image_info->type, + scaling_supported ? scaled_extent : image_info->extent, + image_info->level_count, + image_info->layer_count, + image_info->tiling, aspect, &subresource_offsets, &subresource_sizes, - image_resource.all_layers_per_level); + false); if (!image_resource.resource_size) { - GFXRECON_LOG_ERROR("Unsupported format. Image cannot be dumped"); + GFXRECON_LOG_WARNING("Unsupported format. Image cannot be dumped"); // This should not prohibit us from dumping other images though. Treat it as a no error return VK_SUCCESS; } @@ -521,135 +450,90 @@ VkResult DumpImageToFile(const VulkanImageInfo* image_info, return VK_ERROR_INITIALIZATION_FAILED; } - VkResult result = resource_util.ReadImageResource(image_resource, data); + DumpedHostData raw_data; + VkResult result = resource_util.ReadImageResource(image_resource, raw_data); if (result != VK_SUCCESS) { - GFXRECON_LOG_ERROR("Reading from image resource %" PRIu64 " failed (%s)", - image_info->capture_id, - util::ToString(result).c_str()) + GFXRECON_LOG_WARNING("Reading from image resource %" PRIu64 " failed (%s)", + image_info->capture_id, + util::ToString(result).c_str()) return result; } - const DumpedImageFormat output_image_format = GetDumpedImageFormat(device_info, - device_table, - instance_table, - object_info_table, - image_info->format, - image_info->tiling, - image_info->type, - image_file_format, - dump_image_raw); - - for (uint32_t mip = 0; mip < image_info->level_count; ++mip) + for (uint32_t mip = modified_subresource_range.baseMipLevel; + mip < modified_subresource_range.baseMipLevel + modified_subresource_range.levelCount; + ++mip) { - for (uint32_t layer = 0; layer < image_info->layer_count; ++layer) + for (uint32_t layer = modified_subresource_range.baseArrayLayer; + layer < modified_subresource_range.baseArrayLayer + modified_subresource_range.layerCount; + ++layer) { - const std::string& filename = filenames[f++]; + const VkExtent3D subresource_extent = graphics::ScaleToMipLevel(image_info->extent, mip); + const VkExtent3D subresource_scaled_extent = graphics::ScaleToMipLevel(scaled_extent, mip); + + dumped_image.dumped_subresources.emplace_back( + aspect, subresource_extent, subresource_scaled_extent, mip, layer); + + const uint32_t sub_res_idx = mip * image_info->layer_count + layer; + const void* offsetted_data = + reinterpret_cast(raw_data.data() + subresource_offsets[sub_res_idx]); + + data[data_index].resize(subresource_sizes[sub_res_idx]); + util::platform::MemoryCopy(data[data_index].data(), + subresource_sizes[sub_res_idx], + offsetted_data, + subresource_sizes[sub_res_idx]); + ++data_index; + } + } + } - // We don't support stencil output yet - if (aspects[i] == VK_IMAGE_ASPECT_STENCIL_BIT) - continue; + GFXRECON_ASSERT(data_index == total_subresources); + + return VK_SUCCESS; +} - const uint32_t sub_res_idx = mip * image_info->layer_count + layer; - const void* offsetted_data = reinterpret_cast( - reinterpret_cast(data.data()) + subresource_offsets[sub_res_idx]); +VkResult DumpBuffer(const DumpedBuffer& dumped_buffer, + DumpedHostData& data, + const VulkanDeviceInfo* device_info, + const graphics::VulkanDeviceTable* device_table, + const graphics::VulkanInstanceTable* instance_table, + const CommonObjectInfoTable& object_info_table) +{ + GFXRECON_ASSERT(device_info != nullptr); + GFXRECON_ASSERT(device_table != nullptr); + GFXRECON_ASSERT(instance_table != nullptr); - if (output_image_format != KFormatRaw) - { - const util::imagewriter::DataFormats image_writer_format = - VkFormatToImageWriterDataFormat(dst_format); - assert(image_writer_format != util::imagewriter::DataFormats::kFormat_UNSPECIFIED); - - if (scale != 1.0f && scaling_supported) - { - scaled_extent.width = std::max(image_info->extent.width * scale, 1.0f); - scaled_extent.height = std::max(image_info->extent.height * scale, 1.0f); - scaled_extent.depth = image_info->extent.depth; - } - else - { - scaled_extent = image_info->extent; - } - - scaled_extent.width = std::max(1u, scaled_extent.width >> mip); - scaled_extent.height = std::max(1u, scaled_extent.height >> mip); - scaled_extent.depth = std::max(1u, scaled_extent.depth >> mip); - - const uint32_t texel_size = vkuFormatElementSizeWithAspect(dst_format, aspect); - const uint32_t stride = texel_size * scaled_extent.width; - - if (output_image_format == kFormatBMP) - { - if (dump_separate_alpha) - { - util::imagewriter::WriteBmpImageSeparateAlpha(filename, - scaled_extent.width, - scaled_extent.height, - offsetted_data, - stride, - image_writer_format); - } - else - { - util::imagewriter::WriteBmpImage(filename, - scaled_extent.width, - scaled_extent.height, - offsetted_data, - stride, - image_writer_format, - vkuFormatHasAlpha(image_info->format)); - } - } - else if (output_image_format == KFormatPNG) - { - if (dump_separate_alpha) - { - util::imagewriter::WritePngImageSeparateAlpha(filename, - scaled_extent.width, - scaled_extent.height, - offsetted_data, - stride, - image_writer_format); - } - else - { - util::imagewriter::WritePngImage(filename, - scaled_extent.width, - scaled_extent.height, - offsetted_data, - stride, - image_writer_format, - vkuFormatHasAlpha(image_info->format)); - } - } - } - else - { - if (!dump_image_raw) - { - GFXRECON_LOG_WARNING( - "%s format is not handled. Images with that format will be dump as a plain binary file.", - util::ToString(image_info->format).c_str()); - } - - util::bufferwriter::WriteBuffer(filename, offsetted_data, subresource_sizes[sub_res_idx]); - } + const VulkanPhysicalDeviceInfo* phys_dev_info = object_info_table.GetVkPhysicalDeviceInfo(device_info->parent_id); + assert(phys_dev_info); - if (!dump_all_subresources) - { - break; - } - } + graphics::VulkanResourcesUtil resource_util(device_info->handle, + device_info->parent, + *device_table, + *instance_table, + *phys_dev_info->replay_device_info->memory_properties); - if (!dump_all_subresources) - { - break; - } - } + GFXRECON_ASSERT(dumped_buffer.size); + GFXRECON_ASSERT(dumped_buffer.size != VK_WHOLE_SIZE); + GFXRECON_ASSERT(dumped_buffer.offset != VK_WHOLE_SIZE); + + const uint32_t transfer_queue_index = FindTransferQueueFamilyIndex(device_info->enabled_queue_family_flags); + if (transfer_queue_index == VK_QUEUE_FAMILY_IGNORED) + { + GFXRECON_LOG_ERROR("Failed to find a transfer queue") + return VK_ERROR_UNKNOWN; + } + + GFXRECON_ASSERT(dumped_buffer.buffer_info.handle != VK_NULL_HANDLE); + VkResult res = resource_util.ReadFromBufferResource( + dumped_buffer.buffer_info.handle, dumped_buffer.size, dumped_buffer.offset, transfer_queue_index, data); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_WARNING("Failed reading from buffer (%s)", util::ToString(res).c_str()); + return res; } - assert(f == total_files); return VK_SUCCESS; } @@ -708,15 +592,16 @@ std::string IndexTypeToStr(VkIndexType type) } VkResult CreateVkBuffer(VkDeviceSize size, - const graphics::VulkanDeviceTable* device_table, + const graphics::VulkanDeviceTable& device_table, VkDevice parent_device, - VkBaseInStructure* pNext, + const VkBaseInStructure* buffer_create_info_pNext, + const VkBaseInStructure* allocate_memory_info_pNext, const VkPhysicalDeviceMemoryProperties* replay_device_phys_mem_props, + VkBufferUsageFlags usage_flags, VkBuffer* new_buffer, VkDeviceMemory* new_memory) { assert(size); - assert(device_table != nullptr); assert(new_buffer != nullptr); assert(new_memory != nullptr); assert(parent_device != VK_NULL_HANDLE); @@ -724,15 +609,15 @@ VkResult CreateVkBuffer(VkDeviceSize size, VkBufferCreateInfo bci; bci.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; - bci.pNext = pNext; + bci.pNext = buffer_create_info_pNext; bci.flags = 0; bci.size = size; - bci.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; + bci.usage = usage_flags; bci.sharingMode = VK_SHARING_MODE_EXCLUSIVE; bci.queueFamilyIndexCount = 0; bci.pQueueFamilyIndices = nullptr; - VkResult res = device_table->CreateBuffer(parent_device, &bci, nullptr, new_buffer); + VkResult res = device_table.CreateBuffer(parent_device, &bci, nullptr, new_buffer); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("%s(): CreateBuffer failed with: %s", __func__, util::ToString(res).c_str()); @@ -740,13 +625,13 @@ VkResult CreateVkBuffer(VkDeviceSize size, } VkMemoryRequirements mem_reqs = {}; - VkMemoryAllocateInfo mem_alloc_info = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, nullptr }; + VkMemoryAllocateInfo mem_alloc_info = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, allocate_memory_info_pNext }; - device_table->GetBufferMemoryRequirements(parent_device, *new_buffer, &mem_reqs); + device_table.GetBufferMemoryRequirements(parent_device, *new_buffer, &mem_reqs); mem_alloc_info.allocationSize = mem_reqs.size; - uint32_t mem_index = - GetMemoryTypeIndex(*replay_device_phys_mem_props, mem_reqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + uint32_t mem_index = graphics::GetMemoryTypeIndex( + *replay_device_phys_mem_props, mem_reqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); if (mem_index == std::numeric_limits::max()) { GFXRECON_LOG_ERROR("%s()%u failed to find an appropriate memory type", __func__, __LINE__); @@ -755,14 +640,23 @@ VkResult CreateVkBuffer(VkDeviceSize size, mem_alloc_info.memoryTypeIndex = mem_index; - res = device_table->AllocateMemory(parent_device, &mem_alloc_info, nullptr, new_memory); + // If VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT is requested then we need to pass that information vkAllocateMemory + VkMemoryAllocateFlagsInfoKHR alloc_flags_info{}; + if ((usage_flags & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT) == VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT) + { + alloc_flags_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR; + alloc_flags_info.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR; + mem_alloc_info.pNext = &alloc_flags_info; + } + + res = device_table.AllocateMemory(parent_device, &mem_alloc_info, nullptr, new_memory); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("%s(): AllocateMemory failed with %s", __func__, util::ToString(res).c_str()); return res; } - res = device_table->BindBufferMemory(parent_device, *new_buffer, *new_memory, 0); + res = device_table.BindBufferMemory(parent_device, *new_buffer, *new_memory, 0); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("%s(): BindBufferMemory failed with %s", __func__, util::ToString(res).c_str()); @@ -772,74 +666,6 @@ VkResult CreateVkBuffer(VkDeviceSize size, return VK_SUCCESS; } -void GetFormatAspects(VkFormat format, std::vector& aspects) -{ - aspects.clear(); - graphics::GetFormatAspects(format, &aspects); - - for (auto it = aspects.begin(); it < aspects.end();) - { - if (*it == VK_IMAGE_ASPECT_STENCIL_BIT) - { - it = aspects.erase(it); - } - else - { - ++it; - } - } -} - -DumpedImageFormat GetDumpedImageFormat(const VulkanDeviceInfo* device_info, - const graphics::VulkanDeviceTable* device_table, - const graphics::VulkanInstanceTable* instance_table, - VulkanObjectInfoTable& object_info_table, - VkFormat src_format, - VkImageTiling src_image_tiling, - VkImageType type, - util::ScreenshotFormat image_file_format, - bool dump_raw) -{ - const VulkanPhysicalDeviceInfo* phys_dev_info = object_info_table.GetVkPhysicalDeviceInfo(device_info->parent_id); - assert(phys_dev_info); - - // If there's a request for images to be dumped as raw bin files - if (dump_raw) - { - return KFormatRaw; - } - - graphics::VulkanResourcesUtil resource_util(device_info->handle, - device_info->parent, - *device_table, - *instance_table, - *phys_dev_info->replay_device_info->memory_properties); - - // Image cannot be converted into a format compatible for dumping in an image file - const VkFormat dst_format = ChooseDestinationImageFormat(src_format); - bool is_blit_supported = resource_util.IsBlitSupported(src_format, src_image_tiling, dst_format); - if (!vkuFormatIsDepthOrStencil(src_format) && src_format != dst_format && !is_blit_supported) - { - return KFormatRaw; - } - - // Choose the requested preference for image file extension - switch (image_file_format) - { - case util::ScreenshotFormat::kBmp: - return kFormatBMP; - - case util::ScreenshotFormat::kPng: - return KFormatPNG; - - default: - assert(0); - return KFormatRaw; - } - - return KFormatRaw; -} - std::string ShaderStageFlagsToString(VkShaderStageFlags flags) { if (flags == static_cast(VK_SHADER_STAGE_ALL)) @@ -1137,5 +963,997 @@ void ShaderStageFlagsToStageNames(VkShaderStageFlags flags, std::vector ShaderStageFlagsToPipelineBindPoints(VkShaderStageFlags flags) +{ + std::vector bind_points; + + constexpr VkShaderStageFlags gr_flags = + VK_SHADER_STAGE_ALL_GRAPHICS | VK_SHADER_STAGE_TASK_BIT_EXT | VK_SHADER_STAGE_MESH_BIT_EXT; + constexpr VkShaderStageFlags com_flags = VK_SHADER_STAGE_COMPUTE_BIT; + constexpr VkShaderStageFlags rt_flags = VK_SHADER_STAGE_RAYGEN_BIT_KHR | VK_SHADER_STAGE_ANY_HIT_BIT_KHR | + VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR | VK_SHADER_STAGE_MISS_BIT_KHR | + VK_SHADER_STAGE_INTERSECTION_BIT_KHR | VK_SHADER_STAGE_CALLABLE_BIT_KHR; + + if (flags & gr_flags) + { + bind_points.push_back(VK_PIPELINE_BIND_POINT_GRAPHICS); + } + + if (flags & com_flags) + { + bind_points.push_back(VK_PIPELINE_BIND_POINT_COMPUTE); + } + + if (flags & rt_flags) + { + bind_points.push_back(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR); + } + + return bind_points; +} + +uint32_t FindTransferQueueFamilyIndex(const VulkanDeviceInfo::EnabledQueueFamilyFlags& families) +{ + uint32_t index = VK_QUEUE_FAMILY_IGNORED; + + for (uint32_t i = 0; i < static_cast(families.queue_family_index_enabled.size()); ++i) + { + if (families.queue_family_index_enabled[i]) + { + const auto& flags_entry = families.queue_family_properties_flags.find(i); + if ((flags_entry != families.queue_family_properties_flags.end())) + { + if ((flags_entry->second & VK_QUEUE_TRANSFER_BIT) == VK_QUEUE_TRANSFER_BIT) + { + return i; + } + else if ((flags_entry->second & (VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT))) + { + // Apparently some implementations (i.e. Adreno) don't have a transfer queue. According to spec, + // graphics and compute queues also support transfer operations. + index = i; + } + } + } + } + + return index; +} + +bool CullDescriptor(CommandImageSubresourceIterator cmd_subresources_entry, + uint32_t desc_set, + uint32_t binding, + uint32_t array_index, + VkImageSubresourceRange* subresource_range) +{ + const DescriptorLocation desc_loc = DescriptorLocation{ desc_set, binding, array_index }; + const auto image_subresource_entry = cmd_subresources_entry->second.find(desc_loc); + if (image_subresource_entry == cmd_subresources_entry->second.end()) + { + return true; + } + + if (subresource_range != nullptr) + { + *subresource_range = image_subresource_entry->second; + } + + return false; +} + +uint32_t FindComputeQueueFamilyIndex(const VulkanDeviceInfo::EnabledQueueFamilyFlags& families) +{ + for (uint32_t i = 0; i < static_cast(families.queue_family_index_enabled.size()); ++i) + { + if (families.queue_family_index_enabled[i]) + { + const auto& flags_entry = families.queue_family_properties_flags.find(i); + if ((flags_entry != families.queue_family_properties_flags.end())) + { + if ((flags_entry->second & VK_QUEUE_COMPUTE_BIT) == VK_QUEUE_COMPUTE_BIT) + { + return i; + } + } + } + } + + return VK_QUEUE_FAMILY_IGNORED; +} + +VkResult CreateAndBeginCommandBuffer(FindQueueFamilyIndex_fp* queue_finder_fp, + const VulkanDeviceInfo* device_info, + const graphics::VulkanDeviceTable& device_table, + TemporaryCommandBuffer& cmd_buf_objects) +{ + GFXRECON_ASSERT(device_info != nullptr); + + const uint32_t compute_queue_index = queue_finder_fp(device_info->enabled_queue_family_flags); + GFXRECON_ASSERT(compute_queue_index != VK_QUEUE_FAMILY_IGNORED); + + const VkCommandPoolCreateInfo pool_create_info = { VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, + nullptr, + VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, + compute_queue_index }; + VkResult res = + device_table.CreateCommandPool(device_info->handle, &pool_create_info, nullptr, &cmd_buf_objects.command_pool); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s() CreateCommandPool failed (%s)", __func__, util::ToString(res).c_str()); + return res; + } + + const VkCommandBufferAllocateInfo alloc_info = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, + nullptr, + cmd_buf_objects.command_pool, + VK_COMMAND_BUFFER_LEVEL_PRIMARY, + 1 }; + res = device_table.AllocateCommandBuffers(device_info->handle, &alloc_info, &cmd_buf_objects.command_buffer); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s() AllocateCommandBuffers failed (%s)", __func__, util::ToString(res).c_str()); + return res; + } + + device_table.GetDeviceQueue(device_info->handle, compute_queue_index, 0, &cmd_buf_objects.queue); + + device_table.ResetCommandBuffer(cmd_buf_objects.command_buffer, VkCommandBufferResetFlagBits(0)); + + const VkCommandBufferBeginInfo begin_info = { + VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, nullptr, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, nullptr + }; + + res = device_table.BeginCommandBuffer(cmd_buf_objects.command_buffer, &begin_info); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s() BeginCommandBuffer failed (%s)", __func__, util::ToString(res).c_str()); + return res; + } + + cmd_buf_objects.device_info = device_info; + cmd_buf_objects.device_table = &device_table; + + return VK_SUCCESS; +} + +VkResult SubmitAndDestroyCommandBuffer(const TemporaryCommandBuffer& cmd_buf_objects) +{ + GFXRECON_ASSERT(cmd_buf_objects.device_table != nullptr); + GFXRECON_ASSERT(cmd_buf_objects.device_info != nullptr); + GFXRECON_ASSERT(cmd_buf_objects.command_buffer != VK_NULL_HANDLE); + GFXRECON_ASSERT(cmd_buf_objects.queue != VK_NULL_HANDLE); + GFXRECON_ASSERT(cmd_buf_objects.command_pool != VK_NULL_HANDLE); + + const VkFenceCreateInfo fence_info = { VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, nullptr, VkFenceCreateFlags(0) }; + VkFence fence; + VkResult res = + cmd_buf_objects.device_table->CreateFence(cmd_buf_objects.device_info->handle, &fence_info, nullptr, &fence); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s() CreateFence failed (%s)", __func__, util::ToString(res).c_str()); + return res; + } + + cmd_buf_objects.device_table->EndCommandBuffer(cmd_buf_objects.command_buffer); + + cmd_buf_objects.device_table->ResetFences(cmd_buf_objects.device_info->handle, 1, &fence); + + const VkSubmitInfo submit_info = { VK_STRUCTURE_TYPE_SUBMIT_INFO, nullptr, 0, nullptr, nullptr, 1, + &cmd_buf_objects.command_buffer, 0, nullptr }; + cmd_buf_objects.device_table->QueueSubmit(cmd_buf_objects.queue, 1, &submit_info, fence); + + // Wait a sensible amount of time (10 seconds) in case we did something that can cause the GPU to hang or + // crash. + res = cmd_buf_objects.device_table->WaitForFences( + cmd_buf_objects.device_info->handle, 1, &fence, VK_TRUE, 10000000000); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: WaitForFences failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + cmd_buf_objects.device_table->DestroyCommandPool( + cmd_buf_objects.device_info->handle, cmd_buf_objects.command_pool, nullptr); + + cmd_buf_objects.device_table->DestroyFence(cmd_buf_objects.device_info->handle, fence, nullptr); + + return VK_SUCCESS; +} + +static VkResult SerializeAccelerationStructure(AccelerationStructureDumpResourcesContext* acceleration_structure, + const VulkanDeviceInfo* device_info, + const graphics::VulkanDeviceTable& device_table, + const CommonObjectInfoTable& object_info_table_) +{ + constexpr uint32_t query_count = 1; + + const VulkanPhysicalDeviceInfo* phys_dev_info = object_info_table_.GetVkPhysicalDeviceInfo(device_info->parent_id); + GFXRECON_ASSERT(phys_dev_info != nullptr); + + const VkPhysicalDeviceMemoryProperties& mem_props = phys_dev_info->replay_device_info->memory_properties.value(); + const VkDevice device = device_info->handle; + + // A query pool is required for vkCmdWriteAccelerationStructuresPropertiesKHR + const VkQueryPoolCreateInfo qci = { VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO, + nullptr, + VkQueryPoolCreateFlagBits(0), + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, + static_cast(query_count), + VkQueryPipelineStatisticFlags(0) }; + + VkQueryPool query_pool; + VkResult res = device_table.CreateQueryPool(device, &qci, nullptr, &query_pool); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: CreateQueryPool failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + const uint32_t compute_queue_family_index = FindComputeQueueFamilyIndex(device_info->enabled_queue_family_flags); + if (compute_queue_family_index == VK_QUEUE_FAMILY_IGNORED) + { + GFXRECON_LOG_ERROR("%s: Failed to find a compute queue family index", __func__) + return VK_ERROR_UNKNOWN; + } + + // Create temporary command pool and buffer to execute vkCmdWriteAccelerationStructuresPropertiesKHR + const VkCommandPoolCreateInfo cpci = { VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, + nullptr, + VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, + compute_queue_family_index }; + VkCommandPool cmd_pool; + res = device_table.CreateCommandPool(device, &cpci, nullptr, &cmd_pool); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("(%s) CreateCommandPool failed (%s)", __func__, util::ToString(res).c_str()); + return res; + } + + const VkCommandBufferAllocateInfo cbai = { + VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, nullptr, cmd_pool, VK_COMMAND_BUFFER_LEVEL_PRIMARY, 1 + }; + VkCommandBuffer cmd_buffer; + res = device_table.AllocateCommandBuffers(device, &cbai, &cmd_buffer); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("(%s) AllocateCommandBuffers failed (%s)", __func__, util::ToString(res).c_str()); + return res; + } + + res = device_table.ResetCommandBuffer(cmd_buffer, 0); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: ResetCommandBuffer failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + const VkCommandBufferBeginInfo cbbi = { + VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, nullptr, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, nullptr + }; + res = device_table.BeginCommandBuffer(cmd_buffer, &cbbi); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: BeginCommandBuffer failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + // Reset query pool + device_table.CmdResetQueryPool(cmd_buffer, query_pool, 0, 1); + + // Flush any pending writes to the acceleration structure + const VkMemoryBarrier mem_barrier = { VK_STRUCTURE_TYPE_MEMORY_BARRIER, + nullptr, + VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR | VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR | VK_ACCESS_TRANSFER_READ_BIT }; + + device_table.CmdPipelineBarrier( + cmd_buffer, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR | VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR | VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlagBits(0), + 1, + &mem_barrier, + 0, + nullptr, + 0, + nullptr); + + // Do vkCmdWriteAccelerationStructuresPropertiesKHR to request + // VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR + for (uint32_t i = 0; i < query_count; ++i) + { + GFXRECON_ASSERT(acceleration_structure->as_info != nullptr); + const VkBufferMemoryBarrier as_buf_mem_barrier = { + VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, + nullptr, + VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR | VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR | VK_ACCESS_TRANSFER_READ_BIT, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + acceleration_structure->as_info->buffer, + 0, + VK_WHOLE_SIZE + }; + device_table.CmdPipelineBarrier( + cmd_buffer, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR | VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR | VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlagBits(0), + 0, + nullptr, + 1, + &as_buf_mem_barrier, + 0, + nullptr); + + device_table.CmdWriteAccelerationStructuresPropertiesKHR( + cmd_buffer, + 1, + &acceleration_structure->as_info->handle, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, + query_pool, + static_cast(i)); + } + + device_table.EndCommandBuffer(cmd_buffer); + + VkQueue compute_queue = VK_NULL_HANDLE; + device_table.GetDeviceQueue(device, compute_queue_family_index, 0, &compute_queue); + if (compute_queue == VK_NULL_HANDLE) + { + GFXRECON_LOG_ERROR("%s: GetDeviceQueue failed to get family index %u", __func__, compute_queue_family_index) + return VK_ERROR_UNKNOWN; + } + + const VkFenceCreateInfo fci = { VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, nullptr, 0 }; + VkFence fence; + res = device_table.CreateFence(device, &fci, nullptr, &fence); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: CreateFence failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + res = device_table.ResetFences(device, 1, &fence); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: ResetFences failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + const VkSubmitInfo si = { VK_STRUCTURE_TYPE_SUBMIT_INFO, nullptr, 0, nullptr, nullptr, 1, &cmd_buffer, 0, nullptr }; + res = device_table.QueueSubmit(compute_queue, 1, &si, fence); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: QueueSubmit failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + // Wait a sensible amount of time (10 seconds) in case we did something that can cause the GPU to hang or crash. + res = device_table.WaitForFences(device, 1, &fence, VK_TRUE, 10000000000); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: WaitForFences failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + // Read query results + std::vector query_results(query_count); + res = device_table.GetQueryPoolResults(device, + query_pool, + 0, + query_count, + query_results.size() * sizeof(VkDeviceSize), + query_results.data(), + sizeof(VkDeviceSize), + VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: GetQueryPoolResults failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + res = device_table.ResetCommandBuffer(cmd_buffer, 0); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: ResetCommandBuffer (2) failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + res = device_table.BeginCommandBuffer(cmd_buffer, &cbbi); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: BeginCommandBuffer (2) failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + // Do CmdCopyAccelerationStructureToMemoryKHR to copy the serialized AS into a buffer + for (uint32_t i = 0; i < query_count; ++i) + { + const VkDeviceSize serialized_size = query_results[i]; + acceleration_structure->serialized_data.size = serialized_size; + + if (!serialized_size) + { + continue; + } + + // These should be NULL otherwise we are leaking objects + GFXRECON_ASSERT(acceleration_structure->serialized_data.buffer == VK_NULL_HANDLE && + acceleration_structure->serialized_data.memory == VK_NULL_HANDLE); + res = CreateVkBuffer(serialized_size, + device_table, + device, + nullptr, + nullptr, + &mem_props, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, + &acceleration_structure->serialized_data.buffer, + &acceleration_structure->serialized_data.memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: CreateBuffer failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + const VkBufferDeviceAddressInfo bdai = { VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, + nullptr, + acceleration_structure->serialized_data.buffer }; + + VkDeviceOrHostAddressKHR device_address; + device_address.deviceAddress = device_table.GetBufferDeviceAddressKHR(device, &bdai); + + GFXRECON_ASSERT(acceleration_structure->as_info->handle != VK_NULL_HANDLE); + const VkCopyAccelerationStructureToMemoryInfoKHR castmi = { + VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR, + nullptr, + acceleration_structure->as_info->handle, + device_address, + VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR + }; + device_table.CmdCopyAccelerationStructureToMemoryKHR(cmd_buffer, &castmi); + + const VkBufferMemoryBarrier buf_barrier = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, + nullptr, + VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_TRANSFER_READ_BIT, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + acceleration_structure->serialized_data.buffer, + 0, + serialized_size }; + + device_table.CmdPipelineBarrier(cmd_buffer, + VK_PIPELINE_STAGE_TRANSFER_BIT | + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlagBits(0), + 0, + nullptr, + 1, + &buf_barrier, + 0, + nullptr); + } + + device_table.EndCommandBuffer(cmd_buffer); + + res = device_table.ResetFences(device, 1, &fence); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: ResetFences failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + res = device_table.QueueSubmit(compute_queue, 1, &si, fence); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: QueueSubmit (2) failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + // Wait a sensible amount of time (10 seconds) in case we did something that can cause the GPU to hang or crash. + res = device_table.WaitForFences(device, 1, &fence, VK_TRUE, 10000000000); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s: WaitForFences (2) failed (%s)", __func__, util::ToString(res).c_str()) + return res; + } + + // Release temporary vulkan objects + device_table.DestroyCommandPool(device, cmd_pool, nullptr); + device_table.DestroyQueryPool(device, query_pool, nullptr); + device_table.DestroyFence(device, fence, nullptr); + + return VK_SUCCESS; +} + +void AccelerationStructureDumpResourcesContext::ReleaseResources() +{ + if (as_info == nullptr) + { + return; + } + + const VulkanDeviceInfo* device_info = object_info_table.GetVkDeviceInfo(as_info->parent_id); + GFXRECON_ASSERT(device_info != nullptr); + + const VkDevice device = device_info->handle; + + as_info = nullptr; + + if (serialized_data.buffer != VK_NULL_HANDLE) + { + device_table.DestroyBuffer(device, serialized_data.buffer, nullptr); + serialized_data.buffer = VK_NULL_HANDLE; + } + + if (serialized_data.memory != VK_NULL_HANDLE) + { + device_table.FreeMemory(device, serialized_data.memory, nullptr); + serialized_data.memory = VK_NULL_HANDLE; + } + + serialized_data.size = 0; + + for (auto& as_data : as_build_objects) + { + if (auto* triangles = std::get_if(&as_data)) + { + triangles->vertex_format = VK_FORMAT_UNDEFINED; + triangles->vertex_buffer_size = 0; + + if (triangles->vertex_buffer != VK_NULL_HANDLE) + { + device_table.DestroyBuffer(device, triangles->vertex_buffer, nullptr); + triangles->vertex_buffer = VK_NULL_HANDLE; + } + + if (triangles->vertex_buffer_memory != VK_NULL_HANDLE) + { + device_table.FreeMemory(device, triangles->vertex_buffer_memory, nullptr); + triangles->vertex_buffer_memory = VK_NULL_HANDLE; + } + + triangles->index_type = VK_INDEX_TYPE_NONE_KHR; + triangles->index_buffer_size = 0; + + if (triangles->index_buffer != VK_NULL_HANDLE) + { + device_table.DestroyBuffer(device, triangles->index_buffer, nullptr); + triangles->index_buffer = VK_NULL_HANDLE; + } + + if (triangles->index_buffer_memory != VK_NULL_HANDLE) + { + device_table.FreeMemory(device, triangles->index_buffer_memory, nullptr); + triangles->index_buffer_memory = VK_NULL_HANDLE; + } + + if (triangles->transform_buffer != VK_NULL_HANDLE) + { + device_table.DestroyBuffer(device, triangles->transform_buffer, nullptr); + triangles->transform_buffer = VK_NULL_HANDLE; + } + + if (triangles->transform_buffer_memory != VK_NULL_HANDLE) + { + device_table.FreeMemory(device, triangles->transform_buffer_memory, nullptr); + triangles->transform_buffer_memory = VK_NULL_HANDLE; + } + } + else if (auto* instance = std::get_if(&as_data)) + { + instance->instance_count = 0; + instance->instance_buffer_size = 0; + + if (instance->instance_buffer != VK_NULL_HANDLE) + { + device_table.DestroyBuffer(device, instance->instance_buffer, nullptr); + instance->instance_buffer = VK_NULL_HANDLE; + } + + if (instance->instance_buffer_memory != VK_NULL_HANDLE) + { + device_table.FreeMemory(device, instance->instance_buffer_memory, nullptr); + instance->instance_buffer_memory = VK_NULL_HANDLE; + } + + if (instance->compute_ppl != VK_NULL_HANDLE) + { + device_table.DestroyPipeline(device, instance->compute_ppl, nullptr); + instance->compute_ppl = VK_NULL_HANDLE; + } + + if (instance->compute_ppl_layout != VK_NULL_HANDLE) + { + device_table.DestroyPipelineLayout(device, instance->compute_ppl_layout, nullptr); + instance->compute_ppl_layout = VK_NULL_HANDLE; + } + } + else if (auto* aabb = std::get_if(&as_data)) + { + aabb->buffer_size = 0; + + if (aabb->buffer != VK_NULL_HANDLE) + { + device_table.DestroyBuffer(device, aabb->buffer, nullptr); + aabb->buffer = VK_NULL_HANDLE; + } + + if (aabb->buffer_memory != VK_NULL_HANDLE) + { + device_table.FreeMemory(device, aabb->buffer_memory, nullptr); + aabb->buffer_memory = VK_NULL_HANDLE; + } + } + else + { + GFXRECON_LOG_ERROR("Unexpected as data entry"); + GFXRECON_ASSERT(0); + } + } + + as_build_objects.clear(); +} + +static VkResult DumpBLAS(DumpedAccelerationStructure& dumped_as, + AccelerationStructureDumpedHostData& dumped_as_host_data, + AccelerationStructureDumpResourcesContext* as_context, + const DumpResourcesAccelerationStructuresContext& acceleration_structures_context, + const VulkanDeviceInfo* device_info, + const graphics::VulkanDeviceTable& device_table, + const CommonObjectInfoTable& object_info_table, + const graphics::VulkanInstanceTable& instance_table, + const VulkanPerDeviceAddressTrackers& address_trackers) +{ + for (const auto& build_data : as_context->as_build_objects) + { + if (auto* triangles = std::get_if(&build_data)) + { + auto& blas_triangles_variant = dumped_as.input_buffers.emplace_back( + std::in_place_type, *triangles); + auto& blas_triangles = + std::get(blas_triangles_variant); + auto& new_dumped_triangles_host_data_variant = dumped_as_host_data.build_data.emplace_back( + std::in_place_type); + auto& new_dumped_triangles_host_data = + std::get(new_dumped_triangles_host_data_variant); + + VkResult res = DumpBuffer(blas_triangles.vertex_buffer, + new_dumped_triangles_host_data.vertex_buffer, + device_info, + &device_table, + &instance_table, + object_info_table); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_WARNING("Error dumping input vertex buffer for BLAS %" PRIu64 " (%s)", + as_context->as_info->capture_id, + util::ToString(res).c_str()); + return res; + } + + if (triangles->index_type != VK_INDEX_TYPE_NONE_KHR) + { + res = DumpBuffer(blas_triangles.index_buffer, + new_dumped_triangles_host_data.index_buffer, + device_info, + &device_table, + &instance_table, + object_info_table); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_WARNING("Error dumping input index buffer for BLAS %" PRIu64 " (%s)", + as_context->as_info->capture_id, + util::ToString(res).c_str()); + return res; + } + } + + if (triangles->transform_buffer != VK_NULL_HANDLE) + { + res = DumpBuffer(blas_triangles.transform_buffer, + new_dumped_triangles_host_data.transform_buffer, + device_info, + &device_table, + &instance_table, + object_info_table); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_WARNING("Error dumping transform buffer for BLAS %" PRIu64 " (%s)", + as_context->as_info->capture_id, + util::ToString(res).c_str()); + return res; + } + } + } + else if (auto* aabbs = std::get_if(&build_data)) + { + GFXRECON_ASSERT(aabbs->buffer != VK_NULL_HANDLE); + auto& new_aabb_buffer_variant = dumped_as.input_buffers.emplace_back( + std::in_place_type, *aabbs); + auto& new_aabb_buffer = + std::get(new_aabb_buffer_variant); + + auto& new_dumped_aabb_host_data_variant = dumped_as_host_data.build_data.emplace_back( + std::in_place_type); + auto& new_dumped_aabb_host_data = + std::get(new_dumped_aabb_host_data_variant); + + VkResult res = DumpBuffer(new_aabb_buffer.aabb_buffer, + new_dumped_aabb_host_data.aabb_buffer, + device_info, + &device_table, + &instance_table, + object_info_table); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_WARNING("Error dumping input AABB buffer for BLAS %" PRIu64 " (%s)", + as_context->as_info->capture_id, + util::ToString(res).c_str()); + return res; + } + } + else + { + GFXRECON_LOG_WARNING("Unexpected build data") + } + } + + VkResult res = SerializeAccelerationStructure(as_context, device_info, device_table, object_info_table); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_WARNING("Error serializing acceleration structures for TLAS %" PRIu64 " (%s)", + dumped_as.as_info->capture_id, + util::ToString(res).c_str()); + return res; + } + + // Fetch serialized data for TLAS + if (as_context->serialized_data.buffer != VK_NULL_HANDLE) + { + dumped_as.serialized_buffer.size = as_context->serialized_data.size; + dumped_as.serialized_buffer.buffer_info.handle = as_context->serialized_data.buffer; + + res = DumpBuffer(dumped_as.serialized_buffer, + dumped_as_host_data.serialized_data, + device_info, + &device_table, + &instance_table, + object_info_table); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_WARNING("Error dumping fetching serialized data for TLAS %" PRIu64 " (%s)", + dumped_as.as_info->capture_id, + util::ToString(res).c_str()); + return res; + } + } + + return VK_SUCCESS; +} + +static VkResult DumpTLAS(DumpedAccelerationStructure& dumped_as, + AccelerationStructureDumpedHostData& dumped_as_host_data, + AccelerationStructureDumpResourcesContext* as_context, + const DumpResourcesAccelerationStructuresContext& acceleration_structures_context, + const VulkanDeviceInfo* device_info, + const graphics::VulkanDeviceTable& device_table, + const CommonObjectInfoTable& object_info_table, + const graphics::VulkanInstanceTable& instance_table, + const VulkanPerDeviceAddressTrackers& address_trackers) +{ + const VulkanAccelerationStructureKHRInfo* as_info = dumped_as.as_info; + GFXRECON_ASSERT(as_info != nullptr); + GFXRECON_ASSERT(as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR); + + std::unordered_set referenced_BLASes; + const auto address_tracker_entry = address_trackers.find(device_info); + if (address_tracker_entry == address_trackers.end()) + { + GFXRECON_LOG_WARNING("Could not detect address tracker for device %" PRIu64, device_info->capture_id); + return VK_SUCCESS; + } + const VulkanDeviceAddressTracker& device_address_tracker = address_tracker_entry->second; + + for (const auto& tlas_build_object : as_context->as_build_objects) + { + GFXRECON_ASSERT( + (std::get_if(&tlas_build_object) == nullptr) && + (std::get_if(&tlas_build_object) == nullptr)); + + const auto* instance_build_data = + std::get_if(&tlas_build_object); + GFXRECON_ASSERT(instance_build_data != nullptr); + + auto& new_build_input_buffer = dumped_as.input_buffers.emplace_back( + std::in_place_type, *instance_build_data); + auto& new_instance_buffer = + std::get(new_build_input_buffer); + auto& new_build_host_data_variant = dumped_as_host_data.build_data.emplace_back( + std::in_place_type); + auto& new_instance_buffer_host_data = + std::get(new_build_host_data_variant); + // Fetch instance buffer + VkResult res = DumpBuffer(new_instance_buffer.instance_buffer, + new_instance_buffer_host_data.instance_buffer, + device_info, + &device_table, + &instance_table, + object_info_table); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_WARNING("Error dumping input instance buffer for TLAS %" PRIu64 " (%s)", + as_info->capture_id, + util::ToString(res).c_str()); + return res; + } + + // Parse instance buffer and extract referenced BLASes + const auto* instances = reinterpret_cast( + new_instance_buffer_host_data.instance_buffer.data()); + for (uint32_t i = 0; i < instance_build_data->instance_count; ++i) + { + // Get all BLASes associated with the referenced device address + const auto blases_infos = device_address_tracker.GetAccelerationStructuresByCaptureDeviceAddress( + static_cast(instances[i].accelerationStructureReference)); + if (blases_infos.empty()) + { + continue; + } + + for (auto blas_it = blases_infos.begin(); blas_it != blases_infos.end(); ++blas_it) + { + if (*blas_it == nullptr) + { + continue; + } + + const auto blas_context_entry = acceleration_structures_context.find(*blas_it); + // It is valid for a TLAS to reference BLASes which have not yet been built + // (vkCmdBuildAccelerationStructuresIndirectKHR has not been called for the + // VkAccelerationStructureKHR). This works as that BLAS can alias the memory of another BLAS which + // has been properly built. + if (blas_context_entry != acceleration_structures_context.end()) + { + referenced_BLASes.insert(blas_context_entry->second.get()); + break; + } + } + } + } + + // Dump all discovered BLASes + for (const auto& blas : referenced_BLASes) + { + GFXRECON_ASSERT(blas->as_info != nullptr); + auto& new_dumped_blass = dumped_as.BLASes.emplace_back(blas->as_info, dumped_as.dump_build_input_buffers); + auto& new_dumped_blass_host_data = + dumped_as_host_data.blass_dumped_data.emplace_back(AccelerationStructureDumpedHostData()); + VkResult res = DumpBLAS(new_dumped_blass, + new_dumped_blass_host_data, + blas, + acceleration_structures_context, + device_info, + device_table, + object_info_table, + instance_table, + address_trackers); + if (res != VK_SUCCESS) + { + return res; + } + } + + VkResult res = SerializeAccelerationStructure(as_context, device_info, device_table, object_info_table); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_WARNING("Error serializing acceleration structures for TLAS %" PRIu64 " (%s)", + as_info->capture_id, + util::ToString(res).c_str()); + return res; + } + + // Fetch serialized data for TLAS + if (as_context->serialized_data.buffer != VK_NULL_HANDLE) + { + dumped_as.serialized_buffer.size = as_context->serialized_data.size; + dumped_as.serialized_buffer.buffer_info.handle = as_context->serialized_data.buffer; + + res = DumpBuffer(dumped_as.serialized_buffer, + dumped_as_host_data.serialized_data, + device_info, + &device_table, + &instance_table, + object_info_table); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_WARNING("Error dumping fetching serialized data for TLAS %" PRIu64 " (%s)", + as_info->capture_id, + util::ToString(res).c_str()); + return res; + } + } + + return VK_SUCCESS; +} + +VkResult DumpAccelerationStructure(DumpedAccelerationStructure& dumped_as, + AccelerationStructureDumpedHostData& dumped_as_host_data, + AccelerationStructureDumpResourcesContext* as_context, + const DumpResourcesAccelerationStructuresContext& acceleration_structures_context, + const VulkanDeviceInfo* device_info, + const graphics::VulkanDeviceTable& device_table, + const CommonObjectInfoTable& object_info_table, + const graphics::VulkanInstanceTable& instance_table, + const VulkanPerDeviceAddressTrackers& address_trackers) +{ + const VulkanAccelerationStructureKHRInfo* as_info = dumped_as.as_info; + GFXRECON_ASSERT(as_info != nullptr); + + VkResult res; + if (as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR) + { + res = DumpTLAS(dumped_as, + dumped_as_host_data, + as_context, + acceleration_structures_context, + device_info, + device_table, + object_info_table, + instance_table, + address_trackers); + } + else + { + res = DumpBLAS(dumped_as, + dumped_as_host_data, + as_context, + acceleration_structures_context, + device_info, + device_table, + object_info_table, + instance_table, + address_trackers); + } + + return res; +} + +void CopyBufferAndBarrier(VkCommandBuffer command_buffer, + const graphics::VulkanDeviceTable& device_table, + VkBuffer src, + VkBuffer dst, + const std::vector& regions, + VkAccessFlags src_access_mask, + VkAccessFlags dst_access_mask, + VkPipelineStageFlags src_stage_mask, + VkPipelineStageFlags dst_stage_mask) +{ + device_table.CmdCopyBuffer(command_buffer, src, dst, regions.size(), regions.data()); + + const VkBufferMemoryBarrier buffer_barrier = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, + nullptr, + src_access_mask, + dst_access_mask, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + dst, + 0, + VK_WHOLE_SIZE }; + device_table.CmdPipelineBarrier(command_buffer, + src_stage_mask, + dst_stage_mask, + VkDependencyFlags(0), + 0, + nullptr, + 1, + &buffer_barrier, + 0, + nullptr); +} + GFXRECON_END_NAMESPACE(gfxrecon) GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_common.h b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_common.h index 092b09b40..6d889984b 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_common.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_common.h @@ -1,5 +1,5 @@ /* -** Copyright (c) 2024 LunarG, Inc. +** Copyright (c) 2024-2025 LunarG, Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -23,11 +23,18 @@ #ifndef GFXRECON_GENERATED_VULKAN_REPLAY_DUMP_RESOURCES_COMMON_H #define GFXRECON_GENERATED_VULKAN_REPLAY_DUMP_RESOURCES_COMMON_H +#include "decode/vulkan_device_address_tracker.h" #include "decode/common_object_info_table.h" -#include "vulkan/vulkan_core.h" +#include "decode/vulkan_object_info.h" +#include "decode/vulkan_replay_dump_resources_as.h" +#include "decode/vulkan_replay_dump_resources_delegate_dumped_resources.h" +#include "decode/vulkan_replay_options.h" +#include "generated/generated_vulkan_dispatch_table.h" +#include "util/logging.h" #include "util/defines.h" -#include "util/image_writer.h" #include "util/options.h" + +#include #include GFXRECON_BEGIN_NAMESPACE(gfxrecon) @@ -66,7 +73,7 @@ using BoundDescriptorSets = std::unordered_map& index_data int32_t vertex_offset, VkIndexType type); -VkResult DumpImageToFile(const VulkanImageInfo* image_info, - const VulkanDeviceInfo* device_info, - const graphics::VulkanDeviceTable* device_table, - const graphics::VulkanInstanceTable* instance_table, - CommonObjectInfoTable& object_info_table, - const std::vector& filenames, - float scale, - bool& scaling_supported, - util::ScreenshotFormat image_file_format, - bool dump_all_subresources = false, - bool dump_image_raw = false, - bool dump_separate_alpha = false, - VkImageLayout layout = VK_IMAGE_LAYOUT_MAX_ENUM); +ImageDumpResult CanDumpImage(const graphics::VulkanInstanceTable* instance_table, + VkPhysicalDevice phys_dev, + const VulkanImageInfo* image_info); + +// Fetch image from the GPU into host memory +VkResult DumpImage(DumpedImage& dumped_image, + VkImageLayout layout, + float scale, + bool dump_image_raw, + const VkImageSubresourceRange& subresource_range, + DumpedImageHostData& data, + const VulkanDeviceInfo* device_info, + const graphics::VulkanDeviceTable* device_table, + const graphics::VulkanInstanceTable* instance_table, + const CommonObjectInfoTable& object_info_table); + +// Fetch a buffer from the GPU into host memory +VkResult DumpBuffer(const DumpedBuffer& buffer, + DumpedHostData& data, + const VulkanDeviceInfo* device_info, + const graphics::VulkanDeviceTable* device_table, + const graphics::VulkanInstanceTable* instance_table, + const CommonObjectInfoTable& object_info_table); + +// Fetch an acceleration structure from the GPU into host memory +VkResult DumpAccelerationStructure(DumpedAccelerationStructure& dumped_as, + AccelerationStructureDumpedHostData& dumped_as_data, + AccelerationStructureDumpResourcesContext* as_context, + const DumpResourcesAccelerationStructuresContext& acceleration_structures_context, + const VulkanDeviceInfo* device_info, + const graphics::VulkanDeviceTable& device_table, + const CommonObjectInfoTable& object_info_table, + const graphics::VulkanInstanceTable& instance_table, + const VulkanPerDeviceAddressTrackers& address_trackers); std::string ShaderStageToStr(VkShaderStageFlagBits shader_stage); @@ -125,42 +141,125 @@ std::string FormatToStr(VkFormat format); std::string IndexTypeToStr(VkIndexType type); VkResult CreateVkBuffer(VkDeviceSize size, - const graphics::VulkanDeviceTable* device_table, + const graphics::VulkanDeviceTable& device_table, VkDevice parent_device, - VkBaseInStructure* pNext, + const VkBaseInStructure* pNext, + const VkBaseInStructure* allocate_memory_info_pNext, const VkPhysicalDeviceMemoryProperties* replay_device_phys_mem_props, + VkBufferUsageFlags usage_flags, VkBuffer* new_buffer, VkDeviceMemory* new_memory); -void GetFormatAspects(VkFormat format, std::vector& aspects); - std::string ShaderStageFlagsToString(VkShaderStageFlags flags); void ShaderStageFlagsToStageNames(VkShaderStageFlags flags, std::vector& stage_names); -class VulkanDumpResourcesDelegate; -class DefaultVulkanDumpResourcesDelegate; +std::vector ShaderStageFlagsToPipelineBindPoints(VkShaderStageFlags flags); -enum class DumpResourceType : uint32_t +uint32_t FindTransferQueueFamilyIndex(const VulkanDeviceInfo::EnabledQueueFamilyFlags& families); + +uint32_t FindComputeQueueFamilyIndex(const VulkanDeviceInfo::EnabledQueueFamilyFlags& families); + +using FindQueueFamilyIndex_fp = uint32_t(const VulkanDeviceInfo::EnabledQueueFamilyFlags&); + +struct TemporaryCommandBuffer { - kUnknown, - kRtv, - kDsv, - kVertex, - kIndex, - kImageDescriptor, - kBufferDescriptor, - kInlineUniformBufferDescriptor, - kDrawCallInfo, - kDispatchInfo, - kTraceRaysIndex, - kDispatchTraceRaysImage, - kDispatchTraceRaysBuffer, - kDispatchTraceRaysImageDescriptor, - kDispatchTraceRaysBufferDescriptor, - kDispatchTraceRaysInlineUniformBufferDescriptor, + TemporaryCommandBuffer() = default; + TemporaryCommandBuffer(const TemporaryCommandBuffer& other) + { + device_info = other.device_info; + device_table = other.device_table; + command_pool = other.command_pool; + command_buffer = other.command_buffer; + queue = other.queue; + } + + const VulkanDeviceInfo* device_info{ nullptr }; + const graphics::VulkanDeviceTable* device_table{ nullptr }; + + VkCommandPool command_pool = VK_NULL_HANDLE; + VkCommandBuffer command_buffer = VK_NULL_HANDLE; + VkQueue queue = VK_NULL_HANDLE; }; +VkResult CreateAndBeginCommandBuffer(FindQueueFamilyIndex_fp* queue_finder_fp, + const VulkanDeviceInfo* device_info, + const graphics::VulkanDeviceTable& device_table, + TemporaryCommandBuffer& cmd_buf_objects); + +VkResult SubmitAndDestroyCommandBuffer(const TemporaryCommandBuffer& cmd_buf_objects); + +// Inject a CmdCopyBuffer(command_buffer, src, dst, regions.count(), regions.size()) into the provided command buffer +// followed by the appropriate pipeline barrier +void CopyBufferAndBarrier(VkCommandBuffer command_buffer, + const graphics::VulkanDeviceTable& device_table, + VkBuffer src, + VkBuffer dst, + const std::vector& regions, + VkAccessFlags src_access_mask = VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_MEMORY_WRITE_BIT, + VkAccessFlags dst_access_mask = VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_HOST_READ_BIT, + VkPipelineStageFlags src_stage_mask = VK_PIPELINE_STAGE_TRANSFER_BIT, + VkPipelineStageFlags dst_stage_mask = VK_PIPELINE_STAGE_TRANSFER_BIT | + VK_PIPELINE_STAGE_HOST_BIT); + +static constexpr VkImageSubresourceRange FilterImageSubresourceRange(const VkImageSubresourceRange& subresource_range, + const VulkanImageInfo* image_info) +{ + GFXRECON_ASSERT(image_info != nullptr); + + VkImageSubresourceRange modified_subresource_range; + modified_subresource_range.aspectMask = subresource_range.aspectMask; + + // Handle base mip level and count + if (subresource_range.baseMipLevel > image_info->level_count) + { + modified_subresource_range.baseMipLevel = 0; + } + else + { + modified_subresource_range.baseMipLevel = subresource_range.baseMipLevel; + } + + if (subresource_range.levelCount == VK_REMAINING_MIP_LEVELS) + { + modified_subresource_range.levelCount = image_info->level_count - modified_subresource_range.baseMipLevel; + } + else + { + modified_subresource_range.levelCount = std::min(image_info->level_count, subresource_range.levelCount); + } + + // Handle base array layer and count + if (subresource_range.baseArrayLayer > image_info->layer_count) + { + modified_subresource_range.baseArrayLayer = 0; + } + else + { + modified_subresource_range.baseArrayLayer = subresource_range.baseArrayLayer; + } + + if (subresource_range.layerCount == VK_REMAINING_ARRAY_LAYERS) + { + modified_subresource_range.layerCount = image_info->layer_count - modified_subresource_range.baseArrayLayer; + } + else + { + modified_subresource_range.layerCount = std::min(image_info->layer_count, subresource_range.layerCount); + } + + return modified_subresource_range; +} + +bool CullDescriptor(CommandImageSubresourceIterator cmd_subresources_entry, + uint32_t desc_set, + uint32_t binding, + uint32_t array_index, + VkImageSubresourceRange* subresource_range = nullptr); + +class VulkanDumpResourcesDelegate; +class DefaultVulkanDumpResourcesDelegate; + enum class DumpResourcesCommandBufferLevel { kUnknown = 0, @@ -173,4 +272,4 @@ enum class DumpResourcesCommandBufferLevel GFXRECON_END_NAMESPACE(gfxrecon) GFXRECON_END_NAMESPACE(decode) -#endif /* GFXRECON_GENERATED_VULKAN_REPLAY_DUMP_RESOURCES_COMMON_H */ \ No newline at end of file +#endif /* GFXRECON_GENERATED_VULKAN_REPLAY_DUMP_RESOURCES_COMMON_H */ diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_compute_ray_tracing.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_compute_ray_tracing.cpp index afe1c7c7b..0b6d78a59 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_compute_ray_tracing.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_compute_ray_tracing.cpp @@ -1,5 +1,5 @@ /* -** Copyright (c) 2024 LunarG, Inc. +** Copyright (c) 2024-2025 LunarG, Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -20,28 +20,27 @@ ** DEALINGS IN THE SOFTWARE. */ +#include "decode/struct_pointer_decoder.h" #include "decode/vulkan_object_info.h" #include "decode/vulkan_replay_dump_resources_compute_ray_tracing.h" #include "decode/vulkan_replay_dump_resources_common.h" #include "decode/vulkan_replay_dump_resources_delegate.h" #include "format/format.h" #include "generated/generated_vulkan_enum_to_string.h" +#include "generated/generated_vulkan_struct_decoders.h" #include "graphics/vulkan_resources_util.h" -#include "util/image_writer.h" -#include "util/buffer_writer.h" +#include "graphics/vulkan_util.h" +#include "util/compressor.h" #include "util/logging.h" #include "util/platform.h" -#include #include #include #include #include #include #include -#include #include -#include #if !defined(WIN32) #include #endif @@ -49,18 +48,25 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) -DispatchTraceRaysDumpingContext::DispatchTraceRaysDumpingContext(const std::vector* dispatch_indices, - const std::vector* trace_rays_indices, - CommonObjectInfoTable& object_info_table, - const VulkanReplayOptions& options, - VulkanDumpResourcesDelegate& delegate) : +DispatchTraceRaysDumpingContext::DispatchTraceRaysDumpingContext( + const CommandIndices* dispatch_indices, + const CommandImageSubresource& disp_subresources, + const CommandIndices* trace_rays_indices, + const CommandImageSubresource& tr_subresources, + CommonObjectInfoTable& object_info_table, + const VulkanReplayOptions& options, + VulkanDumpResourcesDelegate& delegate, + const util::Compressor* compressor, + const DumpResourcesAccelerationStructuresContext& acceleration_structures_context, + const VulkanPerDeviceAddressTrackers& address_trackers) : original_command_buffer_info_(nullptr), - DR_command_buffer_(VK_NULL_HANDLE), dump_resources_before_(options.dump_resources_before), delegate_(delegate), - dump_immutable_resources_(options.dump_resources_dump_immutable_resources), bound_pipeline_compute_(nullptr), + DR_command_buffer_(VK_NULL_HANDLE), disp_subresources_(disp_subresources), tr_subresources_(tr_subresources), + delegate_(delegate), options_(options), compressor_(compressor), bound_pipeline_compute_(nullptr), bound_pipeline_trace_rays_(nullptr), command_buffer_level_(DumpResourcesCommandBufferLevel::kPrimary), device_table_(nullptr), parent_device_(VK_NULL_HANDLE), instance_table_(nullptr), object_info_table_(object_info_table), replay_device_phys_mem_props_(nullptr), current_dispatch_index_(0), - current_trace_rays_index_(0), reached_end_command_buffer_(false) + current_trace_rays_index_(0), acceleration_structures_context_(acceleration_structures_context), + address_trackers_(address_trackers) { if (dispatch_indices != nullptr) { @@ -100,8 +106,7 @@ void DispatchTraceRaysDumpingContext::Release() assert(pool_info); device_table_->FreeCommandBuffers(device, pool_info->handle, 1, &DR_command_buffer_); - DR_command_buffer_ = VK_NULL_HANDLE; - reached_end_command_buffer_ = false; + DR_command_buffer_ = VK_NULL_HANDLE; } } @@ -116,7 +121,213 @@ void DispatchTraceRaysDumpingContext::Release() trace_rays_params_.clear(); } -VkResult DispatchTraceRaysDumpingContext::CloneCommandBuffer(VulkanCommandBufferInfo* orig_cmd_buf_info, +void DispatchTraceRaysDumpingContext::CmdDispatch(const ApiCallInfo& call_info, + PFN_vkCmdDispatch func, + VkCommandBuffer original_command_buffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) +{ + const uint64_t disp_index = call_info.index; + const bool must_dump = MustDumpDispatch(disp_index); + + if (must_dump) + { + InsertNewDispatchParameters(disp_index, groupCountX, groupCountY, groupCountZ); + } + + if (options_.dump_resources_before && must_dump) + { + CloneDispatchMutableResources(disp_index, true); + FinalizeCommandBuffer(true); + } + + VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, groupCountX, groupCountY, groupCountZ); + } + + if (must_dump) + { + CloneDispatchMutableResources(disp_index, false); + FinalizeCommandBuffer(true); + } +} + +void DispatchTraceRaysDumpingContext::CmdDispatchIndirect(const ApiCallInfo& call_info, + PFN_vkCmdDispatchIndirect func, + VkCommandBuffer original_command_buffer, + const VulkanBufferInfo* buffer_info, + VkDeviceSize offset) +{ + const uint64_t disp_index = call_info.index; + const bool must_dump = MustDumpDispatch(disp_index); + + if (must_dump) + { + InsertNewDispatchParameters(disp_index, buffer_info, offset); + } + + if (options_.dump_resources_before && must_dump) + { + CloneDispatchMutableResources(disp_index, true); + FinalizeCommandBuffer(true); + } + + VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(); + func(dispatch_rays_command_buffer, buffer_info->handle, offset); + + if (must_dump) + { + CloneDispatchMutableResources(disp_index, false); + FinalizeCommandBuffer(true); + } +} + +void DispatchTraceRaysDumpingContext::CmdTraceRaysKHR( + const ApiCallInfo& call_info, + PFN_vkCmdTraceRaysKHR func, + VkCommandBuffer original_command_buffer, + StructPointerDecoder* pRaygenShaderBindingTable, + StructPointerDecoder* pMissShaderBindingTable, + StructPointerDecoder* pHitShaderBindingTable, + StructPointerDecoder* pCallableShaderBindingTable, + uint32_t width, + uint32_t height, + uint32_t depth) +{ + const uint64_t tr_index = call_info.index; + const bool must_dump = MustDumpTraceRays(tr_index); + + const VkStridedDeviceAddressRegionKHR* in_pRaygenShaderBindingTable = pRaygenShaderBindingTable->GetPointer(); + const VkStridedDeviceAddressRegionKHR* in_pMissShaderBindingTable = pMissShaderBindingTable->GetPointer(); + const VkStridedDeviceAddressRegionKHR* in_pHitShaderBindingTable = pHitShaderBindingTable->GetPointer(); + const VkStridedDeviceAddressRegionKHR* in_pCallableShaderBindingTable = pCallableShaderBindingTable->GetPointer(); + + if (must_dump) + { + InsertNewTraceRaysParameters(tr_index, + in_pRaygenShaderBindingTable, + in_pMissShaderBindingTable, + in_pHitShaderBindingTable, + in_pCallableShaderBindingTable, + width, + height, + depth); + } + + if (options_.dump_resources_before && must_dump) + { + CloneTraceRaysMutableResources(tr_index, true); + FinalizeCommandBuffer(true); + } + + VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, + in_pRaygenShaderBindingTable, + in_pMissShaderBindingTable, + in_pHitShaderBindingTable, + in_pCallableShaderBindingTable, + width, + height, + depth); + } + + if (must_dump) + { + CloneTraceRaysMutableResources(tr_index, false); + FinalizeCommandBuffer(false); + } +} + +void DispatchTraceRaysDumpingContext::CmdTraceRaysIndirectKHR( + const ApiCallInfo& call_info, + PFN_vkCmdTraceRaysIndirectKHR func, + VkCommandBuffer original_command_buffer, + StructPointerDecoder* pRaygenShaderBindingTable, + StructPointerDecoder* pMissShaderBindingTable, + StructPointerDecoder* pHitShaderBindingTable, + StructPointerDecoder* pCallableShaderBindingTable, + VkDeviceAddress indirectDeviceAddress) +{ + const VkStridedDeviceAddressRegionKHR* in_pRaygenShaderBindingTable = pRaygenShaderBindingTable->GetPointer(); + const VkStridedDeviceAddressRegionKHR* in_pMissShaderBindingTable = pMissShaderBindingTable->GetPointer(); + const VkStridedDeviceAddressRegionKHR* in_pHitShaderBindingTable = pHitShaderBindingTable->GetPointer(); + const VkStridedDeviceAddressRegionKHR* in_pCallableShaderBindingTable = pCallableShaderBindingTable->GetPointer(); + + const uint64_t tr_index = call_info.index; + const bool must_dump = MustDumpTraceRays(tr_index); + + if (must_dump) + { + InsertNewTraceRaysIndirectParameters(tr_index, + in_pRaygenShaderBindingTable, + in_pMissShaderBindingTable, + in_pHitShaderBindingTable, + in_pCallableShaderBindingTable, + indirectDeviceAddress); + } + + if (options_.dump_resources_before && must_dump) + { + CloneTraceRaysMutableResources(tr_index, true); + FinalizeCommandBuffer(true); + } + + VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, + in_pRaygenShaderBindingTable, + in_pMissShaderBindingTable, + in_pHitShaderBindingTable, + in_pCallableShaderBindingTable, + indirectDeviceAddress); + } + + if (must_dump) + { + CloneTraceRaysMutableResources(tr_index, false); + FinalizeCommandBuffer(false); + } +} + +void DispatchTraceRaysDumpingContext::CmdTraceRaysIndirect2KHR(const ApiCallInfo& call_info, + PFN_vkCmdTraceRaysIndirect2KHR func, + VkCommandBuffer original_command_buffer, + VkDeviceAddress indirectDeviceAddress) +{ + const uint64_t tr_index = call_info.index; + const bool must_dump = MustDumpTraceRays(tr_index); + + if (must_dump) + { + InsertNewTraceRaysIndirect2Parameters(tr_index, indirectDeviceAddress); + } + + if (options_.dump_resources_before && must_dump) + { + CloneTraceRaysMutableResources(tr_index, true); + FinalizeCommandBuffer(true); + } + + VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, indirectDeviceAddress); + } + + if (must_dump) + { + CloneTraceRaysMutableResources(tr_index, false); + FinalizeCommandBuffer(false); + } +} + +VkResult DispatchTraceRaysDumpingContext::BeginCommandBuffer(VulkanCommandBufferInfo* orig_cmd_buf_info, const graphics::VulkanDeviceTable* dev_table, const graphics::VulkanInstanceTable* inst_table, const VkCommandBufferBeginInfo* begin_info) @@ -208,17 +419,14 @@ void DispatchTraceRaysDumpingContext::BindDescriptorSets( if (dynamicOffsetCount && pDynamicOffsets != nullptr) { - for (const auto& binding : descriptor_sets_infos[i]->descriptors) + for (const auto& [binding_index, binding] : descriptor_sets_infos[i]->descriptors) { - const uint32_t bindind_index = binding.first; - - if (binding.second.desc_type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC || - binding.second.desc_type == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC) + if (binding.desc_type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC || + binding.desc_type == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC) { - for (size_t ai = 0; ai < bound_descriptor_sets[bindind_index].buffer_info.size(); ++ai) + for (auto& [array_index, buf_desc] : bound_descriptor_sets[binding_index].buffer_info) { - bound_descriptor_sets[bindind_index].buffer_info[ai].offset += - pDynamicOffsets[dynamic_offset_index]; + buf_desc.offset += pDynamicOffsets[dynamic_offset_index]; ++dynamic_offset_index; } } @@ -237,7 +445,7 @@ bool DispatchTraceRaysDumpingContext::MustDumpDispatch(uint64_t index) const return false; } - for (size_t i = dump_resources_before_ ? current_dispatch_index_ / 2 : current_dispatch_index_; + for (size_t i = options_.dump_resources_before ? current_dispatch_index_ / 2 : current_dispatch_index_; i < dispatch_indices_.size(); ++i) { @@ -263,7 +471,7 @@ bool DispatchTraceRaysDumpingContext::MustDumpTraceRays(uint64_t index) const return false; } - for (size_t i = dump_resources_before_ ? current_trace_rays_index_ / 2 : current_trace_rays_index_; + for (size_t i = options_.dump_resources_before ? current_trace_rays_index_ / 2 : current_trace_rays_index_; i < trace_rays_indices_.size(); ++i) { @@ -290,7 +498,7 @@ void DispatchTraceRaysDumpingContext::CopyBufferResource(const VulkanBufferInfo* assert(range); assert(dst_buffer != VK_NULL_HANDLE); - const VkDeviceSize size = (range == VK_WHOLE_SIZE ? src_buffer_info->size - offset : range); + const VkDeviceSize size = (range == VK_WHOLE_SIZE ? (src_buffer_info->size - offset) : range); VkBufferMemoryBarrier buf_barrier; buf_barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER; @@ -317,6 +525,22 @@ void DispatchTraceRaysDumpingContext::CopyBufferResource(const VulkanBufferInfo* VkBufferCopy region = { offset, 0, size }; device_table_->CmdCopyBuffer(DR_command_buffer_, src_buffer_info->handle, dst_buffer, 1, ®ion); + + buf_barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + buf_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + buf_barrier.buffer = dst_buffer; + buf_barrier.offset = 0; + + device_table_->CmdPipelineBarrier(DR_command_buffer_, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 1, + &buf_barrier, + 0, + nullptr); } void DispatchTraceRaysDumpingContext::CopyImageResource(const VulkanImageInfo* src_image_info, VkImage dst_image) @@ -344,11 +568,11 @@ void DispatchTraceRaysDumpingContext::CopyImageResource(const VulkanImageInfo* s img_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; img_barrier.oldLayout = old_layout; img_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; - img_barrier.srcQueueFamilyIndex = src_image_info->queue_family_index; - img_barrier.dstQueueFamilyIndex = src_image_info->queue_family_index; + img_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + img_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; img_barrier.image = src_image_info->handle; img_barrier.subresourceRange = { - graphics::GetFormatAspectMask(src_image_info->format), 0, VK_REMAINING_MIP_LEVELS, 0, VK_REMAINING_ARRAY_LAYERS + graphics::GetFormatAspects(src_image_info->format), 0, VK_REMAINING_MIP_LEVELS, 0, VK_REMAINING_ARRAY_LAYERS }; assert(device_table_ != nullptr); @@ -386,14 +610,14 @@ void DispatchTraceRaysDumpingContext::CopyImageResource(const VulkanImageInfo* s std::vector copies(src_image_info->level_count, VkImageCopy()); VkImageCopy copy; - copy.srcSubresource.aspectMask = graphics::GetFormatAspectMask(src_image_info->format); + copy.srcSubresource.aspectMask = graphics::GetFormatAspects(src_image_info->format); copy.srcSubresource.baseArrayLayer = 0; copy.srcSubresource.layerCount = src_image_info->layer_count; copy.srcOffset.x = 0; copy.srcOffset.y = 0; copy.srcOffset.z = 0; - copy.dstSubresource.aspectMask = graphics::GetFormatAspectMask(src_image_info->format); + copy.dstSubresource.aspectMask = graphics::GetFormatAspects(src_image_info->format); copy.dstSubresource.baseArrayLayer = 0; copy.dstSubresource.layerCount = src_image_info->layer_count; copy.dstOffset.x = 0; @@ -404,9 +628,7 @@ void DispatchTraceRaysDumpingContext::CopyImageResource(const VulkanImageInfo* s { copy.srcSubresource.mipLevel = i; copy.dstSubresource.mipLevel = i; - copy.extent.width = (src_image_info->extent.width << i); - copy.extent.height = (src_image_info->extent.height << i); - copy.extent.depth = (src_image_info->extent.depth << i); + copy.extent = graphics::ScaleToMipLevel(src_image_info->extent, i); copies[i] = copy; } @@ -664,6 +886,16 @@ static void SnapshotBoundDescriptorsTraceRays(DispatchTraceRaysDumpingContext::T } break; + case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: + { + for (const auto& [array_idx, as_info] : binding_info.acceleration_structs_khr_info) + { + tr_params.referenced_descriptors[desc_set_index][desc_binding_index] + .acceleration_structs_khr_info[array_idx] = as_info; + } + } + break; + case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK: { tr_params.referenced_descriptors[desc_set_index][desc_binding_index].inline_uniform_block = @@ -704,8 +936,6 @@ void DispatchTraceRaysDumpingContext::SnapshotTraceRaysState(TraceRaysParams& tr VkResult DispatchTraceRaysDumpingContext::CloneMutableResources(const BoundDescriptorSets& referenced_descriptors, MutableResourcesBackupContext& resource_backup_context) { - assert(IsRecording()); - for (const auto& [desc_set_index, desc_set_info] : referenced_descriptors) { for (const auto& [binding_index, desc_info] : desc_set_info) @@ -728,19 +958,19 @@ VkResult DispatchTraceRaysDumpingContext::CloneMutableResources(const BoundDescr assert(img_info); auto& new_entry = resource_backup_context.images.emplace_back(); - new_entry.original_image = img_info; + new_entry.new_image_info = *img_info; new_entry.stages = stage_flags; new_entry.desc_type = desc_type; new_entry.desc_set = desc_set_index; new_entry.desc_binding = binding_index; new_entry.array_index = array_index; - VkResult res = CloneImage(object_info_table_, - device_table_, - replay_device_phys_mem_props_, - img_info, - &new_entry.image, - &new_entry.image_memory); + VkResult res = CreateVkImage(object_info_table_, + device_table_, + replay_device_phys_mem_props_, + img_info, + &new_entry.new_image_info.handle, + &new_entry.image_memory); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Cloning image resource %" PRIu64 " failed (%s)", @@ -749,7 +979,7 @@ VkResult DispatchTraceRaysDumpingContext::CloneMutableResources(const BoundDescr return res; } - CopyImageResource(img_info, new_entry.image); + CopyImageResource(img_info, new_entry.new_image_info.handle); } } break; @@ -765,7 +995,7 @@ VkResult DispatchTraceRaysDumpingContext::CloneMutableResources(const BoundDescr } auto& new_entry = resource_backup_context.buffers.emplace_back(); - new_entry.original_buffer = buf_info; + new_entry.new_buffer_info = *buf_info; new_entry.stages = stage_flags; new_entry.desc_type = desc_type; new_entry.desc_set = desc_set_index; @@ -774,14 +1004,16 @@ VkResult DispatchTraceRaysDumpingContext::CloneMutableResources(const BoundDescr new_entry.cloned_size = buf_desc->range == VK_WHOLE_SIZE ? (buf_info->size - buf_desc->offset) : buf_desc->range; - VkResult res = CloneBuffer(object_info_table_, - device_table_, - replay_device_phys_mem_props_, - buf_info, - &new_entry.buffer, - &new_entry.buffer_memory, - new_entry.cloned_size); - + VkResult res = + CreateVkBuffer(new_entry.cloned_size, + *device_table_, + object_info_table_.GetVkDeviceInfo(buf_info->parent_id)->handle, + nullptr, + nullptr, + replay_device_phys_mem_props_, + VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + &new_entry.new_buffer_info.handle, + &new_entry.buffer_memory); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Cloning buffer resource %" PRIu64 " failed (%s)", @@ -790,7 +1022,8 @@ VkResult DispatchTraceRaysDumpingContext::CloneMutableResources(const BoundDescr return res; } - CopyBufferResource(buf_info, buf_desc->offset, buf_desc->range, new_entry.buffer); + CopyBufferResource( + buf_info, buf_desc->offset, new_entry.cloned_size, new_entry.new_buffer_info.handle); } } break; @@ -807,7 +1040,7 @@ VkResult DispatchTraceRaysDumpingContext::CloneMutableResources(const BoundDescr } auto& new_entry = resource_backup_context.buffers.emplace_back(); - new_entry.original_buffer = buf_info; + new_entry.new_buffer_info = *buf_info; new_entry.stages = stage_flags; new_entry.desc_type = desc_type; new_entry.desc_set = desc_set_index; @@ -816,14 +1049,16 @@ VkResult DispatchTraceRaysDumpingContext::CloneMutableResources(const BoundDescr new_entry.cloned_size = buf_desc.range == VK_WHOLE_SIZE ? (buf_info->size - buf_desc.offset) : buf_desc.range; - VkResult res = CloneBuffer(object_info_table_, - device_table_, - replay_device_phys_mem_props_, - buf_info, - &new_entry.buffer, - &new_entry.buffer_memory, - new_entry.cloned_size); - + VkResult res = + CreateVkBuffer(new_entry.cloned_size, + *device_table_, + object_info_table_.GetVkDeviceInfo(buf_info->parent_id)->handle, + nullptr, + nullptr, + replay_device_phys_mem_props_, + VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + &new_entry.new_buffer_info.handle, + &new_entry.buffer_memory); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Cloning buffer resource %" PRIu64 " failed (%s)", @@ -832,7 +1067,8 @@ VkResult DispatchTraceRaysDumpingContext::CloneMutableResources(const BoundDescr return res; } - CopyBufferResource(buf_info, buf_desc.offset, buf_desc.range, new_entry.buffer); + CopyBufferResource( + buf_info, buf_desc.offset, new_entry.cloned_size, new_entry.new_buffer_info.handle); } } break; @@ -870,40 +1106,41 @@ void DispatchTraceRaysDumpingContext::DestroyMutableResourcesClones() DispatchParams& dis_params = *params.second; for (size_t i = 0; i < dis_params.mutable_resources_clones.images.size(); ++i) { - assert(dis_params.mutable_resources_clones.images[i].original_image != nullptr); const VulkanDeviceInfo* device_info = object_info_table_.GetVkDeviceInfo( - dis_params.mutable_resources_clones.images[i].original_image->parent_id); + dis_params.mutable_resources_clones.images[i].new_image_info.parent_id); assert(device_info != nullptr); VkDevice device = device_info->handle; device_table_->FreeMemory(device, dis_params.mutable_resources_clones.images[i].image_memory, nullptr); - device_table_->DestroyImage(device, dis_params.mutable_resources_clones.images[i].image, nullptr); + device_table_->DestroyImage( + device, dis_params.mutable_resources_clones.images[i].new_image_info.handle, nullptr); - if (dump_resources_before_) + if (options_.dump_resources_before) { device_table_->FreeMemory( device, dis_params.mutable_resources_clones_before.images[i].image_memory, nullptr); device_table_->DestroyImage( - device, dis_params.mutable_resources_clones_before.images[i].image, nullptr); + device, dis_params.mutable_resources_clones_before.images[i].new_image_info.handle, nullptr); } } for (size_t i = 0; i < dis_params.mutable_resources_clones.buffers.size(); ++i) { - assert(dis_params.mutable_resources_clones.buffers[i].original_buffer != nullptr); const VulkanDeviceInfo* device_info = object_info_table_.GetVkDeviceInfo( - dis_params.mutable_resources_clones.buffers[i].original_buffer->parent_id); + dis_params.mutable_resources_clones.buffers[i].new_buffer_info.parent_id); assert(device_info != nullptr); VkDevice device = device_info->handle; device_table_->FreeMemory(device, dis_params.mutable_resources_clones.buffers[i].buffer_memory, nullptr); - device_table_->DestroyBuffer(device, dis_params.mutable_resources_clones.buffers[i].buffer, nullptr); - if (dump_resources_before_) + device_table_->DestroyBuffer( + device, dis_params.mutable_resources_clones.buffers[i].new_buffer_info.handle, nullptr); + + if (options_.dump_resources_before) { device_table_->FreeMemory( device, dis_params.mutable_resources_clones_before.buffers[i].buffer_memory, nullptr); device_table_->DestroyBuffer( - device, dis_params.mutable_resources_clones_before.buffers[i].buffer, nullptr); + device, dis_params.mutable_resources_clones_before.buffers[i].new_buffer_info.handle, nullptr); } } } @@ -915,39 +1152,41 @@ void DispatchTraceRaysDumpingContext::DestroyMutableResourcesClones() TraceRaysParams& tr_params = *params.second; for (size_t i = 0; i < tr_params.mutable_resources_clones.images.size(); ++i) { - assert(tr_params.mutable_resources_clones.images[i].original_image != nullptr); const VulkanDeviceInfo* device_info = object_info_table_.GetVkDeviceInfo( - tr_params.mutable_resources_clones.images[i].original_image->parent_id); + tr_params.mutable_resources_clones.images[i].new_image_info.parent_id); assert(device_info != nullptr); VkDevice device = device_info->handle; device_table_->FreeMemory(device, tr_params.mutable_resources_clones.images[i].image_memory, nullptr); - device_table_->DestroyImage(device, tr_params.mutable_resources_clones.images[i].image, nullptr); + device_table_->DestroyImage( + device, tr_params.mutable_resources_clones.images[i].new_image_info.handle, nullptr); - if (dump_resources_before_) + if (options_.dump_resources_before) { device_table_->FreeMemory( device, tr_params.mutable_resources_clones_before.images[i].image_memory, nullptr); - device_table_->DestroyImage(device, tr_params.mutable_resources_clones_before.images[i].image, nullptr); + device_table_->DestroyImage( + device, tr_params.mutable_resources_clones_before.images[i].new_image_info.handle, nullptr); } } for (size_t i = 0; i < tr_params.mutable_resources_clones.buffers.size(); ++i) { - assert(tr_params.mutable_resources_clones.buffers[i].original_buffer != nullptr); const VulkanDeviceInfo* device_info = object_info_table_.GetVkDeviceInfo( - tr_params.mutable_resources_clones.buffers[i].original_buffer->parent_id); + tr_params.mutable_resources_clones.buffers[i].new_buffer_info.parent_id); assert(device_info != nullptr); VkDevice device = device_info->handle; device_table_->FreeMemory(device, tr_params.mutable_resources_clones.buffers[i].buffer_memory, nullptr); - device_table_->DestroyBuffer(device, tr_params.mutable_resources_clones.buffers[i].buffer, nullptr); - if (dump_resources_before_) + device_table_->DestroyBuffer( + device, tr_params.mutable_resources_clones.buffers[i].new_buffer_info.handle, nullptr); + + if (options_.dump_resources_before) { device_table_->FreeMemory( device, tr_params.mutable_resources_clones_before.buffers[i].buffer_memory, nullptr); device_table_->DestroyBuffer( - device, tr_params.mutable_resources_clones_before.buffers[i].buffer, nullptr); + device, tr_params.mutable_resources_clones_before.buffers[i].new_buffer_info.handle, nullptr); } } } @@ -1025,19 +1264,23 @@ void DispatchTraceRaysDumpingContext::ReleaseIndirectParams() } } -VkResult DispatchTraceRaysDumpingContext::DumpDispatchTraceRays( - VkQueue queue, uint64_t qs_index, uint64_t bcb_index, const VkSubmitInfo& submit_info, VkFence fence) +VkResult DispatchTraceRaysDumpingContext::DumpDispatchTraceRays(VkQueue queue, + uint64_t qs_index, + uint64_t bcb_index, + const VkSubmitInfo& submit_info, + VkFence fence, + bool use_semaphores) { VkSubmitInfo si; si.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; si.pNext = nullptr; - si.waitSemaphoreCount = submit_info.waitSemaphoreCount; - si.pWaitSemaphores = submit_info.pWaitSemaphores; - si.pWaitDstStageMask = submit_info.pWaitDstStageMask; + si.waitSemaphoreCount = use_semaphores ? submit_info.waitSemaphoreCount : 0; + si.pWaitSemaphores = use_semaphores ? submit_info.pWaitSemaphores : nullptr; + si.pWaitDstStageMask = use_semaphores ? submit_info.pWaitDstStageMask : nullptr; si.commandBufferCount = 1; si.pCommandBuffers = &DR_command_buffer_; - si.signalSemaphoreCount = submit_info.signalSemaphoreCount; - si.pSignalSemaphores = submit_info.pSignalSemaphores; + si.signalSemaphoreCount = use_semaphores ? submit_info.signalSemaphoreCount : 0; + si.pSignalSemaphores = use_semaphores ? submit_info.pSignalSemaphores : nullptr; const VulkanDeviceInfo* device_info = object_info_table_.GetVkDeviceInfo(original_command_buffer_info_->parent_id); assert(device_info); @@ -1101,7 +1344,7 @@ VkResult DispatchTraceRaysDumpingContext::DumpDispatchTraceRays( return res; } - if (dump_immutable_resources_) + if (options_.dump_all_descriptors) { res = DumpDescriptors(qs_index, bcb_index, disp_index, true); if (res != VK_SUCCESS) @@ -1111,19 +1354,9 @@ VkResult DispatchTraceRaysDumpingContext::DumpDispatchTraceRays( } } - VulkanDumpDrawCallInfo draw_call_info{}; - draw_call_info.type = DumpResourceType::kDispatchInfo; - draw_call_info.instance_table = instance_table_; - draw_call_info.device_table = device_table_; - draw_call_info.object_info_table = &object_info_table_; - draw_call_info.device_info = device_info; - draw_call_info.original_command_buffer_info = original_command_buffer_info_; - draw_call_info.bcb_index = bcb_index; - draw_call_info.qs_index = qs_index; - draw_call_info.cmd_index = disp_index; - draw_call_info.disp_param = disp_params.get(); - - delegate_.DumpDrawCallInfo(draw_call_info, instance_table_); + const VulkanDelegateDumpDrawCallContext draw_call_info( + DumpResourcesPipelineStage::kCompute, instance_table_, device_table_, disp_params.get()); + delegate_.DumpDrawCallInfo(draw_call_info); } for (const auto& [tr_index, tr_params] : trace_rays_params_) @@ -1138,7 +1371,7 @@ VkResult DispatchTraceRaysDumpingContext::DumpDispatchTraceRays( return res; } - if (dump_immutable_resources_) + if (options_.dump_all_descriptors) { res = DumpDescriptors(qs_index, bcb_index, tr_index, false); if (res != VK_SUCCESS) @@ -1148,29 +1381,17 @@ VkResult DispatchTraceRaysDumpingContext::DumpDispatchTraceRays( } } - VulkanDumpDrawCallInfo draw_call_info{}; - draw_call_info.type = DumpResourceType::kTraceRaysIndex; - draw_call_info.instance_table = instance_table_; - draw_call_info.device_table = device_table_; - draw_call_info.object_info_table = &object_info_table_; - draw_call_info.device_info = device_info; - draw_call_info.original_command_buffer_info = original_command_buffer_info_; - draw_call_info.bcb_index = bcb_index; - draw_call_info.qs_index = qs_index; - draw_call_info.cmd_index = tr_index; - draw_call_info.tr_param = tr_params.get(); - - delegate_.DumpDrawCallInfo(draw_call_info, instance_table_); + const VulkanDelegateDumpDrawCallContext draw_call_info( + DumpResourcesPipelineStage::kRayTracing, instance_table_, device_table_, tr_params.get()); + delegate_.DumpDrawCallInfo(draw_call_info); } // Clean up references to dumped descriptors in case this command buffer is submitted again dispatch_dumped_descriptors_.buffer_descriptors.clear(); dispatch_dumped_descriptors_.image_descriptors.clear(); - dispatch_dumped_descriptors_.inline_uniform_blocks.clear(); trace_rays_dumped_descriptors_.buffer_descriptors.clear(); trace_rays_dumped_descriptors_.image_descriptors.clear(); - trace_rays_dumped_descriptors_.inline_uniform_blocks.clear(); assert(res == VK_SUCCESS); return VK_SUCCESS; @@ -1181,8 +1402,8 @@ VkResult DispatchTraceRaysDumpingContext::DumpMutableResources(uint64_t bcb_inde uint64_t cmd_index, bool is_dispatch) { - const auto dis_params = dispatch_params_.find(cmd_index); - const auto tr_params = trace_rays_params_.find(cmd_index); + auto dis_params = dispatch_params_.find(cmd_index); + auto tr_params = trace_rays_params_.find(cmd_index); if (is_dispatch && (dis_params == dispatch_params_.end())) { @@ -1202,184 +1423,239 @@ VkResult DispatchTraceRaysDumpingContext::DumpMutableResources(uint64_t bcb_inde is_dispatch ? dis_params->second->mutable_resources_clones_before : tr_params->second->mutable_resources_clones_before; + const CommandImageSubresource& command_subresources = is_dispatch ? disp_subresources_ : tr_subresources_; + CommandImageSubresourceIterator cmd_subresources_entry; + cmd_subresources_entry = command_subresources.find(cmd_index); + const bool cull_resources = cmd_subresources_entry != command_subresources.end(); + if (mutable_resources_clones.images.empty() && mutable_resources_clones.buffers.empty()) { assert(mutable_resources_clones_before.images.empty() && mutable_resources_clones_before.buffers.empty()); return VK_SUCCESS; } + DumpedResourcesInfo& dumped_resources = + is_dispatch ? dis_params->second->dumped_resources : tr_params->second->dumped_resources; + + dumped_resources.bcb_index = bcb_index; + dumped_resources.cmd_index = cmd_index; + dumped_resources.qs_index = qs_index; + assert(original_command_buffer_info_); assert(original_command_buffer_info_->parent_id != format::kNullHandleId); const VulkanDeviceInfo* device_info = object_info_table_.GetVkDeviceInfo(original_command_buffer_info_->parent_id); assert(device_info); - const VulkanPhysicalDeviceInfo* phys_dev_info = object_info_table_.GetVkPhysicalDeviceInfo(device_info->parent_id); - assert(phys_dev_info); + const VulkanDelegateDumpResourceContext res_info_base{ instance_table_, device_table_, compressor_ }; - graphics::VulkanResourcesUtil resource_util(device_info->handle, - device_info->parent, - *device_table_, - *instance_table_, - *phys_dev_info->replay_device_info->memory_properties); - VulkanDumpResourceInfo res_info_base{}; - res_info_base.device_info = device_info; - res_info_base.device_table = device_table_; - res_info_base.instance_table = instance_table_; - res_info_base.object_info_table = &object_info_table_; - res_info_base.original_command_buffer_info = original_command_buffer_info_; - res_info_base.cmd_index = cmd_index; - res_info_base.qs_index = qs_index; - res_info_base.bcb_index = bcb_index; - - if (dump_resources_before_) - { - // Dump images - for (size_t i = 0; i < mutable_resources_clones_before.images.size(); ++i) + // Dump images + for (size_t i = 0; i < mutable_resources_clones.images.size(); ++i) + { + GFXRECON_ASSERT(mutable_resources_clones.images[i].new_image_info.handle != VK_NULL_HANDLE); + + // Cull dumped descriptors + VkImageSubresourceRange subresource_range = { + graphics::GetFormatAspects(mutable_resources_clones.images[i].new_image_info.format), + 0, + options_.dump_resources_dump_all_image_subresources ? VK_REMAINING_MIP_LEVELS : 1, + 0, + options_.dump_resources_dump_all_image_subresources ? VK_REMAINING_ARRAY_LAYERS : 1 + }; + if (cull_resources && CullDescriptor(cmd_subresources_entry, + mutable_resources_clones.images[i].desc_set, + mutable_resources_clones.images[i].desc_binding, + mutable_resources_clones.images[i].array_index, + &subresource_range)) { - assert(mutable_resources_clones_before.images[i].original_image != nullptr); - assert(mutable_resources_clones_before.images[i].image != VK_NULL_HANDLE); - - VulkanImageInfo modified_image_info = *mutable_resources_clones_before.images[i].original_image; - modified_image_info.handle = mutable_resources_clones_before.images[i].image; - - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kDispatchTraceRaysImage; - res_info.is_dispatch = is_dispatch; - res_info.before_cmd = true; - res_info.image_info = &modified_image_info; - res_info.set = mutable_resources_clones_before.images[i].desc_set; - res_info.binding = mutable_resources_clones_before.images[i].desc_binding; - res_info.array_index = mutable_resources_clones_before.images[i].array_index; - res_info.stages = mutable_resources_clones_before.images[i].stages; - auto res = delegate_.DumpResource(res_info); - if (res != VK_SUCCESS) - { - return res; - } + continue; } - // Dump buffers - for (size_t i = 0; i < mutable_resources_clones_before.buffers.size(); ++i) + const ImageDumpResult can_dump_image = + CanDumpImage(instance_table_, device_info->parent, &mutable_resources_clones.images[i].new_image_info); + + auto& new_dumped_desc = dumped_resources.dumped_descriptors.emplace_back( + DumpResourceType::kDispatchTraceRaysImage, + bcb_index, + cmd_index, + qs_index, + mutable_resources_clones.images[i].stages, + mutable_resources_clones.images[i].desc_type, + mutable_resources_clones.images[i].desc_set, + mutable_resources_clones.images[i].desc_binding, + mutable_resources_clones.images[i].array_index, + &mutable_resources_clones.images[i].new_image_info, + can_dump_image, + is_dispatch ? DumpResourcesPipelineStage::kCompute : DumpResourcesPipelineStage::kRayTracing); + + if (can_dump_image != ImageDumpResult::kCanDump) { - const VulkanBufferInfo* buffer_info = mutable_resources_clones_before.buffers[i].original_buffer; - assert(buffer_info != nullptr); - assert(mutable_resources_clones_before.buffers[i].buffer != VK_NULL_HANDLE); - - VulkanDumpResourceInfo res_info = res_info_base; - VkResult res = resource_util.ReadFromBufferResource(mutable_resources_clones_before.buffers[i].buffer, - mutable_resources_clones_before.buffers[i].cloned_size, - 0, - buffer_info->queue_family_index, - res_info.data); - if (res != VK_SUCCESS) - { - GFXRECON_LOG_ERROR("Reading from buffer resource failed (%s)", util::ToString(res).c_str()) - return res; - } + continue; + } + + // Dump the "after" resource + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &new_dumped_desc; + res_info.dumped_data = VulkanDelegateImageDumpedData(); + auto& dumped_image_data = std::get(res_info.dumped_data); + + auto& dumped_image = std::get(new_dumped_desc.dumped_resource); + + VkResult res = DumpImage(dumped_image, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + options_.dump_resources_scale, + options_.dump_resources_dump_raw_images, + subresource_range, + dumped_image_data.data, + device_info, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Reading from image descriptor %" PRIu64 " failed (%s)", + mutable_resources_clones.images[i].new_image_info.capture_id, + util::ToString(res).c_str()); + + dumped_resources.dumped_descriptors.pop_back(); + + return res; + } + + delegate_.DumpResource(res_info); - res_info.type = DumpResourceType::kDispatchTraceRaysBuffer; - res_info.is_dispatch = is_dispatch; - res_info.before_cmd = true; - res_info.set = mutable_resources_clones_before.buffers[i].desc_set; - res_info.binding = mutable_resources_clones_before.buffers[i].desc_binding; - res_info.array_index = mutable_resources_clones_before.buffers[i].array_index; - res_info.stages = mutable_resources_clones_before.buffers[i].stages; - res = delegate_.DumpResource(res_info); + // Dump the "before" resource + if (options_.dump_resources_before) + { + GFXRECON_ASSERT(mutable_resources_clones_before.images[i].new_image_info.handle != VK_NULL_HANDLE); + GFXRECON_ASSERT(!mutable_resources_clones_before.images.empty()); + + new_dumped_desc.has_before = true; + new_dumped_desc.dumped_resource_before = + DumpedImage(&mutable_resources_clones_before.images[i].new_image_info, can_dump_image); + + DumpedImage& dumped_image_before = std::get(new_dumped_desc.dumped_resource_before); + res = DumpImage(dumped_image_before, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + options_.dump_resources_scale, + options_.dump_resources_dump_raw_images, + subresource_range, + dumped_image_data.data, + device_info, + device_table_, + instance_table_, + object_info_table_); if (res != VK_SUCCESS) { + GFXRECON_LOG_ERROR("Reading from image descriptor %" PRIu64 " failed (%s)", + mutable_resources_clones.images[i].new_image_info.capture_id, + util::ToString(res).c_str()); + + dumped_resources.dumped_descriptors.pop_back(); + return res; } - } - } - for (size_t i = 0; i < mutable_resources_clones.images.size(); ++i) - { - assert(mutable_resources_clones.images[i].original_image != nullptr); - assert(mutable_resources_clones.images[i].image != VK_NULL_HANDLE); - - VulkanImageInfo modified_image_info = *mutable_resources_clones.images[i].original_image; - modified_image_info.handle = mutable_resources_clones.images[i].image; - - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kDispatchTraceRaysImage; - res_info.is_dispatch = is_dispatch; - res_info.before_cmd = false; - res_info.image_info = &modified_image_info; - res_info.set = mutable_resources_clones.images[i].desc_set; - res_info.binding = mutable_resources_clones.images[i].desc_binding; - res_info.array_index = mutable_resources_clones.images[i].array_index; - res_info.stages = mutable_resources_clones.images[i].stages; - auto res = delegate_.DumpResource(res_info); - if (res != VK_SUCCESS) - { - return res; + res_info.before_command = true; + delegate_.DumpResource(res_info); } } // Dump buffers for (size_t i = 0; i < mutable_resources_clones.buffers.size(); ++i) { - assert(mutable_resources_clones.buffers[i].original_buffer != nullptr); - assert(mutable_resources_clones.buffers[i].buffer != VK_NULL_HANDLE); - const VulkanBufferInfo* buffer_info = mutable_resources_clones.buffers[i].original_buffer; + GFXRECON_ASSERT(mutable_resources_clones.buffers[i].new_buffer_info.handle != VK_NULL_HANDLE); - VulkanDumpResourceInfo res_info = res_info_base; - VkResult res = resource_util.ReadFromBufferResource(mutable_resources_clones.buffers[i].buffer, - buffer_info->size, - 0, - buffer_info->queue_family_index, - res_info.data); - if (res != VK_SUCCESS) + // Cull dumped descriptors + if (cull_resources && CullDescriptor(cmd_subresources_entry, + mutable_resources_clones.buffers[i].desc_set, + mutable_resources_clones.buffers[i].desc_binding, + mutable_resources_clones.buffers[i].array_index)) { - GFXRECON_LOG_ERROR("Reading from buffer resource failed (%s)", util::ToString(res).c_str()) - return res; + continue; } - res_info.type = DumpResourceType::kDispatchTraceRaysBuffer; - res_info.is_dispatch = is_dispatch; - res_info.before_cmd = false; - res_info.set = mutable_resources_clones.buffers[i].desc_set; - res_info.binding = mutable_resources_clones.buffers[i].desc_binding; - res_info.array_index = mutable_resources_clones.buffers[i].array_index; - res_info.stages = mutable_resources_clones.buffers[i].stages; - res = delegate_.DumpResource(res_info); + auto& new_dumped_desc = dumped_resources.dumped_descriptors.emplace_back( + DumpResourceType::kDispatchTraceRaysBuffer, + bcb_index, + cmd_index, + qs_index, + mutable_resources_clones.buffers[i].stages, + mutable_resources_clones.buffers[i].desc_type, + mutable_resources_clones.buffers[i].desc_set, + mutable_resources_clones.buffers[i].desc_binding, + mutable_resources_clones.buffers[i].array_index, + mutable_resources_clones.buffers[i].new_buffer_info.handle, + mutable_resources_clones.buffers[i].new_buffer_info.capture_id, + 0, + mutable_resources_clones.buffers[i].cloned_size, + is_dispatch ? DumpResourcesPipelineStage::kCompute : DumpResourcesPipelineStage::kRayTracing); + + // Dump the "after" resource + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &new_dumped_desc; + res_info.dumped_data = VulkanDelegateBufferDumpedData(); + auto& dumped_buffer_data = std::get(res_info.dumped_data); + + auto& dumped_buffer = std::get(new_dumped_desc.dumped_resource); + VkResult res = DumpBuffer( + dumped_buffer, dumped_buffer_data.data, device_info, device_table_, instance_table_, object_info_table_); if (res != VK_SUCCESS) { + GFXRECON_LOG_ERROR("Reading from buffer descriptor %" PRIu64 " failed (%s)", + mutable_resources_clones.buffers[i].new_buffer_info.capture_id, + util::ToString(res).c_str()) + + dumped_resources.dumped_descriptors.pop_back(); + return res; } + + delegate_.DumpResource(res_info); + + // Dump the "before" resource + if (options_.dump_resources_before) + { + GFXRECON_ASSERT(!mutable_resources_clones_before.buffers.empty()); + GFXRECON_ASSERT(mutable_resources_clones_before.buffers[i].new_buffer_info.handle != VK_NULL_HANDLE); + + new_dumped_desc.has_before = true; + new_dumped_desc.dumped_resource_before = + DumpedBuffer(mutable_resources_clones_before.buffers[i].new_buffer_info.handle, + mutable_resources_clones_before.buffers[i].new_buffer_info.capture_id, + 0, + mutable_resources_clones_before.buffers[i].cloned_size); + + auto& dumped_buffer_before = std::get(new_dumped_desc.dumped_resource_before); + res = DumpBuffer(dumped_buffer_before, + dumped_buffer_data.data, + device_info, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Reading from buffer descriptor %" PRIu64 " failed (%s)", + mutable_resources_clones_before.buffers[i].new_buffer_info.capture_id, + util::ToString(res).c_str()) + + dumped_resources.dumped_descriptors.pop_back(); + + return res; + } + + res_info.before_command = true; + delegate_.DumpResource(res_info); + } } return VK_SUCCESS; } -bool DispatchTraceRaysDumpingContext::IsRecording() const -{ - return !reached_end_command_buffer_; -} - VkResult DispatchTraceRaysDumpingContext::DumpDescriptors(uint64_t qs_index, uint64_t bcb_index, uint64_t cmd_index, bool is_dispatch) { - // Create a list of all descriptors referenced by all commands - std::unordered_set image_descriptors; - - struct buffer_descriptor_info - { - VkDeviceSize offset; - VkDeviceSize range; - }; - std::unordered_map buffer_descriptors; - - struct inline_uniform_block_info - { - uint32_t set; - uint32_t binding; - const std::vector* data; - }; - std::unordered_map*, inline_uniform_block_info> inline_uniform_blocks; - DumpedDescriptors& dumped_descriptors = is_dispatch ? dispatch_dumped_descriptors_ : trace_rays_dumped_descriptors_; GFXRECON_ASSERT((dispatch_params_.find(cmd_index) != dispatch_params_.end()) || (trace_rays_params_.find(cmd_index) != trace_rays_params_.end())); @@ -1387,6 +1663,24 @@ VkResult DispatchTraceRaysDumpingContext::DumpDescriptors(uint64_t qs_index, ? (dispatch_params_[cmd_index]->referenced_descriptors) : (trace_rays_params_[cmd_index]->referenced_descriptors); + DumpedResourcesInfo& dumped_resources = + is_dispatch ? dispatch_params_[cmd_index]->dumped_resources : trace_rays_params_[cmd_index]->dumped_resources; + + const DumpResourcesPipelineStage ppl_stage = + is_dispatch ? DumpResourcesPipelineStage::kCompute : DumpResourcesPipelineStage::kRayTracing; + + const CommandImageSubresource& command_subresources = is_dispatch ? disp_subresources_ : tr_subresources_; + CommandImageSubresourceIterator cmd_subresources_entry; + cmd_subresources_entry = command_subresources.find(cmd_index); + const bool cull_resources = cmd_subresources_entry != command_subresources.end(); + + const VulkanDelegateDumpResourceContext res_info_base{ instance_table_, device_table_, compressor_ }; + + assert(original_command_buffer_info_); + assert(original_command_buffer_info_->parent_id != format::kNullHandleId); + const VulkanDeviceInfo* device_info = object_info_table_.GetVkDeviceInfo(original_command_buffer_info_->parent_id); + assert(device_info); + for (const auto& [desc_set_index, desc_set_info] : referenced_descriptors) { for (const auto& [desc_binding_index, desc_binding_info] : desc_set_info) @@ -1397,17 +1691,94 @@ VkResult DispatchTraceRaysDumpingContext::DumpDescriptors(uint64_t qs_index, case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: { - for (const auto& img_desc : desc_binding_info.image_info) + for (const auto& [array_index, img_desc] : desc_binding_info.image_info) { - if (img_desc.second.image_view_info != nullptr) + if (img_desc.image_view_info != nullptr) { const VulkanImageInfo* img_info = - object_info_table_.GetVkImageInfo(img_desc.second.image_view_info->image_id); - if (img_info != nullptr && dumped_descriptors.image_descriptors.find(img_info) == - dumped_descriptors.image_descriptors.end()) + object_info_table_.GetVkImageInfo(img_desc.image_view_info->image_id); + if (img_info == nullptr) { - image_descriptors.insert(img_info); - dumped_descriptors.image_descriptors.insert(img_info); + continue; + } + + // Cull dumped descriptors + VkImageSubresourceRange subresource_range = { + graphics::GetFormatAspects(img_info->format), + 0, + options_.dump_resources_dump_all_image_subresources ? VK_REMAINING_MIP_LEVELS : 1, + 0, + options_.dump_resources_dump_all_image_subresources ? VK_REMAINING_ARRAY_LAYERS : 1 + }; + if (cull_resources && CullDescriptor(cmd_subresources_entry, + desc_set_index, + desc_binding_index, + array_index, + &subresource_range)) + { + continue; + } + + const ImageDumpResult can_dump_image = + CanDumpImage(instance_table_, device_info->parent, img_info); + + auto& new_dumped_desc = dumped_resources.dumped_descriptors.emplace_back( + DumpResourceType::kDispatchTraceRaysImageDescriptor, + bcb_index, + cmd_index, + qs_index, + desc_binding_info.stage_flags, + desc_binding_info.desc_type, + desc_set_index, + desc_binding_index, + array_index, + img_info, + can_dump_image, + ppl_stage); + + if (can_dump_image != ImageDumpResult::kCanDump) + { + continue; + } + + auto& new_dumped_image = std::get(new_dumped_desc.dumped_resource); + const DescriptorLocation loc = { desc_set_index, desc_binding_index, array_index }; + const auto& dumped_descs_entry = dumped_descriptors.image_descriptors.find(loc); + if (dumped_descs_entry == dumped_descriptors.image_descriptors.end()) + { + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &new_dumped_desc; + res_info.dumped_data = VulkanDelegateImageDumpedData(); + auto& dumped_image_data = std::get(res_info.dumped_data); + + VkResult res = DumpImage(new_dumped_image, + img_info->intermediate_layout, + options_.dump_resources_scale, + options_.dump_resources_dump_raw_images, + subresource_range, + dumped_image_data.data, + device_info, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Reading from image descriptor %" PRIu64 " failed (%s)", + img_info->capture_id, + util::ToString(res).c_str()); + + dumped_resources.dumped_descriptors.pop_back(); + + return res; + } + + delegate_.DumpResource(res_info); + + dumped_descriptors.image_descriptors.emplace(loc, new_dumped_image); + } + else + { + new_dumped_image = dumped_descs_entry->second; } } } @@ -1416,18 +1787,76 @@ VkResult DispatchTraceRaysDumpingContext::DumpDescriptors(uint64_t qs_index, case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: { - for (const auto& buf_desc : desc_binding_info.texel_buffer_view_info) + for (const auto& [array_index, buf_desc] : desc_binding_info.texel_buffer_view_info) { - const VulkanBufferInfo* buffer_info = - object_info_table_.GetVkBufferInfo(buf_desc.second->buffer_id); - if (buffer_info != nullptr && dumped_descriptors.buffer_descriptors.find(buffer_info) == - dumped_descriptors.buffer_descriptors.end()) + const VulkanBufferInfo* buffer_info = object_info_table_.GetVkBufferInfo(buf_desc->buffer_id); + if (buffer_info == nullptr) + { + continue; + } + + // Cull dumped descriptors + if (cull_resources && + CullDescriptor(cmd_subresources_entry, desc_set_index, desc_binding_index, array_index)) + { + continue; + } + + const VkDeviceSize offset = buf_desc->offset; + const VkDeviceSize range = buf_desc->range; + const VkDeviceSize size = range == VK_WHOLE_SIZE ? buffer_info->size - offset : range; + + auto& new_dumped_desc = dumped_resources.dumped_descriptors.emplace_back( + DumpResourceType::kDispatchTraceRaysBufferDescriptor, + bcb_index, + cmd_index, + qs_index, + desc_binding_info.stage_flags, + desc_binding_info.desc_type, + desc_set_index, + desc_binding_index, + array_index, + buffer_info->handle, + buffer_info->capture_id, + offset, + size, + ppl_stage); + + const DescriptorLocation loc = { desc_set_index, desc_binding_index, array_index }; + const auto& dumped_desc_entry = dumped_descriptors.buffer_descriptors.find(loc); + if (dumped_desc_entry == dumped_descriptors.buffer_descriptors.end()) + { + const auto& new_dumped_buffer = std::get(new_dumped_desc.dumped_resource); + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &new_dumped_desc; + res_info.dumped_data = VulkanDelegateBufferDumpedData(); + auto dumped_buffer_data = std::get(res_info.dumped_data); + + VkResult res = DumpBuffer(new_dumped_buffer, + dumped_buffer_data.data, + device_info, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Reading from buffer descriptor %" PRIu64 " failed (%s)", + buffer_info->capture_id, + util::ToString(res).c_str()); + + dumped_resources.dumped_descriptors.pop_back(); + + return res; + } + + delegate_.DumpResource(res_info); + + dumped_descriptors.buffer_descriptors.emplace(loc, new_dumped_buffer); + } + else { - buffer_descriptors.emplace(std::piecewise_construct, - std::forward_as_tuple(buffer_info), - std::forward_as_tuple(buffer_descriptor_info{ - buf_desc.second->offset, buf_desc.second->range })); - dumped_descriptors.buffer_descriptors.insert(buffer_info); + auto& new_dumped_buffer = std::get(new_dumped_desc.dumped_resource); + new_dumped_buffer = dumped_desc_entry->second; } } } @@ -1436,43 +1865,185 @@ VkResult DispatchTraceRaysDumpingContext::DumpDescriptors(uint64_t qs_index, case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: { - for (const auto& buf_desc : desc_binding_info.buffer_info) + for (const auto& [array_index, buf_desc] : desc_binding_info.buffer_info) { - const VulkanBufferInfo* buffer_info = buf_desc.second.buffer_info; - if (buffer_info != nullptr && dumped_descriptors.buffer_descriptors.find(buffer_info) == - dumped_descriptors.buffer_descriptors.end()) + const VulkanBufferInfo* buffer_info = buf_desc.buffer_info; + if (buffer_info == nullptr) + { + continue; + } + + // Cull dumped descriptors + if (cull_resources && + CullDescriptor(cmd_subresources_entry, desc_set_index, desc_binding_index, array_index)) { - buffer_descriptors.emplace(std::piecewise_construct, - std::forward_as_tuple(buffer_info), - std::forward_as_tuple(buffer_descriptor_info{ - buf_desc.second.offset, buf_desc.second.range })); - dumped_descriptors.buffer_descriptors.insert(buffer_info); + continue; + } + + const VkDeviceSize offset = buf_desc.offset; + const VkDeviceSize range = buf_desc.range; + const VkDeviceSize size = range == VK_WHOLE_SIZE ? buffer_info->size - offset : range; + + auto& new_dumped_desc = dumped_resources.dumped_descriptors.emplace_back( + DumpResourceType::kDispatchTraceRaysBufferDescriptor, + bcb_index, + cmd_index, + qs_index, + desc_binding_info.stage_flags, + desc_binding_info.desc_type, + desc_set_index, + desc_binding_index, + array_index, + buffer_info->handle, + buffer_info->capture_id, + offset, + size, + ppl_stage); + + const DescriptorLocation loc = { desc_set_index, desc_binding_index, array_index }; + const auto dumped_desc_entry = dumped_descriptors.buffer_descriptors.find(loc); + if (dumped_desc_entry == dumped_descriptors.buffer_descriptors.end()) + { + const auto& new_dumped_buffer = std::get(new_dumped_desc.dumped_resource); + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &new_dumped_desc; + res_info.dumped_data = VulkanDelegateBufferDumpedData(); + auto& dumped_buffer_data = std::get(res_info.dumped_data); + + VkResult res = DumpBuffer(new_dumped_buffer, + dumped_buffer_data.data, + device_info, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Reading from buffer descriptor %" PRIu64 " failed (%s)", + buffer_info->capture_id, + util::ToString(res).c_str()); + + dumped_resources.dumped_descriptors.pop_back(); + + return res; + } + + delegate_.DumpResource(res_info); + + dumped_descriptors.buffer_descriptors.emplace(loc, new_dumped_buffer); + } + else + { + auto& new_dumped_buffer = std::get(new_dumped_desc.dumped_resource); + new_dumped_buffer = dumped_desc_entry->second; } } } break; - case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: - case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: - case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: - case VK_DESCRIPTOR_TYPE_SAMPLER: - break; - case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK: { - if (dumped_descriptors.inline_uniform_blocks.find(&(desc_binding_info.inline_uniform_block)) == - dumped_descriptors.inline_uniform_blocks.end()) + // Cull dumped descriptors + if (cull_resources && CullDescriptor(cmd_subresources_entry, desc_set_index, desc_binding_index, 0)) { - inline_uniform_blocks[&(desc_binding_info.inline_uniform_block)] = { - desc_set_index, desc_binding_index, &(desc_binding_info.inline_uniform_block) - }; - dumped_descriptors.inline_uniform_blocks.insert(&(desc_binding_info.inline_uniform_block)); + continue; + } + + auto& new_dumped_desc = dumped_resources.dumped_descriptors.emplace_back( + DumpResourceType::kDispatchTraceRaysInlineUniformBufferDescriptor, + bcb_index, + cmd_index, + qs_index, + desc_binding_info.stage_flags, + desc_binding_info.desc_type, + desc_set_index, + desc_binding_index, + ppl_stage); + + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &new_dumped_desc; + res_info.dumped_data = VulkanDelegateImageDumpedData(); + auto& dumped_buffer_data = std::get(res_info.dumped_data); + dumped_buffer_data.data = desc_binding_info.inline_uniform_block; + delegate_.DumpResource(res_info); + } + break; + + case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: + { + for (const auto& [array_index, as_info] : desc_binding_info.acceleration_structs_khr_info) + { + if (as_info == nullptr) + { + continue; + } + + GFXRECON_ASSERT(as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR); + auto& new_dumped_desc = dumped_resources.dumped_descriptors.emplace_back( + DumpResourceType::kAccelerationStructure, + bcb_index, + cmd_index, + qs_index, + desc_binding_info.stage_flags, + desc_binding_info.desc_type, + desc_set_index, + desc_binding_index, + array_index, + as_info, + options_.dump_resources_dump_build_AS_input_buffers, + ppl_stage); + + auto& new_dumped_as = std::get(new_dumped_desc.dumped_resource); + const DescriptorLocation loc = { desc_set_index, desc_binding_index, array_index }; + const auto& dumped_desc_entry = dumped_descriptors.acceleration_structures.find(loc); + if (dumped_desc_entry == dumped_descriptors.acceleration_structures.end()) + { + dumped_descriptors.acceleration_structures.emplace(loc, new_dumped_as); + + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &new_dumped_desc; + res_info.dumped_data = VulkanDelegateAccelerationStructureDumpedData(); + auto& dumped_as_data = + std::get(res_info.dumped_data); + + auto tlas_context_entry = acceleration_structures_context_.find(as_info); + GFXRECON_ASSERT(tlas_context_entry != acceleration_structures_context_.end()); + AccelerationStructureDumpResourcesContext* tlas_context = tlas_context_entry->second.get(); + + VkResult res = DumpAccelerationStructure(new_dumped_as, + dumped_as_data.data, + tlas_context, + acceleration_structures_context_, + device_info, + *device_table_, + object_info_table_, + *instance_table_, + address_trackers_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Dumping acceleration structure %" PRIu64 " failed (%s)", + as_info->capture_id, + util::ToString(res).c_str()); + dumped_resources.dumped_descriptors.pop_back(); + return res; + } + + delegate_.DumpResource(res_info); + } + else + { + new_dumped_as = dumped_desc_entry->second; + } } } break; + case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: + case VK_DESCRIPTOR_TYPE_SAMPLER: + break; + default: GFXRECON_LOG_WARNING_ONCE("%s(): Descriptor type (%s) not handled", __func__, @@ -1482,81 +2053,6 @@ VkResult DispatchTraceRaysDumpingContext::DumpDescriptors(uint64_t qs_index, } } - assert(original_command_buffer_info_); - assert(original_command_buffer_info_->parent_id != format::kNullHandleId); - const VulkanDeviceInfo* device_info = object_info_table_.GetVkDeviceInfo(original_command_buffer_info_->parent_id); - assert(device_info); - - VulkanDumpResourceInfo res_info_base{}; - res_info_base.device_info = device_info; - res_info_base.device_table = device_table_; - res_info_base.instance_table = instance_table_; - res_info_base.object_info_table = &object_info_table_; - res_info_base.original_command_buffer_info = original_command_buffer_info_; - res_info_base.cmd_index = cmd_index; - res_info_base.qs_index = qs_index; - res_info_base.bcb_index = bcb_index; - res_info_base.is_dispatch = is_dispatch; - - for (const auto& img_info : image_descriptors) - { - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kDispatchTraceRaysImageDescriptor; - res_info.image_info = img_info; - auto res = delegate_.DumpResource(res_info); - if (res != VK_SUCCESS) - { - return res; - } - } - - const VulkanPhysicalDeviceInfo* phys_dev_info = object_info_table_.GetVkPhysicalDeviceInfo(device_info->parent_id); - assert(phys_dev_info); - - graphics::VulkanResourcesUtil resource_util(device_info->handle, - device_info->parent, - *device_table_, - *instance_table_, - *phys_dev_info->replay_device_info->memory_properties); - - for (const auto& buf : buffer_descriptors) - { - VulkanDumpResourceInfo res_info = res_info_base; - res_info.buffer_info = buf.first; - const VkDeviceSize offset = buf.second.offset; - const VkDeviceSize range = buf.second.range; - const VkDeviceSize size = range == VK_WHOLE_SIZE ? res_info.buffer_info->size - offset : range; - - VkResult res = resource_util.ReadFromBufferResource( - res_info.buffer_info->handle, size, offset, res_info.buffer_info->queue_family_index, res_info.data); - if (res != VK_SUCCESS) - { - GFXRECON_LOG_ERROR("Reading from buffer resource failed (%s)", util::ToString(res).c_str()) - return res; - } - - res_info.type = DumpResourceType::kDispatchTraceRaysBufferDescriptor; - res = delegate_.DumpResource(res_info); - if (res != VK_SUCCESS) - { - return res; - } - } - - for (const auto& iub : inline_uniform_blocks) - { - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kDispatchTraceRaysInlineUniformBufferDescriptor; - res_info.set = iub.second.set; - res_info.binding = iub.second.binding; - res_info.data = *iub.second.data; - auto res = delegate_.DumpResource(res_info); - if (res != VK_SUCCESS) - { - return res; - } - } - return VK_SUCCESS; } @@ -1566,14 +2062,18 @@ VkResult DispatchTraceRaysDumpingContext::CopyDispatchIndirectParameters(Dispatc GFXRECON_ASSERT(disp_params.dispatch_params_union.dispatch_indirect.params_buffer_info != nullptr); GFXRECON_ASSERT(disp_params.dispatch_params_union.dispatch_indirect.params_buffer_info->handle != VK_NULL_HANDLE); - const VkDeviceSize size = sizeof(VkDispatchIndirectCommand); - VkResult res = CloneBuffer(object_info_table_, - device_table_, - replay_device_phys_mem_props_, - disp_params.dispatch_params_union.dispatch_indirect.params_buffer_info, - &disp_params.dispatch_params_union.dispatch_indirect.new_params_buffer, - &disp_params.dispatch_params_union.dispatch_indirect.new_params_memory, - size); + const VkDeviceSize size = sizeof(VkDispatchIndirectCommand); + const auto* parent_device_info = object_info_table_.GetVkDeviceInfo( + disp_params.dispatch_params_union.dispatch_indirect.params_buffer_info->parent_id); + VkResult res = CreateVkBuffer(size, + *device_table_, + parent_device_info->handle, + nullptr, + nullptr, + replay_device_phys_mem_props_, + VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + &disp_params.dispatch_params_union.dispatch_indirect.new_params_buffer, + &disp_params.dispatch_params_union.dispatch_indirect.new_params_memory); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Cloning buffer resources failed (%s)", util::ToString(res).c_str()) @@ -1640,10 +2140,12 @@ VkResult DispatchTraceRaysDumpingContext::CopyTraceRaysIndirectParameters(TraceR VkBuffer buffer_on_device_address; VkDeviceMemory buffer_on_device_address_memory; VkResult res = CreateVkBuffer(size, - device_table_, + *device_table_, parent_device_, - reinterpret_cast(&bdaci), + reinterpret_cast(&bdaci), + nullptr, replay_device_phys_mem_props_, + VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, &buffer_on_device_address, &buffer_on_device_address_memory); if (res != VK_SUCCESS) @@ -1658,10 +2160,12 @@ VkResult DispatchTraceRaysDumpingContext::CopyTraceRaysIndirectParameters(TraceR VkBuffer new_params_buffer; VkDeviceMemory new_params_buffer_memory; res = CreateVkBuffer(size, - device_table_, + *device_table_, parent_device_, - reinterpret_cast(&bdaci), + reinterpret_cast(&bdaci), + nullptr, replay_device_phys_mem_props_, + VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, &new_params_buffer, &new_params_buffer_memory); if (res != VK_SUCCESS) @@ -1733,6 +2237,13 @@ VkResult DispatchTraceRaysDumpingContext::FetchIndirectParams() const VulkanPhysicalDeviceInfo* phys_dev_info = object_info_table_.GetVkPhysicalDeviceInfo(device_info->parent_id); assert(phys_dev_info); + const uint32_t transfer_queue_index = FindTransferQueueFamilyIndex(device_info->enabled_queue_family_flags); + if (transfer_queue_index == VK_QUEUE_FAMILY_IGNORED) + { + GFXRECON_LOG_ERROR("Failed to find a transfer queue") + return VK_ERROR_UNKNOWN; + } + graphics::VulkanResourcesUtil resource_util(device_info->handle, device_info->parent, *device_table_, @@ -1755,7 +2266,7 @@ VkResult DispatchTraceRaysDumpingContext::FetchIndirectParams() const VkDeviceSize size = sizeof(VkDispatchIndirectCommand); std::vector data; VkResult res = - resource_util.ReadFromBufferResource(i_params.new_params_buffer, size, 0, VK_QUEUE_FAMILY_IGNORED, data); + resource_util.ReadFromBufferResource(i_params.new_params_buffer, size, 0, transfer_queue_index, data); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Reading from buffer resources failed (%s)", util::ToString(res).c_str()) @@ -1763,7 +2274,7 @@ VkResult DispatchTraceRaysDumpingContext::FetchIndirectParams() } assert(data.size() == sizeof(VkDispatchIndirectCommand)); - util::platform::MemoryCopy(&i_params.dispatch_params, size, data.data(), size); + util::platform::MemoryCopy(&i_params.fetched_dispatch_params, size, data.data(), size); } for (auto& params : trace_rays_params_) @@ -1783,7 +2294,7 @@ VkResult DispatchTraceRaysDumpingContext::FetchIndirectParams() const VkDeviceSize size = tr_params.type == kTraceRaysIndirect ? sizeof(VkTraceRaysIndirectCommandKHR) : sizeof(VkTraceRaysIndirectCommand2KHR); std::vector data; - VkResult res = resource_util.ReadFromBufferResource(new_params_buffer, size, 0, VK_QUEUE_FAMILY_IGNORED, data); + VkResult res = resource_util.ReadFromBufferResource(new_params_buffer, size, 0, transfer_queue_index, data); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Reading from buffer resources failed (%s)", util::ToString(res).c_str()) @@ -1875,12 +2386,11 @@ void DispatchTraceRaysDumpingContext::InsertNewTraceRaysIndirect2Parameters(uint void DispatchTraceRaysDumpingContext::EndCommandBuffer() { - reached_end_command_buffer_ = true; device_table_->EndCommandBuffer(DR_command_buffer_); } -void DispatchTraceRaysDumpingContext::AssignSecondary(uint64_t execute_commands_index, - DispatchTraceRaysDumpingContext* secondary_context) +void DispatchTraceRaysDumpingContext::AssignSecondary( + uint64_t execute_commands_index, std::shared_ptr secondary_context) { GFXRECON_ASSERT(secondary_context); @@ -1951,9 +2461,9 @@ void DispatchTraceRaysDumpingContext::SecondaryUpdateContextFromPrimary( } // Having updated all secondary's context attributes update its dispatch/trace rays params. - // Secondary command buffer can inherit state from the primary. Part of that state that we care about are the bound - // descriptors. If that state is missing from the secondary then we get it from the primary. The best time to do - // this is when vkCmdExecuteCommands is called. + // Secondary command buffer can inherit state from the primary. Part of that state that we care about are the + // bound descriptors. If that state is missing from the secondary then we get it from the primary. The best time + // to do this is when vkCmdExecuteCommands is called. for (auto& params : dispatch_params_) { GFXRECON_ASSERT(params.second); diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_compute_ray_tracing.h b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_compute_ray_tracing.h index f3d676383..c3dcc7018 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_compute_ray_tracing.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_compute_ray_tracing.h @@ -23,21 +23,21 @@ #ifndef GFXRECON_GENERATED_VULKAN_REPLAY_DUMP_RESOURCES_COMPUTE_RAY_TRACING_H #define GFXRECON_GENERATED_VULKAN_REPLAY_DUMP_RESOURCES_COMPUTE_RAY_TRACING_H +#include "decode/api_decoder.h" #include "decode/common_object_info_table.h" +#include "decode/vulkan_device_address_tracker.h" +#include "decode/vulkan_replay_dump_resources_as.h" #include "decode/vulkan_replay_dump_resources_common.h" #include "decode/vulkan_object_info.h" #include "decode/vulkan_replay_options.h" #include "generated/generated_vulkan_dispatch_table.h" -#include "format/format.h" +#include "util/compressor.h" #include "util/defines.h" #include "util/logging.h" -#include "vulkan/vulkan_core.h" #include #include #include -#include -#include #include GFXRECON_BEGIN_NAMESPACE(gfxrecon) @@ -47,22 +47,64 @@ GFXRECON_BEGIN_NAMESPACE(decode) class DispatchTraceRaysDumpingContext { public: - DispatchTraceRaysDumpingContext(const std::vector* dispatch_indices, - const std::vector* trace_rays_indices, - CommonObjectInfoTable& object_info_table, - const VulkanReplayOptions& options, - VulkanDumpResourcesDelegate& delegate); + DispatchTraceRaysDumpingContext(const CommandIndices* dispatch_indices, + const CommandImageSubresource& disp_subresources, + const CommandIndices* trace_rays_indices, + const CommandImageSubresource& tr_subresources, + CommonObjectInfoTable& object_info_table, + const VulkanReplayOptions& options, + VulkanDumpResourcesDelegate& delegate, + const util::Compressor* compressor, + const DumpResourcesAccelerationStructuresContext& acceleration_structures_context, + const VulkanPerDeviceAddressTrackers& address_trackers); ~DispatchTraceRaysDumpingContext(); - VkResult CloneCommandBuffer(VulkanCommandBufferInfo* orig_cmd_buf_info, + VkResult BeginCommandBuffer(VulkanCommandBufferInfo* orig_cmd_buf_info, const graphics::VulkanDeviceTable* dev_table, const graphics::VulkanInstanceTable* inst_table, const VkCommandBufferBeginInfo* begin_info); VkCommandBuffer GetDispatchRaysCommandBuffer() const { return DR_command_buffer_; } - bool IsRecording() const; + void CmdDispatch(const ApiCallInfo& call_info, + PFN_vkCmdDispatch func, + VkCommandBuffer original_command_buffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ); + + void CmdDispatchIndirect(const ApiCallInfo& call_info, + PFN_vkCmdDispatchIndirect func, + VkCommandBuffer original_command_buffer, + const VulkanBufferInfo* buffer_info, + VkDeviceSize offset); + + void CmdTraceRaysKHR(const ApiCallInfo& call_info, + PFN_vkCmdTraceRaysKHR func, + VkCommandBuffer original_command_buffer, + StructPointerDecoder* pRaygenShaderBindingTable, + StructPointerDecoder* pMissShaderBindingTable, + StructPointerDecoder* pHitShaderBindingTable, + StructPointerDecoder* pCallableShaderBindingTable, + uint32_t width, + uint32_t height, + uint32_t depth); + + void + CmdTraceRaysIndirectKHR(const ApiCallInfo& call_info, + PFN_vkCmdTraceRaysIndirectKHR func, + VkCommandBuffer original_command_buffer, + StructPointerDecoder* pRaygenShaderBindingTable, + StructPointerDecoder* pMissShaderBindingTable, + StructPointerDecoder* pHitShaderBindingTable, + StructPointerDecoder* pCallableShaderBindingTable, + VkDeviceAddress indirectDeviceAddress); + + void CmdTraceRaysIndirect2KHR(const ApiCallInfo& call_info, + PFN_vkCmdTraceRaysIndirect2KHR func, + VkCommandBuffer original_command_buffer, + VkDeviceAddress indirectDeviceAddress); bool MustDumpDispatch(uint64_t index) const; @@ -74,13 +116,35 @@ class DispatchTraceRaysDumpingContext uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets); - VkResult DumpDispatchTraceRays( - VkQueue queue, uint64_t qs_index, uint64_t bcb_index, const VkSubmitInfo& submit_info, VkFence fence); + VkResult DumpDispatchTraceRays(VkQueue queue, + uint64_t qs_index, + uint64_t bcb_index, + const VkSubmitInfo& submit_info, + VkFence fence, + bool use_semaphores); VkResult DumpMutableResources(uint64_t bcb_index, uint64_t qs_index, uint64_t cmd_index, bool is_dispatch); void FinalizeCommandBuffer(bool is_dispatch); + VkResult CloneDispatchMutableResources(uint64_t index, bool cloning_before_cmd); + + VkResult CloneTraceRaysMutableResources(uint64_t index, bool cloning_before_cmd); + + void BindPipeline(VkPipelineBindPoint bind_point, const VulkanPipelineInfo* pipeline); + + void EndCommandBuffer(); + + void Release(); + + void UpdateSecondaries(); + + void AssignSecondary(uint64_t execute_commands_index, + std::shared_ptr secondary_context); + + bool ShouldHandleExecuteCommands(uint64_t index) const; + + private: void InsertNewDispatchParameters(uint64_t index, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); void InsertNewDispatchParameters(uint64_t index, const VulkanBufferInfo* buffer_info, VkDeviceSize offset); @@ -103,23 +167,6 @@ class DispatchTraceRaysDumpingContext void InsertNewTraceRaysIndirect2Parameters(uint64_t index, VkDeviceAddress indirectDeviceAddress); - VkResult CloneDispatchMutableResources(uint64_t index, bool cloning_before_cmd); - - VkResult CloneTraceRaysMutableResources(uint64_t index, bool cloning_before_cmd); - - void BindPipeline(VkPipelineBindPoint bind_point, const VulkanPipelineInfo* pipeline); - - void EndCommandBuffer(); - - void Release(); - - void UpdateSecondaries(); - - void AssignSecondary(uint64_t execute_commands_index, DispatchTraceRaysDumpingContext* secondary_context); - - bool ShouldHandleExecuteCommands(uint64_t index) const; - - private: void CopyImageResource(const VulkanImageInfo* src_image_info, VkImage dst_image); void CopyBufferResource(const VulkanBufferInfo* src_buffer_info, @@ -137,11 +184,13 @@ class DispatchTraceRaysDumpingContext const VulkanCommandBufferInfo* original_command_buffer_info_; VkCommandBuffer DR_command_buffer_; - std::vector dispatch_indices_; - std::vector trace_rays_indices_; - bool dump_resources_before_; + CommandIndices dispatch_indices_; + CommandImageSubresource disp_subresources_; + CommandIndices trace_rays_indices_; + CommandImageSubresource tr_subresources_; VulkanDumpResourcesDelegate& delegate_; - bool dump_immutable_resources_; + const VulkanReplayOptions& options_; + const util::Compressor* compressor_; // One entry per descriptor set for each compute and ray tracing binding points BoundDescriptorSets bound_descriptor_sets_compute_; @@ -159,29 +208,27 @@ class DispatchTraceRaysDumpingContext struct ImageContext { - const VulkanImageInfo* original_image{ nullptr }; - VkImage image{ VK_NULL_HANDLE }; - VkDeviceMemory image_memory{ VK_NULL_HANDLE }; - VkShaderStageFlags stages; - VkDescriptorType desc_type; - uint32_t desc_set; - uint32_t desc_binding; - uint32_t array_index; + VulkanImageInfo new_image_info; + VkDeviceMemory image_memory{ VK_NULL_HANDLE }; + VkShaderStageFlags stages; + VkDescriptorType desc_type; + uint32_t desc_set; + uint32_t desc_binding; + uint32_t array_index; }; std::vector images; struct BufferContext { - const VulkanBufferInfo* original_buffer{ nullptr }; - VkBuffer buffer{ VK_NULL_HANDLE }; - VkDeviceMemory buffer_memory{ VK_NULL_HANDLE }; - VkDeviceSize cloned_size{ 0 }; - VkShaderStageFlags stages; - VkDescriptorType desc_type; - uint32_t desc_set; - uint32_t desc_binding; - uint32_t array_index; + VulkanBufferInfo new_buffer_info; + VkDeviceMemory buffer_memory{ VK_NULL_HANDLE }; + VkDeviceSize cloned_size{ 0 }; + VkShaderStageFlags stages; + VkDescriptorType desc_type; + uint32_t desc_set; + uint32_t desc_binding; + uint32_t array_index; }; std::vector buffers; @@ -261,11 +308,7 @@ class DispatchTraceRaysDumpingContext VkBuffer new_params_buffer; VkDeviceMemory new_params_memory; - // Pointers that will point to host allocated memory and filled with the dispatch - // params read back after executing on the gpu. Because of the union a data - // structure with a non default destructor (vector/unique_ptr) cannot be used - // and we will handle the memory managment ourselves. - DispatchParams* dispatch_params; + DispatchParams fetched_dispatch_params; }; DispatchIndirect dispatch_indirect; @@ -275,7 +318,7 @@ class DispatchTraceRaysDumpingContext {} DispatchParamsUnion(const VulkanBufferInfo* params_buffer_info, VkDeviceSize offset) : - dispatch_indirect{ params_buffer_info, offset, VK_NULL_HANDLE, VK_NULL_HANDLE, nullptr } + dispatch_indirect{ params_buffer_info, offset, VK_NULL_HANDLE, VK_NULL_HANDLE } {} DispatchParamsUnion(uint32_t baseGroupX, @@ -324,6 +367,8 @@ class DispatchTraceRaysDumpingContext // Need to keep track if a dispatch context from a secondary command buffer has been updated with information // that might be available only from the primary command buffer bool updated_referenced_descriptors; + + DumpedResourcesInfo dumped_resources; }; enum TraceRaysTypes @@ -436,6 +481,8 @@ class DispatchTraceRaysDumpingContext // Need to keep track if a trace rays context from a secondary command buffer has been updated with information // that might be available only from the primary command buffer bool updated_referenced_descriptors; + + DumpedResourcesInfo dumped_resources; }; private: @@ -455,9 +502,9 @@ class DispatchTraceRaysDumpingContext // multiple times struct DumpedDescriptors { - std::unordered_set image_descriptors; - std::unordered_set buffer_descriptors; - std::unordered_set*> inline_uniform_blocks; + std::map image_descriptors; + std::map buffer_descriptors; + std::map acceleration_structures; }; DumpedDescriptors dispatch_dumped_descriptors_; @@ -481,7 +528,11 @@ class DispatchTraceRaysDumpingContext TraceRaysParameters& GetTraceRaysParameters() { return trace_rays_params_; } // Execute commands block index : DrawCallContexts - std::unordered_map> secondaries_; + std::unordered_map>> secondaries_; + + const DumpResourcesAccelerationStructuresContext& acceleration_structures_context_; + + const VulkanPerDeviceAddressTrackers& address_trackers_; const graphics::VulkanDeviceTable* device_table_; VkDevice parent_device_; @@ -490,7 +541,6 @@ class DispatchTraceRaysDumpingContext const VkPhysicalDeviceMemoryProperties* replay_device_phys_mem_props_; size_t current_dispatch_index_; size_t current_trace_rays_index_; - bool reached_end_command_buffer_; }; GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_copy_array_of_pointers.h b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_copy_array_of_pointers.h new file mode 100644 index 000000000..101a14bea --- /dev/null +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_copy_array_of_pointers.h @@ -0,0 +1,224 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef VULKAN_REPLAY_DUMP_RESOURCES_COPY_ARRAY_OF_POINTERS_H +#define VULKAN_REPLAY_DUMP_RESOURCES_COPY_ARRAY_OF_POINTERS_H + +#include + +// Original GLSL code +#if 0 +#version 450 + +#extension GL_EXT_buffer_reference : require + +struct ASInstanceKHR +{ + uint data[16]; +}; + +layout(std430, buffer_reference, buffer_reference_align = 8) buffer ASInstanceKHR_ptr +{ + ASInstanceKHR instance[]; +}; + +layout(std430, buffer_reference, buffer_reference_align = 8) readonly buffer ArrayOfPointers +{ + ASInstanceKHR_ptr pointers[]; +}; + +layout(push_constant) uniform Registers +{ + ArrayOfPointers array_of_pointers_base_address; + ASInstanceKHR_ptr out_buffer_base_address; + uint count; +} +registers; + +void main(void) +{ + for (int i = 0; i < registers.count; ++i) + { + registers.out_buffer_base_address.instance[i].data = registers.array_of_pointers_base_address.pointers[i].instance[0].data; + } +} +#endif + +// Human readable form of SPIRV +#if 0 +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 54 + + Capability Shader + Capability PhysicalStorageBufferAddressesEXT + Extension "SPV_KHR_physical_storage_buffer" + 1: ExtInstImport "GLSL.std.450" + MemoryModel PhysicalStorageBuffer64EXT GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_buffer_reference" + Name 4 "main" + Name 8 "i" + Name 20 "Registers" + MemberName 20(Registers) 0 "array_of_pointers_base_address" + MemberName 20(Registers) 1 "out_buffer_base_address" + MemberName 20(Registers) 2 "count" + Name 22 "ArrayOfPointers" + MemberName 22(ArrayOfPointers) 0 "pointers" + Name 25 "ASInstanceKHR" + MemberName 25(ASInstanceKHR) 0 "data" + Name 27 "ASInstanceKHR_ptr" + MemberName 27(ASInstanceKHR_ptr) 0 "instance" + Name 29 "registers" + Decorate 20(Registers) Block + MemberDecorate 20(Registers) 0 Offset 0 + MemberDecorate 20(Registers) 1 Offset 8 + MemberDecorate 20(Registers) 2 Offset 16 + Decorate 21 ArrayStride 8 + Decorate 22(ArrayOfPointers) Block + MemberDecorate 22(ArrayOfPointers) 0 NonWritable + MemberDecorate 22(ArrayOfPointers) 0 Offset 0 + Decorate 24 ArrayStride 4 + MemberDecorate 25(ASInstanceKHR) 0 Offset 0 + Decorate 26 ArrayStride 64 + Decorate 27(ASInstanceKHR_ptr) Block + MemberDecorate 27(ASInstanceKHR_ptr) 0 Offset 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 16: TypeInt 32 0 + TypeForwardPointer 18 PhysicalStorageBufferEXT + TypeForwardPointer 19 PhysicalStorageBufferEXT + 20(Registers): TypeStruct 18 19 16(int) + 21: TypeRuntimeArray 19 +22(ArrayOfPointers): TypeStruct 21 + 18: TypePointer PhysicalStorageBufferEXT 22(ArrayOfPointers) + 23: 16(int) Constant 16 + 24: TypeArray 16(int) 23 +25(ASInstanceKHR): TypeStruct 24 + 26: TypeRuntimeArray 25(ASInstanceKHR) +27(ASInstanceKHR_ptr): TypeStruct 26 + 19: TypePointer PhysicalStorageBufferEXT 27(ASInstanceKHR_ptr) + 28: TypePointer PushConstant 20(Registers) + 29(registers): 28(ptr) Variable PushConstant + 30: 6(int) Constant 2 + 31: TypePointer PushConstant 16(int) + 34: TypeBool + 36: 6(int) Constant 1 + 37: TypePointer PushConstant 19(ptr) + 41: TypePointer PushConstant 18(ptr) + 45: TypePointer PhysicalStorageBufferEXT 19(ptr) + 48: TypePointer PhysicalStorageBufferEXT 24 + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 14 + 14: Label + 15: 6(int) Load 8(i) + 17: 16(int) Bitcast 15 + 32: 31(ptr) AccessChain 29(registers) 30 + 33: 16(int) Load 32 + 35: 34(bool) ULessThan 17 33 + BranchConditional 35 11 12 + 11: Label + 38: 37(ptr) AccessChain 29(registers) 36 + 39: 19(ptr) Load 38 + 40: 6(int) Load 8(i) + 42: 41(ptr) AccessChain 29(registers) 9 + 43: 18(ptr) Load 42 + 44: 6(int) Load 8(i) + 46: 45(ptr) AccessChain 43 9 44 + 47: 19(ptr) Load 46 Aligned 8 + 49: 48(ptr) AccessChain 47 9 9 9 + 50: 24 Load 49 Aligned 8 + 51: 48(ptr) AccessChain 39 9 40 9 + Store 51 50 Aligned 8 + Branch 13 + 13: Label + 52: 6(int) Load 8(i) + 53: 6(int) IAdd 52 36 + Store 8(i) 53 + Branch 10 + 12: Label + Return + FunctionEnd +#endif + +static constexpr uint32_t g_CompShaderMain[] = { + 0x07230203, 0x00010000, 0x0008000b, 0x00000036, 0x00000000, 0x00020011, 0x00000001, 0x00020011, 0x000014e3, + 0x0009000a, 0x5f565053, 0x5f52484b, 0x73796870, 0x6c616369, 0x6f74735f, 0x65676172, 0x6675625f, 0x00726566, + 0x0006000b, 0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, 0x00000000, 0x0003000e, 0x000014e4, 0x00000001, + 0x0005000f, 0x00000005, 0x00000004, 0x6e69616d, 0x00000000, 0x00060010, 0x00000004, 0x00000011, 0x00000001, + 0x00000001, 0x00000001, 0x00030003, 0x00000002, 0x000001c2, 0x00070004, 0x455f4c47, 0x625f5458, 0x65666675, + 0x65725f72, 0x65726566, 0x0065636e, 0x00040005, 0x00000004, 0x6e69616d, 0x00000000, 0x00030005, 0x00000008, + 0x00000069, 0x00050005, 0x00000014, 0x69676552, 0x72657473, 0x00000073, 0x000b0006, 0x00000014, 0x00000000, + 0x61727261, 0x666f5f79, 0x696f705f, 0x7265746e, 0x61625f73, 0x615f6573, 0x65726464, 0x00007373, 0x00090006, + 0x00000014, 0x00000001, 0x5f74756f, 0x66667562, 0x625f7265, 0x5f657361, 0x72646461, 0x00737365, 0x00050006, + 0x00000014, 0x00000002, 0x6e756f63, 0x00000074, 0x00060005, 0x00000016, 0x61727241, 0x50664f79, 0x746e696f, + 0x00737265, 0x00060006, 0x00000016, 0x00000000, 0x6e696f70, 0x73726574, 0x00000000, 0x00060005, 0x00000019, + 0x6e495341, 0x6e617473, 0x484b6563, 0x00000052, 0x00050006, 0x00000019, 0x00000000, 0x61746164, 0x00000000, + 0x00070005, 0x0000001b, 0x6e495341, 0x6e617473, 0x484b6563, 0x74705f52, 0x00000072, 0x00060006, 0x0000001b, + 0x00000000, 0x74736e69, 0x65636e61, 0x00000000, 0x00050005, 0x0000001d, 0x69676572, 0x72657473, 0x00000073, + 0x00030047, 0x00000014, 0x00000002, 0x00050048, 0x00000014, 0x00000000, 0x00000023, 0x00000000, 0x00050048, + 0x00000014, 0x00000001, 0x00000023, 0x00000008, 0x00050048, 0x00000014, 0x00000002, 0x00000023, 0x00000010, + 0x00040047, 0x00000015, 0x00000006, 0x00000008, 0x00030047, 0x00000016, 0x00000002, 0x00040048, 0x00000016, + 0x00000000, 0x00000018, 0x00050048, 0x00000016, 0x00000000, 0x00000023, 0x00000000, 0x00040047, 0x00000018, + 0x00000006, 0x00000004, 0x00050048, 0x00000019, 0x00000000, 0x00000023, 0x00000000, 0x00040047, 0x0000001a, + 0x00000006, 0x00000040, 0x00030047, 0x0000001b, 0x00000002, 0x00050048, 0x0000001b, 0x00000000, 0x00000023, + 0x00000000, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00040015, 0x00000006, 0x00000020, + 0x00000001, 0x00040020, 0x00000007, 0x00000007, 0x00000006, 0x0004002b, 0x00000006, 0x00000009, 0x00000000, + 0x00040015, 0x00000010, 0x00000020, 0x00000000, 0x00030027, 0x00000012, 0x000014e5, 0x00030027, 0x00000013, + 0x000014e5, 0x0005001e, 0x00000014, 0x00000012, 0x00000013, 0x00000010, 0x0003001d, 0x00000015, 0x00000013, + 0x0003001e, 0x00000016, 0x00000015, 0x00040020, 0x00000012, 0x000014e5, 0x00000016, 0x0004002b, 0x00000010, + 0x00000017, 0x00000010, 0x0004001c, 0x00000018, 0x00000010, 0x00000017, 0x0003001e, 0x00000019, 0x00000018, + 0x0003001d, 0x0000001a, 0x00000019, 0x0003001e, 0x0000001b, 0x0000001a, 0x00040020, 0x00000013, 0x000014e5, + 0x0000001b, 0x00040020, 0x0000001c, 0x00000009, 0x00000014, 0x0004003b, 0x0000001c, 0x0000001d, 0x00000009, + 0x0004002b, 0x00000006, 0x0000001e, 0x00000002, 0x00040020, 0x0000001f, 0x00000009, 0x00000010, 0x00020014, + 0x00000022, 0x0004002b, 0x00000006, 0x00000024, 0x00000001, 0x00040020, 0x00000025, 0x00000009, 0x00000013, + 0x00040020, 0x00000029, 0x00000009, 0x00000012, 0x00040020, 0x0000002d, 0x000014e5, 0x00000013, 0x00040020, + 0x00000030, 0x000014e5, 0x00000018, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200f8, + 0x00000005, 0x0004003b, 0x00000007, 0x00000008, 0x00000007, 0x0003003e, 0x00000008, 0x00000009, 0x000200f9, + 0x0000000a, 0x000200f8, 0x0000000a, 0x000400f6, 0x0000000c, 0x0000000d, 0x00000000, 0x000200f9, 0x0000000e, + 0x000200f8, 0x0000000e, 0x0004003d, 0x00000006, 0x0000000f, 0x00000008, 0x0004007c, 0x00000010, 0x00000011, + 0x0000000f, 0x00050041, 0x0000001f, 0x00000020, 0x0000001d, 0x0000001e, 0x0004003d, 0x00000010, 0x00000021, + 0x00000020, 0x000500b0, 0x00000022, 0x00000023, 0x00000011, 0x00000021, 0x000400fa, 0x00000023, 0x0000000b, + 0x0000000c, 0x000200f8, 0x0000000b, 0x00050041, 0x00000025, 0x00000026, 0x0000001d, 0x00000024, 0x0004003d, + 0x00000013, 0x00000027, 0x00000026, 0x0004003d, 0x00000006, 0x00000028, 0x00000008, 0x00050041, 0x00000029, + 0x0000002a, 0x0000001d, 0x00000009, 0x0004003d, 0x00000012, 0x0000002b, 0x0000002a, 0x0004003d, 0x00000006, + 0x0000002c, 0x00000008, 0x00060041, 0x0000002d, 0x0000002e, 0x0000002b, 0x00000009, 0x0000002c, 0x0006003d, + 0x00000013, 0x0000002f, 0x0000002e, 0x00000002, 0x00000008, 0x00070041, 0x00000030, 0x00000031, 0x0000002f, + 0x00000009, 0x00000009, 0x00000009, 0x0006003d, 0x00000018, 0x00000032, 0x00000031, 0x00000002, 0x00000008, + 0x00070041, 0x00000030, 0x00000033, 0x00000027, 0x00000009, 0x00000028, 0x00000009, 0x0005003e, 0x00000033, + 0x00000032, 0x00000002, 0x00000008, 0x000200f9, 0x0000000d, 0x000200f8, 0x0000000d, 0x0004003d, 0x00000006, + 0x00000034, 0x00000008, 0x00050080, 0x00000006, 0x00000035, 0x00000034, 0x00000024, 0x0003003e, 0x00000008, + 0x00000035, 0x000200f9, 0x0000000a, 0x000200f8, 0x0000000c, 0x000100fd, 0x00010038 +}; + +#endif // VULKAN_REPLAY_DUMP_RESOURCES_COPY_ARRAY_OF_POINTERS_H diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_delegate.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_delegate.cpp index a2190b116..bbc72657b 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_delegate.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_delegate.cpp @@ -20,441 +20,967 @@ ** DEALINGS IN THE SOFTWARE. */ -#include "decode/vulkan_replay_dump_resources_delegate.h" #include "decode/vulkan_object_info.h" +#include "decode/vulkan_replay_dump_resources_delegate.h" #include "decode/vulkan_replay_dump_resources_common.h" -#include "generated/generated_vulkan_dispatch_table.h" +#include "decode/vulkan_replay_dump_resources_delegate_dumped_resources.h" #include "generated/generated_vulkan_enum_to_string.h" #include "util/buffer_writer.h" +#include "util/image_writer.h" +#include "util/logging.h" +#include "Vulkan-Utility-Libraries/vk_format_utils.h" + +#include +#include +#include +#include +#include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) -bool DefaultVulkanDumpResourcesDelegate::IsImageDumpable(const graphics::VulkanInstanceTable* instance_table, - const VulkanImageInfo* image_info) -{ - GFXRECON_ASSERT(instance_table != nullptr); - GFXRECON_ASSERT(image_info != nullptr); - - // Check for multisampled images that cannot be dumped - if (image_info->sample_count == VK_SAMPLE_COUNT_1_BIT) - { - return true; - } - - if (instance_table != nullptr) - { - VulkanDeviceInfo* device = object_info_table_.GetVkDeviceInfo(image_info->parent_id); - if (device != nullptr) - { - VkFormatProperties format_properties{}; - instance_table->GetPhysicalDeviceFormatProperties(device->parent, image_info->format, &format_properties); - if ((format_properties.optimalTilingFeatures & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) != - VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) - { - return false; - } - } - } - - return true; -} - -void DefaultVulkanDumpResourcesDelegate::DumpDrawCallInfo(const VulkanDumpDrawCallInfo& draw_call_info, - const graphics::VulkanInstanceTable* instance_table) +void DefaultVulkanDumpResourcesDelegate::DumpDrawCallInfo(const VulkanDelegateDumpDrawCallContext& draw_call_info) { - switch (draw_call_info.type) + switch (draw_call_info.command_type) { - case DumpResourceType::kDrawCallInfo: - GenerateOutputJsonDrawCallInfo(draw_call_info, instance_table); + case DumpResourcesPipelineStage::kGraphics: + GenerateOutputJsonDrawCallInfo(draw_call_info); + break; + case DumpResourcesPipelineStage::kCompute: + GenerateOutputJsonDispatchInfo(draw_call_info); break; - case DumpResourceType::kDispatchInfo: - GenerateOutputJsonDispatchInfo(draw_call_info, instance_table); + case DumpResourcesPipelineStage::kRayTracing: + GenerateOutputJsonTraceRaysIndex(draw_call_info); break; - case DumpResourceType::kTraceRaysIndex: - GenerateOutputJsonTraceRaysIndex(draw_call_info, instance_table); + case DumpResourcesPipelineStage::kTransfer: + GenerateOutputJsonTransferInfo(draw_call_info); break; default: break; } } -VkResult DefaultVulkanDumpResourcesDelegate::DumpResource(const VulkanDumpResourceInfo& resource_info) +bool DefaultVulkanDumpResourcesDelegate::DumpResource(const VulkanDelegateDumpResourceContext& delegate_context) { - switch (resource_info.type) + const DumpedResourceBase* resource_info = delegate_context.dumped_resource; + switch (resource_info->type) { case DumpResourceType::kRtv: case DumpResourceType::kDsv: - return DumpRenderTargetImage(resource_info); - break; case DumpResourceType::kImageDescriptor: - return DumpImageDescriptor(resource_info); - break; - case DumpResourceType::kBufferDescriptor: - return DumpBufferDescriptor(resource_info); - break; - case DumpResourceType::kInlineUniformBufferDescriptor: - return DumpInlineUniformBufferDescriptor(resource_info); + case DumpResourceType::kDispatchTraceRaysImage: + case DumpResourceType::kDispatchTraceRaysImageDescriptor: + return DumpImageToFile(delegate_context); break; + case DumpResourceType::kVertex: - return DumpVertexBuffer(resource_info); - break; case DumpResourceType::kIndex: - return DumpIndexBuffer(resource_info); - break; - case DumpResourceType::kDispatchTraceRaysImage: - return DumpeDispatchTraceRaysImage(resource_info); - break; + case DumpResourceType::kBufferDescriptor: case DumpResourceType::kDispatchTraceRaysBuffer: - return DumpeDispatchTraceRaysBuffer(resource_info); - break; - case DumpResourceType::kDispatchTraceRaysImageDescriptor: - return DumpDispatchTraceRaysImageDescriptor(resource_info); - break; case DumpResourceType::kDispatchTraceRaysBufferDescriptor: - return DumpDispatchTraceRaysBufferDescriptor(resource_info); - break; + case DumpResourceType::kInlineUniformBufferDescriptor: case DumpResourceType::kDispatchTraceRaysInlineUniformBufferDescriptor: - return DumpDispatchTraceRaysInlineUniformBufferDescriptor(resource_info); + return DumpBufferToFile(delegate_context); break; + + case DumpResourceType::kAccelerationStructure: + return DumpAccelerationStructureToFile(delegate_context); + break; + + case DumpResourceType::kInitBufferMetaCommand: + case DumpResourceType::kInitImageMetaCommand: + case DumpResourceType::kCopyBuffer: + case DumpResourceType::kCopyBufferToImage: + case DumpResourceType::kCopyImage: + case DumpResourceType::kCopyImageToBuffer: + case DumpResourceType::kBlitImage: + case DumpResourceType::kBuildAccelerationStructure: + case DumpResourceType::kCopyAccelerationStructure: + return DumpTransferCommandToFile(delegate_context); + break; + default: + GFXRECON_LOG_ERROR("%s(): Unexpected resources type (%d)", __func__, static_cast(resource_info->type)); + GFXRECON_ASSERT(0); break; } - return VK_ERROR_UNKNOWN; + + return false; } -VkResult DefaultVulkanDumpResourcesDelegate::DumpRenderTargetImage(const VulkanDumpResourceInfo& resource_info) +static bool DumpBufferToFile(DumpedBuffer& dumped_buffer, + const std::string& filename, + const DumpedHostData& data, + const util::Compressor* compressor) { - const VulkanImageInfo* image_info = resource_info.image_info; + const size_t bytes_written = util::bufferwriter::WriteBuffer(filename, data.data(), data.size(), compressor); - std::vector aspects; - GetFormatAspects(image_info->format, aspects); + if (!bytes_written) + { + GFXRECON_LOG_ERROR("Error writing file %s", filename.c_str()); + return false; + } - const size_t total_files = options_.dump_resources_dump_all_image_subresources - ? (aspects.size() * image_info->layer_count * image_info->level_count) - : aspects.size(); + dumped_buffer.filename = filename; - std::vector filenames(total_files); - size_t f = 0; - for (auto aspect : aspects) + if (bytes_written && bytes_written != data.size()) { - for (uint32_t mip = 0; mip < image_info->level_count; ++mip) - { - for (uint32_t layer = 0; layer < image_info->layer_count; ++layer) - { - filenames[f++] = GenerateRenderTargetImageFilename(resource_info, aspect, mip, layer); + GFXRECON_ASSERT(compressor != nullptr); + dumped_buffer.compressed_size = bytes_written; + } - if (!options_.dump_resources_dump_all_image_subresources) - { - break; - } - } + return bytes_written ? true : false; +} - if (!options_.dump_resources_dump_all_image_subresources) - { - break; - } - } - } +bool DefaultVulkanDumpResourcesDelegate::DumpBufferToFile(const VulkanDelegateDumpResourceContext& delegate_context) +{ + DumpedResourceBase* dumped_resource = delegate_context.dumped_resource; + GFXRECON_ASSERT(dumped_resource != nullptr); - bool scaling_supported; - VkResult res = DumpImageToFile(image_info, - resource_info.device_info, - resource_info.device_table, - resource_info.instance_table, - *resource_info.object_info_table, - filenames, - options_.dump_resources_scale, - scaling_supported, - options_.dump_resources_image_format, - options_.dump_resources_dump_all_image_subresources, - options_.dump_resources_dump_raw_images, - options_.dump_resources_dump_separate_alpha, - VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); - if (res != VK_SUCCESS) + DumpedBuffer* dumped_buffer; + BufferFilenameGenerator filename_generator; + + switch (dumped_resource->type) { - if (res == VK_ERROR_FEATURE_NOT_PRESENT) + case DumpResourceType::kVertex: + case DumpResourceType::kIndex: { - // Failures to dump images due to multisampling should be ok - GFXRECON_LOG_WARNING("Image could not be resolved (%s)", - util::ToString(image_info->format).c_str()) - return VK_SUCCESS; + filename_generator = dumped_resource->type == DumpResourceType::kVertex + ? &DefaultVulkanDumpResourcesDelegate::GenerateVertexBufferFilename + : &DefaultVulkanDumpResourcesDelegate::GenerateIndexBufferFilename; + + GFXRECON_ASSERT(!delegate_context.before_command); + DumpedVertexIndexBuffer* dumped_vertex_index_buffer = + static_cast(dumped_resource); + dumped_buffer = &dumped_vertex_index_buffer->buffer; } - else + break; + + case DumpResourceType::kBufferDescriptor: + case DumpResourceType::kDispatchTraceRaysBuffer: + case DumpResourceType::kDispatchTraceRaysBufferDescriptor: + case DumpResourceType::kInlineUniformBufferDescriptor: + case DumpResourceType::kDispatchTraceRaysInlineUniformBufferDescriptor: { - GFXRECON_LOG_ERROR("Dumping image failed (%s)", util::ToString(res).c_str()) + if (dumped_resource->type == DumpResourceType::kBufferDescriptor) + { + filename_generator = &DefaultVulkanDumpResourcesDelegate::GenerateGraphicsBufferDescriptorFilename; + } + else if (dumped_resource->type == DumpResourceType::kDispatchTraceRaysBuffer) + { + filename_generator = &DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysBufferFilename; + } + else if (dumped_resource->type == DumpResourceType::kInlineUniformBufferDescriptor) + { + GFXRECON_ASSERT(!delegate_context.before_command); + filename_generator = + &DefaultVulkanDumpResourcesDelegate::GenerateGraphicsInlineUniformBufferDescriptorFilename; + } + else if (dumped_resource->type == DumpResourceType::kDispatchTraceRaysInlineUniformBufferDescriptor) + { + GFXRECON_ASSERT(!delegate_context.before_command); + filename_generator = + &DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysInlineUniformBufferDescriptorFilename; + } + else + { + GFXRECON_ASSERT((dumped_resource->type == DumpResourceType::kDispatchTraceRaysBufferDescriptor)); + filename_generator = + &DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysBufferDescriptorFilename; + } + + DumpedDescriptor* dumped_buffer_desc = static_cast(delegate_context.dumped_resource); + GFXRECON_ASSERT(dumped_buffer_desc != nullptr); + + dumped_buffer = !delegate_context.before_command + ? std::get_if(&dumped_buffer_desc->dumped_resource) + : std::get_if(&dumped_buffer_desc->dumped_resource_before); + GFXRECON_ASSERT(dumped_buffer != nullptr); } - } + break; - // Keep track of images for which scaling failed - if (!scaling_supported) - { - images_failed_scaling_.insert(image_info); + default: + GFXRECON_LOG_ERROR("%s(): Unexpected resource type", __func__) } - return res; -} - -std::string DefaultVulkanDumpResourcesDelegate::GenerateRenderTargetImageFilename( - const VulkanDumpResourceInfo& resource_info, VkImageAspectFlagBits aspect, uint32_t mip_level, uint32_t layer) const -{ - const VulkanImageInfo* image_info = resource_info.image_info; - std::string aspect_str = ImageAspectToStr(aspect); - std::string attachment_str = resource_info.attachment_index != DEPTH_ATTACHMENT - ? "_att_" + std::to_string(resource_info.attachment_index) - : "_depth_att"; + const VulkanDelegateBufferDumpedData& buffer_data = + std::get(delegate_context.dumped_data); - std::stringstream filename; - filename << capture_filename_ << "_"; + const std::string filename = + std::invoke(filename_generator, *this, *dumped_resource, delegate_context.before_command); - const DumpedImageFormat output_image_format = GetDumpedImageFormat(resource_info.device_info, - resource_info.device_table, - resource_info.instance_table, - *resource_info.object_info_table, - image_info->format, - image_info->tiling, - image_info->type, - options_.dump_resources_image_format, - options_.dump_resources_dump_raw_images); + return gfxrecon::decode::DumpBufferToFile(*dumped_buffer, filename, buffer_data.data, delegate_context.compressor); +} - if (output_image_format != KFormatRaw) +static constexpr util::imagewriter::DataFormats VkFormatToImageWriterDataFormat(VkFormat format, + VkImageAspectFlagBits aspect) +{ + if (aspect == VK_IMAGE_ASPECT_COLOR_BIT) { - if (options_.dump_resources_before) + if (format == VK_FORMAT_R8G8B8_SRGB || format == VK_FORMAT_R8G8B8_UNORM) { - filename << "draw_" << ((!resource_info.before_cmd) ? "after_" : "before_") << resource_info.cmd_index - << "_qs_" << resource_info.qs_index << "_bcb_" << resource_info.bcb_index << attachment_str - << "_aspect_" << aspect_str; + return util::imagewriter::DataFormats::kFormat_RGB; } - else + else if (format == VK_FORMAT_R8G8B8A8_SRGB || format == VK_FORMAT_R8G8B8A8_UNORM) + { + return util::imagewriter::DataFormats::kFormat_RGBA; + } + else if (format == VK_FORMAT_B8G8R8_SRGB || format == VK_FORMAT_B8G8R8_UNORM) { - filename << "draw_" << resource_info.cmd_index << "_qs_" << resource_info.qs_index << "_bcb_" - << resource_info.bcb_index << attachment_str << "_aspect_" << aspect_str; + return util::imagewriter::DataFormats::kFormat_BGR; + } + else if (format == VK_FORMAT_B8G8R8A8_SRGB || format == VK_FORMAT_B8G8R8A8_UNORM) + { + return util::imagewriter::DataFormats::kFormat_BGRA; } } - else + else if (aspect == VK_IMAGE_ASPECT_DEPTH_BIT) { - if (options_.dump_resources_before) + if (format == VK_FORMAT_D32_SFLOAT || format == VK_FORMAT_D32_SFLOAT_S8_UINT) { - filename << "draw_" << ((!resource_info.before_cmd) ? "after_" : "before_") << resource_info.cmd_index - << "_qs_" << resource_info.qs_index << "_bcb_" << resource_info.bcb_index << "_" - << resource_info.qs_index << "_" << resource_info.bcb_index << attachment_str << "_" - << util::ToString(image_info->format) << "_aspect_" << aspect_str; + return util::imagewriter::DataFormats::kFormat_D32_FLOAT; } - else + else if (format == VK_FORMAT_D24_UNORM_S8_UINT || format == VK_FORMAT_X8_D24_UNORM_PACK32) { - filename << "draw_" << resource_info.cmd_index << "_qs_" << resource_info.qs_index << "_bcb_" - << resource_info.bcb_index << attachment_str << "_" << util::ToString(image_info->format) - << "_aspect_" << aspect_str; + return util::imagewriter::DataFormats::kFormat_D24_UNORM; + } + else if (format == VK_FORMAT_D16_UNORM || format == VK_FORMAT_D16_UNORM_S8_UINT) + { + return util::imagewriter::DataFormats::kFormat_D16_UNORM; + } + } + else if (aspect == VK_IMAGE_ASPECT_STENCIL_BIT) + { + if (format == VK_FORMAT_D32_SFLOAT_S8_UINT || format == VK_FORMAT_D16_UNORM_S8_UINT || + format == VK_FORMAT_D24_UNORM_S8_UINT) + { + return util::imagewriter::DataFormats::kFormat_S8_UINT; } } - std::stringstream subresource_sting; - subresource_sting << "_mip_" << mip_level << "_layer_" << layer; - subresource_sting << ImageFileExtension(output_image_format); + GFXRECON_LOG_WARNING("%s(): Unrecognized format - aspect combination (%s - %s)", + __func__, + util::ToString(format).c_str(), + util::ToString(aspect).c_str()); + return util::imagewriter::DataFormats::kFormat_UNSPECIFIED; +} - std::filesystem::path filedirname(options_.dump_resources_output_dir); - std::filesystem::path filebasename(filename.str() + subresource_sting.str()); - return (filedirname / filebasename).string(); +static const std::unordered_set FormatsDumpedAsImages = { + + VK_FORMAT_R8G8B8_SRGB, VK_FORMAT_R8G8B8_UNORM, VK_FORMAT_R8G8B8A8_SRGB, VK_FORMAT_R8G8B8A8_UNORM, + VK_FORMAT_B8G8R8_SRGB, VK_FORMAT_B8G8R8_UNORM, VK_FORMAT_B8G8R8A8_SRGB, VK_FORMAT_B8G8R8A8_UNORM, + VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_X8_D24_UNORM_PACK32, + VK_FORMAT_D16_UNORM +}; + +static constexpr DumpedImageFormat +GetDumpedImageFormat(const DumpedImage& dumped_image, bool dump_images_raw, util::ScreenshotFormat image_file_format) +{ + if (dump_images_raw) + { + return KFormatRaw; + } + + if (!FormatsDumpedAsImages.count(dumped_image.dumped_format)) + { + return KFormatRaw; + } + + // Choose the requested preference for image file extension + switch (image_file_format) + { + case util::ScreenshotFormat::kBmp: + return kFormatBMP; + + case util::ScreenshotFormat::kPng: + return KFormatPNG; + + default: + GFXRECON_LOG_ERROR("Unexpected image file format"); + } + + return KFormatRaw; } -VkResult DefaultVulkanDumpResourcesDelegate::DumpImageDescriptor(const VulkanDumpResourceInfo& resource_info) +bool DefaultVulkanDumpResourcesDelegate::DumpImageToFile(DumpedResourceBase* dumped_resource, + DumpedImage& dumped_image, + const DumpedImageHostData& image_dumped_data, + ImageFilenameGenerator filename_generator, + bool before_command, + const util::Compressor* compressor) { - const VulkanImageInfo* image_info = resource_info.image_info; + const VulkanImageInfo* image_info = dumped_image.image_info; - std::vector aspects; - GetFormatAspects(image_info->format, aspects); + const DumpedImageFormat output_image_format = GetDumpedImageFormat( + dumped_image, options_.dump_resources_dump_raw_images, options_.dump_resources_image_format); - const size_t total_files = options_.dump_resources_dump_all_image_subresources - ? (aspects.size() * image_info->layer_count * image_info->level_count) - : aspects.size(); + dumped_image.dumped_raw = (output_image_format == DumpedImageFormat::KFormatRaw); - std::vector filenames(total_files); + GFXRECON_ASSERT(!dumped_image.dumped_subresources.empty()); - size_t f = 0; - for (auto aspect : aspects) + for (size_t i = 0; i < dumped_image.dumped_subresources.size(); ++i) { - for (uint32_t mip = 0; mip < image_info->level_count; ++mip) + auto& sub_res = dumped_image.dumped_subresources[i]; + + const std::string filename = std::invoke(filename_generator, + *this, + *dumped_resource, + output_image_format, + sub_res.aspect, + sub_res.level, + sub_res.layer, + before_command); + + sub_res.filename = filename; + + if (output_image_format != KFormatRaw) { - for (uint32_t layer = 0; layer < image_info->layer_count; ++layer) - { - filenames[f++] = GenerateImageDescriptorFilename(resource_info, aspect, mip, layer); + const util::imagewriter::DataFormats image_writer_format = + VkFormatToImageWriterDataFormat(dumped_image.dumped_format, sub_res.aspect); + assert(image_writer_format != util::imagewriter::DataFormats::kFormat_UNSPECIFIED); - if (!options_.dump_resources_dump_all_image_subresources) + const uint32_t texel_size = vkuFormatElementSizeWithAspect(dumped_image.dumped_format, sub_res.aspect); + const uint32_t stride = texel_size * sub_res.scaled_extent.width; + + if (output_image_format == kFormatBMP) + { + if (options_.dump_resources_dump_separate_alpha) + { + util::imagewriter::WriteBmpImageSeparateAlpha(filename, + sub_res.scaled_extent.width, + sub_res.scaled_extent.height, + static_cast(image_dumped_data[i].data()), + stride, + image_writer_format); + } + else { - break; + util::imagewriter::WriteBmpImage(filename, + sub_res.scaled_extent.width, + sub_res.scaled_extent.height, + static_cast(image_dumped_data[i].data()), + stride, + image_writer_format, + vkuFormatHasAlpha(image_info->format)); } } + else if (output_image_format == KFormatPNG) + { + if (options_.dump_resources_dump_separate_alpha) + { + util::imagewriter::WritePngImageSeparateAlpha(filename, + sub_res.scaled_extent.width, + sub_res.scaled_extent.height, + static_cast(image_dumped_data[i].data()), + stride, + image_writer_format); + } + else + { + util::imagewriter::WritePngImage(filename, + sub_res.scaled_extent.width, + sub_res.scaled_extent.height, + static_cast(image_dumped_data[i].data()), + stride, + image_writer_format, + vkuFormatHasAlpha(image_info->format)); + } + } + } + else + { + if (!options_.dump_resources_dump_raw_images) + { + GFXRECON_LOG_WARNING( + "%s format is not handled. Images with that format will be dump as a plain binary file.", + util::ToString(image_info->format).c_str()); + } + + sub_res.size = image_dumped_data[i].size(); + const size_t bytes_written = + util::bufferwriter::WriteBuffer(filename, + static_cast(image_dumped_data[i].data()), + image_dumped_data[i].size(), + compressor); + + if (!bytes_written) + { + GFXRECON_LOG_ERROR("Failed writing file %s", filename.c_str()); + return false; + } - if (!options_.dump_resources_dump_all_image_subresources) + if (compressor != nullptr) { - break; + sub_res.compressed_size = bytes_written; } } } - bool scaling_supported; - VkResult res = DumpImageToFile(image_info, - resource_info.device_info, - resource_info.device_table, - resource_info.instance_table, - *resource_info.object_info_table, - filenames, - options_.dump_resources_scale, - scaling_supported, - options_.dump_resources_image_format, - options_.dump_resources_dump_all_image_subresources, - options_.dump_resources_dump_raw_images, - options_.dump_resources_dump_separate_alpha, - image_info->intermediate_layout); - if (res != VK_SUCCESS) + return true; +} + +bool DefaultVulkanDumpResourcesDelegate::DumpImageToFile(const VulkanDelegateDumpResourceContext& delegate_context) +{ + DumpedResourceBase* dumped_resource = delegate_context.dumped_resource; + GFXRECON_ASSERT(dumped_resource != nullptr); + + DumpedImage* dumped_image; + ImageFilenameGenerator filename_generator; + + switch (dumped_resource->type) { - if (res == VK_ERROR_FEATURE_NOT_PRESENT) + case DumpResourceType::kRtv: + case DumpResourceType::kDsv: { - // Failures to dump images due to multisampling should be ok - GFXRECON_LOG_WARNING("Image could not be resolved (%s)", - util::ToString(image_info->format).c_str()) - return VK_SUCCESS; + filename_generator = &DefaultVulkanDumpResourcesDelegate::GenerateRenderTargetImageFilename; + DumpedRenderTarget* dumped_rt = static_cast(dumped_resource); + dumped_image = delegate_context.before_command ? &dumped_rt->dumped_image_before : &dumped_rt->dumped_image; } - else + break; + + case DumpResourceType::kImageDescriptor: + case DumpResourceType::kDispatchTraceRaysImage: + case DumpResourceType::kDispatchTraceRaysImageDescriptor: { - GFXRECON_LOG_ERROR("Dumping image failed (%s)", util::ToString(res).c_str()) + if (dumped_resource->type == DumpResourceType::kImageDescriptor) + { + filename_generator = &DefaultVulkanDumpResourcesDelegate::GenerateGraphicsImageDescriptorFilename; + } + else if (dumped_resource->type == DumpResourceType::kDispatchTraceRaysImage) + { + filename_generator = &DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysImageFilename; + } + else + { + filename_generator = + &DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysImageDescriptorFilename; + } + + DumpedDescriptor* dumped_desc = static_cast(dumped_resource); + dumped_image = delegate_context.before_command + ? std::get_if(&dumped_desc->dumped_resource_before) + : std::get_if(&dumped_desc->dumped_resource); + GFXRECON_ASSERT(dumped_image != nullptr); } - } + break; - // Keep track of images for which scaling failed - if (!scaling_supported) - { - images_failed_scaling_.insert(image_info); + default: + GFXRECON_LOG_ERROR("%s(): Unexpected resource type", __func__) } - return res; + const VulkanDelegateImageDumpedData& image_dumped_data = + std::get(delegate_context.dumped_data); + + return DumpImageToFile(dumped_resource, + *dumped_image, + image_dumped_data.data, + filename_generator, + delegate_context.before_command, + delegate_context.compressor); } -std::string DefaultVulkanDumpResourcesDelegate::GenerateImageDescriptorFilename( - const VulkanDumpResourceInfo& resource_info, VkImageAspectFlagBits aspect, uint32_t mip_level, uint32_t layer) const +bool DefaultVulkanDumpResourcesDelegate::DumpTLASToFile(const DumpedResourceBase& dumped_resource, + DumpedAccelerationStructure& dumped_as, + const AccelerationStructureDumpedHostData& dumped_as_data, + bool before_command, + const util::Compressor* compressor) { - const VulkanImageInfo* image_info = resource_info.image_info; - std::string aspect_str = ImageAspectToStr(aspect); - std::stringstream base_filename; - base_filename << capture_filename_ << "_"; + GFXRECON_ASSERT(dumped_as.as_info != nullptr); + GFXRECON_ASSERT(dumped_as.as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR); - const DumpedImageFormat output_image_format = GetDumpedImageFormat(resource_info.device_info, - resource_info.device_table, - resource_info.instance_table, - *resource_info.object_info_table, - image_info->format, - image_info->tiling, - image_info->type, - options_.dump_resources_image_format, - options_.dump_resources_dump_raw_images); + // Dump serialized version + if (dumped_as.serialized_buffer.size) + { + std::string filename = GenerateASDumpedBufferFilename(dumped_resource, + dumped_as.as_info->capture_id, + AccelerationStructureDumpedBufferType::kSerializedTlas, + dumped_resource.ppl_stage, + before_command); + + gfxrecon::decode::DumpBufferToFile( + dumped_as.serialized_buffer, filename, dumped_as_data.serialized_data, compressor); + } - if (output_image_format != KFormatRaw) + // Dump instance buffers + for (size_t i = 0; i < dumped_as_data.build_data.size(); ++i) { - base_filename << "image_" << image_info->capture_id << "_qs_" << resource_info.qs_index << "_bcb_" - << resource_info.bcb_index << "_rp_" << resource_info.rp << "_aspect_" << aspect_str; + GFXRECON_ASSERT(std::get_if( + &dumped_as_data.build_data[i]) == nullptr); + GFXRECON_ASSERT(std::get_if(&dumped_as_data.build_data[i]) == + nullptr); + + const auto* instance_buffer_host_data = + std::get_if(&dumped_as_data.build_data[i]); + GFXRECON_ASSERT(instance_buffer_host_data != nullptr); + + auto* instance_buffer = + std::get_if(&dumped_as.input_buffers[i]); + if (instance_buffer->instance_buffer.size) + { + std::string filename = GenerateASDumpedBufferFilename(dumped_resource, + dumped_as.as_info->capture_id, + AccelerationStructureDumpedBufferType::kInstance, + dumped_resource.ppl_stage, + before_command, + static_cast(i)); + gfxrecon::decode::DumpBufferToFile( + instance_buffer->instance_buffer, filename, instance_buffer_host_data->instance_buffer, compressor); + } } - else + + // Dump referenced BLASes + for (size_t i = 0; i < dumped_as.BLASes.size(); ++i) { - std::string whole_format_name = util::ToString(image_info->format); - std::string format_name(whole_format_name.begin() + 10, whole_format_name.end()); + if (!DumpBLASToFile( + dumped_resource, dumped_as.BLASes[i], dumped_as_data.blass_dumped_data[i], before_command, compressor)) + { + return false; + } + } - base_filename << "image_" << image_info->capture_id << "_qs_" << resource_info.qs_index << "_bcb_" - << resource_info.bcb_index << "_rp_" << resource_info.rp << "_" << format_name << "_aspect_" - << aspect_str; + if (!dumped_as.dump_build_input_buffers) + { + return true; } - std::stringstream sub_resources_str; - sub_resources_str << base_filename.str() << "_mip_" << mip_level << "_layer_" << layer; - sub_resources_str << ImageFileExtension(output_image_format); + // Dump instance buffers + for (size_t i = 0; i < dumped_as_data.build_data.size(); ++i) + { + GFXRECON_ASSERT(std::get_if( + &dumped_as_data.build_data[i]) == nullptr); + GFXRECON_ASSERT(std::get_if(&dumped_as_data.build_data[i]) == + nullptr); + } - std::filesystem::path filedirname(options_.dump_resources_output_dir); - std::filesystem::path filebasename(sub_resources_str.str()); - return (filedirname / filebasename).string(); + return true; } -VkResult DefaultVulkanDumpResourcesDelegate::DumpBufferDescriptor(const VulkanDumpResourceInfo& resource_info) +bool DefaultVulkanDumpResourcesDelegate::DumpBLASToFile(const DumpedResourceBase& dumped_resource, + DumpedAccelerationStructure& dumped_as, + const AccelerationStructureDumpedHostData& dumped_as_data, + bool before_command, + const util::Compressor* compressor) { - const std::string filename = GenerateBufferDescriptorFilename(resource_info); - return util::bufferwriter::WriteBuffer(filename, resource_info.data.data(), resource_info.data.size()) - ? VK_SUCCESS - : VK_ERROR_UNKNOWN; -} + GFXRECON_ASSERT(dumped_as.as_info != nullptr); + GFXRECON_ASSERT(dumped_as.as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR); -std::string -DefaultVulkanDumpResourcesDelegate::GenerateBufferDescriptorFilename(const VulkanDumpResourceInfo& resource_info) const -{ - std::stringstream filename; + // Dump serialized version + if (dumped_as.serialized_buffer.size) + { + std::string filename = GenerateASDumpedBufferFilename(dumped_resource, + dumped_as.as_info->capture_id, + AccelerationStructureDumpedBufferType::kSerializedBlas, + dumped_resource.ppl_stage, + before_command); + + gfxrecon::decode::DumpBufferToFile( + dumped_as.serialized_buffer, filename, dumped_as_data.serialized_data, compressor); + } - filename << capture_filename_ << "_" - << "buffer_" << resource_info.buffer_info->capture_id << "_qs_" << resource_info.qs_index << "_bcb_" - << resource_info.bcb_index << "_rp_" << resource_info.rp << ".bin"; + if (!dumped_as.dump_build_input_buffers) + { + return true; + } - std::filesystem::path filedirname(options_.dump_resources_output_dir); - std::filesystem::path filebasename(filename.str()); - return (filedirname / filebasename).string(); -} + // Build input buffers + for (size_t i = 0; i < dumped_as_data.build_data.size(); ++i) + { + GFXRECON_ASSERT( + std::get_if(&dumped_as_data.build_data[i]) == nullptr); -VkResult -DefaultVulkanDumpResourcesDelegate::DumpInlineUniformBufferDescriptor(const VulkanDumpResourceInfo& resource_info) -{ - std::string filename = GenerateInlineUniformBufferDescriptorFilename(resource_info); - return util::bufferwriter::WriteBuffer(filename, resource_info.data.data(), resource_info.data.size()) - ? VK_SUCCESS - : VK_ERROR_UNKNOWN; -} + // Triangles + if (const auto* triangles_data = + std::get_if(&dumped_as_data.build_data[i])) + { + auto* triangles = + std::get_if(&dumped_as.input_buffers[i]); + GFXRECON_ASSERT(triangles != nullptr); -std::string DefaultVulkanDumpResourcesDelegate::GenerateInlineUniformBufferDescriptorFilename( - const VulkanDumpResourceInfo& resource_info) const -{ - std::stringstream filename; - filename << capture_filename_ << "_" - << "inlineUniformBlock_set_" << resource_info.set << "_binding_" << resource_info.binding << "_qs_" - << resource_info.qs_index << "_bcb_" << resource_info.bcb_index << ".bin"; + // Vertex buffer + if (triangles->vertex_buffer.size) + { + std::string filename = GenerateASDumpedBufferFilename(dumped_resource, + dumped_as.as_info->capture_id, + AccelerationStructureDumpedBufferType::kVertex, + dumped_resource.ppl_stage, + before_command, + static_cast(i)); + gfxrecon::decode::DumpBufferToFile( + triangles->vertex_buffer, filename, triangles_data->vertex_buffer, compressor); + } - std::filesystem::path filedirname(options_.dump_resources_output_dir); - std::filesystem::path filebasename(filename.str()); - return (filedirname / filebasename).string(); -} + // Index buffer + if (triangles->index_type != VK_INDEX_TYPE_NONE_KHR && triangles->index_buffer.size) + { + std::string filename = GenerateASDumpedBufferFilename(dumped_resource, + dumped_as.as_info->capture_id, + AccelerationStructureDumpedBufferType::kIndex, + dumped_resource.ppl_stage, + before_command, + static_cast(i)); + gfxrecon::decode::DumpBufferToFile( + triangles->index_buffer, filename, triangles_data->index_buffer, compressor); + } -VkResult DefaultVulkanDumpResourcesDelegate::DumpVertexBuffer(const VulkanDumpResourceInfo& resource_info) -{ - std::string filename = GenerateVertexBufferFilename(resource_info); - return util::bufferwriter::WriteBuffer(filename, resource_info.data.data(), resource_info.data.size()) - ? VK_SUCCESS - : VK_ERROR_UNKNOWN; + // Transform buffer + if (triangles->transform_buffer.size) + { + std::string filename = GenerateASDumpedBufferFilename(dumped_resource, + dumped_as.as_info->capture_id, + AccelerationStructureDumpedBufferType::kTransform, + dumped_resource.ppl_stage, + before_command, + static_cast(i)); + gfxrecon::decode::DumpBufferToFile( + triangles->transform_buffer, filename, triangles_data->transform_buffer, compressor); + } + } + // AABBs + else if (const auto* aabb_data = + std::get_if(&dumped_as_data.build_data[i])) + { + auto* aabb = + std::get_if(&dumped_as.input_buffers[i]); + GFXRECON_ASSERT(aabb != nullptr); + + if (aabb->aabb_buffer.size) + { + std::string filename = GenerateASDumpedBufferFilename(dumped_resource, + dumped_as.as_info->capture_id, + AccelerationStructureDumpedBufferType::kAABB, + dumped_resource.ppl_stage, + before_command, + static_cast(i)); + gfxrecon::decode::DumpBufferToFile(aabb->aabb_buffer, filename, aabb_data->aabb_buffer, compressor); + } + } + } + + return true; } -std::string -DefaultVulkanDumpResourcesDelegate::GenerateVertexBufferFilename(const VulkanDumpResourceInfo& resource_info) const +bool DefaultVulkanDumpResourcesDelegate::DumpAccelerationStructureToFile( + const VulkanDelegateDumpResourceContext& delegate_context) { - std::stringstream filename; - filename << capture_filename_ << "_" + DumpedResourceBase* dumped_resource = delegate_context.dumped_resource; + GFXRECON_ASSERT(dumped_resource != nullptr); + + DumpedDescriptor* dumped_descriptor = static_cast(dumped_resource); + GFXRECON_ASSERT(dumped_descriptor != nullptr); + DumpedAccelerationStructure* dumped_as = + std::get_if(&dumped_descriptor->dumped_resource); + + GFXRECON_ASSERT(dumped_as != nullptr); + + const VulkanDelegateAccelerationStructureDumpedData& dumped_as_host_data = + std::get(delegate_context.dumped_data); + + GFXRECON_ASSERT(dumped_as_host_data.data.build_data.size() == dumped_as->input_buffers.size()); + GFXRECON_ASSERT(dumped_as->as_info != nullptr); + if (dumped_as->as_info != nullptr && dumped_as->as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR) + { + return DumpTLASToFile(*dumped_resource, + *dumped_as, + dumped_as_host_data.data, + delegate_context.before_command, + delegate_context.compressor); + } + else if (dumped_as->as_info != nullptr && + dumped_as->as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR) + { + return DumpBLASToFile(*dumped_resource, + *dumped_as, + dumped_as_host_data.data, + delegate_context.before_command, + delegate_context.compressor); + } + + return true; +} + +std::string +DefaultVulkanDumpResourcesDelegate::GenerateRenderTargetImageFilename(const DumpedResourceBase& dumped_resource, + DumpedImageFormat output_image_format, + VkImageAspectFlagBits aspect, + uint32_t mip_level, + uint32_t layer, + bool before_command) const +{ + const DumpedRenderTarget& rt_resource_info = static_cast(dumped_resource); + const VulkanImageInfo* image_info = + !before_command ? rt_resource_info.dumped_image.image_info : rt_resource_info.dumped_image_before.image_info; + std::string aspect_str = ImageAspectToStr(aspect); + std::string attachment_str = rt_resource_info.location != DEPTH_ATTACHMENT + ? "_att_" + std::to_string(rt_resource_info.location) + : "_depth_att"; + + std::stringstream filename; + filename << capture_filename_ << "_"; + + if (output_image_format != KFormatRaw) + { + if (options_.dump_resources_before) + { + filename << "draw_" << ((!before_command) ? "after_" : "before_") << rt_resource_info.cmd_index << "_qs_" + << rt_resource_info.qs_index << "_bcb_" << rt_resource_info.bcb_index << attachment_str + << "_aspect_" << aspect_str; + } + else + { + filename << "draw_" << rt_resource_info.cmd_index << "_qs_" << rt_resource_info.qs_index << "_bcb_" + << rt_resource_info.bcb_index << attachment_str << "_aspect_" << aspect_str; + } + } + else + { + if (options_.dump_resources_before) + { + filename << "draw_" << ((!before_command) ? "after_" : "before_") << rt_resource_info.cmd_index << "_qs_" + << rt_resource_info.qs_index << "_bcb_" << rt_resource_info.bcb_index << "_" + << rt_resource_info.qs_index << "_" << rt_resource_info.bcb_index << attachment_str << "_" + << util::ToString(image_info->format) << "_aspect_" << aspect_str; + } + else + { + filename << "draw_" << rt_resource_info.cmd_index << "_qs_" << rt_resource_info.qs_index << "_bcb_" + << rt_resource_info.bcb_index << attachment_str << "_" + << util::ToString(image_info->format) << "_aspect_" << aspect_str; + } + } + + std::stringstream subresource_sting; + subresource_sting << "_mip_" << mip_level << "_layer_" << layer; + subresource_sting << ImageFileExtension(output_image_format); + + std::filesystem::path filedirname(options_.dump_resources_output_dir); + std::filesystem::path filebasename(filename.str() + subresource_sting.str()); + return (filedirname / filebasename).string(); +} + +std::string +DefaultVulkanDumpResourcesDelegate::GenerateGraphicsImageDescriptorFilename(const DumpedResourceBase& dumped_resource, + DumpedImageFormat output_image_format, + VkImageAspectFlagBits aspect, + uint32_t mip_level, + uint32_t layer, + bool before_command) const +{ + GFXRECON_UNREFERENCED_PARAMETER(before_command); + + const DumpedDescriptor& image_desc_info = static_cast(dumped_resource); + const DumpedImage* dumped_image = std::get_if(&image_desc_info.dumped_resource); + GFXRECON_ASSERT(dumped_image != nullptr); + + const VulkanImageInfo* image_info = dumped_image->image_info; + std::string aspect_str = ImageAspectToStr(aspect); + std::stringstream base_filename; + base_filename << capture_filename_ << "_"; + + if (output_image_format != KFormatRaw) + { + base_filename << "image_" << image_info->capture_id << "_qs_" << image_desc_info.qs_index << "_bcb_" + << image_desc_info.bcb_index << "_rp_" << image_desc_info.render_pass << "_aspect_" << aspect_str; + } + else + { + std::string whole_format_name = util::ToString(image_info->format); + std::string format_name(whole_format_name.begin() + 10, whole_format_name.end()); + + base_filename << "image_" << image_info->capture_id << "_qs_" << image_desc_info.qs_index << "_bcb_" + << image_desc_info.bcb_index << "_rp_" << image_desc_info.render_pass << "_" << format_name + << "_aspect_" << aspect_str; + } + + std::stringstream sub_resources_str; + sub_resources_str << base_filename.str() << "_mip_" << mip_level << "_layer_" << layer; + sub_resources_str << ImageFileExtension(output_image_format); + + std::filesystem::path filedirname(options_.dump_resources_output_dir); + std::filesystem::path filebasename(sub_resources_str.str()); + return (filedirname / filebasename).string(); +} + +std::string +DefaultVulkanDumpResourcesDelegate::GenerateGraphicsBufferDescriptorFilename(const DumpedResourceBase& dumped_resource, + bool before_command) const +{ + GFXRECON_UNREFERENCED_PARAMETER(before_command); + + const DumpedDescriptor& dumped_desc = static_cast(dumped_resource); + + const DumpedBuffer* dumped_buffer = std::get_if(&dumped_desc.dumped_resource); + GFXRECON_ASSERT(dumped_buffer != nullptr); + + std::stringstream filename; + + filename << capture_filename_ << "_" + << "buffer_" << dumped_buffer->buffer_info.capture_id << "_qs_" << dumped_desc.qs_index << "_bcb_" + << dumped_desc.bcb_index << "_rp_" << dumped_desc.render_pass << "_set_" << dumped_desc.set << "_binding_" + << dumped_desc.binding << "_ai_" << dumped_desc.array_index << ".bin"; + + std::filesystem::path filedirname(options_.dump_resources_output_dir); + std::filesystem::path filebasename(filename.str()); + return (filedirname / filebasename).string(); +} + +std::string DefaultVulkanDumpResourcesDelegate::GenerateGraphicsInlineUniformBufferDescriptorFilename( + const DumpedResourceBase& dumped_resource, bool before_command) const +{ + GFXRECON_UNREFERENCED_PARAMETER(before_command); + + const DumpedDescriptor& buffer_desc_info = static_cast(dumped_resource); + + std::stringstream filename; + filename << capture_filename_ << "_" + << "inlineUniformBlock_set_" << buffer_desc_info.set << "_binding_" << buffer_desc_info.binding << "_ai_" + << buffer_desc_info.array_index << "_qs_" << buffer_desc_info.qs_index << "_bcb_" + << buffer_desc_info.bcb_index << ".bin"; + + std::filesystem::path filedirname(options_.dump_resources_output_dir); + std::filesystem::path filebasename(filename.str()); + return (filedirname / filebasename).string(); +} + +std::string DefaultVulkanDumpResourcesDelegate::GenerateVertexBufferFilename(const DumpedResourceBase& dumped_resource, + bool before_command) const +{ + GFXRECON_UNREFERENCED_PARAMETER(before_command); + + const DumpedVertexIndexBuffer& vertex_buffer = static_cast(dumped_resource); + + std::stringstream filename; + filename << capture_filename_ << "_" << "vertexBuffers_" - << "qs_" << resource_info.qs_index << "_bcb_" << resource_info.bcb_index << "_dc_" - << resource_info.cmd_index << "_binding_" << resource_info.binding << ".bin"; + << "qs_" << vertex_buffer.qs_index << "_bcb_" << vertex_buffer.bcb_index << "_dc_" + << vertex_buffer.cmd_index << "_binding_" << vertex_buffer.binding << ".bin"; + + std::filesystem::path filedirname(options_.dump_resources_output_dir); + std::filesystem::path filebasename(filename.str()); + return (filedirname / filebasename).string(); +} + +std::string DefaultVulkanDumpResourcesDelegate::GenerateIndexBufferFilename(const DumpedResourceBase& dumped_resource, + bool before_command) const +{ + GFXRECON_UNREFERENCED_PARAMETER(before_command); + + const DumpedVertexIndexBuffer& index_buffer = static_cast(dumped_resource); + + std::stringstream filename; + filename << capture_filename_ << "_"; + std::string index_type_name = IndexTypeToStr(index_buffer.index_type); + filename << "indexBuffer_" + << "qs_" << dumped_resource.qs_index << "_bcb_" << dumped_resource.bcb_index << "_dc_" + << dumped_resource.cmd_index << index_type_name << ".bin"; std::filesystem::path filedirname(options_.dump_resources_output_dir); std::filesystem::path filebasename(filename.str()); return (filedirname / filebasename).string(); } -VkResult DefaultVulkanDumpResourcesDelegate::DumpIndexBuffer(const VulkanDumpResourceInfo& resource_info) +std::string DefaultVulkanDumpResourcesDelegate::GenerateTransferToBufferRegionFilename( + const DumpedResourceBase& dumped_resource, bool before_command, uint32_t region_index) const { - std::string filename = GenerateIndexBufferFilename(resource_info); - return util::bufferwriter::WriteBuffer(filename, resource_info.data.data(), resource_info.data.size()) - ? VK_SUCCESS - : VK_ERROR_UNKNOWN; + const auto& dumped_cmd = static_cast(dumped_resource); + + std::stringstream filename; + filename << capture_filename_ << "_"; + + switch (dumped_resource.type) + { + case DumpResourceType::kInitBufferMetaCommand: + filename << "initBuffer_"; + break; + + case DumpResourceType::kCopyBuffer: + filename << "copyBuffer_"; + break; + case DumpResourceType::kCopyImageToBuffer: + filename << "copyImageToBuffer_"; + break; + default: + GFXRECON_LOG_ERROR( + "%s(): Unexpected resource type (%u)", __func__, static_cast(dumped_resource.type)) + } + + if (options_.dump_resources_before) + { + if (before_command) + { + filename << "before_"; + } + else + { + filename << "after_"; + } + } + + filename << "cmd_" << dumped_cmd.cmd_index; + if (region_index != NO_INDEX) + { + filename << "_region_index_" << region_index; + } + + filename << "_qs_" << dumped_cmd.qs_index << ".bin"; + + std::filesystem::path filedirname(options_.dump_resources_output_dir); + std::filesystem::path filebasename(filename.str()); + return (filedirname / filebasename).string(); } std::string -DefaultVulkanDumpResourcesDelegate::GenerateIndexBufferFilename(const VulkanDumpResourceInfo& resource_info) const +DefaultVulkanDumpResourcesDelegate::GenerateTransferToImageRegionFilename(const DumpedResourceBase& dumped_resource, + DumpedImageFormat output_image_format, + VkImageAspectFlagBits aspect, + uint32_t mip_level, + uint32_t layer, + bool before_command) const { std::stringstream filename; filename << capture_filename_ << "_"; - std::string index_type_name = IndexTypeToStr(resource_info.index_type); - filename << "indexBuffer_" - << "qs_" << resource_info.qs_index << "_bcb_" << resource_info.bcb_index << "_dc_" - << resource_info.cmd_index << index_type_name << ".bin"; + + switch (dumped_resource.type) + { + case DumpResourceType::kInitImageMetaCommand: + filename << "initImage_"; + break; + + case DumpResourceType::kCopyImage: + filename << "copyImage_"; + break; + + case DumpResourceType::kCopyBufferToImage: + filename << "copyBufferToImage_"; + break; + + case DumpResourceType::kBlitImage: + filename << "blitImage_"; + break; + + default: + GFXRECON_LOG_ERROR( + "%s(): Unexpected resource type (%u)", __func__, static_cast(dumped_resource.type)) + } + + if (options_.dump_resources_before) + { + if (before_command) + { + filename << "before_"; + } + else + { + filename << "after_"; + } + } + + const std::string aspect_str = ImageAspectToStr(aspect); + const auto& dumped_cmd = static_cast(dumped_resource); + + filename << "cmd_" << dumped_cmd.cmd_index << "_qs_" << dumped_cmd.qs_index << "_aspect_" << aspect_str << "_level_" + << mip_level << "_layer_" << layer; + + filename << ImageFileExtension(output_image_format); std::filesystem::path filedirname(options_.dump_resources_output_dir); std::filesystem::path filebasename(filename.str()); @@ -462,14 +988,21 @@ DefaultVulkanDumpResourcesDelegate::GenerateIndexBufferFilename(const VulkanDump } void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonDrawCallInfo( - const VulkanDumpDrawCallInfo& draw_call_info, const graphics::VulkanInstanceTable* instance_table) + const VulkanDelegateDumpDrawCallContext& draw_call_info) { + const DrawCallsDumpingContext::DrawCallParams* dc_params = + std::get(draw_call_info.command_parameters); + GFXRECON_ASSERT(dc_params != nullptr); + + const DumpedResourcesInfo& dumped_resources = dc_params->dumped_resources; + if (options_.dump_resources_json_per_command) { std::stringstream filename; filename << capture_filename_ << "_"; - filename << "DrawCall_" << draw_call_info.cmd_index << "_qs_" << draw_call_info.qs_index << "_bcb_" - << draw_call_info.bcb_index << "_dr.json"; + filename << "DrawCall_" << dumped_resources.cmd_index << "_qs_" << dumped_resources.qs_index << "_bcb_" + << dumped_resources.bcb_index << "_dr.json"; + std::filesystem::path filedirname(options_.dump_resources_output_dir); std::filesystem::path filebasename(filename.str()); std::string full_filename = (filedirname / filebasename).string(); @@ -493,71 +1026,75 @@ void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonDrawCallInfo( draw_call_entry["drawCallIndex"] = options_.dump_resources_target.draw_call_index; } - draw_call_entry["drawIndex"] = draw_call_info.cmd_index; - draw_call_entry["beginCommandBufferIndex"] = draw_call_info.bcb_index; - draw_call_entry["queueSubmitIndex"] = draw_call_info.qs_index; + draw_call_entry["drawIndex"] = dumped_resources.cmd_index; + draw_call_entry["beginCommandBufferIndex"] = dumped_resources.bcb_index; + draw_call_entry["queueSubmitIndex"] = dumped_resources.qs_index; // Write draw call params auto& dc_params_json_entry = draw_call_entry["parameters"]; - dc_params_json_entry["drawCallType"] = DrawCallsDumpingContext::DrawCallTypeToStr(draw_call_info.dc_param->type); - switch (draw_call_info.dc_param->type) + dc_params_json_entry["drawCallType"] = DrawCallsDumpingContext::DrawCallTypeToStr(dc_params->type); + switch (dc_params->type) { case DrawCallsDumpingContext::DrawCallType::kDraw: { - const VkDrawIndirectCommand& dc_params = draw_call_info.dc_param->dc_params_union.draw; + const VkDrawIndirectCommand& draw_call_parameters = dc_params->dc_params_union.draw; - dc_params_json_entry["vertexCount"] = dc_params.vertexCount; - dc_params_json_entry["instanceCount"] = dc_params.instanceCount; - dc_params_json_entry["firstVertex"] = dc_params.firstVertex; - dc_params_json_entry["firstInstance"] = dc_params.firstInstance; + dc_params_json_entry["vertexCount"] = draw_call_parameters.vertexCount; + dc_params_json_entry["instanceCount"] = draw_call_parameters.instanceCount; + dc_params_json_entry["firstVertex"] = draw_call_parameters.firstVertex; + dc_params_json_entry["firstInstance"] = draw_call_parameters.firstInstance; } break; case DrawCallsDumpingContext::DrawCallType::kDrawIndexed: { - const VkDrawIndexedIndirectCommand& dc_params = draw_call_info.dc_param->dc_params_union.draw_indexed; + const VkDrawIndexedIndirectCommand& draw_call_parameters = dc_params->dc_params_union.draw_indexed; - dc_params_json_entry["indexCount"] = dc_params.indexCount; - dc_params_json_entry["instanceCount"] = dc_params.instanceCount; - dc_params_json_entry["firstIndex"] = dc_params.firstIndex; - dc_params_json_entry["vertexOffset"] = dc_params.vertexOffset; - dc_params_json_entry["firstInstance"] = dc_params.firstInstance; + dc_params_json_entry["indexCount"] = draw_call_parameters.indexCount; + dc_params_json_entry["instanceCount"] = draw_call_parameters.instanceCount; + dc_params_json_entry["firstIndex"] = draw_call_parameters.firstIndex; + dc_params_json_entry["vertexOffset"] = draw_call_parameters.vertexOffset; + dc_params_json_entry["firstInstance"] = draw_call_parameters.firstInstance; } break; case DrawCallsDumpingContext::DrawCallType::kDrawIndirect: { - const auto& dc_params = draw_call_info.dc_param->dc_params_union.draw_indirect; + const auto& draw_call_parameters = dc_params->dc_params_union.draw_indirect; - assert((dc_params.draw_count && dc_params.draw_params != nullptr) || !dc_params.draw_count); + assert((draw_call_parameters.draw_count && draw_call_parameters.draw_params != nullptr) || + !draw_call_parameters.draw_count); - dc_params_json_entry["drawCount"] = dc_params.draw_count; + dc_params_json_entry["drawCount"] = draw_call_parameters.draw_count; auto& indirect_param_entries = dc_params_json_entry["indirectParams"]; - for (uint32_t di = 0; di < dc_params.draw_count; ++di) + for (uint32_t di = 0; di < draw_call_parameters.draw_count; ++di) { - indirect_param_entries[di]["vertexCount"] = dc_params.draw_params[di].vertexCount; - indirect_param_entries[di]["instanceCount"] = dc_params.draw_params[di].instanceCount; - indirect_param_entries[di]["firstVertex"] = dc_params.draw_params[di].firstVertex; - indirect_param_entries[di]["firstInstance"] = dc_params.draw_params[di].firstInstance; + indirect_param_entries[di]["vertexCount"] = draw_call_parameters.draw_params[di].vertexCount; + indirect_param_entries[di]["instanceCount"] = draw_call_parameters.draw_params[di].instanceCount; + indirect_param_entries[di]["firstVertex"] = draw_call_parameters.draw_params[di].firstVertex; + indirect_param_entries[di]["firstInstance"] = draw_call_parameters.draw_params[di].firstInstance; } } break; case DrawCallsDumpingContext::DrawCallType::kDrawIndexedIndirect: { - const auto& dc_params = draw_call_info.dc_param->dc_params_union.draw_indirect; + const auto& draw_call_parameters = dc_params->dc_params_union.draw_indirect; - assert((dc_params.draw_count && dc_params.draw_indexed_params != nullptr) || !dc_params.draw_count); + assert((draw_call_parameters.draw_count && draw_call_parameters.draw_indexed_params != nullptr) || + !draw_call_parameters.draw_count); - dc_params_json_entry["drawCount"] = dc_params.draw_count; + dc_params_json_entry["drawCount"] = draw_call_parameters.draw_count; auto& indirect_param_entries = dc_params_json_entry["indirectParams"]; - for (uint32_t di = 0; di < dc_params.draw_count; ++di) + for (uint32_t di = 0; di < draw_call_parameters.draw_count; ++di) { - indirect_param_entries[di]["indexCount"] = dc_params.draw_indexed_params[di].indexCount; - indirect_param_entries[di]["instanceCount"] = dc_params.draw_indexed_params[di].instanceCount; - indirect_param_entries[di]["firstIndex"] = dc_params.draw_indexed_params[di].firstIndex; - indirect_param_entries[di]["vertexOffset"] = dc_params.draw_indexed_params[di].vertexOffset; - indirect_param_entries[di]["firstInstance"] = dc_params.draw_indexed_params[di].firstInstance; + indirect_param_entries[di]["indexCount"] = draw_call_parameters.draw_indexed_params[di].indexCount; + indirect_param_entries[di]["instanceCount"] = + draw_call_parameters.draw_indexed_params[di].instanceCount; + indirect_param_entries[di]["firstIndex"] = draw_call_parameters.draw_indexed_params[di].firstIndex; + indirect_param_entries[di]["vertexOffset"] = draw_call_parameters.draw_indexed_params[di].vertexOffset; + indirect_param_entries[di]["firstInstance"] = + draw_call_parameters.draw_indexed_params[di].firstInstance; } } break; @@ -566,18 +1103,18 @@ void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonDrawCallInfo( case DrawCallsDumpingContext::DrawCallType::kDrawIndirectCountKHR: case DrawCallsDumpingContext::DrawCallType::kDrawIndirectCountAMD: { - const auto& dc_params = draw_call_info.dc_param->dc_params_union.draw_indirect_count; + const auto& draw_call_parameters = dc_params->dc_params_union.draw_indirect_count; - dc_params_json_entry["maxDrawCount"] = dc_params.max_draw_count; - dc_params_json_entry["actualDrawCount"] = dc_params.actual_draw_count; + dc_params_json_entry["maxDrawCount"] = draw_call_parameters.max_draw_count; + dc_params_json_entry["actualDrawCount"] = draw_call_parameters.actual_draw_count; auto& indirect_param_entries = dc_params_json_entry["indirectParams"]; - for (uint32_t di = 0; di < dc_params.actual_draw_count; ++di) + for (uint32_t di = 0; di < draw_call_parameters.actual_draw_count; ++di) { - indirect_param_entries[di]["vertexCount"] = dc_params.draw_params[di].vertexCount; - indirect_param_entries[di]["instanceCount"] = dc_params.draw_params[di].instanceCount; - indirect_param_entries[di]["firstVertex"] = dc_params.draw_params[di].firstVertex; - indirect_param_entries[di]["firstInstance"] = dc_params.draw_params[di].firstInstance; + indirect_param_entries[di]["vertexCount"] = draw_call_parameters.draw_params[di].vertexCount; + indirect_param_entries[di]["instanceCount"] = draw_call_parameters.draw_params[di].instanceCount; + indirect_param_entries[di]["firstVertex"] = draw_call_parameters.draw_params[di].firstVertex; + indirect_param_entries[di]["firstInstance"] = draw_call_parameters.draw_params[di].firstInstance; } } break; @@ -586,19 +1123,21 @@ void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonDrawCallInfo( case DrawCallsDumpingContext::DrawCallType::kDrawIndexedIndirectCountKHR: case DrawCallsDumpingContext::DrawCallType::kDrawIndexedIndirectCountAMD: { - const auto& dc_params = draw_call_info.dc_param->dc_params_union.draw_indirect_count; + const auto& draw_call_parameters = dc_params->dc_params_union.draw_indirect_count; - dc_params_json_entry["maxDrawCount"] = dc_params.max_draw_count; - dc_params_json_entry["actualDrawCount"] = dc_params.actual_draw_count; + dc_params_json_entry["maxDrawCount"] = draw_call_parameters.max_draw_count; + dc_params_json_entry["actualDrawCount"] = draw_call_parameters.actual_draw_count; auto& indirect_param_entries = dc_params_json_entry["indirectParams"]; - for (uint32_t di = 0; di < dc_params.actual_draw_count; ++di) + for (uint32_t di = 0; di < draw_call_parameters.actual_draw_count; ++di) { - indirect_param_entries[di]["indexCount"] = dc_params.draw_indexed_params[di].indexCount; - indirect_param_entries[di]["instanceCount"] = dc_params.draw_indexed_params[di].instanceCount; - indirect_param_entries[di]["firstIndex"] = dc_params.draw_indexed_params[di].firstIndex; - indirect_param_entries[di]["vertexOffset"] = dc_params.draw_indexed_params[di].vertexOffset; - indirect_param_entries[di]["firstInstance"] = dc_params.draw_indexed_params[di].firstInstance; + indirect_param_entries[di]["indexCount"] = draw_call_parameters.draw_indexed_params[di].indexCount; + indirect_param_entries[di]["instanceCount"] = + draw_call_parameters.draw_indexed_params[di].instanceCount; + indirect_param_entries[di]["firstIndex"] = draw_call_parameters.draw_indexed_params[di].firstIndex; + indirect_param_entries[di]["vertexOffset"] = draw_call_parameters.draw_indexed_params[di].vertexOffset; + indirect_param_entries[di]["firstInstance"] = + draw_call_parameters.draw_indexed_params[di].firstInstance; } } break; @@ -607,204 +1146,87 @@ void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonDrawCallInfo( assert(0); } - VulkanDumpResourceInfo res_info_base{}; - res_info_base = draw_call_info; - - // Write color attachment info - if (draw_call_info.render_targets != nullptr && !draw_call_info.render_targets->color_att_imgs.empty()) - { - auto& rt_entries = draw_call_entry["colorAttachments"]; - - size_t rt_json_entries = 0; - for (size_t i = 0; i < draw_call_info.render_targets->color_att_imgs.size(); ++i) - { - if (options_.dump_resources_color_attachment_index != kUnspecifiedColorAttachment && - static_cast(options_.dump_resources_color_attachment_index) != i) - { - continue; - } - - const VulkanImageInfo* image_info = draw_call_info.render_targets->color_att_imgs[i]; - assert(image_info != nullptr); - - if (!IsImageDumpable(instance_table, image_info)) - { - continue; - } - - std::vector aspects; - GetFormatAspects(image_info->format, aspects); - - auto& rt_entry = rt_entries[rt_json_entries++]; - rt_entry["imageId"] = image_info->capture_id; - rt_entry["format"] = util::ToString(image_info->format); - rt_entry["imageType"] = util::ToString(image_info->type); - - if (ImageFailedScaling(image_info)) - { - rt_entry["scaleFailed"] = true; - } - - size_t subresource_entry = 0; - for (auto aspect : aspects) - { - for (uint32_t mip = 0; mip < image_info->level_count; ++mip) - { - for (uint32_t layer = 0; layer < image_info->layer_count; ++layer) - { - std::string filenameBefore; - if (options_.dump_resources_before) - { - VulkanDumpResourceInfo res_info_before = res_info_base; - res_info_before.type = DumpResourceType::kRtv; - res_info_before.image_info = image_info; - res_info_before.attachment_index = i; - res_info_before.before_cmd = true; - filenameBefore = GenerateRenderTargetImageFilename(res_info_before, aspect, mip, layer); - } - - VulkanDumpResourceInfo res_info_after = res_info_base; - res_info_after.type = DumpResourceType::kRtv; - res_info_after.image_info = image_info; - res_info_after.attachment_index = i; - res_info_after.before_cmd = false; - std::string filenameAfter = - GenerateRenderTargetImageFilename(res_info_after, aspect, mip, layer); - - const VkExtent3D extent = { std::max(1u, image_info->extent.width >> mip), - std::max(1u, image_info->extent.height >> mip), - image_info->extent.depth }; - - auto& subresource_json_entry = rt_entry["subresources"]; - dump_json_.InsertImageSubresourceInfo(subresource_json_entry[subresource_entry++], - image_info->format, - image_info->type, - image_info->capture_id, - extent, - filenameAfter, - aspect, - mip, - layer, - options_.dump_resources_dump_separate_alpha, - options_.dump_resources_before ? &filenameBefore - : nullptr); - - // Skip rest of layers - if (!options_.dump_resources_dump_all_image_subresources) - { - break; - } - } - - // Skip rest of mip map levels - if (!options_.dump_resources_dump_all_image_subresources) - { - break; - } - } - } - } - } - - // Write depth attachment info - if (options_.dump_resources_dump_depth && draw_call_info.render_targets != nullptr && - draw_call_info.render_targets->depth_att_img != nullptr && - IsImageDumpable(instance_table, draw_call_info.render_targets->depth_att_img)) + size_t rt_json_entries = 0; + for (const auto& rt : dumped_resources.dumped_render_targets) { - auto& depth_entry = draw_call_entry["depthAttachment"]; - - const VulkanImageInfo* image_info = draw_call_info.render_targets->depth_att_img; + const bool is_depth_attachment = rt.location == DEPTH_ATTACHMENT; + auto& rt_entries = + !is_depth_attachment ? draw_call_entry["colorAttachments"] : draw_call_entry["depthAttachment"]; + auto& rt_entry = !is_depth_attachment ? rt_entries[rt_json_entries++] : rt_entries; - std::vector aspects; - GetFormatAspects(image_info->format, aspects); + const DumpedImage& image = rt.dumped_image; + const VulkanImageInfo* image_info = image.image_info; + GFXRECON_ASSERT(image_info != nullptr); - auto& rt_entry = depth_entry; rt_entry["imageId"] = image_info->capture_id; rt_entry["format"] = util::ToString(image_info->format); rt_entry["imageType"] = util::ToString(image_info->type); + rt_entry["levels"] = image_info->level_count; + rt_entry["layers"] = image_info->layer_count; + if (!is_depth_attachment) + { + rt_entry["location"] = rt.location; + } - if (ImageFailedScaling(image_info)) + if (image.scaling_failed) { rt_entry["scaleFailed"] = true; } - size_t subresource_entry = 0; - for (auto aspect : aspects) + if (image.can_dump == ImageDumpResult::kCanDump) { - for (uint32_t mip = 0; mip < image_info->level_count; ++mip) + for (size_t sr = 0; sr < image.dumped_subresources.size(); ++sr) { - for (uint32_t layer = 0; layer < image_info->layer_count; ++layer) - { - std::string filenameBefore; - if (options_.dump_resources_before) - { - VulkanDumpResourceInfo res_info_before = res_info_base; - res_info_before.type = DumpResourceType::kDsv; - res_info_before.image_info = image_info; - res_info_before.attachment_index = DEPTH_ATTACHMENT; - res_info_before.before_cmd = true; - filenameBefore = GenerateRenderTargetImageFilename(res_info_before, aspect, mip, layer); - } - - VulkanDumpResourceInfo res_info_after = res_info_base; - res_info_after.type = DumpResourceType::kDsv; - res_info_after.image_info = image_info; - res_info_after.attachment_index = DEPTH_ATTACHMENT; - res_info_after.before_cmd = false; - std::string filenameAfter = GenerateRenderTargetImageFilename(res_info_after, aspect, mip, layer); - - const VkExtent3D extent = { std::max(1u, image_info->extent.width >> mip), - std::max(1u, image_info->extent.height >> mip), - image_info->extent.depth }; - - auto& subresource_json_entry = rt_entry["subresources"]; - dump_json_.InsertImageSubresourceInfo(subresource_json_entry[subresource_entry++], - image_info->format, - image_info->type, - image_info->capture_id, - extent, - filenameAfter, - aspect, - mip, - layer, - options_.dump_resources_dump_separate_alpha, - options_.dump_resources_before ? &filenameBefore : nullptr); - - // Skip rest of layers - if (!options_.dump_resources_dump_all_image_subresources) - { - break; - } - } - - // Skip rest of mip map levels - if (!options_.dump_resources_dump_all_image_subresources) + const DumpedImage::DumpedImageSubresource& dumped_image_sub_resource = image.dumped_subresources[sr]; + auto& subresource_json_entry = rt_entry["subresources"]; + dump_json_.InsertImageSubresourceInfo(subresource_json_entry[sr], + dumped_image_sub_resource, + image_info->format, + options_.dump_resources_dump_separate_alpha, + image.dumped_raw); + + if (options_.dump_resources_before) { - break; + const DumpedImage::DumpedImageSubresource& dumped_image_before_sub_resource = + rt.dumped_image_before.dumped_subresources[sr]; + dump_json_.InsertBeforeImageSubresourceInfo(subresource_json_entry[sr], + dumped_image_before_sub_resource, + image_info->format, + options_.dump_resources_dump_separate_alpha, + image.dumped_raw); } } } + else + { + if (image.can_dump == ImageDumpResult::kCanNotResolve) + { + rt_entry["dumpFailure"] = "CouldNotResolve"; + } + else if (image.can_dump == ImageDumpResult::kFormatNotSupported) + { + rt_entry["dumpFailure"] = "FormatNotSupported"; + } + } } - // Emit in json output the references to vertex and index buffers dumped files if (options_.dump_resources_dump_vertex_index_buffer) { // Emmit vertex bindings info - if (!draw_call_info.dc_param->vertex_input_state.vertex_input_binding_map.empty()) + if (!dc_params->vertex_input_state.vertex_input_binding_map.empty()) { auto& vertex_input_state_json_entry = draw_call_entry["vertexInputState"]; auto& bindings_json_entry = vertex_input_state_json_entry["bindings"]; uint32_t i = 0; - for (const auto& [binding_index, vb_binding] : - draw_call_info.dc_param->vertex_input_state.vertex_input_binding_map) + for (const auto& [binding_index, vb_binding] : dc_params->vertex_input_state.vertex_input_binding_map) { bindings_json_entry[i]["binding"] = binding_index; bindings_json_entry[i]["stride"] = vb_binding.stride; bindings_json_entry[i]["inputRate"] = util::ToString(vb_binding.inputRate); if (!options_.dump_resources_dump_unused_vertex_bindings && - !draw_call_info.dc_param->vertex_input_state.IsVertexBindingReferenced(binding_index)) + !dc_params->vertex_input_state.IsVertexBindingReferenced(binding_index)) { bindings_json_entry[i]["unused"] = true; } @@ -814,12 +1236,12 @@ void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonDrawCallInfo( } // Emmit vertex attributes info - if (!draw_call_info.dc_param->vertex_input_state.vertex_input_attribute_map.empty()) + if (!dc_params->vertex_input_state.vertex_input_attribute_map.empty()) { auto& vertex_input_state_json_entry = draw_call_entry["vertexInputState"]; auto& attributes_json_entry = vertex_input_state_json_entry["attributes"]; uint32_t i = 0; - for (const auto& vb_attribute : draw_call_info.dc_param->vertex_input_state.vertex_input_attribute_map) + for (const auto& vb_attribute : dc_params->vertex_input_state.vertex_input_attribute_map) { attributes_json_entry[i]["location"] = vb_attribute.first; attributes_json_entry[i]["binding"] = vb_attribute.second.binding; @@ -828,1036 +1250,1388 @@ void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonDrawCallInfo( ++i; } } + } - // Emmit bound index buffer info - if (DrawCallsDumpingContext::IsDrawCallIndexed(draw_call_info.dc_param->type)) + if (options_.dump_resources_dump_vertex_index_buffer) + { + size_t vertex_buffer_entries = 0; + for (const auto& vib : dumped_resources.dumped_vertex_index_buffers) { - if (draw_call_info.dc_param->json_output_info.index_buffer_info.dumped && - draw_call_info.dc_param->referenced_index_buffer.buffer_info != nullptr) + if (vib.index_type != VK_INDEX_TYPE_NONE_KHR) { - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kIndex; - res_info.index_type = draw_call_info.dc_param->referenced_index_buffer.index_type; - const std::string index_buffer_filename = GenerateIndexBufferFilename(res_info); - auto& vertex_input_state_json_entry = draw_call_entry["vertexInputState"]; auto& json_entry = vertex_input_state_json_entry["indexBuffer"]; - json_entry["bufferId"] = draw_call_info.dc_param->referenced_index_buffer.buffer_info->capture_id; - json_entry["file"] = index_buffer_filename; - json_entry["offset"] = draw_call_info.dc_param->json_output_info.index_buffer_info.offset; - json_entry["indexType"] = - util::ToString(draw_call_info.dc_param->referenced_index_buffer.index_type); + json_entry["indexType"] = util::ToString(vib.index_type); + dump_json_.InsertBufferInfo(json_entry, vib.buffer); } - } - - // Emmit bound vertex buffers info - if (!draw_call_info.dc_param->referenced_vertex_buffers.bound_vertex_buffer_per_binding.empty() && - !draw_call_info.dc_param->vertex_input_state.vertex_input_binding_map.empty()) - { - uint32_t i = 0; - for (const auto& vb_binding : draw_call_info.dc_param->vertex_input_state.vertex_input_binding_map) + else { - const auto json_info_entry = - draw_call_info.dc_param->json_output_info.vertex_bindings_info.find(vb_binding.first); - const bool buffer_dumped = - json_info_entry != draw_call_info.dc_param->json_output_info.vertex_bindings_info.end(); - if (buffer_dumped) - { - auto& vertex_input_state_json_entry = draw_call_entry["vertexInputState"]; - auto& json_entry = vertex_input_state_json_entry["vertexBuffers"]; - - const auto& vb_binding_buffer = - draw_call_info.dc_param->referenced_vertex_buffers.bound_vertex_buffer_per_binding.find( - vb_binding.first); - assert(vb_binding_buffer != - draw_call_info.dc_param->referenced_vertex_buffers.bound_vertex_buffer_per_binding.end()); - GFXRECON_ASSERT(vb_binding_buffer->second.buffer_info != nullptr) - - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kVertex; - res_info.binding = vb_binding.first; - const std::string vb_filename = GenerateVertexBufferFilename(res_info); - - json_entry[i]["bufferId"] = vb_binding_buffer->second.buffer_info->capture_id; - json_entry[i]["vertexBufferBinding"] = vb_binding.first; - json_entry[i]["file"] = vb_filename; - json_entry[i]["offset"] = json_info_entry->second.offset; - ++i; - } + auto& vertex_input_state_json_entry = draw_call_entry["vertexInputState"]; + auto& json_entry = vertex_input_state_json_entry["vertexBuffers"][vertex_buffer_entries++]; + + json_entry["vertexBufferBinding"] = vib.binding; + dump_json_.InsertBufferInfo(json_entry, vib.buffer); } } } - // Emit in json output the references to dumped immutable descriptors - if (options_.dump_resources_dump_immutable_resources) + if (options_.dump_all_descriptors) { - std::unordered_map per_stage_json_entry_indices; - for (const auto& desc_set : draw_call_info.dc_param->referenced_descriptors) - { - const uint32_t desc_set_index = desc_set.first; - for (const auto& desc : desc_set.second) - { - const uint32_t desc_set_binding_index = desc.first; + GenerateDescriptorsJsonInfo(draw_call_entry, dumped_resources); + } - std::vector shader_stages_names; - ShaderStageFlagsToStageNames(desc.second.stage_flags, shader_stages_names); - for (const std::string& stage_name : shader_stages_names) - { - switch (desc.second.desc_type) - { - case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: - case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: - case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: - case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: - { - for (const auto& img_desc : desc.second.image_info) - { - if (img_desc.second.image_view_info == nullptr) - { - continue; - } - - const VulkanImageInfo* image_info = draw_call_info.object_info_table->GetVkImageInfo( - img_desc.second.image_view_info->image_id); - if (image_info == nullptr || !IsImageDumpable(instance_table, image_info)) - { - continue; - } - - uint32_t& stage_entry_index = per_stage_json_entry_indices[stage_name]; - auto& desc_json_entry = draw_call_entry["descriptors"][stage_name][stage_entry_index++]; - desc_json_entry["type"] = util::ToString(desc.second.desc_type); - desc_json_entry["set"] = desc_set_index; - desc_json_entry["binding"] = desc_set_binding_index; - desc_json_entry["arrayIndex"] = img_desc.first; - desc_json_entry["imageId"] = image_info->capture_id; - desc_json_entry["format"] = util::ToString(image_info->format); - desc_json_entry["imageType"] = util::ToString(image_info->type); - - if (ImageFailedScaling(image_info)) - { - desc_json_entry["scaleFailed"] = true; - } - - std::vector aspects; - GetFormatAspects(image_info->format, aspects); - - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kImageDescriptor; - res_info.image_info = image_info; - - size_t subresource_entry = 0; - for (auto aspect : aspects) - { - for (uint32_t mip = 0; mip < image_info->level_count; ++mip) - { - for (uint32_t layer = 0; layer < image_info->layer_count; ++layer) - { - std::string filename = - GenerateImageDescriptorFilename(res_info, aspect, mip, layer); - const VkExtent3D extent = { std::max(1u, image_info->extent.width >> mip), - std::max(1u, image_info->extent.height >> mip), - image_info->extent.depth }; - - auto& subresource_json_entry = desc_json_entry["subresources"]; - dump_json_.InsertImageSubresourceInfo( - subresource_json_entry[subresource_entry++], - image_info->format, - image_info->type, - image_info->capture_id, - extent, - filename, - aspect, - mip, - layer, - options_.dump_resources_dump_separate_alpha); - - if (!options_.dump_resources_dump_all_image_subresources) - { - break; - } - } - - if (!options_.dump_resources_dump_all_image_subresources) - { - break; - } - } - } - } - } - break; + if (options_.dump_resources_json_per_command) + { + dump_json_.BlockEnd(); + dump_json_.Close(); + } +} - case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: - case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: - { - for (const auto& buf_desc : desc.second.texel_buffer_view_info) - { - const VulkanBufferInfo* buf_info = - object_info_table_.GetVkBufferInfo(buf_desc.second->buffer_id); - if (buf_info != nullptr) - { - uint32_t& stage_entry_index = per_stage_json_entry_indices[stage_name]; - auto& desc_json_entry = - draw_call_entry["descriptors"][stage_name][stage_entry_index++]; - desc_json_entry["type"] = util::ToString(desc.second.desc_type); - desc_json_entry["set"] = desc_set_index; - desc_json_entry["binding"] = desc_set_binding_index; - desc_json_entry["arrayIndex"] = buf_desc.first; - desc_json_entry["bufferId"] = buf_desc.second->buffer_id; - - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kBufferDescriptor; - res_info.buffer_info = buf_info; - - desc_json_entry["file"] = GenerateBufferDescriptorFilename(res_info); - } - } - } - break; +std::string +DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysImageFilename(const DumpedResourceBase& dumped_resource, + DumpedImageFormat output_image_format, + VkImageAspectFlagBits aspect, + uint32_t mip_level, + uint32_t layer, + bool before_command) const +{ + const DumpedDescriptor& dumped_image_desc = static_cast(dumped_resource); + const DumpedImage* dumped_image = std::get_if(&dumped_image_desc.dumped_resource); + GFXRECON_ASSERT(dumped_image != nullptr); - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: - { - for (const auto& buf_desc : desc.second.buffer_info) - { - const VulkanBufferInfo* buf_info = buf_desc.second.buffer_info; - if (buf_info != nullptr) - { - uint32_t& stage_entry_index = per_stage_json_entry_indices[stage_name]; - auto& desc_json_entry = - draw_call_entry["descriptors"][stage_name][stage_entry_index++]; - desc_json_entry["type"] = util::ToString(desc.second.desc_type); - desc_json_entry["set"] = desc_set_index; - desc_json_entry["binding"] = desc_set_binding_index; - desc_json_entry["arrayIndex"] = buf_desc.first; - desc_json_entry["bufferId"] = buf_desc.second.buffer_info->capture_id; - - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kBufferDescriptor; - res_info.buffer_info = buf_info; - - desc_json_entry["file"] = GenerateBufferDescriptorFilename(res_info); - } - } - } - break; + const VulkanImageInfo* image_info = dumped_image->image_info; + GFXRECON_ASSERT(image_info != nullptr); - case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK: - { - uint32_t& stage_entry_index = per_stage_json_entry_indices[stage_name]; - auto& desc_json_entry = draw_call_entry["descriptors"][stage_name][stage_entry_index++]; - desc_json_entry["type"] = util::ToString(desc.second.desc_type); - desc_json_entry["set"] = desc_set_index; - desc_json_entry["binding"] = desc_set_binding_index; - desc_json_entry["size"] = desc.second.inline_uniform_block.size(); - - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kInlineUniformBufferDescriptor; - res_info.set = desc_set_index; - res_info.binding = desc_set_binding_index; - desc_json_entry["file"] = GenerateInlineUniformBufferDescriptorFilename(res_info); - } - break; + GFXRECON_ASSERT(dumped_image_desc.ppl_stage == DumpResourcesPipelineStage::kCompute || + dumped_image_desc.ppl_stage == DumpResourcesPipelineStage::kRayTracing); + const bool is_dispatch = dumped_image_desc.ppl_stage == DumpResourcesPipelineStage::kCompute; - default: - break; - } - } - } + const std::string aspect_str = ImageAspectToStr(aspect); + + std::stringstream filename; + filename << capture_filename_ << '_'; + + if (before_command) + { + filename << (is_dispatch ? "dispatch_" : "traceRays_") << dumped_image_desc.cmd_index << "_qs_" + << dumped_image_desc.qs_index << "_bcb_" << dumped_image_desc.bcb_index << "_before_" + << "set_" << dumped_image_desc.set << "_binding_" << dumped_image_desc.binding << "_index_" + << dumped_image_desc.array_index; + if (output_image_format != KFormatRaw) + { + filename << "_" << util::ToString(image_info->format).c_str(); } + filename << "_aspect_" << aspect_str; + } + else + { + filename << (is_dispatch ? "dispatch_" : "traceRays_") << dumped_image_desc.cmd_index << "_qs_" + << dumped_image_desc.qs_index << "_bcb_" << dumped_image_desc.bcb_index << "_" + << (options_.dump_resources_before ? "after_" : "") << "set_" << dumped_image_desc.set << "_binding_" + << dumped_image_desc.binding << "_index_" << dumped_image_desc.array_index; + if (output_image_format != KFormatRaw) + { + filename << "_" << util::ToString(image_info->format).c_str(); + } + filename << "_aspect_" << aspect_str; } - if (options_.dump_resources_json_per_command) + filename << "_mip_" << mip_level << "_layer_" << layer; + + filename << ImageFileExtension(output_image_format); + + std::filesystem::path filedirname(options_.dump_resources_output_dir); + std::filesystem::path filebasename(filename.str()); + return (filedirname / filebasename).string(); +} + +std::string +DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysBufferFilename(const DumpedResourceBase& dumped_resource, + bool before_command) const +{ + GFXRECON_UNREFERENCED_PARAMETER(before_command); + + const DumpedDescriptor& dumped_buffer_desc = static_cast(dumped_resource); + const DumpedBuffer* dumped_buffer = std::get_if(&dumped_buffer_desc.dumped_resource); + GFXRECON_ASSERT(dumped_buffer != nullptr); + + GFXRECON_ASSERT(dumped_buffer_desc.ppl_stage == DumpResourcesPipelineStage::kCompute || + dumped_buffer_desc.ppl_stage == DumpResourcesPipelineStage::kRayTracing); + const bool is_dispatch = dumped_buffer_desc.ppl_stage == DumpResourcesPipelineStage::kCompute; + + std::stringstream filename; + + filename << capture_filename_ << '_'; + + if (before_command) { - dump_json_.BlockEnd(); - dump_json_.Close(); + filename << (is_dispatch ? "dispatch_" : "traceRays_") << dumped_buffer_desc.cmd_index << "_qs_" + << dumped_buffer_desc.qs_index << "_bcb_" << dumped_buffer_desc.bcb_index << "_before_" + << "set_" << dumped_buffer_desc.set << "_binding_" << dumped_buffer_desc.binding << "_index_" + << dumped_buffer_desc.array_index << "_buffer.bin"; } + else + { + filename << (is_dispatch ? "dispatch_" : "traceRays_") << dumped_buffer_desc.cmd_index << "_qs_" + << dumped_buffer_desc.qs_index << "_bcb_" << dumped_buffer_desc.bcb_index << "_" + << (options_.dump_resources_before ? "after_" : "") << "set_" << dumped_buffer_desc.set << "_binding_" + << dumped_buffer_desc.binding << "_index_" << dumped_buffer_desc.array_index << "_buffer.bin"; + } + + std::filesystem::path filedirname(options_.dump_resources_output_dir); + std::filesystem::path filebasename(filename.str()); + return (filedirname / filebasename).string(); } -VkResult DefaultVulkanDumpResourcesDelegate::DumpeDispatchTraceRaysImage(const VulkanDumpResourceInfo& resource_info) +std::string DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysImageDescriptorFilename( + const DumpedResourceBase& dumped_resource, + DumpedImageFormat output_image_format, + VkImageAspectFlagBits aspect, + uint32_t mip_level, + uint32_t layer, + bool before_command) const { - const VulkanImageInfo* image_info = resource_info.image_info; + GFXRECON_UNREFERENCED_PARAMETER(before_command); + + const DumpedDescriptor& image_desc_info = static_cast(dumped_resource); + + const DumpedImage* dumped_image = std::get_if(&image_desc_info.dumped_resource); + GFXRECON_ASSERT(dumped_image != nullptr); - std::vector aspects; - GetFormatAspects(image_info->format, aspects); + const VulkanImageInfo* image_info = dumped_image->image_info; - const size_t total_files = options_.dump_resources_dump_all_image_subresources - ? (aspects.size() * image_info->layer_count * image_info->level_count) - : aspects.size(); + std::string aspect_str = ImageAspectToStr(aspect); + std::stringstream base_filename; - std::vector filenames(total_files); - size_t f = 0; - for (auto aspect : aspects) + base_filename << capture_filename_ << '_'; + + if (output_image_format != KFormatRaw) { - for (uint32_t mip = 0; mip < image_info->level_count; ++mip) + base_filename << "image_" << image_info->capture_id << "_qs_" << image_desc_info.qs_index << "_bcb_" + << image_desc_info.bcb_index << "_aspect_" << aspect_str; + } + else + { + std::string format_name = FormatToStr(image_info->format); + base_filename << "image_" << image_info->capture_id << "_qs_" << image_desc_info.qs_index << "_bcb_" + << image_desc_info.bcb_index << "_" << format_name << "_aspect_" << aspect_str; + } + + std::stringstream sub_resources_str; + sub_resources_str << base_filename.str() << "_mip_" << mip_level << "_layer_" << layer; + sub_resources_str << ImageFileExtension(output_image_format); + std::filesystem::path filedirname(options_.dump_resources_output_dir); + std::filesystem::path filebasename(sub_resources_str.str()); + return (filedirname / filebasename).string(); +} + +std::string DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysBufferDescriptorFilename( + const DumpedResourceBase& dumped_resource, bool before_command) const +{ + GFXRECON_UNREFERENCED_PARAMETER(before_command); + + const DumpedDescriptor& buffer_desc_info = static_cast(dumped_resource); + const DumpedBuffer* dumped_buffer = std::get_if(&buffer_desc_info.dumped_resource); + GFXRECON_ASSERT(dumped_buffer != nullptr); + + std::stringstream filename; + filename << capture_filename_ << "_buffer_" << dumped_buffer->buffer_info.capture_id << "_set_" + << buffer_desc_info.set << "_binding_" << buffer_desc_info.binding << "_ai_" + << buffer_desc_info.array_index << "_qs_" << buffer_desc_info.qs_index << "_bcb_" + << buffer_desc_info.bcb_index << ".bin"; + + std::filesystem::path filedirname(options_.dump_resources_output_dir); + std::filesystem::path filebasename(filename.str()); + return (filedirname / filebasename).string(); +} + +std::string DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysInlineUniformBufferDescriptorFilename( + const DumpedResourceBase& dumped_resource, bool before_command) const +{ + GFXRECON_UNREFERENCED_PARAMETER(before_command); + + const DumpedDescriptor& buffer_desc_info = static_cast(dumped_resource); + + std::stringstream filename; + filename << capture_filename_ << '_' << "inlineUniformBlock_set_" << buffer_desc_info.set << "_binding_" + << buffer_desc_info.binding << "_ai_" << buffer_desc_info.array_index << "_qs_" + << buffer_desc_info.qs_index << "_bcb_" << buffer_desc_info.bcb_index << ".bin"; + + std::filesystem::path filedirname(options_.dump_resources_output_dir); + std::filesystem::path filebasename(filename.str()); + return (filedirname / filebasename).string(); +} + +void DefaultVulkanDumpResourcesDelegate::GenerateBLASJsonInfo(nlohmann::ordered_json& blas_json_entry, + const DumpedAccelerationStructure& dumped_as) +{ + GFXRECON_ASSERT(dumped_as.as_info != nullptr); + GFXRECON_ASSERT(dumped_as.as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR); + + GFXRECON_ASSERT(dumped_as.as_info != nullptr); + blas_json_entry["BlasId"] = dumped_as.as_info->capture_id; + blas_json_entry["CaptureDeviceAddress"] = dumped_as.as_info->capture_address; + blas_json_entry["ReplayDeviceAddress"] = dumped_as.as_info->replay_address; + + // BLAS serialized data + if (dumped_as.serialized_buffer.size) + { + auto& serialized_entry = blas_json_entry["SerializedData"]; + dump_json_.InsertBufferInfo(serialized_entry, dumped_as.serialized_buffer); + } + + auto& blas_inputs_entry = blas_json_entry["BuildInputs"]; + if (dumped_as.input_buffers.empty()) + { + return; + } + + std::string input_type_string; + if (std::get_if(&dumped_as.input_buffers[0])) + { + input_type_string = "Triangles"; + } + else + { + input_type_string = "AABBs"; + } + + auto& inputs_array_entries = blas_inputs_entry[input_type_string]; + for (size_t blas_input = 0; blas_input < dumped_as.input_buffers.size(); ++blas_input) + { + if (const auto* triangles = std::get_if( + &dumped_as.input_buffers[blas_input])) + { + dump_json_.InsertASBuildRangeInfo(inputs_array_entries[blas_input], triangles->range); + + auto& vertex_buffer_entry = inputs_array_entries[blas_input]["VertexBuffer"]; + vertex_buffer_entry["Format"] = util::ToString(triangles->vertex_format); + vertex_buffer_entry["MaxVertex"] = triangles->max_vertex; + vertex_buffer_entry["Stride"] = triangles->vertex_buffer_stride; + dump_json_.InsertBufferInfo(vertex_buffer_entry, triangles->vertex_buffer); + + if (triangles->index_type != VK_INDEX_TYPE_NONE_KHR) + { + auto& index_buffer_entry = inputs_array_entries[blas_input]["IndexBuffer"]; + index_buffer_entry["IndexType"] = util::ToString(triangles->index_type); + dump_json_.InsertBufferInfo(index_buffer_entry, triangles->index_buffer); + } + + if (triangles->transform_buffer.size) + { + auto& transform_buffer_entry = inputs_array_entries[blas_input]["TransformBuffer"]; + dump_json_.InsertBufferInfo(transform_buffer_entry, triangles->transform_buffer); + } + } + else if (const auto* aabbs = std::get_if( + &dumped_as.input_buffers[blas_input])) + { + dump_json_.InsertASBuildRangeInfo(inputs_array_entries[blas_input], triangles->range); + auto& aabb_buffer_entry = inputs_array_entries[blas_input]["AABBBuffer"]; + dump_json_.InsertBufferInfo(aabb_buffer_entry, aabbs->aabb_buffer); + } + } +} + +void DefaultVulkanDumpResourcesDelegate::GenerateTLASJsonInfo(nlohmann::ordered_json& tlas_json_entry, + const DumpedAccelerationStructure& dumped_as) +{ + GFXRECON_ASSERT(dumped_as.as_info != nullptr); + GFXRECON_ASSERT(dumped_as.as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR); + + if (!dumped_as.input_buffers.empty() && options_.dump_resources_dump_build_AS_input_buffers) + { + auto& instances_entries = tlas_json_entry["InstanceBuffers"]; + for (size_t inst_idx = 0; inst_idx < dumped_as.input_buffers.size(); ++inst_idx) + { + GFXRECON_ASSERT(std::get_if( + &dumped_as.input_buffers[inst_idx]) == nullptr); + GFXRECON_ASSERT(std::get_if( + &dumped_as.input_buffers[inst_idx]) == nullptr); + const auto* instance_buffer = std::get_if( + &dumped_as.input_buffers[inst_idx]); + GFXRECON_ASSERT(instance_buffer != nullptr); + + instances_entries[inst_idx]["Stride"] = dumped_as.instance_buffer_stride; + dump_json_.InsertBufferInfo(instances_entries[inst_idx], instance_buffer->instance_buffer); + } + } + + // TLAS serialized data + if (dumped_as.serialized_buffer.size) + { + auto& serialized_entry = tlas_json_entry["SerializedData"]; + dump_json_.InsertBufferInfo(serialized_entry, dumped_as.serialized_buffer); + } + + // Iterate BLASes + if (!dumped_as.BLASes.empty()) + { + auto& blas_entries = tlas_json_entry["BLASes"]; + for (size_t blas = 0; blas < dumped_as.BLASes.size(); ++blas) + { + auto& blas_entry = blas_entries[blas]; + GenerateBLASJsonInfo(blas_entry, dumped_as.BLASes[blas]); + } + } +} + +void DefaultVulkanDumpResourcesDelegate::GenerateDescriptorsJsonInfo(nlohmann::ordered_json& dispatch_json_entry, + const DumpedResourcesInfo& dumped_resources) +{ + std::unordered_map per_stage_json_entry_indices; + for (const auto& desc : dumped_resources.dumped_descriptors) + { + const VkShaderStageFlags stages = desc.stages; + std::vector shader_stages_names; + ShaderStageFlagsToStageNames(stages, shader_stages_names); + + if (const DumpedImage* dumped_image = std::get_if(&desc.dumped_resource)) + { + const VulkanImageInfo* img_info = dumped_image->image_info; + GFXRECON_ASSERT(img_info != nullptr); + + for (const std::string& stage_name : shader_stages_names) + { + uint32_t& stage_entry_index = per_stage_json_entry_indices[stage_name]; + auto& entry = dispatch_json_entry["descriptors"][stage_name][stage_entry_index++]; + entry["type"] = util::ToString(desc.desc_type); + entry["set"] = desc.set; + entry["binding"] = desc.binding; + entry["arrayIndex"] = desc.array_index; + entry["imageId"] = img_info->capture_id; + entry["format"] = util::ToString(img_info->format); + entry["imageType"] = util::ToString(img_info->type); + + if (dumped_image->scaling_failed) + { + entry["scaleFailed"] = true; + } + + if (dumped_image->can_dump == ImageDumpResult::kCanDump) + { + for (size_t sr = 0; sr < dumped_image->dumped_subresources.size(); ++sr) + { + const auto& dumped_image_sub_resource = dumped_image->dumped_subresources[sr]; + + auto& subresource_json_entry = entry["subresources"]; + dump_json_.InsertImageSubresourceInfo(subresource_json_entry[sr], + dumped_image_sub_resource, + img_info->format, + options_.dump_resources_dump_separate_alpha, + dumped_image->dumped_raw); + + const DumpedImage* dumped_image_before = std::get_if(&desc.dumped_resource_before); + if (options_.dump_resources_before && dumped_image_before != nullptr) + { + const DumpedImage::DumpedImageSubresource& dumped_image_before_sub_resource = + dumped_image_before->dumped_subresources[sr]; + + dump_json_.InsertBeforeImageSubresourceInfo(subresource_json_entry[sr], + dumped_image_before_sub_resource, + img_info->format, + options_.dump_resources_dump_separate_alpha, + dumped_image->dumped_raw); + } + } + } + else + { + if (dumped_image->can_dump == ImageDumpResult::kCanNotResolve) + { + entry["dumpFailure"] = "CouldNotResolve"; + } + else if (dumped_image->can_dump == ImageDumpResult::kFormatNotSupported) + { + entry["dumpFailure"] = "FormatNotSupported"; + } + } + } + } + else if (const DumpedBuffer* dumped_buffer = std::get_if(&desc.dumped_resource)) { - for (uint32_t layer = 0; layer < image_info->layer_count; ++layer) + for (const std::string& stage_name : shader_stages_names) { - filenames[f++] = GenerateDispatchTraceRaysImageFilename(resource_info, mip, layer, aspect); + uint32_t& stage_entry_index = per_stage_json_entry_indices[stage_name]; + auto& entry = dispatch_json_entry["descriptors"][stage_name][stage_entry_index++]; + entry["type"] = util::ToString(desc.desc_type); + entry["set"] = desc.set; + entry["binding"] = desc.binding; + entry["arrayIndex"] = desc.array_index; + + dump_json_.InsertBufferInfo(entry, *dumped_buffer); - if (!options_.dump_resources_dump_all_image_subresources) + const DumpedBuffer* dumped_buffer_before = std::get_if(&desc.dumped_resource_before); + if (options_.dump_resources_before && dumped_buffer_before != nullptr) { - break; + dump_json_.InsertBeforeBufferInfo(entry, *dumped_buffer_before); } } + } + else + { + const DumpedAccelerationStructure* tlas = std::get_if(&desc.dumped_resource); + GFXRECON_ASSERT(tlas != nullptr); + GFXRECON_ASSERT(tlas->as_info != nullptr); + GFXRECON_ASSERT(tlas->as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR); - if (!options_.dump_resources_dump_all_image_subresources) + for (const std::string& stage_name : shader_stages_names) { - break; + uint32_t& stage_entry_index = per_stage_json_entry_indices[stage_name]; + auto& entry = dispatch_json_entry["descriptors"][stage_name][stage_entry_index++]; + entry["type"] = util::ToString(desc.desc_type); + entry["set"] = desc.set; + entry["binding"] = desc.binding; + entry["arrayIndex"] = desc.array_index; + entry["TlasId"] = tlas->as_info->capture_id; + + if (tlas->input_buffers.empty() && tlas->BLASes.empty()) + { + continue; + } + + auto& tlas_content_entries = entry["TlasContent"]; + GenerateTLASJsonInfo(tlas_content_entries, *tlas); } } } +} + +void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonDispatchInfo( + const VulkanDelegateDumpDrawCallContext& draw_call_info) +{ + const DispatchTraceRaysDumpingContext::DispatchParams* disp_params = + std::get(draw_call_info.command_parameters); + + if (disp_params == nullptr) + { + return; + } + + const DumpedResourcesInfo& dumped_resources = disp_params->dumped_resources; + + if (options_.dump_resources_json_per_command) + { + std::stringstream filename; + filename << "Dispatch_" << dumped_resources.cmd_index << "_qs_" << dumped_resources.qs_index << "_bcb_" + << dumped_resources.bcb_index << "_dr.json"; + std::filesystem::path filedirname(options_.dump_resources_output_dir); + std::filesystem::path filebasename(filename.str()); + std::string full_filename = (filedirname / filebasename).string(); + + dump_json_.Open(full_filename); + dump_json_.BlockStart(); + } + + auto& current_block = dump_json_.GetCurrentSubEntry(); + auto& dispatch_json_entries = + !options_.dump_resources_json_per_command ? current_block["dispatchCommands"] : dump_json_.GetData(); - bool scaling_supported; - VkResult res = DumpImageToFile(image_info, - resource_info.device_info, - resource_info.device_table, - resource_info.instance_table, - *resource_info.object_info_table, - filenames, - options_.dump_resources_scale, - scaling_supported, - options_.dump_resources_image_format, - false, - options_.dump_resources_dump_raw_images, - options_.dump_resources_dump_separate_alpha, - VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); - if (res != VK_SUCCESS) + const uint32_t dispatch_json_entry_index = dump_json_.FetchAndAddDispatchEntryIndex(); + auto& dispatch_json_entry = !options_.dump_resources_json_per_command + ? dispatch_json_entries[dispatch_json_entry_index] + : dump_json_.GetData(); + + if (options_.using_dump_resources_target) { - if (res == VK_ERROR_FEATURE_NOT_PRESENT) + dispatch_json_entry["queueSubmitCallIndex"] = options_.dump_resources_target.submit_index; + dispatch_json_entry["commandBufferCallIndex"] = options_.dump_resources_target.command_index; + dispatch_json_entry["drawCallIndex"] = options_.dump_resources_target.draw_call_index; + } + + dispatch_json_entry["dispatchIndex"] = dumped_resources.cmd_index; + dispatch_json_entry["beginCommandBufferIndex"] = dumped_resources.bcb_index; + dispatch_json_entry["queueSubmitIndex"] = dumped_resources.qs_index; + + auto& params_json_entries = dispatch_json_entry["parameters"]; + params_json_entries["dispatchType"] = DispatchTraceRaysDumpingContext::DispatchTypeToStr(disp_params->type); + switch (disp_params->type) + { + case DispatchTraceRaysDumpingContext::DispatchTypes::kDispatch: { - // Failures to dump images due to multisampling should be ok - GFXRECON_LOG_WARNING("Image could not be resolved (%s)", - util::ToString(image_info->format).c_str()) - return VK_SUCCESS; + const auto& ds_params = disp_params->dispatch_params_union.dispatch; + + params_json_entries["groupCountX"] = ds_params.groupCountX; + params_json_entries["groupCountY"] = ds_params.groupCountY; + params_json_entries["groupCountZ"] = ds_params.groupCountZ; } - else + break; + + case DispatchTraceRaysDumpingContext::DispatchTypes::kDispatchIndirect: { - GFXRECON_LOG_ERROR("Dumping image failed (%s)", util::ToString(res).c_str()) + const auto& ds_params = disp_params->dispatch_params_union.dispatch_indirect; + + params_json_entries["groupCountX"] = ds_params.fetched_dispatch_params.groupCountX; + params_json_entries["groupCountY"] = ds_params.fetched_dispatch_params.groupCountY; + params_json_entries["groupCountZ"] = ds_params.fetched_dispatch_params.groupCountZ; } + break; + + case DispatchTraceRaysDumpingContext::DispatchTypes::kDispatchBase: + { + const auto& ds_params = disp_params->dispatch_params_union.dispatch_base; + + params_json_entries["baseGroupX"] = ds_params.baseGroupX; + params_json_entries["baseGroupY"] = ds_params.baseGroupY; + params_json_entries["baseGroupZ"] = ds_params.baseGroupZ; + params_json_entries["groupCountX"] = ds_params.groupCountX; + params_json_entries["groupCountY"] = ds_params.groupCountY; + params_json_entries["groupCountZ"] = ds_params.groupCountZ; + } + break; + + default: + assert(0); } - // Keep track of images for which scaling failed - if (!scaling_supported) + GenerateDescriptorsJsonInfo(dispatch_json_entry, dumped_resources); + + if (options_.dump_resources_json_per_command) { - images_failed_scaling_.insert(image_info); + dump_json_.BlockEnd(); + dump_json_.Close(); } - - return res; } -std::string DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysImageFilename( - const VulkanDumpResourceInfo& resource_info, uint32_t mip_level, uint32_t layer, VkImageAspectFlagBits aspect) const +void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonTraceRaysIndex( + const VulkanDelegateDumpDrawCallContext& draw_call_info) { - const VulkanImageInfo* image_info = resource_info.image_info; - const DumpedImageFormat output_image_format = GetDumpedImageFormat(resource_info.device_info, - resource_info.device_table, - resource_info.instance_table, - *resource_info.object_info_table, - image_info->format, - image_info->tiling, - image_info->type, - options_.dump_resources_image_format, - options_.dump_resources_dump_raw_images); + const DispatchTraceRaysDumpingContext::TraceRaysParams* tr_params = + std::get(draw_call_info.command_parameters); - const std::string aspect_str = ImageAspectToStr(aspect); + if (tr_params == nullptr) + { + return; + } - std::stringstream filename; - filename << capture_filename_ << '_'; + const DumpedResourcesInfo& dumped_resources = tr_params->dumped_resources; + + auto& current_block = dump_json_.GetCurrentSubEntry(); + + auto& tr_json_entries = + (!options_.dump_resources_json_per_command) ? current_block["traceRaysCommands"] : dump_json_.GetData(); - if (resource_info.before_cmd) + if (options_.dump_resources_json_per_command) { - filename << (resource_info.is_dispatch ? "dispatch_" : "traceRays_") << resource_info.cmd_index << "_qs_" - << resource_info.qs_index << "_bcb_" << resource_info.bcb_index << "_before_" - << "set_" << resource_info.set << "_binding_" << resource_info.binding << "_index_" - << resource_info.array_index; - if (output_image_format != KFormatRaw) - { - filename << "_" << util::ToString(image_info->format).c_str(); - } - filename << "_aspect_" << aspect_str; + std::stringstream filename; + filename << "TraceRays_" << dumped_resources.cmd_index << "_qs_" << dumped_resources.qs_index << "_bcb_" + << dumped_resources.bcb_index << "_dr.json"; + std::filesystem::path filedirname(options_.dump_resources_output_dir); + std::filesystem::path filebasename(filename.str()); + std::string full_filename = (filedirname / filebasename).string(); + + dump_json_.Open(full_filename); + dump_json_.BlockStart(); } - else + + const uint32_t trace_rays_json_entry_index = dump_json_.FetchAndAddTraceRaysEntryIndex(); + auto& tr_entry = + !options_.dump_resources_json_per_command ? tr_json_entries[trace_rays_json_entry_index] : dump_json_.GetData(); + + if (options_.using_dump_resources_target) { - filename << (resource_info.is_dispatch ? "dispatch_" : "traceRays_") << resource_info.cmd_index << "_qs_" - << resource_info.qs_index << "_bcb_" << resource_info.bcb_index << "_" - << (options_.dump_resources_before ? "after_" : "") << "set_" << resource_info.set << "_binding_" - << resource_info.binding << "_index_" << resource_info.array_index; - if (output_image_format != KFormatRaw) + tr_entry["queueSubmitCallIndex"] = options_.dump_resources_target.submit_index; + tr_entry["commandBufferCallIndex"] = options_.dump_resources_target.command_index; + tr_entry["drawCallIndex"] = options_.dump_resources_target.draw_call_index; + } + + tr_entry["traceRaysIndex"] = dumped_resources.cmd_index; + tr_entry["beginCommandBufferIndex"] = dumped_resources.bcb_index; + tr_entry["queueSubmitIndex"] = dumped_resources.qs_index; + + auto& params_json_entries = tr_entry["parameters"]; + params_json_entries["traceRaysType"] = DispatchTraceRaysDumpingContext::TraceRaysTypeToStr(tr_params->type); + + switch (tr_params->type) + { + case DispatchTraceRaysDumpingContext::TraceRaysTypes::kTraceRays: { - filename << "_" << util::ToString(image_info->format).c_str(); + const auto& params = tr_params->trace_rays_params_union.trace_rays; + + params_json_entries["width"] = params.width; + params_json_entries["height"] = params.height; + params_json_entries["depth"] = params.depth; } - filename << "_aspect_" << aspect_str; - } + break; - filename << "_mip_" << mip_level << "_layer_" << layer; + case DispatchTraceRaysDumpingContext::TraceRaysTypes::kTraceRaysIndirect: + { + const auto& params = tr_params->trace_rays_params_union.trace_rays_indirect; - filename << ImageFileExtension(output_image_format); + params_json_entries["width"] = params.trace_rays_params.width; + params_json_entries["height"] = params.trace_rays_params.height; + params_json_entries["depth"] = params.trace_rays_params.depth; + } + break; - std::filesystem::path filedirname(options_.dump_resources_output_dir); - std::filesystem::path filebasename(filename.str()); - return (filedirname / filebasename).string(); -} + case DispatchTraceRaysDumpingContext::TraceRaysTypes::kTraceRaysIndirect2: + { + const auto& params = tr_params->trace_rays_params_union.trace_rays_indirect2; -VkResult DefaultVulkanDumpResourcesDelegate::DumpeDispatchTraceRaysBuffer(const VulkanDumpResourceInfo& resource_info) -{ - std::string filename = GenerateDispatchTraceRaysBufferFilename(resource_info); - return util::bufferwriter::WriteBuffer(filename, resource_info.data.data(), resource_info.data.size()) - ? VK_SUCCESS - : VK_ERROR_UNKNOWN; + params_json_entries["width"] = params.trace_rays_params.width; + params_json_entries["height"] = params.trace_rays_params.height; + params_json_entries["depth"] = params.trace_rays_params.depth; + } + break; + + default: + assert(0); + } + + GenerateDescriptorsJsonInfo(tr_entry, dumped_resources); + + if (options_.dump_resources_json_per_command) + { + dump_json_.BlockEnd(); + dump_json_.Close(); + } } -std::string DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysBufferFilename( - const VulkanDumpResourceInfo& resource_info) const +std::string +DefaultVulkanDumpResourcesDelegate::GenerateASDumpedBufferFilename(const DumpedResourceBase& resource_info, + format::HandleId handle_id, + AccelerationStructureDumpedBufferType type, + DumpResourcesPipelineStage dumped_command_type, + bool before_command, + uint32_t buffer_index) { std::stringstream filename; - filename << capture_filename_ << '_'; + filename << capture_filename_ << "_"; + + switch (dumped_command_type) + { + case DumpResourcesPipelineStage::kGraphics: + filename << "DrawCall_"; + break; + + case DumpResourcesPipelineStage::kCompute: + filename << "Dispatch_"; + break; + + case DumpResourcesPipelineStage::kRayTracing: + filename << "TraceRays_"; + break; + + case DumpResourcesPipelineStage::kTransfer: + filename << "Transfer_"; + break; + + default: + GFXRECON_LOG_ERROR( + "%s: Unrecognized command type (%u)", __func__, static_cast(dumped_command_type)); + filename << "XXX_"; + break; + } + + filename << resource_info.cmd_index; + + std::string buffer_type; + switch (type) + { + case AccelerationStructureDumpedBufferType::kInstance: + buffer_type = "_instance_buffer_"; + break; + case AccelerationStructureDumpedBufferType::kVertex: + buffer_type = "_vertex_buffer_"; + break; + case AccelerationStructureDumpedBufferType::kIndex: + buffer_type = "_index_buffer_"; + break; + case AccelerationStructureDumpedBufferType::kAABB: + buffer_type = "_AABB_buffer_"; + break; + case AccelerationStructureDumpedBufferType::kTransform: + buffer_type = "_transform_buffer_"; + break; + case AccelerationStructureDumpedBufferType::kSerializedBlas: + case AccelerationStructureDumpedBufferType::kSerializedTlas: + buffer_type = "_serialized"; + break; + default: + GFXRECON_ASSERT(0); + } - if (resource_info.before_cmd) + if (type == AccelerationStructureDumpedBufferType::kVertex || + type == AccelerationStructureDumpedBufferType::kIndex || type == AccelerationStructureDumpedBufferType::kAABB || + type == AccelerationStructureDumpedBufferType::kTransform || + type == AccelerationStructureDumpedBufferType::kSerializedBlas) { - filename << (resource_info.is_dispatch ? "dispatch_" : "traceRays_") << resource_info.cmd_index << "_qs_" - << resource_info.qs_index << "_bcb_" << resource_info.bcb_index << "_before_" - << "set_" << resource_info.set << "_binding_" << resource_info.binding << "_index_" - << resource_info.array_index << "_buffer.bin"; + filename << "_BLAS_"; } else { - filename << (resource_info.is_dispatch ? "dispatch_" : "traceRays_") << resource_info.cmd_index << "_qs_" - << resource_info.qs_index << "_bcb_" << resource_info.bcb_index << "_" - << (options_.dump_resources_before ? "after_" : "") << "set_" << resource_info.set << "_binding_" - << resource_info.binding << "_index_" << resource_info.array_index << "_buffer.bin"; + filename << "_TLAS_"; } + if (options_.dump_resources_before) + { + if (before_command) + { + filename << "before_"; + } + else + { + filename << "after_"; + } + } + + filename << handle_id << buffer_type; + + if (type != AccelerationStructureDumpedBufferType::kSerializedBlas && + type != AccelerationStructureDumpedBufferType::kSerializedTlas) + { + GFXRECON_ASSERT(buffer_index != std::numeric_limits::max()) + filename << buffer_index; + } + + filename << ".bin"; + std::filesystem::path filedirname(options_.dump_resources_output_dir); std::filesystem::path filebasename(filename.str()); return (filedirname / filebasename).string(); } -VkResult -DefaultVulkanDumpResourcesDelegate::DumpDispatchTraceRaysImageDescriptor(const VulkanDumpResourceInfo& resource_info) +bool DefaultVulkanDumpResourcesDelegate::DumpTransferCommandToFile( + const VulkanDelegateDumpResourceContext& delegate_context) { - const VulkanImageInfo* image_info = resource_info.image_info; + const auto* dumped_transfer_host_data = + std::get_if(&delegate_context.dumped_data); + GFXRECON_ASSERT(dumped_transfer_host_data != nullptr); + + auto* dumped_transfer_command = static_cast(delegate_context.dumped_resource); + GFXRECON_ASSERT(dumped_transfer_command != nullptr); - std::vector aspects; - GetFormatAspects(image_info->format, aspects); + if (const auto* init_buffer_host_data = + std::get_if(&dumped_transfer_host_data->dumped_data)) + { + const DumpedResourceBase* resource_info = delegate_context.dumped_resource; + GFXRECON_ASSERT(resource_info->type == DumpResourceType::kInitBufferMetaCommand); + + auto* dumped_init_buffer = std::get_if(&dumped_transfer_command->dumped_resource); + GFXRECON_ASSERT(dumped_init_buffer != nullptr); + const std::string filename = + GenerateTransferToBufferRegionFilename(*delegate_context.dumped_resource, false, NO_INDEX); + gfxrecon::decode::DumpBufferToFile( + dumped_init_buffer->dumped_buffer, filename, init_buffer_host_data->data, delegate_context.compressor); + } + else if (const auto* init_image_host_data = + std::get_if(&dumped_transfer_host_data->dumped_data)) + { + const DumpedResourceBase* resource_info = delegate_context.dumped_resource; + GFXRECON_ASSERT(resource_info->type == DumpResourceType::kInitImageMetaCommand); + + auto* dumped_init_image = std::get_if(&dumped_transfer_command->dumped_resource); + GFXRECON_ASSERT(dumped_init_image != nullptr); + + DumpImageToFile(delegate_context.dumped_resource, + dumped_init_image->dumped_image, + init_image_host_data->data, + &DefaultVulkanDumpResourcesDelegate::GenerateTransferToImageRegionFilename, + delegate_context.before_command, + delegate_context.compressor); + } + else if (const auto* buffer_copy_host_data = + std::get_if(&dumped_transfer_host_data->dumped_data)) + { + const DumpedResourceBase* resource_info = delegate_context.dumped_resource; + if (resource_info->type == DumpResourceType::kCopyBuffer) + { + auto* dumped_copy_buffer = std::get_if( + delegate_context.before_command ? &dumped_transfer_command->dumped_resource_before + : &dumped_transfer_command->dumped_resource); + GFXRECON_ASSERT(dumped_copy_buffer != nullptr); - const size_t total_files = options_.dump_resources_dump_all_image_subresources - ? (aspects.size() * image_info->layer_count * image_info->level_count) - : aspects.size(); + GFXRECON_ASSERT(buffer_copy_host_data->regions_data.size() == dumped_copy_buffer->regions.size()); + for (size_t i = 0; i < buffer_copy_host_data->regions_data.size(); ++i) + { + const auto& region_host_data = buffer_copy_host_data->regions_data[i]; + const std::string filename = GenerateTransferToBufferRegionFilename( + *delegate_context.dumped_resource, delegate_context.before_command, i); + gfxrecon::decode::DumpBufferToFile(dumped_copy_buffer->regions[i].dumped_buffer, + filename, + region_host_data, + delegate_context.compressor); + } + } + else + { + GFXRECON_ASSERT(resource_info->type == DumpResourceType::kCopyImageToBuffer) - std::vector filenames(total_files); + auto* dumped_copy_image_to_buffer = std::get_if( + delegate_context.before_command ? &dumped_transfer_command->dumped_resource_before + : &dumped_transfer_command->dumped_resource); + GFXRECON_ASSERT(dumped_copy_image_to_buffer != nullptr); - size_t f = 0; - for (auto aspect : aspects) + GFXRECON_ASSERT(buffer_copy_host_data->regions_data.size() == dumped_copy_image_to_buffer->regions.size()); + for (size_t i = 0; i < buffer_copy_host_data->regions_data.size(); ++i) + { + const auto& region_host_data = buffer_copy_host_data->regions_data[i]; + const std::string filename = GenerateTransferToBufferRegionFilename( + *delegate_context.dumped_resource, delegate_context.before_command, i); + gfxrecon::decode::DumpBufferToFile(dumped_copy_image_to_buffer->regions[i].dumped_buffer, + filename, + region_host_data, + delegate_context.compressor); + } + } + } + else if (const auto* image_copy_host_data = + std::get_if(&dumped_transfer_host_data->dumped_data)) { - for (uint32_t mip = 0; mip < image_info->level_count; ++mip) + const DumpedResourceBase* resource_info = delegate_context.dumped_resource; + if (resource_info->type == DumpResourceType::kCopyBufferToImage) { - for (uint32_t layer = 0; layer < image_info->layer_count; ++layer) + auto* dumped_copy_buffer_to_image = std::get_if( + delegate_context.before_command ? &dumped_transfer_command->dumped_resource_before + : &dumped_transfer_command->dumped_resource); + GFXRECON_ASSERT(dumped_copy_buffer_to_image != nullptr); + + GFXRECON_ASSERT(image_copy_host_data->regions_data.size() == dumped_copy_buffer_to_image->regions.size()); + for (size_t i = 0; i < image_copy_host_data->regions_data.size(); ++i) { - filenames[f++] = GenerateDispatchTraceRaysImageDescriptorFilename(resource_info, mip, layer, aspect); + DumpImageToFile(delegate_context.dumped_resource, + dumped_copy_buffer_to_image->regions[i].dumped_image, + image_copy_host_data->regions_data[i], + &DefaultVulkanDumpResourcesDelegate::GenerateTransferToImageRegionFilename, + delegate_context.before_command, + delegate_context.compressor); + } + } + else if (resource_info->type == DumpResourceType::kCopyImage) + { + auto* dumped_copy_image = std::get_if( + delegate_context.before_command ? &dumped_transfer_command->dumped_resource_before + : &dumped_transfer_command->dumped_resource); + GFXRECON_ASSERT(dumped_copy_image != nullptr); - if (!options_.dump_resources_dump_all_image_subresources) - { - break; - } + GFXRECON_ASSERT(image_copy_host_data->regions_data.size() == dumped_copy_image->regions.size()); + for (size_t i = 0; i < image_copy_host_data->regions_data.size(); ++i) + { + DumpImageToFile(delegate_context.dumped_resource, + dumped_copy_image->regions[i].dumped_image, + image_copy_host_data->regions_data[i], + &DefaultVulkanDumpResourcesDelegate::GenerateTransferToImageRegionFilename, + delegate_context.before_command, + delegate_context.compressor); } + } + else if (resource_info->type == DumpResourceType::kBlitImage) + { + auto* dumped_blit_image = std::get_if( + delegate_context.before_command ? &dumped_transfer_command->dumped_resource_before + : &dumped_transfer_command->dumped_resource); + GFXRECON_ASSERT(dumped_blit_image != nullptr); - if (!options_.dump_resources_dump_all_image_subresources) + GFXRECON_ASSERT(image_copy_host_data->regions_data.size() == dumped_blit_image->regions.size()); + for (size_t i = 0; i < image_copy_host_data->regions_data.size(); ++i) { - break; + DumpImageToFile(delegate_context.dumped_resource, + dumped_blit_image->regions[i].dumped_image, + image_copy_host_data->regions_data[i], + &DefaultVulkanDumpResourcesDelegate::GenerateTransferToImageRegionFilename, + delegate_context.before_command, + delegate_context.compressor); } } } - - bool scaling_supported; - VkResult res = DumpImageToFile(image_info, - resource_info.device_info, - resource_info.device_table, - resource_info.instance_table, - *resource_info.object_info_table, - filenames, - options_.dump_resources_scale, - scaling_supported, - options_.dump_resources_image_format, - options_.dump_resources_dump_all_image_subresources, - options_.dump_resources_dump_raw_images, - options_.dump_resources_dump_separate_alpha); - if (res != VK_SUCCESS) + else if (const auto* build_as_host_data = + std::get_if(&dumped_transfer_host_data->dumped_data)) { - GFXRECON_LOG_ERROR("Dumping image failed (%s)", util::ToString(res).c_str()) - return res; - } + auto* dump_build_as = std::get_if( + delegate_context.before_command ? &dumped_transfer_command->dumped_resource_before + : &dumped_transfer_command->dumped_resource); + GFXRECON_ASSERT(dump_build_as != nullptr); - // Keep track of images for which scaling failed - if (scaling_supported) - { - images_failed_scaling_.insert(image_info); + GFXRECON_ASSERT(dump_build_as->dumped_build_infos.size() == build_as_host_data->data.size()); + for (size_t i = 0; i < dump_build_as->dumped_build_infos.size(); ++i) + { + if (dump_build_as->dumped_build_infos[i].dumped_as.as_info->type == + VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR) + { + return DumpTLASToFile(*dumped_transfer_command, + dump_build_as->dumped_build_infos[i].dumped_as, + build_as_host_data->data[i], + delegate_context.before_command, + delegate_context.compressor); + } + else + { + return DumpBLASToFile(*dumped_transfer_command, + dump_build_as->dumped_build_infos[i].dumped_as, + build_as_host_data->data[i], + delegate_context.before_command, + delegate_context.compressor); + } + } } - - return res; -} - -std::string DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysImageDescriptorFilename( - const VulkanDumpResourceInfo& resource_info, uint32_t mip_level, uint32_t layer, VkImageAspectFlagBits aspect) const -{ - const VulkanImageInfo* image_info = resource_info.image_info; - std::string aspect_str = ImageAspectToStr(aspect); - std::stringstream base_filename; - - base_filename << capture_filename_ << '_'; - - const DumpedImageFormat output_image_format = GetDumpedImageFormat(resource_info.device_info, - resource_info.device_table, - resource_info.instance_table, - *resource_info.object_info_table, - image_info->format, - image_info->tiling, - image_info->type, - options_.dump_resources_image_format, - options_.dump_resources_dump_raw_images); - - if (output_image_format != KFormatRaw) + else if (const auto* copy_as_host_data = + std::get_if(&dumped_transfer_host_data->dumped_data)) { - base_filename << "image_" << image_info->capture_id << "_qs_" << resource_info.qs_index << "_bcb_" - << resource_info.bcb_index << "_aspect_" << aspect_str; + auto* dump_copy_as = std::get_if( + delegate_context.before_command ? &dumped_transfer_command->dumped_resource_before + : &dumped_transfer_command->dumped_resource); + GFXRECON_ASSERT(dump_copy_as != nullptr); + + if (dump_copy_as->dumped_copy_info.dumped_as.as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR) + { + return DumpTLASToFile(*dumped_transfer_command, + dump_copy_as->dumped_copy_info.dumped_as, + copy_as_host_data->data, + delegate_context.before_command, + delegate_context.compressor); + } + else + { + return DumpBLASToFile(*dumped_transfer_command, + dump_copy_as->dumped_copy_info.dumped_as, + copy_as_host_data->data, + delegate_context.before_command, + delegate_context.compressor); + } } else { - std::string format_name = FormatToStr(image_info->format); - base_filename << "image_" << image_info->capture_id << "_qs_" << resource_info.qs_index << "_bcb_" - << resource_info.bcb_index << "_" << format_name << "_aspect_" << aspect_str; + GFXRECON_LOG_ERROR("%s(): Unexpected transfer command type", __func__); + GFXRECON_ASSERT(0); } - std::stringstream sub_resources_str; - sub_resources_str << base_filename.str() << "_mip_" << mip_level << "_layer_" << layer; - sub_resources_str << ImageFileExtension(output_image_format); - std::filesystem::path filedirname(options_.dump_resources_output_dir); - std::filesystem::path filebasename(sub_resources_str.str()); - return (filedirname / filebasename).string(); + return true; } -VkResult -DefaultVulkanDumpResourcesDelegate::DumpDispatchTraceRaysBufferDescriptor(const VulkanDumpResourceInfo& resource_info) +static void GenerateOutputJsonTransferImage(nlohmann::ordered_json& json_entry, + const TransferedImageInfo& transf_img_info) { - const std::string filename = GenerateDispatchTraceRaysBufferDescriptorFilename(resource_info); - return util::bufferwriter::WriteBuffer(filename, resource_info.data.data(), resource_info.data.size()) - ? VK_SUCCESS - : VK_ERROR_UNKNOWN; + json_entry["image"] = transf_img_info.id; + json_entry["format"] = util::ToString(transf_img_info.format); + json_entry["extent"][0] = transf_img_info.extent.width; + json_entry["extent"][1] = transf_img_info.extent.height; + json_entry["extent"][2] = transf_img_info.extent.depth; + json_entry["layout"] = util::ToString(transf_img_info.layout); } -std::string DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysBufferDescriptorFilename( - const VulkanDumpResourceInfo& resource_info) const +void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonInitBufferCommand(const DumpedTransferCommand& cmd, + nlohmann::ordered_json& json_entry) { - std::stringstream filename; + GFXRECON_ASSERT(cmd.type == DumpResourceType::kInitBufferMetaCommand); - filename << capture_filename_ << "_buffer_" << resource_info.buffer_info->capture_id << "_qs_" - << resource_info.qs_index << "_bcb_" << resource_info.bcb_index << ".bin"; + const auto* init_buffer = std::get_if(&cmd.dumped_resource); + GFXRECON_ASSERT(init_buffer != nullptr); - std::filesystem::path filedirname(options_.dump_resources_output_dir); - std::filesystem::path filebasename(filename.str()); - return (filedirname / filebasename).string(); + json_entry["buffer"] = init_buffer->buffer; + dump_json_.InsertBufferInfo(json_entry, init_buffer->dumped_buffer); } -VkResult DefaultVulkanDumpResourcesDelegate::DumpDispatchTraceRaysInlineUniformBufferDescriptor( - const VulkanDumpResourceInfo& resource_info) +void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonInitImageCommand(const DumpedTransferCommand& cmd, + nlohmann::ordered_json& json_entry) { - std::string filename = GenerateDispatchTraceRaysInlineUniformBufferDescriptorFilename(resource_info); - return util::bufferwriter::WriteBuffer(filename, resource_info.data.data(), resource_info.data.size()) - ? VK_SUCCESS - : VK_ERROR_UNKNOWN; -} + GFXRECON_ASSERT(cmd.type == DumpResourceType::kInitImageMetaCommand); -std::string DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysInlineUniformBufferDescriptorFilename( - const VulkanDumpResourceInfo& resource_info) const -{ - std::stringstream filename; - filename << capture_filename_ << '_' << "inlineUniformBlock_set_" << resource_info.set << "_binding_" - << resource_info.binding << "_qs_" << resource_info.qs_index << "_bcb_" << resource_info.bcb_index - << ".bin"; + const auto* init_image = std::get_if(&cmd.dumped_resource); + GFXRECON_ASSERT(init_image != nullptr); - std::filesystem::path filedirname(options_.dump_resources_output_dir); - std::filesystem::path filebasename(filename.str()); - return (filedirname / filebasename).string(); + auto& dst_image_json_entry = json_entry["dstImage"]; + GenerateOutputJsonTransferImage(dst_image_json_entry, init_image->image); + + for (size_t sr = 0; sr < init_image->dumped_image.dumped_subresources.size(); ++sr) + { + const DumpedImage::DumpedImageSubresource& dumped_image_sub_resource = + init_image->dumped_image.dumped_subresources[sr]; + auto& subresource_json_entry = json_entry["subresources"]; + dump_json_.InsertImageSubresourceInfo(subresource_json_entry[sr], + dumped_image_sub_resource, + init_image->dumped_image.image_info->format, + options_.dump_resources_dump_separate_alpha, + init_image->dumped_image.dumped_raw); + } } -void DefaultVulkanDumpResourcesDelegate::GenerateDispatchTraceRaysDescriptorsJsonInfo( - const VulkanDumpDrawCallInfo& draw_call_info, - nlohmann::ordered_json& dispatch_json_entry, - const BoundDescriptorSets& referenced_descriptors, - const DispatchTraceRaysDumpingContext::MutableResourcesBackupContext& mutable_resources, - const DispatchTraceRaysDumpingContext::MutableResourcesBackupContext& mutable_resources_before, - bool is_dispatch) +void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonCopyBufferCommand(const DumpedTransferCommand& cmd, + nlohmann::ordered_json& json_entry) { - GFXRECON_ASSERT((options_.dump_resources_before && - (mutable_resources.buffers.size() == mutable_resources_before.buffers.size() && - mutable_resources.images.size() == mutable_resources_before.images.size())) || - !options_.dump_resources_before); + GFXRECON_ASSERT(cmd.type == DumpResourceType::kCopyBuffer); - VulkanDumpResourceInfo res_info_base{}; - res_info_base = draw_call_info; + const auto* copy_buffer = std::get_if(&cmd.dumped_resource); + GFXRECON_ASSERT(copy_buffer != nullptr); - std::unordered_map per_stage_json_entry_indices; + json_entry["srcBuffer"] = copy_buffer->src_buffer; + json_entry["dstBuffer"] = copy_buffer->dst_buffer; + + auto& regions_entries = json_entry["regions"]; - for (size_t i = 0; i < mutable_resources.images.size(); ++i) + for (size_t i = 0; i < copy_buffer->regions.size(); ++i) { - const auto& image = mutable_resources.images[i]; - const VkShaderStageFlags stages = image.stages; - std::vector shader_stages_names; - ShaderStageFlagsToStageNames(stages, shader_stages_names); + const auto& region = copy_buffer->regions[i]; + regions_entries[i]["srcOffset"] = region.region.srcOffset; + regions_entries[i]["dstOffset"] = region.region.dstOffset; + regions_entries[i]["size"] = region.region.size; + dump_json_.InsertBufferInfo(regions_entries[i], region.dumped_buffer); - for (const std::string& stage_name : shader_stages_names) - { - const uint32_t desc_set = image.desc_set; - const uint32_t binding = image.desc_binding; - const uint32_t array_index = image.array_index; - const VulkanImageInfo* img_info = image.original_image; - assert(img_info != nullptr); - - uint32_t& stage_entry_index = per_stage_json_entry_indices[stage_name]; - auto& entry = dispatch_json_entry["descriptors"][stage_name][stage_entry_index++]; - entry["type"] = util::ToString(image.desc_type); - entry["set"] = desc_set; - entry["binding"] = binding; - entry["arrayIndex"] = array_index; - entry["imageId"] = img_info->capture_id; - entry["format"] = util::ToString(img_info->format); - entry["imageType"] = util::ToString(img_info->type); - - if (ImageFailedScaling(img_info)) - { - entry["scaleFailed"] = true; - } + if (cmd.has_before) + { + const auto* copy_buffer_before = std::get_if(&cmd.dumped_resource_before); + GFXRECON_ASSERT(copy_buffer_before != nullptr); + dump_json_.InsertBeforeBufferInfo(regions_entries[i], copy_buffer_before->regions[i].dumped_buffer); + } + } +} - std::vector aspects; - GetFormatAspects(img_info->format, aspects); +void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonCopyBufferToImageCommand(const DumpedTransferCommand& cmd, + nlohmann::ordered_json& json_entry) +{ + GFXRECON_ASSERT(cmd.type == DumpResourceType::kCopyBufferToImage); - size_t subresource_entry = 0; - for (auto aspect : aspects) - { - for (uint32_t mip = 0; mip < img_info->level_count; ++mip) - { - for (uint32_t layer = 0; layer < img_info->layer_count; ++layer) - { - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kDispatchTraceRaysImage; - res_info.is_dispatch = is_dispatch; - res_info.before_cmd = false; - res_info.image_info = img_info; - res_info.set = desc_set; - res_info.binding = binding; - res_info.array_index = array_index; - res_info.stages = stages; - - std::string filename = GenerateDispatchTraceRaysImageFilename(res_info, mip, layer, aspect); - - const VkExtent3D extent = { std::max(1u, img_info->extent.width >> mip), - std::max(1u, img_info->extent.height >> mip), - img_info->extent.depth }; + const auto* copy_buffer_to_image = std::get_if(&cmd.dumped_resource); + GFXRECON_ASSERT(copy_buffer_to_image != nullptr); - auto& subresource_json_entry = entry["subresources"]; - if (options_.dump_resources_before) - { - res_info.before_cmd = true; - const std::string filename_before = - GenerateDispatchTraceRaysImageFilename(res_info, mip, layer, aspect); - - dump_json_.InsertImageSubresourceInfo(subresource_json_entry[subresource_entry++], - img_info->format, - img_info->type, - img_info->capture_id, - extent, - filename, - aspect, - mip, - layer, - options_.dump_resources_dump_separate_alpha, - &filename_before); - } - else - { - dump_json_.InsertImageSubresourceInfo(subresource_json_entry[subresource_entry++], - img_info->format, - img_info->type, - img_info->capture_id, - extent, - filename, - aspect, - mip, - layer, - options_.dump_resources_dump_separate_alpha); - } + json_entry["srcBuffer"] = copy_buffer_to_image->src_buffer; - if (!options_.dump_resources_dump_all_image_subresources) - { - break; - } - } + auto& dst_image_json_entry = json_entry["dstImage"]; + GenerateOutputJsonTransferImage(dst_image_json_entry, copy_buffer_to_image->dst_image); - if (!options_.dump_resources_dump_all_image_subresources) - { - break; - } - } + auto& regions_entries = json_entry["regions"]; + for (size_t i = 0; i < copy_buffer_to_image->regions.size(); ++i) + { + const auto& region = copy_buffer_to_image->regions[i]; + + auto& region_entry = regions_entries[i]; + region_entry["bufferOffset"] = region.region.bufferOffset; + region_entry["bufferRowLength"] = region.region.bufferRowLength; + region_entry["bufferImageHeight"] = region.region.bufferImageHeight; + auto& img_subresource = region_entry["imageSubresource"]; + img_subresource["aspectMask"] = + util::ToString(static_cast(region.region.imageSubresource.aspectMask)); + img_subresource["mipLevel"] = region.region.imageSubresource.mipLevel; + img_subresource["baseArrayLayer"] = region.region.imageSubresource.baseArrayLayer; + img_subresource["layerCount"] = region.region.imageSubresource.layerCount; + + auto& img_offset = region_entry["imageOffset"]; + img_offset["x"] = region.region.imageOffset.x; + img_offset["y"] = region.region.imageOffset.y; + img_offset["z"] = region.region.imageOffset.z; + + auto& img_extent = region_entry["imageOffset"]; + img_offset["x"] = region.region.imageOffset.x; + img_offset["y"] = region.region.imageOffset.y; + img_offset["z"] = region.region.imageOffset.z; + + auto& extent = region_entry["imageExtent"]; + extent["width"] = region.region.imageExtent.width; + extent["height"] = region.region.imageExtent.height; + extent["depth"] = region.region.imageExtent.depth; + + auto& subresource_json_entry = region_entry["subresources"]; + for (size_t sr = 0; sr < region.dumped_image.dumped_subresources.size(); ++sr) + { + const auto& dumped_image_sub_resource = region.dumped_image.dumped_subresources[sr]; + dump_json_.InsertImageSubresourceInfo(subresource_json_entry[sr], + dumped_image_sub_resource, + region.dumped_image.image_info->format, + options_.dump_resources_dump_separate_alpha, + region.dumped_image.dumped_raw); + + if (cmd.has_before) + { + const auto* copy_image_before = std::get_if(&cmd.dumped_resource_before); + GFXRECON_ASSERT(copy_image_before != nullptr); + const auto& region_before = copy_image_before->regions[i]; + const auto& dumped_image_sub_resource_before = region_before.dumped_image.dumped_subresources[sr]; + dump_json_.InsertBeforeImageSubresourceInfo(subresource_json_entry[sr], + dumped_image_sub_resource_before, + region_before.dumped_image.image_info->format, + options_.dump_resources_dump_separate_alpha, + region_before.dumped_image.dumped_raw); } } } +} - for (size_t i = 0; i < mutable_resources.buffers.size(); ++i) - { - const auto& buffer = mutable_resources.buffers[i]; - const VkShaderStageFlags stages = buffer.stages; +void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonCopyImageCommand(const DumpedTransferCommand& cmd, + nlohmann::ordered_json& json_entry) +{ + GFXRECON_ASSERT(cmd.type == DumpResourceType::kCopyImage); - std::vector shader_stages_names; - ShaderStageFlagsToStageNames(stages, shader_stages_names); + const auto* copy_image = std::get_if(&cmd.dumped_resource); + GFXRECON_ASSERT(copy_image != nullptr); + + auto& src_image_json_entry = json_entry["srcImage"]; + GenerateOutputJsonTransferImage(src_image_json_entry, copy_image->src_image); - for (const std::string& stage_name : shader_stages_names) - { - const uint32_t desc_set = buffer.desc_set; - const uint32_t binding = buffer.desc_binding; - const uint32_t array_index = buffer.array_index; - const VulkanBufferInfo* buffer_info = buffer.original_buffer; - assert(buffer_info != nullptr); - - uint32_t& stage_entry_index = per_stage_json_entry_indices[stage_name]; - auto& entry = dispatch_json_entry["descriptors"][stage_name][stage_entry_index++]; - entry["type"] = util::ToString(buffer.desc_type); - entry["set"] = desc_set; - entry["binding"] = binding; - entry["arrayIndex"] = array_index; - entry["bufferId"] = buffer_info->capture_id; - - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kDispatchTraceRaysBuffer; - res_info.is_dispatch = is_dispatch; - res_info.before_cmd = false; - res_info.set = desc_set; - res_info.binding = binding; - res_info.array_index = array_index; - res_info.stages = stages; - - const std::string filename = GenerateDispatchTraceRaysBufferFilename(res_info); - entry["file"] = filename; - - if (options_.dump_resources_before) + auto& dst_image_json_entry = json_entry["dstImage"]; + GenerateOutputJsonTransferImage(dst_image_json_entry, copy_image->dst_image); + + auto& regions_entries = json_entry["regions"]; + for (size_t i = 0; i < copy_image->regions.size(); ++i) + { + const auto& region = copy_image->regions[i]; + auto& region_entry = regions_entries[i]; + auto& src_subresource = region_entry["srcSubresource"]; + src_subresource["aspectMask"] = + util::ToString(static_cast(region.region.srcSubresource.aspectMask)); + src_subresource["mipLevel"] = region.region.srcSubresource.mipLevel; + src_subresource["baseArrayLayer"] = region.region.srcSubresource.baseArrayLayer; + src_subresource["layerCount"] = region.region.srcSubresource.layerCount; + + auto& srcOffset = region_entry["srcOffset"]; + srcOffset["x"] = region.region.srcOffset.x; + srcOffset["y"] = region.region.srcOffset.y; + srcOffset["z"] = region.region.srcOffset.z; + + auto& dst_subresource = region_entry["dstSubresource"]; + dst_subresource["aspectMask"] = + util::ToString(static_cast(region.region.dstSubresource.aspectMask)); + dst_subresource["mipLevel"] = region.region.dstSubresource.mipLevel; + dst_subresource["baseArrayLayer"] = region.region.dstSubresource.baseArrayLayer; + dst_subresource["layerCount"] = region.region.dstSubresource.layerCount; + + auto& dstOffset = region_entry["dstOffset"]; + dstOffset["x"] = region.region.dstOffset.x; + dstOffset["y"] = region.region.dstOffset.y; + dstOffset["z"] = region.region.dstOffset.z; + + auto& extent = region_entry["extent"]; + extent["width"] = region.region.extent.width; + extent["height"] = region.region.extent.height; + extent["depth"] = region.region.extent.depth; + + auto& subresource_json_entry = region_entry["subresources"]; + for (size_t sr = 0; sr < region.dumped_image.dumped_subresources.size(); ++sr) + { + const auto& dumped_image_sub_resource = region.dumped_image.dumped_subresources[sr]; + dump_json_.InsertImageSubresourceInfo(subresource_json_entry[sr], + dumped_image_sub_resource, + region.dumped_image.image_info->format, + options_.dump_resources_dump_separate_alpha, + region.dumped_image.dumped_raw); + + if (cmd.has_before) { - res_info.before_cmd = true; - const std::string filename_before = GenerateDispatchTraceRaysBufferFilename(res_info); - entry["beforeFile"] = filename_before; + const auto* copy_image_before = std::get_if(&cmd.dumped_resource_before); + GFXRECON_ASSERT(copy_image_before != nullptr); + const auto& region_before = copy_image_before->regions[i]; + const auto& dumped_image_sub_resource_before = region_before.dumped_image.dumped_subresources[sr]; + dump_json_.InsertBeforeImageSubresourceInfo(subresource_json_entry[sr], + dumped_image_sub_resource_before, + region_before.dumped_image.image_info->format, + options_.dump_resources_dump_separate_alpha, + region_before.dumped_image.dumped_raw); } } } +} - if (options_.dump_resources_dump_immutable_resources) +void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonCopyImageToBufferCommand(const DumpedTransferCommand& cmd, + nlohmann::ordered_json& json_entry) +{ + GFXRECON_ASSERT(cmd.type == DumpResourceType::kCopyImageToBuffer); + + const auto* copy_image_to_buffer = std::get_if(&cmd.dumped_resource); + GFXRECON_ASSERT(copy_image_to_buffer != nullptr); + + auto& src_image_json_entry = json_entry["srcImage"]; + GenerateOutputJsonTransferImage(src_image_json_entry, copy_image_to_buffer->src_image); + + json_entry["dstBuffer"] = copy_image_to_buffer->dst_buffer; + + auto& regions_entries = json_entry["regions"]; + for (size_t i = 0; i < copy_image_to_buffer->regions.size(); ++i) { - for (const auto& [desc_set_index, desc_set_info] : referenced_descriptors) - { - for (const auto& [desc_binding_index, desc_binding_info] : desc_set_info) - { - std::vector shader_stages_names; - ShaderStageFlagsToStageNames(desc_binding_info.stage_flags, shader_stages_names); + const auto& region = copy_image_to_buffer->regions[i]; + auto& region_entry = regions_entries[i]; - for (const std::string& stage_name : shader_stages_names) - { - switch (desc_binding_info.desc_type) - { - case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: - case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: - case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: - { - for (const auto& img_desc : desc_binding_info.image_info) - { - if (img_desc.second.image_view_info == nullptr) - { - continue; - } - - const VulkanImageInfo* img_info = draw_call_info.object_info_table->GetVkImageInfo( - img_desc.second.image_view_info->image_id); - if (img_info == nullptr) - { - continue; - } - - uint32_t& stage_entry_index = per_stage_json_entry_indices[stage_name]; - auto& entry = dispatch_json_entry["descriptors"][stage_name][stage_entry_index++]; - - entry["type"] = util::ToString(desc_binding_info.desc_type); - entry["set"] = desc_set_index; - entry["binding"] = desc_binding_index; - entry["arrayIndex"] = img_desc.first; - entry["imageId"] = img_info->capture_id; - entry["format"] = util::ToString(img_info->format); - entry["imageType"] = util::ToString(img_info->type); - - if (ImageFailedScaling(img_info)) - { - entry["scaleFailed"] = true; - } - - std::vector aspects; - GetFormatAspects(img_info->format, aspects); - - size_t subresource_entry = 0; - for (auto aspect : aspects) - { - for (uint32_t mip = 0; mip < img_info->level_count; ++mip) - { - for (uint32_t layer = 0; layer < img_info->layer_count; ++layer) - { - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kDispatchTraceRaysImageDescriptor; - res_info.image_info = img_info; - - std::string filename = GenerateDispatchTraceRaysImageDescriptorFilename( - res_info, mip, layer, aspect); - - const VkExtent3D extent = { std::max(1u, img_info->extent.width >> mip), - std::max(1u, img_info->extent.height >> mip), - img_info->extent.depth }; - - auto& subresource_json_entry = entry["subresources"]; - dump_json_.InsertImageSubresourceInfo( - subresource_json_entry[subresource_entry++], - img_info->format, - img_info->type, - img_info->capture_id, - extent, - filename, - aspect, - mip, - layer, - options_.dump_resources_dump_separate_alpha); - - if (!options_.dump_resources_dump_all_image_subresources) - { - break; - } - } - - if (!options_.dump_resources_dump_all_image_subresources) - { - break; - } - } - } - } - } - break; + region_entry["bufferOffset"] = region.region.bufferOffset; + region_entry["bufferRowLength"] = region.region.bufferRowLength; + region_entry["bufferImageHeight"] = region.region.bufferImageHeight; - case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: - { - for (const auto& buf_desc : desc_binding_info.texel_buffer_view_info) - { - const auto buffer_info = object_info_table_.GetVkBufferInfo(buf_desc.second->buffer_id); - if (buffer_info != nullptr) - { - uint32_t& stage_entry_index = per_stage_json_entry_indices[stage_name]; - auto& entry = dispatch_json_entry["descriptors"][stage_name][stage_entry_index++]; - - entry["type"] = util::ToString(desc_binding_info.desc_type); - entry["set"] = desc_set_index; - entry["binding"] = desc_binding_index; - entry["arrayIndex"] = buf_desc.first; - entry["bufferId"] = buffer_info->capture_id; - - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kDispatchTraceRaysBufferDescriptor; - res_info.buffer_info = buffer_info; - - entry["file"] = GenerateDispatchTraceRaysBufferDescriptorFilename(res_info); - } - } - } - break; + auto& img_subresource_entry = region_entry["imageSubresource"]; + img_subresource_entry["aspectMask"] = region.region.imageSubresource.aspectMask; + img_subresource_entry["mipLevel"] = region.region.imageSubresource.mipLevel; + img_subresource_entry["baseArrayLayer"] = region.region.imageSubresource.baseArrayLayer; + img_subresource_entry["layerCount"] = region.region.imageSubresource.layerCount; - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: - { - for (const auto& buf_desc : desc_binding_info.buffer_info) - { - if (buf_desc.second.buffer_info != nullptr) - { - uint32_t& stage_entry_index = per_stage_json_entry_indices[stage_name]; - auto& entry = dispatch_json_entry["descriptors"][stage_name][stage_entry_index++]; - - entry["type"] = util::ToString(desc_binding_info.desc_type); - entry["set"] = desc_set_index; - entry["binding"] = desc_binding_index; - entry["arrayIndex"] = buf_desc.first; - entry["bufferId"] = buf_desc.second.buffer_info->capture_id; - - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kDispatchTraceRaysBufferDescriptor; - res_info.buffer_info = buf_desc.second.buffer_info; - - entry["file"] = GenerateDispatchTraceRaysBufferDescriptorFilename(res_info); - } - } - } - break; + auto& image_offset = region_entry["imageOffset"]; + image_offset["x"] = region.region.imageOffset.x; + image_offset["y"] = region.region.imageOffset.y; + image_offset["z"] = region.region.imageOffset.z; - case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: - case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: - case VK_DESCRIPTOR_TYPE_SAMPLER: - case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: - break; + auto& image_extent = region_entry["imageExtent"]; + image_extent["width"] = region.region.imageExtent.width; + image_extent["height"] = region.region.imageExtent.height; + image_extent["depth"] = region.region.imageExtent.depth; - case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK: - { - uint32_t& stage_entry_index = per_stage_json_entry_indices[stage_name]; - auto& entry = dispatch_json_entry["descriptors"][stage_name][stage_entry_index++]; - - entry["type"] = util::ToString(desc_binding_info.desc_type); - entry["set"] = desc_set_index; - entry["binding"] = desc_binding_index; - entry["size"] = desc_binding_info.inline_uniform_block.size(); - - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kDispatchTraceRaysInlineUniformBufferDescriptor; - res_info.set = desc_set_index; - res_info.binding = desc_binding_index; - - const std::string filename = - GenerateDispatchTraceRaysInlineUniformBufferDescriptorFilename(res_info); - entry["file"] = filename; - } - break; - - default: - GFXRECON_LOG_WARNING_ONCE( - "%s(): Descriptor type (%s) not handled", - __func__, - util::ToString(desc_binding_info.desc_type).c_str()); - break; - } - } - } + dump_json_.InsertBufferInfo(region_entry, region.dumped_buffer); + + if (cmd.has_before) + { + const auto* copy_buffer_before = std::get_if(&cmd.dumped_resource_before); + GFXRECON_ASSERT(copy_buffer_before != nullptr); + dump_json_.InsertBeforeBufferInfo(region_entry, copy_buffer_before->regions[i].dumped_buffer); } } } -void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonDispatchInfo( - const VulkanDumpDrawCallInfo& draw_call_info, const graphics::VulkanInstanceTable* instance_table) +void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonBlitImageCommand(const DumpedTransferCommand& cmd, + nlohmann::ordered_json& json_entry) { - if (draw_call_info.disp_param == nullptr) - { - return; - } + GFXRECON_ASSERT(cmd.type == DumpResourceType::kBlitImage); - if (options_.dump_resources_json_per_command) - { - std::stringstream filename; - filename << "Dispatch_" << draw_call_info.cmd_index << "_qs_" << draw_call_info.qs_index << "_bcb_" - << draw_call_info.bcb_index << "_dr.json"; - std::filesystem::path filedirname(options_.dump_resources_output_dir); - std::filesystem::path filebasename(filename.str()); - std::string full_filename = (filedirname / filebasename).string(); + const auto* blit_image = std::get_if(&cmd.dumped_resource); + GFXRECON_ASSERT(blit_image != nullptr); - dump_json_.Open(full_filename); - dump_json_.BlockStart(); - } + auto& src_image_json_entry = json_entry["srcImage"]; + GenerateOutputJsonTransferImage(src_image_json_entry, blit_image->src_image); - auto& current_block = dump_json_.GetCurrentSubEntry(); - auto& dispatch_json_entries = - !options_.dump_resources_json_per_command ? current_block["dispatchCommands"] : dump_json_.GetData(); + auto& dst_image_json_entry = json_entry["dstImage"]; + GenerateOutputJsonTransferImage(dst_image_json_entry, blit_image->dst_image); - const uint32_t dispatch_json_entry_index = dump_json_.FetchAndAddDispatchEntryIndex(); - auto& dispatch_json_entry = !options_.dump_resources_json_per_command - ? dispatch_json_entries[dispatch_json_entry_index] - : dump_json_.GetData(); + json_entry["filter"] = util::ToString(blit_image->filter); - if (options_.using_dump_resources_target) + auto& regions_entries = json_entry["regions"]; + for (size_t i = 0; i < blit_image->regions.size(); ++i) { - dispatch_json_entry["queueSubmitCallIndex"] = options_.dump_resources_target.submit_index; - dispatch_json_entry["commandBufferCallIndex"] = options_.dump_resources_target.command_index; - dispatch_json_entry["drawCallIndex"] = options_.dump_resources_target.draw_call_index; + const auto& region = blit_image->regions[i]; + auto& region_entry = regions_entries[i]; + auto& src_subresource = region_entry["srcSubresource"]; + src_subresource["aspectMask"] = + util::ToString(static_cast(region.region.srcSubresource.aspectMask)); + src_subresource["mipLevel"] = region.region.srcSubresource.mipLevel; + src_subresource["baseArrayLayer"] = region.region.srcSubresource.baseArrayLayer; + src_subresource["layerCount"] = region.region.srcSubresource.layerCount; + + auto& srcOffsets = region_entry["srcOffset"]; + srcOffsets["[0].x"] = region.region.srcOffsets[0].x; + srcOffsets["[0].y"] = region.region.srcOffsets[0].y; + srcOffsets["[0].z"] = region.region.srcOffsets[0].z; + srcOffsets["[1].x"] = region.region.srcOffsets[1].x; + srcOffsets["[1].y"] = region.region.srcOffsets[1].y; + srcOffsets["[1].z"] = region.region.srcOffsets[1].z; + + auto& dst_subresource = region_entry["dstSubresource"]; + dst_subresource["aspectMask"] = + util::ToString(static_cast(region.region.dstSubresource.aspectMask)); + dst_subresource["mipLevel"] = region.region.dstSubresource.mipLevel; + dst_subresource["baseArrayLayer"] = region.region.dstSubresource.baseArrayLayer; + dst_subresource["layerCount"] = region.region.dstSubresource.layerCount; + + auto& dstOffsets = region_entry["dstOffset"]; + dstOffsets["[0].x"] = region.region.dstOffsets[0].x; + dstOffsets["[0].y"] = region.region.dstOffsets[0].y; + dstOffsets["[0].z"] = region.region.dstOffsets[0].z; + dstOffsets["[1].x"] = region.region.dstOffsets[1].x; + dstOffsets["[1].y"] = region.region.dstOffsets[1].y; + dstOffsets["[1].z"] = region.region.dstOffsets[1].z; + + auto& subresource_json_entry = region_entry["subresources"]; + for (size_t sr = 0; sr < region.dumped_image.dumped_subresources.size(); ++sr) + { + const auto& dumped_image_sub_resource = region.dumped_image.dumped_subresources[sr]; + dump_json_.InsertImageSubresourceInfo(subresource_json_entry[sr], + dumped_image_sub_resource, + region.dumped_image.image_info->format, + options_.dump_resources_dump_separate_alpha, + region.dumped_image.dumped_raw); + + if (cmd.has_before) + { + const auto* copy_image_before = std::get_if(&cmd.dumped_resource_before); + GFXRECON_ASSERT(copy_image_before != nullptr); + const auto& region_before = copy_image_before->regions[i]; + const auto& dumped_image_sub_resource_before = region_before.dumped_image.dumped_subresources[sr]; + dump_json_.InsertBeforeImageSubresourceInfo(subresource_json_entry[sr], + dumped_image_sub_resource_before, + region_before.dumped_image.image_info->format, + options_.dump_resources_dump_separate_alpha, + region_before.dumped_image.dumped_raw); + } + } } +} + +void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonBuildAccelerationStructuresCommand( + const DumpedTransferCommand& cmd, nlohmann::ordered_json& json_entry) +{ + GFXRECON_ASSERT(cmd.type == DumpResourceType::kBuildAccelerationStructure); - dispatch_json_entry["dispatchIndex"] = draw_call_info.cmd_index; - dispatch_json_entry["beginCommandBufferIndex"] = draw_call_info.bcb_index; - dispatch_json_entry["queueSubmitIndex"] = draw_call_info.qs_index; + const auto* dumped_build_as = std::get_if(&cmd.dumped_resource); + GFXRECON_ASSERT(dumped_build_as != nullptr); - auto& params_json_entries = dispatch_json_entry["parameters"]; - params_json_entries["dispatchType"] = - DispatchTraceRaysDumpingContext::DispatchTypeToStr(draw_call_info.disp_param->type); - switch (draw_call_info.disp_param->type) + auto& builds_entries = json_entry["builds"]; + for (size_t i = 0; i < dumped_build_as->dumped_build_infos.size(); ++i) { - case DispatchTraceRaysDumpingContext::DispatchTypes::kDispatch: + const auto& build_info = dumped_build_as->dumped_build_infos[i]; + builds_entries[i]["srcAccelerationStructure"] = build_info.src_as; + builds_entries[i]["dstAccelerationStructure"] = build_info.dst_as; + builds_entries[i]["mode"] = util::ToString(static_cast(build_info.mode)); + builds_entries[i]["dstAccelerationStructureType"] = + util::ToString(build_info.dumped_as.as_info->type); + + auto& as_content_entries = builds_entries[i]["asContent"]; + if (build_info.dumped_as.as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR) { - const auto& ds_params = draw_call_info.disp_param->dispatch_params_union.dispatch; - - params_json_entries["groupCountX"] = ds_params.groupCountX; - params_json_entries["groupCountY"] = ds_params.groupCountY; - params_json_entries["groupCountZ"] = ds_params.groupCountZ; + GenerateTLASJsonInfo(as_content_entries, build_info.dumped_as); } - break; - - case DispatchTraceRaysDumpingContext::DispatchTypes::kDispatchIndirect: + else if (build_info.dumped_as.as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR) { - const auto& ds_params = draw_call_info.disp_param->dispatch_params_union.dispatch_indirect; - - assert(ds_params.dispatch_params != nullptr); - params_json_entries["groupCountX"] = ds_params.dispatch_params->groupCountX; - params_json_entries["groupCountY"] = ds_params.dispatch_params->groupCountY; - params_json_entries["groupCountZ"] = ds_params.dispatch_params->groupCountZ; + GenerateBLASJsonInfo(as_content_entries, build_info.dumped_as); } - break; - - case DispatchTraceRaysDumpingContext::DispatchTypes::kDispatchBase: + else { - const auto& ds_params = draw_call_info.disp_param->dispatch_params_union.dispatch_base; - - params_json_entries["baseGroupX"] = ds_params.baseGroupX; - params_json_entries["baseGroupY"] = ds_params.baseGroupY; - params_json_entries["baseGroupZ"] = ds_params.baseGroupZ; - params_json_entries["groupCountX"] = ds_params.groupCountX; - params_json_entries["groupCountY"] = ds_params.groupCountY; - params_json_entries["groupCountZ"] = ds_params.groupCountZ; + GFXRECON_LOG_ERROR( + "%s() Unhandled AS type %d", __func__, static_cast(build_info.dumped_as.as_info->type)); + GFXRECON_ASSERT(0); } - break; - - default: - assert(0); } +} - GenerateDispatchTraceRaysDescriptorsJsonInfo(draw_call_info, - dispatch_json_entry, - draw_call_info.disp_param->referenced_descriptors, - draw_call_info.disp_param->mutable_resources_clones, - draw_call_info.disp_param->mutable_resources_clones_before, - true); +void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonCopyAccelerationStructureCommand( + const DumpedTransferCommand& cmd, nlohmann::ordered_json& json_entry) +{ + GFXRECON_ASSERT(cmd.type == DumpResourceType::kCopyAccelerationStructure); - if (options_.dump_resources_json_per_command) + const auto* dumped_copy_as = std::get_if(&cmd.dumped_resource); + GFXRECON_ASSERT(dumped_copy_as != nullptr); + + auto& copy_info_entries = json_entry["copyInfo"]; + copy_info_entries["src"] = dumped_copy_as->dumped_copy_info.src_as; + copy_info_entries["dst"] = dumped_copy_as->dumped_copy_info.dst_as; + copy_info_entries["mode"] = + util::ToString(static_cast(dumped_copy_as->dumped_copy_info.mode)); + + auto& as_content_entries = copy_info_entries["asContent"]; + if (dumped_copy_as->dumped_copy_info.dumped_as.as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR) { - dump_json_.BlockEnd(); - dump_json_.Close(); + GenerateTLASJsonInfo(as_content_entries, dumped_copy_as->dumped_copy_info.dumped_as); } -} - -void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonTraceRaysIndex( - const VulkanDumpDrawCallInfo& draw_call_info, const graphics::VulkanInstanceTable* instance_table) -{ - if (draw_call_info.tr_param == nullptr) + else if (dumped_copy_as->dumped_copy_info.dumped_as.as_info->type == + VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR) { - return; + GenerateBLASJsonInfo(as_content_entries, dumped_copy_as->dumped_copy_info.dumped_as); } - auto& current_block = dump_json_.GetCurrentSubEntry(); + else + { + GFXRECON_LOG_ERROR("%s() Unhandled AS type %d", + __func__, + static_cast(dumped_copy_as->dumped_copy_info.dumped_as.as_info->type)); + GFXRECON_ASSERT(0); + } +} - auto& tr_json_entries = - (!options_.dump_resources_json_per_command) ? current_block["traceRaysCommands"] : dump_json_.GetData(); +void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonTransferInfo( + const VulkanDelegateDumpDrawCallContext& draw_call_info) +{ + const TransferDumpingContext::TransferParams* transfer_cmd_params = + std::get(draw_call_info.command_parameters); + GFXRECON_ASSERT(transfer_cmd_params != nullptr); + const DumpedResourcesInfo& dumped_resources = transfer_cmd_params->params->dumped_resources; if (options_.dump_resources_json_per_command) { std::stringstream filename; - filename << "TraceRays_" << draw_call_info.cmd_index << "_qs_" << draw_call_info.qs_index << "_bcb_" - << draw_call_info.bcb_index << "_dr.json"; + filename << capture_filename_ << "_"; + filename << "transfer_" << dumped_resources.cmd_index << "_qs_" << dumped_resources.qs_index << "_cmd_" + << dumped_resources.cmd_index << "_dr.json"; + std::filesystem::path filedirname(options_.dump_resources_output_dir); std::filesystem::path filebasename(filename.str()); std::string full_filename = (filedirname / filebasename).string(); @@ -1866,68 +2640,68 @@ void DefaultVulkanDumpResourcesDelegate::GenerateOutputJsonTraceRaysIndex( dump_json_.BlockStart(); } - const uint32_t trace_rays_json_entry_index = dump_json_.FetchAndAddTraceRaysEntryIndex(); - auto& tr_entry = - !options_.dump_resources_json_per_command ? tr_json_entries[trace_rays_json_entry_index] : dump_json_.GetData(); + auto& current_block = dump_json_.GetCurrentSubEntry(); + auto& transfer_json_entries = + !options_.dump_resources_json_per_command ? current_block["transferCommands"] : current_block; - if (options_.using_dump_resources_target) - { - tr_entry["queueSubmitCallIndex"] = options_.dump_resources_target.submit_index; - tr_entry["commandBufferCallIndex"] = options_.dump_resources_target.command_index; - tr_entry["drawCallIndex"] = options_.dump_resources_target.draw_call_index; - } + const uint32_t transfer_json_entry = dump_json_.FetchAndAddTransferEntryIndex(); + auto& transfer_entry = + !options_.dump_resources_json_per_command ? transfer_json_entries[transfer_json_entry] : transfer_json_entries; - tr_entry["traceRaysIndex"] = draw_call_info.cmd_index; - tr_entry["beginCommandBufferIndex"] = draw_call_info.bcb_index; - tr_entry["queueSubmitIndex"] = draw_call_info.qs_index; + transfer_entry["cmdType"] = TransferDumpingContext::TransferCommandTypeToStr(transfer_cmd_params->params->type); + transfer_entry["cmdIndex"] = dumped_resources.cmd_index; + transfer_entry["beginCommandBufferIndex"] = dumped_resources.bcb_index; + transfer_entry["queueSubmitIndex"] = dumped_resources.qs_index; - auto& params_json_entries = tr_entry["parameters"]; - params_json_entries["traceRaysType"] = - DispatchTraceRaysDumpingContext::TraceRaysTypeToStr(draw_call_info.tr_param->type); + auto& transf_params_json_entry = transfer_entry["parameters"]; - switch (draw_call_info.tr_param->type) + GFXRECON_ASSERT(dumped_resources.dumped_transfer_command); + auto& cmd = dumped_resources.dumped_transfer_command; + switch (transfer_cmd_params->params->type) { - case DispatchTraceRaysDumpingContext::TraceRaysTypes::kTraceRays: - { - const auto& params = draw_call_info.tr_param->trace_rays_params_union.trace_rays; + case TransferDumpingContext::TransferCommandTypes::kCmdInitBuffer: + GenerateOutputJsonInitBufferCommand(*cmd, transf_params_json_entry); + break; - params_json_entries["width"] = params.width; - params_json_entries["height"] = params.height; - params_json_entries["depth"] = params.depth; - } - break; + case TransferDumpingContext::TransferCommandTypes::kCmdInitImage: + GenerateOutputJsonInitImageCommand(*cmd, transf_params_json_entry); + break; - case DispatchTraceRaysDumpingContext::TraceRaysTypes::kTraceRaysIndirect: - { - const auto& params = draw_call_info.tr_param->trace_rays_params_union.trace_rays_indirect; + case TransferDumpingContext::TransferCommandTypes::kCmdCopyBuffer: + GenerateOutputJsonCopyBufferCommand(*cmd, transf_params_json_entry); + break; - params_json_entries["width"] = params.trace_rays_params.width; - params_json_entries["height"] = params.trace_rays_params.height; - params_json_entries["depth"] = params.trace_rays_params.depth; - } - break; + case TransferDumpingContext::TransferCommandTypes::kCmdCopyBufferToImage: + GenerateOutputJsonCopyBufferToImageCommand(*cmd, transf_params_json_entry); + break; - case DispatchTraceRaysDumpingContext::TraceRaysTypes::kTraceRaysIndirect2: - { - const auto& params = draw_call_info.tr_param->trace_rays_params_union.trace_rays_indirect2; + case TransferDumpingContext::TransferCommandTypes::kCmdCopyImage: + GenerateOutputJsonCopyImageCommand(*cmd, transf_params_json_entry); + break; - params_json_entries["width"] = params.trace_rays_params.width; - params_json_entries["height"] = params.trace_rays_params.height; - params_json_entries["depth"] = params.trace_rays_params.depth; - } - break; + case TransferDumpingContext::TransferCommandTypes::kCmdCopyImageToBuffer: + GenerateOutputJsonCopyImageToBufferCommand(*cmd, transf_params_json_entry); + break; + + case TransferDumpingContext::TransferCommandTypes::kCmdBlitImage: + GenerateOutputJsonBlitImageCommand(*cmd, transf_params_json_entry); + break; + + case TransferDumpingContext::TransferCommandTypes::kCmdBuildAccelerationStructures: + GenerateOutputJsonBuildAccelerationStructuresCommand(*cmd, transf_params_json_entry); + break; + + case TransferDumpingContext::TransferCommandTypes::kCmdCopyAccelerationStructure: + GenerateOutputJsonCopyAccelerationStructureCommand(*cmd, transf_params_json_entry); + break; default: - assert(0); + GFXRECON_LOG_WARNING("%s(): Transfer command type %d not handled", + __func__, + static_cast(transfer_cmd_params->params->type)); + GFXRECON_ASSERT(0); } - GenerateDispatchTraceRaysDescriptorsJsonInfo(draw_call_info, - tr_entry, - draw_call_info.tr_param->referenced_descriptors, - draw_call_info.tr_param->mutable_resources_clones, - draw_call_info.tr_param->mutable_resources_clones_before, - false); - if (options_.dump_resources_json_per_command) { dump_json_.BlockEnd(); diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_delegate.h b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_delegate.h index 26e964ecc..da56e4a61 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_delegate.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_delegate.h @@ -23,81 +23,158 @@ #ifndef GFXRECON_VULKAN_REPLAY_DUMP_RESOURCES_DELEGATE_H #define GFXRECON_VULKAN_REPLAY_DUMP_RESOURCES_DELEGATE_H -#include "decode/vulkan_object_info.h" #include "decode/vulkan_replay_dump_resources_draw_calls.h" #include "decode/vulkan_replay_dump_resources_compute_ray_tracing.h" +#include "decode/vulkan_replay_dump_resources_transfer.h" #include "decode/vulkan_replay_dump_resources_json.h" +#include "format/format.h" +#include "util/compressor.h" +#include "util/logging.h" + +#include +#include +#include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) -struct VulkanDumpDrawCallInfo +struct VulkanDelegateDumpDrawCallContext { - DumpResourceType type{ DumpResourceType::kUnknown }; + VulkanDelegateDumpDrawCallContext(DumpResourcesPipelineStage t, + const graphics::VulkanInstanceTable* it, + const graphics::VulkanDeviceTable* dt, + const DrawCallsDumpingContext::DrawCallParams* dc_params) : + command_type(t), + instance_table(it), device_table(dt), command_parameters(dc_params) + { + GFXRECON_ASSERT(t == DumpResourcesPipelineStage::kGraphics); + } + + VulkanDelegateDumpDrawCallContext(DumpResourcesPipelineStage t, + const graphics::VulkanInstanceTable* it, + const graphics::VulkanDeviceTable* dt, + const DispatchTraceRaysDumpingContext::DispatchParams* disp_params) : + command_type(t), + instance_table(it), device_table(dt), command_parameters(disp_params) + { + GFXRECON_ASSERT(t == DumpResourcesPipelineStage::kCompute); + } + + VulkanDelegateDumpDrawCallContext(DumpResourcesPipelineStage t, + const graphics::VulkanInstanceTable* it, + const graphics::VulkanDeviceTable* dt, + const DispatchTraceRaysDumpingContext::TraceRaysParams* tr_params) : + command_type(t), + instance_table(it), device_table(dt), command_parameters(tr_params) + { + GFXRECON_ASSERT(t == DumpResourcesPipelineStage::kRayTracing); + } + + VulkanDelegateDumpDrawCallContext(DumpResourcesPipelineStage t, + const graphics::VulkanInstanceTable* it, + const graphics::VulkanDeviceTable* dt, + const TransferDumpingContext::TransferParams* tr_params) : + command_type(t), + instance_table(it), device_table(dt), command_parameters(tr_params) + { + GFXRECON_ASSERT(t == DumpResourcesPipelineStage::kTransfer); + } + DumpResourcesPipelineStage command_type; const graphics::VulkanInstanceTable* instance_table; const graphics::VulkanDeviceTable* device_table; - CommonObjectInfoTable* object_info_table; - const VulkanDeviceInfo* device_info; - const VulkanCommandBufferInfo* original_command_buffer_info; - uint64_t cmd_index; // dc_index, disp_index, tr_index - uint64_t qs_index; // queue submit - uint64_t bcb_index; // begin command buffer + std::variant + command_parameters; +}; + +struct VulkanDelegateBufferDumpedData +{ + VulkanDelegateBufferDumpedData() = default; - uint64_t rp; // render pass - uint64_t sp; // subpass - const DrawCallsDumpingContext::DrawCallParams* dc_param; // draw call - const DrawCallsDumpingContext::RenderTargets* render_targets; + DumpedHostData data; +}; - const DispatchTraceRaysDumpingContext::DispatchParams* disp_param; // dispatch +struct VulkanDelegateImageDumpedData +{ + VulkanDelegateImageDumpedData() = default; - const DispatchTraceRaysDumpingContext::TraceRaysParams* tr_param; // trace rays + DumpedImageHostData data; }; -struct VulkanDumpResourceInfo +struct VulkanDelegateAccelerationStructureDumpedData { - DumpResourceType type{ DumpResourceType::kUnknown }; + VulkanDelegateAccelerationStructureDumpedData() = default; - const graphics::VulkanInstanceTable* instance_table; - const graphics::VulkanDeviceTable* device_table; - CommonObjectInfoTable* object_info_table; - const VulkanDeviceInfo* device_info; - const VulkanCommandBufferInfo* original_command_buffer_info; + AccelerationStructureDumpedHostData data; +}; - uint64_t cmd_index; // dc_index, disp_index, tr_index - uint64_t qs_index; // queue submit - uint64_t bcb_index; // begin command buffer +struct VulkanDelegateDumpedCopyBufferRegions +{ + DumpedCopyBufferRegionsHostData regions_data; +}; - uint64_t rp; // render pass - uint64_t sp; // subpass +struct VulkanDelegateDumpedCopyImageRegions +{ + DumpedCopyImageRegionsHostData regions_data; +}; + +struct VulkanDelegateDumpedBuildAccelerationStructures +{ + std::vector data; +}; + +struct VulkanDelegateDumpedCopyAccelerationStructure +{ + AccelerationStructureDumpedHostData data; +}; + +struct VulkanDelegateTransferCommandDumpedData +{ + std::variant + dumped_data; +}; + +struct VulkanDelegateDumpResourceContext +{ + VulkanDelegateDumpResourceContext() = delete; + + VulkanDelegateDumpResourceContext(const graphics::VulkanInstanceTable* it, + const graphics::VulkanDeviceTable* dt, + const util::Compressor* c = nullptr, + bool bc = false) : + instance_table(it), + device_table(dt), compressor(c), before_command(bc), dumped_resource(nullptr) + {} + + const graphics::VulkanInstanceTable* instance_table; + const graphics::VulkanDeviceTable* device_table; - const VulkanImageInfo* image_info; - const VulkanBufferInfo* buffer_info; - std::vector data; + const util::Compressor* compressor; + bool before_command; - uint32_t set; - uint32_t binding; - VkIndexType index_type; - int attachment_index; + DumpedResourceBase* dumped_resource; - bool is_dispatch; - bool before_cmd; - uint32_t array_index; - VkShaderStageFlags stages; + std::variant + dumped_data; - VulkanDumpResourceInfo& operator=(const VulkanDumpDrawCallInfo& draw_call_info) + VulkanDelegateDumpResourceContext& operator=(const VulkanDelegateDumpDrawCallContext& draw_call_info) { - instance_table = draw_call_info.instance_table; - device_table = draw_call_info.device_table; - object_info_table = draw_call_info.object_info_table; - device_info = draw_call_info.device_info; - original_command_buffer_info = draw_call_info.original_command_buffer_info; - cmd_index = draw_call_info.cmd_index; - qs_index = draw_call_info.qs_index; - bcb_index = draw_call_info.bcb_index; - rp = draw_call_info.rp; - sp = draw_call_info.sp; + instance_table = draw_call_info.instance_table; + device_table = draw_call_info.device_table; return *this; } }; @@ -108,18 +185,28 @@ class VulkanDumpResourcesDelegate VulkanDumpResourcesDelegate(const VulkanReplayOptions& options, const std::string capture_filename) {} virtual ~VulkanDumpResourcesDelegate() {} - virtual bool Open() = 0; - virtual void DumpDrawCallInfo(const VulkanDumpDrawCallInfo& draw_call_info, - const graphics::VulkanInstanceTable* instance_table) = 0; - virtual void DumpStart() = 0; - virtual VkResult DumpResource(const VulkanDumpResourceInfo& resource_info) = 0; - virtual void DumpEnd() = 0; - virtual void Close() = 0; + virtual bool Open() = 0; + virtual void DumpDrawCallInfo(const VulkanDelegateDumpDrawCallContext& draw_call_info) = 0; + virtual void DumpStart() = 0; + virtual bool DumpResource(const VulkanDelegateDumpResourceContext& delegate_context) = 0; + virtual void DumpEnd() = 0; + virtual void Close() = 0; }; class DefaultVulkanDumpResourcesDelegate : public VulkanDumpResourcesDelegate { public: + typedef std::string (DefaultVulkanDumpResourcesDelegate::*BufferFilenameGenerator)( + const DumpedResourceBase& dumped_resource, bool before_command) const; + + typedef std::string (DefaultVulkanDumpResourcesDelegate::*ImageFilenameGenerator)( + const DumpedResourceBase& dumped_resource, + DumpedImageFormat output_image_format, + VkImageAspectFlagBits aspect, + uint32_t mip_level, + uint32_t layer, + bool before_command) const; + DefaultVulkanDumpResourcesDelegate(const VulkanReplayOptions& options, CommonObjectInfoTable& object_info_table, const std::string capture_filename) : @@ -134,101 +221,167 @@ class DefaultVulkanDumpResourcesDelegate : public VulkanDumpResourcesDelegate return dump_json_.Open(options_.capture_filename, options_.dump_resources_output_dir); } - virtual void DumpDrawCallInfo(const VulkanDumpDrawCallInfo& draw_call_info, - const graphics::VulkanInstanceTable* instance_table) override; + virtual void DumpDrawCallInfo(const VulkanDelegateDumpDrawCallContext& draw_call_info) override; virtual void DumpStart() override { dump_json_.BlockStart(); } - virtual VkResult DumpResource(const VulkanDumpResourceInfo& resource_info) override; + virtual bool DumpResource(const VulkanDelegateDumpResourceContext& delegate_context) override; virtual void DumpEnd() override { dump_json_.BlockEnd(); } virtual void Close() override { dump_json_.Close(); } private: - // DrawCallsDumpingContext - VkResult DumpRenderTargetImage(const VulkanDumpResourceInfo& resource_info); + // Images + bool DumpImageToFile(const VulkanDelegateDumpResourceContext& delegate_context); + + bool DumpImageToFile(DumpedResourceBase* dumped_resource, + DumpedImage& dumped_image, + const DumpedImageHostData& image_dumped_data, + ImageFilenameGenerator filename_generator, + bool before_command, + const util::Compressor* compressor); + + // Image filename generators + std::string GenerateRenderTargetImageFilename(const DumpedResourceBase& dumped_resource, + DumpedImageFormat output_image_format, + VkImageAspectFlagBits aspect, + uint32_t mip_level, + uint32_t layer, + bool before_command) const; + + std::string GenerateGraphicsImageDescriptorFilename(const DumpedResourceBase& dumped_resource, + DumpedImageFormat output_image_format, + VkImageAspectFlagBits aspect, + uint32_t mip_level, + uint32_t layer, + bool before_command) const; + + std::string GenerateDispatchTraceRaysImageFilename(const DumpedResourceBase& dumped_resource, + DumpedImageFormat output_image_format, + VkImageAspectFlagBits aspect, + uint32_t mip_level, + uint32_t layer, + bool before_command) const; + + std::string GenerateDispatchTraceRaysImageDescriptorFilename(const DumpedResourceBase& dumped_resource, + DumpedImageFormat output_image_format, + VkImageAspectFlagBits aspect, + uint32_t mip_level, + uint32_t layer, + bool before_command) const; + + // Buffers + bool DumpBufferToFile(const VulkanDelegateDumpResourceContext& delegate_context); + + // Buffer filename generators + std::string GenerateGraphicsBufferDescriptorFilename(const DumpedResourceBase& dumped_resource, + bool before_command) const; + + std::string GenerateDispatchTraceRaysBufferDescriptorFilename(const DumpedResourceBase& dumped_resource, + bool before_command) const; - std::string GenerateRenderTargetImageFilename(const VulkanDumpResourceInfo& resource_info, - VkImageAspectFlagBits aspect, - uint32_t mip_level, - uint32_t layer) const; + std::string + GenerateDispatchTraceRaysInlineUniformBufferDescriptorFilename(const DumpedResourceBase& dumped_resource, + bool before_command) const; - VkResult DumpImageDescriptor(const VulkanDumpResourceInfo& resource_info); + std::string GenerateGraphicsInlineUniformBufferDescriptorFilename(const DumpedResourceBase& dumped_resource, + bool before_command) const; - std::string GenerateImageDescriptorFilename(const VulkanDumpResourceInfo& resource_info, - VkImageAspectFlagBits aspect, - uint32_t mip_level, - uint32_t layer) const; + std::string GenerateDispatchTraceRaysBufferFilename(const DumpedResourceBase& dumped_resource, + bool before_command) const; - VkResult DumpBufferDescriptor(const VulkanDumpResourceInfo& resource_info); + std::string GenerateVertexBufferFilename(const DumpedResourceBase& dumped_resource, bool before_command) const; - std::string GenerateBufferDescriptorFilename(const VulkanDumpResourceInfo& resource_info) const; + std::string GenerateIndexBufferFilename(const DumpedResourceBase& dumped_resource, bool before_command) const; - VkResult DumpInlineUniformBufferDescriptor(const VulkanDumpResourceInfo& resource_info); + // Acceleration structures + bool DumpAccelerationStructureToFile(const VulkanDelegateDumpResourceContext& delegate_context); - std::string GenerateInlineUniformBufferDescriptorFilename(const VulkanDumpResourceInfo& resource_info) const; + bool DumpTLASToFile(const DumpedResourceBase& dumped_resource, + DumpedAccelerationStructure& dumped_tlas, + const AccelerationStructureDumpedHostData& dumped_tlas_data, + bool before_command, + const util::Compressor* compressor); - VkResult DumpVertexBuffer(const VulkanDumpResourceInfo& resource_info); + bool DumpBLASToFile(const DumpedResourceBase& dumped_resource, + DumpedAccelerationStructure& dumped_blas, + const AccelerationStructureDumpedHostData& dumped_blas_data, + bool before_command, + const util::Compressor* compressor); - std::string GenerateVertexBufferFilename(const VulkanDumpResourceInfo& resource_info) const; + enum class AccelerationStructureDumpedBufferType + { + kInstance, + kVertex, + kIndex, + kAABB, + kTransform, + kSerializedBlas, + kSerializedTlas + }; - VkResult DumpIndexBuffer(const VulkanDumpResourceInfo& resource_info); + std::string GenerateASDumpedBufferFilename(const DumpedResourceBase& resource_info, + format::HandleId handle_id, + AccelerationStructureDumpedBufferType type, + DumpResourcesPipelineStage dumped_command_type, + bool before_command, + uint32_t buffer_index = std::numeric_limits::max()); - std::string GenerateIndexBufferFilename(const VulkanDumpResourceInfo& resource_info) const; + // Transfer + bool DumpTransferCommandToFile(const VulkanDelegateDumpResourceContext& delegate_context); - void GenerateOutputJsonDrawCallInfo(const VulkanDumpDrawCallInfo& draw_call_info, - const graphics::VulkanInstanceTable* instance_table); + static constexpr uint32_t NO_INDEX = std::numeric_limits::max(); + std::string GenerateTransferToBufferRegionFilename(const DumpedResourceBase& dumped_resource, + bool before_command, + uint32_t region_index) const; - // DispatchTraceRaysDumpingContext - VkResult DumpeDispatchTraceRaysImage(const VulkanDumpResourceInfo& resource_info); + std::string GenerateTransferToImageRegionFilename(const DumpedResourceBase& dumped_resource, + DumpedImageFormat output_image_format, + VkImageAspectFlagBits aspect, + uint32_t mip_level, + uint32_t layer, + bool before_command) const; - std::string GenerateDispatchTraceRaysImageFilename(const VulkanDumpResourceInfo& resource_info, - uint32_t mip_level, - uint32_t layer, - VkImageAspectFlagBits aspect) const; + // Json generators + void GenerateOutputJsonDrawCallInfo(const VulkanDelegateDumpDrawCallContext& draw_call_info); - VkResult DumpeDispatchTraceRaysBuffer(const VulkanDumpResourceInfo& resource_info); + void GenerateOutputJsonDispatchInfo(const VulkanDelegateDumpDrawCallContext& draw_call_info); - std::string GenerateDispatchTraceRaysBufferFilename(const VulkanDumpResourceInfo& resource_info) const; + void GenerateOutputJsonTraceRaysIndex(const VulkanDelegateDumpDrawCallContext& draw_call_info); - VkResult DumpDispatchTraceRaysImageDescriptor(const VulkanDumpResourceInfo& resource_info); + void GenerateOutputJsonTransferInfo(const VulkanDelegateDumpDrawCallContext& draw_call_info); - std::string GenerateDispatchTraceRaysImageDescriptorFilename(const VulkanDumpResourceInfo& resource_info, - uint32_t mip_level, - uint32_t layer, - VkImageAspectFlagBits aspect) const; + void GenerateOutputJsonInitBufferCommand(const DumpedTransferCommand& cmd, nlohmann::ordered_json& json_entry); - VkResult DumpDispatchTraceRaysBufferDescriptor(const VulkanDumpResourceInfo& resource_info); + void GenerateOutputJsonInitImageCommand(const DumpedTransferCommand& cmd, nlohmann::ordered_json& json_entry); - std::string GenerateDispatchTraceRaysBufferDescriptorFilename(const VulkanDumpResourceInfo& resource_info) const; + void GenerateOutputJsonCopyBufferCommand(const DumpedTransferCommand& cmd, nlohmann::ordered_json& json_entry); - VkResult DumpDispatchTraceRaysInlineUniformBufferDescriptor(const VulkanDumpResourceInfo& resource_info); + void GenerateOutputJsonCopyBufferToImageCommand(const DumpedTransferCommand& cmd, + nlohmann::ordered_json& json_entry); - std::string - GenerateDispatchTraceRaysInlineUniformBufferDescriptorFilename(const VulkanDumpResourceInfo& resource_info) const; + void GenerateOutputJsonCopyImageCommand(const DumpedTransferCommand& cmd, nlohmann::ordered_json& json_entry); + + void GenerateOutputJsonCopyImageToBufferCommand(const DumpedTransferCommand& cmd, + nlohmann::ordered_json& json_entry); - void GenerateOutputJsonDispatchInfo(const VulkanDumpDrawCallInfo& draw_call_info, - const graphics::VulkanInstanceTable* instance_table); + void GenerateOutputJsonBlitImageCommand(const DumpedTransferCommand& cmd, nlohmann::ordered_json& json_entry); - void GenerateOutputJsonTraceRaysIndex(const VulkanDumpDrawCallInfo& draw_call_info, - const graphics::VulkanInstanceTable* instance_table); + void GenerateOutputJsonBuildAccelerationStructuresCommand(const DumpedTransferCommand& cmd, + nlohmann::ordered_json& json_entry); - bool IsImageDumpable(const graphics::VulkanInstanceTable* instance_table, const VulkanImageInfo* image_info); + void GenerateOutputJsonCopyAccelerationStructureCommand(const DumpedTransferCommand& cmd, + nlohmann::ordered_json& json_entry); - // Keep track of images for which scalling failed so we can - // note them in the output json - std::unordered_set images_failed_scaling_; + void GenerateDescriptorsJsonInfo(nlohmann::ordered_json& dispatch_json_entry, + const DumpedResourcesInfo& dumped_resources); - bool ImageFailedScaling(const VulkanImageInfo* img_info) const { return images_failed_scaling_.count(img_info); } + void GenerateTLASJsonInfo(nlohmann::ordered_json& dispatch_json_entry, + const DumpedAccelerationStructure& dumped_as); - void GenerateDispatchTraceRaysDescriptorsJsonInfo( - const VulkanDumpDrawCallInfo& draw_call_info, - nlohmann::ordered_json& dispatch_json_entry, - const BoundDescriptorSets& referenced_descriptors, - const DispatchTraceRaysDumpingContext::MutableResourcesBackupContext& cloned_resources, - const DispatchTraceRaysDumpingContext::MutableResourcesBackupContext& cloned_resources_before, - bool is_dispatch); + void GenerateBLASJsonInfo(nlohmann::ordered_json& dispatch_json_entry, + const DumpedAccelerationStructure& dumped_as); VulkanReplayDumpResourcesJson dump_json_; const VulkanReplayOptions& options_; diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_delegate_dumped_resources.h b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_delegate_dumped_resources.h new file mode 100644 index 000000000..25bddeb38 --- /dev/null +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_delegate_dumped_resources.h @@ -0,0 +1,984 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_VULKAN_REPLAY_DUMP_RESOURCES_DELEGATE_DUMPED_RESOURCES_COMMON_H +#define GFXRECON_VULKAN_REPLAY_DUMP_RESOURCES_DELEGATE_DUMPED_RESOURCES_COMMON_H + +#include "decode/vulkan_object_info.h" +#include "decode/vulkan_replay_dump_resources_as.h" +#include "util/defines.h" +#include "format/format.h" + +#include +#include +#include +#include +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) + +enum class DumpResourcesPipelineStage +{ + kNone, + kGraphics, + kCompute, + kRayTracing, + kTransfer +}; + +enum class DumpResourceType +{ + kNone, + kRtv, + kDsv, + kVertex, + kIndex, + kImageDescriptor, + kBufferDescriptor, + kInlineUniformBufferDescriptor, + kDispatchTraceRaysImage, + kDispatchTraceRaysBuffer, + kDispatchTraceRaysImageDescriptor, + kDispatchTraceRaysBufferDescriptor, + kDispatchTraceRaysInlineUniformBufferDescriptor, + kAccelerationStructure, + // Transfer related types + kInitBufferMetaCommand, + kInitImageMetaCommand, + kCopyBuffer, + kCopyBufferToImage, + kCopyImage, + kCopyImageToBuffer, + kBlitImage, + kBuildAccelerationStructure, + kCopyAccelerationStructure, +}; + +using DumpedHostData = std::vector; +using DumpedImageHostData = std::vector; +using DumpedCopyBufferRegionsHostData = std::vector; +using DumpedCopyImageRegionsHostData = std::vector; + +struct AccelerationStructureDumpedHostData +{ + void clear() + { + build_data.clear(); + serialized_data.clear(); + blass_dumped_data.clear(); + } + + struct TrianglesBuffers + { + DumpedHostData vertex_buffer; + DumpedHostData index_buffer; + DumpedHostData transform_buffer; + }; + + struct AABBBuffer + { + DumpedHostData aabb_buffer; + }; + + struct InstanceBuffer + { + DumpedHostData instance_buffer; + }; + + std::vector> build_data; + + DumpedHostData serialized_data; + + // Used only by TLASes + std::vector blass_dumped_data; +}; + +enum ImageDumpResult +{ + kCanDump, + kCanNotResolve, + kFormatNotSupported +}; + +struct DumpedFile +{ + DumpedFile() = default; + DumpedFile(VkDeviceSize s) : size(s) {} + + std::string filename; + VkDeviceSize size{ 0 }; + VkDeviceSize compressed_size{ 0 }; +}; + +struct DumpedBuffer : DumpedFile +{ + DumpedBuffer() = default; + + DumpedBuffer(VkBuffer buffer, format::HandleId id, VkDeviceSize o, VkDeviceSize s) : + DumpedFile(s), buffer_info(buffer, id), offset(o) + {} + + DumpedBuffer(VkBuffer buffer, VkDeviceSize s) : DumpedFile(s), buffer_info(buffer, format::kNullHandleId), offset(0) + {} + + DumpedBuffer(VkDeviceSize s) : DumpedFile(s), buffer_info(VK_NULL_HANDLE, format::kNullHandleId), offset(0) {} + + struct BufferInfo + { + BufferInfo() = default; + BufferInfo(VkBuffer b, format::HandleId id) : handle(b), capture_id(id) {} + + VkBuffer handle{ VK_NULL_HANDLE }; + format::HandleId capture_id{ format::kNullHandleId }; + }; + + BufferInfo buffer_info; + + VkDeviceSize offset{ 0 }; + + DumpedBuffer& operator=(const DumpedBuffer& other) + { + if (this == &other) + { + return *this; + } + + buffer_info.handle = other.buffer_info.handle; + buffer_info.capture_id = other.buffer_info.capture_id; + offset = other.offset; + filename = other.filename; + size = other.size; + compressed_size = other.compressed_size; + + return *this; + } +}; + +struct DumpedImage +{ + DumpedImage() = default; + + DumpedImage(const VulkanImageInfo* inf, ImageDumpResult cd) : + image_info(inf), scaling_failed(false), dumped_raw(false), dumped_format(VK_FORMAT_UNDEFINED), can_dump(cd) + {} + + struct DumpedImageSubresource : DumpedFile + { + DumpedImageSubresource() = default; + + DumpedImageSubresource( + VkImageAspectFlagBits a, const VkExtent3D& e, const VkExtent3D& se, uint32_t le, uint32_t la) : + aspect(a), + extent(e), scaled_extent(se), level(le), layer(la) + {} + + VkImageAspectFlagBits aspect{ VkImageAspectFlagBits(0) }; + VkExtent3D extent{ 0, 0, 0 }; + VkExtent3D scaled_extent{ 0, 0, 0 }; + uint32_t level{ 0 }; + uint32_t layer{ 0 }; + }; + + DumpedImage& operator=(const DumpedImage& other) + { + if (this == &other) + { + return *this; + } + + image_info = other.image_info; + scaling_failed = other.scaling_failed; + dumped_raw = other.dumped_raw; + dumped_format = other.dumped_format; + can_dump = other.can_dump; + dumped_subresources = other.dumped_subresources; + + return *this; + } + + const VulkanImageInfo* image_info; + bool scaling_failed; + bool dumped_raw; + VkFormat dumped_format; + + // Scaling is done with vkCmdBlitImage. It is possible that an implementation does not supporting blit for some + // specific formats. In these cases, since we can't scale the images with BlitImage, we dump them in their original + // dimensions and mark them with an entry in the output json. + ImageDumpResult can_dump; + + std::vector dumped_subresources; +}; + +struct DumpedAccelerationStructure +{ + static constexpr uint32_t instance_buffer_stride{ static_cast( + sizeof(VkAccelerationStructureInstanceKHR)) }; + + DumpedAccelerationStructure() = delete; + + DumpedAccelerationStructure(const VulkanAccelerationStructureKHRInfo* as_info, bool dump_input_buffers) : + as_info(as_info), dump_build_input_buffers(dump_input_buffers) + {} + + DumpedAccelerationStructure& operator=(const DumpedAccelerationStructure& other) + { + if (this == &other) + { + return *this; + } + input_buffers = other.input_buffers; + serialized_buffer = other.serialized_buffer; + dump_build_input_buffers = other.dump_build_input_buffers; + as_info = other.as_info; + BLASes = other.BLASes; + + return *this; + } + + struct DumpedBuildInputTriangleBuffer + { + DumpedBuildInputTriangleBuffer() = delete; + + DumpedBuildInputTriangleBuffer(const AccelerationStructureDumpResourcesContext::Triangles& triangles) : + vertex_format(triangles.vertex_format), max_vertex(triangles.max_vertex), + vertex_buffer_stride(triangles.vertex_buffer_stride), + vertex_buffer(triangles.vertex_buffer, triangles.vertex_buffer_size), index_type(triangles.index_type), + index_buffer(triangles.index_buffer, triangles.index_buffer_size), + transform_buffer(triangles.transform_buffer, triangles.transform_buffer_size), range(triangles.range) + {} + + VkFormat vertex_format{ VK_FORMAT_UNDEFINED }; + uint32_t max_vertex{ 0 }; + VkDeviceSize vertex_buffer_stride{ 0 }; + DumpedBuffer vertex_buffer; + + VkIndexType index_type{ VK_INDEX_TYPE_NONE_KHR }; + DumpedBuffer index_buffer; + + DumpedBuffer transform_buffer; + + VkAccelerationStructureBuildRangeInfoKHR range; + }; + + struct DumpedBuildInputAABBBuffer + { + DumpedBuildInputAABBBuffer() = delete; + + DumpedBuildInputAABBBuffer(const AccelerationStructureDumpResourcesContext::AABBS& aabbs) : + aabb_buffer(aabbs.buffer, aabbs.buffer_size), range(aabbs.range){}; + + DumpedBuffer aabb_buffer; + + VkAccelerationStructureBuildRangeInfoKHR range; + }; + + struct DumpedBuildInputInstanceBuffer + { + DumpedBuildInputInstanceBuffer() = delete; + DumpedBuildInputInstanceBuffer(const AccelerationStructureDumpResourcesContext::Instances& instance) : + instance_buffer(instance.instance_buffer, static_cast(instance.instance_buffer_size)) + {} + + DumpedBuffer instance_buffer; + }; + + std::vector> + input_buffers; + + const VulkanAccelerationStructureKHRInfo* as_info; + bool dump_build_input_buffers; + DumpedBuffer serialized_buffer; + + // Used by TLASes + std::vector BLASes; +}; + +struct DumpedResourceBase +{ + DumpedResourceBase() = default; + + DumpedResourceBase(DumpResourceType t, DumpResourcesPipelineStage ps, uint64_t bcb, uint64_t cmd, uint64_t qs) : + type(t), ppl_stage(ps), bcb_index(bcb), cmd_index(cmd), qs_index(qs) + {} + + DumpedResourceBase(DumpResourceType t, + DumpResourcesPipelineStage ps, + uint64_t bcb, + uint64_t cmd, + uint64_t qs, + uint64_t rp, + uint64_t sp) : + type(t), + ppl_stage(ps), bcb_index(bcb), cmd_index(cmd), qs_index(qs), render_pass(rp), subpass(sp) + {} + + DumpedResourceBase(DumpResourceType t, DumpResourcesPipelineStage ps, uint64_t cmd, uint64_t qs) : + type(t), ppl_stage(ps), bcb_index(0), cmd_index(cmd), qs_index(qs), render_pass(0), subpass(0) + {} + + DumpResourceType type{ DumpResourceType::kNone }; + + DumpResourcesPipelineStage ppl_stage{ DumpResourcesPipelineStage::kNone }; + + // BeginCommandBuffer index + uint64_t bcb_index{ 0 }; + + // The command's index (vkCmdDraw, vkCmdDispatch, etc) + uint64_t cmd_index{ 0 }; + + // The QueueSubmit index + uint64_t qs_index{ 0 }; + + // The render pass index in which this resource is dumped + uint64_t render_pass{ 0 }; + + // The sub pass index in which this resource is dumped + uint64_t subpass{ 0 }; +}; + +struct DumpedVertexIndexBuffer : DumpedResourceBase +{ + // Due to multiple member variable it's easy to forget seting some of them. + // Deleting the default construct should help to ensure that variable are set + DumpedVertexIndexBuffer() = delete; + + // For vertex buffers + DumpedVertexIndexBuffer(DumpResourceType t, + uint64_t bcb, + uint64_t cmd, + uint64_t qs, + uint32_t b, + VkBuffer buffer, + format::HandleId id, + VkDeviceSize s, + VkDeviceSize o) : + DumpedResourceBase(t, DumpResourcesPipelineStage::kGraphics, bcb, cmd, qs), + buffer(buffer, id, o, s), binding(b) + {} + + // For index buffers + DumpedVertexIndexBuffer(DumpResourceType t, + uint64_t bcb, + uint64_t cmd, + uint64_t qs, + VkIndexType it, + VkBuffer buffer, + format::HandleId id, + VkDeviceSize s, + VkDeviceSize o) : + DumpedResourceBase(t, DumpResourcesPipelineStage::kGraphics, bcb, cmd, qs), + buffer(buffer, id, o, s), index_type(it) + {} + + DumpedBuffer buffer; + + // For vertex buffer attributes + uint32_t binding{ 0 }; + + // For index buffer + VkIndexType index_type{ VK_INDEX_TYPE_NONE_KHR }; +}; + +struct DumpedDescriptor : DumpedResourceBase +{ + // Due to multiple member variable it's easy to forget seting some of them. + // Deleting the default construct should help to ensure that variable are set + DumpedDescriptor() = delete; + + // Buffer descriptors for graphics + DumpedDescriptor(DumpResourceType t, + uint64_t bcb, + uint64_t cmd, + uint64_t qs, + uint64_t rp, + uint64_t sp, + VkShaderStageFlags ss, + VkDescriptorType dt, + uint32_t s, + uint32_t b, + uint32_t ai, + VkBuffer buffer, + format::HandleId id, + VkDeviceSize offset, + VkDeviceSize size, + DumpResourcesPipelineStage ps) : + DumpedResourceBase(t, ps, bcb, cmd, qs, rp, sp), + stages(ss), desc_type(dt), set(s), binding(b), array_index(ai), + dumped_resource(std::in_place_type, buffer, id, offset, size) + {} + + // Inline uniform buffers for graphics + DumpedDescriptor(DumpResourceType t, + uint64_t bcb, + uint64_t cmd, + uint64_t qs, + uint64_t rp, + uint64_t sp, + VkShaderStageFlags ss, + VkDescriptorType dt, + uint32_t s, + uint32_t b, + DumpResourcesPipelineStage ps) : + DumpedResourceBase(t, ps, bcb, cmd, qs, rp, sp), + stages(ss), desc_type(dt), set(s), binding(b), array_index(0), + dumped_resource(std::in_place_type, 0) + {} + + // Graphics image descriptors + DumpedDescriptor(DumpResourceType t, + uint64_t bcb, + uint64_t cmd, + uint64_t qs, + uint64_t rp, + uint64_t sp, + VkShaderStageFlags ss, + VkDescriptorType dt, + uint32_t s, + uint32_t b, + uint32_t ai, + const VulkanImageInfo* img_info, + ImageDumpResult cd, + DumpResourcesPipelineStage ps) : + DumpedResourceBase(t, ps, bcb, cmd, qs, rp, sp), + stages(ss), desc_type(dt), set(s), binding(b), array_index(ai), + dumped_resource(std::in_place_type, img_info, cd) + {} + + // Dispatch ray tracing image descriptors + DumpedDescriptor(DumpResourceType t, + uint64_t bcb, + uint64_t cmd, + uint64_t qs, + VkShaderStageFlags ss, + VkDescriptorType dt, + uint32_t s, + uint32_t b, + uint32_t ai, + const VulkanImageInfo* img_info, + ImageDumpResult cd, + DumpResourcesPipelineStage ps) : + DumpedResourceBase(t, ps, bcb, cmd, qs), + stages(ss), desc_type(dt), set(s), binding(b), array_index(ai), + dumped_resource(std::in_place_type, img_info, cd) + {} + + // Dispatch ray tracing buffer descriptors + DumpedDescriptor(DumpResourceType t, + uint64_t bcb, + uint64_t cmd, + uint64_t qs, + VkShaderStageFlags ss, + VkDescriptorType dt, + uint32_t s, + uint32_t b, + uint32_t ai, + VkBuffer buffer, + format::HandleId id, + VkDeviceSize offset, + VkDeviceSize size, + DumpResourcesPipelineStage ps) : + DumpedResourceBase(t, ps, bcb, cmd, qs), + stages(ss), desc_type(dt), set(s), binding(b), array_index(ai), + dumped_resource(std::in_place_type, buffer, id, offset, size) + {} + + // Dispatch ray tracing inline uniform buffers + DumpedDescriptor(DumpResourceType t, + uint64_t bcb, + uint64_t cmd, + uint64_t qs, + VkShaderStageFlags ss, + VkDescriptorType dt, + uint32_t s, + uint32_t b, + DumpResourcesPipelineStage ps) : + DumpedResourceBase(t, ps, bcb, cmd, qs), + stages(ss), desc_type(dt), set(s), binding(b), array_index(0), + dumped_resource(std::in_place_type, 0) + {} + + // Acceleration structure for TraceRays + DumpedDescriptor(DumpResourceType t, + uint64_t bcb, + uint64_t cmd, + uint64_t qs, + VkShaderStageFlags ss, + VkDescriptorType dt, + uint32_t s, + uint32_t b, + uint32_t ai, + const VulkanAccelerationStructureKHRInfo* as_info, + bool dbib, + DumpResourcesPipelineStage ps) : + DumpedResourceBase(t, ps, bcb, cmd, qs), + stages(ss), desc_type(dt), set(s), binding(b), array_index(ai), + dumped_resource(std::in_place_type, as_info, dbib) + {} + + // The dumped resource + std::variant dumped_resource; + + bool has_before{ false }; + + // The dumped resource before the execution of the command. + // Used only when --dump-resources-before-draw is used. + std::variant dumped_resource_before; + + VkShaderStageFlags stages{ VkShaderStageFlagBits(0) }; + + VkDescriptorType desc_type{ VK_DESCRIPTOR_TYPE_MAX_ENUM }; + uint32_t set{ 0 }; + uint32_t binding{ 0 }; + uint32_t array_index{ 0 }; +}; + +struct DumpedRenderTarget : DumpedResourceBase +{ + // Due to multiple member variable it's easy to forget seting some of them. + // Deleting the default construct should help to ensure that variable are set + DumpedRenderTarget() = delete; + + DumpedRenderTarget(DumpResourceType t, + uint64_t bcb, + uint64_t cmd, + uint64_t qs, + uint64_t rp, + uint64_t sp, + uint32_t l, + bool before, + const VulkanImageInfo* img_info, + ImageDumpResult cd) : + DumpedResourceBase(t, DumpResourcesPipelineStage::kGraphics, bcb, cmd, qs, rp, sp), + location(l), dumped_image(img_info, cd) + { + if (before) + { + dumped_image_before = DumpedImage(img_info, cd); + } + } + + // The dumped image resource + DumpedImage dumped_image; + + // The dumped image resource before the execution of the command. + // Used only when --dump-resources-before-draw is used. + DumpedImage dumped_image_before; + + // The render target location + uint32_t location{ 0 }; +}; + +struct TransferedImageInfo +{ + TransferedImageInfo() = delete; + + TransferedImageInfo(format::HandleId i, VkFormat f, VkExtent3D e, VkImageLayout l) : + id(i), format(f), extent(e), layout(l) + {} + + TransferedImageInfo(const TransferedImageInfo& other) : + id(other.id), format(other.format), extent(other.extent), layout(other.layout) + {} + + format::HandleId id; + VkFormat format; + VkExtent3D extent; + VkImageLayout layout; +}; + +struct DumpedInitBufferMetaCommand +{ + DumpedInitBufferMetaCommand() = delete; + + DumpedInitBufferMetaCommand(format::HandleId b, VkDeviceSize s) : buffer(b), dumped_buffer(s) {} + + format::HandleId buffer; + DumpedBuffer dumped_buffer; +}; + +struct DumpedInitImageMetaCommand +{ + DumpedInitImageMetaCommand() = delete; + + DumpedInitImageMetaCommand(const TransferedImageInfo& transf_img_inf, const VulkanImageInfo* img_inf) : + image(transf_img_inf), dumped_image(img_inf, ImageDumpResult::kCanDump) + {} + + TransferedImageInfo image; + DumpedImage dumped_image; +}; + +struct DumpedCopyBuffer +{ + DumpedCopyBuffer() = delete; + + DumpedCopyBuffer(format::HandleId s, format::HandleId d) : src_buffer(s), dst_buffer(d) {} + + struct CopyRegion + { + CopyRegion() = delete; + CopyRegion(const VkBufferCopy& r, VkBuffer b, VkDeviceSize sz) : region(r), dumped_buffer(b, sz) {} + + VkBufferCopy region; + DumpedBuffer dumped_buffer; + }; + + std::vector regions; + + format::HandleId src_buffer; + format::HandleId dst_buffer; +}; + +struct DumpedCopyBufferToImage +{ + DumpedCopyBufferToImage() = delete; + + DumpedCopyBufferToImage(format::HandleId s, const TransferedImageInfo& transf_img_info) : + src_buffer(s), dst_image(transf_img_info) + {} + + struct CopyRegion + { + CopyRegion() = delete; + CopyRegion(const VkBufferImageCopy& r, const VulkanImageInfo* img_inf, ImageDumpResult cd) : + region(r), dumped_image(img_inf, cd) + {} + + VkBufferImageCopy region; + DumpedImage dumped_image; + }; + + std::vector regions; + + format::HandleId src_buffer; + TransferedImageInfo dst_image; +}; + +struct DumpedCopyImage +{ + DumpedCopyImage() = delete; + + DumpedCopyImage(const TransferedImageInfo& src_img, const TransferedImageInfo& dst_img) : + src_image(src_img), dst_image(dst_img) + {} + + struct CopyRegion + { + CopyRegion() = delete; + CopyRegion(const VkImageCopy& r, const VulkanImageInfo* img_inf, ImageDumpResult cd) : + dumped_image(img_inf, cd), region(r) + {} + + DumpedImage dumped_image; + VkImageCopy region; + }; + + std::vector regions; + + TransferedImageInfo src_image; + TransferedImageInfo dst_image; +}; + +struct DumpedCopyImageToBuffer +{ + DumpedCopyImageToBuffer() = delete; + + DumpedCopyImageToBuffer(const TransferedImageInfo& si, format::HandleId d) : src_image(si), dst_buffer(d) {} + + struct CopyRegion + { + CopyRegion() = delete; + CopyRegion(const VkBufferImageCopy& r, VkBuffer b, VkDeviceSize sz) : region(r), dumped_buffer(b, sz) {} + + VkBufferImageCopy region; + DumpedBuffer dumped_buffer; + }; + + std::vector regions; + + TransferedImageInfo src_image; + format::HandleId dst_buffer; +}; + +struct DumpedBlitImage +{ + DumpedBlitImage() = delete; + + DumpedBlitImage(const TransferedImageInfo& si, const TransferedImageInfo& di, VkFilter f) : + src_image(si), dst_image(di), filter(f) + {} + + struct CopyRegion + { + CopyRegion() = delete; + CopyRegion(const VkImageBlit& r, const VulkanImageInfo* img_inf, ImageDumpResult cd) : + dumped_image(img_inf, cd), region(r) + {} + + DumpedImage dumped_image; + VkImageBlit region; + }; + + std::vector regions; + + TransferedImageInfo src_image; + TransferedImageInfo dst_image; + + VkFilter filter; +}; + +struct AccelerationStructureTransfer +{ + AccelerationStructureTransfer() = delete; + + AccelerationStructureTransfer(format::HandleId s, + format::HandleId d, + uint32_t m, + const VulkanAccelerationStructureKHRInfo* as_info, + bool dump_input_buffers) : + dumped_as(as_info, dump_input_buffers), + src_as(s), dst_as(d), mode(m) + {} + + format::HandleId src_as; + format::HandleId dst_as; + uint32_t mode; + + DumpedAccelerationStructure dumped_as; +}; + +struct DumpedBuildAccelerationStructure +{ + std::vector dumped_build_infos; +}; + +struct DumpedCopyAccelerationStructure +{ + DumpedCopyAccelerationStructure() = delete; + + DumpedCopyAccelerationStructure(format::HandleId s, + format::HandleId d, + VkCopyAccelerationStructureModeKHR m, + const VulkanAccelerationStructureKHRInfo* as_info, + bool dump_input_buffers) : + dumped_copy_info(s, d, m, as_info, dump_input_buffers) + {} + + AccelerationStructureTransfer dumped_copy_info; +}; + +struct DumpedTransferCommand : DumpedResourceBase +{ + DumpedTransferCommand() = delete; + + // InitBufferMetaCommand + DumpedTransferCommand(DumpResourceType t, uint64_t cmd, uint64_t qs, format::HandleId b, VkDeviceSize s) : + DumpedResourceBase(t, DumpResourcesPipelineStage::kTransfer, cmd, qs), + dumped_resource(std::in_place_type, b, s), has_before(false) + { + GFXRECON_ASSERT(t == DumpResourceType::kInitBufferMetaCommand); + } + + // InitImageMetaCommand + DumpedTransferCommand(DumpResourceType t, + uint64_t cmd, + uint64_t qs, + const TransferedImageInfo& transf_img_info, + const VulkanImageInfo* img_info) : + DumpedResourceBase(t, DumpResourcesPipelineStage::kTransfer, cmd, qs), + dumped_resource(std::in_place_type, transf_img_info, img_info), has_before(false) + { + GFXRECON_ASSERT(t == DumpResourceType::kInitImageMetaCommand); + } + + // CopyBuffer + DumpedTransferCommand( + DumpResourceType t, uint64_t cmd, uint64_t qs, format::HandleId s, format::HandleId d, bool hb) : + DumpedResourceBase(t, DumpResourcesPipelineStage::kTransfer, cmd, qs), + dumped_resource(std::in_place_type, s, d), has_before(hb) + { + GFXRECON_ASSERT(t == DumpResourceType::kCopyBuffer); + + if (hb) + { + dumped_resource_before = DumpedCopyBuffer(s, d); + } + } + + // CopyBufferToImage + DumpedTransferCommand(DumpResourceType t, + uint64_t cmd, + uint64_t qs, + format::HandleId s, + const TransferedImageInfo& transf_img_info, + bool hb) : + DumpedResourceBase(t, DumpResourcesPipelineStage::kTransfer, cmd, qs), + dumped_resource(std::in_place_type, s, transf_img_info), has_before(hb) + { + GFXRECON_ASSERT(t == DumpResourceType::kCopyBufferToImage); + + if (hb) + { + dumped_resource_before = DumpedCopyBufferToImage(s, transf_img_info); + } + } + + // CopyImage + DumpedTransferCommand(DumpResourceType t, + uint64_t cmd, + uint64_t qs, + const TransferedImageInfo& si, + const TransferedImageInfo& di, + bool hb) : + DumpedResourceBase(t, DumpResourcesPipelineStage::kTransfer, cmd, qs), + dumped_resource(std::in_place_type, si, di), has_before(hb) + { + GFXRECON_ASSERT(t == DumpResourceType::kCopyImage); + + if (hb) + { + dumped_resource_before = DumpedCopyImage(si, di); + } + } + + // CopyImageToBuffer + DumpedTransferCommand( + DumpResourceType t, uint64_t cmd, uint64_t qs, const TransferedImageInfo& si, format::HandleId d, bool hb) : + DumpedResourceBase(t, DumpResourcesPipelineStage::kTransfer, cmd, qs), + dumped_resource(std::in_place_type, si, d), has_before(hb) + { + GFXRECON_ASSERT(t == DumpResourceType::kCopyImageToBuffer); + + if (hb) + { + dumped_resource_before = DumpedCopyImageToBuffer(si, d); + } + } + + // BlitImage + DumpedTransferCommand(DumpResourceType t, + uint64_t cmd, + uint64_t qs, + const TransferedImageInfo& si, + const TransferedImageInfo& di, + VkFilter f, + bool hb) : + DumpedResourceBase(t, DumpResourcesPipelineStage::kTransfer, cmd, qs), + dumped_resource(std::in_place_type, si, di, f), has_before(hb) + { + GFXRECON_ASSERT(t == DumpResourceType::kBlitImage); + + if (hb) + { + dumped_resource_before = DumpedBlitImage(si, di, f); + } + } + + // Build AS + DumpedTransferCommand(DumpResourceType t, uint64_t cmd, uint64_t qs, bool hb) : + DumpedResourceBase(t, DumpResourcesPipelineStage::kTransfer, cmd, qs), + dumped_resource(std::in_place_type), has_before(hb) + { + GFXRECON_ASSERT(t == DumpResourceType::kBuildAccelerationStructure); + + if (hb) + { + dumped_resource_before = DumpedBuildAccelerationStructure(); + } + } + + // Copy AS + DumpedTransferCommand(DumpResourceType t, + uint64_t cmd, + uint64_t qs, + format::HandleId s, + format::HandleId d, + VkCopyAccelerationStructureModeKHR m, + const VulkanAccelerationStructureKHRInfo* as_info, + bool dump_input_buffers, + bool hb) : + DumpedResourceBase(t, DumpResourcesPipelineStage::kTransfer, cmd, qs), + dumped_resource(std::in_place_type, s, d, m, as_info, dump_input_buffers), + has_before(hb) + { + GFXRECON_ASSERT(t == DumpResourceType::kCopyAccelerationStructure); + + if (hb) + { + dumped_resource_before = DumpedCopyAccelerationStructure(s, d, m, as_info, dump_input_buffers); + } + } + + // The dumped resource + std::variant + dumped_resource; + + bool has_before{ false }; + + // The dumped resource before the execution of the command. + // Used only when --dump-resources-before-draw is used. + std::variant + dumped_resource_before; +}; + +struct DumpedResourcesInfo +{ + DumpedResourcesInfo() = default; + + uint64_t bcb_index{ 0 }; + uint64_t cmd_index{ 0 }; + uint64_t qs_index{ 0 }; + + std::vector dumped_vertex_index_buffers; + std::vector dumped_render_targets; + std::unique_ptr dumped_transfer_command; + + // We need to keep references to inserted elements. Use a list instead of a vector + std::list dumped_descriptors; +}; + +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // GFXRECON_VULKAN_REPLAY_DUMP_RESOURCES_DELEGATE_DUMPED_RESOURCES_COMMON_H diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_draw_calls.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_draw_calls.cpp index 475c4d5aa..ec2c0691f 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_draw_calls.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_draw_calls.cpp @@ -1,5 +1,5 @@ /* -** Copyright (c) 2024 LunarG, Inc. +** Copyright (c) 2024-2025 LunarG, Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -28,8 +28,8 @@ #include "format/format.h" #include "generated/generated_vulkan_enum_to_string.h" #include "graphics/vulkan_resources_util.h" -#include "util/buffer_writer.h" #include "Vulkan-Utility-Libraries/vk_format_utils.h" +#include "util/compressor.h" #include "util/logging.h" #include "util/platform.h" @@ -38,36 +38,36 @@ #include #include #include - #include #include -#include #include -#include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) -DrawCallsDumpingContext::DrawCallsDumpingContext(const DrawCallIndices* draw_indices, - const RenderPassIndices* renderpass_indices, - CommonObjectInfoTable& object_info_table, - const VulkanReplayOptions& options, - VulkanDumpResourcesDelegate& delegate) : +DrawCallsDumpingContext::DrawCallsDumpingContext( + const CommandIndices* draw_indices, + const RenderPassIndices* renderpass_indices, + const CommandImageSubresource& dc_subresources, + CommonObjectInfoTable& object_info_table, + const VulkanReplayOptions& options, + VulkanDumpResourcesDelegate& delegate, + const util::Compressor* compressor, + const DumpResourcesAccelerationStructuresContext& acceleration_structures_context, + const VulkanPerDeviceAddressTrackers& address_trackers) : original_command_buffer_info_(nullptr), - current_cb_index_(0), active_renderpass_(nullptr), active_framebuffer_(nullptr), bound_gr_pipeline_{ nullptr }, - current_renderpass_(0), current_subpass_(0), dump_resources_before_(options.dump_resources_before), - delegate_(delegate), dump_depth_(options.dump_resources_dump_depth), - color_attachment_to_dump_(options.dump_resources_color_attachment_index), - dump_vertex_index_buffers_(options.dump_resources_dump_vertex_index_buffer), - dump_immutable_resources_(options.dump_resources_dump_immutable_resources), - dump_unused_vertex_bindings_(options.dump_resources_dump_unused_vertex_bindings), current_render_pass_type_(kNone), + current_cb_index_(0), dc_subresources_(dc_subresources), active_renderpass_(nullptr), + active_framebuffer_(nullptr), bound_gr_pipeline_{ nullptr }, current_renderpass_(0), current_subpass_(0), + delegate_(delegate), options_(options), compressor_(compressor), current_render_pass_type_(kNone), aux_command_buffer_(VK_NULL_HANDLE), aux_fence_(VK_NULL_HANDLE), command_buffer_level_(DumpResourcesCommandBufferLevel::kPrimary), device_table_(nullptr), instance_table_(nullptr), - object_info_table_(object_info_table), replay_device_phys_mem_props_(nullptr) + object_info_table_(object_info_table), + replay_device_phys_mem_props_(nullptr), secondary_with_dynamic_rendering_{ false }, + acceleration_structures_context_(acceleration_structures_context), address_trackers_(address_trackers) { if (draw_indices != nullptr) { - const size_t n_cmd_buffs = dump_resources_before_ ? 2 * draw_indices->size() : draw_indices->size(); + const size_t n_cmd_buffs = options_.dump_resources_before ? 2 * draw_indices->size() : draw_indices->size(); command_buffers_.resize(n_cmd_buffs, VK_NULL_HANDLE); dc_indices_ = *draw_indices; @@ -152,24 +152,26 @@ void DrawCallsDumpingContext::Release() current_cb_index_ = 0; } -void DrawCallsDumpingContext::InsertNewDrawParameters( +DrawCallsDumpingContext::DrawCallParams* DrawCallsDumpingContext::InsertNewDrawParameters( uint64_t index, uint32_t vertex_count, uint32_t instance_count, uint32_t first_vertex, uint32_t first_instance) { - auto new_entry = draw_call_params_.insert( + auto [entry_it, success] = draw_call_params_.insert( { index, std::make_unique( DrawCallType::kDraw, vertex_count, instance_count, first_vertex, first_instance) }); - GFXRECON_ASSERT(new_entry.second); + GFXRECON_ASSERT(success); + SnapshotState(*entry_it->second); - SnapshotState(*new_entry.first->second); + return entry_it->second.get(); } -void DrawCallsDumpingContext::InsertNewDrawIndexedParameters(uint64_t index, - uint32_t index_count, - uint32_t instance_count, - uint32_t first_index, - int32_t vertexOffset, - uint32_t first_instance) +DrawCallsDumpingContext::DrawCallParams* +DrawCallsDumpingContext::InsertNewDrawIndexedParameters(uint64_t index, + uint32_t index_count, + uint32_t instance_count, + uint32_t first_index, + int32_t vertexOffset, + uint32_t first_instance) { auto [entry_it, success] = draw_call_params_.insert( { index, @@ -177,9 +179,11 @@ void DrawCallsDumpingContext::InsertNewDrawIndexedParameters(uint64_t index, DrawCallType::kDrawIndexed, index_count, instance_count, first_index, vertexOffset, first_instance) }); GFXRECON_ASSERT(success); SnapshotState(*entry_it->second); + + return entry_it->second.get(); } -void DrawCallsDumpingContext::InsertNewDrawIndirectParameters( +DrawCallsDumpingContext::DrawCallParams* DrawCallsDumpingContext::InsertNewDrawIndirectParameters( uint64_t index, const VulkanBufferInfo* buffer_info, VkDeviceSize offset, uint32_t draw_count, uint32_t stride) { auto [entry_it, success] = draw_call_params_.insert( @@ -187,9 +191,11 @@ void DrawCallsDumpingContext::InsertNewDrawIndirectParameters( std::make_unique(DrawCallType::kDrawIndirect, buffer_info, offset, draw_count, stride) }); GFXRECON_ASSERT(success); SnapshotState(*entry_it->second); + + return entry_it->second.get(); } -void DrawCallsDumpingContext::InsertNewDrawIndexedIndirectParameters( +DrawCallsDumpingContext::DrawCallParams* DrawCallsDumpingContext::InsertNewDrawIndexedIndirectParameters( uint64_t index, const VulkanBufferInfo* buffer_info, VkDeviceSize offset, uint32_t draw_count, uint32_t stride) { auto [entry_it, success] = @@ -198,16 +204,19 @@ void DrawCallsDumpingContext::InsertNewDrawIndexedIndirectParameters( DrawCallType::kDrawIndexedIndirect, buffer_info, offset, draw_count, stride) }); GFXRECON_ASSERT(success); SnapshotState(*entry_it->second); + + return entry_it->second.get(); } -void DrawCallsDumpingContext::InsertNewIndirectCountParameters(uint64_t index, - const VulkanBufferInfo* buffer_info, - VkDeviceSize offset, - const VulkanBufferInfo* count_buffer_info, - VkDeviceSize count_buffer_offset, - uint32_t max_draw_count, - uint32_t stride, - DrawCallType drawcall_type) +DrawCallsDumpingContext::DrawCallParams* +DrawCallsDumpingContext::InsertNewIndirectCountParameters(uint64_t index, + const VulkanBufferInfo* buffer_info, + VkDeviceSize offset, + const VulkanBufferInfo* count_buffer_info, + VkDeviceSize count_buffer_offset, + uint32_t max_draw_count, + uint32_t stride, + DrawCallType drawcall_type) { GFXRECON_ASSERT(drawcall_type == kDrawIndirectCount || drawcall_type == kDrawIndirectCountKHR || drawcall_type == kDrawIndirectCountAMD); @@ -217,16 +226,19 @@ void DrawCallsDumpingContext::InsertNewIndirectCountParameters(uint64_t drawcall_type, buffer_info, offset, count_buffer_info, count_buffer_offset, max_draw_count, stride) }); GFXRECON_ASSERT(success); SnapshotState(*entry_it->second); + + return entry_it->second.get(); } -void DrawCallsDumpingContext::InsertNewDrawIndexedIndirectCountParameters(uint64_t index, - const VulkanBufferInfo* buffer_info, - VkDeviceSize offset, - const VulkanBufferInfo* count_buffer_info, - VkDeviceSize count_buffer_offset, - uint32_t max_draw_count, - uint32_t stride, - DrawCallType drawcall_type) +DrawCallsDumpingContext::DrawCallParams* +DrawCallsDumpingContext::InsertNewDrawIndexedIndirectCountParameters(uint64_t index, + const VulkanBufferInfo* buffer_info, + VkDeviceSize offset, + const VulkanBufferInfo* count_buffer_info, + VkDeviceSize count_buffer_offset, + uint32_t max_draw_count, + uint32_t stride, + DrawCallType drawcall_type) { GFXRECON_ASSERT(drawcall_type == kDrawIndexedIndirectCount || drawcall_type == kDrawIndexedIndirectCountKHR || drawcall_type == kDrawIndexedIndirectCountAMD); @@ -236,6 +248,254 @@ void DrawCallsDumpingContext::InsertNewDrawIndexedIndirectCountParameters(uint64 drawcall_type, buffer_info, offset, count_buffer_info, count_buffer_offset, max_draw_count, stride) }); GFXRECON_ASSERT(success); SnapshotState(*entry_it->second); + + return entry_it->second.get(); +} + +void DrawCallsDumpingContext::CmdDraw(const ApiCallInfo& call_info, + PFN_vkCmdDraw func, + VkCommandBuffer original_command_buffer, + uint32_t vertex_count, + uint32_t instance_count, + uint32_t first_vertex, + uint32_t first_instance) +{ + const uint64_t dc_index = call_info.index; + const bool must_dump = MustDumpDrawCall(dc_index); + + // Finalize draw call command buffer before the actual draw call in order + // to handle dumping render targets before the draw call + if (options_.dump_resources_before && must_dump) + { + FinalizeCommandBuffer(); + } + + DrawCallsDumpingContext::DrawCallParams* dc_params = nullptr; + if (must_dump) + { + dc_params = InsertNewDrawParameters(dc_index, vertex_count, instance_count, first_vertex, first_instance); + } + + CommandBufferIterator first, last; + GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, vertex_count, instance_count, first_vertex, first_instance); + } + + if (must_dump) + { + FinalizeCommandBuffer(dc_params); + } +} + +void DrawCallsDumpingContext::CmdDrawIndexed(const ApiCallInfo& call_info, + PFN_vkCmdDrawIndexed func, + VkCommandBuffer original_command_buffer, + uint32_t index_count, + uint32_t instance_count, + uint32_t first_index, + int32_t vertex_offset, + uint32_t first_instance) +{ + const uint64_t dc_index = call_info.index; + const bool must_dump = MustDumpDrawCall(dc_index); + + // Finalize draw call command buffer before the actual draw call in order + // to handle dumping render targets before the draw call + if (options_.dump_resources_before && must_dump) + { + FinalizeCommandBuffer(); + } + + // Copy vertex attribute info + DrawCallsDumpingContext::DrawCallParams* dc_params = nullptr; + if (must_dump) + { + dc_params = InsertNewDrawIndexedParameters( + dc_index, index_count, instance_count, first_index, vertex_offset, first_instance); + } + + CommandBufferIterator first, last; + GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, index_count, instance_count, first_index, vertex_offset, first_instance); + } + + if (must_dump) + { + FinalizeCommandBuffer(dc_params); + } +} + +void DrawCallsDumpingContext::CmdDrawIndirect(const ApiCallInfo& call_info, + PFN_vkCmdDrawIndirect func, + VkCommandBuffer original_command_buffer, + const VulkanBufferInfo* buffer_info, + VkDeviceSize offset, + uint32_t draw_count, + uint32_t stride) +{ + const uint64_t dc_index = call_info.index; + const bool must_dump = MustDumpDrawCall(dc_index); + + // Finalize draw call command buffer before the actual draw call in order + // to handle dumping render targets before the draw call + if (options_.dump_resources_before && must_dump) + { + FinalizeCommandBuffer(); + } + + // Copy vertex attribute info + DrawCallsDumpingContext::DrawCallParams* dc_params = nullptr; + if (must_dump) + { + dc_params = InsertNewDrawIndirectParameters(dc_index, buffer_info, offset, draw_count, stride); + } + + CommandBufferIterator first, last; + GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, buffer_info->handle, offset, draw_count, stride); + } + + if (must_dump) + { + FinalizeCommandBuffer(dc_params); + } +} + +void DrawCallsDumpingContext::CmdDrawIndexedIndirect(const ApiCallInfo& call_info, + PFN_vkCmdDrawIndexedIndirect func, + VkCommandBuffer original_command_buffer, + const VulkanBufferInfo* buffer_info, + VkDeviceSize offset, + uint32_t draw_count, + uint32_t stride) +{ + const uint64_t dc_index = call_info.index; + const bool must_dump = MustDumpDrawCall(dc_index); + + // Finalize draw call command buffer before the actual draw call in order + // to handle dumping render targets before the draw call + if (options_.dump_resources_before && must_dump) + { + FinalizeCommandBuffer(); + } + + DrawCallsDumpingContext::DrawCallParams* dc_params = nullptr; + if (must_dump) + { + dc_params = InsertNewDrawIndexedIndirectParameters(dc_index, buffer_info, offset, draw_count, stride); + } + + CommandBufferIterator first, last; + GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, buffer_info->handle, offset, draw_count, stride); + } + + if (must_dump) + { + FinalizeCommandBuffer(dc_params); + } +} + +void DrawCallsDumpingContext::CmdDrawIndirectCount(const ApiCallInfo& call_info, + PFN_vkCmdDrawIndirectCount func, + VkCommandBuffer original_command_buffer, + const VulkanBufferInfo* buffer_info, + VkDeviceSize offset, + const VulkanBufferInfo* count_buffer_info, + VkDeviceSize count_buffer_offset, + uint32_t max_draw_count, + uint32_t stride, + DrawCallsDumpingContext::DrawCallType drawcall_type) +{ + const uint64_t dc_index = call_info.index; + const bool must_dump = MustDumpDrawCall(dc_index); + + // Finalize draw call command buffer before the actual draw call in order + // to handle dumping render targets before the draw call + if (options_.dump_resources_before && must_dump) + { + FinalizeCommandBuffer(); + } + + DrawCallsDumpingContext::DrawCallParams* dc_params = nullptr; + if (must_dump) + { + dc_params = InsertNewIndirectCountParameters(dc_index, + buffer_info, + offset, + count_buffer_info, + count_buffer_offset, + max_draw_count, + stride, + drawcall_type); + } + + CommandBufferIterator first, last; + GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, buffer_info->handle, offset, count_buffer_info->handle, count_buffer_offset, max_draw_count, stride); + } + + if (must_dump) + { + FinalizeCommandBuffer(dc_params); + } +} + +void DrawCallsDumpingContext::CmdDrawIndexedIndirectCount(const ApiCallInfo& call_info, + PFN_vkCmdDrawIndexedIndirectCount func, + VkCommandBuffer original_command_buffer, + const VulkanBufferInfo* buffer_info, + VkDeviceSize offset, + const VulkanBufferInfo* count_buffer_info, + VkDeviceSize count_buffer_offset, + uint32_t max_draw_count, + uint32_t stride, + DrawCallsDumpingContext::DrawCallType drawcall_type) +{ + const uint64_t dc_index = call_info.index; + const bool must_dump = MustDumpDrawCall(dc_index); + + // Finalize draw call command buffer before the actual draw call in order + // to handle dumping render targets before the draw call + if (options_.dump_resources_before && must_dump) + { + FinalizeCommandBuffer(); + } + + DrawCallsDumpingContext::DrawCallParams* dc_params = nullptr; + if (must_dump) + { + dc_params = InsertNewDrawIndexedIndirectCountParameters(dc_index, + buffer_info, + offset, + count_buffer_info, + count_buffer_offset, + max_draw_count, + stride, + drawcall_type); + } + + CommandBufferIterator first, last; + GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, buffer_info->handle, offset, count_buffer_info->handle, count_buffer_offset, max_draw_count, stride); + } + + if (must_dump) + { + FinalizeCommandBuffer(dc_params); + } } VkResult DrawCallsDumpingContext::CopyDrawIndirectParameters(DrawCallParams& dc_params) @@ -266,13 +526,16 @@ VkResult DrawCallsDumpingContext::CopyDrawIndirectParameters(DrawCallParams& dc_ ic_params.new_params_buffer_size = copy_buffer_size; - VkResult res = CloneBuffer(object_info_table_, - device_table_, - replay_device_phys_mem_props_, - ic_params.params_buffer_info, - &ic_params.new_params_buffer, - &ic_params.new_params_memory, - copy_buffer_size); + VkResult res = + CreateVkBuffer(copy_buffer_size, + *device_table_, + object_info_table_.GetVkDeviceInfo(ic_params.params_buffer_info->parent_id)->handle, + nullptr, + nullptr, + replay_device_phys_mem_props_, + VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + &ic_params.new_params_buffer, + &ic_params.new_params_memory); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Failed cloning vk buffer (%s).", util::ToString(res).c_str()) @@ -340,13 +603,15 @@ VkResult DrawCallsDumpingContext::CopyDrawIndirectParameters(DrawCallParams& dc_ // Create a buffer to copy the draw count parameter const VkDeviceSize count_buffer_size = sizeof(uint32_t); assert(count_buffer_size <= ic_params.count_buffer_info->size); - res = CloneBuffer(object_info_table_, - device_table_, - replay_device_phys_mem_props_, - ic_params.count_buffer_info, - &ic_params.new_count_buffer, - &ic_params.new_count_memory, - count_buffer_size); + res = CreateVkBuffer(count_buffer_size, + *device_table_, + object_info_table_.GetVkDeviceInfo(ic_params.count_buffer_info->parent_id)->handle, + nullptr, + nullptr, + replay_device_phys_mem_props_, + VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + &ic_params.new_count_buffer, + &ic_params.new_count_memory); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Failed cloning vk buffer (%s).", util::ToString(res).c_str()) @@ -362,7 +627,7 @@ VkResult DrawCallsDumpingContext::CopyDrawIndirectParameters(DrawCallParams& dc_ VkCommandBuffer cmd_buf = command_buffers_[current_cb_index_]; device_table_->CmdCopyBuffer( - cmd_buf, ic_params.params_buffer_info->handle, ic_params.new_count_buffer, 1, ®ion); + cmd_buf, ic_params.count_buffer_info->handle, ic_params.new_count_buffer, 1, ®ion); VkBufferMemoryBarrier buf_barrier; buf_barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER; @@ -409,13 +674,16 @@ VkResult DrawCallsDumpingContext::CopyDrawIndirectParameters(DrawCallParams& dc_ i_params.new_params_buffer_size = copy_buffer_size; - VkResult res = CloneBuffer(object_info_table_, - device_table_, - replay_device_phys_mem_props_, - i_params.params_buffer_info, - &i_params.new_params_buffer, - &i_params.new_params_memory, - copy_buffer_size); + VkResult res = + CreateVkBuffer(copy_buffer_size, + *device_table_, + object_info_table_.GetVkDeviceInfo(i_params.params_buffer_info->parent_id)->handle, + nullptr, + nullptr, + replay_device_phys_mem_props_, + VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + &i_params.new_params_buffer, + &i_params.new_params_memory); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Failed cloning vk buffer (%s).", util::ToString(res).c_str()) @@ -581,6 +849,16 @@ static void SnapshotBoundDescriptors(DrawCallsDumpingContext::DrawCallParams& dc } break; + case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: + { + for (const auto& [array_idx, as_info] : binding_info.acceleration_structs_khr_info) + { + dc_params.referenced_descriptors[desc_set_index][desc_binding_index] + .acceleration_structs_khr_info[array_idx] = as_info; + } + } + break; + default: break; } @@ -669,78 +947,75 @@ void DrawCallsDumpingContext::SnapshotState(DrawCallParams& dc_params) // NOTE: for indirect draws, we defer copying the indirect command-buffer until FinalizeCommandBuffer } -void DrawCallsDumpingContext::FinalizeCommandBuffer() +void DrawCallsDumpingContext::FinalizeCommandBuffer(DrawCallsDumpingContext::DrawCallParams* dc_params) { - assert((current_render_pass_type_ == kRenderPass || current_render_pass_type_ == kDynamicRendering) || - command_buffer_level_ == DumpResourcesCommandBufferLevel::kSecondary); assert(current_cb_index_ < command_buffers_.size()); assert(device_table_ != nullptr); VkCommandBuffer current_command_buffer = command_buffers_[current_cb_index_]; - if (command_buffer_level_ == DumpResourcesCommandBufferLevel::kPrimary) + GFXRECON_ASSERT(!RP_indices_.empty()); + + if (current_render_pass_type_ == kRenderPass) + { + device_table_->CmdEndRenderPass(current_command_buffer); + } + else if (current_render_pass_type_ == kDynamicRendering) { - GFXRECON_ASSERT(!RP_indices_.empty()); + device_table_->CmdEndRenderingKHR(current_command_buffer); - if (current_render_pass_type_ == kRenderPass) - { - device_table_->CmdEndRenderPass(current_command_buffer); - } - else + // Transition render targets into TRANSFER_SRC_OPTIMAL + assert(current_renderpass_ == render_targets_.size() - 1); + assert(render_targets_[current_renderpass_].size() == 1); + for (auto& rt : render_targets_[current_renderpass_]) { - device_table_->CmdEndRenderingKHR(current_command_buffer); - - // Transition render targets into TRANSFER_SRC_OPTIMAL - assert(current_renderpass_ == render_targets_.size() - 1); - assert(render_targets_[current_renderpass_].size() == 1); - for (auto& rt : render_targets_[current_renderpass_]) + for (auto& cat : rt.color_att_imgs) { - for (auto& cat : rt.color_att_imgs) + if (cat->intermediate_layout != VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL) { - if (cat->intermediate_layout != VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL) - { - VkImageMemoryBarrier barrier; - barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; - barrier.pNext = nullptr; - barrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; - barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; - barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - barrier.oldLayout = cat->intermediate_layout; - barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; - barrier.image = cat->handle; - barrier.subresourceRange = { graphics::GetFormatAspectMask(cat->format), - 0, - VK_REMAINING_MIP_LEVELS, - 0, - VK_REMAINING_ARRAY_LAYERS }; - - device_table_->CmdPipelineBarrier(current_command_buffer, - VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, - VK_PIPELINE_STAGE_TRANSFER_BIT, - 0, - 0, - nullptr, - 0, - nullptr, - 1, - &barrier); - - cat->intermediate_layout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; - } + VkImageMemoryBarrier barrier; + barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + barrier.pNext = nullptr; + barrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier.oldLayout = cat->intermediate_layout; + barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + barrier.image = cat->handle; + barrier.subresourceRange = { graphics::GetFormatAspects(cat->format), + 0, + VK_REMAINING_MIP_LEVELS, + 0, + VK_REMAINING_ARRAY_LAYERS }; + + device_table_->CmdPipelineBarrier(current_command_buffer, + VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + 0, + 0, + nullptr, + 0, + nullptr, + 1, + &barrier); + + cat->intermediate_layout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; } } } } - for (const auto& [draw_index, params] : draw_call_params_) + // Copy indirect draw params. + // In case --dump-resources-before-draw is set, since each dc_params (each entry in draw_call_params_) represents + // both "before" and "after" case, we should do this only once. For the "before" commands dc_params in + // FinalizeCommandBuffer() will be null so we distinquish between "befre" and "after" and call + // CopyDrawIndirectParameters() just once. + if (dc_params != nullptr && IsDrawCallIndirect(dc_params->type)) { - // Copy indirect draw params - if (IsDrawCallIndirect(params->type)) - { - CopyDrawIndirectParameters(*params); - } + CopyDrawIndirectParameters(*dc_params); } + device_table_->EndCommandBuffer(current_command_buffer); // Increment index of command buffer that is going to be finalized next @@ -755,7 +1030,8 @@ bool DrawCallsDumpingContext::MustDumpDrawCall(uint64_t index) const return false; } - for (size_t i = dump_resources_before_ ? current_cb_index_ / 2 : current_cb_index_; i < dc_indices_.size(); ++i) + for (size_t i = options_.dump_resources_before ? current_cb_index_ / 2 : current_cb_index_; i < dc_indices_.size(); + ++i) { if (index == dc_indices_[i]) { @@ -850,17 +1126,24 @@ VkResult DrawCallsDumpingContext::DumpDrawCalls( const uint64_t sp = RP_index.second; const uint64_t rp = RP_index.first; - // Fetch draw params for all Indirect and IndirectCount draw calls from the buffers - // into the DrawCallParams - res = FetchDrawIndirectParams(dc_index); - if (res != VK_SUCCESS) + // Some things need to be dumped once. It shouldn't matter if this is for the "before" or "after" command buffer + // but we need to distinguish between the two in order to make sure we make each thing once. + const bool is_before_command = !options_.dump_resources_before || options_.dump_resources_before && !(cb % 2); + + // Fetch draw params for all Indirect and IndirectCount draw calls from the buffers into the DrawCallParams. + if (is_before_command) { - GFXRECON_LOG_ERROR("Fetching indirect draw parameters failed (%s).", util::ToString(res).c_str()) - return res; + res = FetchDrawIndirectParams(dc_index); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Fetching indirect draw parameters failed (%s).", + util::ToString(res).c_str()) + return res; + } } // Dump vertex/index buffers - if (dump_vertex_index_buffers_ && (!dump_resources_before_ || dump_resources_before_ && !(cb % 2))) + if (options_.dump_resources_dump_vertex_index_buffer && is_before_command) { res = DumpVertexIndexBuffers(qs_index, bcb_index, dc_index); if (res != VK_SUCCESS) @@ -879,9 +1162,9 @@ VkResult DrawCallsDumpingContext::DumpDrawCalls( } // Dump immutable resources - if (dump_immutable_resources_ && (!dump_resources_before_ || dump_resources_before_ && !(cb % 2))) + if (options_.dump_all_descriptors && is_before_command) { - res = DumpImmutableDescriptors(qs_index, bcb_index, dc_index, rp); + res = DumpDescriptors(qs_index, bcb_index, dc_index, rp); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Dumping immutable resources failed (%s)", util::ToString(res).c_str()) @@ -889,27 +1172,17 @@ VkResult DrawCallsDumpingContext::DumpDrawCalls( } } - if (!dump_resources_before_ || dump_resources_before_ && !(cb % 2)) + if (!options_.dump_resources_before || options_.dump_resources_before && (cb % 2)) { - VulkanDumpDrawCallInfo draw_call_info{}; - draw_call_info.type = DumpResourceType::kDrawCallInfo; - draw_call_info.instance_table = instance_table_; - draw_call_info.device_table = device_table_; - draw_call_info.object_info_table = &object_info_table_; - draw_call_info.device_info = device_info; - draw_call_info.original_command_buffer_info = original_command_buffer_info_; - draw_call_info.bcb_index = bcb_index; - draw_call_info.qs_index = qs_index; - draw_call_info.rp = rp; - draw_call_info.sp = sp; - draw_call_info.cmd_index = dc_index; - draw_call_info.render_targets = &render_targets_[rp][sp]; - - const auto& dc_param_entry = draw_call_params_.find(draw_call_info.cmd_index); + const auto& dc_param_entry = draw_call_params_.find(dc_index); GFXRECON_ASSERT(dc_param_entry != draw_call_params_.end()); - draw_call_info.dc_param = dc_param_entry->second.get(); + const auto& dc_entry = dc_param_entry->second.get(); + + const VulkanDelegateDumpDrawCallContext draw_call_info{ + DumpResourcesPipelineStage::kGraphics, instance_table_, device_table_, dc_entry + }; - delegate_.DumpDrawCallInfo(draw_call_info, instance_table_); + delegate_.DumpDrawCallInfo(draw_call_info); } res = RevertRenderTargetImageLayouts(queue, cb); @@ -927,7 +1200,6 @@ VkResult DrawCallsDumpingContext::DumpDrawCalls( { rpc.image_descriptors.clear(); rpc.buffer_descriptors.clear(); - rpc.inline_uniform_blocks.clear(); } GFXRECON_LOG_INFO("Done.") @@ -947,8 +1219,8 @@ VkResult DrawCallsDumpingContext::RevertRenderTargetImageLayouts(VkQueue queue, return VK_SUCCESS; } - const auto entry = dynamic_rendering_attachment_layouts_.find(rp); - assert(entry != dynamic_rendering_attachment_layouts_.end()); + const auto entry = rendering_attachment_layouts_.find(rp); + assert(entry != rendering_attachment_layouts_.end()); if (!entry->second.is_dynamic) { @@ -979,8 +1251,8 @@ VkResult DrawCallsDumpingContext::RevertRenderTargetImageLayouts(VkQueue queue, for (size_t i = 0; i < render_targets_[rp][sp].color_att_imgs.size(); ++i) { - if (color_attachment_to_dump_ != kUnspecifiedColorAttachment && - static_cast(color_attachment_to_dump_) != i) + if (options_.dump_resources_color_attachment_index != kUnspecifiedColorAttachment && + static_cast(options_.dump_resources_color_attachment_index) != i) { continue; } @@ -995,11 +1267,11 @@ VkResult DrawCallsDumpingContext::RevertRenderTargetImageLayouts(VkQueue queue, image_info->intermediate_layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; } - if (dump_depth_ && render_targets_[rp][sp].depth_att_img != nullptr) + if (options_.dump_resources_dump_depth && render_targets_[rp][sp].depth_att_img != nullptr) { VulkanImageInfo* image_info = render_targets_[rp][sp].depth_att_img; - img_barrier.subresourceRange.aspectMask = graphics::GetFormatAspectMask(image_info->format); + img_barrier.subresourceRange.aspectMask = graphics::GetFormatAspects(image_info->format); img_barrier.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; img_barrier.newLayout = entry->second.depth_attachment_layout; @@ -1086,114 +1358,310 @@ VkResult DrawCallsDumpingContext::DumpRenderTargetAttachments( return VK_SUCCESS; } + auto dc_params_entry = draw_call_params_.find(dc_index); + DrawCallParams& dc_params = *dc_params_entry->second; + + dc_params.dumped_resources.bcb_index = bcb_index; + dc_params.dumped_resources.cmd_index = dc_index; + dc_params.dumped_resources.qs_index = qs_index; + assert(original_command_buffer_info_); assert(original_command_buffer_info_->parent_id != format::kNullHandleId); const VulkanDeviceInfo* device_info = object_info_table_.GetVkDeviceInfo(original_command_buffer_info_->parent_id); assert(device_info); - VulkanDumpResourceInfo res_info_base{}; - res_info_base.device_info = device_info; - res_info_base.device_table = device_table_; - res_info_base.instance_table = instance_table_; - res_info_base.object_info_table = &object_info_table_; - res_info_base.original_command_buffer_info = original_command_buffer_info_; - res_info_base.cmd_index = dc_index; - res_info_base.qs_index = qs_index; - res_info_base.bcb_index = bcb_index; - res_info_base.before_cmd = dump_resources_before_ && !(cmd_buf_index % 2); - res_info_base.rp = rp; - res_info_base.sp = sp; + auto& dumped_rts = dc_params.dumped_resources.dumped_render_targets; + const bool before_command = options_.dump_resources_before && !(cmd_buf_index % 2); + const bool insert_new_resource_entry = before_command || !options_.dump_resources_before; + const bool has_depth = render_targets_[rp][sp].depth_att_img != nullptr; + + const VulkanDelegateDumpResourceContext res_info_base(instance_table_, device_table_, compressor_, before_command); // Dump color attachments for (size_t i = 0; i < render_targets_[rp][sp].color_att_imgs.size(); ++i) { - if (color_attachment_to_dump_ != kUnspecifiedColorAttachment && - static_cast(color_attachment_to_dump_) != i) + if (options_.dump_resources_color_attachment_index != kUnspecifiedColorAttachment && + static_cast(options_.dump_resources_color_attachment_index) != i) { continue; } - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kRtv; - res_info.image_info = render_targets_[rp][sp].color_att_imgs[i]; - res_info.attachment_index = static_cast(i); - auto res = delegate_.DumpResource(res_info); - if (res != VK_SUCCESS) + const VulkanImageInfo* image_info = render_targets_[rp][sp].color_att_imgs[i]; + const ImageDumpResult can_dump_image = CanDumpImage(instance_table_, device_info->parent, image_info); + auto& dumped_rt = insert_new_resource_entry ? dumped_rts.emplace_back(DumpResourceType::kRtv, + bcb_index, + dc_index, + qs_index, + rp, + sp, + static_cast(i), + before_command, + image_info, + can_dump_image) + : *(dumped_rts.begin() + i); + if (can_dump_image != ImageDumpResult::kCanDump) { - return res; + continue; + } + + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &dumped_rt; + res_info.dumped_data = VulkanDelegateImageDumpedData(); + auto& dumped_image_data = std::get(res_info.dumped_data); + + const VkImageSubresourceRange subresource_range = { + graphics::GetFormatAspects(image_info->format), + 0, + options_.dump_resources_dump_all_image_subresources ? VK_REMAINING_MIP_LEVELS : 1, + 0, + options_.dump_resources_dump_all_image_subresources ? VK_REMAINING_ARRAY_LAYERS : 1 + }; + VkResult res = DumpImage(before_command ? dumped_rt.dumped_image_before : dumped_rt.dumped_image, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + options_.dump_resources_scale, + options_.dump_resources_dump_raw_images, + subresource_range, + dumped_image_data.data, + device_info, + device_table_, + instance_table_, + object_info_table_); + if (res == VK_SUCCESS) + { + delegate_.DumpResource(res_info); + } + else + { + dumped_rts.pop_back(); + + if (res == VK_ERROR_FEATURE_NOT_PRESENT) + { + // Failures to dump images due to multisampling should be ok + GFXRECON_LOG_WARNING("Image %" PRIu64 " could not be resolved (%s)", + image_info->capture_id, + util::ToString(image_info->format).c_str()) + } + else + { + GFXRECON_LOG_ERROR("Reading from render target image %" PRIu64 " failed (%s)", + image_info->capture_id, + util::ToString(res).c_str()); + + return res; + } } } // Dump depth attachment - if (dump_depth_ && render_targets_[rp][sp].depth_att_img != nullptr) + if (has_depth && options_.dump_resources_dump_depth) { - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kDsv; - res_info.image_info = render_targets_[rp][sp].depth_att_img; - res_info.attachment_index = DEPTH_ATTACHMENT; - auto res = delegate_.DumpResource(res_info); - if (res != VK_SUCCESS) + const VulkanImageInfo* image_info = render_targets_[rp][sp].depth_att_img; + + const ImageDumpResult can_dump_image = CanDumpImage(instance_table_, device_info->parent, image_info); + // The "before" depth target will be at the back() of the vector + GFXRECON_ASSERT(image_info != nullptr); + auto& dumped_rt = insert_new_resource_entry ? dumped_rts.emplace_back(DumpResourceType::kDsv, + bcb_index, + dc_index, + qs_index, + rp, + sp, + DEPTH_ATTACHMENT, + before_command, + image_info, + can_dump_image) + : dumped_rts.back(); + + if (can_dump_image == ImageDumpResult::kCanDump) { - return res; + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &dumped_rt; + res_info.dumped_data = VulkanDelegateImageDumpedData(); + auto& dumped_image_data = std::get(res_info.dumped_data); + + const VkImageSubresourceRange subresource_range = { + graphics::GetFormatAspects(image_info->format), + 0, + options_.dump_resources_dump_all_image_subresources ? VK_REMAINING_MIP_LEVELS : 1, + 0, + options_.dump_resources_dump_all_image_subresources ? VK_REMAINING_ARRAY_LAYERS : 1 + }; + VkResult res = DumpImage(before_command ? dumped_rt.dumped_image_before : dumped_rt.dumped_image, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + options_.dump_resources_scale, + options_.dump_resources_dump_raw_images, + subresource_range, + dumped_image_data.data, + device_info, + device_table_, + instance_table_, + object_info_table_); + + if (res == VK_SUCCESS) + { + delegate_.DumpResource(res_info); + } + else + { + dumped_rts.pop_back(); + + if (res == VK_ERROR_FEATURE_NOT_PRESENT) + { + // Failures to dump images due to multisampling should be ok + GFXRECON_LOG_WARNING("Image %" PRIu64 " could not be resolved (%s)", + image_info->capture_id, + util::ToString(image_info->format).c_str()) + } + else + { + GFXRECON_LOG_ERROR("Reading from depth render target image %" PRIu64 " failed (%s)", + image_info->capture_id, + util::ToString(res).c_str()); + + return res; + } + } } } return VK_SUCCESS; } -VkResult -DrawCallsDumpingContext::DumpImmutableDescriptors(uint64_t qs_index, uint64_t bcb_index, uint64_t dc_index, uint64_t rp) +VkResult DrawCallsDumpingContext::DumpDescriptors(uint64_t qs_index, uint64_t bcb_index, uint64_t dc_index, uint64_t rp) { assert(rp < render_pass_dumped_descriptors_.size()); assert(draw_call_params_.find(dc_index) != draw_call_params_.end()); - // Create a list of all descriptors referenced by all draw calls - std::unordered_set image_descriptors; + assert(original_command_buffer_info_); + assert(original_command_buffer_info_->parent_id != format::kNullHandleId); + const VulkanDeviceInfo* device_info = object_info_table_.GetVkDeviceInfo(original_command_buffer_info_->parent_id); + assert(device_info); - struct buffer_descriptor_info - { - VkDeviceSize offset; - VkDeviceSize range; - }; - std::unordered_map buffer_descriptors; + const VulkanDelegateDumpResourceContext res_info_base(instance_table_, device_table_, compressor_); - struct inline_uniform_block_info - { - uint32_t set; - uint32_t binding; - const std::vector* data; - }; - std::unordered_map*, inline_uniform_block_info> inline_uniform_blocks; + CommandImageSubresourceIterator cmd_subresources_entry; + cmd_subresources_entry = dc_subresources_.find(dc_index); + const bool cull_resources = cmd_subresources_entry != dc_subresources_.end(); auto dc_param_entry = draw_call_params_.find(dc_index); GFXRECON_ASSERT(dc_param_entry != draw_call_params_.end()); - const DrawCallParams& dc_params = *dc_param_entry->second; - for (const auto& desc_set : dc_params.referenced_descriptors) + DrawCallParams& dc_params = *dc_param_entry->second; + for (const auto& [desc_set_index, desc_set] : dc_params.referenced_descriptors) { - const uint32_t desc_set_index = desc_set.first; - for (const auto& desc_binding : desc_set.second) + for (const auto& [desc_binding_index, desc_binding] : desc_set) { - const uint32_t desc_binding_index = desc_binding.first; - switch (desc_binding.second.desc_type) + switch (desc_binding.desc_type) { case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: { - for (const auto& img_desc_info : desc_binding.second.image_info) + for (const auto& [array_index, img_desc_info] : desc_binding.image_info) { - if (img_desc_info.second.image_view_info != nullptr) + if (img_desc_info.image_view_info != nullptr) { - const VulkanImageInfo* img_info = - object_info_table_.GetVkImageInfo(img_desc_info.second.image_view_info->image_id); - if (img_info != nullptr && - (render_pass_dumped_descriptors_[rp].image_descriptors.find(img_info) == - render_pass_dumped_descriptors_[rp].image_descriptors.end())) + const VulkanImageInfo* image_info = + object_info_table_.GetVkImageInfo(img_desc_info.image_view_info->image_id); + + if (image_info == nullptr) { - image_descriptors.insert(img_info); - render_pass_dumped_descriptors_[rp].image_descriptors.insert(img_info); + continue; + } + + // Cull dumped descriptors + VkImageSubresourceRange subresource_range = { + graphics::GetFormatAspects(image_info->format), + 0, + options_.dump_resources_dump_all_image_subresources ? VK_REMAINING_MIP_LEVELS : 1, + 0, + options_.dump_resources_dump_all_image_subresources ? VK_REMAINING_ARRAY_LAYERS : 1 + }; + if (cull_resources && CullDescriptor(cmd_subresources_entry, + desc_set_index, + desc_binding_index, + array_index, + &subresource_range)) + { + continue; + } + + const ImageDumpResult can_dump_image = + CanDumpImage(instance_table_, device_info->parent, image_info); + + auto& new_dumped_desc = dc_params.dumped_resources.dumped_descriptors.emplace_back( + DumpResourceType::kImageDescriptor, + bcb_index, + dc_index, + qs_index, + rp, + static_cast(current_subpass_), + desc_binding.stage_flags, + desc_binding.desc_type, + desc_set_index, + desc_binding_index, + array_index, + image_info, + can_dump_image, + DumpResourcesPipelineStage::kGraphics); + + if (can_dump_image != ImageDumpResult::kCanDump) + { + continue; + } + + auto& new_dumped_image = std::get(new_dumped_desc.dumped_resource); + const DescriptorLocation loc = { desc_set_index, desc_binding_index, array_index }; + const auto dumped_desc_entry = + render_pass_dumped_descriptors_[rp].image_descriptors.find(loc); + if (dumped_desc_entry == render_pass_dumped_descriptors_[rp].image_descriptors.end()) + { + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &new_dumped_desc; + res_info.dumped_data = VulkanDelegateImageDumpedData(); + auto& image_raw_data = std::get(res_info.dumped_data); + + VkResult res = DumpImage(new_dumped_image, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + options_.dump_resources_scale, + options_.dump_resources_dump_raw_images, + subresource_range, + image_raw_data.data, + device_info, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + dc_params.dumped_resources.dumped_descriptors.pop_back(); + + if (res == VK_ERROR_FEATURE_NOT_PRESENT) + { + // Failures to dump images due to multisampling should be ok + GFXRECON_LOG_WARNING("Image %" PRIu64 " could not be resolved (%s)", + image_info->capture_id, + util::ToString(image_info->format).c_str()) + + return VK_SUCCESS; + } + else + { + GFXRECON_LOG_ERROR("Reading from image %" PRIu64 " failed (%s)", + image_info->capture_id, + util::ToString(res).c_str()); + + return res; + } + } + + delegate_.DumpResource(res_info); + + render_pass_dumped_descriptors_[rp].image_descriptors.emplace(loc, new_dumped_image); + } + else + { + new_dumped_image = dumped_desc_entry->second; } } } @@ -1203,20 +1671,81 @@ DrawCallsDumpingContext::DumpImmutableDescriptors(uint64_t qs_index, uint64_t bc case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: { - for (const auto& buf_desc_info : desc_binding.second.texel_buffer_view_info) + for (const auto& [array_index, buf_desc_info] : desc_binding.texel_buffer_view_info) { const VulkanBufferInfo* buffer_info = - object_info_table_.GetVkBufferInfo(buf_desc_info.second->buffer_id); - if (buffer_info != nullptr && - (render_pass_dumped_descriptors_[rp].buffer_descriptors.find(buffer_info) == - render_pass_dumped_descriptors_[rp].buffer_descriptors.end())) + object_info_table_.GetVkBufferInfo(buf_desc_info->buffer_id); + + if (buffer_info == nullptr) + { + continue; + } + + // Cull dumped descriptors + if (cull_resources && + CullDescriptor(cmd_subresources_entry, desc_set_index, desc_binding_index, array_index)) + { + continue; + } + + const VkDeviceSize offset = buf_desc_info->offset; + const VkDeviceSize range = buf_desc_info->range; + const VkDeviceSize size = range == VK_WHOLE_SIZE ? buffer_info->size - offset : range; + + auto& new_dumped_desc = dc_params.dumped_resources.dumped_descriptors.emplace_back( + DumpResourceType::kBufferDescriptor, + bcb_index, + dc_index, + qs_index, + rp, + static_cast(current_subpass_), + desc_binding.stage_flags, + desc_binding.desc_type, + desc_set_index, + desc_binding_index, + array_index, + buffer_info->handle, + buffer_info->capture_id, + offset, + size, + DumpResourcesPipelineStage::kGraphics); + + const DescriptorLocation loc = { desc_set_index, desc_binding_index, array_index }; + const auto& dumped_desc_entry = + render_pass_dumped_descriptors_[rp].buffer_descriptors.find(loc); + if (dumped_desc_entry == render_pass_dumped_descriptors_[rp].buffer_descriptors.end()) { - buffer_descriptors.emplace( - std::piecewise_construct, - std::forward_as_tuple(buffer_info), - std::forward_as_tuple(buffer_descriptor_info{ buf_desc_info.second->offset, - buf_desc_info.second->range })); - render_pass_dumped_descriptors_[rp].buffer_descriptors.insert(buffer_info); + const auto& new_dumped_buffer = std::get(new_dumped_desc.dumped_resource); + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &new_dumped_desc; + res_info.dumped_data = VulkanDelegateBufferDumpedData(); + auto& dumped_buffer_data = std::get(res_info.dumped_data); + + VkResult res = DumpBuffer(new_dumped_buffer, + dumped_buffer_data.data, + device_info, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Reading from buffer descriptor %" PRIu64 " failed (%s)", + buffer_info->capture_id, + util::ToString(res).c_str()); + + dc_params.dumped_resources.dumped_descriptors.pop_back(); + + return res; + } + + delegate_.DumpResource(res_info); + + render_pass_dumped_descriptors_[rp].buffer_descriptors.emplace(loc, new_dumped_buffer); + } + else + { + auto& new_dumped_buffer = std::get(new_dumped_desc.dumped_resource); + new_dumped_buffer = dumped_desc_entry->second; } } } @@ -1227,18 +1756,79 @@ DrawCallsDumpingContext::DumpImmutableDescriptors(uint64_t qs_index, uint64_t bc case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: { - for (const auto& buf_desc_info : desc_binding.second.buffer_info) + for (const auto& [array_index, buf_desc_info] : desc_binding.buffer_info) { - const VulkanBufferInfo* buffer_info = buf_desc_info.second.buffer_info; - if (buffer_info != nullptr && - (render_pass_dumped_descriptors_[rp].buffer_descriptors.find(buffer_info) == - render_pass_dumped_descriptors_[rp].buffer_descriptors.end())) + const VulkanBufferInfo* buffer_info = buf_desc_info.buffer_info; + if (buffer_info == nullptr) { - buffer_descriptors.emplace(std::piecewise_construct, - std::forward_as_tuple(buffer_info), - std::forward_as_tuple(buffer_descriptor_info{ - buf_desc_info.second.offset, buf_desc_info.second.range })); - render_pass_dumped_descriptors_[rp].buffer_descriptors.insert(buffer_info); + continue; + } + + // Cull dumped descriptors + if (cull_resources && + CullDescriptor(cmd_subresources_entry, desc_set_index, desc_binding_index, array_index)) + { + continue; + } + + const VkDeviceSize offset = buf_desc_info.offset; + const VkDeviceSize range = buf_desc_info.range; + const VkDeviceSize size = range == VK_WHOLE_SIZE ? buffer_info->size - offset : range; + + auto& new_dumped_desc = dc_params.dumped_resources.dumped_descriptors.emplace_back( + DumpResourceType::kBufferDescriptor, + bcb_index, + dc_index, + qs_index, + rp, + static_cast(current_subpass_), + desc_binding.stage_flags, + desc_binding.desc_type, + desc_set_index, + desc_binding_index, + array_index, + buffer_info->handle, + buffer_info->capture_id, + offset, + size, + DumpResourcesPipelineStage::kGraphics); + + const DescriptorLocation loc = { desc_set_index, desc_binding_index, array_index }; + const auto& dumped_desc_entry = + render_pass_dumped_descriptors_[rp].buffer_descriptors.find(loc); + if (dumped_desc_entry == render_pass_dumped_descriptors_[rp].buffer_descriptors.end()) + { + const auto& new_dumped_buffer = std::get(new_dumped_desc.dumped_resource); + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &new_dumped_desc; + res_info.dumped_data = VulkanDelegateBufferDumpedData(); + auto& dumped_buffer_data = std::get(res_info.dumped_data); + + VkResult res = DumpBuffer(new_dumped_buffer, + dumped_buffer_data.data, + device_info, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Reading from buffer descriptor %" PRIu64 " failed (%s)", + buffer_info->capture_id, + util::ToString(res).c_str()); + + dc_params.dumped_resources.dumped_descriptors.pop_back(); + + return res; + } + + delegate_.DumpResource(res_info); + + render_pass_dumped_descriptors_[rp].buffer_descriptors.emplace(loc, new_dumped_buffer); + } + else + { + auto& new_dumped_buffer = std::get(new_dumped_desc.dumped_resource); + new_dumped_buffer = dumped_desc_entry->second; } } } @@ -1246,109 +1836,116 @@ DrawCallsDumpingContext::DumpImmutableDescriptors(uint64_t qs_index, uint64_t bc case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK: { - if (render_pass_dumped_descriptors_[rp].inline_uniform_blocks.find( - &desc_binding.second.inline_uniform_block) == - render_pass_dumped_descriptors_[rp].inline_uniform_blocks.end()) + // Cull dumped descriptors + if (cull_resources && CullDescriptor(cmd_subresources_entry, desc_set_index, desc_binding_index, 0)) { - inline_uniform_blocks[&(desc_binding.second.inline_uniform_block)] = { - desc_set_index, desc_binding_index, &(desc_binding.second.inline_uniform_block) - }; - render_pass_dumped_descriptors_[rp].inline_uniform_blocks.insert( - &desc_binding.second.inline_uniform_block); + continue; } + + auto& new_dumped_desc = dc_params.dumped_resources.dumped_descriptors.emplace_back( + DumpResourceType::kInlineUniformBufferDescriptor, + bcb_index, + dc_index, + qs_index, + rp, + static_cast(current_subpass_), + desc_binding.stage_flags, + desc_binding.desc_type, + desc_set_index, + desc_binding_index, + DumpResourcesPipelineStage::kGraphics); + + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &new_dumped_desc; + res_info.dumped_data = VulkanDelegateBufferDumpedData(); + auto& dumped_buffer_data = std::get(res_info.dumped_data); + dumped_buffer_data.data = desc_binding.inline_uniform_block; + delegate_.DumpResource(res_info); } break; case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: + { + for (const auto& [array_index, as_info] : desc_binding.acceleration_structs_khr_info) + { + if (as_info == nullptr) + { + continue; + } + + GFXRECON_ASSERT(as_info->type == VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR); + auto& new_dumped_desc = dc_params.dumped_resources.dumped_descriptors.emplace_back( + DumpResourceType::kAccelerationStructure, + bcb_index, + dc_index, + qs_index, + desc_binding.stage_flags, + desc_binding.desc_type, + desc_set_index, + desc_binding_index, + array_index, + as_info, + options_.dump_resources_dump_build_AS_input_buffers, + DumpResourcesPipelineStage::kGraphics); + + auto& new_dumped_as = std::get(new_dumped_desc.dumped_resource); + const DescriptorLocation loc = { desc_set_index, desc_binding_index, array_index }; + const auto& dumped_descs_entry = + render_pass_dumped_descriptors_[rp].acceleration_structures.find(loc); + if (dumped_descs_entry == render_pass_dumped_descriptors_[rp].acceleration_structures.end()) + { + render_pass_dumped_descriptors_[rp].acceleration_structures.emplace(loc, new_dumped_as); + + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &new_dumped_desc; + res_info.dumped_data = VulkanDelegateAccelerationStructureDumpedData(); + auto& dumped_as_data = + std::get(res_info.dumped_data); + + auto tlas_context_entry = acceleration_structures_context_.find(as_info); + GFXRECON_ASSERT(tlas_context_entry != acceleration_structures_context_.end()); + AccelerationStructureDumpResourcesContext* tlas_context = tlas_context_entry->second.get(); + + VkResult res = DumpAccelerationStructure(new_dumped_as, + dumped_as_data.data, + tlas_context, + acceleration_structures_context_, + device_info, + *device_table_, + object_info_table_, + *instance_table_, + address_trackers_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Dumping acceleration structure %" PRIu64 " failed (%s)", + as_info->capture_id, + util::ToString(res).c_str()); + dc_params.dumped_resources.dumped_descriptors.pop_back(); + return res; + } + + delegate_.DumpResource(res_info); + } + else + { + new_dumped_as = dumped_descs_entry->second; + } + } + } + break; + case VK_DESCRIPTOR_TYPE_SAMPLER: break; default: GFXRECON_LOG_WARNING_ONCE("%s(): Descriptor type (%s) not handled", __func__, - util::ToString(desc_binding.second.desc_type).c_str()); + util::ToString(desc_binding.desc_type).c_str()); break; } } } - assert(original_command_buffer_info_); - assert(original_command_buffer_info_->parent_id != format::kNullHandleId); - const VulkanDeviceInfo* device_info = object_info_table_.GetVkDeviceInfo(original_command_buffer_info_->parent_id); - assert(device_info); - - VulkanDumpResourceInfo res_info_base{}; - res_info_base.device_info = device_info; - res_info_base.device_table = device_table_; - res_info_base.instance_table = instance_table_; - res_info_base.object_info_table = &object_info_table_; - res_info_base.original_command_buffer_info = original_command_buffer_info_; - res_info_base.cmd_index = dc_index; - res_info_base.qs_index = qs_index; - res_info_base.bcb_index = bcb_index; - res_info_base.rp = rp; - - for (const auto& image_info : image_descriptors) - { - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kImageDescriptor; - res_info.image_info = image_info; - auto res = delegate_.DumpResource(res_info); - if (res != VK_SUCCESS) - { - return res; - } - } - - const VulkanPhysicalDeviceInfo* phys_dev_info = object_info_table_.GetVkPhysicalDeviceInfo(device_info->parent_id); - assert(phys_dev_info); - - graphics::VulkanResourcesUtil resource_util(device_info->handle, - device_info->parent, - *device_table_, - *instance_table_, - *phys_dev_info->replay_device_info->memory_properties); - - for (const auto& buf : buffer_descriptors) - { - VulkanDumpResourceInfo res_info = res_info_base; - res_info.buffer_info = buf.first; - const VkDeviceSize offset = buf.second.offset; - const VkDeviceSize range = buf.second.range; - const VkDeviceSize size = range == VK_WHOLE_SIZE ? res_info.buffer_info->size - offset : range; - - VkResult res = resource_util.ReadFromBufferResource( - res_info.buffer_info->handle, size, offset, res_info.buffer_info->queue_family_index, res_info.data); - if (res != VK_SUCCESS) - { - GFXRECON_LOG_ERROR("Reading from buffer resource %" PRIu64 " failed (%s).", - res_info.buffer_info->capture_id, - util::ToString(res).c_str()) - return res; - } - - res_info.type = DumpResourceType::kBufferDescriptor; - res = delegate_.DumpResource(res_info); - if (res != VK_SUCCESS) - { - return res; - } - } - - for (const auto& iub : inline_uniform_blocks) - { - VulkanDumpResourceInfo res_info = res_info_base; - res_info.type = DumpResourceType::kInlineUniformBufferDescriptor; - res_info.set = iub.second.set; - res_info.binding = iub.second.binding; - res_info.data = *iub.second.data; - auto res = delegate_.DumpResource(res_info); - if (res != VK_SUCCESS) - { - return res; - } - } - return VK_SUCCESS; } @@ -1362,6 +1959,13 @@ VkResult DrawCallsDumpingContext::FetchDrawIndirectParams(uint64_t dc_index) const VulkanPhysicalDeviceInfo* phys_dev_info = object_info_table_.GetVkPhysicalDeviceInfo(device_info->parent_id); assert(phys_dev_info); + const uint32_t transfer_queue_index = FindTransferQueueFamilyIndex(device_info->enabled_queue_family_flags); + if (transfer_queue_index == VK_QUEUE_FAMILY_IGNORED) + { + GFXRECON_LOG_ERROR("Failed to find a transfer queue") + return VK_ERROR_UNKNOWN; + } + graphics::VulkanResourcesUtil resource_util(device_info->handle, device_info->parent, *device_table_, @@ -1390,7 +1994,7 @@ VkResult DrawCallsDumpingContext::FetchDrawIndirectParams(uint64_t dc_index) // Fetch draw count buffer std::vector data; VkResult res = resource_util.ReadFromBufferResource( - ic_params.new_count_buffer, sizeof(uint32_t), 0, ic_params.count_buffer_info->queue_family_index, data); + ic_params.new_count_buffer, sizeof(uint32_t), 0, transfer_queue_index, data); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Reading from buffer resource failed (%s).", util::ToString(res).c_str()) @@ -1437,7 +2041,7 @@ VkResult DrawCallsDumpingContext::FetchDrawIndirectParams(uint64_t dc_index) // Fetch param buffers res = resource_util.ReadFromBufferResource( - ic_params.new_params_buffer, params_actual_size, 0, ic_params.params_buffer_info->queue_family_index, data); + ic_params.new_params_buffer, params_actual_size, 0, transfer_queue_index, data); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Reading from buffer resource failed (%s).", util::ToString(res).c_str()) @@ -1484,11 +2088,8 @@ VkResult DrawCallsDumpingContext::FetchDrawIndirectParams(uint64_t dc_index) } std::vector params_data; - VkResult res = resource_util.ReadFromBufferResource(i_params.new_params_buffer, - i_params.new_params_buffer_size, - 0, - i_params.params_buffer_info->queue_family_index, - params_data); + VkResult res = resource_util.ReadFromBufferResource( + i_params.new_params_buffer, i_params.new_params_buffer_size, 0, transfer_queue_index, params_data); if (res != VK_SUCCESS) { GFXRECON_LOG_ERROR("Reading from buffer resource failed (%s).", util::ToString(res).c_str()) @@ -1523,6 +2124,13 @@ VkResult DrawCallsDumpingContext::DumpVertexIndexBuffers(uint64_t qs_index, uint const VulkanPhysicalDeviceInfo* phys_dev_info = object_info_table_.GetVkPhysicalDeviceInfo(device_info->parent_id); assert(phys_dev_info); + const uint32_t transfer_queue_index = FindTransferQueueFamilyIndex(device_info->enabled_queue_family_flags); + if (transfer_queue_index == VK_QUEUE_FAMILY_IGNORED) + { + GFXRECON_LOG_ERROR("Failed to find a transfer queue") + return VK_ERROR_UNKNOWN; + } + graphics::VulkanResourcesUtil resource_util(device_info->handle, device_info->parent, *device_table_, @@ -1536,15 +2144,7 @@ VkResult DrawCallsDumpingContext::DumpVertexIndexBuffers(uint64_t qs_index, uint MinMaxVertexIndex min_max_vertex_indices = { 0, 0 }; bool empty_draw_call = false; - VulkanDumpResourceInfo res_info_base{}; - res_info_base.device_info = device_info; - res_info_base.device_table = device_table_; - res_info_base.instance_table = instance_table_; - res_info_base.object_info_table = &object_info_table_; - res_info_base.original_command_buffer_info = original_command_buffer_info_; - res_info_base.cmd_index = dc_index; - res_info_base.qs_index = qs_index; - res_info_base.bcb_index = bcb_index; + const VulkanDelegateDumpResourceContext res_info_base(instance_table_, device_table_, compressor_); // Dump index buffer if (IsDrawCallIndexed(dc_params.type) && dc_params.referenced_index_buffer.buffer_info != nullptr) @@ -1575,11 +2175,13 @@ VkResult DrawCallsDumpingContext::DumpVertexIndexBuffers(uint64_t qs_index, uint if (ic_params.actual_draw_count) { + bool has_count = false; assert(ic_params.draw_indexed_params != nullptr); for (uint32_t d = 0; d < ic_params.actual_draw_count; ++d) { - const uint32_t indirect_index_count = ic_params.draw_indexed_params[d].indexCount; - if (indirect_index_count && ic_params.draw_indexed_params[d].instanceCount) + const uint32_t indirect_index_count = ic_params.draw_indexed_params[d].indexCount; + const uint32_t indirect_instance_count = ic_params.draw_indexed_params[d].instanceCount; + if (indirect_index_count && indirect_instance_count) { const uint32_t indirect_first_index = ic_params.draw_indexed_params[d].firstIndex; abs_index_count = std::max(abs_index_count, indirect_index_count + indirect_first_index); @@ -1587,8 +2189,10 @@ VkResult DrawCallsDumpingContext::DumpVertexIndexBuffers(uint64_t qs_index, uint DrawIndexedParams{ indirect_index_count, indirect_first_index, ic_params.draw_indexed_params[d].vertexOffset }); + has_count = true; } } + empty_draw_call = !has_count; } } else @@ -1599,11 +2203,13 @@ VkResult DrawCallsDumpingContext::DumpVertexIndexBuffers(uint64_t qs_index, uint if (i_params.draw_count) { + bool has_count = false; assert(i_params.draw_indexed_params != nullptr); for (uint32_t d = 0; d < i_params.draw_count; ++d) { - const uint32_t indirect_index_count = i_params.draw_indexed_params[d].indexCount; - if (indirect_index_count && i_params.draw_indexed_params[d].instanceCount) + const uint32_t indirect_index_count = i_params.draw_indexed_params[d].indexCount; + const uint32_t indirect_instance_count = i_params.draw_indexed_params[d].instanceCount; + if (indirect_index_count && indirect_instance_count) { const uint32_t indirect_first_index = i_params.draw_indexed_params[d].firstIndex; abs_index_count = std::max(abs_index_count, indirect_index_count + indirect_first_index); @@ -1611,8 +2217,10 @@ VkResult DrawCallsDumpingContext::DumpVertexIndexBuffers(uint64_t qs_index, uint DrawIndexedParams{ indirect_index_count, indirect_first_index, i_params.draw_indexed_params[d].vertexOffset }); + has_count = true; } } + empty_draw_call = !has_count; } } } @@ -1636,9 +2244,6 @@ VkResult DrawCallsDumpingContext::DumpVertexIndexBuffers(uint64_t qs_index, uint const uint32_t index_size = VkIndexTypeToBytes(index_type); const uint32_t offset = dc_params.referenced_index_buffer.offset; - dc_params.json_output_info.index_buffer_info.dumped = true; - dc_params.json_output_info.index_buffer_info.offset = offset; - // Check if the exact size has been provided by vkCmdBindIndexBuffer2 uint32_t total_size = (dc_params.referenced_index_buffer.size != 0) ? (dc_params.referenced_index_buffer.size) @@ -1651,35 +2256,46 @@ VkResult DrawCallsDumpingContext::DumpVertexIndexBuffers(uint64_t qs_index, uint total_size = dc_params.referenced_index_buffer.buffer_info->size - offset; } - dc_params.referenced_index_buffer.actual_size = total_size; - VulkanDumpResourceInfo res_info = res_info_base; - VkResult res = - resource_util.ReadFromBufferResource(dc_params.referenced_index_buffer.buffer_info->handle, - total_size, - offset, - dc_params.referenced_index_buffer.buffer_info->queue_family_index, - res_info.data); + auto& new_dumped_index_buffer = dc_params.dumped_resources.dumped_vertex_index_buffers.emplace_back( + DumpResourceType::kIndex, + bcb_index, + dc_index, + qs_index, + index_type, + dc_params.referenced_index_buffer.buffer_info->handle, + dc_params.referenced_index_buffer.buffer_info->capture_id, + total_size, + offset); + + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &new_dumped_index_buffer; + res_info.dumped_data = VulkanDelegateBufferDumpedData(); + auto& dumped_buffer_data = std::get(res_info.dumped_data); + + VkResult res = DumpBuffer(new_dumped_index_buffer.buffer, + dumped_buffer_data.data, + device_info, + device_table_, + instance_table_, + object_info_table_); if (res != VK_SUCCESS) { - GFXRECON_LOG_ERROR("Reading index buffer resource %" PRIu64 " failed (%s).", - dc_params.referenced_index_buffer.buffer_info->capture_id, + GFXRECON_LOG_ERROR("Reading from index buffer resource failed (%s).", util::ToString(res).c_str()) - return res; - } - res_info.type = DumpResourceType::kIndex; - res_info.index_type = index_type; - res = delegate_.DumpResource(res_info); - if (res != VK_SUCCESS) - { + dc_params.dumped_resources.dumped_vertex_index_buffers.erase( + dc_params.dumped_resources.dumped_vertex_index_buffers.end() - 1); + return res; } + delegate_.DumpResource(res_info); + // Parse all indices in order to find the smallest and greatest index for (const auto& params : indexed_params) { MinMaxVertexIndex min_max_indices = FindMinMaxVertexIndices( - res_info.data, params.index_count, params.first_index, params.vertex_offset, index_type); + dumped_buffer_data.data, params.index_count, params.first_index, params.vertex_offset, index_type); min_max_vertex_indices.min = std::min(min_max_indices.min, min_max_vertex_indices.min); min_max_vertex_indices.max = std::max(min_max_indices.max, min_max_vertex_indices.max); @@ -1829,7 +2445,7 @@ VkResult DrawCallsDumpingContext::DumpVertexIndexBuffers(uint64_t qs_index, uint } // Check if an attribute references this binding - if (!dump_unused_vertex_bindings_ && + if (!options_.dump_resources_dump_unused_vertex_bindings && !dc_params.vertex_input_state.IsVertexBindingReferenced(binding_index)) { continue; @@ -1893,32 +2509,40 @@ VkResult DrawCallsDumpingContext::DumpVertexIndexBuffers(uint64_t qs_index, uint total_size = vb_entry.buffer_info->size - offset; } - dc_params.json_output_info.vertex_bindings_info[binding_index] = { offset }; - - vb_entry.actual_size = total_size; - VulkanDumpResourceInfo res_info = res_info_base; - - VkResult res = resource_util.ReadFromBufferResource(vb_entry.buffer_info->handle, - total_size, - offset, - vb_entry.buffer_info->queue_family_index, - res_info.data); + auto& new_dumped_vertex_buffer = dc_params.dumped_resources.dumped_vertex_index_buffers.emplace_back( + DumpResourceType::kVertex, + bcb_index, + dc_index, + qs_index, + binding_index, + vb_entry.buffer_info->handle, + vb_entry.buffer_info->capture_id, + total_size, + offset); + + VulkanDelegateDumpResourceContext res_info = res_info_base; + res_info.dumped_resource = &new_dumped_vertex_buffer; + res_info.dumped_data = VulkanDelegateBufferDumpedData(); + auto& dumped_buffer_data = std::get(res_info.dumped_data); + + VkResult res = DumpBuffer(new_dumped_vertex_buffer.buffer, + dumped_buffer_data.data, + device_info, + device_table_, + instance_table_, + object_info_table_); if (res != VK_SUCCESS) { - GFXRECON_LOG_ERROR("Reading from buffer resource failed (%s).", + GFXRECON_LOG_ERROR("Reading from vertex buffer resource failed (%s).", util::ToString(res).c_str()) - return res; - } - res_info.type = DumpResourceType::kVertex; - res_info.binding = binding_index; - res = delegate_.DumpResource(res_info); - if (res != VK_SUCCESS) - { - GFXRECON_LOG_ERROR("Reading from buffer resource failed (%s).", - util::ToString(res).c_str()) + dc_params.dumped_resources.dumped_vertex_index_buffers.erase( + dc_params.dumped_resources.dumped_vertex_index_buffers.end() - 1); + return res; } + + delegate_.DumpResource(res_info); } } } @@ -1926,7 +2550,7 @@ VkResult DrawCallsDumpingContext::DumpVertexIndexBuffers(uint64_t qs_index, uint return VK_SUCCESS; } -VkResult DrawCallsDumpingContext::CloneCommandBuffer(VulkanCommandBufferInfo* orig_cmd_buf_info, +VkResult DrawCallsDumpingContext::BeginCommandBuffer(VulkanCommandBufferInfo* orig_cmd_buf_info, const graphics::VulkanDeviceTable* dev_table, const graphics::VulkanInstanceTable* inst_table, const VkCommandBufferBeginInfo* begin_info) @@ -1959,7 +2583,13 @@ VkResult DrawCallsDumpingContext::CloneCommandBuffer(VulkanCommandBufferInfo* GFXRECON_LOG_ERROR("AllocateCommandBuffers failed with %s", util::ToString(res).c_str()); return res; } - dev_table->BeginCommandBuffer(command_buffer, begin_info); + + res = dev_table->BeginCommandBuffer(command_buffer, begin_info); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("BeginCommandBuffer failed with %s", util::ToString(res).c_str()); + return res; + } } assert(original_command_buffer_info_ == nullptr); @@ -2013,7 +2643,7 @@ void DrawCallsDumpingContext::BindDescriptorSets( uint32_t dynamic_offset_index = 0; for (size_t i = 0; i < descriptor_sets_infos.size(); ++i) { - uint32_t set_index = first_set + i; + const uint32_t set_index = first_set + i; if (descriptor_sets_infos[i] != nullptr) { @@ -2021,14 +2651,12 @@ void DrawCallsDumpingContext::BindDescriptorSets( if (dynamicOffsetCount && pDynamicOffsets != nullptr) { - for (const auto& binding : descriptor_sets_infos[i]->descriptors) + for (auto& [binding_index, binding] : bound_descriptor_sets_gr_[set_index]) { - const uint32_t binding_index = binding.first; - - if (binding.second.desc_type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC || - binding.second.desc_type == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC) + if (binding.desc_type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC || + binding.desc_type == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC) { - for (auto& [ai, buf_info] : bound_descriptor_sets_gr_[set_index][binding_index].buffer_info) + for (auto& [array_index, buf_info] : binding.buffer_info) { buf_info.offset += pDynamicOffsets[dynamic_offset_index]; ++dynamic_offset_index; @@ -2343,9 +2971,9 @@ VkResult DrawCallsDumpingContext::CloneRenderPass2(const VulkanRenderPassInfo* new_subp_desc = original_render_pass_ci->pSubpasses[sub]; VkRenderPassCreateInfo2 ci; - ci.sType = render_pass_info->func_version == VulkanRenderPassInfo::kCreateRenderPass2 - ? VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO - : VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR; + // VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2 and VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR are equal so + // it doesn't matter which one we use + ci.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2; ci.flags = original_render_pass_ci->flags; ci.attachmentCount = modified_attachments.size(); ci.pAttachments = modified_attachments.empty() ? nullptr : modified_attachments.data(); @@ -2671,7 +3299,7 @@ VkResult DrawCallsDumpingContext::BeginRenderPass(const VulkanRenderPassInfo* r device_table_->CmdBeginRenderPass(*it, &modified_renderpass_begin_info, contents); } - auto new_entry = dynamic_rendering_attachment_layouts_.emplace( + auto new_entry = rendering_attachment_layouts_.emplace( std::piecewise_construct, std::forward_as_tuple(current_renderpass_), std::forward_as_tuple()); assert(new_entry.second); new_entry.first->second.is_dynamic = false; @@ -3146,9 +3774,9 @@ DrawCallsDumpingContext::RenderPassSubpassPair DrawCallsDumpingContext::GetRende for (const auto& ex_com : secondaries_) { const uint64_t execute_commands_index = ex_com.first; - for (const DrawCallsDumpingContext* secondary_context : ex_com.second) + for (const auto secondary_context : ex_com.second) { - const DrawCallIndices& secondary_dcs = secondary_context->GetDrawCallIndices(); + const CommandIndices& secondary_dcs = secondary_context->GetDrawCallIndices(); if (IsInsideRange(secondary_dcs, dc_index)) { @@ -3158,15 +3786,11 @@ DrawCallsDumpingContext::RenderPassSubpassPair DrawCallsDumpingContext::GetRende const std::vector& render_pass = RP_indices_[rp]; GFXRECON_ASSERT(!render_pass.empty()); - if (execute_commands_index > render_pass[render_pass.size() - 1]) - { - continue; - } - for (uint64_t sp = 0; sp < render_pass.size() - 1; ++sp) { - if (execute_commands_index > render_pass[sp] && - execute_commands_index < render_pass[sp + 1]) + if ((execute_commands_index > render_pass[sp] && + execute_commands_index < render_pass[sp + 1]) || + (dc_index > render_pass[sp] && dc_index < render_pass[sp + 1])) { return { rp, sp }; } @@ -3211,7 +3835,7 @@ size_t DrawCallsDumpingContext::CmdBufToDCVectorIndex(size_t cmd_buf_index) cons { assert(cmd_buf_index < command_buffers_.size()); - if (dump_resources_before_) + if (options_.dump_resources_before) { assert(cmd_buf_index / 2 < dc_indices_.size()); @@ -3243,6 +3867,11 @@ void DrawCallsDumpingContext::BeginRendering(const std::vector assert(color_attachments.size() == color_attachment_layouts.size()); assert(current_render_pass_type_ == kNone); + if (command_buffer_level_ == DumpResourcesCommandBufferLevel::kSecondary) + { + secondary_with_dynamic_rendering_ = true; + } + current_render_pass_type_ = kDynamicRendering; for (size_t i = 0; i < color_attachments.size(); ++i) @@ -3258,7 +3887,7 @@ void DrawCallsDumpingContext::BeginRendering(const std::vector SetRenderTargets(color_attachments, depth_attachment, true); SetRenderArea(render_area); - auto [new_entry_it, success] = dynamic_rendering_attachment_layouts_.emplace( + auto [new_entry_it, success] = rendering_attachment_layouts_.emplace( std::piecewise_construct, std::forward_as_tuple(current_renderpass_), std::forward_as_tuple()); GFXRECON_ASSERT(success); @@ -3267,8 +3896,8 @@ void DrawCallsDumpingContext::BeginRendering(const std::vector new_entry_it->second.depth_attachment_layout = depth_attachment_layout; } -void DrawCallsDumpingContext::AssignSecondary(uint64_t execute_commands_index, - DrawCallsDumpingContext* secondary_context) +void DrawCallsDumpingContext::AssignSecondary(uint64_t execute_commands_index, + std::shared_ptr secondary_context) { GFXRECON_ASSERT(secondary_context); @@ -3301,6 +3930,7 @@ uint32_t DrawCallsDumpingContext::RecaclulateCommandBuffers() std::vector& secondary_dc_indices = secondary_context->GetDrawCallIndices(); dc_indices_.reserve(n_command_buffers); dc_indices_.insert(dc_indices_.end(), secondary_dc_indices.begin(), secondary_dc_indices.end()); + std::sort(dc_indices_.begin(), dc_indices_.end()); } } @@ -3310,6 +3940,83 @@ uint32_t DrawCallsDumpingContext::RecaclulateCommandBuffers() return n_command_buffers; } +void DrawCallsDumpingContext::MergeRenderPasses(const DrawCallsDumpingContext& secondary_context) +{ + // Here we only need to take care of secondary command buffers that have dynamic rendering. + // Traditional render passes do not need special handling since their commands are recorded directly into the + // primary command buffer. + if (!secondary_context.secondary_with_dynamic_rendering_) + { + return; + } + + RenderPassIndices& rp_primary = RP_indices_; + const RenderPassIndices& rp_secondary = secondary_context.RP_indices_; + rp_primary.reserve(rp_primary.size() + rp_secondary.size()); + for (auto prim_it = rp_primary.begin(); prim_it < rp_primary.end(); ++prim_it) + { + uint32_t sec_rts_copied = 0; + for (auto sec_it = rp_secondary.begin(); sec_it < rp_secondary.end(); ++sec_it) + { + if (prim_it->empty()) + { + if (!sec_it->empty()) + { + *prim_it = *sec_it; + + // This is a dynamic rendering. Push back an empty render pass clone. + render_pass_clones_.emplace_back(); + + // Copy render targets to primary + SetRenderTargets(secondary_context.render_targets_[sec_rts_copied][0].color_att_imgs, + secondary_context.render_targets_[sec_rts_copied][0].depth_att_img, + true); + + // Copy render targets' layout into primary + GFXRECON_ASSERT(!secondary_context.render_targets_.empty()); + rendering_attachment_layouts_.insert(secondary_context.rendering_attachment_layouts_.begin(), + secondary_context.rendering_attachment_layouts_.end()); + ++sec_rts_copied; + } + } + else + { + if (!sec_it->empty()) + { + if ((*sec_it)[0] < (*prim_it)[0]) + { + prim_it = rp_primary.insert(prim_it, *sec_it); + + // This is a dynamic rendering. Push back an empty render pass clone. + render_pass_clones_.emplace_back(); + render_pass_clones_[current_renderpass_].emplace_back(); + + // Copy render targets to primary + SetRenderTargets(secondary_context.render_targets_[sec_rts_copied][0].color_att_imgs, + secondary_context.render_targets_[sec_rts_copied][0].depth_att_img, + true); + + // Copy render targets' layout into primary + GFXRECON_ASSERT(!secondary_context.render_targets_.empty()); + rendering_attachment_layouts_.insert(secondary_context.rendering_attachment_layouts_.begin(), + secondary_context.rendering_attachment_layouts_.end()); + + ++prim_it; + ++sec_rts_copied; + } + } + } + } + + if (sec_rts_copied == rp_secondary.size()) + { + break; + } + } + + current_renderpass_ += secondary_context.rendering_attachment_layouts_.size(); +} + void DrawCallsDumpingContext::UpdateSecondaries() { // The purpose of this function is to transfer rendering context from a primary to its secondaries. diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_draw_calls.h b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_draw_calls.h index 72e2e3fad..8e7e13023 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_draw_calls.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_draw_calls.h @@ -23,14 +23,16 @@ #ifndef GFXRECON_GENERATED_VULKAN_REPLAY_DUMP_RESOURCES_DRAW_CALLS_H #define GFXRECON_GENERATED_VULKAN_REPLAY_DUMP_RESOURCES_DRAW_CALLS_H +#include "decode/api_decoder.h" #include "decode/common_object_info_table.h" +#include "decode/vulkan_device_address_tracker.h" +#include "decode/vulkan_replay_dump_resources_as.h" #include "decode/vulkan_replay_dump_resources_common.h" #include "decode/vulkan_object_info.h" #include "decode/vulkan_replay_options.h" #include "generated/generated_vulkan_dispatch_table.h" -#include "format/format.h" +#include "util/compressor.h" #include "util/defines.h" -#include "vulkan/vulkan_core.h" #include #include @@ -44,6 +46,9 @@ GFXRECON_BEGIN_NAMESPACE(decode) class DrawCallsDumpingContext { public: + // Forward declaration + struct DrawCallParams; + enum DrawCallType { kDraw, @@ -58,15 +63,72 @@ class DrawCallsDumpingContext kDrawIndexedIndirectCountAMD }; - DrawCallsDumpingContext(const DrawCallIndices* dc_indices_, - const RenderPassIndices* rp_indices, - CommonObjectInfoTable& object_info_table, - const VulkanReplayOptions& options, - VulkanDumpResourcesDelegate& delegate); + DrawCallsDumpingContext(const CommandIndices* dc_indices, + const RenderPassIndices* rp_indices, + const CommandImageSubresource& dc_subresources, + CommonObjectInfoTable& object_info_table, + const VulkanReplayOptions& options, + VulkanDumpResourcesDelegate& delegate, + const util::Compressor* compressor, + const DumpResourcesAccelerationStructuresContext& acceleration_structures_context, + const VulkanPerDeviceAddressTrackers& address_trackers); ~DrawCallsDumpingContext(); - bool IsRecording() const { return current_cb_index_ < command_buffers_.size(); } + void CmdDraw(const ApiCallInfo& call_info, + PFN_vkCmdDraw func, + VkCommandBuffer original_command_buffer, + uint32_t vertex_count, + uint32_t instance_count, + uint32_t first_vertex, + uint32_t first_instance); + + void CmdDrawIndexed(const ApiCallInfo& call_info, + PFN_vkCmdDrawIndexed func, + VkCommandBuffer original_command_buffer, + uint32_t index_count, + uint32_t instance_count, + uint32_t first_index, + int32_t vertex_offset, + uint32_t first_instance); + + void CmdDrawIndirect(const ApiCallInfo& call_info, + PFN_vkCmdDrawIndirect func, + VkCommandBuffer original_command_buffer, + const VulkanBufferInfo* buffer_info, + VkDeviceSize offset, + uint32_t draw_count, + uint32_t stride); + + void CmdDrawIndexedIndirect(const ApiCallInfo& call_info, + PFN_vkCmdDrawIndexedIndirect func, + VkCommandBuffer original_command_buffer, + const VulkanBufferInfo* buffer_info, + VkDeviceSize offset, + uint32_t draw_count, + uint32_t stride); + + void CmdDrawIndirectCount(const ApiCallInfo& call_info, + PFN_vkCmdDrawIndirectCount func, + VkCommandBuffer original_command_buffer, + const VulkanBufferInfo* buffer_info, + VkDeviceSize offset, + const VulkanBufferInfo* count_buffer_info, + VkDeviceSize count_buffer_offset, + uint32_t max_draw_count, + uint32_t stride, + DrawCallsDumpingContext::DrawCallType drawcall_type); + + void CmdDrawIndexedIndirectCount(const ApiCallInfo& call_info, + PFN_vkCmdDrawIndexedIndirectCount func, + VkCommandBuffer original_command_buffer, + const VulkanBufferInfo* buffer_info, + VkDeviceSize offset, + const VulkanBufferInfo* count_buffer_info, + VkDeviceSize count_buffer_offset, + uint32_t max_draw_count, + uint32_t stride, + DrawCallsDumpingContext::DrawCallType drawcall_type); bool MustDumpDrawCall(uint64_t index) const; @@ -82,7 +144,7 @@ class DrawCallsDumpingContext void BindPipeline(VkPipelineBindPoint bind_point, const VulkanPipelineInfo* pipeline); - VkResult CloneCommandBuffer(VulkanCommandBufferInfo* orig_cmd_buf_info, + VkResult BeginCommandBuffer(VulkanCommandBufferInfo* orig_cmd_buf_info, const graphics::VulkanDeviceTable* dev_table, const graphics::VulkanInstanceTable* inst_table, const VkCommandBufferBeginInfo* begin_info); @@ -132,7 +194,8 @@ class DrawCallsDumpingContext VkIndexType index_type, VkDeviceSize size = 0); - void FinalizeCommandBuffer(); + // When this is called for a command buffer that corresponds to a before command, dc_params should be null + void FinalizeCommandBuffer(DrawCallParams* dc_params = nullptr); uint32_t GetDrawCallActiveCommandBuffers(CommandBufferIterator& first, CommandBufferIterator& last) const; @@ -142,36 +205,40 @@ class DrawCallsDumpingContext VkResult DumpRenderTargetAttachments( uint64_t cmd_buf_index, uint64_t rp, uint64_t sp, uint64_t qs_index, uint64_t bcb_index); - VkResult DumpImmutableDescriptors(uint64_t qs_index, uint64_t bcb_index, uint64_t dc_index, uint64_t rp); + VkResult DumpDescriptors(uint64_t qs_index, uint64_t bcb_index, uint64_t dc_index, uint64_t rp); VkResult DumpVertexIndexBuffers(uint64_t qs_index, uint64_t bcb_index, uint64_t dc_index); - void InsertNewDrawParameters( + void Release(); + + const std::vector& GetCommandBuffers() const { return command_buffers_; } + + void AssignSecondary(uint64_t execute_commands_index, std::shared_ptr secondary_context); + + uint32_t RecaclulateCommandBuffers(); + + void UpdateSecondaries(); + + void MergeRenderPasses(const DrawCallsDumpingContext& secondary_context); + + private: + DrawCallParams* InsertNewDrawParameters( uint64_t index, uint32_t vertex_count, uint32_t instance_count, uint32_t first_vertex, uint32_t first_instance); - void InsertNewDrawIndexedParameters(uint64_t index, - uint32_t index_count, - uint32_t instance_count, - uint32_t first_index, - int32_t vertexOffset, - uint32_t first_instance); + DrawCallParams* InsertNewDrawIndexedParameters(uint64_t index, + uint32_t index_count, + uint32_t instance_count, + uint32_t first_index, + int32_t vertexOffset, + uint32_t first_instance); - void InsertNewDrawIndirectParameters( + DrawCallParams* InsertNewDrawIndirectParameters( uint64_t index, const VulkanBufferInfo* buffer_info, VkDeviceSize offset, uint32_t draw_count, uint32_t stride); - void InsertNewDrawIndexedIndirectParameters( + DrawCallParams* InsertNewDrawIndexedIndirectParameters( uint64_t index, const VulkanBufferInfo* buffer_info, VkDeviceSize offset, uint32_t draw_count, uint32_t stride); - void InsertNewIndirectCountParameters(uint64_t index, - const VulkanBufferInfo* buffer_info, - VkDeviceSize offset, - const VulkanBufferInfo* count_buffer_info, - VkDeviceSize count_buffer_offset, - uint32_t max_draw_count, - uint32_t stride, - DrawCallType drawcall_type); - - void InsertNewDrawIndexedIndirectCountParameters(uint64_t index, + DrawCallParams* InsertNewIndirectCountParameters(uint64_t index, const VulkanBufferInfo* buffer_info, VkDeviceSize offset, const VulkanBufferInfo* count_buffer_info, @@ -180,17 +247,15 @@ class DrawCallsDumpingContext uint32_t stride, DrawCallType drawcall_type); - void Release(); - - const std::vector& GetCommandBuffers() const { return command_buffers_; } - - void AssignSecondary(uint64_t execute_commands_index, DrawCallsDumpingContext* secondary_context); - - uint32_t RecaclulateCommandBuffers(); - - void UpdateSecondaries(); + DrawCallParams* InsertNewDrawIndexedIndirectCountParameters(uint64_t index, + const VulkanBufferInfo* buffer_info, + VkDeviceSize offset, + const VulkanBufferInfo* count_buffer_info, + VkDeviceSize count_buffer_offset, + uint32_t max_draw_count, + uint32_t stride, + DrawCallType drawcall_type); - private: void SetRenderTargets(const std::vector& color_att_imgs, VulkanImageInfo* depth_att_img, bool new_renderpass); @@ -218,23 +283,21 @@ class DrawCallsDumpingContext VulkanCommandBufferInfo* original_command_buffer_info_; std::vector command_buffers_; size_t current_cb_index_; - DrawCallIndices dc_indices_; + CommandIndices dc_indices_; RenderPassIndices RP_indices_; + CommandImageSubresource dc_subresources_; const VulkanRenderPassInfo* active_renderpass_; const VulkanFramebufferInfo* active_framebuffer_; const VulkanPipelineInfo* bound_gr_pipeline_; uint32_t current_renderpass_; uint32_t current_subpass_; - bool dump_resources_before_; VulkanDumpResourcesDelegate& delegate_; - bool dump_depth_; - int32_t color_attachment_to_dump_; - bool dump_vertex_index_buffers_; - bool dump_immutable_resources_; - bool dump_unused_vertex_bindings_; + const VulkanReplayOptions& options_; + const util::Compressor* compressor_; + bool secondary_with_dynamic_rendering_; // Execute commands block index : DrawCallContexts - std::unordered_map> secondaries_; + std::unordered_map>> secondaries_; enum RenderPassType { @@ -254,7 +317,7 @@ class DrawCallsDumpingContext VkImageLayout depth_attachment_layout{ VK_IMAGE_LAYOUT_GENERAL }; }; - std::unordered_map dynamic_rendering_attachment_layouts_; + std::unordered_map rendering_attachment_layouts_; public: struct RenderTargets @@ -310,14 +373,14 @@ class DrawCallsDumpingContext { struct BufferPerBinding { - BufferPerBinding() : buffer_info(nullptr), offset(0), size(0), stride(0), actual_size(0) {} + BufferPerBinding() : buffer_info(nullptr), offset(0), size(0), stride(0) {} BufferPerBinding(const VulkanBufferInfo* buffer_info, VkDeviceSize offset, VkDeviceSize size = 0, VkDeviceSize stride = 0) : buffer_info(buffer_info), - offset(offset), size(size), stride(stride), actual_size(0) + offset(offset), size(size), stride(stride) {} const VulkanBufferInfo* buffer_info; @@ -326,10 +389,6 @@ class DrawCallsDumpingContext // These are provided only by CmdBindVertexBuffers2 VkDeviceSize size; VkDeviceSize stride; - - // This is the size actually used as an vertex buffer from all referencing draw calls - // and is calculated based on the indices (if an index buffer is used) - VkDeviceSize actual_size; }; // One entry for each vertex buffer bound at each binding @@ -343,16 +402,14 @@ class DrawCallsDumpingContext // Keep track of bound index buffer struct BoundIndexBuffer { - BoundIndexBuffer() : - buffer_info(nullptr), offset(0), index_type(VK_INDEX_TYPE_MAX_ENUM), size(0), actual_size(0) - {} + BoundIndexBuffer() : buffer_info(nullptr), offset(0), index_type(VK_INDEX_TYPE_MAX_ENUM), size(0) {} BoundIndexBuffer(const VulkanBufferInfo* buffer_info, VkDeviceSize offset, VkIndexType index_type, VkDeviceSize size) : buffer_info(buffer_info), - offset(offset), index_type(index_type), size(size), actual_size(0) + offset(offset), index_type(index_type), size(size) {} const VulkanBufferInfo* buffer_info; @@ -361,9 +418,6 @@ class DrawCallsDumpingContext // This is provided only by vkCmdBindIndexBuffer2KHR VkDeviceSize size; - - // This is the size actually used as an index buffer from all referencing draw calls - VkDeviceSize actual_size; }; private: @@ -657,28 +711,13 @@ class DrawCallsDumpingContext // Keep copies of the descriptor bindings referenced by each draw call BoundDescriptorSets referenced_descriptors; - // These are used to store information calculated when dumping vertex and index buffers. - // This information is latter used when writting the output json file. - struct - { - struct - { - bool dumped{ false }; - size_t offset{ 0 }; - } index_buffer_info; - - struct VertexBufferBindingInfo - { - size_t offset{ 0 }; - }; - std::unordered_map vertex_bindings_info; - } json_output_info; - - // Need to keep track if a draw call context from a secondary command buffer has been updated with information - // that might be available only from the primary command buffer + // Need to keep track if a draw call context from a secondary command buffer has been updated with + // information that might be available only from the primary command buffer bool updated_bound_vertex_buffers; bool updated_bound_index_buffer; bool updated_referenced_descriptors; + + DumpedResourcesInfo dumped_resources; }; private: @@ -686,9 +725,9 @@ class DrawCallsDumpingContext using DrawCallParameters = std::unordered_map>; DrawCallParameters draw_call_params_; - DrawCallParameters& GetDrawCallParameters() { return draw_call_params_; } - DrawCallIndices& GetDrawCallIndices() { return dc_indices_; } - const DrawCallIndices& GetDrawCallIndices() const { return dc_indices_; } + DrawCallParameters& GetDrawCallParameters() { return draw_call_params_; } + CommandIndices& GetDrawCallIndices() { return dc_indices_; } + const CommandIndices& GetDrawCallIndices() const { return dc_indices_; } struct { @@ -706,9 +745,9 @@ class DrawCallsDumpingContext // multiple times struct RenderPassDumpedDescriptors { - std::unordered_set image_descriptors; - std::unordered_set buffer_descriptors; - std::unordered_set*> inline_uniform_blocks; + std::map image_descriptors; + std::map buffer_descriptors; + std::map acceleration_structures; }; std::vector render_pass_dumped_descriptors_; @@ -722,6 +761,10 @@ class DrawCallsDumpingContext CommonObjectInfoTable& object_info_table_; const VkPhysicalDeviceMemoryProperties* replay_device_phys_mem_props_; + const DumpResourcesAccelerationStructuresContext& acceleration_structures_context_; + + const VulkanPerDeviceAddressTrackers& address_trackers_; + void SecondaryUpdateContextFromPrimary(const VulkanPipelineInfo* gr_pipeline, const BoundVertexBuffersInfo& vertex_buffers, const BoundIndexBuffer& index_buffer, diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_json.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_json.cpp index eb5d7a19b..87aae493c 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_json.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_json.cpp @@ -1,5 +1,5 @@ /* -** Copyright (c) 2024 LunarG, Inc. +** Copyright (c) 2024-2025 LunarG, Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -20,41 +20,51 @@ ** DEALINGS IN THE SOFTWARE. */ -#include "Vulkan-Utility-Libraries/vk_format_utils.h" -#include "util/file_path.h" -#include PROJECT_VERSION_HEADER_FILE +#include "decode/vulkan_object_info.h" +#include "decode/vulkan_replay_dump_resources_options.h" +#include "decode/vulkan_replay_dump_resources_common.h" +#include "format/format.h" +#include "format/format_util.h" #include "generated/generated_vulkan_enum_to_string.h" -#include "vulkan_replay_dump_resources_json.h" -#include "util/platform.h" +#include PROJECT_VERSION_HEADER_FILE #include "util/file_path.h" -#include "vulkan/vulkan_core.h" -#include +#include "util/logging.h" +#include "util/platform.h" +#include "vulkan_replay_dump_resources_json.h" +#include "Vulkan-Utility-Libraries/vk_format_utils.h" GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) VulkanReplayDumpResourcesJson::VulkanReplayDumpResourcesJson(const VulkanReplayOptions& options) : file_(nullptr), current_entry(nullptr), first_block_(true), draw_calls_entry_index(0), dispatch_entry_index(0), - trace_rays_entry_index(0) + trace_rays_entry_index(0), transfer_entry_index(0) { header_["vulkanVersion"] = std::to_string(VK_VERSION_MAJOR(VK_HEADER_VERSION_COMPLETE)) + "." + std::to_string(VK_VERSION_MINOR(VK_HEADER_VERSION_COMPLETE)) + "." + std::to_string(VK_VERSION_PATCH(VK_HEADER_VERSION_COMPLETE)); - header_["gfxreconVersion"] = GFXRECON_PROJECT_VERSION_STRING; + header_["gfxreconVersion"] = GetProjectVersionString(); header_["captureFile"] = options.capture_filename; - auto& dr_options = header_["dumpResourcesOptions"]; - dr_options["scale"] = options.dump_resources_scale; - dr_options["dumpResourcesOutputDir"] = options.dump_resources_output_dir; - dr_options["dumpResourcesColorAttachmentIndex"] = options.dump_resources_color_attachment_index; - dr_options["dumpResourcesBefore"] = options.dump_resources_before; - dr_options["dumpResourcesDumpDepth"] = options.dump_resources_dump_depth; - dr_options["dumpResourcesDumpVertexIndexBuffer"] = options.dump_resources_dump_vertex_index_buffer; - dr_options["dumpResourcesDumpImmutableResources"] = options.dump_resources_dump_immutable_resources; - dr_options["dumpResourcesDumpAllImageSubresources"] = options.dump_resources_dump_all_image_subresources; - dr_options["dumpResourcesDumpRawImages"] = options.dump_resources_dump_raw_images; - dr_options["dumpResourcesDumpSeparateAlpha"] = options.dump_resources_dump_separate_alpha; - dr_options["dumpResourcesDumpUnusedVertexBindings"] = options.dump_resources_dump_unused_vertex_bindings; + auto& dr_options = header_[kVDROptions]; + dr_options[kVDROptionScale] = options.dump_resources_scale; + dr_options[kVDROptionImageFormat] = + options.dump_resources_dump_raw_images ? "bin" : ImageFormatToString(options.dump_resources_image_format); + dr_options[kVDROptionOutputDir] = options.dump_resources_output_dir; + dr_options[kVDROptionColorAttachmentIndex] = options.dump_resources_color_attachment_index; + dr_options[kVDROptionBefore] = options.dump_resources_before; + dr_options[kVDROptionDumpDepth] = options.dump_resources_dump_depth; + dr_options[kVDROptionDumpVertexIndexBuffer] = options.dump_resources_dump_vertex_index_buffer; + dr_options[kVDROptionDumpAllDescriptors] = options.dump_all_descriptors; + dr_options[kVDROptionDumpAllImageSubresources] = options.dump_resources_dump_all_image_subresources; + dr_options[kVDROptionDumpRawImages] = options.dump_resources_dump_raw_images; + dr_options[kVDROptionDumpSeparateAlpha] = options.dump_resources_dump_separate_alpha; + dr_options[kVDROptionDumpUnusedVertexBindings] = options.dump_resources_dump_unused_vertex_bindings; + dr_options[kVDROptionJsonOutputPerCommand] = options.dump_resources_json_per_command; + dr_options[kVDROptionDumpBuildAccelerationStructuresInputBuffers] = + options.dump_resources_dump_build_AS_input_buffers; + dr_options[kVDROptionBinaryFileCompressionType] = + format::GetCompressionTypeName(options.dump_resources_binary_file_compression_type); }; bool VulkanReplayDumpResourcesJson::InitializeFile(const std::string& filename) @@ -162,60 +172,104 @@ nlohmann::ordered_json& VulkanReplayDumpResourcesJson::GetCurrentSubEntry() return current_entry != nullptr ? *current_entry : json_data_; } -void VulkanReplayDumpResourcesJson::InsertImageSubresourceInfo(nlohmann::ordered_json& json_entry, - VkFormat image_format, - VkImageType image_type, - format::HandleId image_id, - const VkExtent3D& extent, - const std::string& filename, - VkImageAspectFlagBits aspect, - uint32_t mip_level, - uint32_t array_layer, - bool separate_alpha, - const std::string* filename_before) +void VulkanReplayDumpResourcesJson::InsertImageSubresourceInfo(nlohmann::ordered_json& json_entry, + const DumpedImage::DumpedImageSubresource& subresource, + VkFormat format, + bool separate_alpha, + bool dumped_raw) { - const std::string aspect_str_whole(util::ToString(aspect)); + const std::string aspect_str_whole(util::ToString(subresource.aspect)); const std::string aspect_str(aspect_str_whole.begin() + 16, aspect_str_whole.end() - 4); json_entry["aspect"] = aspect_str; - json_entry["dimensions"][0] = extent.width; - json_entry["dimensions"][1] = extent.height; - json_entry["dimensions"][2] = extent.depth; + json_entry["dimensions"][0] = subresource.extent.width; + json_entry["dimensions"][1] = subresource.extent.height; + json_entry["dimensions"][2] = subresource.extent.depth; - json_entry["mipLevel"] = mip_level; - json_entry["arrayLayer"] = array_layer; + json_entry["mipLevel"] = subresource.level; + json_entry["arrayLayer"] = subresource.layer; + json_entry["file"] = subresource.filename; - const bool raw_image = !util::filepath::GetFilenameExtension(filename).compare(".bin"); + if (separate_alpha && !dumped_raw && vkuFormatHasAlpha(format)) + { + json_entry["fileAlpha"] = util::filepath::InsertFilenamePostfix(subresource.filename, "_alpha"); + } - if (separate_alpha && !raw_image && vkuFormatHasAlpha(image_format)) + if (dumped_raw) { - if (filename_before != nullptr) - { - json_entry["beforeFile"] = *filename_before; - json_entry["beforeFileAlpha"] = util::filepath::InsertFilenamePostfix(*filename_before, "_alpha"); - json_entry["afterFile"] = filename; - json_entry["afterFileAlpha"] = util::filepath::InsertFilenamePostfix(filename, "_alpha"); - ; - } - else + json_entry["size"] = subresource.size; + + if (subresource.compressed_size) { - json_entry["file"] = filename; - json_entry["fileAlpha"] = util::filepath::InsertFilenamePostfix(filename, "_alpha"); + json_entry["compressedSize"] = subresource.compressed_size; } } - else +} + +void VulkanReplayDumpResourcesJson::InsertBeforeImageSubresourceInfo( + nlohmann::ordered_json& json_entry, + const DumpedImage::DumpedImageSubresource& subresource, + VkFormat format, + bool separate_alpha, + bool dumped_raw) +{ + json_entry["beforeFile"] = subresource.filename; + + if (separate_alpha && !dumped_raw && vkuFormatHasAlpha(format)) { - if (filename_before != nullptr) - { - json_entry["beforeFile"] = *filename_before; - json_entry["afterFile"] = filename; - } - else + json_entry["beforeFileAlpha"] = util::filepath::InsertFilenamePostfix(subresource.filename, "_alpha"); + } + + if (dumped_raw) + { + json_entry["beforeSize"] = subresource.size; + + if (subresource.compressed_size) { - json_entry["file"] = filename; + json_entry["compressedSizeBefore"] = subresource.compressed_size; } } } +void VulkanReplayDumpResourcesJson::InsertBufferInfo(nlohmann::ordered_json& json_entry, + const DumpedBuffer& dumped_buffer) +{ + if (dumped_buffer.buffer_info.handle != VK_NULL_HANDLE && + dumped_buffer.buffer_info.capture_id != format::kNullHandleId) + { + json_entry["bufferId"] = dumped_buffer.buffer_info.capture_id; + } + + json_entry["offset"] = dumped_buffer.offset; + json_entry["size"] = dumped_buffer.size; + json_entry["file"] = dumped_buffer.filename; + + if (dumped_buffer.compressed_size) + { + json_entry["compressedSize"] = dumped_buffer.compressed_size; + } +} + +void VulkanReplayDumpResourcesJson::InsertBeforeBufferInfo(nlohmann::ordered_json& json_entry, + const DumpedBuffer& dumped_buffer) +{ + json_entry["beforeFile"] = dumped_buffer.filename; + + if (dumped_buffer.compressed_size) + { + json_entry["compressedSizeBefore"] = dumped_buffer.compressed_size; + } +} + +void VulkanReplayDumpResourcesJson::InsertASBuildRangeInfo(nlohmann::ordered_json& json_entry, + const VkAccelerationStructureBuildRangeInfoKHR& range) +{ + auto& range_entry = json_entry["VkAccelerationStructureBuildRangeInfoKHR"]; + range_entry["primitiveCount"] = range.primitiveCount; + range_entry["primitiveOffset"] = range.primitiveOffset; + range_entry["firstVertex"] = range.firstVertex; + range_entry["transformOffset"] = range.transformOffset; +} + GFXRECON_END_NAMESPACE(gfxrecon) GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_json.h b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_json.h index e678eeeaf..660454aba 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_json.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_json.h @@ -1,5 +1,5 @@ /* -** Copyright (c) 2023 LunarG, Inc. +** Copyright (c) 2024-2025 LunarG, Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -24,8 +24,8 @@ #define GFXRECON_VULKAN_REPLAY_DUMP_RESOURCES_JSON_H #include "util/json_util.h" -#include "decode/vulkan_object_info.h" #include "decode/vulkan_replay_options.h" +#include "decode/vulkan_replay_dump_resources_common.h" GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) @@ -59,17 +59,24 @@ class VulkanReplayDumpResourcesJson nlohmann::ordered_json& GetCurrentSubEntry(); - void InsertImageSubresourceInfo(nlohmann::ordered_json& json_entry, - VkFormat image_format, - VkImageType image_type, - format::HandleId image_id, - const VkExtent3D& extent, - const std::string& filename, - VkImageAspectFlagBits aspect, - uint32_t mip_level = 0, - uint32_t array_layer = 0, - bool separate_alpha = false, - const std::string* filename_before = nullptr); + void InsertImageSubresourceInfo(nlohmann::ordered_json& json_entry, + const DumpedImage::DumpedImageSubresource& subresource, + VkFormat format, + bool separate_alpha, + bool dumped_raw); + + void InsertBeforeImageSubresourceInfo(nlohmann::ordered_json& json_entry, + const DumpedImage::DumpedImageSubresource& subresource, + VkFormat format, + bool separate_alpha, + bool dumped_raw); + + void InsertBufferInfo(nlohmann::ordered_json& json_entry, const DumpedBuffer& dumped_buffer); + + void InsertBeforeBufferInfo(nlohmann::ordered_json& json_entry, const DumpedBuffer& dumped_buffer); + + void InsertASBuildRangeInfo(nlohmann::ordered_json& json_entry, + const VkAccelerationStructureBuildRangeInfoKHR& range); uint32_t FetchAndAddDrawCallsEntryIndex() { return draw_calls_entry_index++; } @@ -77,6 +84,8 @@ class VulkanReplayDumpResourcesJson uint32_t FetchAndAddTraceRaysEntryIndex() { return trace_rays_entry_index++; } + uint32_t FetchAndAddTransferEntryIndex() { return transfer_entry_index++; } + private: bool InitializeFile(const std::string& filename); @@ -89,6 +98,7 @@ class VulkanReplayDumpResourcesJson uint32_t draw_calls_entry_index; uint32_t dispatch_entry_index; uint32_t trace_rays_entry_index; + uint32_t transfer_entry_index; }; GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_options.h b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_options.h new file mode 100644 index 000000000..b6fa80f3b --- /dev/null +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_options.h @@ -0,0 +1,67 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_VULKAN_REPLAY_DUMP_RESOURCES_OPTIONS_H +#define GFXRECON_VULKAN_REPLAY_DUMP_RESOURCES_OPTIONS_H + +#include "util/options.h" +#include "util/logging.h" + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) + +static const char* kVDROptions = "DumpResourcesOptions"; +static const char* kVDROptionScale = "Scale"; +static const char* kVDROptionImageFormat = "ImageFormat"; +static const char* kVDROptionOutputDir = "OutputDir"; +static const char* kVDROptionBefore = "DumpBeforeCommand"; +static const char* kVDROptionDumpDepth = "DumpDepth"; +static const char* kVDROptionColorAttachmentIndex = "ColorAttachmentIndex"; +static const char* kVDROptionDumpVertexIndexBuffer = "DumpVertexIndexBuffer"; +static const char* kVDROptionDumpAllDescriptors = "DumpAllDescriptors"; +static const char* kVDROptionDumpAllImageSubresources = "DumpAllImageSubresources"; +static const char* kVDROptionDumpRawImages = "DumpRawImages"; +static const char* kVDROptionDumpSeparateAlpha = "DumpSeparateAlpha"; +static const char* kVDROptionDumpUnusedVertexBindings = "DumpUnusedVertexBindings"; +static const char* kVDROptionJsonOutputPerCommand = "JsonOutputPerCommand"; +static const char* kVDROptionBinaryFileCompressionType = "BinaryFileCompressionType"; +static const char* kVDROptionDumpBuildAccelerationStructuresInputBuffers = + "DumpBuildAccelerationStructuresInputBuffers"; + +static const char* ImageFormatToString(gfxrecon::util::ScreenshotFormat format) +{ + switch (format) + { + case gfxrecon::util::ScreenshotFormat::kBmp: + return gfxrecon::util::kScreenshotFormatBmp; + case gfxrecon::util::ScreenshotFormat::kPng: + return gfxrecon::util::kScreenshotFormatPng; + default: + GFXRECON_LOG_WARNING("%s(): Unrecognized image format %d", __func__, static_cast(format)); + return gfxrecon::util::kScreenshotFormatBmp; + } +} + +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // GFXRECON_VULKAN_REPLAY_DUMP_RESOURCES_OPTIONS_H diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_transfer.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_transfer.cpp new file mode 100644 index 000000000..dc8387029 --- /dev/null +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_transfer.cpp @@ -0,0 +1,2266 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#include "decode/vulkan_object_info.h" +#include "decode/vulkan_replay_dump_resources_delegate.h" +#include "decode/vulkan_replay_dump_resources_common.h" +#include "format/format.h" +#include "graphics/vulkan_resources_util.h" +#include "graphics/vulkan_util.h" +#include "generated/generated_vulkan_enum_to_string.h" +#include "generated/generated_vulkan_struct_decoders.h" +#include "decode/vulkan_replay_dump_resources_transfer.h" +#include "util/logging.h" +#include "Vulkan-Utility-Libraries/vk_format_utils.h" +#include "util/platform.h" +#include "util/to_string.h" + +#include +#include +#include +#include +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) + +TransferDumpingContext::TransferDumpingContext( + const CommandIndices* transfer_indices, + CommonObjectInfoTable& object_info_table, + const graphics::InstanceDispatchTablesMap& instance_tables, + const graphics::DeviceDispatchTablesMap& device_tables, + const VulkanReplayOptions& options, + VulkanDumpResourcesDelegate& delegate, + const VulkanPerDeviceAddressTrackers& address_trackers, + const DumpResourcesAccelerationStructuresContext& acceleration_structures_context, + const util::Compressor* compressor) : + object_info_table_(object_info_table), + instance_tables_(instance_tables), device_tables_(device_tables), options_(options), delegate_(delegate), + address_trackers_(address_trackers), acceleration_structures_context_(acceleration_structures_context), + compressor_(compressor), device_table_(nullptr), device_info_(nullptr) +{ + if (transfer_indices != nullptr) + { + transfer_indices_ = *transfer_indices; + } +} + +bool TransferDumpingContext::MustDumpTransfer(uint64_t index) const +{ + return std::find(transfer_indices_.begin(), transfer_indices_.end(), index) != transfer_indices_.end(); +} + +void TransferDumpingContext::GetDispatchTables(format::HandleId device_id) +{ + device_info_ = object_info_table_.GetVkDeviceInfo(device_id); + GFXRECON_ASSERT(device_info_ != nullptr); + + auto dev_table = device_tables_.find(graphics::GetVulkanDispatchKey(device_info_->handle)); + GFXRECON_ASSERT(dev_table != device_tables_.end()); + device_table_ = &dev_table->second; + + const VulkanPhysicalDeviceInfo* phys_dev_info = object_info_table_.GetVkPhysicalDeviceInfo(device_info_->parent_id); + GFXRECON_ASSERT(phys_dev_info); + + auto inst_table = instance_tables_.find(graphics::GetVulkanDispatchKey(phys_dev_info->handle)); + GFXRECON_ASSERT(inst_table != instance_tables_.end()); + instance_table_ = &inst_table->second; + + GFXRECON_ASSERT(phys_dev_info->replay_device_info); + GFXRECON_ASSERT(phys_dev_info->replay_device_info->memory_properties); + replay_device_phys_mem_props_ = &phys_dev_info->replay_device_info->memory_properties.value(); +} + +VkResult TransferDumpingContext::HandleInitBufferCommand( + uint64_t cmd_index, format::HandleId device_id, format::HandleId buffer_id, uint64_t data_size, const uint8_t* data) +{ + GFXRECON_UNREFERENCED_PARAMETER(device_id); + + if (MustDumpTransfer(cmd_index)) + { + auto [new_entry, success] = transfer_params_.emplace( + std::piecewise_construct, + std::forward_as_tuple(cmd_index), + std::forward_as_tuple( + buffer_id, data, data_size, *device_table_, device_info_, TransferCommandTypes::kCmdInitBuffer)); + GFXRECON_ASSERT(success); + } + + return VK_SUCCESS; +} + +VkResult TransferDumpingContext::HandleInitImageCommand(VkCommandBuffer command_buffer, + uint64_t cmd_index, + format::HandleId device_id, + format::HandleId image_id, + uint64_t data_size, + VkImageAspectFlagBits aspect, + VkImageLayout layout, + const std::vector& level_sizes, + const uint8_t* data) +{ + if (MustDumpTransfer(cmd_index)) + { + GetDispatchTables(device_id); + + // Images with multiple aspects have each aspect dumped separately in a different kInitImageCommand. + // In these cases, and if multiple kInitImageCommand commands that correspond to different aspects of the same + // image are requested for dumping, we will attempt to gather all aspects into a single DumpedImage. + TransferParams::InitImageMetaCommand* init_image_params = nullptr; + bool insert_new_entry = true; + + GFXRECON_ASSERT(cmd_index); + auto entry = transfer_params_.find(cmd_index - 1); + if (entry != transfer_params_.end()) + { + init_image_params = static_cast(entry->second.params.get()); + if (init_image_params != nullptr && init_image_params->dst_image.id == image_id) + { + insert_new_entry = false; + } + } + + const auto* img_info = object_info_table_.GetVkImageInfo(image_id); + const auto* dev_info = object_info_table_.GetVkDeviceInfo(device_id); + + TemporaryCommandBuffer temp_command_buffer; + VkCommandBuffer cmd_buf; + if (command_buffer == VK_NULL_HANDLE) + { + VkResult res = CreateAndBeginCommandBuffer( + &FindComputeQueueFamilyIndex, dev_info, *device_table_, temp_command_buffer); + if (res != VK_SUCCESS) + { + return res; + } + cmd_buf = temp_command_buffer.command_buffer; + } + else + { + cmd_buf = command_buffer; + } + + if (insert_new_entry) + { + auto [new_entry, success] = transfer_params_.emplace( + std::piecewise_construct, + std::forward_as_tuple(cmd_index), + std::forward_as_tuple( + img_info, aspect, layout, *device_table_, device_info_, TransferCommandTypes::kCmdInitImage)); + GFXRECON_ASSERT(success); + + init_image_params = static_cast(new_entry->second.params.get()); + + // Create an image with the same properties + const auto* phys_dev_info = object_info_table_.GetVkPhysicalDeviceInfo(device_info_->parent_id); + const VkPhysicalDeviceMemoryProperties* replay_device_phys_mem_props = + &phys_dev_info->replay_device_info->memory_properties.value(); + VkResult res = CreateVkImage(object_info_table_, + device_table_, + replay_device_phys_mem_props, + img_info, + &init_image_params->copied_image.image, + &init_image_params->copied_image.memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s() CreateVkImage failed (%s)", __func__, util::ToString(res).c_str()); + return res; + } + + init_image_params->copied_image.image_info.handle = init_image_params->copied_image.image; + init_image_params->copied_image.image_info.intermediate_layout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + init_image_params->copied_image.image_info.current_layout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + } + GFXRECON_ASSERT(init_image_params != nullptr); + + // Transition new image/aspect into VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL + VkImageMemoryBarrier img_barrier = { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, + nullptr, + VK_ACCESS_NONE, + VK_ACCESS_TRANSFER_WRITE_BIT, + VK_IMAGE_LAYOUT_UNDEFINED, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + init_image_params->copied_image.image, + { static_cast(aspect), 0, VK_REMAINING_MIP_LEVELS, 0, VK_REMAINING_ARRAY_LAYERS } + }; + device_table_->CmdPipelineBarrier(cmd_buf, + VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 0, + nullptr, + 1, + &img_barrier); + + // Flush source image and transition into VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL + img_barrier.srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT; + img_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + img_barrier.oldLayout = layout; + img_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + img_barrier.image = img_info->handle; + + device_table_->CmdPipelineBarrier(cmd_buf, + VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_HOST_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 0, + nullptr, + 1, + &img_barrier); + + // Copy source image + std::vector copy_regions(img_info->level_count); + for (uint32_t m = 0; m < img_info->level_count; ++m) + { + copy_regions[m].srcSubresource = { static_cast(aspect), m, 0, img_info->layer_count }; + copy_regions[m].srcOffset = { 0, 0, 0 }; + copy_regions[m].dstSubresource = { static_cast(aspect), m, 0, img_info->layer_count }; + copy_regions[m].dstOffset = { 0, 0, 0 }; + copy_regions[m].extent = graphics::ScaleToMipLevel(img_info->extent, m); + } + + device_table_->CmdCopyImage(cmd_buf, + img_info->handle, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + init_image_params->copied_image.image, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + img_info->level_count, + copy_regions.data()); + + // Flush copy + img_barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + img_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + img_barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + img_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + img_barrier.image = init_image_params->copied_image.image; + + device_table_->CmdPipelineBarrier(cmd_buf, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 0, + nullptr, + 1, + &img_barrier); + + // Transition source image into original layout + if (layout != VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL) + { + img_barrier.srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + img_barrier.dstAccessMask = VK_ACCESS_NONE; + img_barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + img_barrier.newLayout = layout; + img_barrier.image = img_info->handle; + + device_table_->CmdPipelineBarrier(cmd_buf, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 0, + nullptr, + 1, + &img_barrier); + } + + if (command_buffer == VK_NULL_HANDLE) + { + SubmitAndDestroyCommandBuffer(temp_command_buffer); + } + } + + return VK_SUCCESS; +} + +VkResult TransferDumpingContext::HandleCmdCopyBuffer(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + const VulkanBufferInfo* srcBuffer, + const VulkanBufferInfo* dstBuffer, + uint32_t regionCount, + const VkBufferCopy* pRegions, + bool before_command) +{ + if (MustDumpTransfer(call_info.index)) + { + GetDispatchTables(srcBuffer->parent_id); + + // If we also are dumping resources before the command, we insert only one entry in transfer_params_ and store + // the allocated resources for both before and after in the same entry. + const bool insert_new_entry = + (options_.dump_resources_before && before_command) || !options_.dump_resources_before; + TransferParams::CopyBuffer* copy_buffer_params; + if (insert_new_entry) + { + auto [new_entry, success] = + transfer_params_.emplace(std::piecewise_construct, + std::forward_as_tuple(call_info.index), + std::forward_as_tuple(srcBuffer->capture_id, + dstBuffer->capture_id, + *device_table_, + device_info_, + before_command, + TransferCommandTypes::kCmdCopyBuffer)); + GFXRECON_ASSERT(success); + copy_buffer_params = static_cast( + before_command ? new_entry->second.before_params.get() : new_entry->second.params.get()); + } + else + { + GFXRECON_ASSERT(options_.dump_resources_before && !before_command); + + auto params_entry = transfer_params_.find(call_info.index); + GFXRECON_ASSERT(params_entry != transfer_params_.end()); + copy_buffer_params = static_cast(params_entry->second.params.get()); + } + GFXRECON_ASSERT(copy_buffer_params != nullptr); + + for (uint32_t i = 0; i < regionCount; ++i) + { + auto& new_region = copy_buffer_params->regions.emplace_back(pRegions[i]); + + // Create a new vulkan buffer for each region + VkResult res = CreateVkBuffer(pRegions[i].size, + *device_table_, + device_info_->handle, + nullptr, + nullptr, + replay_device_phys_mem_props_, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + &new_region.vk_objects.buffer, + &new_region.vk_objects.memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s(): CreateVkBuffer failed for command %" PRIu64 " with %s", + __func__, + call_info.index, + util::ToString(res).c_str()); + return res; + } + + new_region.vk_objects.size = pRegions[i].size; + + // Flush original copy/buffer + VkBufferMemoryBarrier buf_barrier = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, + nullptr, + VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_MEMORY_WRITE_BIT, + VK_ACCESS_TRANSFER_READ_BIT, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + dstBuffer->handle, + pRegions[i].dstOffset, + pRegions[i].size }; + device_table_->CmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + 0, + 0, + nullptr, + 1, + &buf_barrier, + 0, + nullptr); + + // Inject copy command + const std::vector region{ VkBufferCopy{ pRegions[i].dstOffset, 0, pRegions[i].size } }; + CopyBufferAndBarrier( + commandBuffer, *device_table_, dstBuffer->handle, new_region.vk_objects.buffer, region); + } + } + + return VK_SUCCESS; +} + +VkResult TransferDumpingContext::HandleCmdCopyBuffer2(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyBufferInfo, + bool before_command) +{ + const auto* p_copy_info = pCopyBufferInfo->GetPointer(); + std::vector regions(p_copy_info->regionCount); + for (uint32_t i = 0; i < p_copy_info->regionCount; ++i) + { + regions[i].srcOffset = p_copy_info->pRegions[i].srcOffset; + regions[i].dstOffset = p_copy_info->pRegions[i].dstOffset; + regions[i].size = p_copy_info->pRegions[i].size; + } + + const auto* p_copy_info_meta = pCopyBufferInfo->GetMetaStructPointer(); + const auto* src_buffer_info = object_info_table_.GetVkBufferInfo(p_copy_info_meta->srcBuffer); + const auto* dst_buffer_info = object_info_table_.GetVkBufferInfo(p_copy_info_meta->dstBuffer); + return HandleCmdCopyBuffer(call_info, + commandBuffer, + src_buffer_info, + dst_buffer_info, + p_copy_info->regionCount, + regions.data(), + before_command); +} + +VkResult TransferDumpingContext::HandleCmdCopyBufferToImage(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + const VulkanBufferInfo* srcBuffer, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkBufferImageCopy* pRegions, + bool before_command) +{ + if (MustDumpTransfer(call_info.index)) + { + GetDispatchTables(dstImage->parent_id); + const VkDevice device = device_info_->handle; + + // If we also are dumping resources before the command, we insert only one entry in transfer_params_ and store + // the allocated resources for both before and after in the same entry. + const bool insert_new_entry = + (options_.dump_resources_before && before_command) || !options_.dump_resources_before; + TransferParams::CopyBufferToImage* copy_buffer_to_image_params; + if (insert_new_entry) + { + auto [new_entry, success] = + transfer_params_.emplace(std::piecewise_construct, + std::forward_as_tuple(call_info.index), + std::forward_as_tuple(srcBuffer->capture_id, + dstImage, + dstImageLayout, + *device_table_, + device_info_, + before_command, + TransferCommandTypes::kCmdCopyBufferToImage)); + GFXRECON_ASSERT(success); + copy_buffer_to_image_params = static_cast( + before_command ? new_entry->second.before_params.get() : new_entry->second.params.get()); + } + else + { + GFXRECON_ASSERT(options_.dump_resources_before && !before_command); + + auto params_entry = transfer_params_.find(call_info.index); + GFXRECON_ASSERT(params_entry != transfer_params_.end()); + copy_buffer_to_image_params = + static_cast(params_entry->second.params.get()); + } + GFXRECON_ASSERT(copy_buffer_to_image_params != nullptr); + + // Create an image with the same parameters as the dstImage + const auto* phys_dev_info = object_info_table_.GetVkPhysicalDeviceInfo(device_info_->parent_id); + const VkPhysicalDeviceMemoryProperties* replay_device_phys_mem_props = + &phys_dev_info->replay_device_info->memory_properties.value(); + VkResult res = CreateVkImage(object_info_table_, + device_table_, + replay_device_phys_mem_props, + dstImage, + ©_buffer_to_image_params->copied_image.image, + ©_buffer_to_image_params->copied_image.memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s() CreateVkImage failed (%s)", __func__, util::ToString(res).c_str()); + return res; + } + + // Update copy of VulkanImageInfo + copy_buffer_to_image_params->copied_image.image_info.handle = copy_buffer_to_image_params->copied_image.image; + copy_buffer_to_image_params->copied_image.image_info.capture_id = format::kNullHandleId; + copy_buffer_to_image_params->copied_image.image_info.intermediate_layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + copy_buffer_to_image_params->copied_image.image_info.current_layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + + // Flush any pending writes to destination image + VkImageMemoryBarrier img_barrier = { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, + nullptr, + VK_ACCESS_MEMORY_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_TRANSFER_READ_BIT, + dstImageLayout, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + dstImage->handle, + { graphics::GetFormatAspects(dstImage->format), 0, dstImage->level_count, 0, dstImage->layer_count } + }; + device_table_->CmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 0, + nullptr, + 1, + &img_barrier); + + // Transition new image's layout + img_barrier.srcAccessMask = VK_ACCESS_NONE; + img_barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + img_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + img_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + img_barrier.image = copy_buffer_to_image_params->copied_image.image; + device_table_->CmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 0, + nullptr, + 1, + &img_barrier); + + for (uint32_t i = 0; i < regionCount; ++i) + { + auto& new_region = copy_buffer_to_image_params->regions.emplace_back(pRegions[i]); + + // Copy each of the destination image's regions into the new image with CmdCopyImage + const VkImageCopy region = { pRegions[i].imageSubresource, + { 0, 0, 0 }, + pRegions[i].imageSubresource, + { 0, 0, 0 }, + graphics::ScaleToMipLevel(dstImage->extent, + pRegions[i].imageSubresource.mipLevel) }; + device_table_->CmdCopyImage(commandBuffer, + dstImage->handle, + dstImageLayout, + copy_buffer_to_image_params->copied_image.image, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + 1, + ®ion); + } + + // Flush copies + img_barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + img_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + img_barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + img_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + img_barrier.image = copy_buffer_to_image_params->copied_image.image; + device_table_->CmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 0, + nullptr, + 1, + &img_barrier); + } + + return VK_SUCCESS; +} + +VkResult TransferDumpingContext::HandleCmdCopyBufferToImage2( + const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyBufferToImageInfo, + bool before_command) +{ + const auto* info_meta = pCopyBufferToImageInfo->GetMetaStructPointer(); + const auto* src_buffer_info = object_info_table_.GetVkBufferInfo(info_meta->srcBuffer); + const auto* dst_img_info = object_info_table_.GetVkImageInfo(info_meta->dstImage); + + const auto* pInfo = info_meta->decoded_value; + std::vector buffer_image_copy(pInfo->regionCount); + for (uint32_t i = 0; i < pInfo->regionCount; ++i) + { + buffer_image_copy[i].bufferOffset = pInfo->pRegions[i].bufferOffset; + buffer_image_copy[i].bufferRowLength = pInfo->pRegions[i].bufferRowLength; + buffer_image_copy[i].bufferImageHeight = pInfo->pRegions[i].bufferImageHeight; + buffer_image_copy[i].imageSubresource = pInfo->pRegions[i].imageSubresource; + buffer_image_copy[i].imageOffset = pInfo->pRegions[i].imageOffset; + buffer_image_copy[i].imageExtent = pInfo->pRegions[i].imageExtent; + } + + return HandleCmdCopyBufferToImage(call_info, + commandBuffer, + src_buffer_info, + dst_img_info, + pInfo->dstImageLayout, + pInfo->regionCount, + buffer_image_copy.data(), + before_command); +} + +VkResult TransferDumpingContext::HandleCmdCopyImage(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkImageCopy* pRegions, + bool before_command) +{ + if (MustDumpTransfer(call_info.index)) + { + GetDispatchTables(srcImage->parent_id); + const VkDevice device = device_info_->handle; + + // If we also are dumping resources before the command, we insert only one entry in transfer_params_ and store + // the allocated resources for both before and after in the same entry. + const bool insert_new_entry = + (options_.dump_resources_before && before_command) || !options_.dump_resources_before; + TransferParams::CopyImage* copy_image_params; + if (insert_new_entry) + { + auto [new_entry, success] = + transfer_params_.emplace(std::piecewise_construct, + std::forward_as_tuple(call_info.index), + std::forward_as_tuple(srcImage, + srcImageLayout, + dstImage, + dstImageLayout, + *device_table_, + device_info_, + before_command, + TransferCommandTypes::kCmdCopyImage)); + GFXRECON_ASSERT(success); + copy_image_params = static_cast( + before_command ? new_entry->second.before_params.get() : new_entry->second.params.get()); + } + else + { + GFXRECON_ASSERT(options_.dump_resources_before && !before_command); + + auto params_entry = transfer_params_.find(call_info.index); + GFXRECON_ASSERT(params_entry != transfer_params_.end()); + copy_image_params = static_cast(params_entry->second.params.get()); + } + GFXRECON_ASSERT(copy_image_params != nullptr); + + // Create an image with the same parameters as the dstImage + const auto* phys_dev_info = object_info_table_.GetVkPhysicalDeviceInfo(device_info_->parent_id); + const VkPhysicalDeviceMemoryProperties* replay_device_phys_mem_props = + &phys_dev_info->replay_device_info->memory_properties.value(); + VkResult res = CreateVkImage(object_info_table_, + device_table_, + replay_device_phys_mem_props, + dstImage, + ©_image_params->copied_image.image, + ©_image_params->copied_image.memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s() CreateVkImage failed (%s)", __func__, util::ToString(res).c_str()); + return res; + } + + // Update copy of VulkanImageInfo + copy_image_params->copied_image.image_info.handle = copy_image_params->copied_image.image; + copy_image_params->copied_image.image_info.capture_id = format::kNullHandleId; + copy_image_params->copied_image.image_info.intermediate_layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + copy_image_params->copied_image.image_info.current_layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + + // Flush any pending writes to destination image + VkImageMemoryBarrier img_barrier = { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, + nullptr, + VK_ACCESS_MEMORY_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_TRANSFER_READ_BIT, + dstImageLayout, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + dstImage->handle, + { graphics::GetFormatAspects(dstImage->format), 0, dstImage->level_count, 0, dstImage->layer_count } + }; + device_table_->CmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 0, + nullptr, + 1, + &img_barrier); + + // Transition new image's layout + img_barrier.srcAccessMask = VK_ACCESS_NONE; + img_barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + img_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + img_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + img_barrier.image = copy_image_params->copied_image.image; + device_table_->CmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 0, + nullptr, + 1, + &img_barrier); + + for (uint32_t i = 0; i < regionCount; ++i) + { + auto& new_region = copy_image_params->regions.emplace_back(pRegions[i]); + + // Copy regions into new image + const VkImageCopy copy_region = { pRegions[i].dstSubresource, + { 0, 0, 0 }, + pRegions[i].dstSubresource, + { 0, 0, 0 }, + graphics::ScaleToMipLevel(dstImage->extent, + pRegions[i].dstSubresource.mipLevel) }; + device_table_->CmdCopyImage(commandBuffer, + dstImage->handle, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + copy_image_params->copied_image.image, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + 1, + ©_region); + } + + // Barrier for injected copies + img_barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + img_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + img_barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + img_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + img_barrier.image = copy_image_params->copied_image.image; + img_barrier.subresourceRange = { graphics::GetFormatAspects(copy_image_params->copied_image.image_info.format), + 0, + VK_REMAINING_MIP_LEVELS, + 0, + VK_REMAINING_ARRAY_LAYERS }; + + device_table_->CmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 0, + nullptr, + 1, + &img_barrier); + } + + return VK_SUCCESS; +} + +VkResult TransferDumpingContext::HandleCmdCopyImage2(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyImageInfo, + bool before_command) +{ + const auto* p_info = pCopyImageInfo->GetPointer(); + std::vector regions(p_info->regionCount); + for (uint32_t i = 0; i < p_info->regionCount; ++i) + { + regions[i].srcSubresource = p_info->pRegions[i].srcSubresource; + regions[i].srcOffset = p_info->pRegions[i].srcOffset; + regions[i].dstSubresource = p_info->pRegions[i].dstSubresource; + regions[i].dstOffset = p_info->pRegions[i].dstOffset; + regions[i].extent = p_info->pRegions[i].extent; + } + + const auto* p_info_meta = pCopyImageInfo->GetMetaStructPointer(); + const auto* src_image_info = object_info_table_.GetVkImageInfo(p_info_meta->srcImage); + const auto* dst_image_info = object_info_table_.GetVkImageInfo(p_info_meta->dstImage); + + return HandleCmdCopyImage(call_info, + commandBuffer, + src_image_info, + p_info->srcImageLayout, + dst_image_info, + p_info->dstImageLayout, + p_info->regionCount, + regions.data(), + before_command); +} + +VkResult TransferDumpingContext::HandleCmdCopyImageToBuffer(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanBufferInfo* dstBuffer, + uint32_t regionCount, + const VkBufferImageCopy* pRegions, + bool before_command) +{ + if (MustDumpTransfer(call_info.index)) + { + GetDispatchTables(dstBuffer->parent_id); + + // If we also are dumping resources before the command, we insert only one entry in transfer_params_ and store + // the allocated resources for both before and after in the same entry. + const bool insert_new_entry = + (options_.dump_resources_before && before_command) || !options_.dump_resources_before; + TransferParams::CopyImageToBuffer* copy_image_to_buffer_params; + if (insert_new_entry) + { + auto [new_entry, success] = + transfer_params_.emplace(std::piecewise_construct, + std::forward_as_tuple(call_info.index), + std::forward_as_tuple(srcImage, + srcImageLayout, + dstBuffer->capture_id, + *device_table_, + device_info_, + before_command, + TransferCommandTypes::kCmdCopyImageToBuffer)); + GFXRECON_ASSERT(success); + copy_image_to_buffer_params = static_cast( + before_command ? new_entry->second.before_params.get() : new_entry->second.params.get()); + } + else + { + GFXRECON_ASSERT(options_.dump_resources_before && !before_command); + + auto params_entry = transfer_params_.find(call_info.index); + GFXRECON_ASSERT(params_entry != transfer_params_.end()); + copy_image_to_buffer_params = + static_cast(params_entry->second.params.get()); + } + GFXRECON_ASSERT(copy_image_to_buffer_params != nullptr); + + for (uint32_t i = 0; i < regionCount; ++i) + { + auto& new_region = copy_image_to_buffer_params->regions.emplace_back(pRegions[i]); + + const VKU_FORMAT_INFO img_format_info = vkuGetFormatInfo(srcImage->format); + + // Calculations are based on §22.3. Copying Data Between Buffers and Images + const uint32_t row_extent = std::ceil(std::max(pRegions[i].bufferRowLength, pRegions[i].imageExtent.width) / + img_format_info.block_extent.width) * + img_format_info.block_size; + + const uint32_t slice_extent = + std::ceil(std::max(pRegions[i].bufferImageHeight, pRegions[i].imageExtent.height) / + img_format_info.block_extent.height) * + row_extent; + + const uint32_t layer_extent = + std::ceil(pRegions[i].imageExtent.depth / img_format_info.block_extent.depth) * slice_extent; + + const uint32_t region_buffer_size = layer_extent * pRegions[i].imageSubresource.layerCount; + GFXRECON_ASSERT(static_cast(region_buffer_size) <= dstBuffer->size - pRegions[i].bufferOffset) + new_region.vk_objects.size = region_buffer_size; + + // Create a new vulkan buffer for each region + VkResult res = CreateVkBuffer(region_buffer_size, + *device_table_, + device_info_->handle, + nullptr, + nullptr, + replay_device_phys_mem_props_, + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + &new_region.vk_objects.buffer, + &new_region.vk_objects.memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s(): CreateVkBuffer failed for command %" PRIu64 " with %s", + __func__, + call_info.index, + util::ToString(res).c_str()); + return res; + } + + // Flush any pending writes to command's destination buffer + VkBufferMemoryBarrier buff_barrier = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, + nullptr, + VK_ACCESS_MEMORY_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_TRANSFER_READ_BIT, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + dstBuffer->handle, + pRegions[i].bufferOffset, + region_buffer_size }; + device_table_->CmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 1, + &buff_barrier, + 0, + nullptr); + + // Copy regions with CmdCopyBuffer + const std::vector region{ VkBufferCopy{ pRegions[i].bufferOffset, 0, region_buffer_size } }; + CopyBufferAndBarrier( + commandBuffer, *device_table_, dstBuffer->handle, new_region.vk_objects.buffer, region); + } + } + + return VK_SUCCESS; +} + +VkResult TransferDumpingContext::HandleCmdCopyImageToBuffer2( + const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyImageToBufferInfo, + bool before_command) +{ + const auto* info_meta = pCopyImageToBufferInfo->GetMetaStructPointer(); + const auto* src_img_info = object_info_table_.GetVkImageInfo(info_meta->srcImage); + const auto* dst_buffer_info = object_info_table_.GetVkBufferInfo(info_meta->dstBuffer); + + const auto* info = info_meta->decoded_value; + std::vector regions(info->regionCount); + for (uint32_t i = 0; i < info->regionCount; ++i) + { + regions[i].bufferImageHeight = info->pRegions[i].bufferImageHeight; + regions[i].bufferRowLength = info->pRegions[i].bufferRowLength; + regions[i].bufferOffset = info->pRegions[i].bufferOffset; + + regions[i].imageOffset = info->pRegions[i].imageOffset; + regions[i].imageExtent = info->pRegions[i].imageExtent; + regions[i].imageSubresource = info->pRegions[i].imageSubresource; + } + + return HandleCmdCopyImageToBuffer(call_info, + commandBuffer, + src_img_info, + info->srcImageLayout, + dst_buffer_info, + info->regionCount, + regions.data(), + before_command); +} + +VkResult TransferDumpingContext::HandleCmdBlitImage(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkImageBlit* pRegions, + VkFilter filter, + bool before_command) +{ + if (MustDumpTransfer(call_info.index)) + { + GetDispatchTables(dstImage->parent_id); + + // If we also are dumping resources before the command, we insert only one entry in transfer_params_ and store + // the allocated resources for both before and after in the same entry. + const bool insert_new_entry = + (options_.dump_resources_before && before_command) || !options_.dump_resources_before; + TransferParams::BlitImage* blit_image_params; + if (insert_new_entry) + { + auto [new_entry, success] = + transfer_params_.emplace(std::piecewise_construct, + std::forward_as_tuple(call_info.index), + std::forward_as_tuple(srcImage, + srcImageLayout, + dstImage, + dstImageLayout, + filter, + *device_table_, + device_info_, + before_command, + TransferCommandTypes::kCmdBlitImage)); + GFXRECON_ASSERT(success); + blit_image_params = static_cast( + before_command ? new_entry->second.before_params.get() : new_entry->second.params.get()); + } + else + { + GFXRECON_ASSERT(options_.dump_resources_before && !before_command); + + auto params_entry = transfer_params_.find(call_info.index); + GFXRECON_ASSERT(params_entry != transfer_params_.end()); + blit_image_params = static_cast(params_entry->second.params.get()); + } + GFXRECON_ASSERT(blit_image_params != nullptr); + + // Create an image with the same parameters as the dstImage + const auto* phys_dev_info = object_info_table_.GetVkPhysicalDeviceInfo(device_info_->parent_id); + const VkPhysicalDeviceMemoryProperties* replay_device_phys_mem_props = + &phys_dev_info->replay_device_info->memory_properties.value(); + VkResult res = CreateVkImage(object_info_table_, + device_table_, + replay_device_phys_mem_props, + dstImage, + &blit_image_params->copied_image.image, + &blit_image_params->copied_image.memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s() CreateVkImage failed (%s)", __func__, util::ToString(res).c_str()); + return res; + } + + // Update copy of VulkanImageInfo + blit_image_params->copied_image.image_info.handle = blit_image_params->copied_image.image; + blit_image_params->copied_image.image_info.capture_id = format::kNullHandleId; + blit_image_params->copied_image.image_info.intermediate_layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + blit_image_params->copied_image.image_info.current_layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + + // Flush any pending writes to destination image + VkImageMemoryBarrier img_barrier = { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, + nullptr, + VK_ACCESS_MEMORY_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_TRANSFER_READ_BIT, + dstImageLayout, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + dstImage->handle, + { graphics::GetFormatAspects(dstImage->format), 0, dstImage->level_count, 0, dstImage->layer_count } + }; + device_table_->CmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 0, + nullptr, + 1, + &img_barrier); + + // Transition new image's layout + img_barrier.srcAccessMask = VK_ACCESS_NONE; + img_barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + img_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + img_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + img_barrier.image = blit_image_params->copied_image.image; + device_table_->CmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 0, + nullptr, + 1, + &img_barrier); + + for (uint32_t i = 0; i < regionCount; ++i) + { + auto& new_region = blit_image_params->regions.emplace_back(pRegions[i]); + + const VkImageCopy copy_region = { pRegions[i].dstSubresource, + { 0, 0, 0 }, + pRegions[i].dstSubresource, + { 0, 0, 0 }, + graphics::ScaleToMipLevel(dstImage->extent, + pRegions[i].dstSubresource.mipLevel) }; + + device_table_->CmdCopyImage(commandBuffer, + srcImage->handle, + srcImageLayout, + blit_image_params->copied_image.image, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + 1, + ©_region); + } + + // Flush injected copies + img_barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + img_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + img_barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + img_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + device_table_->CmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VkDependencyFlags(0), + 0, + nullptr, + 0, + nullptr, + 1, + &img_barrier); + } + + return VK_SUCCESS; +} + +VkResult TransferDumpingContext::HandleCmdBlitImage2(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pBlitImageInfo, + bool before_command) +{ + const auto blit_image_info_meta = pBlitImageInfo->GetMetaStructPointer(); + const auto blit_image_info = pBlitImageInfo->GetPointer(); + + std::vector blit_regions(blit_image_info->regionCount); + for (uint32_t i = 0; i < blit_image_info->regionCount; ++i) + { + blit_regions[i].srcOffsets[0] = blit_image_info->pRegions[i].srcOffsets[0]; + blit_regions[i].srcOffsets[1] = blit_image_info->pRegions[i].srcOffsets[1]; + blit_regions[i].srcSubresource = blit_image_info->pRegions[i].srcSubresource; + + blit_regions[i].dstOffsets[0] = blit_image_info->pRegions[i].dstOffsets[0]; + blit_regions[i].dstOffsets[1] = blit_image_info->pRegions[i].dstOffsets[1]; + blit_regions[i].dstSubresource = blit_image_info->pRegions[i].dstSubresource; + } + + return HandleCmdBlitImage(call_info, + commandBuffer, + object_info_table_.GetVkImageInfo(blit_image_info_meta->srcImage), + blit_image_info->srcImageLayout, + object_info_table_.GetVkImageInfo(blit_image_info_meta->dstImage), + blit_image_info->dstImageLayout, + blit_image_info->regionCount, + blit_regions.data(), + blit_image_info->filter, + before_command); +} + +VkResult TransferDumpingContext::HandleCmdBuildAccelerationStructuresKHR( + const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + uint32_t infoCount, + StructPointerDecoder* pInfos, + StructPointerDecoder* ppBuildRangeInfos, + bool before_command) +{ + if (MustDumpTransfer(call_info.index)) + { + const auto* p_infos_meta = pInfos->GetMetaStructPointer(); + const VkAccelerationStructureBuildGeometryInfoKHR* p_infos = pInfos->GetPointer(); + const VkAccelerationStructureBuildRangeInfoKHR* const* p_range_infos = ppBuildRangeInfos->GetPointer(); + + // Need to grab a device_info, device_table pair + const auto* dst_as = + object_info_table_.GetVkAccelerationStructureKHRInfo(p_infos_meta[0].dstAccelerationStructure); + GetDispatchTables(dst_as->parent_id); + + // If we also are dumping resources before the command, we insert only one entry in transfer_params_ and store + // the allocated resources for both before and after in the same entry. + const bool insert_new_entry = + (options_.dump_resources_before && before_command) || !options_.dump_resources_before; + TransferParams::BuildAccelerationStructure* build_params; + if (insert_new_entry) + { + auto [new_entry, success] = + transfer_params_.emplace(std::piecewise_construct, + std::forward_as_tuple(call_info.index), + std::forward_as_tuple(*device_table_, + device_info_, + before_command, + TransferCommandTypes::kCmdBuildAccelerationStructures)); + GFXRECON_ASSERT(success); + build_params = static_cast( + before_command ? new_entry->second.before_params.get() : new_entry->second.params.get()); + } + else + { + GFXRECON_ASSERT(options_.dump_resources_before && !before_command); + + auto params_entry = transfer_params_.find(call_info.index); + GFXRECON_ASSERT(params_entry != transfer_params_.end()); + build_params = static_cast(params_entry->second.params.get()); + } + GFXRECON_ASSERT(build_params != nullptr); + + for (uint32_t i = 0; i < infoCount; ++i) + { + const auto* dst_as = + object_info_table_.GetVkAccelerationStructureKHRInfo(p_infos_meta[i].dstAccelerationStructure); + const auto* src_as = + object_info_table_.GetVkAccelerationStructureKHRInfo(p_infos_meta[i].srcAccelerationStructure); + + VkResult res; + TemporaryCommandBuffer temp_command_buffer; + + // NULL command buffer means that this is coming from the state setup section + if (commandBuffer == VK_NULL_HANDLE) + { + res = CreateAndBeginCommandBuffer(&FindComputeQueueFamilyIndex, + object_info_table_.GetVkDeviceInfo(dst_as->parent_id), + *device_table_, + temp_command_buffer); + if (res != VK_SUCCESS) + { + return res; + } + } + + const VkCommandBuffer command_buffer = + commandBuffer != VK_NULL_HANDLE ? commandBuffer : temp_command_buffer.command_buffer; + + GFXRECON_ASSERT(device_table_ != nullptr); + auto& new_build_info = build_params->build_infos.emplace_back( + src_as, dst_as, p_infos[i].mode, *device_table_, object_info_table_, address_trackers_); + + if (!before_command) + { + // Clone build input buffers + res = new_build_info.vk_objects.as_context.CloneBuildAccelerationStructuresInputBuffers( + command_buffer, + &p_infos_meta[i], + p_range_infos[i], + options_.dump_resources_dump_build_AS_input_buffers); + if (res != VK_SUCCESS) + { + return res; + } + } + else + { + // If before_command is true then we need to copy the build input buffers before they are replaced. + auto dst_as_context_entry = acceleration_structures_context_.find(dst_as); + if (dst_as_context_entry != acceleration_structures_context_.end()) + { + const auto& dst_as_context = *dst_as_context_entry->second; + res = new_build_info.vk_objects.as_context.CloneBuildAccelerationStructuresInputBuffers( + command_buffer, dst_as_context, options_.dump_resources_dump_build_AS_input_buffers); + if (res != VK_SUCCESS) + { + return res; + } + } + } + + // Clone the dst acceleration structure + res = CreateVkBuffer(dst_as->size, + *device_table_, + device_info_->handle, + nullptr, + nullptr, + replay_device_phys_mem_props_, + VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR | + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | + VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + &new_build_info.vk_objects.buffer, + &new_build_info.vk_objects.memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR( + "%s(): CreateVkBuffer failed with %s", __func__, util::ToString(res).c_str()); + return res; + } + + // Create acceleration structure + const VkAccelerationStructureCreateInfoKHR as_ci = { + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR, + nullptr, + VkAccelerationStructureCreateFlagBitsKHR(0), + new_build_info.vk_objects.buffer, + 0, + dst_as->size, + dst_as->type, + 0 + }; + res = device_table_->CreateAccelerationStructureKHR( + device_info_->handle, &as_ci, nullptr, &new_build_info.vk_objects.as); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s(): CreateAccelerationStructureKHR failed with %s", + __func__, + util::ToString(res).c_str()); + return res; + } + + // Update local VulkanAccelerationStructureKHRInfo + new_build_info.vk_objects.as_info.handle = new_build_info.vk_objects.as; + new_build_info.vk_objects.as_info.buffer = new_build_info.vk_objects.buffer; + + // Wait for original build to complete / flush any pending writes to destination + VkBufferMemoryBarrier dst_buf_mem_barrier = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, + nullptr, + VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR | + VK_ACCESS_MEMORY_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR | + VK_ACCESS_TRANSFER_READ_BIT, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + dst_as->buffer, + 0, + VK_WHOLE_SIZE }; + device_table_->CmdPipelineBarrier(command_buffer, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR | + VK_PIPELINE_STAGE_TRANSFER_BIT, + 0, + 0, + nullptr, + 1, + &dst_buf_mem_barrier, + 0, + nullptr); + + // Flush temporary build + dst_buf_mem_barrier.dstAccessMask = VK_ACCESS_MEMORY_WRITE_BIT; + dst_buf_mem_barrier.buffer = new_build_info.vk_objects.buffer; + device_table_->CmdPipelineBarrier(command_buffer, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR | + VK_PIPELINE_STAGE_TRANSFER_BIT, + 0, + 0, + nullptr, + 1, + &dst_buf_mem_barrier, + 0, + nullptr); + + // Inject vkCmdCopyBuffer to Copy destination's backing buffer + const std::vector region{ VkBufferCopy{ 0, 0, dst_as->size } }; + CopyBufferAndBarrier( + command_buffer, + *device_table_, + dst_as->buffer, + new_build_info.vk_objects.buffer, + region, + VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR | VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR | VK_ACCESS_TRANSFER_READ_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, + VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR); + + if (commandBuffer == VK_NULL_HANDLE) + { + SubmitAndDestroyCommandBuffer(temp_command_buffer); + } + } + } + + return VK_SUCCESS; +} + +VkResult TransferDumpingContext::HandleCmdCopyAccelerationStructureKHR( + const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pInfo, + bool before_command) +{ + if (MustDumpTransfer(call_info.index)) + { + const auto* p_info_meta = pInfo->GetMetaStructPointer(); + const auto* src_as = object_info_table_.GetVkAccelerationStructureKHRInfo(p_info_meta->src); + const auto* dst_as = object_info_table_.GetVkAccelerationStructureKHRInfo(p_info_meta->dst); + + GetDispatchTables(dst_as->parent_id); + + // If we also are dumping resources before the command, we insert only one entry in transfer_params_ and store + // the allocated resources for both before and after in the same entry. + const bool insert_new_entry = + (options_.dump_resources_before && before_command) || !options_.dump_resources_before; + TransferParams::CopyAccelerationStructure* copy_as_params; + if (insert_new_entry) + { + auto [new_entry, success] = + transfer_params_.emplace(std::piecewise_construct, + std::forward_as_tuple(call_info.index), + std::forward_as_tuple(src_as->capture_id, + dst_as, + p_info_meta->decoded_value->mode, + *device_table_, + device_info_, + object_info_table_, + address_trackers_, + before_command, + TransferCommandTypes::kCmdCopyAccelerationStructure)); + GFXRECON_ASSERT(success); + copy_as_params = static_cast( + before_command ? new_entry->second.before_params.get() : new_entry->second.params.get()); + } + else + { + GFXRECON_ASSERT(options_.dump_resources_before && !before_command); + + auto params_entry = transfer_params_.find(call_info.index); + GFXRECON_ASSERT(params_entry != transfer_params_.end()); + copy_as_params = static_cast(params_entry->second.params.get()); + } + GFXRECON_ASSERT(copy_as_params != nullptr); + + auto dst_as_context_entry = acceleration_structures_context_.find(dst_as); + if (dst_as_context_entry != acceleration_structures_context_.end()) + { + const auto& dst_as_context = *dst_as_context_entry->second; + VkResult res = copy_as_params->vk_objects.as_context.CloneBuildAccelerationStructuresInputBuffers( + commandBuffer, dst_as_context, options_.dump_resources_dump_build_AS_input_buffers); + if (res != VK_SUCCESS) + { + return res; + } + } + + // Clone destination acceleration structure + // Clone the dst acceleration structure + VkResult res = CreateVkBuffer(dst_as->size, + *device_table_, + device_info_->handle, + nullptr, + nullptr, + replay_device_phys_mem_props_, + VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR | + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, + ©_as_params->vk_objects.buffer, + ©_as_params->vk_objects.memory); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("%s(): CreateVkBuffer failed with %s", __func__, util::ToString(res).c_str()); + return res; + } + + // Create acceleration structure + const VkAccelerationStructureCreateInfoKHR as_ci = { VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR, + nullptr, + VkAccelerationStructureCreateFlagBitsKHR(0), + copy_as_params->vk_objects.buffer, + 0, + dst_as->size, + dst_as->type, + 0 }; + res = device_table_->CreateAccelerationStructureKHR( + device_info_->handle, &as_ci, nullptr, ©_as_params->vk_objects.as); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR( + "%s(): CreateAccelerationStructureKHR failed with %s", __func__, util::ToString(res).c_str()); + return res; + } + + // Update local VulkanAccelerationStructureKHRInfo + copy_as_params->vk_objects.as_info.handle = copy_as_params->vk_objects.as; + copy_as_params->vk_objects.as_info.buffer = copy_as_params->vk_objects.buffer; + + // Wait for original build to complete / flush any pending writes to destination + const VkBufferMemoryBarrier dst_buf_mem_barrier = { + VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, + nullptr, + VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR | VK_ACCESS_MEMORY_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR | VK_ACCESS_TRANSFER_READ_BIT, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + dst_as->buffer, + 0, + VK_WHOLE_SIZE + }; + device_table_->CmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR | + VK_PIPELINE_STAGE_TRANSFER_BIT, + 0, + 0, + nullptr, + 1, + &dst_buf_mem_barrier, + 0, + nullptr); + + // Inject vkCmdCopyBuffer to Copy destination's backing buffer + const std::vector region{ VkBufferCopy{ 0, 0, dst_as->size } }; + CopyBufferAndBarrier(commandBuffer, + *device_table_, + dst_as->buffer, + copy_as_params->vk_objects.buffer, + region, + VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR | VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR | VK_ACCESS_TRANSFER_READ_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, + VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR); + } + + return VK_SUCCESS; +} + +VkResult TransferDumpingContext::DumpTransferCommands(uint64_t bcb_index, uint64_t qs_index) +{ + if (!qs_index) + { + delegate_.DumpStart(); + } + + for (auto& [cmd_index, cmd] : transfer_params_) + { + VulkanDelegateDumpResourceContext res_info(instance_table_, device_table_, compressor_); + res_info.dumped_data = VulkanDelegateTransferCommandDumpedData(); + auto& host_data = std::get(res_info.dumped_data); + + TransferParams::TransferParamsBase* base_transfer_cmd = cmd.params.get(); + base_transfer_cmd->dumped_resources.bcb_index = bcb_index; + base_transfer_cmd->dumped_resources.cmd_index = cmd_index; + base_transfer_cmd->dumped_resources.qs_index = qs_index; + + switch (base_transfer_cmd->type) + { + case kCmdInitBuffer: + { + auto* init_buffer = static_cast(base_transfer_cmd); + auto& new_dumped_transfer_cmd = init_buffer->dumped_resources.dumped_transfer_command = + std::make_unique(DumpResourceType::kInitBufferMetaCommand, + cmd_index, + qs_index, + init_buffer->dst_buffer, + init_buffer->data.size()); + auto& new_dumped_init_buffer = + std::get(new_dumped_transfer_cmd->dumped_resource); + + res_info.dumped_resource = new_dumped_transfer_cmd.get(); + host_data.dumped_data = VulkanDelegateBufferDumpedData(); + + auto& dumped_host_data = std::get(host_data.dumped_data); + dumped_host_data.data = init_buffer->data; + delegate_.DumpResource(res_info); + } + break; + + case kCmdInitImage: + { + auto* init_image = static_cast(base_transfer_cmd); + auto& new_dumped_transfer_cmd = init_image->dumped_resources.dumped_transfer_command = + std::make_unique(DumpResourceType::kInitImageMetaCommand, + cmd_index, + qs_index, + init_image->dst_image, + &init_image->copied_image.image_info); + + res_info.dumped_resource = new_dumped_transfer_cmd.get(); + host_data.dumped_data = VulkanDelegateImageDumpedData(); + + // Images initialized in the state setup block should be dumpable, otherwise it wouldn't have been + // possible to be dumped in the capture file in the first place. + GFXRECON_ASSERT(CanDumpImage(instance_table_, + device_info_->parent, + &init_image->copied_image.image_info) == ImageDumpResult::kCanDump); + + auto& new_dumped_init_image = + std::get(new_dumped_transfer_cmd->dumped_resource); + auto& dumped_image_host_data = std::get(host_data.dumped_data); + + const VkImageSubresourceRange subresource_range = { static_cast(init_image->aspect), + 0, + VK_REMAINING_MIP_LEVELS, + 0, + VK_REMAINING_ARRAY_LAYERS }; + + VkResult res = DumpImage(new_dumped_init_image.dumped_image, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + options_.dump_resources_scale, + options_.dump_resources_dump_raw_images, + subresource_range, + dumped_image_host_data.data, + device_info_, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping image of transfer command (%s)", util::ToString(res).c_str()); + return res; + } + + delegate_.DumpResource(res_info); + } + break; + + case kCmdCopyBuffer: + { + auto* copy_buffer = static_cast(base_transfer_cmd); + auto& new_dumped_transfer_cmd = copy_buffer->dumped_resources.dumped_transfer_command = + std::make_unique(DumpResourceType::kCopyBuffer, + cmd_index, + qs_index, + copy_buffer->src_buffer, + copy_buffer->dst_buffer, + copy_buffer->has_before_command); + auto& new_dumped_copy_buffer = std::get(new_dumped_transfer_cmd->dumped_resource); + + res_info.dumped_resource = new_dumped_transfer_cmd.get(); + host_data.dumped_data = VulkanDelegateDumpedCopyBufferRegions(); + + auto& dumped_regions_host_data = std::get(host_data.dumped_data); + for (const auto& region : copy_buffer->regions) + { + auto& new_dumped_region = new_dumped_copy_buffer.regions.emplace_back( + region.region, region.vk_objects.buffer, region.vk_objects.size); + + auto& host_dumped_region = dumped_regions_host_data.regions_data.emplace_back(); + + VkResult res = DumpBuffer(new_dumped_region.dumped_buffer, + host_dumped_region, + device_info_, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping buffer of transfer command (%s)", + util::ToString(res).c_str()); + return res; + } + } + + delegate_.DumpResource(res_info); + + if (copy_buffer->has_before_command) + { + dumped_regions_host_data.regions_data.clear(); + + const auto* copy_buffer_before = static_cast(cmd.before_params.get()); + GFXRECON_ASSERT(copy_buffer_before != nullptr); + + auto* new_dumped_copy_buffer_before = + std::get_if(&new_dumped_transfer_cmd->dumped_resource_before); + for (const auto& region : copy_buffer_before->regions) + { + auto& new_dumped_region_before = new_dumped_copy_buffer_before->regions.emplace_back( + region.region, region.vk_objects.buffer, region.region.size); + + auto& host_dumped_region_before = dumped_regions_host_data.regions_data.emplace_back(); + + VkResult res = DumpBuffer(new_dumped_region_before.dumped_buffer, + host_dumped_region_before, + device_info_, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping buffer of transfer command (%s)", + util::ToString(res).c_str()); + return res; + } + } + + res_info.before_command = true; + delegate_.DumpResource(res_info); + } + } + break; + + case kCmdCopyBufferToImage: + { + auto* copy_buffer_to_image = static_cast(base_transfer_cmd); + const ImageDumpResult can_dump_image = + CanDumpImage(instance_table_, device_info_->parent, ©_buffer_to_image->copied_image.image_info); + + auto& new_dumped_transfer_cmd = copy_buffer_to_image->dumped_resources.dumped_transfer_command = + std::make_unique(DumpResourceType::kCopyBufferToImage, + cmd_index, + qs_index, + copy_buffer_to_image->src_buffer, + copy_buffer_to_image->dst_image, + copy_buffer_to_image->has_before_command); + + res_info.dumped_resource = new_dumped_transfer_cmd.get(); + host_data.dumped_data = VulkanDelegateDumpedCopyImageRegions(); + + auto& new_dumped_copy_buffer_to_image = + std::get(new_dumped_transfer_cmd->dumped_resource); + auto& dumped_regions_host_data = std::get(host_data.dumped_data); + for (const auto& region : copy_buffer_to_image->regions) + { + auto& new_dumped_image_region = new_dumped_copy_buffer_to_image.regions.emplace_back( + region.region, ©_buffer_to_image->copied_image.image_info, can_dump_image); + + if (can_dump_image != ImageDumpResult::kCanDump) + { + continue; + } + + auto& new_copy_buffer_to_image_image_region_host_data = + dumped_regions_host_data.regions_data.emplace_back(); + + const VkImageSubresourceRange subresource_range = { region.region.imageSubresource.aspectMask, + region.region.imageSubresource.mipLevel, + 1, + region.region.imageSubresource.baseArrayLayer, + region.region.imageSubresource.layerCount }; + + // Dump region's subresources + VkResult res = DumpImage(new_dumped_image_region.dumped_image, + new_dumped_image_region.dumped_image.image_info->intermediate_layout, + options_.dump_resources_scale, + options_.dump_resources_dump_raw_images, + subresource_range, + new_copy_buffer_to_image_image_region_host_data, + device_info_, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping image of transfer command (%s)", util::ToString(res).c_str()); + return res; + } + } + + if (can_dump_image == ImageDumpResult::kCanDump) + { + delegate_.DumpResource(res_info); + } + + if (copy_buffer_to_image->has_before_command) + { + dumped_regions_host_data.regions_data.clear(); + + const auto* copy_buffer_to_image_before = + static_cast(cmd.before_params.get()); + GFXRECON_ASSERT(copy_buffer_to_image_before != nullptr); + + auto& new_dumped_copy_buffer_to_image_before = + std::get(new_dumped_transfer_cmd->dumped_resource_before); + for (const auto& region : copy_buffer_to_image_before->regions) + { + auto& new_dumped_image_region_before = + new_dumped_copy_buffer_to_image_before.regions.emplace_back( + region.region, ©_buffer_to_image_before->copied_image.image_info, can_dump_image); + + if (can_dump_image != ImageDumpResult::kCanDump) + { + continue; + } + + auto& new_copy_buffer_to_image_image_region_host_data = + dumped_regions_host_data.regions_data.emplace_back(); + + const VkImageSubresourceRange subresource_range = { + region.region.imageSubresource.aspectMask, + region.region.imageSubresource.mipLevel, + 1, + region.region.imageSubresource.baseArrayLayer, + region.region.imageSubresource.layerCount + }; + + // Dump region's subresources + VkResult res = + DumpImage(new_dumped_image_region_before.dumped_image, + new_dumped_image_region_before.dumped_image.image_info->intermediate_layout, + options_.dump_resources_scale, + options_.dump_resources_dump_raw_images, + subresource_range, + new_copy_buffer_to_image_image_region_host_data, + device_info_, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping image of transfer command (%s)", + util::ToString(res).c_str()); + return res; + } + } + + if (can_dump_image == ImageDumpResult::kCanDump) + { + res_info.before_command = true; + delegate_.DumpResource(res_info); + } + } + } + break; + + case kCmdCopyImage: + { + auto* copy_image = static_cast(base_transfer_cmd); + auto& new_dumped_transfer_cmd = copy_image->dumped_resources.dumped_transfer_command = + std::make_unique(DumpResourceType::kCopyImage, + cmd_index, + qs_index, + copy_image->src_image, + copy_image->dst_image, + copy_image->has_before_command); + + res_info.dumped_resource = new_dumped_transfer_cmd.get(); + host_data.dumped_data = VulkanDelegateDumpedCopyImageRegions(); + + const ImageDumpResult can_dump_image = + CanDumpImage(instance_table_, device_info_->parent, ©_image->copied_image.image_info); + + auto& new_dumped_copy_image = std::get(new_dumped_transfer_cmd->dumped_resource); + auto& dumped_regions_host_data = std::get(host_data.dumped_data); + for (const auto& region : copy_image->regions) + { + auto& new_dumped_image_region = new_dumped_copy_image.regions.emplace_back( + region.region, ©_image->copied_image.image_info, can_dump_image); + + if (can_dump_image != ImageDumpResult::kCanDump) + { + continue; + } + + auto& new_copy_image_region_host_data = dumped_regions_host_data.regions_data.emplace_back(); + + const VkImageSubresourceRange subresource_range = { region.region.dstSubresource.aspectMask, + region.region.dstSubresource.mipLevel, + 1, + region.region.dstSubresource.baseArrayLayer, + region.region.dstSubresource.layerCount }; + + // Dump region's subresources + VkResult res = DumpImage(new_dumped_image_region.dumped_image, + new_dumped_image_region.dumped_image.image_info->intermediate_layout, + options_.dump_resources_scale, + options_.dump_resources_dump_raw_images, + subresource_range, + new_copy_image_region_host_data, + device_info_, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping image of transfer command (%s)", util::ToString(res).c_str()); + return res; + } + } + + if (can_dump_image == ImageDumpResult::kCanDump) + { + delegate_.DumpResource(res_info); + } + + if (copy_image->has_before_command) + { + dumped_regions_host_data.regions_data.clear(); + + const auto* copy_image_before = static_cast(cmd.before_params.get()); + GFXRECON_ASSERT(copy_image_before != nullptr); + + auto* new_dumped_copy_image_before = + std::get_if(&new_dumped_transfer_cmd->dumped_resource_before); + GFXRECON_ASSERT(new_dumped_copy_image_before != nullptr); + + for (const auto& region : copy_image_before->regions) + { + auto& new_dumped_image_region_before = new_dumped_copy_image_before->regions.emplace_back( + region.region, ©_image_before->copied_image.image_info, can_dump_image); + + if (can_dump_image != ImageDumpResult::kCanDump) + { + continue; + } + + auto& new_copy_image_region_host_data = dumped_regions_host_data.regions_data.emplace_back(); + + const VkImageSubresourceRange subresource_range = { region.region.dstSubresource.aspectMask, + region.region.dstSubresource.mipLevel, + 1, + region.region.dstSubresource.baseArrayLayer, + region.region.dstSubresource.layerCount }; + + // Dump region's subresources + VkResult res = + DumpImage(new_dumped_image_region_before.dumped_image, + new_dumped_image_region_before.dumped_image.image_info->intermediate_layout, + 1.0f, + options_.dump_resources_dump_raw_images, + subresource_range, + new_copy_image_region_host_data, + device_info_, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping image of transfer command (%s)", + util::ToString(res).c_str()); + return res; + } + } + + if (can_dump_image == ImageDumpResult::kCanDump) + { + res_info.before_command = true; + delegate_.DumpResource(res_info); + } + } + } + break; + + case kCmdCopyImageToBuffer: + { + auto* copy_image_to_buffer = static_cast(base_transfer_cmd); + auto& new_dumped_transfer_cmd = copy_image_to_buffer->dumped_resources.dumped_transfer_command = + std::make_unique(DumpResourceType::kCopyImageToBuffer, + cmd_index, + qs_index, + copy_image_to_buffer->src_image, + copy_image_to_buffer->dst_buffer, + copy_image_to_buffer->has_before_command); + auto& new_dumped_copy_image_to_buffer = + std::get(new_dumped_transfer_cmd->dumped_resource); + + res_info.dumped_resource = new_dumped_transfer_cmd.get(); + host_data.dumped_data = VulkanDelegateDumpedCopyBufferRegions(); + + auto& dumped_regions_host_data = std::get(host_data.dumped_data); + for (const auto& region : copy_image_to_buffer->regions) + { + auto& new_dumped_region = new_dumped_copy_image_to_buffer.regions.emplace_back( + region.region, region.vk_objects.buffer, region.vk_objects.size); + auto& host_dumped_region = dumped_regions_host_data.regions_data.emplace_back(); + VkResult res = DumpBuffer(new_dumped_region.dumped_buffer, + host_dumped_region, + device_info_, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping buffer of transfer command (%s)", + util::ToString(res).c_str()); + return res; + } + } + + delegate_.DumpResource(res_info); + + if (copy_image_to_buffer->has_before_command) + { + dumped_regions_host_data.regions_data.clear(); + + const auto* copy_image_to_buffer_before = + static_cast(cmd.before_params.get()); + GFXRECON_ASSERT(copy_image_to_buffer_before != nullptr); + + auto* new_dumped_copy_image_to_buffer_before = + std::get_if(&new_dumped_transfer_cmd->dumped_resource_before); + for (const auto& region : copy_image_to_buffer_before->regions) + { + auto& new_dumped_region_before = new_dumped_copy_image_to_buffer_before->regions.emplace_back( + region.region, region.vk_objects.buffer, region.vk_objects.size); + + auto& host_dumped_region_before = dumped_regions_host_data.regions_data.emplace_back(); + + VkResult res = DumpBuffer(new_dumped_region_before.dumped_buffer, + host_dumped_region_before, + device_info_, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping buffer of transfer command (%s)", + util::ToString(res).c_str()); + return res; + } + } + + res_info.before_command = true; + delegate_.DumpResource(res_info); + } + } + break; + + case kCmdBlitImage: + { + auto* blit_image = static_cast(base_transfer_cmd); + const ImageDumpResult can_dump_image = + CanDumpImage(instance_table_, device_info_->parent, &blit_image->copied_image.image_info); + + auto& new_dumped_transfer_cmd = blit_image->dumped_resources.dumped_transfer_command = + std::make_unique(DumpResourceType::kBlitImage, + cmd_index, + qs_index, + blit_image->src_image, + blit_image->dst_image, + blit_image->filter, + blit_image->has_before_command); + + res_info.dumped_resource = new_dumped_transfer_cmd.get(); + host_data.dumped_data = VulkanDelegateDumpedCopyImageRegions(); + + auto& new_dumped_blit_image = std::get(new_dumped_transfer_cmd->dumped_resource); + auto& dumped_regions_host_data = std::get(host_data.dumped_data); + for (const auto& region : blit_image->regions) + { + auto& new_dumped_image_region = new_dumped_blit_image.regions.emplace_back( + region.region, &blit_image->copied_image.image_info, can_dump_image); + + if (can_dump_image != ImageDumpResult::kCanDump) + { + continue; + } + + auto& new_blit_image_region_host_data = dumped_regions_host_data.regions_data.emplace_back(); + + const VkImageSubresourceRange subresource_range = { region.region.dstSubresource.aspectMask, + region.region.dstSubresource.mipLevel, + 1, + region.region.dstSubresource.baseArrayLayer, + region.region.dstSubresource.layerCount }; + + // Dump region's subresources + VkResult res = DumpImage(new_dumped_image_region.dumped_image, + new_dumped_image_region.dumped_image.image_info->intermediate_layout, + options_.dump_resources_scale, + options_.dump_resources_dump_raw_images, + subresource_range, + new_blit_image_region_host_data, + device_info_, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping image of transfer command (%s)", util::ToString(res).c_str()); + return res; + } + } + + if (can_dump_image == ImageDumpResult::kCanDump) + { + delegate_.DumpResource(res_info); + } + + if (blit_image->has_before_command) + { + dumped_regions_host_data.regions_data.clear(); + + const auto* blit_image_before = static_cast(cmd.before_params.get()); + GFXRECON_ASSERT(blit_image_before != nullptr); + + auto* new_dumped_blit_image_before = + std::get_if(&new_dumped_transfer_cmd->dumped_resource_before); + GFXRECON_ASSERT(new_dumped_blit_image_before != nullptr); + + for (const auto& region : blit_image_before->regions) + { + auto& new_dumped_image_region_before = new_dumped_blit_image_before->regions.emplace_back( + region.region, &blit_image_before->copied_image.image_info, can_dump_image); + + if (can_dump_image != ImageDumpResult::kCanDump) + { + continue; + } + + auto& new_copy_image_region_host_data = dumped_regions_host_data.regions_data.emplace_back(); + + const VkImageSubresourceRange subresource_range = { region.region.dstSubresource.aspectMask, + region.region.dstSubresource.mipLevel, + 1, + region.region.dstSubresource.baseArrayLayer, + region.region.dstSubresource.layerCount }; + + // Dump region's subresources + VkResult res = + DumpImage(new_dumped_image_region_before.dumped_image, + new_dumped_image_region_before.dumped_image.image_info->intermediate_layout, + 1.0f, + options_.dump_resources_dump_raw_images, + subresource_range, + new_copy_image_region_host_data, + device_info_, + device_table_, + instance_table_, + object_info_table_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping image of transfer command (%s)", + util::ToString(res).c_str()); + return res; + } + } + + if (can_dump_image == ImageDumpResult::kCanDump) + { + res_info.before_command = true; + delegate_.DumpResource(res_info); + } + } + } + break; + + case kCmdBuildAccelerationStructures: + { + auto* build_as = static_cast(base_transfer_cmd); + auto& new_dumped_transfer_cmd = build_as->dumped_resources.dumped_transfer_command = + std::make_unique(DumpResourceType::kBuildAccelerationStructure, + cmd_index, + qs_index, + build_as->has_before_command); + auto& new_dumped_build_as = + std::get(new_dumped_transfer_cmd->dumped_resource); + + res_info.dumped_resource = new_dumped_transfer_cmd.get(); + host_data.dumped_data = VulkanDelegateDumpedBuildAccelerationStructures(); + + auto& host_dumped_build_infos = + std::get(host_data.dumped_data); + + for (auto& build_info : build_as->build_infos) + { + auto& new_dumped_build_info = new_dumped_build_as.dumped_build_infos.emplace_back( + build_info.src_as, + build_info.dst_as, + build_info.mode, + &build_info.vk_objects.as_info, + options_.dump_resources_dump_build_AS_input_buffers); + auto& new_host_data_build_info = host_dumped_build_infos.data.emplace_back(); + + VkResult res = DumpAccelerationStructure(new_dumped_build_info.dumped_as, + new_host_data_build_info, + &build_info.vk_objects.as_context, + acceleration_structures_context_, + device_info_, + *device_table_, + object_info_table_, + *instance_table_, + address_trackers_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping build acceleration structure command (%s)", + util::ToString(res).c_str()); + return res; + } + } + + delegate_.DumpResource(res_info); + + if (build_as->has_before_command) + { + host_dumped_build_infos.data.clear(); + + auto* build_as_before = + static_cast(cmd.before_params.get()); + + auto* new_dumped_build_as_before = + std::get_if(&new_dumped_transfer_cmd->dumped_resource_before); + GFXRECON_ASSERT(new_dumped_build_as_before != nullptr); + + for (auto& build_info : build_as_before->build_infos) + { + auto& new_dumped_build_info = new_dumped_build_as_before->dumped_build_infos.emplace_back( + build_info.src_as, + build_info.dst_as, + build_info.mode, + &build_info.vk_objects.as_info, + options_.dump_resources_dump_build_AS_input_buffers); + auto& new_host_data_build_info = host_dumped_build_infos.data.emplace_back(); + + VkResult res = DumpAccelerationStructure(new_dumped_build_info.dumped_as, + new_host_data_build_info, + &build_info.vk_objects.as_context, + acceleration_structures_context_, + device_info_, + *device_table_, + object_info_table_, + *instance_table_, + address_trackers_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping build acceleration structure command (%s)", + util::ToString(res).c_str()); + return res; + } + } + + res_info.before_command = true; + delegate_.DumpResource(res_info); + } + } + break; + + case kCmdCopyAccelerationStructure: + { + auto* copy_as = static_cast(base_transfer_cmd); + auto& new_dumped_transfer_cmd = copy_as->dumped_resources.dumped_transfer_command = + std::make_unique(DumpResourceType::kCopyAccelerationStructure, + cmd_index, + qs_index, + copy_as->src_as, + copy_as->dst_as, + copy_as->mode, + ©_as->vk_objects.as_info, + options_.dump_resources_dump_build_AS_input_buffers, + copy_as->has_before_command); + auto& new_dumped_copy_as = + std::get(new_dumped_transfer_cmd->dumped_resource); + + res_info.dumped_resource = new_dumped_transfer_cmd.get(); + host_data.dumped_data = VulkanDelegateDumpedCopyAccelerationStructure(); + + auto& host_dumped_copy_info = + std::get(host_data.dumped_data); + + VkResult res = DumpAccelerationStructure(new_dumped_copy_as.dumped_copy_info.dumped_as, + host_dumped_copy_info.data, + ©_as->vk_objects.as_context, + acceleration_structures_context_, + device_info_, + *device_table_, + object_info_table_, + *instance_table_, + address_trackers_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping build acceleration structure command (%s)", + util::ToString(res).c_str()); + return res; + } + + delegate_.DumpResource(res_info); + + if (copy_as->has_before_command) + { + host_dumped_copy_info.data.clear(); + auto* copy_as_before = + static_cast(cmd.before_params.get()); + auto& new_dumped_copy_as_before = + std::get(new_dumped_transfer_cmd->dumped_resource_before); + + VkResult res = DumpAccelerationStructure(new_dumped_copy_as_before.dumped_copy_info.dumped_as, + host_dumped_copy_info.data, + ©_as_before->vk_objects.as_context, + acceleration_structures_context_, + device_info_, + *device_table_, + object_info_table_, + *instance_table_, + address_trackers_); + if (res != VK_SUCCESS) + { + GFXRECON_LOG_ERROR("Error dumping build acceleration structure command (%s)", + util::ToString(res).c_str()); + return res; + } + + res_info.before_command = true; + delegate_.DumpResource(res_info); + } + } + break; + + default: + GFXRECON_LOG_ERROR("%s() Unhandled dump resources type", __func__) + GFXRECON_ASSERT(0); + } + + const VulkanDelegateDumpDrawCallContext transfer_info{ + DumpResourcesPipelineStage::kTransfer, instance_table_, device_table_, &cmd + }; + + delegate_.DumpDrawCallInfo(transfer_info); + } + + if (!qs_index) + { + delegate_.DumpEnd(); + } + + Release(); + + return VK_SUCCESS; +} + +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_transfer.h b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_transfer.h new file mode 100644 index 000000000..23ccd2812 --- /dev/null +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_dump_resources_transfer.h @@ -0,0 +1,852 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_GENERATED_VULKAN_REPLAY_DUMP_RESOURCES_TRANSFER_H +#define GFXRECON_GENERATED_VULKAN_REPLAY_DUMP_RESOURCES_TRANSFER_H + +#include "decode/api_decoder.h" +#include "decode/common_object_info_table.h" +#include "decode/vulkan_object_info.h" +#include "decode/vulkan_replay_dump_resources_common.h" +#include "decode/vulkan_replay_dump_resources_delegate_dumped_resources.h" +#include "decode/vulkan_replay_options.h" +#include "format/format.h" +#include "generated/generated_vulkan_dispatch_table.h" +#include "util/defines.h" +#include "util/logging.h" + +#include +#include +#include +#include +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(decode) + +class TransferDumpingContext +{ + public: + TransferDumpingContext(const CommandIndices* transfer_indices, + CommonObjectInfoTable& object_info_table, + const graphics::InstanceDispatchTablesMap& instance_tables, + const graphics::DeviceDispatchTablesMap& device_tables, + const VulkanReplayOptions& options, + VulkanDumpResourcesDelegate& delegate, + const VulkanPerDeviceAddressTrackers& address_trackers, + const DumpResourcesAccelerationStructuresContext& acceleration_structures_context, + const util::Compressor* compressor); + + ~TransferDumpingContext() { Release(); } + + VkResult HandleInitBufferCommand(uint64_t cmd_index, + format::HandleId device_id, + format::HandleId buffer_id, + uint64_t data_size, + const uint8_t* data); + + VkResult HandleInitImageCommand(VkCommandBuffer command_buffer, + uint64_t cmd_index, + format::HandleId device_id, + format::HandleId image_id, + uint64_t data_size, + VkImageAspectFlagBits aspect, + VkImageLayout layout, + const std::vector& level_sizes, + const uint8_t* data); + + VkResult HandleCmdCopyBuffer(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + const VulkanBufferInfo* srcBuffer, + const VulkanBufferInfo* dstBuffer, + uint32_t regionCount, + const VkBufferCopy* pRegions, + bool before_command); + + VkResult HandleCmdCopyBuffer2(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyBufferInfo, + bool before_command); + + VkResult HandleCmdCopyBufferToImage(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + const VulkanBufferInfo* srcBuffer, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkBufferImageCopy* pRegions, + bool before_command); + + VkResult HandleCmdCopyBufferToImage2(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyBufferToImageInfo, + bool before_command); + + VkResult HandleCmdCopyImage(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkImageCopy* pRegions, + bool before_command); + + VkResult HandleCmdCopyImage2(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyImageInfo, + bool before_command); + + VkResult HandleCmdCopyImageToBuffer(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanBufferInfo* dstBuffer, + uint32_t regionCount, + const VkBufferImageCopy* pRegions, + bool before_command); + + VkResult HandleCmdCopyImageToBuffer2(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyImageToBufferInfo, + bool before_command); + + VkResult HandleCmdBlitImage(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkImageBlit* pRegions, + VkFilter filter, + bool before_command); + + VkResult HandleCmdBlitImage2(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pBlitImageInfo, + bool before_command); + + VkResult HandleCmdBuildAccelerationStructuresKHR( + const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + uint32_t infoCount, + StructPointerDecoder* pInfos, + StructPointerDecoder* ppBuildRangeInfos, + bool before_command); + + VkResult + HandleCmdCopyAccelerationStructureKHR(const ApiCallInfo& call_info, + VkCommandBuffer commandBuffer, + StructPointerDecoder* pInfo, + bool before_command); + + bool MustDumpTransfer(uint64_t index) const; + + VkResult DumpTransferCommands(uint64_t bcb_index, uint64_t qs_index); + + const CommandIndices& GetCommandIndices() const { return transfer_indices_; } + + void Release() { transfer_params_.clear(); } + + enum TransferCommandTypes + { + kCmdInitBuffer, + kCmdInitImage, + kCmdCopyBuffer, + kCmdCopyBufferToImage, + kCmdCopyImage, + kCmdCopyImageToBuffer, + kCmdBlitImage, + kCmdBuildAccelerationStructures, + kCmdCopyAccelerationStructure + }; + + static const char* TransferCommandTypeToStr(TransferCommandTypes type) + { + switch (type) + { + case kCmdInitBuffer: + return "InitBufferMetaCommand"; + case kCmdInitImage: + return "InitImageMetaCommand"; + case kCmdCopyBuffer: + return "vkCmdCopyBuffer"; + case kCmdCopyBufferToImage: + return "vkCmdCopyBufferToImage"; + case kCmdCopyImage: + return "vkCmdCopyImage"; + case kCmdCopyImageToBuffer: + return "vkCmdCopyImageToBuffer"; + case kCmdBlitImage: + return "vkCmdBlitImage"; + case kCmdBuildAccelerationStructures: + return "vkCmdBuildAccelerationStructures"; + case kCmdCopyAccelerationStructure: + return "vkCmdCopyAccelerationStructure"; + + default: + GFXRECON_LOG_ERROR("%s(): Unrecognized transfer command type (%d)", __func__, static_cast(type)); + GFXRECON_ASSERT(0); + return "XXX"; + } + } + + struct TransferParams + { + struct CopiedBuffer + { + VkBuffer buffer{ VK_NULL_HANDLE }; + VkDeviceSize size{ 0 }; + VkDeviceMemory memory{ VK_NULL_HANDLE }; + }; + + struct CopiedImage + { + CopiedImage(const VulkanImageInfo* img_info) : + image_info(*img_info), image(VK_NULL_HANDLE), memory(VK_NULL_HANDLE) + {} + + VkImage image; + VkDeviceMemory memory; + VulkanImageInfo image_info; + }; + + struct TransferParamsBase + { + TransferParamsBase(TransferCommandTypes t, + bool hb, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi) : + type(t), + device_table_(dt), parent_device_info_(pdi), has_before_command(hb) + {} + + const graphics::VulkanDeviceTable& device_table_; + const VulkanDeviceInfo* parent_device_info_; + TransferCommandTypes type; + bool has_before_command; + DumpedResourcesInfo dumped_resources; + }; + + // kInitBufferCommand + struct InitBufferMetaCommand : TransferParamsBase + { + InitBufferMetaCommand() = delete; + + InitBufferMetaCommand(TransferCommandTypes t, + bool hb, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + format::HandleId b, + const uint8_t* d_p, + uint64_t size) : + TransferParamsBase(t, hb, dt, pdi), + dst_buffer(b), data(d_p, d_p + size) + {} + + format::HandleId dst_buffer; + DumpedHostData data; + }; + + // kInitImageCommand + struct InitImageMetaCommand : TransferParamsBase + { + InitImageMetaCommand() = delete; + + InitImageMetaCommand(TransferCommandTypes t, + bool hb, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + const VulkanImageInfo* ii, + VkImageAspectFlagBits a, + VkImageLayout l) : + TransferParamsBase(t, hb, dt, pdi), + dst_image(ii->capture_id, ii->format, ii->extent, l), aspect(a), copied_image(ii) + {} + + ~InitImageMetaCommand() + { + if (copied_image.image != VK_NULL_HANDLE) + { + device_table_.DestroyImage(parent_device_info_->handle, copied_image.image, nullptr); + } + + if (copied_image.memory != VK_NULL_HANDLE) + { + device_table_.FreeMemory(parent_device_info_->handle, copied_image.memory, nullptr); + } + } + + TransferedImageInfo dst_image; + VkImageAspectFlagBits aspect; + CopiedImage copied_image; + }; + + // CmdCopyBuffer + struct CopyBuffer : TransferParamsBase + { + CopyBuffer() = delete; + + CopyBuffer(TransferCommandTypes t, + bool hb, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + format::HandleId s, + format::HandleId d) : + TransferParamsBase(t, hb, dt, pdi), + src_buffer(s), dst_buffer(d) + {} + + ~CopyBuffer() + { + for (const auto& region : regions) + { + if (region.vk_objects.buffer != VK_NULL_HANDLE) + { + device_table_.DestroyBuffer(parent_device_info_->handle, region.vk_objects.buffer, nullptr); + } + + if (region.vk_objects.memory != VK_NULL_HANDLE) + { + device_table_.FreeMemory(parent_device_info_->handle, region.vk_objects.memory, nullptr); + } + } + } + + format::HandleId src_buffer; + format::HandleId dst_buffer; + + struct CopyRegion + { + CopyRegion(const VkBufferCopy& r) : region(r) {} + + VkBufferCopy region; + CopiedBuffer vk_objects; + }; + + std::vector regions; + }; + + // CmdCopyBufferToImage + struct CopyBufferToImage : TransferParamsBase + { + CopyBufferToImage() = delete; + + CopyBufferToImage(TransferCommandTypes t, + bool hb, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + format::HandleId sb, + VkImageLayout dil, + const VulkanImageInfo* ii) : + TransferParamsBase(t, hb, dt, pdi), + src_buffer(sb), dst_image(ii->capture_id, ii->format, ii->extent, dil), copied_image(ii) + {} + + ~CopyBufferToImage() + { + if (copied_image.image != VK_NULL_HANDLE) + { + device_table_.DestroyImage(parent_device_info_->handle, copied_image.image, nullptr); + } + + if (copied_image.memory != VK_NULL_HANDLE) + { + device_table_.FreeMemory(parent_device_info_->handle, copied_image.memory, nullptr); + } + } + + format::HandleId src_buffer; + TransferedImageInfo dst_image; + + // We create an image with the same properties as the destination image. + // Then we do the same copy regions to the new image + CopiedImage copied_image; + + struct CopyRegion + { + CopyRegion() = delete; + + CopyRegion(const VkBufferImageCopy& r) : region(r) {} + VkBufferImageCopy region; + }; + + std::vector regions; + }; + + // CmdCopyImage + struct CopyImage : TransferParamsBase + { + CopyImage() = delete; + + CopyImage(TransferCommandTypes t, + bool hb, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + const VulkanImageInfo* si, + VkImageLayout sl, + const VulkanImageInfo* di, + VkImageLayout dl) : + TransferParamsBase(t, hb, dt, pdi), + src_image(si->capture_id, si->format, si->extent, sl), + dst_image(di->capture_id, di->format, di->extent, dl), copied_image(di) + {} + + ~CopyImage() + { + if (copied_image.image != VK_NULL_HANDLE) + { + device_table_.DestroyImage(parent_device_info_->handle, copied_image.image, nullptr); + } + + if (copied_image.memory != VK_NULL_HANDLE) + { + device_table_.FreeMemory(parent_device_info_->handle, copied_image.memory, nullptr); + } + } + + TransferedImageInfo src_image; + TransferedImageInfo dst_image; + + // We create an image with the same properties as the destination image. + // Then we do the same copy regions to the new image + CopiedImage copied_image; + + struct CopyRegion + { + CopyRegion() = delete; + + CopyRegion(const VkImageCopy& r) : region(r) {} + VkImageCopy region; + }; + + std::vector regions; + }; + + // CmdCopyImageToBuffer + struct CopyImageToBuffer : TransferParamsBase + { + CopyImageToBuffer() = delete; + + CopyImageToBuffer(TransferCommandTypes t, + bool hb, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + const VulkanImageInfo* si, + VkImageLayout sl, + format::HandleId d) : + TransferParamsBase(t, hb, dt, pdi), + src_image(si->capture_id, si->format, si->extent, sl), dst_buffer(d) + {} + + ~CopyImageToBuffer() + { + for (const auto& region : regions) + { + if (region.vk_objects.buffer != VK_NULL_HANDLE) + { + device_table_.DestroyBuffer(parent_device_info_->handle, region.vk_objects.buffer, nullptr); + } + + if (region.vk_objects.memory != VK_NULL_HANDLE) + { + device_table_.FreeMemory(parent_device_info_->handle, region.vk_objects.memory, nullptr); + } + } + } + + struct CopiedRegion + { + CopiedRegion() = delete; + CopiedRegion(const VkBufferImageCopy& r) : region(r) {} + + VkBufferImageCopy region; + CopiedBuffer vk_objects; + }; + + TransferedImageInfo src_image; + format::HandleId dst_buffer; + + std::vector regions; + }; + + // CmdBlitImage + struct BlitImage : TransferParamsBase + { + BlitImage() = delete; + + BlitImage(TransferCommandTypes t, + bool hb, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + const VulkanImageInfo* si, + VkImageLayout sl, + const VulkanImageInfo* di, + VkImageLayout dl, + VkFilter f) : + TransferParamsBase(t, hb, dt, pdi), + src_image(si->capture_id, si->format, si->extent, sl), + dst_image(di->capture_id, di->format, di->extent, dl), copied_image(di), filter(f) + {} + + ~BlitImage() + { + if (copied_image.image != VK_NULL_HANDLE) + { + device_table_.DestroyImage(parent_device_info_->handle, copied_image.image, nullptr); + } + + if (copied_image.memory != VK_NULL_HANDLE) + { + device_table_.FreeMemory(parent_device_info_->handle, copied_image.memory, nullptr); + } + } + + TransferedImageInfo src_image; + TransferedImageInfo dst_image; + + VkFilter filter; + + // We create an image with the same properties as the destination image. + // Then we do the same copy regions to the new image + CopiedImage copied_image; + + struct CopyRegion + { + CopyRegion() = delete; + + CopyRegion(const VkImageBlit& r) : region(r) {} + VkImageBlit region; + }; + + std::vector regions; + }; + + struct CopiedAccelerationStructure + { + CopiedAccelerationStructure() = delete; + + CopiedAccelerationStructure(const graphics::VulkanDeviceTable& dt, + const CommonObjectInfoTable& oit, + const VulkanPerDeviceAddressTrackers& at, + const VulkanAccelerationStructureKHRInfo* asi) : + as_context(&as_info, dt, oit, at), + as(VK_NULL_HANDLE), buffer(VK_NULL_HANDLE), memory(VK_NULL_HANDLE) + { + // Clone information stored in the destination as info. Later this will need to be updated with + // the new objects + GFXRECON_ASSERT(asi != nullptr); + as_info = *asi; + } + + // Cloned AS and backing memory + VkAccelerationStructureKHR as; + VkBuffer buffer; + VkDeviceMemory memory; + VulkanAccelerationStructureKHRInfo as_info; + + // Cloned build input buffers + AccelerationStructureDumpResourcesContext as_context; + }; + + // CmdBuildAccelerationStructuresKHR + struct BuildAccelerationStructure : TransferParamsBase + { + BuildAccelerationStructure(TransferCommandTypes t, + bool hb, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi) : + TransferParamsBase(t, hb, dt, pdi) + {} + + ~BuildAccelerationStructure() + { + for (const auto& build_info : build_infos) + { + if (build_info.vk_objects.as != VK_NULL_HANDLE) + { + device_table_.DestroyAccelerationStructureKHR( + parent_device_info_->handle, build_info.vk_objects.as, nullptr); + } + + if (build_info.vk_objects.buffer != VK_NULL_HANDLE) + { + device_table_.DestroyBuffer(parent_device_info_->handle, build_info.vk_objects.buffer, nullptr); + } + + if (build_info.vk_objects.memory != VK_NULL_HANDLE) + { + device_table_.FreeMemory(parent_device_info_->handle, build_info.vk_objects.memory, nullptr); + } + } + } + + struct BuildInfo + { + BuildInfo() = delete; + + BuildInfo(const VulkanAccelerationStructureKHRInfo* s, + const VulkanAccelerationStructureKHRInfo* d, + VkBuildAccelerationStructureModeKHR m, + const graphics::VulkanDeviceTable& dt, + const CommonObjectInfoTable& oit, + const VulkanPerDeviceAddressTrackers& at) : + src_as(s != nullptr ? s->capture_id : format::kNullHandleId), + dst_as(d->capture_id), mode(m), vk_objects(dt, oit, at, d) + {} + + format::HandleId src_as; + format::HandleId dst_as; + VkBuildAccelerationStructureModeKHR mode; + + CopiedAccelerationStructure vk_objects; + }; + + std::vector build_infos; + }; + + // CmdCopyAccelerationStructureKHR + struct CopyAccelerationStructure : TransferParamsBase + { + CopyAccelerationStructure() = delete; + + CopyAccelerationStructure(TransferCommandTypes t, + bool hb, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + format::HandleId s, + const VulkanAccelerationStructureKHRInfo* d, + VkCopyAccelerationStructureModeKHR m, + const CommonObjectInfoTable& oit, + const VulkanPerDeviceAddressTrackers& at) : + TransferParamsBase(t, hb, dt, pdi), + src_as(s), dst_as(d->capture_id), mode(m), vk_objects(dt, oit, at, d) + {} + + ~CopyAccelerationStructure() + { + if (vk_objects.as != VK_NULL_HANDLE) + { + device_table_.DestroyAccelerationStructureKHR(parent_device_info_->handle, vk_objects.as, nullptr); + } + + if (vk_objects.buffer != VK_NULL_HANDLE) + { + device_table_.DestroyBuffer(parent_device_info_->handle, vk_objects.buffer, nullptr); + } + + if (vk_objects.memory != VK_NULL_HANDLE) + { + device_table_.FreeMemory(parent_device_info_->handle, vk_objects.memory, nullptr); + } + } + + format::HandleId src_as; + format::HandleId dst_as; + VkCopyAccelerationStructureModeKHR mode; + CopiedAccelerationStructure vk_objects; + }; + + // TransferParams constructors, one for each transfer command + TransferParams() = delete; + + // kInitBufferCommand + TransferParams(format::HandleId b, + const uint8_t* d_p, + uint64_t size, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + TransferCommandTypes t) : + params(std::make_unique(t, false, dt, pdi, b, d_p, size)) + { + GFXRECON_ASSERT(t == TransferCommandTypes::kCmdInitBuffer); + } + + // kInitImageCommand + TransferParams(const VulkanImageInfo* img_info, + VkImageAspectFlagBits a, + VkImageLayout il, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + TransferCommandTypes t) : + params(std::make_unique(t, false, dt, pdi, img_info, a, il)) + { + GFXRECON_ASSERT(t == TransferCommandTypes::kCmdInitImage); + } + + // CmdCopyBuffer + TransferParams(format::HandleId s, + format::HandleId d, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + bool bc, + TransferCommandTypes t) : + params(std::make_unique(t, bc, dt, pdi, s, d)) + { + GFXRECON_ASSERT(t == TransferCommandTypes::kCmdCopyBuffer); + + if (bc) + { + before_params = std::make_unique(t, bc, dt, pdi, s, d); + } + } + + // CmdCopyBufferToImage + TransferParams(format::HandleId sb, + const VulkanImageInfo* ii, + VkImageLayout dil, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + bool bc, + TransferCommandTypes t) : + params(std::make_unique(t, bc, dt, pdi, sb, dil, ii)) + { + GFXRECON_ASSERT(t == TransferCommandTypes::kCmdCopyBufferToImage); + + if (bc) + { + before_params = std::make_unique(t, bc, dt, pdi, sb, dil, ii); + } + } + + // CmdCopyImage + TransferParams(const VulkanImageInfo* si, + VkImageLayout sl, + const VulkanImageInfo* di, + VkImageLayout dl, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + bool bc, + TransferCommandTypes t) : + params(std::make_unique(t, bc, dt, pdi, si, sl, di, dl)) + { + GFXRECON_ASSERT(t == TransferCommandTypes::kCmdCopyImage); + + if (bc) + { + before_params = std::make_unique(t, bc, dt, pdi, si, sl, di, dl); + } + } + + // CmdCopyImageToBuffer + TransferParams(const VulkanImageInfo* si, + VkImageLayout sl, + format::HandleId d, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + bool bc, + TransferCommandTypes t) : + params(std::make_unique(t, bc, dt, pdi, si, sl, d)) + { + GFXRECON_ASSERT(t == TransferCommandTypes::kCmdCopyImageToBuffer); + + if (bc) + { + before_params = std::make_unique(t, bc, dt, pdi, si, sl, d); + } + } + + // CmdBlitImage + TransferParams(const VulkanImageInfo* si, + VkImageLayout sl, + const VulkanImageInfo* di, + VkImageLayout dl, + VkFilter f, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + bool bc, + TransferCommandTypes t) : + params(std::make_unique(t, bc, dt, pdi, si, sl, di, dl, f)) + { + GFXRECON_ASSERT(t == TransferCommandTypes::kCmdBlitImage); + + if (bc) + { + before_params = std::make_unique(t, bc, dt, pdi, si, sl, di, dl, f); + } + } + + // CmdBuildAccelerationStructuresKHR + TransferParams(const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + bool bc, + TransferCommandTypes t) : + params(std::make_unique(t, bc, dt, pdi)) + { + GFXRECON_ASSERT(t == TransferCommandTypes::kCmdBuildAccelerationStructures); + + if (bc) + { + before_params = std::make_unique(t, bc, dt, pdi); + } + } + + // CmdCopyAccelerationStructureKHR + TransferParams(format::HandleId s, + const VulkanAccelerationStructureKHRInfo* d, + VkCopyAccelerationStructureModeKHR m, + const graphics::VulkanDeviceTable& dt, + const VulkanDeviceInfo* pdi, + const CommonObjectInfoTable& oit, + const VulkanPerDeviceAddressTrackers& at, + bool bc, + TransferCommandTypes t) : + params(std::make_unique(t, bc, dt, pdi, s, d, m, oit, at)) + { + GFXRECON_ASSERT(t == TransferCommandTypes::kCmdCopyAccelerationStructure); + + if (bc) + { + before_params = std::make_unique(t, bc, dt, pdi, s, d, m, oit, at); + } + } + + std::unique_ptr params; + std::unique_ptr before_params; + }; + + private: + void GetDispatchTables(format::HandleId device_id); + + std::map transfer_params_; + + CommandIndices transfer_indices_; + CommonObjectInfoTable& object_info_table_; + const graphics::InstanceDispatchTablesMap& instance_tables_; + const graphics::DeviceDispatchTablesMap& device_tables_; + const VulkanReplayOptions& options_; + VulkanDumpResourcesDelegate& delegate_; + const util::Compressor* compressor_; + const VkPhysicalDeviceMemoryProperties* replay_device_phys_mem_props_; + const VulkanPerDeviceAddressTrackers& address_trackers_; + const DumpResourcesAccelerationStructuresContext& acceleration_structures_context_; + + const graphics::VulkanInstanceTable* instance_table_; + const graphics::VulkanDeviceTable* device_table_; + const VulkanDeviceInfo* device_info_; +}; + +GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // GFXRECON_GENERATED_VULKAN_REPLAY_DUMP_RESOURCES_TRANSFER_H diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_replay_options.h b/third_party/gfxreconstruct/framework/decode/vulkan_replay_options.h index 61f5ed836..5c35a1d1c 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_replay_options.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_replay_options.h @@ -1,6 +1,6 @@ /* ** Copyright (c) 2019-2020 Valve Corporation -** Copyright (c) 2019-2023 LunarG, Inc. +** Copyright (c) 2019-2025 LunarG, Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -27,15 +27,17 @@ #include "decode/replay_options.h" #include "decode/vulkan_resource_allocator.h" +#include "format/format.h" #include "util/defines.h" #include #include #include #include +#include #include -#include #include +#include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) @@ -53,13 +55,46 @@ enum class SkipGetFenceStatus COUNT }; -using Index = uint64_t; -using DrawCallIndices = std::vector; -using RenderPassIndices = std::vector>; -using DispatchIndices = std::vector; -using TraceRaysIndices = std::vector; -using ExecuteCommandIndices = std::vector; -using ExecuteCommands = std::unordered_map; +using Index = uint64_t; +using CommandIndices = std::vector; +using RenderPassIndices = std::vector>; +using ExecuteCommands = std::unordered_map; + +struct DescriptorLocation +{ + bool const operator==(const DescriptorLocation& other) const + { + return set == other.set && binding == other.binding && array_index == other.array_index; + } + + bool const operator<(const DescriptorLocation& other) const + { + if (set == other.set) + { + if (binding == other.binding) + { + return array_index < other.array_index; + } + else + { + return binding < other.binding; + } + } + else + { + return set < other.set; + } + } + + uint32_t set; + uint32_t binding; + uint32_t array_index; +}; + +using CommandImageSubresource = + std::unordered_map>; +using CommandImageSubresourceIterator = CommandImageSubresource::const_iterator; +using BeginCmdBufQueueSubmitPair = std::pair; // Default color attachment index selection for dump resources feature. // This default value essentially defines to dump all attachments. @@ -68,10 +103,12 @@ static constexpr int kUnspecifiedColorAttachment = -1; struct VulkanReplayOptions : public ReplayOptions { bool enable_vulkan{ true }; + bool capture{ false }; bool omit_pipeline_cache_data{ false }; bool use_colorspace_fallback{ false }; bool offscreen_swapchain_frame_boundary{ false }; util::SwapchainOption swapchain_option{ util::SwapchainOption::kVirtual }; + util::PresentModeOption present_mode_option{ util::PresentModeOption::kCapture }; bool virtual_swapchain_skip_blit{ false }; int32_t override_gpu_group_index{ -1 }; int32_t surface_index{ -1 }; @@ -86,12 +123,20 @@ struct VulkanReplayOptions : public ReplayOptions VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT }; // Dumping resources related configurable replay options - std::vector BeginCommandBuffer_Indices; - std::vector Draw_Indices; + std::vector BeginCommandBufferQueueSubmit_Indices; + std::vector RenderPass_Indices; - std::vector Dispatch_Indices; - std::vector TraceRays_Indices; - std::vector QueueSubmit_Indices; + std::vector Draw_Indices; + CommandImageSubresource DrawSubresources; + + std::vector Dispatch_Indices; + CommandImageSubresource DispatchSubresources; + + std::vector TraceRays_Indices; + CommandImageSubresource TraceRaysSubresources; + + std::vector Transfer_Indices; + CommandImageSubresource TransferSubresources; // ExecuteCommands block index : vector or BeginCommandBuffer indices of secondary cbs. std::vector ExecuteCommands_Indices; @@ -106,11 +151,14 @@ struct VulkanReplayOptions : public ReplayOptions float dump_resources_scale{ 1.0f }; bool dump_resources_dump_vertex_index_buffer{ false }; bool dump_resources_json_per_command{ false }; - bool dump_resources_dump_immutable_resources{ false }; + bool dump_all_descriptors{ false }; bool dump_resources_dump_all_image_subresources{ false }; bool dump_resources_dump_raw_images{ false }; bool dump_resources_dump_separate_alpha{ false }; bool dump_resources_dump_unused_vertex_bindings{ false }; + bool dump_resources_dump_build_AS_input_buffers{ false }; + + format::CompressionType dump_resources_binary_file_compression_type{ format::CompressionType::kNone }; bool preload_measurement_range{ false }; diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_resource_allocator.h b/third_party/gfxreconstruct/framework/decode/vulkan_resource_allocator.h index 3d6ad1ef7..54143fadb 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_resource_allocator.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_resource_allocator.h @@ -49,50 +49,67 @@ class VulkanResourceAllocator public: struct Functions { - PFN_vkGetPhysicalDeviceProperties get_physical_device_properties{ nullptr }; - PFN_vkGetPhysicalDeviceMemoryProperties get_physical_device_memory_properties{ nullptr }; - PFN_vkGetPhysicalDeviceMemoryProperties2 get_physical_device_memory_properties2{ nullptr }; - PFN_vkAllocateMemory allocate_memory{ nullptr }; - PFN_vkFreeMemory free_memory{ nullptr }; - PFN_vkGetDeviceMemoryCommitment get_device_memory_commitment{ nullptr }; - PFN_vkMapMemory map_memory{ nullptr }; - PFN_vkUnmapMemory unmap_memory{ nullptr }; - PFN_vkFlushMappedMemoryRanges flush_memory_ranges{ nullptr }; - PFN_vkInvalidateMappedMemoryRanges invalidate_memory_ranges{ nullptr }; - PFN_vkCreateBuffer create_buffer{ nullptr }; - PFN_vkDestroyBuffer destroy_buffer{ nullptr }; - PFN_vkGetBufferMemoryRequirements get_buffer_memory_requirements{ nullptr }; - PFN_vkGetBufferMemoryRequirements2 get_buffer_memory_requirements2{ nullptr }; - PFN_vkBindBufferMemory bind_buffer_memory{ nullptr }; - PFN_vkBindBufferMemory2 bind_buffer_memory2{ nullptr }; - PFN_vkCmdCopyBuffer cmd_copy_buffer{ nullptr }; - PFN_vkCreateImage create_image{ nullptr }; - PFN_vkDestroyImage destroy_image{ nullptr }; - PFN_vkCreateVideoSessionKHR create_video_session{ nullptr }; - PFN_vkDestroyVideoSessionKHR destroy_video_session{ nullptr }; - PFN_vkGetImageMemoryRequirements get_image_memory_requirements{ nullptr }; - PFN_vkGetImageMemoryRequirements2 get_image_memory_requirements2{ nullptr }; - PFN_vkGetVideoSessionMemoryRequirementsKHR get_video_session_memory_requirements{ nullptr }; - PFN_vkGetImageSubresourceLayout get_image_subresource_layout{ nullptr }; - PFN_vkBindImageMemory bind_image_memory{ nullptr }; - PFN_vkBindImageMemory2 bind_image_memory2{ nullptr }; - PFN_vkBindVideoSessionMemoryKHR bind_video_session_memory{ nullptr }; - PFN_vkGetInstanceProcAddr get_instance_proc_addr{ nullptr }; - PFN_vkGetDeviceProcAddr get_device_proc_addr{ nullptr }; - PFN_vkGetDeviceQueue get_device_queue{ nullptr }; - PFN_vkCreateCommandPool create_command_pool{ nullptr }; - PFN_vkAllocateCommandBuffers allocate_command_buffers{ nullptr }; - PFN_vkBeginCommandBuffer begin_command_buffer{ nullptr }; - PFN_vkEndCommandBuffer end_command_buffer{ nullptr }; - PFN_vkQueueSubmit queue_submit{ nullptr }; - PFN_vkQueueWaitIdle queue_wait_idle{ nullptr }; - PFN_vkResetCommandBuffer reset_command_buffer{ nullptr }; - PFN_vkCmdCopyBufferToImage cmd_copy_buffer_to_image{ nullptr }; - PFN_vkFreeCommandBuffers free_command_buffers{ nullptr }; - PFN_vkDestroyCommandPool destroy_command_pool{ nullptr }; - PFN_vkGetPhysicalDeviceQueueFamilyProperties get_physical_device_queue_family_properties{ nullptr }; - PFN_vkSetDebugUtilsObjectNameEXT set_debug_utils_object_name{ nullptr }; - PFN_vkSetDebugUtilsObjectTagEXT set_debug_utils_object_tag{ nullptr }; + PFN_vkGetPhysicalDeviceProperties get_physical_device_properties{ nullptr }; + PFN_vkGetPhysicalDeviceMemoryProperties get_physical_device_memory_properties{ nullptr }; + PFN_vkGetPhysicalDeviceMemoryProperties2 get_physical_device_memory_properties2{ nullptr }; + PFN_vkAllocateMemory allocate_memory{ nullptr }; + PFN_vkFreeMemory free_memory{ nullptr }; + PFN_vkGetDeviceMemoryCommitment get_device_memory_commitment{ nullptr }; + PFN_vkMapMemory map_memory{ nullptr }; + PFN_vkMapMemory2 map_memory2{ nullptr }; + PFN_vkUnmapMemory unmap_memory{ nullptr }; + PFN_vkUnmapMemory2 unmap_memory2{ nullptr }; + PFN_vkFlushMappedMemoryRanges flush_memory_ranges{ nullptr }; + PFN_vkInvalidateMappedMemoryRanges invalidate_memory_ranges{ nullptr }; + PFN_vkCreateBuffer create_buffer{ nullptr }; + PFN_vkDestroyBuffer destroy_buffer{ nullptr }; + PFN_vkGetBufferMemoryRequirements get_buffer_memory_requirements{ nullptr }; + PFN_vkGetBufferMemoryRequirements2 get_buffer_memory_requirements2{ nullptr }; + PFN_vkBindBufferMemory bind_buffer_memory{ nullptr }; + PFN_vkBindBufferMemory2 bind_buffer_memory2{ nullptr }; + PFN_vkCmdCopyBuffer cmd_copy_buffer{ nullptr }; + PFN_vkCreateImage create_image{ nullptr }; + PFN_vkDestroyImage destroy_image{ nullptr }; + PFN_vkCreateVideoSessionKHR create_video_session{ nullptr }; + PFN_vkDestroyVideoSessionKHR destroy_video_session{ nullptr }; + PFN_vkGetImageMemoryRequirements get_image_memory_requirements{ nullptr }; + PFN_vkGetImageMemoryRequirements2 get_image_memory_requirements2{ nullptr }; + PFN_vkGetVideoSessionMemoryRequirementsKHR get_video_session_memory_requirements{ nullptr }; + PFN_vkGetImageSubresourceLayout get_image_subresource_layout{ nullptr }; + PFN_vkBindImageMemory bind_image_memory{ nullptr }; + PFN_vkBindImageMemory2 bind_image_memory2{ nullptr }; + PFN_vkBindVideoSessionMemoryKHR bind_video_session_memory{ nullptr }; + PFN_vkGetInstanceProcAddr get_instance_proc_addr{ nullptr }; + PFN_vkGetDeviceProcAddr get_device_proc_addr{ nullptr }; + PFN_vkGetDeviceQueue get_device_queue{ nullptr }; + PFN_vkCreateCommandPool create_command_pool{ nullptr }; + PFN_vkAllocateCommandBuffers allocate_command_buffers{ nullptr }; + PFN_vkBeginCommandBuffer begin_command_buffer{ nullptr }; + PFN_vkEndCommandBuffer end_command_buffer{ nullptr }; + PFN_vkQueueSubmit queue_submit{ nullptr }; + PFN_vkQueueWaitIdle queue_wait_idle{ nullptr }; + PFN_vkResetCommandBuffer reset_command_buffer{ nullptr }; + PFN_vkCmdCopyBufferToImage cmd_copy_buffer_to_image{ nullptr }; + PFN_vkFreeCommandBuffers free_command_buffers{ nullptr }; + PFN_vkDestroyCommandPool destroy_command_pool{ nullptr }; + PFN_vkGetPhysicalDeviceQueueFamilyProperties get_physical_device_queue_family_properties{ nullptr }; + PFN_vkSetDebugUtilsObjectNameEXT set_debug_utils_object_name{ nullptr }; + PFN_vkSetDebugUtilsObjectTagEXT set_debug_utils_object_tag{ nullptr }; + PFN_vkSetDeviceMemoryPriorityEXT set_device_memory_priority{ nullptr }; + PFN_vkGetMemoryRemoteAddressNV get_memory_remote_address_nv{ nullptr }; + PFN_vkCreateAccelerationStructureNV create_acceleration_structure_nv{ nullptr }; + PFN_vkDestroyAccelerationStructureNV destroy_acceleration_structure_nv{ nullptr }; + PFN_vkBindAccelerationStructureMemoryNV bind_acceleration_structure_memory_nv{ nullptr }; + PFN_vkGetAccelerationStructureMemoryRequirementsNV get_acceleration_structure_memory_requirements_nv{ nullptr }; + PFN_vkGetMemoryFdKHR get_memory_fd{ nullptr }; + PFN_vkQueueBindSparse queue_bind_sparse{ nullptr }; + PFN_vkGetDeviceMemoryOpaqueCaptureAddress get_device_memory_opaque_capture_address{ nullptr }; + PFN_vkCreateSemaphore create_semaphore{ nullptr }; + PFN_vkDestroySemaphore destroy_semaphore{ nullptr }; + PFN_vkWaitForFences wait_for_fences{ nullptr }; + PFN_vkGetAndroidHardwareBufferPropertiesANDROID get_android_hardware_buffer_properties{ nullptr }; + PFN_vkCreateFence create_fence{ nullptr }; + PFN_vkDestroyFence destroy_fence{ nullptr }; }; public: @@ -132,11 +149,11 @@ class VulkanResourceAllocator const VkAllocationCallbacks* allocation_callbacks, format::HandleId capture_id, VkVideoSessionKHR* session, - std::vector* allocator_datas) = 0; + ResourceData* allocator_data) = 0; virtual void DestroyVideoSession(VkVideoSessionKHR session, const VkAllocationCallbacks* allocation_callbacks, - std::vector allocator_datas) = 0; + ResourceData allocator_data) = 0; virtual void GetBufferMemoryRequirements(VkBuffer buffer, VkMemoryRequirements* memory_requirements, @@ -163,7 +180,7 @@ class VulkanResourceAllocator virtual VkResult GetVideoSessionMemoryRequirementsKHR(VkVideoSessionKHR video_session, uint32_t* memory_requirements_count, VkVideoSessionMemoryRequirementsKHR* memory_requirements, - std::vector allocator_datas) = 0; + ResourceData allocator_data) = 0; virtual VkResult AllocateMemory(const VkMemoryAllocateInfo* allocate_info, const VkAllocationCallbacks* allocation_callbacks, @@ -204,10 +221,12 @@ class VulkanResourceAllocator const MemoryData* allocator_memory_datas, VkMemoryPropertyFlags* bind_memory_properties) = 0; + // allocator_memory_datas and bind_memory_properties match to bind_infos, but not memoryBindIndex in + // VkBindVideoSessionMemoryInfoKHR. virtual VkResult BindVideoSessionMemory(VkVideoSessionKHR video_session, uint32_t bind_info_count, const VkBindVideoSessionMemoryInfoKHR* bind_infos, - const ResourceData* allocator_session_datas, + const ResourceData allocator_session_data, const MemoryData* allocator_memory_datas, VkMemoryPropertyFlags* bind_memory_properties) = 0; @@ -218,8 +237,12 @@ class VulkanResourceAllocator void** data, MemoryData allocator_data) = 0; + virtual VkResult MapMemory2(const VkMemoryMapInfo* memory_map_info, void** data, MemoryData allocator_data) = 0; + virtual void UnmapMemory(VkDeviceMemory memory, MemoryData allocator_data) = 0; + virtual VkResult UnmapMemory2(const VkMemoryUnmapInfo* memory_unmap_info, MemoryData allocator_data) = 0; + virtual VkResult FlushMappedMemoryRanges(uint32_t memory_range_count, const VkMappedMemoryRange* memory_ranges, const MemoryData* allocator_datas) = 0; @@ -262,9 +285,26 @@ class VulkanResourceAllocator virtual void ReportBindVideoSessionIncompatibility(VkVideoSessionKHR video_session, uint32_t bind_info_count, const VkBindVideoSessionMemoryInfoKHR* bind_infos, - const ResourceData* allocator_resource_datas, + const ResourceData allocator_resource_data, const MemoryData* allocator_memory_datas) = 0; + virtual void + ReportBindAccelerationStructureMemoryNVIncompatibility(uint32_t bind_info_count, + const VkBindAccelerationStructureMemoryInfoNV* bind_infos, + const ResourceData* allocator_acc_datas, + const MemoryData* allocator_memory_datas) = 0; + + virtual void ReportQueueBindSparseIncompatibility(VkQueue queue, + uint32_t bind_info_count, + const VkBindSparseInfo* bind_infos, + VkFence fence, + const ResourceData* allocator_buf_datas, + const MemoryData* allocator_buf_mem_datas, + const ResourceData* allocator_img_op_datas, + const MemoryData* allocator_img_op_mem_datas, + const ResourceData* allocator_img_datas, + const MemoryData* allocator_img_mem_datas) = 0; + // Direct allocation methods allocate memory and create resources without performing memory translation, while using // the replay memory type of the current allocator implementation. // @@ -330,6 +370,53 @@ class VulkanResourceAllocator virtual bool SupportsOpaqueDeviceAddresses() = 0; virtual bool SupportBindVideoSessionMemory() = 0; + + virtual void SetDeviceMemoryPriority(VkDeviceMemory memory, float priority, MemoryData allocator_data) = 0; + + virtual VkResult GetMemoryRemoteAddressNV(const VkMemoryGetRemoteAddressInfoNV* memory_get_remote_address_info, + VkRemoteAddressNV* address, + MemoryData allocator_data) = 0; + + virtual VkResult CreateAccelerationStructureNV(const VkAccelerationStructureCreateInfoNV* create_info, + const VkAllocationCallbacks* allocation_callbacks, + format::HandleId capture_id, + VkAccelerationStructureNV* acc_str, + ResourceData* allocator_data) = 0; + + virtual void DestroyAccelerationStructureNV(VkAccelerationStructureNV acc_str, + const VkAllocationCallbacks* allocation_callbacks, + ResourceData allocator_data) = 0; + + virtual void + GetAccelerationStructureMemoryRequirementsNV(const VkAccelerationStructureMemoryRequirementsInfoNV* info, + VkMemoryRequirements2KHR* memory_requirements, + ResourceData allocator_data) = 0; + + virtual VkResult BindAccelerationStructureMemoryNV(uint32_t bind_info_count, + const VkBindAccelerationStructureMemoryInfoNV* bind_infos, + const ResourceData* allocator_acc_datas, + const MemoryData* allocator_memory_datas, + VkMemoryPropertyFlags* bind_memory_properties) = 0; + + virtual VkResult GetMemoryFd(const VkMemoryGetFdInfoKHR* get_fd_info, int* pFd, MemoryData allocator_data) = 0; + + virtual VkResult QueueBindSparse(VkQueue queue, + uint32_t bind_info_count, + const VkBindSparseInfo* bind_infos, + VkFence fence, + ResourceData* allocator_buf_datas, + const MemoryData* allocator_buf_mem_datas, + VkMemoryPropertyFlags* bind_buf_mem_properties, + ResourceData* allocator_img_op_datas, + const MemoryData* allocator_img_op_mem_datas, + VkMemoryPropertyFlags* bind_img_op_mem_properties, + ResourceData* allocator_img_datas, + const MemoryData* allocator_img_mem_datas, + VkMemoryPropertyFlags* bind_img_mem_properties) = 0; + + virtual uint64_t GetDeviceMemoryOpaqueCaptureAddress(const VkDeviceMemoryOpaqueCaptureAddressInfo* info, + MemoryData allocator_data) = 0; + virtual void ClearStagingResources(){}; }; GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_resource_initializer.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_resource_initializer.cpp index 60c716462..03960976c 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_resource_initializer.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_resource_initializer.cpp @@ -27,6 +27,7 @@ #include "decode/decoder_util.h" #include "graphics/vulkan_util.h" #include "util/platform.h" +#include "util/alignment_utils.h" #include "Vulkan-Utility-Libraries/vk_format_utils.h" @@ -58,7 +59,7 @@ static uint32_t FindBufferOffsetAlignmentForCopyBufferToImage(VkFormat format) } else { - // In all othe cases spec mandates an alignment of the format's block size. + // In all other cases spec mandates an alignment of the format's block size. const VKU_FORMAT_INFO format_info = vkuGetFormatInfo(format); alignment = format_info.block_size; } @@ -67,30 +68,50 @@ static uint32_t FindBufferOffsetAlignmentForCopyBufferToImage(VkFormat format) } VulkanResourceInitializer::VulkanResourceInitializer(const VulkanDeviceInfo* device_info, + VkDeviceSize total_copy_size, VkDeviceSize max_copy_size, + const VkPhysicalDeviceProperties& physical_device_properties, const VkPhysicalDeviceMemoryProperties& memory_properties, bool have_shader_stencil_write, VulkanResourceAllocator* resource_allocator, const graphics::VulkanDeviceTable* device_table) : device_(device_info->handle), staging_memory_(VK_NULL_HANDLE), staging_memory_data_(0), staging_buffer_(VK_NULL_HANDLE), staging_buffer_data_(0), - staging_buffer_mapped_ptr_(nullptr), staging_buffer_offset_(0), draw_sampler_(VK_NULL_HANDLE), - draw_pool_(VK_NULL_HANDLE), draw_set_layout_(VK_NULL_HANDLE), draw_set_(VK_NULL_HANDLE), - max_copy_size_(max_copy_size), have_shader_stencil_write_(have_shader_stencil_write), - resource_allocator_(resource_allocator), device_table_(device_table), device_info_(device_info) + staging_buffer_mapped_ptr_(nullptr), staging_buffer_offset_(0), staging_buffer_size_(0), + draw_sampler_(VK_NULL_HANDLE), draw_pool_(VK_NULL_HANDLE), draw_set_layout_(VK_NULL_HANDLE), + draw_set_(VK_NULL_HANDLE), memory_properties_(memory_properties), + have_shader_stencil_write_(have_shader_stencil_write), resource_allocator_(resource_allocator), + device_table_(device_table), device_info_(device_info) { - assert((device_info != nullptr) && (device_info->handle != VK_NULL_HANDLE) && - (memory_properties.memoryTypeCount > 0) && (memory_properties.memoryHeapCount > 0) && - (resource_allocator != nullptr) && (device_table != nullptr)); - - size_t type_size = memory_properties.memoryTypeCount * sizeof(memory_properties.memoryTypes[0]); - size_t heap_size = memory_properties.memoryHeapCount * sizeof(memory_properties.memoryHeaps[0]); - - memory_properties_.memoryTypeCount = memory_properties.memoryTypeCount; - memory_properties_.memoryHeapCount = memory_properties.memoryHeapCount; + GFXRECON_ASSERT((device_info != nullptr) && (device_info->handle != VK_NULL_HANDLE) && + (memory_properties.memoryTypeCount > 0) && (memory_properties.memoryHeapCount > 0) && + (resource_allocator != nullptr) && (device_table != nullptr)); + + // flushes of staging-buffer need to be aligned to nonCoherentAtomSize + staging_buffer_alignment_ = physical_device_properties.limits.nonCoherentAtomSize; + + memory_properties_ = memory_properties; + + // determine sane size for the staging-buffer, set boundary to max(max_copy, 128Mb) + // set a minimum size, used for captures that do not report 'total_copy_size' (total_copy_size == max_copy_size) + VkDeviceSize staging_buffer_min = std::max(max_copy_size, 32U << 20U); + VkDeviceSize staging_buffer_max = std::max(staging_buffer_min, 128U << 20U); + staging_buffer_size_ = std::clamp(total_copy_size, staging_buffer_min, staging_buffer_max); + staging_buffer_size_ = util::aligned_value(staging_buffer_size_, staging_buffer_alignment_); + + VkFlags staging_mem_flags = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; + auto mem_index = GetMemoryTypeIndex(0xFFFFFFFF, staging_mem_flags); + if (!mem_index || + memory_properties.memoryHeaps[memory_properties.memoryTypes[*mem_index].heapIndex].size < staging_buffer_size_) + { + GFXRECON_LOG_WARNING("%s: no suitable staging-buffer could be created", __func__); + } - util::platform::MemoryCopy(&memory_properties_.memoryTypes, type_size, &memory_properties.memoryTypes, type_size); - util::platform::MemoryCopy(&memory_properties_.memoryHeaps, heap_size, &memory_properties.memoryHeaps, heap_size); + constexpr VkFenceCreateInfo fence_ci = { VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, + nullptr, + static_cast(0) }; + VkResult result = device_table_->CreateFence(device_, &fence_ci, nullptr, &fence_); + GFXRECON_ASSERT(result == VK_SUCCESS); } VulkanResourceInitializer::~VulkanResourceInitializer() @@ -117,6 +138,11 @@ VulkanResourceInitializer::~VulkanResourceInitializer() { device_table_->DestroyDescriptorSetLayout(device_, draw_set_layout_, nullptr); } + + if (fence_ != VK_NULL_HANDLE) + { + device_table_->DestroyFence(device_, fence_, nullptr); + } } VkResult VulkanResourceInitializer::LoadData(VkDeviceSize size, @@ -152,7 +178,7 @@ VkResult VulkanResourceInitializer::InitializeBuffer(VkDeviceSize data_si if (result == VK_SUCCESS) { // No space left in staging buffer - if (staging_buffer_offset_ + data_size > max_copy_size_) + if (staging_buffer_offset_ + data_size > staging_buffer_size_) { FlushStagingBuffer(); result = FlushCommandBuffer(queue_family_index); @@ -181,15 +207,12 @@ VkResult VulkanResourceInitializer::InitializeBuffer(VkDeviceSize data_si offsetted_regions_copy_[i].srcOffset += staging_buffer_offset_; } - if (result == VK_SUCCESS) - { - device_table_->CmdCopyBuffer( - command_buffer, staging_buffer_, buffer, region_count, offsetted_regions_copy_.data()); + device_table_->CmdCopyBuffer( + command_buffer, staging_buffer_, buffer, region_count, offsetted_regions_copy_.data()); - // Advance staging buffer offset - GFXRECON_ASSERT(staging_buffer_offset_ + data_size <= max_copy_size_); - staging_buffer_offset_ = staging_buffer_offset_ + data_size; - } + // Advance staging buffer offset + GFXRECON_ASSERT(staging_buffer_offset_ + data_size <= staging_buffer_size_); + staging_buffer_offset_ = staging_buffer_offset_ + data_size; } } } @@ -264,7 +287,7 @@ VkResult VulkanResourceInitializer::InitializeImage(VkDeviceSize dat // If data does not fit in the remaining portion of the staging buffer flush pending commands and reset // staging buffer offset - if (staging_buffer_offset_ + data_size > max_copy_size_) + if (staging_buffer_offset_ + data_size > staging_buffer_size_) { FlushStagingBuffer(); result = FlushCommandBuffer(queue_family_index); @@ -314,7 +337,7 @@ VkResult VulkanResourceInitializer::InitializeImage(VkDeviceSize dat offsetted_level_copies_.data()); // Advance staging buffer offset - GFXRECON_ASSERT(staging_buffer_offset_ + data_size <= max_copy_size_); + GFXRECON_ASSERT(staging_buffer_offset_ + data_size <= staging_buffer_size_); staging_buffer_offset_ = staging_buffer_offset_ + data_size; } } @@ -902,14 +925,13 @@ VkResult VulkanResourceInitializer::CreateStagingImage(const VkImageCreateInfo* device_table_->GetImageMemoryRequirements(device_, staging_image, &memory_reqs); - uint32_t memory_type_index = - GetMemoryTypeIndex(memory_reqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + auto memory_type_index = GetMemoryTypeIndex(memory_reqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); - assert(memory_type_index != std::numeric_limits::max()); + GFXRECON_ASSERT(memory_type_index); VkMemoryAllocateInfo alloc_info = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO }; alloc_info.pNext = nullptr; - alloc_info.memoryTypeIndex = memory_type_index; + alloc_info.memoryTypeIndex = *memory_type_index; alloc_info.allocationSize = memory_reqs.size; result = resource_allocator_->AllocateMemoryDirect(&alloc_info, nullptr, &staging_memory, &staging_memory_data); @@ -1002,7 +1024,11 @@ VkResult VulkanResourceInitializer::AcquireStagingBuffer(VkDeviceSize size) { VkResult result = VK_SUCCESS; - if ((staging_buffer_ == VK_NULL_HANDLE) || (size > max_copy_size_)) + // increase size if necessary, but we expect this is not necessary + GFXRECON_ASSERT(size <= staging_buffer_size_); + size = std::max(util::aligned_value(size, staging_buffer_alignment_), staging_buffer_size_); + + if (staging_buffer_ == VK_NULL_HANDLE || size > staging_buffer_size_) { if (staging_buffer_ != VK_NULL_HANDLE) { @@ -1013,7 +1039,7 @@ VkResult VulkanResourceInitializer::AcquireStagingBuffer(VkDeviceSize size) VkBufferCreateInfo create_info = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; create_info.pNext = nullptr; create_info.flags = 0; - create_info.size = std::max(size, max_copy_size_); + create_info.size = std::max(size, staging_buffer_size_); create_info.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; create_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; create_info.queueFamilyIndexCount = 0; @@ -1027,15 +1053,15 @@ VkResult VulkanResourceInitializer::AcquireStagingBuffer(VkDeviceSize size) VkMemoryRequirements memory_requirements; device_table_->GetBufferMemoryRequirements(device_, staging_buffer_, &memory_requirements); - uint32_t memory_type_index = + auto memory_type_index = GetMemoryTypeIndex(memory_requirements.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT); - assert(memory_type_index != std::numeric_limits::max()); + GFXRECON_ASSERT(memory_type_index); VkMemoryAllocateInfo alloc_info = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO }; alloc_info.pNext = nullptr; alloc_info.allocationSize = memory_requirements.size; - alloc_info.memoryTypeIndex = memory_type_index; + alloc_info.memoryTypeIndex = *memory_type_index; // Allocate the memory for the buffer. result = resource_allocator_->AllocateMemoryDirect( @@ -1050,11 +1076,14 @@ VkResult VulkanResourceInitializer::AcquireStagingBuffer(VkDeviceSize size) if (result == VK_SUCCESS) { - max_copy_size_ = size; + staging_buffer_size_ = size; // Map staging buffer - result = resource_allocator_->MapResourceMemoryDirect( - max_copy_size_, 0, reinterpret_cast(&staging_buffer_mapped_ptr_), staging_buffer_data_); + result = + resource_allocator_->MapResourceMemoryDirect(staging_buffer_size_, + 0, + reinterpret_cast(&staging_buffer_mapped_ptr_), + staging_buffer_data_); } else { @@ -1067,7 +1096,6 @@ VkResult VulkanResourceInitializer::AcquireStagingBuffer(VkDeviceSize size) } } } - return result; } @@ -1169,13 +1197,25 @@ VkResult VulkanResourceInitializer::ExecuteCommandBuffer(VkQueue queue, VkComman submit_info.signalSemaphoreCount = 0; submit_info.pSignalSemaphores = nullptr; - VkResult result = device_table_->QueueSubmit(queue, 1, &submit_info, VK_NULL_HANDLE); + VkResult result = device_table_->QueueSubmit(queue, 1, &submit_info, fence_); + if (result != VK_SUCCESS) + { + return result; + } - if (result == VK_SUCCESS) + // keep track of queue-submits for introspection and profiling + num_queue_submits_++; + + // Wait a sensible amount of time (10 seconds) to avoid hanging in case a prior + // operation caused the GPU to hang or crash. + result = device_table_->WaitForFences(device_, 1, &fence_, VK_TRUE, 10000000000); + if (result != VK_SUCCESS) { - result = device_table_->QueueWaitIdle(queue); + return result; } + // reset to unsignaled state + result = device_table_->ResetFences(device_, 1, &fence_); return result; } @@ -1206,9 +1246,10 @@ VkImageAspectFlags VulkanResourceInitializer::GetImageTransitionAspect(VkFormat return transition_aspect; } -uint32_t VulkanResourceInitializer::GetMemoryTypeIndex(uint32_t type_bits, VkMemoryPropertyFlags property_flags) +std::optional VulkanResourceInitializer::GetMemoryTypeIndex(uint32_t type_bits, + VkMemoryPropertyFlags property_flags) const { - uint32_t memory_type_index = std::numeric_limits::max(); + std::optional memory_type_index; for (uint32_t i = 0; i < memory_properties_.memoryTypeCount; ++i) { @@ -1219,7 +1260,6 @@ uint32_t VulkanResourceInitializer::GetMemoryTypeIndex(uint32_t type_bits, VkMem break; } } - return memory_type_index; } @@ -1505,11 +1545,8 @@ VkResult VulkanResourceInitializer::FlushCommandBuffer(uint32_t queue_family_ind { device_table_->EndCommandBuffer(iter->second.command_buffer); - result = ExecuteCommandBuffer(iter->second.queue, iter->second.command_buffer); - if (result == VK_SUCCESS) - { - iter->second.recording = false; - } + result = ExecuteCommandBuffer(iter->second.queue, iter->second.command_buffer); + iter->second.recording = false; } return result; @@ -1544,7 +1581,8 @@ void VulkanResourceInitializer::FlushStagingBuffer() memory_range.pNext = nullptr; memory_range.memory = staging_memory_; memory_range.offset = 0; - memory_range.size = staging_buffer_offset_; + memory_range.size = std::min( + staging_buffer_size_, util::aligned_value(staging_buffer_offset_, staging_buffer_alignment_)); resource_allocator_->FlushMappedMemoryRangesDirect(1, &memory_range, &staging_memory_data_); staging_buffer_offset_ = 0; diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_resource_initializer.h b/third_party/gfxreconstruct/framework/decode/vulkan_resource_initializer.h index fa1d16394..37eec44e5 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_resource_initializer.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_resource_initializer.h @@ -31,6 +31,7 @@ #include #include +#include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) @@ -41,7 +42,9 @@ class VulkanResourceInitializer { public: VulkanResourceInitializer(const VulkanDeviceInfo* device_info, + VkDeviceSize total_copy_size, VkDeviceSize max_copy_size, + const VkPhysicalDeviceProperties& physical_device_properties, const VkPhysicalDeviceMemoryProperties& memory_properties, bool have_shader_stencil_write, VulkanResourceAllocator* resource_allocator, @@ -84,9 +87,11 @@ class VulkanResourceInitializer uint32_t layer_count, uint32_t level_count); - private: VkResult GetCommandExecObjects(uint32_t queue_family_index, VkCommandBuffer* command_buffer); + VkResult BeginCommandBuffer(uint32_t queue_family_index, VkCommandBuffer* command_buffer_p = nullptr); + + private: VkResult GetDrawDescriptorObjects(VkSampler* sampler, VkDescriptorSetLayout* set_layout, VkDescriptorSet* set); VkResult CreateDrawObjects(VkFormat format, @@ -128,14 +133,12 @@ class VulkanResourceInitializer void UpdateDrawDescriptorSet(VkDescriptorSet set, VkImageView view, VkSampler sampler); - VkResult BeginCommandBuffer(uint32_t queue_family_index, VkCommandBuffer* command_buffer_p = nullptr); - VkResult ExecuteCommandBuffer(VkQueue queue, VkCommandBuffer command_buffer); VkImageAspectFlags GetImageTransitionAspect(VkFormat format, VkImageAspectFlagBits aspect, VkImageLayout* old_layout); - uint32_t GetMemoryTypeIndex(uint32_t type_bits, VkMemoryPropertyFlags property_flags); + std::optional GetMemoryTypeIndex(uint32_t type_bits, VkMemoryPropertyFlags property_flags) const; VkResult BufferToImageCopy(uint32_t queue_family_index, VkBuffer source, @@ -168,7 +171,6 @@ class VulkanResourceInitializer VkResult FlushRemainingResourcesInit(); - private: struct CommandExecObjects { VkQueue queue; @@ -180,7 +182,6 @@ class VulkanResourceInitializer // Map queue family index to command pool, command buffer, and queue objects for command processing. typedef std::unordered_map CommandExecObjectMap; - private: VkDevice device_; CommandExecObjectMap command_exec_objects_; VkDeviceMemory staging_memory_; @@ -188,13 +189,16 @@ class VulkanResourceInitializer VkBuffer staging_buffer_; VulkanResourceAllocator::ResourceData staging_buffer_data_; size_t staging_buffer_offset_; + size_t staging_buffer_size_; + size_t staging_buffer_alignment_; uint8_t* staging_buffer_mapped_ptr_; VkSampler draw_sampler_; VkDescriptorPool draw_pool_; VkDescriptorSetLayout draw_set_layout_; VkDescriptorSet draw_set_; - VkDeviceSize max_copy_size_; - VkPhysicalDeviceMemoryProperties memory_properties_; + VkFence fence_ = VK_NULL_HANDLE; + uint32_t num_queue_submits_ = 0; + VkPhysicalDeviceMemoryProperties memory_properties_{}; bool have_shader_stencil_write_; VulkanResourceAllocator* resource_allocator_; const graphics::VulkanDeviceTable* device_table_; diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_resource_tracking_consumer.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_resource_tracking_consumer.cpp index e13afd2e4..f7755149a 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_resource_tracking_consumer.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_resource_tracking_consumer.cpp @@ -813,14 +813,12 @@ void VulkanResourceTrackingConsumer::CalculateReplayBindingOffsetAndMemoryAlloca // during trace and update the replay binding offset and then memory allocation size // accordingly. - VkDeviceSize replay_bind_offset = (*resources)[0]->GetTraceBindOffset(); - // loop through the bound resources and update replay resource binding offset // based on the memory alignment requirement and update memory allocation size for (size_t i = 0; i < (*resources).size(); i++) { // assign replay bind offset to be the same as trace offset first - replay_bind_offset = (*resources)[i]->GetTraceBindOffset(); + VkDeviceSize replay_bind_offset = (*resources)[i]->GetTraceBindOffset(); // make sure the assigned replay bind offset have the same alignment count as trace bind offset // if trace alignment number is valid diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_stats_consumer.h b/third_party/gfxreconstruct/framework/decode/vulkan_stats_consumer.h index 1a1caf9ac..29dbca080 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_stats_consumer.h +++ b/third_party/gfxreconstruct/framework/decode/vulkan_stats_consumer.h @@ -40,6 +40,8 @@ #pragma GCC diagnostic ignored "-Wcpp" #endif +// avoid compilation issues with c++20 / 32bit +#define VULKAN_HPP_NO_SPACESHIP_OPERATOR #include "vulkan/vulkan_hash.hpp" #include "vulkan/vulkan_structs.hpp" diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_swapchain.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_swapchain.cpp index a04cb5ead..132ee146d 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_swapchain.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_swapchain.cpp @@ -79,20 +79,32 @@ VkResult VulkanSwapchain::CreateSurface(VkResult ori { // Create a window for our surface. assert(application_); - auto wsi_context = application_ ? application_->GetWsiContext(wsi_extension, true) : nullptr; - assert(wsi_context); - auto window_factory = wsi_context ? wsi_context->GetWindowFactory() : nullptr; - assert(window_factory); + auto* wsi_context = application_->GetWsiContext(wsi_extension, true); + + if (wsi_context == nullptr) + { + GFXRECON_LOG_FATAL("Failed to create wsi context. Replay cannot continue."); + return VK_ERROR_UNKNOWN; + } + + auto* window_factory = wsi_context->GetWindowFactory(); + + if (window_factory == nullptr) + { + GFXRECON_LOG_FATAL("%s window factory creation failed. Replay cannot continue.", wsi_context->GetWsiName()); + return VK_ERROR_UNKNOWN; + } // By default, the created window will be automatically in full screen mode, and its location will be set to 0,0 // if the requested size exceeds or equals the current screen size. If the user specifies "--fw" or "--fwo" this // behavior will change, and replay will instead render in windowed mode. - auto window = window_factory ? window_factory->Create(xpos, ypos, width, height, force_windowed) : nullptr; + auto* window = window_factory->Create(xpos, ypos, width, height, force_windowed); if (window == nullptr) { // Failure to create a window is a fatal error. - GFXRECON_LOG_FATAL("Failed to create a window for use with surface creation. Replay cannot continue."); + GFXRECON_LOG_FATAL("Failed to create %s window for use with surface creation. Replay cannot continue.", + wsi_context->GetWsiName()); return VK_ERROR_UNKNOWN; } diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_virtual_swapchain.cpp b/third_party/gfxreconstruct/framework/decode/vulkan_virtual_swapchain.cpp index c95ad6620..defa8bdc3 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_virtual_swapchain.cpp +++ b/third_party/gfxreconstruct/framework/decode/vulkan_virtual_swapchain.cpp @@ -52,15 +52,16 @@ VkResult VulkanVirtualSwapchain::CreateSwapchainKHR(VkResult HandlePointerDecoder* swapchain, const graphics::VulkanDeviceTable* device_table) { - VkDevice device = VK_NULL_HANDLE; + VkDevice device = VK_NULL_HANDLE; + VkPhysicalDevice physical_device = VK_NULL_HANDLE; VkSurfaceCapabilitiesKHR surfCapabilities{}; if (device_info != nullptr) { device = device_info->handle; + physical_device = device_info->parent; } - device_table_ = device_table; - VkPhysicalDevice physical_device = device_info->parent; + device_table_ = device_table; VkSwapchainCreateInfoKHR modified_create_info = *create_info; modified_create_info.imageUsage = @@ -217,12 +218,13 @@ VkResult VulkanVirtualSwapchain::CreateSwapchainResourceData(const VulkanDeviceI { // If we're past the point of enabled queues, then stop looking because we really can't enable // a queue that isn't flagged during device creation. - if (queue_family_index >= static_cast(device_info->queue_family_index_enabled.size())) + if (queue_family_index >= + static_cast(device_info->enabled_queue_family_flags.queue_family_index_enabled.size())) { break; } - if (!device_info->queue_family_index_enabled[queue_family_index]) + if (!device_info->enabled_queue_family_flags.queue_family_index_enabled[queue_family_index]) { continue; } @@ -278,8 +280,8 @@ VkResult VulkanVirtualSwapchain::CreateSwapchainResourceData(const VulkanDeviceI // We only want to look at a given queue if it was enabled during device creation time // and if it supports present. Otherwise, we don't need to create a command pool, // command buffers, and semaphores for performing the swapchain copy. - if (device_info->queue_family_index_enabled.size() <= queue_family_index || - !device_info->queue_family_index_enabled[queue_family_index]) + if (device_info->enabled_queue_family_flags.queue_family_index_enabled.size() <= queue_family_index || + !device_info->enabled_queue_family_flags.queue_family_index_enabled[queue_family_index]) { GFXRECON_LOG_DEBUG("Virtual swapchain skipping creating blit info for queue family %d because it " "was not enabled by the device", @@ -521,7 +523,7 @@ VkResult VulkanVirtualSwapchain::CreateSwapchainResourceData(const VulkanDeviceI VK_QUEUE_FAMILY_IGNORED, // dstQueueFamilyIndex VK_NULL_HANDLE, // image VkImageSubresourceRange{ - graphics::GetFormatAspectMask(swapchain_info->format), + graphics::GetFormatAspects(swapchain_info->format), 0, image_create_info.mipLevels, 0, @@ -809,7 +811,7 @@ VkResult VulkanVirtualSwapchain::QueuePresentKHR(VkResult uint32_t capture_image_index = capture_image_indices[i]; uint32_t replay_image_index = present_info->pImageIndices[i]; - auto aspect_mask = graphics::GetFormatAspectMask(swapchain_info->format); + auto aspect_mask = graphics::GetFormatAspects(swapchain_info->format); subresource.aspectMask = aspect_mask; initial_barrier_virtual_image.subresourceRange.aspectMask = aspect_mask; final_barrier_virtual_image.subresourceRange.aspectMask = aspect_mask; diff --git a/third_party/gfxreconstruct/framework/encode/CMakeLists.txt b/third_party/gfxreconstruct/framework/encode/CMakeLists.txt index 604a48850..9943cde68 100644 --- a/third_party/gfxreconstruct/framework/encode/CMakeLists.txt +++ b/third_party/gfxreconstruct/framework/encode/CMakeLists.txt @@ -122,6 +122,9 @@ target_sources(gfxrecon_encode ${CMAKE_CURRENT_LIST_DIR}/scoped_destroy_lock.h ${CMAKE_CURRENT_LIST_DIR}/scoped_destroy_lock.cpp ${CMAKE_CURRENT_LIST_DIR}/struct_pointer_encoder.h + ${CMAKE_CURRENT_LIST_DIR}/vulkan_acceleration_structure_build_state.h + ${CMAKE_CURRENT_LIST_DIR}/vulkan_capture_layer_settings.h + ${CMAKE_CURRENT_LIST_DIR}/vulkan_capture_layer_settings.cpp ${CMAKE_CURRENT_LIST_DIR}/vulkan_capture_manager.h ${CMAKE_CURRENT_LIST_DIR}/vulkan_capture_manager.cpp ${CMAKE_CURRENT_LIST_DIR}/vulkan_capture_common.h @@ -194,7 +197,8 @@ target_link_libraries(gfxrecon_encode gfxrecon_util vulkan_registry OpenXR - platform_specific) + platform_specific + project_version) if (BSD) diff --git a/third_party/gfxreconstruct/framework/encode/api_capture_manager.h b/third_party/gfxreconstruct/framework/encode/api_capture_manager.h index d4ee69c17..a83a70971 100644 --- a/third_party/gfxreconstruct/framework/encode/api_capture_manager.h +++ b/third_party/gfxreconstruct/framework/encode/api_capture_manager.h @@ -1,7 +1,7 @@ /* ** Copyright (c) 2018-2022 Valve Corporation ** Copyright (c) 2018-2025 LunarG, Inc. -** Copyright (c) 2019-2023 Advanced Micro Devices, Inc. All rights reserved. +** Copyright (c) 2019-2025 Advanced Micro Devices, Inc. All rights reserved. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -207,6 +207,7 @@ class ApiCaptureManager bool GetDebugLayerSetting() const { return common_manager_->GetDebugLayerSetting(); } bool GetDebugDeviceLostSetting() const { return common_manager_->GetDebugDeviceLostSetting(); } bool GetDisableDxrSetting() const { return common_manager_->GetDisableDxrSetting(); } + bool GetDisableMetaCommandSetting() const { return common_manager_->GetDisableMetaCommandSetting(); } auto GetAccelStructPaddingSetting() const { return common_manager_->GetAccelStructPaddingSetting(); } void WriteResizeWindowCmd(format::HandleId surface_id, uint32_t width, uint32_t height) @@ -218,9 +219,9 @@ class ApiCaptureManager common_manager_->WriteFillMemoryCmd(api_family_, memory_id, offset, size, data); } - void WriteBeginResourceInitCmd(format::HandleId device_id, uint64_t max_resource_size) + void WriteBeginResourceInitCmd(format::HandleId device_id, uint64_t total_copy_size, uint64_t max_resource_size) { - common_manager_->WriteBeginResourceInitCmd(api_family_, device_id, max_resource_size); + common_manager_->WriteBeginResourceInitCmd(api_family_, device_id, total_copy_size, max_resource_size); } void WriteEndResourceInitCmd(format::HandleId device_id) diff --git a/third_party/gfxreconstruct/framework/encode/capture_manager.cpp b/third_party/gfxreconstruct/framework/encode/capture_manager.cpp index 192622c67..215a855db 100644 --- a/third_party/gfxreconstruct/framework/encode/capture_manager.cpp +++ b/third_party/gfxreconstruct/framework/encode/capture_manager.cpp @@ -1,7 +1,7 @@ /* ** Copyright (c) 2018-2022 Valve Corporation ** Copyright (c) 2018-2025 LunarG, Inc. -** Copyright (c) 2019-2023 Advanced Micro Devices, Inc. All rights reserved. +** Copyright (c) 2019-2025 Advanced Micro Devices, Inc. All rights reserved. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -59,8 +59,38 @@ CommonCaptureManager* CommonCaptureManager::singleton_; std::mutex CommonCaptureManager::instance_lock_; thread_local std::unique_ptr CommonCaptureManager::thread_data_; CommonCaptureManager::ApiCallMutexT CommonCaptureManager::api_call_mutex_; +bool CommonCaptureManager::initialize_log_ = true; +std::atomic CommonCaptureManager::default_unique_id_counter_{ format::kNullHandleId }; +uint64_t CommonCaptureManager::default_unique_id_offset_ = 0; +thread_local bool CommonCaptureManager::force_default_unique_id_ = false; +thread_local std::vector CommonCaptureManager::unique_id_stack_; -std::atomic CommonCaptureManager::unique_id_counter_{ format::kNullHandleId }; +format::HandleId CommonCaptureManager::GetUniqueId() +{ + uint64_t result = 0; + if (force_default_unique_id_ || unique_id_stack_.empty()) + { + result = GetDefaultUniqueId(); + } + else + { + result = unique_id_stack_.back(); + unique_id_stack_.pop_back(); + } + return result; +} + +void CommonCaptureManager::PushUniqueId(const format::HandleId id) +{ + GFXRECON_ASSERT(id != format::kNullHandleId); + + unique_id_stack_.push_back(id); +} + +void CommonCaptureManager::ClearUniqueIds() +{ + unique_id_stack_.clear(); +} CommonCaptureManager::CommonCaptureManager() : force_file_flush_(false), timestamp_filename_(true), @@ -112,29 +142,35 @@ bool CommonCaptureManager::LockedCreateInstance(ApiCaptureManager* api GFXRECON_LOG_WARNING("Failed registering atexit"); } - // Initialize logging to report only errors (to stderr). - util::Log::Settings stderr_only_log_settings; - stderr_only_log_settings.min_severity = util::Log::kErrorSeverity; - stderr_only_log_settings.output_errors_to_stderr = true; - util::Log::Init(stderr_only_log_settings); + if (initialize_log_) + { + // Initialize logging to report only errors (to stderr). + util::Log::Settings stderr_only_log_settings; + stderr_only_log_settings.min_severity = util::Log::kErrorSeverity; + stderr_only_log_settings.output_errors_to_stderr = true; + util::Log::Init(stderr_only_log_settings); + } // NOTE: FIRST Api Instance is used for settings -- actual multiple simulatenous API support will need to // resolve. Get capture settings which can be different per capture manager. default_settings_ = api_capture_singleton->GetDefaultTraceSettings(); capture_settings_ = api_capture_singleton->GetDefaultTraceSettings(); - // Load log settings. - CaptureSettings::LoadLogSettings(&capture_settings_); + if (initialize_log_) + { + // Load log settings. + CaptureSettings::LoadLogSettings(&capture_settings_); - // Reinitialize logging with values retrieved from settings. - util::Log::Release(); - util::Log::Init(capture_settings_.GetLogSettings()); + // Reinitialize logging with values retrieved from settings. + util::Log::Release(); + util::Log::Init(capture_settings_.GetLogSettings()); + } // Load all settings with final logging settings active. - CaptureSettings::LoadSettings(&capture_settings_); + CaptureSettings::LoadSettings(&capture_settings_, initialize_log_); GFXRECON_LOG_INFO("Initializing GFXReconstruct capture layer"); - GFXRECON_LOG_INFO(" GFXReconstruct Version %s", GFXRECON_PROJECT_VERSION_STRING); + GFXRECON_LOG_INFO(" GFXReconstruct Version %s", GetProjectVersionString()); CaptureSettings::TraceSettings trace_settings = capture_settings_.GetTraceSettings(); std::string base_filename = trace_settings.capture_file; @@ -360,6 +396,7 @@ bool CommonCaptureManager::Initialize(format::ApiFamilyId api_ screenshot_indices_ = CalcScreenshotIndices(trace_settings.screenshot_ranges, trace_settings.screenshot_interval); screenshot_prefix_ = PrepScreenshotPrefix(trace_settings.screenshot_dir); disable_dxr_ = trace_settings.disable_dxr; + disable_meta_command_ = trace_settings.disable_meta_command; accel_struct_padding_ = trace_settings.accel_struct_padding; iunknown_wrapping_ = trace_settings.iunknown_wrapping; force_command_serialization_ = trace_settings.force_command_serialization; @@ -598,7 +635,7 @@ bool CommonCaptureManager::IsCaptureModeWrite() const bool CommonCaptureManager::IsCaptureModeDisabled() const { - return (GetCaptureMode() & kModeDisabled) == kModeDisabled; + return GetCaptureMode() == kModeDisabled; } ParameterEncoder* CommonCaptureManager::InitApiCallCapture(format::ApiCallId call_id) @@ -1177,8 +1214,12 @@ std::string CommonCaptureManager::CreateAssetFilename(const std::string& base_fi bool CommonCaptureManager::CreateCaptureFile(format::ApiFamilyId api_family, const std::string& base_filename) { - bool success = true; - capture_filename_ = base_filename; + bool success = true; + + util::filepath::FileInfo info{}; + util::filepath::GetApplicationInfo(info); + + capture_filename_ = util::filepath::ExpandPathVariables(info, base_filename); if (timestamp_filename_) { @@ -1192,8 +1233,6 @@ bool CommonCaptureManager::CreateCaptureFile(format::ApiFamilyId api_family, con GFXRECON_LOG_INFO("Recording graphics API capture to %s", capture_filename_.c_str()); WriteFileHeader(); - gfxrecon::util::filepath::FileInfo info{}; - gfxrecon::util::filepath::GetApplicationInfo(info); WriteExeFileInfo(api_family, info); // Save parameters of the capture in an annotation. @@ -1206,7 +1245,7 @@ bool CommonCaptureManager::CreateCaptureFile(format::ApiFamilyId api_family, con operation_annotation += "\",\n"; operation_annotation += " \""; operation_annotation += gfxrecon::format::kOperationAnnotationGfxreconstructVersion; - operation_annotation += "\": \"" GFXRECON_PROJECT_VERSION_STRING "\",\n"; + operation_annotation += "\": \"" + std::string(GetProjectVersionString()) + "\",\n"; operation_annotation += " \""; operation_annotation += gfxrecon::format::kOperationAnnotationVulkanVersion; operation_annotation += "\": \""; @@ -1350,8 +1389,8 @@ void CommonCaptureManager::WriteFileHeader(util::FileOutputStream* file_stream) format::FileHeader file_header; file_header.fourcc = GFXRECON_FOURCC; - file_header.major_version = 0; - file_header.minor_version = 0; + file_header.major_version = GFXRECON_CURRENT_FILE_MAJOR; + file_header.minor_version = GFXRECON_CURRENT_FILE_MINOR; file_header.num_options = static_cast(option_list.size()); CombineAndWriteToFile({ { &file_header, sizeof(file_header) }, @@ -1517,6 +1556,7 @@ void CommonCaptureManager::WriteFillMemoryCmd( void CommonCaptureManager::WriteBeginResourceInitCmd(format::ApiFamilyId api_family, format::HandleId device_id, + uint64_t total_copy_size, uint64_t max_resource_size) { if ((capture_mode_ & kModeWrite) != kModeWrite) @@ -1526,7 +1566,7 @@ void CommonCaptureManager::WriteBeginResourceInitCmd(format::ApiFamilyId api_fam GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, max_resource_size); - format::BeginResourceInitCommand init_cmd; + format::BeginResourceInitCommand init_cmd = {}; auto thread_data = GetThreadData(); GFXRECON_ASSERT(thread_data != nullptr); @@ -1535,10 +1575,10 @@ void CommonCaptureManager::WriteBeginResourceInitCmd(format::ApiFamilyId api_fam init_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(init_cmd); init_cmd.meta_header.meta_data_id = format::MakeMetaDataId(api_family, format::MetaDataType::kBeginResourceInitCommand); - init_cmd.thread_id = thread_data->thread_id_; - init_cmd.device_id = device_id; - init_cmd.max_resource_size = max_resource_size; - init_cmd.max_copy_size = max_resource_size; + init_cmd.thread_id = thread_data->thread_id_; + init_cmd.device_id = device_id; + init_cmd.total_copy_size = total_copy_size; + init_cmd.max_copy_size = max_resource_size; WriteToFile(&init_cmd, sizeof(init_cmd)); } diff --git a/third_party/gfxreconstruct/framework/encode/capture_manager.h b/third_party/gfxreconstruct/framework/encode/capture_manager.h index 3d5daa20a..a9edf612b 100644 --- a/third_party/gfxreconstruct/framework/encode/capture_manager.h +++ b/third_party/gfxreconstruct/framework/encode/capture_manager.h @@ -1,7 +1,7 @@ /* ** Copyright (c) 2018-2022 Valve Corporation ** Copyright (c) 2018-2025 LunarG, Inc. -** Copyright (c) 2019-2023 Advanced Micro Devices, Inc. All rights reserved. +** Copyright (c) 2019-2025 Advanced Micro Devices, Inc. All rights reserved. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -69,7 +69,20 @@ class CommonCaptureManager public: typedef std::shared_mutex ApiCallMutexT; - static format::HandleId GetUniqueId() { return ++unique_id_counter_; } + private: + static format::HandleId GetDefaultUniqueId() { return ++default_unique_id_counter_ + default_unique_id_offset_; } + + public: + static void SetDefaultUniqueIdOffset(format::HandleId offset) { default_unique_id_offset_ = offset; } + + static format::HandleId GetUniqueId(); + static void PushUniqueId(const format::HandleId id); + static void ClearUniqueIds(); + + // Set to true to force capture manager to generate new, default IDs instead of using the unique ID stack. + static void SetForceDefaultUniqueId(bool force) { force_default_unique_id_ = force; } + + static void SetInitializeLog(bool initialize_log) { initialize_log_ = initialize_log; } using ApiSharedLockT = std::shared_lock; using ApiExclusiveLockT = std::unique_lock; @@ -203,7 +216,10 @@ class CommonCaptureManager bool ShouldTriggerScreenshot(); - util::ScreenshotFormat GetScreenshotFormat() { return screenshot_format_; } + util::ScreenshotFormat GetScreenshotFormat() + { + return screenshot_format_; + } void CheckContinueCaptureForWriteMode(format::ApiFamilyId api_family, uint32_t current_boundary_count, @@ -237,22 +253,49 @@ class CommonCaptureManager /// @param data The value or payload text of the annotation. void WriteAnnotation(const format::AnnotationType type, const char* label, const char* data); - bool GetIUnknownWrappingSetting() const { return iunknown_wrapping_; } - auto GetForceCommandSerialization() const { return force_command_serialization_; } - auto GetQueueZeroOnly() const { return queue_zero_only_; } - auto GetAllowPipelineCompileRequired() const { return allow_pipeline_compile_required_; } + bool GetIUnknownWrappingSetting() const + { + return iunknown_wrapping_; + } + auto GetForceCommandSerialization() const + { + return force_command_serialization_; + } + auto GetQueueZeroOnly() const + { + return queue_zero_only_; + } + auto GetAllowPipelineCompileRequired() const + { + return allow_pipeline_compile_required_; + } - bool IsAnnotated() const { return rv_annotation_info_.rv_annotation; } - uint16_t GetGPUVAMask() const { return rv_annotation_info_.gpuva_mask; } - uint16_t GetDescriptorMask() const { return rv_annotation_info_.descriptor_mask; } - uint64_t GetShaderIDMask() const { return rv_annotation_info_.shaderid_mask; } + bool IsAnnotated() const + { + return rv_annotation_info_.rv_annotation; + } + uint16_t GetGPUVAMask() const + { + return rv_annotation_info_.gpuva_mask; + } + uint16_t GetDescriptorMask() const + { + return rv_annotation_info_.descriptor_mask; + } + uint64_t GetShaderIDMask() const + { + return rv_annotation_info_.shaderid_mask; + } auto GetSkipThreadsWithInvalidData() const { return skip_threads_with_invalid_data_; } - uint64_t GetBlockIndex() { return block_index_ == 0 ? 0 : block_index_ - 1; } + uint64_t GetBlockIndex() + { + return block_index_ == 0 ? 0 : block_index_ - 1; + } static bool CreateInstance(ApiCaptureManager* api_instance_, const std::function& destroyer); template @@ -299,33 +342,115 @@ class CommonCaptureManager const CaptureSettings::TraceSettings& trace_settings); public: - bool GetForceFileFlush() const { return force_file_flush_; } - CaptureSettings::MemoryTrackingMode GetMemoryTrackingMode() const { return memory_tracking_mode_; } - bool GetPageGuardAlignBufferSizes() const { return page_guard_align_buffer_sizes_; } - bool GetPageGuardTrackAhbMemory() const { return page_guard_track_ahb_memory_; } - PageGuardMemoryMode GetPageGuardMemoryMode() const { return page_guard_memory_mode_; } - const std::string& GetTrimKey() const { return trim_key_; } - bool IsTrimEnabled() const { return trim_enabled_; } - uint32_t GetCurrentFrame() const { return current_frame_; } - CaptureMode GetCaptureMode() const { return capture_mode_; } - void SetCaptureMode(CaptureMode new_mode) { capture_mode_ = new_mode; } - bool GetDebugLayerSetting() const { return debug_layer_; } - bool GetDebugDeviceLostSetting() const { return debug_device_lost_; } - bool GetDisableDxrSetting() const { return disable_dxr_; } - auto GetAccelStructPaddingSetting() const { return accel_struct_padding_; } - bool GetForceFifoPresentModeSetting() const { return force_fifo_present_mode_; } - auto GetTrimBoundary() const { return trim_boundary_; } - auto GetTrimDrawCalls() const { return trim_draw_calls_; } - auto GetQueueSubmitCount() const { return queue_submit_count_; } - bool GetUseAssetFile() const { return use_asset_file_; } - bool GetIgnoreFrameBoundaryAndroid() const { return ignore_frame_boundary_android_; } - - util::Compressor* GetCompressor() { return compressor_.get(); } - std::mutex& GetMappedMemoryLock() { return mapped_memory_lock_; } - util::Keyboard& GetKeyboard() { return keyboard_; } - const std::string& GetScreenshotPrefix() const { return screenshot_prefix_; } - util::ScreenshotFormat GetScreenShotFormat() const { return screenshot_format_; } - CommandWriter* GetCommandWriter() { return command_writer_.get(); } + bool GetForceFileFlush() const + { + return force_file_flush_; + } + CaptureSettings::MemoryTrackingMode GetMemoryTrackingMode() const + { + return memory_tracking_mode_; + } + bool GetPageGuardAlignBufferSizes() const + { + return page_guard_align_buffer_sizes_; + } + bool GetPageGuardTrackAhbMemory() const + { + return page_guard_track_ahb_memory_; + } + PageGuardMemoryMode GetPageGuardMemoryMode() const + { + return page_guard_memory_mode_; + } + const std::string& GetTrimKey() const + { + return trim_key_; + } + bool IsTrimEnabled() const + { + return trim_enabled_; + } + uint32_t GetCurrentFrame() const + { + return current_frame_; + } + CaptureMode GetCaptureMode() const + { + return capture_mode_; + } + void SetCaptureMode(CaptureMode new_mode) + { + capture_mode_ = new_mode; + } + bool GetDebugLayerSetting() const + { + return debug_layer_; + } + bool GetDebugDeviceLostSetting() const + { + return debug_device_lost_; + } + bool GetDisableDxrSetting() const + { + return disable_dxr_; + } + bool GetDisableMetaCommandSetting() const + { + return disable_meta_command_; + } + auto GetAccelStructPaddingSetting() const + { + return accel_struct_padding_; + } + bool GetForceFifoPresentModeSetting() const + { + return force_fifo_present_mode_; + } + auto GetTrimBoundary() const + { + return trim_boundary_; + } + auto GetTrimDrawCalls() const + { + return trim_draw_calls_; + } + auto GetQueueSubmitCount() const + { + return queue_submit_count_; + } + bool GetUseAssetFile() const + { + return use_asset_file_; + } + bool GetIgnoreFrameBoundaryAndroid() const + { + return ignore_frame_boundary_android_; + } + + util::Compressor* GetCompressor() + { + return compressor_.get(); + } + std::mutex& GetMappedMemoryLock() + { + return mapped_memory_lock_; + } + util::Keyboard& GetKeyboard() + { + return keyboard_; + } + const std::string& GetScreenshotPrefix() const + { + return screenshot_prefix_; + } + util::ScreenshotFormat GetScreenShotFormat() const + { + return screenshot_format_; + } + CommandWriter* GetCommandWriter() + { + return command_writer_.get(); + } std::string CreateTrimFilename(const std::string& base_filename, const util::UintRange& trim_range); std::string CreateTrimDrawCallsFilename(const std::string& base_filename, @@ -352,8 +477,10 @@ class CommonCaptureManager void WriteFillMemoryCmd( format::ApiFamilyId api_family, format::HandleId memory_id, uint64_t offset, uint64_t size, const void* data); - void - WriteBeginResourceInitCmd(format::ApiFamilyId api_family, format::HandleId device_id, uint64_t max_resource_size); + void WriteBeginResourceInitCmd(format::ApiFamilyId api_family, + format::HandleId device_id, + uint64_t total_copy_size, + uint64_t max_resource_size); void WriteEndResourceInitCmd(format::ApiFamilyId api_family, format::HandleId device_id); @@ -378,9 +505,15 @@ class CommonCaptureManager ++block_index_; } - void IncrementBlockIndex(uint64_t blocks) { block_index_ += blocks; } + void IncrementBlockIndex(uint64_t blocks) + { + block_index_ += blocks; + } - void SetWriteAssets() { write_assets_ = true; } + void SetWriteAssets() + { + write_assets_ = true; + } bool WriteFrameStateFile(); @@ -406,8 +539,12 @@ class CommonCaptureManager static std::mutex instance_lock_; static CommonCaptureManager* singleton_; static thread_local std::unique_ptr thread_data_; - static std::atomic unique_id_counter_; static ApiCallMutexT api_call_mutex_; + static bool initialize_log_; + static std::atomic default_unique_id_counter_; + static uint64_t default_unique_id_offset_; + static thread_local bool force_default_unique_id_; + static thread_local std::vector unique_id_stack_; uint32_t instance_count_ = 0; struct ApiInstanceRecord @@ -457,6 +594,7 @@ class CommonCaptureManager bool screenshots_enabled_; std::vector screenshot_indices_; bool disable_dxr_; + bool disable_meta_command_; uint32_t accel_struct_padding_; bool iunknown_wrapping_; bool force_command_serialization_; diff --git a/third_party/gfxreconstruct/framework/encode/capture_settings.cpp b/third_party/gfxreconstruct/framework/encode/capture_settings.cpp index 42978f18a..900d2a0ee 100644 --- a/third_party/gfxreconstruct/framework/encode/capture_settings.cpp +++ b/third_party/gfxreconstruct/framework/encode/capture_settings.cpp @@ -1,7 +1,7 @@ /* ** Copyright (c) 2018-2020 Valve Corporation ** Copyright (c) 2018-2020 LunarG, Inc. -** Copyright (c) 2019-2023 Advanced Micro Devices, Inc. All rights reserved. +** Copyright (c) 2019-2025 Advanced Micro Devices, Inc. All rights reserved. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -41,121 +41,7 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(encode) -// Available settings (upper and lower-case) // clang-format off -#define CAPTURE_COMPRESSION_TYPE_LOWER "capture_compression_type" -#define CAPTURE_COMPRESSION_TYPE_UPPER "CAPTURE_COMPRESSION_TYPE" -#define CAPTURE_FILE_NAME_LOWER "capture_file" -#define CAPTURE_FILE_NAME_UPPER "CAPTURE_FILE" -#define CAPTURE_FILE_USE_TIMESTAMP_LOWER "capture_file_timestamp" -#define CAPTURE_FILE_USE_TIMESTAMP_UPPER "CAPTURE_FILE_TIMESTAMP" -#define CAPTURE_FILE_FLUSH_LOWER "capture_file_flush" -#define CAPTURE_FILE_FLUSH_UPPER "CAPTURE_FILE_FLUSH" -#define LOG_ALLOW_INDENTS_LOWER "log_allow_indents" -#define LOG_ALLOW_INDENTS_UPPER "LOG_ALLOW_INDENTS" -#define LOG_BREAK_ON_ERROR_LOWER "log_break_on_error" -#define LOG_BREAK_ON_ERROR_UPPER "LOG_BREAK_ON_ERROR" -#define LOG_ERRORS_TO_STDERR_LOWER "log_errors_to_stderr" -#define LOG_ERRORS_TO_STDERR_UPPER "LOG_ERRORS_TO_STDERR" -#define LOG_DETAILED_LOWER "log_detailed" -#define LOG_DETAILED_UPPER "LOG_DETAILED" -#define LOG_FILE_NAME_LOWER "log_file" -#define LOG_FILE_NAME_UPPER "LOG_FILE" -#define LOG_FILE_CREATE_NEW_LOWER "log_file_create_new" -#define LOG_FILE_CREATE_NEW_UPPER "LOG_FILE_CREATE_NEW" -#define LOG_FILE_FLUSH_AFTER_WRITE_LOWER "log_file_flush_after_write" -#define LOG_FILE_FLUSH_AFTER_WRITE_UPPER "LOG_FILE_FLUSH_AFTER_WRITE" -#define LOG_FILE_KEEP_OPEN_LOWER "log_file_keep_open" -#define LOG_FILE_KEEP_OPEN_UPPER "LOG_FILE_KEEP_OPEN" -#define LOG_LEVEL_LOWER "log_level" -#define LOG_LEVEL_UPPER "LOG_LEVEL" -#define LOG_TIMESTAMPS_LOWER "log_timestamps" -#define LOG_TIMESTAMPS_UPPER "LOG_TIMESTAMPS" -#define LOG_OUTPUT_TO_CONSOLE_LOWER "log_output_to_console" -#define LOG_OUTPUT_TO_CONSOLE_UPPER "LOG_OUTPUT_TO_CONSOLE" -#define LOG_OUTPUT_TO_OS_DEBUG_STRING_LOWER "log_output_to_os_debug_string" -#define LOG_OUTPUT_TO_OS_DEBUG_STRING_UPPER "LOG_OUTPUT_TO_OS_DEBUG_STRING" -#define MEMORY_TRACKING_MODE_LOWER "memory_tracking_mode" -#define MEMORY_TRACKING_MODE_UPPER "MEMORY_TRACKING_MODE" -#define SCREENSHOT_DIR_LOWER "screenshot_dir" -#define SCREENSHOT_DIR_UPPER "SCREENSHOT_DIR" -#define SCREENSHOT_FORMAT_LOWER "screenshot_format" -#define SCREENSHOT_FORMAT_UPPER "SCREENSHOT_FORMAT" -#define SCREENSHOT_FRAMES_LOWER "screenshot_frames" -#define SCREENSHOT_FRAMES_UPPER "SCREENSHOT_FRAMES" -#define SCREENSHOT_INTERVAL_LOWER "screenshot_interval" -#define SCREENSHOT_INTERVAL_UPPER "SCREENSHOT_INTERVAL" -#define CAPTURE_FRAMES_LOWER "capture_frames" -#define CAPTURE_FRAMES_UPPER "CAPTURE_FRAMES" -#define CAPTURE_DRAW_CALLS_LOWER "capture_draw_calls" -#define CAPTURE_DRAW_CALLS_UPPER "CAPTURE_DRAW_CALLS" -#define QUIT_AFTER_CAPTURE_FRAMES_LOWER "quit_after_capture_frames" -#define QUIT_AFTER_CAPTURE_FRAMES_UPPER "QUIT_AFTER_CAPTURE_FRAMES" -#define CAPTURE_TRIGGER_LOWER "capture_trigger" -#define CAPTURE_TRIGGER_UPPER "CAPTURE_TRIGGER" -#define CAPTURE_TRIGGER_FRAMES_LOWER "capture_trigger_frames" -#define CAPTURE_TRIGGER_FRAMES_UPPER "CAPTURE_TRIGGER_FRAMES" -#define CAPTURE_ANDROID_TRIGGER_LOWER "capture_android_trigger" -#define CAPTURE_ANDROID_TRIGGER_UPPER "CAPTURE_ANDROID_TRIGGER" -#define CAPTURE_ANDROID_DUMP_ASSETS_LOWER "capture_android_dump_assets" -#define CAPTURE_ANDROID_DUMP_ASSETS_UPPER "CAPTURE_ANDROID_DUMP_ASSETS" -#define CAPTURE_IUNKNOWN_WRAPPING_LOWER "capture_iunknown_wrapping" -#define CAPTURE_IUNKNOWN_WRAPPING_UPPER "CAPTURE_IUNKNOWN_WRAPPING" -#define CAPTURE_QUEUE_SUBMITS_LOWER "capture_queue_submits" -#define CAPTURE_QUEUE_SUBMITS_UPPER "CAPTURE_QUEUE_SUBMITS" -#define CAPTURE_USE_ASSET_FILE_LOWER "capture_use_asset_file" -#define CAPTURE_USE_ASSET_FILE_UPPER "CAPTURE_USE_ASSET_FILE" -#define PAGE_GUARD_COPY_ON_MAP_LOWER "page_guard_copy_on_map" -#define PAGE_GUARD_COPY_ON_MAP_UPPER "PAGE_GUARD_COPY_ON_MAP" -#define PAGE_GUARD_SEPARATE_READ_LOWER "page_guard_separate_read" -#define PAGE_GUARD_SEPARATE_READ_UPPER "PAGE_GUARD_SEPARATE_READ" -#define PAGE_GUARD_PERSISTENT_MEMORY_LOWER "page_guard_persistent_memory" -#define PAGE_GUARD_PERSISTENT_MEMORY_UPPER "PAGE_GUARD_PERSISTENT_MEMORY" -#define PAGE_GUARD_ALIGN_BUFFER_SIZES_LOWER "page_guard_align_buffer_sizes" -#define PAGE_GUARD_ALIGN_BUFFER_SIZES_UPPER "PAGE_GUARD_ALIGN_BUFFER_SIZES" -#define PAGE_GUARD_TRACK_AHB_MEMORY_LOWER "page_guard_track_ahb_memory" -#define PAGE_GUARD_TRACK_AHB_MEMORY_UPPER "PAGE_GUARD_TRACK_AHB_MEMORY" -#define PAGE_GUARD_EXTERNAL_MEMORY_LOWER "page_guard_external_memory" -#define PAGE_GUARD_EXTERNAL_MEMORY_UPPER "PAGE_GUARD_EXTERNAL_MEMORY" -#define PAGE_GUARD_UNBLOCK_SIGSEGV_LOWER "page_guard_unblock_sigsegv" -#define PAGE_GUARD_UNBLOCK_SIGSEGV_UPPER "PAGE_GUARD_UNBLOCK_SIGSEGV" -#define PAGE_GUARD_SIGNAL_HANDLER_WATCHER_LOWER "page_guard_signal_handler_watcher" -#define PAGE_GUARD_SIGNAL_HANDLER_WATCHER_UPPER "PAGE_GUARD_SIGNAL_HANDLER_WATCHER" -#define PAGE_GUARD_SIGNAL_HANDLER_WATCHER_MAX_RESTORES_LOWER "page_guard_signal_handler_watcher_max_restores" -#define PAGE_GUARD_SIGNAL_HANDLER_WATCHER_MAX_RESTORES_UPPER "PAGE_GUARD_SIGNAL_HANDLER_WATCHER_MAX_RESTORES" -#define DEBUG_LAYER_LOWER "debug_layer" -#define DEBUG_LAYER_UPPER "DEBUG_LAYER" -#define DEBUG_DEVICE_LOST_LOWER "debug_device_lost" -#define DEBUG_DEVICE_LOST_UPPER "DEBUG_DEVICE_LOST" -#define DISABLE_DXR_LOWER "disable_dxr" -#define DISABLE_DXR_UPPER "DISABLE_DXR" -#define ACCEL_STRUCT_PADDING_LOWER "accel_struct_padding" -#define ACCEL_STRUCT_PADDING_UPPER "ACCEL_STRUCT_PADDING" -#define FORCE_COMMAND_SERIALIZATION_LOWER "force_command_serialization" -#define FORCE_COMMAND_SERIALIZATION_UPPER "FORCE_COMMAND_SERIALIZATION" -#define QUEUE_ZERO_ONLY_LOWER "queue_zero_only" -#define QUEUE_ZERO_ONLY_UPPER "QUEUE_ZERO_ONLY" -#define ALLOW_PIPELINE_COMPILE_REQUIRED_LOWER "allow_pipeline_compile_required" -#define ALLOW_PIPELINE_COMPILE_REQUIRED_UPPER "ALLOW_PIPELINE_COMPILE_REQUIRED" -#define RV_ANNOTATION_EXPERIMENTAL_LOWER "rv_annotation_experimental" -#define RV_ANNOTATION_EXPERIMENTAL_UPPER "RV_ANNOTATION_EXPERIMENTAL" -#define RV_ANNOTATION_RAND_LOWER "rv_annotation_rand" -#define RV_ANNOTATION_RAND_UPPER "RV_ANNOTATION_RAND" -#define RV_ANNOTATION_GPUVA_LOWER "rv_annotation_gpuva" -#define RV_ANNOTATION_GPUVA_UPPER "RV_ANNOTATION_GPUVA" -#define RV_ANNOTATION_DESCRIPTOR_LOWER "rv_annotation_descriptor" -#define RV_ANNOTATION_DESCRIPTOR_UPPER "RV_ANNOTATION_DESCRIPTOR" -#define FORCE_FIFO_PRESENT_MODE_LOWER "force_fifo_present_mode" -#define FORCE_FIFO_PRESENT_MODE_UPPER "FORCE_FIFO_PRESENT_MODE" -#define IGNORE_FRAME_BOUNDARY_ANDROID_LOWER "ignore_frame_boundary_android" -#define IGNORE_FRAME_BOUNDARY_ANDROID_UPPER "IGNORE_FRAME_BOUNDARY_ANDROID" -#define SKIP_THREADS_WITH_INVALID_DATA_LOWER "skip_threads_with_invalid_data" -#define SKIP_THREADS_WITH_INVALID_DATA_UPPER "SKIP_THREADS_WITH_INVALID_DATA" -#define CAPTURE_ENVIRONMENT_LOWER "capture_environment" -#define CAPTURE_ENVIRONMENT_UPPER "CAPTURE_ENVIRONMENT" -#define CAPTURE_PROCESS_NAME_LOWER "capture_process_name" -#define CAPTURE_PROCESS_NAME_UPPER "CAPTURE_PROCESS_NAME" - #if defined(__ANDROID__) // Android Properties #define GFXRECON_ENV_VAR_PREFIX "debug.gfxrecon." @@ -215,6 +101,7 @@ const char kCaptureQueueSubmitsEnvVar[] = GFXRECON_OPTION_S const char kDebugLayerEnvVar[] = GFXRECON_OPTION_STR(DEBUG_LAYER); const char kDebugDeviceLostEnvVar[] = GFXRECON_OPTION_STR(DEBUG_DEVICE_LOST); const char kDisableDxrEnvVar[] = GFXRECON_OPTION_STR(DISABLE_DXR); +const char kDisableMetaCommandEnvVar[] = GFXRECON_OPTION_STR(DISABLE_METACOMMAND); const char kAccelStructPaddingEnvVar[] = GFXRECON_OPTION_STR(ACCEL_STRUCT_PADDING); const char kForceCommandSerializationEnvVar[] = GFXRECON_OPTION_STR(FORCE_COMMAND_SERIALIZATION); const char kQueueZeroOnlyEnvVar[] = GFXRECON_OPTION_STR(QUEUE_ZERO_ONLY); @@ -279,6 +166,7 @@ const std::string kOptionKeyPageGuardSignalHandlerWatcherMaxRestores = std::stri const std::string kDebugLayer = std::string(kSettingsFilter) + std::string(DEBUG_LAYER_LOWER); const std::string kDebugDeviceLost = std::string(kSettingsFilter) + std::string(DEBUG_DEVICE_LOST_LOWER); const std::string kOptionDisableDxr = std::string(kSettingsFilter) + std::string(DISABLE_DXR_LOWER); +const std::string kOptionDisableMetaCommand = std::string(kSettingsFilter) + std::string(DISABLE_METACOMMAND_LOWER); const std::string kOptionAccelStructPadding = std::string(kSettingsFilter) + std::string(ACCEL_STRUCT_PADDING_LOWER); const std::string kOptionForceCommandSerialization = std::string(kSettingsFilter) + std::string(FORCE_COMMAND_SERIALIZATION_LOWER); const std::string kOptionQueueZeroOnly = std::string(kSettingsFilter) + std::string(QUEUE_ZERO_ONLY_LOWER); @@ -308,15 +196,15 @@ CaptureSettings::CaptureSettings(const TraceSettings& trace_settings) CaptureSettings::~CaptureSettings() {} -void CaptureSettings::LoadSettings(CaptureSettings* settings) +void CaptureSettings::LoadSettings(CaptureSettings* settings, bool load_log_settings) { if (settings != nullptr) { OptionsMap capture_settings; LoadOptionsFile(&capture_settings); - LoadOptionsEnvVar(&capture_settings); - ProcessOptions(&capture_settings, settings); + LoadOptionsEnvVar(&capture_settings, load_log_settings); + ProcessOptions(&capture_settings, settings, load_log_settings); LoadRunTimeEnvVarSettings(settings); @@ -369,7 +257,7 @@ void CaptureSettings::LoadLogSettings(CaptureSettings* settings) OptionsMap capture_settings; LoadOptionsFile(&capture_settings); - LoadOptionsEnvVar(&capture_settings); + LoadOptionsEnvVar(&capture_settings, true); ProcessLogOptions(&capture_settings, settings); } } @@ -388,7 +276,7 @@ void CaptureSettings::LoadSingleOptionEnvVar(OptionsMap* options, } } -void CaptureSettings::LoadOptionsEnvVar(OptionsMap* options) +void CaptureSettings::LoadOptionsEnvVar(OptionsMap* options, bool load_log_settings) { assert(options != nullptr); @@ -399,18 +287,21 @@ void CaptureSettings::LoadOptionsEnvVar(OptionsMap* options) LoadSingleOptionEnvVar(options, kCaptureFileFlushEnvVar, kOptionKeyCaptureFileForceFlush); // Logging environment variables - LoadSingleOptionEnvVar(options, kLogAllowIndentsEnvVar, kOptionKeyLogAllowIndents); - LoadSingleOptionEnvVar(options, kLogBreakOnErrorEnvVar, kOptionKeyLogBreakOnError); - LoadSingleOptionEnvVar(options, kLogDetailedEnvVar, kOptionKeyLogDetailed); - LoadSingleOptionEnvVar(options, kLogErrorsToStderrEnvVar, kOptionKeyLogErrorsToStderr); - LoadSingleOptionEnvVar(options, kLogFileNameEnvVar, kOptionKeyLogFile); - LoadSingleOptionEnvVar(options, kLogFileCreateNewEnvVar, kOptionKeyLogFileCreateNew); - LoadSingleOptionEnvVar(options, kLogFileFlushAfterWriteEnvVar, kOptionKeyLogFileFlushAfterWrite); - LoadSingleOptionEnvVar(options, kLogFileKeepFileOpenEnvVar, kOptionKeyLogFileKeepOpen); - LoadSingleOptionEnvVar(options, kLogLevelEnvVar, kOptionKeyLogLevel); - LoadSingleOptionEnvVar(options, kLogTimestampsEnvVar, kOptionKeyLogTimestamps); - LoadSingleOptionEnvVar(options, kLogOutputToConsoleEnvVar, kOptionKeyLogOutputToConsole); - LoadSingleOptionEnvVar(options, kLogOutputToOsDebugStringEnvVar, kOptionKeyLogOutputToOsDebugString); + if (load_log_settings) + { + LoadSingleOptionEnvVar(options, kLogAllowIndentsEnvVar, kOptionKeyLogAllowIndents); + LoadSingleOptionEnvVar(options, kLogBreakOnErrorEnvVar, kOptionKeyLogBreakOnError); + LoadSingleOptionEnvVar(options, kLogDetailedEnvVar, kOptionKeyLogDetailed); + LoadSingleOptionEnvVar(options, kLogErrorsToStderrEnvVar, kOptionKeyLogErrorsToStderr); + LoadSingleOptionEnvVar(options, kLogFileNameEnvVar, kOptionKeyLogFile); + LoadSingleOptionEnvVar(options, kLogFileCreateNewEnvVar, kOptionKeyLogFileCreateNew); + LoadSingleOptionEnvVar(options, kLogFileFlushAfterWriteEnvVar, kOptionKeyLogFileFlushAfterWrite); + LoadSingleOptionEnvVar(options, kLogFileKeepFileOpenEnvVar, kOptionKeyLogFileKeepOpen); + LoadSingleOptionEnvVar(options, kLogLevelEnvVar, kOptionKeyLogLevel); + LoadSingleOptionEnvVar(options, kLogTimestampsEnvVar, kOptionKeyLogTimestamps); + LoadSingleOptionEnvVar(options, kLogOutputToConsoleEnvVar, kOptionKeyLogOutputToConsole); + LoadSingleOptionEnvVar(options, kLogOutputToOsDebugStringEnvVar, kOptionKeyLogOutputToOsDebugString); + } // Memory environment variables LoadSingleOptionEnvVar(options, kMemoryTrackingModeEnvVar, kOptionKeyMemoryTrackingMode); @@ -448,6 +339,7 @@ void CaptureSettings::LoadOptionsEnvVar(OptionsMap* options) // DirectX environment variables LoadSingleOptionEnvVar(options, kDisableDxrEnvVar, kOptionDisableDxr); + LoadSingleOptionEnvVar(options, kDisableMetaCommandEnvVar, kOptionDisableMetaCommand); LoadSingleOptionEnvVar(options, kAccelStructPaddingEnvVar, kOptionAccelStructPadding); // IUnknown wrapping environment variable @@ -495,7 +387,7 @@ void CaptureSettings::LoadOptionsFile(OptionsMap* options) } } -void CaptureSettings::ProcessOptions(OptionsMap* options, CaptureSettings* settings) +void CaptureSettings::ProcessOptions(OptionsMap* options, CaptureSettings* settings, bool process_log_settings) { assert(settings != nullptr); @@ -639,7 +531,10 @@ void CaptureSettings::ProcessOptions(OptionsMap* options, CaptureSettings* setti settings->trace_settings_.debug_device_lost = ParseBoolString(FindOption(options, kDebugDeviceLost), settings->trace_settings_.debug_device_lost); - ProcessLogOptions(options, settings); + if (process_log_settings) + { + ProcessLogOptions(options, settings); + } // Screenshot options settings->trace_settings_.screenshot_dir = @@ -661,6 +556,8 @@ void CaptureSettings::ProcessOptions(OptionsMap* options, CaptureSettings* setti // DirectX options settings->trace_settings_.disable_dxr = ParseBoolString(FindOption(options, kOptionDisableDxr), settings->trace_settings_.disable_dxr); + settings->trace_settings_.disable_meta_command = + ParseBoolString(FindOption(options, kOptionDisableMetaCommand), settings->trace_settings_.disable_meta_command); settings->trace_settings_.accel_struct_padding = gfxrecon::util::ParseUintString( FindOption(options, kOptionAccelStructPadding), settings->trace_settings_.accel_struct_padding); diff --git a/third_party/gfxreconstruct/framework/encode/capture_settings.h b/third_party/gfxreconstruct/framework/encode/capture_settings.h index 24f90a9fb..8ec5c1f00 100644 --- a/third_party/gfxreconstruct/framework/encode/capture_settings.h +++ b/third_party/gfxreconstruct/framework/encode/capture_settings.h @@ -1,7 +1,7 @@ /* ** Copyright (c) 2018-2019 Valve Corporation ** Copyright (c) 2018-2021 LunarG, Inc. -** Copyright (c) 2019-2023 Advanced Micro Devices, Inc. All rights reserved. +** Copyright (c) 2019-2025 Advanced Micro Devices, Inc. All rights reserved. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -38,6 +38,124 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(encode) +// Available settings (upper and lower-case) +// clang-format off +#define CAPTURE_COMPRESSION_TYPE_LOWER "capture_compression_type" +#define CAPTURE_COMPRESSION_TYPE_UPPER "CAPTURE_COMPRESSION_TYPE" +#define CAPTURE_FILE_NAME_LOWER "capture_file" +#define CAPTURE_FILE_NAME_UPPER "CAPTURE_FILE" +#define CAPTURE_FILE_USE_TIMESTAMP_LOWER "capture_file_timestamp" +#define CAPTURE_FILE_USE_TIMESTAMP_UPPER "CAPTURE_FILE_TIMESTAMP" +#define CAPTURE_FILE_FLUSH_LOWER "capture_file_flush" +#define CAPTURE_FILE_FLUSH_UPPER "CAPTURE_FILE_FLUSH" +#define LOG_ALLOW_INDENTS_LOWER "log_allow_indents" +#define LOG_ALLOW_INDENTS_UPPER "LOG_ALLOW_INDENTS" +#define LOG_BREAK_ON_ERROR_LOWER "log_break_on_error" +#define LOG_BREAK_ON_ERROR_UPPER "LOG_BREAK_ON_ERROR" +#define LOG_ERRORS_TO_STDERR_LOWER "log_errors_to_stderr" +#define LOG_ERRORS_TO_STDERR_UPPER "LOG_ERRORS_TO_STDERR" +#define LOG_DETAILED_LOWER "log_detailed" +#define LOG_DETAILED_UPPER "LOG_DETAILED" +#define LOG_FILE_NAME_LOWER "log_file" +#define LOG_FILE_NAME_UPPER "LOG_FILE" +#define LOG_FILE_CREATE_NEW_LOWER "log_file_create_new" +#define LOG_FILE_CREATE_NEW_UPPER "LOG_FILE_CREATE_NEW" +#define LOG_FILE_FLUSH_AFTER_WRITE_LOWER "log_file_flush_after_write" +#define LOG_FILE_FLUSH_AFTER_WRITE_UPPER "LOG_FILE_FLUSH_AFTER_WRITE" +#define LOG_FILE_KEEP_OPEN_LOWER "log_file_keep_open" +#define LOG_FILE_KEEP_OPEN_UPPER "LOG_FILE_KEEP_OPEN" +#define LOG_LEVEL_LOWER "log_level" +#define LOG_LEVEL_UPPER "LOG_LEVEL" +#define LOG_TIMESTAMPS_LOWER "log_timestamps" +#define LOG_TIMESTAMPS_UPPER "LOG_TIMESTAMPS" +#define LOG_OUTPUT_TO_CONSOLE_LOWER "log_output_to_console" +#define LOG_OUTPUT_TO_CONSOLE_UPPER "LOG_OUTPUT_TO_CONSOLE" +#define LOG_OUTPUT_TO_OS_DEBUG_STRING_LOWER "log_output_to_os_debug_string" +#define LOG_OUTPUT_TO_OS_DEBUG_STRING_UPPER "LOG_OUTPUT_TO_OS_DEBUG_STRING" +#define MEMORY_TRACKING_MODE_LOWER "memory_tracking_mode" +#define MEMORY_TRACKING_MODE_UPPER "MEMORY_TRACKING_MODE" +#define SCREENSHOT_DIR_LOWER "screenshot_dir" +#define SCREENSHOT_DIR_UPPER "SCREENSHOT_DIR" +#define SCREENSHOT_FORMAT_LOWER "screenshot_format" +#define SCREENSHOT_FORMAT_UPPER "SCREENSHOT_FORMAT" +#define SCREENSHOT_FRAMES_LOWER "screenshot_frames" +#define SCREENSHOT_FRAMES_UPPER "SCREENSHOT_FRAMES" +#define SCREENSHOT_INTERVAL_LOWER "screenshot_interval" +#define SCREENSHOT_INTERVAL_UPPER "SCREENSHOT_INTERVAL" +#define CAPTURE_FRAMES_LOWER "capture_frames" +#define CAPTURE_FRAMES_UPPER "CAPTURE_FRAMES" +#define CAPTURE_DRAW_CALLS_LOWER "capture_draw_calls" +#define CAPTURE_DRAW_CALLS_UPPER "CAPTURE_DRAW_CALLS" +#define QUIT_AFTER_CAPTURE_FRAMES_LOWER "quit_after_capture_frames" +#define QUIT_AFTER_CAPTURE_FRAMES_UPPER "QUIT_AFTER_CAPTURE_FRAMES" +#define CAPTURE_TRIGGER_LOWER "capture_trigger" +#define CAPTURE_TRIGGER_UPPER "CAPTURE_TRIGGER" +#define CAPTURE_TRIGGER_FRAMES_LOWER "capture_trigger_frames" +#define CAPTURE_TRIGGER_FRAMES_UPPER "CAPTURE_TRIGGER_FRAMES" +#define CAPTURE_ANDROID_TRIGGER_LOWER "capture_android_trigger" +#define CAPTURE_ANDROID_TRIGGER_UPPER "CAPTURE_ANDROID_TRIGGER" +#define CAPTURE_ANDROID_DUMP_ASSETS_LOWER "capture_android_dump_assets" +#define CAPTURE_ANDROID_DUMP_ASSETS_UPPER "CAPTURE_ANDROID_DUMP_ASSETS" +#define CAPTURE_IUNKNOWN_WRAPPING_LOWER "capture_iunknown_wrapping" +#define CAPTURE_IUNKNOWN_WRAPPING_UPPER "CAPTURE_IUNKNOWN_WRAPPING" +#define CAPTURE_QUEUE_SUBMITS_LOWER "capture_queue_submits" +#define CAPTURE_QUEUE_SUBMITS_UPPER "CAPTURE_QUEUE_SUBMITS" +#define CAPTURE_USE_ASSET_FILE_LOWER "capture_use_asset_file" +#define CAPTURE_USE_ASSET_FILE_UPPER "CAPTURE_USE_ASSET_FILE" +#define PAGE_GUARD_COPY_ON_MAP_LOWER "page_guard_copy_on_map" +#define PAGE_GUARD_COPY_ON_MAP_UPPER "PAGE_GUARD_COPY_ON_MAP" +#define PAGE_GUARD_SEPARATE_READ_LOWER "page_guard_separate_read" +#define PAGE_GUARD_SEPARATE_READ_UPPER "PAGE_GUARD_SEPARATE_READ" +#define PAGE_GUARD_PERSISTENT_MEMORY_LOWER "page_guard_persistent_memory" +#define PAGE_GUARD_PERSISTENT_MEMORY_UPPER "PAGE_GUARD_PERSISTENT_MEMORY" +#define PAGE_GUARD_ALIGN_BUFFER_SIZES_LOWER "page_guard_align_buffer_sizes" +#define PAGE_GUARD_ALIGN_BUFFER_SIZES_UPPER "PAGE_GUARD_ALIGN_BUFFER_SIZES" +#define PAGE_GUARD_TRACK_AHB_MEMORY_LOWER "page_guard_track_ahb_memory" +#define PAGE_GUARD_TRACK_AHB_MEMORY_UPPER "PAGE_GUARD_TRACK_AHB_MEMORY" +#define PAGE_GUARD_EXTERNAL_MEMORY_LOWER "page_guard_external_memory" +#define PAGE_GUARD_EXTERNAL_MEMORY_UPPER "PAGE_GUARD_EXTERNAL_MEMORY" +#define PAGE_GUARD_UNBLOCK_SIGSEGV_LOWER "page_guard_unblock_sigsegv" +#define PAGE_GUARD_UNBLOCK_SIGSEGV_UPPER "PAGE_GUARD_UNBLOCK_SIGSEGV" +#define PAGE_GUARD_SIGNAL_HANDLER_WATCHER_LOWER "page_guard_signal_handler_watcher" +#define PAGE_GUARD_SIGNAL_HANDLER_WATCHER_UPPER "PAGE_GUARD_SIGNAL_HANDLER_WATCHER" +#define PAGE_GUARD_SIGNAL_HANDLER_WATCHER_MAX_RESTORES_LOWER "page_guard_signal_handler_watcher_max_restores" +#define PAGE_GUARD_SIGNAL_HANDLER_WATCHER_MAX_RESTORES_UPPER "PAGE_GUARD_SIGNAL_HANDLER_WATCHER_MAX_RESTORES" +#define DEBUG_LAYER_LOWER "debug_layer" +#define DEBUG_LAYER_UPPER "DEBUG_LAYER" +#define DEBUG_DEVICE_LOST_LOWER "debug_device_lost" +#define DEBUG_DEVICE_LOST_UPPER "DEBUG_DEVICE_LOST" +#define DISABLE_DXR_LOWER "disable_dxr" +#define DISABLE_DXR_UPPER "DISABLE_DXR" +#define DISABLE_METACOMMAND_LOWER "disable_meta_command" +#define DISABLE_METACOMMAND_UPPER "DISABLE_META_COMMAND" +#define ACCEL_STRUCT_PADDING_LOWER "accel_struct_padding" +#define ACCEL_STRUCT_PADDING_UPPER "ACCEL_STRUCT_PADDING" +#define FORCE_COMMAND_SERIALIZATION_LOWER "force_command_serialization" +#define FORCE_COMMAND_SERIALIZATION_UPPER "FORCE_COMMAND_SERIALIZATION" +#define QUEUE_ZERO_ONLY_LOWER "queue_zero_only" +#define QUEUE_ZERO_ONLY_UPPER "QUEUE_ZERO_ONLY" +#define ALLOW_PIPELINE_COMPILE_REQUIRED_LOWER "allow_pipeline_compile_required" +#define ALLOW_PIPELINE_COMPILE_REQUIRED_UPPER "ALLOW_PIPELINE_COMPILE_REQUIRED" +#define RV_ANNOTATION_EXPERIMENTAL_LOWER "rv_annotation_experimental" +#define RV_ANNOTATION_EXPERIMENTAL_UPPER "RV_ANNOTATION_EXPERIMENTAL" +#define RV_ANNOTATION_RAND_LOWER "rv_annotation_rand" +#define RV_ANNOTATION_RAND_UPPER "RV_ANNOTATION_RAND" +#define RV_ANNOTATION_GPUVA_LOWER "rv_annotation_gpuva" +#define RV_ANNOTATION_GPUVA_UPPER "RV_ANNOTATION_GPUVA" +#define RV_ANNOTATION_DESCRIPTOR_LOWER "rv_annotation_descriptor" +#define RV_ANNOTATION_DESCRIPTOR_UPPER "RV_ANNOTATION_DESCRIPTOR" +#define FORCE_FIFO_PRESENT_MODE_LOWER "force_fifo_present_mode" +#define FORCE_FIFO_PRESENT_MODE_UPPER "FORCE_FIFO_PRESENT_MODE" +#define IGNORE_FRAME_BOUNDARY_ANDROID_LOWER "ignore_frame_boundary_android" +#define IGNORE_FRAME_BOUNDARY_ANDROID_UPPER "IGNORE_FRAME_BOUNDARY_ANDROID" +#define SKIP_THREADS_WITH_INVALID_DATA_LOWER "skip_threads_with_invalid_data" +#define SKIP_THREADS_WITH_INVALID_DATA_UPPER "SKIP_THREADS_WITH_INVALID_DATA" +#define CAPTURE_ENVIRONMENT_LOWER "capture_environment" +#define CAPTURE_ENVIRONMENT_UPPER "CAPTURE_ENVIRONMENT" +#define CAPTURE_PROCESS_NAME_LOWER "capture_process_name" +#define CAPTURE_PROCESS_NAME_UPPER "CAPTURE_PROCESS_NAME" +// clang-format on + class CaptureSettings { public: @@ -127,6 +245,7 @@ class CaptureSettings bool debug_layer{ false }; bool debug_device_lost{ false }; bool disable_dxr{ false }; + bool disable_meta_command{ false }; uint32_t accel_struct_padding{ 0 }; bool force_command_serialization{ false }; bool queue_zero_only{ false }; @@ -161,7 +280,7 @@ class CaptureSettings const util::Log::Settings& GetLogSettings() const { return log_settings_; } // Load all settings. - static void LoadSettings(CaptureSettings* settings); + static void LoadSettings(CaptureSettings* settings, bool load_log_settings); static void LoadRunTimeEnvVarSettings(CaptureSettings* settings); // Load only log settings. @@ -174,11 +293,11 @@ class CaptureSettings static void LoadSingleOptionEnvVar(OptionsMap* options, const std::string& environment_variable, const std::string& option_key); - static void LoadOptionsEnvVar(OptionsMap* options); + static void LoadOptionsEnvVar(OptionsMap* options, bool load_log_settings); static void LoadOptionsFile(OptionsMap* options); - static void ProcessOptions(OptionsMap* options, CaptureSettings* settings); + static void ProcessOptions(OptionsMap* options, CaptureSettings* settings, bool process_log_settings); static void ProcessLogOptions(OptionsMap* options, CaptureSettings* settings); diff --git a/third_party/gfxreconstruct/framework/encode/custom_dx12_struct_encoders.cpp b/third_party/gfxreconstruct/framework/encode/custom_dx12_struct_encoders.cpp index fbf716764..a829dd0fe 100644 --- a/third_party/gfxreconstruct/framework/encode/custom_dx12_struct_encoders.cpp +++ b/third_party/gfxreconstruct/framework/encode/custom_dx12_struct_encoders.cpp @@ -446,11 +446,51 @@ void EncodeStruct(ParameterEncoder* encoder, const D3D12_RENDER_PASS_ENDING_ACCE } } +void EncodeStruct(ParameterEncoder* encoder, const D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1& value) +{ + EncodeStruct(encoder, value.DriverMatchingIdentifier); + encoder->EncodeUInt64Value(value.SerializedSizeInBytesIncludingHeader); + encoder->EncodeUInt64Value(value.DeserializedSizeInBytes); + + encoder->EncodeEnumValue(value.HeaderPostambleType); + + switch (value.HeaderPostambleType) + { + case D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BOTTOM_LEVEL_POINTERS: + encoder->EncodeUInt32Value(value.NumBottomLevelAccelerationStructurePointersAfterHeader); + break; + case D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BLOCKS: + encoder->EncodeUInt32Value(value.NumBlocks); + break; + default: + GFXRECON_LOG_FATAL_ONCE( + "Unrecognized D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1 union type %u", + value.HeaderPostambleType); + break; + } +} + +void EncodeStruct(ParameterEncoder* encoder, + const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC& value) +{ + encoder->EncodeUInt64Value(value.SerializedSizeInBytes); + + // union + encoder->EncodeUInt64Value(value.NumBottomLevelAccelerationStructureHeaderAndPointerListPairs); +} + void EncodeStruct(ParameterEncoder* encoder, const LARGE_INTEGER& value) { encoder->EncodeInt64Value(value.QuadPart); } +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_OPACITY_MICROMAP_DESC& value) +{ + encoder->EncodeUInt32Value(value.ByteOffset); + encoder->EncodeUInt32Value(value.SubdivisionLevel); + encoder->EncodeEnumValue(value.Format); +} + void EncodeStruct(ParameterEncoder* encoder, const D3D12_PIPELINE_STATE_STREAM_DESC& value) { encoder->EncodeSizeTValue(value.SizeInBytes); diff --git a/third_party/gfxreconstruct/framework/encode/custom_dx12_struct_encoders.h b/third_party/gfxreconstruct/framework/encode/custom_dx12_struct_encoders.h index 249adeb2d..d6e851ad9 100644 --- a/third_party/gfxreconstruct/framework/encode/custom_dx12_struct_encoders.h +++ b/third_party/gfxreconstruct/framework/encode/custom_dx12_struct_encoders.h @@ -54,9 +54,13 @@ void EncodeStruct(ParameterEncoder* encoder, const D3D12_BUILD_RAYTRACING_ACCELE void EncodeStruct(ParameterEncoder* encoder, const D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA& value); void EncodeStruct(ParameterEncoder* encoder, const D3D12_RENDER_PASS_BEGINNING_ACCESS& value); void EncodeStruct(ParameterEncoder* encoder, const D3D12_RENDER_PASS_ENDING_ACCESS& value); +void EncodeStruct(ParameterEncoder* encoder, const D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1& value); +void EncodeStruct(ParameterEncoder* encoder, + const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC& value); // Platform types. void EncodeStruct(ParameterEncoder* encoder, const LARGE_INTEGER& value); +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_OPACITY_MICROMAP_DESC& value); // Types requiring special processing. void EncodeStruct(ParameterEncoder* encoder, const D3D12_PIPELINE_STATE_STREAM_DESC& value); diff --git a/third_party/gfxreconstruct/framework/encode/custom_dx12_struct_unwrappers.cpp b/third_party/gfxreconstruct/framework/encode/custom_dx12_struct_unwrappers.cpp index 603edf6f5..0c1d7c578 100644 --- a/third_party/gfxreconstruct/framework/encode/custom_dx12_struct_unwrappers.cpp +++ b/third_party/gfxreconstruct/framework/encode/custom_dx12_struct_unwrappers.cpp @@ -361,20 +361,29 @@ void UnwrapStructObjects(D3D12_BARRIER_GROUP* value, HandleUnwrapMemory* unwrap_ if (value != nullptr) { - for (UINT i = 0; i < value->NumBarriers; ++i) + switch (value->Type) { - switch (value->Type) + case D3D12_BARRIER_TYPE_TEXTURE: { - case D3D12_BARRIER_TYPE_TEXTURE: - UnwrapStructObjects(const_cast(&value->pTextureBarriers[i]), unwrap_memory); - break; - case D3D12_BARRIER_TYPE_BUFFER: - UnwrapStructObjects(const_cast(&value->pBufferBarriers[i]), unwrap_memory); - break; - case D3D12_BARRIER_TYPE_GLOBAL: - default: - break; + // Deep copy pTextureBarrier into a new struct array and return pointer to the raw unwrapped struct + auto unwrapped_structs = + UnwrapStructArrayObjects(value->pTextureBarriers, value->NumBarriers, unwrap_memory); + // assign this new struct to the parent unwrapped struct + value->pTextureBarriers = unwrapped_structs; + break; } + case D3D12_BARRIER_TYPE_BUFFER: + { + // Deep copy pBufferBarriers into a new struct array and return pointer to the raw unwrapped struct + auto unwrapped_structs = + UnwrapStructArrayObjects(value->pBufferBarriers, value->NumBarriers, unwrap_memory); + // assign this new struct to the parent unwrapped struct + value->pBufferBarriers = unwrapped_structs; + break; + } + case D3D12_BARRIER_TYPE_GLOBAL: + default: + break; } } } diff --git a/third_party/gfxreconstruct/framework/encode/custom_vulkan_api_call_encoders.cpp b/third_party/gfxreconstruct/framework/encode/custom_vulkan_api_call_encoders.cpp index f4d89cbce..d9a8e37d2 100644 --- a/third_party/gfxreconstruct/framework/encode/custom_vulkan_api_call_encoders.cpp +++ b/third_party/gfxreconstruct/framework/encode/custom_vulkan_api_call_encoders.cpp @@ -895,5 +895,60 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateRayTracingPipelinesKHR(VkDevice return result; } +VKAPI_ATTR VkResult VKAPI_CALL vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT( + VkDevice device, const VkAccelerationStructureCaptureDescriptorDataInfoEXT* pInfo, void* pData) +{ + GFXRECON_UNREFERENCED_PARAMETER(device); + GFXRECON_UNREFERENCED_PARAMETER(pInfo); + GFXRECON_UNREFERENCED_PARAMETER(pData); + GFXRECON_LOG_WARNING_ONCE( + "%s: skipping capture of VkPhysicalDeviceDescriptorBufferFeaturesEXT::descriptorBufferCaptureReplay", __func__); + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkGetBufferOpaqueCaptureDescriptorDataEXT( + VkDevice device, const VkBufferCaptureDescriptorDataInfoEXT* pInfo, void* pData) +{ + GFXRECON_UNREFERENCED_PARAMETER(device); + GFXRECON_UNREFERENCED_PARAMETER(pInfo); + GFXRECON_UNREFERENCED_PARAMETER(pData); + GFXRECON_LOG_WARNING_ONCE( + "%s: skipping capture of VkPhysicalDeviceDescriptorBufferFeaturesEXT::descriptorBufferCaptureReplay", __func__); + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL +vkGetImageOpaqueCaptureDescriptorDataEXT(VkDevice device, const VkImageCaptureDescriptorDataInfoEXT* pInfo, void* pData) +{ + GFXRECON_UNREFERENCED_PARAMETER(device); + GFXRECON_UNREFERENCED_PARAMETER(pInfo); + GFXRECON_UNREFERENCED_PARAMETER(pData); + GFXRECON_LOG_WARNING_ONCE( + "%s: skipping capture of VkPhysicalDeviceDescriptorBufferFeaturesEXT::descriptorBufferCaptureReplay", __func__); + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkGetSamplerOpaqueCaptureDescriptorDataEXT( + VkDevice device, const VkSamplerCaptureDescriptorDataInfoEXT* pInfo, void* pData) +{ + GFXRECON_UNREFERENCED_PARAMETER(device); + GFXRECON_UNREFERENCED_PARAMETER(pInfo); + GFXRECON_UNREFERENCED_PARAMETER(pData); + GFXRECON_LOG_WARNING_ONCE( + "%s: skipping capture of VkPhysicalDeviceDescriptorBufferFeaturesEXT::descriptorBufferCaptureReplay", __func__); + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkGetImageViewOpaqueCaptureDescriptorDataEXT( + VkDevice device, const VkImageViewCaptureDescriptorDataInfoEXT* pInfo, void* pData) +{ + GFXRECON_UNREFERENCED_PARAMETER(device); + GFXRECON_UNREFERENCED_PARAMETER(pInfo); + GFXRECON_UNREFERENCED_PARAMETER(pData); + GFXRECON_LOG_WARNING_ONCE( + "%s: skipping capture of VkPhysicalDeviceDescriptorBufferFeaturesEXT::descriptorBufferCaptureReplay", __func__); + return VK_SUCCESS; +} + GFXRECON_END_NAMESPACE(encode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/encode/custom_vulkan_api_call_encoders.h b/third_party/gfxreconstruct/framework/encode/custom_vulkan_api_call_encoders.h index 6375924e8..b258ec81d 100644 --- a/third_party/gfxreconstruct/framework/encode/custom_vulkan_api_call_encoders.h +++ b/third_party/gfxreconstruct/framework/encode/custom_vulkan_api_call_encoders.h @@ -104,6 +104,21 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateRayTracingPipelinesKHR(VkDevice const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); +VKAPI_ATTR VkResult VKAPI_CALL vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT( + VkDevice device, const VkAccelerationStructureCaptureDescriptorDataInfoEXT* pInfo, void* pData); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetBufferOpaqueCaptureDescriptorDataEXT( + VkDevice device, const VkBufferCaptureDescriptorDataInfoEXT* pInfo, void* pData); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetImageOpaqueCaptureDescriptorDataEXT( + VkDevice device, const VkImageCaptureDescriptorDataInfoEXT* pInfo, void* pData); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetSamplerOpaqueCaptureDescriptorDataEXT( + VkDevice device, const VkSamplerCaptureDescriptorDataInfoEXT* pInfo, void* pData); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetImageViewOpaqueCaptureDescriptorDataEXT( + VkDevice device, const VkImageViewCaptureDescriptorDataInfoEXT* pInfo, void* pData); + GFXRECON_END_NAMESPACE(encode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/encode/custom_vulkan_encoder_commands.h b/third_party/gfxreconstruct/framework/encode/custom_vulkan_encoder_commands.h index 0dbca9c8d..0e73141b0 100644 --- a/third_party/gfxreconstruct/framework/encode/custom_vulkan_encoder_commands.h +++ b/third_party/gfxreconstruct/framework/encode/custom_vulkan_encoder_commands.h @@ -705,6 +705,16 @@ struct CustomEncoderPostCall } }; +template <> +struct CustomEncoderPreCall +{ + template + static void Dispatch(VulkanCaptureManager* manager, Args... args) + { + manager->PreProcess_vkQueueBindSparse(args...); + } +}; + #if ENABLE_OPENXR_SUPPORT template <> struct CustomEncoderPreCall @@ -748,6 +758,36 @@ struct CustomEncoderPreCall #endif +template <> +struct CustomEncoderPostCall +{ + template + static void Dispatch(VulkanCaptureManager* manager, Args... args) + { + manager->PostProcess_vkWaitForFences(args...); + } +}; + +template <> +struct CustomEncoderPostCall +{ + template + static void Dispatch(VulkanCaptureManager* manager, Args... args) + { + manager->PostProcess_vkResetFences(args...); + } +}; + +template <> +struct CustomEncoderPostCall +{ + template + static void Dispatch(VulkanCaptureManager* manager, Args... args) + { + manager->PostProcess_vkGetFenceStatus(args...); + } +}; + template <> struct CustomEncoderPreCall { @@ -1804,6 +1844,16 @@ struct CustomEncoderPostCall } }; +template <> +struct CustomEncoderPreCall +{ + template + static void Dispatch(VulkanCaptureManager* manager, Args... args) + { + manager->PreProcess_vkBeginCommandBuffer(args...); + } +}; + template <> struct CustomEncoderPostCall { diff --git a/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_encoders.cpp b/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_encoders.cpp index 4cc7553f4..323caf057 100644 --- a/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_encoders.cpp +++ b/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_encoders.cpp @@ -24,7 +24,6 @@ #include "encode/custom_vulkan_struct_encoders.h" #include "encode/struct_pointer_encoder.h" #include "graphics/vulkan_resources_util.h" -#include "util/defines.h" #include "util/logging.h" #include @@ -351,15 +350,8 @@ void EncodeStruct(ParameterEncoder* encoder, const VkCopyMemoryToImageInfo& valu for (size_t i = 0; i < value.regionCount; ++i) { const auto& region = value.pRegions[i]; - - // Calculate how many bytes we need to capture from pHostPointer - uint32_t row_length = region.memoryRowLength ? region.memoryRowLength : region.imageExtent.width; - uint32_t image_height = region.memoryImageHeight ? region.memoryImageHeight : region.imageExtent.height; - uint32_t texel_count = region.imageExtent.width + ((region.imageExtent.height - 1) * row_length) + - ((region.imageExtent.depth - 1) * image_height); - VkDeviceSize texel_size; - graphics::GetImageTexelSize(image_info->format, &texel_size, nullptr, nullptr, nullptr); - size_t host_size = texel_count * texel_size; + VkDeviceSize host_size = + graphics::GetBufferSizeFromCopyImage(region, image_info->array_layers, image_info->format); encoder->EncodeEnumValue(region.sType); EncodePNextStruct(encoder, region.pNext); @@ -390,16 +382,9 @@ void EncodeStruct(ParameterEncoder* encoder, const VkCopyImageToMemoryInfo& valu const auto* image_info = vulkan_wrappers::GetWrapper(value.srcImage); for (size_t i = 0; i < value.regionCount; ++i) { - const auto& region = value.pRegions[i]; - - // Calculate how many bytes we need to capture from pHostPointer - uint32_t row_length = region.memoryRowLength ? region.memoryRowLength : region.imageExtent.width; - uint32_t image_height = region.memoryImageHeight ? region.memoryImageHeight : region.imageExtent.height; - uint32_t texel_count = region.imageExtent.width + ((region.imageExtent.height - 1) * row_length) + - ((region.imageExtent.depth - 1) * image_height); - VkDeviceSize texel_size; - graphics::GetImageTexelSize(image_info->format, &texel_size, nullptr, nullptr, nullptr); - size_t host_size = texel_count * texel_size; + const auto& region = value.pRegions[i]; + VkDeviceSize host_size = + graphics::GetBufferSizeFromCopyImage(region, image_info->array_layers, image_info->format); encoder->EncodeEnumValue(region.sType); EncodePNextStruct(encoder, region.pNext); @@ -413,5 +398,106 @@ void EncodeStruct(ParameterEncoder* encoder, const VkCopyImageToMemoryInfo& valu } } +void EncodeStruct(ParameterEncoder* encoder, const VkLayerSettingEXT& value) +{ + encoder->EncodeString(value.pLayerName); + encoder->EncodeString(value.pSettingName); + encoder->EncodeEnumValue(value.type); + encoder->EncodeUInt32Value(value.valueCount); + + switch (value.type) + { + case VK_LAYER_SETTING_TYPE_BOOL32_EXT: + encoder->EncodeUInt32Array(static_cast(value.pValues), value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_INT32_EXT: + encoder->EncodeInt32Array(static_cast(value.pValues), value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_INT64_EXT: + encoder->EncodeInt64Array(static_cast(value.pValues), value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_UINT32_EXT: + encoder->EncodeUInt32Array(static_cast(value.pValues), value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_UINT64_EXT: + encoder->EncodeUInt64Array(static_cast(value.pValues), value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_FLOAT32_EXT: + encoder->EncodeFloatArray(static_cast(value.pValues), value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_FLOAT64_EXT: + encoder->EncodeFloat64Array(static_cast(value.pValues), value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_STRING_EXT: + encoder->EncodeStringArray(static_cast(value.pValues), value.valueCount); + break; + case VK_LAYER_SETTING_TYPE_MAX_ENUM_EXT: + break; + } +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorGetInfoEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeEnumValue(value.type); + switch (value.type) + { + case VK_DESCRIPTOR_TYPE_SAMPLER: + encoder->EncodeVulkanHandlePtr(value.data.pSampler); + break; + case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: + encoder->EncodeStructPtrPreamble(value.data.pCombinedImageSampler); + + if (value.data.pCombinedImageSampler) + { + EncodeStruct(encoder, value.type, *value.data.pCombinedImageSampler); + } + break; + case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: + encoder->EncodeStructPtrPreamble(value.data.pInputAttachmentImage); + + if (value.data.pInputAttachmentImage) + { + EncodeStruct(encoder, value.type, *value.data.pInputAttachmentImage); + } + + break; + case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: + encoder->EncodeStructPtrPreamble(value.data.pSampledImage); + + if (value.data.pSampledImage) + { + EncodeStruct(encoder, value.type, *value.data.pSampledImage); + } + break; + case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: + encoder->EncodeStructPtrPreamble(value.data.pStorageImage); + + if (value.data.pStorageImage) + { + EncodeStruct(encoder, value.type, *value.data.pStorageImage); + } + break; + case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: + EncodeStructPtr(encoder, value.data.pUniformTexelBuffer); + break; + case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: + EncodeStructPtr(encoder, value.data.pStorageTexelBuffer); + break; + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: + EncodeStructPtr(encoder, value.data.pUniformBuffer); + break; + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + EncodeStructPtr(encoder, value.data.pStorageBuffer); + break; + case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: + encoder->EncodeUInt64Value(value.data.accelerationStructure); + break; + default: + break; + } +} + GFXRECON_END_NAMESPACE(encode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_encoders.h b/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_encoders.h index 579e85c76..e2e10c8d5 100644 --- a/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_encoders.h +++ b/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_encoders.h @@ -26,9 +26,6 @@ #include "encode/parameter_encoder.h" #include "format/platform_types.h" -#include "util/defines.h" - -#include "vulkan/vulkan.h" GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(encode) @@ -51,6 +48,8 @@ void EncodeStruct(ParameterEncoder* encoder, const VkIndirectExecutionSetCreateI void EncodeStruct(ParameterEncoder* encoder, const VkIndirectCommandsLayoutTokenEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkCopyMemoryToImageInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkCopyImageToMemoryInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkLayerSettingEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorGetInfoEXT& value); // Platform defined structures that are external to Vulkan. void EncodeStruct(ParameterEncoder* encoder, const ACL& value); diff --git a/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_handle_wrappers.cpp b/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_handle_wrappers.cpp index 75d0fc008..dc75f5f6c 100644 --- a/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_handle_wrappers.cpp +++ b/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_handle_wrappers.cpp @@ -152,6 +152,46 @@ void UnwrapStructHandles(VkCopyMemoryToImageInfo* value, HandleUnwrapMemory* unw void UnwrapStructHandles(VkCopyImageToMemoryInfo* value, HandleUnwrapMemory* unwrap_memory) {} +void UnwrapStructHandles(VkDescriptorGetInfoEXT* value, HandleUnwrapMemory* unwrap_memory) +{ + if (value != nullptr) + { + switch (value->type) + { + case VK_DESCRIPTOR_TYPE_SAMPLER: + break; + case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: + value->data.pCombinedImageSampler = UnwrapDescriptorImageInfoStructArrayHandles( + value->type, value->data.pCombinedImageSampler, 1, unwrap_memory); + break; + case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: + value->data.pInputAttachmentImage = UnwrapDescriptorImageInfoStructArrayHandles( + value->type, value->data.pInputAttachmentImage, 1, unwrap_memory); + break; + case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: + value->data.pSampledImage = UnwrapDescriptorImageInfoStructArrayHandles( + value->type, value->data.pSampledImage, 1, unwrap_memory); + break; + case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: + value->data.pStorageImage = UnwrapDescriptorImageInfoStructArrayHandles( + value->type, value->data.pStorageImage, 1, unwrap_memory); + break; + case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: + break; + case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: + break; + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: + break; + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + break; + case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: + break; + default: + break; + } + } +} + GFXRECON_END_NAMESPACE(vulkan_wrappers) GFXRECON_END_NAMESPACE(encode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_handle_wrappers.h b/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_handle_wrappers.h index 0de2a5b7a..434c741ee 100644 --- a/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_handle_wrappers.h +++ b/third_party/gfxreconstruct/framework/encode/custom_vulkan_struct_handle_wrappers.h @@ -46,6 +46,8 @@ void UnwrapStructHandles(VkCopyMemoryToImageInfo* value, HandleUnwrapMemory* unw void UnwrapStructHandles(VkCopyImageToMemoryInfo* value, HandleUnwrapMemory* unwrap_memory); +void UnwrapStructHandles(VkDescriptorGetInfoEXT* value, HandleUnwrapMemory* unwrap_memory); + GFXRECON_END_NAMESPACE(vulkan_wrappers) GFXRECON_END_NAMESPACE(encode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/encode/d3d12_capture_manager.cpp b/third_party/gfxreconstruct/framework/encode/d3d12_capture_manager.cpp index bd04a7a55..65bcb323d 100644 --- a/third_party/gfxreconstruct/framework/encode/d3d12_capture_manager.cpp +++ b/third_party/gfxreconstruct/framework/encode/d3d12_capture_manager.cpp @@ -848,6 +848,7 @@ void D3D12CaptureManager::PostProcess_ID3D12Device_CreateHeap( info->memory_pool = desc->Properties.MemoryPoolPreference; info->has_write_watch = UseWriteWatch(info->heap_type, desc->Flags, info->page_property); info->heap_size = desc->SizeInBytes; + info->heap_flags = desc->Flags; CheckWriteWatchIgnored(desc->Flags, heap_wrapper->GetCaptureId()); } @@ -1093,6 +1094,7 @@ void D3D12CaptureManager::PostProcess_ID3D12Device4_CreateHeap1(ID3D12Device4_Wr info->page_property = desc->Properties.CPUPageProperty; info->memory_pool = desc->Properties.MemoryPoolPreference; info->has_write_watch = UseWriteWatch(info->heap_type, desc->Flags, info->page_property); + info->heap_flags = desc->Flags; CheckWriteWatchIgnored(desc->Flags, heap_wrapper->GetCaptureId()); } @@ -2364,6 +2366,10 @@ HRESULT D3D12CaptureManager::OverrideID3D12Device_CheckFeatureSupport(ID3D12Devi features->RaytracingTier = D3D12_RAYTRACING_TIER_NOT_SUPPORTED; return result; } + else if (GetDisableMetaCommandSetting() && (feature == D3D12_FEATURE_QUERY_META_COMMAND)) + { + return E_INVALIDARG; + } else { return device->CheckFeatureSupport(feature, feature_support_data, feature_support_data_size); @@ -3372,6 +3378,15 @@ void D3D12CaptureManager::TrimDrawCalls_ID3D12GraphicsCommandList4_BeginRenderPa IncrementCallScope(); } +static void MarkCommandListForTrim(graphics::dx12::ID3D12GraphicsCommandListComPtr list) +{ + auto wrapper = reinterpret_cast(list.GetInterfacePtr()); + GFXRECON_ASSERT(wrapper != nullptr); + auto info = wrapper->GetObjectInfo(); + GFXRECON_ASSERT(info != nullptr); + info->is_trim_target = true; +} + bool D3D12CaptureManager::TrimDrawCalls_ID3D12CommandQueue_ExecuteCommandLists( std::shared_lock& current_lock, ID3D12CommandQueue_Wrapper* wrapper, @@ -3436,6 +3451,11 @@ bool D3D12CaptureManager::TrimDrawCalls_ID3D12CommandQueue_ExecuteCommandLists( trim_draw_calls.bundle_draw_call_indices.first, trim_draw_calls.bundle_draw_call_indices.last); } + + auto target_bundle_cmd = + target_info->target_bundle_commandlist_info->split_command_sets[graphics::dx12::kDrawCallArrayIndex] + .list; + MarkCommandListForTrim(target_bundle_cmd); } std::vector cmdlists; @@ -3460,12 +3480,13 @@ bool D3D12CaptureManager::TrimDrawCalls_ID3D12CommandQueue_ExecuteCommandLists( cmdlists.clear(); // target of splitted - common_manager_->ActivateTrimmingDrawCalls(format::ApiFamilyId::ApiFamily_D3D12, current_lock); - auto target_draw_call_cmd = target_info->split_command_sets[graphics::dx12::kDrawCallArrayIndex].list; GFXRECON_ASSERT(target_draw_call_cmd); cmdlists.emplace_back(target_draw_call_cmd); + MarkCommandListForTrim(target_draw_call_cmd); + common_manager_->ActivateTrimmingDrawCalls(format::ApiFamilyId::ApiFamily_D3D12, current_lock); + auto unwrap_memory = GetHandleUnwrapMemory(); queue->ExecuteCommandLists(cmdlists.size(), UnwrapObjects(cmdlists.data(), cmdlists.size(), unwrap_memory)); @@ -3794,7 +3815,7 @@ void D3D12CaptureManager::PostProcess_InitializeMetaCommand(ID3D12GraphicsComman { if (IsCaptureModeTrack()) { - auto metacommand_info = reinterpret_cast(pMetaCommand)->GetObjectInfo(); + auto metacommand_info = reinterpret_cast(pMetaCommand)->GetObjectInfo(); metacommand_info->was_initialized = true; metacommand_info->initialize_parameters = std::make_unique( pInitializationParametersData, InitializationParametersDataSizeInBytes); diff --git a/third_party/gfxreconstruct/framework/encode/dx12_dll_initializer.h b/third_party/gfxreconstruct/framework/encode/dx12_dll_initializer.h index 522b20395..76260694b 100644 --- a/third_party/gfxreconstruct/framework/encode/dx12_dll_initializer.h +++ b/third_party/gfxreconstruct/framework/encode/dx12_dll_initializer.h @@ -26,6 +26,7 @@ #include "util/defines.h" #include "util/platform.h" #include "util/file_path.h" +#include "util/interception/hooking_detours.h" #include #include diff --git a/third_party/gfxreconstruct/framework/encode/dx12_object_wrapper_info.h b/third_party/gfxreconstruct/framework/encode/dx12_object_wrapper_info.h index 16409ad02..09420c286 100644 --- a/third_party/gfxreconstruct/framework/encode/dx12_object_wrapper_info.h +++ b/third_party/gfxreconstruct/framework/encode/dx12_object_wrapper_info.h @@ -438,6 +438,7 @@ struct ID3D12HeapInfo : public DxWrapperInfo D3D12_MEMORY_POOL memory_pool{}; uint64_t heap_size{ 0 }; D3D12_GPU_VIRTUAL_ADDRESS gpu_va{ 0 }; + D3D12_HEAP_FLAGS heap_flags{ D3D12_HEAP_FLAG_NONE }; const void* open_existing_address{ nullptr }; ///< Address used to create heap with OpenExistingHeapFromAddress. }; @@ -502,7 +503,8 @@ struct ID3D12CommandListInfo : public DxWrapperInfo std::array split_command_sets; bool is_split_commandlist{ false }; uint32_t find_target_draw_call_count{ 0 }; - std::shared_ptr target_bundle_commandlist_info{ false }; + std::shared_ptr target_bundle_commandlist_info; + bool is_trim_target{ false }; }; struct ID3D10BlobInfo : public DxWrapperInfo diff --git a/third_party/gfxreconstruct/framework/encode/dx12_object_wrapper_util.h b/third_party/gfxreconstruct/framework/encode/dx12_object_wrapper_util.h index 866ee8ef2..90f55aa91 100644 --- a/third_party/gfxreconstruct/framework/encode/dx12_object_wrapper_util.h +++ b/third_party/gfxreconstruct/framework/encode/dx12_object_wrapper_util.h @@ -255,8 +255,8 @@ void RemoveWrapperMapEntry(Object* object, Map& object_map, std::mutex& object_m template Wrapper* FindMapEntry(Object* object, Map& object_map, std::mutex& object_map_lock) { - Wrapper* wrapper = nullptr; - Map::const_iterator entry; + Wrapper* wrapper = nullptr; + typename Map::const_iterator entry; { std::lock_guard lock(object_map_lock); diff --git a/third_party/gfxreconstruct/framework/encode/dx12_rv_annotation_util.cpp b/third_party/gfxreconstruct/framework/encode/dx12_rv_annotation_util.cpp index c94772483..0fdc89c18 100644 --- a/third_party/gfxreconstruct/framework/encode/dx12_rv_annotation_util.cpp +++ b/third_party/gfxreconstruct/framework/encode/dx12_rv_annotation_util.cpp @@ -79,8 +79,7 @@ void RvAnnotationUtil::AddRvAnnotation(void** result) auto shader_id = graphics::PackDx12ShaderIdentifier((uint8_t*)*result); if (shader_id != zero_id) { - auto& annotated_shader_id = annotated_shader_ids_.find(*result); - if (annotated_shader_id == annotated_shader_ids_.end()) + if (!annotated_shader_ids_.contains(*result)) { uint64_t shader_id_mask = manager->GetShaderIDMask(); memcpy(shader_id.data() + D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES - sizeof(shader_id_mask), diff --git a/third_party/gfxreconstruct/framework/encode/dx12_state_tracker_initializers.h b/third_party/gfxreconstruct/framework/encode/dx12_state_tracker_initializers.h index d23f8111d..1b685279f 100644 --- a/third_party/gfxreconstruct/framework/encode/dx12_state_tracker_initializers.h +++ b/third_party/gfxreconstruct/framework/encode/dx12_state_tracker_initializers.h @@ -27,6 +27,7 @@ #include "format/format.h" #include "util/defines.h" #include "util/memory_output_stream.h" +#include "util/logging.h" #include diff --git a/third_party/gfxreconstruct/framework/encode/dx12_state_writer.cpp b/third_party/gfxreconstruct/framework/encode/dx12_state_writer.cpp index cc625529f..fe9cd0024 100644 --- a/third_party/gfxreconstruct/framework/encode/dx12_state_writer.cpp +++ b/third_party/gfxreconstruct/framework/encode/dx12_state_writer.cpp @@ -118,7 +118,7 @@ void Dx12StateWriter::WriteState(const Dx12StateTable& state_table, uint64_t fra WriteFenceState(state_table); // Heaps - StandardCreateWrite(state_table); + WriteRootSignatureBlobState(state_table); WriteHeapState(state_table); // Root signatures @@ -153,6 +153,7 @@ void Dx12StateWriter::WriteState(const Dx12StateTable& state_table, uint64_t fra // Pipelines StandardCreateWrite(state_table); StandardCreateWrite(state_table); + WriteCachedPSOBlobState(state_table); // Debug objects StandardCreateWrite(state_table); @@ -361,6 +362,49 @@ void Dx12StateWriter::WriteMethodCall(format::ApiCallId call_id, output_stream_->Write(data_pointer, data_size); } +bool Dx12StateWriter::IsCachedPSOBlob(const ID3D10Blob_Wrapper* wrapper) const +{ + GFXRECON_ASSERT(wrapper != nullptr); + + auto wrapper_info = wrapper->GetObjectInfo(); + GFXRECON_ASSERT(wrapper_info != nullptr); + + return (wrapper_info->create_call_id == format::ApiCall_ID3D12PipelineState_GetCachedBlob); +} + +void Dx12StateWriter::WriteRootSignatureBlobState(const Dx12StateTable& state_table) +{ + std::set processed; + state_table.VisitWrappers([&](const ID3D10Blob_Wrapper* wrapper) { + GFXRECON_ASSERT(wrapper != nullptr); + + if (IsRootSignatureBlob(wrapper)) + { + // Filter duplicate entries for calls that create multiple objects, where objects created by the same call + // all reference the same parameter buffer. + auto wrapper_info = wrapper->GetObjectInfo(); + GFXRECON_ASSERT((wrapper_info != nullptr) && (wrapper_info->create_parameters != nullptr)); + + if (processed.find(wrapper_info->create_parameters.get()) == processed.end()) + { + StandardCreateWrite(wrapper); + processed.insert(wrapper_info->create_parameters.get()); + } + } + }); +} + +void Dx12StateWriter::WriteCachedPSOBlobState(const Dx12StateTable& state_table) +{ + std::set processed; + state_table.VisitWrappers([&](const ID3D10Blob_Wrapper* wrapper) { + if (IsCachedPSOBlob(wrapper)) + { + StandardCreateWrite(wrapper); + } + }); +} + void Dx12StateWriter::WriteHeapState(const Dx12StateTable& state_table) { std::set processed; @@ -381,9 +425,33 @@ void Dx12StateWriter::WriteHeapState(const Dx12StateTable& state_table) } StandardCreateWrite(wrapper); + if (wrapper_info->heap_flags & D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT) + { + WriteHeapMakeResidentCmd(wrapper); + } }); } +void Dx12StateWriter::WriteHeapMakeResidentCmd(const ID3D12Heap_Wrapper* wrapper) +{ + GFXRECON_ASSERT(wrapper != nullptr); + GFXRECON_ASSERT(wrapper->GetObjectInfo() != nullptr); + + auto wrapper_info = wrapper->GetObjectInfo(); + + UINT num_objects = 1; + HRESULT return_value = S_OK; + const ID3D12Pageable* ppObjects[1]; + ppObjects[0] = reinterpret_cast(wrapper); + + encoder_.EncodeUInt32Value(num_objects); + encoder_.EncodeObjectArray(ppObjects, num_objects); + encoder_.EncodeInt32Value(return_value); + WriteMethodCall( + format::ApiCallId::ApiCall_ID3D12Device_MakeResident, wrapper_info->create_object_id, ¶meter_stream_); + parameter_stream_.Clear(); +} + bool Dx12StateWriter::WriteCreateHeapAllocationCmd(const void* address) { MEMORY_BASIC_INFORMATION info{}; @@ -422,6 +490,14 @@ void Dx12StateWriter::WriteDescriptorState(const Dx12StateTable& state_table) auto heap_info = heap_wrapper->GetObjectInfo(); const auto& heap_desc = heap->GetDesc(); + // Write call to query the device for heap increment size. + encoder_.EncodeEnumValue(heap_desc.Type); + encoder_.EncodeUInt32Value(heap_info->descriptor_increment); + WriteMethodCall(format::ApiCallId::ApiCall_ID3D12Device_GetDescriptorHandleIncrementSize, + heap_info->create_object_id, + ¶meter_stream_); + parameter_stream_.Clear(); + // Write heap creation call. StandardCreateWrite(heap_wrapper); @@ -449,14 +525,6 @@ void Dx12StateWriter::WriteDescriptorState(const Dx12StateTable& state_table) parameter_stream_.Clear(); } - // Write call to query the device for heap increment size. - encoder_.EncodeEnumValue(heap_desc.Type); - encoder_.EncodeUInt32Value(heap_info->descriptor_increment); - WriteMethodCall(format::ApiCallId::ApiCall_ID3D12Device_GetDescriptorHandleIncrementSize, - heap_info->create_object_id, - ¶meter_stream_); - parameter_stream_.Clear(); - // Write descriptor creation calls, not use StandardCreateWrite. for (uint32_t i = 0; i < heap_desc.NumDescriptors; ++i) { @@ -733,8 +801,7 @@ void Dx12StateWriter::WriteMetaCommandCreationState(const Dx12StateTable& state_ format::ApiFamilyId::ApiFamily_D3D12, format::MetaDataType::kInitializeMetaCommand); init_meta_command.thread_id = thread_id_; init_meta_command.capture_id = wrapper->GetCaptureId(); - init_meta_command.initialization_parameters_data_size = - wrapper_info->initialize_parameters->GetDataSize(); + init_meta_command.data_size = wrapper_info->initialize_parameters->GetDataSize(); init_meta_command.total_number_of_initializemetacommand = metacommand_wrappers.size(); init_meta_command.block_index = ++block_index; @@ -779,10 +846,13 @@ void Dx12StateWriter::WriteResourceSnapshots( begin_cmd.meta_header.block_header.type = format::kMetaDataBlock; begin_cmd.meta_header.meta_data_id = format::MakeMetaDataId( format::ApiFamilyId::ApiFamily_D3D12, format::MetaDataType::kBeginResourceInitCommand); - begin_cmd.thread_id = thread_id_; - begin_cmd.device_id = device_id; - begin_cmd.max_resource_size = max_resource_size; - begin_cmd.max_copy_size = max_resource_size; + begin_cmd.thread_id = thread_id_; + begin_cmd.device_id = device_id; + + // TODO: adjust to hold sum of resource-sizes + begin_cmd.total_copy_size = max_resource_size; + + begin_cmd.max_copy_size = max_resource_size; output_stream_->Write(&begin_cmd, sizeof(begin_cmd)); @@ -1067,6 +1137,9 @@ void Dx12StateWriter::WriteCommandListState(const Dx12StateTable& state_table) std::vector direct_command_lists; std::vector open_command_lists; + const bool trim_to_draw_enabled = + (D3D12CaptureManager::Get()->GetTrimBoundary() == CaptureSettings::TrimBoundary::kDrawCalls); + state_table.VisitWrappers([&](ID3D12CommandList_Wrapper* list_wrapper) { GFXRECON_ASSERT(list_wrapper != nullptr); GFXRECON_ASSERT(list_wrapper->GetWrappedObject() != nullptr); @@ -1078,6 +1151,10 @@ void Dx12StateWriter::WriteCommandListState(const Dx12StateTable& state_table) GFXRECON_ASSERT(list_info->create_parameters != nullptr); GFXRECON_ASSERT(list_info->create_object_id != format::kNullHandleId); + // When trim to draw is enabled, skip command lists that do not contain the target draw calls. + if (trim_to_draw_enabled && !list_info->is_trim_target) + return; + // Write create calls and commands for bundle command lists. Keep track of primary and open command lists to be // written afterward. if (list->GetType() == D3D12_COMMAND_LIST_TYPE_BUNDLE) diff --git a/third_party/gfxreconstruct/framework/encode/dx12_state_writer.h b/third_party/gfxreconstruct/framework/encode/dx12_state_writer.h index 457cc5ae5..3bcbec441 100644 --- a/third_party/gfxreconstruct/framework/encode/dx12_state_writer.h +++ b/third_party/gfxreconstruct/framework/encode/dx12_state_writer.h @@ -112,11 +112,24 @@ class Dx12StateWriter void WriteMethodCall(format::ApiCallId call_id, format::HandleId object_id, util::MemoryOutputStream* parameter_buffer); + bool IsCachedPSOBlob(const ID3D10Blob_Wrapper* wrapper) const; + + bool IsRootSignatureBlob(const ID3D10Blob_Wrapper* wrapper) const + { + return !IsCachedPSOBlob(wrapper); + } + + void WriteRootSignatureBlobState(const Dx12StateTable& state_table); + + void WriteCachedPSOBlobState(const Dx12StateTable& state_table); + void WriteHeapState(const Dx12StateTable& state_table); // Returns true if memory information was successfully retrieved and written and false otherwise. bool WriteCreateHeapAllocationCmd(const void* address); + void WriteHeapMakeResidentCmd(const ID3D12Heap_Wrapper* wrapper); + void WriteDescriptorState(const Dx12StateTable& state_table); void WriteAddRefAndReleaseCommands(const IUnknown_Wrapper* wrapper); diff --git a/third_party/gfxreconstruct/framework/encode/parameter_encoder.h b/third_party/gfxreconstruct/framework/encode/parameter_encoder.h index d99439b62..cfb2ad788 100644 --- a/third_party/gfxreconstruct/framework/encode/parameter_encoder.h +++ b/third_party/gfxreconstruct/framework/encode/parameter_encoder.h @@ -77,7 +77,7 @@ class ParameterEncoder void EncodeD3D_FEATURE_LEVELValue(D3D_FEATURE_LEVEL value) { EncodeValue(value); } #endif // ENABLE_OPENXR_SUPPORT void EncodeLARGE_INTEGERValue(LARGE_INTEGER& value) { EncodeValue(value.QuadPart); } - void EncodeLUIDValue(LUID value) { EncodeValue(*reinterpret_cast(&value)); } + void EncodeLUIDValue(LUID value) { EncodeValue(pack_luid(value)); } // Encode the address values for pointers to non-Vulkan objects to be used as object IDs. void EncodeAddress(const void* value) { EncodeValue(reinterpret_cast(value)); } @@ -162,6 +162,7 @@ class ParameterEncoder void EncodeInt64Array(const int64_t* arr, size_t len, bool omit_data = false, bool omit_addr = false) { EncodeArray(arr, len, omit_data, omit_addr); } void EncodeUInt64Array(const uint64_t* arr, size_t len, bool omit_data = false, bool omit_addr = false) { EncodeArray(arr, len, omit_data, omit_addr); } void EncodeFloatArray(const float* arr, size_t len, bool omit_data = false, bool omit_addr = false) { EncodeArray(arr, len, omit_data, omit_addr); } + void EncodeFloat64Array(const double* arr, size_t len, bool omit_data = false, bool omit_addr = false) { EncodeArray(arr, len, omit_data, omit_addr); } void EncodeSizeTArray(const size_t* arr, size_t len, bool omit_data = false, bool omit_addr = false) { EncodeArrayConverted(arr, len, omit_data, omit_addr); } void EncodeHandleIdArray(const format::HandleId* arr, size_t len, bool omit_data = false, bool omit_addr = false) { EncodeArrayConverted(arr, len, omit_data, omit_addr); } void EncodeVkFormatArray(const VkFormat* arr, size_t len, bool omit_data = false, bool omit_addr = false) { EncodeArrayConverted(arr, len, omit_data, omit_addr); } diff --git a/third_party/gfxreconstruct/framework/encode/struct_pointer_encoder.h b/third_party/gfxreconstruct/framework/encode/struct_pointer_encoder.h index 00441311c..b989cb492 100644 --- a/third_party/gfxreconstruct/framework/encode/struct_pointer_encoder.h +++ b/third_party/gfxreconstruct/framework/encode/struct_pointer_encoder.h @@ -110,6 +110,35 @@ typename std::enable_if::value>::type EncodeStructArray } } +/// For some structs, spec mandates that `pNext` must be `NULL`. +/// On the other hand, vendor extensions may add structures to the pNext chain. +/// To handle this, we encode the pNext chain if it is valid, otherwise we encode a null pNext pointer. +inline void EncodePNextStructIfValid(ParameterEncoder* encoder, const void* pNext) +{ + if (util::platform::PointerIsValid(pNext)) + { + EncodePNextStruct(encoder, pNext); + } + else + { + encoder->EncodeStructPtrPreamble(nullptr); + } +} + +#if ENABLE_OPENXR_SUPPORT +inline void EncodeNextStructIfValid(ParameterEncoder* encoder, const void* value) +{ + if (util::platform::PointerIsValid(value)) + { + EncodeNextStruct(encoder, value); + } + else + { + encoder->EncodeStructPtrPreamble(nullptr); + } +} +#endif + GFXRECON_END_NAMESPACE(encode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/encode/test/main.cpp b/third_party/gfxreconstruct/framework/encode/test/main.cpp index bb13e4362..ab4b01062 100644 --- a/third_party/gfxreconstruct/framework/encode/test/main.cpp +++ b/third_party/gfxreconstruct/framework/encode/test/main.cpp @@ -27,6 +27,7 @@ #include #include "encode/vulkan_entry_base.h" +#include "encode/vulkan_capture_layer_settings.h" #include "encode/vulkan_handle_wrapper_util.h" #include "encode/vulkan_handle_wrappers.h" #include "format/format.h" @@ -747,3 +748,78 @@ TEST_CASE("Unsupported extension screening", "[layer]") gfxrecon::util::Log::Release(); } + +TEST_CASE("VkLayerSettingsCreateInfoEXT is parsed correctly", "[capture_layer_settings]") +{ + using namespace gfxrecon::encode; + CaptureSettings::TraceSettings layer_settings{}; + + VkInstanceCreateInfo instance_info{}; + instance_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + + // Test a null pCreateInfo pointer. + instance_info.pNext = nullptr; + layer_settings = GetVulkanLayerTraceSettings(nullptr); + REQUIRE(layer_settings.capture_file == CaptureSettings::kDefaultCaptureFileName); + + // pCreateInfo pointer that has no pNext chain. + instance_info.pNext = nullptr; + layer_settings = GetVulkanLayerTraceSettings(&instance_info); + REQUIRE(layer_settings.capture_file == CaptureSettings::kDefaultCaptureFileName); + + VkLayerSettingsCreateInfoEXT layer_settings_info{}; + layer_settings_info.sType = VK_STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT; + layer_settings_info.pNext = NULL; + instance_info.pNext = &layer_settings_info; + + // Create info which has no settings. + layer_settings_info.settingCount = 0; + layer_settings_info.pSettings = nullptr; + layer_settings = GetVulkanLayerTraceSettings(&instance_info); + REQUIRE(layer_settings.capture_file == CaptureSettings::kDefaultCaptureFileName); + + // Create info with 1 setting count but no pSettings. + layer_settings_info.settingCount = 1; + layer_settings_info.pSettings = nullptr; + layer_settings = GetVulkanLayerTraceSettings(&instance_info); + REQUIRE(layer_settings.capture_file == CaptureSettings::kDefaultCaptureFileName); + + VkLayerSettingEXT capture_setting{}; + layer_settings_info.pSettings = &capture_setting; + + // Settings with null layer name. + capture_setting.pLayerName = nullptr; + layer_settings = GetVulkanLayerTraceSettings(&instance_info); + REQUIRE(layer_settings.capture_file == CaptureSettings::kDefaultCaptureFileName); + + // Setting with null setting name. + capture_setting.pLayerName = "VK_LAYER_LUNARG_gfxreconstruct"; + capture_setting.pSettingName = nullptr; + layer_settings = GetVulkanLayerTraceSettings(&instance_info); + REQUIRE(layer_settings.capture_file == CaptureSettings::kDefaultCaptureFileName); + + // Setting with an invalid type. + capture_setting.pLayerName = "VK_LAYER_LUNARG_gfxreconstruct"; + capture_setting.pSettingName = "capture_file"; + capture_setting.type = VK_LAYER_SETTING_TYPE_INT32_EXT; + layer_settings = GetVulkanLayerTraceSettings(&instance_info); + REQUIRE(layer_settings.capture_file == CaptureSettings::kDefaultCaptureFileName); + + // Setting with an invalid value count. + capture_setting.type = VK_LAYER_SETTING_TYPE_STRING_EXT; + capture_setting.valueCount = 2; + layer_settings = GetVulkanLayerTraceSettings(&instance_info); + REQUIRE(layer_settings.capture_file == CaptureSettings::kDefaultCaptureFileName); + + // Setting with a null pValues pointer. + capture_setting.valueCount = 1; + capture_setting.pValues = nullptr; + layer_settings = GetVulkanLayerTraceSettings(&instance_info); + REQUIRE(layer_settings.capture_file == CaptureSettings::kDefaultCaptureFileName); + + // Valid setting. + const char* capture_file_value[] = { "my_capture.gfxr" }; + capture_setting.pValues = capture_file_value; + layer_settings = GetVulkanLayerTraceSettings(&instance_info); + REQUIRE(layer_settings.capture_file == "my_capture.gfxr"); +} diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_acceleration_structure_build_state.h b/third_party/gfxreconstruct/framework/encode/vulkan_acceleration_structure_build_state.h new file mode 100644 index 000000000..ddf2b54b7 --- /dev/null +++ b/third_party/gfxreconstruct/framework/encode/vulkan_acceleration_structure_build_state.h @@ -0,0 +1,99 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_ENCODE_VULKAN_ACCELERATION_STRUCTURE_BUILD_STATE_H +#define GFXRECON_ENCODE_VULKAN_ACCELERATION_STRUCTURE_BUILD_STATE_H + +#include "util/defines.h" +#include "format/format.h" +#include "vulkan/vulkan.h" +#include "vulkan/vulkan_core.h" +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(encode) + +namespace vulkan_wrappers +{ +struct DeviceWrapper; +} + +struct AccelerationStructureInputBuffer +{ + // Required data to correctly create a buffer + VkBuffer handle{ VK_NULL_HANDLE }; + format::HandleId handle_id{ format::kNullHandleId }; + const vulkan_wrappers::DeviceWrapper* bind_device{ nullptr }; + uint32_t queue_family_index{ 0 }; + VkDeviceSize created_size{ 0 }; + VkBufferUsageFlags usage{ 0 }; + + bool destroyed{ false }; + + VkDeviceAddress capture_address{ 0 }; + VkDeviceAddress actual_address{ 0 }; + + std::vector bytes; + + VkMemoryRequirements memory_requirements{}; + format::HandleId bind_memory{}; + VkDeviceMemory bind_memory_handle{ VK_NULL_HANDLE }; +}; + +struct AccelerationStructureKHRBuildCommandData +{ + VkAccelerationStructureTypeKHR type = VK_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_KHR; + VkBuffer buffer = VK_NULL_HANDLE; + VkDeviceSize size = 0; + VkDeviceSize offset = 0; + format::HandleId replaced_handle_id = format::kNullHandleId; + VkAccelerationStructureKHR replaced_handle = VK_NULL_HANDLE; + + VkAccelerationStructureBuildGeometryInfoKHR geometry_info; + std::unique_ptr geometry_info_memory; + std::vector build_range_infos; + std::unordered_map input_buffers; +}; + +struct AccelerationStructureCopyCommandData +{ + format::HandleId device; + VkCopyAccelerationStructureInfoKHR info; +}; + +struct AccelerationStructureWritePropertiesCommandData +{ + format::HandleId device; + VkQueryType query_type; +}; + +struct AccelerationStructureBuildState +{ + VkAccelerationStructureTypeKHR type = VK_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_KHR; + std::optional latest_build_command{ std::nullopt }; + std::optional latest_copy_command{ std::nullopt }; + std::optional latest_write_properties_command{ std::nullopt }; +}; + +GFXRECON_END_NAMESPACE(encode) +GFXRECON_END_NAMESPACE(gfxrecon) +#endif // GFXRECON_ENCODE_VULKAN_ACCELERATION_STRUCTURE_BUILD_STATE_H diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_capture_common.cpp b/third_party/gfxreconstruct/framework/encode/vulkan_capture_common.cpp index 436c5a96a..60e9f56c1 100644 --- a/third_party/gfxreconstruct/framework/encode/vulkan_capture_common.cpp +++ b/third_party/gfxreconstruct/framework/encode/vulkan_capture_common.cpp @@ -21,6 +21,7 @@ */ #include "vulkan_capture_common.h" +#include "Vulkan-Utility-Libraries/vk_format_utils.h" #if defined(VK_USE_PLATFORM_ANDROID_KHR) #include @@ -129,6 +130,20 @@ static void CommonWriteFillMemoryCmd(format::HandleId memory_id, } } +// Wrap vkuFormatRequiresYcbcrConversion so that we handle VK_FORMAT_UNDEFINED as a YCbCr format which applies for AHB +// external formats +static bool ExternalFormatRequiresYcbcrConversion(VkFormat format) +{ + if (format == VK_FORMAT_UNDEFINED) + { + return true; + } + else + { + return vkuFormatRequiresYcbcrConversion(format); + } +} + void CommonProcessHardwareBuffer(format::ThreadId thread_id, const vulkan_wrappers::DeviceWrapper* device_wrapper, format::HandleId memory_id, @@ -402,11 +417,12 @@ void CommonProcessHardwareBuffer(format::ThreadId thread_id sampler_ycbcr_conversion_info.pNext = nullptr; sampler_ycbcr_conversion_info.conversion = ycbcr_conversion; - auto ahb_image_aspect_mask = graphics::GetFormatAspectMask(format_properties.format); + auto ahb_image_aspect_mask = graphics::GetFormatAspects(format_properties.format); VkImageViewCreateInfo image_view_create_info; - image_view_create_info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; - image_view_create_info.pNext = &sampler_ycbcr_conversion_info; + image_view_create_info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; + image_view_create_info.pNext = + ExternalFormatRequiresYcbcrConversion(format_properties.format) ? &sampler_ycbcr_conversion_info : nullptr; image_view_create_info.flags = 0u; image_view_create_info.image = ahb_image; image_view_create_info.viewType = VK_IMAGE_VIEW_TYPE_2D; @@ -426,8 +442,9 @@ void CommonProcessHardwareBuffer(format::ThreadId thread_id vk_result = device_table->CreateImageView(device, &image_view_create_info, nullptr, &image_view); VkSamplerCreateInfo sampler_create_info; - sampler_create_info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; - sampler_create_info.pNext = &sampler_ycbcr_conversion_info; + sampler_create_info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; + sampler_create_info.pNext = + ExternalFormatRequiresYcbcrConversion(format_properties.format) ? &sampler_ycbcr_conversion_info : nullptr; sampler_create_info.flags = 0u; sampler_create_info.magFilter = VK_FILTER_LINEAR; sampler_create_info.minFilter = VK_FILTER_LINEAR; @@ -508,7 +525,7 @@ void CommonProcessHardwareBuffer(format::ThreadId thread_id if (vk_result == VK_SUCCESS) vk_result = device_table->BindImageMemory(device, host_image, host_image_memory, 0); - auto host_image_aspect_mask = graphics::GetFormatAspectMask(host_image_format); + auto host_image_aspect_mask = graphics::GetFormatAspects(host_image_format); VkImageViewCreateInfo host_image_view_create_info{ VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, nullptr }; host_image_view_create_info.flags = 0u; diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_capture_layer_settings.cpp b/third_party/gfxreconstruct/framework/encode/vulkan_capture_layer_settings.cpp new file mode 100644 index 000000000..affeda59e --- /dev/null +++ b/third_party/gfxreconstruct/framework/encode/vulkan_capture_layer_settings.cpp @@ -0,0 +1,123 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#include "encode/vulkan_capture_layer_settings.h" + +#include "graphics/vulkan_struct_get_pnext.h" + +#include "encode/capture_settings.h" + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(encode) + +/// @return Capture file name extracted from `VkLayerSettingEXT` when successful, otherwise the +/// `CaptureSettings::kDefaultCaptureFileName` default value. +std::string GetCaptureFileName(const VkLayerSettingEXT& setting) +{ + + if (setting.type != VK_LAYER_SETTING_TYPE_STRING_EXT) + { + GFXRECON_LOG_ERROR("Expected setting type for '%s' to be " + "VK_LAYER_SETTING_TYPE_STRING_EXT, but got %d", + CAPTURE_FILE_NAME_LOWER, + setting.type); + return CaptureSettings::kDefaultCaptureFileName; + } + if (setting.valueCount != 1) + { + GFXRECON_LOG_ERROR( + "Expected value count for '%s' setting to be 1, but got %d", CAPTURE_FILE_NAME_LOWER, setting.valueCount); + return CaptureSettings::kDefaultCaptureFileName; + } + if (setting.pValues == nullptr) + { + GFXRECON_LOG_ERROR("Expected non-null array of values for '%s' setting", CAPTURE_FILE_NAME_LOWER); + return CaptureSettings::kDefaultCaptureFileName; + } + + auto* values = reinterpret_cast(setting.pValues); + + if (values[0] == nullptr) + { + GFXRECON_LOG_ERROR("Expected non-null value for '%s' setting", CAPTURE_FILE_NAME_LOWER); + return CaptureSettings::kDefaultCaptureFileName; + } + + return std::string(values[0]); +} + +CaptureSettings::TraceSettings GetVulkanLayerTraceSettings(const VkInstanceCreateInfo* pCreateInfo) +{ + CaptureSettings::TraceSettings layer_settings; + + if (pCreateInfo == nullptr) + { + return layer_settings; + } + + // There can be multiple VkLayerSettingsCreateInfoEXT structures in the pNext chain. + const VkBaseInStructure* p_next = reinterpret_cast(pCreateInfo); + while (p_next != nullptr) + { + const auto* settings_create_info = graphics::vulkan_struct_get_pnext(p_next); + if (settings_create_info == nullptr) + { + // No more to find + break; + } + + if (settings_create_info->settingCount > 0 && settings_create_info->pSettings == nullptr) + { + GFXRECON_LOG_ERROR("Expected non-null pSettings for VkLayerSettingsCreateInfoEXT with settingCount > 0"); + break; + } + + static const char* VK_LAYER_NAME = "VK_LAYER_LUNARG_gfxreconstruct"; + for (uint32_t i = 0; i < settings_create_info->settingCount; ++i) + { + const VkLayerSettingEXT& setting = settings_create_info->pSettings[i]; + + // Only add settings for the GFXReconstruct layer + if (setting.pLayerName != nullptr && strcmp(setting.pLayerName, VK_LAYER_NAME) == 0) + { + if (setting.pSettingName == nullptr) + { + GFXRECON_LOG_ERROR("Setting name is null for layer '%s'", VK_LAYER_NAME); + continue; + } + + // Get capture name setting + if (strcmp(setting.pSettingName, CAPTURE_FILE_NAME_LOWER) == 0) + { + layer_settings.capture_file = GetCaptureFileName(setting); + } + } + } + + p_next = reinterpret_cast(settings_create_info->pNext); + } + + return layer_settings; +} + +GFXRECON_END_NAMESPACE(encode) +GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_capture_layer_settings.h b/third_party/gfxreconstruct/framework/encode/vulkan_capture_layer_settings.h new file mode 100644 index 000000000..155ce0ebb --- /dev/null +++ b/third_party/gfxreconstruct/framework/encode/vulkan_capture_layer_settings.h @@ -0,0 +1,45 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_FRAMEWORK_ENCODE_VULKAN_LAYER_SETTINGS_H +#define GFXRECON_FRAMEWORK_ENCODE_VULKAN_LAYER_SETTINGS_H + +#include "vulkan/vulkan.h" + +#include "encode/capture_settings.h" + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(encode) + +/// @brief Extracts the capture layer settings from a `VkInstanceCreateInfo` structure. +/// +/// @param pCreateInfo A pointer to a `VkInstanceCreateInfo` structure which might contain one or more +/// `VkLayerSettingsCreateInfoEXT` structures in its `pNext` chain. +/// +/// @note This function only extracts settings for `VK_LAYER_LUNARG_gfxreconstruct`. +/// +/// @return A `TraceSettings` object containing the extracted settings. +CaptureSettings::TraceSettings GetVulkanLayerTraceSettings(const VkInstanceCreateInfo* pCreateInfo); +GFXRECON_END_NAMESPACE(encode) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // GFXRECON_FRAMEWORK_ENCODE_VULKAN_LAYER_SETTINGS_H diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_capture_manager.cpp b/third_party/gfxreconstruct/framework/encode/vulkan_capture_manager.cpp index 253823f84..f76aa2045 100644 --- a/third_party/gfxreconstruct/framework/encode/vulkan_capture_manager.cpp +++ b/third_party/gfxreconstruct/framework/encode/vulkan_capture_manager.cpp @@ -1,7 +1,7 @@ /* ** Copyright (c) 2018-2021 Valve Corporation ** Copyright (c) 2018-2025 LunarG, Inc. - ** Copyright (c) 2019-2023 Advanced Micro Devices, Inc. All rights reserved. + ** Copyright (c) 2019-2025 Advanced Micro Devices, Inc. All rights reserved. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -34,12 +34,14 @@ #include "encode/vulkan_handle_wrapper_util.h" #include "encode/vulkan_state_writer.h" #include "encode/vulkan_capture_common.h" +#include "encode/vulkan_capture_layer_settings.h" #include "format/format_util.h" #include "generated/generated_vulkan_struct_handle_wrappers.h" #include "graphics/vulkan_check_buffer_references.h" #include "graphics/vulkan_device_util.h" #include "graphics/vulkan_struct_get_pnext.h" #include "graphics/vulkan_util.h" +#include "graphics/vulkan_feature_util.h" #include "util/compressor.h" #include "util/logging.h" #include "util/page_guard_manager.h" @@ -61,12 +63,12 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(encode) +std::mutex VulkanCaptureManager::instance_lock_; VulkanCaptureManager* VulkanCaptureManager::singleton_ = nullptr; graphics::VulkanLayerTable VulkanCaptureManager::vulkan_layer_table_; bool VulkanCaptureManager::CreateInstance() { - bool result = CommonCaptureManager::CreateInstance(); GFXRECON_ASSERT(singleton_); @@ -80,6 +82,8 @@ bool VulkanCaptureManager::CreateInstance() VulkanCaptureManager* VulkanCaptureManager::InitSingleton() { + std::lock_guard instance_lock(instance_lock_); + if (!singleton_) { singleton_ = new VulkanCaptureManager(); @@ -347,10 +351,10 @@ void VulkanCaptureManager::WriteSetOpaqueAddressCommand(format::HandleId device_ { if (IsCaptureModeWrite()) { - format::SetOpaqueAddressCommand opaque_address_cmd; + format::SetOpaqueAddressCommand opaque_address_cmd{}; auto thread_data = GetThreadData(); - assert(thread_data != nullptr); + GFXRECON_ASSERT(thread_data != nullptr); opaque_address_cmd.meta_header.block_header.type = format::BlockType::kMetaDataBlock; opaque_address_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(opaque_address_cmd); @@ -365,6 +369,34 @@ void VulkanCaptureManager::WriteSetOpaqueAddressCommand(format::HandleId device_ } } +void VulkanCaptureManager::WriteSetOpaqueCaptureDescriptorData(format::HandleId device_id, + format::HandleId object_id, + size_t data_size, + const void* data) +{ + if (IsCaptureModeWrite()) + { + format::SetOpaqueDescriptorDataCommand opaque_descriptor_cmd{}; + + auto thread_data = GetThreadData(); + GFXRECON_ASSERT(thread_data != nullptr); + + opaque_descriptor_cmd.meta_header.block_header.type = format::BlockType::kMetaDataBlock; + opaque_descriptor_cmd.meta_header.block_header.size = + format::GetMetaDataBlockBaseSize(opaque_descriptor_cmd) + data_size; + opaque_descriptor_cmd.meta_header.meta_data_id = format::MakeMetaDataId( + format::ApiFamilyId::ApiFamily_Vulkan, format::MetaDataType::kSetOpaqueCaptureDescriptorDataCommand); + opaque_descriptor_cmd.thread_id = thread_data->thread_id_; + opaque_descriptor_cmd.device_id = device_id; + opaque_descriptor_cmd.object_id = object_id; + + GFXRECON_ASSERT(data_size <= UINT32_MAX); + opaque_descriptor_cmd.data_size = static_cast(data_size); + + CombineAndWriteToFile({ { &opaque_descriptor_cmd, sizeof(opaque_descriptor_cmd) }, { data, data_size } }); + } +} + void VulkanCaptureManager::WriteSetRayTracingShaderGroupHandlesCommand(format::HandleId device_id, format::HandleId pipeline_id, size_t data_size, @@ -478,7 +510,6 @@ void VulkanCaptureManager::SetDescriptorUpdateTemplateInfo(VkDescriptorUpdateTem else if (type == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK) { constexpr size_t byte_stride = 1; - GFXRECON_ASSERT(entry->stride == byte_stride); UpdateTemplateEntryInfo inline_uniform_info; inline_uniform_info.binding = entry->dstBinding; @@ -487,7 +518,7 @@ void VulkanCaptureManager::SetDescriptorUpdateTemplateInfo(VkDescriptorUpdateTem // count is interpreted as number of bytes here inline_uniform_info.count = entry->descriptorCount; inline_uniform_info.offset = entry->offset; - inline_uniform_info.stride = entry->stride; + inline_uniform_info.stride = byte_stride; inline_uniform_info.type = type; info->inline_uniform_block_count += entry->descriptorCount; @@ -548,6 +579,12 @@ VkResult VulkanCaptureManager::OverrideCreateInstance(const VkInstanceCreateInfo { VkResult result = VK_ERROR_INITIALIZATION_FAILED; + if (InitSingleton() == nullptr) + { + return result; + } + singleton_->layer_settings_ = GetVulkanLayerTraceSettings(pCreateInfo); + if (CreateInstance()) { if (singleton_->IsPageGuardMemoryModeExternal()) @@ -647,6 +684,10 @@ VkResult VulkanCaptureManager::OverrideCreateDevice(VkPhysicalDevice const char* const* extensions = pCreateInfo_unwrapped->ppEnabledExtensionNames; std::vector modified_extensions; + std::vector supported_extensions; + graphics::feature_util::GetDeviceExtensions( + physicalDevice, instance_table->EnumerateDeviceExtensionProperties, &supported_extensions); + bool has_ext_mem = false; bool has_ext_mem_host = false; @@ -682,6 +723,40 @@ VkResult VulkanCaptureManager::OverrideCreateDevice(VkPhysicalDevice } } + // Check if VK_EXT_frame_boundary need to be faked (querried but not actually supported by the capture device) + VkBaseOutStructure* frame_boundary_features_parent = nullptr; + VkPhysicalDeviceFrameBoundaryFeaturesEXT* frame_boundary_features = nullptr; + if (graphics::feature_util::IsSupportedExtension(modified_extensions, VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME) && + !graphics::feature_util::IsSupportedExtension(supported_extensions, VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME)) + { + auto iter = std::find_if(modified_extensions.begin(), modified_extensions.end(), [](const char* extension) { + return util::platform::StringCompare(VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME, extension) == 0; + }); + modified_extensions.erase(iter); + + frame_boundary_features_parent = (VkBaseOutStructure*)pCreateInfo_unwrapped; + + while (frame_boundary_features_parent->pNext != nullptr && + frame_boundary_features_parent->pNext->sType != + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT) + { + frame_boundary_features_parent = frame_boundary_features_parent->pNext; + } + + if (frame_boundary_features_parent->pNext == nullptr) + { + frame_boundary_features_parent = nullptr; + } + else + { + frame_boundary_features = + reinterpret_cast(frame_boundary_features_parent->pNext); + frame_boundary_features_parent->pNext = frame_boundary_features_parent->pNext->pNext; + GFXRECON_LOG_WARNING( + "VkPhysicalDeviceFrameBoundaryFeaturesEXT instance was removed from capture device creation"); + } + } + pCreateInfo_unwrapped->enabledExtensionCount = static_cast(modified_extensions.size()); pCreateInfo_unwrapped->ppEnabledExtensionNames = modified_extensions.data(); @@ -767,6 +842,11 @@ VkResult VulkanCaptureManager::OverrideCreateDevice(VkPhysicalDevice } } + if (frame_boundary_features != nullptr) + { + frame_boundary_features_parent->pNext = reinterpret_cast(frame_boundary_features); + } + // Restore modified property/feature create info values to the original application values device_util.RestoreModifiedPhysicalDeviceFeatures(); @@ -830,6 +910,12 @@ VkResult VulkanCaptureManager::OverrideCreateBuffer(VkDevice } } } + + if (device_wrapper->property_feature_info.feature_descriptorBufferCaptureReplay) + { + modified_create_info->flags |= VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT; + } + // create buffer with augmented create- and usage-flags result = device_table->CreateBuffer(device_unwrapped, modified_create_info, pAllocator, pBuffer); @@ -840,10 +926,11 @@ VkResult VulkanCaptureManager::OverrideCreateBuffer(VkDevice vulkan_wrappers::BufferWrapper>( device, vulkan_wrappers::NoParentWrapper::kHandleValue, pBuffer, GetUniqueId); - auto buffer_wrapper = vulkan_wrappers::GetWrapper(*pBuffer); - GFXRECON_ASSERT(buffer_wrapper) - buffer_wrapper->size = modified_create_info->size; - buffer_wrapper->usage = pCreateInfo->usage; + auto* buffer_wrapper = vulkan_wrappers::GetWrapper(*pBuffer); + GFXRECON_ASSERT(buffer_wrapper); + buffer_wrapper->device = device; + buffer_wrapper->size = modified_create_info->size; + buffer_wrapper->usage = pCreateInfo->usage; if (uses_address) { @@ -870,6 +957,29 @@ VkResult VulkanCaptureManager::OverrideCreateBuffer(VkDevice state_tracker_->TrackOpaqueBufferDeviceAddress(device, *pBuffer, opaque_address); } } + + // request and store opaque descriptor-data for this buffer + if (device_wrapper->property_feature_info.feature_descriptorBufferCaptureReplay) + { + std::vector opaque_data(device_wrapper->property_feature_info.descriptor_buffer_properties + .bufferCaptureReplayDescriptorDataSize); + + VkBufferCaptureDescriptorDataInfoEXT descriptor_data_info_ext = { + VK_STRUCTURE_TYPE_BUFFER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT + }; + descriptor_data_info_ext.buffer = buffer_wrapper->handle; + VkResult get_data_result = device_table->GetBufferOpaqueCaptureDescriptorDataEXT( + device_unwrapped, &descriptor_data_info_ext, opaque_data.data()); + GFXRECON_ASSERT(get_data_result == VK_SUCCESS); + + WriteSetOpaqueCaptureDescriptorData( + device_wrapper->handle_id, buffer_wrapper->handle_id, opaque_data.size(), opaque_data.data()); + + if (IsCaptureModeTrack()) + { + buffer_wrapper->opaque_descriptor_data = std::move(opaque_data); + } + } } return result; } @@ -880,6 +990,8 @@ VkResult VulkanCaptureManager::OverrideCreateImage(VkDevice VkImage* pImage) { auto handle_unwrap_memory = VulkanCaptureManager::Get()->GetHandleUnwrapMemory(); + auto* device_wrapper = vulkan_wrappers::GetWrapper(device); + auto* device_table = vulkan_wrappers::GetDeviceTable(device); const VkImageCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); @@ -890,8 +1002,12 @@ VkResult VulkanCaptureManager::OverrideCreateImage(VkDevice modified_create_info.usage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; } - VkResult result = - vulkan_wrappers::GetDeviceTable(device)->CreateImage(device, &modified_create_info, pAllocator, pImage); + if (device_wrapper->property_feature_info.feature_descriptorBufferCaptureReplay) + { + modified_create_info.flags |= VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT; + } + + VkResult result = device_table->CreateImage(device, &modified_create_info, pAllocator, pImage); if (result >= 0) { @@ -900,8 +1016,10 @@ VkResult VulkanCaptureManager::OverrideCreateImage(VkDevice vulkan_wrappers::ImageWrapper>( device, vulkan_wrappers::NoParentWrapper::kHandleValue, pImage, VulkanCaptureManager::GetUniqueId); - auto image_wrapper = vulkan_wrappers::GetWrapper(*pImage); + auto* image_wrapper = vulkan_wrappers::GetWrapper(*pImage); GFXRECON_ASSERT(image_wrapper); + image_wrapper->bind_device = device_wrapper; + // These are required to generate a fill command in case external memory is bound to this image image_wrapper->image_type = modified_create_info.imageType; image_wrapper->extent = modified_create_info.extent; @@ -916,6 +1034,137 @@ VkResult VulkanCaptureManager::OverrideCreateImage(VkDevice { image_wrapper->queue_family_index = modified_create_info.pQueueFamilyIndices[0]; } + + // request and store opaque descriptor-data for image + if (device_wrapper->property_feature_info.feature_descriptorBufferCaptureReplay) + { + std::vector opaque_data(device_wrapper->property_feature_info.descriptor_buffer_properties + .imageCaptureReplayDescriptorDataSize); + + VkImageCaptureDescriptorDataInfoEXT descriptor_data_info_ext = { + VK_STRUCTURE_TYPE_IMAGE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT + }; + descriptor_data_info_ext.image = image_wrapper->handle; + VkResult get_data_result = device_table->GetImageOpaqueCaptureDescriptorDataEXT( + device_wrapper->handle, &descriptor_data_info_ext, opaque_data.data()); + GFXRECON_ASSERT(get_data_result == VK_SUCCESS); + + WriteSetOpaqueCaptureDescriptorData( + device_wrapper->handle_id, image_wrapper->handle_id, opaque_data.size(), opaque_data.data()); + + if (IsCaptureModeTrack()) + { + image_wrapper->opaque_descriptor_data = std::move(opaque_data); + } + } + } + return result; +} + +VkResult VulkanCaptureManager::OverrideCreateImageView(VkDevice device, + const VkImageViewCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkImageView* pImageView) +{ + auto* device_wrapper = vulkan_wrappers::GetWrapper(device); + const graphics::VulkanDeviceTable* device_table = vulkan_wrappers::GetDeviceTable(device); + + auto modified_create_info = *pCreateInfo; + + if (device_wrapper->property_feature_info.feature_descriptorBufferCaptureReplay) + { + modified_create_info.flags |= VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT; + } + + VkResult result = device_table->CreateImageView(device, &modified_create_info, pAllocator, pImageView); + + if (result == VK_SUCCESS) + { + vulkan_wrappers::CreateWrappedHandle( + device, vulkan_wrappers::NoParentWrapper::kHandleValue, pImageView, VulkanCaptureManager::GetUniqueId); + auto* image_view_wrapper = vulkan_wrappers::GetWrapper(*pImageView); + GFXRECON_ASSERT(image_view_wrapper); + image_view_wrapper->device_id = device_wrapper->handle_id; + + // request and store opaque descriptor-data for image + if (device_wrapper->property_feature_info.feature_descriptorBufferCaptureReplay) + { + std::vector opaque_data(device_wrapper->property_feature_info.descriptor_buffer_properties + .imageViewCaptureReplayDescriptorDataSize); + + VkImageViewCaptureDescriptorDataInfoEXT descriptor_data_info_ext = { + VK_STRUCTURE_TYPE_IMAGE_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_EXT + }; + descriptor_data_info_ext.imageView = *pImageView; + VkResult get_data_result = device_table->GetImageViewOpaqueCaptureDescriptorDataEXT( + device_wrapper->handle, &descriptor_data_info_ext, opaque_data.data()); + GFXRECON_ASSERT(get_data_result == VK_SUCCESS); + + WriteSetOpaqueCaptureDescriptorData( + device_wrapper->handle_id, image_view_wrapper->handle_id, opaque_data.size(), opaque_data.data()); + + if (IsCaptureModeTrack()) + { + image_view_wrapper->opaque_descriptor_data = std::move(opaque_data); + } + } + } + return result; +} + +VkResult VulkanCaptureManager::OverrideCreateSampler(VkDevice device, + const VkSamplerCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSampler* pSampler) +{ + auto* device_wrapper = vulkan_wrappers::GetWrapper(device); + const graphics::VulkanDeviceTable* device_table = vulkan_wrappers::GetDeviceTable(device); + + auto modified_create_info = *pCreateInfo; + + if (device_wrapper->property_feature_info.feature_descriptorBufferCaptureReplay) + { + modified_create_info.flags |= VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT; + } + + VkResult result = device_table->CreateSampler(device, &modified_create_info, pAllocator, pSampler); + + if (result == VK_SUCCESS) + { + vulkan_wrappers::CreateWrappedHandle( + device, vulkan_wrappers::NoParentWrapper::kHandleValue, pSampler, VulkanCaptureManager::GetUniqueId); + auto* sampler_wrapper = vulkan_wrappers::GetWrapper(*pSampler); + GFXRECON_ASSERT(sampler_wrapper); + + // keep track of device_id + sampler_wrapper->device_id = device_wrapper->handle_id; + + // request and store opaque descriptor-data for image + if (device_wrapper->property_feature_info.feature_descriptorBufferCaptureReplay) + { + std::vector opaque_data(device_wrapper->property_feature_info.descriptor_buffer_properties + .samplerCaptureReplayDescriptorDataSize); + + VkSamplerCaptureDescriptorDataInfoEXT descriptor_data_info_ext = { + VK_STRUCTURE_TYPE_SAMPLER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT + }; + descriptor_data_info_ext.sampler = *pSampler; + VkResult get_data_result = device_table->GetSamplerOpaqueCaptureDescriptorDataEXT( + device_wrapper->handle, &descriptor_data_info_ext, opaque_data.data()); + GFXRECON_ASSERT(get_data_result == VK_SUCCESS); + + WriteSetOpaqueCaptureDescriptorData( + device_wrapper->handle_id, sampler_wrapper->handle_id, opaque_data.size(), opaque_data.data()); + + if (IsCaptureModeTrack()) + { + sampler_wrapper->opaque_descriptor_data = std::move(opaque_data); + } + } } return result; } @@ -940,6 +1189,12 @@ VulkanCaptureManager::OverrideCreateAccelerationStructureKHR(VkDevice modified_create_info->createFlags |= VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR; } + if (device_wrapper->property_feature_info.feature_descriptorBufferCaptureReplay) + { + // Add flag to allow for opaque descriptor-data capture + modified_create_info->createFlags |= VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT; + } + VkResult result = device_table->CreateAccelerationStructureKHR( device_unwrapped, modified_create_info, pAllocator, pAccelerationStructureKHR); @@ -950,7 +1205,7 @@ VulkanCaptureManager::OverrideCreateAccelerationStructureKHR(VkDevice vulkan_wrappers::AccelerationStructureKHRWrapper>( device, vulkan_wrappers::NoParentWrapper::kHandleValue, pAccelerationStructureKHR, GetUniqueId); - auto accel_struct_wrapper = + auto* accel_struct_wrapper = vulkan_wrappers::GetWrapper(*pAccelerationStructureKHR); VkAccelerationStructureDeviceAddressInfoKHR address_info{ @@ -965,6 +1220,17 @@ VulkanCaptureManager::OverrideCreateAccelerationStructureKHR(VkDevice accel_struct_wrapper->address = address; accel_struct_wrapper->type = modified_create_info->type; + auto* buffer_wrapper = + vulkan_wrappers::GetWrapper(modified_create_info->buffer, true); + GFXRECON_ASSERT(buffer_wrapper != nullptr); + + accel_struct_wrapper->buffer = buffer_wrapper; + accel_struct_wrapper->offset = modified_create_info->offset; + accel_struct_wrapper->size = modified_create_info->size; + + // associated buffer keeps track of existing acceleration-structures + buffer_wrapper->acceleration_structures[accel_struct_wrapper->address].type = accel_struct_wrapper->type; + if (IsCaptureModeTrack()) { state_tracker_->TrackAccelerationStructureKHRDeviceAddress(device, *pAccelerationStructureKHR, address); @@ -974,6 +1240,29 @@ VulkanCaptureManager::OverrideCreateAccelerationStructureKHR(VkDevice { WriteSetOpaqueAddressCommand(device_wrapper->handle_id, accel_struct_wrapper->handle_id, address); } + + // request and store opaque descriptor-data for the acceleration-structure + if (device_wrapper->property_feature_info.feature_descriptorBufferCaptureReplay) + { + std::vector opaque_data(device_wrapper->property_feature_info.descriptor_buffer_properties + .accelerationStructureCaptureReplayDescriptorDataSize); + + VkAccelerationStructureCaptureDescriptorDataInfoEXT descriptor_data_info_ext = { + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT + }; + descriptor_data_info_ext.accelerationStructure = accel_struct_wrapper->handle; + VkResult get_data_result = device_table->GetAccelerationStructureOpaqueCaptureDescriptorDataEXT( + device_wrapper->handle, &descriptor_data_info_ext, opaque_data.data()); + GFXRECON_ASSERT(get_data_result == VK_SUCCESS); + + WriteSetOpaqueCaptureDescriptorData( + device_wrapper->handle_id, accel_struct_wrapper->handle_id, opaque_data.size(), opaque_data.data()); + + if (IsCaptureModeTrack()) + { + accel_struct_wrapper->opaque_descriptor_data = std::move(opaque_data); + } + } } return result; } @@ -1031,31 +1320,46 @@ VkResult VulkanCaptureManager::OverrideAllocateMemory(VkDevice void* external_memory = nullptr; VkImportMemoryHostPointerInfoEXT import_info; - auto device_wrapper = vulkan_wrappers::GetWrapper(device); - VkDevice device_unwrapped = device_wrapper->handle; - auto handle_unwrap_memory = VulkanCaptureManager::Get()->GetHandleUnwrapMemory(); - VkMemoryAllocateInfo* pAllocateInfo_unwrapped = + auto device_wrapper = vulkan_wrappers::GetWrapper(device); + VkDevice device_unwrapped = device_wrapper->handle; + + auto handle_unwrap_memory = VulkanCaptureManager::Get()->GetHandleUnwrapMemory(); + auto* pAllocateInfo_unwrapped = const_cast(vulkan_wrappers::UnwrapStructPtrHandles(pAllocateInfo, handle_unwrap_memory)); - bool uses_address = false; - VkMemoryAllocateFlags* modified_alloc_flags = nullptr; - VkMemoryAllocateFlags incoming_alloc_flags; + bool uses_address = false; + std::optional optional_alloc_flags_info; + if (device_wrapper->property_feature_info.feature_bufferDeviceAddressCaptureReplay) { - if (auto alloc_flags_info = + if (auto* alloc_flags_info = graphics::vulkan_struct_get_pnext(pAllocateInfo_unwrapped)) { - if ((alloc_flags_info->flags & VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT) == - VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT) + optional_alloc_flags_info = *alloc_flags_info; + + if (alloc_flags_info->flags & VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT) { - uses_address = true; - incoming_alloc_flags = alloc_flags_info->flags; + uses_address = true; alloc_flags_info->flags |= VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT; - modified_alloc_flags = &(alloc_flags_info->flags); } } } + if (device_wrapper->property_feature_info.feature_descriptorBufferCaptureReplay) + { + uses_address = true; + + if (!optional_alloc_flags_info) + { + optional_alloc_flags_info.emplace(); + optional_alloc_flags_info->sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO; + } + optional_alloc_flags_info->pNext = nullptr; + optional_alloc_flags_info->flags |= + VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT | VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT; + graphics::vulkan_struct_add_pnext(pAllocateInfo_unwrapped, &optional_alloc_flags_info.value()); + } + #if defined(VK_USE_PLATFORM_ANDROID_KHR) // If image is not VK_NULL_HANDLE and the memory is not an imported Android Hardware Buffer auto dedicated_alloc_info = @@ -1104,13 +1408,7 @@ VkResult VulkanCaptureManager::OverrideAllocateMemory(VkDevice import_info.pHostPointer = external_memory; // TODO: Check pNext chain for use of incompatible extension types. - VkBaseOutStructure* end = reinterpret_cast(pAllocateInfo_unwrapped); - while (end->pNext != nullptr) - { - end = end->pNext; - } - - end->pNext = reinterpret_cast(&import_info); + graphics::vulkan_struct_add_pnext(pAllocateInfo_unwrapped, &import_info); } } } @@ -1125,15 +1423,11 @@ VkResult VulkanCaptureManager::OverrideAllocateMemory(VkDevice vulkan_wrappers::DeviceMemoryWrapper>( device, vulkan_wrappers::NoParentWrapper::kHandleValue, pMemory, GetUniqueId); - assert(pMemory != nullptr); - auto memory_wrapper = vulkan_wrappers::GetWrapper(*pMemory); + GFXRECON_ASSERT(pMemory != nullptr); + auto* memory_wrapper = vulkan_wrappers::GetWrapper(*pMemory); if (uses_address) { - // Restore modified allocation flags - assert(modified_alloc_flags != nullptr); - *modified_alloc_flags = incoming_alloc_flags; - VkDeviceMemoryOpaqueCaptureAddressInfo info{ VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO, nullptr, memory_wrapper->handle }; @@ -1155,6 +1449,10 @@ VkResult VulkanCaptureManager::OverrideAllocateMemory(VkDevice if (IsCaptureModeTrack()) { state_tracker_->TrackDeviceMemoryDeviceAddress(device, *pMemory, address); + + // keep track of modified allocation-params + memory_wrapper->modified_allocation_info = vulkan_trackers::TrackStructs( + pAllocateInfo_unwrapped, 1, memory_wrapper->modified_allocation_info_data); } } @@ -1213,7 +1511,7 @@ void VulkanCaptureManager::OverrideGetPhysicalDeviceProperties2(VkPhysicalDevice vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceProperties2KHR(physicalDevice, pProperties); } - if (auto raytracing_props = + if (auto* raytracing_props = graphics::vulkan_struct_get_pnext(pProperties)) { if (IsCaptureModeTrack()) @@ -1222,7 +1520,7 @@ void VulkanCaptureManager::OverrideGetPhysicalDeviceProperties2(VkPhysicalDevice } } - if (auto acceleration_props = + if (auto* acceleration_props = graphics::vulkan_struct_get_pnext(pProperties)) { if (IsCaptureModeTrack()) @@ -1230,6 +1528,15 @@ void VulkanCaptureManager::OverrideGetPhysicalDeviceProperties2(VkPhysicalDevice state_tracker_->TrackAccelerationStructureProperties(physicalDevice, acceleration_props); } } + + if (auto* descriptor_buffer_props = + graphics::vulkan_struct_get_pnext(pProperties)) + { + if (IsCaptureModeTrack()) + { + state_tracker_->TrackDescriptorBufferProperties(physicalDevice, descriptor_buffer_props); + } + } } VkResult VulkanCaptureManager::OverrideGetPhysicalDeviceToolPropertiesEXT( @@ -1249,8 +1556,8 @@ VkResult VulkanCaptureManager::OverrideGetPhysicalDeviceToolPropertiesEXT( util::platform::StringCopy(pToolProperties->version, VK_MAX_EXTENSION_NAME_SIZE, - GFXRECON_PROJECT_VERSION_STRING, - util::platform::StringLength(GFXRECON_PROJECT_VERSION_STRING)); + GetProjectVersionString(), + util::platform::StringLength(GetProjectVersionString())); util::platform::StringCopy(pToolProperties->description, VK_MAX_DESCRIPTION_SIZE, @@ -1524,6 +1831,8 @@ void VulkanCaptureManager::DeferredOperationPostProcess(VkDevice d device_wrapper->property_feature_info.property_shaderGroupHandleCaptureReplaySize * deferred_operation_wrapper->create_infos[i].groupCount; + pipeline_wrapper->num_shader_group_handles = deferred_operation_wrapper->create_infos[i].groupCount; + std::vector data(data_size); result = device_table->GetRayTracingCaptureReplayShaderGroupHandlesKHR( device_wrapper->handle, @@ -1713,27 +2022,6 @@ VkResult VulkanCaptureManager::OverrideAllocateCommandBuffers(VkDevice return result; } -VkResult VulkanCaptureManager::OverrideBeginCommandBuffer(VkCommandBuffer commandBuffer, - const VkCommandBufferBeginInfo* pBeginInfo) -{ - auto handle_unwrap_memory = VulkanCaptureManager::Get()->GetHandleUnwrapMemory(); - auto pBeginInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBeginInfo, handle_unwrap_memory); - - auto modified_begin_info = (*pBeginInfo_unwrapped); - - const auto command_buffer_wrapper = - vulkan_wrappers::GetWrapper(commandBuffer); - - // If command buffer level is primary, pInheritanceInfo must be ignored - if (command_buffer_wrapper && command_buffer_wrapper->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY && - modified_begin_info.pInheritanceInfo != nullptr) - { - modified_begin_info.pInheritanceInfo = nullptr; - } - - return vulkan_wrappers::GetDeviceTable(commandBuffer)->BeginCommandBuffer(commandBuffer, &modified_begin_info); -} - void VulkanCaptureManager::ProcessEnumeratePhysicalDevices(VkResult result, VkInstance instance, uint32_t count, @@ -1968,7 +2256,7 @@ void VulkanCaptureManager::ProcessImportFdForBuffer(VkDevice device, VkBuffer bu buffer, buffer_wrapper->size, memoryOffset, buffer_wrapper->queue_family_index, data); if (result == VK_SUCCESS) { - WriteBeginResourceInitCmd(device_wrapper->handle_id, buffer_wrapper->size); + WriteBeginResourceInitCmd(device_wrapper->handle_id, buffer_wrapper->size, buffer_wrapper->size); GetCommandWriter()->WriteInitBufferCmd(api_family_, device_wrapper->handle_id, @@ -2004,8 +2292,7 @@ void VulkanCaptureManager::ProcessImportFdForImage(VkDevice device, VkImage imag // Combined size of all layers in a mip level. std::vector level_sizes; - uint64_t resource_size = resource_util.GetImageResourceSizesOptimal(img.image, - img.format, + uint64_t resource_size = resource_util.GetImageResourceSizesOptimal(img.format, img.type, img.extent, img.level_count, @@ -2017,7 +2304,7 @@ void VulkanCaptureManager::ProcessImportFdForImage(VkDevice device, VkImage imag true); GFXRECON_ASSERT(resource_size == num_bytes); - WriteBeginResourceInitCmd(device_wrapper->handle_id, resource_size); + WriteBeginResourceInitCmd(device_wrapper->handle_id, resource_size, resource_size); GetCommandWriter()->WriteInitImageCmd(api_family_, device_wrapper->handle_id, img.handle_id, @@ -2360,6 +2647,12 @@ void VulkanCaptureManager::PostProcess_vkAcquireNextImage2KHR(VkResult result, { if (IsCaptureModeTrack()) { + if (pAcquireInfo != nullptr && pAcquireInfo->fence != VK_NULL_HANDLE) + { + auto* fence_wrapper = vulkan_wrappers::GetWrapper(pAcquireInfo->fence); + fence_wrapper->in_flight = true; + } + GFXRECON_ASSERT((state_tracker_ != nullptr) && (pAcquireInfo != nullptr) && (index != nullptr)); state_tracker_->TrackSemaphoreSignalState(pAcquireInfo->semaphore); state_tracker_->TrackAcquireImage(*index, @@ -2407,6 +2700,7 @@ void VulkanCaptureManager::PostProcess_vkQueuePresentKHR( pPresentInfo->waitSemaphoreCount, pPresentInfo->pWaitSemaphores, 0, nullptr); state_tracker_->TrackPresentedImages( pPresentInfo->swapchainCount, pPresentInfo->pSwapchains, pPresentInfo->pImageIndices, queue); + state_tracker_->TrackPresentFences(pPresentInfo); } else { @@ -2451,7 +2745,7 @@ void VulkanCaptureManager::PostProcess_vkMapMemory(VkResult result, if (IsCaptureModeTrack()) { assert(state_tracker_ != nullptr); - state_tracker_->TrackMappedMemory(device, memory, (*ppData), offset, size, flags, GetUseAssetFile()); + state_tracker_->TrackMappedMemory(device, memory, (*ppData), offset, size, flags); } else { @@ -2625,20 +2919,12 @@ void VulkanCaptureManager::PreProcess_vkUnmapMemory(VkDevice device, VkDeviceMem if (wrapper->mapped_data != nullptr) { - // Make sure state tracker's TrackMappedMemory is called before ProcessMemoryEntry is called which resets - // pages status - if (IsCaptureModeTrack()) - { - assert(state_tracker_ != nullptr); - state_tracker_->TrackMappedMemory(device, memory, nullptr, 0, 0, 0, GetUseAssetFile()); - } - else + // Make sure to call state tracker's TrackAssetsInMemory is called before ProcessMemoryEntry + // which resets pages' status + if (IsCaptureModeTrack() && GetUseAssetFile()) { - // Perform subset of the state tracking performed by VulkanStateTracker::TrackMappedMemory, only storing - // values needed for non-tracking capture. - wrapper->mapped_data = nullptr; - wrapper->mapped_offset = 0; - wrapper->mapped_size = 0; + GFXRECON_ASSERT(state_tracker_ != nullptr); + state_tracker_->TrackAssetsInMemory(wrapper->handle_id); } if (GetMemoryTrackingMode() == CaptureSettings::MemoryTrackingMode::kPageGuard || @@ -2672,6 +2958,20 @@ void VulkanCaptureManager::PreProcess_vkUnmapMemory(VkDevice device, VkDeviceMem mapped_memory_.erase(wrapper); } } + + if (IsCaptureModeTrack()) + { + GFXRECON_ASSERT(state_tracker_ != nullptr); + state_tracker_->TrackMappedMemory(device, memory, nullptr, 0, 0, 0); + } + else + { + // Perform subset of the state tracking performed by VulkanStateTracker::TrackMappedMemory, only storing + // values needed for non-tracking capture. + wrapper->mapped_data = nullptr; + wrapper->mapped_offset = 0; + wrapper->mapped_size = 0; + } } else { @@ -2862,6 +3162,12 @@ void VulkanCaptureManager::PreProcess_vkQueueSubmit(std::shared_lock(fence); + fence_wrapper->in_flight = true; + } + for (uint32_t s = 0; s < submitCount; ++s) { state_tracker_->TrackCommandBuffersSubmision(pSubmits[s].commandBufferCount, @@ -2899,6 +3205,12 @@ void VulkanCaptureManager::PreProcess_vkQueueSubmit2( std::vector command_buffs; if (pSubmits) { + if (fence != VK_NULL_HANDLE) + { + auto* fence_wrapper = vulkan_wrappers::GetWrapper(fence); + fence_wrapper->in_flight = true; + } + for (uint32_t s = 0; s < submitCount; ++s) { if (pSubmits[s].pCommandBufferInfos) @@ -3256,6 +3568,25 @@ void VulkanCaptureManager::PreProcess_vkBindImageMemory2(VkDevice } } +void VulkanCaptureManager::PreProcess_vkQueueBindSparse(VkQueue queue, + uint32_t bindInfoCount, + const VkBindSparseInfo* pBindInfo, + VkFence fence) +{ + GFXRECON_UNREFERENCED_PARAMETER(queue); + GFXRECON_UNREFERENCED_PARAMETER(bindInfoCount); + GFXRECON_UNREFERENCED_PARAMETER(pBindInfo); + + if (IsCaptureModeTrack() && fence != VK_NULL_HANDLE) + { + auto* fence_wrapper = vulkan_wrappers::GetWrapper(fence); + if (fence_wrapper != nullptr) + { + fence_wrapper->in_flight = true; + } + } +} + #if ENABLE_OPENXR_SUPPORT void VulkanCaptureManager::PreProcess_vkDestroyFence(VkDevice device, VkFence fence, @@ -3320,6 +3651,75 @@ void VulkanCaptureManager::PreProcess_vkWaitForFences( } #endif +void VulkanCaptureManager::PostProcess_vkResetFences(VkResult result, + VkDevice device, + uint32_t fenceCount, + const VkFence* pFences) +{ + GFXRECON_UNREFERENCED_PARAMETER(result); + GFXRECON_UNREFERENCED_PARAMETER(device); + + if (IsCaptureModeTrack()) + { + for (uint32_t i = 0; i < fenceCount; ++i) + { + auto* fence_wrapper = vulkan_wrappers::GetWrapper(pFences[i]); + if (fence_wrapper != nullptr) + { + fence_wrapper->in_flight = false; + } + } + } +} + +void VulkanCaptureManager::PostProcess_vkWaitForFences( + VkResult result, VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout) +{ + GFXRECON_UNREFERENCED_PARAMETER(device); + GFXRECON_UNREFERENCED_PARAMETER(waitAll); + GFXRECON_UNREFERENCED_PARAMETER(timeout); + + if (IsCaptureModeTrack() && result == VK_SUCCESS) + { + for (uint32_t i = 0; i < fenceCount; ++i) + { + auto* fence_wrapper = vulkan_wrappers::GetWrapper(pFences[i]); + if (fence_wrapper != nullptr) + { + fence_wrapper->in_flight = false; + } + } + } +} + +void VulkanCaptureManager::PostProcess_vkGetFenceStatus(VkResult result, VkDevice device, VkFence fence) +{ + GFXRECON_UNREFERENCED_PARAMETER(device); + + if (IsCaptureModeTrack() && result == VK_SUCCESS) + { + auto* fence_wrapper = vulkan_wrappers::GetWrapper(fence); + if (fence_wrapper != nullptr) + { + // fence was already signaled, so clear 'in_flight' flag + fence_wrapper->in_flight = false; + } + } +} + +void VulkanCaptureManager::PreProcess_vkBeginCommandBuffer(VkCommandBuffer commandBuffer, + const VkCommandBufferBeginInfo* pBeginInfo) +{ + const auto* cmd_buffer_wrapper = vulkan_wrappers::GetWrapper(commandBuffer); + + // If command buffer level is primary, pInheritanceInfo must be ignored + if (cmd_buffer_wrapper != nullptr && cmd_buffer_wrapper->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) + { + // const_cast to avoid changes to code-gen + const_cast(pBeginInfo)->pInheritanceInfo = nullptr; + } +} + void VulkanCaptureManager::PostProcess_vkCmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) @@ -4002,6 +4402,7 @@ void VulkanCaptureManager::AddValidFence(VkFence fence) { if (fence != VK_NULL_HANDLE && common_manager_->IsCaptureModeWrite()) { + std::lock_guard lock(fence_mutex); valid_fences_.insert(fence); } } @@ -4010,6 +4411,7 @@ void VulkanCaptureManager::RemoveValidFence(VkFence fence) { if (fence != VK_NULL_HANDLE) { + std::lock_guard lock(fence_mutex); valid_fences_.erase(fence); } } @@ -4020,6 +4422,7 @@ bool VulkanCaptureManager::IsValidFence(VkFence fence) { return true; } + std::lock_guard lock(fence_mutex); return valid_fences_.find(fence) != valid_fences_.end(); } diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_capture_manager.h b/third_party/gfxreconstruct/framework/encode/vulkan_capture_manager.h index 8e99588f9..d09f2f750 100644 --- a/third_party/gfxreconstruct/framework/encode/vulkan_capture_manager.h +++ b/third_party/gfxreconstruct/framework/encode/vulkan_capture_manager.h @@ -30,7 +30,6 @@ #include "encode/capture_settings.h" #include "encode/descriptor_update_template_info.h" #include "encode/parameter_buffer.h" -#include "encode/parameter_encoder.h" #include "encode/vulkan_handle_wrapper_util.h" #include "encode/vulkan_handle_wrappers.h" #include "encode/vulkan_state_tracker.h" @@ -38,7 +37,6 @@ #include "format/format.h" #include "format/platform_types.h" #include "generated/generated_vulkan_dispatch_table.h" -#include "generated/generated_vulkan_command_buffer_util.h" #include "util/defines.h" #include "vulkan/vulkan.h" @@ -50,7 +48,6 @@ #include #include #include -#include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(encode) @@ -310,6 +307,16 @@ class VulkanCaptureManager : public ApiCaptureManager const VkAllocationCallbacks* pAllocator, VkImage* pImage); + VkResult OverrideCreateImageView(VkDevice device, + const VkImageViewCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkImageView* pImageView); + + VkResult OverrideCreateSampler(VkDevice device, + const VkSamplerCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSampler* pSampler); + VkResult OverrideCreateAccelerationStructureKHR(VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, @@ -375,7 +382,7 @@ class VulkanCaptureManager : public ApiCaptureManager const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers); - VkResult OverrideBeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo); + void PreProcess_vkBeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo); void PostProcess_vkBeginCommandBuffer(VkResult result, VkCommandBuffer commandBuffer, @@ -663,9 +670,8 @@ class VulkanCaptureManager : public ApiCaptureManager bind_memory_range_index++) { auto& bind_memory_range = image_bind.pBinds[bind_memory_range_index]; - // TODO: Implement handling for tracking binding information of sparse image - // subresources. - GFXRECON_LOG_ERROR_ONCE("Binding of sparse image blocks is not supported!"); + graphics::UpdateSparseImageMemoryBindMap(wrapper->sparse_subresource_memory_bind_map, + bind_memory_range); } } } @@ -1405,6 +1411,11 @@ class VulkanCaptureManager : public ApiCaptureManager void PreProcess_vkBindImageMemory2(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos); + void PreProcess_vkQueueBindSparse(VkQueue queue, + uint32_t bindInfoCount, + const VkBindSparseInfo* pBindInfo, + VkFence fence); + #if ENABLE_OPENXR_SUPPORT void PreProcess_vkDestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator); void PreProcess_vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences); @@ -1413,6 +1424,15 @@ class VulkanCaptureManager : public ApiCaptureManager VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout); #endif + void PostProcess_vkResetFences(VkResult result, VkDevice device, uint32_t fenceCount, const VkFence* pFences); + void PostProcess_vkWaitForFences(VkResult result, + VkDevice device, + uint32_t fenceCount, + const VkFence* pFences, + VkBool32 waitAll, + uint64_t timeout); + void PostProcess_vkGetFenceStatus(VkResult result, VkDevice device, VkFence fence); + void PostProcess_vkSetPrivateData(VkResult result, VkDevice device, VkObjectType objectType, @@ -1745,6 +1765,11 @@ class VulkanCaptureManager : public ApiCaptureManager const std::string* asset_file_name, util::ThreadData* thread_data) override; + CaptureSettings::TraceSettings GetDefaultTraceSettings() override + { + return layer_settings_; + } + private: struct HardwareBufferInfo { @@ -1766,6 +1791,11 @@ class VulkanCaptureManager : public ApiCaptureManager const VkPhysicalDeviceMemoryProperties& memory_properties); void WriteSetOpaqueAddressCommand(format::HandleId device_id, format::HandleId object_id, uint64_t address); + void WriteSetOpaqueCaptureDescriptorData(format::HandleId device_id, + format::HandleId object_id, + size_t data_size, + const void* data); + void WriteSetRayTracingShaderGroupHandlesCommand(format::HandleId device_id, format::HandleId pipeline_id, size_t data_size, @@ -1798,6 +1828,7 @@ class VulkanCaptureManager : public ApiCaptureManager private: void QueueSubmitWriteFillMemoryCmd(); + static std::mutex instance_lock_; static VulkanCaptureManager* singleton_; static graphics::VulkanLayerTable vulkan_layer_table_; std::set mapped_memory_; // Track mapped memory for unassisted tracking mode. @@ -1811,8 +1842,11 @@ class VulkanCaptureManager : public ApiCaptureManager std::mutex sparse_resource_mutex; #if ENABLE_OPENXR_SUPPORT + std::mutex fence_mutex; std::set valid_fences_; #endif + + CaptureSettings::TraceSettings layer_settings_; }; GFXRECON_END_NAMESPACE(encode) diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_entry_base.cpp b/third_party/gfxreconstruct/framework/encode/vulkan_entry_base.cpp index 276a4f2e7..91803dd20 100644 --- a/third_party/gfxreconstruct/framework/encode/vulkan_entry_base.cpp +++ b/third_party/gfxreconstruct/framework/encode/vulkan_entry_base.cpp @@ -82,10 +82,13 @@ const std::vector VulkanEntryBase::k /// An alphabetical list of device extensions which we do not report upstream if /// other layers or ICDs expose them to us. const std::vector VulkanEntryBase::kVulkanUnsupportedDeviceExtensions = { + VK_KHR_VIDEO_DECODE_H264_EXTENSION_NAME, + VK_KHR_VIDEO_DECODE_H265_EXTENSION_NAME, + VK_KHR_VIDEO_ENCODE_H264_EXTENSION_NAME, + VK_KHR_VIDEO_ENCODE_H265_EXTENSION_NAME, VK_AMDX_SHADER_ENQUEUE_EXTENSION_NAME, VK_ARM_TENSORS_EXTENSION_NAME, VK_ARM_DATA_GRAPH_EXTENSION_NAME, - VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME, VK_EXT_PIPELINE_PROPERTIES_EXTENSION_NAME, VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME, VK_HUAWEI_SUBPASS_SHADING_EXTENSION_NAME, @@ -115,6 +118,157 @@ void VulkanEntryBase::RemoveExtensions(std::vector& exten extensionProps.resize(new_end - extensionProps.begin()); } +PFN_vkVoidFunction VulkanEntryBase::GetInstanceProcAddr(VkInstance instance, const char* pName) +{ + PFN_vkVoidFunction result = nullptr; + + // This is required by the loader and is called directly with an "instance" actually + // set to the internal "loader_instance". Detect that case and return + if (!strcmp(pName, "vkCreateInstance")) + { + return reinterpret_cast(encode::vkCreateInstance); + } + + bool has_implementation = false; + + // Check for implementation in the next level + if (instance != VK_NULL_HANDLE) + { + auto table = encode::vulkan_wrappers::GetInstanceTable(instance); + if ((table != nullptr) && (table->GetInstanceProcAddr != nullptr)) + { + has_implementation = (table->GetInstanceProcAddr(instance, pName) != nullptr); + } + } + + // Check for implementation in the layer itself + if (!has_implementation) + { + for (const auto& ext_props : kVulkanDeviceExtensionProps) + { + if (std::find(ext_props.instance_funcs.begin(), ext_props.instance_funcs.end(), pName) != + ext_props.instance_funcs.end()) + { + has_implementation = true; + break; + } + } + } + + // Only intercept the requested function if there is an implementation available, or if + // the instance handle is null and we can't determine if it is available from the next level. + if (has_implementation || (instance == VK_NULL_HANDLE)) + { + const auto entry = vulkan_function_table_.find(pName); + + if (entry != vulkan_function_table_.end()) + { + result = entry->second; + } + } + + return result; +} + +PFN_vkVoidFunction VulkanEntryBase::GetDeviceProcAddr(VkDevice device, const char* pName) +{ + PFN_vkVoidFunction result = nullptr; + + if (device != VK_NULL_HANDLE) + { + bool has_implementation = false; + + // Check for implementation in the next level + auto table = encode::vulkan_wrappers::GetDeviceTable(device); + if ((table != nullptr) && (table->GetDeviceProcAddr != nullptr)) + { + has_implementation = (table->GetDeviceProcAddr(device, pName) != nullptr); + } + + // Check for implementation in the layer itself + if (!has_implementation) + { + for (const auto& ext_props : kVulkanDeviceExtensionProps) + { + if (std::find(ext_props.device_funcs.begin(), ext_props.device_funcs.end(), pName) != + ext_props.device_funcs.end()) + { + has_implementation = true; + break; + } + } + } + + // Only intercept the requested function if there is an implementation available + if (has_implementation) + { + const auto entry = vulkan_function_table_.find(pName); + if (entry != vulkan_function_table_.end()) + { + result = entry->second; + } + } + } + + return result; +} + +/** + * We don't actually need to do anything for this function, + * but we do need to unwrap the instance before the downstream layer + * sees it. + */ +PFN_vkVoidFunction VulkanEntryBase::GetPhysicalDeviceProcAddr(VkInstance ourInstanceWrapper, const char* pName) +{ + PFN_vkVoidFunction result = nullptr; + + if (ourInstanceWrapper != VK_NULL_HANDLE) + { + PFN_GetPhysicalDeviceProcAddr vulkan_next_gpdpa = GetNextGPDPA(ourInstanceWrapper); + if (vulkan_next_gpdpa != nullptr) + { + result = vulkan_next_gpdpa(ourInstanceWrapper, pName); + } + } + + return result; +} + +VkResult VulkanEntryBase::EnumerateInstanceLayerProperties(uint32_t* pPropertyCount, VkLayerProperties* pProperties) +{ + VkResult result = VK_SUCCESS; + + if (pProperties == nullptr) + { + if (pPropertyCount != nullptr) + { + *pPropertyCount = 1; + } + } + else + { + if ((pPropertyCount != nullptr) && (*pPropertyCount >= 1)) + { + util::platform::MemoryCopy(pProperties, sizeof(*pProperties), &kLayerProps, sizeof(kLayerProps)); + *pPropertyCount = 1; + } + else + { + result = VK_INCOMPLETE; + } + } + + return result; +} + +VkResult VulkanEntryBase::EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkLayerProperties* pProperties) +{ + GFXRECON_UNREFERENCED_PARAMETER(physicalDevice); + return EnumerateInstanceLayerProperties(pPropertyCount, pProperties); +} + const VkLayerInstanceCreateInfo* VulkanEntryBase::GetInstanceChainInfo(const VkInstanceCreateInfo* pCreateInfo, VkLayerFunction func) { diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_entry_base.h b/third_party/gfxreconstruct/framework/encode/vulkan_entry_base.h index 1a2752b32..7029c6fd7 100644 --- a/third_party/gfxreconstruct/framework/encode/vulkan_entry_base.h +++ b/third_party/gfxreconstruct/framework/encode/vulkan_entry_base.h @@ -53,22 +53,20 @@ class VulkanEntryBase VulkanEntryBase(const VulkanFunctionTable& vulkan_function_table) : vulkan_function_table_(vulkan_function_table){}; virtual ~VulkanEntryBase(){}; - // The following prototype declarations are required so the dispatch table can find these - // functions which are defined in trace_layer.cpp - virtual PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* pName) = 0; - virtual PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* pName) = 0; - virtual PFN_vkVoidFunction GetPhysicalDeviceProcAddr(VkInstance ourInstanceWrapper, const char* pName) = 0; + virtual PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* pName); + virtual PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* pName); + virtual PFN_vkVoidFunction GetPhysicalDeviceProcAddr(VkInstance ourInstanceWrapper, const char* pName); virtual VkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, - VkExtensionProperties* pProperties) = 0; + VkExtensionProperties* pProperties) = 0; virtual VkResult EnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pPropertyCount, - VkExtensionProperties* pProperties) = 0; - virtual VkResult EnumerateInstanceLayerProperties(uint32_t* pPropertyCount, VkLayerProperties* pProperties) = 0; + VkExtensionProperties* pProperties) = 0; + virtual VkResult EnumerateInstanceLayerProperties(uint32_t* pPropertyCount, VkLayerProperties* pProperties); virtual VkResult EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, - VkLayerProperties* pProperties) = 0; + VkLayerProperties* pProperties); virtual VkResult dispatch_CreateInstance(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_handle_wrapper_util.h b/third_party/gfxreconstruct/framework/encode/vulkan_handle_wrapper_util.h index 7b4f1e954..72a569ff8 100644 --- a/third_party/gfxreconstruct/framework/encode/vulkan_handle_wrapper_util.h +++ b/third_party/gfxreconstruct/framework/encode/vulkan_handle_wrapper_util.h @@ -460,6 +460,7 @@ inline void CreateWrappedHandle(handle, get_id); wrapper = GetWrapper(*handle); wrapper->is_swapchain_image = true; + wrapper->parent_swapchains.insert(parent_wrapper->handle); parent_wrapper->child_images.push_back(wrapper); } } @@ -651,8 +652,16 @@ inline void DestroyWrappedHandle(VkSwapchainKHR handle) for (auto image_wrapper : wrapper->child_images) { - RemoveWrapper(image_wrapper); - delete image_wrapper; + // Destroy image if the to be destroyed swapchain is the only parent of it. + if (image_wrapper->parent_swapchains.size() == 1) + { + RemoveWrapper(image_wrapper); + delete image_wrapper; + } + else + { + image_wrapper->parent_swapchains.erase(handle); + } } RemoveWrapper(wrapper); diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_handle_wrappers.h b/third_party/gfxreconstruct/framework/encode/vulkan_handle_wrappers.h index 2ca6a01d7..054e75936 100644 --- a/third_party/gfxreconstruct/framework/encode/vulkan_handle_wrappers.h +++ b/third_party/gfxreconstruct/framework/encode/vulkan_handle_wrappers.h @@ -27,6 +27,7 @@ #include "encode/descriptor_update_template_info.h" #include "encode/vulkan_state_info.h" #include "encode/handle_unwrap_memory.h" +#include "encode/vulkan_acceleration_structure_build_state.h" #include "format/format.h" #include "generated/generated_vulkan_dispatch_table.h" #include "graphics/vulkan_util.h" @@ -146,9 +147,10 @@ struct PhysicalDeviceWrapper : public HandleWrapper std::unique_ptr queue_family_properties2; std::vector> queue_family_checkpoint_properties; - // Track RayTracingPipeline / AccelerationStructure properties + // track properties of various physical-device extensions std::optional ray_tracing_pipeline_properties; std::optional acceleration_structure_properties; + std::optional descriptor_buffer_properties; }; struct InstanceWrapper : public HandleWrapper @@ -180,8 +182,11 @@ struct FenceWrapper : public HandleWrapper { // Signaled state at creation to be compared with signaled state at snapshot write. If states are different, the // create parameters will need to be modified to reflect the state at snapshot write. - bool created_signaled{ false }; - DeviceWrapper* device{ nullptr }; + bool created_signaled{ false }; + + // keep track if the fence is currently waiting to be signaled + std::atomic in_flight{ false }; + DeviceWrapper* device{ nullptr }; }; struct EventWrapper : public HandleWrapper @@ -209,25 +214,23 @@ struct BufferViewWrapper; struct BufferWrapper : public HandleWrapper, AssetWrapperBase { // State tracking info for buffers with device addresses. - format::HandleId device_id{ format::kNullHandleId }; + VkDevice device{ VK_NULL_HANDLE }; VkDeviceAddress address{ 0 }; VkDeviceAddress opaque_address{ 0 }; VkBufferUsageFlags usage{ 0 }; std::set buffer_views; - DeviceWrapper* bind_device{ nullptr }; - const void* bind_pnext{ nullptr }; - std::unique_ptr bind_pnext_memory; - bool is_sparse_buffer{ false }; std::map sparse_memory_bind_map; VkQueue sparse_bind_queue; - format::HandleId bind_memory_id{ format::kNullHandleId }; - VkDeviceSize bind_offset{ 0 }; - uint32_t queue_family_index{ 0 }; - VkDeviceSize created_size{ 0 }; + VkDeviceSize created_size{ 0 }; + + std::unordered_map acceleration_structures; + + // optional opaque descriptor-data used by VK_EXT_descriptor_buffer + std::vector opaque_descriptor_data; }; struct ImageViewWrapper; @@ -247,27 +250,26 @@ struct ImageWrapper : public HandleWrapper, AssetWrapperBase std::set image_views; - DeviceWrapper* bind_device{ nullptr }; - const void* bind_pnext{ nullptr }; - std::unique_ptr bind_pnext_memory; - bool is_sparse_image{ false }; std::map sparse_opaque_memory_bind_map; graphics::VulkanSubresourceSparseImageMemoryBindMap sparse_subresource_memory_bind_map; VkQueue sparse_bind_queue; - format::HandleId bind_memory_id{ format::kNullHandleId }; - VkDeviceSize bind_offset{ 0 }; - uint32_t queue_family_index{ 0 }; std::set parent_swapchains; // GOOGLE: We leak fragment density maps to workaround a crash; need to track if it's an FDM. bool is_fdm{ false }; + // optional opaque descriptor-data used by VK_EXT_descriptor_buffer + std::vector opaque_descriptor_data; }; struct SamplerWrapper : public HandleWrapper { + format::HandleId device_id{ format::kNullHandleId }; std::unordered_set descriptor_sets_bound_to; + + // optional opaque descriptor-data used by VK_EXT_descriptor_buffer + std::vector opaque_descriptor_data; }; struct DeviceMemoryWrapper : public HandleWrapper @@ -296,6 +298,10 @@ struct DeviceMemoryWrapper : public HandleWrapper std::unordered_set bound_assets; std::mutex asset_map_lock; + + // optional deep-copy of modified allocate-info, required for state-tracking / trimming + VkMemoryAllocateInfo* modified_allocation_info{ nullptr }; + std::unique_ptr modified_allocation_info_data{ nullptr }; }; struct BufferViewWrapper : public HandleWrapper @@ -308,10 +314,14 @@ struct BufferViewWrapper : public HandleWrapper struct ImageViewWrapper : public HandleWrapper { + format::HandleId device_id{ format::kNullHandleId }; format::HandleId image_id{ format::kNullHandleId }; ImageWrapper* image{ nullptr }; std::unordered_set descriptor_sets_bound_to; + + // optional opaque descriptor-data used by VK_EXT_descriptor_buffer + std::vector opaque_descriptor_data; }; struct FramebufferWrapper : public HandleWrapper @@ -622,55 +632,17 @@ struct AccelerationStructureKHRWrapper : public HandleWrapper blas; VkAccelerationStructureTypeKHR type; - // Only used when tracking - struct ASInputBuffer - { - // Required data to correctly create a buffer - VkBuffer handle{ VK_NULL_HANDLE }; - format::HandleId handle_id{ format::kNullHandleId }; - DeviceWrapper* bind_device{ nullptr }; - uint32_t queue_family_index{ 0 }; - VkDeviceSize created_size{ 0 }; - VkBufferUsageFlags usage{ 0 }; - - bool destroyed{ false }; - - VkDeviceAddress capture_address{ 0 }; - VkDeviceAddress actual_address{ 0 }; - - std::vector bytes; - - VkMemoryRequirements memory_requirements{}; - format::HandleId bind_memory{}; - VkDeviceMemory bind_memory_handle{ VK_NULL_HANDLE }; - }; - - struct AccelerationStructureKHRBuildCommandData - { - VkAccelerationStructureBuildGeometryInfoKHR geometry_info; - std::unique_ptr geometry_info_memory; - std::vector build_range_infos; - std::unordered_map input_buffers; - }; - std::optional latest_update_command_{ std::nullopt }; - std::optional latest_build_command_{ std::nullopt }; - - struct AccelerationStructureCopyCommandData - { - format::HandleId device; - VkCopyAccelerationStructureInfoKHR info; - }; - std::optional latest_copy_command_{ std::nullopt }; - - struct AccelerationStructureWritePropertiesCommandData - { - format::HandleId device; - VkQueryType query_type; - }; - std::optional latest_write_properties_command_{ std::nullopt }; + // associated buffer + BufferWrapper* buffer = nullptr; + VkDeviceSize offset = 0; + VkDeviceSize size = 0; + // Only used when tracking std::unordered_set descriptor_sets_bound_to; + + // optional opaque descriptor-data used by VK_EXT_descriptor_buffer + std::vector opaque_descriptor_data; }; struct AccelerationStructureNVWrapper : public HandleWrapper @@ -695,6 +667,12 @@ struct PipelineCacheWrapper : public HandleWrapper std::vector cache_data; }; +struct DataGraphPipelineSessionARMWrapper : public HandleWrapper, AssetWrapperBase +{ + VkDataGraphPipelineSessionBindPointARM bind_point; + uint32_t object_index; +}; + // Handle alias types for extension handle types that have been promoted to core types. typedef SamplerYcbcrConversionWrapper SamplerYcbcrConversionKHRWrapper; typedef DescriptorUpdateTemplateWrapper DescriptorUpdateTemplateKHRWrapper; diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_state_info.h b/third_party/gfxreconstruct/framework/encode/vulkan_state_info.h index bc529e149..95c050f9d 100644 --- a/third_party/gfxreconstruct/framework/encode/vulkan_state_info.h +++ b/third_party/gfxreconstruct/framework/encode/vulkan_state_info.h @@ -138,6 +138,9 @@ enum CommandHandleType : uint32_t IndirectCommandsLayoutEXTHandle, IndirectExecutionSetEXTHandle, DeviceMemoryHandle, + TensorARMHandle, + TensorViewARMHandle, + DataGraphPipelineSessionARMHandle, NumHandleTypes // THIS MUST BE THE LAST ENUM VALUE ! }; diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_state_tracker.cpp b/third_party/gfxreconstruct/framework/encode/vulkan_state_tracker.cpp index 2c85d78aa..494d1adc4 100644 --- a/third_party/gfxreconstruct/framework/encode/vulkan_state_tracker.cpp +++ b/third_party/gfxreconstruct/framework/encode/vulkan_state_tracker.cpp @@ -1,5 +1,6 @@ /* ** Copyright (c) 2019-2024 LunarG, Inc. +** Copyright (c) 2025 Advanced Micro Devices, Inc. All rights reserved. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and associated documentation files (the "Software"), @@ -367,9 +368,8 @@ void VulkanStateTracker::TrackBufferDeviceAddress(VkDevice device, VkBuffer buff { GFXRECON_ASSERT((device != VK_NULL_HANDLE) && (buffer != VK_NULL_HANDLE)); - auto wrapper = vulkan_wrappers::GetWrapper(buffer); - wrapper->device_id = vulkan_wrappers::GetWrappedId(device); - wrapper->address = address; + auto* wrapper = vulkan_wrappers::GetWrapper(buffer); + wrapper->address = address; device_address_trackers_[device].TrackBuffer(wrapper); } @@ -380,8 +380,7 @@ void VulkanStateTracker::TrackOpaqueBufferDeviceAddress(VkDevice device, { GFXRECON_ASSERT((device != VK_NULL_HANDLE) && (buffer != VK_NULL_HANDLE)); - auto wrapper = vulkan_wrappers::GetWrapper(buffer); - wrapper->device_id = vulkan_wrappers::GetWrappedId(device); + auto* wrapper = vulkan_wrappers::GetWrapper(buffer); wrapper->opaque_address = opaque_address; } @@ -436,7 +435,8 @@ void VulkanStateTracker::TrackAccelerationStructureBuildCommand( auto wrapper = vulkan_wrappers::GetWrapper( build_info.dstAccelerationStructure); - vulkan_wrappers::AccelerationStructureKHRWrapper::AccelerationStructureKHRBuildCommandData dst_command{}; + encode::AccelerationStructureKHRBuildCommandData dst_command{}; + // Extract command information for 1 AccelerationStructure for (uint32_t g = 0; g < build_info.geometryCount; ++g) { @@ -469,6 +469,7 @@ void VulkanStateTracker::TrackAccelerationStructureBuildCommand( } case VK_GEOMETRY_TYPE_SPHERES_NV: case VK_GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV: + case VK_GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX: GFXRECON_LOG_WARNING("Geometry type not supported at " __FILE__ ", line: %d.", __LINE__); break; case VK_GEOMETRY_TYPE_MAX_ENUM_KHR: @@ -482,16 +483,17 @@ void VulkanStateTracker::TrackAccelerationStructureBuildCommand( continue; } - auto target_buffer_wrapper = vulkan_wrappers::GetWrapper( + auto* target_buffer_wrapper = vulkan_wrappers::GetWrapper( device_address_trackers_[device_wrapper->handle].GetBufferByDeviceAddress(address)); GFXRECON_ASSERT(target_buffer_wrapper != nullptr); - if (target_buffer_wrapper != nullptr) + if (target_buffer_wrapper != nullptr && + dst_command.input_buffers.find(target_buffer_wrapper->handle_id) == dst_command.input_buffers.end()) { - vulkan_wrappers::AccelerationStructureKHRWrapper::ASInputBuffer& buffer = + encode::AccelerationStructureInputBuffer& buffer = dst_command.input_buffers[target_buffer_wrapper->handle_id]; - buffer.capture_address = address; + buffer.capture_address = target_buffer_wrapper->address; buffer.handle = target_buffer_wrapper->handle; buffer.handle_id = target_buffer_wrapper->handle_id; buffer.bind_device = target_buffer_wrapper->bind_device; @@ -511,14 +513,18 @@ void VulkanStateTracker::TrackAccelerationStructureBuildCommand( pp_buildRange_infos[i] + build_info.geometryCount); } - if (build_info.mode == VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR) - { - wrapper->latest_build_command_ = std::move(dst_command); - } - else if (build_info.mode == VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR) - { - wrapper->latest_update_command_ = std::move(dst_command); - } + // track all AS builds as regular builds, we'll have no AS to 'update' + GFXRECON_ASSERT(wrapper->address != 0 && wrapper->size != 0); + dst_command.type = wrapper->type; + dst_command.buffer = wrapper->buffer->handle; + dst_command.size = wrapper->size; + dst_command.offset = wrapper->offset; + dst_command.geometry_info.mode = VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR; + dst_command.geometry_info.srcAccelerationStructure = VK_NULL_HANDLE; + + auto& build_state = wrapper->buffer->acceleration_structures[wrapper->address]; + build_state.type = wrapper->type; + build_state.latest_build_command = std::move(dst_command); wrapper->blas.clear(); @@ -552,14 +558,13 @@ void VulkanStateTracker::TrackAccelerationStructureCopyCommand(VkCommandBuffer { return; } - auto wrapper = vulkan_wrappers::GetWrapper(info->src); - if (!wrapper->latest_copy_command_) - { - wrapper->latest_copy_command_ = - vulkan_wrappers::AccelerationStructureKHRWrapper::AccelerationStructureCopyCommandData{}; - } - wrapper->latest_copy_command_->device = wrapper->device->handle_id; - wrapper->latest_copy_command_->info = *info; + auto* wrapper = vulkan_wrappers::GetWrapper(info->src); + GFXRECON_ASSERT(wrapper != nullptr && wrapper->buffer != nullptr); + + // find AS build state in associated buffer + auto& build_state = wrapper->buffer->acceleration_structures[wrapper->address]; + build_state.type = wrapper->type; + build_state.latest_copy_command = { wrapper->device->handle_id, *info }; } void VulkanStateTracker::TrackWriteAccelerationStructuresPropertiesCommand( @@ -577,10 +582,23 @@ void VulkanStateTracker::TrackWriteAccelerationStructuresPropertiesCommand( { auto* wrapper = vulkan_wrappers::GetWrapper(pAccelerationStructures[i]); - wrapper->latest_write_properties_command_ = - vulkan_wrappers::AccelerationStructureKHRWrapper::AccelerationStructureWritePropertiesCommandData{}; - wrapper->latest_write_properties_command_->device = wrapper->device->handle_id; - wrapper->latest_write_properties_command_->query_type = queryType; + + GFXRECON_ASSERT(wrapper != nullptr && wrapper->buffer != nullptr); + + // find AS build state in associated buffer + auto build_state_it = wrapper->buffer->acceleration_structures.find(wrapper->address); + if (build_state_it != wrapper->buffer->acceleration_structures.end()) + { + auto& build_state = build_state_it->second; + build_state.latest_write_properties_command = { wrapper->device->handle_id, queryType }; + } + else + { + GFXRECON_LOG_WARNING( + "Unable to retrieve build-state for acceleration-structure %d from associated buffer %d", + wrapper->handle_id, + wrapper->buffer->handle_id); + } } } @@ -623,8 +641,7 @@ void VulkanStateTracker::TrackMappedMemory(VkDevice device, void* mapped_data, VkDeviceSize mapped_offset, VkDeviceSize mapped_size, - VkMemoryMapFlags mapped_flags, - bool track_assets) + VkMemoryMapFlags mapped_flags) { assert((device != VK_NULL_HANDLE) && (memory != VK_NULL_HANDLE)); @@ -633,12 +650,6 @@ void VulkanStateTracker::TrackMappedMemory(VkDevice device, wrapper->mapped_offset = mapped_offset; wrapper->mapped_size = mapped_size; wrapper->mapped_flags = mapped_flags; - - // Scan assets on unmap - if (track_assets && mapped_data == nullptr) - { - TrackMappedAssetsWrites(wrapper->handle_id); - } } void VulkanStateTracker::TrackBeginRenderPass(VkCommandBuffer command_buffer, const VkRenderPassBeginInfo* begin_info) @@ -852,6 +863,8 @@ void VulkanStateTracker::TrackUpdateDescriptorSets(uint32_t w uint32_t copy_count, const VkCopyDescriptorSet* copies) { + std::unique_lock lock(state_table_mutex_); + // When processing descriptor updates, we pack the unique handle ID into the stored // VkWriteDescriptorSet/VkCopyDescriptorSet handles so that the state writer can determine if the object still // exists at state write time by checking for the ID in the active state table. @@ -1841,17 +1854,43 @@ void VulkanStateTracker::TrackPresentedImages(uint32_t count, } } +void VulkanStateTracker::TrackPresentFences(const VkPresentInfoKHR* present_info) +{ + if (auto* fence_present_info = graphics::vulkan_struct_get_pnext(present_info)) + { + for (uint32_t i = 0; i < fence_present_info->swapchainCount; ++i) + { + auto* fence_wrapper = + vulkan_wrappers::GetWrapper(fence_present_info->pFences[i]); + GFXRECON_ASSERT(fence_wrapper != nullptr); + if (fence_wrapper != nullptr) + { + fence_wrapper->in_flight = true; + } + } + } +} + void VulkanStateTracker::TrackAccelerationStructureKHRDeviceAddress(VkDevice device, VkAccelerationStructureKHR accel_struct, VkDeviceAddress address) { - assert((device != VK_NULL_HANDLE) && (accel_struct != VK_NULL_HANDLE)); + GFXRECON_ASSERT((device != VK_NULL_HANDLE) && (accel_struct != VK_NULL_HANDLE)); - auto wrapper = vulkan_wrappers::GetWrapper(accel_struct); - wrapper->device = vulkan_wrappers::GetWrapper(device); - wrapper->address = address; + auto* as_wrapper = vulkan_wrappers::GetWrapper(accel_struct); + GFXRECON_ASSERT(as_wrapper != nullptr && as_wrapper->buffer != nullptr); + as_wrapper->device = vulkan_wrappers::GetWrapper(device); + as_wrapper->address = address; - device_address_trackers_[device].TrackAccelerationStructure(wrapper); + auto& address_tracker = device_address_trackers_[device]; + address_tracker.TrackAccelerationStructure(as_wrapper); + + // since we know an AS-address we can deduce the buffer-address, if not yet set + if (as_wrapper->buffer->address == 0) + { + as_wrapper->buffer->address = as_wrapper->address - as_wrapper->offset; + address_tracker.TrackBuffer(as_wrapper->buffer); + } } void VulkanStateTracker::TrackDeviceMemoryDeviceAddress(VkDevice device, VkDeviceMemory memory, VkDeviceAddress address) @@ -1882,6 +1921,14 @@ void VulkanStateTracker::TrackAccelerationStructureProperties( wrapper->acceleration_structure_properties->pNext = nullptr; } +void VulkanStateTracker::TrackDescriptorBufferProperties( + VkPhysicalDevice physicalDevice, VkPhysicalDeviceDescriptorBufferPropertiesEXT* descriptor_buffer_properties) +{ + auto* wrapper = vulkan_wrappers::GetWrapper(physicalDevice); + wrapper->descriptor_buffer_properties = *descriptor_buffer_properties; + wrapper->descriptor_buffer_properties->pNext = nullptr; +} + void VulkanStateTracker::TrackRayTracingShaderGroupHandles(VkDevice device, VkPipeline pipeline, size_t data_size, @@ -2023,6 +2070,48 @@ void VulkanStateTracker::DestroyState(vulkan_wrappers::DeviceMemoryWrapper* wrap assert(wrapper != nullptr); wrapper->create_parameters = nullptr; + wrapper->asset_map_lock.lock(); + + // If the memory gets destroyed before the asset(s) it's bound to, dump the AS as we would in the DestroyBuffer call + for (const auto& bound_asset : wrapper->bound_assets) + { + // This works even if the bound asset is not a buffer, as they all derive from HandleWrapper and + // handle_id will contain a valid value + auto* buffer_wrapper = static_cast(bound_asset); + + state_table_.VisitWrappers( + [buffer_wrapper, this](vulkan_wrappers::AccelerationStructureKHRWrapper* acc_wrapper) { + GFXRECON_ASSERT(acc_wrapper != nullptr && acc_wrapper->buffer != nullptr); + auto build_state_it = acc_wrapper->buffer->acceleration_structures.find(acc_wrapper->address); + + if (build_state_it != acc_wrapper->buffer->acceleration_structures.end() && + build_state_it->second.latest_build_command) + { + auto& command = *build_state_it->second.latest_build_command; + + auto it = command.input_buffers.find(buffer_wrapper->handle_id); + if (it != command.input_buffers.end()) + { + encode::AccelerationStructureInputBuffer& buffer = it->second; + buffer.destroyed = true; + auto [resource_util, created] = resource_utils_.try_emplace( + buffer.bind_device->handle, + graphics::VulkanResourcesUtil(buffer.bind_device->handle, + buffer.bind_device->physical_device->handle, + buffer.bind_device->layer_table, + *buffer.bind_device->physical_device->layer_table_ref, + buffer.bind_device->physical_device->memory_properties)); + buffer.bind_device->layer_table.GetBufferMemoryRequirements( + buffer.bind_device->handle, buffer.handle, &buffer.memory_requirements); + resource_util->second.ReadFromBufferResource( + buffer.handle, buffer.created_size, 0, buffer.queue_family_index, buffer.bytes); + } + } + }); + } + + wrapper->asset_map_lock.unlock(); + const auto& entry = device_memory_addresses_map.find(wrapper->address); if (entry != device_memory_addresses_map.end()) { @@ -2030,31 +2119,30 @@ void VulkanStateTracker::DestroyState(vulkan_wrappers::DeviceMemoryWrapper* wrap } } -void gfxrecon::encode::VulkanStateTracker::DestroyState(vulkan_wrappers::BufferWrapper* wrapper) +void gfxrecon::encode::VulkanStateTracker::DestroyState(vulkan_wrappers::BufferWrapper* buffer_wrapper) { - GFXRECON_ASSERT(wrapper != nullptr); - wrapper->create_parameters = nullptr; + GFXRECON_ASSERT(buffer_wrapper != nullptr && buffer_wrapper->device != nullptr); + buffer_wrapper->create_parameters = nullptr; - if (wrapper != nullptr && wrapper->bind_device != nullptr) + if (buffer_wrapper != nullptr && buffer_wrapper->device != nullptr) { - device_address_trackers_[wrapper->bind_device->handle].RemoveBuffer(wrapper); + device_address_trackers_[buffer_wrapper->device].RemoveBuffer(buffer_wrapper); } - state_table_.VisitWrappers([&wrapper, this](vulkan_wrappers::AccelerationStructureKHRWrapper* acc_wrapper) { - GFXRECON_ASSERT(acc_wrapper); - for (auto& command : { &acc_wrapper->latest_build_command_, &acc_wrapper->latest_update_command_ }) - { - if (!command || !command->has_value()) - { - continue; - } + state_table_.VisitWrappers([this, buffer_wrapper](vulkan_wrappers::AccelerationStructureKHRWrapper* acc_wrapper) { + GFXRECON_ASSERT(acc_wrapper != nullptr && acc_wrapper->buffer != nullptr); + auto build_state_it = acc_wrapper->buffer->acceleration_structures.find(acc_wrapper->address); - auto it = (*command)->input_buffers.find(wrapper->handle_id); - if (it != (*command)->input_buffers.end()) + if (build_state_it != acc_wrapper->buffer->acceleration_structures.end() && + build_state_it->second.latest_build_command) + { + auto& command = *build_state_it->second.latest_build_command; + auto it = command.input_buffers.find(buffer_wrapper->handle_id); + if (it != command.input_buffers.end()) { - vulkan_wrappers::AccelerationStructureKHRWrapper::ASInputBuffer& buffer = it->second; - buffer.destroyed = true; - auto [resource_util, created] = resource_utils_.try_emplace( + encode::AccelerationStructureInputBuffer& buffer = it->second; + buffer.destroyed = true; + auto [resource_util, created] = resource_utils_.try_emplace( buffer.bind_device->handle, graphics::VulkanResourcesUtil(buffer.bind_device->handle, buffer.bind_device->physical_device->handle, @@ -2069,15 +2157,15 @@ void gfxrecon::encode::VulkanStateTracker::DestroyState(vulkan_wrappers::BufferW } }); - if (wrapper->bind_memory_id != format::kNullHandleId) + if (buffer_wrapper->bind_memory_id != format::kNullHandleId) { vulkan_wrappers::DeviceMemoryWrapper* mem_wrapper = - state_table_.GetVulkanDeviceMemoryWrapper(wrapper->bind_memory_id); + state_table_.GetVulkanDeviceMemoryWrapper(buffer_wrapper->bind_memory_id); if (mem_wrapper != nullptr) { mem_wrapper->asset_map_lock.lock(); - auto bind_entry = mem_wrapper->bound_assets.find(wrapper); + auto bind_entry = mem_wrapper->bound_assets.find(buffer_wrapper); if (bind_entry != mem_wrapper->bound_assets.end()) { mem_wrapper->bound_assets.erase(bind_entry); @@ -2086,12 +2174,12 @@ void gfxrecon::encode::VulkanStateTracker::DestroyState(vulkan_wrappers::BufferW } } - for (auto entry : wrapper->descriptor_sets_bound_to) + for (auto* desc_set_wrapper : buffer_wrapper->descriptor_sets_bound_to) { - entry->dirty = true; + desc_set_wrapper->dirty = true; } - for (vulkan_wrappers::BufferViewWrapper* view_wrapper : wrapper->buffer_views) + for (vulkan_wrappers::BufferViewWrapper* view_wrapper : buffer_wrapper->buffer_views) { view_wrapper->buffer = nullptr; view_wrapper->buffer_id = format::kNullHandleId; @@ -2331,15 +2419,14 @@ void VulkanStateTracker::DestroyState(vulkan_wrappers::DescriptorSetWrapper* wra for (uint32_t i = 0; i < binding.count; ++i) { - vulkan_wrappers::BufferWrapper* buf_wrapper = - vulkan_wrappers::GetWrapper( - is_storage ? binding.storage_buffers[i].buffer : binding.buffers[i].buffer, false); + auto* buf_wrapper = vulkan_wrappers::GetWrapper( + is_storage ? binding.storage_buffers[i].buffer : binding.buffers[i].buffer, false); if (buf_wrapper != nullptr) { - auto entry = buf_wrapper->descriptor_sets_bound_to.find(wrapper); - if (entry != buf_wrapper->descriptor_sets_bound_to.end()) + auto descriptor_set_it = buf_wrapper->descriptor_sets_bound_to.find(wrapper); + if (descriptor_set_it != buf_wrapper->descriptor_sets_bound_to.end()) { - buf_wrapper->descriptor_sets_bound_to.erase(entry); + buf_wrapper->descriptor_sets_bound_to.erase(descriptor_set_it); } } } @@ -2353,15 +2440,14 @@ void VulkanStateTracker::DestroyState(vulkan_wrappers::DescriptorSetWrapper* wra for (uint32_t i = 0; i < binding.count; ++i) { - vulkan_wrappers::AccelerationStructureKHRWrapper* accel_wrapper = - vulkan_wrappers::GetWrapper( - binding.acceleration_structures[i], false); + auto* accel_wrapper = vulkan_wrappers::GetWrapper( + binding.acceleration_structures[i], false); if (accel_wrapper != nullptr) { - auto entry = accel_wrapper->descriptor_sets_bound_to.find(wrapper); - if (entry != accel_wrapper->descriptor_sets_bound_to.end()) + auto descriptor_set_it = accel_wrapper->descriptor_sets_bound_to.find(wrapper); + if (descriptor_set_it != accel_wrapper->descriptor_sets_bound_to.end()) { - accel_wrapper->descriptor_sets_bound_to.erase(entry); + accel_wrapper->descriptor_sets_bound_to.erase(descriptor_set_it); } } } @@ -3246,6 +3332,11 @@ void VulkanStateTracker::TrackAssetsInSubmission(uint32_t submitCount, const VkS } } +void VulkanStateTracker::TrackAssetsInMemory(format::HandleId memory_id) +{ + TrackMappedAssetsWrites(memory_id); +} + void VulkanStateTracker::TrackBeginRendering(VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo) { if (commandBuffer != VK_NULL_HANDLE && pRenderingInfo != nullptr) @@ -3261,9 +3352,12 @@ void VulkanStateTracker::TrackBeginRendering(VkCommandBuffer commandBuffer, cons vulkan_wrappers::ImageViewWrapper* img_view_wrapper = vulkan_wrappers::GetWrapper( pRenderingInfo->pColorAttachments[i].imageView); - assert(img_view_wrapper != nullptr); - wrapper->modified_assets.insert(img_view_wrapper->image); + // The image view is allowed to be null + if (img_view_wrapper != nullptr) + { + wrapper->modified_assets.insert(img_view_wrapper->image); + } } } diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_state_tracker.h b/third_party/gfxreconstruct/framework/encode/vulkan_state_tracker.h index 16e9e171f..abc402141 100644 --- a/third_party/gfxreconstruct/framework/encode/vulkan_state_tracker.h +++ b/third_party/gfxreconstruct/framework/encode/vulkan_state_tracker.h @@ -55,18 +55,19 @@ class VulkanStateTracker ~VulkanStateTracker(); - uint64_t WriteState(util::FileOutputStream* file_stream, - util::ThreadData* thread_data, - std::function get_unique_id_fn, - util::Compressor* compressor, - uint64_t frame_number, - util::FileOutputStream* asset_file_stream, - const std::string* asset_file_name) + uint64_t WriteState(util::FileOutputStream* file_stream, + util::ThreadData* thread_data, + vulkan_wrappers::PFN_GetHandleId get_unique_id_fn, + util::Compressor* compressor, + uint64_t frame_number, + util::FileOutputStream* asset_file_stream, + const std::string* asset_file_name) { VulkanStateWriter state_writer(file_stream, compressor, thread_data, get_unique_id_fn, + device_address_trackers_, asset_file_stream, asset_file_name, asset_file_stream != nullptr ? &asset_file_offsets_ : nullptr); @@ -75,11 +76,11 @@ class VulkanStateTracker return state_writer.WriteState(state_table_, frame_number); } - uint64_t WriteAssets(util::FileOutputStream* asset_file_stream, - const std::string* asset_file_name, - util::ThreadData* thread_data, - std::function get_unique_id_fn, - util::Compressor* compressor) + uint64_t WriteAssets(util::FileOutputStream* asset_file_stream, + const std::string* asset_file_name, + util::ThreadData* thread_data, + vulkan_wrappers::PFN_GetHandleId get_unique_id_fn, + util::Compressor* compressor) { assert(asset_file_stream != nullptr); assert(asset_file_name != nullptr); @@ -88,6 +89,7 @@ class VulkanStateTracker compressor, thread_data, get_unique_id_fn, + device_address_trackers_, asset_file_stream, asset_file_name, &asset_file_offsets_); @@ -385,8 +387,7 @@ class VulkanStateTracker void* mapped_data, VkDeviceSize mapped_offset, VkDeviceSize mapped_size, - VkMemoryMapFlags mapped_flags, - bool track_assets); + VkMemoryMapFlags mapped_flags); void TrackBeginRenderPass(VkCommandBuffer command_buffer, const VkRenderPassBeginInfo* begin_info); @@ -450,6 +451,9 @@ class VulkanStateTracker const uint32_t* image_indices, VkQueue queue); + // finds potential fences in pNext-chain and tracks their usage + void TrackPresentFences(const VkPresentInfoKHR* present_info); + void TrackAccelerationStructureKHRDeviceAddress(VkDevice device, VkAccelerationStructureKHR accel_struct, VkDeviceAddress address); @@ -479,6 +483,9 @@ class VulkanStateTracker VkPhysicalDevice physicalDevice, VkPhysicalDeviceAccelerationStructurePropertiesKHR* acceleration_structure_properties); + void TrackDescriptorBufferProperties(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceDescriptorBufferPropertiesEXT* descriptor_buffer_properties); + void TrackRayTracingShaderGroupHandles(VkDevice device, VkPipeline pipeline, size_t data_size, const void* data); void TrackAcquireFullScreenExclusiveMode(VkDevice device, VkSwapchainKHR swapchain); @@ -743,6 +750,8 @@ class VulkanStateTracker void TrackAssetsInSubmission(uint32_t submitCount, const VkSubmitInfo2* pSubmits); + void TrackAssetsInMemory(format::HandleId memory_id); + void TrackBeginRendering(VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo); void TrackSetDebugUtilsObjectNameEXT(VkDevice device, @@ -818,7 +827,7 @@ class VulkanStateTracker void DestroyState(vulkan_wrappers::DeviceMemoryWrapper* wrapper); - void DestroyState(vulkan_wrappers::BufferWrapper* wrapper); + void DestroyState(vulkan_wrappers::BufferWrapper* buffer_wrapper); void DestroyState(vulkan_wrappers::AccelerationStructureKHRWrapper* wrapper); diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_state_writer.cpp b/third_party/gfxreconstruct/framework/encode/vulkan_state_writer.cpp index 043d7adc6..922ef5493 100644 --- a/third_party/gfxreconstruct/framework/encode/vulkan_state_writer.cpp +++ b/third_party/gfxreconstruct/framework/encode/vulkan_state_writer.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #if defined(VK_USE_PLATFORM_ANDROID_KHR) @@ -85,16 +86,18 @@ static bool IsImageReadable(VkMemoryPropertyFlags property (memory_wrapper->mapped_size == VK_WHOLE_SIZE))))); } -VulkanStateWriter::VulkanStateWriter(util::FileOutputStream* output_stream, - util::Compressor* compressor, - util::ThreadData* thread_data, - std::function get_unique_id_fn, - util::FileOutputStream* asset_file_stream, - const std::string* asset_file_name, - VulkanStateWriter::AssetFileOffsetsInfo* asset_file_offsets) : +VulkanStateWriter::VulkanStateWriter( + util::FileOutputStream* output_stream, + util::Compressor* compressor, + util::ThreadData* thread_data, + vulkan_wrappers::PFN_GetHandleId get_unique_id_fn, + const std::unordered_map& device_address_trackers, + util::FileOutputStream* asset_file_stream, + const std::string* asset_file_name, + VulkanStateWriter::AssetFileOffsetsInfo* asset_file_offsets) : output_stream_(output_stream), - compressor_(compressor), thread_data_(thread_data), encoder_(¶meter_stream_), - get_unique_id_(std::move(get_unique_id_fn)), asset_file_stream_(asset_file_stream), + compressor_(compressor), thread_data_(thread_data), encoder_(¶meter_stream_), get_unique_id_(get_unique_id_fn), + device_address_trackers_(device_address_trackers), asset_file_stream_(asset_file_stream), asset_file_offsets_(asset_file_offsets), command_writer_(CommandWriter(thread_data, output_stream, compressor_)) { assert(output_stream != nullptr || asset_file_stream != nullptr); @@ -138,8 +141,8 @@ uint64_t VulkanStateWriter::WriteState(const VulkanStateTable& state_table, uint WriteDeviceState(state_table); StandardCreateWrite(state_table); - // physical-device / raytracing properties - WriteRayTracingPropertiesState(state_table); + // physical-device extension properties + WritePhysicalDeviceExtensionPropertiesState(state_table); // Utility object creation. StandardCreateWrite(state_table); @@ -176,7 +179,7 @@ uint64_t VulkanStateWriter::WriteState(const VulkanStateTable& state_table, uint // Sampler and image view create infos can reference a VkSamplerYcbcrConversion object (through VkSamplerYcbcrConversionInfo // in the pnext chain). For that reason dump VkSamplerYcbcrConversion object first. StandardCreateWrite(state_table); - StandardCreateWrite(state_table); + WriteSamplerState(state_table); WriteImageViewState(state_table); @@ -441,6 +444,7 @@ void VulkanStateWriter::WriteFenceState(const VulkanStateTable& state_table) bool signaled = wrapper->created_signaled; GetFenceStatus(device_wrapper, wrapper->handle, &signaled); + signaled = signaled || wrapper->in_flight; if (signaled == wrapper->created_signaled) { @@ -562,12 +566,38 @@ void VulkanStateWriter::WriteImageViewState(const VulkanStateTable& state_table) // Omit the current image view object if the image used to create it no longer exists. if (IsImageValid(wrapper->image_id, state_table)) { + if (!wrapper->opaque_descriptor_data.empty()) + { + WriteSetOpaqueCaptureDescriptorData(wrapper->device_id, + wrapper->handle_id, + wrapper->opaque_descriptor_data.size(), + wrapper->opaque_descriptor_data.data()); + } + // Write image view creation call. WriteFunctionCall(wrapper->create_call_id, wrapper->create_parameters.get()); } }); } +void VulkanStateWriter::WriteSamplerState(const VulkanStateTable& state_table) +{ + state_table.VisitWrappers([&](const vulkan_wrappers::SamplerWrapper* wrapper) { + GFXRECON_ASSERT(wrapper != nullptr); + + if (!wrapper->opaque_descriptor_data.empty()) + { + WriteSetOpaqueCaptureDescriptorData(wrapper->device_id, + wrapper->handle_id, + wrapper->opaque_descriptor_data.size(), + wrapper->opaque_descriptor_data.data()); + } + + // Write sampler creation call. + WriteFunctionCall(wrapper->create_call_id, wrapper->create_parameters.get()); + }); +} + void VulkanStateWriter::WriteFramebufferState(const VulkanStateTable& state_table) { std::unordered_map temp_render_passes; @@ -1059,28 +1089,7 @@ void VulkanStateWriter::WriteDescriptorSetStateWithAssetFile(const VulkanStateTa // Create a temporary object on first encounter. if (dep_inserted.second) { - if (wrapper->dirty) - { - const int64_t offset = asset_file_stream_->GetOffset(); - (*asset_file_offsets_)[wrapper->handle_id] = offset; - WriteFunctionCall( - wrapper->set_layout_dependency.create_call_id, dep_create_parameters, asset_file_stream_); - if (output_stream_ != nullptr) - { - WriteExecuteFromFile(asset_file_name_, 1, offset); - } - } - else - { - if (output_stream_ != nullptr) - { - assert(asset_file_offsets_->find(wrapper->handle_id) != asset_file_offsets_->end()); - const int64_t offset = (*asset_file_offsets_)[wrapper->handle_id]; - WriteExecuteFromFile(asset_file_name_, 1, offset); - } - } - - ++blocks_written_; + WriteFunctionCall(wrapper->set_layout_dependency.create_call_id, dep_create_parameters); } } }); @@ -1436,15 +1445,31 @@ void VulkanStateWriter::WriteDeviceMemoryState(const VulkanStateTable& state_tab WriteSetOpaqueAddressCommand(wrapper->device_id, wrapper->handle_id, wrapper->address); } - WriteFunctionCall(wrapper->create_call_id, wrapper->create_parameters.get()); + if (wrapper->modified_allocation_info != nullptr) + { + const VkAllocationCallbacks* alloc_callbacks = nullptr; + + parameter_stream_.Clear(); + encoder_.EncodeHandleIdValue(wrapper->device_id); + EncodeStructPtr(&encoder_, wrapper->modified_allocation_info); + EncodeStructPtr(&encoder_, alloc_callbacks); + encoder_.EncodeHandleIdPtr(&wrapper->handle_id); + encoder_.EncodeEnumValue(VK_SUCCESS); + WriteFunctionCall(format::ApiCall_vkAllocateMemory, ¶meter_stream_); + parameter_stream_.Clear(); + } + else + { + WriteFunctionCall(wrapper->create_call_id, wrapper->create_parameters.get()); + } }); } void VulkanStateWriter::WriteBufferDeviceAddressState(const VulkanStateTable& state_table) { state_table.VisitWrappers([&](const vulkan_wrappers::BufferWrapper* wrapper) { - assert(wrapper != nullptr); - if ((wrapper->device_id != format::kNullHandleId) && (wrapper->address != 0)) + GFXRECON_ASSERT(wrapper != nullptr && wrapper->device != VK_NULL_HANDLE); + if (wrapper->device != VK_NULL_HANDLE && wrapper->address != 0) { auto physical_device_wrapper = wrapper->bind_device->physical_device; auto call_id = physical_device_wrapper->instance_info.api_version >= VK_MAKE_VERSION(1, 2, 0) @@ -1465,14 +1490,27 @@ void VulkanStateWriter::WriteBufferDeviceAddressState(const VulkanStateTable& st void VulkanStateWriter::WriteBufferState(const VulkanStateTable& state_table) { state_table.VisitWrappers([&](const vulkan_wrappers::BufferWrapper* wrapper) { - assert(wrapper != nullptr); + GFXRECON_ASSERT(wrapper != nullptr && wrapper->device != VK_NULL_HANDLE); - if ((wrapper->device_id != format::kNullHandleId) && (wrapper->opaque_address != 0)) + if (wrapper->device != VK_NULL_HANDLE) { - // If the buffer has a device address, write the 'set opaque address' command before writing the API call to - // create the buffer. The address will need to be passed to vkCreateBuffer through the pCreateInfo pNext - // list. - WriteSetOpaqueAddressCommand(wrapper->device_id, wrapper->handle_id, wrapper->opaque_address); + auto device_id = vulkan_wrappers::GetWrappedId(wrapper->device, true); + + if (wrapper->opaque_address != 0) + { + // If the buffer has a device address, write the 'set opaque address' command before writing the API + // call to create the buffer. The address will need to be passed to vkCreateBuffer through the + // pCreateInfo pNext list. + WriteSetOpaqueAddressCommand(device_id, wrapper->handle_id, wrapper->opaque_address); + } + + if (!wrapper->opaque_descriptor_data.empty()) + { + WriteSetOpaqueCaptureDescriptorData(device_id, + wrapper->handle_id, + wrapper->opaque_descriptor_data.size(), + wrapper->opaque_descriptor_data.data()); + } } WriteFunctionCall(wrapper->create_call_id, wrapper->create_parameters.get()); @@ -1489,6 +1527,15 @@ void VulkanStateWriter::WriteImageState(const VulkanStateTable& state_table) { return; } + + if (!image_wrapper->opaque_descriptor_data.empty()) + { + WriteSetOpaqueCaptureDescriptorData(image_wrapper->bind_device->handle_id, + image_wrapper->handle_id, + image_wrapper->opaque_descriptor_data.size(), + image_wrapper->opaque_descriptor_data.data()); + } + // Filter duplicate entries for calls that create multiple objects, where objects created by the same call // all reference the same parameter buffer. if (processed.find(image_wrapper->create_parameters.get()) == processed.end()) @@ -1508,9 +1555,9 @@ void VulkanStateWriter::BeginAccelerationStructuresSection(format::HandleId devi begin_cmd.meta_header.block_header.type = format::kMetaDataBlock; begin_cmd.meta_header.meta_data_id = format::MakeMetaDataId(format::ApiFamilyId::ApiFamily_Vulkan, format::MetaDataType::kBeginResourceInitCommand); - begin_cmd.thread_id = thread_data_->thread_id_; - begin_cmd.device_id = device_id; - begin_cmd.max_resource_size = max_resource_size; + begin_cmd.thread_id = thread_data_->thread_id_; + begin_cmd.device_id = device_id; + begin_cmd.total_copy_size = max_resource_size; // Our buffers should not need staging copy as the memory should be host visible and coherent begin_cmd.max_copy_size = 0; @@ -1518,12 +1565,83 @@ void VulkanStateWriter::BeginAccelerationStructuresSection(format::HandleId devi ++blocks_written_; } -void VulkanStateWriter::WriteASInputBufferState(ASInputBuffer& buffer) +void VulkanStateWriter::WriteRecreateAccelerationHandle(encode::AccelerationStructureKHRBuildCommandData& command) +{ + GFXRECON_ASSERT(!command.input_buffers.empty()); + + // grab device from first input-buffer + const vulkan_wrappers::DeviceWrapper* device_wrapper = command.input_buffers.begin()->second.bind_device; + const VkAllocationCallbacks* alloc_callbacks = nullptr; + + VkAccelerationStructureCreateInfoKHR create_info = {}; + create_info.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR; + create_info.type = command.type; + create_info.buffer = command.buffer; + create_info.size = command.size; + create_info.offset = command.offset; + + VkResult result = device_wrapper->layer_table.CreateAccelerationStructureKHR( + device_wrapper->handle, &create_info, nullptr, &command.replaced_handle); + + GFXRECON_ASSERT(result == VK_SUCCESS); + vulkan_wrappers::CreateWrappedHandle( + device_wrapper->handle, + vulkan_wrappers::NoParentWrapper::kHandleValue, + &command.replaced_handle, + get_unique_id_); + + auto* as_wrapper = + vulkan_wrappers::GetWrapper(command.replaced_handle, false); + GFXRECON_ASSERT(as_wrapper != nullptr); + command.replaced_handle_id = as_wrapper->handle_id; + + // replace stale handle + command.geometry_info.dstAccelerationStructure = command.replaced_handle; + + // Write down this new call + parameter_stream_.Clear(); + encoder_.EncodeHandleIdValue(device_wrapper->handle_id); + EncodeStructPtr(&encoder_, &create_info); + EncodeStructPtr(&encoder_, alloc_callbacks); + encoder_.EncodeHandleIdPtr(&command.replaced_handle_id); + encoder_.EncodeEnumValue(VK_SUCCESS); + WriteFunctionCall(format::ApiCallId::ApiCall_vkCreateAccelerationStructureKHR, ¶meter_stream_); +} + +void VulkanStateWriter::WriteDestroyAccelerationHandle(const encode::AccelerationStructureKHRBuildCommandData& command) +{ + if (command.replaced_handle_id != format::kNullHandleId) + { + GFXRECON_ASSERT(!command.input_buffers.empty()); + + // grab device from first input-buffer + const vulkan_wrappers::DeviceWrapper* device_wrapper = command.input_buffers.begin()->second.bind_device; + const VkAllocationCallbacks* alloc_callbacks = nullptr; + + device_wrapper->layer_table.DestroyAccelerationStructureKHR( + device_wrapper->handle, command.replaced_handle, nullptr); + + parameter_stream_.Clear(); + encoder_.EncodeHandleIdValue(device_wrapper->handle_id); + encoder_.EncodeHandleIdValue(command.replaced_handle_id); + EncodeStructPtr(&encoder_, alloc_callbacks); + WriteFunctionCall(format::ApiCall_vkDestroyAccelerationStructureKHR, ¶meter_stream_); + parameter_stream_.Clear(); + + auto* as_wrapper = vulkan_wrappers::GetWrapper( + command.replaced_handle, false); + GFXRECON_ASSERT(as_wrapper != nullptr); + vulkan_wrappers::RemoveWrapper(as_wrapper); + } +} + +void VulkanStateWriter::WriteASInputBufferState(encode::AccelerationStructureInputBuffer& buffer) { const VkAllocationCallbacks* alloc_callbacks = nullptr; - // Issue a new create call, creating the buffer we want, and replacing data - vulkan_wrappers::DeviceWrapper* device_wrapper = buffer.bind_device; + // Issue a new create call, creating the buffer we want, and replacing data VkBufferCreateInfo create_info{ VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, nullptr, {}, @@ -1532,12 +1650,12 @@ void VulkanStateWriter::WriteASInputBufferState(ASInputBuffer& buffer) VK_SHARING_MODE_EXCLUSIVE, 1, &buffer.queue_family_index }; - device_wrapper->layer_table.CreateBuffer(device_wrapper->handle, &create_info, nullptr, &buffer.handle); + buffer.bind_device->layer_table.CreateBuffer(buffer.bind_device->handle, &create_info, nullptr, &buffer.handle); buffer.handle_id = get_unique_id_(); // Write down this new call parameter_stream_.Clear(); - encoder_.EncodeHandleIdValue(device_wrapper->handle_id); + encoder_.EncodeHandleIdValue(buffer.bind_device->handle_id); EncodeStructPtr(&encoder_, &create_info); EncodeStructPtr(&encoder_, alloc_callbacks); encoder_.EncodeHandleIdPtr(&buffer.handle_id); @@ -1545,10 +1663,10 @@ void VulkanStateWriter::WriteASInputBufferState(ASInputBuffer& buffer) WriteFunctionCall(format::ApiCallId::ApiCall_vkCreateBuffer, ¶meter_stream_); } -void VulkanStateWriter::WriteASInputMemoryState(ASInputBuffer& buffer) +void VulkanStateWriter::WriteASInputMemoryState(encode::AccelerationStructureInputBuffer& buffer) { - const VkAllocationCallbacks* alloc_callbacks = nullptr; - vulkan_wrappers::DeviceWrapper* device_wrapper = buffer.bind_device; + const VkAllocationCallbacks* alloc_callbacks = nullptr; + const vulkan_wrappers::DeviceWrapper* device_wrapper = buffer.bind_device; // Write allocate memory call VkMemoryAllocateInfo allocate_info{ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, nullptr }; @@ -1630,7 +1748,7 @@ void VulkanStateWriter::WriteASInputMemoryState(ASInputBuffer& buffer) parameter_stream_.Clear(); } -void VulkanStateWriter::InitializeASInputBuffer(ASInputBuffer& buffer) +void VulkanStateWriter::InitializeASInputBuffer(encode::AccelerationStructureInputBuffer& buffer) { parameter_stream_.Clear(); @@ -1671,10 +1789,10 @@ void VulkanStateWriter::InitializeASInputBuffer(ASInputBuffer& buffer) ++blocks_written_; } -void VulkanStateWriter::WriteDestroyASInputBuffer(ASInputBuffer& buffer) +void VulkanStateWriter::WriteDestroyASInputBuffer(encode::AccelerationStructureInputBuffer& buffer) { - const VkAllocationCallbacks* callbacks = nullptr; - vulkan_wrappers::DeviceWrapper* device_wrapper = buffer.bind_device; + const VkAllocationCallbacks* callbacks = nullptr; + const vulkan_wrappers::DeviceWrapper* device_wrapper = buffer.bind_device; parameter_stream_.Clear(); @@ -1745,107 +1863,119 @@ void VulkanStateWriter::WriteAccelerationStructureStateMetaCommands(const Vulkan { struct AccelerationStructureCommands { - std::vector blas_build; - std::vector tlas_build; - std::vector write_properties; - std::vector copy_infos; - std::vector blas_update; - std::vector tlas_update; + std::vector blas_build; + std::vector tlas_build; + std::vector write_properties; + std::vector copy_infos; }; - std::unordered_map commands; - size_t max_resource_size = 0; - - state_table.VisitWrappers([&](vulkan_wrappers::AccelerationStructureKHRWrapper* wrapper) { - assert(wrapper != nullptr); + // AS build/copy commands grouped by device + std::unordered_map commands; + size_t max_resource_size = 0; - auto& per_device_container = commands[wrapper->device->handle_id]; - std::vector* build_container = nullptr; - std::vector* update_container = nullptr; + state_table.VisitWrappers([&](vulkan_wrappers::BufferWrapper* buffer_wrapper) { + GFXRECON_ASSERT(buffer_wrapper != nullptr && buffer_wrapper->device != VK_NULL_HANDLE); - if (wrapper->type == VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR) + if (buffer_wrapper->acceleration_structures.empty() || !device_address_trackers_.count(buffer_wrapper->device)) { - build_container = &per_device_container.blas_build; - update_container = &per_device_container.blas_update; - } - else if (wrapper->type == VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR) - { - build_container = &per_device_container.tlas_build; - update_container = &per_device_container.tlas_update; + return; } + auto get_id = vulkan_wrappers::GetWrappedId; + const auto& address_tracker = device_address_trackers_.at(buffer_wrapper->device); + auto& per_device_container = commands[buffer_wrapper->device]; - if (wrapper->latest_build_command_) + for (auto& [device_address, as_build_state] : buffer_wrapper->acceleration_structures) { - build_container->push_back(&wrapper->latest_build_command_.value()); - for (const auto& [handle_id, buffer] : wrapper->latest_build_command_->input_buffers) + if (as_build_state.latest_build_command) { - max_resource_size = std::max(max_resource_size, buffer.bytes.size()); + if (as_build_state.type == VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR) + { + per_device_container.blas_build.push_back(&as_build_state.latest_build_command.value()); + } + else if (as_build_state.type == VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR) + { + per_device_container.tlas_build.push_back(&as_build_state.latest_build_command.value()); + } + + for (const auto& [handle_id, buffer] : as_build_state.latest_build_command->input_buffers) + { + max_resource_size = std::max(max_resource_size, buffer.bytes.size()); + } } - } - if (wrapper->latest_update_command_) - { - update_container->push_back(&wrapper->latest_update_command_.value()); - for (const auto& [handle_id, buffer] : wrapper->latest_update_command_->input_buffers) + if (as_build_state.latest_copy_command) { - max_resource_size = std::max(max_resource_size, buffer.bytes.size()); + // filter out stale handles + if (get_id(as_build_state.latest_copy_command->info.src, false) != 0 && + get_id(as_build_state.latest_copy_command->info.dst, false) != 0) + { + per_device_container.copy_infos.push_back(as_build_state.latest_copy_command.value().info); + } } - } - if (wrapper->latest_copy_command_) - { - // filter out stale handles - auto get_id = vulkan_wrappers::GetWrappedId; - if (get_id(wrapper->latest_copy_command_->info.src, false) != 0 && - get_id(wrapper->latest_copy_command_->info.dst, false) != 0) + if (as_build_state.latest_write_properties_command) { - per_device_container.copy_infos.push_back(wrapper->latest_copy_command_.value().info); + VkAccelerationStructureKHR as_handle = + address_tracker.GetAccelerationStructureByDeviceAddress(device_address); + format::HandleId handle_id = get_id(as_handle, false); + if (handle_id != format::kNullHandleId) + { + per_device_container.write_properties.push_back( + { as_build_state.latest_write_properties_command->query_type, handle_id }); + } } } - - if (wrapper->latest_write_properties_command_) - { - per_device_container.write_properties.push_back( - { wrapper->latest_write_properties_command_->query_type, wrapper->handle_id }); - } }); + // resource init for (auto& [device, command] : commands) { - BeginAccelerationStructuresSection(device, max_resource_size); + auto device_id = vulkan_wrappers::GetWrappedId(device, true); + BeginAccelerationStructuresSection(device_id, max_resource_size); for (auto& blas_build : command.blas_build) { - WriteAccelerationStructureBuildState(device, *blas_build); + WriteAccelerationStructureResourceInit(device_id, *blas_build); } - for (const auto& cmd_properties : command.write_properties) + for (auto& tlas_build : command.tlas_build) { - EncodeAccelerationStructureWritePropertiesCommand(device, cmd_properties); + WriteAccelerationStructureResourceInit(device_id, *tlas_build); } + EndAccelerationStructureSection(device_id); + } + + // build + cleanup + for (auto& [device, command] : commands) + { + auto device_id = vulkan_wrappers::GetWrappedId(device, true); - EncodeAccelerationStructuresCopyMetaCommand(device, command.copy_infos); + for (auto& blas_build : command.blas_build) + { + WriteAccelerationStructureBuildState(device_id, *blas_build); + } - for (auto& tlas_build : command.tlas_build) + for (const auto& cmd_properties : command.write_properties) { - WriteAccelerationStructureBuildState(device, *tlas_build); + EncodeAccelerationStructureWritePropertiesCommand(device_id, cmd_properties); } - for (auto& blas_update : command.blas_update) + // Check if there are actually any kVulkanCopyAccelerationStructuresCommand before dumping. + // This saves from dumping a basically empty block + if (!command.copy_infos.empty()) { - WriteAccelerationStructureBuildState(device, *blas_update); + EncodeAccelerationStructuresCopyMetaCommand(device_id, command.copy_infos); } - for (auto& tlas_update : command.tlas_update) + for (auto& tlas_build : command.tlas_build) { - WriteAccelerationStructureBuildState(device, *tlas_update); + WriteAccelerationStructureBuildState(device_id, *tlas_build); } - EndAccelerationStructureSection(device); } } -void VulkanStateWriter::WriteAccelerationStructureBuildState(const gfxrecon::format::HandleId& device, - AccelerationStructureBuildCommandData& command) +void VulkanStateWriter::WriteAccelerationStructureResourceInit( + const gfxrecon::format::HandleId& device, encode::AccelerationStructureKHRBuildCommandData& command) { for (auto& [handle_id, buffer] : command.input_buffers) { @@ -1858,7 +1988,24 @@ void VulkanStateWriter::WriteAccelerationStructureBuildState(const gfxrecon::for } UpdateAddresses(command); +} + +void VulkanStateWriter::WriteAccelerationStructureBuildState(const gfxrecon::format::HandleId& device, + encode::AccelerationStructureKHRBuildCommandData& command) +{ + // check for deleted handles, create replacements + bool as_destroyed = vulkan_wrappers::GetWrappedId( + command.geometry_info.dstAccelerationStructure, false) == format::kNullHandleId; + + // handle was deleted. we'll require one for rebuilding, so encode calls to create a temporary AS+buffer + if (as_destroyed) + { + GFXRECON_LOG_WARNING_ONCE("VulkanStateWriter: substituting deleted Acceleration-Structure handles"); + WriteRecreateAccelerationHandle(command); + } + EncodeAccelerationStructureBuildMetaCommand(device, command); + for (auto& [handle_id, buffer] : command.input_buffers) { if (buffer.destroyed) @@ -1866,9 +2013,14 @@ void VulkanStateWriter::WriteAccelerationStructureBuildState(const gfxrecon::for WriteDestroyASInputBuffer(buffer); } } + + if (as_destroyed) + { + WriteDestroyAccelerationHandle(command); + } } -void VulkanStateWriter::UpdateAddresses(AccelerationStructureBuildCommandData& command) +void VulkanStateWriter::UpdateAddresses(encode::AccelerationStructureKHRBuildCommandData& command) { if (command.input_buffers.empty()) { @@ -1906,6 +2058,7 @@ void VulkanStateWriter::UpdateAddresses(AccelerationStructureBuildCommandData& c } case VK_GEOMETRY_TYPE_SPHERES_NV: case VK_GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV: + case VK_GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX: GFXRECON_LOG_WARNING("Geometry type not supported at " __FILE__ ", line: %d.", __LINE__); break; case VK_GEOMETRY_TYPE_MAX_ENUM_KHR: @@ -1928,7 +2081,7 @@ void VulkanStateWriter::UpdateAddresses(AccelerationStructureBuildCommandData& c } void VulkanStateWriter::EncodeAccelerationStructureBuildMetaCommand( - format::HandleId device_id, const AccelerationStructureBuildCommandData& command) + format::HandleId device_id, const encode::AccelerationStructureKHRBuildCommandData& command) { using RangeInfoArraySize = encode::ArraySize2Dray_tracing_pipeline_properties != std::nullopt) { - parameter_stream_.Clear(); - encoder_.EncodeHandleIdValue(wrapper->handle_id); + ray_tracing_pipeline_properties = *wrapper->ray_tracing_pipeline_properties; + graphics::vulkan_struct_add_pnext(&properties2, &ray_tracing_pipeline_properties); + } - // pNext-chaining - auto pipeline_props = *wrapper->ray_tracing_pipeline_properties; - pipeline_props.pNext = wrapper->acceleration_structure_properties - ? (void*)&wrapper->acceleration_structure_properties.value() - : nullptr; + if (wrapper->acceleration_structure_properties != std::nullopt) + { + acceleration_structure_properties = *wrapper->acceleration_structure_properties; + graphics::vulkan_struct_add_pnext(&properties2, &acceleration_structure_properties); + } - VkPhysicalDeviceProperties2 properties2 = {}; - properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; - properties2.pNext = &pipeline_props; + if (wrapper->descriptor_buffer_properties != std::nullopt) + { + descriptor_buffer_properties = *wrapper->descriptor_buffer_properties; + graphics::vulkan_struct_add_pnext(&properties2, &descriptor_buffer_properties); + } + if (properties2.pNext != nullptr) + { + parameter_stream_.Clear(); + encoder_.EncodeHandleIdValue(wrapper->handle_id); EncodeStructPtr(&encoder_, &properties2); WriteFunctionCall(format::ApiCall_vkGetPhysicalDeviceProperties2, ¶meter_stream_); parameter_stream_.Clear(); @@ -2055,12 +2223,23 @@ void VulkanStateWriter::WriteAccelerationStructureKHRState(const VulkanStateTabl state_table.VisitWrappers([&](const vulkan_wrappers::AccelerationStructureKHRWrapper* wrapper) { assert(wrapper != nullptr); - if ((wrapper->device != nullptr) && (wrapper->address != 0)) + if (wrapper->device != nullptr) { - // If the acceleration struct has a device address, write the 'set opaque address' command before writing - // the API call to create the acceleration struct. The address will need to be passed to - // vkCreateAccelerationStructKHR through the VkAccelerationStructureCreateInfoKHR::deviceAddress. - WriteSetOpaqueAddressCommand(wrapper->device->handle_id, wrapper->handle_id, wrapper->address); + if (wrapper->address != 0) + { + // If the acceleration struct has a device address, write the 'set opaque address' command before + // writing the API call to create the acceleration struct. The address will need to be passed to + // vkCreateAccelerationStructKHR through the VkAccelerationStructureCreateInfoKHR::deviceAddress. + WriteSetOpaqueAddressCommand(wrapper->device->handle_id, wrapper->handle_id, wrapper->address); + } + + if (!wrapper->opaque_descriptor_data.empty()) + { + WriteSetOpaqueCaptureDescriptorData(wrapper->device->handle_id, + wrapper->handle_id, + wrapper->opaque_descriptor_data.size(), + wrapper->opaque_descriptor_data.data()); + } } WriteFunctionCall(wrapper->create_call_id, wrapper->create_parameters.get()); WriteGetAccelerationStructureDeviceAddressKHRCall(state_table, wrapper); @@ -2669,11 +2848,12 @@ void VulkanStateWriter::ProcessImageMemoryWithAssetFile(const vulkan_wrappers::D void VulkanStateWriter::WriteBufferMemoryState(const VulkanStateTable& state_table, DeviceResourceTables* resources, - VkDeviceSize* max_resource_size, + VkDeviceSize* total_staging_copy_size, VkDeviceSize* max_staging_copy_size, bool write_memory_state) { - GFXRECON_ASSERT((resources != nullptr) && (max_resource_size != nullptr) && (max_staging_copy_size != nullptr)); + GFXRECON_ASSERT((resources != nullptr) && (total_staging_copy_size != nullptr) && + (max_staging_copy_size != nullptr)); state_table.VisitWrappers([&](vulkan_wrappers::BufferWrapper* wrapper) { GFXRECON_ASSERT(wrapper != nullptr); @@ -2744,16 +2924,16 @@ void VulkanStateWriter::WriteBufferMemoryState(const VulkanStateTable& state_tab snapshot_info.memory_properties = GetMemoryProperties(device_wrapper, memory_wrapper); snapshot_info.need_staging_copy = !IsBufferReadable(snapshot_info.memory_properties, memory_wrapper); - if ((*max_resource_size) < wrapper->created_size) + if (snapshot_info.need_staging_copy) { - (*max_resource_size) = wrapper->created_size; - } + if (*max_staging_copy_size < wrapper->created_size) + { + *max_staging_copy_size = wrapper->created_size; + } - if (snapshot_info.need_staging_copy && ((*max_staging_copy_size) < wrapper->created_size)) - { - (*max_staging_copy_size) = wrapper->created_size; + // sum staging-copy sizes + *total_staging_copy_size += wrapper->created_size; } - snapshot_entry.buffers.emplace_back(snapshot_info); } } @@ -2856,18 +3036,15 @@ void VulkanStateWriter::WriteBufferMemoryState(const VulkanStateTable& state_tab // method requires the buffer to be bound to a single range of a single memory, which is not applicable for // sparse buffers. Therefore, we set the two values to use staging copy for dumping sparse buffers. snapshot_info.memory_properties = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - snapshot_info.need_staging_copy = true; // Staging copy is needed for sparse buffer. - if ((*max_resource_size) < wrapper->size) - { - (*max_resource_size) = wrapper->size; - } + // Staging copy is needed for sparse buffer. + snapshot_info.need_staging_copy = true; + (*total_staging_copy_size) += wrapper->size; - if (snapshot_info.need_staging_copy && ((*max_staging_copy_size) < wrapper->size)) + if ((*max_staging_copy_size) < wrapper->size) { (*max_staging_copy_size) = wrapper->size; } - snapshot_entry.buffers.emplace_back(snapshot_info); } }); @@ -2875,14 +3052,15 @@ void VulkanStateWriter::WriteBufferMemoryState(const VulkanStateTable& state_tab void VulkanStateWriter::WriteImageMemoryState(const VulkanStateTable& state_table, DeviceResourceTables* resources, - VkDeviceSize* max_resource_size, + VkDeviceSize* total_staging_copy_size, VkDeviceSize* max_staging_copy_size, bool write_memory_state) { - assert((resources != nullptr) && (max_resource_size != nullptr) && (max_staging_copy_size != nullptr)); + GFXRECON_ASSERT((resources != nullptr) && (total_staging_copy_size != nullptr) && + (max_staging_copy_size != nullptr)); state_table.VisitWrappers([&](vulkan_wrappers::ImageWrapper* wrapper) { - assert(wrapper != nullptr); + GFXRECON_ASSERT(wrapper != nullptr); // Perform memory binding. const vulkan_wrappers::DeviceMemoryWrapper* memory_wrapper = @@ -2943,49 +3121,44 @@ void VulkanStateWriter::WriteImageMemoryState(const VulkanStateTable& state_tabl } else { - const vulkan_wrappers::DeviceWrapper* device_wrapper = wrapper->bind_device; - const graphics::VulkanDeviceTable* device_table = &device_wrapper->layer_table; - assert((device_wrapper != nullptr) && (device_table != nullptr)); - const vulkan_wrappers::QueueWrapper* sparse_bind_queue_wrapper = vulkan_wrappers::GetWrapper(wrapper->sparse_bind_queue); GFXRECON_ASSERT((wrapper->sparse_bind_queue != VK_NULL_HANDLE) && (sparse_bind_queue_wrapper != nullptr)); - if ((wrapper->sparse_opaque_memory_bind_map.size() != 0) || - (wrapper->sparse_subresource_memory_bind_map.size() != 0)) + if ((!wrapper->sparse_opaque_memory_bind_map.empty()) || + (!wrapper->sparse_subresource_memory_bind_map.empty())) { std::vector sparse_memory_binds; VkSparseImageOpaqueMemoryBindInfo image_opaque_memory_bind_info = {}; - for (auto& item : wrapper->sparse_opaque_memory_bind_map) + for (const auto& sparse_mem_bind : wrapper->sparse_opaque_memory_bind_map | std::views::values) { - sparse_memory_binds.push_back(item.second); + sparse_memory_binds.push_back(sparse_mem_bind); } image_opaque_memory_bind_info.image = wrapper->handle; image_opaque_memory_bind_info.bindCount = sparse_memory_binds.size(); image_opaque_memory_bind_info.pBinds = - (sparse_memory_binds.size() == 0) ? nullptr : sparse_memory_binds.data(); + (sparse_memory_binds.empty()) ? nullptr : sparse_memory_binds.data(); std::vector sparse_image_memory_binds; VkSparseImageMemoryBindInfo image_memory_bind_info = {}; - for (auto& subresource_bind_map : wrapper->sparse_subresource_memory_bind_map) + for (auto& offset_3d_to_memory_range_map : + wrapper->sparse_subresource_memory_bind_map | std::views::values) { - auto& offset_3d_to_memory_range_map = subresource_bind_map.second; - - for (auto& item : offset_3d_to_memory_range_map) + for (auto& sparse_img_mem_bind : offset_3d_to_memory_range_map | std::views::values) { - sparse_image_memory_binds.push_back(item.second); + sparse_image_memory_binds.push_back(sparse_img_mem_bind); } } image_memory_bind_info.image = wrapper->handle; image_memory_bind_info.bindCount = sparse_image_memory_binds.size(); image_memory_bind_info.pBinds = - (sparse_image_memory_binds.size() == 0) ? nullptr : sparse_image_memory_binds.data(); + (sparse_image_memory_binds.empty()) ? nullptr : sparse_image_memory_binds.data(); VkBindSparseInfo bind_sparse_info{}; @@ -3078,9 +3251,9 @@ void VulkanStateWriter::WriteImageMemoryState(const VulkanStateTable& state_tabl { // The original external format is not restored at replay time, but RGBA8 is used, meaning the // image size at replay might be different than current size. - const VkDeviceSize rgba8_size = 4; - const VkDeviceSize replay_size = wrapper->extent.width * wrapper->extent.height * rgba8_size; - *max_staging_copy_size = std::max(*max_staging_copy_size, replay_size); + constexpr VkDeviceSize rgba8_size = 4; + const VkDeviceSize replay_size = wrapper->extent.width * wrapper->extent.height * rgba8_size; + *max_staging_copy_size = std::max(*max_staging_copy_size, replay_size); snapshot_info.resource_size = wrapper->size; snapshot_info.level_sizes.push_back(wrapper->size); @@ -3088,8 +3261,7 @@ void VulkanStateWriter::WriteImageMemoryState(const VulkanStateTable& state_tabl else { snapshot_info.resource_size = - resource_util.GetImageResourceSizesOptimal(wrapper->handle, - wrapper->format, + resource_util.GetImageResourceSizesOptimal(wrapper->format, wrapper->image_type, wrapper->extent, wrapper->mip_levels, @@ -3101,16 +3273,16 @@ void VulkanStateWriter::WriteImageMemoryState(const VulkanStateTable& state_tabl true); } - if ((*max_resource_size) < snapshot_info.resource_size) + if (snapshot_info.need_staging_copy) { - (*max_resource_size) = snapshot_info.resource_size; - } + if (*max_staging_copy_size < snapshot_info.resource_size) + { + *max_staging_copy_size = snapshot_info.resource_size; + } - if (snapshot_info.need_staging_copy && ((*max_staging_copy_size) < snapshot_info.resource_size)) - { - (*max_staging_copy_size) = snapshot_info.resource_size; + // sum staging-copy sizes + *total_staging_copy_size += snapshot_info.resource_size; } - snapshot_entry.images.emplace_back(snapshot_info); // Write image subresource layout queries for linear/host-visible images. @@ -3129,7 +3301,7 @@ void VulkanStateWriter::WriteImageMemoryState(const VulkanStateTable& state_tabl // stencil aspect. if (aspect == VK_IMAGE_ASPECT_DEPTH_BIT) { - aspect_flags = graphics::GetFormatAspectMask(wrapper->format); + aspect_flags = graphics::GetFormatAspects(wrapper->format); WriteImageSubresourceLayouts(wrapper, aspect_flags); } } @@ -3177,19 +3349,20 @@ void VulkanStateWriter::WriteImageSubresourceLayouts(const vulkan_wrappers::Imag void VulkanStateWriter::WriteResourceMemoryState(const VulkanStateTable& state_table, bool write_memory_state) { DeviceResourceTables resources; - VkDeviceSize max_resource_size = 0; - VkDeviceSize max_staging_copy_size = 0; + VkDeviceSize total_staging_copy_size = 0; + VkDeviceSize max_staging_copy_size = 0; auto started = std::chrono::high_resolution_clock::now(); - WriteBufferMemoryState(state_table, &resources, &max_resource_size, &max_staging_copy_size, write_memory_state); - WriteImageMemoryState(state_table, &resources, &max_resource_size, &max_staging_copy_size, write_memory_state); + WriteBufferMemoryState( + state_table, &resources, &total_staging_copy_size, &max_staging_copy_size, write_memory_state); + WriteImageMemoryState( + state_table, &resources, &total_staging_copy_size, &max_staging_copy_size, write_memory_state); // Write resource memory content. - for (const auto& resource_entry : resources) + for (const auto& [device_wrapper, queue_family_table] : resources) { - const vulkan_wrappers::DeviceWrapper* device_wrapper = resource_entry.first; - VkResult result = VK_SUCCESS; + VkResult result = VK_SUCCESS; graphics::VulkanResourcesUtil resource_util(device_wrapper->handle, device_wrapper->physical_device->handle, @@ -3208,37 +3381,38 @@ void VulkanStateWriter::WriteResourceMemoryState(const VulkanStateTable& state_t { if (output_stream_ != nullptr) { - format::BeginResourceInitCommand begin_cmd; + format::BeginResourceInitCommand begin_cmd{}; begin_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(begin_cmd); begin_cmd.meta_header.block_header.type = format::kMetaDataBlock; begin_cmd.meta_header.meta_data_id = format::MakeMetaDataId( format::ApiFamilyId::ApiFamily_Vulkan, format::MetaDataType::kBeginResourceInitCommand); - begin_cmd.thread_id = thread_data_->thread_id_; - begin_cmd.device_id = device_wrapper->handle_id; - begin_cmd.max_resource_size = max_resource_size; - begin_cmd.max_copy_size = max_staging_copy_size; + begin_cmd.thread_id = thread_data_->thread_id_; + begin_cmd.device_id = device_wrapper->handle_id; + begin_cmd.total_copy_size = total_staging_copy_size; + begin_cmd.max_copy_size = max_staging_copy_size; output_stream_->Write(&begin_cmd, sizeof(begin_cmd)); ++blocks_written_; } - for (const auto& queue_family_entry : resource_entry.second) + // iterate map-values + for (const auto& snapshot_info : queue_family_table | std::views::values) { if (asset_file_stream_ != nullptr) { - ProcessBufferMemoryWithAssetFile(device_wrapper, queue_family_entry.second.buffers, resource_util); - ProcessImageMemoryWithAssetFile(device_wrapper, queue_family_entry.second.images, resource_util); + ProcessBufferMemoryWithAssetFile(device_wrapper, snapshot_info.buffers, resource_util); + ProcessImageMemoryWithAssetFile(device_wrapper, snapshot_info.images, resource_util); } else { - ProcessBufferMemory(device_wrapper, queue_family_entry.second.buffers, resource_util); - ProcessImageMemory(device_wrapper, queue_family_entry.second.images, resource_util); + ProcessBufferMemory(device_wrapper, snapshot_info.buffers, resource_util); + ProcessImageMemory(device_wrapper, snapshot_info.images, resource_util); } } if (output_stream_ != nullptr) { - format::EndResourceInitCommand end_cmd; + format::EndResourceInitCommand end_cmd{}; end_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(end_cmd); end_cmd.meta_header.block_header.type = format::kMetaDataBlock; end_cmd.meta_header.meta_data_id = format::MakeMetaDataId( @@ -4360,6 +4534,31 @@ void VulkanStateWriter::WriteSetOpaqueAddressCommand(format::HandleId device_id, ++blocks_written_; } +void VulkanStateWriter::WriteSetOpaqueCaptureDescriptorData(format::HandleId device_id, + format::HandleId object_id, + size_t data_size, + const void* data) +{ + format::SetOpaqueDescriptorDataCommand opaque_descriptor_cmd{}; + + auto thread_data = GetThreadData(); + GFXRECON_ASSERT(thread_data != nullptr); + + opaque_descriptor_cmd.meta_header.block_header.type = format::BlockType::kMetaDataBlock; + opaque_descriptor_cmd.meta_header.block_header.size = + format::GetMetaDataBlockBaseSize(opaque_descriptor_cmd) + data_size; + opaque_descriptor_cmd.meta_header.meta_data_id = format::MakeMetaDataId( + format::ApiFamilyId::ApiFamily_Vulkan, format::MetaDataType::kSetOpaqueCaptureDescriptorDataCommand); + opaque_descriptor_cmd.thread_id = thread_data->thread_id_; + opaque_descriptor_cmd.device_id = device_id; + opaque_descriptor_cmd.object_id = object_id; + opaque_descriptor_cmd.data_size = data_size; + + output_stream_->CombineAndWrite({ { &opaque_descriptor_cmd, sizeof(opaque_descriptor_cmd) }, { data, data_size } }, + GetThreadData()->GetScratchBuffer()); + ++blocks_written_; +} + void VulkanStateWriter::WriteSetRayTracingShaderGroupHandlesCommand(format::HandleId device_id, format::HandleId pipeline_id, size_t data_size, diff --git a/third_party/gfxreconstruct/framework/encode/vulkan_state_writer.h b/third_party/gfxreconstruct/framework/encode/vulkan_state_writer.h index 620fdf62b..caab76df2 100644 --- a/third_party/gfxreconstruct/framework/encode/vulkan_state_writer.h +++ b/third_party/gfxreconstruct/framework/encode/vulkan_state_writer.h @@ -27,6 +27,7 @@ #include "encode/command_writer.h" #include "encode/parameter_encoder.h" #include "encode/vulkan_handle_wrappers.h" +#include "encode/vulkan_device_address_tracker.h" #include "generated/generated_vulkan_state_table.h" #include "format/format.h" #include "format/platform_types.h" @@ -39,6 +40,7 @@ #include "util/thread_data.h" #include "vulkan/vulkan.h" +#include "vulkan_handle_wrapper_util.h" #include #include @@ -53,10 +55,11 @@ class VulkanStateWriter public: using AssetFileOffsetsInfo = std::unordered_map; - VulkanStateWriter(util::FileOutputStream* output_stream, - util::Compressor* compressor, - util::ThreadData* thread_data, - std::function get_unique_id_fn, + VulkanStateWriter(util::FileOutputStream* output_stream, + util::Compressor* compressor, + util::ThreadData* thread_data, + vulkan_wrappers::PFN_GetHandleId get_unique_id_fn, + const std::unordered_map& device_address_trackers, util::FileOutputStream* asset_file_stream = nullptr, const std::string* asset_file_name = nullptr, VulkanStateWriter::AssetFileOffsetsInfo* asset_file_offsets = nullptr); @@ -138,6 +141,8 @@ class VulkanStateWriter void WriteImageViewState(const VulkanStateTable& state_table); + void WriteSamplerState(const VulkanStateTable& state_table); + void WriteFramebufferState(const VulkanStateTable& state_table); void WritePipelineLayoutState(const VulkanStateTable& state_table); @@ -164,7 +169,7 @@ class VulkanStateWriter void WriteDeviceMemoryState(const VulkanStateTable& state_table); - void WriteRayTracingPropertiesState(const VulkanStateTable& state_table); + void WritePhysicalDeviceExtensionPropertiesState(const VulkanStateTable& state_table); void WriteRayTracingShaderGroupHandlesState(const VulkanStateTable& state_table); @@ -190,13 +195,13 @@ class VulkanStateWriter void WriteBufferMemoryState(const VulkanStateTable& state_table, DeviceResourceTables* resources, - VkDeviceSize* max_resource_size, + VkDeviceSize* total_staging_copy_size, VkDeviceSize* max_staging_copy_size, bool write_memory_state); void WriteImageMemoryState(const VulkanStateTable& state_table, DeviceResourceTables* resources, - VkDeviceSize* max_resource_size, + VkDeviceSize* total_staging_copy_size, VkDeviceSize* max_staging_copy_size, bool write_memory_state); @@ -334,6 +339,11 @@ class VulkanStateWriter void WriteSetOpaqueAddressCommand(format::HandleId device_id, format::HandleId object_id, VkDeviceAddress address); + void WriteSetOpaqueCaptureDescriptorData(format::HandleId device_id, + format::HandleId object_id, + size_t data_size, + const void* data); + void WriteSetRayTracingShaderGroupHandlesCommand(format::HandleId device_id, format::HandleId pipeline_id, size_t data_size, @@ -392,14 +402,14 @@ class VulkanStateWriter void WriteAccelerationStructureStateMetaCommands(const VulkanStateTable& state_table); - using AccelerationStructureBuildCommandData = - vulkan_wrappers::AccelerationStructureKHRWrapper::AccelerationStructureKHRBuildCommandData; + void WriteAccelerationStructureResourceInit(const gfxrecon::format::HandleId& device, + encode::AccelerationStructureKHRBuildCommandData& command); - void WriteAccelerationStructureBuildState(const gfxrecon::format::HandleId& device, - AccelerationStructureBuildCommandData& command); + void WriteAccelerationStructureBuildState(const gfxrecon::format::HandleId& device, + encode::AccelerationStructureKHRBuildCommandData& command); - void EncodeAccelerationStructureBuildMetaCommand(format::HandleId device_id, - const AccelerationStructureBuildCommandData& command); + void EncodeAccelerationStructureBuildMetaCommand(format::HandleId device_id, + const encode::AccelerationStructureKHRBuildCommandData& command); void EncodeAccelerationStructuresCopyMetaCommand(format::HandleId device_id, const std::vector& infos); @@ -417,16 +427,18 @@ class VulkanStateWriter WriteGetAccelerationStructureDeviceAddressKHRCall(const VulkanStateTable& state_table, const vulkan_wrappers::AccelerationStructureKHRWrapper* wrapper); - static void UpdateAddresses(AccelerationStructureBuildCommandData& command); + static void UpdateAddresses(encode::AccelerationStructureKHRBuildCommandData& command); - using ASInputBuffer = vulkan_wrappers::AccelerationStructureKHRWrapper::ASInputBuffer; void BeginAccelerationStructuresSection(format::HandleId device_id, uint64_t max_resource_size); - void WriteASInputBufferState(ASInputBuffer& buffer); - void WriteASInputMemoryState(ASInputBuffer& buffer); - void InitializeASInputBuffer(ASInputBuffer& buffer); - void WriteDestroyASInputBuffer(ASInputBuffer& buffer); + void WriteASInputBufferState(encode::AccelerationStructureInputBuffer& buffer); + void WriteASInputMemoryState(encode::AccelerationStructureInputBuffer& buffer); + void InitializeASInputBuffer(encode::AccelerationStructureInputBuffer& buffer); + void WriteDestroyASInputBuffer(encode::AccelerationStructureInputBuffer& buffer); void EndAccelerationStructureSection(format::HandleId device_id); + void WriteRecreateAccelerationHandle(encode::AccelerationStructureKHRBuildCommandData& command); + void WriteDestroyAccelerationHandle(const encode::AccelerationStructureKHRBuildCommandData& command); + void WriteExecuteFromFile(const std::string& filename, uint32_t n_blocks, int64_t offset); void WriteDebugUtilsState(const VulkanStateTable& state_table); @@ -441,7 +453,10 @@ class VulkanStateWriter uint64_t blocks_written_{ 0 }; // helper to retrieve a unique id, e.g. from a CaptureManager - std::function get_unique_id_; + vulkan_wrappers::PFN_GetHandleId get_unique_id_; + + // Keeps track of buffer- and acceleration-structure device addresses + const std::unordered_map& device_address_trackers_; util::FileOutputStream* asset_file_stream_; std::string asset_file_name_; diff --git a/third_party/gfxreconstruct/framework/format/api_call_id.h b/third_party/gfxreconstruct/framework/format/api_call_id.h index 7a9d0120d..bde4c3bc6 100644 --- a/third_party/gfxreconstruct/framework/format/api_call_id.h +++ b/third_party/gfxreconstruct/framework/format/api_call_id.h @@ -792,6 +792,30 @@ enum ApiCallId : uint32_t ApiCall_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM = MakeApiCallId(ApiFamily_Vulkan, 0x1333), ApiCall_vkWaitForPresent2KHR = MakeApiCallId(ApiFamily_Vulkan, 0x1334), ApiCall_vkReleaseSwapchainImagesKHR = MakeApiCallId(ApiFamily_Vulkan, 0x1335), + ApiCall_vkCmdBindDescriptorBufferEmbeddedSamplersEXT = MakeApiCallId(ApiFamily_Vulkan, 0x1336), + ApiCall_vkCmdBindDescriptorBuffersEXT = MakeApiCallId(ApiFamily_Vulkan, 0x1337), + ApiCall_vkCmdSetDescriptorBufferOffsetsEXT = MakeApiCallId(ApiFamily_Vulkan, 0x1338), + ApiCall_vkGetBufferOpaqueCaptureDescriptorDataEXT = MakeApiCallId(ApiFamily_Vulkan, 0x1339), + ApiCall_vkGetDescriptorEXT = MakeApiCallId(ApiFamily_Vulkan, 0x133a), + ApiCall_vkGetDescriptorSetLayoutBindingOffsetEXT = MakeApiCallId(ApiFamily_Vulkan, 0x133b), + ApiCall_vkGetDescriptorSetLayoutSizeEXT = MakeApiCallId(ApiFamily_Vulkan, 0x133c), + ApiCall_vkGetImageOpaqueCaptureDescriptorDataEXT = MakeApiCallId(ApiFamily_Vulkan, 0x133d), + ApiCall_vkGetImageViewOpaqueCaptureDescriptorDataEXT = MakeApiCallId(ApiFamily_Vulkan, 0x133e), + ApiCall_vkGetSamplerOpaqueCaptureDescriptorDataEXT = MakeApiCallId(ApiFamily_Vulkan, 0x133f), + ApiCall_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT = MakeApiCallId(ApiFamily_Vulkan, 0x1340), + ApiCall_vkCmdCopyMemoryIndirectKHR = MakeApiCallId(ApiFamily_Vulkan, 0x1341), + ApiCall_vkCmdCopyMemoryToImageIndirectKHR = MakeApiCallId(ApiFamily_Vulkan, 0x1342), + ApiCall_vkCmdEndRendering2KHR = MakeApiCallId(ApiFamily_Vulkan, 0x1343), + ApiCall_vkCmdDecompressMemoryEXT = MakeApiCallId(ApiFamily_Vulkan, 0x1344), + ApiCall_vkCmdDecompressMemoryIndirectCountEXT = MakeApiCallId(ApiFamily_Vulkan, 0x1345), + ApiCall_vkCmdBeginCustomResolveEXT = MakeApiCallId(ApiFamily_Vulkan, 0x1346), + ApiCall_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM = MakeApiCallId(ApiFamily_Vulkan, 0x1347), + ApiCall_Reserved_0x1348 = MakeApiCallId(ApiFamily_Vulkan, 0x1348), + ApiCall_vkGetPastPresentationTimingEXT = MakeApiCallId(ApiFamily_Vulkan, 0x1349), + ApiCall_vkGetSwapchainTimeDomainPropertiesEXT = MakeApiCallId(ApiFamily_Vulkan, 0x134a), + ApiCall_vkGetSwapchainTimingPropertiesEXT = MakeApiCallId(ApiFamily_Vulkan, 0x134b), + ApiCall_vkSetSwapchainPresentTimingQueueSizeEXT = MakeApiCallId(ApiFamily_Vulkan, 0x134c), + ApiCall_vkCmdSetComputeOccupancyPriorityNV = MakeApiCallId(ApiFamily_Vulkan, 0x134d), ApiCall_VulkanLast, @@ -1343,6 +1367,11 @@ enum ApiCallId : uint32_t ApiCall_ID3D12GBVDiagnostics_GBVReserved0 = MakeApiCallId(ApiFamily_D3D12, 0x1166), ApiCall_ID3D12GBVDiagnostics_GBVReserved1 = MakeApiCallId(ApiFamily_D3D12, 0x1167), + // Agility SDK 1.616.1 + ApiCall_ID3D12Tools2_SetApplicationSpecificDriverState = MakeApiCallId(ApiFamily_D3D12, 0x1168), + ApiCall_ID3D12DeviceTools1_GetApplicationSpecificDriverState = MakeApiCallId(ApiFamily_D3D12, 0x1169), + ApiCall_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus = MakeApiCallId(ApiFamily_D3D12, 0x116a), + // AGS API // amd_ags.h ApiCall_Ags_agsInitialize_6_0_1 = MakeApiCallId(ApiFamily_AGS, 0x1000), diff --git a/third_party/gfxreconstruct/framework/format/format.h b/third_party/gfxreconstruct/framework/format/format.h index caa3ea1f7..5f936bba8 100644 --- a/third_party/gfxreconstruct/framework/format/format.h +++ b/third_party/gfxreconstruct/framework/format/format.h @@ -38,6 +38,14 @@ #define GFXRECON_FOURCC GFXRECON_MAKE_FOURCC('G', 'F', 'X', 'R') #define GFXRECON_FILE_EXTENSION ".gfxr" +#define GFXRECON_MAKE_FILE_VERSION(major, minor) ((static_cast(major) << 32) | minor) +#define GFXRECON_CURRENT_FILE_VERSION GFXRECON_MAKE_FILE_VERSION(0, 1) +#define GFXRECON_CURRENT_FILE_MAJOR static_cast(GFXRECON_CURRENT_FILE_VERSION >> 32) +#define GFXRECON_CURRENT_FILE_MINOR static_cast(GFXRECON_CURRENT_FILE_VERSION) + +// After this version, implicit frame boundaries are ignored +#define GFXRECON_EXPLICIT_FRAME_MARKER_FILE_VERSION GFXRECON_MAKE_FILE_VERSION(0, 1) + GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(format) @@ -160,6 +168,10 @@ enum class MetaDataType : uint16_t kExecuteBlocksFromFile = 34, kCreateHardwareBufferCommand = 35, kInitializeMetaCommand = 36, + kSetOpaqueCaptureDescriptorDataCommand = 37, + + //! reserve values with highest-bit for special purposes + kBeginExperimentalReservedRange = 1U << 15U }; // MetaDataId is stored in the capture file and its type must be uint32_t to avoid breaking capture file compatibility. @@ -484,8 +496,12 @@ struct BeginResourceInitCommand MetaDataHeader meta_header; format::ThreadId thread_id; format::HandleId device_id; - uint64_t max_resource_size; // Size of largest resource in upload data set. - uint64_t max_copy_size; // Size of largest resource requiring a staging copy at capture. + + // sum of all resource-size in bytes. + uint64_t total_copy_size; + + // size of single largest resource requiring a staging copy, in bytes. + uint64_t max_copy_size; }; struct EndResourceInitCommand @@ -573,6 +589,15 @@ struct SetOpaqueAddressCommand uint64_t address; }; +struct SetOpaqueDescriptorDataCommand +{ + MetaDataHeader meta_header; + format::ThreadId thread_id; + format::HandleId device_id; + format::HandleId object_id; + uint32_t data_size; +}; + struct SetRayTracingShaderGroupHandlesCommandHeader { MetaDataHeader meta_header; @@ -638,6 +663,11 @@ struct DxgiAdapterDesc uint32_t extra_info; // 2 bits (LSB) to store Type and 30 bits for object ID }; +inline int64_t pack_luid(const format::DxgiAdapterDesc& adapter_desc) +{ + return static_cast((static_cast(adapter_desc.LuidHighPart) << 32) | adapter_desc.LuidLowPart); +} + struct DxgiAdapterInfoCommandHeader { MetaDataHeader meta_header; @@ -750,7 +780,7 @@ struct InitializeMetaCommand format::HandleId capture_id; uint32_t block_index{ 0 }; uint32_t total_number_of_initializemetacommand{ 0 }; - uint64_t initialization_parameters_data_size{ 0 }; + uint64_t data_size{ 0 }; // In the capture file, initialize metacommand data is written in the following order: // InitializeMetaCommandHeder diff --git a/third_party/gfxreconstruct/framework/format/format_util.cpp b/third_party/gfxreconstruct/framework/format/format_util.cpp index 0d5814a79..75ab4554d 100644 --- a/third_party/gfxreconstruct/framework/format/format_util.cpp +++ b/third_party/gfxreconstruct/framework/format/format_util.cpp @@ -21,16 +21,29 @@ ** DEALINGS IN THE SOFTWARE. */ +#include +#include + #include "format/format_util.h" #include "util/logging.h" #include "util/lz4_compressor.h" #include "util/zlib_compressor.h" #include "util/zstd_compressor.h" +#include "util/strings.h" + +#include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(format) +// Utilities for format validation. +static bool VersionSupported(const FileHeader& header) +{ + auto file_version = GFXRECON_MAKE_FILE_VERSION(header.major_version, header.minor_version); + return file_version <= GFXRECON_CURRENT_FILE_VERSION; +} + bool ValidateFileHeader(const FileHeader& header) { bool valid = true; @@ -40,9 +53,16 @@ bool ValidateFileHeader(const FileHeader& header) GFXRECON_LOG_ERROR("Invalid file: File header does not contain the expected unrecognized four character code."); valid = false; } + else if (!VersionSupported(header)) + { - // TODO: Verify version is supported. - + GFXRECON_LOG_ERROR("Invalid file: File format version %u.%u later than currently supported version %u.%", + header.major_version, + header.minor_version, + GFXRECON_CURRENT_FILE_MAJOR, + GFXRECON_CURRENT_FILE_MINOR); + valid = false; + } return valid; } @@ -106,5 +126,80 @@ std::string GetCompressionTypeName(CompressionType type) return ""; } +const char* ToString(BlockType type) +{ + switch (type) + { + case kFrameMarkerBlock: + return "frame marker"; + case kStateMarkerBlock: + return "state marker"; + case kMetaDataBlock: + case kCompressedMetaDataBlock: + return "meta-data"; + case kFunctionCallBlock: + case kCompressedFunctionCallBlock: + return "function call"; + case kAnnotation: + return "annotation"; + case kMethodCallBlock: + case kCompressedMethodCallBlock: + return "method call"; + case kUnknownBlock: + return "unknown"; + } + return "INVALID BLOCK TYPE"; +} + +static GfxrVersion ParseVersionFromString(const std::string version_string) +{ + const char* version_regex_string = + R"(^\"(\d+)\.(\d+)\.(\d+)(?:-([\w-]+))?\s*\((?:[\w.-]+:)?([a-fA-F0-9]+)\*?[^)]*\)(?:\s*(.*))?\"$)"; + const std::regex version_regex(version_regex_string); + std::smatch match_groups; + GfxrVersion version; + if (std::regex_search(version_string, match_groups, version_regex)) + { + const std::string& major = match_groups[1].str(); + const std::string& minor = match_groups[2].str(); + const std::string& patch = match_groups[3].str(); + const std::string& tag = match_groups[4].str(); + const std::string& sha = match_groups[5].str(); + bool valid = true; + valid &= util::strings::StringToU32(major, version.major); + valid &= util::strings::StringToU32(minor, version.minor); + valid &= util::strings::StringToU32(patch, version.patch); + version.tag = tag; + version.sha = sha; + version.valid = valid; + } + return version; +} + +GfxrVersion ParseVersionFromOperations(const char* operations) +{ + nlohmann::json json_obj = nlohmann::json::parse(operations); + + if (!json_obj.is_discarded()) + { + auto search_result_iterator = json_obj.find(kOperationAnnotationGfxreconstructVersion); + if (search_result_iterator != json_obj.end()) + { + const nlohmann::json& value = *search_result_iterator; + if (value.is_string()) + { + return ParseVersionFromString(value.dump()); + } + } + } + return GfxrVersion(); +} + +bool GfxrVersion::SupportsFrameMarkers() const +{ + // Supported from 1.0.1 and later builds + return valid && ((major > 1)) || ((major == 1) && ((minor > 0) || (patch > 0))); +} + GFXRECON_END_NAMESPACE(format) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/format/format_util.h b/third_party/gfxreconstruct/framework/format/format_util.h index b572e11af..48f8d462b 100644 --- a/third_party/gfxreconstruct/framework/format/format_util.h +++ b/third_party/gfxreconstruct/framework/format/format_util.h @@ -95,6 +95,22 @@ util::Compressor* CreateCompressor(CompressionType type); std::string GetCompressionTypeName(CompressionType type); +const char* ToString(BlockType type); + +struct GfxrVersion +{ + bool valid = false; + uint32_t major = 0; + uint32_t minor = 0; + uint32_t patch = 0; + std::string tag; + std::string sha; + + bool SupportsFrameMarkers() const; +}; + +GfxrVersion ParseVersionFromOperations(const char* operations); + GFXRECON_END_NAMESPACE(format) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/format/platform_types.h b/third_party/gfxreconstruct/framework/format/platform_types.h index e2bf0952d..a3d3fa820 100644 --- a/third_party/gfxreconstruct/framework/format/platform_types.h +++ b/third_party/gfxreconstruct/framework/format/platform_types.h @@ -161,6 +161,11 @@ struct LARGE_INTEGER #endif // WIN32 +static inline int64_t pack_luid(LUID luid) +{ + return static_cast((static_cast(luid.HighPart) << 32) | luid.LowPart); +} + #ifndef __ANDROID__ typedef void* jobject; #endif diff --git a/third_party/gfxreconstruct/framework/format/platform_types_d3d_overrides.h b/third_party/gfxreconstruct/framework/format/platform_types_d3d_overrides.h index 1b0e5e11b..19a536ccc 100644 --- a/third_party/gfxreconstruct/framework/format/platform_types_d3d_overrides.h +++ b/third_party/gfxreconstruct/framework/format/platform_types_d3d_overrides.h @@ -61,6 +61,9 @@ typedef void* IDXGIAdapter2; typedef void* IDXGIAdapter3; typedef UINT DXGI_USAGE; +#define DXGI_STATUS_OCCLUDED 0x087A0001 +#define DXGI_STATUS_MODE_CHANGED 0x087A0002 +#define DXGI_STATUS_MODE_CHANGE_IN_PROGRESS 0x087A0008 #define DXGI_ERROR_ACCESS_DENIED 0x887A002B #define DXGI_ERROR_ACCESS_LOST 0x887A0026 #define DXGI_ERROR_ALREADY_EXISTS 0x887A0036L @@ -6506,7 +6509,7 @@ struct D3D12_BARRIER_GROUP }; }; -// SDK 10.0.20348.0 updates... +// SDK 10.0.26100.0 updates... struct D3D12_SAMPLE_MASK { UINT SampleMask; diff --git a/third_party/gfxreconstruct/framework/generated/dx12_generators/blacklists.json b/third_party/gfxreconstruct/framework/generated/dx12_generators/blacklists.json index 698dfb4d8..3c39cef8f 100644 --- a/third_party/gfxreconstruct/framework/generated/dx12_generators/blacklists.json +++ b/third_party/gfxreconstruct/framework/generated/dx12_generators/blacklists.json @@ -41,6 +41,9 @@ "D3D12_NODE", "D3D12_SET_PROGRAM_DESC", "D3D12_DISPATCH_GRAPH_DESC", - "D3D12_GENERIC_PROGRAM_DESC" + "D3D12_GENERIC_PROGRAM_DESC", + "D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1", + "D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC", + "D3D12_RAYTRACING_OPACITY_MICROMAP_DESC" ] } diff --git a/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_base_generator.py b/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_base_generator.py index ee04b6b2c..489d2ee58 100644 --- a/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_base_generator.py +++ b/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_base_generator.py @@ -339,6 +339,9 @@ class Dx12BaseGenerator(): 'D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC':'', } + # Not all generations check blacklists.json. This is for all generations. + BLACKLIST_FOR_ALL = ["DXGIDisableVBlankVirtualization"] + def __init__( self, source_dict, @@ -561,14 +564,6 @@ def endFeature(self): self.featureName = None self.featureExtraProtect = None - # - # Indicates that the current feature has C++ code to generate. - # The subclass should override this method. - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate. - The subclass should override this method.""" - return False - def generate_feature(self): """Performs C++ code generation for the feature. The subclass should override this method.""" @@ -1274,7 +1269,7 @@ def is_struct_black_listed(self, typename): def is_cmd_black_listed(self, name): """Determines if a function with the specified typename is blacklisted.""" - if name in self.APICALL_BLACKLIST: + if name in self.APICALL_BLACKLIST or name in self.BLACKLIST_FOR_ALL: return True if 'Decoder' in self.__class__.__name__ and name in self.APICALL_DECODER_BLACKLIST: return True diff --git a/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_call_id_to_string_header_generator.py b/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_call_id_to_string_header_generator.py index 3702de5ba..350142e53 100644 --- a/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_call_id_to_string_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_call_id_to_string_header_generator.py @@ -81,7 +81,9 @@ def get_function_call_body(self): header_dict = self.source_dict['header_dict'] for k, v in header_dict.items(): for m in v.functions: - if self.is_required_function_data(m): + if self.is_required_function_data(m) and ( + not self.is_cmd_black_listed(m['name']) + ): code += ( " case format::ApiCallId::ApiCall_{0}:\n" " out = L\"{0}\";\n" diff --git a/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_json_consumer_body_generator.py b/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_json_consumer_body_generator.py index 6eba08c2c..94334acc2 100644 --- a/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_json_consumer_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_json_consumer_body_generator.py @@ -159,7 +159,22 @@ def make_consumer_method_body(self, class_name, method_info, return_type, return # Generate a correct FieldToJson for each argument: for parameter in method_info['parameters']: value = self.get_value_info(parameter) - code += " " + self.make_field_to_json("args", value, "options") + "\n" + + function_call = self.make_field_to_json("args", value, "options") + "\n" + + ## Special case for pointers to flag sets defined by enums: + ## (easier than having pointer decoder versions of each flagset type's FieldToString) + if value.is_pointer and function_call.startswith("FieldToJson_"): + code += ' if (!{}->IsNull())\n'.format(value.name) + code += ' {{\n' + code += ' ' + function_call + code += ' }}\n' + code += ' else\n' + code += ' {{\n' + code += ' FieldToJson(args["{}"], nullptr, options);\n'.format(value.name) + code += ' }}\n' + else: + code += " " + function_call code += "}}\n" code += "writer_->WriteBlockEnd();" diff --git a/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_replay_consumer_body_generator.py b/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_replay_consumer_body_generator.py index dbe484e63..ee79bc16b 100644 --- a/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_replay_consumer_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_replay_consumer_body_generator.py @@ -442,7 +442,7 @@ def make_consumer_func_body(self, return_type, name, values): arg_list.append('out_op_{}'.format(value.name)) post_extenal_object_list.append( - 'PostProcessExternalObject(replay_result, out_op_{0}, out_p_{0}, format::ApiCallId::ApiCall_{1}, "{1}");\n' + 'PostProcessExternalObject(replay_result, reinterpret_cast(out_op_{0}), out_p_{0}, format::ApiCallId::ApiCall_{1}, "{1}");\n' .format(value.name, name) ) diff --git a/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_struct_wrapper_body_generator.py b/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_struct_wrapper_body_generator.py index a68050f5b..32484abf2 100644 --- a/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_struct_wrapper_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_struct_wrapper_body_generator.py @@ -86,8 +86,9 @@ def write_struct_member_def(self): elif self.is_class(value): if value.is_const: expr += ' if(value->{1})\n'\ - ' {{\n'\ - ' WrapObject(IID_{0}, reinterpret_cast(&const_cast<{0}*>(value->{1})), nullptr);\n'\ + ' {{\n' \ + ' {0}* casted = const_cast<{0}*>(value->{1});\n' \ + ' WrapObject(IID_{0}, reinterpret_cast(&casted), nullptr);\n' \ ' }}\n'.format(value.base_type, value.name) else: expr += ' if(value->{1})\n'\ diff --git a/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_wrapper_body_generator.py b/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_wrapper_body_generator.py index 84d883b2a..ca7c7ece3 100644 --- a/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_wrapper_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_wrapper_body_generator.py @@ -155,7 +155,9 @@ def generate_feature(self): self.newline() for m in v.functions: - if self.is_required_function_data(m): + if self.is_required_function_data(m) and ( + not self.is_cmd_black_listed(m['name']) + ): self.write_function_def(m) for class_name, class_value in v.classes.items(): diff --git a/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_wrapper_header_generator.py b/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_wrapper_header_generator.py index c0717a0d1..1e1824d8f 100644 --- a/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_wrapper_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/dx12_generators/dx12_wrapper_header_generator.py @@ -89,7 +89,9 @@ def generate_feature(self): self.newline() for m in v.functions: - if self.is_required_function_data(m): + if self.is_required_function_data(m) and ( + not self.is_cmd_black_listed(m['name']) + ): self.write_function_decl(m) for class_name, class_value in v.classes.items(): diff --git a/third_party/gfxreconstruct/framework/generated/dx12_generators/replay_overrides.json b/third_party/gfxreconstruct/framework/generated/dx12_generators/replay_overrides.json index fb93eae6b..03a5a7e53 100644 --- a/third_party/gfxreconstruct/framework/generated/dx12_generators/replay_overrides.json +++ b/third_party/gfxreconstruct/framework/generated/dx12_generators/replay_overrides.json @@ -35,7 +35,8 @@ "CreateComputePipelineState": "OverrideCreateComputePipelineState", "CreateCommandSignature": "OverrideCreateCommandSignature", "CreateCommandList": "OverrideCreateCommandList", - "CreateRootSignature": "OverrideCreateRootSignature" + "CreateRootSignature": "OverrideCreateRootSignature", + "OpenSharedHandle": "OverrideOpenSharedHandle" }, "ID3D12Device1": { "CreatePipelineLibrary": "OverrideCreatePipelineLibrary" diff --git a/third_party/gfxreconstruct/framework/generated/generate_vulkan.py b/third_party/gfxreconstruct/framework/generated/generate_vulkan.py index a0544a110..11fbf714b 100644 --- a/third_party/gfxreconstruct/framework/generated/generate_vulkan.py +++ b/third_party/gfxreconstruct/framework/generated/generate_vulkan.py @@ -55,6 +55,7 @@ 'generated_vulkan_command_buffer_util.cpp', 'generated_vulkan_dispatch_table.h', 'generated_vulkan_layer_func_table.h', + 'generated_vulkan_recapture_func_table.h', 'generated_vulkan_pnext_struct_encoder.cpp', 'generated_vulkan_pnext_struct_decoder.cpp', 'generated_vulkan_struct_decoders.h', diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_add_entries.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_add_entries.h index 9b003c8ec..1e69db5b8 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_add_entries.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_add_entries.h @@ -124,8 +124,10 @@ const std::unordered_map }, { IID_ID3D12Tools, AddEntry }, { IID_ID3D12Tools1, AddEntry }, + { IID_ID3D12Tools2, AddEntry }, { IID_ID3D12PageableTools, AddEntry }, { IID_ID3D12DeviceTools, AddEntry }, + { IID_ID3D12DeviceTools1, AddEntry }, { IID_ID3D12SDKConfiguration, AddEntry }, { IID_ID3D12SDKConfiguration1, AddEntry }, { IID_ID3D12DeviceFactory, AddEntry }, @@ -269,8 +271,10 @@ const std::unordered_map }, { IID_ID3D12Tools, AddEntry }, { IID_ID3D12Tools1, AddEntry }, + { IID_ID3D12Tools2, AddEntry }, { IID_ID3D12PageableTools, AddEntry }, { IID_ID3D12DeviceTools, AddEntry }, + { IID_ID3D12DeviceTools1, AddEntry }, { IID_ID3D12SDKConfiguration, AddEntry }, { IID_ID3D12SDKConfiguration1, AddEntry }, { IID_ID3D12DeviceFactory, AddEntry }, @@ -628,6 +632,11 @@ static DxWrapperInfo* GetWrapperInfo(IUnknown_Wrapper* wrapper) auto* new_wrapper = reinterpret_cast(wrapper); return new_wrapper->GetObjectInfo().get(); } + if(riid == IID_ID3D12Tools2) + { + auto* new_wrapper = reinterpret_cast(wrapper); + return new_wrapper->GetObjectInfo().get(); + } if(riid == IID_ID3D12PageableTools) { auto* new_wrapper = reinterpret_cast(wrapper); @@ -638,6 +647,11 @@ static DxWrapperInfo* GetWrapperInfo(IUnknown_Wrapper* wrapper) auto* new_wrapper = reinterpret_cast(wrapper); return new_wrapper->GetObjectInfo().get(); } + if(riid == IID_ID3D12DeviceTools1) + { + auto* new_wrapper = reinterpret_cast(wrapper); + return new_wrapper->GetObjectInfo().get(); + } if(riid == IID_ID3D12SDKConfiguration) { auto* new_wrapper = reinterpret_cast(wrapper); diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_api_call_encoders.cpp b/third_party/gfxreconstruct/framework/generated/generated_dx12_api_call_encoders.cpp index ed02a77c5..ac517e308 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_api_call_encoders.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_api_call_encoders.cpp @@ -42,13 +42,13 @@ GFXRECON_BEGIN_NAMESPACE(encode) /* -** This part is generated from dxgiformat.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgiformat.h in Windows SDK: 10.0.26100.0 ** */ /* -** This part is generated from d3d12.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12.h in Windows SDK: 10.0.26100.0 ** */ @@ -900,6 +900,11 @@ void EncodeStruct(ParameterEncoder* encoder, const D3D12_FEATURE_DATA_HARDWARE_C encoder->EncodeInt32Value(value.Supported); } +void EncodeStruct(ParameterEncoder* encoder, const D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE& value) +{ + encoder->EncodeInt32Value(value.Supported); +} + void EncodeStruct(ParameterEncoder* encoder, const D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED& value) { encoder->EncodeInt32Value(value.Supported); @@ -4928,6 +4933,20 @@ void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_GEOMETRY_AAB EncodeStruct(encoder, value.AABBs); } +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC& value) +{ + EncodeStruct(encoder, value.OpacityMicromapIndexBuffer); + encoder->EncodeEnumValue(value.OpacityMicromapIndexFormat); + encoder->EncodeUInt32Value(value.OpacityMicromapBaseLocation); + encoder->EncodeUInt64Value(value.OpacityMicromapArray); +} + +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC& value) +{ + EncodeStructPtr(encoder, value.pTriangles); + EncodeStructPtr(encoder, value.pOmmLinkage); +} + void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC& value) { encoder->EncodeUInt64Value(value.DestBuffer); @@ -4950,12 +4969,6 @@ void EncodeStruct(ParameterEncoder* encoder, const D3D12_BUILD_RAYTRACING_ACCELE encoder->EncodeUInt32Value(value.NumDescs); } -void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC& value) -{ - encoder->EncodeUInt64Value(value.SerializedSizeInBytes); - encoder->EncodeUInt64Value(value.NumBottomLevelAccelerationStructurePointers); -} - void EncodeStruct(ParameterEncoder* encoder, const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER& value) { EncodeStruct(encoder, value.DriverOpaqueGUID); @@ -4970,6 +4983,12 @@ void EncodeStruct(ParameterEncoder* encoder, const D3D12_SERIALIZED_RAYTRACING_A encoder->EncodeUInt64Value(value.NumBottomLevelAccelerationStructurePointersAfterHeader); } +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_SERIALIZED_BLOCK& value) +{ + encoder->EncodeEnumValue(value.Type); + encoder->EncodeUInt64Value(value.NumBlockPointersAfterHeader); +} + void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC& value) { encoder->EncodeUInt64Value(value.CurrentSizeInBytes); @@ -4985,6 +5004,21 @@ void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_INSTANCE_DES encoder->EncodeUInt64Value(value.AccelerationStructure); } +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY& value) +{ + encoder->EncodeUInt32Value(value.Count); + encoder->EncodeUInt32Value(value.SubdivisionLevel); + encoder->EncodeEnumValue(value.Format); +} + +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC& value) +{ + encoder->EncodeUInt32Value(value.NumOmmHistogramEntries); + EncodeStructPtr(encoder, value.pOmmHistogram); + encoder->EncodeUInt64Value(value.InputBuffer); + EncodeStruct(encoder, value.PerOmmDescs); +} + void EncodeStruct(ParameterEncoder* encoder, const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC& value) { encoder->EncodeUInt64Value(value.DestAccelerationStructureData); @@ -5000,6 +5034,22 @@ void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_ACCELERATION encoder->EncodeUInt64Value(value.UpdateScratchDataSizeInBytes); } +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC& value) +{ + encoder->EncodeUInt64Value(value.DestBuffer); + encoder->EncodeEnumValue(value.InfoType); +} + +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC& value) +{ + encoder->EncodeUInt64Value(value.CurrentSizeInBytes); +} + +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC& value) +{ + encoder->EncodeUInt64Value(value.DecodedSizeInBytes); +} + void Encode_ID3D12Device5_CreateLifetimeTracker( ID3D12Device5_Wrapper* wrapper, HRESULT return_value, @@ -6488,6 +6538,27 @@ void Encode_ID3D12Tools1_ClearReservedGPUVARangesList( } } +void Encode_ID3D12Tools2_SetApplicationSpecificDriverState( + ID3D12Tools2_Wrapper* wrapper, + HRESULT return_value, + IUnknown* pAdapter, + ID3DBlob* pBlob) +{ + auto encoder = D3D12CaptureManager::Get()->BeginMethodCallCapture(format::ApiCallId::ApiCall_ID3D12Tools2_SetApplicationSpecificDriverState, wrapper->GetCaptureId()); + if(encoder) + { + bool omit_output_data = false; + if (return_value != S_OK) + { + omit_output_data = true; + } + encoder->EncodeObjectValue(pAdapter); + encoder->EncodeObjectValue(pBlob); + encoder->EncodeInt32Value(return_value); + D3D12CaptureManager::Get()->EndMethodCallCapture(); + } +} + void Encode_ID3D12PageableTools_GetAllocation( ID3D12PageableTools_Wrapper* wrapper, HRESULT return_value, @@ -6519,6 +6590,37 @@ void Encode_ID3D12DeviceTools_SetNextAllocationAddress( } } +void Encode_ID3D12DeviceTools1_GetApplicationSpecificDriverState( + ID3D12DeviceTools1_Wrapper* wrapper, + HRESULT return_value, + ID3DBlob** ppBlob) +{ + auto encoder = D3D12CaptureManager::Get()->BeginTrackedMethodCallCapture(format::ApiCallId::ApiCall_ID3D12DeviceTools1_GetApplicationSpecificDriverState, wrapper->GetCaptureId()); + if(encoder) + { + bool omit_output_data = false; + if (return_value != S_OK) + { + omit_output_data = true; + } + encoder->EncodeObjectPtr(ppBlob, omit_output_data); + encoder->EncodeInt32Value(return_value); + D3D12CaptureManager::Get()->EndCreateMethodCallCapture(return_value, IID_ID3D10Blob, reinterpret_cast(ppBlob), wrapper); + } +} + +void Encode_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus( + ID3D12DeviceTools1_Wrapper* wrapper, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS return_value) +{ + auto encoder = D3D12CaptureManager::Get()->BeginMethodCallCapture(format::ApiCallId::ApiCall_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus, wrapper->GetCaptureId()); + if(encoder) + { + encoder->EncodeEnumValue(return_value); + D3D12CaptureManager::Get()->EndMethodCallCapture(); + } +} + void EncodeStruct(ParameterEncoder* encoder, const D3D12_SUBRESOURCE_DATA& value) { encoder->EncodeVoidPtr(value.pData); @@ -7111,7 +7213,7 @@ void Encode_ID3D12GBVDiagnostics_GBVReserved1( /* -** This part is generated from d3dcommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3dcommon.h in Windows SDK: 10.0.26100.0 ** */ @@ -7189,7 +7291,7 @@ void Encode_ID3DDestructionNotifier_UnregisterDestructionCallback( /* -** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.26100.0 ** */ @@ -8426,7 +8528,7 @@ void Encode_ID3D12InfoQueue1_UnregisterMessageCallback( /* -** This part is generated from dxgi.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi.h in Windows SDK: 10.0.26100.0 ** */ @@ -9676,7 +9778,7 @@ void Encode_IDXGIDevice1_GetMaximumFrameLatency( /* -** This part is generated from dxgi1_2.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_2.h in Windows SDK: 10.0.26100.0 ** */ @@ -10638,7 +10740,7 @@ void Encode_IDXGIOutput1_DuplicateOutput( /* -** This part is generated from dxgi1_3.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_3.h in Windows SDK: 10.0.26100.0 ** */ @@ -11190,7 +11292,7 @@ void Encode_IDXGIOutput3_CheckOverlaySupport( /* -** This part is generated from dxgi1_4.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_4.h in Windows SDK: 10.0.26100.0 ** */ @@ -11468,7 +11570,7 @@ void Encode_IDXGIAdapter3_UnregisterVideoMemoryBudgetChangeNotification( /* -** This part is generated from dxgi1_5.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_5.h in Windows SDK: 10.0.26100.0 ** */ @@ -11589,7 +11691,7 @@ void Encode_IDXGIDevice4_ReclaimResources1( /* -** This part is generated from dxgi1_6.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_6.h in Windows SDK: 10.0.26100.0 ** */ @@ -11767,7 +11869,7 @@ void Encode_IDXGIFactory7_UnregisterAdaptersChangedEvent( /* -** This part is generated from dxgicommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgicommon.h in Windows SDK: 10.0.26100.0 ** */ @@ -11785,7 +11887,7 @@ void EncodeStruct(ParameterEncoder* encoder, const DXGI_SAMPLE_DESC& value) /* -** This part is generated from dxgitype.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgitype.h in Windows SDK: 10.0.26100.0 ** */ @@ -11849,7 +11951,7 @@ void EncodeStruct(ParameterEncoder* encoder, const DXGI_JPEG_QUANTIZATION_TABLE& /* -** This part is generated from Unknwnbase.h in Windows SDK: 10.0.20348.0 +** This part is generated from Unknwnbase.h in Windows SDK: 10.0.26100.0 ** */ @@ -11900,7 +12002,7 @@ void Encode_IUnknown_Release( /* -** This part is generated from guiddef.h in Windows SDK: 10.0.20348.0 +** This part is generated from guiddef.h in Windows SDK: 10.0.26100.0 ** */ @@ -11914,7 +12016,7 @@ void EncodeStruct(ParameterEncoder* encoder, const GUID& value) /* -** This part is generated from windef.h in Windows SDK: 10.0.20348.0 +** This part is generated from windef.h in Windows SDK: 10.0.26100.0 ** */ @@ -11934,7 +12036,7 @@ void EncodeStruct(ParameterEncoder* encoder, const tagPOINT& value) /* -** This part is generated from minwinbase.h in Windows SDK: 10.0.20348.0 +** This part is generated from minwinbase.h in Windows SDK: 10.0.26100.0 ** */ diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_api_call_encoders.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_api_call_encoders.h index 0ace03577..c87e842b4 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_api_call_encoders.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_api_call_encoders.h @@ -55,13 +55,13 @@ GFXRECON_BEGIN_NAMESPACE(encode) /* -** This part is generated from dxgiformat.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgiformat.h in Windows SDK: 10.0.26100.0 ** */ /* -** This part is generated from d3d12.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12.h in Windows SDK: 10.0.26100.0 ** */ @@ -282,6 +282,8 @@ void EncodeStruct(ParameterEncoder* encoder, const D3D12_FEATURE_DATA_PREDICATIO void EncodeStruct(ParameterEncoder* encoder, const D3D12_FEATURE_DATA_HARDWARE_COPY& value); +void EncodeStruct(ParameterEncoder* encoder, const D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE& value); + void EncodeStruct(ParameterEncoder* encoder, const D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED& value); void EncodeStruct(ParameterEncoder* encoder, const D3D12_RESOURCE_ALLOCATION_INFO& value); @@ -1595,6 +1597,10 @@ void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_AABB& value) void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_GEOMETRY_AABBS_DESC& value); +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC& value); + +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC& value); + void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC& value); void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC& value); @@ -1603,20 +1609,30 @@ void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_ACCELERATION void EncodeStruct(ParameterEncoder* encoder, const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER& value); -void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC& value); - void EncodeStruct(ParameterEncoder* encoder, const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER& value); void EncodeStruct(ParameterEncoder* encoder, const D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER& value); +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_SERIALIZED_BLOCK& value); + void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC& value); void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_INSTANCE_DESC& value); +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY& value); + +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC& value); + void EncodeStruct(ParameterEncoder* encoder, const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC& value); void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO& value); +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC& value); + +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC& value); + +void EncodeStruct(ParameterEncoder* encoder, const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC& value); + void Encode_ID3D12Device5_CreateLifetimeTracker( ID3D12Device5_Wrapper* wrapper, HRESULT return_value, @@ -2088,6 +2104,12 @@ void Encode_ID3D12Tools1_ReserveGPUVARangesAtCreate( void Encode_ID3D12Tools1_ClearReservedGPUVARangesList( ID3D12Tools1_Wrapper* wrapper); +void Encode_ID3D12Tools2_SetApplicationSpecificDriverState( + ID3D12Tools2_Wrapper* wrapper, + HRESULT return_value, + IUnknown* pAdapter, + ID3DBlob* pBlob); + void Encode_ID3D12PageableTools_GetAllocation( ID3D12PageableTools_Wrapper* wrapper, HRESULT return_value, @@ -2097,6 +2119,15 @@ void Encode_ID3D12DeviceTools_SetNextAllocationAddress( ID3D12DeviceTools_Wrapper* wrapper, D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress); +void Encode_ID3D12DeviceTools1_GetApplicationSpecificDriverState( + ID3D12DeviceTools1_Wrapper* wrapper, + HRESULT return_value, + ID3DBlob** ppBlob); + +void Encode_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus( + ID3D12DeviceTools1_Wrapper* wrapper, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS return_value); + void EncodeStruct(ParameterEncoder* encoder, const D3D12_SUBRESOURCE_DATA& value); void EncodeStruct(ParameterEncoder* encoder, const D3D12_MEMCPY_DEST& value); @@ -2283,7 +2314,7 @@ void Encode_ID3D12GBVDiagnostics_GBVReserved1( /* -** This part is generated from d3dcommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3dcommon.h in Windows SDK: 10.0.26100.0 ** */ @@ -2311,7 +2342,7 @@ void Encode_ID3DDestructionNotifier_UnregisterDestructionCallback( /* -** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.26100.0 ** */ @@ -2698,7 +2729,7 @@ void Encode_ID3D12InfoQueue1_UnregisterMessageCallback( /* -** This part is generated from dxgi.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi.h in Windows SDK: 10.0.26100.0 ** */ @@ -3046,7 +3077,7 @@ void Encode_IDXGIDevice1_GetMaximumFrameLatency( /* -** This part is generated from dxgi1_2.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_2.h in Windows SDK: 10.0.26100.0 ** */ @@ -3325,7 +3356,7 @@ void Encode_IDXGIOutput1_DuplicateOutput( /* -** This part is generated from dxgi1_3.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_3.h in Windows SDK: 10.0.26100.0 ** */ @@ -3487,7 +3518,7 @@ void Encode_IDXGIOutput3_CheckOverlaySupport( /* -** This part is generated from dxgi1_4.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_4.h in Windows SDK: 10.0.26100.0 ** */ @@ -3576,7 +3607,7 @@ void Encode_IDXGIAdapter3_UnregisterVideoMemoryBudgetChangeNotification( /* -** This part is generated from dxgi1_5.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_5.h in Windows SDK: 10.0.26100.0 ** */ @@ -3617,7 +3648,7 @@ void Encode_IDXGIDevice4_ReclaimResources1( /* -** This part is generated from dxgi1_6.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_6.h in Windows SDK: 10.0.26100.0 ** */ @@ -3664,7 +3695,7 @@ void Encode_IDXGIFactory7_UnregisterAdaptersChangedEvent( /* -** This part is generated from dxgicommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgicommon.h in Windows SDK: 10.0.26100.0 ** */ @@ -3674,7 +3705,7 @@ void EncodeStruct(ParameterEncoder* encoder, const DXGI_SAMPLE_DESC& value); /* -** This part is generated from dxgitype.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgitype.h in Windows SDK: 10.0.26100.0 ** */ @@ -3696,7 +3727,7 @@ void EncodeStruct(ParameterEncoder* encoder, const DXGI_JPEG_QUANTIZATION_TABLE& /* -** This part is generated from Unknwnbase.h in Windows SDK: 10.0.20348.0 +** This part is generated from Unknwnbase.h in Windows SDK: 10.0.26100.0 ** */ @@ -3716,7 +3747,7 @@ void Encode_IUnknown_Release( /* -** This part is generated from guiddef.h in Windows SDK: 10.0.20348.0 +** This part is generated from guiddef.h in Windows SDK: 10.0.26100.0 ** */ @@ -3724,7 +3755,7 @@ void EncodeStruct(ParameterEncoder* encoder, const GUID& value); /* -** This part is generated from windef.h in Windows SDK: 10.0.20348.0 +** This part is generated from windef.h in Windows SDK: 10.0.26100.0 ** */ @@ -3734,7 +3765,7 @@ void EncodeStruct(ParameterEncoder* encoder, const tagPOINT& value); /* -** This part is generated from minwinbase.h in Windows SDK: 10.0.20348.0 +** This part is generated from minwinbase.h in Windows SDK: 10.0.26100.0 ** */ diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_call_id_to_string.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_call_id_to_string.h index a1618580a..c4053ad22 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_call_id_to_string.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_call_id_to_string.h @@ -788,12 +788,21 @@ inline std::wstring GetDx12CallIdString(format::ApiCallId call_id) case format::ApiCallId::ApiCall_ID3D12Tools1_ClearReservedGPUVARangesList: out = L"ID3D12Tools1_ClearReservedGPUVARangesList"; break; + case format::ApiCallId::ApiCall_ID3D12Tools2_SetApplicationSpecificDriverState: + out = L"ID3D12Tools2_SetApplicationSpecificDriverState"; + break; case format::ApiCallId::ApiCall_ID3D12PageableTools_GetAllocation: out = L"ID3D12PageableTools_GetAllocation"; break; case format::ApiCallId::ApiCall_ID3D12DeviceTools_SetNextAllocationAddress: out = L"ID3D12DeviceTools_SetNextAllocationAddress"; break; + case format::ApiCallId::ApiCall_ID3D12DeviceTools1_GetApplicationSpecificDriverState: + out = L"ID3D12DeviceTools1_GetApplicationSpecificDriverState"; + break; + case format::ApiCallId::ApiCall_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus: + out = L"ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus"; + break; case format::ApiCallId::ApiCall_ID3D12SDKConfiguration_SetSDKVersion: out = L"ID3D12SDKConfiguration_SetSDKVersion"; break; diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_consumer.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_consumer.h index 0ac0ec0a9..906d49ff6 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_consumer.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_consumer.h @@ -45,7 +45,7 @@ class Dx12Consumer : public Dx12ConsumerBase Dx12Consumer(){} virtual ~Dx12Consumer() override {} /* -** This part is generated from d3d12.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_D3D12SerializeRootSignature( @@ -1848,6 +1848,13 @@ class Dx12Consumer : public Dx12ConsumerBase const ApiCallInfo& call_info, format::HandleId object_id){} + virtual void Process_ID3D12Tools2_SetApplicationSpecificDriverState( + const ApiCallInfo& call_info, + format::HandleId object_id, + HRESULT return_value, + format::HandleId pAdapter, + format::HandleId pBlob){} + virtual void Process_ID3D12PageableTools_GetAllocation( const ApiCallInfo& call_info, format::HandleId object_id, @@ -1859,6 +1866,17 @@ class Dx12Consumer : public Dx12ConsumerBase format::HandleId object_id, D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress){} + virtual void Process_ID3D12DeviceTools1_GetApplicationSpecificDriverState( + const ApiCallInfo& call_info, + format::HandleId object_id, + HRESULT return_value, + HandlePointerDecoder* ppBlob){} + + virtual void Process_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus( + const ApiCallInfo& call_info, + format::HandleId object_id, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS return_value){} + virtual void Process_ID3D12SDKConfiguration_SetSDKVersion( const ApiCallInfo& call_info, format::HandleId object_id, @@ -2067,7 +2085,7 @@ class Dx12Consumer : public Dx12ConsumerBase format::HandleId object_id){} /* -** This part is generated from d3dcommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3dcommon.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_ID3D10Blob_GetBufferPointer( @@ -2095,7 +2113,7 @@ class Dx12Consumer : public Dx12ConsumerBase UINT callbackID){} /* -** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_ID3D12Debug_EnableDebugLayer( @@ -2542,7 +2560,7 @@ class Dx12Consumer : public Dx12ConsumerBase DWORD CallbackCookie){} /* -** This part is generated from dxgi.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_CreateDXGIFactory( @@ -2928,7 +2946,7 @@ class Dx12Consumer : public Dx12ConsumerBase PointerDecoder* pMaxLatency){} /* -** This part is generated from dxgi1_2.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_2.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_IDXGIDisplayControl_IsStereoEnabled( @@ -3228,7 +3246,7 @@ class Dx12Consumer : public Dx12ConsumerBase HandlePointerDecoder* ppOutputDuplication){} /* -** This part is generated from dxgi1_3.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_3.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_CreateDXGIFactory2( @@ -3409,7 +3427,7 @@ class Dx12Consumer : public Dx12ConsumerBase PointerDecoder* pFlags){} /* -** This part is generated from dxgi1_4.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_4.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_IDXGISwapChain3_GetCurrentBackBufferIndex( @@ -3507,7 +3525,7 @@ class Dx12Consumer : public Dx12ConsumerBase DWORD dwCookie){} /* -** This part is generated from dxgi1_5.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_5.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_IDXGIOutput5_DuplicateOutput1( @@ -3546,7 +3564,7 @@ class Dx12Consumer : public Dx12ConsumerBase PointerDecoder* pResults){} /* -** This part is generated from dxgi1_6.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_6.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_DXGIDeclareAdapterRemovalSupport( @@ -3594,7 +3612,7 @@ class Dx12Consumer : public Dx12ConsumerBase DWORD dwCookie){} /* -** This part is generated from Unknwnbase.h in Windows SDK: 10.0.20348.0 +** This part is generated from Unknwnbase.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_IUnknown_QueryInterface( diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_decoder.cpp b/third_party/gfxreconstruct/framework/generated/generated_dx12_decoder.cpp index f6ed692af..03d2bfcd4 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_decoder.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_decoder.cpp @@ -814,12 +814,21 @@ void Dx12Decoder::DecodeMethodCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_ID3D12Tools1_ClearReservedGPUVARangesList: Decode_ID3D12Tools1_ClearReservedGPUVARangesList(object_id, call_info, parameter_buffer, buffer_size); break; + case format::ApiCallId::ApiCall_ID3D12Tools2_SetApplicationSpecificDriverState: + Decode_ID3D12Tools2_SetApplicationSpecificDriverState(object_id, call_info, parameter_buffer, buffer_size); + break; case format::ApiCallId::ApiCall_ID3D12PageableTools_GetAllocation: Decode_ID3D12PageableTools_GetAllocation(object_id, call_info, parameter_buffer, buffer_size); break; case format::ApiCallId::ApiCall_ID3D12DeviceTools_SetNextAllocationAddress: Decode_ID3D12DeviceTools_SetNextAllocationAddress(object_id, call_info, parameter_buffer, buffer_size); break; + case format::ApiCallId::ApiCall_ID3D12DeviceTools1_GetApplicationSpecificDriverState: + Decode_ID3D12DeviceTools1_GetApplicationSpecificDriverState(object_id, call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus: + Decode_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus(object_id, call_info, parameter_buffer, buffer_size); + break; case format::ApiCallId::ApiCall_ID3D12SDKConfiguration_SetSDKVersion: Decode_ID3D12SDKConfiguration_SetSDKVersion(object_id, call_info, parameter_buffer, buffer_size); break; @@ -7014,6 +7023,26 @@ size_t Dx12Decoder::Decode_ID3D12Tools1_ClearReservedGPUVARangesList(format::Han return bytes_read; } +size_t Dx12Decoder::Decode_ID3D12Tools2_SetApplicationSpecificDriverState(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId pAdapter; + format::HandleId pBlob; + HRESULT return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pAdapter); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pBlob); + bytes_read += ValueDecoder::DecodeInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_ID3D12Tools2_SetApplicationSpecificDriverState(call_info, object_id, return_value, pAdapter, pBlob); + } + + return bytes_read; +} + size_t Dx12Decoder::Decode_ID3D12PageableTools_GetAllocation(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; @@ -7048,6 +7077,40 @@ size_t Dx12Decoder::Decode_ID3D12DeviceTools_SetNextAllocationAddress(format::Ha return bytes_read; } +size_t Dx12Decoder::Decode_ID3D12DeviceTools1_GetApplicationSpecificDriverState(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + HandlePointerDecoder ppBlob; + HRESULT return_value; + + bytes_read += ppBlob.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_ID3D12DeviceTools1_GetApplicationSpecificDriverState(call_info, object_id, return_value, &ppBlob); + } + + return bytes_read; +} + +size_t Dx12Decoder::Decode_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS return_value; + + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus(call_info, object_id, return_value); + } + + return bytes_read; +} + size_t Dx12Decoder::Decode_ID3D12SDKConfiguration_SetSDKVersion(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_decoder.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_decoder.h index c8bc7dcfc..2faa3ad97 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_decoder.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_decoder.h @@ -54,7 +54,7 @@ class Dx12Decoder : public Dx12DecoderBase private: /* -** This part is generated from d3d12.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12.h in Windows SDK: 10.0.26100.0 ** */ size_t Decode_D3D12SerializeRootSignature(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -304,8 +304,11 @@ class Dx12Decoder : public Dx12DecoderBase size_t Decode_ID3D12Tools_ShaderInstrumentationEnabled(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_ID3D12Tools1_ReserveGPUVARangesAtCreate(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_ID3D12Tools1_ClearReservedGPUVARangesList(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_ID3D12Tools2_SetApplicationSpecificDriverState(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_ID3D12PageableTools_GetAllocation(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_ID3D12DeviceTools_SetNextAllocationAddress(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_ID3D12DeviceTools1_GetApplicationSpecificDriverState(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_ID3D12SDKConfiguration_SetSDKVersion(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_ID3D12SDKConfiguration1_CreateDeviceFactory(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_ID3D12SDKConfiguration1_FreeUnusedSDKs(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -339,7 +342,7 @@ class Dx12Decoder : public Dx12DecoderBase size_t Decode_ID3D12GBVDiagnostics_GBVReserved1(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); /* -** This part is generated from d3dcommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3dcommon.h in Windows SDK: 10.0.26100.0 ** */ size_t Decode_ID3D10Blob_GetBufferPointer(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -348,7 +351,7 @@ class Dx12Decoder : public Dx12DecoderBase size_t Decode_ID3DDestructionNotifier_UnregisterDestructionCallback(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); /* -** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.26100.0 ** */ size_t Decode_ID3D12Debug_EnableDebugLayer(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -427,7 +430,7 @@ class Dx12Decoder : public Dx12DecoderBase size_t Decode_ID3D12InfoQueue1_UnregisterMessageCallback(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); /* -** This part is generated from dxgi.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi.h in Windows SDK: 10.0.26100.0 ** */ size_t Decode_CreateDXGIFactory(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -490,7 +493,7 @@ class Dx12Decoder : public Dx12DecoderBase size_t Decode_IDXGIDevice1_GetMaximumFrameLatency(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); /* -** This part is generated from dxgi1_2.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_2.h in Windows SDK: 10.0.26100.0 ** */ size_t Decode_IDXGIDisplayControl_IsStereoEnabled(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -538,7 +541,7 @@ class Dx12Decoder : public Dx12DecoderBase size_t Decode_IDXGIOutput1_DuplicateOutput(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); /* -** This part is generated from dxgi1_3.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_3.h in Windows SDK: 10.0.26100.0 ** */ size_t Decode_CreateDXGIFactory2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -570,7 +573,7 @@ class Dx12Decoder : public Dx12DecoderBase size_t Decode_IDXGIOutput3_CheckOverlaySupport(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); /* -** This part is generated from dxgi1_4.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_4.h in Windows SDK: 10.0.26100.0 ** */ size_t Decode_IDXGISwapChain3_GetCurrentBackBufferIndex(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -588,7 +591,7 @@ class Dx12Decoder : public Dx12DecoderBase size_t Decode_IDXGIAdapter3_UnregisterVideoMemoryBudgetChangeNotification(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); /* -** This part is generated from dxgi1_5.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_5.h in Windows SDK: 10.0.26100.0 ** */ size_t Decode_IDXGIOutput5_DuplicateOutput1(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -597,7 +600,7 @@ class Dx12Decoder : public Dx12DecoderBase size_t Decode_IDXGIDevice4_ReclaimResources1(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); /* -** This part is generated from dxgi1_6.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_6.h in Windows SDK: 10.0.26100.0 ** */ size_t Decode_DXGIDeclareAdapterRemovalSupport(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -609,7 +612,7 @@ class Dx12Decoder : public Dx12DecoderBase size_t Decode_IDXGIFactory7_UnregisterAdaptersChangedEvent(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); /* -** This part is generated from Unknwnbase.h in Windows SDK: 10.0.20348.0 +** This part is generated from Unknwnbase.h in Windows SDK: 10.0.26100.0 ** */ size_t Decode_IUnknown_QueryInterface(format::HandleId object_id, const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_enum_to_json.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_enum_to_json.h index 12cb0d953..0c3ae2592 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_enum_to_json.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_enum_to_json.h @@ -1123,6 +1123,33 @@ inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_RAYTRACING_IN FieldToJson(jdata, *pEnum, options); } +inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX value, const JsonOptions& options = JsonOptions()) +{ + FieldToJson(jdata, ToString(value), options); +} +inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX* pEnum, const JsonOptions& options = JsonOptions()) +{ + FieldToJson(jdata, *pEnum, options); +} + +inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_RAYTRACING_OPACITY_MICROMAP_STATE value, const JsonOptions& options = JsonOptions()) +{ + FieldToJson(jdata, ToString(value), options); +} +inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_RAYTRACING_OPACITY_MICROMAP_STATE* pEnum, const JsonOptions& options = JsonOptions()) +{ + FieldToJson(jdata, *pEnum, options); +} + +inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT value, const JsonOptions& options = JsonOptions()) +{ + FieldToJson(jdata, ToString(value), options); +} +inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT* pEnum, const JsonOptions& options = JsonOptions()) +{ + FieldToJson(jdata, *pEnum, options); +} + inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS value, const JsonOptions& options = JsonOptions()) { FieldToJson(jdata, ToString(value), options); @@ -1186,6 +1213,33 @@ inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_DRIVER_MATCHI FieldToJson(jdata, *pEnum, options); } +inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE value, const JsonOptions& options = JsonOptions()) +{ + FieldToJson(jdata, ToString(value), options); +} +inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE* pEnum, const JsonOptions& options = JsonOptions()) +{ + FieldToJson(jdata, *pEnum, options); +} + +inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE value, const JsonOptions& options = JsonOptions()) +{ + FieldToJson(jdata, ToString(value), options); +} +inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE* pEnum, const JsonOptions& options = JsonOptions()) +{ + FieldToJson(jdata, *pEnum, options); +} + +inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE value, const JsonOptions& options = JsonOptions()) +{ + FieldToJson(jdata, ToString(value), options); +} +inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE* pEnum, const JsonOptions& options = JsonOptions()) +{ + FieldToJson(jdata, *pEnum, options); +} + inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_RAY_FLAGS value, const JsonOptions& options = JsonOptions()) { FieldToJson(jdata, ToString(value), options); @@ -1420,6 +1474,15 @@ inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_SHADER_CACHE_ FieldToJson(jdata, *pEnum, options); } +inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS value, const JsonOptions& options = JsonOptions()) +{ + FieldToJson(jdata, ToString(value), options); +} +inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS* pEnum, const JsonOptions& options = JsonOptions()) +{ + FieldToJson(jdata, *pEnum, options); +} + inline void FieldToJson(nlohmann::ordered_json& jdata, const D3D12_DEVICE_FACTORY_FLAGS value, const JsonOptions& options = JsonOptions()) { FieldToJson(jdata, ToString(value), options); @@ -2749,6 +2812,19 @@ inline void FieldToJson_D3D12_SHADER_CACHE_CONTROL_FLAGS(nlohmann::ordered_json& } FieldToJson(jdata, representation, options); } +inline void FieldToJson_D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS(nlohmann::ordered_json& jdata, const uint32_t flags, const JsonOptions& options = JsonOptions()) +{ + std::string representation; + if (!options.expand_flags) + { + representation = to_hex_fixed_width(flags); + } + else + { + representation = ToString_D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS(flags); + } + FieldToJson(jdata, representation, options); +} inline void FieldToJson_D3D12_DEVICE_FACTORY_FLAGS(nlohmann::ordered_json& jdata, const uint32_t flags, const JsonOptions& options = JsonOptions()) { std::string representation; diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_enum_to_string.cpp b/third_party/gfxreconstruct/framework/generated/generated_dx12_enum_to_string.cpp index 6a85d6a29..27a4b0b8f 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_enum_to_string.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_enum_to_string.cpp @@ -514,6 +514,7 @@ std::string ToString(const D3D12_FEATURE value) case D3D12_FEATURE_PLACED_RESOURCE_SUPPORT_INFO: ret = "D3D12_FEATURE_PLACED_RESOURCE_SUPPORT_INFO"; break; case D3D12_FEATURE_HARDWARE_COPY: ret = "D3D12_FEATURE_HARDWARE_COPY"; break; case D3D12_FEATURE_D3D12_OPTIONS21: ret = "D3D12_FEATURE_D3D12_OPTIONS21"; break; + case D3D12_FEATURE_APPLICATION_SPECIFIC_DRIVER_STATE: ret = "D3D12_FEATURE_APPLICATION_SPECIFIC_DRIVER_STATE"; break; case D3D12_FEATURE_BYTECODE_BYPASS_HASH_SUPPORTED: ret = "D3D12_FEATURE_BYTECODE_BYPASS_HASH_SUPPORTED"; break; } return ret; @@ -823,6 +824,7 @@ std::string ToString(const D3D12_RAYTRACING_TIER value) case D3D12_RAYTRACING_TIER_NOT_SUPPORTED: ret = "D3D12_RAYTRACING_TIER_NOT_SUPPORTED"; break; case D3D12_RAYTRACING_TIER_1_0: ret = "D3D12_RAYTRACING_TIER_1_0"; break; case D3D12_RAYTRACING_TIER_1_1: ret = "D3D12_RAYTRACING_TIER_1_1"; break; + case D3D12_RAYTRACING_TIER_1_2: ret = "D3D12_RAYTRACING_TIER_1_2"; break; } return ret; } @@ -1944,6 +1946,7 @@ std::string ToString(const D3D12_RAYTRACING_PIPELINE_FLAGS value) case D3D12_RAYTRACING_PIPELINE_FLAG_NONE: ret = "D3D12_RAYTRACING_PIPELINE_FLAG_NONE"; break; case D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_TRIANGLES: ret = "D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_TRIANGLES"; break; case D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES: ret = "D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES"; break; + case D3D12_RAYTRACING_PIPELINE_FLAG_ALLOW_OPACITY_MICROMAPS: ret = "D3D12_RAYTRACING_PIPELINE_FLAG_ALLOW_OPACITY_MICROMAPS"; break; } return ret; } @@ -2023,6 +2026,7 @@ std::string ToString(const D3D12_RAYTRACING_GEOMETRY_TYPE value) switch (value) { case D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES: ret = "D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES"; break; case D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS: ret = "D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS"; break; + case D3D12_RAYTRACING_GEOMETRY_TYPE_OMM_TRIANGLES: ret = "D3D12_RAYTRACING_GEOMETRY_TYPE_OMM_TRIANGLES"; break; } return ret; } @@ -2036,6 +2040,8 @@ std::string ToString(const D3D12_RAYTRACING_INSTANCE_FLAGS value) case D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_FRONT_COUNTERCLOCKWISE: ret = "D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_FRONT_COUNTERCLOCKWISE"; break; case D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OPAQUE: ret = "D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OPAQUE"; break; case D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE: ret = "D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE"; break; + case D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OMM_2_STATE: ret = "D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OMM_2_STATE"; break; + case D3D12_RAYTRACING_INSTANCE_FLAG_DISABLE_OMMS: ret = "D3D12_RAYTRACING_INSTANCE_FLAG_DISABLE_OMMS"; break; } return ret; } @@ -2045,6 +2051,40 @@ std::string ToString_D3D12_RAYTRACING_INSTANCE_FLAGS(const uint32_t flags) return BitmaskToString(flags); } +std::string ToString(const D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX value) +{ + const char* ret = "Unhandled D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX"; + switch (value) { + case D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT: ret = "D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT"; break; + case D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE: ret = "D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE"; break; + case D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT: ret = "D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT"; break; + case D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE: ret = "D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE"; break; + } + return ret; +} + +std::string ToString(const D3D12_RAYTRACING_OPACITY_MICROMAP_STATE value) +{ + const char* ret = "Unhandled D3D12_RAYTRACING_OPACITY_MICROMAP_STATE"; + switch (value) { + case D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_TRANSPARENT: ret = "D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_TRANSPARENT"; break; + case D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_OPAQUE: ret = "D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_OPAQUE"; break; + case D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_TRANSPARENT: ret = "D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_TRANSPARENT"; break; + case D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_OPAQUE: ret = "D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_OPAQUE"; break; + } + return ret; +} + +std::string ToString(const D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT value) +{ + const char* ret = "Unhandled D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT"; + switch (value) { + case D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_2_STATE: ret = "D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_2_STATE"; break; + case D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_4_STATE: ret = "D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_4_STATE"; break; + } + return ret; +} + std::string ToString(const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS value) { const char* ret = "Unhandled D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS"; @@ -2056,6 +2096,8 @@ std::string ToString(const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS v case D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_BUILD: ret = "D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_BUILD"; break; case D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_MINIMIZE_MEMORY: ret = "D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_MINIMIZE_MEMORY"; break; case D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE: ret = "D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE"; break; + case D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_OMM_UPDATE: ret = "D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_OMM_UPDATE"; break; + case D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_DISABLE_OMMS: ret = "D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_DISABLE_OMMS"; break; } return ret; } @@ -2084,6 +2126,7 @@ std::string ToString(const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE value) switch (value) { case D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL: ret = "D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL"; break; case D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL: ret = "D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL"; break; + case D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_ARRAY: ret = "D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_ARRAY"; break; } return ret; } @@ -2115,6 +2158,7 @@ std::string ToString(const D3D12_SERIALIZED_DATA_TYPE value) const char* ret = "Unhandled D3D12_SERIALIZED_DATA_TYPE"; switch (value) { case D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE: ret = "D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE"; break; + case D3D12_SERIALIZED_DATA_APPLICATION_SPECIFIC_DRIVER_STATE: ret = "D3D12_SERIALIZED_DATA_APPLICATION_SPECIFIC_DRIVER_STATE"; break; } return ret; } @@ -2137,6 +2181,35 @@ std::string ToString_D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS(const uint32_t flag return BitmaskToString(flags); } +std::string ToString(const D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE value) +{ + const char* ret = "Unhandled D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE"; + switch (value) { + case D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_NONE: ret = "D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_NONE"; break; + case D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BLOCKS: ret = "D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BLOCKS"; break; + } + return ret; +} + +std::string ToString(const D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE value) +{ + const char* ret = "Unhandled D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE"; + switch (value) { + case D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE_OPACITY_MICROMAPS: ret = "D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE_OPACITY_MICROMAPS"; break; + } + return ret; +} + +std::string ToString(const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE value) +{ + const char* ret = "Unhandled D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE"; + switch (value) { + case D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE: ret = "D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE"; break; + case D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION: ret = "D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION"; break; + } + return ret; +} + std::string ToString(const D3D12_RAY_FLAGS value) { const char* ret = "Unhandled D3D12_RAY_FLAGS"; @@ -2152,6 +2225,7 @@ std::string ToString(const D3D12_RAY_FLAGS value) case D3D12_RAY_FLAG_CULL_NON_OPAQUE: ret = "D3D12_RAY_FLAG_CULL_NON_OPAQUE"; break; case D3D12_RAY_FLAG_SKIP_TRIANGLES: ret = "D3D12_RAY_FLAG_SKIP_TRIANGLES"; break; case D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES: ret = "D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES"; break; + case D3D12_RAY_FLAG_FORCE_OMM_2_STATE: ret = "D3D12_RAY_FLAG_FORCE_OMM_2_STATE"; break; } return ret; } @@ -2631,6 +2705,23 @@ std::string ToString_D3D12_SHADER_CACHE_CONTROL_FLAGS(const uint32_t flags) return BitmaskToString(flags); } +std::string ToString(const D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS value) +{ + const char* ret = "Unhandled D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS"; + switch (value) { + case D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_UNKNOWN: ret = "D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_UNKNOWN"; break; + case D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_USED: ret = "D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_USED"; break; + case D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_IGNORED: ret = "D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_IGNORED"; break; + case D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_NOT_SPECIFIED: ret = "D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_NOT_SPECIFIED"; break; + } + return ret; +} + +std::string ToString_D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS(const uint32_t flags) +{ + return BitmaskToString(flags); +} + std::string ToString(const D3D12_DEVICE_FACTORY_FLAGS value) { const char* ret = "Unhandled D3D12_DEVICE_FACTORY_FLAGS"; @@ -4388,6 +4479,8 @@ std::string ToString(const D3D12_MESSAGE_ID value) case D3D12_MESSAGE_ID_APPLICATION_SPECIFIC_DRIVER_STATE_NOT_SUPPORTED: ret = "D3D12_MESSAGE_ID_APPLICATION_SPECIFIC_DRIVER_STATE_NOT_SUPPORTED"; break; case D3D12_MESSAGE_ID_RENDER_TARGET_OR_DEPTH_STENCIL_RESOUCE_NOT_INITIALIZED: ret = "D3D12_MESSAGE_ID_RENDER_TARGET_OR_DEPTH_STENCIL_RESOUCE_NOT_INITIALIZED"; break; case D3D12_MESSAGE_ID_BYTECODE_VALIDATION_ERROR: ret = "D3D12_MESSAGE_ID_BYTECODE_VALIDATION_ERROR"; break; + case D3D12_MESSAGE_ID_FENCE_ZERO_WAIT: ret = "D3D12_MESSAGE_ID_FENCE_ZERO_WAIT"; break; + case D3D12_MESSAGE_ID_NON_COMMON_RESOURCE_IN_COPY_QUEUE: ret = "D3D12_MESSAGE_ID_NON_COMMON_RESOURCE_IN_COPY_QUEUE"; break; case D3D12_MESSAGE_ID_D3D12_MESSAGES_END: ret = "D3D12_MESSAGE_ID_D3D12_MESSAGES_END"; break; } return ret; @@ -4842,8 +4935,10 @@ std::string ToString(const IID& iid) if (iid == IID_ID3D12VirtualizationGuestDevice) return "IID_ID3D12VirtualizationGuestDevice"; if (iid == IID_ID3D12Tools) return "IID_ID3D12Tools"; if (iid == IID_ID3D12Tools1) return "IID_ID3D12Tools1"; + if (iid == IID_ID3D12Tools2) return "IID_ID3D12Tools2"; if (iid == IID_ID3D12PageableTools) return "IID_ID3D12PageableTools"; if (iid == IID_ID3D12DeviceTools) return "IID_ID3D12DeviceTools"; + if (iid == IID_ID3D12DeviceTools1) return "IID_ID3D12DeviceTools1"; if (iid == IID_ID3D12SDKConfiguration) return "IID_ID3D12SDKConfiguration"; if (iid == IID_ID3D12SDKConfiguration1) return "IID_ID3D12SDKConfiguration1"; if (iid == IID_ID3D12DeviceFactory) return "IID_ID3D12DeviceFactory"; diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_enum_to_string.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_enum_to_string.h index dbe54e775..a3343f798 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_enum_to_string.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_enum_to_string.h @@ -219,6 +219,9 @@ std::string ToString_D3D12_RAYTRACING_GEOMETRY_FLAGS(uint32_t flags); std::string ToString(D3D12_RAYTRACING_GEOMETRY_TYPE value); std::string ToString(D3D12_RAYTRACING_INSTANCE_FLAGS value); std::string ToString_D3D12_RAYTRACING_INSTANCE_FLAGS(uint32_t flags); +std::string ToString(D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX value); +std::string ToString(D3D12_RAYTRACING_OPACITY_MICROMAP_STATE value); +std::string ToString(D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT value); std::string ToString(D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS value); std::string ToString_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS(uint32_t flags); std::string ToString(D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE value); @@ -228,6 +231,9 @@ std::string ToString(D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE std::string ToString(D3D12_SERIALIZED_DATA_TYPE value); std::string ToString(D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS value); std::string ToString_D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS(uint32_t flags); +std::string ToString(D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE value); +std::string ToString(D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE value); +std::string ToString(D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE value); std::string ToString(D3D12_RAY_FLAGS value); std::string ToString_D3D12_RAY_FLAGS(uint32_t flags); std::string ToString(D3D12_HIT_KIND value); @@ -263,6 +269,8 @@ std::string ToString(D3D12_SHADER_CACHE_KIND_FLAGS value); std::string ToString_D3D12_SHADER_CACHE_KIND_FLAGS(uint32_t flags); std::string ToString(D3D12_SHADER_CACHE_CONTROL_FLAGS value); std::string ToString_D3D12_SHADER_CACHE_CONTROL_FLAGS(uint32_t flags); +std::string ToString(D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS value); +std::string ToString_D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS(uint32_t flags); std::string ToString(D3D12_DEVICE_FACTORY_FLAGS value); std::string ToString_D3D12_DEVICE_FACTORY_FLAGS(uint32_t flags); std::string ToString(D3D12_DEVICE_FLAGS value); diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_json_consumer.cpp b/third_party/gfxreconstruct/framework/generated/generated_dx12_json_consumer.cpp index 27aa7a5b1..cf3b0fe5e 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_json_consumer.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_json_consumer.cpp @@ -38,7 +38,7 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(decode) /* -** This part is generated from d3d12.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12.h in Windows SDK: 10.0.26100.0 ** */ void Dx12JsonConsumer::Process_D3D12SerializeRootSignature( @@ -519,7 +519,14 @@ void Dx12JsonConsumer::Process_ID3D12Resource_GetHeapProperties( nlohmann::ordered_json& args = method[format::kNameArgs]; { FieldToJson(args["pHeapProperties"], pHeapProperties, options); - FieldToJson_D3D12_HEAP_FLAGS(args["pHeapFlags"], *pHeapFlags->GetPointer(), options); + if (!pHeapFlags->IsNull()) + { + FieldToJson_D3D12_HEAP_FLAGS(args["pHeapFlags"], *pHeapFlags->GetPointer(), options); + } + else + { + FieldToJson(args["pHeapFlags"], nullptr, options); + } } writer_->WriteBlockEnd(); } @@ -1863,7 +1870,14 @@ void Dx12JsonConsumer::Process_ID3D12CommandQueue_UpdateTileMappings( FieldToJson(args["pResourceRegionSizes"], pResourceRegionSizes, options); FieldToJson(args["pHeap"], pHeap, options); FieldToJson(args["NumRanges"], NumRanges, options); - FieldToJson_D3D12_TILE_RANGE_FLAGS(args["pRangeFlags"], *pRangeFlags->GetPointer(), options); + if (!pRangeFlags->IsNull()) + { + FieldToJson_D3D12_TILE_RANGE_FLAGS(args["pRangeFlags"], *pRangeFlags->GetPointer(), options); + } + else + { + FieldToJson(args["pRangeFlags"], nullptr, options); + } FieldToJson(args["pHeapRangeStartOffsets"], pHeapRangeStartOffsets, options); FieldToJson(args["pRangeTileCounts"], pRangeTileCounts, options); FieldToJson_D3D12_TILE_MAPPING_FLAGS(args["Flags"], Flags, options); @@ -5036,6 +5050,26 @@ void Dx12JsonConsumer::Process_ID3D12Tools1_ClearReservedGPUVARangesList( writer_->WriteBlockEnd(); } +void Dx12JsonConsumer::Process_ID3D12Tools2_SetApplicationSpecificDriverState( + const ApiCallInfo& call_info, + format::HandleId object_id, + HRESULT return_value, + format::HandleId pAdapter, + format::HandleId pBlob) +{ + using namespace gfxrecon::util; + + nlohmann::ordered_json& method = writer_->WriteApiCallStart(call_info, "ID3D12Tools2", object_id, "SetApplicationSpecificDriverState"); + const JsonOptions& options = writer_->GetOptions(); + HresultToJson(method[format::kNameReturn], return_value, options); + nlohmann::ordered_json& args = method[format::kNameArgs]; + { + FieldToJson(args["pAdapter"], pAdapter, options); + FieldToJson(args["pBlob"], pBlob, options); + } + writer_->WriteBlockEnd(); +} + void Dx12JsonConsumer::Process_ID3D12PageableTools_GetAllocation( const ApiCallInfo& call_info, format::HandleId object_id, @@ -5070,6 +5104,37 @@ void Dx12JsonConsumer::Process_ID3D12DeviceTools_SetNextAllocationAddress( writer_->WriteBlockEnd(); } +void Dx12JsonConsumer::Process_ID3D12DeviceTools1_GetApplicationSpecificDriverState( + const ApiCallInfo& call_info, + format::HandleId object_id, + HRESULT return_value, + HandlePointerDecoder* ppBlob) +{ + using namespace gfxrecon::util; + + nlohmann::ordered_json& method = writer_->WriteApiCallStart(call_info, "ID3D12DeviceTools1", object_id, "GetApplicationSpecificDriverState"); + const JsonOptions& options = writer_->GetOptions(); + HresultToJson(method[format::kNameReturn], return_value, options); + nlohmann::ordered_json& args = method[format::kNameArgs]; + { + FieldToJson(args["ppBlob"], ppBlob, options); + } + writer_->WriteBlockEnd(); +} + +void Dx12JsonConsumer::Process_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus( + const ApiCallInfo& call_info, + format::HandleId object_id, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS return_value) +{ + using namespace gfxrecon::util; + + nlohmann::ordered_json& method = writer_->WriteApiCallStart(call_info, "ID3D12DeviceTools1", object_id, "GetApplicationSpecificDriverBlobStatus"); + const JsonOptions& options = writer_->GetOptions(); + FieldToJson_D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS(method[format::kNameReturn], return_value, options); + writer_->WriteBlockEnd(); +} + void Dx12JsonConsumer::Process_ID3D12SDKConfiguration_SetSDKVersion( const ApiCallInfo& call_info, format::HandleId object_id, @@ -5650,7 +5715,7 @@ void Dx12JsonConsumer::Process_ID3D12GBVDiagnostics_GBVReserved1( } /* -** This part is generated from d3dcommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3dcommon.h in Windows SDK: 10.0.26100.0 ** */ void Dx12JsonConsumer::Process_ID3D10Blob_GetBufferPointer( @@ -5720,7 +5785,7 @@ void Dx12JsonConsumer::Process_ID3DDestructionNotifier_UnregisterDestructionCall } /* -** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.26100.0 ** */ void Dx12JsonConsumer::Process_ID3D12Debug_EnableDebugLayer( @@ -6985,7 +7050,7 @@ void Dx12JsonConsumer::Process_ID3D12InfoQueue1_UnregisterMessageCallback( } /* -** This part is generated from dxgi.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi.h in Windows SDK: 10.0.26100.0 ** */ void Dx12JsonConsumer::Process_CreateDXGIFactory( @@ -8093,7 +8158,7 @@ void Dx12JsonConsumer::Process_IDXGIDevice1_GetMaximumFrameLatency( } /* -** This part is generated from dxgi1_2.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_2.h in Windows SDK: 10.0.26100.0 ** */ void Dx12JsonConsumer::Process_IDXGIDisplayControl_IsStereoEnabled( @@ -8932,7 +8997,7 @@ void Dx12JsonConsumer::Process_IDXGIOutput1_DuplicateOutput( } /* -** This part is generated from dxgi1_3.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_3.h in Windows SDK: 10.0.26100.0 ** */ void Dx12JsonConsumer::Process_CreateDXGIFactory2( @@ -9441,7 +9506,7 @@ void Dx12JsonConsumer::Process_IDXGIOutput3_CheckOverlaySupport( } /* -** This part is generated from dxgi1_4.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_4.h in Windows SDK: 10.0.26100.0 ** */ void Dx12JsonConsumer::Process_IDXGISwapChain3_GetCurrentBackBufferIndex( @@ -9708,7 +9773,7 @@ void Dx12JsonConsumer::Process_IDXGIAdapter3_UnregisterVideoMemoryBudgetChangeNo } /* -** This part is generated from dxgi1_5.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_5.h in Windows SDK: 10.0.26100.0 ** */ void Dx12JsonConsumer::Process_IDXGIOutput5_DuplicateOutput1( @@ -9806,7 +9871,7 @@ void Dx12JsonConsumer::Process_IDXGIDevice4_ReclaimResources1( } /* -** This part is generated from dxgi1_6.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_6.h in Windows SDK: 10.0.26100.0 ** */ void Dx12JsonConsumer::Process_DXGIDeclareAdapterRemovalSupport( @@ -9942,7 +10007,7 @@ void Dx12JsonConsumer::Process_IDXGIFactory7_UnregisterAdaptersChangedEvent( } /* -** This part is generated from Unknwnbase.h in Windows SDK: 10.0.20348.0 +** This part is generated from Unknwnbase.h in Windows SDK: 10.0.26100.0 ** */ void Dx12JsonConsumer::Process_IUnknown_QueryInterface( diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_json_consumer.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_json_consumer.h index f8f9d7332..e680a9f49 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_json_consumer.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_json_consumer.h @@ -41,7 +41,7 @@ class Dx12JsonConsumer : public Dx12JsonConsumerBase Dx12JsonConsumer(){} virtual ~Dx12JsonConsumer() override {} /* -** This part is generated from d3d12.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_D3D12SerializeRootSignature( @@ -1844,6 +1844,13 @@ class Dx12JsonConsumer : public Dx12JsonConsumerBase const ApiCallInfo& call_info, format::HandleId object_id) override; + virtual void Process_ID3D12Tools2_SetApplicationSpecificDriverState( + const ApiCallInfo& call_info, + format::HandleId object_id, + HRESULT return_value, + format::HandleId pAdapter, + format::HandleId pBlob) override; + virtual void Process_ID3D12PageableTools_GetAllocation( const ApiCallInfo& call_info, format::HandleId object_id, @@ -1855,6 +1862,17 @@ class Dx12JsonConsumer : public Dx12JsonConsumerBase format::HandleId object_id, D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress) override; + virtual void Process_ID3D12DeviceTools1_GetApplicationSpecificDriverState( + const ApiCallInfo& call_info, + format::HandleId object_id, + HRESULT return_value, + HandlePointerDecoder* ppBlob) override; + + virtual void Process_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus( + const ApiCallInfo& call_info, + format::HandleId object_id, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS return_value) override; + virtual void Process_ID3D12SDKConfiguration_SetSDKVersion( const ApiCallInfo& call_info, format::HandleId object_id, @@ -2063,7 +2081,7 @@ class Dx12JsonConsumer : public Dx12JsonConsumerBase format::HandleId object_id) override; /* -** This part is generated from d3dcommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3dcommon.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_ID3D10Blob_GetBufferPointer( @@ -2091,7 +2109,7 @@ class Dx12JsonConsumer : public Dx12JsonConsumerBase UINT callbackID) override; /* -** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_ID3D12Debug_EnableDebugLayer( @@ -2538,7 +2556,7 @@ class Dx12JsonConsumer : public Dx12JsonConsumerBase DWORD CallbackCookie) override; /* -** This part is generated from dxgi.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_CreateDXGIFactory( @@ -2924,7 +2942,7 @@ class Dx12JsonConsumer : public Dx12JsonConsumerBase PointerDecoder* pMaxLatency) override; /* -** This part is generated from dxgi1_2.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_2.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_IDXGIDisplayControl_IsStereoEnabled( @@ -3224,7 +3242,7 @@ class Dx12JsonConsumer : public Dx12JsonConsumerBase HandlePointerDecoder* ppOutputDuplication) override; /* -** This part is generated from dxgi1_3.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_3.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_CreateDXGIFactory2( @@ -3405,7 +3423,7 @@ class Dx12JsonConsumer : public Dx12JsonConsumerBase PointerDecoder* pFlags) override; /* -** This part is generated from dxgi1_4.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_4.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_IDXGISwapChain3_GetCurrentBackBufferIndex( @@ -3503,7 +3521,7 @@ class Dx12JsonConsumer : public Dx12JsonConsumerBase DWORD dwCookie) override; /* -** This part is generated from dxgi1_5.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_5.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_IDXGIOutput5_DuplicateOutput1( @@ -3542,7 +3560,7 @@ class Dx12JsonConsumer : public Dx12JsonConsumerBase PointerDecoder* pResults) override; /* -** This part is generated from dxgi1_6.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_6.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_DXGIDeclareAdapterRemovalSupport( @@ -3590,7 +3608,7 @@ class Dx12JsonConsumer : public Dx12JsonConsumerBase DWORD dwCookie) override; /* -** This part is generated from Unknwnbase.h in Windows SDK: 10.0.20348.0 +** This part is generated from Unknwnbase.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_IUnknown_QueryInterface( diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_replay_consumer.cpp b/third_party/gfxreconstruct/framework/generated/generated_dx12_replay_consumer.cpp index 9d486a055..997e7c47c 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_replay_consumer.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_replay_consumer.cpp @@ -5237,7 +5237,7 @@ void Dx12ReplayConsumer::Process_ID3D12Device_CreateSharedHandle( Access, Name, pHandle); - PostProcessExternalObject(replay_result, out_op_pHandle, out_p_pHandle, format::ApiCallId::ApiCall_ID3D12Device_CreateSharedHandle, "ID3D12Device_CreateSharedHandle"); + PostProcessExternalObject(replay_result, reinterpret_cast(out_op_pHandle), out_p_pHandle, format::ApiCallId::ApiCall_ID3D12Device_CreateSharedHandle, "ID3D12Device_CreateSharedHandle"); } } @@ -5259,16 +5259,20 @@ void Dx12ReplayConsumer::Process_ID3D12Device_OpenSharedHandle( NTHandle, riid, ppvObj); - auto in_NTHandle = static_cast(PreProcessExternalObject(NTHandle, format::ApiCallId::ApiCall_ID3D12Device_OpenSharedHandle, "ID3D12Device_OpenSharedHandle")); - if(!ppvObj->IsNull()) ppvObj->SetHandleLength(1); - auto out_p_ppvObj = ppvObj->GetPointer(); - auto out_hp_ppvObj = ppvObj->GetHandlePointer(); - auto replay_result = reinterpret_cast(replay_object->object)->OpenSharedHandle(in_NTHandle, - *riid.decoded_value, - out_hp_ppvObj); + DxObjectInfo object_info_ppvObj{}; + if(!ppvObj->IsNull()) + { + ppvObj->SetHandleLength(1); + ppvObj->SetConsumerData(0, &object_info_ppvObj); + } + auto replay_result = OverrideOpenSharedHandle(replay_object, + return_value, + NTHandle, + riid, + ppvObj); if (SUCCEEDED(replay_result)) { - AddObject(out_p_ppvObj, out_hp_ppvObj, format::ApiCall_ID3D12Device_OpenSharedHandle); + AddObject(ppvObj->GetPointer(), ppvObj->GetHandlePointer(), std::move(object_info_ppvObj), format::ApiCall_ID3D12Device_OpenSharedHandle); } CheckReplayResult("ID3D12Device_OpenSharedHandle", return_value, replay_result); CustomReplayPostCall::Dispatch( @@ -5320,7 +5324,7 @@ void Dx12ReplayConsumer::Process_ID3D12Device_OpenSharedHandleByName( Name, Access, pNTHandle); - PostProcessExternalObject(replay_result, out_op_pNTHandle, out_p_pNTHandle, format::ApiCallId::ApiCall_ID3D12Device_OpenSharedHandleByName, "ID3D12Device_OpenSharedHandleByName"); + PostProcessExternalObject(replay_result, reinterpret_cast(out_op_pNTHandle), out_p_pNTHandle, format::ApiCallId::ApiCall_ID3D12Device_OpenSharedHandleByName, "ID3D12Device_OpenSharedHandleByName"); } } @@ -9553,7 +9557,7 @@ void Dx12ReplayConsumer::Process_ID3D12VirtualizationGuestDevice_ShareWithHost( replay_result, pObject, pHandle); - PostProcessExternalObject(replay_result, out_op_pHandle, out_p_pHandle, format::ApiCallId::ApiCall_ID3D12VirtualizationGuestDevice_ShareWithHost, "ID3D12VirtualizationGuestDevice_ShareWithHost"); + PostProcessExternalObject(replay_result, reinterpret_cast(out_op_pHandle), out_p_pHandle, format::ApiCallId::ApiCall_ID3D12VirtualizationGuestDevice_ShareWithHost, "ID3D12VirtualizationGuestDevice_ShareWithHost"); } } @@ -9690,6 +9694,38 @@ void Dx12ReplayConsumer::Process_ID3D12Tools1_ClearReservedGPUVARangesList( } } +void Dx12ReplayConsumer::Process_ID3D12Tools2_SetApplicationSpecificDriverState( + const ApiCallInfo& call_info, + format::HandleId object_id, + HRESULT return_value, + format::HandleId pAdapter, + format::HandleId pBlob) +{ + auto replay_object = GetObjectInfo(object_id); + if ((replay_object != nullptr) && (replay_object->object != nullptr)) + { + CustomReplayPreCall::Dispatch( + this, + call_info, + replay_object, + pAdapter, + pBlob); + auto in_pAdapter = MapObject(pAdapter); + auto in_pBlob = MapObject(pBlob); + auto replay_result = reinterpret_cast(replay_object->object)->SetApplicationSpecificDriverState(in_pAdapter, + in_pBlob); + CheckReplayResult("ID3D12Tools2_SetApplicationSpecificDriverState", return_value, replay_result); + CustomReplayPostCall::Dispatch( + this, + call_info, + replay_object, + return_value, + replay_result, + pAdapter, + pBlob); + } +} + void Dx12ReplayConsumer::Process_ID3D12PageableTools_GetAllocation( const ApiCallInfo& call_info, format::HandleId object_id, @@ -9740,6 +9776,61 @@ void Dx12ReplayConsumer::Process_ID3D12DeviceTools_SetNextAllocationAddress( } } +void Dx12ReplayConsumer::Process_ID3D12DeviceTools1_GetApplicationSpecificDriverState( + const ApiCallInfo& call_info, + format::HandleId object_id, + HRESULT return_value, + HandlePointerDecoder* ppBlob) +{ + auto replay_object = GetObjectInfo(object_id); + if ((replay_object != nullptr) && (replay_object->object != nullptr)) + { + CustomReplayPreCall::Dispatch( + this, + call_info, + replay_object, + ppBlob); + if(!ppBlob->IsNull()) ppBlob->SetHandleLength(1); + auto out_p_ppBlob = ppBlob->GetPointer(); + auto out_hp_ppBlob = ppBlob->GetHandlePointer(); + auto replay_result = reinterpret_cast(replay_object->object)->GetApplicationSpecificDriverState(out_hp_ppBlob); + if (SUCCEEDED(replay_result)) + { + AddObject(out_p_ppBlob, out_hp_ppBlob, format::ApiCall_ID3D12DeviceTools1_GetApplicationSpecificDriverState); + } + CheckReplayResult("ID3D12DeviceTools1_GetApplicationSpecificDriverState", return_value, replay_result); + CustomReplayPostCall::Dispatch( + this, + call_info, + replay_object, + return_value, + replay_result, + ppBlob); + } +} + +void Dx12ReplayConsumer::Process_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus( + const ApiCallInfo& call_info, + format::HandleId object_id, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS return_value) +{ + auto replay_object = GetObjectInfo(object_id); + if ((replay_object != nullptr) && (replay_object->object != nullptr)) + { + CustomReplayPreCall::Dispatch( + this, + call_info, + replay_object); + auto replay_result = reinterpret_cast(replay_object->object)->GetApplicationSpecificDriverBlobStatus(); + CustomReplayPostCall::Dispatch( + this, + call_info, + replay_object, + return_value, + replay_result); + } +} + void Dx12ReplayConsumer::Process_ID3D12SDKConfiguration_SetSDKVersion( const ApiCallInfo& call_info, format::HandleId object_id, @@ -13147,7 +13238,7 @@ void Dx12ReplayConsumer::Process_IDXGIResource_GetSharedHandle( return_value, replay_result, pSharedHandle); - PostProcessExternalObject(replay_result, out_op_pSharedHandle, out_p_pSharedHandle, format::ApiCallId::ApiCall_IDXGIResource_GetSharedHandle, "IDXGIResource_GetSharedHandle"); + PostProcessExternalObject(replay_result, reinterpret_cast(out_op_pSharedHandle), out_p_pSharedHandle, format::ApiCallId::ApiCall_IDXGIResource_GetSharedHandle, "IDXGIResource_GetSharedHandle"); } } @@ -13409,7 +13500,7 @@ void Dx12ReplayConsumer::Process_IDXGISurface1_GetDC( replay_result, Discard, phdc); - PostProcessExternalObject(replay_result, out_op_phdc, out_p_phdc, format::ApiCallId::ApiCall_IDXGISurface1_GetDC, "IDXGISurface1_GetDC"); + PostProcessExternalObject(replay_result, reinterpret_cast(out_op_phdc), out_p_phdc, format::ApiCallId::ApiCall_IDXGISurface1_GetDC, "IDXGISurface1_GetDC"); } } @@ -14341,7 +14432,7 @@ void Dx12ReplayConsumer::Process_IDXGIFactory_GetWindowAssociation( return_value, replay_result, pWindowHandle); - PostProcessExternalObject(replay_result, out_op_pWindowHandle, out_p_pWindowHandle, format::ApiCallId::ApiCall_IDXGIFactory_GetWindowAssociation, "IDXGIFactory_GetWindowAssociation"); + PostProcessExternalObject(replay_result, reinterpret_cast(out_op_pWindowHandle), out_p_pWindowHandle, format::ApiCallId::ApiCall_IDXGIFactory_GetWindowAssociation, "IDXGIFactory_GetWindowAssociation"); } } @@ -15200,7 +15291,7 @@ void Dx12ReplayConsumer::Process_IDXGIResource1_CreateSharedHandle( dwAccess, lpName, pHandle); - PostProcessExternalObject(replay_result, out_op_pHandle, out_p_pHandle, format::ApiCallId::ApiCall_IDXGIResource1_CreateSharedHandle, "IDXGIResource1_CreateSharedHandle"); + PostProcessExternalObject(replay_result, reinterpret_cast(out_op_pHandle), out_p_pHandle, format::ApiCallId::ApiCall_IDXGIResource1_CreateSharedHandle, "IDXGIResource1_CreateSharedHandle"); } } @@ -15394,7 +15485,7 @@ void Dx12ReplayConsumer::Process_IDXGISwapChain1_GetHwnd( return_value, replay_result, pHwnd); - PostProcessExternalObject(replay_result, out_op_pHwnd, out_p_pHwnd, format::ApiCallId::ApiCall_IDXGISwapChain1_GetHwnd, "IDXGISwapChain1_GetHwnd"); + PostProcessExternalObject(replay_result, reinterpret_cast(out_op_pHwnd), out_p_pHwnd, format::ApiCallId::ApiCall_IDXGISwapChain1_GetHwnd, "IDXGISwapChain1_GetHwnd"); } } diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_replay_consumer.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_replay_consumer.h index 9f10e5403..c28ec6795 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_replay_consumer.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_replay_consumer.h @@ -41,7 +41,7 @@ class Dx12ReplayConsumer : public Dx12ReplayConsumerBase Dx12ReplayConsumer(std::shared_ptr application, const DxReplayOptions& options) : Dx12ReplayConsumerBase(application, options) {} virtual ~Dx12ReplayConsumer() override {} /* -** This part is generated from d3d12.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_D3D12SerializeRootSignature( @@ -1844,6 +1844,13 @@ class Dx12ReplayConsumer : public Dx12ReplayConsumerBase const ApiCallInfo& call_info, format::HandleId object_id) override; + virtual void Process_ID3D12Tools2_SetApplicationSpecificDriverState( + const ApiCallInfo& call_info, + format::HandleId object_id, + HRESULT return_value, + format::HandleId pAdapter, + format::HandleId pBlob) override; + virtual void Process_ID3D12PageableTools_GetAllocation( const ApiCallInfo& call_info, format::HandleId object_id, @@ -1855,6 +1862,17 @@ class Dx12ReplayConsumer : public Dx12ReplayConsumerBase format::HandleId object_id, D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress) override; + virtual void Process_ID3D12DeviceTools1_GetApplicationSpecificDriverState( + const ApiCallInfo& call_info, + format::HandleId object_id, + HRESULT return_value, + HandlePointerDecoder* ppBlob) override; + + virtual void Process_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus( + const ApiCallInfo& call_info, + format::HandleId object_id, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS return_value) override; + virtual void Process_ID3D12SDKConfiguration_SetSDKVersion( const ApiCallInfo& call_info, format::HandleId object_id, @@ -2063,7 +2081,7 @@ class Dx12ReplayConsumer : public Dx12ReplayConsumerBase format::HandleId object_id) override; /* -** This part is generated from d3dcommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3dcommon.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_ID3D10Blob_GetBufferPointer( @@ -2091,7 +2109,7 @@ class Dx12ReplayConsumer : public Dx12ReplayConsumerBase UINT callbackID) override; /* -** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_ID3D12Debug_EnableDebugLayer( @@ -2538,7 +2556,7 @@ class Dx12ReplayConsumer : public Dx12ReplayConsumerBase DWORD CallbackCookie) override; /* -** This part is generated from dxgi.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_CreateDXGIFactory( @@ -2924,7 +2942,7 @@ class Dx12ReplayConsumer : public Dx12ReplayConsumerBase PointerDecoder* pMaxLatency) override; /* -** This part is generated from dxgi1_2.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_2.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_IDXGIDisplayControl_IsStereoEnabled( @@ -3224,7 +3242,7 @@ class Dx12ReplayConsumer : public Dx12ReplayConsumerBase HandlePointerDecoder* ppOutputDuplication) override; /* -** This part is generated from dxgi1_3.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_3.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_CreateDXGIFactory2( @@ -3405,7 +3423,7 @@ class Dx12ReplayConsumer : public Dx12ReplayConsumerBase PointerDecoder* pFlags) override; /* -** This part is generated from dxgi1_4.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_4.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_IDXGISwapChain3_GetCurrentBackBufferIndex( @@ -3503,7 +3521,7 @@ class Dx12ReplayConsumer : public Dx12ReplayConsumerBase DWORD dwCookie) override; /* -** This part is generated from dxgi1_5.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_5.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_IDXGIOutput5_DuplicateOutput1( @@ -3542,7 +3560,7 @@ class Dx12ReplayConsumer : public Dx12ReplayConsumerBase PointerDecoder* pResults) override; /* -** This part is generated from dxgi1_6.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_6.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_DXGIDeclareAdapterRemovalSupport( @@ -3590,7 +3608,7 @@ class Dx12ReplayConsumer : public Dx12ReplayConsumerBase DWORD dwCookie) override; /* -** This part is generated from Unknwnbase.h in Windows SDK: 10.0.20348.0 +** This part is generated from Unknwnbase.h in Windows SDK: 10.0.26100.0 ** */ virtual void Process_IUnknown_QueryInterface( diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders.cpp b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders.cpp index 3e8c8625b..874312079 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders.cpp @@ -1067,6 +1067,18 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_FEA return bytes_read; } +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->Supported)); + + return bytes_read; +} + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); @@ -2976,6 +2988,40 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAY return bytes_read; } +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC* value = wrapper->decoded_value; + + wrapper->OpacityMicromapIndexBuffer = DecodeAllocator::Allocate(); + wrapper->OpacityMicromapIndexBuffer->decoded_value = &(value->OpacityMicromapIndexBuffer); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->OpacityMicromapIndexBuffer); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->OpacityMicromapIndexFormat)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->OpacityMicromapBaseLocation)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->OpacityMicromapArray)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC* value = wrapper->decoded_value; + + wrapper->pTriangles = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pTriangles->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTriangles = wrapper->pTriangles->GetPointer(); + wrapper->pOmmLinkage = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pOmmLinkage->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pOmmLinkage = wrapper->pOmmLinkage->GetPointer(); + + return bytes_read; +} + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); @@ -3026,19 +3072,6 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_BUI return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); - - size_t bytes_read = 0; - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC* value = wrapper->decoded_value; - - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->SerializedSizeInBytes)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->NumBottomLevelAccelerationStructurePointers)); - - return bytes_read; -} - size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); @@ -3072,6 +3105,19 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_SER return bytes_read; } +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_SERIALIZED_BLOCK* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + D3D12_RAYTRACING_SERIALIZED_BLOCK* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->Type)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->NumBlockPointersAfterHeader)); + + return bytes_read; +} + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); @@ -3110,6 +3156,39 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAY return bytes_read; } +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->Count)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->SubdivisionLevel)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->Format)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->NumOmmHistogramEntries)); + wrapper->pOmmHistogram = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pOmmHistogram->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pOmmHistogram = wrapper->pOmmHistogram->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->InputBuffer)); + wrapper->PerOmmDescs = DecodeAllocator::Allocate(); + wrapper->PerOmmDescs->decoded_value = &(value->PerOmmDescs); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->PerOmmDescs); + + return bytes_read; +} + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); @@ -3141,6 +3220,43 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAY return bytes_read; } +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->DestBuffer)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->InfoType)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->CurrentSizeInBytes)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->DecodedSizeInBytes)); + + return bytes_read; +} + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_AUTO_BREADCRUMB_NODE* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders.h index 58e918e8e..fc43c55f4 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders.h @@ -555,6 +555,13 @@ struct Decoded_D3D12_FEATURE_DATA_HARDWARE_COPY D3D12_FEATURE_DATA_HARDWARE_COPY* decoded_value{ nullptr }; }; +struct Decoded_D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE +{ + using struct_type = D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE; + + D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE* decoded_value{ nullptr }; +}; + struct Decoded_D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED { using struct_type = D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED; @@ -1533,6 +1540,25 @@ struct Decoded_D3D12_RAYTRACING_GEOMETRY_AABBS_DESC Decoded_D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE* AABBs{ nullptr }; }; +struct Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC +{ + using struct_type = D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC; + + D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC* decoded_value{ nullptr }; + + Decoded_D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE* OpacityMicromapIndexBuffer{ nullptr }; +}; + +struct Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC +{ + using struct_type = D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC; + + D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC* decoded_value{ nullptr }; + + StructPointerDecoder* pTriangles{ nullptr }; + StructPointerDecoder* pOmmLinkage{ nullptr }; +}; + struct Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC { using struct_type = D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC; @@ -1561,13 +1587,6 @@ struct Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER* decoded_value{ nullptr }; }; -struct Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC -{ - using struct_type = D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC; - - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC* decoded_value{ nullptr }; -}; - struct Decoded_D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER { using struct_type = D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER; @@ -1587,6 +1606,13 @@ struct Decoded_D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER Decoded_D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER* DriverMatchingIdentifier{ nullptr }; }; +struct Decoded_D3D12_RAYTRACING_SERIALIZED_BLOCK +{ + using struct_type = D3D12_RAYTRACING_SERIALIZED_BLOCK; + + D3D12_RAYTRACING_SERIALIZED_BLOCK* decoded_value{ nullptr }; +}; + struct Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC { using struct_type = D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC; @@ -1603,6 +1629,23 @@ struct Decoded_D3D12_RAYTRACING_INSTANCE_DESC PointerDecoder Transform; }; +struct Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY +{ + using struct_type = D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY; + + D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY* decoded_value{ nullptr }; +}; + +struct Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC +{ + using struct_type = D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC; + + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC* decoded_value{ nullptr }; + + StructPointerDecoder* pOmmHistogram{ nullptr }; + Decoded_D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE* PerOmmDescs{ nullptr }; +}; + struct Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC { using struct_type = D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC; @@ -1619,6 +1662,27 @@ struct Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO* decoded_value{ nullptr }; }; +struct Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC +{ + using struct_type = D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC; + + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC* decoded_value{ nullptr }; +}; + +struct Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC +{ + using struct_type = D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC; + + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC* decoded_value{ nullptr }; +}; + +struct Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC +{ + using struct_type = D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC; + + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC* decoded_value{ nullptr }; +}; + struct Decoded_D3D12_AUTO_BREADCRUMB_NODE { using struct_type = D3D12_AUTO_BREADCRUMB_NODE; diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders_forward.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders_forward.h index f2697437b..c185739dd 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders_forward.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders_forward.h @@ -105,6 +105,7 @@ struct Decoded_D3D12_FEATURE_DATA_D3D12_OPTIONS20; struct Decoded_D3D12_FEATURE_DATA_D3D12_OPTIONS21; struct Decoded_D3D12_FEATURE_DATA_PREDICATION; struct Decoded_D3D12_FEATURE_DATA_HARDWARE_COPY; +struct Decoded_D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE; struct Decoded_D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED; struct Decoded_D3D12_RESOURCE_ALLOCATION_INFO; struct Decoded_D3D12_RESOURCE_ALLOCATION_INFO1; @@ -248,6 +249,9 @@ struct Decoded_D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE; struct Decoded_D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC; struct Decoded_D3D12_RAYTRACING_AABB; struct Decoded_D3D12_RAYTRACING_GEOMETRY_AABBS_DESC; +struct Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_DESC; +struct Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC; +struct Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC; struct Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC; struct Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC; struct Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC; @@ -255,12 +259,19 @@ struct Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION struct Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC; struct Decoded_D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER; struct Decoded_D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER; +struct Decoded_D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1; +struct Decoded_D3D12_RAYTRACING_SERIALIZED_BLOCK; struct Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC; struct Decoded_D3D12_RAYTRACING_INSTANCE_DESC; struct Decoded_D3D12_RAYTRACING_GEOMETRY_DESC; +struct Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY; +struct Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC; struct Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS; struct Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC; struct Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO; +struct Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC; +struct Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC; +struct Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC; struct Decoded_D3D12_AUTO_BREADCRUMB_NODE; struct Decoded_D3D12_DRED_BREADCRUMB_CONTEXT; struct Decoded_D3D12_AUTO_BREADCRUMB_NODE1; @@ -359,7 +370,7 @@ struct Decoded__SECURITY_ATTRIBUTES; struct Decoded_LARGE_INTEGER; /* -** This part is generated from d3d12.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12.h in Windows SDK: 10.0.26100.0 ** */ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_COMMAND_QUEUE_DESC* wrapper); @@ -488,6 +499,8 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_FEA size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_FEATURE_DATA_HARDWARE_COPY* wrapper); +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE* wrapper); + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED* wrapper); size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RESOURCE_ALLOCATION_INFO* wrapper); @@ -736,6 +749,10 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAY size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_GEOMETRY_AABBS_DESC* wrapper); +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC* wrapper); + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC* wrapper); + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC* wrapper); size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC* wrapper); @@ -744,20 +761,30 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAY size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER* wrapper); -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC* wrapper); - size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER* wrapper); size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER* wrapper); +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_SERIALIZED_BLOCK* wrapper); + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC* wrapper); size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_INSTANCE_DESC* wrapper); +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY* wrapper); + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC* wrapper); + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC* wrapper); size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO* wrapper); +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC* wrapper); + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC* wrapper); + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC* wrapper); + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_AUTO_BREADCRUMB_NODE* wrapper); size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_DRED_BREADCRUMB_CONTEXT* wrapper); @@ -841,13 +868,13 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_DEV size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_DISPATCH_MESH_ARGUMENTS* wrapper); /* -** This part is generated from d3dcommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3dcommon.h in Windows SDK: 10.0.26100.0 ** */ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D_SHADER_MACRO* wrapper); /* -** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.26100.0 ** */ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS* wrapper); @@ -863,7 +890,7 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_INF size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_D3D12_INFO_QUEUE_FILTER* wrapper); /* -** This part is generated from dxgi.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi.h in Windows SDK: 10.0.26100.0 ** */ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_FRAME_STATISTICS* wrapper); @@ -885,7 +912,7 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_ADAP size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_DISPLAY_COLOR_SPACE* wrapper); /* -** This part is generated from dxgi1_2.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_2.h in Windows SDK: 10.0.26100.0 ** */ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_OUTDUPL_MOVE_RECT* wrapper); @@ -909,7 +936,7 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_PRES size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_ADAPTER_DESC2* wrapper); /* -** This part is generated from dxgi1_3.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_3.h in Windows SDK: 10.0.26100.0 ** */ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_MATRIX_3X2_F* wrapper); @@ -919,13 +946,13 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_DECO size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_FRAME_STATISTICS_MEDIA* wrapper); /* -** This part is generated from dxgi1_4.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_4.h in Windows SDK: 10.0.26100.0 ** */ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_QUERY_VIDEO_MEMORY_INFO* wrapper); /* -** This part is generated from dxgi1_5.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_5.h in Windows SDK: 10.0.26100.0 ** */ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_HDR_METADATA_HDR10* wrapper); @@ -933,7 +960,7 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_HDR_ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_HDR_METADATA_HDR10PLUS* wrapper); /* -** This part is generated from dxgi1_6.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_6.h in Windows SDK: 10.0.26100.0 ** */ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_ADAPTER_DESC3* wrapper); @@ -941,7 +968,7 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_ADAP size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_OUTPUT_DESC1* wrapper); /* -** This part is generated from dxgicommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgicommon.h in Windows SDK: 10.0.26100.0 ** */ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_RATIONAL* wrapper); @@ -949,7 +976,7 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_RATI size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_SAMPLE_DESC* wrapper); /* -** This part is generated from dxgitype.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgitype.h in Windows SDK: 10.0.26100.0 ** */ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_RGB* wrapper); @@ -969,13 +996,13 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_JPEG size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_DXGI_JPEG_QUANTIZATION_TABLE* wrapper); /* -** This part is generated from guiddef.h in Windows SDK: 10.0.20348.0 +** This part is generated from guiddef.h in Windows SDK: 10.0.26100.0 ** */ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_GUID* wrapper); /* -** This part is generated from windef.h in Windows SDK: 10.0.20348.0 +** This part is generated from windef.h in Windows SDK: 10.0.26100.0 ** */ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_tagRECT* wrapper); @@ -983,7 +1010,7 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_tagRECT* size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_tagPOINT* wrapper); /* -** This part is generated from minwinbase.h in Windows SDK: 10.0.20348.0 +** This part is generated from minwinbase.h in Windows SDK: 10.0.26100.0 ** */ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded__SECURITY_ATTRIBUTES* wrapper); diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders_to_json.cpp b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders_to_json.cpp index 48809d16f..59e579301 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders_to_json.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders_to_json.cpp @@ -985,6 +985,17 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATURE_DATA } } +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE* data, const JsonOptions& options) +{ + using namespace util; + if (data && data->decoded_value) + { + const D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE& decoded_value = *data->decoded_value; + const Decoded_D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE& meta_struct = *data; + Bool32ToJson(jdata["Supported"], decoded_value.Supported, options); + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED* data, const JsonOptions& options) { using namespace util; @@ -3310,6 +3321,45 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_G } } +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_DESC* data, const JsonOptions& options) +{ + using namespace util; + if (data && data->decoded_value) + { + const D3D12_RAYTRACING_OPACITY_MICROMAP_DESC& decoded_value = *data->decoded_value; + const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_DESC& meta_struct = *data; + FieldToJson(jdata["ByteOffset"], decoded_value.ByteOffset, options); + FieldToJson(jdata["SubdivisionLevel"], decoded_value.SubdivisionLevel, options); + FieldToJson(jdata["Format"], decoded_value.Format, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC* data, const JsonOptions& options) +{ + using namespace util; + if (data && data->decoded_value) + { + const D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC& decoded_value = *data->decoded_value; + const Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC& meta_struct = *data; + FieldToJson(jdata["OpacityMicromapIndexBuffer"], meta_struct.OpacityMicromapIndexBuffer, options); + FieldToJson(jdata["OpacityMicromapIndexFormat"], decoded_value.OpacityMicromapIndexFormat, options); + FieldToJson(jdata["OpacityMicromapBaseLocation"], decoded_value.OpacityMicromapBaseLocation, options); + FieldToJsonAsHex(jdata["OpacityMicromapArray"], decoded_value.OpacityMicromapArray, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC* data, const JsonOptions& options) +{ + using namespace util; + if (data && data->decoded_value) + { + const D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC& decoded_value = *data->decoded_value; + const Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC& meta_struct = *data; + FieldToJson(jdata["pTriangles"], meta_struct.pTriangles, options); + FieldToJson(jdata["pOmmLinkage"], meta_struct.pOmmLinkage, options); + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC* data, const JsonOptions& options) { using namespace util; @@ -3364,7 +3414,7 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_A const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC& decoded_value = *data->decoded_value; const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC& meta_struct = *data; FieldToJson(jdata["SerializedSizeInBytes"], decoded_value.SerializedSizeInBytes, options); - FieldToJson(jdata["NumBottomLevelAccelerationStructurePointers"], decoded_value.NumBottomLevelAccelerationStructurePointers, options); + ; ///< @todo ALERT: Union member 0 of D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC needs special handling. } } @@ -3394,6 +3444,33 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_SERIALIZED_R } } +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1* data, const JsonOptions& options) +{ + using namespace util; + if (data && data->decoded_value) + { + const D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1& decoded_value = *data->decoded_value; + const Decoded_D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1& meta_struct = *data; + FieldToJson(jdata["DriverMatchingIdentifier"], meta_struct.DriverMatchingIdentifier, options); + FieldToJson(jdata["SerializedSizeInBytesIncludingHeader"], decoded_value.SerializedSizeInBytesIncludingHeader, options); + FieldToJson(jdata["DeserializedSizeInBytes"], decoded_value.DeserializedSizeInBytes, options); + ; ///< @todo ALERT: Union member 0 of D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1 needs special handling. + FieldToJson(jdata["HeaderPostambleType"], decoded_value.HeaderPostambleType, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_SERIALIZED_BLOCK* data, const JsonOptions& options) +{ + using namespace util; + if (data && data->decoded_value) + { + const D3D12_RAYTRACING_SERIALIZED_BLOCK& decoded_value = *data->decoded_value; + const Decoded_D3D12_RAYTRACING_SERIALIZED_BLOCK& meta_struct = *data; + FieldToJson(jdata["Type"], decoded_value.Type, options); + FieldToJson(jdata["NumBlockPointersAfterHeader"], decoded_value.NumBlockPointersAfterHeader, options); + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC* data, const JsonOptions& options) { using namespace util; @@ -3451,6 +3528,33 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_G } } +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY* data, const JsonOptions& options) +{ + using namespace util; + if (data && data->decoded_value) + { + const D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY& decoded_value = *data->decoded_value; + const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY& meta_struct = *data; + FieldToJson(jdata["Count"], decoded_value.Count, options); + FieldToJson(jdata["SubdivisionLevel"], decoded_value.SubdivisionLevel, options); + FieldToJson(jdata["Format"], decoded_value.Format, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC* data, const JsonOptions& options) +{ + using namespace util; + if (data && data->decoded_value) + { + const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC& decoded_value = *data->decoded_value; + const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC& meta_struct = *data; + FieldToJson(jdata["NumOmmHistogramEntries"], decoded_value.NumOmmHistogramEntries, options); + FieldToJson(jdata["pOmmHistogram"], meta_struct.pOmmHistogram, options); + FieldToJsonAsHex(jdata["InputBuffer"], decoded_value.InputBuffer, options); + FieldToJson(jdata["PerOmmDescs"], meta_struct.PerOmmDescs, options); + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS* data, const JsonOptions& options) { using namespace util; @@ -3522,6 +3626,40 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_A } } +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC* data, const JsonOptions& options) +{ + using namespace util; + if (data && data->decoded_value) + { + const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC& decoded_value = *data->decoded_value; + const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC& meta_struct = *data; + FieldToJsonAsHex(jdata["DestBuffer"], decoded_value.DestBuffer, options); + FieldToJson(jdata["InfoType"], decoded_value.InfoType, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC* data, const JsonOptions& options) +{ + using namespace util; + if (data && data->decoded_value) + { + const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC& decoded_value = *data->decoded_value; + const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC& meta_struct = *data; + FieldToJson(jdata["CurrentSizeInBytes"], decoded_value.CurrentSizeInBytes, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC* data, const JsonOptions& options) +{ + using namespace util; + if (data && data->decoded_value) + { + const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC& decoded_value = *data->decoded_value; + const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC& meta_struct = *data; + FieldToJson(jdata["DecodedSizeInBytes"], decoded_value.DecodedSizeInBytes, options); + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_AUTO_BREADCRUMB_NODE* data, const JsonOptions& options) { using namespace util; diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders_to_json.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders_to_json.h index c8f420160..6fd4075f4 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders_to_json.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_decoders_to_json.h @@ -112,6 +112,7 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATURE_DATA void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATURE_DATA_D3D12_OPTIONS21* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATURE_DATA_PREDICATION* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATURE_DATA_HARDWARE_COPY* pObj, const util::JsonOptions& options); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RESOURCE_ALLOCATION_INFO* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RESOURCE_ALLOCATION_INFO1* pObj, const util::JsonOptions& options); @@ -255,6 +256,9 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_GPU_VIRTUAL_ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_AABB* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_GEOMETRY_AABBS_DESC* pObj, const util::JsonOptions& options); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_DESC* pObj, const util::JsonOptions& options); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC* pObj, const util::JsonOptions& options); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC* pObj, const util::JsonOptions& options); @@ -262,12 +266,19 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_BUILD_RAYTRA void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER* pObj, const util::JsonOptions& options); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1* pObj, const util::JsonOptions& options); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_SERIALIZED_BLOCK* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_INSTANCE_DESC* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_GEOMETRY_DESC* pObj, const util::JsonOptions& options); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY* pObj, const util::JsonOptions& options); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO* pObj, const util::JsonOptions& options); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC* pObj, const util::JsonOptions& options); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC* pObj, const util::JsonOptions& options); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_AUTO_BREADCRUMB_NODE* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_DRED_BREADCRUMB_CONTEXT* pObj, const util::JsonOptions& options); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_AUTO_BREADCRUMB_NODE1* pObj, const util::JsonOptions& options); @@ -429,6 +440,7 @@ inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATU inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATURE_DATA_D3D12_OPTIONS21& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATURE_DATA_PREDICATION& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATURE_DATA_HARDWARE_COPY& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } +inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RESOURCE_ALLOCATION_INFO& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RESOURCE_ALLOCATION_INFO1& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } @@ -572,6 +584,9 @@ inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_GPU_V inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_AABB& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_GEOMETRY_AABBS_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } +inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } +inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } +inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } @@ -579,12 +594,19 @@ inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_BUILD inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } +inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } +inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_SERIALIZED_BLOCK& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_INSTANCE_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_GEOMETRY_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } +inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } +inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } +inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } +inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } +inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_AUTO_BREADCRUMB_NODE& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_DRED_BREADCRUMB_CONTEXT& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } inline void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_D3D12_AUTO_BREADCRUMB_NODE1& obj, const util::JsonOptions& options){ FieldToJson(jdata, &obj, options); } diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_object_mappers.cpp b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_object_mappers.cpp index d3a39c428..bc73f3239 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_object_mappers.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_object_mappers.cpp @@ -252,6 +252,28 @@ void MapStructObjects(Decoded_D3D12_RAYTRACING_GEOMETRY_AABBS_DESC* wrapper, con } } +void MapStructObjects(Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC* value = wrapper->decoded_value; + + MapStructObjects(wrapper->OpacityMicromapIndexBuffer, object_info_table, gpu_va_map); + + object_mapping::MapGpuVirtualAddress(value->OpacityMicromapArray, gpu_va_map); + } +} + +void MapStructObjects(Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map) +{ + if (wrapper != nullptr) + { + MapStructArrayObjects(wrapper->pTriangles->GetMetaStructPointer(), 1, object_info_table, gpu_va_map); + + MapStructArrayObjects(wrapper->pOmmLinkage->GetMetaStructPointer(), 1, object_info_table, gpu_va_map); + } +} + void MapStructObjects(Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) @@ -272,6 +294,18 @@ void MapStructObjects(Decoded_D3D12_RAYTRACING_INSTANCE_DESC* wrapper, const Dx1 } } +void MapStructObjects(Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC* value = wrapper->decoded_value; + + object_mapping::MapGpuVirtualAddress(value->InputBuffer, gpu_va_map); + + MapStructObjects(wrapper->PerOmmDescs, object_info_table, gpu_va_map); + } +} + void MapStructObjects(Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) @@ -288,6 +322,16 @@ void MapStructObjects(Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC } } +void MapStructObjects(Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC* value = wrapper->decoded_value; + + object_mapping::MapGpuVirtualAddress(value->DestBuffer, gpu_va_map); + } +} + void MapStructObjects(Decoded_D3D12_AUTO_BREADCRUMB_NODE* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_object_mappers.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_object_mappers.h index 170956423..b9968a726 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_object_mappers.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_object_mappers.h @@ -72,12 +72,20 @@ void MapStructObjects(Decoded_D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC* wrapper, void MapStructObjects(Decoded_D3D12_RAYTRACING_GEOMETRY_AABBS_DESC* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map); +void MapStructObjects(Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map); + +void MapStructObjects(Decoded_D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map); + void MapStructObjects(Decoded_D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map); void MapStructObjects(Decoded_D3D12_RAYTRACING_INSTANCE_DESC* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map); +void MapStructObjects(Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map); + void MapStructObjects(Decoded_D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map); +void MapStructObjects(Decoded_D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map); + void MapStructObjects(Decoded_D3D12_AUTO_BREADCRUMB_NODE* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map); void MapStructObjects(Decoded_D3D12_AUTO_BREADCRUMB_NODE1* wrapper, const Dx12ObjectInfoTable& object_info_table, const graphics::Dx12GpuVaMap& gpu_va_map); diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_wrappers.cpp b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_wrappers.cpp index 877d0fdba..673e309c5 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_wrappers.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_struct_wrappers.cpp @@ -162,7 +162,8 @@ void WrapStruct(const D3D12_DRED_ALLOCATION_NODE1* value) { if(value->pObject) { - WrapObject(IID_IUnknown, reinterpret_cast(&const_cast(value->pObject)), nullptr); + IUnknown* casted = const_cast(value->pObject); + WrapObject(IID_IUnknown, reinterpret_cast(&casted), nullptr); } } diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_wrapper_creators.cpp b/third_party/gfxreconstruct/framework/generated/generated_dx12_wrapper_creators.cpp index 380f20832..a9dff45be 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_wrapper_creators.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_wrapper_creators.cpp @@ -614,7 +614,7 @@ void WrapID3D12Tools(REFIID riid, void** object, DxWrapperResources* resources) else { // Create a wrapper for the latest interface version. The application will only use the wrapper as the interface type that it expects it to be. - (*object) = new ID3D12Tools1_Wrapper(riid, *wrap_object, resources); + (*object) = new ID3D12Tools2_Wrapper(riid, *wrap_object, resources); } } @@ -654,7 +654,7 @@ void WrapID3D12DeviceTools(REFIID riid, void** object, DxWrapperResources* resou else { // Create a wrapper for the latest interface version. The application will only use the wrapper as the interface type that it expects it to be. - (*object) = new ID3D12DeviceTools_Wrapper(riid, *wrap_object, resources); + (*object) = new ID3D12DeviceTools1_Wrapper(riid, *wrap_object, resources); } } diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_wrapper_creators.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_wrapper_creators.h index 70c0c62ca..5c74a032a 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_wrapper_creators.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_wrapper_creators.h @@ -241,8 +241,10 @@ const std::unordered_mapDecrementCallScope(); } +ID3D12Tools2_Wrapper::ID3D12Tools2_Wrapper(REFIID riid, IUnknown* object, DxWrapperResources* resources, const std::function& destructor) : ID3D12Tools1_Wrapper(riid, object, resources, destructor) +{ +} + +HRESULT STDMETHODCALLTYPE ID3D12Tools2_Wrapper::SetApplicationSpecificDriverState( + IUnknown* pAdapter, + ID3DBlob* pBlob) +{ + HRESULT result{}; + + auto manager = D3D12CaptureManager::Get(); + auto call_scope = manager->IncrementCallScope(); + + if (call_scope == 1) + { + auto force_command_serialization = D3D12CaptureManager::Get()->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = D3D12CaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = D3D12CaptureManager::AcquireSharedApiCallLock(); + } + + CustomWrapperPreCall::Dispatch( + manager, + this, + pAdapter, + pBlob); + + result = GetWrappedObjectAs()->SetApplicationSpecificDriverState( + encode::GetWrappedObject(pAdapter), + encode::GetWrappedObject(pBlob)); + + Encode_ID3D12Tools2_SetApplicationSpecificDriverState( + this, + result, + pAdapter, + pBlob); + + CustomWrapperPostCall::Dispatch( + manager, + this, + result, + pAdapter, + pBlob); + } + else + { + result = GetWrappedObjectAs()->SetApplicationSpecificDriverState( + pAdapter, + pBlob); + } + + manager->DecrementCallScope(); + + return result; +} + ID3D12PageableTools_Wrapper::ID3D12PageableTools_Wrapper(REFIID riid, IUnknown* object, DxWrapperResources* resources, const std::function& destructor) : IUnknown_Wrapper(riid, object, resources, destructor) { info_ = std::make_shared(); @@ -17481,6 +17543,113 @@ void STDMETHODCALLTYPE ID3D12DeviceTools_Wrapper::SetNextAllocationAddress( manager->DecrementCallScope(); } +ID3D12DeviceTools1_Wrapper::ID3D12DeviceTools1_Wrapper(REFIID riid, IUnknown* object, DxWrapperResources* resources, const std::function& destructor) : ID3D12DeviceTools_Wrapper(riid, object, resources, destructor) +{ +} + +HRESULT STDMETHODCALLTYPE ID3D12DeviceTools1_Wrapper::GetApplicationSpecificDriverState( + ID3DBlob** ppBlob) +{ + HRESULT result{}; + + auto manager = D3D12CaptureManager::Get(); + auto call_scope = manager->IncrementCallScope(); + + if (call_scope == 1) + { + auto force_command_serialization = D3D12CaptureManager::Get()->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = D3D12CaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = D3D12CaptureManager::AcquireSharedApiCallLock(); + } + + CustomWrapperPreCall::Dispatch( + manager, + this, + ppBlob); + + result = GetWrappedObjectAs()->GetApplicationSpecificDriverState( + ppBlob); + + if (SUCCEEDED(result)) + { + WrapObject(IID_ID3D10Blob, reinterpret_cast(ppBlob), nullptr); + } + + Encode_ID3D12DeviceTools1_GetApplicationSpecificDriverState( + this, + result, + ppBlob); + + CustomWrapperPostCall::Dispatch( + manager, + this, + result, + ppBlob); + } + else + { + result = GetWrappedObjectAs()->GetApplicationSpecificDriverState( + ppBlob); + } + + manager->DecrementCallScope(); + + return result; +} + +D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS STDMETHODCALLTYPE ID3D12DeviceTools1_Wrapper::GetApplicationSpecificDriverBlobStatus() +{ + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS result{}; + + auto manager = D3D12CaptureManager::Get(); + auto call_scope = manager->IncrementCallScope(); + + if (call_scope == 1) + { + auto force_command_serialization = D3D12CaptureManager::Get()->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = D3D12CaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = D3D12CaptureManager::AcquireSharedApiCallLock(); + } + + CustomWrapperPreCall::Dispatch( + manager, + this); + + result = GetWrappedObjectAs()->GetApplicationSpecificDriverBlobStatus(); + + Encode_ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus( + this, + result); + + CustomWrapperPostCall::Dispatch( + manager, + this, + result); + } + else + { + result = GetWrappedObjectAs()->GetApplicationSpecificDriverBlobStatus(); + } + + manager->DecrementCallScope(); + + return result; +} + ID3D12SDKConfiguration_Wrapper::ID3D12SDKConfiguration_Wrapper(REFIID riid, IUnknown* object, DxWrapperResources* resources, const std::function& destructor) : IUnknown_Wrapper(riid, object, resources, destructor) { info_ = std::make_shared(); @@ -19505,7 +19674,7 @@ void STDMETHODCALLTYPE ID3D12GBVDiagnostics_Wrapper::GBVReserved1() /* -** This part is generated from d3dcommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3dcommon.h in Windows SDK: 10.0.26100.0 ** */ @@ -19759,7 +19928,7 @@ HRESULT STDMETHODCALLTYPE ID3DDestructionNotifier_Wrapper::UnregisterDestruction /* -** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.26100.0 ** */ @@ -23863,7 +24032,7 @@ HRESULT STDMETHODCALLTYPE ID3D12InfoQueue1_Wrapper::UnregisterMessageCallback( /* -** This part is generated from dxgi.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi.h in Windows SDK: 10.0.26100.0 ** */ @@ -27352,7 +27521,7 @@ HRESULT STDMETHODCALLTYPE IDXGIDevice1_Wrapper::GetMaximumFrameLatency( /* -** This part is generated from dxgi1_2.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_2.h in Windows SDK: 10.0.26100.0 ** */ @@ -29943,7 +30112,7 @@ HRESULT STDMETHODCALLTYPE IDXGIOutput1_Wrapper::DuplicateOutput( /* -** This part is generated from dxgi1_3.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_3.h in Windows SDK: 10.0.26100.0 ** */ @@ -31549,7 +31718,7 @@ HRESULT STDMETHODCALLTYPE IDXGIOutput3_Wrapper::CheckOverlaySupport( /* -** This part is generated from dxgi1_4.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_4.h in Windows SDK: 10.0.26100.0 ** */ @@ -32355,7 +32524,7 @@ void STDMETHODCALLTYPE IDXGIAdapter3_Wrapper::UnregisterVideoMemoryBudgetChangeN /* -** This part is generated from dxgi1_5.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_5.h in Windows SDK: 10.0.26100.0 ** */ @@ -32724,7 +32893,7 @@ HRESULT STDMETHODCALLTYPE IDXGIFactory5_Wrapper::CheckFeatureSupport( /* -** This part is generated from dxgi1_6.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_6.h in Windows SDK: 10.0.26100.0 ** */ @@ -33130,37 +33299,37 @@ HRESULT STDMETHODCALLTYPE IDXGIFactory7_Wrapper::UnregisterAdaptersChangedEvent( /* -** This part is generated from dxgicommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgicommon.h in Windows SDK: 10.0.26100.0 ** */ /* -** This part is generated from dxgitype.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgitype.h in Windows SDK: 10.0.26100.0 ** */ /* -** This part is generated from Unknwnbase.h in Windows SDK: 10.0.20348.0 +** This part is generated from Unknwnbase.h in Windows SDK: 10.0.26100.0 ** */ /* -** This part is generated from guiddef.h in Windows SDK: 10.0.20348.0 +** This part is generated from guiddef.h in Windows SDK: 10.0.26100.0 ** */ /* -** This part is generated from windef.h in Windows SDK: 10.0.20348.0 +** This part is generated from windef.h in Windows SDK: 10.0.26100.0 ** */ /* -** This part is generated from minwinbase.h in Windows SDK: 10.0.20348.0 +** This part is generated from minwinbase.h in Windows SDK: 10.0.26100.0 ** */ diff --git a/third_party/gfxreconstruct/framework/generated/generated_dx12_wrappers.h b/third_party/gfxreconstruct/framework/generated/generated_dx12_wrappers.h index ce44ad860..600a20639 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_dx12_wrappers.h +++ b/third_party/gfxreconstruct/framework/generated/generated_dx12_wrappers.h @@ -56,13 +56,13 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(encode) /* -** This part is generated from dxgiformat.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgiformat.h in Windows SDK: 10.0.26100.0 ** */ /* -** This part is generated from d3d12.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12.h in Windows SDK: 10.0.26100.0 ** */ @@ -2106,6 +2106,17 @@ class ID3D12Tools1_Wrapper : public ID3D12Tools_Wrapper }; +class ID3D12Tools2_Wrapper : public ID3D12Tools1_Wrapper +{ + public: + ID3D12Tools2_Wrapper(REFIID riid, IUnknown* object, DxWrapperResources* resources = nullptr, const std::function& destructor = [](IUnknown_Wrapper* u){ delete reinterpret_cast(u); }); + + virtual HRESULT STDMETHODCALLTYPE SetApplicationSpecificDriverState( + IUnknown* pAdapter, + ID3DBlob* pBlob); + +}; + class ID3D12PageableTools_Wrapper : public IUnknown_Wrapper { public: @@ -2156,6 +2167,18 @@ class ID3D12DeviceTools_Wrapper : public IUnknown_Wrapper std::shared_ptr info_; }; +class ID3D12DeviceTools1_Wrapper : public ID3D12DeviceTools_Wrapper +{ + public: + ID3D12DeviceTools1_Wrapper(REFIID riid, IUnknown* object, DxWrapperResources* resources = nullptr, const std::function& destructor = [](IUnknown_Wrapper* u){ delete reinterpret_cast(u); }); + + virtual HRESULT STDMETHODCALLTYPE GetApplicationSpecificDriverState( + ID3DBlob** ppBlob); + + virtual D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS STDMETHODCALLTYPE GetApplicationSpecificDriverBlobStatus(); + +}; + class ID3D12SDKConfiguration_Wrapper : public IUnknown_Wrapper { public: @@ -2450,7 +2473,7 @@ class ID3D12GBVDiagnostics_Wrapper : public IUnknown_Wrapper /* -** This part is generated from d3dcommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3dcommon.h in Windows SDK: 10.0.26100.0 ** */ @@ -2512,7 +2535,7 @@ class ID3DDestructionNotifier_Wrapper : public IUnknown_Wrapper /* -** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.20348.0 +** This part is generated from d3d12sdklayers.h in Windows SDK: 10.0.26100.0 ** */ @@ -3070,7 +3093,7 @@ class ID3D12InfoQueue1_Wrapper : public ID3D12InfoQueue_Wrapper /* -** This part is generated from dxgi.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi.h in Windows SDK: 10.0.26100.0 ** */ @@ -3505,7 +3528,7 @@ class IDXGIDevice1_Wrapper : public IDXGIDevice_Wrapper /* -** This part is generated from dxgi1_2.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_2.h in Windows SDK: 10.0.26100.0 ** */ @@ -3775,7 +3798,7 @@ class IDXGIOutput1_Wrapper : public IDXGIOutput_Wrapper /* -** This part is generated from dxgi1_3.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_3.h in Windows SDK: 10.0.26100.0 ** */ @@ -3981,7 +4004,7 @@ class IDXGIOutput3_Wrapper : public IDXGIOutput2_Wrapper /* -** This part is generated from dxgi1_4.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_4.h in Windows SDK: 10.0.26100.0 ** */ @@ -4072,7 +4095,7 @@ class IDXGIAdapter3_Wrapper : public IDXGIAdapter2_Wrapper /* -** This part is generated from dxgi1_5.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_5.h in Windows SDK: 10.0.26100.0 ** */ @@ -4134,7 +4157,7 @@ class IDXGIFactory5_Wrapper : public IDXGIFactory4_Wrapper /* -** This part is generated from dxgi1_6.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgi1_6.h in Windows SDK: 10.0.26100.0 ** */ @@ -4192,37 +4215,37 @@ class IDXGIFactory7_Wrapper : public IDXGIFactory6_Wrapper /* -** This part is generated from dxgicommon.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgicommon.h in Windows SDK: 10.0.26100.0 ** */ /* -** This part is generated from dxgitype.h in Windows SDK: 10.0.20348.0 +** This part is generated from dxgitype.h in Windows SDK: 10.0.26100.0 ** */ /* -** This part is generated from Unknwnbase.h in Windows SDK: 10.0.20348.0 +** This part is generated from Unknwnbase.h in Windows SDK: 10.0.26100.0 ** */ /* -** This part is generated from guiddef.h in Windows SDK: 10.0.20348.0 +** This part is generated from guiddef.h in Windows SDK: 10.0.26100.0 ** */ /* -** This part is generated from windef.h in Windows SDK: 10.0.20348.0 +** This part is generated from windef.h in Windows SDK: 10.0.26100.0 ** */ /* -** This part is generated from minwinbase.h in Windows SDK: 10.0.20348.0 +** This part is generated from minwinbase.h in Windows SDK: 10.0.26100.0 ** */ diff --git a/third_party/gfxreconstruct/framework/generated/generated_openxr_replay_consumer.cpp b/third_party/gfxreconstruct/framework/generated/generated_openxr_replay_consumer.cpp index 77bf9576e..26dd0f5a4 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_openxr_replay_consumer.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_openxr_replay_consumer.cpp @@ -120,8 +120,10 @@ void OpenXrReplayConsumer::Process_xrGetSystem( if (!systemId->IsNull()) { systemId->SetHandleLength(1); } XrSystemId* out_systemId = systemId->GetHandlePointer(); + PushRecaptureHandleId(systemId->GetPointer()); XrResult replay_result = GetInstanceTable(in_instance)->GetSystem(in_instance, in_getInfo, out_systemId); CheckResult("xrGetSystem", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, systemId->GetPointer(), out_systemId, &CommonObjectInfoTable::AddXrSystemIdInfo); CustomProcess::UpdateState(this, call_info, returnValue, instance, getInfo, systemId, replay_result); @@ -139,8 +141,10 @@ void OpenXrReplayConsumer::Process_xrGetSystemProperties( XrSystemProperties* out_properties = properties->IsNull() ? nullptr : properties->AllocateOutputData(1, { XR_TYPE_SYSTEM_PROPERTIES, nullptr }); InitializeOutputStructNext(properties); + PushRecaptureStructHandleIds(properties->GetMetaStructPointer(), this); XrResult replay_result = GetInstanceTable(in_instance)->GetSystemProperties(in_instance, in_systemId, out_properties); CheckResult("xrGetSystemProperties", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddStructHandles(instance, properties->GetMetaStructPointer(), out_properties, &GetObjectInfoTable()); CustomProcess::UpdateState(this, call_info, returnValue, instance, systemId, properties, replay_result); @@ -159,8 +163,10 @@ void OpenXrReplayConsumer::Process_xrCreateSession( if (!session->IsNull()) { session->SetHandleLength(1); } XrSession* out_session = session->GetHandlePointer(); + PushRecaptureHandleId(session->GetPointer()); XrResult replay_result = GetInstanceTable(in_instance)->CreateSession(in_instance, in_createInfo, out_session); CheckResult("xrCreateSession", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, session->GetPointer(), out_session, &CommonObjectInfoTable::AddXrSessionInfo); @@ -210,8 +216,10 @@ void OpenXrReplayConsumer::Process_xrCreateReferenceSpace( if (!space->IsNull()) { space->SetHandleLength(1); } XrSpace* out_space = space->GetHandlePointer(); + PushRecaptureHandleId(space->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateReferenceSpace(in_session, in_createInfo, out_space); CheckResult("xrCreateReferenceSpace", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, space->GetPointer(), out_space, &CommonObjectInfoTable::AddXrSpaceInfo); @@ -247,8 +255,10 @@ void OpenXrReplayConsumer::Process_xrCreateActionSpace( if (!space->IsNull()) { space->SetHandleLength(1); } XrSpace* out_space = space->GetHandlePointer(); + PushRecaptureHandleId(space->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateActionSpace(in_session, in_createInfo, out_space); CheckResult("xrCreateActionSpace", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, space->GetPointer(), out_space, &CommonObjectInfoTable::AddXrSpaceInfo); @@ -525,8 +535,10 @@ void OpenXrReplayConsumer::Process_xrStringToPath( if (!path->IsNull()) { path->SetHandleLength(1); } XrPath* out_path = path->GetHandlePointer(); + PushRecaptureHandleId(path->GetPointer()); XrResult replay_result = GetInstanceTable(in_instance)->StringToPath(in_instance, in_pathString, out_path); CheckResult("xrStringToPath", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, path->GetPointer(), out_path, &CommonObjectInfoTable::AddXrPathInfo); CustomProcess::UpdateState(this, call_info, returnValue, instance, pathString, path, replay_result); @@ -563,8 +575,10 @@ void OpenXrReplayConsumer::Process_xrCreateActionSet( if (!actionSet->IsNull()) { actionSet->SetHandleLength(1); } XrActionSet* out_actionSet = actionSet->GetHandlePointer(); + PushRecaptureHandleId(actionSet->GetPointer()); XrResult replay_result = GetInstanceTable(in_instance)->CreateActionSet(in_instance, in_createInfo, out_actionSet); CheckResult("xrCreateActionSet", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, actionSet->GetPointer(), out_actionSet, &CommonObjectInfoTable::AddXrActionSetInfo); @@ -598,8 +612,10 @@ void OpenXrReplayConsumer::Process_xrCreateAction( if (!action->IsNull()) { action->SetHandleLength(1); } XrAction* out_action = action->GetHandlePointer(); + PushRecaptureHandleId(action->GetPointer()); XrResult replay_result = GetInstanceTable(in_actionSet)->CreateAction(in_actionSet, in_createInfo, out_action); CheckResult("xrCreateAction", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(actionSet, action->GetPointer(), out_action, &CommonObjectInfoTable::AddXrActionInfo); @@ -662,8 +678,10 @@ void OpenXrReplayConsumer::Process_xrGetCurrentInteractionProfile( XrInteractionProfileState* out_interactionProfile = interactionProfile->IsNull() ? nullptr : interactionProfile->AllocateOutputData(1, { XR_TYPE_INTERACTION_PROFILE_STATE, nullptr }); InitializeOutputStructNext(interactionProfile); + PushRecaptureStructHandleIds(interactionProfile->GetMetaStructPointer(), this); XrResult replay_result = GetInstanceTable(in_session)->GetCurrentInteractionProfile(in_session, in_topLevelUserPath, out_interactionProfile); CheckResult("xrGetCurrentInteractionProfile", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddStructHandles(session, interactionProfile->GetMetaStructPointer(), out_interactionProfile, &GetObjectInfoTable()); CustomProcess::UpdateState(this, call_info, returnValue, session, topLevelUserPath, interactionProfile, replay_result); @@ -772,8 +790,10 @@ void OpenXrReplayConsumer::Process_xrEnumerateBoundSourcesForAction( if (!sources->IsNull()) { sources->SetHandleLength(sourceCapacityInput); } XrPath* out_sources = sources->GetHandlePointer(); + PushRecaptureHandleIds(sources->GetPointer(), sources->GetLength()); XrResult replay_result = GetInstanceTable(in_session)->EnumerateBoundSourcesForAction(in_session, in_enumerateInfo, sourceCapacityInput, out_sourceCountOutput, out_sources); CheckResult("xrEnumerateBoundSourcesForAction", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandles(session, sources->GetPointer(), sources->GetLength(), out_sources, sourceCapacityInput, &CommonObjectInfoTable::AddXrPathInfo); CustomProcess::UpdateState(this, call_info, returnValue, session, enumerateInfo, sourceCapacityInput, sourceCountOutput, sources, replay_result); @@ -859,8 +879,10 @@ void OpenXrReplayConsumer::Process_xrCreateSwapchainAndroidSurfaceKHR( XrSwapchain* out_swapchain = swapchain->GetHandlePointer(); jobject* in_surface = static_cast(PreProcessExternalObject(surface, format::ApiCallId::ApiCall_xrCreateSwapchainAndroidSurfaceKHR, "xrCreateSwapchainAndroidSurfaceKHR")); + PushRecaptureHandleId(swapchain->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateSwapchainAndroidSurfaceKHR(in_session, in_info, out_swapchain, in_surface); CheckResult("xrCreateSwapchainAndroidSurfaceKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, swapchain->GetPointer(), out_swapchain, &CommonObjectInfoTable::AddXrSwapchainInfo); @@ -954,8 +976,10 @@ void OpenXrReplayConsumer::Process_xrGetVulkanGraphicsDeviceKHR( if (!vkPhysicalDevice->IsNull()) { vkPhysicalDevice->SetHandleLength(1); } VkPhysicalDevice* out_vkPhysicalDevice = vkPhysicalDevice->GetHandlePointer(); + PushRecaptureHandleId(vkPhysicalDevice->GetPointer()); XrResult replay_result = GetInstanceTable(in_instance)->GetVulkanGraphicsDeviceKHR(in_instance, in_systemId, in_vkInstance, out_vkPhysicalDevice); CheckResult("xrGetVulkanGraphicsDeviceKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, vkPhysicalDevice->GetPointer(), out_vkPhysicalDevice, &CommonObjectInfoTable::AddVkPhysicalDeviceInfo); CustomProcess::UpdateState(this, call_info, returnValue, instance, systemId, vkInstance, vkPhysicalDevice, replay_result); @@ -1122,8 +1146,10 @@ void OpenXrReplayConsumer::Process_xrGetVulkanGraphicsDevice2KHR( if (!vulkanPhysicalDevice->IsNull()) { vulkanPhysicalDevice->SetHandleLength(1); } VkPhysicalDevice* out_vulkanPhysicalDevice = vulkanPhysicalDevice->GetHandlePointer(); + PushRecaptureHandleId(vulkanPhysicalDevice->GetPointer()); XrResult replay_result = GetInstanceTable(in_instance)->GetVulkanGraphicsDevice2KHR(in_instance, in_getInfo, out_vulkanPhysicalDevice); CheckResult("xrGetVulkanGraphicsDevice2KHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, vulkanPhysicalDevice->GetPointer(), out_vulkanPhysicalDevice, &CommonObjectInfoTable::AddVkPhysicalDeviceInfo); CustomProcess::UpdateState(this, call_info, returnValue, instance, getInfo, vulkanPhysicalDevice, replay_result); @@ -1293,8 +1319,10 @@ void OpenXrReplayConsumer::Process_xrCreateSpatialAnchorMSFT( if (!anchor->IsNull()) { anchor->SetHandleLength(1); } XrSpatialAnchorMSFT* out_anchor = anchor->GetHandlePointer(); + PushRecaptureHandleId(anchor->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateSpatialAnchorMSFT(in_session, in_createInfo, out_anchor); CheckResult("xrCreateSpatialAnchorMSFT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, anchor->GetPointer(), out_anchor, &CommonObjectInfoTable::AddXrSpatialAnchorMSFTInfo); @@ -1315,8 +1343,10 @@ void OpenXrReplayConsumer::Process_xrCreateSpatialAnchorSpaceMSFT( if (!space->IsNull()) { space->SetHandleLength(1); } XrSpace* out_space = space->GetHandlePointer(); + PushRecaptureHandleId(space->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateSpatialAnchorSpaceMSFT(in_session, in_createInfo, out_space); CheckResult("xrCreateSpatialAnchorSpaceMSFT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, space->GetPointer(), out_space, &CommonObjectInfoTable::AddXrSpaceInfo); @@ -1436,8 +1466,10 @@ void OpenXrReplayConsumer::Process_xrCreateSpatialGraphNodeSpaceMSFT( if (!space->IsNull()) { space->SetHandleLength(1); } XrSpace* out_space = space->GetHandlePointer(); + PushRecaptureHandleId(space->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateSpatialGraphNodeSpaceMSFT(in_session, in_createInfo, out_space); CheckResult("xrCreateSpatialGraphNodeSpaceMSFT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, space->GetPointer(), out_space, &CommonObjectInfoTable::AddXrSpaceInfo); @@ -1458,8 +1490,10 @@ void OpenXrReplayConsumer::Process_xrTryCreateSpatialGraphStaticNodeBindingMSFT( if (!nodeBinding->IsNull()) { nodeBinding->SetHandleLength(1); } XrSpatialGraphNodeBindingMSFT* out_nodeBinding = nodeBinding->GetHandlePointer(); + PushRecaptureHandleId(nodeBinding->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->TryCreateSpatialGraphStaticNodeBindingMSFT(in_session, in_createInfo, out_nodeBinding); CheckResult("xrTryCreateSpatialGraphStaticNodeBindingMSFT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, nodeBinding->GetPointer(), out_nodeBinding, &CommonObjectInfoTable::AddXrSpatialGraphNodeBindingMSFTInfo); @@ -1509,8 +1543,10 @@ void OpenXrReplayConsumer::Process_xrCreateHandTrackerEXT( if (!handTracker->IsNull()) { handTracker->SetHandleLength(1); } XrHandTrackerEXT* out_handTracker = handTracker->GetHandlePointer(); + PushRecaptureHandleId(handTracker->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateHandTrackerEXT(in_session, in_createInfo, out_handTracker); CheckResult("xrCreateHandTrackerEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, handTracker->GetPointer(), out_handTracker, &CommonObjectInfoTable::AddXrHandTrackerEXTInfo); @@ -1543,8 +1579,10 @@ void OpenXrReplayConsumer::Process_xrCreateHandMeshSpaceMSFT( if (!space->IsNull()) { space->SetHandleLength(1); } XrSpace* out_space = space->GetHandlePointer(); + PushRecaptureHandleId(space->GetPointer()); XrResult replay_result = GetInstanceTable(in_handTracker)->CreateHandMeshSpaceMSFT(in_handTracker, in_createInfo, out_space); CheckResult("xrCreateHandMeshSpaceMSFT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(handTracker, space->GetPointer(), out_space, &CommonObjectInfoTable::AddXrSpaceInfo); @@ -1581,8 +1619,10 @@ void OpenXrReplayConsumer::Process_xrGetControllerModelKeyMSFT( XrControllerModelKeyStateMSFT* out_controllerModelKeyState = controllerModelKeyState->IsNull() ? nullptr : controllerModelKeyState->AllocateOutputData(1, { XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT, nullptr }); InitializeOutputStructNext(controllerModelKeyState); + PushRecaptureStructHandleIds(controllerModelKeyState->GetMetaStructPointer(), this); XrResult replay_result = GetInstanceTable(in_session)->GetControllerModelKeyMSFT(in_session, in_topLevelUserPath, out_controllerModelKeyState); CheckResult("xrGetControllerModelKeyMSFT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddStructHandles(session, controllerModelKeyState->GetMetaStructPointer(), out_controllerModelKeyState, &GetObjectInfoTable()); CustomProcess::UpdateState(this, call_info, returnValue, session, topLevelUserPath, controllerModelKeyState, replay_result); @@ -1653,8 +1693,10 @@ void OpenXrReplayConsumer::Process_xrCreateSpatialAnchorFromPerceptionAnchorMSFT if (!anchor->IsNull()) { anchor->SetHandleLength(1); } XrSpatialAnchorMSFT* out_anchor = anchor->GetHandlePointer(); + PushRecaptureHandleId(anchor->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateSpatialAnchorFromPerceptionAnchorMSFT(in_session, in_perceptionAnchor, out_anchor); CheckResult("xrCreateSpatialAnchorFromPerceptionAnchorMSFT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, anchor->GetPointer(), out_anchor, &CommonObjectInfoTable::AddXrSpatialAnchorMSFTInfo); @@ -1740,8 +1782,10 @@ void OpenXrReplayConsumer::Process_xrCreateBodyTrackerFB( if (!bodyTracker->IsNull()) { bodyTracker->SetHandleLength(1); } XrBodyTrackerFB* out_bodyTracker = bodyTracker->GetHandlePointer(); + PushRecaptureHandleId(bodyTracker->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateBodyTrackerFB(in_session, in_createInfo, out_bodyTracker); CheckResult("xrCreateBodyTrackerFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, bodyTracker->GetPointer(), out_bodyTracker, &CommonObjectInfoTable::AddXrBodyTrackerFBInfo); @@ -1808,8 +1852,10 @@ void OpenXrReplayConsumer::Process_xrCreateSceneObserverMSFT( if (!sceneObserver->IsNull()) { sceneObserver->SetHandleLength(1); } XrSceneObserverMSFT* out_sceneObserver = sceneObserver->GetHandlePointer(); + PushRecaptureHandleId(sceneObserver->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateSceneObserverMSFT(in_session, in_createInfo, out_sceneObserver); CheckResult("xrCreateSceneObserverMSFT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, sceneObserver->GetPointer(), out_sceneObserver, &CommonObjectInfoTable::AddXrSceneObserverMSFTInfo); @@ -1842,8 +1888,10 @@ void OpenXrReplayConsumer::Process_xrCreateSceneMSFT( if (!scene->IsNull()) { scene->SetHandleLength(1); } XrSceneMSFT* out_scene = scene->GetHandlePointer(); + PushRecaptureHandleId(scene->GetPointer()); XrResult replay_result = GetInstanceTable(in_sceneObserver)->CreateSceneMSFT(in_sceneObserver, in_createInfo, out_scene); CheckResult("xrCreateSceneMSFT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(sceneObserver, scene->GetPointer(), out_scene, &CommonObjectInfoTable::AddXrSceneMSFTInfo); @@ -2017,8 +2065,10 @@ void OpenXrReplayConsumer::Process_xrEnumerateViveTrackerPathsHTCX( uint32_t* out_pathCountOutput = pathCountOutput->IsNull() ? nullptr : pathCountOutput->AllocateOutputData(1, static_cast(0)); XrViveTrackerPathsHTCX* out_paths = paths->IsNull() ? nullptr : paths->AllocateOutputData(pathCapacityInput, XrViveTrackerPathsHTCX{ XR_TYPE_VIVE_TRACKER_PATHS_HTCX, nullptr }); + PushRecaptureStructArrayHandleIds(paths->GetMetaStructPointer(), paths->GetLength(), this); XrResult replay_result = GetInstanceTable(in_instance)->EnumerateViveTrackerPathsHTCX(in_instance, pathCapacityInput, out_pathCountOutput, out_paths); CheckResult("xrEnumerateViveTrackerPathsHTCX", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddStructArrayHandles(instance, paths->GetMetaStructPointer(), paths->GetLength(), out_paths, pathCapacityInput, &GetObjectInfoTable()); CustomProcess::UpdateState(this, call_info, returnValue, instance, pathCapacityInput, pathCountOutput, paths, replay_result); @@ -2036,8 +2086,10 @@ void OpenXrReplayConsumer::Process_xrCreateFacialTrackerHTC( if (!facialTracker->IsNull()) { facialTracker->SetHandleLength(1); } XrFacialTrackerHTC* out_facialTracker = facialTracker->GetHandlePointer(); + PushRecaptureHandleId(facialTracker->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateFacialTrackerHTC(in_session, in_createInfo, out_facialTracker); CheckResult("xrCreateFacialTrackerHTC", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, facialTracker->GetPointer(), out_facialTracker, &CommonObjectInfoTable::AddXrFacialTrackerHTCInfo); @@ -2116,8 +2168,10 @@ void OpenXrReplayConsumer::Process_xrCreateSpatialAnchorFB( if (!requestId->IsNull()) { requestId->SetHandleLength(1); } XrAsyncRequestIdFB* out_requestId = requestId->GetHandlePointer(); + PushRecaptureHandleId(requestId->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateSpatialAnchorFB(in_session, in_info, out_requestId); CheckResult("xrCreateSpatialAnchorFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, requestId->GetPointer(), out_requestId, &CommonObjectInfoTable::AddXrAsyncRequestIdFBInfo); CustomProcess::UpdateState(this, call_info, returnValue, session, info, requestId, replay_result); @@ -2166,8 +2220,10 @@ void OpenXrReplayConsumer::Process_xrSetSpaceComponentStatusFB( if (!requestId->IsNull()) { requestId->SetHandleLength(1); } XrAsyncRequestIdFB* out_requestId = requestId->GetHandlePointer(); + PushRecaptureHandleId(requestId->GetPointer()); XrResult replay_result = GetInstanceTable(in_space)->SetSpaceComponentStatusFB(in_space, in_info, out_requestId); CheckResult("xrSetSpaceComponentStatusFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(space, requestId->GetPointer(), out_requestId, &CommonObjectInfoTable::AddXrAsyncRequestIdFBInfo); CustomProcess::UpdateState(this, call_info, returnValue, space, info, requestId, replay_result); @@ -2201,8 +2257,10 @@ void OpenXrReplayConsumer::Process_xrCreateFoveationProfileFB( if (!profile->IsNull()) { profile->SetHandleLength(1); } XrFoveationProfileFB* out_profile = profile->GetHandlePointer(); + PushRecaptureHandleId(profile->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateFoveationProfileFB(in_session, in_createInfo, out_profile); CheckResult("xrCreateFoveationProfileFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, profile->GetPointer(), out_profile, &CommonObjectInfoTable::AddXrFoveationProfileFBInfo); @@ -2251,8 +2309,10 @@ void OpenXrReplayConsumer::Process_xrCreateKeyboardSpaceFB( if (!keyboardSpace->IsNull()) { keyboardSpace->SetHandleLength(1); } XrSpace* out_keyboardSpace = keyboardSpace->GetHandlePointer(); + PushRecaptureHandleId(keyboardSpace->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateKeyboardSpaceFB(in_session, in_createInfo, out_keyboardSpace); CheckResult("xrCreateKeyboardSpaceFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, keyboardSpace->GetPointer(), out_keyboardSpace, &CommonObjectInfoTable::AddXrSpaceInfo); @@ -2324,8 +2384,10 @@ void OpenXrReplayConsumer::Process_xrCreatePassthroughFB( if (!outPassthrough->IsNull()) { outPassthrough->SetHandleLength(1); } XrPassthroughFB* out_outPassthrough = outPassthrough->GetHandlePointer(); + PushRecaptureHandleId(outPassthrough->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreatePassthroughFB(in_session, in_createInfo, out_outPassthrough); CheckResult("xrCreatePassthroughFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, outPassthrough->GetPointer(), out_outPassthrough, &CommonObjectInfoTable::AddXrPassthroughFBInfo); @@ -2383,8 +2445,10 @@ void OpenXrReplayConsumer::Process_xrCreatePassthroughLayerFB( if (!outLayer->IsNull()) { outLayer->SetHandleLength(1); } XrPassthroughLayerFB* out_outLayer = outLayer->GetHandlePointer(); + PushRecaptureHandleId(outLayer->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreatePassthroughLayerFB(in_session, in_createInfo, out_outLayer); CheckResult("xrCreatePassthroughLayerFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, outLayer->GetPointer(), out_outLayer, &CommonObjectInfoTable::AddXrPassthroughLayerFBInfo); @@ -2457,8 +2521,10 @@ void OpenXrReplayConsumer::Process_xrCreateGeometryInstanceFB( if (!outGeometryInstance->IsNull()) { outGeometryInstance->SetHandleLength(1); } XrGeometryInstanceFB* out_outGeometryInstance = outGeometryInstance->GetHandlePointer(); + PushRecaptureHandleId(outGeometryInstance->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateGeometryInstanceFB(in_session, in_createInfo, out_outGeometryInstance); CheckResult("xrCreateGeometryInstanceFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, outGeometryInstance->GetPointer(), out_outGeometryInstance, &CommonObjectInfoTable::AddXrGeometryInstanceFBInfo); @@ -2506,8 +2572,10 @@ void OpenXrReplayConsumer::Process_xrEnumerateRenderModelPathsFB( uint32_t* out_pathCountOutput = pathCountOutput->IsNull() ? nullptr : pathCountOutput->AllocateOutputData(1, static_cast(0)); XrRenderModelPathInfoFB* out_paths = paths->IsNull() ? nullptr : paths->AllocateOutputData(pathCapacityInput, XrRenderModelPathInfoFB{ XR_TYPE_RENDER_MODEL_PATH_INFO_FB, nullptr }); + PushRecaptureStructArrayHandleIds(paths->GetMetaStructPointer(), paths->GetLength(), this); XrResult replay_result = GetInstanceTable(in_session)->EnumerateRenderModelPathsFB(in_session, pathCapacityInput, out_pathCountOutput, out_paths); CheckResult("xrEnumerateRenderModelPathsFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddStructArrayHandles(session, paths->GetMetaStructPointer(), paths->GetLength(), out_paths, pathCapacityInput, &GetObjectInfoTable()); CustomProcess::UpdateState(this, call_info, returnValue, session, pathCapacityInput, pathCountOutput, paths, replay_result); @@ -2525,8 +2593,10 @@ void OpenXrReplayConsumer::Process_xrGetRenderModelPropertiesFB( XrRenderModelPropertiesFB* out_properties = properties->IsNull() ? nullptr : properties->AllocateOutputData(1, { XR_TYPE_RENDER_MODEL_PROPERTIES_FB, nullptr }); InitializeOutputStructNext(properties); + PushRecaptureStructHandleIds(properties->GetMetaStructPointer(), this); XrResult replay_result = GetInstanceTable(in_session)->GetRenderModelPropertiesFB(in_session, in_path, out_properties); CheckResult("xrGetRenderModelPropertiesFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddStructHandles(session, properties->GetMetaStructPointer(), out_properties, &GetObjectInfoTable()); CustomProcess::UpdateState(this, call_info, returnValue, session, path, properties, replay_result); @@ -2631,8 +2701,10 @@ void OpenXrReplayConsumer::Process_xrCreateMarkerSpaceVARJO( if (!space->IsNull()) { space->SetHandleLength(1); } XrSpace* out_space = space->GetHandlePointer(); + PushRecaptureHandleId(space->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateMarkerSpaceVARJO(in_session, in_createInfo, out_space); CheckResult("xrCreateMarkerSpaceVARJO", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, space->GetPointer(), out_space, &CommonObjectInfoTable::AddXrSpaceInfo); @@ -2665,8 +2737,10 @@ void OpenXrReplayConsumer::Process_xrCreateSpaceFromCoordinateFrameUIDML( if (!space->IsNull()) { space->SetHandleLength(1); } XrSpace* out_space = space->GetHandlePointer(); + PushRecaptureHandleId(space->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateSpaceFromCoordinateFrameUIDML(in_session, in_createInfo, out_space); CheckResult("xrCreateSpaceFromCoordinateFrameUIDML", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, space->GetPointer(), out_space, &CommonObjectInfoTable::AddXrSpaceInfo); @@ -2686,8 +2760,10 @@ void OpenXrReplayConsumer::Process_xrCreateMarkerDetectorML( if (!markerDetector->IsNull()) { markerDetector->SetHandleLength(1); } XrMarkerDetectorML* out_markerDetector = markerDetector->GetHandlePointer(); + PushRecaptureHandleId(markerDetector->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateMarkerDetectorML(in_session, in_createInfo, out_markerDetector); CheckResult("xrCreateMarkerDetectorML", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, markerDetector->GetPointer(), out_markerDetector, &CommonObjectInfoTable::AddXrMarkerDetectorMLInfo); @@ -2751,8 +2827,10 @@ void OpenXrReplayConsumer::Process_xrGetMarkersML( if (!markers->IsNull()) { markers->SetHandleLength(markerCapacityInput); } XrMarkerML* out_markers = markers->GetHandlePointer(); + PushRecaptureHandleIds(markers->GetPointer(), markers->GetLength()); XrResult replay_result = GetInstanceTable(in_markerDetector)->GetMarkersML(in_markerDetector, markerCapacityInput, out_markerCountOutput, out_markers); CheckResult("xrGetMarkersML", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandles(markerDetector, markers->GetPointer(), markers->GetLength(), out_markers, markerCapacityInput, &CommonObjectInfoTable::AddXrMarkerMLInfo); CustomProcess::UpdateState(this, call_info, returnValue, markerDetector, markerCapacityInput, markerCountOutput, markers, replay_result); @@ -2838,8 +2916,10 @@ void OpenXrReplayConsumer::Process_xrCreateMarkerSpaceML( if (!space->IsNull()) { space->SetHandleLength(1); } XrSpace* out_space = space->GetHandlePointer(); + PushRecaptureHandleId(space->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateMarkerSpaceML(in_session, in_createInfo, out_space); CheckResult("xrCreateMarkerSpaceML", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, space->GetPointer(), out_space, &CommonObjectInfoTable::AddXrSpaceInfo); @@ -2922,8 +3002,10 @@ void OpenXrReplayConsumer::Process_xrCreateExportedLocalizationMapML( if (!map->IsNull()) { map->SetHandleLength(1); } XrExportedLocalizationMapML* out_map = map->GetHandlePointer(); + PushRecaptureHandleId(map->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateExportedLocalizationMapML(in_session, in_mapUuid, out_map); CheckResult("xrCreateExportedLocalizationMapML", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, map->GetPointer(), out_map, &CommonObjectInfoTable::AddXrExportedLocalizationMapMLInfo); @@ -2971,8 +3053,10 @@ void OpenXrReplayConsumer::Process_xrCreateSpatialAnchorStoreConnectionMSFT( if (!spatialAnchorStore->IsNull()) { spatialAnchorStore->SetHandleLength(1); } XrSpatialAnchorStoreConnectionMSFT* out_spatialAnchorStore = spatialAnchorStore->GetHandlePointer(); + PushRecaptureHandleId(spatialAnchorStore->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateSpatialAnchorStoreConnectionMSFT(in_session, out_spatialAnchorStore); CheckResult("xrCreateSpatialAnchorStoreConnectionMSFT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, spatialAnchorStore->GetPointer(), out_spatialAnchorStore, &CommonObjectInfoTable::AddXrSpatialAnchorStoreConnectionMSFTInfo); @@ -3038,8 +3122,10 @@ void OpenXrReplayConsumer::Process_xrCreateSpatialAnchorFromPersistedNameMSFT( if (!spatialAnchor->IsNull()) { spatialAnchor->SetHandleLength(1); } XrSpatialAnchorMSFT* out_spatialAnchor = spatialAnchor->GetHandlePointer(); + PushRecaptureHandleId(spatialAnchor->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateSpatialAnchorFromPersistedNameMSFT(in_session, in_spatialAnchorCreateInfo, out_spatialAnchor); CheckResult("xrCreateSpatialAnchorFromPersistedNameMSFT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, spatialAnchor->GetPointer(), out_spatialAnchor, &CommonObjectInfoTable::AddXrSpatialAnchorMSFTInfo); @@ -3123,8 +3209,10 @@ void OpenXrReplayConsumer::Process_xrQuerySpacesFB( if (!requestId->IsNull()) { requestId->SetHandleLength(1); } XrAsyncRequestIdFB* out_requestId = requestId->GetHandlePointer(); + PushRecaptureHandleId(requestId->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->QuerySpacesFB(in_session, in_info, out_requestId); CheckResult("xrQuerySpacesFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, requestId->GetPointer(), out_requestId, &CommonObjectInfoTable::AddXrAsyncRequestIdFBInfo); CustomProcess::UpdateState(this, call_info, returnValue, session, info, requestId, replay_result); @@ -3142,8 +3230,10 @@ void OpenXrReplayConsumer::Process_xrRetrieveSpaceQueryResultsFB( XrSpaceQueryResultsFB* out_results = results->IsNull() ? nullptr : results->AllocateOutputData(1, { XR_TYPE_SPACE_QUERY_RESULTS_FB, nullptr }); InitializeOutputStructNext(results); + PushRecaptureStructHandleIds(results->GetMetaStructPointer(), this); XrResult replay_result = GetInstanceTable(in_session)->RetrieveSpaceQueryResultsFB(in_session, in_requestId, out_results); CheckResult("xrRetrieveSpaceQueryResultsFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddStructHandles(session, results->GetMetaStructPointer(), out_results, &GetObjectInfoTable()); CustomProcess::UpdateState(this, call_info, returnValue, session, requestId, results, replay_result); @@ -3162,8 +3252,10 @@ void OpenXrReplayConsumer::Process_xrSaveSpaceFB( if (!requestId->IsNull()) { requestId->SetHandleLength(1); } XrAsyncRequestIdFB* out_requestId = requestId->GetHandlePointer(); + PushRecaptureHandleId(requestId->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->SaveSpaceFB(in_session, in_info, out_requestId); CheckResult("xrSaveSpaceFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, requestId->GetPointer(), out_requestId, &CommonObjectInfoTable::AddXrAsyncRequestIdFBInfo); CustomProcess::UpdateState(this, call_info, returnValue, session, info, requestId, replay_result); @@ -3182,8 +3274,10 @@ void OpenXrReplayConsumer::Process_xrEraseSpaceFB( if (!requestId->IsNull()) { requestId->SetHandleLength(1); } XrAsyncRequestIdFB* out_requestId = requestId->GetHandlePointer(); + PushRecaptureHandleId(requestId->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->EraseSpaceFB(in_session, in_info, out_requestId); CheckResult("xrEraseSpaceFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, requestId->GetPointer(), out_requestId, &CommonObjectInfoTable::AddXrAsyncRequestIdFBInfo); CustomProcess::UpdateState(this, call_info, returnValue, session, info, requestId, replay_result); @@ -3230,8 +3324,10 @@ void OpenXrReplayConsumer::Process_xrShareSpacesFB( if (!requestId->IsNull()) { requestId->SetHandleLength(1); } XrAsyncRequestIdFB* out_requestId = requestId->GetHandlePointer(); + PushRecaptureHandleId(requestId->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->ShareSpacesFB(in_session, in_info, out_requestId); CheckResult("xrShareSpacesFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, requestId->GetPointer(), out_requestId, &CommonObjectInfoTable::AddXrAsyncRequestIdFBInfo); CustomProcess::UpdateState(this, call_info, returnValue, session, info, requestId, replay_result); @@ -3346,8 +3442,10 @@ void OpenXrReplayConsumer::Process_xrRequestSceneCaptureFB( if (!requestId->IsNull()) { requestId->SetHandleLength(1); } XrAsyncRequestIdFB* out_requestId = requestId->GetHandlePointer(); + PushRecaptureHandleId(requestId->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->RequestSceneCaptureFB(in_session, in_info, out_requestId); CheckResult("xrRequestSceneCaptureFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, requestId->GetPointer(), out_requestId, &CommonObjectInfoTable::AddXrAsyncRequestIdFBInfo); CustomProcess::UpdateState(this, call_info, returnValue, session, info, requestId, replay_result); @@ -3397,8 +3495,10 @@ void OpenXrReplayConsumer::Process_xrCreateFaceTrackerFB( if (!faceTracker->IsNull()) { faceTracker->SetHandleLength(1); } XrFaceTrackerFB* out_faceTracker = faceTracker->GetHandlePointer(); + PushRecaptureHandleId(faceTracker->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateFaceTrackerFB(in_session, in_createInfo, out_faceTracker); CheckResult("xrCreateFaceTrackerFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, faceTracker->GetPointer(), out_faceTracker, &CommonObjectInfoTable::AddXrFaceTrackerFBInfo); @@ -3448,8 +3548,10 @@ void OpenXrReplayConsumer::Process_xrCreateEyeTrackerFB( if (!eyeTracker->IsNull()) { eyeTracker->SetHandleLength(1); } XrEyeTrackerFB* out_eyeTracker = eyeTracker->GetHandlePointer(); + PushRecaptureHandleId(eyeTracker->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateEyeTrackerFB(in_session, in_createInfo, out_eyeTracker); CheckResult("xrCreateEyeTrackerFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, eyeTracker->GetPointer(), out_eyeTracker, &CommonObjectInfoTable::AddXrEyeTrackerFBInfo); @@ -3546,8 +3648,10 @@ void OpenXrReplayConsumer::Process_xrCreateVirtualKeyboardMETA( if (!keyboard->IsNull()) { keyboard->SetHandleLength(1); } XrVirtualKeyboardMETA* out_keyboard = keyboard->GetHandlePointer(); + PushRecaptureHandleId(keyboard->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateVirtualKeyboardMETA(in_session, in_createInfo, out_keyboard); CheckResult("xrCreateVirtualKeyboardMETA", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, keyboard->GetPointer(), out_keyboard, &CommonObjectInfoTable::AddXrVirtualKeyboardMETAInfo); @@ -3583,8 +3687,10 @@ void OpenXrReplayConsumer::Process_xrCreateVirtualKeyboardSpaceMETA( if (!keyboardSpace->IsNull()) { keyboardSpace->SetHandleLength(1); } XrSpace* out_keyboardSpace = keyboardSpace->GetHandlePointer(); + PushRecaptureHandleId(keyboardSpace->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateVirtualKeyboardSpaceMETA(in_session, in_keyboard, in_createInfo, out_keyboardSpace); CheckResult("xrCreateVirtualKeyboardSpaceMETA", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, keyboardSpace->GetPointer(), out_keyboardSpace, &CommonObjectInfoTable::AddXrSpaceInfo); @@ -3744,8 +3850,10 @@ void OpenXrReplayConsumer::Process_xrEnumeratePerformanceMetricsCounterPathsMETA if (!counterPaths->IsNull()) { counterPaths->SetHandleLength(counterPathCapacityInput); } XrPath* out_counterPaths = counterPaths->GetHandlePointer(); + PushRecaptureHandleIds(counterPaths->GetPointer(), counterPaths->GetLength()); XrResult replay_result = GetInstanceTable(in_instance)->EnumeratePerformanceMetricsCounterPathsMETA(in_instance, counterPathCapacityInput, out_counterPathCountOutput, out_counterPaths); CheckResult("xrEnumeratePerformanceMetricsCounterPathsMETA", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandles(instance, counterPaths->GetPointer(), counterPaths->GetLength(), out_counterPaths, counterPathCapacityInput, &CommonObjectInfoTable::AddXrPathInfo); CustomProcess::UpdateState(this, call_info, returnValue, instance, counterPathCapacityInput, counterPathCountOutput, counterPaths, replay_result); @@ -3810,8 +3918,10 @@ void OpenXrReplayConsumer::Process_xrSaveSpaceListFB( if (!requestId->IsNull()) { requestId->SetHandleLength(1); } XrAsyncRequestIdFB* out_requestId = requestId->GetHandlePointer(); + PushRecaptureHandleId(requestId->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->SaveSpaceListFB(in_session, in_info, out_requestId); CheckResult("xrSaveSpaceListFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, requestId->GetPointer(), out_requestId, &CommonObjectInfoTable::AddXrAsyncRequestIdFBInfo); CustomProcess::UpdateState(this, call_info, returnValue, session, info, requestId, replay_result); @@ -3829,8 +3939,10 @@ void OpenXrReplayConsumer::Process_xrCreateSpaceUserFB( if (!user->IsNull()) { user->SetHandleLength(1); } XrSpaceUserFB* out_user = user->GetHandlePointer(); + PushRecaptureHandleId(user->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateSpaceUserFB(in_session, in_info, out_user); CheckResult("xrCreateSpaceUserFB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, user->GetPointer(), out_user, &CommonObjectInfoTable::AddXrSpaceUserFBInfo); @@ -3895,8 +4007,10 @@ void OpenXrReplayConsumer::Process_xrCreatePassthroughColorLutMETA( if (!colorLut->IsNull()) { colorLut->SetHandleLength(1); } XrPassthroughColorLutMETA* out_colorLut = colorLut->GetHandlePointer(); + PushRecaptureHandleId(colorLut->GetPointer()); XrResult replay_result = GetInstanceTable(in_passthrough)->CreatePassthroughColorLutMETA(in_passthrough, in_createInfo, out_colorLut); CheckResult("xrCreatePassthroughColorLutMETA", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(passthrough, colorLut->GetPointer(), out_colorLut, &CommonObjectInfoTable::AddXrPassthroughColorLutMETAInfo); @@ -3960,8 +4074,10 @@ void OpenXrReplayConsumer::Process_xrCreateFaceTracker2FB( if (!faceTracker->IsNull()) { faceTracker->SetHandleLength(1); } XrFaceTracker2FB* out_faceTracker = faceTracker->GetHandlePointer(); + PushRecaptureHandleId(faceTracker->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateFaceTracker2FB(in_session, in_createInfo, out_faceTracker); CheckResult("xrCreateFaceTracker2FB", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, faceTracker->GetPointer(), out_faceTracker, &CommonObjectInfoTable::AddXrFaceTracker2FBInfo); @@ -4011,8 +4127,10 @@ void OpenXrReplayConsumer::Process_xrCreateEnvironmentDepthProviderMETA( if (!environmentDepthProvider->IsNull()) { environmentDepthProvider->SetHandleLength(1); } XrEnvironmentDepthProviderMETA* out_environmentDepthProvider = environmentDepthProvider->GetHandlePointer(); + PushRecaptureHandleId(environmentDepthProvider->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateEnvironmentDepthProviderMETA(in_session, in_createInfo, out_environmentDepthProvider); CheckResult("xrCreateEnvironmentDepthProviderMETA", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, environmentDepthProvider->GetPointer(), out_environmentDepthProvider, &CommonObjectInfoTable::AddXrEnvironmentDepthProviderMETAInfo); @@ -4069,8 +4187,10 @@ void OpenXrReplayConsumer::Process_xrCreateEnvironmentDepthSwapchainMETA( if (!swapchain->IsNull()) { swapchain->SetHandleLength(1); } XrEnvironmentDepthSwapchainMETA* out_swapchain = swapchain->GetHandlePointer(); + PushRecaptureHandleId(swapchain->GetPointer()); XrResult replay_result = GetInstanceTable(in_environmentDepthProvider)->CreateEnvironmentDepthSwapchainMETA(in_environmentDepthProvider, in_createInfo, out_swapchain); CheckResult("xrCreateEnvironmentDepthSwapchainMETA", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(environmentDepthProvider, swapchain->GetPointer(), out_swapchain, &CommonObjectInfoTable::AddXrEnvironmentDepthSwapchainMETAInfo); @@ -4181,8 +4301,10 @@ void OpenXrReplayConsumer::Process_xrCreatePassthroughHTC( if (!passthrough->IsNull()) { passthrough->SetHandleLength(1); } XrPassthroughHTC* out_passthrough = passthrough->GetHandlePointer(); + PushRecaptureHandleId(passthrough->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreatePassthroughHTC(in_session, in_createInfo, out_passthrough); CheckResult("xrCreatePassthroughHTC", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, passthrough->GetPointer(), out_passthrough, &CommonObjectInfoTable::AddXrPassthroughHTCInfo); @@ -4231,8 +4353,10 @@ void OpenXrReplayConsumer::Process_xrCreateSpatialAnchorHTC( if (!anchor->IsNull()) { anchor->SetHandleLength(1); } XrSpace* out_anchor = anchor->GetHandlePointer(); + PushRecaptureHandleId(anchor->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreateSpatialAnchorHTC(in_session, in_createInfo, out_anchor); CheckResult("xrCreateSpatialAnchorHTC", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, anchor->GetPointer(), out_anchor, &CommonObjectInfoTable::AddXrSpaceInfo); @@ -4280,8 +4404,10 @@ void OpenXrReplayConsumer::Process_xrCreatePlaneDetectorEXT( if (!planeDetector->IsNull()) { planeDetector->SetHandleLength(1); } XrPlaneDetectorEXT* out_planeDetector = planeDetector->GetHandlePointer(); + PushRecaptureHandleId(planeDetector->GetPointer()); XrResult replay_result = GetInstanceTable(in_session)->CreatePlaneDetectorEXT(in_session, in_createInfo, out_planeDetector); CheckResult("xrCreatePlaneDetectorEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(session, planeDetector->GetPointer(), out_planeDetector, &CommonObjectInfoTable::AddXrPlaneDetectorEXTInfo); diff --git a/third_party/gfxreconstruct/framework/generated/generated_openxr_struct_encoders.cpp b/third_party/gfxreconstruct/framework/generated/generated_openxr_struct_encoders.cpp index e218d6682..bc1744036 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_openxr_struct_encoders.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_openxr_struct_encoders.cpp @@ -59,7 +59,7 @@ void EncodeStruct(ParameterEncoder* encoder, const LUID& value) void EncodeStruct(ParameterEncoder* encoder, const XrApiLayerProperties& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeString(value.layerName); encoder->EncodeUInt64Value(value.specVersion); encoder->EncodeUInt32Value(value.layerVersion); @@ -69,7 +69,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrApiLayerProperties& value) void EncodeStruct(ParameterEncoder* encoder, const XrExtensionProperties& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeString(value.extensionName); encoder->EncodeUInt32Value(value.extensionVersion); } @@ -98,7 +98,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrInstanceCreateInfo& value) void EncodeStruct(ParameterEncoder* encoder, const XrInstanceProperties& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt64Value(value.runtimeVersion); encoder->EncodeString(value.runtimeName); } @@ -106,7 +106,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrInstanceProperties& value) void EncodeStruct(ParameterEncoder* encoder, const XrSystemGetInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.formFactor); } @@ -175,7 +175,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrPosef& value) void EncodeStruct(ParameterEncoder* encoder, const XrReferenceSpaceCreateInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.referenceSpaceType); EncodeStruct(encoder, value.poseInReferenceSpace); } @@ -189,7 +189,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrExtent2Df& value) void EncodeStruct(ParameterEncoder* encoder, const XrActionSpaceCreateInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.action); encoder->EncodeOpenXrAtomValue(value.subactionPath); EncodeStruct(encoder, value.poseInActionSpace); @@ -206,7 +206,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpaceLocation& value) void EncodeStruct(ParameterEncoder* encoder, const XrViewConfigurationProperties& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.viewConfigurationType); encoder->EncodeUInt32Value(value.fovMutable); } @@ -324,20 +324,20 @@ void EncodeStructArrayLoop(ParameterEncoder* encoder void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainImageAcquireInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); } void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainImageWaitInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeInt64Value(value.timeout); } void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainImageReleaseInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); } void EncodeStruct(ParameterEncoder* encoder, const XrSessionBeginInfo& value) @@ -350,7 +350,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSessionBeginInfo& value) void EncodeStruct(ParameterEncoder* encoder, const XrFrameWaitInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); } void EncodeStruct(ParameterEncoder* encoder, const XrFrameState& value) @@ -365,7 +365,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrFrameState& value) void EncodeStruct(ParameterEncoder* encoder, const XrFrameBeginInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); } void EncodeStruct(ParameterEncoder* encoder, const XrCompositionLayerBaseHeader& value) @@ -506,7 +506,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrViewLocateInfo& value) void EncodeStruct(ParameterEncoder* encoder, const XrViewState& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.viewStateFlags); } @@ -521,7 +521,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrFovf& value) void EncodeStruct(ParameterEncoder* encoder, const XrView& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); EncodeStruct(encoder, value.pose); EncodeStruct(encoder, value.fov); } @@ -529,7 +529,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrView& value) void EncodeStruct(ParameterEncoder* encoder, const XrActionSetCreateInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeString(value.actionSetName); encoder->EncodeString(value.localizedActionSetName); encoder->EncodeUInt32Value(value.priority); @@ -538,7 +538,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrActionSetCreateInfo& value) void EncodeStruct(ParameterEncoder* encoder, const XrActionCreateInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeString(value.actionName); encoder->EncodeEnumValue(value.actionType); encoder->EncodeUInt32Value(value.countSubactionPaths); @@ -564,7 +564,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrInteractionProfileSuggested void EncodeStruct(ParameterEncoder* encoder, const XrSessionActionSetsAttachInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.countActionSets); encoder->EncodeOpenXrHandleArray(value.actionSets, value.countActionSets); } @@ -572,14 +572,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSessionActionSetsAttachInfo void EncodeStruct(ParameterEncoder* encoder, const XrInteractionProfileState& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.interactionProfile); } void EncodeStruct(ParameterEncoder* encoder, const XrActionStateGetInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.action); encoder->EncodeOpenXrAtomValue(value.subactionPath); } @@ -587,7 +587,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrActionStateGetInfo& value) void EncodeStruct(ParameterEncoder* encoder, const XrActionStateBoolean& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.currentState); encoder->EncodeUInt32Value(value.changedSinceLastSync); encoder->EncodeXrTimeValue(value.lastChangeTime); @@ -597,7 +597,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrActionStateBoolean& value) void EncodeStruct(ParameterEncoder* encoder, const XrActionStateFloat& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFloatValue(value.currentState); encoder->EncodeUInt32Value(value.changedSinceLastSync); encoder->EncodeXrTimeValue(value.lastChangeTime); @@ -613,7 +613,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrVector2f& value) void EncodeStruct(ParameterEncoder* encoder, const XrActionStateVector2f& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); EncodeStruct(encoder, value.currentState); encoder->EncodeUInt32Value(value.changedSinceLastSync); encoder->EncodeXrTimeValue(value.lastChangeTime); @@ -623,7 +623,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrActionStateVector2f& value) void EncodeStruct(ParameterEncoder* encoder, const XrActionStatePose& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.isActive); } @@ -644,14 +644,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrActionsSyncInfo& value) void EncodeStruct(ParameterEncoder* encoder, const XrBoundSourcesForActionEnumerateInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.action); } void EncodeStruct(ParameterEncoder* encoder, const XrInputSourceLocalizedNameGetInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.sourcePath); encoder->EncodeFlags64Value(value.whichComponents); } @@ -659,7 +659,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrInputSourceLocalizedNameGet void EncodeStruct(ParameterEncoder* encoder, const XrHapticActionInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.action); encoder->EncodeOpenXrAtomValue(value.subactionPath); } @@ -772,7 +772,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrCompositionLayerProjection& void EncodeStruct(ParameterEncoder* encoder, const XrCompositionLayerQuad& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.layerFlags); encoder->EncodeOpenXrHandleValue(value.space); encoder->EncodeEnumValue(value.eyeVisibility); @@ -1054,21 +1054,21 @@ void EncodeStructArrayLoop(ParameterEncoder* encoder, con void EncodeStruct(ParameterEncoder* encoder, const XrEventDataEventsLost& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.lostEventCount); } void EncodeStruct(ParameterEncoder* encoder, const XrEventDataInstanceLossPending& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeXrTimeValue(value.lossTime); } void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSessionStateChanged& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.session); encoder->EncodeEnumValue(value.state); encoder->EncodeXrTimeValue(value.time); @@ -1077,7 +1077,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSessionStateChange void EncodeStruct(ParameterEncoder* encoder, const XrEventDataReferenceSpaceChangePending& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.session); encoder->EncodeEnumValue(value.referenceSpaceType); encoder->EncodeXrTimeValue(value.changeTime); @@ -1088,14 +1088,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEventDataReferenceSpaceChan void EncodeStruct(ParameterEncoder* encoder, const XrEventDataInteractionProfileChanged& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.session); } void EncodeStruct(ParameterEncoder* encoder, const XrHapticVibration& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeInt64Value(value.duration); encoder->EncodeFloatValue(value.frequency); encoder->EncodeFloatValue(value.amplitude); @@ -1203,7 +1203,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrUuid& value) void EncodeStruct(ParameterEncoder* encoder, const XrSpacesLocateInfo& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.baseSpace); encoder->EncodeXrTimeValue(value.time); encoder->EncodeUInt32Value(value.spaceCount); @@ -1242,7 +1242,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpaceVelocities& value) void EncodeStruct(ParameterEncoder* encoder, const XrCompositionLayerCubeKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.layerFlags); encoder->EncodeOpenXrHandleValue(value.space); encoder->EncodeEnumValue(value.eyeVisibility); @@ -1273,7 +1273,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrCompositionLayerDepthInfoKH void EncodeStruct(ParameterEncoder* encoder, const XrVulkanSwapchainFormatListCreateInfoKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.viewFormatCount); encoder->EncodeEnumArray(value.viewFormats, value.viewFormatCount); } @@ -1281,7 +1281,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrVulkanSwapchainFormatListCr void EncodeStruct(ParameterEncoder* encoder, const XrCompositionLayerCylinderKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.layerFlags); encoder->EncodeOpenXrHandleValue(value.space); encoder->EncodeEnumValue(value.eyeVisibility); @@ -1295,7 +1295,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrCompositionLayerCylinderKHR void EncodeStruct(ParameterEncoder* encoder, const XrCompositionLayerEquirectKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.layerFlags); encoder->EncodeOpenXrHandleValue(value.space); encoder->EncodeEnumValue(value.eyeVisibility); @@ -1347,14 +1347,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrGraphicsBindingOpenGLWaylan void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainImageOpenGLKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.image); } void EncodeStruct(ParameterEncoder* encoder, const XrGraphicsRequirementsOpenGLKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt64Value(value.minApiVersionSupported); encoder->EncodeUInt64Value(value.maxApiVersionSupported); } @@ -1371,14 +1371,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrGraphicsBindingOpenGLESAndr void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainImageOpenGLESKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.image); } void EncodeStruct(ParameterEncoder* encoder, const XrGraphicsRequirementsOpenGLESKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt64Value(value.minApiVersionSupported); encoder->EncodeUInt64Value(value.maxApiVersionSupported); } @@ -1404,7 +1404,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainImageVulkanKHR& va void EncodeStruct(ParameterEncoder* encoder, const XrGraphicsRequirementsVulkanKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt64Value(value.minApiVersionSupported); encoder->EncodeUInt64Value(value.maxApiVersionSupported); } @@ -1419,14 +1419,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrGraphicsBindingD3D11KHR& va void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainImageD3D11KHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeVoidPtr(value.texture); } void EncodeStruct(ParameterEncoder* encoder, const XrGraphicsRequirementsD3D11KHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeLUIDValue(value.adapterLuid); encoder->EncodeD3D_FEATURE_LEVELValue(value.minFeatureLevel); } @@ -1442,14 +1442,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrGraphicsBindingD3D12KHR& va void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainImageD3D12KHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeVoidPtr(value.texture); } void EncodeStruct(ParameterEncoder* encoder, const XrGraphicsRequirementsD3D12KHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeLUIDValue(value.adapterLuid); encoder->EncodeD3D_FEATURE_LEVELValue(value.minFeatureLevel); } @@ -1464,21 +1464,21 @@ void EncodeStruct(ParameterEncoder* encoder, const XrGraphicsBindingMetalKHR& va void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainImageMetalKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeVoidPtr(value.texture); } void EncodeStruct(ParameterEncoder* encoder, const XrGraphicsRequirementsMetalKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeVoidPtr(value.metalDevice); } void EncodeStruct(ParameterEncoder* encoder, const XrVisibilityMaskKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.vertexCapacityInput); encoder->EncodeUInt32Value(value.vertexCountOutput); EncodeStructArray(encoder, value.vertices, value.vertexCapacityInput); @@ -1490,7 +1490,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrVisibilityMaskKHR& value) void EncodeStruct(ParameterEncoder* encoder, const XrEventDataVisibilityMaskChangedKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.session); encoder->EncodeEnumValue(value.viewConfigurationType); encoder->EncodeUInt32Value(value.viewIndex); @@ -1546,7 +1546,7 @@ void EncodeStructArrayLoop(ParameterEncoder* enco void EncodeStruct(ParameterEncoder* encoder, const XrLoaderInitInfoAndroidKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeVoidPtr(value.applicationVM); encoder->EncodeVoidPtr(value.applicationContext); } @@ -1554,7 +1554,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrLoaderInitInfoAndroidKHR& v void EncodeStruct(ParameterEncoder* encoder, const XrVulkanGraphicsDeviceGetInfoKHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.systemId); encoder->EncodeVulkanHandleValue(value.vulkanInstance); } @@ -1562,7 +1562,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrVulkanGraphicsDeviceGetInfo void EncodeStruct(ParameterEncoder* encoder, const XrCompositionLayerEquirect2KHR& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.layerFlags); encoder->EncodeOpenXrHandleValue(value.space); encoder->EncodeEnumValue(value.eyeVisibility); @@ -1635,7 +1635,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrBindingModificationsKHR& va void EncodeStruct(ParameterEncoder* encoder, const XrEventDataPerfSettingsEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.domain); encoder->EncodeEnumValue(value.subDomain); encoder->EncodeEnumValue(value.fromLevel); @@ -1645,7 +1645,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEventDataPerfSettingsEXT& v void EncodeStruct(ParameterEncoder* encoder, const XrDebugUtilsObjectNameInfoEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.objectType); encoder->EncodeUInt64Value(value.objectHandle); encoder->EncodeString(value.objectName); @@ -1654,14 +1654,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrDebugUtilsObjectNameInfoEXT void EncodeStruct(ParameterEncoder* encoder, const XrDebugUtilsLabelEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeString(value.labelName); } void EncodeStruct(ParameterEncoder* encoder, const XrDebugUtilsMessengerCallbackDataEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeString(value.messageId); encoder->EncodeString(value.functionName); encoder->EncodeString(value.message); @@ -1706,7 +1706,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSessionCreateInfoOverlayEXT void EncodeStruct(ParameterEncoder* encoder, const XrEventDataMainSessionVisibilityChangedEXTX& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.visible); encoder->EncodeFlags64Value(value.flags); } @@ -1714,7 +1714,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEventDataMainSessionVisibil void EncodeStruct(ParameterEncoder* encoder, const XrSpatialAnchorCreateInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.space); EncodeStruct(encoder, value.pose); encoder->EncodeXrTimeValue(value.time); @@ -1723,7 +1723,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpatialAnchorCreateInfoMSFT void EncodeStruct(ParameterEncoder* encoder, const XrSpatialAnchorSpaceCreateInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.anchor); EncodeStruct(encoder, value.poseInAnchorSpace); } @@ -1768,7 +1768,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrGraphicsBindingEGLMNDX& val void EncodeStruct(ParameterEncoder* encoder, const XrSpatialGraphNodeSpaceCreateInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.nodeType); encoder->EncodeUInt8Array(value.nodeId, XR_GUID_SIZE_MSFT); EncodeStruct(encoder, value.pose); @@ -1777,7 +1777,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpatialGraphNodeSpaceCreate void EncodeStruct(ParameterEncoder* encoder, const XrSpatialGraphStaticNodeBindingCreateInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.space); EncodeStruct(encoder, value.poseInSpace); encoder->EncodeXrTimeValue(value.time); @@ -1786,13 +1786,13 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpatialGraphStaticNodeBindi void EncodeStruct(ParameterEncoder* encoder, const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); } void EncodeStruct(ParameterEncoder* encoder, const XrSpatialGraphNodeBindingPropertiesMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt8Array(value.nodeId, XR_GUID_SIZE_MSFT); EncodeStruct(encoder, value.poseInNodeSpace); } @@ -1863,7 +1863,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemHandTrackingMeshPrope void EncodeStruct(ParameterEncoder* encoder, const XrHandMeshSpaceCreateInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.handPoseType); EncodeStruct(encoder, value.poseInHandMeshSpace); } @@ -1871,7 +1871,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrHandMeshSpaceCreateInfoMSFT void EncodeStruct(ParameterEncoder* encoder, const XrHandMeshUpdateInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeXrTimeValue(value.time); encoder->EncodeEnumValue(value.handPoseType); } @@ -1901,7 +1901,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrHandMeshVertexBufferMSFT& v void EncodeStruct(ParameterEncoder* encoder, const XrHandMeshMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.isActive); encoder->EncodeUInt32Value(value.indexBufferChanged); encoder->EncodeUInt32Value(value.vertexBufferChanged); @@ -1927,7 +1927,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSecondaryViewConfigurationS void EncodeStruct(ParameterEncoder* encoder, const XrSecondaryViewConfigurationStateMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.viewConfigurationType); encoder->EncodeUInt32Value(value.active); } @@ -1943,7 +1943,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSecondaryViewConfigurationF void EncodeStruct(ParameterEncoder* encoder, const XrSecondaryViewConfigurationLayerInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.viewConfigurationType); encoder->EncodeEnumValue(value.environmentBlendMode); encoder->EncodeUInt32Value(value.layerCount); @@ -1968,14 +1968,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSecondaryViewConfigurationS void EncodeStruct(ParameterEncoder* encoder, const XrControllerModelKeyStateMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.modelKey); } void EncodeStruct(ParameterEncoder* encoder, const XrControllerModelNodePropertiesMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeString(value.parentNodeName); encoder->EncodeString(value.nodeName); } @@ -1983,7 +1983,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrControllerModelNodeProperti void EncodeStruct(ParameterEncoder* encoder, const XrControllerModelPropertiesMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.nodeCapacityInput); encoder->EncodeUInt32Value(value.nodeCountOutput); EncodeStructArray(encoder, value.nodeProperties, value.nodeCapacityInput); @@ -1992,14 +1992,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrControllerModelPropertiesMS void EncodeStruct(ParameterEncoder* encoder, const XrControllerModelNodeStateMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); EncodeStruct(encoder, value.nodePose); } void EncodeStruct(ParameterEncoder* encoder, const XrControllerModelStateMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.nodeCapacityInput); encoder->EncodeUInt32Value(value.nodeCountOutput); EncodeStructArray(encoder, value.nodeStates, value.nodeCapacityInput); @@ -2139,7 +2139,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemBodyTrackingPropertie void EncodeStruct(ParameterEncoder* encoder, const XrBodyTrackerCreateInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.bodyJointSet); } @@ -2153,7 +2153,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrBodySkeletonJointFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrBodySkeletonFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.jointCount); EncodeStructArray(encoder, value.joints, value.jointCount); } @@ -2161,7 +2161,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrBodySkeletonFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrBodyJointsLocateInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.baseSpace); encoder->EncodeXrTimeValue(value.time); } @@ -2169,7 +2169,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrBodyJointsLocateInfoFB& val void EncodeStruct(ParameterEncoder* encoder, const XrBodyJointLocationsFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.isActive); encoder->EncodeFloatValue(value.confidence); encoder->EncodeUInt32Value(value.jointCount); @@ -2181,7 +2181,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrBodyJointLocationsFB& value void EncodeStruct(ParameterEncoder* encoder, const XrInteractionProfileDpadBindingEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.binding); encoder->EncodeOpenXrHandleValue(value.actionSet); encoder->EncodeFloatValue(value.forceThreshold); @@ -2196,7 +2196,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrInteractionProfileDpadBindi void EncodeStruct(ParameterEncoder* encoder, const XrInteractionProfileAnalogThresholdVALVE& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.action); encoder->EncodeOpenXrAtomValue(value.binding); encoder->EncodeFloatValue(value.onThreshold); @@ -2220,13 +2220,13 @@ void EncodeStruct(ParameterEncoder* encoder, const XrUuidMSFT& value) void EncodeStruct(ParameterEncoder* encoder, const XrSceneObserverCreateInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); } void EncodeStruct(ParameterEncoder* encoder, const XrSceneCreateInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); } void EncodeStruct(ParameterEncoder* encoder, const XrSceneSphereBoundMSFT& value) @@ -2310,7 +2310,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSceneComponentLocationMSFT& void EncodeStruct(ParameterEncoder* encoder, const XrSceneComponentLocationsMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.locationCount); EncodeStructArray(encoder, value.locations, value.locationCount); } @@ -2318,7 +2318,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSceneComponentLocationsMSFT void EncodeStruct(ParameterEncoder* encoder, const XrSceneComponentsLocateInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.baseSpace); encoder->EncodeXrTimeValue(value.time); encoder->EncodeUInt32Value(value.componentIdCount); @@ -2394,20 +2394,20 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSceneMeshesMSFT& value) void EncodeStruct(ParameterEncoder* encoder, const XrSceneMeshBuffersGetInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt64Value(value.meshBufferId); } void EncodeStruct(ParameterEncoder* encoder, const XrSceneMeshBuffersMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); } void EncodeStruct(ParameterEncoder* encoder, const XrSceneMeshVertexBufferMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.vertexCapacityInput); encoder->EncodeUInt32Value(value.vertexCountOutput); EncodeStructArray(encoder, value.vertices, value.vertexCapacityInput); @@ -2416,7 +2416,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSceneMeshVertexBufferMSFT& void EncodeStruct(ParameterEncoder* encoder, const XrSceneMeshIndicesUint32MSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.indexCapacityInput); encoder->EncodeUInt32Value(value.indexCountOutput); encoder->EncodeUInt32Array(value.indices, value.indexCapacityInput); @@ -2425,7 +2425,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSceneMeshIndicesUint32MSFT& void EncodeStruct(ParameterEncoder* encoder, const XrSceneMeshIndicesUint16MSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.indexCapacityInput); encoder->EncodeUInt32Value(value.indexCountOutput); encoder->EncodeUInt16Array(value.indices, value.indexCapacityInput); @@ -2434,7 +2434,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSceneMeshIndicesUint16MSFT& void EncodeStruct(ParameterEncoder* encoder, const XrSerializedSceneFragmentDataGetInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); EncodeStruct(encoder, value.sceneFragmentId); } @@ -2447,7 +2447,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrDeserializeSceneFragmentMSF void EncodeStruct(ParameterEncoder* encoder, const XrSceneDeserializeInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.fragmentCount); EncodeStructArray(encoder, value.fragments, value.fragmentCount); } @@ -2455,7 +2455,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSceneDeserializeInfoMSFT& v void EncodeStruct(ParameterEncoder* encoder, const XrEventDataDisplayRefreshRateChangedFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFloatValue(value.fromDisplayRefreshRate); encoder->EncodeFloatValue(value.toDisplayRefreshRate); } @@ -2463,7 +2463,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEventDataDisplayRefreshRate void EncodeStruct(ParameterEncoder* encoder, const XrViveTrackerPathsHTCX& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.persistentPath); encoder->EncodeOpenXrAtomValue(value.rolePath); } @@ -2471,7 +2471,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrViveTrackerPathsHTCX& value void EncodeStruct(ParameterEncoder* encoder, const XrEventDataViveTrackerConnectedHTCX& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); EncodeStructPtr(encoder, value.paths); } @@ -2486,7 +2486,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemFacialTrackingPropert void EncodeStruct(ParameterEncoder* encoder, const XrFacialExpressionsHTC& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.isActive); encoder->EncodeXrTimeValue(value.sampleTime); encoder->EncodeUInt32Value(value.expressionCount); @@ -2496,7 +2496,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrFacialExpressionsHTC& value void EncodeStruct(ParameterEncoder* encoder, const XrFacialTrackerCreateInfoHTC& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.facialTrackingType); } @@ -2518,7 +2518,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrVector4sFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrHandTrackingMeshFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.jointCapacityInput); encoder->EncodeUInt32Value(value.jointCountOutput); EncodeStructArray(encoder, value.jointBindPoses, value.jointCapacityInput); @@ -2582,7 +2582,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemSpatialEntityProperti void EncodeStruct(ParameterEncoder* encoder, const XrSpatialAnchorCreateInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.space); EncodeStruct(encoder, value.poseInSpace); encoder->EncodeXrTimeValue(value.time); @@ -2591,7 +2591,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpatialAnchorCreateInfoFB& void EncodeStruct(ParameterEncoder* encoder, const XrSpaceComponentStatusSetInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.componentType); encoder->EncodeUInt32Value(value.enabled); encoder->EncodeInt64Value(value.timeout); @@ -2600,7 +2600,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpaceComponentStatusSetInfo void EncodeStruct(ParameterEncoder* encoder, const XrSpaceComponentStatusFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.enabled); encoder->EncodeUInt32Value(value.changePending); } @@ -2608,7 +2608,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpaceComponentStatusFB& val void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSpatialAnchorCreateCompleteFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.requestId); encoder->EncodeEnumValue(value.result); encoder->EncodeOpenXrHandleValue(value.space); @@ -2618,7 +2618,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSpatialAnchorCreat void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSpaceSetStatusCompleteFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.requestId); encoder->EncodeEnumValue(value.result); encoder->EncodeOpenXrHandleValue(value.space); @@ -2643,7 +2643,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainCreateInfoFoveatio void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainStateFoveationFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.flags); encoder->EncodeOpenXrHandleValue(value.profile); } @@ -2675,21 +2675,21 @@ void EncodeStruct(ParameterEncoder* encoder, const XrKeyboardTrackingDescription void EncodeStruct(ParameterEncoder* encoder, const XrKeyboardSpaceCreateInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt64Value(value.trackedKeyboardId); } void EncodeStruct(ParameterEncoder* encoder, const XrKeyboardTrackingQueryFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.flags); } void EncodeStruct(ParameterEncoder* encoder, const XrTriangleMeshCreateInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.flags); encoder->EncodeEnumValue(value.windingOrder); encoder->EncodeUInt32Value(value.vertexCount); @@ -2715,14 +2715,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemPassthroughProperties void EncodeStruct(ParameterEncoder* encoder, const XrPassthroughCreateInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.flags); } void EncodeStruct(ParameterEncoder* encoder, const XrPassthroughLayerCreateInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.passthrough); encoder->EncodeFlags64Value(value.flags); encoder->EncodeEnumValue(value.purpose); @@ -2731,7 +2731,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrPassthroughLayerCreateInfoF void EncodeStruct(ParameterEncoder* encoder, const XrCompositionLayerPassthroughFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.flags); encoder->EncodeOpenXrHandleValue(value.space); encoder->EncodeOpenXrHandleValue(value.layerHandle); @@ -2740,7 +2740,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrCompositionLayerPassthrough void EncodeStruct(ParameterEncoder* encoder, const XrGeometryInstanceCreateInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.layer); encoder->EncodeOpenXrHandleValue(value.mesh); encoder->EncodeOpenXrHandleValue(value.baseSpace); @@ -2751,7 +2751,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrGeometryInstanceCreateInfoF void EncodeStruct(ParameterEncoder* encoder, const XrGeometryInstanceTransformFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.baseSpace); encoder->EncodeXrTimeValue(value.time); EncodeStruct(encoder, value.pose); @@ -2792,14 +2792,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrPassthroughBrightnessContra void EncodeStruct(ParameterEncoder* encoder, const XrEventDataPassthroughStateChangedFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.flags); } void EncodeStruct(ParameterEncoder* encoder, const XrRenderModelPathInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.path); } @@ -2817,7 +2817,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrRenderModelPropertiesFB& va void EncodeStruct(ParameterEncoder* encoder, const XrRenderModelBufferFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.bufferCapacityInput); encoder->EncodeUInt32Value(value.bufferCountOutput); encoder->EncodeUInt8Array(value.buffer, value.bufferCapacityInput); @@ -2826,7 +2826,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrRenderModelBufferFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrRenderModelLoadInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.modelKey); } @@ -2883,7 +2883,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemMarkerTrackingPropert void EncodeStruct(ParameterEncoder* encoder, const XrEventDataMarkerTrackingUpdateVARJO& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt64Value(value.markerId); encoder->EncodeUInt32Value(value.isActive); encoder->EncodeUInt32Value(value.isPredicted); @@ -2893,7 +2893,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEventDataMarkerTrackingUpda void EncodeStruct(ParameterEncoder* encoder, const XrMarkerSpaceCreateInfoVARJO& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt64Value(value.markerId); EncodeStruct(encoder, value.poseInMarkerSpace); } @@ -2917,7 +2917,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrGlobalDimmerFrameEndInfoML& void EncodeStruct(ParameterEncoder* encoder, const XrCoordinateSpaceCreateInfoML& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeMLCoordinateFrameUIDValue(value.cfuid); EncodeStruct(encoder, value.poseInCoordinateSpace); } @@ -2973,20 +2973,20 @@ void EncodeStruct(ParameterEncoder* encoder, const XrMarkerDetectorCustomProfile void EncodeStruct(ParameterEncoder* encoder, const XrMarkerDetectorSnapshotInfoML& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); } void EncodeStruct(ParameterEncoder* encoder, const XrMarkerDetectorStateML& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.state); } void EncodeStruct(ParameterEncoder* encoder, const XrMarkerSpaceCreateInfoML& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.markerDetector); encoder->EncodeOpenXrAtomValue(value.marker); EncodeStruct(encoder, value.poseInMarkerSpace); @@ -2995,7 +2995,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrMarkerSpaceCreateInfoML& va void EncodeStruct(ParameterEncoder* encoder, const XrLocalizationMapML& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeString(value.name); EncodeStruct(encoder, value.mapUuid); encoder->EncodeEnumValue(value.mapType); @@ -3004,7 +3004,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrLocalizationMapML& value) void EncodeStruct(ParameterEncoder* encoder, const XrEventDataLocalizationChangedML& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.session); encoder->EncodeEnumValue(value.state); EncodeStruct(encoder, value.map); @@ -3015,20 +3015,20 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEventDataLocalizationChange void EncodeStruct(ParameterEncoder* encoder, const XrLocalizationMapQueryInfoBaseHeaderML& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); } void EncodeStruct(ParameterEncoder* encoder, const XrMapLocalizationRequestInfoML& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); EncodeStruct(encoder, value.mapUuid); } void EncodeStruct(ParameterEncoder* encoder, const XrLocalizationMapImportInfoML& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.size); encoder->EncodeString(value.data); } @@ -3036,7 +3036,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrLocalizationMapImportInfoML void EncodeStruct(ParameterEncoder* encoder, const XrLocalizationEnableEventsInfoML& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.enabled); } @@ -3048,7 +3048,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpatialAnchorPersistenceNam void EncodeStruct(ParameterEncoder* encoder, const XrSpatialAnchorPersistenceInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); EncodeStruct(encoder, value.spatialAnchorPersistenceName); encoder->EncodeOpenXrHandleValue(value.spatialAnchor); } @@ -3056,7 +3056,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpatialAnchorPersistenceInf void EncodeStruct(ParameterEncoder* encoder, const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.spatialAnchorStore); EncodeStruct(encoder, value.spatialAnchorPersistenceName); } @@ -3191,7 +3191,7 @@ void EncodeStructArrayLoop(ParameterEncoder* enco void EncodeStruct(ParameterEncoder* encoder, const XrSpaceQueryInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.queryAction); encoder->EncodeUInt32Value(value.maxResultCount); encoder->EncodeInt64Value(value.timeout); @@ -3209,7 +3209,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpaceStorageLocationFilterI void EncodeStruct(ParameterEncoder* encoder, const XrSpaceUuidFilterInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.uuidCount); EncodeStructArray(encoder, value.uuids, value.uuidCount); } @@ -3217,7 +3217,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpaceUuidFilterInfoFB& valu void EncodeStruct(ParameterEncoder* encoder, const XrSpaceComponentFilterInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.componentType); } @@ -3230,7 +3230,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpaceQueryResultFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrSpaceQueryResultsFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.resultCapacityInput); encoder->EncodeUInt32Value(value.resultCountOutput); EncodeStructArray(encoder, value.results, value.resultCapacityInput); @@ -3239,14 +3239,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpaceQueryResultsFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSpaceQueryResultsAvailableFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.requestId); } void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSpaceQueryCompleteFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.requestId); encoder->EncodeEnumValue(value.result); } @@ -3254,7 +3254,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSpaceQueryComplete void EncodeStruct(ParameterEncoder* encoder, const XrSpaceSaveInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.space); encoder->EncodeEnumValue(value.location); encoder->EncodeEnumValue(value.persistenceMode); @@ -3263,7 +3263,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpaceSaveInfoFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrSpaceEraseInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.space); encoder->EncodeEnumValue(value.location); } @@ -3271,7 +3271,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpaceEraseInfoFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSpaceSaveCompleteFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.requestId); encoder->EncodeEnumValue(value.result); encoder->EncodeOpenXrHandleValue(value.space); @@ -3282,7 +3282,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSpaceSaveCompleteF void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSpaceEraseCompleteFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.requestId); encoder->EncodeEnumValue(value.result); encoder->EncodeOpenXrHandleValue(value.space); @@ -3302,7 +3302,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainImageFoveationVulk void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainStateAndroidSurfaceDimensionsFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.width); encoder->EncodeUInt32Value(value.height); } @@ -3310,7 +3310,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainStateAndroidSurfac void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainStateSamplerOpenGLESFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.minFilter); encoder->EncodeUInt32Value(value.magFilter); encoder->EncodeUInt32Value(value.wrapModeS); @@ -3326,7 +3326,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainStateSamplerOpenGL void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainStateSamplerVulkanFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.minFilter); encoder->EncodeEnumValue(value.magFilter); encoder->EncodeEnumValue(value.mipmapMode); @@ -3343,7 +3343,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSwapchainStateSamplerVulkan void EncodeStruct(ParameterEncoder* encoder, const XrSpaceShareInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.spaceCount); encoder->EncodeOpenXrHandleArray(value.spaces, value.spaceCount); encoder->EncodeUInt32Value(value.userCount); @@ -3353,7 +3353,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpaceShareInfoFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSpaceShareCompleteFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.requestId); encoder->EncodeEnumValue(value.result); } @@ -3383,7 +3383,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemSpaceWarpPropertiesFB void EncodeStruct(ParameterEncoder* encoder, const XrHapticAmplitudeEnvelopeVibrationFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeInt64Value(value.duration); encoder->EncodeUInt32Value(value.amplitudeCount); encoder->EncodeFloatArray(value.amplitudes, value.amplitudeCount); @@ -3405,7 +3405,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrRect3DfFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrSemanticLabelsFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.bufferCapacityInput); encoder->EncodeUInt32Value(value.bufferCountOutput); encoder->EncodeString(value.buffer); @@ -3414,7 +3414,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSemanticLabelsFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrRoomLayoutFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); EncodeStruct(encoder, value.floorUuid); EncodeStruct(encoder, value.ceilingUuid); encoder->EncodeUInt32Value(value.wallUuidCapacityInput); @@ -3425,7 +3425,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrRoomLayoutFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrBoundary2DFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.vertexCapacityInput); encoder->EncodeUInt32Value(value.vertexCountOutput); EncodeStructArray(encoder, value.vertices, value.vertexCapacityInput); @@ -3434,7 +3434,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrBoundary2DFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrSemanticLabelsSupportInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.flags); encoder->EncodeString(value.recognizedLabels); } @@ -3442,14 +3442,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSemanticLabelsSupportInfoFB void EncodeStruct(ParameterEncoder* encoder, const XrDigitalLensControlALMALENCE& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.flags); } void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSceneCaptureCompleteFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.requestId); encoder->EncodeEnumValue(value.result); } @@ -3457,7 +3457,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSceneCaptureComple void EncodeStruct(ParameterEncoder* encoder, const XrSceneCaptureRequestInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.requestByteCount); encoder->EncodeString(value.request); } @@ -3465,7 +3465,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSceneCaptureRequestInfoFB& void EncodeStruct(ParameterEncoder* encoder, const XrSpaceContainerFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.uuidCapacityInput); encoder->EncodeUInt32Value(value.uuidCountOutput); EncodeStructArray(encoder, value.uuids, value.uuidCapacityInput); @@ -3481,7 +3481,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrFoveationEyeTrackedProfileC void EncodeStruct(ParameterEncoder* encoder, const XrFoveationEyeTrackedStateMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); EncodeStructArray(encoder, value.foveationCenter, XR_FOVEATION_CENTER_SIZE_META); encoder->EncodeFlags64Value(value.flags); } @@ -3503,14 +3503,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemFaceTrackingPropertie void EncodeStruct(ParameterEncoder* encoder, const XrFaceTrackerCreateInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.faceExpressionSet); } void EncodeStruct(ParameterEncoder* encoder, const XrFaceExpressionInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeXrTimeValue(value.time); } @@ -3523,7 +3523,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrFaceExpressionStatusFB& val void EncodeStruct(ParameterEncoder* encoder, const XrFaceExpressionWeightsFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.weightCount); encoder->EncodeFloatArray(value.weights, value.weightCount); encoder->EncodeUInt32Value(value.confidenceCount); @@ -3542,13 +3542,13 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEyeGazeFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrEyeTrackerCreateInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); } void EncodeStruct(ParameterEncoder* encoder, const XrEyeGazesInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.baseSpace); encoder->EncodeXrTimeValue(value.time); } @@ -3563,7 +3563,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemEyeTrackingProperties void EncodeStruct(ParameterEncoder* encoder, const XrEyeGazesFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); EncodeStructArray(encoder, value.gaze, XR_EYE_POSITION_COUNT_FB); encoder->EncodeXrTimeValue(value.time); } @@ -3571,7 +3571,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEyeGazesFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrPassthroughKeyboardHandsIntensityFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFloatValue(value.leftHandIntensity); encoder->EncodeFloatValue(value.rightHandIntensity); } @@ -3586,7 +3586,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrCompositionLayerSettingsFB& void EncodeStruct(ParameterEncoder* encoder, const XrHapticPcmVibrationFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.bufferSize); encoder->EncodeFloatArray(value.buffer, value.bufferSize); encoder->EncodeFloatValue(value.sampleRate); @@ -3597,7 +3597,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrHapticPcmVibrationFB& value void EncodeStruct(ParameterEncoder* encoder, const XrDevicePcmSampleRateStateFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFloatValue(value.sampleRate); } @@ -3619,7 +3619,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrLocalDimmingFrameEndInfoMET void EncodeStruct(ParameterEncoder* encoder, const XrPassthroughPreferencesMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.flags); } @@ -3633,13 +3633,13 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemVirtualKeyboardProper void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardCreateInfoMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); } void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardSpaceCreateInfoMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.locationType); encoder->EncodeOpenXrHandleValue(value.space); EncodeStruct(encoder, value.poseInSpace); @@ -3648,7 +3648,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardSpaceCreateI void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardLocationInfoMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.locationType); encoder->EncodeOpenXrHandleValue(value.space); EncodeStruct(encoder, value.poseInSpace); @@ -3658,14 +3658,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardLocationInfo void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardModelVisibilitySetInfoMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.visible); } void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardAnimationStateMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeInt32Value(value.animationIndex); encoder->EncodeFloatValue(value.fraction); } @@ -3673,7 +3673,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardAnimationSta void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardModelAnimationStatesMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.stateCapacityInput); encoder->EncodeUInt32Value(value.stateCountOutput); EncodeStructArray(encoder, value.states, value.stateCapacityInput); @@ -3682,7 +3682,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardModelAnimati void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardTextureDataMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.textureWidth); encoder->EncodeUInt32Value(value.textureHeight); encoder->EncodeUInt32Value(value.bufferCapacityInput); @@ -3693,7 +3693,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardTextureDataM void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardInputInfoMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.inputSource); encoder->EncodeOpenXrHandleValue(value.inputSpace); EncodeStruct(encoder, value.inputPoseInSpace); @@ -3703,14 +3703,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardInputInfoMET void EncodeStruct(ParameterEncoder* encoder, const XrVirtualKeyboardTextContextChangeInfoMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeString(value.textContext); } void EncodeStruct(ParameterEncoder* encoder, const XrEventDataVirtualKeyboardCommitTextMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.keyboard); encoder->EncodeString(value.text); } @@ -3718,28 +3718,28 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEventDataVirtualKeyboardCom void EncodeStruct(ParameterEncoder* encoder, const XrEventDataVirtualKeyboardBackspaceMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.keyboard); } void EncodeStruct(ParameterEncoder* encoder, const XrEventDataVirtualKeyboardEnterMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.keyboard); } void EncodeStruct(ParameterEncoder* encoder, const XrEventDataVirtualKeyboardShownMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.keyboard); } void EncodeStruct(ParameterEncoder* encoder, const XrEventDataVirtualKeyboardHiddenMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.keyboard); } @@ -3763,7 +3763,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrExternalCameraExtrinsicsOCU void EncodeStruct(ParameterEncoder* encoder, const XrExternalCameraOCULUS& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeString(value.name); EncodeStruct(encoder, value.intrinsics); EncodeStruct(encoder, value.extrinsics); @@ -3780,14 +3780,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrVulkanSwapchainCreateInfoME void EncodeStruct(ParameterEncoder* encoder, const XrPerformanceMetricsStateMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.enabled); } void EncodeStruct(ParameterEncoder* encoder, const XrPerformanceMetricsCounterMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.counterFlags); encoder->EncodeEnumValue(value.counterUnit); encoder->EncodeUInt32Value(value.uintValue); @@ -3797,7 +3797,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrPerformanceMetricsCounterME void EncodeStruct(ParameterEncoder* encoder, const XrSpaceListSaveInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.spaceCount); encoder->EncodeOpenXrHandleArray(value.spaces, value.spaceCount); encoder->EncodeEnumValue(value.location); @@ -3806,7 +3806,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpaceListSaveInfoFB& value) void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSpaceListSaveCompleteFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrAtomValue(value.requestId); encoder->EncodeEnumValue(value.result); } @@ -3814,7 +3814,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEventDataSpaceListSaveCompl void EncodeStruct(ParameterEncoder* encoder, const XrSpaceUserCreateInfoFB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt64Value(value.userId); } @@ -3828,7 +3828,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemHeadsetIdPropertiesME void EncodeStruct(ParameterEncoder* encoder, const XrRecommendedLayerResolutionMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); EncodeStruct(encoder, value.recommendedImageDimensions); encoder->EncodeUInt32Value(value.isValid); } @@ -3836,7 +3836,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrRecommendedLayerResolutionM void EncodeStruct(ParameterEncoder* encoder, const XrRecommendedLayerResolutionGetInfoMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); EncodeStructPtr(encoder, value.layer); encoder->EncodeXrTimeValue(value.predictedDisplayTime); } @@ -3850,7 +3850,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrPassthroughColorLutDataMETA void EncodeStruct(ParameterEncoder* encoder, const XrPassthroughColorLutCreateInfoMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.channels); encoder->EncodeUInt32Value(value.resolution); EncodeStruct(encoder, value.data); @@ -3859,7 +3859,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrPassthroughColorLutCreateIn void EncodeStruct(ParameterEncoder* encoder, const XrPassthroughColorLutUpdateInfoMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); EncodeStruct(encoder, value.data); } @@ -3890,13 +3890,13 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemPassthroughColorLutPr void EncodeStruct(ParameterEncoder* encoder, const XrSpaceTriangleMeshGetInfoMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); } void EncodeStruct(ParameterEncoder* encoder, const XrSpaceTriangleMeshMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.vertexCapacityInput); encoder->EncodeUInt32Value(value.vertexCountOutput); EncodeStructArray(encoder, value.vertices, value.vertexCapacityInput); @@ -3916,7 +3916,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemFaceTrackingPropertie void EncodeStruct(ParameterEncoder* encoder, const XrFaceTrackerCreateInfo2FB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.faceExpressionSet); encoder->EncodeUInt32Value(value.requestedDataSourceCount); encoder->EncodeEnumArray(value.requestedDataSources, value.requestedDataSourceCount); @@ -3925,14 +3925,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrFaceTrackerCreateInfo2FB& v void EncodeStruct(ParameterEncoder* encoder, const XrFaceExpressionInfo2FB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeXrTimeValue(value.time); } void EncodeStruct(ParameterEncoder* encoder, const XrFaceExpressionWeights2FB& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.weightCount); encoder->EncodeFloatArray(value.weights, value.weightCount); encoder->EncodeUInt32Value(value.confidenceCount); @@ -3946,21 +3946,21 @@ void EncodeStruct(ParameterEncoder* encoder, const XrFaceExpressionWeights2FB& v void EncodeStruct(ParameterEncoder* encoder, const XrEnvironmentDepthProviderCreateInfoMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.createFlags); } void EncodeStruct(ParameterEncoder* encoder, const XrEnvironmentDepthSwapchainCreateInfoMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.createFlags); } void EncodeStruct(ParameterEncoder* encoder, const XrEnvironmentDepthSwapchainStateMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.width); encoder->EncodeUInt32Value(value.height); } @@ -3968,7 +3968,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEnvironmentDepthSwapchainSt void EncodeStruct(ParameterEncoder* encoder, const XrEnvironmentDepthImageAcquireInfoMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.space); encoder->EncodeXrTimeValue(value.displayTime); } @@ -3976,7 +3976,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEnvironmentDepthImageAcquir void EncodeStruct(ParameterEncoder* encoder, const XrEnvironmentDepthImageViewMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); EncodeStruct(encoder, value.fov); EncodeStruct(encoder, value.pose); } @@ -3984,7 +3984,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEnvironmentDepthImageViewME void EncodeStruct(ParameterEncoder* encoder, const XrEnvironmentDepthImageMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.swapchainIndex); encoder->EncodeFloatValue(value.nearZ); encoder->EncodeFloatValue(value.farZ); @@ -3994,7 +3994,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEnvironmentDepthImageMETA& void EncodeStruct(ParameterEncoder* encoder, const XrEnvironmentDepthHandRemovalSetInfoMETA& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.enabled); } @@ -4009,14 +4009,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemEnvironmentDepthPrope void EncodeStruct(ParameterEncoder* encoder, const XrPassthroughCreateInfoHTC& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.form); } void EncodeStruct(ParameterEncoder* encoder, const XrPassthroughColorHTC& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFloatValue(value.alpha); } @@ -4090,7 +4090,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSpatialAnchorNameHTC& value void EncodeStruct(ParameterEncoder* encoder, const XrSpatialAnchorCreateInfoHTC& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.space); EncodeStruct(encoder, value.poseInSpace); EncodeStruct(encoder, value.name); @@ -4126,7 +4126,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrForceFeedbackCurlApplyLocat void EncodeStruct(ParameterEncoder* encoder, const XrForceFeedbackCurlApplyLocationsMNDX& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.locationCount); EncodeStructArray(encoder, value.locations, value.locationCount); } @@ -4157,14 +4157,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemPlaneDetectionPropert void EncodeStruct(ParameterEncoder* encoder, const XrPlaneDetectorCreateInfoEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeFlags64Value(value.flags); } void EncodeStruct(ParameterEncoder* encoder, const XrPlaneDetectorBeginInfoEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.baseSpace); encoder->EncodeXrTimeValue(value.time); encoder->EncodeUInt32Value(value.orientationCount); @@ -4180,7 +4180,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrPlaneDetectorBeginInfoEXT& void EncodeStruct(ParameterEncoder* encoder, const XrPlaneDetectorGetInfoEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.baseSpace); encoder->EncodeXrTimeValue(value.time); } @@ -4188,7 +4188,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrPlaneDetectorGetInfoEXT& va void EncodeStruct(ParameterEncoder* encoder, const XrPlaneDetectorLocationEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt64Value(value.planeId); encoder->EncodeFlags64Value(value.locationFlags); EncodeStruct(encoder, value.pose); @@ -4201,7 +4201,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrPlaneDetectorLocationEXT& v void EncodeStruct(ParameterEncoder* encoder, const XrPlaneDetectorLocationsEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.planeLocationCapacityInput); encoder->EncodeUInt32Value(value.planeLocationCountOutput); EncodeStructArray(encoder, value.planeLocations, value.planeLocationCapacityInput); @@ -4210,7 +4210,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrPlaneDetectorLocationsEXT& void EncodeStruct(ParameterEncoder* encoder, const XrPlaneDetectorPolygonBufferEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.vertexCapacityInput); encoder->EncodeUInt32Value(value.vertexCountOutput); EncodeStructArray(encoder, value.vertices, value.vertexCapacityInput); @@ -4219,14 +4219,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrPlaneDetectorPolygonBufferE void EncodeStruct(ParameterEncoder* encoder, const XrFutureCancelInfoEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrOpaqueValue(value.future); } void EncodeStruct(ParameterEncoder* encoder, const XrFuturePollInfoEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrOpaqueValue(value.future); } @@ -4272,21 +4272,21 @@ void EncodeStructArrayLoop(ParameterEncoder* en void EncodeStruct(ParameterEncoder* encoder, const XrFutureCompletionEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.futureResult); } void EncodeStruct(ParameterEncoder* encoder, const XrFuturePollResultEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.state); } void EncodeStruct(ParameterEncoder* encoder, const XrEventDataUserPresenceChangedEXT& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeOpenXrHandleValue(value.session); encoder->EncodeUInt32Value(value.isUserPresent); } @@ -4301,7 +4301,7 @@ void EncodeStruct(ParameterEncoder* encoder, const XrSystemUserPresencePropertie void EncodeStruct(ParameterEncoder* encoder, const XrEventDataHeadsetFitChangedML& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.status); encoder->EncodeXrTimeValue(value.time); } @@ -4309,14 +4309,14 @@ void EncodeStruct(ParameterEncoder* encoder, const XrEventDataHeadsetFitChangedM void EncodeStruct(ParameterEncoder* encoder, const XrEventDataEyeCalibrationChangedML& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeEnumValue(value.status); } void EncodeStruct(ParameterEncoder* encoder, const XrUserCalibrationEnableEventsInfoML& value) { encoder->EncodeEnumValue(value.type); - EncodeNextStruct(encoder, value.next); + EncodeNextStructIfValid(encoder, value.next); encoder->EncodeUInt32Value(value.enabled); } diff --git a/third_party/gfxreconstruct/framework/generated/generated_openxr_struct_handle_mappers.cpp b/third_party/gfxreconstruct/framework/generated/generated_openxr_struct_handle_mappers.cpp index cb0891b5f..2e6ce53ea 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_openxr_struct_handle_mappers.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_openxr_struct_handle_mappers.cpp @@ -1492,6 +1492,79 @@ void AddStructHandles(format::HandleId parent_id, const Decoded_XrSpaceQueryResu } } +void PushRecaptureStructHandleIds(const Decoded_XrSystemProperties* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + consumer->PushRecaptureHandleId(&id_wrapper->systemId); + } +} + +void PushRecaptureStructHandleIds(const Decoded_XrInteractionProfileState* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + consumer->PushRecaptureHandleId(&id_wrapper->interactionProfile); + } +} + +void PushRecaptureStructHandleIds(const Decoded_XrControllerModelKeyStateMSFT* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + consumer->PushRecaptureHandleId(&id_wrapper->modelKey); + } +} + +void PushRecaptureStructHandleIds(const Decoded_XrViveTrackerPathsHTCX* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + consumer->PushRecaptureHandleId(&id_wrapper->persistentPath); + consumer->PushRecaptureHandleId(&id_wrapper->rolePath); + } +} + +void PushRecaptureStructHandleIds(const Decoded_XrRenderModelPathInfoFB* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + consumer->PushRecaptureHandleId(&id_wrapper->path); + } +} + +void PushRecaptureStructHandleIds(const Decoded_XrRenderModelPropertiesFB* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + consumer->PushRecaptureHandleId(&id_wrapper->modelKey); + } +} + +void PushRecaptureStructHandleIds(const Decoded_XrSpaceQueryResultsFB* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + PushRecaptureStructArrayHandleIds(id_wrapper->results->GetMetaStructPointer(), id_wrapper->results->GetLength(), consumer); + } +} + +void PushRecaptureStructHandleIds(const Decoded_XrSpaceQueryResultFB* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + consumer->PushRecaptureHandleId(&id_wrapper->space); + } +} + GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/generated/generated_openxr_struct_handle_mappers.h b/third_party/gfxreconstruct/framework/generated/generated_openxr_struct_handle_mappers.h index dedc7c1d9..1c77793d4 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_openxr_struct_handle_mappers.h +++ b/third_party/gfxreconstruct/framework/generated/generated_openxr_struct_handle_mappers.h @@ -29,6 +29,7 @@ #if ENABLE_OPENXR_SUPPORT +#include "decode/common_consumer_base.h" #include "decode/common_object_info_table.h" #include "decode/openxr_next_node.h" #include "format/platform_types.h" @@ -281,6 +282,22 @@ void AddStructHandles(format::HandleId parent_id, const Decoded_XrSpaceQueryResu void AddStructHandles(format::HandleId parent_id, const Decoded_XrSpaceQueryResultFB* id_wrapper, const XrSpaceQueryResultFB* handle_struct, CommonObjectInfoTable* object_info_table); +void PushRecaptureStructHandleIds(const Decoded_XrSystemProperties* id_wrapper, CommonConsumerBase* consumer); + +void PushRecaptureStructHandleIds(const Decoded_XrInteractionProfileState* id_wrapper, CommonConsumerBase* consumer); + +void PushRecaptureStructHandleIds(const Decoded_XrControllerModelKeyStateMSFT* id_wrapper, CommonConsumerBase* consumer); + +void PushRecaptureStructHandleIds(const Decoded_XrViveTrackerPathsHTCX* id_wrapper, CommonConsumerBase* consumer); + +void PushRecaptureStructHandleIds(const Decoded_XrRenderModelPathInfoFB* id_wrapper, CommonConsumerBase* consumer); + +void PushRecaptureStructHandleIds(const Decoded_XrRenderModelPropertiesFB* id_wrapper, CommonConsumerBase* consumer); + +void PushRecaptureStructHandleIds(const Decoded_XrSpaceQueryResultsFB* id_wrapper, CommonConsumerBase* consumer); + +void PushRecaptureStructHandleIds(const Decoded_XrSpaceQueryResultFB* id_wrapper, CommonConsumerBase* consumer); + #include "decode/common_struct_handle_mappers.h" GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_api_call_encoders.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_api_call_encoders.cpp index 4397cf115..03c0ba09f 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_api_call_encoders.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_api_call_encoders.cpp @@ -1512,11 +1512,11 @@ VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore( } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool( VkDevice device, - const VkEventCreateInfo* pCreateInfo, + const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, - VkEvent* pEvent) + VkQueryPool* pQueryPool) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -1534,39 +1534,39 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pEvent); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pQueryPool); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool); if (result >= 0) { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pEvent, VulkanCaptureManager::GetUniqueId); + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pQueryPool, VulkanCaptureManager::GetUniqueId); } else { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateEvent); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateQueryPool); if (encoder) { encoder->EncodeVulkanHandleValue(device); EncodeStructPtr(encoder, pCreateInfo); EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pEvent, omit_output_data); + encoder->EncodeVulkanHandlePtr(pQueryPool, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pEvent, pCreateInfo); + manager->EndCreateApiCallCapture(result, device, pQueryPool, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pEvent); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pQueryPool); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroyEvent( +VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool( VkDevice device, - VkEvent event, + VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); @@ -1583,29 +1583,35 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyEvent( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, event, pAllocator); + CustomEncoderPreCall::Dispatch(manager, device, queryPool, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyEvent); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyQueryPool); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(event); + encoder->EncodeVulkanHandleValue(queryPool); EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(event); + manager->EndDestroyApiCallCapture(queryPool); } ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyEvent(device, event, pAllocator); + vulkan_wrappers::GetDeviceTable(device)->DestroyQueryPool(device, queryPool, pAllocator); - CustomEncoderPostCall::Dispatch(manager, device, event, pAllocator); + CustomEncoderPostCall::Dispatch(manager, device, queryPool, pAllocator); - vulkan_wrappers::DestroyWrappedHandle(event); + vulkan_wrappers::DestroyWrappedHandle(queryPool); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus( +VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults( VkDevice device, - VkEvent event) + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + size_t dataSize, + void* pData, + VkDeviceSize stride, + VkQueryResultFlags flags) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -1621,28 +1627,42 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, event); + bool omit_output_data = false; - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetEventStatus(device, event); + CustomEncoderPreCall::Dispatch(manager, device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetEventStatus); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetQueryPoolResults); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(event); + encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeUInt32Value(firstQuery); + encoder->EncodeUInt32Value(queryCount); + encoder->EncodeSizeTValue(dataSize); + encoder->EncodeVoidArray(pData, dataSize, omit_output_data); + encoder->EncodeUInt64Value(stride); + encoder->EncodeFlagsValue(flags); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, event); + CustomEncoderPostCall::Dispatch(manager, result, device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer( VkDevice device, - VkEvent event) + const VkBufferCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkBuffer* pBuffer) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -1658,28 +1678,37 @@ VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, event); + bool omit_output_data = false; - VkResult result = vulkan_wrappers::GetDeviceTable(device)->SetEvent(device, event); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pBuffer); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetEvent); + VkResult result = manager->OverrideCreateBuffer(device, pCreateInfo, pAllocator, pBuffer); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateBuffer); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(event); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pBuffer, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCreateApiCallCapture(result, device, pBuffer, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, event); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pBuffer); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent( +VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer( VkDevice device, - VkEvent event) + VkBuffer buffer, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -1695,30 +1724,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, event); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->ResetEvent(device, event); + CustomEncoderPreCall::Dispatch(manager, device, buffer, pAllocator); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkResetEvent); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyBuffer); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(event); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(buffer); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(buffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, event); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyBuffer(device, buffer, pAllocator); - return result; + CustomEncoderPostCall::Dispatch(manager, device, buffer, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(buffer); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage( VkDevice device, - const VkQueryPoolCreateInfo* pCreateInfo, + const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, - VkQueryPool* pQueryPool) + VkImage* pImage) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -1736,43 +1766,46 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pQueryPool); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pImage); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pQueryPool, VulkanCaptureManager::GetUniqueId); - } - else + VkResult result = manager->OverrideCreateImage(device, pCreateInfo, pAllocator, pImage); + if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateQueryPool); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateImage); if (encoder) { encoder->EncodeVulkanHandleValue(device); EncodeStructPtr(encoder, pCreateInfo); EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pQueryPool, omit_output_data); + encoder->EncodeVulkanHandlePtr(pImage, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pQueryPool, pCreateInfo); + manager->EndCreateApiCallCapture(result, device, pImage, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pQueryPool); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pImage); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool( +VKAPI_ATTR void VKAPI_CALL vkDestroyImage( VkDevice device, - VkQueryPool queryPool, + VkImage image, const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); + // GOOGLE: Leak fragment density maps to workaround a specific crash + auto wrapper = vulkan_wrappers::GetWrapper(image); + if (!wrapper) return; + if (wrapper->is_fdm) + { + GFXRECON_LOG_WARNING("vkDestroyImage: %p - refusing to destroy FDM given known unity bugs", image); + return; + } auto force_command_serialization = manager->GetForceCommandSerialization(); std::shared_lock shared_api_call_lock; std::unique_lock exclusive_api_call_lock; @@ -1785,35 +1818,31 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, queryPool, pAllocator); + CustomEncoderPreCall::Dispatch(manager, device, image, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyQueryPool); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyImage); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeVulkanHandleValue(image); EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(queryPool); + manager->EndDestroyApiCallCapture(image); } ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyQueryPool(device, queryPool, pAllocator); + vulkan_wrappers::GetDeviceTable(device)->DestroyImage(device, image, pAllocator); - CustomEncoderPostCall::Dispatch(manager, device, queryPool, pAllocator); + CustomEncoderPostCall::Dispatch(manager, device, image, pAllocator); - vulkan_wrappers::DestroyWrappedHandle(queryPool); + vulkan_wrappers::DestroyWrappedHandle(image); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults( +VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout( VkDevice device, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - size_t dataSize, - void* pData, - VkDeviceSize stride, - VkQueryResultFlags flags) + VkImage image, + const VkImageSubresource* pSubresource, + VkSubresourceLayout* pLayout) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -1829,42 +1858,29 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags); + CustomEncoderPreCall::Dispatch(manager, device, image, pSubresource, pLayout); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags); - if (result < 0) - { - omit_output_data = true; - } + vulkan_wrappers::GetDeviceTable(device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetQueryPoolResults); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageSubresourceLayout); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(queryPool); - encoder->EncodeUInt32Value(firstQuery); - encoder->EncodeUInt32Value(queryCount); - encoder->EncodeSizeTValue(dataSize); - encoder->EncodeVoidArray(pData, dataSize, omit_output_data); - encoder->EncodeUInt64Value(stride); - encoder->EncodeFlagsValue(flags); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(image); + EncodeStructPtr(encoder, pSubresource); + EncodeStructPtr(encoder, pLayout); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, image, pSubresource, pLayout); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView( VkDevice device, - const VkBufferCreateInfo* pCreateInfo, + const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, - VkBuffer* pBuffer) + VkImageView* pView) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -1882,34 +1898,34 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pBuffer); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pView); - VkResult result = manager->OverrideCreateBuffer(device, pCreateInfo, pAllocator, pBuffer); + VkResult result = manager->OverrideCreateImageView(device, pCreateInfo, pAllocator, pView); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateBuffer); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateImageView); if (encoder) { encoder->EncodeVulkanHandleValue(device); EncodeStructPtr(encoder, pCreateInfo); EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pBuffer, omit_output_data); + encoder->EncodeVulkanHandlePtr(pView, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pBuffer, pCreateInfo); + manager->EndCreateApiCallCapture(result, device, pView, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pBuffer); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pView); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer( +VKAPI_ATTR void VKAPI_CALL vkDestroyImageView( VkDevice device, - VkBuffer buffer, + VkImageView imageView, const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); @@ -1926,31 +1942,31 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, buffer, pAllocator); + CustomEncoderPreCall::Dispatch(manager, device, imageView, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyBuffer); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyImageView); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(buffer); + encoder->EncodeVulkanHandleValue(imageView); EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(buffer); + manager->EndDestroyApiCallCapture(imageView); } ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyBuffer(device, buffer, pAllocator); + vulkan_wrappers::GetDeviceTable(device)->DestroyImageView(device, imageView, pAllocator); - CustomEncoderPostCall::Dispatch(manager, device, buffer, pAllocator); + CustomEncoderPostCall::Dispatch(manager, device, imageView, pAllocator); - vulkan_wrappers::DestroyWrappedHandle(buffer); + vulkan_wrappers::DestroyWrappedHandle(imageView); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool( VkDevice device, - const VkBufferViewCreateInfo* pCreateInfo, + const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, - VkBufferView* pView) + VkCommandPool* pCommandPool) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -1968,42 +1984,39 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pView); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pCommandPool); - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBufferViewCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateBufferView(device, pCreateInfo_unwrapped, pAllocator, pView); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool); if (result >= 0) { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pView, VulkanCaptureManager::GetUniqueId); + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pCommandPool, VulkanCaptureManager::GetUniqueId); } else { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateBufferView); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateCommandPool); if (encoder) { encoder->EncodeVulkanHandleValue(device); EncodeStructPtr(encoder, pCreateInfo); EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pView, omit_output_data); + encoder->EncodeVulkanHandlePtr(pCommandPool, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pView, pCreateInfo); + manager->EndCreateApiCallCapture(result, device, pCommandPool, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pView); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pCommandPool); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView( +VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool( VkDevice device, - VkBufferView bufferView, + VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); @@ -2020,31 +2033,30 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, bufferView, pAllocator); + CustomEncoderPreCall::Dispatch(manager, device, commandPool, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyBufferView); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyCommandPool); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(bufferView); + encoder->EncodeVulkanHandleValue(commandPool); EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(bufferView); + manager->EndDestroyApiCallCapture(commandPool); } ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyBufferView(device, bufferView, pAllocator); + vulkan_wrappers::GetDeviceTable(device)->DestroyCommandPool(device, commandPool, pAllocator); - CustomEncoderPostCall::Dispatch(manager, device, bufferView, pAllocator); + CustomEncoderPostCall::Dispatch(manager, device, commandPool, pAllocator); - vulkan_wrappers::DestroyWrappedHandle(bufferView); + vulkan_wrappers::DestroyWrappedHandle(commandPool); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage( +VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool( VkDevice device, - const VkImageCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkImage* pImage) + VkCommandPool commandPool, + VkCommandPoolResetFlags flags) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -2060,48 +2072,33 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pImage); + CustomEncoderPreCall::Dispatch(manager, device, commandPool, flags); - VkResult result = manager->OverrideCreateImage(device, pCreateInfo, pAllocator, pImage); - if (result < 0) - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->ResetCommandPool(device, commandPool, flags); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateImage); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkResetCommandPool); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pImage, omit_output_data); + encoder->EncodeVulkanHandleValue(commandPool); + encoder->EncodeFlagsValue(flags); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pImage, pCreateInfo); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pImage); + CustomEncoderPostCall::Dispatch(manager, result, device, commandPool, flags); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroyImage( +VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers( VkDevice device, - VkImage image, - const VkAllocationCallbacks* pAllocator) + const VkCommandBufferAllocateInfo* pAllocateInfo, + VkCommandBuffer* pCommandBuffers) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); - // GOOGLE: Leak fragment density maps to workaround a specific crash - auto wrapper = vulkan_wrappers::GetWrapper(image); - if (!wrapper) return; - if (wrapper->is_fdm) - { - GFXRECON_LOG_WARNING("vkDestroyImage: %p - refusing to destroy FDM given known unity bugs", image); - return; - } auto force_command_serialization = manager->GetForceCommandSerialization(); std::shared_lock shared_api_call_lock; std::unique_lock exclusive_api_call_lock; @@ -2114,31 +2111,37 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyImage( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, image, pAllocator); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyImage); + CustomEncoderPreCall::Dispatch(manager, device, pAllocateInfo, pCommandBuffers); + + VkResult result = manager->OverrideAllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkAllocateCommandBuffers); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(image); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(image); + EncodeStructPtr(encoder, pAllocateInfo); + encoder->EncodeVulkanHandleArray(pCommandBuffers, (pAllocateInfo != nullptr) ? (pAllocateInfo->commandBufferCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndPoolCreateApiCallCapture(result, device, (pAllocateInfo != nullptr) ? (pAllocateInfo->commandBufferCount) : 0, pCommandBuffers, pAllocateInfo); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyImage(device, image, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, image, pAllocator); + CustomEncoderPostCall::Dispatch(manager, result, device, pAllocateInfo, pCommandBuffers); - vulkan_wrappers::DestroyWrappedHandle(image); + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout( +VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers( VkDevice device, - VkImage image, - const VkImageSubresource* pSubresource, - VkSubresourceLayout* pLayout) + VkCommandPool commandPool, + uint32_t commandBufferCount, + const VkCommandBuffer* pCommandBuffers) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -2154,29 +2157,30 @@ VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, image, pSubresource, pLayout); - - vulkan_wrappers::GetDeviceTable(device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout); + CustomEncoderPreCall::Dispatch(manager, device, commandPool, commandBufferCount, pCommandBuffers); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageSubresourceLayout); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkFreeCommandBuffers); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(image); - EncodeStructPtr(encoder, pSubresource); - EncodeStructPtr(encoder, pLayout); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandPool); + encoder->EncodeUInt32Value(commandBufferCount); + encoder->EncodeVulkanHandleArray(pCommandBuffers, commandBufferCount); + manager->EndDestroyApiCallCapture(commandBufferCount, pCommandBuffers); } - CustomEncoderPostCall::Dispatch(manager, device, image, pSubresource, pLayout); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers); + + CustomEncoderPostCall::Dispatch(manager, device, commandPool, commandBufferCount, pCommandBuffers); + + vulkan_wrappers::DestroyWrappedHandles(pCommandBuffers, commandBufferCount); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView( - VkDevice device, - const VkImageViewCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkImageView* pView) +VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer( + VkCommandBuffer commandBuffer, + const VkCommandBufferBeginInfo* pBeginInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -2192,45 +2196,30 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pView); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBeginInfo); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkImageViewCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateImageView(device, pCreateInfo_unwrapped, pAllocator, pView); + const VkCommandBufferBeginInfo* pBeginInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBeginInfo, handle_unwrap_memory); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pView, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo_unwrapped); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateImageView); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkBeginCommandBuffer); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pView, omit_output_data); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pBeginInfo); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pView, pCreateInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackBeginCommandBufferHandles, pBeginInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pView); + CustomEncoderPostCall::Dispatch(manager, result, commandBuffer, pBeginInfo); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroyImageView( - VkDevice device, - VkImageView imageView, - const VkAllocationCallbacks* pAllocator) +VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer( + VkCommandBuffer commandBuffer) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -2246,31 +2235,27 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyImageView( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, imageView, pAllocator); + CustomEncoderPreCall::Dispatch(manager, commandBuffer); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyImageView); + VkResult result = vulkan_wrappers::GetDeviceTable(commandBuffer)->EndCommandBuffer(commandBuffer); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkEndCommandBuffer); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(imageView); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(imageView); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(result); + manager->EndCommandApiCallCapture(commandBuffer); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyImageView(device, imageView, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, imageView, pAllocator); + CustomEncoderPostCall::Dispatch(manager, result, commandBuffer); - vulkan_wrappers::DestroyWrappedHandle(imageView); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule( - VkDevice device, - const VkShaderModuleCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkShaderModule* pShaderModule) +VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer( + VkCommandBuffer commandBuffer, + VkCommandBufferResetFlags flags) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -2286,45 +2271,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pShaderModule); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkShaderModuleCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateShaderModule(device, pCreateInfo_unwrapped, pAllocator, pShaderModule); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, flags); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pShaderModule, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(commandBuffer)->ResetCommandBuffer(commandBuffer, flags); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateShaderModule); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkResetCommandBuffer); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pShaderModule, omit_output_data); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeFlagsValue(flags); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pShaderModule, pCreateInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pShaderModule); + CustomEncoderPostCall::Dispatch(manager, result, commandBuffer, flags); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule( - VkDevice device, - VkShaderModule shaderModule, - const VkAllocationCallbacks* pAllocator) +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer( + VkCommandBuffer commandBuffer, + VkBuffer srcBuffer, + VkBuffer dstBuffer, + uint32_t regionCount, + const VkBufferCopy* pRegions) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -2340,28 +2311,911 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, shaderModule, pAllocator); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyShaderModule); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyBuffer); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(shaderModule); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(shaderModule); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(srcBuffer); + encoder->EncodeVulkanHandleValue(dstBuffer); + encoder->EncodeUInt32Value(regionCount); + EncodeStructArray(encoder, pRegions, regionCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyBufferHandles, srcBuffer, dstBuffer); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyShaderModule(device, shaderModule, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, shaderModule, pAllocator); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); - vulkan_wrappers::DestroyWrappedHandle(shaderModule); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache( - VkDevice device, +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage( + VkCommandBuffer commandBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkImageCopy* pRegions) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyImage); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(srcImage); + encoder->EncodeEnumValue(srcImageLayout); + encoder->EncodeVulkanHandleValue(dstImage); + encoder->EncodeEnumValue(dstImageLayout); + encoder->EncodeUInt32Value(regionCount); + EncodeStructArray(encoder, pRegions, regionCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyImageHandles, srcImage, dstImage); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage( + VkCommandBuffer commandBuffer, + VkBuffer srcBuffer, + VkImage dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkBufferImageCopy* pRegions) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyBufferToImage); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(srcBuffer); + encoder->EncodeVulkanHandleValue(dstImage); + encoder->EncodeEnumValue(dstImageLayout); + encoder->EncodeUInt32Value(regionCount); + EncodeStructArray(encoder, pRegions, regionCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyBufferToImageHandles, srcBuffer, dstImage); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer( + VkCommandBuffer commandBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkBuffer dstBuffer, + uint32_t regionCount, + const VkBufferImageCopy* pRegions) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyImageToBuffer); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(srcImage); + encoder->EncodeEnumValue(srcImageLayout); + encoder->EncodeVulkanHandleValue(dstBuffer); + encoder->EncodeUInt32Value(regionCount); + EncodeStructArray(encoder, pRegions, regionCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyImageToBufferHandles, srcImage, dstBuffer); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer( + VkCommandBuffer commandBuffer, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize dataSize, + const void* pData) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, dstBuffer, dstOffset, dataSize, pData); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdUpdateBuffer); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(dstBuffer); + encoder->EncodeUInt64Value(dstOffset); + encoder->EncodeUInt64Value(dataSize); + encoder->EncodeVoidArray(pData, static_cast(dataSize)); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdUpdateBufferHandles, dstBuffer); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, dstBuffer, dstOffset, dataSize, pData); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer( + VkCommandBuffer commandBuffer, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize size, + uint32_t data) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, dstBuffer, dstOffset, size, data); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdFillBuffer); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(dstBuffer); + encoder->EncodeUInt64Value(dstOffset); + encoder->EncodeUInt64Value(size); + encoder->EncodeUInt32Value(data); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdFillBufferHandles, dstBuffer); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, dstBuffer, dstOffset, size, data); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier( + VkCommandBuffer commandBuffer, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkDependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + const VkMemoryBarrier* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const VkBufferMemoryBarrier* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const VkImageMemoryBarrier* pImageMemoryBarriers) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPipelineBarrier); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeFlagsValue(srcStageMask); + encoder->EncodeFlagsValue(dstStageMask); + encoder->EncodeFlagsValue(dependencyFlags); + encoder->EncodeUInt32Value(memoryBarrierCount); + EncodeStructArray(encoder, pMemoryBarriers, memoryBarrierCount); + encoder->EncodeUInt32Value(bufferMemoryBarrierCount); + EncodeStructArray(encoder, pBufferMemoryBarriers, bufferMemoryBarrierCount); + encoder->EncodeUInt32Value(imageMemoryBarrierCount); + EncodeStructArray(encoder, pImageMemoryBarriers, imageMemoryBarrierCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPipelineBarrierHandles, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + } + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBufferMemoryBarrier* pBufferMemoryBarriers_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBufferMemoryBarriers, bufferMemoryBarrierCount, handle_unwrap_memory); + const VkImageMemoryBarrier* pImageMemoryBarriers_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pImageMemoryBarriers, imageMemoryBarrierCount, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers_unwrapped, imageMemoryBarrierCount, pImageMemoryBarriers_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query, + VkQueryControlFlags flags) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, queryPool, query, flags); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginQuery); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeUInt32Value(query); + encoder->EncodeFlagsValue(flags); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginQueryHandles, queryPool); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, query, flags); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, queryPool, query, flags); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, queryPool, query); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndQuery); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeUInt32Value(query); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdEndQueryHandles, queryPool); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndQuery(commandBuffer, queryPool, query); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, queryPool, query); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, queryPool, firstQuery, queryCount); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdResetQueryPool); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeUInt32Value(firstQuery); + encoder->EncodeUInt32Value(queryCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdResetQueryPoolHandles, queryPool); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, queryPool, firstQuery, queryCount); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp( + VkCommandBuffer commandBuffer, + VkPipelineStageFlagBits pipelineStage, + VkQueryPool queryPool, + uint32_t query) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineStage, queryPool, query); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWriteTimestamp); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(pipelineStage); + encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeUInt32Value(query); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWriteTimestampHandles, queryPool); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineStage, queryPool, query); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyQueryPoolResults); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeUInt32Value(firstQuery); + encoder->EncodeUInt32Value(queryCount); + encoder->EncodeVulkanHandleValue(dstBuffer); + encoder->EncodeUInt64Value(dstOffset); + encoder->EncodeUInt64Value(stride); + encoder->EncodeFlagsValue(flags); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyQueryPoolResultsHandles, queryPool, dstBuffer); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands( + VkCommandBuffer commandBuffer, + uint32_t commandBufferCount, + const VkCommandBuffer* pCommandBuffers) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, commandBufferCount, pCommandBuffers); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdExecuteCommands); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(commandBufferCount); + encoder->EncodeVulkanHandleArray(pCommandBuffers, commandBufferCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdExecuteCommandsHandles, commandBufferCount, pCommandBuffers); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, commandBufferCount, pCommandBuffers); + +} + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent( + VkDevice device, + const VkEventCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkEvent* pEvent) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + bool omit_output_data = false; + + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pEvent); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pEvent, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateEvent); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pEvent, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pEvent, pCreateInfo); + } + + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pEvent); + + return result; + +} + +VKAPI_ATTR void VKAPI_CALL vkDestroyEvent( + VkDevice device, + VkEvent event, + const VkAllocationCallbacks* pAllocator) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, device, event, pAllocator); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyEvent); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(event); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(event); + } + + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyEvent(device, event, pAllocator); + + CustomEncoderPostCall::Dispatch(manager, device, event, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(event); + +} + +VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus( + VkDevice device, + VkEvent event) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, device, event); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetEventStatus(device, event); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetEventStatus); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(event); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); + } + + CustomEncoderPostCall::Dispatch(manager, result, device, event); + + return result; + +} + +VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent( + VkDevice device, + VkEvent event) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, device, event); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->SetEvent(device, event); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetEvent); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(event); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); + } + + CustomEncoderPostCall::Dispatch(manager, result, device, event); + + return result; + +} + +VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent( + VkDevice device, + VkEvent event) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, device, event); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->ResetEvent(device, event); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkResetEvent); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(event); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); + } + + CustomEncoderPostCall::Dispatch(manager, result, device, event); + + return result; + +} + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView( + VkDevice device, + const VkBufferViewCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkBufferView* pView) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + bool omit_output_data = false; + + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pView); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBufferViewCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateBufferView(device, pCreateInfo_unwrapped, pAllocator, pView); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pView, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateBufferView); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pView, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pView, pCreateInfo); + } + + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pView); + + return result; + +} + +VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView( + VkDevice device, + VkBufferView bufferView, + const VkAllocationCallbacks* pAllocator) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, device, bufferView, pAllocator); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyBufferView); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(bufferView); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(bufferView); + } + + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyBufferView(device, bufferView, pAllocator); + + CustomEncoderPostCall::Dispatch(manager, device, bufferView, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(bufferView); + +} + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule( + VkDevice device, + const VkShaderModuleCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkShaderModule* pShaderModule) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + bool omit_output_data = false; + + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pShaderModule); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkShaderModuleCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateShaderModule(device, pCreateInfo_unwrapped, pAllocator, pShaderModule); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pShaderModule, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateShaderModule); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pShaderModule, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pShaderModule, pCreateInfo); + } + + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pShaderModule); + + return result; + +} + +VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule( + VkDevice device, + VkShaderModule shaderModule, + const VkAllocationCallbacks* pAllocator) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, device, shaderModule, pAllocator); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyShaderModule); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(shaderModule); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(shaderModule); + } + + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyShaderModule(device, shaderModule, pAllocator); + + CustomEncoderPostCall::Dispatch(manager, device, shaderModule, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(shaderModule); + +} + +VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache( + VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) @@ -2696,16 +3550,8 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler( CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pSampler); - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkSamplerCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateSampler(device, pCreateInfo_unwrapped, pAllocator, pSampler); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pSampler, VulkanCaptureManager::GetUniqueId); - } - else + VkResult result = manager->OverrideCreateSampler(device, pCreateInfo, pAllocator, pSampler); + if (result < 0) { omit_output_data = true; } @@ -3132,11 +3978,10 @@ VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets( } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer( - VkDevice device, - const VkFramebufferCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkFramebuffer* pFramebuffer) +VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -3152,45 +3997,32 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pFramebuffer); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkFramebufferCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateFramebuffer(device, pCreateInfo_unwrapped, pAllocator, pFramebuffer); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pFramebuffer, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineBindPoint, pipeline); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateFramebuffer); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindPipeline); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pFramebuffer, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pFramebuffer, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(pipelineBindPoint); + encoder->EncodeVulkanHandleValue(pipeline); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindPipelineHandles, pipeline); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pFramebuffer); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineBindPoint, pipeline); } -VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer( - VkDevice device, - VkFramebuffer framebuffer, - const VkAllocationCallbacks* pAllocator) +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t firstSet, + uint32_t descriptorSetCount, + const VkDescriptorSet* pDescriptorSets, + uint32_t dynamicOffsetCount, + const uint32_t* pDynamicOffsets) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -3206,31 +4038,35 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, framebuffer, pAllocator); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyFramebuffer); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindDescriptorSets); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(framebuffer); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(framebuffer); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(pipelineBindPoint); + encoder->EncodeVulkanHandleValue(layout); + encoder->EncodeUInt32Value(firstSet); + encoder->EncodeUInt32Value(descriptorSetCount); + encoder->EncodeVulkanHandleArray(pDescriptorSets, descriptorSetCount); + encoder->EncodeUInt32Value(dynamicOffsetCount); + encoder->EncodeUInt32Array(pDynamicOffsets, dynamicOffsetCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindDescriptorSetsHandles, layout, descriptorSetCount, pDescriptorSets); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyFramebuffer(device, framebuffer, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, framebuffer, pAllocator); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets); - vulkan_wrappers::DestroyWrappedHandle(framebuffer); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass( - VkDevice device, - const VkRenderPassCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkRenderPass* pRenderPass) +VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage( + VkCommandBuffer commandBuffer, + VkImage image, + VkImageLayout imageLayout, + const VkClearColorValue* pColor, + uint32_t rangeCount, + const VkImageSubresourceRange* pRanges) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -3246,42 +4082,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pRenderPass); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pRenderPass, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, image, imageLayout, pColor, rangeCount, pRanges); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateRenderPass); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdClearColorImage); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pRenderPass, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pRenderPass, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(image); + encoder->EncodeEnumValue(imageLayout); + EncodeStructPtr(encoder, pColor); + encoder->EncodeUInt32Value(rangeCount); + EncodeStructArray(encoder, pRanges, rangeCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdClearColorImageHandles, image); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pRenderPass); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, image, imageLayout, pColor, rangeCount, pRanges); } -VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass( - VkDevice device, - VkRenderPass renderPass, - const VkAllocationCallbacks* pAllocator) +VKAPI_ATTR void VKAPI_CALL vkCmdDispatch( + VkCommandBuffer commandBuffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -3297,30 +4122,28 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, renderPass, pAllocator); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, groupCountX, groupCountY, groupCountZ); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyRenderPass); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDispatch); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(renderPass); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(renderPass); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(groupCountX); + encoder->EncodeUInt32Value(groupCountY); + encoder->EncodeUInt32Value(groupCountZ); + manager->EndCommandApiCallCapture(commandBuffer); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyRenderPass(device, renderPass, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, renderPass, pAllocator); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ); - vulkan_wrappers::DestroyWrappedHandle(renderPass); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, groupCountX, groupCountY, groupCountZ); } -VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity( - VkDevice device, - VkRenderPass renderPass, - VkExtent2D* pGranularity) +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -3336,28 +4159,27 @@ VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, renderPass, pGranularity); - - vulkan_wrappers::GetDeviceTable(device)->GetRenderAreaGranularity(device, renderPass, pGranularity); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetRenderAreaGranularity); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDispatchIndirect); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(renderPass); - EncodeStructPtr(encoder, pGranularity); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(buffer); + encoder->EncodeUInt64Value(offset); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDispatchIndirectHandles, buffer); } - CustomEncoderPostCall::Dispatch(manager, device, renderPass, pGranularity); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool( - VkDevice device, - const VkCommandPoolCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkCommandPool* pCommandPool) +VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent( + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags stageMask) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -3373,42 +4195,71 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; + CustomEncoderPreCall::Dispatch(manager, commandBuffer, event, stageMask); - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pCommandPool); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetEvent); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(event); + encoder->EncodeFlagsValue(stageMask); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdSetEventHandles, event); + } - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask); - if (result >= 0) + CustomEncoderPostCall::Dispatch(manager, commandBuffer, event, stageMask); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent( + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags stageMask) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pCommandPool, VulkanCaptureManager::GetUniqueId); + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); } else { - omit_output_data = true; + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateCommandPool); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, event, stageMask); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdResetEvent); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pCommandPool, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pCommandPool, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(event); + encoder->EncodeFlagsValue(stageMask); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdResetEventHandles, event); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pCommandPool); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, event, stageMask); } -VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool( - VkDevice device, - VkCommandPool commandPool, - const VkAllocationCallbacks* pAllocator) +VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents( + VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent* pEvents, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + uint32_t memoryBarrierCount, + const VkMemoryBarrier* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const VkBufferMemoryBarrier* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const VkImageMemoryBarrier* pImageMemoryBarriers) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -3424,30 +4275,42 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, commandPool, pAllocator); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyCommandPool); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWaitEvents); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(commandPool); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(commandPool); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(eventCount); + encoder->EncodeVulkanHandleArray(pEvents, eventCount); + encoder->EncodeFlagsValue(srcStageMask); + encoder->EncodeFlagsValue(dstStageMask); + encoder->EncodeUInt32Value(memoryBarrierCount); + EncodeStructArray(encoder, pMemoryBarriers, memoryBarrierCount); + encoder->EncodeUInt32Value(bufferMemoryBarrierCount); + EncodeStructArray(encoder, pBufferMemoryBarriers, bufferMemoryBarrierCount); + encoder->EncodeUInt32Value(imageMemoryBarrierCount); + EncodeStructArray(encoder, pImageMemoryBarriers, imageMemoryBarrierCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWaitEventsHandles, eventCount, pEvents, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyCommandPool(device, commandPool, pAllocator); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBufferMemoryBarrier* pBufferMemoryBarriers_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBufferMemoryBarriers, bufferMemoryBarrierCount, handle_unwrap_memory); + const VkImageMemoryBarrier* pImageMemoryBarriers_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pImageMemoryBarriers, imageMemoryBarrierCount, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, device, commandPool, pAllocator); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers_unwrapped, imageMemoryBarrierCount, pImageMemoryBarriers_unwrapped); - vulkan_wrappers::DestroyWrappedHandle(commandPool); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); } -VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool( - VkDevice device, - VkCommandPool commandPool, - VkCommandPoolResetFlags flags) +VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants( + VkCommandBuffer commandBuffer, + VkPipelineLayout layout, + VkShaderStageFlags stageFlags, + uint32_t offset, + uint32_t size, + const void* pValues) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -3463,30 +4326,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, commandPool, flags); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->ResetCommandPool(device, commandPool, flags); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, layout, stageFlags, offset, size, pValues); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkResetCommandPool); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPushConstants); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(commandPool); - encoder->EncodeFlagsValue(flags); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(layout); + encoder->EncodeFlagsValue(stageFlags); + encoder->EncodeUInt32Value(offset); + encoder->EncodeUInt32Value(size); + encoder->EncodeVoidArray(pValues, size); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPushConstantsHandles, layout); } - CustomEncoderPostCall::Dispatch(manager, result, device, commandPool, flags); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, layout, stageFlags, offset, size, pValues); } -VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer( VkDevice device, - const VkCommandBufferAllocateInfo* pAllocateInfo, - VkCommandBuffer* pCommandBuffers) + const VkFramebufferCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkFramebuffer* pFramebuffer) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -3504,35 +4368,43 @@ VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pAllocateInfo, pCommandBuffers); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pFramebuffer); - VkResult result = manager->OverrideAllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers); - if (result < 0) + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkFramebufferCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateFramebuffer(device, pCreateInfo_unwrapped, pAllocator, pFramebuffer); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pFramebuffer, VulkanCaptureManager::GetUniqueId); + } + else { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkAllocateCommandBuffers); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateFramebuffer); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pAllocateInfo); - encoder->EncodeVulkanHandleArray(pCommandBuffers, (pAllocateInfo != nullptr) ? (pAllocateInfo->commandBufferCount) : 0, omit_output_data); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pFramebuffer, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndPoolCreateApiCallCapture(result, device, (pAllocateInfo != nullptr) ? (pAllocateInfo->commandBufferCount) : 0, pCommandBuffers, pAllocateInfo); + manager->EndCreateApiCallCapture(result, device, pFramebuffer, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pAllocateInfo, pCommandBuffers); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pFramebuffer); return result; } -VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers( +VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer( VkDevice device, - VkCommandPool commandPool, - uint32_t commandBufferCount, - const VkCommandBuffer* pCommandBuffers) + VkFramebuffer framebuffer, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -3548,30 +4420,31 @@ VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, commandPool, commandBufferCount, pCommandBuffers); + CustomEncoderPreCall::Dispatch(manager, device, framebuffer, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkFreeCommandBuffers); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyFramebuffer); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(commandPool); - encoder->EncodeUInt32Value(commandBufferCount); - encoder->EncodeVulkanHandleArray(pCommandBuffers, commandBufferCount); - manager->EndDestroyApiCallCapture(commandBufferCount, pCommandBuffers); + encoder->EncodeVulkanHandleValue(framebuffer); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(framebuffer); } ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers); + vulkan_wrappers::GetDeviceTable(device)->DestroyFramebuffer(device, framebuffer, pAllocator); - CustomEncoderPostCall::Dispatch(manager, device, commandPool, commandBufferCount, pCommandBuffers); + CustomEncoderPostCall::Dispatch(manager, device, framebuffer, pAllocator); - vulkan_wrappers::DestroyWrappedHandles(pCommandBuffers, commandBufferCount); + vulkan_wrappers::DestroyWrappedHandle(framebuffer); } -VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer( - VkCommandBuffer commandBuffer, - const VkCommandBufferBeginInfo* pBeginInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass( + VkDevice device, + const VkRenderPassCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkRenderPass* pRenderPass) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -3587,63 +4460,42 @@ VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBeginInfo); - - VkResult result = manager->OverrideBeginCommandBuffer(commandBuffer, pBeginInfo); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkBeginCommandBuffer); - if (encoder) - { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pBeginInfo); - encoder->EncodeEnumValue(result); - manager->EndCommandApiCallCapture(commandBuffer, TrackBeginCommandBufferHandles, pBeginInfo); - } - - CustomEncoderPostCall::Dispatch(manager, result, commandBuffer, pBeginInfo); + bool omit_output_data = false; - return result; + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pRenderPass); -} + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass); -VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer( - VkCommandBuffer commandBuffer) -{ - VulkanCaptureManager* manager = VulkanCaptureManager::Get(); - GFXRECON_ASSERT(manager != nullptr); - auto force_command_serialization = manager->GetForceCommandSerialization(); - std::shared_lock shared_api_call_lock; - std::unique_lock exclusive_api_call_lock; - if (force_command_serialization) + if (result >= 0) { - exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pRenderPass, VulkanCaptureManager::GetUniqueId); } else { - shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + omit_output_data = true; } - CustomEncoderPreCall::Dispatch(manager, commandBuffer); - - VkResult result = vulkan_wrappers::GetDeviceTable(commandBuffer)->EndCommandBuffer(commandBuffer); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkEndCommandBuffer); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateRenderPass); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pRenderPass, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCommandApiCallCapture(commandBuffer); + manager->EndCreateApiCallCapture(result, device, pRenderPass, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, commandBuffer); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pRenderPass); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer( - VkCommandBuffer commandBuffer, - VkCommandBufferResetFlags flags) +VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass( + VkDevice device, + VkRenderPass renderPass, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -3659,29 +4511,30 @@ VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, flags); - - VkResult result = vulkan_wrappers::GetDeviceTable(commandBuffer)->ResetCommandBuffer(commandBuffer, flags); + CustomEncoderPreCall::Dispatch(manager, device, renderPass, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkResetCommandBuffer); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyRenderPass); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeFlagsValue(flags); - encoder->EncodeEnumValue(result); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(renderPass); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(renderPass); } - CustomEncoderPostCall::Dispatch(manager, result, commandBuffer, flags); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyRenderPass(device, renderPass, pAllocator); - return result; + CustomEncoderPostCall::Dispatch(manager, device, renderPass, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(renderPass); } -VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline( - VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipeline pipeline) +VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity( + VkDevice device, + VkRenderPass renderPass, + VkExtent2D* pGranularity) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -3697,20 +4550,20 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineBindPoint, pipeline); + CustomEncoderPreCall::Dispatch(manager, device, renderPass, pGranularity); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindPipeline); + vulkan_wrappers::GetDeviceTable(device)->GetRenderAreaGranularity(device, renderPass, pGranularity); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetRenderAreaGranularity); if (encoder) - { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(pipelineBindPoint); - encoder->EncodeVulkanHandleValue(pipeline); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindPipelineHandles, pipeline); + { + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(renderPass); + EncodeStructPtr(encoder, pGranularity); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineBindPoint, pipeline); + CustomEncoderPostCall::Dispatch(manager, device, renderPass, pGranularity); } @@ -4040,52 +4893,6 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference( } -VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets( - VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipelineLayout layout, - uint32_t firstSet, - uint32_t descriptorSetCount, - const VkDescriptorSet* pDescriptorSets, - uint32_t dynamicOffsetCount, - const uint32_t* pDynamicOffsets) -{ - VulkanCaptureManager* manager = VulkanCaptureManager::Get(); - GFXRECON_ASSERT(manager != nullptr); - auto force_command_serialization = manager->GetForceCommandSerialization(); - std::shared_lock shared_api_call_lock; - std::unique_lock exclusive_api_call_lock; - if (force_command_serialization) - { - exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); - } - else - { - shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); - } - - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindDescriptorSets); - if (encoder) - { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(pipelineBindPoint); - encoder->EncodeVulkanHandleValue(layout); - encoder->EncodeUInt32Value(firstSet); - encoder->EncodeUInt32Value(descriptorSetCount); - encoder->EncodeVulkanHandleArray(pDescriptorSets, descriptorSetCount); - encoder->EncodeUInt32Value(dynamicOffsetCount); - encoder->EncodeUInt32Array(pDynamicOffsets, dynamicOffsetCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindDescriptorSetsHandles, layout, descriptorSetCount, pDescriptorSets); - } - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets); - -} - VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer( VkCommandBuffer commandBuffer, VkBuffer buffer, @@ -4326,11 +5133,15 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect( } -VKAPI_ATTR void VKAPI_CALL vkCmdDispatch( +VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage( VkCommandBuffer commandBuffer, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkImageBlit* pRegions, + VkFilter filter) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4346,28 +5157,35 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDispatch( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, groupCountX, groupCountY, groupCountZ); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDispatch); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBlitImage); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(groupCountX); - encoder->EncodeUInt32Value(groupCountY); - encoder->EncodeUInt32Value(groupCountZ); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(srcImage); + encoder->EncodeEnumValue(srcImageLayout); + encoder->EncodeVulkanHandleValue(dstImage); + encoder->EncodeEnumValue(dstImageLayout); + encoder->EncodeUInt32Value(regionCount); + EncodeStructArray(encoder, pRegions, regionCount); + encoder->EncodeEnumValue(filter); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBlitImageHandles, srcImage, dstImage); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, groupCountX, groupCountY, groupCountZ); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); } -VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect( +VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage( VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset) + VkImage image, + VkImageLayout imageLayout, + const VkClearDepthStencilValue* pDepthStencil, + uint32_t rangeCount, + const VkImageSubresourceRange* pRanges) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4383,29 +5201,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDispatchIndirect); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdClearDepthStencilImage); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(buffer); - encoder->EncodeUInt64Value(offset); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDispatchIndirectHandles, buffer); + encoder->EncodeVulkanHandleValue(image); + encoder->EncodeEnumValue(imageLayout); + EncodeStructPtr(encoder, pDepthStencil); + encoder->EncodeUInt32Value(rangeCount); + EncodeStructArray(encoder, pRanges, rangeCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdClearDepthStencilImageHandles, image); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges); } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer( +VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments( VkCommandBuffer commandBuffer, - VkBuffer srcBuffer, - VkBuffer dstBuffer, - uint32_t regionCount, - const VkBufferCopy* pRegions) + uint32_t attachmentCount, + const VkClearAttachment* pAttachments, + uint32_t rectCount, + const VkClearRect* pRects) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4421,33 +5242,144 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, attachmentCount, pAttachments, rectCount, pRects); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyBuffer); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdClearAttachments); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(srcBuffer); - encoder->EncodeVulkanHandleValue(dstBuffer); - encoder->EncodeUInt32Value(regionCount); - EncodeStructArray(encoder, pRegions, regionCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyBufferHandles, srcBuffer, dstBuffer); + encoder->EncodeUInt32Value(attachmentCount); + EncodeStructArray(encoder, pAttachments, attachmentCount); + encoder->EncodeUInt32Value(rectCount); + EncodeStructArray(encoder, pRects, rectCount); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, attachmentCount, pAttachments, rectCount, pRects); } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage( +VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage( VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, - const VkImageCopy* pRegions) + const VkImageResolve* pRegions) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdResolveImage); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(srcImage); + encoder->EncodeEnumValue(srcImageLayout); + encoder->EncodeVulkanHandleValue(dstImage); + encoder->EncodeEnumValue(dstImageLayout); + encoder->EncodeUInt32Value(regionCount); + EncodeStructArray(encoder, pRegions, regionCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdResolveImageHandles, srcImage, dstImage); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass( + VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo* pRenderPassBegin, + VkSubpassContents contents) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pRenderPassBegin, contents); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginRenderPass); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pRenderPassBegin); + encoder->EncodeEnumValue(contents); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginRenderPassHandles, pRenderPassBegin); + } + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkRenderPassBeginInfo* pRenderPassBegin_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pRenderPassBegin, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin_unwrapped, contents); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pRenderPassBegin, contents); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass( + VkCommandBuffer commandBuffer, + VkSubpassContents contents) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, contents); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdNextSubpass); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(contents); + manager->EndCommandApiCallCapture(commandBuffer); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdNextSubpass(commandBuffer, contents); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, contents); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass( + VkCommandBuffer commandBuffer) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4463,36 +5395,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + CustomEncoderPreCall::Dispatch(manager, commandBuffer); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyImage); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndRenderPass); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(srcImage); - encoder->EncodeEnumValue(srcImageLayout); - encoder->EncodeVulkanHandleValue(dstImage); - encoder->EncodeEnumValue(dstImageLayout); - encoder->EncodeUInt32Value(regionCount); - EncodeStructArray(encoder, pRegions, regionCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyImageHandles, srcImage, dstImage); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndRenderPass(commandBuffer); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + CustomEncoderPostCall::Dispatch(manager, commandBuffer); } -VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage( - VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageBlit* pRegions, - VkFilter filter) +VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2( + VkDevice device, + uint32_t bindInfoCount, + const VkBindBufferMemoryInfo* pBindInfos) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4508,35 +5429,33 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); + CustomEncoderPreCall::Dispatch(manager, device, bindInfoCount, pBindInfos); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBlitImage); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBindBufferMemoryInfo* pBindInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBindInfos, bindInfoCount, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindBufferMemory2(device, bindInfoCount, pBindInfos_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindBufferMemory2); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(srcImage); - encoder->EncodeEnumValue(srcImageLayout); - encoder->EncodeVulkanHandleValue(dstImage); - encoder->EncodeEnumValue(dstImageLayout); - encoder->EncodeUInt32Value(regionCount); - EncodeStructArray(encoder, pRegions, regionCount); - encoder->EncodeEnumValue(filter); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBlitImageHandles, srcImage, dstImage); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeUInt32Value(bindInfoCount); + EncodeStructArray(encoder, pBindInfos, bindInfoCount); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); + CustomEncoderPostCall::Dispatch(manager, result, device, bindInfoCount, pBindInfos); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage( - VkCommandBuffer commandBuffer, - VkBuffer srcBuffer, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkBufferImageCopy* pRegions) +VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2( + VkDevice device, + uint32_t bindInfoCount, + const VkBindImageMemoryInfo* pBindInfos) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4552,33 +5471,35 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); + CustomEncoderPreCall::Dispatch(manager, device, bindInfoCount, pBindInfos); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyBufferToImage); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBindImageMemoryInfo* pBindInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBindInfos, bindInfoCount, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindImageMemory2(device, bindInfoCount, pBindInfos_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindImageMemory2); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(srcBuffer); - encoder->EncodeVulkanHandleValue(dstImage); - encoder->EncodeEnumValue(dstImageLayout); - encoder->EncodeUInt32Value(regionCount); - EncodeStructArray(encoder, pRegions, regionCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyBufferToImageHandles, srcBuffer, dstImage); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeUInt32Value(bindInfoCount); + EncodeStructArray(encoder, pBindInfos, bindInfoCount); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); + CustomEncoderPostCall::Dispatch(manager, result, device, bindInfoCount, pBindInfos); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer( - VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkBuffer dstBuffer, - uint32_t regionCount, - const VkBufferImageCopy* pRegions) +VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures( + VkDevice device, + uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4594,32 +5515,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); + CustomEncoderPreCall::Dispatch(manager, device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyImageToBuffer); + vulkan_wrappers::GetDeviceTable(device)->GetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceGroupPeerMemoryFeatures); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(srcImage); - encoder->EncodeEnumValue(srcImageLayout); - encoder->EncodeVulkanHandleValue(dstBuffer); - encoder->EncodeUInt32Value(regionCount); - EncodeStructArray(encoder, pRegions, regionCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyImageToBufferHandles, srcImage, dstBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeUInt32Value(heapIndex); + encoder->EncodeUInt32Value(localDeviceIndex); + encoder->EncodeUInt32Value(remoteDeviceIndex); + encoder->EncodeFlagsPtr(pPeerMemoryFeatures); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); + CustomEncoderPostCall::Dispatch(manager, device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); } -VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer( +VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask( VkCommandBuffer commandBuffer, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize dataSize, - const void* pData) + uint32_t deviceMask) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4635,31 +5552,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, dstBuffer, dstOffset, dataSize, pData); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, deviceMask); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdUpdateBuffer); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDeviceMask); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(dstBuffer); - encoder->EncodeUInt64Value(dstOffset); - encoder->EncodeUInt64Value(dataSize); - encoder->EncodeVoidArray(pData, static_cast(dataSize)); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdUpdateBufferHandles, dstBuffer); + encoder->EncodeUInt32Value(deviceMask); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDeviceMask(commandBuffer, deviceMask); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, dstBuffer, dstOffset, dataSize, pData); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, deviceMask); } -VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer( - VkCommandBuffer commandBuffer, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize size, - uint32_t data) +VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups( + VkInstance instance, + uint32_t* pPhysicalDeviceGroupCount, + VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4675,32 +5587,41 @@ VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, dstBuffer, dstOffset, size, data); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdFillBuffer); + CustomEncoderPreCall::Dispatch(manager, instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); + + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->EnumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedStructArrayHandles(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pPhysicalDeviceGroupProperties, (pPhysicalDeviceGroupCount != nullptr) ? (*pPhysicalDeviceGroupCount) : 0, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkEnumeratePhysicalDeviceGroups); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(dstBuffer); - encoder->EncodeUInt64Value(dstOffset); - encoder->EncodeUInt64Value(size); - encoder->EncodeUInt32Value(data); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdFillBufferHandles, dstBuffer); + encoder->EncodeVulkanHandleValue(instance); + encoder->EncodeUInt32Ptr(pPhysicalDeviceGroupCount, omit_output_data); + EncodeStructArray(encoder, pPhysicalDeviceGroupProperties, (pPhysicalDeviceGroupCount != nullptr) ? (*pPhysicalDeviceGroupCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndStructGroupCreateApiCallCapture(result, instance, (pPhysicalDeviceGroupCount != nullptr) ? (*pPhysicalDeviceGroupCount) : 0, pPhysicalDeviceGroupProperties, nullptr); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data); + CustomEncoderPostCall::Dispatch(manager, result, instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, dstBuffer, dstOffset, size, data); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage( - VkCommandBuffer commandBuffer, - VkImage image, - VkImageLayout imageLayout, - const VkClearColorValue* pColor, - uint32_t rangeCount, - const VkImageSubresourceRange* pRanges) +VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2( + VkDevice device, + const VkImageMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4716,33 +5637,30 @@ VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, image, imageLayout, pColor, rangeCount, pRanges); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdClearColorImage); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkImageMemoryRequirementsInfo2* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(device)->GetImageMemoryRequirements2(device, pInfo_unwrapped, pMemoryRequirements); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageMemoryRequirements2); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(image); - encoder->EncodeEnumValue(imageLayout); - EncodeStructPtr(encoder, pColor); - encoder->EncodeUInt32Value(rangeCount); - EncodeStructArray(encoder, pRanges, rangeCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdClearColorImageHandles, image); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pMemoryRequirements); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, image, imageLayout, pColor, rangeCount, pRanges); + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); } -VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage( - VkCommandBuffer commandBuffer, - VkImage image, - VkImageLayout imageLayout, - const VkClearDepthStencilValue* pDepthStencil, - uint32_t rangeCount, - const VkImageSubresourceRange* pRanges) +VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2( + VkDevice device, + const VkBufferMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4758,32 +5676,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdClearDepthStencilImage); - if (encoder) - { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(image); - encoder->EncodeEnumValue(imageLayout); - EncodeStructPtr(encoder, pDepthStencil); - encoder->EncodeUInt32Value(rangeCount); - EncodeStructArray(encoder, pRanges, rangeCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdClearDepthStencilImageHandles, image); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBufferMemoryRequirementsInfo2* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(device)->GetBufferMemoryRequirements2(device, pInfo_unwrapped, pMemoryRequirements); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetBufferMemoryRequirements2); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pMemoryRequirements); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges); + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); } -VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments( - VkCommandBuffer commandBuffer, - uint32_t attachmentCount, - const VkClearAttachment* pAttachments, - uint32_t rectCount, - const VkClearRect* pRects) +VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2( + VkDevice device, + const VkImageSparseMemoryRequirementsInfo2* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4799,33 +5716,30 @@ VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, attachmentCount, pAttachments, rectCount, pRects); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdClearAttachments); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkImageSparseMemoryRequirementsInfo2* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(device)->GetImageSparseMemoryRequirements2(device, pInfo_unwrapped, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageSparseMemoryRequirements2); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(attachmentCount); - EncodeStructArray(encoder, pAttachments, attachmentCount); - encoder->EncodeUInt32Value(rectCount); - EncodeStructArray(encoder, pRects, rectCount); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeUInt32Ptr(pSparseMemoryRequirementCount); + EncodeStructArray(encoder, pSparseMemoryRequirements, (pSparseMemoryRequirementCount != nullptr) ? (*pSparseMemoryRequirementCount) : 0); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, attachmentCount, pAttachments, rectCount, pRects); + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); } -VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage( - VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageResolve* pRegions) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures2* pFeatures) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4841,31 +5755,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pFeatures); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdResolveImage); + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceFeatures2(physicalDevice, pFeatures); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceFeatures2); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(srcImage); - encoder->EncodeEnumValue(srcImageLayout); - encoder->EncodeVulkanHandleValue(dstImage); - encoder->EncodeEnumValue(dstImageLayout); - encoder->EncodeUInt32Value(regionCount); - EncodeStructArray(encoder, pRegions, regionCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdResolveImageHandles, srcImage, dstImage); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pFeatures); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pFeatures); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent( - VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags stageMask) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties2* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4881,27 +5789,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, event, stageMask); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pProperties); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetEvent); + manager->OverrideGetPhysicalDeviceProperties2(physicalDevice, pProperties); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceProperties2); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(event); - encoder->EncodeFlagsValue(stageMask); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdSetEventHandles, event); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pProperties); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, event, stageMask); + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pProperties); } -VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent( - VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags stageMask) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkFormatProperties2* pFormatProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4917,35 +5824,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, event, stageMask); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, format, pFormatProperties); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdResetEvent); + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceFormatProperties2); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(event); - encoder->EncodeFlagsValue(stageMask); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdResetEventHandles, event); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeEnumValue(format); + EncodeStructPtr(encoder, pFormatProperties); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, event, stageMask); + CustomEncoderPostCall::Dispatch(manager, physicalDevice, format, pFormatProperties); } -VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents( - VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent* pEvents, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - uint32_t memoryBarrierCount, - const VkMemoryBarrier* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VkBufferMemoryBarrier* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VkImageMemoryBarrier* pImageMemoryBarriers) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, + VkImageFormatProperties2* pImageFormatProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -4961,46 +5860,36 @@ VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWaitEvents); - if (encoder) + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pImageFormatInfo, pImageFormatProperties); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceImageFormatProperties2(physicalDevice, pImageFormatInfo, pImageFormatProperties); + if (result < 0) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(eventCount); - encoder->EncodeVulkanHandleArray(pEvents, eventCount); - encoder->EncodeFlagsValue(srcStageMask); - encoder->EncodeFlagsValue(dstStageMask); - encoder->EncodeUInt32Value(memoryBarrierCount); - EncodeStructArray(encoder, pMemoryBarriers, memoryBarrierCount); - encoder->EncodeUInt32Value(bufferMemoryBarrierCount); - EncodeStructArray(encoder, pBufferMemoryBarriers, bufferMemoryBarrierCount); - encoder->EncodeUInt32Value(imageMemoryBarrierCount); - EncodeStructArray(encoder, pImageMemoryBarriers, imageMemoryBarrierCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWaitEventsHandles, eventCount, pEvents, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + omit_output_data = true; } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBufferMemoryBarrier* pBufferMemoryBarriers_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBufferMemoryBarriers, bufferMemoryBarrierCount, handle_unwrap_memory); - const VkImageMemoryBarrier* pImageMemoryBarriers_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pImageMemoryBarriers, imageMemoryBarrierCount, handle_unwrap_memory); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceImageFormatProperties2); + if (encoder) + { + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pImageFormatInfo); + EncodeStructPtr(encoder, pImageFormatProperties, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); + } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers_unwrapped, imageMemoryBarrierCount, pImageMemoryBarriers_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pImageFormatInfo, pImageFormatProperties); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier( - VkCommandBuffer commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - const VkMemoryBarrier* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VkBufferMemoryBarrier* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VkImageMemoryBarrier* pImageMemoryBarriers) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2( + VkPhysicalDevice physicalDevice, + uint32_t* pQueueFamilyPropertyCount, + VkQueueFamilyProperties2* pQueueFamilyProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5016,39 +5905,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPipelineBarrier); + manager->OverrideGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceQueueFamilyProperties2); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeFlagsValue(srcStageMask); - encoder->EncodeFlagsValue(dstStageMask); - encoder->EncodeFlagsValue(dependencyFlags); - encoder->EncodeUInt32Value(memoryBarrierCount); - EncodeStructArray(encoder, pMemoryBarriers, memoryBarrierCount); - encoder->EncodeUInt32Value(bufferMemoryBarrierCount); - EncodeStructArray(encoder, pBufferMemoryBarriers, bufferMemoryBarrierCount); - encoder->EncodeUInt32Value(imageMemoryBarrierCount); - EncodeStructArray(encoder, pImageMemoryBarriers, imageMemoryBarrierCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPipelineBarrierHandles, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Ptr(pQueueFamilyPropertyCount); + EncodeStructArray(encoder, pQueueFamilyProperties, (pQueueFamilyPropertyCount != nullptr) ? (*pQueueFamilyPropertyCount) : 0); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBufferMemoryBarrier* pBufferMemoryBarriers_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBufferMemoryBarriers, bufferMemoryBarrierCount, handle_unwrap_memory); - const VkImageMemoryBarrier* pImageMemoryBarriers_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pImageMemoryBarriers, imageMemoryBarrierCount, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers_unwrapped, imageMemoryBarrierCount, pImageMemoryBarriers_unwrapped); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); } -VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t query, - VkQueryControlFlags flags) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties2* pMemoryProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5064,28 +5940,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, queryPool, query, flags); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pMemoryProperties); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginQuery); + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceMemoryProperties2); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(queryPool); - encoder->EncodeUInt32Value(query); - encoder->EncodeFlagsValue(flags); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginQueryHandles, queryPool); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pMemoryProperties); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, query, flags); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, queryPool, query, flags); + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pMemoryProperties); } -VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t query) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, + uint32_t* pPropertyCount, + VkSparseImageFormatProperties2* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5101,28 +5976,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, queryPool, query); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pFormatInfo, pPropertyCount, pProperties); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndQuery); + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pFormatInfo, pPropertyCount, pProperties); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSparseImageFormatProperties2); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(queryPool); - encoder->EncodeUInt32Value(query); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdEndQueryHandles, queryPool); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pFormatInfo); + encoder->EncodeUInt32Ptr(pPropertyCount); + EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndQuery(commandBuffer, queryPool, query); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, queryPool, query); + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pFormatInfo, pPropertyCount, pProperties); } -VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount) +VKAPI_ATTR void VKAPI_CALL vkTrimCommandPool( + VkDevice device, + VkCommandPool commandPool, + VkCommandPoolTrimFlags flags) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5138,29 +6013,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, queryPool, firstQuery, queryCount); + CustomEncoderPreCall::Dispatch(manager, device, commandPool, flags); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdResetQueryPool); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkTrimCommandPool); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(queryPool); - encoder->EncodeUInt32Value(firstQuery); - encoder->EncodeUInt32Value(queryCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdResetQueryPoolHandles, queryPool); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(commandPool); + encoder->EncodeFlagsValue(flags); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount); + vulkan_wrappers::GetDeviceTable(device)->TrimCommandPool(device, commandPool, flags); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, queryPool, firstQuery, queryCount); + CustomEncoderPostCall::Dispatch(manager, device, commandPool, flags); } -VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp( - VkCommandBuffer commandBuffer, - VkPipelineStageFlagBits pipelineStage, - VkQueryPool queryPool, - uint32_t query) +VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2( + VkDevice device, + const VkDeviceQueueInfo2* pQueueInfo, + VkQueue* pQueue) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5176,33 +6049,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineStage, queryPool, query); + CustomEncoderPreCall::Dispatch(manager, device, pQueueInfo, pQueue); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWriteTimestamp); + vulkan_wrappers::GetDeviceTable(device)->GetDeviceQueue2(device, pQueueInfo, pQueue); + + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pQueue, VulkanCaptureManager::GetUniqueId); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceQueue2); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(pipelineStage); - encoder->EncodeVulkanHandleValue(queryPool); - encoder->EncodeUInt32Value(query); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWriteTimestampHandles, queryPool); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pQueueInfo); + encoder->EncodeVulkanHandlePtr(pQueue); + manager->EndCreateApiCallCapture(VK_SUCCESS, device, pQueue, nullptr); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineStage, queryPool, query); + CustomEncoderPostCall::Dispatch(manager, device, pQueueInfo, pQueue); } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, + VkExternalBufferProperties* pExternalBufferProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5218,35 +6087,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pExternalBufferInfo, pExternalBufferProperties); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyQueryPoolResults); + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalBufferProperties); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(queryPool); - encoder->EncodeUInt32Value(firstQuery); - encoder->EncodeUInt32Value(queryCount); - encoder->EncodeVulkanHandleValue(dstBuffer); - encoder->EncodeUInt64Value(dstOffset); - encoder->EncodeUInt64Value(stride); - encoder->EncodeFlagsValue(flags); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyQueryPoolResultsHandles, queryPool, dstBuffer); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pExternalBufferInfo); + EncodeStructPtr(encoder, pExternalBufferProperties); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pExternalBufferInfo, pExternalBufferProperties); } -VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants( - VkCommandBuffer commandBuffer, - VkPipelineLayout layout, - VkShaderStageFlags stageFlags, - uint32_t offset, - uint32_t size, - const void* pValues) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, + VkExternalFenceProperties* pExternalFenceProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5262,30 +6123,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, layout, stageFlags, offset, size, pValues); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pExternalFenceInfo, pExternalFenceProperties); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPushConstants); + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalFenceProperties); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(layout); - encoder->EncodeFlagsValue(stageFlags); - encoder->EncodeUInt32Value(offset); - encoder->EncodeUInt32Value(size); - encoder->EncodeVoidArray(pValues, size); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPushConstantsHandles, layout); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pExternalFenceInfo); + EncodeStructPtr(encoder, pExternalFenceProperties); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, layout, stageFlags, offset, size, pValues); + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pExternalFenceInfo, pExternalFenceProperties); } -VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass( - VkCommandBuffer commandBuffer, - const VkRenderPassBeginInfo* pRenderPassBegin, - VkSubpassContents contents) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, + VkExternalSemaphoreProperties* pExternalSemaphoreProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5301,29 +6159,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pRenderPassBegin, contents); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginRenderPass); + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalSemaphoreProperties); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pRenderPassBegin); - encoder->EncodeEnumValue(contents); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginRenderPassHandles, pRenderPassBegin); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pExternalSemaphoreInfo); + EncodeStructPtr(encoder, pExternalSemaphoreProperties); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkRenderPassBeginInfo* pRenderPassBegin_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pRenderPassBegin, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin_unwrapped, contents); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pRenderPassBegin, contents); + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties); } -VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass( +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase( VkCommandBuffer commandBuffer, - VkSubpassContents contents) + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5339,24 +6199,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, contents); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdNextSubpass); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDispatchBase); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(contents); + encoder->EncodeUInt32Value(baseGroupX); + encoder->EncodeUInt32Value(baseGroupY); + encoder->EncodeUInt32Value(baseGroupZ); + encoder->EncodeUInt32Value(groupCountX); + encoder->EncodeUInt32Value(groupCountY); + encoder->EncodeUInt32Value(groupCountZ); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdNextSubpass(commandBuffer, contents); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, contents); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); } -VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass( - VkCommandBuffer commandBuffer) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplate( + VkDevice device, + const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5372,61 +6240,45 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndRenderPass); - if (encoder) - { - encoder->EncodeVulkanHandleValue(commandBuffer); - manager->EndCommandApiCallCapture(commandBuffer); - } + bool omit_output_data = false; - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndRenderPass(commandBuffer); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate); - CustomEncoderPostCall::Dispatch(manager, commandBuffer); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); -} + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateDescriptorUpdateTemplate(device, pCreateInfo_unwrapped, pAllocator, pDescriptorUpdateTemplate); -VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands( - VkCommandBuffer commandBuffer, - uint32_t commandBufferCount, - const VkCommandBuffer* pCommandBuffers) -{ - VulkanCaptureManager* manager = VulkanCaptureManager::Get(); - GFXRECON_ASSERT(manager != nullptr); - auto force_command_serialization = manager->GetForceCommandSerialization(); - std::shared_lock shared_api_call_lock; - std::unique_lock exclusive_api_call_lock; - if (force_command_serialization) + if (result >= 0) { - exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pDescriptorUpdateTemplate, VulkanCaptureManager::GetUniqueId); } else { - shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + omit_output_data = true; } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, commandBufferCount, pCommandBuffers); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdExecuteCommands); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDescriptorUpdateTemplate); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(commandBufferCount); - encoder->EncodeVulkanHandleArray(pCommandBuffers, commandBufferCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdExecuteCommandsHandles, commandBufferCount, pCommandBuffers); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pDescriptorUpdateTemplate, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pDescriptorUpdateTemplate, pCreateInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, commandBufferCount, pCommandBuffers); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2( +VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate( VkDevice device, - uint32_t bindInfoCount, - const VkBindBufferMemoryInfo* pBindInfos) + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5442,33 +6294,30 @@ VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, bindInfoCount, pBindInfos); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBindBufferMemoryInfo* pBindInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBindInfos, bindInfoCount, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindBufferMemory2(device, bindInfoCount, pBindInfos_unwrapped); + CustomEncoderPreCall::Dispatch(manager, device, descriptorUpdateTemplate, pAllocator); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindBufferMemory2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyDescriptorUpdateTemplate); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeUInt32Value(bindInfoCount); - EncodeStructArray(encoder, pBindInfos, bindInfoCount); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(descriptorUpdateTemplate); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(descriptorUpdateTemplate); } - CustomEncoderPostCall::Dispatch(manager, result, device, bindInfoCount, pBindInfos); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator); - return result; + CustomEncoderPostCall::Dispatch(manager, device, descriptorUpdateTemplate, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(descriptorUpdateTemplate); } -VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2( +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport( VkDevice device, - uint32_t bindInfoCount, - const VkBindImageMemoryInfo* pBindInfos) + const VkDescriptorSetLayoutCreateInfo* pCreateInfo, + VkDescriptorSetLayoutSupport* pSupport) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5484,35 +6333,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, bindInfoCount, pBindInfos); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pSupport); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBindImageMemoryInfo* pBindInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBindInfos, bindInfoCount, handle_unwrap_memory); + const VkDescriptorSetLayoutCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindImageMemory2(device, bindInfoCount, pBindInfos_unwrapped); + vulkan_wrappers::GetDeviceTable(device)->GetDescriptorSetLayoutSupport(device, pCreateInfo_unwrapped, pSupport); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindImageMemory2); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDescriptorSetLayoutSupport); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeUInt32Value(bindInfoCount); - EncodeStructArray(encoder, pBindInfos, bindInfoCount); - encoder->EncodeEnumValue(result); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pSupport); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, bindInfoCount, pBindInfos); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, pCreateInfo, pSupport); } -VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion( VkDevice device, - uint32_t heapIndex, - uint32_t localDeviceIndex, - uint32_t remoteDeviceIndex, - VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) + const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSamplerYcbcrConversion* pYcbcrConversion) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5528,28 +6373,42 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); + bool omit_output_data = false; - vulkan_wrappers::GetDeviceTable(device)->GetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pYcbcrConversion); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceGroupPeerMemoryFeatures); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pYcbcrConversion, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateSamplerYcbcrConversion); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeUInt32Value(heapIndex); - encoder->EncodeUInt32Value(localDeviceIndex); - encoder->EncodeUInt32Value(remoteDeviceIndex); - encoder->EncodeFlagsPtr(pPeerMemoryFeatures); - manager->EndApiCallCapture(); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pYcbcrConversion, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pYcbcrConversion, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pYcbcrConversion); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask( - VkCommandBuffer commandBuffer, - uint32_t deviceMask) +VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion( + VkDevice device, + VkSamplerYcbcrConversion ycbcrConversion, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5565,30 +6424,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, deviceMask); + CustomEncoderPreCall::Dispatch(manager, device, ycbcrConversion, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDeviceMask); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroySamplerYcbcrConversion); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(deviceMask); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(ycbcrConversion); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(ycbcrConversion); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDeviceMask(commandBuffer, deviceMask); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, deviceMask); + CustomEncoderPostCall::Dispatch(manager, device, ycbcrConversion, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(ycbcrConversion); } -VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase( - VkCommandBuffer commandBuffer, - uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) +VKAPI_ATTR void VKAPI_CALL vkResetQueryPool( + VkDevice device, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5604,31 +6464,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + CustomEncoderPreCall::Dispatch(manager, device, queryPool, firstQuery, queryCount); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDispatchBase); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkResetQueryPool); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(baseGroupX); - encoder->EncodeUInt32Value(baseGroupY); - encoder->EncodeUInt32Value(baseGroupZ); - encoder->EncodeUInt32Value(groupCountX); - encoder->EncodeUInt32Value(groupCountY); - encoder->EncodeUInt32Value(groupCountZ); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeUInt32Value(firstQuery); + encoder->EncodeUInt32Value(queryCount); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + vulkan_wrappers::GetDeviceTable(device)->ResetQueryPool(device, queryPool, firstQuery, queryCount); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + CustomEncoderPostCall::Dispatch(manager, device, queryPool, firstQuery, queryCount); } -VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups( - VkInstance instance, - uint32_t* pPhysicalDeviceGroupCount, - VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties) +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue( + VkDevice device, + VkSemaphore semaphore, + uint64_t* pValue) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5646,39 +6503,34 @@ VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->EnumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); + CustomEncoderPreCall::Dispatch(manager, device, semaphore, pValue); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedStructArrayHandles(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pPhysicalDeviceGroupProperties, (pPhysicalDeviceGroupCount != nullptr) ? (*pPhysicalDeviceGroupCount) : 0, VulkanCaptureManager::GetUniqueId); - } - else + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSemaphoreCounterValue(device, semaphore, pValue); + if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkEnumeratePhysicalDeviceGroups); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSemaphoreCounterValue); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - encoder->EncodeUInt32Ptr(pPhysicalDeviceGroupCount, omit_output_data); - EncodeStructArray(encoder, pPhysicalDeviceGroupProperties, (pPhysicalDeviceGroupCount != nullptr) ? (*pPhysicalDeviceGroupCount) : 0, omit_output_data); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(semaphore); + encoder->EncodeUInt64Ptr(pValue, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndStructGroupCreateApiCallCapture(result, instance, (pPhysicalDeviceGroupCount != nullptr) ? (*pPhysicalDeviceGroupCount) : 0, pPhysicalDeviceGroupProperties, nullptr); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, semaphore, pValue); return result; } -VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2( +VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores( VkDevice device, - const VkImageMemoryRequirementsInfo2* pInfo, - VkMemoryRequirements2* pMemoryRequirements) + const VkSemaphoreWaitInfo* pWaitInfo, + uint64_t timeout) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5694,30 +6546,32 @@ VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + CustomEncoderPreCall::Dispatch(manager, device, pWaitInfo, timeout); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkImageMemoryRequirementsInfo2* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + const VkSemaphoreWaitInfo* pWaitInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pWaitInfo, handle_unwrap_memory); - vulkan_wrappers::GetDeviceTable(device)->GetImageMemoryRequirements2(device, pInfo_unwrapped, pMemoryRequirements); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->WaitSemaphores(device, pWaitInfo_unwrapped, timeout); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageMemoryRequirements2); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkWaitSemaphores); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - EncodeStructPtr(encoder, pMemoryRequirements); + EncodeStructPtr(encoder, pWaitInfo); + encoder->EncodeUInt64Value(timeout); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + CustomEncoderPostCall::Dispatch(manager, result, device, pWaitInfo, timeout); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2( +VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore( VkDevice device, - const VkBufferMemoryRequirementsInfo2* pInfo, - VkMemoryRequirements2* pMemoryRequirements) + const VkSemaphoreSignalInfo* pSignalInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5733,31 +6587,31 @@ VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + CustomEncoderPreCall::Dispatch(manager, device, pSignalInfo); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBufferMemoryRequirementsInfo2* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + const VkSemaphoreSignalInfo* pSignalInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSignalInfo, handle_unwrap_memory); - vulkan_wrappers::GetDeviceTable(device)->GetBufferMemoryRequirements2(device, pInfo_unwrapped, pMemoryRequirements); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->SignalSemaphore(device, pSignalInfo_unwrapped); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetBufferMemoryRequirements2); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSignalSemaphore); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - EncodeStructPtr(encoder, pMemoryRequirements); + EncodeStructPtr(encoder, pSignalInfo); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + CustomEncoderPostCall::Dispatch(manager, result, device, pSignalInfo); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2( +VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddress( VkDevice device, - const VkImageSparseMemoryRequirementsInfo2* pInfo, - uint32_t* pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) + const VkBufferDeviceAddressInfo* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5773,30 +6627,31 @@ VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + CustomEncoderPreCall::Dispatch(manager, device, pInfo); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkImageSparseMemoryRequirementsInfo2* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + const VkBufferDeviceAddressInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - vulkan_wrappers::GetDeviceTable(device)->GetImageSparseMemoryRequirements2(device, pInfo_unwrapped, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + VkDeviceAddress result = vulkan_wrappers::GetDeviceTable(device)->GetBufferDeviceAddress(device, pInfo_unwrapped); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageSparseMemoryRequirements2); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetBufferDeviceAddress); if (encoder) { encoder->EncodeVulkanHandleValue(device); EncodeStructPtr(encoder, pInfo); - encoder->EncodeUInt32Ptr(pSparseMemoryRequirementCount); - EncodeStructArray(encoder, pSparseMemoryRequirements, (pSparseMemoryRequirementCount != nullptr) ? (*pSparseMemoryRequirementCount) : 0); + encoder->EncodeUInt64Value(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceFeatures2* pFeatures) +VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5812,25 +6667,31 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pFeatures); + CustomEncoderPreCall::Dispatch(manager, device, pInfo); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBufferDeviceAddressInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceFeatures2(physicalDevice, pFeatures); + uint64_t result = vulkan_wrappers::GetDeviceTable(device)->GetBufferOpaqueCaptureAddress(device, pInfo_unwrapped); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceFeatures2); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetBufferOpaqueCaptureAddress); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pFeatures); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeUInt64Value(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pFeatures); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceProperties2* pProperties) +VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress( + VkDevice device, + const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5846,26 +6707,36 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pProperties); + CustomEncoderPreCall::Dispatch(manager, device, pInfo); - manager->OverrideGetPhysicalDeviceProperties2(physicalDevice, pProperties); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceProperties2); + uint64_t result = vulkan_wrappers::GetDeviceTable(device)->GetDeviceMemoryOpaqueCaptureAddress(device, pInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceMemoryOpaqueCaptureAddress); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pProperties); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeUInt64Value(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2( - VkPhysicalDevice physicalDevice, - VkFormat format, - VkFormatProperties2* pFormatProperties) +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5881,27 +6752,35 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, format, pFormatProperties); - - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceFormatProperties2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawIndirectCount); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeEnumValue(format); - EncodeStructPtr(encoder, pFormatProperties); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(buffer); + encoder->EncodeUInt64Value(offset); + encoder->EncodeVulkanHandleValue(countBuffer); + encoder->EncodeUInt64Value(countBufferOffset); + encoder->EncodeUInt32Value(maxDrawCount); + encoder->EncodeUInt32Value(stride); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawIndirectCountHandles, buffer, countBuffer); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, format, pFormatProperties); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, - VkImageFormatProperties2* pImageFormatProperties) +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5917,36 +6796,32 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pImageFormatInfo, pImageFormatProperties); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceImageFormatProperties2(physicalDevice, pImageFormatInfo, pImageFormatProperties); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceImageFormatProperties2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawIndexedIndirectCount); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pImageFormatInfo); - EncodeStructPtr(encoder, pImageFormatProperties, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(buffer); + encoder->EncodeUInt64Value(offset); + encoder->EncodeVulkanHandleValue(countBuffer); + encoder->EncodeUInt64Value(countBufferOffset); + encoder->EncodeUInt32Value(maxDrawCount); + encoder->EncodeUInt32Value(stride); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawIndexedIndirectCountHandles, buffer, countBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pImageFormatInfo, pImageFormatProperties); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2( - VkPhysicalDevice physicalDevice, - uint32_t* pQueueFamilyPropertyCount, - VkQueueFamilyProperties2* pQueueFamilyProperties) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2( + VkDevice device, + const VkRenderPassCreateInfo2* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkRenderPass* pRenderPass) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5962,26 +6837,42 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); + bool omit_output_data = false; - manager->OverrideGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pRenderPass); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceQueueFamilyProperties2); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateRenderPass2(device, pCreateInfo, pAllocator, pRenderPass); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pRenderPass, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateRenderPass2); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pQueueFamilyPropertyCount); - EncodeStructArray(encoder, pQueueFamilyProperties, (pQueueFamilyPropertyCount != nullptr) ? (*pQueueFamilyPropertyCount) : 0); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pRenderPass, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pRenderPass, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pRenderPass); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceMemoryProperties2* pMemoryProperties) +VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2( + VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo* pRenderPassBegin, + const VkSubpassBeginInfo* pSubpassBeginInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -5997,27 +6888,30 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pMemoryProperties); - - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pRenderPassBegin, pSubpassBeginInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceMemoryProperties2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginRenderPass2); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pMemoryProperties); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pRenderPassBegin); + EncodeStructPtr(encoder, pSubpassBeginInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginRenderPass2Handles, pRenderPassBegin); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pMemoryProperties); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkRenderPassBeginInfo* pRenderPassBegin_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pRenderPassBegin, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginRenderPass2(commandBuffer, pRenderPassBegin_unwrapped, pSubpassBeginInfo); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pRenderPassBegin, pSubpassBeginInfo); } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, - uint32_t* pPropertyCount, - VkSparseImageFormatProperties2* pProperties) +VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2( + VkCommandBuffer commandBuffer, + const VkSubpassBeginInfo* pSubpassBeginInfo, + const VkSubpassEndInfo* pSubpassEndInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6033,28 +6927,26 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pFormatInfo, pPropertyCount, pProperties); - - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pFormatInfo, pPropertyCount, pProperties); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSparseImageFormatProperties2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdNextSubpass2); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pFormatInfo); - encoder->EncodeUInt32Ptr(pPropertyCount); - EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pSubpassBeginInfo); + EncodeStructPtr(encoder, pSubpassEndInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pFormatInfo, pPropertyCount, pProperties); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdNextSubpass2(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); } -VKAPI_ATTR void VKAPI_CALL vkTrimCommandPool( - VkDevice device, - VkCommandPool commandPool, - VkCommandPoolTrimFlags flags) +VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2( + VkCommandBuffer commandBuffer, + const VkSubpassEndInfo* pSubpassEndInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6070,27 +6962,26 @@ VKAPI_ATTR void VKAPI_CALL vkTrimCommandPool( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, commandPool, flags); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pSubpassEndInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkTrimCommandPool); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndRenderPass2); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(commandPool); - encoder->EncodeFlagsValue(flags); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pSubpassEndInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(device)->TrimCommandPool(device, commandPool, flags); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndRenderPass2(commandBuffer, pSubpassEndInfo); - CustomEncoderPostCall::Dispatch(manager, device, commandPool, flags); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pSubpassEndInfo); } -VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2( - VkDevice device, - const VkDeviceQueueInfo2* pQueueInfo, - VkQueue* pQueue) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolProperties( + VkPhysicalDevice physicalDevice, + uint32_t* pToolCount, + VkPhysicalDeviceToolProperties* pToolProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6106,30 +6997,37 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pQueueInfo, pQueue); + bool omit_output_data = false; - vulkan_wrappers::GetDeviceTable(device)->GetDeviceQueue2(device, pQueueInfo, pQueue); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pToolCount, pToolProperties); - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pQueue, VulkanCaptureManager::GetUniqueId); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceToolProperties(physicalDevice, pToolCount, pToolProperties); + if (result < 0) + { + omit_output_data = true; + } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceQueue2); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceToolProperties); if (encoder) - { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pQueueInfo); - encoder->EncodeVulkanHandlePtr(pQueue); - manager->EndCreateApiCallCapture(VK_SUCCESS, device, pQueue, nullptr); + { + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Ptr(pToolCount, omit_output_data); + EncodeStructArray(encoder, pToolProperties, (pToolCount != nullptr) ? (*pToolCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, pQueueInfo, pQueue); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pToolCount, pToolProperties); + + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion( +VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlot( VkDevice device, - const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, + const VkPrivateDataSlotCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, - VkSamplerYcbcrConversion* pYcbcrConversion) + VkPrivateDataSlot* pPrivateDataSlot) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6147,39 +7045,39 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pYcbcrConversion); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pPrivateDataSlot); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreatePrivateDataSlot(device, pCreateInfo, pAllocator, pPrivateDataSlot); if (result >= 0) { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pYcbcrConversion, VulkanCaptureManager::GetUniqueId); + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pPrivateDataSlot, VulkanCaptureManager::GetUniqueId); } else { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateSamplerYcbcrConversion); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreatePrivateDataSlot); if (encoder) { encoder->EncodeVulkanHandleValue(device); EncodeStructPtr(encoder, pCreateInfo); EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pYcbcrConversion, omit_output_data); + encoder->EncodeVulkanHandlePtr(pPrivateDataSlot, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pYcbcrConversion, pCreateInfo); + manager->EndCreateApiCallCapture(result, device, pPrivateDataSlot, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pYcbcrConversion); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pPrivateDataSlot); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion( +VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlot( VkDevice device, - VkSamplerYcbcrConversion ycbcrConversion, + VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); @@ -6196,31 +7094,32 @@ VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, ycbcrConversion, pAllocator); + CustomEncoderPreCall::Dispatch(manager, device, privateDataSlot, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroySamplerYcbcrConversion); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyPrivateDataSlot); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(ycbcrConversion); + encoder->EncodeVulkanHandleValue(privateDataSlot); EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(ycbcrConversion); + manager->EndDestroyApiCallCapture(privateDataSlot); } ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator); + vulkan_wrappers::GetDeviceTable(device)->DestroyPrivateDataSlot(device, privateDataSlot, pAllocator); - CustomEncoderPostCall::Dispatch(manager, device, ycbcrConversion, pAllocator); + CustomEncoderPostCall::Dispatch(manager, device, privateDataSlot, pAllocator); - vulkan_wrappers::DestroyWrappedHandle(ycbcrConversion); + vulkan_wrappers::DestroyWrappedHandle(privateDataSlot); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplate( +VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateData( VkDevice device, - const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate) + VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, + uint64_t data) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6236,45 +7135,71 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplate( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; + CustomEncoderPreCall::Dispatch(manager, device, objectType, objectHandle, privateDataSlot, data); - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->SetPrivateData(device, objectType, objectHandle, privateDataSlot, data); - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetPrivateData); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeEnumValue(objectType); + encoder->EncodeUInt64Value(vulkan_wrappers::GetWrappedId(objectHandle, objectType)); + encoder->EncodeVulkanHandleValue(privateDataSlot); + encoder->EncodeUInt64Value(data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); + } - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateDescriptorUpdateTemplate(device, pCreateInfo_unwrapped, pAllocator, pDescriptorUpdateTemplate); + CustomEncoderPostCall::Dispatch(manager, result, device, objectType, objectHandle, privateDataSlot, data); - if (result >= 0) + return result; + +} + +VKAPI_ATTR void VKAPI_CALL vkGetPrivateData( + VkDevice device, + VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, + uint64_t* pData) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pDescriptorUpdateTemplate, VulkanCaptureManager::GetUniqueId); + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); } else { - omit_output_data = true; + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDescriptorUpdateTemplate); + CustomEncoderPreCall::Dispatch(manager, device, objectType, objectHandle, privateDataSlot, pData); + + vulkan_wrappers::GetDeviceTable(device)->GetPrivateData(device, objectType, objectHandle, privateDataSlot, pData); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPrivateData); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pDescriptorUpdateTemplate, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pDescriptorUpdateTemplate, pCreateInfo); + encoder->EncodeEnumValue(objectType); + encoder->EncodeUInt64Value(vulkan_wrappers::GetWrappedId(objectHandle, objectType)); + encoder->EncodeVulkanHandleValue(privateDataSlot); + encoder->EncodeUInt64Ptr(pData); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, objectType, objectHandle, privateDataSlot, pData); } -VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate( - VkDevice device, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - const VkAllocationCallbacks* pAllocator) +VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2( + VkCommandBuffer commandBuffer, + const VkDependencyInfo* pDependencyInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6290,30 +7215,30 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, descriptorUpdateTemplate, pAllocator); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pDependencyInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyDescriptorUpdateTemplate); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPipelineBarrier2); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(descriptorUpdateTemplate); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(descriptorUpdateTemplate); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pDependencyInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPipelineBarrier2Handles, pDependencyInfo); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDependencyInfo* pDependencyInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pDependencyInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, device, descriptorUpdateTemplate, pAllocator); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPipelineBarrier2(commandBuffer, pDependencyInfo_unwrapped); - vulkan_wrappers::DestroyWrappedHandle(descriptorUpdateTemplate); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pDependencyInfo); } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, - VkExternalBufferProperties* pExternalBufferProperties) +VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2( + VkCommandBuffer commandBuffer, + VkPipelineStageFlags2 stage, + VkQueryPool queryPool, + uint32_t query) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6329,27 +7254,29 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pExternalBufferInfo, pExternalBufferProperties); - - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, stage, queryPool, query); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalBufferProperties); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWriteTimestamp2); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pExternalBufferInfo); - EncodeStructPtr(encoder, pExternalBufferProperties); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeFlags64Value(stage); + encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeUInt32Value(query); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWriteTimestamp2Handles, queryPool); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pExternalBufferInfo, pExternalBufferProperties); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWriteTimestamp2(commandBuffer, stage, queryPool, query); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, stage, queryPool, query); } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, - VkExternalFenceProperties* pExternalFenceProperties) +VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2( + VkQueue queue, + uint32_t submitCount, + const VkSubmitInfo2* pSubmits, + VkFence fence) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6365,27 +7292,33 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pExternalFenceInfo, pExternalFenceProperties); + CustomEncoderPreCall::Dispatch(manager, shared_api_call_lock, queue, submitCount, pSubmits, fence); - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkSubmitInfo2* pSubmits_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pSubmits, submitCount, handle_unwrap_memory); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalFenceProperties); + VkResult result = vulkan_wrappers::GetDeviceTable(queue)->QueueSubmit2(queue, submitCount, pSubmits_unwrapped, fence); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueueSubmit2); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pExternalFenceInfo); - EncodeStructPtr(encoder, pExternalFenceProperties); + encoder->EncodeVulkanHandleValue(queue); + encoder->EncodeUInt32Value(submitCount); + EncodeStructArray(encoder, pSubmits, submitCount); + encoder->EncodeVulkanHandleValue(fence); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pExternalFenceInfo, pExternalFenceProperties); + CustomEncoderPostCall::Dispatch(manager, shared_api_call_lock, result, queue, submitCount, pSubmits, fence); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, - VkExternalSemaphoreProperties* pExternalSemaphoreProperties) +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2( + VkCommandBuffer commandBuffer, + const VkCopyBufferInfo2* pCopyBufferInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6401,27 +7334,28 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties); - - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyBufferInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalSemaphoreProperties); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyBuffer2); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pExternalSemaphoreInfo); - EncodeStructPtr(encoder, pExternalSemaphoreProperties); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pCopyBufferInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyBuffer2Handles, pCopyBufferInfo); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyBufferInfo2* pCopyBufferInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyBufferInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyBuffer2(commandBuffer, pCopyBufferInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyBufferInfo); } -VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport( - VkDevice device, - const VkDescriptorSetLayoutCreateInfo* pCreateInfo, - VkDescriptorSetLayoutSupport* pSupport) +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2( + VkCommandBuffer commandBuffer, + const VkCopyImageInfo2* pCopyImageInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6437,34 +7371,28 @@ VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pSupport); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDescriptorSetLayoutCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(device)->GetDescriptorSetLayoutSupport(device, pCreateInfo_unwrapped, pSupport); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyImageInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDescriptorSetLayoutSupport); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyImage2); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pSupport); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pCopyImageInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyImage2Handles, pCopyImageInfo); } - CustomEncoderPostCall::Dispatch(manager, device, pCreateInfo, pSupport); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyImageInfo2* pCopyImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyImage2(commandBuffer, pCopyImageInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyImageInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount( +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2( VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) + const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6480,35 +7408,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyBufferToImageInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawIndirectCount); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyBufferToImage2); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(buffer); - encoder->EncodeUInt64Value(offset); - encoder->EncodeVulkanHandleValue(countBuffer); - encoder->EncodeUInt64Value(countBufferOffset); - encoder->EncodeUInt32Value(maxDrawCount); - encoder->EncodeUInt32Value(stride); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawIndirectCountHandles, buffer, countBuffer); + EncodeStructPtr(encoder, pCopyBufferToImageInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyBufferToImage2Handles, pCopyBufferToImageInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyBufferToImageInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyBufferToImage2(commandBuffer, pCopyBufferToImageInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyBufferToImageInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount( +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2( VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) + const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6524,32 +7445,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyImageToBufferInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawIndexedIndirectCount); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyImageToBuffer2); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(buffer); - encoder->EncodeUInt64Value(offset); - encoder->EncodeVulkanHandleValue(countBuffer); - encoder->EncodeUInt64Value(countBufferOffset); - encoder->EncodeUInt32Value(maxDrawCount); - encoder->EncodeUInt32Value(stride); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawIndexedIndirectCountHandles, buffer, countBuffer); + EncodeStructPtr(encoder, pCopyImageToBufferInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyImageToBuffer2Handles, pCopyImageToBufferInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageToBufferInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyImageToBuffer2(commandBuffer, pCopyImageToBufferInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyImageToBufferInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2( +VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirements( VkDevice device, - const VkRenderPassCreateInfo2* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkRenderPass* pRenderPass) + const VkDeviceBufferMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6565,42 +7483,67 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pRenderPass); + vulkan_wrappers::GetDeviceTable(device)->GetDeviceBufferMemoryRequirements(device, pInfo, pMemoryRequirements); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateRenderPass2(device, pCreateInfo, pAllocator, pRenderPass); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceBufferMemoryRequirements); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pMemoryRequirements); + manager->EndApiCallCapture(); + } - if (result >= 0) + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + +} + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirements( + VkDevice device, + const VkDeviceImageMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pRenderPass, VulkanCaptureManager::GetUniqueId); + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); } else { - omit_output_data = true; + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateRenderPass2); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDeviceImageMemoryRequirements* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(device)->GetDeviceImageMemoryRequirements(device, pInfo_unwrapped, pMemoryRequirements); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceImageMemoryRequirements); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pRenderPass, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pRenderPass, pCreateInfo); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pMemoryRequirements); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pRenderPass); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); } -VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2( - VkCommandBuffer commandBuffer, - const VkRenderPassBeginInfo* pRenderPassBegin, - const VkSubpassBeginInfo* pSubpassBeginInfo) +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements( + VkDevice device, + const VkDeviceImageMemoryRequirements* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6616,30 +7559,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pRenderPassBegin, pSubpassBeginInfo); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginRenderPass2); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDeviceImageMemoryRequirements* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(device)->GetDeviceImageSparseMemoryRequirements(device, pInfo_unwrapped, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceImageSparseMemoryRequirements); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pRenderPassBegin); - EncodeStructPtr(encoder, pSubpassBeginInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginRenderPass2Handles, pRenderPassBegin); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeUInt32Ptr(pSparseMemoryRequirementCount); + EncodeStructArray(encoder, pSparseMemoryRequirements, (pSparseMemoryRequirementCount != nullptr) ? (*pSparseMemoryRequirementCount) : 0); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkRenderPassBeginInfo* pRenderPassBegin_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pRenderPassBegin, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginRenderPass2(commandBuffer, pRenderPassBegin_unwrapped, pSubpassBeginInfo); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pRenderPassBegin, pSubpassBeginInfo); + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); } -VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2( +VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2( VkCommandBuffer commandBuffer, - const VkSubpassBeginInfo* pSubpassBeginInfo, - const VkSubpassEndInfo* pSubpassEndInfo) + VkEvent event, + const VkDependencyInfo* pDependencyInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6655,26 +7599,30 @@ VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, event, pDependencyInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdNextSubpass2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetEvent2); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pSubpassBeginInfo); - EncodeStructPtr(encoder, pSubpassEndInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(event); + EncodeStructPtr(encoder, pDependencyInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdSetEvent2Handles, event, pDependencyInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdNextSubpass2(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDependencyInfo* pDependencyInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pDependencyInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetEvent2(commandBuffer, event, pDependencyInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, event, pDependencyInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2( +VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2( VkCommandBuffer commandBuffer, - const VkSubpassEndInfo* pSubpassEndInfo) + VkEvent event, + VkPipelineStageFlags2 stageMask) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6690,27 +7638,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pSubpassEndInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, event, stageMask); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndRenderPass2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdResetEvent2); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pSubpassEndInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(event); + encoder->EncodeFlags64Value(stageMask); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdResetEvent2Handles, event); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndRenderPass2(commandBuffer, pSubpassEndInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdResetEvent2(commandBuffer, event, stageMask); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pSubpassEndInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, event, stageMask); } -VKAPI_ATTR void VKAPI_CALL vkResetQueryPool( - VkDevice device, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount) +VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2( + VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent* pEvents, + const VkDependencyInfo* pDependencyInfos) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6726,28 +7675,30 @@ VKAPI_ATTR void VKAPI_CALL vkResetQueryPool( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, queryPool, firstQuery, queryCount); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, eventCount, pEvents, pDependencyInfos); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkResetQueryPool); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWaitEvents2); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(queryPool); - encoder->EncodeUInt32Value(firstQuery); - encoder->EncodeUInt32Value(queryCount); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(eventCount); + encoder->EncodeVulkanHandleArray(pEvents, eventCount); + EncodeStructArray(encoder, pDependencyInfos, eventCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWaitEvents2Handles, eventCount, pEvents, pDependencyInfos); } - vulkan_wrappers::GetDeviceTable(device)->ResetQueryPool(device, queryPool, firstQuery, queryCount); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDependencyInfo* pDependencyInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pDependencyInfos, eventCount, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, device, queryPool, firstQuery, queryCount); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWaitEvents2(commandBuffer, eventCount, pEvents, pDependencyInfos_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, eventCount, pEvents, pDependencyInfos); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue( - VkDevice device, - VkSemaphore semaphore, - uint64_t* pValue) +VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2( + VkCommandBuffer commandBuffer, + const VkBlitImageInfo2* pBlitImageInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6763,36 +7714,28 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, semaphore, pValue); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSemaphoreCounterValue(device, semaphore, pValue); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBlitImageInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSemaphoreCounterValue); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBlitImage2); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(semaphore); - encoder->EncodeUInt64Ptr(pValue, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pBlitImageInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBlitImage2Handles, pBlitImageInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, semaphore, pValue); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBlitImageInfo2* pBlitImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBlitImageInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBlitImage2(commandBuffer, pBlitImageInfo_unwrapped); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pBlitImageInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores( - VkDevice device, - const VkSemaphoreWaitInfo* pWaitInfo, - uint64_t timeout) +VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2( + VkCommandBuffer commandBuffer, + const VkResolveImageInfo2* pResolveImageInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6808,32 +7751,28 @@ VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pWaitInfo, timeout); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkSemaphoreWaitInfo* pWaitInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pWaitInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->WaitSemaphores(device, pWaitInfo_unwrapped, timeout); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pResolveImageInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkWaitSemaphores); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdResolveImage2); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pWaitInfo); - encoder->EncodeUInt64Value(timeout); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pResolveImageInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdResolveImage2Handles, pResolveImageInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pWaitInfo, timeout); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkResolveImageInfo2* pResolveImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pResolveImageInfo, handle_unwrap_memory); - return result; + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdResolveImage2(commandBuffer, pResolveImageInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pResolveImageInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore( - VkDevice device, - const VkSemaphoreSignalInfo* pSignalInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdBeginRendering( + VkCommandBuffer commandBuffer, + const VkRenderingInfo* pRenderingInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6849,31 +7788,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pSignalInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkSemaphoreSignalInfo* pSignalInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSignalInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->SignalSemaphore(device, pSignalInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pRenderingInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSignalSemaphore); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginRendering); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pSignalInfo); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pRenderingInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginRenderingHandles, pRenderingInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pSignalInfo); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkRenderingInfo* pRenderingInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pRenderingInfo, handle_unwrap_memory); - return result; + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginRendering(commandBuffer, pRenderingInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pRenderingInfo); } -VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddress( - VkDevice device, - const VkBufferDeviceAddressInfo* pInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering( + VkCommandBuffer commandBuffer) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6889,31 +7824,24 @@ VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddress( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBufferDeviceAddressInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - VkDeviceAddress result = vulkan_wrappers::GetDeviceTable(device)->GetBufferDeviceAddress(device, pInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetBufferDeviceAddress); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndRendering); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeUInt64Value(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndRendering(commandBuffer); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer); } -VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress( - VkDevice device, - const VkBufferDeviceAddressInfo* pInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdSetCullMode( + VkCommandBuffer commandBuffer, + VkCullModeFlags cullMode) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6929,31 +7857,25 @@ VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBufferDeviceAddressInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - uint64_t result = vulkan_wrappers::GetDeviceTable(device)->GetBufferOpaqueCaptureAddress(device, pInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, cullMode); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetBufferOpaqueCaptureAddress); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCullMode); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeUInt64Value(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeFlagsValue(cullMode); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCullMode(commandBuffer, cullMode); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, cullMode); } -VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress( - VkDevice device, - const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFace( + VkCommandBuffer commandBuffer, + VkFrontFace frontFace) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -6969,32 +7891,25 @@ VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - uint64_t result = vulkan_wrappers::GetDeviceTable(device)->GetDeviceMemoryOpaqueCaptureAddress(device, pInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, frontFace); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceMemoryOpaqueCaptureAddress); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetFrontFace); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeUInt64Value(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(frontFace); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetFrontFace(commandBuffer, frontFace); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, frontFace); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolProperties( - VkPhysicalDevice physicalDevice, - uint32_t* pToolCount, - VkPhysicalDeviceToolProperties* pToolProperties) +VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopology( + VkCommandBuffer commandBuffer, + VkPrimitiveTopology primitiveTopology) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7010,37 +7925,26 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolProperties( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pToolCount, pToolProperties); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceToolProperties(physicalDevice, pToolCount, pToolProperties); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, primitiveTopology); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceToolProperties); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPrimitiveTopology); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pToolCount, omit_output_data); - EncodeStructArray(encoder, pToolProperties, (pToolCount != nullptr) ? (*pToolCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(primitiveTopology); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pToolCount, pToolProperties); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPrimitiveTopology(commandBuffer, primitiveTopology); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, primitiveTopology); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlot( - VkDevice device, - const VkPrivateDataSlotCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkPrivateDataSlot* pPrivateDataSlot) +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCount( + VkCommandBuffer commandBuffer, + uint32_t viewportCount, + const VkViewport* pViewports) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7056,42 +7960,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlot( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pPrivateDataSlot); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreatePrivateDataSlot(device, pCreateInfo, pAllocator, pPrivateDataSlot); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pPrivateDataSlot, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, viewportCount, pViewports); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreatePrivateDataSlot); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetViewportWithCount); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pPrivateDataSlot, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pPrivateDataSlot, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(viewportCount); + EncodeStructArray(encoder, pViewports, viewportCount); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pPrivateDataSlot); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetViewportWithCount(commandBuffer, viewportCount, pViewports); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, viewportCount, pViewports); } -VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlot( - VkDevice device, - VkPrivateDataSlot privateDataSlot, - const VkAllocationCallbacks* pAllocator) +VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCount( + VkCommandBuffer commandBuffer, + uint32_t scissorCount, + const VkRect2D* pScissors) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7107,32 +7996,31 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlot( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, privateDataSlot, pAllocator); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, scissorCount, pScissors); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyPrivateDataSlot); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetScissorWithCount); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(privateDataSlot); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(privateDataSlot); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(scissorCount); + EncodeStructArray(encoder, pScissors, scissorCount); + manager->EndCommandApiCallCapture(commandBuffer); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyPrivateDataSlot(device, privateDataSlot, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, privateDataSlot, pAllocator); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetScissorWithCount(commandBuffer, scissorCount, pScissors); - vulkan_wrappers::DestroyWrappedHandle(privateDataSlot); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, scissorCount, pScissors); } -VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateData( - VkDevice device, - VkObjectType objectType, - uint64_t objectHandle, - VkPrivateDataSlot privateDataSlot, - uint64_t data) +VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2( + VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer* pBuffers, + const VkDeviceSize* pOffsets, + const VkDeviceSize* pSizes, + const VkDeviceSize* pStrides) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7148,34 +8036,30 @@ VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateData( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, objectType, objectHandle, privateDataSlot, data); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->SetPrivateData(device, objectType, objectHandle, privateDataSlot, data); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetPrivateData); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindVertexBuffers2); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeEnumValue(objectType); - encoder->EncodeUInt64Value(vulkan_wrappers::GetWrappedId(objectHandle, objectType)); - encoder->EncodeVulkanHandleValue(privateDataSlot); - encoder->EncodeUInt64Value(data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(firstBinding); + encoder->EncodeUInt32Value(bindingCount); + encoder->EncodeVulkanHandleArray(pBuffers, bindingCount); + encoder->EncodeUInt64Array(pOffsets, bindingCount); + encoder->EncodeUInt64Array(pSizes, bindingCount); + encoder->EncodeUInt64Array(pStrides, bindingCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindVertexBuffers2Handles, bindingCount, pBuffers); } - CustomEncoderPostCall::Dispatch(manager, result, device, objectType, objectHandle, privateDataSlot, data); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindVertexBuffers2(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); } -VKAPI_ATTR void VKAPI_CALL vkGetPrivateData( - VkDevice device, - VkObjectType objectType, - uint64_t objectHandle, - VkPrivateDataSlot privateDataSlot, - uint64_t* pData) +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnable( + VkCommandBuffer commandBuffer, + VkBool32 depthTestEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7191,29 +8075,25 @@ VKAPI_ATTR void VKAPI_CALL vkGetPrivateData( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, objectType, objectHandle, privateDataSlot, pData); - - vulkan_wrappers::GetDeviceTable(device)->GetPrivateData(device, objectType, objectHandle, privateDataSlot, pData); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthTestEnable); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPrivateData); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthTestEnable); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeEnumValue(objectType); - encoder->EncodeUInt64Value(vulkan_wrappers::GetWrappedId(objectHandle, objectType)); - encoder->EncodeVulkanHandleValue(privateDataSlot); - encoder->EncodeUInt64Ptr(pData); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(depthTestEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, device, objectType, objectHandle, privateDataSlot, pData); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthTestEnable(commandBuffer, depthTestEnable); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthTestEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2( +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnable( VkCommandBuffer commandBuffer, - VkEvent event, - const VkDependencyInfo* pDependencyInfo) + VkBool32 depthWriteEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7229,30 +8109,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, event, pDependencyInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthWriteEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetEvent2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthWriteEnable); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(event); - EncodeStructPtr(encoder, pDependencyInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdSetEvent2Handles, event, pDependencyInfo); + encoder->EncodeUInt32Value(depthWriteEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDependencyInfo* pDependencyInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pDependencyInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetEvent2(commandBuffer, event, pDependencyInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthWriteEnable(commandBuffer, depthWriteEnable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, event, pDependencyInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthWriteEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2( +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOp( VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags2 stageMask) + VkCompareOp depthCompareOp) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7268,28 +8143,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, event, stageMask); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthCompareOp); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdResetEvent2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthCompareOp); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(event); - encoder->EncodeFlags64Value(stageMask); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdResetEvent2Handles, event); + encoder->EncodeEnumValue(depthCompareOp); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdResetEvent2(commandBuffer, event, stageMask); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthCompareOp(commandBuffer, depthCompareOp); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, event, stageMask); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthCompareOp); } -VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2( +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnable( VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent* pEvents, - const VkDependencyInfo* pDependencyInfos) + VkBool32 depthBoundsTestEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7305,30 +8177,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, eventCount, pEvents, pDependencyInfos); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthBoundsTestEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWaitEvents2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthBoundsTestEnable); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(eventCount); - encoder->EncodeVulkanHandleArray(pEvents, eventCount); - EncodeStructArray(encoder, pDependencyInfos, eventCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWaitEvents2Handles, eventCount, pEvents, pDependencyInfos); + encoder->EncodeUInt32Value(depthBoundsTestEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDependencyInfo* pDependencyInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pDependencyInfos, eventCount, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWaitEvents2(commandBuffer, eventCount, pEvents, pDependencyInfos_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthBoundsTestEnable(commandBuffer, depthBoundsTestEnable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, eventCount, pEvents, pDependencyInfos); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthBoundsTestEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2( +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnable( VkCommandBuffer commandBuffer, - const VkDependencyInfo* pDependencyInfo) + VkBool32 stencilTestEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7344,30 +8211,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pDependencyInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, stencilTestEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPipelineBarrier2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetStencilTestEnable); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pDependencyInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPipelineBarrier2Handles, pDependencyInfo); + encoder->EncodeUInt32Value(stencilTestEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDependencyInfo* pDependencyInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pDependencyInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPipelineBarrier2(commandBuffer, pDependencyInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetStencilTestEnable(commandBuffer, stencilTestEnable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pDependencyInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, stencilTestEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2( +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOp( VkCommandBuffer commandBuffer, - VkPipelineStageFlags2 stage, - VkQueryPool queryPool, - uint32_t query) + VkStencilFaceFlags faceMask, + VkStencilOp failOp, + VkStencilOp passOp, + VkStencilOp depthFailOp, + VkCompareOp compareOp) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7383,29 +8249,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, stage, queryPool, query); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWriteTimestamp2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetStencilOp); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeFlags64Value(stage); - encoder->EncodeVulkanHandleValue(queryPool); - encoder->EncodeUInt32Value(query); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWriteTimestamp2Handles, queryPool); + encoder->EncodeFlagsValue(faceMask); + encoder->EncodeEnumValue(failOp); + encoder->EncodeEnumValue(passOp); + encoder->EncodeEnumValue(depthFailOp); + encoder->EncodeEnumValue(compareOp); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWriteTimestamp2(commandBuffer, stage, queryPool, query); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetStencilOp(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, stage, queryPool, query); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); } -VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2( - VkQueue queue, - uint32_t submitCount, - const VkSubmitInfo2* pSubmits, - VkFence fence) +VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnable( + VkCommandBuffer commandBuffer, + VkBool32 rasterizerDiscardEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7421,33 +8287,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, shared_api_call_lock, queue, submitCount, pSubmits, fence); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkSubmitInfo2* pSubmits_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pSubmits, submitCount, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(queue)->QueueSubmit2(queue, submitCount, pSubmits_unwrapped, fence); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, rasterizerDiscardEnable); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueueSubmit2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRasterizerDiscardEnable); if (encoder) { - encoder->EncodeVulkanHandleValue(queue); - encoder->EncodeUInt32Value(submitCount); - EncodeStructArray(encoder, pSubmits, submitCount); - encoder->EncodeVulkanHandleValue(fence); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(rasterizerDiscardEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, shared_api_call_lock, result, queue, submitCount, pSubmits, fence); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRasterizerDiscardEnable(commandBuffer, rasterizerDiscardEnable); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, rasterizerDiscardEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2( +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnable( VkCommandBuffer commandBuffer, - const VkCopyBufferInfo2* pCopyBufferInfo) + VkBool32 depthBiasEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7463,28 +8321,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyBufferInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthBiasEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyBuffer2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthBiasEnable); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pCopyBufferInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyBuffer2Handles, pCopyBufferInfo); + encoder->EncodeUInt32Value(depthBiasEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyBufferInfo2* pCopyBufferInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyBufferInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyBuffer2(commandBuffer, pCopyBufferInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthBiasEnable(commandBuffer, depthBiasEnable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyBufferInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthBiasEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2( +VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnable( VkCommandBuffer commandBuffer, - const VkCopyImageInfo2* pCopyImageInfo) + VkBool32 primitiveRestartEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7500,28 +8355,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyImageInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, primitiveRestartEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyImage2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPrimitiveRestartEnable); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pCopyImageInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyImage2Handles, pCopyImageInfo); + encoder->EncodeUInt32Value(primitiveRestartEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyImageInfo2* pCopyImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyImage2(commandBuffer, pCopyImageInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPrimitiveRestartEnable(commandBuffer, primitiveRestartEnable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyImageInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, primitiveRestartEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2( - VkCommandBuffer commandBuffer, - const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2( + VkDevice device, + const VkMemoryMapInfo* pMemoryMapInfo, + void** ppData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7537,28 +8390,38 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyBufferToImageInfo); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyBufferToImage2); + CustomEncoderPreCall::Dispatch(manager, device, pMemoryMapInfo, ppData); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkMemoryMapInfo* pMemoryMapInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pMemoryMapInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->MapMemory2(device, pMemoryMapInfo_unwrapped, ppData); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkMapMemory2); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pCopyBufferToImageInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyBufferToImage2Handles, pCopyBufferToImageInfo); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pMemoryMapInfo); + encoder->EncodeVoidPtrPtr(ppData, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyBufferToImageInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyBufferToImage2(commandBuffer, pCopyBufferToImageInfo_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, device, pMemoryMapInfo, ppData); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyBufferToImageInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2( - VkCommandBuffer commandBuffer, - const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2( + VkDevice device, + const VkMemoryUnmapInfo* pMemoryUnmapInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7574,28 +8437,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyImageToBufferInfo); + CustomEncoderPreCall::Dispatch(manager, device, pMemoryUnmapInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyImageToBuffer2); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkMemoryUnmapInfo* pMemoryUnmapInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pMemoryUnmapInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->UnmapMemory2(device, pMemoryUnmapInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkUnmapMemory2); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pCopyImageToBufferInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyImageToBuffer2Handles, pCopyImageToBufferInfo); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pMemoryUnmapInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageToBufferInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyImageToBuffer2(commandBuffer, pCopyImageToBufferInfo_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, device, pMemoryUnmapInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyImageToBufferInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2( - VkCommandBuffer commandBuffer, - const VkBlitImageInfo2* pBlitImageInfo) +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayout( + VkDevice device, + const VkDeviceImageSubresourceInfo* pInfo, + VkSubresourceLayout2* pLayout) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7611,28 +8478,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBlitImageInfo); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pLayout); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBlitImage2); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDeviceImageSubresourceInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(device)->GetDeviceImageSubresourceLayout(device, pInfo_unwrapped, pLayout); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceImageSubresourceLayout); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pBlitImageInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBlitImage2Handles, pBlitImageInfo); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pLayout); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBlitImageInfo2* pBlitImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBlitImageInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBlitImage2(commandBuffer, pBlitImageInfo_unwrapped); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pBlitImageInfo); + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pLayout); } -VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2( - VkCommandBuffer commandBuffer, - const VkResolveImageInfo2* pResolveImageInfo) +VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2( + VkDevice device, + VkImage image, + const VkImageSubresource2* pSubresource, + VkSubresourceLayout2* pLayout) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7648,28 +8518,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pResolveImageInfo); + CustomEncoderPreCall::Dispatch(manager, device, image, pSubresource, pLayout); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdResolveImage2); + vulkan_wrappers::GetDeviceTable(device)->GetImageSubresourceLayout2(device, image, pSubresource, pLayout); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageSubresourceLayout2); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pResolveImageInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdResolveImage2Handles, pResolveImageInfo); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(image); + EncodeStructPtr(encoder, pSubresource); + EncodeStructPtr(encoder, pLayout); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkResolveImageInfo2* pResolveImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pResolveImageInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdResolveImage2(commandBuffer, pResolveImageInfo_unwrapped); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pResolveImageInfo); + CustomEncoderPostCall::Dispatch(manager, device, image, pSubresource, pLayout); } -VKAPI_ATTR void VKAPI_CALL vkCmdBeginRendering( - VkCommandBuffer commandBuffer, - const VkRenderingInfo* pRenderingInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImage( + VkDevice device, + const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7685,27 +8554,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBeginRendering( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pRenderingInfo); + CustomEncoderPreCall::Dispatch(manager, device, pCopyMemoryToImageInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginRendering); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyMemoryToImageInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyMemoryToImage(device, pCopyMemoryToImageInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyMemoryToImage); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pRenderingInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginRenderingHandles, pRenderingInfo); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCopyMemoryToImageInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkRenderingInfo* pRenderingInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pRenderingInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginRendering(commandBuffer, pRenderingInfo_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, device, pCopyMemoryToImageInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pRenderingInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering( - VkCommandBuffer commandBuffer) +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemory( + VkDevice device, + const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7721,24 +8594,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer); + CustomEncoderPreCall::Dispatch(manager, device, pCopyImageToMemoryInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndRendering); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageToMemoryInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyImageToMemory(device, pCopyImageToMemoryInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyImageToMemory); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCopyImageToMemoryInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndRendering(commandBuffer); + CustomEncoderPostCall::Dispatch(manager, result, device, pCopyImageToMemoryInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetCullMode( - VkCommandBuffer commandBuffer, - VkCullModeFlags cullMode) +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImage( + VkDevice device, + const VkCopyImageToImageInfo* pCopyImageToImageInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7754,25 +8634,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetCullMode( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, cullMode); + CustomEncoderPreCall::Dispatch(manager, device, pCopyImageToImageInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCullMode); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyImageToImageInfo* pCopyImageToImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageToImageInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyImageToImage(device, pCopyImageToImageInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyImageToImage); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeFlagsValue(cullMode); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCopyImageToImageInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCullMode(commandBuffer, cullMode); + CustomEncoderPostCall::Dispatch(manager, result, device, pCopyImageToImageInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, cullMode); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFace( - VkCommandBuffer commandBuffer, - VkFrontFace frontFace) +VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayout( + VkDevice device, + uint32_t transitionCount, + const VkHostImageLayoutTransitionInfo* pTransitions) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7788,25 +8675,36 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFace( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, frontFace); + CustomEncoderPreCall::Dispatch(manager, device, transitionCount, pTransitions); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetFrontFace); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkHostImageLayoutTransitionInfo* pTransitions_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pTransitions, transitionCount, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->TransitionImageLayout(device, transitionCount, pTransitions_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkTransitionImageLayout); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(frontFace); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeUInt32Value(transitionCount); + EncodeStructArray(encoder, pTransitions, transitionCount); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetFrontFace(commandBuffer, frontFace); + CustomEncoderPostCall::Dispatch(manager, result, device, transitionCount, pTransitions); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, frontFace); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopology( +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet( VkCommandBuffer commandBuffer, - VkPrimitiveTopology primitiveTopology) + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const VkWriteDescriptorSet* pDescriptorWrites) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7822,26 +8720,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopology( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, primitiveTopology); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPrimitiveTopology); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPushDescriptorSet); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(primitiveTopology); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeEnumValue(pipelineBindPoint); + encoder->EncodeVulkanHandleValue(layout); + encoder->EncodeUInt32Value(set); + encoder->EncodeUInt32Value(descriptorWriteCount); + EncodeStructArray(encoder, pDescriptorWrites, descriptorWriteCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPushDescriptorSetHandles, layout, descriptorWriteCount, pDescriptorWrites); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPrimitiveTopology(commandBuffer, primitiveTopology); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkWriteDescriptorSet* pDescriptorWrites_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pDescriptorWrites, descriptorWriteCount, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, primitiveTopology); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPushDescriptorSet(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCount( +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2( VkCommandBuffer commandBuffer, - uint32_t viewportCount, - const VkViewport* pViewports) + const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7857,27 +8761,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCount( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, viewportCount, pViewports); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBindDescriptorSetsInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetViewportWithCount); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindDescriptorSets2); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(viewportCount); - EncodeStructArray(encoder, pViewports, viewportCount); - manager->EndCommandApiCallCapture(commandBuffer); + EncodeStructPtr(encoder, pBindDescriptorSetsInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindDescriptorSets2Handles, pBindDescriptorSetsInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetViewportWithCount(commandBuffer, viewportCount, pViewports); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBindDescriptorSetsInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, viewportCount, pViewports); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindDescriptorSets2(commandBuffer, pBindDescriptorSetsInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pBindDescriptorSetsInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCount( +VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2( VkCommandBuffer commandBuffer, - uint32_t scissorCount, - const VkRect2D* pScissors) + const VkPushConstantsInfo* pPushConstantsInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7893,31 +8798,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCount( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, scissorCount, pScissors); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pPushConstantsInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetScissorWithCount); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPushConstants2); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(scissorCount); - EncodeStructArray(encoder, pScissors, scissorCount); - manager->EndCommandApiCallCapture(commandBuffer); + EncodeStructPtr(encoder, pPushConstantsInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPushConstants2Handles, pPushConstantsInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetScissorWithCount(commandBuffer, scissorCount, pScissors); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkPushConstantsInfo* pPushConstantsInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPushConstantsInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, scissorCount, pScissors); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPushConstants2(commandBuffer, pPushConstantsInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pPushConstantsInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2( +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2( VkCommandBuffer commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - const VkBuffer* pBuffers, - const VkDeviceSize* pOffsets, - const VkDeviceSize* pSizes, - const VkDeviceSize* pStrides) + const VkPushDescriptorSetInfo* pPushDescriptorSetInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7933,30 +8835,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pPushDescriptorSetInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindVertexBuffers2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPushDescriptorSet2); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstBinding); - encoder->EncodeUInt32Value(bindingCount); - encoder->EncodeVulkanHandleArray(pBuffers, bindingCount); - encoder->EncodeUInt64Array(pOffsets, bindingCount); - encoder->EncodeUInt64Array(pSizes, bindingCount); - encoder->EncodeUInt64Array(pStrides, bindingCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindVertexBuffers2Handles, bindingCount, pBuffers); + EncodeStructPtr(encoder, pPushDescriptorSetInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPushDescriptorSet2Handles, pPushDescriptorSetInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindVertexBuffers2(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkPushDescriptorSetInfo* pPushDescriptorSetInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPushDescriptorSetInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPushDescriptorSet2(commandBuffer, pPushDescriptorSetInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pPushDescriptorSetInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnable( +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStipple( VkCommandBuffer commandBuffer, - VkBool32 depthTestEnable) + uint32_t lineStippleFactor, + uint16_t lineStipplePattern) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -7972,25 +8873,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnable( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthTestEnable); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, lineStippleFactor, lineStipplePattern); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthTestEnable); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetLineStipple); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(depthTestEnable); + encoder->EncodeUInt32Value(lineStippleFactor); + encoder->EncodeUInt16Value(lineStipplePattern); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthTestEnable(commandBuffer, depthTestEnable); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetLineStipple(commandBuffer, lineStippleFactor, lineStipplePattern); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthTestEnable); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, lineStippleFactor, lineStipplePattern); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnable( +VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2( VkCommandBuffer commandBuffer, - VkBool32 depthWriteEnable) + VkBuffer buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8006,25 +8911,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnable( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthWriteEnable); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, size, indexType); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthWriteEnable); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindIndexBuffer2); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(depthWriteEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(buffer); + encoder->EncodeUInt64Value(offset); + encoder->EncodeUInt64Value(size); + encoder->EncodeEnumValue(indexType); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindIndexBuffer2Handles, buffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthWriteEnable(commandBuffer, depthWriteEnable); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindIndexBuffer2(commandBuffer, buffer, offset, size, indexType); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthWriteEnable); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, size, indexType); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOp( - VkCommandBuffer commandBuffer, - VkCompareOp depthCompareOp) +VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularity( + VkDevice device, + const VkRenderingAreaInfo* pRenderingAreaInfo, + VkExtent2D* pGranularity) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8040,25 +8949,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOp( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthCompareOp); + CustomEncoderPreCall::Dispatch(manager, device, pRenderingAreaInfo, pGranularity); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthCompareOp); + vulkan_wrappers::GetDeviceTable(device)->GetRenderingAreaGranularity(device, pRenderingAreaInfo, pGranularity); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetRenderingAreaGranularity); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(depthCompareOp); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pRenderingAreaInfo); + EncodeStructPtr(encoder, pGranularity); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthCompareOp(commandBuffer, depthCompareOp); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthCompareOp); + CustomEncoderPostCall::Dispatch(manager, device, pRenderingAreaInfo, pGranularity); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnable( +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocations( VkCommandBuffer commandBuffer, - VkBool32 depthBoundsTestEnable) + const VkRenderingAttachmentLocationInfo* pLocationInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8074,25 +8984,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnable( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthBoundsTestEnable); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pLocationInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthBoundsTestEnable); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRenderingAttachmentLocations); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(depthBoundsTestEnable); + EncodeStructPtr(encoder, pLocationInfo); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthBoundsTestEnable(commandBuffer, depthBoundsTestEnable); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRenderingAttachmentLocations(commandBuffer, pLocationInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthBoundsTestEnable); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pLocationInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnable( +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndices( VkCommandBuffer commandBuffer, - VkBool32 stencilTestEnable) + const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8108,29 +9018,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnable( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, stencilTestEnable); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pInputAttachmentIndexInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetStencilTestEnable); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRenderingInputAttachmentIndices); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(stencilTestEnable); + EncodeStructPtr(encoder, pInputAttachmentIndexInfo); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetStencilTestEnable(commandBuffer, stencilTestEnable); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRenderingInputAttachmentIndices(commandBuffer, pInputAttachmentIndexInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, stencilTestEnable); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pInputAttachmentIndexInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOp( - VkCommandBuffer commandBuffer, - VkStencilFaceFlags faceMask, - VkStencilOp failOp, - VkStencilOp passOp, - VkStencilOp depthFailOp, - VkCompareOp compareOp) +VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR( + VkInstance instance, + VkSurfaceKHR surface, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8146,29 +9053,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOp( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); + CustomEncoderPreCall::Dispatch(manager, instance, surface, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetStencilOp); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroySurfaceKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeFlagsValue(faceMask); - encoder->EncodeEnumValue(failOp); - encoder->EncodeEnumValue(passOp); - encoder->EncodeEnumValue(depthFailOp); - encoder->EncodeEnumValue(compareOp); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(instance); + encoder->EncodeVulkanHandleValue(surface); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(surface); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetStencilOp(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetInstanceTable(instance)->DestroySurfaceKHR(instance, surface, pAllocator); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); + CustomEncoderPostCall::Dispatch(manager, instance, surface, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(surface); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnable( - VkCommandBuffer commandBuffer, - VkBool32 rasterizerDiscardEnable) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + VkSurfaceKHR surface, + VkBool32* pSupported) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8184,25 +9093,37 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnable( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, rasterizerDiscardEnable); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRasterizerDiscardEnable); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, surface, pSupported); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfaceSupportKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(rasterizerDiscardEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Value(queueFamilyIndex); + encoder->EncodeVulkanHandleValue(surface); + encoder->EncodeUInt32Ptr(pSupported, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRasterizerDiscardEnable(commandBuffer, rasterizerDiscardEnable); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, surface, pSupported); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, rasterizerDiscardEnable); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnable( - VkCommandBuffer commandBuffer, - VkBool32 depthBiasEnable) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8218,25 +9139,37 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnable( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthBiasEnable); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthBiasEnable); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, surface, pSurfaceCapabilities); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfaceCapabilitiesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(depthBiasEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeVulkanHandleValue(surface); + EncodeStructPtr(encoder, pSurfaceCapabilities, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthBiasEnable(commandBuffer, depthBiasEnable); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, surface, pSurfaceCapabilities); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthBiasEnable); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnable( - VkCommandBuffer commandBuffer, - VkBool32 primitiveRestartEnable) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormatKHR* pSurfaceFormats) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8252,26 +9185,38 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnable( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, primitiveRestartEnable); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPrimitiveRestartEnable); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfaceFormatsKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(primitiveRestartEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeVulkanHandleValue(surface); + encoder->EncodeUInt32Ptr(pSurfaceFormatCount, omit_output_data); + EncodeStructArray(encoder, pSurfaceFormats, (pSurfaceFormatCount != nullptr) ? (*pSurfaceFormatCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPrimitiveRestartEnable(commandBuffer, primitiveRestartEnable); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, primitiveRestartEnable); + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirements( - VkDevice device, - const VkDeviceBufferMemoryRequirements* pInfo, - VkMemoryRequirements2* pMemoryRequirements) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8287,27 +9232,38 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirements( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + bool omit_output_data = false; - vulkan_wrappers::GetDeviceTable(device)->GetDeviceBufferMemoryRequirements(device, pInfo, pMemoryRequirements); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, surface, pPresentModeCount, pPresentModes); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceBufferMemoryRequirements); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfacePresentModesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - EncodeStructPtr(encoder, pMemoryRequirements); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeVulkanHandleValue(surface); + encoder->EncodeUInt32Ptr(pPresentModeCount, omit_output_data); + encoder->EncodeEnumArray(pPresentModes, (pPresentModeCount != nullptr) ? (*pPresentModeCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, surface, pPresentModeCount, pPresentModes); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirements( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR( VkDevice device, - const VkDeviceImageMemoryRequirements* pInfo, - VkMemoryRequirements2* pMemoryRequirements) + const VkSwapchainCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSwapchainKHR* pSwapchain) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8323,31 +9279,45 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirements( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + bool omit_output_data = false; + + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pSwapchain); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDeviceImageMemoryRequirements* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + const VkSwapchainCreateInfoKHR* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - vulkan_wrappers::GetDeviceTable(device)->GetDeviceImageMemoryRequirements(device, pInfo_unwrapped, pMemoryRequirements); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateSwapchainKHR(device, pCreateInfo_unwrapped, pAllocator, pSwapchain); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceImageMemoryRequirements); + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pSwapchain, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateSwapchainKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - EncodeStructPtr(encoder, pMemoryRequirements); - manager->EndApiCallCapture(); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pSwapchain, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pSwapchain, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pSwapchain); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements( +VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR( VkDevice device, - const VkDeviceImageMemoryRequirements* pInfo, - uint32_t* pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) + VkSwapchainKHR swapchain, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8363,31 +9333,31 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDeviceImageMemoryRequirements* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(device)->GetDeviceImageSparseMemoryRequirements(device, pInfo_unwrapped, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + CustomEncoderPreCall::Dispatch(manager, device, swapchain, pAllocator); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceImageSparseMemoryRequirements); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroySwapchainKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeUInt32Ptr(pSparseMemoryRequirementCount); - EncodeStructArray(encoder, pSparseMemoryRequirements, (pSparseMemoryRequirementCount != nullptr) ? (*pSparseMemoryRequirementCount) : 0); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(swapchain); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(swapchain); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroySwapchainKHR(device, swapchain, pAllocator); + + CustomEncoderPostCall::Dispatch(manager, device, swapchain, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(swapchain); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStipple( - VkCommandBuffer commandBuffer, - uint32_t lineStippleFactor, - uint16_t lineStipplePattern) +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR( + VkDevice device, + VkSwapchainKHR swapchain, + uint32_t* pSwapchainImageCount, + VkImage* pSwapchainImages) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8403,27 +9373,45 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStipple( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, lineStippleFactor, lineStipplePattern); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetLineStipple); + CustomEncoderPreCall::Dispatch(manager, device, swapchain, pSwapchainImageCount, pSwapchainImages); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandles(device, swapchain, pSwapchainImages, (pSwapchainImageCount != nullptr) ? (*pSwapchainImageCount) : 0, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetSwapchainImagesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(lineStippleFactor); - encoder->EncodeUInt16Value(lineStipplePattern); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(swapchain); + encoder->EncodeUInt32Ptr(pSwapchainImageCount, omit_output_data); + encoder->EncodeVulkanHandleArray(pSwapchainImages, (pSwapchainImageCount != nullptr) ? (*pSwapchainImageCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndGroupCreateApiCallCapture(result, device, swapchain, (pSwapchainImageCount != nullptr) ? (*pSwapchainImageCount) : 0, pSwapchainImages, nullptr); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetLineStipple(commandBuffer, lineStippleFactor, lineStipplePattern); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, pSwapchainImageCount, pSwapchainImages); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, lineStippleFactor, lineStipplePattern); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2( +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR( VkDevice device, - const VkMemoryMapInfo* pMemoryMapInfo, - void** ppData) + VkSwapchainKHR swapchain, + uint64_t timeout, + VkSemaphore semaphore, + VkFence fence, + uint32_t* pImageIndex) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8441,36 +9429,36 @@ VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pMemoryMapInfo, ppData); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkMemoryMapInfo* pMemoryMapInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pMemoryMapInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, swapchain, timeout, semaphore, fence, pImageIndex); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->MapMemory2(device, pMemoryMapInfo_unwrapped, ppData); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->AcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkMapMemory2); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAcquireNextImageKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pMemoryMapInfo); - encoder->EncodeVoidPtrPtr(ppData, omit_output_data); + encoder->EncodeVulkanHandleValue(swapchain); + encoder->EncodeUInt64Value(timeout); + encoder->EncodeVulkanHandleValue(semaphore); + encoder->EncodeVulkanHandleValue(fence); + encoder->EncodeUInt32Ptr(pImageIndex, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pMemoryMapInfo, ppData); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, timeout, semaphore, fence, pImageIndex); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2( - VkDevice device, - const VkMemoryUnmapInfo* pMemoryUnmapInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR( + VkQueue queue, + const VkPresentInfoKHR* pPresentInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8486,34 +9474,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pMemoryUnmapInfo); + CustomEncoderPreCall::Dispatch(manager, queue, pPresentInfo); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkMemoryUnmapInfo* pMemoryUnmapInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pMemoryUnmapInfo, handle_unwrap_memory); + const VkPresentInfoKHR* pPresentInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPresentInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->UnmapMemory2(device, pMemoryUnmapInfo_unwrapped); + VkResult result = vulkan_wrappers::GetDeviceTable(queue)->QueuePresentKHR(queue, pPresentInfo_unwrapped); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkUnmapMemory2); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueuePresentKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pMemoryUnmapInfo); + encoder->EncodeVulkanHandleValue(queue); + EncodeStructPtr(encoder, pPresentInfo); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pMemoryUnmapInfo); + CustomEncoderPostCall::Dispatch(manager, shared_api_call_lock, result, queue, pPresentInfo); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkDeviceSize size, - VkIndexType indexType) +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHR( + VkDevice device, + VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8529,29 +9514,35 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, size, indexType); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindIndexBuffer2); + CustomEncoderPreCall::Dispatch(manager, device, pDeviceGroupPresentCapabilities); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceGroupPresentCapabilitiesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(buffer); - encoder->EncodeUInt64Value(offset); - encoder->EncodeUInt64Value(size); - encoder->EncodeEnumValue(indexType); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindIndexBuffer2Handles, buffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pDeviceGroupPresentCapabilities, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindIndexBuffer2(commandBuffer, buffer, offset, size, indexType); + CustomEncoderPostCall::Dispatch(manager, result, device, pDeviceGroupPresentCapabilities); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, size, indexType); + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularity( +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR( VkDevice device, - const VkRenderingAreaInfo* pRenderingAreaInfo, - VkExtent2D* pGranularity) + VkSurfaceKHR surface, + VkDeviceGroupPresentModeFlagsKHR* pModes) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8567,27 +9558,37 @@ VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularity( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pRenderingAreaInfo, pGranularity); + bool omit_output_data = false; - vulkan_wrappers::GetDeviceTable(device)->GetRenderingAreaGranularity(device, pRenderingAreaInfo, pGranularity); + CustomEncoderPreCall::Dispatch(manager, device, surface, pModes); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetRenderingAreaGranularity); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetDeviceGroupSurfacePresentModesKHR(device, surface, pModes); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceGroupSurfacePresentModesKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pRenderingAreaInfo); - EncodeStructPtr(encoder, pGranularity); + encoder->EncodeVulkanHandleValue(surface); + encoder->EncodeFlagsPtr(pModes, omit_output_data); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, pRenderingAreaInfo, pGranularity); + CustomEncoderPostCall::Dispatch(manager, result, device, surface, pModes); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayout( - VkDevice device, - const VkDeviceImageSubresourceInfo* pInfo, - VkSubresourceLayout2* pLayout) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pRectCount, + VkRect2D* pRects) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8603,31 +9604,37 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayout( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pLayout); + bool omit_output_data = false; - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDeviceImageSubresourceInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, surface, pRectCount, pRects); - vulkan_wrappers::GetDeviceTable(device)->GetDeviceImageSubresourceLayout(device, pInfo_unwrapped, pLayout); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects); + if (result < 0) + { + omit_output_data = true; + } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceImageSubresourceLayout); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDevicePresentRectanglesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - EncodeStructPtr(encoder, pLayout); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeVulkanHandleValue(surface); + encoder->EncodeUInt32Ptr(pRectCount, omit_output_data); + EncodeStructArray(encoder, pRects, (pRectCount != nullptr) ? (*pRectCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pLayout); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, surface, pRectCount, pRects); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2( +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHR( VkDevice device, - VkImage image, - const VkImageSubresource2* pSubresource, - VkSubresourceLayout2* pLayout) + const VkAcquireNextImageInfoKHR* pAcquireInfo, + uint32_t* pImageIndex) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8643,31 +9650,39 @@ VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, image, pSubresource, pLayout); + bool omit_output_data = false; - vulkan_wrappers::GetDeviceTable(device)->GetImageSubresourceLayout2(device, image, pSubresource, pLayout); + CustomEncoderPreCall::Dispatch(manager, device, pAcquireInfo, pImageIndex); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageSubresourceLayout2); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkAcquireNextImageInfoKHR* pAcquireInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pAcquireInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->AcquireNextImage2KHR(device, pAcquireInfo_unwrapped, pImageIndex); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAcquireNextImage2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(image); - EncodeStructPtr(encoder, pSubresource); - EncodeStructPtr(encoder, pLayout); + EncodeStructPtr(encoder, pAcquireInfo); + encoder->EncodeUInt32Ptr(pImageIndex, omit_output_data); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, image, pSubresource, pLayout); + CustomEncoderPostCall::Dispatch(manager, result, device, pAcquireInfo, pImageIndex); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet( - VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipelineLayout layout, - uint32_t set, - uint32_t descriptorWriteCount, - const VkWriteDescriptorSet* pDescriptorWrites) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPropertiesKHR* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8683,32 +9698,41 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPushDescriptorSet); - if (encoder) + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPropertyCount, pProperties); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties); + + if (result >= 0) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(pipelineBindPoint); - encoder->EncodeVulkanHandleValue(layout); - encoder->EncodeUInt32Value(set); - encoder->EncodeUInt32Value(descriptorWriteCount); - EncodeStructArray(encoder, pDescriptorWrites, descriptorWriteCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPushDescriptorSetHandles, layout, descriptorWriteCount, pDescriptorWrites); + vulkan_wrappers::CreateWrappedStructArrayHandles(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkWriteDescriptorSet* pDescriptorWrites_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pDescriptorWrites, descriptorWriteCount, handle_unwrap_memory); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceDisplayPropertiesKHR); + if (encoder) + { + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); + EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndStructGroupCreateApiCallCapture(result, physicalDevice, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, pProperties, [](VkDisplayPropertiesKHR* handle_struct)->vulkan_wrappers::DisplayKHRWrapper* { return vulkan_wrappers::GetWrapper(handle_struct->display); }); + } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPushDescriptorSet(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pPropertyCount, pProperties); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocations( - VkCommandBuffer commandBuffer, - const VkRenderingAttachmentLocationInfo* pLocationInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPlanePropertiesKHR* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8724,25 +9748,42 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocations( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pLocationInfo); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRenderingAttachmentLocations); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPropertyCount, pProperties); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedStructArrayHandles(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceDisplayPlanePropertiesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pLocationInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); + EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndStructGroupCreateApiCallCapture(result, physicalDevice, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, pProperties, [](VkDisplayPlanePropertiesKHR* handle_struct)->vulkan_wrappers::DisplayKHRWrapper* { return vulkan_wrappers::GetWrapper(handle_struct->currentDisplay); }); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRenderingAttachmentLocations(commandBuffer, pLocationInfo); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pPropertyCount, pProperties); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pLocationInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndices( - VkCommandBuffer commandBuffer, - const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR( + VkPhysicalDevice physicalDevice, + uint32_t planeIndex, + uint32_t* pDisplayCount, + VkDisplayKHR* pDisplays) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8758,25 +9799,43 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndices( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pInputAttachmentIndexInfo); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRenderingInputAttachmentIndices); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, planeIndex, pDisplayCount, pDisplays); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, pDisplayCount, pDisplays); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandles(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, pDisplays, (pDisplayCount != nullptr) ? (*pDisplayCount) : 0, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetDisplayPlaneSupportedDisplaysKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pInputAttachmentIndexInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Value(planeIndex); + encoder->EncodeUInt32Ptr(pDisplayCount, omit_output_data); + encoder->EncodeVulkanHandleArray(pDisplays, (pDisplayCount != nullptr) ? (*pDisplayCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndGroupCreateApiCallCapture(result, physicalDevice, nullptr, (pDisplayCount != nullptr) ? (*pDisplayCount) : 0, pDisplays, nullptr); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRenderingInputAttachmentIndices(commandBuffer, pInputAttachmentIndexInfo); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, planeIndex, pDisplayCount, pDisplays); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pInputAttachmentIndexInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2( - VkCommandBuffer commandBuffer, - const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + uint32_t* pPropertyCount, + VkDisplayModePropertiesKHR* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8792,28 +9851,44 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBindDescriptorSetsInfo); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindDescriptorSets2); - if (encoder) + CustomEncoderPreCall::Dispatch(manager, physicalDevice, display, pPropertyCount, pProperties); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties); + + if (result >= 0) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pBindDescriptorSetsInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindDescriptorSets2Handles, pBindDescriptorSetsInfo); + vulkan_wrappers::CreateWrappedStructArrayHandles(physicalDevice, display, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBindDescriptorSetsInfo, handle_unwrap_memory); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetDisplayModePropertiesKHR); + if (encoder) + { + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeVulkanHandleValue(display); + encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); + EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndStructGroupCreateApiCallCapture(result, physicalDevice, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, pProperties, [](VkDisplayModePropertiesKHR* handle_struct)->vulkan_wrappers::DisplayModeKHRWrapper* { return vulkan_wrappers::GetWrapper(handle_struct->displayMode); }); + } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindDescriptorSets2(commandBuffer, pBindDescriptorSetsInfo_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, display, pPropertyCount, pProperties); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pBindDescriptorSetsInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2( - VkCommandBuffer commandBuffer, - const VkPushConstantsInfo* pPushConstantsInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + const VkDisplayModeCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDisplayModeKHR* pMode) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8826,31 +9901,47 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2( } else { - shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + bool omit_output_data = false; + + CustomEncoderPreCall::Dispatch(manager, physicalDevice, display, pCreateInfo, pAllocator, pMode); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->CreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(physicalDevice, display, pMode, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pPushConstantsInfo); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPushConstants2); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDisplayModeKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pPushConstantsInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPushConstants2Handles, pPushConstantsInfo); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeVulkanHandleValue(display); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pMode, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, physicalDevice, pMode, pCreateInfo); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPushConstantsInfo* pPushConstantsInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPushConstantsInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPushConstants2(commandBuffer, pPushConstantsInfo_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, display, pCreateInfo, pAllocator, pMode); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pPushConstantsInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2( - VkCommandBuffer commandBuffer, - const VkPushDescriptorSetInfo* pPushDescriptorSetInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + VkDisplayModeKHR mode, + uint32_t planeIndex, + VkDisplayPlaneCapabilitiesKHR* pCapabilities) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8866,28 +9957,38 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pPushDescriptorSetInfo); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPushDescriptorSet2); - if (encoder) + CustomEncoderPreCall::Dispatch(manager, physicalDevice, mode, planeIndex, pCapabilities); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities); + if (result < 0) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pPushDescriptorSetInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPushDescriptorSet2Handles, pPushDescriptorSetInfo); + omit_output_data = true; } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPushDescriptorSetInfo* pPushDescriptorSetInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPushDescriptorSetInfo, handle_unwrap_memory); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDisplayPlaneCapabilitiesKHR); + if (encoder) + { + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeVulkanHandleValue(mode); + encoder->EncodeUInt32Value(planeIndex); + EncodeStructPtr(encoder, pCapabilities, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); + } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPushDescriptorSet2(commandBuffer, pPushDescriptorSetInfo_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, mode, planeIndex, pCapabilities); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pPushDescriptorSetInfo); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImage( - VkDevice device, - const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR( + VkInstance instance, + const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8903,31 +10004,47 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImage( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pCopyMemoryToImageInfo); + bool omit_output_data = false; + + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyMemoryToImageInfo, handle_unwrap_memory); + const VkDisplaySurfaceCreateInfoKHR* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyMemoryToImage(device, pCopyMemoryToImageInfo_unwrapped); + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateDisplayPlaneSurfaceKHR(instance, pCreateInfo_unwrapped, pAllocator, pSurface); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyMemoryToImage); + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDisplayPlaneSurfaceKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCopyMemoryToImageInfo); + encoder->EncodeVulkanHandleValue(instance); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCopyMemoryToImageInfo); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemory( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR( VkDevice device, - const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo) + uint32_t swapchainCount, + const VkSwapchainCreateInfoKHR* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkSwapchainKHR* pSwapchains) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8943,31 +10060,47 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemory( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pCopyImageToMemoryInfo); + bool omit_output_data = false; + + CustomEncoderPreCall::Dispatch(manager, device, swapchainCount, pCreateInfos, pAllocator, pSwapchains); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageToMemoryInfo, handle_unwrap_memory); + const VkSwapchainCreateInfoKHR* pCreateInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pCreateInfos, swapchainCount, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyImageToMemory(device, pCopyImageToMemoryInfo_unwrapped); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos_unwrapped, pAllocator, pSwapchains); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyImageToMemory); + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandles(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pSwapchains, swapchainCount, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateSharedSwapchainsKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCopyImageToMemoryInfo); + encoder->EncodeUInt32Value(swapchainCount); + EncodeStructArray(encoder, pCreateInfos, swapchainCount); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandleArray(pSwapchains, swapchainCount, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndGroupCreateApiCallCapture(result, device, nullptr, swapchainCount, pSwapchains, pCreateInfos); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCopyImageToMemoryInfo); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchainCount, pCreateInfos, pAllocator, pSwapchains); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImage( - VkDevice device, - const VkCopyImageToImageInfo* pCopyImageToImageInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR( + VkInstance instance, + const VkXlibSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -8983,32 +10116,43 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImage( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pCopyImageToImageInfo); + bool omit_output_data = false; - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyImageToImageInfo* pCopyImageToImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageToImageInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyImageToImage(device, pCopyImageToImageInfo_unwrapped); + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyImageToImage); + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateXlibSurfaceKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCopyImageToImageInfo); + encoder->EncodeVulkanHandleValue(instance); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCopyImageToImageInfo); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayout( - VkDevice device, - uint32_t transitionCount, - const VkHostImageLayoutTransitionInfo* pTransitions) +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + Display* dpy, + VisualID visualID) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9024,33 +10168,32 @@ VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayout( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, transitionCount, pTransitions); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkHostImageLayoutTransitionInfo* pTransitions_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pTransitions, transitionCount, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, dpy, visualID); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->TransitionImageLayout(device, transitionCount, pTransitions_unwrapped); + VkBool32 result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkTransitionImageLayout); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceXlibPresentationSupportKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeUInt32Value(transitionCount); - EncodeStructArray(encoder, pTransitions, transitionCount); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Value(queueFamilyIndex); + encoder->EncodeVoidPtr(dpy); + encoder->EncodeSizeTValue(visualID); + encoder->EncodeUInt32Value(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, transitionCount, pTransitions); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, dpy, visualID); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR( VkInstance instance, - VkSurfaceKHR surface, - const VkAllocationCallbacks* pAllocator) + const VkXcbSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9066,31 +10209,43 @@ VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, instance, surface, pAllocator); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroySurfaceKHR); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); + + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateXcbSurfaceKHR); if (encoder) { encoder->EncodeVulkanHandleValue(instance); - encoder->EncodeVulkanHandleValue(surface); + EncodeStructPtr(encoder, pCreateInfo); EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(surface); + encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetInstanceTable(instance)->DestroySurfaceKHR(instance, surface, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, instance, surface, pAllocator); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); - vulkan_wrappers::DestroyWrappedHandle(surface); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR( +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, - VkSurfaceKHR surface, - VkBool32* pSupported) + xcb_connection_t* connection, + xcb_visualid_t visual_id) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9106,37 +10261,32 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, surface, pSupported); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, connection, visual_id); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported); - if (result < 0) - { - omit_output_data = true; - } + VkBool32 result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfaceSupportKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceXcbPresentationSupportKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Value(queueFamilyIndex); - encoder->EncodeVulkanHandleValue(surface); - encoder->EncodeUInt32Ptr(pSupported, omit_output_data); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Value(queueFamilyIndex); + encoder->EncodeVoidPtr(connection); + encoder->EncodeUInt32Value(visual_id); + encoder->EncodeUInt32Value(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, surface, pSupported); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, connection, visual_id); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR( - VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR( + VkInstance instance, + const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9154,35 +10304,40 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, physicalDevice, surface, pSurfaceCapabilities); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities); - if (result < 0) + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); + } + else { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfaceCapabilitiesKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateWaylandSurfaceKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeVulkanHandleValue(surface); - EncodeStructPtr(encoder, pSurfaceCapabilities, omit_output_data); + encoder->EncodeVulkanHandleValue(instance); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, surface, pSurfaceCapabilities); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR( +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR( VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - uint32_t* pSurfaceFormatCount, - VkSurfaceFormatKHR* pSurfaceFormats) + uint32_t queueFamilyIndex, + struct wl_display* display) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9198,38 +10353,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, display); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats); - if (result < 0) - { - omit_output_data = true; - } + VkBool32 result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfaceFormatsKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceWaylandPresentationSupportKHR); if (encoder) { encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeVulkanHandleValue(surface); - encoder->EncodeUInt32Ptr(pSurfaceFormatCount, omit_output_data); - EncodeStructArray(encoder, pSurfaceFormats, (pSurfaceFormatCount != nullptr) ? (*pSurfaceFormatCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); + encoder->EncodeUInt32Value(queueFamilyIndex); + encoder->EncodeVoidPtr(display); + encoder->EncodeUInt32Value(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, display); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR( - VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - uint32_t* pPresentModeCount, - VkPresentModeKHR* pPresentModes) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR( + VkInstance instance, + const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9247,36 +10395,41 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, physicalDevice, surface, pPresentModeCount, pPresentModes); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes); - if (result < 0) + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); + } + else { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfacePresentModesKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateAndroidSurfaceKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeVulkanHandleValue(surface); - encoder->EncodeUInt32Ptr(pPresentModeCount, omit_output_data); - encoder->EncodeEnumArray(pPresentModes, (pPresentModeCount != nullptr) ? (*pPresentModeCount) : 0, omit_output_data); + encoder->EncodeVulkanHandleValue(instance); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, surface, pPresentModeCount, pPresentModes); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR( - VkDevice device, - const VkSwapchainCreateInfoKHR* pCreateInfo, +VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR( + VkInstance instance, + const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, - VkSwapchainKHR* pSwapchain) + VkSurfaceKHR* pSurface) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9294,43 +10447,39 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pSwapchain); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkSwapchainCreateInfoKHR* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateSwapchainKHR(device, pCreateInfo_unwrapped, pAllocator, pSwapchain); + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); if (result >= 0) { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pSwapchain, VulkanCaptureManager::GetUniqueId); + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); } else { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateSwapchainKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateWin32SurfaceKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(instance); EncodeStructPtr(encoder, pCreateInfo); EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSwapchain, omit_output_data); + encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pSwapchain, pCreateInfo); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pSwapchain); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR( - VkDevice device, - VkSwapchainKHR swapchain, - const VkAllocationCallbacks* pAllocator) +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9346,31 +10495,29 @@ VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, swapchain, pAllocator); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroySwapchainKHR); + VkBool32 result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceWin32PresentationSupportKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(swapchain); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Value(queueFamilyIndex); + encoder->EncodeUInt32Value(result); + manager->EndApiCallCapture(); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroySwapchainKHR(device, swapchain, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, swapchain, pAllocator); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex); - vulkan_wrappers::DestroyWrappedHandle(swapchain); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR( - VkDevice device, - VkSwapchainKHR swapchain, - uint32_t* pSwapchainImageCount, - VkImage* pSwapchainImages) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + const VkVideoProfileInfoKHR* pVideoProfile, + VkVideoCapabilitiesKHR* pCapabilities) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9388,43 +10535,35 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, swapchain, pSwapchainImageCount, pSwapchainImages); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pVideoProfile, pCapabilities); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandles(device, swapchain, pSwapchainImages, (pSwapchainImageCount != nullptr) ? (*pSwapchainImageCount) : 0, VulkanCaptureManager::GetUniqueId); - } - else + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceVideoCapabilitiesKHR(physicalDevice, pVideoProfile, pCapabilities); + if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetSwapchainImagesKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceVideoCapabilitiesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); - encoder->EncodeUInt32Ptr(pSwapchainImageCount, omit_output_data); - encoder->EncodeVulkanHandleArray(pSwapchainImages, (pSwapchainImageCount != nullptr) ? (*pSwapchainImageCount) : 0, omit_output_data); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pVideoProfile); + EncodeStructPtr(encoder, pCapabilities, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndGroupCreateApiCallCapture(result, device, swapchain, (pSwapchainImageCount != nullptr) ? (*pSwapchainImageCount) : 0, pSwapchainImages, nullptr); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, pSwapchainImageCount, pSwapchainImages); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pVideoProfile, pCapabilities); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR( - VkDevice device, - VkSwapchainKHR swapchain, - uint64_t timeout, - VkSemaphore semaphore, - VkFence fence, - uint32_t* pImageIndex) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoFormatPropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, + uint32_t* pVideoFormatPropertyCount, + VkVideoFormatPropertiesKHR* pVideoFormatProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9442,36 +10581,36 @@ VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, swapchain, timeout, semaphore, fence, pImageIndex); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pVideoFormatInfo, pVideoFormatPropertyCount, pVideoFormatProperties); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->AcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceVideoFormatPropertiesKHR(physicalDevice, pVideoFormatInfo, pVideoFormatPropertyCount, pVideoFormatProperties); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAcquireNextImageKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceVideoFormatPropertiesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); - encoder->EncodeUInt64Value(timeout); - encoder->EncodeVulkanHandleValue(semaphore); - encoder->EncodeVulkanHandleValue(fence); - encoder->EncodeUInt32Ptr(pImageIndex, omit_output_data); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pVideoFormatInfo); + encoder->EncodeUInt32Ptr(pVideoFormatPropertyCount, omit_output_data); + EncodeStructArray(encoder, pVideoFormatProperties, (pVideoFormatPropertyCount != nullptr) ? (*pVideoFormatPropertyCount) : 0, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, timeout, semaphore, fence, pImageIndex); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pVideoFormatInfo, pVideoFormatPropertyCount, pVideoFormatProperties); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR( - VkQueue queue, - const VkPresentInfoKHR* pPresentInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionKHR( + VkDevice device, + const VkVideoSessionCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkVideoSessionKHR* pVideoSession) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9487,31 +10626,42 @@ VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, queue, pPresentInfo); + bool omit_output_data = false; - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPresentInfoKHR* pPresentInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPresentInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pVideoSession); - VkResult result = vulkan_wrappers::GetDeviceTable(queue)->QueuePresentKHR(queue, pPresentInfo_unwrapped); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateVideoSessionKHR(device, pCreateInfo, pAllocator, pVideoSession); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueuePresentKHR); + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pVideoSession, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateVideoSessionKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(queue); - EncodeStructPtr(encoder, pPresentInfo); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pVideoSession, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCreateApiCallCapture(result, device, pVideoSession, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, shared_api_call_lock, result, queue, pPresentInfo); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pVideoSession); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHR( +VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionKHR( VkDevice device, - VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities) + VkVideoSessionKHR videoSession, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9527,35 +10677,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pDeviceGroupPresentCapabilities); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, device, videoSession, pAllocator); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceGroupPresentCapabilitiesKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyVideoSessionKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pDeviceGroupPresentCapabilities, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(videoSession); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(videoSession); } - CustomEncoderPostCall::Dispatch(manager, result, device, pDeviceGroupPresentCapabilities); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyVideoSessionKHR(device, videoSession, pAllocator); - return result; + CustomEncoderPostCall::Dispatch(manager, device, videoSession, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(videoSession); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkGetVideoSessionMemoryRequirementsKHR( VkDevice device, - VkSurfaceKHR surface, - VkDeviceGroupPresentModeFlagsKHR* pModes) + VkVideoSessionKHR videoSession, + uint32_t* pMemoryRequirementsCount, + VkVideoSessionMemoryRequirementsKHR* pMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9573,35 +10719,36 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, surface, pModes); + CustomEncoderPreCall::Dispatch(manager, device, videoSession, pMemoryRequirementsCount, pMemoryRequirements); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetDeviceGroupSurfacePresentModesKHR(device, surface, pModes); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetVideoSessionMemoryRequirementsKHR(device, videoSession, pMemoryRequirementsCount, pMemoryRequirements); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceGroupSurfacePresentModesKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetVideoSessionMemoryRequirementsKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(surface); - encoder->EncodeFlagsPtr(pModes, omit_output_data); + encoder->EncodeVulkanHandleValue(videoSession); + encoder->EncodeUInt32Ptr(pMemoryRequirementsCount, omit_output_data); + EncodeStructArray(encoder, pMemoryRequirements, (pMemoryRequirementsCount != nullptr) ? (*pMemoryRequirementsCount) : 0, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, surface, pModes); + CustomEncoderPostCall::Dispatch(manager, result, device, videoSession, pMemoryRequirementsCount, pMemoryRequirements); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR( - VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - uint32_t* pRectCount, - VkRect2D* pRects) +VKAPI_ATTR VkResult VKAPI_CALL vkBindVideoSessionMemoryKHR( + VkDevice device, + VkVideoSessionKHR videoSession, + uint32_t bindSessionMemoryInfoCount, + const VkBindVideoSessionMemoryInfoKHR* pBindSessionMemoryInfos) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9617,37 +10764,35 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; + CustomEncoderPreCall::Dispatch(manager, device, videoSession, bindSessionMemoryInfoCount, pBindSessionMemoryInfos); - CustomEncoderPreCall::Dispatch(manager, physicalDevice, surface, pRectCount, pRects); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBindVideoSessionMemoryInfoKHR* pBindSessionMemoryInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBindSessionMemoryInfos, bindSessionMemoryInfoCount, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects); - if (result < 0) - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindVideoSessionMemoryKHR(device, videoSession, bindSessionMemoryInfoCount, pBindSessionMemoryInfos_unwrapped); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDevicePresentRectanglesKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindVideoSessionMemoryKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeVulkanHandleValue(surface); - encoder->EncodeUInt32Ptr(pRectCount, omit_output_data); - EncodeStructArray(encoder, pRects, (pRectCount != nullptr) ? (*pRectCount) : 0, omit_output_data); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(videoSession); + encoder->EncodeUInt32Value(bindSessionMemoryInfoCount); + EncodeStructArray(encoder, pBindSessionMemoryInfos, bindSessionMemoryInfoCount); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, surface, pRectCount, pRects); + CustomEncoderPostCall::Dispatch(manager, result, device, videoSession, bindSessionMemoryInfoCount, pBindSessionMemoryInfos); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHR( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionParametersKHR( VkDevice device, - const VkAcquireNextImageInfoKHR* pAcquireInfo, - uint32_t* pImageIndex) + const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkVideoSessionParametersKHR* pVideoSessionParameters) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9665,37 +10810,43 @@ VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pAcquireInfo, pImageIndex); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pVideoSessionParameters); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkAcquireNextImageInfoKHR* pAcquireInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pAcquireInfo, handle_unwrap_memory); + const VkVideoSessionParametersCreateInfoKHR* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->AcquireNextImage2KHR(device, pAcquireInfo_unwrapped, pImageIndex); - if (result < 0) + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateVideoSessionParametersKHR(device, pCreateInfo_unwrapped, pAllocator, pVideoSessionParameters); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pVideoSessionParameters, VulkanCaptureManager::GetUniqueId); + } + else { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAcquireNextImage2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateVideoSessionParametersKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pAcquireInfo); - encoder->EncodeUInt32Ptr(pImageIndex, omit_output_data); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pVideoSessionParameters, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCreateApiCallCapture(result, device, pVideoSessionParameters, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pAcquireInfo, pImageIndex); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pVideoSessionParameters); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR( - VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkDisplayPropertiesKHR* pProperties) +VKAPI_ATTR VkResult VKAPI_CALL vkUpdateVideoSessionParametersKHR( + VkDevice device, + VkVideoSessionParametersKHR videoSessionParameters, + const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9711,41 +10862,30 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPropertyCount, pProperties); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties); + CustomEncoderPreCall::Dispatch(manager, device, videoSessionParameters, pUpdateInfo); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedStructArrayHandles(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->UpdateVideoSessionParametersKHR(device, videoSessionParameters, pUpdateInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceDisplayPropertiesKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkUpdateVideoSessionParametersKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); - EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(videoSessionParameters); + EncodeStructPtr(encoder, pUpdateInfo); encoder->EncodeEnumValue(result); - manager->EndStructGroupCreateApiCallCapture(result, physicalDevice, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, pProperties, [](VkDisplayPropertiesKHR* handle_struct)->vulkan_wrappers::DisplayKHRWrapper* { return vulkan_wrappers::GetWrapper(handle_struct->display); }); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pPropertyCount, pProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, videoSessionParameters, pUpdateInfo); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR( - VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkDisplayPlanePropertiesKHR* pProperties) +VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionParametersKHR( + VkDevice device, + VkVideoSessionParametersKHR videoSessionParameters, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9761,42 +10901,29 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPropertyCount, pProperties); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedStructArrayHandles(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, device, videoSessionParameters, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceDisplayPlanePropertiesKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyVideoSessionParametersKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); - EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndStructGroupCreateApiCallCapture(result, physicalDevice, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, pProperties, [](VkDisplayPlanePropertiesKHR* handle_struct)->vulkan_wrappers::DisplayKHRWrapper* { return vulkan_wrappers::GetWrapper(handle_struct->currentDisplay); }); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(videoSessionParameters); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(videoSessionParameters); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pPropertyCount, pProperties); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyVideoSessionParametersKHR(device, videoSessionParameters, pAllocator); - return result; + CustomEncoderPostCall::Dispatch(manager, device, videoSessionParameters, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(videoSessionParameters); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR( - VkPhysicalDevice physicalDevice, - uint32_t planeIndex, - uint32_t* pDisplayCount, - VkDisplayKHR* pDisplays) +VKAPI_ATTR void VKAPI_CALL vkCmdBeginVideoCodingKHR( + VkCommandBuffer commandBuffer, + const VkVideoBeginCodingInfoKHR* pBeginInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9812,43 +10939,62 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBeginInfo); - CustomEncoderPreCall::Dispatch(manager, physicalDevice, planeIndex, pDisplayCount, pDisplays); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginVideoCodingKHR); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pBeginInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginVideoCodingKHRHandles, pBeginInfo); + } - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, pDisplayCount, pDisplays); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkVideoBeginCodingInfoKHR* pBeginInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBeginInfo, handle_unwrap_memory); - if (result >= 0) + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginVideoCodingKHR(commandBuffer, pBeginInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pBeginInfo); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdEndVideoCodingKHR( + VkCommandBuffer commandBuffer, + const VkVideoEndCodingInfoKHR* pEndCodingInfo) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) { - vulkan_wrappers::CreateWrappedHandles(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, pDisplays, (pDisplayCount != nullptr) ? (*pDisplayCount) : 0, VulkanCaptureManager::GetUniqueId); + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); } else { - omit_output_data = true; + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetDisplayPlaneSupportedDisplaysKHR); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pEndCodingInfo); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndVideoCodingKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Value(planeIndex); - encoder->EncodeUInt32Ptr(pDisplayCount, omit_output_data); - encoder->EncodeVulkanHandleArray(pDisplays, (pDisplayCount != nullptr) ? (*pDisplayCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndGroupCreateApiCallCapture(result, physicalDevice, nullptr, (pDisplayCount != nullptr) ? (*pDisplayCount) : 0, pDisplays, nullptr); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pEndCodingInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, planeIndex, pDisplayCount, pDisplays); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndVideoCodingKHR(commandBuffer, pEndCodingInfo); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pEndCodingInfo); } - -VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR( - VkPhysicalDevice physicalDevice, - VkDisplayKHR display, - uint32_t* pPropertyCount, - VkDisplayModePropertiesKHR* pProperties) + +VKAPI_ATTR void VKAPI_CALL vkCmdControlVideoCodingKHR( + VkCommandBuffer commandBuffer, + const VkVideoCodingControlInfoKHR* pCodingControlInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9864,44 +11010,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, display, pPropertyCount, pProperties); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedStructArrayHandles(physicalDevice, display, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCodingControlInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetDisplayModePropertiesKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdControlVideoCodingKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeVulkanHandleValue(display); - encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); - EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndStructGroupCreateApiCallCapture(result, physicalDevice, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, pProperties, [](VkDisplayModePropertiesKHR* handle_struct)->vulkan_wrappers::DisplayModeKHRWrapper* { return vulkan_wrappers::GetWrapper(handle_struct->displayMode); }); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pCodingControlInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, display, pPropertyCount, pProperties); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdControlVideoCodingKHR(commandBuffer, pCodingControlInfo); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCodingControlInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR( - VkPhysicalDevice physicalDevice, - VkDisplayKHR display, - const VkDisplayModeCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDisplayModeKHR* pMode) +VKAPI_ATTR void VKAPI_CALL vkCmdDecodeVideoKHR( + VkCommandBuffer commandBuffer, + const VkVideoDecodeInfoKHR* pDecodeInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9917,44 +11044,28 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, display, pCreateInfo, pAllocator, pMode); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->CreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(physicalDevice, display, pMode, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pDecodeInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDisplayModeKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDecodeVideoKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeVulkanHandleValue(display); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pMode, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, physicalDevice, pMode, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pDecodeInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDecodeVideoKHRHandles, pDecodeInfo); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, display, pCreateInfo, pAllocator, pMode); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkVideoDecodeInfoKHR* pDecodeInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pDecodeInfo, handle_unwrap_memory); - return result; + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDecodeVideoKHR(commandBuffer, pDecodeInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pDecodeInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR( - VkPhysicalDevice physicalDevice, - VkDisplayModeKHR mode, - uint32_t planeIndex, - VkDisplayPlaneCapabilitiesKHR* pCapabilities) +VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderingKHR( + VkCommandBuffer commandBuffer, + const VkRenderingInfo* pRenderingInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -9970,38 +11081,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, mode, planeIndex, pCapabilities); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pRenderingInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDisplayPlaneCapabilitiesKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginRenderingKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeVulkanHandleValue(mode); - encoder->EncodeUInt32Value(planeIndex); - EncodeStructPtr(encoder, pCapabilities, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pRenderingInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginRenderingKHRHandles, pRenderingInfo); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, mode, planeIndex, pCapabilities); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkRenderingInfo* pRenderingInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pRenderingInfo, handle_unwrap_memory); - return result; + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginRenderingKHR(commandBuffer, pRenderingInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pRenderingInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR( - VkInstance instance, - const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderingKHR( + VkCommandBuffer commandBuffer) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10017,47 +11117,24 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDisplaySurfaceCreateInfoKHR* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateDisplayPlaneSurfaceKHR(instance, pCreateInfo_unwrapped, pAllocator, pSurface); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDisplayPlaneSurfaceKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndRenderingKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndRenderingKHR(commandBuffer); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR( - VkDevice device, - uint32_t swapchainCount, - const VkSwapchainCreateInfoKHR* pCreateInfos, - const VkAllocationCallbacks* pAllocator, - VkSwapchainKHR* pSwapchains) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2KHR( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures2* pFeatures) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10073,47 +11150,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, swapchainCount, pCreateInfos, pAllocator, pSwapchains); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkSwapchainCreateInfoKHR* pCreateInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pCreateInfos, swapchainCount, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos_unwrapped, pAllocator, pSwapchains); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pFeatures); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandles(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pSwapchains, swapchainCount, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateSharedSwapchainsKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceFeatures2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeUInt32Value(swapchainCount); - EncodeStructArray(encoder, pCreateInfos, swapchainCount); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandleArray(pSwapchains, swapchainCount, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndGroupCreateApiCallCapture(result, device, nullptr, swapchainCount, pSwapchains, pCreateInfos); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pFeatures); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, swapchainCount, pCreateInfos, pAllocator, pSwapchains); - - return result; + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pFeatures); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR( - VkInstance instance, - const VkXlibSurfaceCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2KHR( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties2* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10129,43 +11184,26 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pProperties); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + manager->OverrideGetPhysicalDeviceProperties2(physicalDevice, pProperties); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateXlibSurfaceKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceProperties2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pProperties); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); - - return result; + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pProperties); } -VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR( +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2KHR( VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - Display* dpy, - VisualID visualID) + VkFormat format, + VkFormatProperties2* pFormatProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10181,32 +11219,27 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, dpy, visualID); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, format, pFormatProperties); - VkBool32 result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID); + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceXlibPresentationSupportKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceFormatProperties2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Value(queueFamilyIndex); - encoder->EncodeVoidPtr(dpy); - encoder->EncodeSizeTValue(visualID); - encoder->EncodeUInt32Value(result); + encoder->EncodeEnumValue(format); + EncodeStructPtr(encoder, pFormatProperties); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, dpy, visualID); - - return result; + CustomEncoderPostCall::Dispatch(manager, physicalDevice, format, pFormatProperties); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR( - VkInstance instance, - const VkXcbSurfaceCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, + VkImageFormatProperties2* pImageFormatProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10224,41 +11257,34 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pImageFormatInfo, pImageFormatProperties); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); - } - else + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties); + if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateXcbSurfaceKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceImageFormatProperties2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pImageFormatInfo); + EncodeStructPtr(encoder, pImageFormatProperties, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pImageFormatInfo, pImageFormatProperties); return result; } -VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR( +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2KHR( VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - xcb_connection_t* connection, - xcb_visualid_t visual_id) + uint32_t* pQueueFamilyPropertyCount, + VkQueueFamilyProperties2* pQueueFamilyProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10274,32 +11300,26 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, connection, visual_id); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); - VkBool32 result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id); + manager->OverrideGetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceXcbPresentationSupportKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceQueueFamilyProperties2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Value(queueFamilyIndex); - encoder->EncodeVoidPtr(connection); - encoder->EncodeUInt32Value(visual_id); - encoder->EncodeUInt32Value(result); + encoder->EncodeUInt32Ptr(pQueueFamilyPropertyCount); + EncodeStructArray(encoder, pQueueFamilyProperties, (pQueueFamilyPropertyCount != nullptr) ? (*pQueueFamilyPropertyCount) : 0); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, connection, visual_id); - - return result; + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR( - VkInstance instance, - const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2KHR( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties2* pMemoryProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10315,42 +11335,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pMemoryProperties); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateWaylandSurfaceKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceMemoryProperties2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pMemoryProperties); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); - - return result; + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pMemoryProperties); } -VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR( +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2KHR( VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - struct wl_display* display) + const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, + uint32_t* pPropertyCount, + VkSparseImageFormatProperties2* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10366,31 +11371,30 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, display); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pFormatInfo, pPropertyCount, pProperties); - VkBool32 result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display); + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties2KHR(physicalDevice, pFormatInfo, pPropertyCount, pProperties); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceWaylandPresentationSupportKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSparseImageFormatProperties2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Value(queueFamilyIndex); - encoder->EncodeVoidPtr(display); - encoder->EncodeUInt32Value(result); + EncodeStructPtr(encoder, pFormatInfo); + encoder->EncodeUInt32Ptr(pPropertyCount); + EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, display); - - return result; + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pFormatInfo, pPropertyCount, pProperties); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR( - VkInstance instance, - const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHR( + VkDevice device, + uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10406,43 +11410,28 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); + CustomEncoderPreCall::Dispatch(manager, device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + vulkan_wrappers::GetDeviceTable(device)->GetDeviceGroupPeerMemoryFeaturesKHR(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateAndroidSurfaceKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceGroupPeerMemoryFeaturesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeUInt32Value(heapIndex); + encoder->EncodeUInt32Value(localDeviceIndex); + encoder->EncodeUInt32Value(remoteDeviceIndex); + encoder->EncodeFlagsPtr(pPeerMemoryFeatures); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR( - VkInstance instance, - const VkWin32SurfaceCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMaskKHR( + VkCommandBuffer commandBuffer, + uint32_t deviceMask) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10458,41 +11447,70 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; + CustomEncoderPreCall::Dispatch(manager, commandBuffer, deviceMask); - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDeviceMaskKHR); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(deviceMask); + manager->EndCommandApiCallCapture(commandBuffer); + } - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDeviceMaskKHR(commandBuffer, deviceMask); - if (result >= 0) + CustomEncoderPostCall::Dispatch(manager, commandBuffer, deviceMask); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHR( + VkCommandBuffer commandBuffer, + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); } else { - omit_output_data = true; + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateWin32SurfaceKHR); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDispatchBaseKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(baseGroupX); + encoder->EncodeUInt32Value(baseGroupY); + encoder->EncodeUInt32Value(baseGroupZ); + encoder->EncodeUInt32Value(groupCountX); + encoder->EncodeUInt32Value(groupCountY); + encoder->EncodeUInt32Value(groupCountZ); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); } -VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR( - VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex) +VKAPI_ATTR void VKAPI_CALL vkTrimCommandPoolKHR( + VkDevice device, + VkCommandPool commandPool, + VkCommandPoolTrimFlags flags) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10508,29 +11526,27 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex); - - VkBool32 result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex); + CustomEncoderPreCall::Dispatch(manager, device, commandPool, flags); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceWin32PresentationSupportKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkTrimCommandPoolKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Value(queueFamilyIndex); - encoder->EncodeUInt32Value(result); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(commandPool); + encoder->EncodeFlagsValue(flags); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex); + vulkan_wrappers::GetDeviceTable(device)->TrimCommandPoolKHR(device, commandPool, flags); - return result; + CustomEncoderPostCall::Dispatch(manager, device, commandPool, flags); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoCapabilitiesKHR( - VkPhysicalDevice physicalDevice, - const VkVideoProfileInfoKHR* pVideoProfile, - VkVideoCapabilitiesKHR* pCapabilities) +VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHR( + VkInstance instance, + uint32_t* pPhysicalDeviceGroupCount, + VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10548,35 +11564,39 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoCapabilitiesKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pVideoProfile, pCapabilities); + CustomEncoderPreCall::Dispatch(manager, instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceVideoCapabilitiesKHR(physicalDevice, pVideoProfile, pCapabilities); - if (result < 0) + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->EnumeratePhysicalDeviceGroupsKHR(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedStructArrayHandles(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pPhysicalDeviceGroupProperties, (pPhysicalDeviceGroupCount != nullptr) ? (*pPhysicalDeviceGroupCount) : 0, VulkanCaptureManager::GetUniqueId); + } + else { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceVideoCapabilitiesKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkEnumeratePhysicalDeviceGroupsKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pVideoProfile); - EncodeStructPtr(encoder, pCapabilities, omit_output_data); + encoder->EncodeVulkanHandleValue(instance); + encoder->EncodeUInt32Ptr(pPhysicalDeviceGroupCount, omit_output_data); + EncodeStructArray(encoder, pPhysicalDeviceGroupProperties, (pPhysicalDeviceGroupCount != nullptr) ? (*pPhysicalDeviceGroupCount) : 0, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndStructGroupCreateApiCallCapture(result, instance, (pPhysicalDeviceGroupCount != nullptr) ? (*pPhysicalDeviceGroupCount) : 0, pPhysicalDeviceGroupProperties, nullptr); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pVideoProfile, pCapabilities); + CustomEncoderPostCall::Dispatch(manager, result, instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoFormatPropertiesKHR( +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHR( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, - uint32_t* pVideoFormatPropertyCount, - VkVideoFormatPropertiesKHR* pVideoFormatProperties) + const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, + VkExternalBufferProperties* pExternalBufferProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10592,38 +11612,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoFormatPropertiesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pVideoFormatInfo, pVideoFormatPropertyCount, pVideoFormatProperties); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pExternalBufferInfo, pExternalBufferProperties); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceVideoFormatPropertiesKHR(physicalDevice, pVideoFormatInfo, pVideoFormatPropertyCount, pVideoFormatProperties); - if (result < 0) - { - omit_output_data = true; - } + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceExternalBufferPropertiesKHR(physicalDevice, pExternalBufferInfo, pExternalBufferProperties); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceVideoFormatPropertiesKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalBufferPropertiesKHR); if (encoder) { encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pVideoFormatInfo); - encoder->EncodeUInt32Ptr(pVideoFormatPropertyCount, omit_output_data); - EncodeStructArray(encoder, pVideoFormatProperties, (pVideoFormatPropertyCount != nullptr) ? (*pVideoFormatPropertyCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); + EncodeStructPtr(encoder, pExternalBufferInfo); + EncodeStructPtr(encoder, pExternalBufferProperties); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pVideoFormatInfo, pVideoFormatPropertyCount, pVideoFormatProperties); - - return result; + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pExternalBufferInfo, pExternalBufferProperties); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHR( VkDevice device, - const VkVideoSessionCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkVideoSessionKHR* pVideoSession) + const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10641,80 +11650,38 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pVideoSession); + CustomEncoderPreCall::Dispatch(manager, device, pGetWin32HandleInfo, pHandle); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateVideoSessionKHR(device, pCreateInfo, pAllocator, pVideoSession); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetWin32HandleInfo, handle_unwrap_memory); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pVideoSession, VulkanCaptureManager::GetUniqueId); - } - else + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryWin32HandleKHR(device, pGetWin32HandleInfo_unwrapped, pHandle); + if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateVideoSessionKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryWin32HandleKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pVideoSession, omit_output_data); + EncodeStructPtr(encoder, pGetWin32HandleInfo); + encoder->EncodeVoidPtrPtr(pHandle, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pVideoSession, pCreateInfo); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pVideoSession); + CustomEncoderPostCall::Dispatch(manager, result, device, pGetWin32HandleInfo, pHandle); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionKHR( - VkDevice device, - VkVideoSessionKHR videoSession, - const VkAllocationCallbacks* pAllocator) -{ - VulkanCaptureManager* manager = VulkanCaptureManager::Get(); - GFXRECON_ASSERT(manager != nullptr); - auto force_command_serialization = manager->GetForceCommandSerialization(); - std::shared_lock shared_api_call_lock; - std::unique_lock exclusive_api_call_lock; - if (force_command_serialization) - { - exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); - } - else - { - shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); - } - - CustomEncoderPreCall::Dispatch(manager, device, videoSession, pAllocator); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyVideoSessionKHR); - if (encoder) - { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(videoSession); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(videoSession); - } - - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyVideoSessionKHR(device, videoSession, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, videoSession, pAllocator); - - vulkan_wrappers::DestroyWrappedHandle(videoSession); - -} - -VKAPI_ATTR VkResult VKAPI_CALL vkGetVideoSessionMemoryRequirementsKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHR( VkDevice device, - VkVideoSessionKHR videoSession, - uint32_t* pMemoryRequirementsCount, - VkVideoSessionMemoryRequirementsKHR* pMemoryRequirements) + VkExternalMemoryHandleTypeFlagBits handleType, + HANDLE handle, + VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10732,36 +11699,35 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetVideoSessionMemoryRequirementsKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, videoSession, pMemoryRequirementsCount, pMemoryRequirements); + CustomEncoderPreCall::Dispatch(manager, device, handleType, handle, pMemoryWin32HandleProperties); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetVideoSessionMemoryRequirementsKHR(device, videoSession, pMemoryRequirementsCount, pMemoryRequirements); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryWin32HandlePropertiesKHR(device, handleType, handle, pMemoryWin32HandleProperties); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetVideoSessionMemoryRequirementsKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryWin32HandlePropertiesKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(videoSession); - encoder->EncodeUInt32Ptr(pMemoryRequirementsCount, omit_output_data); - EncodeStructArray(encoder, pMemoryRequirements, (pMemoryRequirementsCount != nullptr) ? (*pMemoryRequirementsCount) : 0, omit_output_data); + encoder->EncodeEnumValue(handleType); + encoder->EncodeVoidPtr(handle); + EncodeStructPtr(encoder, pMemoryWin32HandleProperties, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, videoSession, pMemoryRequirementsCount, pMemoryRequirements); + CustomEncoderPostCall::Dispatch(manager, result, device, handleType, handle, pMemoryWin32HandleProperties); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkBindVideoSessionMemoryKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR( VkDevice device, - VkVideoSessionKHR videoSession, - uint32_t bindSessionMemoryInfoCount, - const VkBindVideoSessionMemoryInfoKHR* pBindSessionMemoryInfos) + const VkMemoryGetFdInfoKHR* pGetFdInfo, + int* pFd) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10777,35 +11743,40 @@ VKAPI_ATTR VkResult VKAPI_CALL vkBindVideoSessionMemoryKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, videoSession, bindSessionMemoryInfoCount, pBindSessionMemoryInfos); + bool omit_output_data = false; + + CustomEncoderPreCall::Dispatch(manager, device, pGetFdInfo, pFd); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBindVideoSessionMemoryInfoKHR* pBindSessionMemoryInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBindSessionMemoryInfos, bindSessionMemoryInfoCount, handle_unwrap_memory); + const VkMemoryGetFdInfoKHR* pGetFdInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetFdInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindVideoSessionMemoryKHR(device, videoSession, bindSessionMemoryInfoCount, pBindSessionMemoryInfos_unwrapped); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryFdKHR(device, pGetFdInfo_unwrapped, pFd); + if (result < 0) + { + omit_output_data = true; + } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindVideoSessionMemoryKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryFdKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(videoSession); - encoder->EncodeUInt32Value(bindSessionMemoryInfoCount); - EncodeStructArray(encoder, pBindSessionMemoryInfos, bindSessionMemoryInfoCount); + EncodeStructPtr(encoder, pGetFdInfo); + encoder->EncodeInt32Ptr(pFd, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, videoSession, bindSessionMemoryInfoCount, pBindSessionMemoryInfos); + CustomEncoderPostCall::Dispatch(manager, result, device, pGetFdInfo, pFd); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionParametersKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR( VkDevice device, - const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkVideoSessionParametersKHR* pVideoSessionParameters) + VkExternalMemoryHandleTypeFlagBits handleType, + int fd, + VkMemoryFdPropertiesKHR* pMemoryFdProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10823,43 +11794,35 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionParametersKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pVideoSessionParameters); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkVideoSessionParametersCreateInfoKHR* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateVideoSessionParametersKHR(device, pCreateInfo_unwrapped, pAllocator, pVideoSessionParameters); + CustomEncoderPreCall::Dispatch(manager, device, handleType, fd, pMemoryFdProperties); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pVideoSessionParameters, VulkanCaptureManager::GetUniqueId); - } - else + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties); + if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateVideoSessionParametersKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryFdPropertiesKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pVideoSessionParameters, omit_output_data); + encoder->EncodeEnumValue(handleType); + encoder->EncodeInt32Value(fd); + EncodeStructPtr(encoder, pMemoryFdProperties, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pVideoSessionParameters, pCreateInfo); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pVideoSessionParameters); + CustomEncoderPostCall::Dispatch(manager, result, device, handleType, fd, pMemoryFdProperties); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkUpdateVideoSessionParametersKHR( - VkDevice device, - VkVideoSessionParametersKHR videoSessionParameters, - const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, + VkExternalSemaphoreProperties* pExternalSemaphoreProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10875,30 +11838,26 @@ VKAPI_ATTR VkResult VKAPI_CALL vkUpdateVideoSessionParametersKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, videoSessionParameters, pUpdateInfo); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->UpdateVideoSessionParametersKHR(device, videoSessionParameters, pUpdateInfo); + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceExternalSemaphorePropertiesKHR(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkUpdateVideoSessionParametersKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(videoSessionParameters); - EncodeStructPtr(encoder, pUpdateInfo); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pExternalSemaphoreInfo); + EncodeStructPtr(encoder, pExternalSemaphoreProperties); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, videoSessionParameters, pUpdateInfo); - - return result; + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties); } -VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionParametersKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreWin32HandleKHR( VkDevice device, - VkVideoSessionParametersKHR videoSessionParameters, - const VkAllocationCallbacks* pAllocator) + const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10914,29 +11873,32 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionParametersKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, videoSessionParameters, pAllocator); + CustomEncoderPreCall::Dispatch(manager, device, pImportSemaphoreWin32HandleInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyVideoSessionParametersKHR); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pImportSemaphoreWin32HandleInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->ImportSemaphoreWin32HandleKHR(device, pImportSemaphoreWin32HandleInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkImportSemaphoreWin32HandleKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(videoSessionParameters); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(videoSessionParameters); - } - - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyVideoSessionParametersKHR(device, videoSessionParameters, pAllocator); + EncodeStructPtr(encoder, pImportSemaphoreWin32HandleInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); + } - CustomEncoderPostCall::Dispatch(manager, device, videoSessionParameters, pAllocator); + CustomEncoderPostCall::Dispatch(manager, result, device, pImportSemaphoreWin32HandleInfo); - vulkan_wrappers::DestroyWrappedHandle(videoSessionParameters); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdBeginVideoCodingKHR( - VkCommandBuffer commandBuffer, - const VkVideoBeginCodingInfoKHR* pBeginInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHR( + VkDevice device, + const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10952,28 +11914,38 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBeginVideoCodingKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBeginInfo); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginVideoCodingKHR); - if (encoder) + CustomEncoderPreCall::Dispatch(manager, device, pGetWin32HandleInfo, pHandle); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetWin32HandleInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSemaphoreWin32HandleKHR(device, pGetWin32HandleInfo_unwrapped, pHandle); + if (result < 0) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pBeginInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginVideoCodingKHRHandles, pBeginInfo); + omit_output_data = true; } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkVideoBeginCodingInfoKHR* pBeginInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBeginInfo, handle_unwrap_memory); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSemaphoreWin32HandleKHR); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pGetWin32HandleInfo); + encoder->EncodeVoidPtrPtr(pHandle, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); + } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginVideoCodingKHR(commandBuffer, pBeginInfo_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, device, pGetWin32HandleInfo, pHandle); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pBeginInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdEndVideoCodingKHR( - VkCommandBuffer commandBuffer, - const VkVideoEndCodingInfoKHR* pEndCodingInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR( + VkDevice device, + const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -10989,25 +11961,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEndVideoCodingKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pEndCodingInfo); + CustomEncoderPreCall::Dispatch(manager, device, pImportSemaphoreFdInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndVideoCodingKHR); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pImportSemaphoreFdInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->ImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkImportSemaphoreFdKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pEndCodingInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pImportSemaphoreFdInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndVideoCodingKHR(commandBuffer, pEndCodingInfo); + CustomEncoderPostCall::Dispatch(manager, result, device, pImportSemaphoreFdInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pEndCodingInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdControlVideoCodingKHR( - VkCommandBuffer commandBuffer, - const VkVideoCodingControlInfoKHR* pCodingControlInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR( + VkDevice device, + const VkSemaphoreGetFdInfoKHR* pGetFdInfo, + int* pFd) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11023,25 +12002,42 @@ VKAPI_ATTR void VKAPI_CALL vkCmdControlVideoCodingKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCodingControlInfo); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdControlVideoCodingKHR); + CustomEncoderPreCall::Dispatch(manager, device, pGetFdInfo, pFd); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkSemaphoreGetFdInfoKHR* pGetFdInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetFdInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSemaphoreFdKHR(device, pGetFdInfo_unwrapped, pFd); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSemaphoreFdKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pCodingControlInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pGetFdInfo); + encoder->EncodeInt32Ptr(pFd, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdControlVideoCodingKHR(commandBuffer, pCodingControlInfo); + CustomEncoderPostCall::Dispatch(manager, result, device, pGetFdInfo, pFd); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCodingControlInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdDecodeVideoKHR( +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetKHR( VkCommandBuffer commandBuffer, - const VkVideoDecodeInfoKHR* pDecodeInfo) + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const VkWriteDescriptorSet* pDescriptorWrites) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11057,28 +12053,34 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDecodeVideoKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pDecodeInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDecodeVideoKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPushDescriptorSetKHR); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pDecodeInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDecodeVideoKHRHandles, pDecodeInfo); + encoder->EncodeEnumValue(pipelineBindPoint); + encoder->EncodeVulkanHandleValue(layout); + encoder->EncodeUInt32Value(set); + encoder->EncodeUInt32Value(descriptorWriteCount); + EncodeStructArray(encoder, pDescriptorWrites, descriptorWriteCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPushDescriptorSetKHRHandles, layout, descriptorWriteCount, pDescriptorWrites); } auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkVideoDecodeInfoKHR* pDecodeInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pDecodeInfo, handle_unwrap_memory); + const VkWriteDescriptorSet* pDescriptorWrites_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pDescriptorWrites, descriptorWriteCount, handle_unwrap_memory); - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDecodeVideoKHR(commandBuffer, pDecodeInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites_unwrapped); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pDecodeInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); } -VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderingKHR( - VkCommandBuffer commandBuffer, - const VkRenderingInfo* pRenderingInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplateKHR( + VkDevice device, + const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11094,60 +12096,45 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderingKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pRenderingInfo); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginRenderingKHR); - if (encoder) - { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pRenderingInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginRenderingKHRHandles, pRenderingInfo); - } + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkRenderingInfo* pRenderingInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pRenderingInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginRenderingKHR(commandBuffer, pRenderingInfo_unwrapped); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pRenderingInfo); + const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); -} + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateDescriptorUpdateTemplateKHR(device, pCreateInfo_unwrapped, pAllocator, pDescriptorUpdateTemplate); -VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderingKHR( - VkCommandBuffer commandBuffer) -{ - VulkanCaptureManager* manager = VulkanCaptureManager::Get(); - GFXRECON_ASSERT(manager != nullptr); - auto force_command_serialization = manager->GetForceCommandSerialization(); - std::shared_lock shared_api_call_lock; - std::unique_lock exclusive_api_call_lock; - if (force_command_serialization) + if (result >= 0) { - exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pDescriptorUpdateTemplate, VulkanCaptureManager::GetUniqueId); } else { - shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + omit_output_data = true; } - CustomEncoderPreCall::Dispatch(manager, commandBuffer); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndRenderingKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDescriptorUpdateTemplateKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pDescriptorUpdateTemplate, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pDescriptorUpdateTemplate, pCreateInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndRenderingKHR(commandBuffer); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate); - CustomEncoderPostCall::Dispatch(manager, commandBuffer); + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2KHR( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceFeatures2* pFeatures) +VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplateKHR( + VkDevice device, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11163,25 +12150,31 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pFeatures); - - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures); + CustomEncoderPreCall::Dispatch(manager, device, descriptorUpdateTemplate, pAllocator); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceFeatures2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyDescriptorUpdateTemplateKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pFeatures); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(descriptorUpdateTemplate); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(descriptorUpdateTemplate); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pFeatures); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator); + + CustomEncoderPostCall::Dispatch(manager, device, descriptorUpdateTemplate, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(descriptorUpdateTemplate); } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2KHR( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceProperties2* pProperties) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2KHR( + VkDevice device, + const VkRenderPassCreateInfo2* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkRenderPass* pRenderPass) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11197,26 +12190,42 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pProperties); + bool omit_output_data = false; - manager->OverrideGetPhysicalDeviceProperties2(physicalDevice, pProperties); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pRenderPass); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceProperties2KHR); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateRenderPass2KHR(device, pCreateInfo, pAllocator, pRenderPass); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pRenderPass, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateRenderPass2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pProperties); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pRenderPass, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pRenderPass, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pRenderPass); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2KHR( - VkPhysicalDevice physicalDevice, - VkFormat format, - VkFormatProperties2* pFormatProperties) +VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2KHR( + VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo* pRenderPassBegin, + const VkSubpassBeginInfo* pSubpassBeginInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11232,27 +12241,30 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, format, pFormatProperties); - - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pRenderPassBegin, pSubpassBeginInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceFormatProperties2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginRenderPass2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeEnumValue(format); - EncodeStructPtr(encoder, pFormatProperties); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pRenderPassBegin); + EncodeStructPtr(encoder, pSubpassBeginInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginRenderPass2KHRHandles, pRenderPassBegin); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, format, pFormatProperties); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkRenderPassBeginInfo* pRenderPassBegin_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pRenderPassBegin, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin_unwrapped, pSubpassBeginInfo); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pRenderPassBegin, pSubpassBeginInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2KHR( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, - VkImageFormatProperties2* pImageFormatProperties) +VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2KHR( + VkCommandBuffer commandBuffer, + const VkSubpassBeginInfo* pSubpassBeginInfo, + const VkSubpassEndInfo* pSubpassEndInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11268,36 +12280,26 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pImageFormatInfo, pImageFormatProperties); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceImageFormatProperties2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdNextSubpass2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pImageFormatInfo); - EncodeStructPtr(encoder, pImageFormatProperties, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pSubpassBeginInfo); + EncodeStructPtr(encoder, pSubpassEndInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pImageFormatInfo, pImageFormatProperties); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2KHR( - VkPhysicalDevice physicalDevice, - uint32_t* pQueueFamilyPropertyCount, - VkQueueFamilyProperties2* pQueueFamilyProperties) +VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2KHR( + VkCommandBuffer commandBuffer, + const VkSubpassEndInfo* pSubpassEndInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11313,26 +12315,25 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); - - manager->OverrideGetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pSubpassEndInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceQueueFamilyProperties2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndRenderPass2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pQueueFamilyPropertyCount); - EncodeStructArray(encoder, pQueueFamilyProperties, (pQueueFamilyPropertyCount != nullptr) ? (*pQueueFamilyPropertyCount) : 0); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pSubpassEndInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pSubpassEndInfo); } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2KHR( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceMemoryProperties2* pMemoryProperties) +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR( + VkDevice device, + VkSwapchainKHR swapchain) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11348,27 +12349,29 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pMemoryProperties); + CustomEncoderPreCall::Dispatch(manager, device, swapchain); - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSwapchainStatusKHR(device, swapchain); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceMemoryProperties2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSwapchainStatusKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pMemoryProperties); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(swapchain); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pMemoryProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2KHR( +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFencePropertiesKHR( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, - uint32_t* pPropertyCount, - VkSparseImageFormatProperties2* pProperties) + const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, + VkExternalFenceProperties* pExternalFenceProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11384,30 +12387,26 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pFormatInfo, pPropertyCount, pProperties); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pExternalFenceInfo, pExternalFenceProperties); - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties2KHR(physicalDevice, pFormatInfo, pPropertyCount, pProperties); + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceExternalFencePropertiesKHR(physicalDevice, pExternalFenceInfo, pExternalFenceProperties); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSparseImageFormatProperties2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalFencePropertiesKHR); if (encoder) { encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pFormatInfo); - encoder->EncodeUInt32Ptr(pPropertyCount); - EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0); + EncodeStructPtr(encoder, pExternalFenceInfo); + EncodeStructPtr(encoder, pExternalFenceProperties); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pFormatInfo, pPropertyCount, pProperties); + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pExternalFenceInfo, pExternalFenceProperties); } -VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceWin32HandleKHR( VkDevice device, - uint32_t heapIndex, - uint32_t localDeviceIndex, - uint32_t remoteDeviceIndex, - VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) + const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11423,28 +12422,32 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); + CustomEncoderPreCall::Dispatch(manager, device, pImportFenceWin32HandleInfo); - vulkan_wrappers::GetDeviceTable(device)->GetDeviceGroupPeerMemoryFeaturesKHR(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pImportFenceWin32HandleInfo, handle_unwrap_memory); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceGroupPeerMemoryFeaturesKHR); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->ImportFenceWin32HandleKHR(device, pImportFenceWin32HandleInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkImportFenceWin32HandleKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeUInt32Value(heapIndex); - encoder->EncodeUInt32Value(localDeviceIndex); - encoder->EncodeUInt32Value(remoteDeviceIndex); - encoder->EncodeFlagsPtr(pPeerMemoryFeatures); + EncodeStructPtr(encoder, pImportFenceWin32HandleInfo); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); + CustomEncoderPostCall::Dispatch(manager, result, device, pImportFenceWin32HandleInfo); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMaskKHR( - VkCommandBuffer commandBuffer, - uint32_t deviceMask) +VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceWin32HandleKHR( + VkDevice device, + const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11460,30 +12463,38 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMaskKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, deviceMask); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDeviceMaskKHR); + CustomEncoderPreCall::Dispatch(manager, device, pGetWin32HandleInfo, pHandle); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetWin32HandleInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetFenceWin32HandleKHR(device, pGetWin32HandleInfo_unwrapped, pHandle); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetFenceWin32HandleKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(deviceMask); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pGetWin32HandleInfo); + encoder->EncodeVoidPtrPtr(pHandle, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDeviceMaskKHR(commandBuffer, deviceMask); + CustomEncoderPostCall::Dispatch(manager, result, device, pGetWin32HandleInfo, pHandle); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, deviceMask); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHR( - VkCommandBuffer commandBuffer, - uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) +VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceFdKHR( + VkDevice device, + const VkImportFenceFdInfoKHR* pImportFenceFdInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11499,31 +12510,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + CustomEncoderPreCall::Dispatch(manager, device, pImportFenceFdInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDispatchBaseKHR); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkImportFenceFdInfoKHR* pImportFenceFdInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pImportFenceFdInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->ImportFenceFdKHR(device, pImportFenceFdInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkImportFenceFdKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(baseGroupX); - encoder->EncodeUInt32Value(baseGroupY); - encoder->EncodeUInt32Value(baseGroupZ); - encoder->EncodeUInt32Value(groupCountX); - encoder->EncodeUInt32Value(groupCountY); - encoder->EncodeUInt32Value(groupCountZ); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pImportFenceFdInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + CustomEncoderPostCall::Dispatch(manager, result, device, pImportFenceFdInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + return result; } -VKAPI_ATTR void VKAPI_CALL vkTrimCommandPoolKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceFdKHR( VkDevice device, - VkCommandPool commandPool, - VkCommandPoolTrimFlags flags) + const VkFenceGetFdInfoKHR* pGetFdInfo, + int* pFd) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11539,27 +12551,41 @@ VKAPI_ATTR void VKAPI_CALL vkTrimCommandPoolKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, commandPool, flags); + bool omit_output_data = false; - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkTrimCommandPoolKHR); + CustomEncoderPreCall::Dispatch(manager, device, pGetFdInfo, pFd); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkFenceGetFdInfoKHR* pGetFdInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetFdInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetFenceFdKHR(device, pGetFdInfo_unwrapped, pFd); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetFenceFdKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(commandPool); - encoder->EncodeFlagsValue(flags); + EncodeStructPtr(encoder, pGetFdInfo); + encoder->EncodeInt32Ptr(pFd, omit_output_data); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(device)->TrimCommandPoolKHR(device, commandPool, flags); + CustomEncoderPostCall::Dispatch(manager, result, device, pGetFdInfo, pFd); - CustomEncoderPostCall::Dispatch(manager, device, commandPool, flags); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHR( - VkInstance instance, - uint32_t* pPhysicalDeviceGroupCount, - VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties) +VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t* pCounterCount, + VkPerformanceCounterKHR* pCounters, + VkPerformanceCounterDescriptionKHR* pCounterDescriptions) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11577,39 +12603,36 @@ VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->EnumeratePhysicalDeviceGroupsKHR(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedStructArrayHandles(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pPhysicalDeviceGroupProperties, (pPhysicalDeviceGroupCount != nullptr) ? (*pPhysicalDeviceGroupCount) : 0, VulkanCaptureManager::GetUniqueId); - } - else + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(physicalDevice, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions); + if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkEnumeratePhysicalDeviceGroupsKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - encoder->EncodeUInt32Ptr(pPhysicalDeviceGroupCount, omit_output_data); - EncodeStructArray(encoder, pPhysicalDeviceGroupProperties, (pPhysicalDeviceGroupCount != nullptr) ? (*pPhysicalDeviceGroupCount) : 0, omit_output_data); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Value(queueFamilyIndex); + encoder->EncodeUInt32Ptr(pCounterCount, omit_output_data); + EncodeStructArray(encoder, pCounters, (pCounterCount != nullptr) ? (*pCounterCount) : 0, omit_output_data); + EncodeStructArray(encoder, pCounterDescriptions, (pCounterCount != nullptr) ? (*pCounterCount) : 0, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndStructGroupCreateApiCallCapture(result, instance, (pPhysicalDeviceGroupCount != nullptr) ? (*pPhysicalDeviceGroupCount) : 0, pPhysicalDeviceGroupProperties, nullptr); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions); return result; } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHR( +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, - VkExternalBufferProperties* pExternalBufferProperties) + const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo, + uint32_t* pNumPasses) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11625,27 +12648,26 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pExternalBufferInfo, pExternalBufferProperties); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPerformanceQueryCreateInfo, pNumPasses); - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceExternalBufferPropertiesKHR(physicalDevice, pExternalBufferInfo, pExternalBufferProperties); + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(physicalDevice, pPerformanceQueryCreateInfo, pNumPasses); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalBufferPropertiesKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR); if (encoder) { encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pExternalBufferInfo); - EncodeStructPtr(encoder, pExternalBufferProperties); + EncodeStructPtr(encoder, pPerformanceQueryCreateInfo); + encoder->EncodeUInt32Ptr(pNumPasses); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pExternalBufferInfo, pExternalBufferProperties); + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pPerformanceQueryCreateInfo, pNumPasses); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireProfilingLockKHR( VkDevice device, - const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, - HANDLE* pHandle) + const VkAcquireProfilingLockInfoKHR* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11661,40 +12683,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pGetWin32HandleInfo, pHandle); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetWin32HandleInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, pInfo); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryWin32HandleKHR(device, pGetWin32HandleInfo_unwrapped, pHandle); - if (result < 0) - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->AcquireProfilingLockKHR(device, pInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryWin32HandleKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAcquireProfilingLockKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pGetWin32HandleInfo); - encoder->EncodeVoidPtrPtr(pHandle, omit_output_data); + EncodeStructPtr(encoder, pInfo); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pGetWin32HandleInfo, pHandle); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHR( - VkDevice device, - VkExternalMemoryHandleTypeFlagBits handleType, - HANDLE handle, - VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties) +VKAPI_ATTR void VKAPI_CALL vkReleaseProfilingLockKHR( + VkDevice device) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11710,37 +12719,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, handleType, handle, pMemoryWin32HandleProperties); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryWin32HandlePropertiesKHR(device, handleType, handle, pMemoryWin32HandleProperties); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, device); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryWin32HandlePropertiesKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkReleaseProfilingLockKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeEnumValue(handleType); - encoder->EncodeVoidPtr(handle); - EncodeStructPtr(encoder, pMemoryWin32HandleProperties, omit_output_data); - encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, handleType, handle, pMemoryWin32HandleProperties); + vulkan_wrappers::GetDeviceTable(device)->ReleaseProfilingLockKHR(device); - return result; + CustomEncoderPostCall::Dispatch(manager, device); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR( - VkDevice device, - const VkMemoryGetFdInfoKHR* pGetFdInfo, - int* pFd) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkSurfaceCapabilities2KHR* pSurfaceCapabilities) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11758,38 +12755,38 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pGetFdInfo, pFd); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pSurfaceInfo, pSurfaceCapabilities); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkMemoryGetFdInfoKHR* pGetFdInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetFdInfo, handle_unwrap_memory); + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSurfaceInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryFdKHR(device, pGetFdInfo_unwrapped, pFd); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, pSurfaceInfo_unwrapped, pSurfaceCapabilities); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryFdKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfaceCapabilities2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pGetFdInfo); - encoder->EncodeInt32Ptr(pFd, omit_output_data); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pSurfaceInfo); + EncodeStructPtr(encoder, pSurfaceCapabilities, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pGetFdInfo, pFd); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pSurfaceInfo, pSurfaceCapabilities); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR( - VkDevice device, - VkExternalMemoryHandleTypeFlagBits handleType, - int fd, - VkMemoryFdPropertiesKHR* pMemoryFdProperties) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormat2KHR* pSurfaceFormats) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11807,35 +12804,38 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, handleType, fd, pMemoryFdProperties); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSurfaceInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfaceFormats2KHR(physicalDevice, pSurfaceInfo_unwrapped, pSurfaceFormatCount, pSurfaceFormats); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryFdPropertiesKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfaceFormats2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeEnumValue(handleType); - encoder->EncodeInt32Value(fd); - EncodeStructPtr(encoder, pMemoryFdProperties, omit_output_data); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pSurfaceInfo); + encoder->EncodeUInt32Ptr(pSurfaceFormatCount, omit_output_data); + EncodeStructArray(encoder, pSurfaceFormats, (pSurfaceFormatCount != nullptr) ? (*pSurfaceFormatCount) : 0, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, handleType, fd, pMemoryFdProperties); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats); return result; } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayProperties2KHR( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, - VkExternalSemaphoreProperties* pExternalSemaphoreProperties) + uint32_t* pPropertyCount, + VkDisplayProperties2KHR* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11851,67 +12851,41 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties); - - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceExternalSemaphorePropertiesKHR(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties); - - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR); - if (encoder) - { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pExternalSemaphoreInfo); - EncodeStructPtr(encoder, pExternalSemaphoreProperties); - manager->EndApiCallCapture(); - } + bool omit_output_data = false; - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPropertyCount, pProperties); -} + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceDisplayProperties2KHR(physicalDevice, pPropertyCount, pProperties); -VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreWin32HandleKHR( - VkDevice device, - const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo) -{ - VulkanCaptureManager* manager = VulkanCaptureManager::Get(); - GFXRECON_ASSERT(manager != nullptr); - auto force_command_serialization = manager->GetForceCommandSerialization(); - std::shared_lock shared_api_call_lock; - std::unique_lock exclusive_api_call_lock; - if (force_command_serialization) + if (result >= 0) { - exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + vulkan_wrappers::CreateWrappedStructArrayHandles(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, VulkanCaptureManager::GetUniqueId); } else { - shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + omit_output_data = true; } - CustomEncoderPreCall::Dispatch(manager, device, pImportSemaphoreWin32HandleInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pImportSemaphoreWin32HandleInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->ImportSemaphoreWin32HandleKHR(device, pImportSemaphoreWin32HandleInfo_unwrapped); - - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkImportSemaphoreWin32HandleKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceDisplayProperties2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pImportSemaphoreWin32HandleInfo); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); + EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndStructGroupCreateApiCallCapture(result, physicalDevice, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, pProperties, [](VkDisplayProperties2KHR* handle_struct)->vulkan_wrappers::DisplayKHRWrapper* { return vulkan_wrappers::GetWrapper(handle_struct->displayProperties.display); }); } - CustomEncoderPostCall::Dispatch(manager, result, device, pImportSemaphoreWin32HandleInfo); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pPropertyCount, pProperties); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHR( - VkDevice device, - const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, - HANDLE* pHandle) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlaneProperties2KHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPlaneProperties2KHR* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11929,36 +12903,40 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pGetWin32HandleInfo, pHandle); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPropertyCount, pProperties); - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetWin32HandleInfo, handle_unwrap_memory); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceDisplayPlaneProperties2KHR(physicalDevice, pPropertyCount, pProperties); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSemaphoreWin32HandleKHR(device, pGetWin32HandleInfo_unwrapped, pHandle); - if (result < 0) + if (result >= 0) + { + vulkan_wrappers::CreateWrappedStructArrayHandles(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, VulkanCaptureManager::GetUniqueId); + } + else { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSemaphoreWin32HandleKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceDisplayPlaneProperties2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pGetWin32HandleInfo); - encoder->EncodeVoidPtrPtr(pHandle, omit_output_data); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); + EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndStructGroupCreateApiCallCapture(result, physicalDevice, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, pProperties, [](VkDisplayPlaneProperties2KHR* handle_struct)->vulkan_wrappers::DisplayKHRWrapper* { return vulkan_wrappers::GetWrapper(handle_struct->displayPlaneProperties.currentDisplay); }); } - CustomEncoderPostCall::Dispatch(manager, result, device, pGetWin32HandleInfo, pHandle); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pPropertyCount, pProperties); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR( - VkDevice device, - const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModeProperties2KHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + uint32_t* pPropertyCount, + VkDisplayModeProperties2KHR* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -11967,39 +12945,49 @@ VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR( std::unique_lock exclusive_api_call_lock; if (force_command_serialization) { - exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + bool omit_output_data = false; + + CustomEncoderPreCall::Dispatch(manager, physicalDevice, display, pPropertyCount, pProperties); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetDisplayModeProperties2KHR(physicalDevice, display, pPropertyCount, pProperties); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedStructArrayHandles(physicalDevice, display, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, VulkanCaptureManager::GetUniqueId); } else { - shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + omit_output_data = true; } - CustomEncoderPreCall::Dispatch(manager, device, pImportSemaphoreFdInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pImportSemaphoreFdInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->ImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo_unwrapped); - - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkImportSemaphoreFdKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetDisplayModeProperties2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pImportSemaphoreFdInfo); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeVulkanHandleValue(display); + encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); + EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndStructGroupCreateApiCallCapture(result, physicalDevice, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, pProperties, [](VkDisplayModeProperties2KHR* handle_struct)->vulkan_wrappers::DisplayModeKHRWrapper* { return vulkan_wrappers::GetWrapper(handle_struct->displayModeProperties.displayMode); }); } - CustomEncoderPostCall::Dispatch(manager, result, device, pImportSemaphoreFdInfo); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, display, pPropertyCount, pProperties); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR( - VkDevice device, - const VkSemaphoreGetFdInfoKHR* pGetFdInfo, - int* pFd) +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilities2KHR( + VkPhysicalDevice physicalDevice, + const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, + VkDisplayPlaneCapabilities2KHR* pCapabilities) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12017,40 +13005,37 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pGetFdInfo, pFd); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pDisplayPlaneInfo, pCapabilities); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkSemaphoreGetFdInfoKHR* pGetFdInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetFdInfo, handle_unwrap_memory); + const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pDisplayPlaneInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSemaphoreFdKHR(device, pGetFdInfo_unwrapped, pFd); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetDisplayPlaneCapabilities2KHR(physicalDevice, pDisplayPlaneInfo_unwrapped, pCapabilities); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSemaphoreFdKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDisplayPlaneCapabilities2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pGetFdInfo); - encoder->EncodeInt32Ptr(pFd, omit_output_data); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pDisplayPlaneInfo); + EncodeStructPtr(encoder, pCapabilities, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pGetFdInfo, pFd); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pDisplayPlaneInfo, pCapabilities); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetKHR( - VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipelineLayout layout, - uint32_t set, - uint32_t descriptorWriteCount, - const VkWriteDescriptorSet* pDescriptorWrites) +VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2KHR( + VkDevice device, + const VkImageMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12066,34 +13051,30 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPushDescriptorSetKHR); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkImageMemoryRequirementsInfo2* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(device)->GetImageMemoryRequirements2KHR(device, pInfo_unwrapped, pMemoryRequirements); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageMemoryRequirements2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(pipelineBindPoint); - encoder->EncodeVulkanHandleValue(layout); - encoder->EncodeUInt32Value(set); - encoder->EncodeUInt32Value(descriptorWriteCount); - EncodeStructArray(encoder, pDescriptorWrites, descriptorWriteCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPushDescriptorSetKHRHandles, layout, descriptorWriteCount, pDescriptorWrites); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pMemoryRequirements); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkWriteDescriptorSet* pDescriptorWrites_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pDescriptorWrites, descriptorWriteCount, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites_unwrapped); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplateKHR( +VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2KHR( VkDevice device, - const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate) + const VkBufferMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12109,45 +13090,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplateKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateDescriptorUpdateTemplateKHR(device, pCreateInfo_unwrapped, pAllocator, pDescriptorUpdateTemplate); + const VkBufferMemoryRequirementsInfo2* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pDescriptorUpdateTemplate, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + vulkan_wrappers::GetDeviceTable(device)->GetBufferMemoryRequirements2KHR(device, pInfo_unwrapped, pMemoryRequirements); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDescriptorUpdateTemplateKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetBufferMemoryRequirements2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pDescriptorUpdateTemplate, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pDescriptorUpdateTemplate, pCreateInfo); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pMemoryRequirements); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); } -VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplateKHR( +VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2KHR( VkDevice device, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - const VkAllocationCallbacks* pAllocator) + const VkImageSparseMemoryRequirementsInfo2* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12163,31 +13130,32 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplateKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, descriptorUpdateTemplate, pAllocator); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyDescriptorUpdateTemplateKHR); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkImageSparseMemoryRequirementsInfo2* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(device)->GetImageSparseMemoryRequirements2KHR(device, pInfo_unwrapped, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageSparseMemoryRequirements2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(descriptorUpdateTemplate); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(descriptorUpdateTemplate); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeUInt32Ptr(pSparseMemoryRequirementCount); + EncodeStructArray(encoder, pSparseMemoryRequirements, (pSparseMemoryRequirementCount != nullptr) ? (*pSparseMemoryRequirementCount) : 0); + manager->EndApiCallCapture(); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, descriptorUpdateTemplate, pAllocator); - - vulkan_wrappers::DestroyWrappedHandle(descriptorUpdateTemplate); + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2KHR( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversionKHR( VkDevice device, - const VkRenderPassCreateInfo2* pCreateInfo, + const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, - VkRenderPass* pRenderPass) + VkSamplerYcbcrConversion* pYcbcrConversion) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12205,40 +13173,40 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2KHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pRenderPass); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pYcbcrConversion); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateRenderPass2KHR(device, pCreateInfo, pAllocator, pRenderPass); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateSamplerYcbcrConversionKHR(device, pCreateInfo, pAllocator, pYcbcrConversion); if (result >= 0) { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pRenderPass, VulkanCaptureManager::GetUniqueId); + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pYcbcrConversion, VulkanCaptureManager::GetUniqueId); } else { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateRenderPass2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateSamplerYcbcrConversionKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); EncodeStructPtr(encoder, pCreateInfo); EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pRenderPass, omit_output_data); + encoder->EncodeVulkanHandlePtr(pYcbcrConversion, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pRenderPass, pCreateInfo); + manager->EndCreateApiCallCapture(result, device, pYcbcrConversion, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pRenderPass); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pYcbcrConversion); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2KHR( - VkCommandBuffer commandBuffer, - const VkRenderPassBeginInfo* pRenderPassBegin, - const VkSubpassBeginInfo* pSubpassBeginInfo) +VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversionKHR( + VkDevice device, + VkSamplerYcbcrConversion ycbcrConversion, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12254,30 +13222,30 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pRenderPassBegin, pSubpassBeginInfo); + CustomEncoderPreCall::Dispatch(manager, device, ycbcrConversion, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginRenderPass2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroySamplerYcbcrConversionKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pRenderPassBegin); - EncodeStructPtr(encoder, pSubpassBeginInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginRenderPass2KHRHandles, pRenderPassBegin); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(ycbcrConversion); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(ycbcrConversion); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkRenderPassBeginInfo* pRenderPassBegin_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pRenderPassBegin, handle_unwrap_memory); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroySamplerYcbcrConversionKHR(device, ycbcrConversion, pAllocator); - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin_unwrapped, pSubpassBeginInfo); + CustomEncoderPostCall::Dispatch(manager, device, ycbcrConversion, pAllocator); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pRenderPassBegin, pSubpassBeginInfo); + vulkan_wrappers::DestroyWrappedHandle(ycbcrConversion); } -VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2KHR( - VkCommandBuffer commandBuffer, - const VkSubpassBeginInfo* pSubpassBeginInfo, - const VkSubpassEndInfo* pSubpassEndInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2KHR( + VkDevice device, + uint32_t bindInfoCount, + const VkBindBufferMemoryInfo* pBindInfos) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12293,26 +13261,33 @@ VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); + CustomEncoderPreCall::Dispatch(manager, device, bindInfoCount, pBindInfos); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdNextSubpass2KHR); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBindBufferMemoryInfo* pBindInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBindInfos, bindInfoCount, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindBufferMemory2KHR(device, bindInfoCount, pBindInfos_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindBufferMemory2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pSubpassBeginInfo); - EncodeStructPtr(encoder, pSubpassEndInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeUInt32Value(bindInfoCount); + EncodeStructArray(encoder, pBindInfos, bindInfoCount); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); + CustomEncoderPostCall::Dispatch(manager, result, device, bindInfoCount, pBindInfos); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2KHR( - VkCommandBuffer commandBuffer, - const VkSubpassEndInfo* pSubpassEndInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHR( + VkDevice device, + uint32_t bindInfoCount, + const VkBindImageMemoryInfo* pBindInfos) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12328,25 +13303,33 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pSubpassEndInfo); + CustomEncoderPreCall::Dispatch(manager, device, bindInfoCount, pBindInfos); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndRenderPass2KHR); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBindImageMemoryInfo* pBindInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBindInfos, bindInfoCount, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindImageMemory2KHR(device, bindInfoCount, pBindInfos_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindImageMemory2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pSubpassEndInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeUInt32Value(bindInfoCount); + EncodeStructArray(encoder, pBindInfos, bindInfoCount); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo); + CustomEncoderPostCall::Dispatch(manager, result, device, bindInfoCount, pBindInfos); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pSubpassEndInfo); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR( +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupportKHR( VkDevice device, - VkSwapchainKHR swapchain) + const VkDescriptorSetLayoutCreateInfo* pCreateInfo, + VkDescriptorSetLayoutSupport* pSupport) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12362,29 +13345,34 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, swapchain); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pSupport); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSwapchainStatusKHR(device, swapchain); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDescriptorSetLayoutCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSwapchainStatusKHR); + vulkan_wrappers::GetDeviceTable(device)->GetDescriptorSetLayoutSupportKHR(device, pCreateInfo_unwrapped, pSupport); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDescriptorSetLayoutSupportKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); - encoder->EncodeEnumValue(result); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pSupport); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, swapchain); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, pCreateInfo, pSupport); } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFencePropertiesKHR( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, - VkExternalFenceProperties* pExternalFenceProperties) +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountKHR( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12400,26 +13388,35 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFencePropertiesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pExternalFenceInfo, pExternalFenceProperties); - - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceExternalFencePropertiesKHR(physicalDevice, pExternalFenceInfo, pExternalFenceProperties); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalFencePropertiesKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawIndirectCountKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pExternalFenceInfo); - EncodeStructPtr(encoder, pExternalFenceProperties); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(buffer); + encoder->EncodeUInt64Value(offset); + encoder->EncodeVulkanHandleValue(countBuffer); + encoder->EncodeUInt64Value(countBufferOffset); + encoder->EncodeUInt32Value(maxDrawCount); + encoder->EncodeUInt32Value(stride); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawIndirectCountKHRHandles, buffer, countBuffer); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pExternalFenceInfo, pExternalFenceProperties); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } -VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceWin32HandleKHR( - VkDevice device, - const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountKHR( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12435,32 +13432,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceWin32HandleKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pImportFenceWin32HandleInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pImportFenceWin32HandleInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->ImportFenceWin32HandleKHR(device, pImportFenceWin32HandleInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkImportFenceWin32HandleKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawIndexedIndirectCountKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pImportFenceWin32HandleInfo); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(buffer); + encoder->EncodeUInt64Value(offset); + encoder->EncodeVulkanHandleValue(countBuffer); + encoder->EncodeUInt64Value(countBufferOffset); + encoder->EncodeUInt32Value(maxDrawCount); + encoder->EncodeUInt32Value(stride); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawIndexedIndirectCountKHRHandles, buffer, countBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pImportFenceWin32HandleInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceWin32HandleKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValueKHR( VkDevice device, - const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, - HANDLE* pHandle) + VkSemaphore semaphore, + uint64_t* pValue) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12478,36 +13474,34 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceWin32HandleKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pGetWin32HandleInfo, pHandle); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetWin32HandleInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, semaphore, pValue); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetFenceWin32HandleKHR(device, pGetWin32HandleInfo_unwrapped, pHandle); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSemaphoreCounterValueKHR(device, semaphore, pValue); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetFenceWin32HandleKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSemaphoreCounterValueKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pGetWin32HandleInfo); - encoder->EncodeVoidPtrPtr(pHandle, omit_output_data); + encoder->EncodeVulkanHandleValue(semaphore); + encoder->EncodeUInt64Ptr(pValue, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pGetWin32HandleInfo, pHandle); + CustomEncoderPostCall::Dispatch(manager, result, device, semaphore, pValue); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceFdKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphoresKHR( VkDevice device, - const VkImportFenceFdInfoKHR* pImportFenceFdInfo) + const VkSemaphoreWaitInfo* pWaitInfo, + uint64_t timeout) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12523,32 +13517,32 @@ VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceFdKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pImportFenceFdInfo); + CustomEncoderPreCall::Dispatch(manager, device, pWaitInfo, timeout); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkImportFenceFdInfoKHR* pImportFenceFdInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pImportFenceFdInfo, handle_unwrap_memory); + const VkSemaphoreWaitInfo* pWaitInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pWaitInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->ImportFenceFdKHR(device, pImportFenceFdInfo_unwrapped); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->WaitSemaphoresKHR(device, pWaitInfo_unwrapped, timeout); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkImportFenceFdKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkWaitSemaphoresKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pImportFenceFdInfo); + EncodeStructPtr(encoder, pWaitInfo); + encoder->EncodeUInt64Value(timeout); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pImportFenceFdInfo); + CustomEncoderPostCall::Dispatch(manager, result, device, pWaitInfo, timeout); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceFdKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphoreKHR( VkDevice device, - const VkFenceGetFdInfoKHR* pGetFdInfo, - int* pFd) + const VkSemaphoreSignalInfo* pSignalInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12564,41 +13558,32 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceFdKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pGetFdInfo, pFd); + CustomEncoderPreCall::Dispatch(manager, device, pSignalInfo); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkFenceGetFdInfoKHR* pGetFdInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetFdInfo, handle_unwrap_memory); + const VkSemaphoreSignalInfo* pSignalInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSignalInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetFenceFdKHR(device, pGetFdInfo_unwrapped, pFd); - if (result < 0) - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->SignalSemaphoreKHR(device, pSignalInfo_unwrapped); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetFenceFdKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSignalSemaphoreKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pGetFdInfo); - encoder->EncodeInt32Ptr(pFd, omit_output_data); + EncodeStructPtr(encoder, pSignalInfo); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pGetFdInfo, pFd); + CustomEncoderPostCall::Dispatch(manager, result, device, pSignalInfo); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceFragmentShadingRatesKHR( VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - uint32_t* pCounterCount, - VkPerformanceCounterKHR* pCounters, - VkPerformanceCounterDescriptionKHR* pCounterDescriptions) + uint32_t* pFragmentShadingRateCount, + VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12616,36 +13601,34 @@ VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceQueueFamilyPerformanceQu bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pFragmentShadingRateCount, pFragmentShadingRates); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(physicalDevice, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceFragmentShadingRatesKHR(physicalDevice, pFragmentShadingRateCount, pFragmentShadingRates); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceFragmentShadingRatesKHR); if (encoder) { encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Value(queueFamilyIndex); - encoder->EncodeUInt32Ptr(pCounterCount, omit_output_data); - EncodeStructArray(encoder, pCounters, (pCounterCount != nullptr) ? (*pCounterCount) : 0, omit_output_data); - EncodeStructArray(encoder, pCounterDescriptions, (pCounterCount != nullptr) ? (*pCounterCount) : 0, omit_output_data); + encoder->EncodeUInt32Ptr(pFragmentShadingRateCount, omit_output_data); + EncodeStructArray(encoder, pFragmentShadingRates, (pFragmentShadingRateCount != nullptr) ? (*pFragmentShadingRateCount) : 0, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pFragmentShadingRateCount, pFragmentShadingRates); return result; } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( - VkPhysicalDevice physicalDevice, - const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo, - uint32_t* pNumPasses) +VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateKHR( + VkCommandBuffer commandBuffer, + const VkExtent2D* pFragmentSize, + const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12661,26 +13644,26 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesK shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPerformanceQueryCreateInfo, pNumPasses); - - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(physicalDevice, pPerformanceQueryCreateInfo, pNumPasses); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pFragmentSize, combinerOps); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetFragmentShadingRateKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pPerformanceQueryCreateInfo); - encoder->EncodeUInt32Ptr(pNumPasses); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pFragmentSize); + encoder->EncodeEnumArray(combinerOps, 2); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, pPerformanceQueryCreateInfo, pNumPasses); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetFragmentShadingRateKHR(commandBuffer, pFragmentSize, combinerOps); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pFragmentSize, combinerOps); } -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireProfilingLockKHR( - VkDevice device, - const VkAcquireProfilingLockInfoKHR* pInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocationsKHR( + VkCommandBuffer commandBuffer, + const VkRenderingAttachmentLocationInfo* pLocationInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12696,27 +13679,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkAcquireProfilingLockKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->AcquireProfilingLockKHR(device, pInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pLocationInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAcquireProfilingLockKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRenderingAttachmentLocationsKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pLocationInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRenderingAttachmentLocationsKHR(commandBuffer, pLocationInfo); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pLocationInfo); } -VKAPI_ATTR void VKAPI_CALL vkReleaseProfilingLockKHR( - VkDevice device) +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndicesKHR( + VkCommandBuffer commandBuffer, + const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12732,25 +13713,27 @@ VKAPI_ATTR void VKAPI_CALL vkReleaseProfilingLockKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pInputAttachmentIndexInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkReleaseProfilingLockKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRenderingInputAttachmentIndicesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pInputAttachmentIndexInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(device)->ReleaseProfilingLockKHR(device); - - CustomEncoderPostCall::Dispatch(manager, device); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRenderingInputAttachmentIndicesKHR(commandBuffer, pInputAttachmentIndexInfo); -} + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pInputAttachmentIndexInfo); -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, - VkSurfaceCapabilities2KHR* pSurfaceCapabilities) +} + +VKAPI_ATTR VkResult VKAPI_CALL vkWaitForPresentKHR( + VkDevice device, + VkSwapchainKHR swapchain, + uint64_t presentId, + uint64_t timeout) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12766,40 +13749,30 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pSurfaceInfo, pSurfaceCapabilities); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSurfaceInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, swapchain, presentId, timeout); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, pSurfaceInfo_unwrapped, pSurfaceCapabilities); - if (result < 0) - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->WaitForPresentKHR(device, swapchain, presentId, timeout); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfaceCapabilities2KHR); - if (encoder) + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkWaitForPresentKHR); + if (encoder && manager->CheckWriteWaitForPresentKHR(result, device, swapchain, presentId, timeout)) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pSurfaceInfo); - EncodeStructPtr(encoder, pSurfaceCapabilities, omit_output_data); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(swapchain); + encoder->EncodeUInt64Value(presentId); + encoder->EncodeUInt64Value(timeout); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pSurfaceInfo, pSurfaceCapabilities); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, presentId, timeout); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, - uint32_t* pSurfaceFormatCount, - VkSurfaceFormat2KHR* pSurfaceFormats) +VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressKHR( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12815,40 +13788,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats); + CustomEncoderPreCall::Dispatch(manager, device, pInfo); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSurfaceInfo, handle_unwrap_memory); + const VkBufferDeviceAddressInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfaceFormats2KHR(physicalDevice, pSurfaceInfo_unwrapped, pSurfaceFormatCount, pSurfaceFormats); - if (result < 0) - { - omit_output_data = true; - } + VkDeviceAddress result = vulkan_wrappers::GetDeviceTable(device)->GetBufferDeviceAddressKHR(device, pInfo_unwrapped); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfaceFormats2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetBufferDeviceAddressKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pSurfaceInfo); - encoder->EncodeUInt32Ptr(pSurfaceFormatCount, omit_output_data); - EncodeStructArray(encoder, pSurfaceFormats, (pSurfaceFormatCount != nullptr) ? (*pSurfaceFormatCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeUInt64Value(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayProperties2KHR( - VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkDisplayProperties2KHR* pProperties) +VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddressKHR( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12864,41 +13828,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayProperties2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPropertyCount, pProperties); + CustomEncoderPreCall::Dispatch(manager, device, pInfo); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceDisplayProperties2KHR(physicalDevice, pPropertyCount, pProperties); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBufferDeviceAddressInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedStructArrayHandles(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + uint64_t result = vulkan_wrappers::GetDeviceTable(device)->GetBufferOpaqueCaptureAddressKHR(device, pInfo_unwrapped); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceDisplayProperties2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetBufferOpaqueCaptureAddressKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); - EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndStructGroupCreateApiCallCapture(result, physicalDevice, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, pProperties, [](VkDisplayProperties2KHR* handle_struct)->vulkan_wrappers::DisplayKHRWrapper* { return vulkan_wrappers::GetWrapper(handle_struct->displayProperties.display); }); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeUInt64Value(result); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pPropertyCount, pProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlaneProperties2KHR( - VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkDisplayPlaneProperties2KHR* pProperties) +VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddressKHR( + VkDevice device, + const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12914,42 +13868,32 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlaneProperties2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPropertyCount, pProperties); + CustomEncoderPreCall::Dispatch(manager, device, pInfo); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceDisplayPlaneProperties2KHR(physicalDevice, pPropertyCount, pProperties); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedStructArrayHandles(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + uint64_t result = vulkan_wrappers::GetDeviceTable(device)->GetDeviceMemoryOpaqueCaptureAddressKHR(device, pInfo_unwrapped); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceDisplayPlaneProperties2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceMemoryOpaqueCaptureAddressKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); - EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndStructGroupCreateApiCallCapture(result, physicalDevice, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, pProperties, [](VkDisplayPlaneProperties2KHR* handle_struct)->vulkan_wrappers::DisplayKHRWrapper* { return vulkan_wrappers::GetWrapper(handle_struct->displayPlaneProperties.currentDisplay); }); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeUInt64Value(result); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pPropertyCount, pProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModeProperties2KHR( - VkPhysicalDevice physicalDevice, - VkDisplayKHR display, - uint32_t* pPropertyCount, - VkDisplayModeProperties2KHR* pProperties) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDeferredOperationKHR( + VkDevice device, + const VkAllocationCallbacks* pAllocator, + VkDeferredOperationKHR* pDeferredOperation) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -12967,40 +13911,39 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModeProperties2KHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, physicalDevice, display, pPropertyCount, pProperties); + CustomEncoderPreCall::Dispatch(manager, device, pAllocator, pDeferredOperation); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetDisplayModeProperties2KHR(physicalDevice, display, pPropertyCount, pProperties); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateDeferredOperationKHR(device, pAllocator, pDeferredOperation); if (result >= 0) { - vulkan_wrappers::CreateWrappedStructArrayHandles(physicalDevice, display, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, VulkanCaptureManager::GetUniqueId); + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pDeferredOperation, VulkanCaptureManager::GetUniqueId); } else { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetDisplayModeProperties2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDeferredOperationKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeVulkanHandleValue(display); - encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); - EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pDeferredOperation, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndStructGroupCreateApiCallCapture(result, physicalDevice, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, pProperties, [](VkDisplayModeProperties2KHR* handle_struct)->vulkan_wrappers::DisplayModeKHRWrapper* { return vulkan_wrappers::GetWrapper(handle_struct->displayModeProperties.displayMode); }); + manager->EndCreateApiCallCapture(result, device, pDeferredOperation, nullptr); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, display, pPropertyCount, pProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, pAllocator, pDeferredOperation); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilities2KHR( - VkPhysicalDevice physicalDevice, - const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, - VkDisplayPlaneCapabilities2KHR* pCapabilities) +VKAPI_ATTR void VKAPI_CALL vkDestroyDeferredOperationKHR( + VkDevice device, + VkDeferredOperationKHR operation, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13016,39 +13959,29 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilities2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pDisplayPlaneInfo, pCapabilities); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pDisplayPlaneInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetDisplayPlaneCapabilities2KHR(physicalDevice, pDisplayPlaneInfo_unwrapped, pCapabilities); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, device, operation, pAllocator); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDisplayPlaneCapabilities2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyDeferredOperationKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pDisplayPlaneInfo); - EncodeStructPtr(encoder, pCapabilities, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(operation); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(operation); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pDisplayPlaneInfo, pCapabilities); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyDeferredOperationKHR(device, operation, pAllocator); - return result; + CustomEncoderPostCall::Dispatch(manager, device, operation, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(operation); } -VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2KHR( +VKAPI_ATTR uint32_t VKAPI_CALL vkGetDeferredOperationMaxConcurrencyKHR( VkDevice device, - const VkImageMemoryRequirementsInfo2* pInfo, - VkMemoryRequirements2* pMemoryRequirements) + VkDeferredOperationKHR operation) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13064,30 +13997,28 @@ VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkImageMemoryRequirementsInfo2* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, operation); - vulkan_wrappers::GetDeviceTable(device)->GetImageMemoryRequirements2KHR(device, pInfo_unwrapped, pMemoryRequirements); + uint32_t result = vulkan_wrappers::GetDeviceTable(device)->GetDeferredOperationMaxConcurrencyKHR(device, operation); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageMemoryRequirements2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeferredOperationMaxConcurrencyKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - EncodeStructPtr(encoder, pMemoryRequirements); + encoder->EncodeVulkanHandleValue(operation); + encoder->EncodeUInt32Value(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + CustomEncoderPostCall::Dispatch(manager, result, device, operation); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2KHR( +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeferredOperationResultKHR( VkDevice device, - const VkBufferMemoryRequirementsInfo2* pInfo, - VkMemoryRequirements2* pMemoryRequirements) + VkDeferredOperationKHR operation) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13103,31 +14034,28 @@ VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBufferMemoryRequirementsInfo2* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, operation); - vulkan_wrappers::GetDeviceTable(device)->GetBufferMemoryRequirements2KHR(device, pInfo_unwrapped, pMemoryRequirements); + VkResult result = manager->OverrideGetDeferredOperationResultKHR(device, operation); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetBufferMemoryRequirements2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeferredOperationResultKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - EncodeStructPtr(encoder, pMemoryRequirements); + encoder->EncodeVulkanHandleValue(operation); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + CustomEncoderPostCall::Dispatch(manager, result, device, operation); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2KHR( +VKAPI_ATTR VkResult VKAPI_CALL vkDeferredOperationJoinKHR( VkDevice device, - const VkImageSparseMemoryRequirementsInfo2* pInfo, - uint32_t* pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) + VkDeferredOperationKHR operation) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13143,32 +14071,30 @@ VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkImageSparseMemoryRequirementsInfo2* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, operation); - vulkan_wrappers::GetDeviceTable(device)->GetImageSparseMemoryRequirements2KHR(device, pInfo_unwrapped, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + VkResult result = manager->OverrideDeferredOperationJoinKHR(device, operation); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageSparseMemoryRequirements2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkDeferredOperationJoinKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeUInt32Ptr(pSparseMemoryRequirementCount); - EncodeStructArray(encoder, pSparseMemoryRequirements, (pSparseMemoryRequirementCount != nullptr) ? (*pSparseMemoryRequirementCount) : 0); + encoder->EncodeVulkanHandleValue(operation); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + CustomEncoderPostCall::Dispatch(manager, result, device, operation); + + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversionKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutablePropertiesKHR( VkDevice device, - const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSamplerYcbcrConversion* pYcbcrConversion) + const VkPipelineInfoKHR* pPipelineInfo, + uint32_t* pExecutableCount, + VkPipelineExecutablePropertiesKHR* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13186,40 +14112,39 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversionKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pYcbcrConversion); + CustomEncoderPreCall::Dispatch(manager, device, pPipelineInfo, pExecutableCount, pProperties); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateSamplerYcbcrConversionKHR(device, pCreateInfo, pAllocator, pYcbcrConversion); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkPipelineInfoKHR* pPipelineInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPipelineInfo, handle_unwrap_memory); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pYcbcrConversion, VulkanCaptureManager::GetUniqueId); - } - else + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPipelineExecutablePropertiesKHR(device, pPipelineInfo_unwrapped, pExecutableCount, pProperties); + if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateSamplerYcbcrConversionKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPipelineExecutablePropertiesKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pYcbcrConversion, omit_output_data); + EncodeStructPtr(encoder, pPipelineInfo); + encoder->EncodeUInt32Ptr(pExecutableCount, omit_output_data); + EncodeStructArray(encoder, pProperties, (pExecutableCount != nullptr) ? (*pExecutableCount) : 0, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pYcbcrConversion, pCreateInfo); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pYcbcrConversion); + CustomEncoderPostCall::Dispatch(manager, result, device, pPipelineInfo, pExecutableCount, pProperties); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversionKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableStatisticsKHR( VkDevice device, - VkSamplerYcbcrConversion ycbcrConversion, - const VkAllocationCallbacks* pAllocator) + const VkPipelineExecutableInfoKHR* pExecutableInfo, + uint32_t* pStatisticCount, + VkPipelineExecutableStatisticKHR* pStatistics) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13235,30 +14160,41 @@ VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversionKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, ycbcrConversion, pAllocator); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroySamplerYcbcrConversionKHR); + CustomEncoderPreCall::Dispatch(manager, device, pExecutableInfo, pStatisticCount, pStatistics); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkPipelineExecutableInfoKHR* pExecutableInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pExecutableInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPipelineExecutableStatisticsKHR(device, pExecutableInfo_unwrapped, pStatisticCount, pStatistics); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPipelineExecutableStatisticsKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(ycbcrConversion); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(ycbcrConversion); + EncodeStructPtr(encoder, pExecutableInfo); + encoder->EncodeUInt32Ptr(pStatisticCount, omit_output_data); + EncodeStructArray(encoder, pStatistics, (pStatisticCount != nullptr) ? (*pStatisticCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroySamplerYcbcrConversionKHR(device, ycbcrConversion, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, ycbcrConversion, pAllocator); + CustomEncoderPostCall::Dispatch(manager, result, device, pExecutableInfo, pStatisticCount, pStatistics); - vulkan_wrappers::DestroyWrappedHandle(ycbcrConversion); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2KHR( +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableInternalRepresentationsKHR( VkDevice device, - uint32_t bindInfoCount, - const VkBindBufferMemoryInfo* pBindInfos) + const VkPipelineExecutableInfoKHR* pExecutableInfo, + uint32_t* pInternalRepresentationCount, + VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13274,33 +14210,40 @@ VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, bindInfoCount, pBindInfos); + bool omit_output_data = false; + + CustomEncoderPreCall::Dispatch(manager, device, pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBindBufferMemoryInfo* pBindInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBindInfos, bindInfoCount, handle_unwrap_memory); + const VkPipelineExecutableInfoKHR* pExecutableInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pExecutableInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindBufferMemory2KHR(device, bindInfoCount, pBindInfos_unwrapped); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPipelineExecutableInternalRepresentationsKHR(device, pExecutableInfo_unwrapped, pInternalRepresentationCount, pInternalRepresentations); + if (result < 0) + { + omit_output_data = true; + } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindBufferMemory2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPipelineExecutableInternalRepresentationsKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeUInt32Value(bindInfoCount); - EncodeStructArray(encoder, pBindInfos, bindInfoCount); + EncodeStructPtr(encoder, pExecutableInfo); + encoder->EncodeUInt32Ptr(pInternalRepresentationCount, omit_output_data); + EncodeStructArray(encoder, pInternalRepresentations, (pInternalRepresentationCount != nullptr) ? (*pInternalRepresentationCount) : 0, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, bindInfoCount, pBindInfos); + CustomEncoderPostCall::Dispatch(manager, result, device, pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHR( +VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2KHR( VkDevice device, - uint32_t bindInfoCount, - const VkBindImageMemoryInfo* pBindInfos) + const VkMemoryMapInfo* pMemoryMapInfo, + void** ppData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13316,33 +14259,38 @@ VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, bindInfoCount, pBindInfos); + bool omit_output_data = false; + + CustomEncoderPreCall::Dispatch(manager, device, pMemoryMapInfo, ppData); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBindImageMemoryInfo* pBindInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBindInfos, bindInfoCount, handle_unwrap_memory); + const VkMemoryMapInfo* pMemoryMapInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pMemoryMapInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindImageMemory2KHR(device, bindInfoCount, pBindInfos_unwrapped); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->MapMemory2KHR(device, pMemoryMapInfo_unwrapped, ppData); + if (result < 0) + { + omit_output_data = true; + } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindImageMemory2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkMapMemory2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeUInt32Value(bindInfoCount); - EncodeStructArray(encoder, pBindInfos, bindInfoCount); + EncodeStructPtr(encoder, pMemoryMapInfo); + encoder->EncodeVoidPtrPtr(ppData, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, bindInfoCount, pBindInfos); + CustomEncoderPostCall::Dispatch(manager, result, device, pMemoryMapInfo, ppData); return result; } -VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupportKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2KHR( VkDevice device, - const VkDescriptorSetLayoutCreateInfo* pCreateInfo, - VkDescriptorSetLayoutSupport* pSupport) + const VkMemoryUnmapInfo* pMemoryUnmapInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13358,34 +14306,32 @@ VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupportKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pSupport); + CustomEncoderPreCall::Dispatch(manager, device, pMemoryUnmapInfo); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDescriptorSetLayoutCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); + const VkMemoryUnmapInfo* pMemoryUnmapInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pMemoryUnmapInfo, handle_unwrap_memory); - vulkan_wrappers::GetDeviceTable(device)->GetDescriptorSetLayoutSupportKHR(device, pCreateInfo_unwrapped, pSupport); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->UnmapMemory2KHR(device, pMemoryUnmapInfo_unwrapped); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDescriptorSetLayoutSupportKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkUnmapMemory2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pSupport); + EncodeStructPtr(encoder, pMemoryUnmapInfo); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, pCreateInfo, pSupport); + CustomEncoderPostCall::Dispatch(manager, result, device, pMemoryUnmapInfo); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountKHR( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo, + VkVideoEncodeQualityLevelPropertiesKHR* pQualityLevelProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13401,35 +14347,38 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawIndirectCountKHR); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pQualityLevelInfo, pQualityLevelProperties); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR(physicalDevice, pQualityLevelInfo, pQualityLevelProperties); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(buffer); - encoder->EncodeUInt64Value(offset); - encoder->EncodeVulkanHandleValue(countBuffer); - encoder->EncodeUInt64Value(countBufferOffset); - encoder->EncodeUInt32Value(maxDrawCount); - encoder->EncodeUInt32Value(stride); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawIndirectCountKHRHandles, buffer, countBuffer); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pQualityLevelInfo); + EncodeStructPtr(encoder, pQualityLevelProperties, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pQualityLevelInfo, pQualityLevelProperties); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountKHR( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) +VKAPI_ATTR VkResult VKAPI_CALL vkGetEncodedVideoSessionParametersKHR( + VkDevice device, + const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo, + VkVideoEncodeSessionParametersFeedbackInfoKHR* pFeedbackInfo, + size_t* pDataSize, + void* pData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13445,31 +14394,40 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawIndexedIndirectCountKHR); + CustomEncoderPreCall::Dispatch(manager, device, pVideoSessionParametersInfo, pFeedbackInfo, pDataSize, pData); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pVideoSessionParametersInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetEncodedVideoSessionParametersKHR(device, pVideoSessionParametersInfo_unwrapped, pFeedbackInfo, pDataSize, pData); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetEncodedVideoSessionParametersKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(buffer); - encoder->EncodeUInt64Value(offset); - encoder->EncodeVulkanHandleValue(countBuffer); - encoder->EncodeUInt64Value(countBufferOffset); - encoder->EncodeUInt32Value(maxDrawCount); - encoder->EncodeUInt32Value(stride); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawIndexedIndirectCountKHRHandles, buffer, countBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pVideoSessionParametersInfo); + EncodeStructPtr(encoder, pFeedbackInfo, omit_output_data); + encoder->EncodeSizeTPtr(pDataSize, omit_output_data); + encoder->EncodeVoidArray(pData, (pDataSize != nullptr) ? (*pDataSize) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + CustomEncoderPostCall::Dispatch(manager, result, device, pVideoSessionParametersInfo, pFeedbackInfo, pDataSize, pData); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValueKHR( - VkDevice device, - VkSemaphore semaphore, - uint64_t* pValue) +VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR( + VkCommandBuffer commandBuffer, + const VkVideoEncodeInfoKHR* pEncodeInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13485,36 +14443,29 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValueKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, semaphore, pValue); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSemaphoreCounterValueKHR(device, semaphore, pValue); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pEncodeInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSemaphoreCounterValueKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEncodeVideoKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(semaphore); - encoder->EncodeUInt64Ptr(pValue, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pEncodeInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdEncodeVideoKHRHandles, pEncodeInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, semaphore, pValue); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkVideoEncodeInfoKHR* pEncodeInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pEncodeInfo, handle_unwrap_memory); - return result; + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEncodeVideoKHR(commandBuffer, pEncodeInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pEncodeInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphoresKHR( - VkDevice device, - const VkSemaphoreWaitInfo* pWaitInfo, - uint64_t timeout) +VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2KHR( + VkCommandBuffer commandBuffer, + VkEvent event, + const VkDependencyInfo* pDependencyInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13530,32 +14481,30 @@ VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphoresKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pWaitInfo, timeout); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkSemaphoreWaitInfo* pWaitInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pWaitInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->WaitSemaphoresKHR(device, pWaitInfo_unwrapped, timeout); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, event, pDependencyInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkWaitSemaphoresKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetEvent2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pWaitInfo); - encoder->EncodeUInt64Value(timeout); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(event); + EncodeStructPtr(encoder, pDependencyInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdSetEvent2KHRHandles, event, pDependencyInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pWaitInfo, timeout); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDependencyInfo* pDependencyInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pDependencyInfo, handle_unwrap_memory); - return result; + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetEvent2KHR(commandBuffer, event, pDependencyInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, event, pDependencyInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphoreKHR( - VkDevice device, - const VkSemaphoreSignalInfo* pSignalInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2KHR( + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags2 stageMask) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13571,32 +14520,28 @@ VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphoreKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pSignalInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkSemaphoreSignalInfo* pSignalInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSignalInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->SignalSemaphoreKHR(device, pSignalInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, event, stageMask); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSignalSemaphoreKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdResetEvent2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pSignalInfo); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(event); + encoder->EncodeFlags64Value(stageMask); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdResetEvent2KHRHandles, event); } - CustomEncoderPostCall::Dispatch(manager, result, device, pSignalInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdResetEvent2KHR(commandBuffer, event, stageMask); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, event, stageMask); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceFragmentShadingRatesKHR( - VkPhysicalDevice physicalDevice, - uint32_t* pFragmentShadingRateCount, - VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates) +VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2KHR( + VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent* pEvents, + const VkDependencyInfo* pDependencyInfos) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13612,36 +14557,30 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceFragmentShadingRatesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pFragmentShadingRateCount, pFragmentShadingRates); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceFragmentShadingRatesKHR(physicalDevice, pFragmentShadingRateCount, pFragmentShadingRates); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, eventCount, pEvents, pDependencyInfos); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceFragmentShadingRatesKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWaitEvents2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pFragmentShadingRateCount, omit_output_data); - EncodeStructArray(encoder, pFragmentShadingRates, (pFragmentShadingRateCount != nullptr) ? (*pFragmentShadingRateCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(eventCount); + encoder->EncodeVulkanHandleArray(pEvents, eventCount); + EncodeStructArray(encoder, pDependencyInfos, eventCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWaitEvents2KHRHandles, eventCount, pEvents, pDependencyInfos); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pFragmentShadingRateCount, pFragmentShadingRates); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDependencyInfo* pDependencyInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pDependencyInfos, eventCount, handle_unwrap_memory); - return result; + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWaitEvents2KHR(commandBuffer, eventCount, pEvents, pDependencyInfos_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, eventCount, pEvents, pDependencyInfos); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateKHR( +VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2KHR( VkCommandBuffer commandBuffer, - const VkExtent2D* pFragmentSize, - const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) + const VkDependencyInfo* pDependencyInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13657,26 +14596,30 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pFragmentSize, combinerOps); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pDependencyInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetFragmentShadingRateKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPipelineBarrier2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pFragmentSize); - encoder->EncodeEnumArray(combinerOps, 2); - manager->EndCommandApiCallCapture(commandBuffer); + EncodeStructPtr(encoder, pDependencyInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPipelineBarrier2KHRHandles, pDependencyInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetFragmentShadingRateKHR(commandBuffer, pFragmentSize, combinerOps); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDependencyInfo* pDependencyInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pDependencyInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pFragmentSize, combinerOps); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPipelineBarrier2KHR(commandBuffer, pDependencyInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pDependencyInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocationsKHR( +VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2KHR( VkCommandBuffer commandBuffer, - const VkRenderingAttachmentLocationInfo* pLocationInfo) + VkPipelineStageFlags2 stage, + VkQueryPool queryPool, + uint32_t query) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13692,25 +14635,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocationsKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pLocationInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, stage, queryPool, query); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRenderingAttachmentLocationsKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWriteTimestamp2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pLocationInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeFlags64Value(stage); + encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeUInt32Value(query); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWriteTimestamp2KHRHandles, queryPool); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRenderingAttachmentLocationsKHR(commandBuffer, pLocationInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWriteTimestamp2KHR(commandBuffer, stage, queryPool, query); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pLocationInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, stage, queryPool, query); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndicesKHR( - VkCommandBuffer commandBuffer, - const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2KHR( + VkQueue queue, + uint32_t submitCount, + const VkSubmitInfo2* pSubmits, + VkFence fence) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13726,27 +14673,33 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndicesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pInputAttachmentIndexInfo); + CustomEncoderPreCall::Dispatch(manager, shared_api_call_lock, queue, submitCount, pSubmits, fence); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRenderingInputAttachmentIndicesKHR); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkSubmitInfo2* pSubmits_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pSubmits, submitCount, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(queue)->QueueSubmit2KHR(queue, submitCount, pSubmits_unwrapped, fence); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueueSubmit2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pInputAttachmentIndexInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(queue); + encoder->EncodeUInt32Value(submitCount); + EncodeStructArray(encoder, pSubmits, submitCount); + encoder->EncodeVulkanHandleValue(fence); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRenderingInputAttachmentIndicesKHR(commandBuffer, pInputAttachmentIndexInfo); + CustomEncoderPostCall::Dispatch(manager, shared_api_call_lock, result, queue, submitCount, pSubmits, fence); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pInputAttachmentIndexInfo); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkWaitForPresentKHR( - VkDevice device, - VkSwapchainKHR swapchain, - uint64_t presentId, - uint64_t timeout) +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2KHR( + VkCommandBuffer commandBuffer, + const VkCopyBufferInfo2* pCopyBufferInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13762,30 +14715,28 @@ VKAPI_ATTR VkResult VKAPI_CALL vkWaitForPresentKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, swapchain, presentId, timeout); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->WaitForPresentKHR(device, swapchain, presentId, timeout); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyBufferInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkWaitForPresentKHR); - if (encoder && manager->CheckWriteWaitForPresentKHR(result, device, swapchain, presentId, timeout)) + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyBuffer2KHR); + if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); - encoder->EncodeUInt64Value(presentId); - encoder->EncodeUInt64Value(timeout); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pCopyBufferInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyBuffer2KHRHandles, pCopyBufferInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, presentId, timeout); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyBufferInfo2* pCopyBufferInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyBufferInfo, handle_unwrap_memory); - return result; + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyBuffer2KHR(commandBuffer, pCopyBufferInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyBufferInfo); } -VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressKHR( - VkDevice device, - const VkBufferDeviceAddressInfo* pInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2KHR( + VkCommandBuffer commandBuffer, + const VkCopyImageInfo2* pCopyImageInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13801,31 +14752,28 @@ VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBufferDeviceAddressInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - VkDeviceAddress result = vulkan_wrappers::GetDeviceTable(device)->GetBufferDeviceAddressKHR(device, pInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyImageInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetBufferDeviceAddressKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyImage2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeUInt64Value(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pCopyImageInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyImage2KHRHandles, pCopyImageInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyImageInfo2* pCopyImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyImage2KHR(commandBuffer, pCopyImageInfo_unwrapped); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyImageInfo); } -VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddressKHR( - VkDevice device, - const VkBufferDeviceAddressInfo* pInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2KHR( + VkCommandBuffer commandBuffer, + const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13841,31 +14789,28 @@ VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddressKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBufferDeviceAddressInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - uint64_t result = vulkan_wrappers::GetDeviceTable(device)->GetBufferOpaqueCaptureAddressKHR(device, pInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyBufferToImageInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetBufferOpaqueCaptureAddressKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyBufferToImage2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeUInt64Value(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pCopyBufferToImageInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyBufferToImage2KHRHandles, pCopyBufferToImageInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyBufferToImageInfo, handle_unwrap_memory); - return result; + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyBufferToImage2KHR(commandBuffer, pCopyBufferToImageInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyBufferToImageInfo); } -VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddressKHR( - VkDevice device, - const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2KHR( + VkCommandBuffer commandBuffer, + const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13881,32 +14826,28 @@ VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddressKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - uint64_t result = vulkan_wrappers::GetDeviceTable(device)->GetDeviceMemoryOpaqueCaptureAddressKHR(device, pInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyImageToBufferInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceMemoryOpaqueCaptureAddressKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyImageToBuffer2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeUInt64Value(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pCopyImageToBufferInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyImageToBuffer2KHRHandles, pCopyImageToBufferInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageToBufferInfo, handle_unwrap_memory); - return result; + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyImageToBuffer2KHR(commandBuffer, pCopyImageToBufferInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyImageToBufferInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDeferredOperationKHR( - VkDevice device, - const VkAllocationCallbacks* pAllocator, - VkDeferredOperationKHR* pDeferredOperation) +VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2KHR( + VkCommandBuffer commandBuffer, + const VkBlitImageInfo2* pBlitImageInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13922,41 +14863,28 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDeferredOperationKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pAllocator, pDeferredOperation); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateDeferredOperationKHR(device, pAllocator, pDeferredOperation); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pDeferredOperation, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBlitImageInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDeferredOperationKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBlitImage2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pDeferredOperation, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pDeferredOperation, nullptr); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pBlitImageInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBlitImage2KHRHandles, pBlitImageInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pAllocator, pDeferredOperation); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBlitImageInfo2* pBlitImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBlitImageInfo, handle_unwrap_memory); - return result; + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBlitImage2KHR(commandBuffer, pBlitImageInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pBlitImageInfo); } -VKAPI_ATTR void VKAPI_CALL vkDestroyDeferredOperationKHR( - VkDevice device, - VkDeferredOperationKHR operation, - const VkAllocationCallbacks* pAllocator) +VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2KHR( + VkCommandBuffer commandBuffer, + const VkResolveImageInfo2* pResolveImageInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -13972,29 +14900,28 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyDeferredOperationKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, operation, pAllocator); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pResolveImageInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyDeferredOperationKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdResolveImage2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(operation); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(operation); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pResolveImageInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdResolveImage2KHRHandles, pResolveImageInfo); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyDeferredOperationKHR(device, operation, pAllocator); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkResolveImageInfo2* pResolveImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pResolveImageInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, device, operation, pAllocator); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdResolveImage2KHR(commandBuffer, pResolveImageInfo_unwrapped); - vulkan_wrappers::DestroyWrappedHandle(operation); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pResolveImageInfo); } -VKAPI_ATTR uint32_t VKAPI_CALL vkGetDeferredOperationMaxConcurrencyKHR( - VkDevice device, - VkDeferredOperationKHR operation) +VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysIndirect2KHR( + VkCommandBuffer commandBuffer, + VkDeviceAddress indirectDeviceAddress) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14010,28 +14937,26 @@ VKAPI_ATTR uint32_t VKAPI_CALL vkGetDeferredOperationMaxConcurrencyKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, operation); - - uint32_t result = vulkan_wrappers::GetDeviceTable(device)->GetDeferredOperationMaxConcurrencyKHR(device, operation); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, indirectDeviceAddress); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeferredOperationMaxConcurrencyKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdTraceRaysIndirect2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(operation); - encoder->EncodeUInt32Value(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt64Value(indirectDeviceAddress); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, operation); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdTraceRaysIndirect2KHR(commandBuffer, indirectDeviceAddress); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, indirectDeviceAddress); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetDeferredOperationResultKHR( +VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirementsKHR( VkDevice device, - VkDeferredOperationKHR operation) + const VkDeviceBufferMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14047,28 +14972,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetDeferredOperationResultKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, operation); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); - VkResult result = manager->OverrideGetDeferredOperationResultKHR(device, operation); + vulkan_wrappers::GetDeviceTable(device)->GetDeviceBufferMemoryRequirementsKHR(device, pInfo, pMemoryRequirements); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeferredOperationResultKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceBufferMemoryRequirementsKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(operation); - encoder->EncodeEnumValue(result); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pMemoryRequirements); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, operation); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); } -VKAPI_ATTR VkResult VKAPI_CALL vkDeferredOperationJoinKHR( +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirementsKHR( VkDevice device, - VkDeferredOperationKHR operation) + const VkDeviceImageMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14084,30 +15008,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkDeferredOperationJoinKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, operation); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); - VkResult result = manager->OverrideDeferredOperationJoinKHR(device, operation); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDeviceImageMemoryRequirements* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkDeferredOperationJoinKHR); + vulkan_wrappers::GetDeviceTable(device)->GetDeviceImageMemoryRequirementsKHR(device, pInfo_unwrapped, pMemoryRequirements); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceImageMemoryRequirementsKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(operation); - encoder->EncodeEnumValue(result); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pMemoryRequirements); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, operation); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutablePropertiesKHR( +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirementsKHR( VkDevice device, - const VkPipelineInfoKHR* pPipelineInfo, - uint32_t* pExecutableCount, - VkPipelineExecutablePropertiesKHR* pProperties) + const VkDeviceImageMemoryRequirements* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14123,41 +15048,33 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutablePropertiesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pPipelineInfo, pExecutableCount, pProperties); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPipelineInfoKHR* pPipelineInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPipelineInfo, handle_unwrap_memory); + const VkDeviceImageMemoryRequirements* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPipelineExecutablePropertiesKHR(device, pPipelineInfo_unwrapped, pExecutableCount, pProperties); - if (result < 0) - { - omit_output_data = true; - } + vulkan_wrappers::GetDeviceTable(device)->GetDeviceImageSparseMemoryRequirementsKHR(device, pInfo_unwrapped, pSparseMemoryRequirementCount, pSparseMemoryRequirements); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPipelineExecutablePropertiesKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceImageSparseMemoryRequirementsKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pPipelineInfo); - encoder->EncodeUInt32Ptr(pExecutableCount, omit_output_data); - EncodeStructArray(encoder, pProperties, (pExecutableCount != nullptr) ? (*pExecutableCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeUInt32Ptr(pSparseMemoryRequirementCount); + EncodeStructArray(encoder, pSparseMemoryRequirements, (pSparseMemoryRequirementCount != nullptr) ? (*pSparseMemoryRequirementCount) : 0); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pPipelineInfo, pExecutableCount, pProperties); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableStatisticsKHR( - VkDevice device, - const VkPipelineExecutableInfoKHR* pExecutableInfo, - uint32_t* pStatisticCount, - VkPipelineExecutableStatisticKHR* pStatistics) +VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2KHR( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14173,41 +15090,29 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableStatisticsKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pExecutableInfo, pStatisticCount, pStatistics); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPipelineExecutableInfoKHR* pExecutableInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pExecutableInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPipelineExecutableStatisticsKHR(device, pExecutableInfo_unwrapped, pStatisticCount, pStatistics); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, size, indexType); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPipelineExecutableStatisticsKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindIndexBuffer2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pExecutableInfo); - encoder->EncodeUInt32Ptr(pStatisticCount, omit_output_data); - EncodeStructArray(encoder, pStatistics, (pStatisticCount != nullptr) ? (*pStatisticCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(buffer); + encoder->EncodeUInt64Value(offset); + encoder->EncodeUInt64Value(size); + encoder->EncodeEnumValue(indexType); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindIndexBuffer2KHRHandles, buffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pExecutableInfo, pStatisticCount, pStatistics); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindIndexBuffer2KHR(commandBuffer, buffer, offset, size, indexType); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, size, indexType); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableInternalRepresentationsKHR( +VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularityKHR( VkDevice device, - const VkPipelineExecutableInfoKHR* pExecutableInfo, - uint32_t* pInternalRepresentationCount, - VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations) + const VkRenderingAreaInfo* pRenderingAreaInfo, + VkExtent2D* pGranularity) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14223,40 +15128,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableInternalRepresentationsKHR shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPipelineExecutableInfoKHR* pExecutableInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pExecutableInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, pRenderingAreaInfo, pGranularity); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPipelineExecutableInternalRepresentationsKHR(device, pExecutableInfo_unwrapped, pInternalRepresentationCount, pInternalRepresentations); - if (result < 0) - { - omit_output_data = true; - } + vulkan_wrappers::GetDeviceTable(device)->GetRenderingAreaGranularityKHR(device, pRenderingAreaInfo, pGranularity); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPipelineExecutableInternalRepresentationsKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetRenderingAreaGranularityKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pExecutableInfo); - encoder->EncodeUInt32Ptr(pInternalRepresentationCount, omit_output_data); - EncodeStructArray(encoder, pInternalRepresentations, (pInternalRepresentationCount != nullptr) ? (*pInternalRepresentationCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); + EncodeStructPtr(encoder, pRenderingAreaInfo); + EncodeStructPtr(encoder, pGranularity); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, pRenderingAreaInfo, pGranularity); } -VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2KHR( +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayoutKHR( VkDevice device, - const VkMemoryMapInfo* pMemoryMapInfo, - void** ppData) + const VkDeviceImageSubresourceInfo* pInfo, + VkSubresourceLayout2* pLayout) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14272,38 +15164,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pMemoryMapInfo, ppData); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pLayout); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkMemoryMapInfo* pMemoryMapInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pMemoryMapInfo, handle_unwrap_memory); + const VkDeviceImageSubresourceInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->MapMemory2KHR(device, pMemoryMapInfo_unwrapped, ppData); - if (result < 0) - { - omit_output_data = true; - } + vulkan_wrappers::GetDeviceTable(device)->GetDeviceImageSubresourceLayoutKHR(device, pInfo_unwrapped, pLayout); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkMapMemory2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceImageSubresourceLayoutKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pMemoryMapInfo); - encoder->EncodeVoidPtrPtr(ppData, omit_output_data); - encoder->EncodeEnumValue(result); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pLayout); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pMemoryMapInfo, ppData); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pLayout); } -VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2KHR( +VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2KHR( VkDevice device, - const VkMemoryUnmapInfo* pMemoryUnmapInfo) + VkImage image, + const VkImageSubresource2* pSubresource, + VkSubresourceLayout2* pLayout) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14319,32 +15204,28 @@ VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pMemoryUnmapInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkMemoryUnmapInfo* pMemoryUnmapInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pMemoryUnmapInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, image, pSubresource, pLayout); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->UnmapMemory2KHR(device, pMemoryUnmapInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(device)->GetImageSubresourceLayout2KHR(device, image, pSubresource, pLayout); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkUnmapMemory2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageSubresourceLayout2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pMemoryUnmapInfo); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(image); + EncodeStructPtr(encoder, pSubresource); + EncodeStructPtr(encoder, pLayout); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pMemoryUnmapInfo); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, image, pSubresource, pLayout); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo, - VkVideoEncodeQualityLevelPropertiesKHR* pQualityLevelProperties) +VKAPI_ATTR VkResult VKAPI_CALL vkWaitForPresent2KHR( + VkDevice device, + VkSwapchainKHR swapchain, + const VkPresentWait2InfoKHR* pPresentWait2Info) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14360,38 +15241,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoEncodeQualityLevelPropert shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pQualityLevelInfo, pQualityLevelProperties); + CustomEncoderPreCall::Dispatch(manager, device, swapchain, pPresentWait2Info); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR(physicalDevice, pQualityLevelInfo, pQualityLevelProperties); - if (result < 0) - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->WaitForPresent2KHR(device, swapchain, pPresentWait2Info); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkWaitForPresent2KHR); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pQualityLevelInfo); - EncodeStructPtr(encoder, pQualityLevelProperties, omit_output_data); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(swapchain); + EncodeStructPtr(encoder, pPresentWait2Info); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pQualityLevelInfo, pQualityLevelProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, pPresentWait2Info); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetEncodedVideoSessionParametersKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineBinariesKHR( VkDevice device, - const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo, - VkVideoEncodeSessionParametersFeedbackInfoKHR* pFeedbackInfo, - size_t* pDataSize, - void* pData) + const VkPipelineBinaryCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkPipelineBinaryHandlesInfoKHR* pBinaries) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14409,38 +15283,43 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetEncodedVideoSessionParametersKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pVideoSessionParametersInfo, pFeedbackInfo, pDataSize, pData); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pBinaries); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pVideoSessionParametersInfo, handle_unwrap_memory); + const VkPipelineBinaryCreateInfoKHR* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetEncodedVideoSessionParametersKHR(device, pVideoSessionParametersInfo_unwrapped, pFeedbackInfo, pDataSize, pData); - if (result < 0) + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreatePipelineBinariesKHR(device, pCreateInfo_unwrapped, pAllocator, pBinaries); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedStructHandles(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pBinaries, VulkanCaptureManager::GetUniqueId); + } + else { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetEncodedVideoSessionParametersKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreatePipelineBinariesKHR); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pVideoSessionParametersInfo); - EncodeStructPtr(encoder, pFeedbackInfo, omit_output_data); - encoder->EncodeSizeTPtr(pDataSize, omit_output_data); - encoder->EncodeVoidArray(pData, (pDataSize != nullptr) ? (*pDataSize) : 0, omit_output_data); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + EncodeStructPtr(encoder, pBinaries, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndStructGroupCreateApiCallCapture(result, device, pBinaries->pipelineBinaryCount, pBinaries, nullptr); } - CustomEncoderPostCall::Dispatch(manager, result, device, pVideoSessionParametersInfo, pFeedbackInfo, pDataSize, pData); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pBinaries); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR( - VkCommandBuffer commandBuffer, - const VkVideoEncodeInfoKHR* pEncodeInfo) +VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineBinaryKHR( + VkDevice device, + VkPipelineBinaryKHR pipelineBinary, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14456,29 +15335,30 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pEncodeInfo); + CustomEncoderPreCall::Dispatch(manager, device, pipelineBinary, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEncodeVideoKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyPipelineBinaryKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pEncodeInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdEncodeVideoKHRHandles, pEncodeInfo); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(pipelineBinary); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(pipelineBinary); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkVideoEncodeInfoKHR* pEncodeInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pEncodeInfo, handle_unwrap_memory); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyPipelineBinaryKHR(device, pipelineBinary, pAllocator); - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEncodeVideoKHR(commandBuffer, pEncodeInfo_unwrapped); + CustomEncoderPostCall::Dispatch(manager, device, pipelineBinary, pAllocator); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pEncodeInfo); + vulkan_wrappers::DestroyWrappedHandle(pipelineBinary); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2KHR( - VkCommandBuffer commandBuffer, - VkEvent event, - const VkDependencyInfo* pDependencyInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineKeyKHR( + VkDevice device, + const VkPipelineCreateInfoKHR* pPipelineCreateInfo, + VkPipelineBinaryKeyKHR* pPipelineKey) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14494,67 +15374,38 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, event, pDependencyInfo); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetEvent2KHR); - if (encoder) - { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(event); - EncodeStructPtr(encoder, pDependencyInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdSetEvent2KHRHandles, event, pDependencyInfo); - } - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDependencyInfo* pDependencyInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pDependencyInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetEvent2KHR(commandBuffer, event, pDependencyInfo_unwrapped); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, event, pDependencyInfo); + bool omit_output_data = false; -} + CustomEncoderPreCall::Dispatch(manager, device, pPipelineCreateInfo, pPipelineKey); -VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2KHR( - VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags2 stageMask) -{ - VulkanCaptureManager* manager = VulkanCaptureManager::Get(); - GFXRECON_ASSERT(manager != nullptr); - auto force_command_serialization = manager->GetForceCommandSerialization(); - std::shared_lock shared_api_call_lock; - std::unique_lock exclusive_api_call_lock; - if (force_command_serialization) - { - exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); - } - else + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPipelineKeyKHR(device, pPipelineCreateInfo, pPipelineKey); + if (result < 0) { - shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + omit_output_data = true; } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, event, stageMask); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdResetEvent2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPipelineKeyKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(event); - encoder->EncodeFlags64Value(stageMask); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdResetEvent2KHRHandles, event); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pPipelineCreateInfo); + EncodeStructPtr(encoder, pPipelineKey, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdResetEvent2KHR(commandBuffer, event, stageMask); + CustomEncoderPostCall::Dispatch(manager, result, device, pPipelineCreateInfo, pPipelineKey); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, event, stageMask); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2KHR( - VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent* pEvents, - const VkDependencyInfo* pDependencyInfos) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineBinaryDataKHR( + VkDevice device, + const VkPipelineBinaryDataInfoKHR* pInfo, + VkPipelineBinaryKeyKHR* pPipelineBinaryKey, + size_t* pPipelineBinaryDataSize, + void* pPipelineBinaryData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14570,30 +15421,41 @@ VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, eventCount, pEvents, pDependencyInfos); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWaitEvents2KHR); - if (encoder) + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pPipelineBinaryKey, pPipelineBinaryDataSize, pPipelineBinaryData); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkPipelineBinaryDataInfoKHR* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPipelineBinaryDataKHR(device, pInfo_unwrapped, pPipelineBinaryKey, pPipelineBinaryDataSize, pPipelineBinaryData); + if (result < 0) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(eventCount); - encoder->EncodeVulkanHandleArray(pEvents, eventCount); - EncodeStructArray(encoder, pDependencyInfos, eventCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWaitEvents2KHRHandles, eventCount, pEvents, pDependencyInfos); + omit_output_data = true; } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDependencyInfo* pDependencyInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pDependencyInfos, eventCount, handle_unwrap_memory); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPipelineBinaryDataKHR); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pPipelineBinaryKey, omit_output_data); + encoder->EncodeSizeTPtr(pPipelineBinaryDataSize, omit_output_data); + encoder->EncodeVoidArray(pPipelineBinaryData, (pPipelineBinaryDataSize != nullptr) ? (*pPipelineBinaryDataSize) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); + } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWaitEvents2KHR(commandBuffer, eventCount, pEvents, pDependencyInfos_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo, pPipelineBinaryKey, pPipelineBinaryDataSize, pPipelineBinaryData); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, eventCount, pEvents, pDependencyInfos); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2KHR( - VkCommandBuffer commandBuffer, - const VkDependencyInfo* pDependencyInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseCapturedPipelineDataKHR( + VkDevice device, + const VkReleaseCapturedPipelineDataInfoKHR* pInfo, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14609,30 +15471,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pDependencyInfo); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPipelineBarrier2KHR); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkReleaseCapturedPipelineDataInfoKHR* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->ReleaseCapturedPipelineDataKHR(device, pInfo_unwrapped, pAllocator); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkReleaseCapturedPipelineDataKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pDependencyInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPipelineBarrier2KHRHandles, pDependencyInfo); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDependencyInfo* pDependencyInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pDependencyInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPipelineBarrier2KHR(commandBuffer, pDependencyInfo_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo, pAllocator); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pDependencyInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2KHR( - VkCommandBuffer commandBuffer, - VkPipelineStageFlags2 stage, - VkQueryPool queryPool, - uint32_t query) +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseSwapchainImagesKHR( + VkDevice device, + const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14648,29 +15512,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, stage, queryPool, query); + CustomEncoderPreCall::Dispatch(manager, device, pReleaseInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWriteTimestamp2KHR); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pReleaseInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->ReleaseSwapchainImagesKHR(device, pReleaseInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkReleaseSwapchainImagesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeFlags64Value(stage); - encoder->EncodeVulkanHandleValue(queryPool); - encoder->EncodeUInt32Value(query); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWriteTimestamp2KHRHandles, queryPool); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pReleaseInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWriteTimestamp2KHR(commandBuffer, stage, queryPool, query); + CustomEncoderPostCall::Dispatch(manager, result, device, pReleaseInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, stage, queryPool, query); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2KHR( - VkQueue queue, - uint32_t submitCount, - const VkSubmitInfo2* pSubmits, - VkFence fence) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixPropertiesKHR* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14686,33 +15553,36 @@ VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, shared_api_call_lock, queue, submitCount, pSubmits, fence); + bool omit_output_data = false; - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkSubmitInfo2* pSubmits_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pSubmits, submitCount, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPropertyCount, pProperties); - VkResult result = vulkan_wrappers::GetDeviceTable(queue)->QueueSubmit2KHR(queue, submitCount, pSubmits_unwrapped, fence); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceCooperativeMatrixPropertiesKHR(physicalDevice, pPropertyCount, pProperties); + if (result < 0) + { + omit_output_data = true; + } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueueSubmit2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(queue); - encoder->EncodeUInt32Value(submitCount); - EncodeStructArray(encoder, pSubmits, submitCount); - encoder->EncodeVulkanHandleValue(fence); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); + EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, shared_api_call_lock, result, queue, submitCount, pSubmits, fence); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pPropertyCount, pProperties); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2KHR( +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleKHR( VkCommandBuffer commandBuffer, - const VkCopyBufferInfo2* pCopyBufferInfo) + uint32_t lineStippleFactor, + uint16_t lineStipplePattern) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14728,28 +15598,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyBufferInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, lineStippleFactor, lineStipplePattern); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyBuffer2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetLineStippleKHR); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pCopyBufferInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyBuffer2KHRHandles, pCopyBufferInfo); + encoder->EncodeUInt32Value(lineStippleFactor); + encoder->EncodeUInt16Value(lineStipplePattern); + manager->EndCommandApiCallCapture(commandBuffer); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyBufferInfo2* pCopyBufferInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyBufferInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyBuffer2KHR(commandBuffer, pCopyBufferInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetLineStippleKHR(commandBuffer, lineStippleFactor, lineStipplePattern); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyBufferInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, lineStippleFactor, lineStipplePattern); } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2KHR( - VkCommandBuffer commandBuffer, - const VkCopyImageInfo2* pCopyImageInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pTimeDomainCount, + VkTimeDomainKHR* pTimeDomains) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14765,28 +15634,38 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyImageInfo); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyImage2KHR); - if (encoder) + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pTimeDomainCount, pTimeDomains); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceCalibrateableTimeDomainsKHR(physicalDevice, pTimeDomainCount, pTimeDomains); + if (result < 0) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pCopyImageInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyImage2KHRHandles, pCopyImageInfo); + omit_output_data = true; } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyImageInfo2* pCopyImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageInfo, handle_unwrap_memory); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR); + if (encoder) + { + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Ptr(pTimeDomainCount, omit_output_data); + encoder->EncodeEnumArray(pTimeDomains, (pTimeDomainCount != nullptr) ? (*pTimeDomainCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); + } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyImage2KHR(commandBuffer, pCopyImageInfo_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pTimeDomainCount, pTimeDomains); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyImageInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2KHR( - VkCommandBuffer commandBuffer, - const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsKHR( + VkDevice device, + uint32_t timestampCount, + const VkCalibratedTimestampInfoKHR* pTimestampInfos, + uint64_t* pTimestamps, + uint64_t* pMaxDeviation) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14802,28 +15681,40 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyBufferToImageInfo); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyBufferToImage2KHR); - if (encoder) + CustomEncoderPreCall::Dispatch(manager, device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCalibratedTimestampInfoKHR* pTimestampInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pTimestampInfos, timestampCount, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetCalibratedTimestampsKHR(device, timestampCount, pTimestampInfos_unwrapped, pTimestamps, pMaxDeviation); + if (result < 0) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pCopyBufferToImageInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyBufferToImage2KHRHandles, pCopyBufferToImageInfo); + omit_output_data = true; } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyBufferToImageInfo, handle_unwrap_memory); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetCalibratedTimestampsKHR); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeUInt32Value(timestampCount); + EncodeStructArray(encoder, pTimestampInfos, timestampCount); + encoder->EncodeUInt64Array(pTimestamps, timestampCount, omit_output_data); + encoder->EncodeUInt64Ptr(pMaxDeviation, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); + } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyBufferToImage2KHR(commandBuffer, pCopyBufferToImageInfo_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyBufferToImageInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2KHR( +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2KHR( VkCommandBuffer commandBuffer, - const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo) + const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14839,28 +15730,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyImageToBufferInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBindDescriptorSetsInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyImageToBuffer2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindDescriptorSets2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pCopyImageToBufferInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyImageToBuffer2KHRHandles, pCopyImageToBufferInfo); + EncodeStructPtr(encoder, pBindDescriptorSetsInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindDescriptorSets2KHRHandles, pBindDescriptorSetsInfo); } auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageToBufferInfo, handle_unwrap_memory); + const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBindDescriptorSetsInfo, handle_unwrap_memory); - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyImageToBuffer2KHR(commandBuffer, pCopyImageToBufferInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindDescriptorSets2KHR(commandBuffer, pBindDescriptorSetsInfo_unwrapped); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyImageToBufferInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pBindDescriptorSetsInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2KHR( +VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2KHR( VkCommandBuffer commandBuffer, - const VkBlitImageInfo2* pBlitImageInfo) + const VkPushConstantsInfo* pPushConstantsInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14876,28 +15767,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBlitImageInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pPushConstantsInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBlitImage2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPushConstants2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pBlitImageInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBlitImage2KHRHandles, pBlitImageInfo); + EncodeStructPtr(encoder, pPushConstantsInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPushConstants2KHRHandles, pPushConstantsInfo); } auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBlitImageInfo2* pBlitImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBlitImageInfo, handle_unwrap_memory); + const VkPushConstantsInfo* pPushConstantsInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPushConstantsInfo, handle_unwrap_memory); - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBlitImage2KHR(commandBuffer, pBlitImageInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPushConstants2KHR(commandBuffer, pPushConstantsInfo_unwrapped); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pBlitImageInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pPushConstantsInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2KHR( +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2KHR( VkCommandBuffer commandBuffer, - const VkResolveImageInfo2* pResolveImageInfo) + const VkPushDescriptorSetInfo* pPushDescriptorSetInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14913,28 +15804,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pResolveImageInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pPushDescriptorSetInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdResolveImage2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPushDescriptorSet2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pResolveImageInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdResolveImage2KHRHandles, pResolveImageInfo); + EncodeStructPtr(encoder, pPushDescriptorSetInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPushDescriptorSet2KHRHandles, pPushDescriptorSetInfo); } auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkResolveImageInfo2* pResolveImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pResolveImageInfo, handle_unwrap_memory); + const VkPushDescriptorSetInfo* pPushDescriptorSetInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPushDescriptorSetInfo, handle_unwrap_memory); - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdResolveImage2KHR(commandBuffer, pResolveImageInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPushDescriptorSet2KHR(commandBuffer, pPushDescriptorSetInfo_unwrapped); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pResolveImageInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pPushDescriptorSetInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysIndirect2KHR( +VKAPI_ATTR void VKAPI_CALL vkCmdSetDescriptorBufferOffsets2EXT( VkCommandBuffer commandBuffer, - VkDeviceAddress indirectDeviceAddress) + const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14950,26 +15841,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysIndirect2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, indirectDeviceAddress); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pSetDescriptorBufferOffsetsInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdTraceRaysIndirect2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDescriptorBufferOffsets2EXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt64Value(indirectDeviceAddress); - manager->EndCommandApiCallCapture(commandBuffer); + EncodeStructPtr(encoder, pSetDescriptorBufferOffsetsInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdSetDescriptorBufferOffsets2EXTHandles, pSetDescriptorBufferOffsetsInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdTraceRaysIndirect2KHR(commandBuffer, indirectDeviceAddress); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSetDescriptorBufferOffsetsInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, indirectDeviceAddress); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDescriptorBufferOffsets2EXT(commandBuffer, pSetDescriptorBufferOffsetsInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pSetDescriptorBufferOffsetsInfo); } -VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirementsKHR( - VkDevice device, - const VkDeviceBufferMemoryRequirements* pInfo, - VkMemoryRequirements2* pMemoryRequirements) +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( + VkCommandBuffer commandBuffer, + const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -14985,27 +15878,28 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirementsKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); - - vulkan_wrappers::GetDeviceTable(device)->GetDeviceBufferMemoryRequirementsKHR(device, pInfo, pMemoryRequirements); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBindDescriptorBufferEmbeddedSamplersInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceBufferMemoryRequirementsKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - EncodeStructPtr(encoder, pMemoryRequirements); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pBindDescriptorBufferEmbeddedSamplersInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindDescriptorBufferEmbeddedSamplers2EXTHandles, pBindDescriptorBufferEmbeddedSamplersInfo); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBindDescriptorBufferEmbeddedSamplersInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindDescriptorBufferEmbeddedSamplers2EXT(commandBuffer, pBindDescriptorBufferEmbeddedSamplersInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pBindDescriptorBufferEmbeddedSamplersInfo); } -VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirementsKHR( - VkDevice device, - const VkDeviceImageMemoryRequirements* pInfo, - VkMemoryRequirements2* pMemoryRequirements) +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryIndirectKHR( + VkCommandBuffer commandBuffer, + const VkCopyMemoryIndirectInfoKHR* pCopyMemoryIndirectInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15021,31 +15915,25 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirementsKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDeviceImageMemoryRequirements* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(device)->GetDeviceImageMemoryRequirementsKHR(device, pInfo_unwrapped, pMemoryRequirements); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyMemoryIndirectInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceImageMemoryRequirementsKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyMemoryIndirectKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - EncodeStructPtr(encoder, pMemoryRequirements); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pCopyMemoryIndirectInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyMemoryIndirectKHR(commandBuffer, pCopyMemoryIndirectInfo); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyMemoryIndirectInfo); } -VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirementsKHR( - VkDevice device, - const VkDeviceImageMemoryRequirements* pInfo, - uint32_t* pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToImageIndirectKHR( + VkCommandBuffer commandBuffer, + const VkCopyMemoryToImageIndirectInfoKHR* pCopyMemoryToImageIndirectInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15061,33 +15949,28 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirementsKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDeviceImageMemoryRequirements* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(device)->GetDeviceImageSparseMemoryRequirementsKHR(device, pInfo_unwrapped, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCopyMemoryToImageIndirectInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceImageSparseMemoryRequirementsKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyMemoryToImageIndirectKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeUInt32Ptr(pSparseMemoryRequirementCount); - EncodeStructArray(encoder, pSparseMemoryRequirements, (pSparseMemoryRequirementCount != nullptr) ? (*pSparseMemoryRequirementCount) : 0); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pCopyMemoryToImageIndirectInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyMemoryToImageIndirectKHRHandles, pCopyMemoryToImageIndirectInfo); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyMemoryToImageIndirectInfoKHR* pCopyMemoryToImageIndirectInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyMemoryToImageIndirectInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyMemoryToImageIndirectKHR(commandBuffer, pCopyMemoryToImageIndirectInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCopyMemoryToImageIndirectInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2KHR( +VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering2KHR( VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkDeviceSize size, - VkIndexType indexType) + const VkRenderingEndInfoKHR* pRenderingEndInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15103,29 +15986,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, size, indexType); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pRenderingEndInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindIndexBuffer2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndRendering2KHR); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(buffer); - encoder->EncodeUInt64Value(offset); - encoder->EncodeUInt64Value(size); - encoder->EncodeEnumValue(indexType); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindIndexBuffer2KHRHandles, buffer); + EncodeStructPtr(encoder, pRenderingEndInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindIndexBuffer2KHR(commandBuffer, buffer, offset, size, indexType); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndRendering2KHR(commandBuffer, pRenderingEndInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, size, indexType); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pRenderingEndInfo); } -VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularityKHR( +VKAPI_ATTR void VKAPI_CALL vkFrameBoundaryANDROID( VkDevice device, - const VkRenderingAreaInfo* pRenderingAreaInfo, - VkExtent2D* pGranularity) + VkSemaphore semaphore, + VkImage image) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15141,27 +16021,28 @@ VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularityKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pRenderingAreaInfo, pGranularity); - - vulkan_wrappers::GetDeviceTable(device)->GetRenderingAreaGranularityKHR(device, pRenderingAreaInfo, pGranularity); + CustomEncoderPreCall::Dispatch(manager, device, semaphore, image); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetRenderingAreaGranularityKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkFrameBoundaryANDROID); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pRenderingAreaInfo); - EncodeStructPtr(encoder, pGranularity); + encoder->EncodeVulkanHandleValue(semaphore); + encoder->EncodeVulkanHandleValue(image); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, pRenderingAreaInfo, pGranularity); + vulkan_wrappers::GetDeviceTable(device)->FrameBoundaryANDROID(device, semaphore, image); + + CustomEncoderPostCall::Dispatch(manager, shared_api_call_lock, device, semaphore, image); } -VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayoutKHR( - VkDevice device, - const VkDeviceImageSubresourceInfo* pInfo, - VkSubresourceLayout2* pLayout) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT( + VkInstance instance, + const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDebugReportCallbackEXT* pCallback) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15177,31 +16058,42 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayoutKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pLayout); + bool omit_output_data = false; - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDeviceImageSubresourceInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pCallback); - vulkan_wrappers::GetDeviceTable(device)->GetDeviceImageSubresourceLayoutKHR(device, pInfo_unwrapped, pLayout); + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceImageSubresourceLayoutKHR); + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pCallback, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDebugReportCallbackEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - EncodeStructPtr(encoder, pLayout); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(instance); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pCallback, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, instance, pCallback, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pLayout); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pCallback); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2KHR( - VkDevice device, - VkImage image, - const VkImageSubresource2* pSubresource, - VkSubresourceLayout2* pLayout) +VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT( + VkInstance instance, + VkDebugReportCallbackEXT callback, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15217,28 +16109,35 @@ VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, image, pSubresource, pLayout); - - vulkan_wrappers::GetDeviceTable(device)->GetImageSubresourceLayout2KHR(device, image, pSubresource, pLayout); + CustomEncoderPreCall::Dispatch(manager, instance, callback, pAllocator); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageSubresourceLayout2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyDebugReportCallbackEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(image); - EncodeStructPtr(encoder, pSubresource); - EncodeStructPtr(encoder, pLayout); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(instance); + encoder->EncodeVulkanHandleValue(callback); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(callback); } - CustomEncoderPostCall::Dispatch(manager, device, image, pSubresource, pLayout); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetInstanceTable(instance)->DestroyDebugReportCallbackEXT(instance, callback, pAllocator); + + CustomEncoderPostCall::Dispatch(manager, instance, callback, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(callback); } -VKAPI_ATTR VkResult VKAPI_CALL vkWaitForPresent2KHR( - VkDevice device, - VkSwapchainKHR swapchain, - const VkPresentWait2InfoKHR* pPresentWait2Info) +VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT( + VkInstance instance, + VkDebugReportFlagsEXT flags, + VkDebugReportObjectTypeEXT objectType, + uint64_t object, + size_t location, + int32_t messageCode, + const char* pLayerPrefix, + const char* pMessage) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15254,31 +16153,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkWaitForPresent2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, swapchain, pPresentWait2Info); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->WaitForPresent2KHR(device, swapchain, pPresentWait2Info); + CustomEncoderPreCall::Dispatch(manager, instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkWaitForPresent2KHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkDebugReportMessageEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); - EncodeStructPtr(encoder, pPresentWait2Info); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(instance); + encoder->EncodeFlagsValue(flags); + encoder->EncodeEnumValue(objectType); + encoder->EncodeUInt64Value(vulkan_wrappers::GetWrappedId(object, objectType)); + encoder->EncodeSizeTValue(location); + encoder->EncodeInt32Value(messageCode); + encoder->EncodeString(pLayerPrefix); + encoder->EncodeString(pMessage); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, pPresentWait2Info); + vulkan_wrappers::GetInstanceTable(instance)->DebugReportMessageEXT(instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage); - return result; + CustomEncoderPostCall::Dispatch(manager, instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineBinariesKHR( - VkDevice device, - const VkPipelineBinaryCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkPipelineBinaryHandlesInfoKHR* pBinaries) +VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT( + VkDevice device, + const VkDebugMarkerObjectTagInfoEXT* pTagInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15294,45 +16193,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineBinariesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pBinaries); + CustomEncoderPreCall::Dispatch(manager, device, pTagInfo); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPipelineBinaryCreateInfoKHR* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreatePipelineBinariesKHR(device, pCreateInfo_unwrapped, pAllocator, pBinaries); + const VkDebugMarkerObjectTagInfoEXT* pTagInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pTagInfo, handle_unwrap_memory); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedStructHandles(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pBinaries, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->DebugMarkerSetObjectTagEXT(device, pTagInfo_unwrapped); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreatePipelineBinariesKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkDebugMarkerSetObjectTagEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - EncodeStructPtr(encoder, pBinaries, omit_output_data); + EncodeStructPtr(encoder, pTagInfo); encoder->EncodeEnumValue(result); - manager->EndStructGroupCreateApiCallCapture(result, device, pBinaries->pipelineBinaryCount, pBinaries, nullptr); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pBinaries); + CustomEncoderPostCall::Dispatch(manager, result, device, pTagInfo); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineBinaryKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT( VkDevice device, - VkPipelineBinaryKHR pipelineBinary, - const VkAllocationCallbacks* pAllocator) + const VkDebugMarkerObjectNameInfoEXT* pNameInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15348,30 +16233,31 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineBinaryKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pipelineBinary, pAllocator); + CustomEncoderPreCall::Dispatch(manager, device, pNameInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyPipelineBinaryKHR); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDebugMarkerObjectNameInfoEXT* pNameInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pNameInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->DebugMarkerSetObjectNameEXT(device, pNameInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkDebugMarkerSetObjectNameEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(pipelineBinary); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(pipelineBinary); + EncodeStructPtr(encoder, pNameInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyPipelineBinaryKHR(device, pipelineBinary, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, pipelineBinary, pAllocator); + CustomEncoderPostCall::Dispatch(manager, result, device, pNameInfo); - vulkan_wrappers::DestroyWrappedHandle(pipelineBinary); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineKeyKHR( - VkDevice device, - const VkPipelineCreateInfoKHR* pPipelineCreateInfo, - VkPipelineBinaryKeyKHR* pPipelineKey) +VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerBeginEXT( + VkCommandBuffer commandBuffer, + const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15387,38 +16273,24 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineKeyKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pPipelineCreateInfo, pPipelineKey); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPipelineKeyKHR(device, pPipelineCreateInfo, pPipelineKey); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pMarkerInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPipelineKeyKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDebugMarkerBeginEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pPipelineCreateInfo); - EncodeStructPtr(encoder, pPipelineKey, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pMarkerInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pPipelineCreateInfo, pPipelineKey); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pMarkerInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineBinaryDataKHR( - VkDevice device, - const VkPipelineBinaryDataInfoKHR* pInfo, - VkPipelineBinaryKeyKHR* pPipelineBinaryKey, - size_t* pPipelineBinaryDataSize, - void* pPipelineBinaryData) +VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerEndEXT( + VkCommandBuffer commandBuffer) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15434,41 +16306,24 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineBinaryDataKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pPipelineBinaryKey, pPipelineBinaryDataSize, pPipelineBinaryData); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPipelineBinaryDataInfoKHR* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPipelineBinaryDataKHR(device, pInfo_unwrapped, pPipelineBinaryKey, pPipelineBinaryDataSize, pPipelineBinaryData); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPipelineBinaryDataKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDebugMarkerEndEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - EncodeStructPtr(encoder, pPipelineBinaryKey, omit_output_data); - encoder->EncodeSizeTPtr(pPipelineBinaryDataSize, omit_output_data); - encoder->EncodeVoidArray(pPipelineBinaryData, (pPipelineBinaryDataSize != nullptr) ? (*pPipelineBinaryDataSize) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo, pPipelineBinaryKey, pPipelineBinaryDataSize, pPipelineBinaryData); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDebugMarkerEndEXT(commandBuffer); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer); } -VKAPI_ATTR VkResult VKAPI_CALL vkReleaseCapturedPipelineDataKHR( - VkDevice device, - const VkReleaseCapturedPipelineDataInfoKHR* pInfo, - const VkAllocationCallbacks* pAllocator) +VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT( + VkCommandBuffer commandBuffer, + const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15484,32 +16339,29 @@ VKAPI_ATTR VkResult VKAPI_CALL vkReleaseCapturedPipelineDataKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pAllocator); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkReleaseCapturedPipelineDataInfoKHR* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->ReleaseCapturedPipelineDataKHR(device, pInfo_unwrapped, pAllocator); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pMarkerInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkReleaseCapturedPipelineDataKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDebugMarkerInsertEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pMarkerInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo, pAllocator); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pMarkerInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkReleaseSwapchainImagesKHR( - VkDevice device, - const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdBindTransformFeedbackBuffersEXT( + VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer* pBuffers, + const VkDeviceSize* pOffsets, + const VkDeviceSize* pSizes) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15525,32 +16377,32 @@ VKAPI_ATTR VkResult VKAPI_CALL vkReleaseSwapchainImagesKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pReleaseInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pReleaseInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->ReleaseSwapchainImagesKHR(device, pReleaseInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkReleaseSwapchainImagesKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindTransformFeedbackBuffersEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pReleaseInfo); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(firstBinding); + encoder->EncodeUInt32Value(bindingCount); + encoder->EncodeVulkanHandleArray(pBuffers, bindingCount); + encoder->EncodeUInt64Array(pOffsets, bindingCount); + encoder->EncodeUInt64Array(pSizes, bindingCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindTransformFeedbackBuffersEXTHandles, bindingCount, pBuffers); } - CustomEncoderPostCall::Dispatch(manager, result, device, pReleaseInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( - VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkCooperativeMatrixPropertiesKHR* pProperties) +VKAPI_ATTR void VKAPI_CALL vkCmdBeginTransformFeedbackEXT( + VkCommandBuffer commandBuffer, + uint32_t firstCounterBuffer, + uint32_t counterBufferCount, + const VkBuffer* pCounterBuffers, + const VkDeviceSize* pCounterBufferOffsets) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15566,36 +16418,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPropertyCount, pProperties); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceCooperativeMatrixPropertiesKHR(physicalDevice, pPropertyCount, pProperties); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginTransformFeedbackEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); - EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(firstCounterBuffer); + encoder->EncodeUInt32Value(counterBufferCount); + encoder->EncodeVulkanHandleArray(pCounterBuffers, counterBufferCount); + encoder->EncodeUInt64Array(pCounterBufferOffsets, counterBufferCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginTransformFeedbackEXTHandles, counterBufferCount, pCounterBuffers); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pPropertyCount, pProperties); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleKHR( +VKAPI_ATTR void VKAPI_CALL vkCmdEndTransformFeedbackEXT( VkCommandBuffer commandBuffer, - uint32_t lineStippleFactor, - uint16_t lineStipplePattern) + uint32_t firstCounterBuffer, + uint32_t counterBufferCount, + const VkBuffer* pCounterBuffers, + const VkDeviceSize* pCounterBufferOffsets) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15611,27 +16458,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, lineStippleFactor, lineStipplePattern); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetLineStippleKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndTransformFeedbackEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(lineStippleFactor); - encoder->EncodeUInt16Value(lineStipplePattern); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeUInt32Value(firstCounterBuffer); + encoder->EncodeUInt32Value(counterBufferCount); + encoder->EncodeVulkanHandleArray(pCounterBuffers, counterBufferCount); + encoder->EncodeUInt64Array(pCounterBufferOffsets, counterBufferCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdEndTransformFeedbackEXTHandles, counterBufferCount, pCounterBuffers); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetLineStippleKHR(commandBuffer, lineStippleFactor, lineStipplePattern); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, lineStippleFactor, lineStipplePattern); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( - VkPhysicalDevice physicalDevice, - uint32_t* pTimeDomainCount, - VkTimeDomainKHR* pTimeDomains) +VKAPI_ATTR void VKAPI_CALL vkCmdBeginQueryIndexedEXT( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query, + VkQueryControlFlags flags, + uint32_t index) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15647,38 +16498,30 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pTimeDomainCount, pTimeDomains); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceCalibrateableTimeDomainsKHR(physicalDevice, pTimeDomainCount, pTimeDomains); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, queryPool, query, flags, index); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginQueryIndexedEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pTimeDomainCount, omit_output_data); - encoder->EncodeEnumArray(pTimeDomains, (pTimeDomainCount != nullptr) ? (*pTimeDomainCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeUInt32Value(query); + encoder->EncodeFlagsValue(flags); + encoder->EncodeUInt32Value(index); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginQueryIndexedEXTHandles, queryPool); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pTimeDomainCount, pTimeDomains); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, queryPool, query, flags, index); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsKHR( - VkDevice device, - uint32_t timestampCount, - const VkCalibratedTimestampInfoKHR* pTimestampInfos, - uint64_t* pTimestamps, - uint64_t* pMaxDeviation) +VKAPI_ATTR void VKAPI_CALL vkCmdEndQueryIndexedEXT( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query, + uint32_t index) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15694,37 +16537,32 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsKHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetCalibratedTimestampsKHR(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, queryPool, query, index); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetCalibratedTimestampsKHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndQueryIndexedEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeUInt32Value(timestampCount); - EncodeStructArray(encoder, pTimestampInfos, timestampCount); - encoder->EncodeUInt64Array(pTimestamps, timestampCount, omit_output_data); - encoder->EncodeUInt64Ptr(pMaxDeviation, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeUInt32Value(query); + encoder->EncodeUInt32Value(index); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdEndQueryIndexedEXTHandles, queryPool); } - CustomEncoderPostCall::Dispatch(manager, result, device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, queryPool, query, index); } -VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2KHR( +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectByteCountEXT( VkCommandBuffer commandBuffer, - const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo) + uint32_t instanceCount, + uint32_t firstInstance, + VkBuffer counterBuffer, + VkDeviceSize counterBufferOffset, + uint32_t counterOffset, + uint32_t vertexStride) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15740,28 +16578,30 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBindDescriptorSetsInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindDescriptorSets2KHR); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawIndirectByteCountEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pBindDescriptorSetsInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindDescriptorSets2KHRHandles, pBindDescriptorSetsInfo); + encoder->EncodeUInt32Value(instanceCount); + encoder->EncodeUInt32Value(firstInstance); + encoder->EncodeVulkanHandleValue(counterBuffer); + encoder->EncodeUInt64Value(counterBufferOffset); + encoder->EncodeUInt32Value(counterOffset); + encoder->EncodeUInt32Value(vertexStride); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawIndirectByteCountEXTHandles, counterBuffer); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBindDescriptorSetsInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindDescriptorSets2KHR(commandBuffer, pBindDescriptorSetsInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pBindDescriptorSetsInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride); } -VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2KHR( - VkCommandBuffer commandBuffer, - const VkPushConstantsInfo* pPushConstantsInfo) +VKAPI_ATTR uint32_t VKAPI_CALL vkGetImageViewHandleNVX( + VkDevice device, + const VkImageViewHandleInfoNVX* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15777,28 +16617,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pPushConstantsInfo); + CustomEncoderPreCall::Dispatch(manager, device, pInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPushConstants2KHR); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkImageViewHandleInfoNVX* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + uint32_t result = vulkan_wrappers::GetDeviceTable(device)->GetImageViewHandleNVX(device, pInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageViewHandleNVX); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pPushConstantsInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPushConstants2KHRHandles, pPushConstantsInfo); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeUInt32Value(result); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPushConstantsInfo* pPushConstantsInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPushConstantsInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPushConstants2KHR(commandBuffer, pPushConstantsInfo_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pPushConstantsInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2KHR( - VkCommandBuffer commandBuffer, - const VkPushDescriptorSetInfo* pPushDescriptorSetInfo) +VKAPI_ATTR uint64_t VKAPI_CALL vkGetImageViewHandle64NVX( + VkDevice device, + const VkImageViewHandleInfoNVX* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15814,28 +16657,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2KHR( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pPushDescriptorSetInfo); + CustomEncoderPreCall::Dispatch(manager, device, pInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPushDescriptorSet2KHR); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkImageViewHandleInfoNVX* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + uint64_t result = vulkan_wrappers::GetDeviceTable(device)->GetImageViewHandle64NVX(device, pInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageViewHandle64NVX); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pPushDescriptorSetInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPushDescriptorSet2KHRHandles, pPushDescriptorSetInfo); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeUInt64Value(result); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPushDescriptorSetInfo* pPushDescriptorSetInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPushDescriptorSetInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPushDescriptorSet2KHR(commandBuffer, pPushDescriptorSetInfo_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pPushDescriptorSetInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDescriptorBufferOffsets2EXT( - VkCommandBuffer commandBuffer, - const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkGetImageViewAddressNVX( + VkDevice device, + VkImageView imageView, + VkImageViewAddressPropertiesNVX* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15851,28 +16698,40 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDescriptorBufferOffsets2EXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pSetDescriptorBufferOffsetsInfo); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDescriptorBufferOffsets2EXT); - if (encoder) + CustomEncoderPreCall::Dispatch(manager, device, imageView, pProperties); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetImageViewAddressNVX(device, imageView, pProperties); + if (result < 0) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pSetDescriptorBufferOffsetsInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdSetDescriptorBufferOffsets2EXTHandles, pSetDescriptorBufferOffsetsInfo); + omit_output_data = true; } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSetDescriptorBufferOffsetsInfo, handle_unwrap_memory); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageViewAddressNVX); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(imageView); + EncodeStructPtr(encoder, pProperties, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); + } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDescriptorBufferOffsets2EXT(commandBuffer, pSetDescriptorBufferOffsetsInfo_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, device, imageView, pProperties); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pSetDescriptorBufferOffsetsInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountAMD( VkCommandBuffer commandBuffer, - const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo) + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15888,29 +16747,35 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBindDescriptorBufferEmbeddedSamplersInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawIndirectCountAMD); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pBindDescriptorBufferEmbeddedSamplersInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindDescriptorBufferEmbeddedSamplers2EXTHandles, pBindDescriptorBufferEmbeddedSamplersInfo); + encoder->EncodeVulkanHandleValue(buffer); + encoder->EncodeUInt64Value(offset); + encoder->EncodeVulkanHandleValue(countBuffer); + encoder->EncodeUInt64Value(countBufferOffset); + encoder->EncodeUInt32Value(maxDrawCount); + encoder->EncodeUInt32Value(stride); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawIndirectCountAMDHandles, buffer, countBuffer); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBindDescriptorBufferEmbeddedSamplersInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindDescriptorBufferEmbeddedSamplers2EXT(commandBuffer, pBindDescriptorBufferEmbeddedSamplersInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pBindDescriptorBufferEmbeddedSamplersInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } -VKAPI_ATTR void VKAPI_CALL vkFrameBoundaryANDROID( - VkDevice device, - VkSemaphore semaphore, - VkImage image) +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15926,28 +16791,34 @@ VKAPI_ATTR void VKAPI_CALL vkFrameBoundaryANDROID( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, semaphore, image); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkFrameBoundaryANDROID); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawIndexedIndirectCountAMD); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(semaphore); - encoder->EncodeVulkanHandleValue(image); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(buffer); + encoder->EncodeUInt64Value(offset); + encoder->EncodeVulkanHandleValue(countBuffer); + encoder->EncodeUInt64Value(countBufferOffset); + encoder->EncodeUInt32Value(maxDrawCount); + encoder->EncodeUInt32Value(stride); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawIndexedIndirectCountAMDHandles, buffer, countBuffer); } - vulkan_wrappers::GetDeviceTable(device)->FrameBoundaryANDROID(device, semaphore, image); - - CustomEncoderPostCall::Dispatch(manager, shared_api_call_lock, device, semaphore, image); - -} + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT( - VkInstance instance, - const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDebugReportCallbackEXT* pCallback) + CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + +} + +VKAPI_ATTR VkResult VKAPI_CALL vkGetShaderInfoAMD( + VkDevice device, + VkPipeline pipeline, + VkShaderStageFlagBits shaderStage, + VkShaderInfoTypeAMD infoType, + size_t* pInfoSize, + void* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -15965,40 +16836,38 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pCallback); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback); + CustomEncoderPreCall::Dispatch(manager, device, pipeline, shaderStage, infoType, pInfoSize, pInfo); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pCallback, VulkanCaptureManager::GetUniqueId); - } - else + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetShaderInfoAMD(device, pipeline, shaderStage, infoType, pInfoSize, pInfo); + if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDebugReportCallbackEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetShaderInfoAMD); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pCallback, omit_output_data); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(pipeline); + encoder->EncodeEnumValue(shaderStage); + encoder->EncodeEnumValue(infoType); + encoder->EncodeSizeTPtr(pInfoSize, omit_output_data); + encoder->EncodeVoidArray(pInfo, (pInfoSize != nullptr) ? (*pInfoSize) : 0, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pCallback, pCreateInfo); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pCallback); + CustomEncoderPostCall::Dispatch(manager, result, device, pipeline, shaderStage, infoType, pInfoSize, pInfo); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP( VkInstance instance, - VkDebugReportCallbackEXT callback, - const VkAllocationCallbacks* pAllocator) + const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16014,35 +16883,47 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, instance, callback, pAllocator); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyDebugReportCallbackEXT); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); + + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateStreamDescriptorSurfaceGGP(instance, pCreateInfo, pAllocator, pSurface); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateStreamDescriptorSurfaceGGP); if (encoder) { encoder->EncodeVulkanHandleValue(instance); - encoder->EncodeVulkanHandleValue(callback); + EncodeStructPtr(encoder, pCreateInfo); EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(callback); + encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetInstanceTable(instance)->DestroyDebugReportCallbackEXT(instance, callback, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, instance, callback, pAllocator); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); - vulkan_wrappers::DestroyWrappedHandle(callback); + return result; } -VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT( - VkInstance instance, - VkDebugReportFlagsEXT flags, - VkDebugReportObjectTypeEXT objectType, - uint64_t object, - size_t location, - int32_t messageCode, - const char* pLayerPrefix, - const char* pMessage) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceExternalImageFormatPropertiesNV( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkImageType type, + VkImageTiling tiling, + VkImageUsageFlags usage, + VkImageCreateFlags flags, + VkExternalMemoryHandleTypeFlagsNV externalHandleType, + VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16058,31 +16939,42 @@ VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage); + bool omit_output_data = false; - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkDebugReportMessageEXT); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceExternalImageFormatPropertiesNV(physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalImageFormatPropertiesNV); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeEnumValue(format); + encoder->EncodeEnumValue(type); + encoder->EncodeEnumValue(tiling); + encoder->EncodeFlagsValue(usage); encoder->EncodeFlagsValue(flags); - encoder->EncodeEnumValue(objectType); - encoder->EncodeUInt64Value(vulkan_wrappers::GetWrappedId(object, objectType)); - encoder->EncodeSizeTValue(location); - encoder->EncodeInt32Value(messageCode); - encoder->EncodeString(pLayerPrefix); - encoder->EncodeString(pMessage); + encoder->EncodeFlagsValue(externalHandleType); + EncodeStructPtr(encoder, pExternalImageFormatProperties, omit_output_data); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - vulkan_wrappers::GetInstanceTable(instance)->DebugReportMessageEXT(instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties); - CustomEncoderPostCall::Dispatch(manager, instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV( VkDevice device, - const VkDebugMarkerObjectTagInfoEXT* pTagInfo) + VkDeviceMemory memory, + VkExternalMemoryHandleTypeFlagsNV handleType, + HANDLE* pHandle) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16098,31 +16990,38 @@ VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pTagInfo); + bool omit_output_data = false; - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDebugMarkerObjectTagInfoEXT* pTagInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pTagInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, memory, handleType, pHandle); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->DebugMarkerSetObjectTagEXT(device, pTagInfo_unwrapped); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryWin32HandleNV(device, memory, handleType, pHandle); + if (result < 0) + { + omit_output_data = true; + } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkDebugMarkerSetObjectTagEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryWin32HandleNV); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pTagInfo); + encoder->EncodeVulkanHandleValue(memory); + encoder->EncodeFlagsValue(handleType); + encoder->EncodeVoidPtrPtr(pHandle, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pTagInfo); + CustomEncoderPostCall::Dispatch(manager, result, device, memory, handleType, pHandle); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT( - VkDevice device, - const VkDebugMarkerObjectNameInfoEXT* pNameInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN( + VkInstance instance, + const VkViSurfaceCreateInfoNN* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16138,31 +17037,41 @@ VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pNameInfo); + bool omit_output_data = false; - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDebugMarkerObjectNameInfoEXT* pNameInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pNameInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->DebugMarkerSetObjectNameEXT(device, pNameInfo_unwrapped); + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkDebugMarkerSetObjectNameEXT); + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateViSurfaceNN); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pNameInfo); + encoder->EncodeVulkanHandleValue(instance); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, pNameInfo); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerBeginEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdBeginConditionalRenderingEXT( VkCommandBuffer commandBuffer, - const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) + const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16178,23 +17087,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerBeginEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pMarkerInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pConditionalRenderingBegin); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDebugMarkerBeginEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginConditionalRenderingEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pMarkerInfo); - manager->EndCommandApiCallCapture(commandBuffer); + EncodeStructPtr(encoder, pConditionalRenderingBegin); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginConditionalRenderingEXTHandles, pConditionalRenderingBegin); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pConditionalRenderingBegin, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pMarkerInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pConditionalRenderingBegin); } -VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerEndEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdEndConditionalRenderingEXT( VkCommandBuffer commandBuffer) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); @@ -16211,24 +17123,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerEndEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer); + CustomEncoderPreCall::Dispatch(manager, commandBuffer); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDebugMarkerEndEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndConditionalRenderingEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDebugMarkerEndEXT(commandBuffer); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndConditionalRenderingEXT(commandBuffer); - CustomEncoderPostCall::Dispatch(manager, commandBuffer); + CustomEncoderPostCall::Dispatch(manager, commandBuffer); } -VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingNV( VkCommandBuffer commandBuffer, - const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) + uint32_t firstViewport, + uint32_t viewportCount, + const VkViewportWScalingNV* pViewportWScalings) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16244,29 +17158,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pMarkerInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstViewport, viewportCount, pViewportWScalings); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDebugMarkerInsertEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetViewportWScalingNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pMarkerInfo); + encoder->EncodeUInt32Value(firstViewport); + encoder->EncodeUInt32Value(viewportCount); + EncodeStructArray(encoder, pViewportWScalings, viewportCount); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pMarkerInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstViewport, viewportCount, pViewportWScalings); } -VKAPI_ATTR void VKAPI_CALL vkCmdBindTransformFeedbackBuffersEXT( - VkCommandBuffer commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - const VkBuffer* pBuffers, - const VkDeviceSize* pOffsets, - const VkDeviceSize* pSizes) +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16282,32 +17194,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindTransformFeedbackBuffersEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, display); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindTransformFeedbackBuffersEXT); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->ReleaseDisplayEXT(physicalDevice, display); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkReleaseDisplayEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstBinding); - encoder->EncodeUInt32Value(bindingCount); - encoder->EncodeVulkanHandleArray(pBuffers, bindingCount); - encoder->EncodeUInt64Array(pOffsets, bindingCount); - encoder->EncodeUInt64Array(pSizes, bindingCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindTransformFeedbackBuffersEXTHandles, bindingCount, pBuffers); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeVulkanHandleValue(display); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, display); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdBeginTransformFeedbackEXT( - VkCommandBuffer commandBuffer, - uint32_t firstCounterBuffer, - uint32_t counterBufferCount, - const VkBuffer* pCounterBuffers, - const VkDeviceSize* pCounterBufferOffsets) +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireXlibDisplayEXT( + VkPhysicalDevice physicalDevice, + Display* dpy, + VkDisplayKHR display) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16323,31 +17232,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBeginTransformFeedbackEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, dpy, display); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginTransformFeedbackEXT); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->AcquireXlibDisplayEXT(physicalDevice, dpy, display); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAcquireXlibDisplayEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstCounterBuffer); - encoder->EncodeUInt32Value(counterBufferCount); - encoder->EncodeVulkanHandleArray(pCounterBuffers, counterBufferCount); - encoder->EncodeUInt64Array(pCounterBufferOffsets, counterBufferCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginTransformFeedbackEXTHandles, counterBufferCount, pCounterBuffers); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeVoidPtr(dpy); + encoder->EncodeVulkanHandleValue(display); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, dpy, display); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdEndTransformFeedbackEXT( - VkCommandBuffer commandBuffer, - uint32_t firstCounterBuffer, - uint32_t counterBufferCount, - const VkBuffer* pCounterBuffers, - const VkDeviceSize* pCounterBufferOffsets) +VKAPI_ATTR VkResult VKAPI_CALL vkGetRandROutputDisplayEXT( + VkPhysicalDevice physicalDevice, + Display* dpy, + RROutput rrOutput, + VkDisplayKHR* pDisplay) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16363,31 +17272,42 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEndTransformFeedbackEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndTransformFeedbackEXT); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, dpy, rrOutput, pDisplay); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetRandROutputDisplayEXT(physicalDevice, dpy, rrOutput, pDisplay); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, pDisplay, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetRandROutputDisplayEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstCounterBuffer); - encoder->EncodeUInt32Value(counterBufferCount); - encoder->EncodeVulkanHandleArray(pCounterBuffers, counterBufferCount); - encoder->EncodeUInt64Array(pCounterBufferOffsets, counterBufferCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdEndTransformFeedbackEXTHandles, counterBufferCount, pCounterBuffers); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeVoidPtr(dpy); + encoder->EncodeSizeTValue(rrOutput); + encoder->EncodeVulkanHandlePtr(pDisplay, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, physicalDevice, pDisplay, nullptr); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, dpy, rrOutput, pDisplay); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdBeginQueryIndexedEXT( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t query, - VkQueryControlFlags flags, - uint32_t index) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilities2EXT* pSurfaceCapabilities) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16403,30 +17323,36 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBeginQueryIndexedEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, queryPool, query, flags, index); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginQueryIndexedEXT); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, surface, pSurfaceCapabilities); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfaceCapabilities2EXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(queryPool); - encoder->EncodeUInt32Value(query); - encoder->EncodeFlagsValue(flags); - encoder->EncodeUInt32Value(index); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginQueryIndexedEXTHandles, queryPool); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeVulkanHandleValue(surface); + EncodeStructPtr(encoder, pSurfaceCapabilities, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, surface, pSurfaceCapabilities); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, queryPool, query, flags, index); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdEndQueryIndexedEXT( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t query, - uint32_t index) +VKAPI_ATTR VkResult VKAPI_CALL vkDisplayPowerControlEXT( + VkDevice device, + VkDisplayKHR display, + const VkDisplayPowerInfoEXT* pDisplayPowerInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16442,32 +17368,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEndQueryIndexedEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, queryPool, query, index); + CustomEncoderPreCall::Dispatch(manager, device, display, pDisplayPowerInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndQueryIndexedEXT); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->DisplayPowerControlEXT(device, display, pDisplayPowerInfo); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkDisplayPowerControlEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(queryPool); - encoder->EncodeUInt32Value(query); - encoder->EncodeUInt32Value(index); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdEndQueryIndexedEXTHandles, queryPool); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(display); + EncodeStructPtr(encoder, pDisplayPowerInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index); + CustomEncoderPostCall::Dispatch(manager, result, device, display, pDisplayPowerInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, queryPool, query, index); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectByteCountEXT( - VkCommandBuffer commandBuffer, - uint32_t instanceCount, - uint32_t firstInstance, - VkBuffer counterBuffer, - VkDeviceSize counterBufferOffset, - uint32_t counterOffset, - uint32_t vertexStride) +VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDeviceEventEXT( + VkDevice device, + const VkDeviceEventInfoEXT* pDeviceEventInfo, + const VkAllocationCallbacks* pAllocator, + VkFence* pFence) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16483,30 +17408,44 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectByteCountEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawIndirectByteCountEXT); + CustomEncoderPreCall::Dispatch(manager, device, pDeviceEventInfo, pAllocator, pFence); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->RegisterDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pFence, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkRegisterDeviceEventEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(instanceCount); - encoder->EncodeUInt32Value(firstInstance); - encoder->EncodeVulkanHandleValue(counterBuffer); - encoder->EncodeUInt64Value(counterBufferOffset); - encoder->EncodeUInt32Value(counterOffset); - encoder->EncodeUInt32Value(vertexStride); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawIndirectByteCountEXTHandles, counterBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pDeviceEventInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pFence, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pFence, nullptr); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride); + CustomEncoderPostCall::Dispatch(manager, result, device, pDeviceEventInfo, pAllocator, pFence); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride); + return result; } -VKAPI_ATTR uint32_t VKAPI_CALL vkGetImageViewHandleNVX( +VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDisplayEventEXT( VkDevice device, - const VkImageViewHandleInfoNVX* pInfo) + VkDisplayKHR display, + const VkDisplayEventInfoEXT* pDisplayEventInfo, + const VkAllocationCallbacks* pAllocator, + VkFence* pFence) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16522,31 +17461,44 @@ VKAPI_ATTR uint32_t VKAPI_CALL vkGetImageViewHandleNVX( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo); + bool omit_output_data = false; - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkImageViewHandleInfoNVX* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, display, pDisplayEventInfo, pAllocator, pFence); - uint32_t result = vulkan_wrappers::GetDeviceTable(device)->GetImageViewHandleNVX(device, pInfo_unwrapped); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->RegisterDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageViewHandleNVX); + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, display, pFence, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkRegisterDisplayEventEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeUInt32Value(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(display); + EncodeStructPtr(encoder, pDisplayEventInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pFence, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pFence, nullptr); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + CustomEncoderPostCall::Dispatch(manager, result, device, display, pDisplayEventInfo, pAllocator, pFence); return result; } -VKAPI_ATTR uint64_t VKAPI_CALL vkGetImageViewHandle64NVX( +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT( VkDevice device, - const VkImageViewHandleInfoNVX* pInfo) + VkSwapchainKHR swapchain, + VkSurfaceCounterFlagBitsEXT counter, + uint64_t* pCounterValue) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16562,32 +17514,37 @@ VKAPI_ATTR uint64_t VKAPI_CALL vkGetImageViewHandle64NVX( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo); + bool omit_output_data = false; - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkImageViewHandleInfoNVX* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, swapchain, counter, pCounterValue); - uint64_t result = vulkan_wrappers::GetDeviceTable(device)->GetImageViewHandle64NVX(device, pInfo_unwrapped); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSwapchainCounterEXT(device, swapchain, counter, pCounterValue); + if (result < 0) + { + omit_output_data = true; + } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageViewHandle64NVX); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSwapchainCounterEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeUInt64Value(result); + encoder->EncodeVulkanHandleValue(swapchain); + encoder->EncodeEnumValue(counter); + encoder->EncodeUInt64Ptr(pCounterValue, omit_output_data); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, counter, pCounterValue); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetImageViewAddressNVX( +VKAPI_ATTR VkResult VKAPI_CALL vkGetRefreshCycleDurationGOOGLE( VkDevice device, - VkImageView imageView, - VkImageViewAddressPropertiesNVX* pProperties) + VkSwapchainKHR swapchain, + VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16605,38 +17562,35 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetImageViewAddressNVX( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, imageView, pProperties); + CustomEncoderPreCall::Dispatch(manager, device, swapchain, pDisplayTimingProperties); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetImageViewAddressNVX(device, imageView, pProperties); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageViewAddressNVX); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetRefreshCycleDurationGOOGLE); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(imageView); - EncodeStructPtr(encoder, pProperties, omit_output_data); + encoder->EncodeVulkanHandleValue(swapchain); + EncodeStructPtr(encoder, pDisplayTimingProperties, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, imageView, pProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, pDisplayTimingProperties); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountAMD( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE( + VkDevice device, + VkSwapchainKHR swapchain, + uint32_t* pPresentationTimingCount, + VkPastPresentationTimingGOOGLE* pPresentationTimings) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16652,35 +17606,38 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountAMD( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawIndirectCountAMD); + CustomEncoderPreCall::Dispatch(manager, device, swapchain, pPresentationTimingCount, pPresentationTimings); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPastPresentationTimingGOOGLE); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(buffer); - encoder->EncodeUInt64Value(offset); - encoder->EncodeVulkanHandleValue(countBuffer); - encoder->EncodeUInt64Value(countBufferOffset); - encoder->EncodeUInt32Value(maxDrawCount); - encoder->EncodeUInt32Value(stride); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawIndirectCountAMDHandles, buffer, countBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(swapchain); + encoder->EncodeUInt32Ptr(pPresentationTimingCount, omit_output_data); + EncodeStructArray(encoder, pPresentationTimings, (pPresentationTimingCount != nullptr) ? (*pPresentationTimingCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, pPresentationTimingCount, pPresentationTimings); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD( +VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT( VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) + uint32_t firstDiscardRectangle, + uint32_t discardRectangleCount, + const VkRect2D* pDiscardRectangles) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16696,34 +17653,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawIndexedIndirectCountAMD); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDiscardRectangleEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(buffer); - encoder->EncodeUInt64Value(offset); - encoder->EncodeVulkanHandleValue(countBuffer); - encoder->EncodeUInt64Value(countBufferOffset); - encoder->EncodeUInt32Value(maxDrawCount); - encoder->EncodeUInt32Value(stride); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawIndexedIndirectCountAMDHandles, buffer, countBuffer); + encoder->EncodeUInt32Value(firstDiscardRectangle); + encoder->EncodeUInt32Value(discardRectangleCount); + EncodeStructArray(encoder, pDiscardRectangles, discardRectangleCount); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetShaderInfoAMD( - VkDevice device, - VkPipeline pipeline, - VkShaderStageFlagBits shaderStage, - VkShaderInfoTypeAMD infoType, - size_t* pInfoSize, - void* pInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 discardRectangleEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16739,40 +17689,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetShaderInfoAMD( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pipeline, shaderStage, infoType, pInfoSize, pInfo); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetShaderInfoAMD(device, pipeline, shaderStage, infoType, pInfoSize, pInfo); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, discardRectangleEnable); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetShaderInfoAMD); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDiscardRectangleEnableEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(pipeline); - encoder->EncodeEnumValue(shaderStage); - encoder->EncodeEnumValue(infoType); - encoder->EncodeSizeTPtr(pInfoSize, omit_output_data); - encoder->EncodeVoidArray(pInfo, (pInfoSize != nullptr) ? (*pInfoSize) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(discardRectangleEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pipeline, shaderStage, infoType, pInfoSize, pInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDiscardRectangleEnableEXT(commandBuffer, discardRectangleEnable); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, discardRectangleEnable); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP( - VkInstance instance, - const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleModeEXT( + VkCommandBuffer commandBuffer, + VkDiscardRectangleModeEXT discardRectangleMode) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16788,47 +17723,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateStreamDescriptorSurfaceGGP(instance, pCreateInfo, pAllocator, pSurface); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, discardRectangleMode); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateStreamDescriptorSurfaceGGP); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDiscardRectangleModeEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(discardRectangleMode); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDiscardRectangleModeEXT(commandBuffer, discardRectangleMode); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, discardRectangleMode); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceExternalImageFormatPropertiesNV( - VkPhysicalDevice physicalDevice, - VkFormat format, - VkImageType type, - VkImageTiling tiling, - VkImageUsageFlags usage, - VkImageCreateFlags flags, - VkExternalMemoryHandleTypeFlagsNV externalHandleType, - VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties) +VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT( + VkDevice device, + uint32_t swapchainCount, + const VkSwapchainKHR* pSwapchains, + const VkHdrMetadataEXT* pMetadata) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16844,42 +17759,29 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceExternalImageFormatPropertiesN shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceExternalImageFormatPropertiesNV(physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, device, swapchainCount, pSwapchains, pMetadata); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalImageFormatPropertiesNV); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetHdrMetadataEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeEnumValue(format); - encoder->EncodeEnumValue(type); - encoder->EncodeEnumValue(tiling); - encoder->EncodeFlagsValue(usage); - encoder->EncodeFlagsValue(flags); - encoder->EncodeFlagsValue(externalHandleType); - EncodeStructPtr(encoder, pExternalImageFormatProperties, omit_output_data); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeUInt32Value(swapchainCount); + encoder->EncodeVulkanHandleArray(pSwapchains, swapchainCount); + EncodeStructArray(encoder, pMetadata, swapchainCount); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties); + vulkan_wrappers::GetDeviceTable(device)->SetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata); - return result; + CustomEncoderPostCall::Dispatch(manager, device, swapchainCount, pSwapchains, pMetadata); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV( - VkDevice device, - VkDeviceMemory memory, - VkExternalMemoryHandleTypeFlagsNV handleType, - HANDLE* pHandle) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK( + VkInstance instance, + const VkIOSSurfaceCreateInfoMVK* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16897,34 +17799,39 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, memory, handleType, pHandle); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryWin32HandleNV(device, memory, handleType, pHandle); - if (result < 0) + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); + } + else { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryWin32HandleNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateIOSSurfaceMVK); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(memory); - encoder->EncodeFlagsValue(handleType); - encoder->EncodeVoidPtrPtr(pHandle, omit_output_data); + encoder->EncodeVulkanHandleValue(instance); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, memory, handleType, pHandle); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK( VkInstance instance, - const VkViSurfaceCreateInfoNN* pCreateInfo, + const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { @@ -16944,9 +17851,9 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface); + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface); if (result >= 0) { @@ -16957,7 +17864,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN( omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateViSurfaceNN); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateMacOSSurfaceMVK); if (encoder) { encoder->EncodeVulkanHandleValue(instance); @@ -16965,18 +17872,18 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN( EncodeStructPtr(encoder, pAllocator); encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdBeginConditionalRenderingEXT( - VkCommandBuffer commandBuffer, - const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin) +VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectNameEXT( + VkDevice device, + const VkDebugUtilsObjectNameInfoEXT* pNameInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -16992,27 +17899,33 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBeginConditionalRenderingEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pConditionalRenderingBegin); + CustomEncoderPreCall::Dispatch(manager, device, pNameInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginConditionalRenderingEXT); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDebugUtilsObjectNameInfoEXT* pNameInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pNameInfo, handle_unwrap_memory); + + auto device_wrapper = vulkan_wrappers::GetWrapper(device); + auto physical_device = device_wrapper->physical_device->handle; + VkResult result = vulkan_wrappers::GetInstanceTable(physical_device)->SetDebugUtilsObjectNameEXT(device, pNameInfo_unwrapped); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkSetDebugUtilsObjectNameEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pConditionalRenderingBegin); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBeginConditionalRenderingEXTHandles, pConditionalRenderingBegin); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pNameInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pConditionalRenderingBegin, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin_unwrapped); + CustomEncoderPostCall::Dispatch(manager, result, device, pNameInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pConditionalRenderingBegin); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdEndConditionalRenderingEXT( - VkCommandBuffer commandBuffer) +VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectTagEXT( + VkDevice device, + const VkDebugUtilsObjectTagInfoEXT* pTagInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17028,26 +17941,33 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEndConditionalRenderingEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer); + CustomEncoderPreCall::Dispatch(manager, device, pTagInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndConditionalRenderingEXT); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDebugUtilsObjectTagInfoEXT* pTagInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pTagInfo, handle_unwrap_memory); + + auto device_wrapper = vulkan_wrappers::GetWrapper(device); + auto physical_device = device_wrapper->physical_device->handle; + VkResult result = vulkan_wrappers::GetInstanceTable(physical_device)->SetDebugUtilsObjectTagEXT(device, pTagInfo_unwrapped); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkSetDebugUtilsObjectTagEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pTagInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndConditionalRenderingEXT(commandBuffer); + CustomEncoderPostCall::Dispatch(manager, result, device, pTagInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingNV( - VkCommandBuffer commandBuffer, - uint32_t firstViewport, - uint32_t viewportCount, - const VkViewportWScalingNV* pViewportWScalings) +VKAPI_ATTR void VKAPI_CALL vkQueueBeginDebugUtilsLabelEXT( + VkQueue queue, + const VkDebugUtilsLabelEXT* pLabelInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17063,27 +17983,24 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstViewport, viewportCount, pViewportWScalings); + CustomEncoderPreCall::Dispatch(manager, queue, pLabelInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetViewportWScalingNV); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueueBeginDebugUtilsLabelEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstViewport); - encoder->EncodeUInt32Value(viewportCount); - EncodeStructArray(encoder, pViewportWScalings, viewportCount); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(queue); + EncodeStructPtr(encoder, pLabelInfo); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings); + vulkan_wrappers::GetDeviceTable(queue)->QueueBeginDebugUtilsLabelEXT(queue, pLabelInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstViewport, viewportCount, pViewportWScalings); + CustomEncoderPostCall::Dispatch(manager, queue, pLabelInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT( - VkPhysicalDevice physicalDevice, - VkDisplayKHR display) +VKAPI_ATTR void VKAPI_CALL vkQueueEndDebugUtilsLabelEXT( + VkQueue queue) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17099,29 +18016,24 @@ VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, display); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->ReleaseDisplayEXT(physicalDevice, display); + CustomEncoderPreCall::Dispatch(manager, queue); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkReleaseDisplayEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueueEndDebugUtilsLabelEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeVulkanHandleValue(display); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(queue); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, display); + vulkan_wrappers::GetDeviceTable(queue)->QueueEndDebugUtilsLabelEXT(queue); - return result; + CustomEncoderPostCall::Dispatch(manager, queue); } -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireXlibDisplayEXT( - VkPhysicalDevice physicalDevice, - Display* dpy, - VkDisplayKHR display) +VKAPI_ATTR void VKAPI_CALL vkQueueInsertDebugUtilsLabelEXT( + VkQueue queue, + const VkDebugUtilsLabelEXT* pLabelInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17137,31 +18049,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkAcquireXlibDisplayEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, dpy, display); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->AcquireXlibDisplayEXT(physicalDevice, dpy, display); + CustomEncoderPreCall::Dispatch(manager, queue, pLabelInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAcquireXlibDisplayEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueueInsertDebugUtilsLabelEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeVoidPtr(dpy); - encoder->EncodeVulkanHandleValue(display); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(queue); + EncodeStructPtr(encoder, pLabelInfo); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, dpy, display); + vulkan_wrappers::GetDeviceTable(queue)->QueueInsertDebugUtilsLabelEXT(queue, pLabelInfo); - return result; + CustomEncoderPostCall::Dispatch(manager, queue, pLabelInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetRandROutputDisplayEXT( - VkPhysicalDevice physicalDevice, - Display* dpy, - RROutput rrOutput, - VkDisplayKHR* pDisplay) +VKAPI_ATTR void VKAPI_CALL vkCmdBeginDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer, + const VkDebugUtilsLabelEXT* pLabelInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17177,42 +18083,57 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetRandROutputDisplayEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pLabelInfo); - CustomEncoderPreCall::Dispatch(manager, physicalDevice, dpy, rrOutput, pDisplay); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginDebugUtilsLabelEXT); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pLabelInfo); + manager->EndCommandApiCallCapture(commandBuffer); + } - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetRandROutputDisplayEXT(physicalDevice, dpy, rrOutput, pDisplay); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo); - if (result >= 0) + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pLabelInfo); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdEndDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) { - vulkan_wrappers::CreateWrappedHandle(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, pDisplay, VulkanCaptureManager::GetUniqueId); + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); } else { - omit_output_data = true; + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetRandROutputDisplayEXT); + CustomEncoderPreCall::Dispatch(manager, commandBuffer); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndDebugUtilsLabelEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeVoidPtr(dpy); - encoder->EncodeSizeTValue(rrOutput); - encoder->EncodeVulkanHandlePtr(pDisplay, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, physicalDevice, pDisplay, nullptr); + encoder->EncodeVulkanHandleValue(commandBuffer); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, dpy, rrOutput, pDisplay); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndDebugUtilsLabelEXT(commandBuffer); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT( - VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - VkSurfaceCapabilities2EXT* pSurfaceCapabilities) +VKAPI_ATTR void VKAPI_CALL vkCmdInsertDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer, + const VkDebugUtilsLabelEXT* pLabelInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17228,36 +18149,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, surface, pSurfaceCapabilities); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pLabelInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfaceCapabilities2EXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdInsertDebugUtilsLabelEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeVulkanHandleValue(surface); - EncodeStructPtr(encoder, pSurfaceCapabilities, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pLabelInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, surface, pSurfaceCapabilities); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pLabelInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkDisplayPowerControlEXT( - VkDevice device, - VkDisplayKHR display, - const VkDisplayPowerInfoEXT* pDisplayPowerInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugUtilsMessengerEXT( + VkInstance instance, + const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDebugUtilsMessengerEXT* pMessenger) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17273,31 +18185,42 @@ VKAPI_ATTR VkResult VKAPI_CALL vkDisplayPowerControlEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, display, pDisplayPowerInfo); + bool omit_output_data = false; - VkResult result = vulkan_wrappers::GetDeviceTable(device)->DisplayPowerControlEXT(device, display, pDisplayPowerInfo); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pMessenger); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkDisplayPowerControlEXT); + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pMessenger, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDebugUtilsMessengerEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(display); - EncodeStructPtr(encoder, pDisplayPowerInfo); + encoder->EncodeVulkanHandleValue(instance); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pMessenger, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCreateApiCallCapture(result, instance, pMessenger, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, display, pDisplayPowerInfo); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pMessenger); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDeviceEventEXT( - VkDevice device, - const VkDeviceEventInfoEXT* pDeviceEventInfo, - const VkAllocationCallbacks* pAllocator, - VkFence* pFence) +VKAPI_ATTR void VKAPI_CALL vkDestroyDebugUtilsMessengerEXT( + VkInstance instance, + VkDebugUtilsMessengerEXT messenger, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17313,44 +18236,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDeviceEventEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pDeviceEventInfo, pAllocator, pFence); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->RegisterDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pFence, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, instance, messenger, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkRegisterDeviceEventEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyDebugUtilsMessengerEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pDeviceEventInfo); + encoder->EncodeVulkanHandleValue(instance); + encoder->EncodeVulkanHandleValue(messenger); EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pFence, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pFence, nullptr); + manager->EndDestroyApiCallCapture(messenger); } - CustomEncoderPostCall::Dispatch(manager, result, device, pDeviceEventInfo, pAllocator, pFence); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetInstanceTable(instance)->DestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator); - return result; + CustomEncoderPostCall::Dispatch(manager, instance, messenger, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(messenger); } -VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDisplayEventEXT( - VkDevice device, - VkDisplayKHR display, - const VkDisplayEventInfoEXT* pDisplayEventInfo, - const VkAllocationCallbacks* pAllocator, - VkFence* pFence) +VKAPI_ATTR void VKAPI_CALL vkSubmitDebugUtilsMessageEXT( + VkInstance instance, + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17366,44 +18276,28 @@ VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDisplayEventEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, display, pDisplayEventInfo, pAllocator, pFence); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->RegisterDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, display, pFence, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, instance, messageSeverity, messageTypes, pCallbackData); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkRegisterDisplayEventEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSubmitDebugUtilsMessageEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(display); - EncodeStructPtr(encoder, pDisplayEventInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pFence, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pFence, nullptr); + encoder->EncodeVulkanHandleValue(instance); + encoder->EncodeEnumValue(messageSeverity); + encoder->EncodeFlagsValue(messageTypes); + EncodeStructPtr(encoder, pCallbackData); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, display, pDisplayEventInfo, pAllocator, pFence); + vulkan_wrappers::GetInstanceTable(instance)->SubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, pCallbackData); - return result; + CustomEncoderPostCall::Dispatch(manager, instance, messageSeverity, messageTypes, pCallbackData); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID( VkDevice device, - VkSwapchainKHR swapchain, - VkSurfaceCounterFlagBitsEXT counter, - uint64_t* pCounterValue) + const struct AHardwareBuffer* buffer, + VkAndroidHardwareBufferPropertiesANDROID* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17421,35 +18315,34 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, swapchain, counter, pCounterValue); + CustomEncoderPreCall::Dispatch(manager, device, buffer, pProperties); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSwapchainCounterEXT(device, swapchain, counter, pCounterValue); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetAndroidHardwareBufferPropertiesANDROID(device, buffer, pProperties); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSwapchainCounterEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetAndroidHardwareBufferPropertiesANDROID); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); - encoder->EncodeEnumValue(counter); - encoder->EncodeUInt64Ptr(pCounterValue, omit_output_data); + encoder->EncodeVoidPtr(buffer); + EncodeStructPtr(encoder, pProperties, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, counter, pCounterValue); + CustomEncoderPostCall::Dispatch(manager, result, device, buffer, pProperties); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetRefreshCycleDurationGOOGLE( +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID( VkDevice device, - VkSwapchainKHR swapchain, - VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties) + const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, + struct AHardwareBuffer** pBuffer) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17467,35 +18360,36 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetRefreshCycleDurationGOOGLE( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, swapchain, pDisplayTimingProperties); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pBuffer); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryAndroidHardwareBufferANDROID(device, pInfo_unwrapped, pBuffer); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetRefreshCycleDurationGOOGLE); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryAndroidHardwareBufferANDROID); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); - EncodeStructPtr(encoder, pDisplayTimingProperties, omit_output_data); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeVoidPtrPtr(pBuffer, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, pDisplayTimingProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo, pBuffer); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE( - VkDevice device, - VkSwapchainKHR swapchain, - uint32_t* pPresentationTimingCount, - VkPastPresentationTimingGOOGLE* pPresentationTimings) +VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEXT( + VkCommandBuffer commandBuffer, + const VkSampleLocationsInfoEXT* pSampleLocationsInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17511,38 +18405,26 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, swapchain, pPresentationTimingCount, pPresentationTimings); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pSampleLocationsInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPastPresentationTimingGOOGLE); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetSampleLocationsEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); - encoder->EncodeUInt32Ptr(pPresentationTimingCount, omit_output_data); - EncodeStructArray(encoder, pPresentationTimings, (pPresentationTimingCount != nullptr) ? (*pPresentationTimingCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pSampleLocationsInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, pPresentationTimingCount, pPresentationTimings); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pSampleLocationsInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT( - VkCommandBuffer commandBuffer, - uint32_t firstDiscardRectangle, - uint32_t discardRectangleCount, - const VkRect2D* pDiscardRectangles) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMultisamplePropertiesEXT( + VkPhysicalDevice physicalDevice, + VkSampleCountFlagBits samples, + VkMultisamplePropertiesEXT* pMultisampleProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17558,27 +18440,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, samples, pMultisampleProperties); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDiscardRectangleEXT); + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pMultisampleProperties); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceMultisamplePropertiesEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstDiscardRectangle); - encoder->EncodeUInt32Value(discardRectangleCount); - EncodeStructArray(encoder, pDiscardRectangles, discardRectangleCount); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeEnumValue(samples); + EncodeStructPtr(encoder, pMultisampleProperties); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles); + CustomEncoderPostCall::Dispatch(manager, physicalDevice, samples, pMultisampleProperties); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 discardRectangleEnable) +VKAPI_ATTR VkResult VKAPI_CALL vkGetImageDrmFormatModifierPropertiesEXT( + VkDevice device, + VkImage image, + VkImageDrmFormatModifierPropertiesEXT* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17594,25 +18476,37 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, discardRectangleEnable); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDiscardRectangleEnableEXT); + CustomEncoderPreCall::Dispatch(manager, device, image, pProperties); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetImageDrmFormatModifierPropertiesEXT(device, image, pProperties); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageDrmFormatModifierPropertiesEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(discardRectangleEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(image); + EncodeStructPtr(encoder, pProperties, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDiscardRectangleEnableEXT(commandBuffer, discardRectangleEnable); + CustomEncoderPostCall::Dispatch(manager, result, device, image, pProperties); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, discardRectangleEnable); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleModeEXT( - VkCommandBuffer commandBuffer, - VkDiscardRectangleModeEXT discardRectangleMode) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateValidationCacheEXT( + VkDevice device, + const VkValidationCacheCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkValidationCacheEXT* pValidationCache) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17628,27 +18522,42 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleModeEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, discardRectangleMode); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDiscardRectangleModeEXT); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pValidationCache); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateValidationCacheEXT(device, pCreateInfo, pAllocator, pValidationCache); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pValidationCache, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateValidationCacheEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(discardRectangleMode); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pValidationCache, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pValidationCache, pCreateInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDiscardRectangleModeEXT(commandBuffer, discardRectangleMode); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pValidationCache); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, discardRectangleMode); + return result; } -VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT( +VKAPI_ATTR void VKAPI_CALL vkDestroyValidationCacheEXT( VkDevice device, - uint32_t swapchainCount, - const VkSwapchainKHR* pSwapchains, - const VkHdrMetadataEXT* pMetadata) + VkValidationCacheEXT validationCache, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17664,29 +18573,31 @@ VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, swapchainCount, pSwapchains, pMetadata); + CustomEncoderPreCall::Dispatch(manager, device, validationCache, pAllocator); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetHdrMetadataEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyValidationCacheEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeUInt32Value(swapchainCount); - encoder->EncodeVulkanHandleArray(pSwapchains, swapchainCount); - EncodeStructArray(encoder, pMetadata, swapchainCount); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(validationCache); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(validationCache); } - vulkan_wrappers::GetDeviceTable(device)->SetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyValidationCacheEXT(device, validationCache, pAllocator); - CustomEncoderPostCall::Dispatch(manager, device, swapchainCount, pSwapchains, pMetadata); + CustomEncoderPostCall::Dispatch(manager, device, validationCache, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(validationCache); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK( - VkInstance instance, - const VkIOSSurfaceCreateInfoMVK* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +VKAPI_ATTR VkResult VKAPI_CALL vkMergeValidationCachesEXT( + VkDevice device, + VkValidationCacheEXT dstCache, + uint32_t srcCacheCount, + const VkValidationCacheEXT* pSrcCaches) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17702,43 +18613,32 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface); + CustomEncoderPreCall::Dispatch(manager, device, dstCache, srcCacheCount, pSrcCaches); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->MergeValidationCachesEXT(device, dstCache, srcCacheCount, pSrcCaches); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateIOSSurfaceMVK); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkMergeValidationCachesEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(dstCache); + encoder->EncodeUInt32Value(srcCacheCount); + encoder->EncodeVulkanHandleArray(pSrcCaches, srcCacheCount); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); + CustomEncoderPostCall::Dispatch(manager, result, device, dstCache, srcCacheCount, pSrcCaches); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK( - VkInstance instance, - const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +VKAPI_ATTR VkResult VKAPI_CALL vkGetValidationCacheDataEXT( + VkDevice device, + VkValidationCacheEXT validationCache, + size_t* pDataSize, + void* pData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17756,39 +18656,35 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface); + CustomEncoderPreCall::Dispatch(manager, device, validationCache, pDataSize, pData); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); - } - else + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetValidationCacheDataEXT(device, validationCache, pDataSize, pData); + if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateMacOSSurfaceMVK); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetValidationCacheDataEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(validationCache); + encoder->EncodeSizeTPtr(pDataSize, omit_output_data); + encoder->EncodeVoidArray(pData, (pDataSize != nullptr) ? (*pDataSize) : 0, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); + CustomEncoderPostCall::Dispatch(manager, result, device, validationCache, pDataSize, pData); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectNameEXT( - VkDevice device, - const VkDebugUtilsObjectNameInfoEXT* pNameInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdBindShadingRateImageNV( + VkCommandBuffer commandBuffer, + VkImageView imageView, + VkImageLayout imageLayout) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17804,33 +18700,28 @@ VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectNameEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pNameInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDebugUtilsObjectNameInfoEXT* pNameInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pNameInfo, handle_unwrap_memory); - - auto device_wrapper = vulkan_wrappers::GetWrapper(device); - auto physical_device = device_wrapper->physical_device->handle; - VkResult result = vulkan_wrappers::GetInstanceTable(physical_device)->SetDebugUtilsObjectNameEXT(device, pNameInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, imageView, imageLayout); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkSetDebugUtilsObjectNameEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindShadingRateImageNV); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pNameInfo); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(imageView); + encoder->EncodeEnumValue(imageLayout); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindShadingRateImageNVHandles, imageView); } - CustomEncoderPostCall::Dispatch(manager, result, device, pNameInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, imageView, imageLayout); } -VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectTagEXT( - VkDevice device, - const VkDebugUtilsObjectTagInfoEXT* pTagInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportShadingRatePaletteNV( + VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkShadingRatePaletteNV* pShadingRatePalettes) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17846,33 +18737,29 @@ VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectTagEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pTagInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDebugUtilsObjectTagInfoEXT* pTagInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pTagInfo, handle_unwrap_memory); - - auto device_wrapper = vulkan_wrappers::GetWrapper(device); - auto physical_device = device_wrapper->physical_device->handle; - VkResult result = vulkan_wrappers::GetInstanceTable(physical_device)->SetDebugUtilsObjectTagEXT(device, pTagInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstViewport, viewportCount, pShadingRatePalettes); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkSetDebugUtilsObjectTagEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetViewportShadingRatePaletteNV); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pTagInfo); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(firstViewport); + encoder->EncodeUInt32Value(viewportCount); + EncodeStructArray(encoder, pShadingRatePalettes, viewportCount); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pTagInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstViewport, viewportCount, pShadingRatePalettes); } -VKAPI_ATTR void VKAPI_CALL vkQueueBeginDebugUtilsLabelEXT( - VkQueue queue, - const VkDebugUtilsLabelEXT* pLabelInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoarseSampleOrderNV( + VkCommandBuffer commandBuffer, + VkCoarseSampleOrderTypeNV sampleOrderType, + uint32_t customSampleOrderCount, + const VkCoarseSampleOrderCustomNV* pCustomSampleOrders) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17888,24 +18775,29 @@ VKAPI_ATTR void VKAPI_CALL vkQueueBeginDebugUtilsLabelEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, queue, pLabelInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueueBeginDebugUtilsLabelEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCoarseSampleOrderNV); if (encoder) { - encoder->EncodeVulkanHandleValue(queue); - EncodeStructPtr(encoder, pLabelInfo); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(sampleOrderType); + encoder->EncodeUInt32Value(customSampleOrderCount); + EncodeStructArray(encoder, pCustomSampleOrders, customSampleOrderCount); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(queue)->QueueBeginDebugUtilsLabelEXT(queue, pLabelInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders); - CustomEncoderPostCall::Dispatch(manager, queue, pLabelInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders); } -VKAPI_ATTR void VKAPI_CALL vkQueueEndDebugUtilsLabelEXT( - VkQueue queue) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureNV( + VkDevice device, + const VkAccelerationStructureCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkAccelerationStructureNV* pAccelerationStructure) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17921,24 +18813,45 @@ VKAPI_ATTR void VKAPI_CALL vkQueueEndDebugUtilsLabelEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, queue); + bool omit_output_data = false; - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueueEndDebugUtilsLabelEXT); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pAccelerationStructure); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkAccelerationStructureCreateInfoNV* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateAccelerationStructureNV(device, pCreateInfo_unwrapped, pAllocator, pAccelerationStructure); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pAccelerationStructure, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateAccelerationStructureNV); if (encoder) { - encoder->EncodeVulkanHandleValue(queue); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pAccelerationStructure, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pAccelerationStructure, pCreateInfo); } - vulkan_wrappers::GetDeviceTable(queue)->QueueEndDebugUtilsLabelEXT(queue); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pAccelerationStructure); - CustomEncoderPostCall::Dispatch(manager, queue); + return result; } -VKAPI_ATTR void VKAPI_CALL vkQueueInsertDebugUtilsLabelEXT( - VkQueue queue, - const VkDebugUtilsLabelEXT* pLabelInfo) +VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureNV( + VkDevice device, + VkAccelerationStructureNV accelerationStructure, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17954,25 +18867,30 @@ VKAPI_ATTR void VKAPI_CALL vkQueueInsertDebugUtilsLabelEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, queue, pLabelInfo); + CustomEncoderPreCall::Dispatch(manager, device, accelerationStructure, pAllocator); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueueInsertDebugUtilsLabelEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyAccelerationStructureNV); if (encoder) { - encoder->EncodeVulkanHandleValue(queue); - EncodeStructPtr(encoder, pLabelInfo); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(accelerationStructure); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(accelerationStructure); } - vulkan_wrappers::GetDeviceTable(queue)->QueueInsertDebugUtilsLabelEXT(queue, pLabelInfo); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyAccelerationStructureNV(device, accelerationStructure, pAllocator); - CustomEncoderPostCall::Dispatch(manager, queue, pLabelInfo); + CustomEncoderPostCall::Dispatch(manager, device, accelerationStructure, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(accelerationStructure); } -VKAPI_ATTR void VKAPI_CALL vkCmdBeginDebugUtilsLabelEXT( - VkCommandBuffer commandBuffer, - const VkDebugUtilsLabelEXT* pLabelInfo) +VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureMemoryRequirementsNV( + VkDevice device, + const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, + VkMemoryRequirements2KHR* pMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -17988,24 +18906,30 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBeginDebugUtilsLabelEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pLabelInfo); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(device)->GetAccelerationStructureMemoryRequirementsNV(device, pInfo_unwrapped, pMemoryRequirements); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginDebugUtilsLabelEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetAccelerationStructureMemoryRequirementsNV); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pLabelInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pMemoryRequirements); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pLabelInfo); + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); } -VKAPI_ATTR void VKAPI_CALL vkCmdEndDebugUtilsLabelEXT( - VkCommandBuffer commandBuffer) +VKAPI_ATTR VkResult VKAPI_CALL vkBindAccelerationStructureMemoryNV( + VkDevice device, + uint32_t bindInfoCount, + const VkBindAccelerationStructureMemoryInfoNV* pBindInfos) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18021,24 +18945,39 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEndDebugUtilsLabelEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer); + CustomEncoderPreCall::Dispatch(manager, device, bindInfoCount, pBindInfos); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndDebugUtilsLabelEXT); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBindAccelerationStructureMemoryInfoNV* pBindInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBindInfos, bindInfoCount, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindAccelerationStructureMemoryNV(device, bindInfoCount, pBindInfos_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindAccelerationStructureMemoryNV); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeUInt32Value(bindInfoCount); + EncodeStructArray(encoder, pBindInfos, bindInfoCount); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndDebugUtilsLabelEXT(commandBuffer); + CustomEncoderPostCall::Dispatch(manager, result, device, bindInfoCount, pBindInfos); - CustomEncoderPostCall::Dispatch(manager, commandBuffer); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdInsertDebugUtilsLabelEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructureNV( VkCommandBuffer commandBuffer, - const VkDebugUtilsLabelEXT* pLabelInfo) + const VkAccelerationStructureInfoNV* pInfo, + VkBuffer instanceData, + VkDeviceSize instanceOffset, + VkBool32 update, + VkAccelerationStructureNV dst, + VkAccelerationStructureNV src, + VkBuffer scratch, + VkDeviceSize scratchOffset) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18054,27 +18993,37 @@ VKAPI_ATTR void VKAPI_CALL vkCmdInsertDebugUtilsLabelEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pLabelInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdInsertDebugUtilsLabelEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBuildAccelerationStructureNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pLabelInfo); - manager->EndCommandApiCallCapture(commandBuffer); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeVulkanHandleValue(instanceData); + encoder->EncodeUInt64Value(instanceOffset); + encoder->EncodeUInt32Value(update); + encoder->EncodeVulkanHandleValue(dst); + encoder->EncodeVulkanHandleValue(src); + encoder->EncodeVulkanHandleValue(scratch); + encoder->EncodeUInt64Value(scratchOffset); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBuildAccelerationStructureNVHandles, pInfo, instanceData, dst, src, scratch); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkAccelerationStructureInfoNV* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pLabelInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBuildAccelerationStructureNV(commandBuffer, pInfo_unwrapped, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugUtilsMessengerEXT( - VkInstance instance, - const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDebugUtilsMessengerEXT* pMessenger) +VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureNV( + VkCommandBuffer commandBuffer, + VkAccelerationStructureNV dst, + VkAccelerationStructureNV src, + VkCopyAccelerationStructureModeKHR mode) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18090,42 +19039,40 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugUtilsMessengerEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pMessenger); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pMessenger, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, dst, src, mode); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDebugUtilsMessengerEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyAccelerationStructureNV); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pMessenger, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pMessenger, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(dst); + encoder->EncodeVulkanHandleValue(src); + encoder->EncodeEnumValue(mode); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyAccelerationStructureNVHandles, dst, src); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pMessenger); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, dst, src, mode); } -VKAPI_ATTR void VKAPI_CALL vkDestroyDebugUtilsMessengerEXT( - VkInstance instance, - VkDebugUtilsMessengerEXT messenger, - const VkAllocationCallbacks* pAllocator) +VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysNV( + VkCommandBuffer commandBuffer, + VkBuffer raygenShaderBindingTableBuffer, + VkDeviceSize raygenShaderBindingOffset, + VkBuffer missShaderBindingTableBuffer, + VkDeviceSize missShaderBindingOffset, + VkDeviceSize missShaderBindingStride, + VkBuffer hitShaderBindingTableBuffer, + VkDeviceSize hitShaderBindingOffset, + VkDeviceSize hitShaderBindingStride, + VkBuffer callableShaderBindingTableBuffer, + VkDeviceSize callableShaderBindingOffset, + VkDeviceSize callableShaderBindingStride, + uint32_t width, + uint32_t height, + uint32_t depth) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18141,31 +19088,42 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyDebugUtilsMessengerEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, instance, messenger, pAllocator); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyDebugUtilsMessengerEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdTraceRaysNV); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - encoder->EncodeVulkanHandleValue(messenger); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(messenger); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(raygenShaderBindingTableBuffer); + encoder->EncodeUInt64Value(raygenShaderBindingOffset); + encoder->EncodeVulkanHandleValue(missShaderBindingTableBuffer); + encoder->EncodeUInt64Value(missShaderBindingOffset); + encoder->EncodeUInt64Value(missShaderBindingStride); + encoder->EncodeVulkanHandleValue(hitShaderBindingTableBuffer); + encoder->EncodeUInt64Value(hitShaderBindingOffset); + encoder->EncodeUInt64Value(hitShaderBindingStride); + encoder->EncodeVulkanHandleValue(callableShaderBindingTableBuffer); + encoder->EncodeUInt64Value(callableShaderBindingOffset); + encoder->EncodeUInt64Value(callableShaderBindingStride); + encoder->EncodeUInt32Value(width); + encoder->EncodeUInt32Value(height); + encoder->EncodeUInt32Value(depth); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdTraceRaysNVHandles, raygenShaderBindingTableBuffer, missShaderBindingTableBuffer, hitShaderBindingTableBuffer, callableShaderBindingTableBuffer); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetInstanceTable(instance)->DestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, instance, messenger, pAllocator); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth); - vulkan_wrappers::DestroyWrappedHandle(messenger); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth); } -VKAPI_ATTR void VKAPI_CALL vkSubmitDebugUtilsMessageEXT( - VkInstance instance, - VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, - VkDebugUtilsMessageTypeFlagsEXT messageTypes, - const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData) +VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesKHR( + VkDevice device, + VkPipeline pipeline, + uint32_t firstGroup, + uint32_t groupCount, + size_t dataSize, + void* pData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18181,28 +19139,42 @@ VKAPI_ATTR void VKAPI_CALL vkSubmitDebugUtilsMessageEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, instance, messageSeverity, messageTypes, pCallbackData); + bool omit_output_data = false; - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSubmitDebugUtilsMessageEXT); + CustomEncoderPreCall::Dispatch(manager, device, pipeline, firstGroup, groupCount, dataSize, pData); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetRayTracingShaderGroupHandlesKHR(device, pipeline, firstGroup, groupCount, dataSize, pData); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetRayTracingShaderGroupHandlesKHR); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - encoder->EncodeEnumValue(messageSeverity); - encoder->EncodeFlagsValue(messageTypes); - EncodeStructPtr(encoder, pCallbackData); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(pipeline); + encoder->EncodeUInt32Value(firstGroup); + encoder->EncodeUInt32Value(groupCount); + encoder->EncodeSizeTValue(dataSize); + encoder->EncodeVoidArray(pData, dataSize, omit_output_data); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - vulkan_wrappers::GetInstanceTable(instance)->SubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, pCallbackData); + CustomEncoderPostCall::Dispatch(manager, result, device, pipeline, firstGroup, groupCount, dataSize, pData); - CustomEncoderPostCall::Dispatch(manager, instance, messageSeverity, messageTypes, pCallbackData); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID( +VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesNV( VkDevice device, - const struct AHardwareBuffer* buffer, - VkAndroidHardwareBufferPropertiesANDROID* pProperties) + VkPipeline pipeline, + uint32_t firstGroup, + uint32_t groupCount, + size_t dataSize, + void* pData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18220,34 +19192,38 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, buffer, pProperties); + CustomEncoderPreCall::Dispatch(manager, device, pipeline, firstGroup, groupCount, dataSize, pData); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetAndroidHardwareBufferPropertiesANDROID(device, buffer, pProperties); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetRayTracingShaderGroupHandlesNV(device, pipeline, firstGroup, groupCount, dataSize, pData); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetAndroidHardwareBufferPropertiesANDROID); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetRayTracingShaderGroupHandlesNV); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVoidPtr(buffer); - EncodeStructPtr(encoder, pProperties, omit_output_data); + encoder->EncodeVulkanHandleValue(pipeline); + encoder->EncodeUInt32Value(firstGroup); + encoder->EncodeUInt32Value(groupCount); + encoder->EncodeSizeTValue(dataSize); + encoder->EncodeVoidArray(pData, dataSize, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, buffer, pProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, pipeline, firstGroup, groupCount, dataSize, pData); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID( +VKAPI_ATTR VkResult VKAPI_CALL vkGetAccelerationStructureHandleNV( VkDevice device, - const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, - struct AHardwareBuffer** pBuffer) + VkAccelerationStructureNV accelerationStructure, + size_t dataSize, + void* pData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18265,36 +19241,38 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pBuffer); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, accelerationStructure, dataSize, pData); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryAndroidHardwareBufferANDROID(device, pInfo_unwrapped, pBuffer); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetAccelerationStructureHandleNV(device, accelerationStructure, dataSize, pData); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryAndroidHardwareBufferANDROID); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetAccelerationStructureHandleNV); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeVoidPtrPtr(pBuffer, omit_output_data); + encoder->EncodeVulkanHandleValue(accelerationStructure); + encoder->EncodeSizeTValue(dataSize); + encoder->EncodeVoidArray(pData, dataSize, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo, pBuffer); + CustomEncoderPostCall::Dispatch(manager, result, device, accelerationStructure, dataSize, pData); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdWriteAccelerationStructuresPropertiesNV( VkCommandBuffer commandBuffer, - const VkSampleLocationsInfoEXT* pSampleLocationsInfo) + uint32_t accelerationStructureCount, + const VkAccelerationStructureNV* pAccelerationStructures, + VkQueryType queryType, + VkQueryPool queryPool, + uint32_t firstQuery) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18310,26 +19288,30 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pSampleLocationsInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetSampleLocationsEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWriteAccelerationStructuresPropertiesNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pSampleLocationsInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeUInt32Value(accelerationStructureCount); + encoder->EncodeVulkanHandleArray(pAccelerationStructures, accelerationStructureCount); + encoder->EncodeEnumValue(queryType); + encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeUInt32Value(firstQuery); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWriteAccelerationStructuresPropertiesNVHandles, accelerationStructureCount, pAccelerationStructures, queryPool); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pSampleLocationsInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); } -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMultisamplePropertiesEXT( - VkPhysicalDevice physicalDevice, - VkSampleCountFlagBits samples, - VkMultisamplePropertiesEXT* pMultisampleProperties) +VKAPI_ATTR VkResult VKAPI_CALL vkCompileDeferredNV( + VkDevice device, + VkPipeline pipeline, + uint32_t shader) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18345,27 +19327,31 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMultisamplePropertiesEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, samples, pMultisampleProperties); + CustomEncoderPreCall::Dispatch(manager, device, pipeline, shader); - vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pMultisampleProperties); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CompileDeferredNV(device, pipeline, shader); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceMultisamplePropertiesEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCompileDeferredNV); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeEnumValue(samples); - EncodeStructPtr(encoder, pMultisampleProperties); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(pipeline); + encoder->EncodeUInt32Value(shader); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, physicalDevice, samples, pMultisampleProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, pipeline, shader); + + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetImageDrmFormatModifierPropertiesEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostPointerPropertiesEXT( VkDevice device, - VkImage image, - VkImageDrmFormatModifierPropertiesEXT* pProperties) + VkExternalMemoryHandleTypeFlagBits handleType, + const void* pHostPointer, + VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18383,35 +19369,37 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetImageDrmFormatModifierPropertiesEXT( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, image, pProperties); + CustomEncoderPreCall::Dispatch(manager, device, handleType, pHostPointer, pMemoryHostPointerProperties); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetImageDrmFormatModifierPropertiesEXT(device, image, pProperties); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageDrmFormatModifierPropertiesEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryHostPointerPropertiesEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(image); - EncodeStructPtr(encoder, pProperties, omit_output_data); + encoder->EncodeEnumValue(handleType); + encoder->EncodeVoidPtr(pHostPointer); + EncodeStructPtr(encoder, pMemoryHostPointerProperties, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, image, pProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, handleType, pHostPointer, pMemoryHostPointerProperties); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateValidationCacheEXT( - VkDevice device, - const VkValidationCacheCreateInfoEXT* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkValidationCacheEXT* pValidationCache) +VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarkerAMD( + VkCommandBuffer commandBuffer, + VkPipelineStageFlagBits pipelineStage, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + uint32_t marker) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18427,42 +19415,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateValidationCacheEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pValidationCache); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateValidationCacheEXT(device, pCreateInfo, pAllocator, pValidationCache); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pValidationCache, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineStage, dstBuffer, dstOffset, marker); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateValidationCacheEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWriteBufferMarkerAMD); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pValidationCache, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pValidationCache, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(pipelineStage); + encoder->EncodeVulkanHandleValue(dstBuffer); + encoder->EncodeUInt64Value(dstOffset); + encoder->EncodeUInt32Value(marker); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWriteBufferMarkerAMDHandles, dstBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pValidationCache); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineStage, dstBuffer, dstOffset, marker); } -VKAPI_ATTR void VKAPI_CALL vkDestroyValidationCacheEXT( - VkDevice device, - VkValidationCacheEXT validationCache, - const VkAllocationCallbacks* pAllocator) +VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarker2AMD( + VkCommandBuffer commandBuffer, + VkPipelineStageFlags2 stage, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + uint32_t marker) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18478,31 +19455,29 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyValidationCacheEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, validationCache, pAllocator); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, stage, dstBuffer, dstOffset, marker); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyValidationCacheEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWriteBufferMarker2AMD); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(validationCache); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(validationCache); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeFlags64Value(stage); + encoder->EncodeVulkanHandleValue(dstBuffer); + encoder->EncodeUInt64Value(dstOffset); + encoder->EncodeUInt32Value(marker); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWriteBufferMarker2AMDHandles, dstBuffer); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyValidationCacheEXT(device, validationCache, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, validationCache, pAllocator); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWriteBufferMarker2AMD(commandBuffer, stage, dstBuffer, dstOffset, marker); - vulkan_wrappers::DestroyWrappedHandle(validationCache); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, stage, dstBuffer, dstOffset, marker); } -VKAPI_ATTR VkResult VKAPI_CALL vkMergeValidationCachesEXT( - VkDevice device, - VkValidationCacheEXT dstCache, - uint32_t srcCacheCount, - const VkValidationCacheEXT* pSrcCaches) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( + VkPhysicalDevice physicalDevice, + uint32_t* pTimeDomainCount, + VkTimeDomainKHR* pTimeDomains) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18518,32 +19493,38 @@ VKAPI_ATTR VkResult VKAPI_CALL vkMergeValidationCachesEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, dstCache, srcCacheCount, pSrcCaches); + bool omit_output_data = false; - VkResult result = vulkan_wrappers::GetDeviceTable(device)->MergeValidationCachesEXT(device, dstCache, srcCacheCount, pSrcCaches); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pTimeDomainCount, pTimeDomains); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkMergeValidationCachesEXT); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceCalibrateableTimeDomainsEXT(physicalDevice, pTimeDomainCount, pTimeDomains); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(dstCache); - encoder->EncodeUInt32Value(srcCacheCount); - encoder->EncodeVulkanHandleArray(pSrcCaches, srcCacheCount); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Ptr(pTimeDomainCount, omit_output_data); + encoder->EncodeEnumArray(pTimeDomains, (pTimeDomainCount != nullptr) ? (*pTimeDomainCount) : 0, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, dstCache, srcCacheCount, pSrcCaches); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pTimeDomainCount, pTimeDomains); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetValidationCacheDataEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsEXT( VkDevice device, - VkValidationCacheEXT validationCache, - size_t* pDataSize, - void* pData) + uint32_t timestampCount, + const VkCalibratedTimestampInfoKHR* pTimestampInfos, + uint64_t* pTimestamps, + uint64_t* pMaxDeviation) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18561,35 +19542,39 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetValidationCacheDataEXT( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, validationCache, pDataSize, pData); + CustomEncoderPreCall::Dispatch(manager, device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetValidationCacheDataEXT(device, validationCache, pDataSize, pData); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCalibratedTimestampInfoKHR* pTimestampInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pTimestampInfos, timestampCount, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetCalibratedTimestampsEXT(device, timestampCount, pTimestampInfos_unwrapped, pTimestamps, pMaxDeviation); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetValidationCacheDataEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetCalibratedTimestampsEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(validationCache); - encoder->EncodeSizeTPtr(pDataSize, omit_output_data); - encoder->EncodeVoidArray(pData, (pDataSize != nullptr) ? (*pDataSize) : 0, omit_output_data); + encoder->EncodeUInt32Value(timestampCount); + EncodeStructArray(encoder, pTimestampInfos, timestampCount); + encoder->EncodeUInt64Array(pTimestamps, timestampCount, omit_output_data); + encoder->EncodeUInt64Ptr(pMaxDeviation, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, validationCache, pDataSize, pData); + CustomEncoderPostCall::Dispatch(manager, result, device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdBindShadingRateImageNV( +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksNV( VkCommandBuffer commandBuffer, - VkImageView imageView, - VkImageLayout imageLayout) + uint32_t taskCount, + uint32_t firstTask) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18605,28 +19590,71 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindShadingRateImageNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, imageView, imageLayout); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, taskCount, firstTask); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindShadingRateImageNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawMeshTasksNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(imageView); - encoder->EncodeEnumValue(imageLayout); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindShadingRateImageNVHandles, imageView); + encoder->EncodeUInt32Value(taskCount); + encoder->EncodeUInt32Value(firstTask); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, imageView, imageLayout); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, taskCount, firstTask); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportShadingRatePaletteNV( +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectNV( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, drawCount, stride); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawMeshTasksIndirectNV); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(buffer); + encoder->EncodeUInt64Value(offset); + encoder->EncodeUInt32Value(drawCount); + encoder->EncodeUInt32Value(stride); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawMeshTasksIndirectNVHandles, buffer); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, drawCount, stride); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectCountNV( VkCommandBuffer commandBuffer, - uint32_t firstViewport, - uint32_t viewportCount, - const VkShadingRatePaletteNV* pShadingRatePalettes) + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18642,29 +19670,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportShadingRatePaletteNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstViewport, viewportCount, pShadingRatePalettes); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetViewportShadingRatePaletteNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawMeshTasksIndirectCountNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstViewport); - encoder->EncodeUInt32Value(viewportCount); - EncodeStructArray(encoder, pShadingRatePalettes, viewportCount); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(buffer); + encoder->EncodeUInt64Value(offset); + encoder->EncodeVulkanHandleValue(countBuffer); + encoder->EncodeUInt64Value(countBufferOffset); + encoder->EncodeUInt32Value(maxDrawCount); + encoder->EncodeUInt32Value(stride); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawMeshTasksIndirectCountNVHandles, buffer, countBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstViewport, viewportCount, pShadingRatePalettes); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetCoarseSampleOrderNV( +VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorEnableNV( VkCommandBuffer commandBuffer, - VkCoarseSampleOrderTypeNV sampleOrderType, - uint32_t customSampleOrderCount, - const VkCoarseSampleOrderCustomNV* pCustomSampleOrders) + uint32_t firstExclusiveScissor, + uint32_t exclusiveScissorCount, + const VkBool32* pExclusiveScissorEnables) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18680,29 +19711,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetCoarseSampleOrderNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCoarseSampleOrderNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetExclusiveScissorEnableNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(sampleOrderType); - encoder->EncodeUInt32Value(customSampleOrderCount); - EncodeStructArray(encoder, pCustomSampleOrders, customSampleOrderCount); + encoder->EncodeUInt32Value(firstExclusiveScissor); + encoder->EncodeUInt32Value(exclusiveScissorCount); + encoder->EncodeUInt32Array(pExclusiveScissorEnables, exclusiveScissorCount); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetExclusiveScissorEnableNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureNV( - VkDevice device, - const VkAccelerationStructureCreateInfoNV* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkAccelerationStructureNV* pAccelerationStructure) +VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorNV( + VkCommandBuffer commandBuffer, + uint32_t firstExclusiveScissor, + uint32_t exclusiveScissorCount, + const VkRect2D* pExclusiveScissors) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18718,45 +19749,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pAccelerationStructure); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkAccelerationStructureCreateInfoNV* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateAccelerationStructureNV(device, pCreateInfo_unwrapped, pAllocator, pAccelerationStructure); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pAccelerationStructure, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateAccelerationStructureNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetExclusiveScissorNV); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pAccelerationStructure, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pAccelerationStructure, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(firstExclusiveScissor); + encoder->EncodeUInt32Value(exclusiveScissorCount); + EncodeStructArray(encoder, pExclusiveScissors, exclusiveScissorCount); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pAccelerationStructure); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors); } -VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureNV( - VkDevice device, - VkAccelerationStructureNV accelerationStructure, - const VkAllocationCallbacks* pAllocator) +VKAPI_ATTR void VKAPI_CALL vkCmdSetCheckpointNV( + VkCommandBuffer commandBuffer, + const void* pCheckpointMarker) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18772,30 +19785,26 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, accelerationStructure, pAllocator); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCheckpointMarker); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyAccelerationStructureNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCheckpointNV); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(accelerationStructure); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(accelerationStructure); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVoidPtr(pCheckpointMarker); + manager->EndCommandApiCallCapture(commandBuffer); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyAccelerationStructureNV(device, accelerationStructure, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, accelerationStructure, pAllocator); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCheckpointNV(commandBuffer, pCheckpointMarker); - vulkan_wrappers::DestroyWrappedHandle(accelerationStructure); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCheckpointMarker); } -VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureMemoryRequirementsNV( - VkDevice device, - const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, - VkMemoryRequirements2KHR* pMemoryRequirements) +VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointDataNV( + VkQueue queue, + uint32_t* pCheckpointDataCount, + VkCheckpointDataNV* pCheckpointData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18811,30 +19820,27 @@ VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureMemoryRequirementsNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, queue, pCheckpointDataCount, pCheckpointData); - vulkan_wrappers::GetDeviceTable(device)->GetAccelerationStructureMemoryRequirementsNV(device, pInfo_unwrapped, pMemoryRequirements); + vulkan_wrappers::GetDeviceTable(queue)->GetQueueCheckpointDataNV(queue, pCheckpointDataCount, pCheckpointData); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetAccelerationStructureMemoryRequirementsNV); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetQueueCheckpointDataNV); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - EncodeStructPtr(encoder, pMemoryRequirements); + encoder->EncodeVulkanHandleValue(queue); + encoder->EncodeUInt32Ptr(pCheckpointDataCount); + EncodeStructArray(encoder, pCheckpointData, (pCheckpointDataCount != nullptr) ? (*pCheckpointDataCount) : 0); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + CustomEncoderPostCall::Dispatch(manager, queue, pCheckpointDataCount, pCheckpointData); } -VKAPI_ATTR VkResult VKAPI_CALL vkBindAccelerationStructureMemoryNV( - VkDevice device, - uint32_t bindInfoCount, - const VkBindAccelerationStructureMemoryInfoNV* pBindInfos) +VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointData2NV( + VkQueue queue, + uint32_t* pCheckpointDataCount, + VkCheckpointData2NV* pCheckpointData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18850,39 +19856,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkBindAccelerationStructureMemoryNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, bindInfoCount, pBindInfos); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBindAccelerationStructureMemoryInfoNV* pBindInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBindInfos, bindInfoCount, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, queue, pCheckpointDataCount, pCheckpointData); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindAccelerationStructureMemoryNV(device, bindInfoCount, pBindInfos_unwrapped); + vulkan_wrappers::GetDeviceTable(queue)->GetQueueCheckpointData2NV(queue, pCheckpointDataCount, pCheckpointData); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindAccelerationStructureMemoryNV); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetQueueCheckpointData2NV); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeUInt32Value(bindInfoCount); - EncodeStructArray(encoder, pBindInfos, bindInfoCount); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(queue); + encoder->EncodeUInt32Ptr(pCheckpointDataCount); + EncodeStructArray(encoder, pCheckpointData, (pCheckpointDataCount != nullptr) ? (*pCheckpointDataCount) : 0); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, bindInfoCount, pBindInfos); - - return result; + CustomEncoderPostCall::Dispatch(manager, queue, pCheckpointDataCount, pCheckpointData); } -VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructureNV( - VkCommandBuffer commandBuffer, - const VkAccelerationStructureInfoNV* pInfo, - VkBuffer instanceData, - VkDeviceSize instanceOffset, - VkBool32 update, - VkAccelerationStructureNV dst, - VkAccelerationStructureNV src, - VkBuffer scratch, - VkDeviceSize scratchOffset) +VKAPI_ATTR VkResult VKAPI_CALL vkSetSwapchainPresentTimingQueueSizeEXT( + VkDevice device, + VkSwapchainKHR swapchain, + uint32_t size) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18898,37 +19892,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructureNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset); + CustomEncoderPreCall::Dispatch(manager, device, swapchain, size); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBuildAccelerationStructureNV); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->SetSwapchainPresentTimingQueueSizeEXT(device, swapchain, size); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetSwapchainPresentTimingQueueSizeEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeVulkanHandleValue(instanceData); - encoder->EncodeUInt64Value(instanceOffset); - encoder->EncodeUInt32Value(update); - encoder->EncodeVulkanHandleValue(dst); - encoder->EncodeVulkanHandleValue(src); - encoder->EncodeVulkanHandleValue(scratch); - encoder->EncodeUInt64Value(scratchOffset); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBuildAccelerationStructureNVHandles, pInfo, instanceData, dst, src, scratch); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(swapchain); + encoder->EncodeUInt32Value(size); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkAccelerationStructureInfoNV* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBuildAccelerationStructureNV(commandBuffer, pInfo_unwrapped, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, size); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureNV( - VkCommandBuffer commandBuffer, - VkAccelerationStructureNV dst, - VkAccelerationStructureNV src, - VkCopyAccelerationStructureModeKHR mode) +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainTimingPropertiesEXT( + VkDevice device, + VkSwapchainKHR swapchain, + VkSwapchainTimingPropertiesEXT* pSwapchainTimingProperties, + uint64_t* pSwapchainTimingPropertiesCounter) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18944,40 +19932,38 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, dst, src, mode); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyAccelerationStructureNV); - if (encoder) + CustomEncoderPreCall::Dispatch(manager, device, swapchain, pSwapchainTimingProperties, pSwapchainTimingPropertiesCounter); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSwapchainTimingPropertiesEXT(device, swapchain, pSwapchainTimingProperties, pSwapchainTimingPropertiesCounter); + if (result < 0) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(dst); - encoder->EncodeVulkanHandleValue(src); - encoder->EncodeEnumValue(mode); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyAccelerationStructureNVHandles, dst, src); + omit_output_data = true; } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, dst, src, mode); - -} + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSwapchainTimingPropertiesEXT); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(swapchain); + EncodeStructPtr(encoder, pSwapchainTimingProperties, omit_output_data); + encoder->EncodeUInt64Ptr(pSwapchainTimingPropertiesCounter, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); + } -VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysNV( - VkCommandBuffer commandBuffer, - VkBuffer raygenShaderBindingTableBuffer, - VkDeviceSize raygenShaderBindingOffset, - VkBuffer missShaderBindingTableBuffer, - VkDeviceSize missShaderBindingOffset, - VkDeviceSize missShaderBindingStride, - VkBuffer hitShaderBindingTableBuffer, - VkDeviceSize hitShaderBindingOffset, - VkDeviceSize hitShaderBindingStride, - VkBuffer callableShaderBindingTableBuffer, - VkDeviceSize callableShaderBindingOffset, - VkDeviceSize callableShaderBindingStride, - uint32_t width, - uint32_t height, - uint32_t depth) + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, pSwapchainTimingProperties, pSwapchainTimingPropertiesCounter); + + return result; + +} + +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainTimeDomainPropertiesEXT( + VkDevice device, + VkSwapchainKHR swapchain, + VkSwapchainTimeDomainPropertiesEXT* pSwapchainTimeDomainProperties, + uint64_t* pTimeDomainsCounter) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -18993,42 +19979,37 @@ VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdTraceRaysNV); + CustomEncoderPreCall::Dispatch(manager, device, swapchain, pSwapchainTimeDomainProperties, pTimeDomainsCounter); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSwapchainTimeDomainPropertiesEXT(device, swapchain, pSwapchainTimeDomainProperties, pTimeDomainsCounter); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSwapchainTimeDomainPropertiesEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(raygenShaderBindingTableBuffer); - encoder->EncodeUInt64Value(raygenShaderBindingOffset); - encoder->EncodeVulkanHandleValue(missShaderBindingTableBuffer); - encoder->EncodeUInt64Value(missShaderBindingOffset); - encoder->EncodeUInt64Value(missShaderBindingStride); - encoder->EncodeVulkanHandleValue(hitShaderBindingTableBuffer); - encoder->EncodeUInt64Value(hitShaderBindingOffset); - encoder->EncodeUInt64Value(hitShaderBindingStride); - encoder->EncodeVulkanHandleValue(callableShaderBindingTableBuffer); - encoder->EncodeUInt64Value(callableShaderBindingOffset); - encoder->EncodeUInt64Value(callableShaderBindingStride); - encoder->EncodeUInt32Value(width); - encoder->EncodeUInt32Value(height); - encoder->EncodeUInt32Value(depth); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdTraceRaysNVHandles, raygenShaderBindingTableBuffer, missShaderBindingTableBuffer, hitShaderBindingTableBuffer, callableShaderBindingTableBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(swapchain); + EncodeStructPtr(encoder, pSwapchainTimeDomainProperties, omit_output_data); + encoder->EncodeUInt64Ptr(pTimeDomainsCounter, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, pSwapchainTimeDomainProperties, pTimeDomainsCounter); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesKHR( +VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingEXT( VkDevice device, - VkPipeline pipeline, - uint32_t firstGroup, - uint32_t groupCount, - size_t dataSize, - void* pData) + const VkPastPresentationTimingInfoEXT* pPastPresentationTimingInfo, + VkPastPresentationTimingPropertiesEXT* pPastPresentationTimingProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19046,40 +20027,36 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesKHR( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pipeline, firstGroup, groupCount, dataSize, pData); + CustomEncoderPreCall::Dispatch(manager, device, pPastPresentationTimingInfo, pPastPresentationTimingProperties); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetRayTracingShaderGroupHandlesKHR(device, pipeline, firstGroup, groupCount, dataSize, pData); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkPastPresentationTimingInfoEXT* pPastPresentationTimingInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPastPresentationTimingInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPastPresentationTimingEXT(device, pPastPresentationTimingInfo_unwrapped, pPastPresentationTimingProperties); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetRayTracingShaderGroupHandlesKHR); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPastPresentationTimingEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(pipeline); - encoder->EncodeUInt32Value(firstGroup); - encoder->EncodeUInt32Value(groupCount); - encoder->EncodeSizeTValue(dataSize); - encoder->EncodeVoidArray(pData, dataSize, omit_output_data); + EncodeStructPtr(encoder, pPastPresentationTimingInfo); + EncodeStructPtr(encoder, pPastPresentationTimingProperties, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pipeline, firstGroup, groupCount, dataSize, pData); + CustomEncoderPostCall::Dispatch(manager, result, device, pPastPresentationTimingInfo, pPastPresentationTimingProperties); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesNV( +VKAPI_ATTR VkResult VKAPI_CALL vkInitializePerformanceApiINTEL( VkDevice device, - VkPipeline pipeline, - uint32_t firstGroup, - uint32_t groupCount, - size_t dataSize, - void* pData) + const VkInitializePerformanceApiInfoINTEL* pInitializeInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19095,40 +20072,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pipeline, firstGroup, groupCount, dataSize, pData); + CustomEncoderPreCall::Dispatch(manager, device, pInitializeInfo); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetRayTracingShaderGroupHandlesNV(device, pipeline, firstGroup, groupCount, dataSize, pData); - if (result < 0) - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->InitializePerformanceApiINTEL(device, pInitializeInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetRayTracingShaderGroupHandlesNV); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkInitializePerformanceApiINTEL); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(pipeline); - encoder->EncodeUInt32Value(firstGroup); - encoder->EncodeUInt32Value(groupCount); - encoder->EncodeSizeTValue(dataSize); - encoder->EncodeVoidArray(pData, dataSize, omit_output_data); + EncodeStructPtr(encoder, pInitializeInfo); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pipeline, firstGroup, groupCount, dataSize, pData); + CustomEncoderPostCall::Dispatch(manager, result, device, pInitializeInfo); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetAccelerationStructureHandleNV( - VkDevice device, - VkAccelerationStructureNV accelerationStructure, - size_t dataSize, - void* pData) +VKAPI_ATTR void VKAPI_CALL vkUninitializePerformanceApiINTEL( + VkDevice device) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19144,40 +20108,61 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetAccelerationStructureHandleNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; + CustomEncoderPreCall::Dispatch(manager, device); - CustomEncoderPreCall::Dispatch(manager, device, accelerationStructure, dataSize, pData); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkUninitializePerformanceApiINTEL); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + manager->EndApiCallCapture(); + } - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetAccelerationStructureHandleNV(device, accelerationStructure, dataSize, pData); - if (result < 0) + vulkan_wrappers::GetDeviceTable(device)->UninitializePerformanceApiINTEL(device); + + CustomEncoderPostCall::Dispatch(manager, device); + +} + +VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceMarkerINTEL( + VkCommandBuffer commandBuffer, + const VkPerformanceMarkerInfoINTEL* pMarkerInfo) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) { - omit_output_data = true; + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetAccelerationStructureHandleNV); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pMarkerInfo); + + VkResult result = vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPerformanceMarkerINTEL(commandBuffer, pMarkerInfo); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPerformanceMarkerINTEL); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(accelerationStructure); - encoder->EncodeSizeTValue(dataSize); - encoder->EncodeVoidArray(pData, dataSize, omit_output_data); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pMarkerInfo); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, accelerationStructure, dataSize, pData); + CustomEncoderPostCall::Dispatch(manager, result, commandBuffer, pMarkerInfo); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdWriteAccelerationStructuresPropertiesNV( +VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceStreamMarkerINTEL( VkCommandBuffer commandBuffer, - uint32_t accelerationStructureCount, - const VkAccelerationStructureNV* pAccelerationStructures, - VkQueryType queryType, - VkQueryPool queryPool, - uint32_t firstQuery) + const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19193,30 +20178,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdWriteAccelerationStructuresPropertiesNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pMarkerInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWriteAccelerationStructuresPropertiesNV); + VkResult result = vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPerformanceStreamMarkerINTEL(commandBuffer, pMarkerInfo); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPerformanceStreamMarkerINTEL); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(accelerationStructureCount); - encoder->EncodeVulkanHandleArray(pAccelerationStructures, accelerationStructureCount); - encoder->EncodeEnumValue(queryType); - encoder->EncodeVulkanHandleValue(queryPool); - encoder->EncodeUInt32Value(firstQuery); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWriteAccelerationStructuresPropertiesNVHandles, accelerationStructureCount, pAccelerationStructures, queryPool); + EncodeStructPtr(encoder, pMarkerInfo); + encoder->EncodeEnumValue(result); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); + CustomEncoderPostCall::Dispatch(manager, result, commandBuffer, pMarkerInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCompileDeferredNV( - VkDevice device, - VkPipeline pipeline, - uint32_t shader) +VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceOverrideINTEL( + VkCommandBuffer commandBuffer, + const VkPerformanceOverrideInfoINTEL* pOverrideInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19232,31 +20215,29 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCompileDeferredNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pipeline, shader); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pOverrideInfo); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CompileDeferredNV(device, pipeline, shader); + VkResult result = vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPerformanceOverrideINTEL(commandBuffer, pOverrideInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCompileDeferredNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPerformanceOverrideINTEL); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(pipeline); - encoder->EncodeUInt32Value(shader); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pOverrideInfo); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pipeline, shader); + CustomEncoderPostCall::Dispatch(manager, result, commandBuffer, pOverrideInfo); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostPointerPropertiesEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkAcquirePerformanceConfigurationINTEL( VkDevice device, - VkExternalMemoryHandleTypeFlagBits handleType, - const void* pHostPointer, - VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties) + const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo, + VkPerformanceConfigurationINTEL* pConfiguration) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19274,37 +20255,38 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostPointerPropertiesEXT( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, handleType, pHostPointer, pMemoryHostPointerProperties); + CustomEncoderPreCall::Dispatch(manager, device, pAcquireInfo, pConfiguration); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties); - if (result < 0) + VkResult result = vulkan_wrappers::GetDeviceTable(device)->AcquirePerformanceConfigurationINTEL(device, pAcquireInfo, pConfiguration); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pConfiguration, VulkanCaptureManager::GetUniqueId); + } + else { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryHostPointerPropertiesEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkAcquirePerformanceConfigurationINTEL); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeEnumValue(handleType); - encoder->EncodeVoidPtr(pHostPointer); - EncodeStructPtr(encoder, pMemoryHostPointerProperties, omit_output_data); + EncodeStructPtr(encoder, pAcquireInfo); + encoder->EncodeVulkanHandlePtr(pConfiguration, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCreateApiCallCapture(result, device, pConfiguration, nullptr); } - CustomEncoderPostCall::Dispatch(manager, result, device, handleType, pHostPointer, pMemoryHostPointerProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, pAcquireInfo, pConfiguration); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarkerAMD( - VkCommandBuffer commandBuffer, - VkPipelineStageFlagBits pipelineStage, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - uint32_t marker) +VKAPI_ATTR VkResult VKAPI_CALL vkReleasePerformanceConfigurationINTEL( + VkDevice device, + VkPerformanceConfigurationINTEL configuration) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19320,31 +20302,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarkerAMD( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineStage, dstBuffer, dstOffset, marker); + CustomEncoderPreCall::Dispatch(manager, device, configuration); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWriteBufferMarkerAMD); + ScopedDestroyLock exclusive_scoped_lock; + VkResult result = vulkan_wrappers::GetDeviceTable(device)->ReleasePerformanceConfigurationINTEL(device, configuration); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkReleasePerformanceConfigurationINTEL); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(pipelineStage); - encoder->EncodeVulkanHandleValue(dstBuffer); - encoder->EncodeUInt64Value(dstOffset); - encoder->EncodeUInt32Value(marker); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWriteBufferMarkerAMDHandles, dstBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(configuration); + encoder->EncodeEnumValue(result); + manager->EndDestroyApiCallCapture(configuration); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker); + CustomEncoderPostCall::Dispatch(manager, result, device, configuration); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineStage, dstBuffer, dstOffset, marker); + vulkan_wrappers::DestroyWrappedHandle(configuration); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarker2AMD( - VkCommandBuffer commandBuffer, - VkPipelineStageFlags2 stage, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - uint32_t marker) +VKAPI_ATTR VkResult VKAPI_CALL vkQueueSetPerformanceConfigurationINTEL( + VkQueue queue, + VkPerformanceConfigurationINTEL configuration) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19360,29 +20342,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarker2AMD( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, stage, dstBuffer, dstOffset, marker); + CustomEncoderPreCall::Dispatch(manager, queue, configuration); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWriteBufferMarker2AMD); + VkResult result = vulkan_wrappers::GetDeviceTable(queue)->QueueSetPerformanceConfigurationINTEL(queue, configuration); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueueSetPerformanceConfigurationINTEL); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeFlags64Value(stage); - encoder->EncodeVulkanHandleValue(dstBuffer); - encoder->EncodeUInt64Value(dstOffset); - encoder->EncodeUInt32Value(marker); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWriteBufferMarker2AMDHandles, dstBuffer); + encoder->EncodeVulkanHandleValue(queue); + encoder->EncodeVulkanHandleValue(configuration); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWriteBufferMarker2AMD(commandBuffer, stage, dstBuffer, dstOffset, marker); + CustomEncoderPostCall::Dispatch(manager, result, queue, configuration); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, stage, dstBuffer, dstOffset, marker); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( - VkPhysicalDevice physicalDevice, - uint32_t* pTimeDomainCount, - VkTimeDomainKHR* pTimeDomains) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPerformanceParameterINTEL( + VkDevice device, + VkPerformanceParameterTypeINTEL parameter, + VkPerformanceValueINTEL* pValue) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19400,36 +20382,34 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pTimeDomainCount, pTimeDomains); + CustomEncoderPreCall::Dispatch(manager, device, parameter, pValue); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceCalibrateableTimeDomainsEXT(physicalDevice, pTimeDomainCount, pTimeDomains); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPerformanceParameterINTEL(device, parameter, pValue); if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPerformanceParameterINTEL); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pTimeDomainCount, omit_output_data); - encoder->EncodeEnumArray(pTimeDomains, (pTimeDomainCount != nullptr) ? (*pTimeDomainCount) : 0, omit_output_data); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeEnumValue(parameter); + EncodeStructPtr(encoder, pValue, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pTimeDomainCount, pTimeDomains); + CustomEncoderPostCall::Dispatch(manager, result, device, parameter, pValue); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsEXT( +VKAPI_ATTR void VKAPI_CALL vkSetLocalDimmingAMD( VkDevice device, - uint32_t timestampCount, - const VkCalibratedTimestampInfoKHR* pTimestampInfos, - uint64_t* pTimestamps, - uint64_t* pMaxDeviation) + VkSwapchainKHR swapChain, + VkBool32 localDimmingEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19445,38 +20425,28 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetCalibratedTimestampsEXT(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, device, swapChain, localDimmingEnable); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetCalibratedTimestampsEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetLocalDimmingAMD); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeUInt32Value(timestampCount); - EncodeStructArray(encoder, pTimestampInfos, timestampCount); - encoder->EncodeUInt64Array(pTimestamps, timestampCount, omit_output_data); - encoder->EncodeUInt64Ptr(pMaxDeviation, omit_output_data); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(swapChain); + encoder->EncodeUInt32Value(localDimmingEnable); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation); + vulkan_wrappers::GetDeviceTable(device)->SetLocalDimmingAMD(device, swapChain, localDimmingEnable); - return result; + CustomEncoderPostCall::Dispatch(manager, device, swapChain, localDimmingEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksNV( - VkCommandBuffer commandBuffer, - uint32_t taskCount, - uint32_t firstTask) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA( + VkInstance instance, + const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19492,29 +20462,43 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, taskCount, firstTask); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawMeshTasksNV); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); + + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateImagePipeSurfaceFUCHSIA(instance, pCreateInfo, pAllocator, pSurface); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateImagePipeSurfaceFUCHSIA); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(taskCount); - encoder->EncodeUInt32Value(firstTask); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(instance); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, taskCount, firstTask); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectNV( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT( + VkInstance instance, + const VkMetalSurfaceCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19530,33 +20514,41 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, drawCount, stride); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawMeshTasksIndirectNV); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); + + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateMetalSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateMetalSurfaceEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(buffer); - encoder->EncodeUInt64Value(offset); - encoder->EncodeUInt32Value(drawCount); - encoder->EncodeUInt32Value(stride); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawMeshTasksIndirectNVHandles, buffer); + encoder->EncodeVulkanHandleValue(instance); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, drawCount, stride); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectCountNV( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) +VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressEXT( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19572,32 +20564,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectCountNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + CustomEncoderPreCall::Dispatch(manager, device, pInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawMeshTasksIndirectCountNV); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkBufferDeviceAddressInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + VkDeviceAddress result = vulkan_wrappers::GetDeviceTable(device)->GetBufferDeviceAddressEXT(device, pInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetBufferDeviceAddressEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(buffer); - encoder->EncodeUInt64Value(offset); - encoder->EncodeVulkanHandleValue(countBuffer); - encoder->EncodeUInt64Value(countBufferOffset); - encoder->EncodeUInt32Value(maxDrawCount); - encoder->EncodeUInt32Value(stride); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawMeshTasksIndirectCountNVHandles, buffer, countBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeUInt64Value(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorEnableNV( - VkCommandBuffer commandBuffer, - uint32_t firstExclusiveScissor, - uint32_t exclusiveScissorCount, - const VkBool32* pExclusiveScissorEnables) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolPropertiesEXT( + VkPhysicalDevice physicalDevice, + uint32_t* pToolCount, + VkPhysicalDeviceToolProperties* pToolProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19613,29 +20605,36 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorEnableNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetExclusiveScissorEnableNV); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pToolCount, pToolProperties); + + VkResult result = manager->OverrideGetPhysicalDeviceToolPropertiesEXT(physicalDevice, pToolCount, pToolProperties); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceToolPropertiesEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstExclusiveScissor); - encoder->EncodeUInt32Value(exclusiveScissorCount); - encoder->EncodeUInt32Array(pExclusiveScissorEnables, exclusiveScissorCount); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Ptr(pToolCount, omit_output_data); + EncodeStructArray(encoder, pToolProperties, (pToolCount != nullptr) ? (*pToolCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetExclusiveScissorEnableNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pToolCount, pToolProperties); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorNV( - VkCommandBuffer commandBuffer, - uint32_t firstExclusiveScissor, - uint32_t exclusiveScissorCount, - const VkRect2D* pExclusiveScissors) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixPropertiesNV* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19651,27 +20650,36 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetExclusiveScissorNV); - if (encoder) + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPropertyCount, pProperties); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceCooperativeMatrixPropertiesNV(physicalDevice, pPropertyCount, pProperties); + if (result < 0) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstExclusiveScissor); - encoder->EncodeUInt32Value(exclusiveScissorCount); - EncodeStructArray(encoder, pExclusiveScissors, exclusiveScissorCount); - manager->EndCommandApiCallCapture(commandBuffer); + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV); + if (encoder) + { + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); + EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pPropertyCount, pProperties); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetCheckpointNV( - VkCommandBuffer commandBuffer, - const void* pCheckpointMarker) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( + VkPhysicalDevice physicalDevice, + uint32_t* pCombinationCount, + VkFramebufferMixedSamplesCombinationNV* pCombinations) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19687,26 +20695,37 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetCheckpointNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pCheckpointMarker); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCheckpointNV); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pCombinationCount, pCombinations); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(physicalDevice, pCombinationCount, pCombinations); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVoidPtr(pCheckpointMarker); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Ptr(pCombinationCount, omit_output_data); + EncodeStructArray(encoder, pCombinations, (pCombinationCount != nullptr) ? (*pCombinationCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCheckpointNV(commandBuffer, pCheckpointMarker); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pCombinationCount, pCombinations); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pCheckpointMarker); + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointDataNV( - VkQueue queue, - uint32_t* pCheckpointDataCount, - VkCheckpointDataNV* pCheckpointData) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModes2EXT( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19722,27 +20741,39 @@ VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointDataNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, queue, pCheckpointDataCount, pCheckpointData); + bool omit_output_data = false; - vulkan_wrappers::GetDeviceTable(queue)->GetQueueCheckpointDataNV(queue, pCheckpointDataCount, pCheckpointData); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetQueueCheckpointDataNV); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSurfaceInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfacePresentModes2EXT(physicalDevice, pSurfaceInfo_unwrapped, pPresentModeCount, pPresentModes); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfacePresentModes2EXT); if (encoder) { - encoder->EncodeVulkanHandleValue(queue); - encoder->EncodeUInt32Ptr(pCheckpointDataCount); - EncodeStructArray(encoder, pCheckpointData, (pCheckpointDataCount != nullptr) ? (*pCheckpointDataCount) : 0); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pSurfaceInfo); + encoder->EncodeUInt32Ptr(pPresentModeCount, omit_output_data); + encoder->EncodeEnumArray(pPresentModes, (pPresentModeCount != nullptr) ? (*pPresentModeCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, queue, pCheckpointDataCount, pCheckpointData); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointData2NV( - VkQueue queue, - uint32_t* pCheckpointDataCount, - VkCheckpointData2NV* pCheckpointData) +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireFullScreenExclusiveModeEXT( + VkDevice device, + VkSwapchainKHR swapchain) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19758,26 +20789,28 @@ VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointData2NV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, queue, pCheckpointDataCount, pCheckpointData); + CustomEncoderPreCall::Dispatch(manager, device, swapchain); - vulkan_wrappers::GetDeviceTable(queue)->GetQueueCheckpointData2NV(queue, pCheckpointDataCount, pCheckpointData); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->AcquireFullScreenExclusiveModeEXT(device, swapchain); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetQueueCheckpointData2NV); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAcquireFullScreenExclusiveModeEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(queue); - encoder->EncodeUInt32Ptr(pCheckpointDataCount); - EncodeStructArray(encoder, pCheckpointData, (pCheckpointDataCount != nullptr) ? (*pCheckpointDataCount) : 0); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(swapchain); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, queue, pCheckpointDataCount, pCheckpointData); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain); + + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkInitializePerformanceApiINTEL( +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseFullScreenExclusiveModeEXT( VkDevice device, - const VkInitializePerformanceApiInfoINTEL* pInitializeInfo) + VkSwapchainKHR swapchain) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19793,27 +20826,29 @@ VKAPI_ATTR VkResult VKAPI_CALL vkInitializePerformanceApiINTEL( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInitializeInfo); + CustomEncoderPreCall::Dispatch(manager, device, swapchain); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->InitializePerformanceApiINTEL(device, pInitializeInfo); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->ReleaseFullScreenExclusiveModeEXT(device, swapchain); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkInitializePerformanceApiINTEL); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkReleaseFullScreenExclusiveModeEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInitializeInfo); + encoder->EncodeVulkanHandleValue(swapchain); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInitializeInfo); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain); return result; } -VKAPI_ATTR void VKAPI_CALL vkUninitializePerformanceApiINTEL( - VkDevice device) +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModes2EXT( + VkDevice device, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkDeviceGroupPresentModeFlagsKHR* pModes) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19829,24 +20864,40 @@ VKAPI_ATTR void VKAPI_CALL vkUninitializePerformanceApiINTEL( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device); + bool omit_output_data = false; - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkUninitializePerformanceApiINTEL); + CustomEncoderPreCall::Dispatch(manager, device, pSurfaceInfo, pModes); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSurfaceInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo_unwrapped, pModes); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceGroupSurfacePresentModes2EXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pSurfaceInfo); + encoder->EncodeFlagsPtr(pModes, omit_output_data); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(device)->UninitializePerformanceApiINTEL(device); + CustomEncoderPostCall::Dispatch(manager, result, device, pSurfaceInfo, pModes); - CustomEncoderPostCall::Dispatch(manager, device); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceMarkerINTEL( - VkCommandBuffer commandBuffer, - const VkPerformanceMarkerInfoINTEL* pMarkerInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT( + VkInstance instance, + const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19862,28 +20913,42 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceMarkerINTEL( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pMarkerInfo); + bool omit_output_data = false; - VkResult result = vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPerformanceMarkerINTEL(commandBuffer, pMarkerInfo); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPerformanceMarkerINTEL); + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateHeadlessSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateHeadlessSurfaceEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pMarkerInfo); + encoder->EncodeVulkanHandleValue(instance); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCommandApiCallCapture(commandBuffer); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, commandBuffer, pMarkerInfo); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceStreamMarkerINTEL( +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEXT( VkCommandBuffer commandBuffer, - const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo) + uint32_t lineStippleFactor, + uint16_t lineStipplePattern) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19899,28 +20964,28 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceStreamMarkerINTEL( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pMarkerInfo); - - VkResult result = vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPerformanceStreamMarkerINTEL(commandBuffer, pMarkerInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, lineStippleFactor, lineStipplePattern); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPerformanceStreamMarkerINTEL); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetLineStippleEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pMarkerInfo); - encoder->EncodeEnumValue(result); + encoder->EncodeUInt32Value(lineStippleFactor); + encoder->EncodeUInt16Value(lineStipplePattern); manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, commandBuffer, pMarkerInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetLineStippleEXT(commandBuffer, lineStippleFactor, lineStipplePattern); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, lineStippleFactor, lineStipplePattern); } -VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceOverrideINTEL( - VkCommandBuffer commandBuffer, - const VkPerformanceOverrideInfoINTEL* pOverrideInfo) +VKAPI_ATTR void VKAPI_CALL vkResetQueryPoolEXT( + VkDevice device, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19936,29 +21001,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceOverrideINTEL( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pOverrideInfo); - - VkResult result = vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPerformanceOverrideINTEL(commandBuffer, pOverrideInfo); + CustomEncoderPreCall::Dispatch(manager, device, queryPool, firstQuery, queryCount); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPerformanceOverrideINTEL); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkResetQueryPoolEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pOverrideInfo); - encoder->EncodeEnumValue(result); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeUInt32Value(firstQuery); + encoder->EncodeUInt32Value(queryCount); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, commandBuffer, pOverrideInfo); + vulkan_wrappers::GetDeviceTable(device)->ResetQueryPoolEXT(device, queryPool, firstQuery, queryCount); - return result; + CustomEncoderPostCall::Dispatch(manager, device, queryPool, firstQuery, queryCount); } -VKAPI_ATTR VkResult VKAPI_CALL vkAcquirePerformanceConfigurationINTEL( - VkDevice device, - const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo, - VkPerformanceConfigurationINTEL* pConfiguration) +VKAPI_ATTR void VKAPI_CALL vkCmdSetCullModeEXT( + VkCommandBuffer commandBuffer, + VkCullModeFlags cullMode) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -19974,40 +21037,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkAcquirePerformanceConfigurationINTEL( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pAcquireInfo, pConfiguration); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->AcquirePerformanceConfigurationINTEL(device, pAcquireInfo, pConfiguration); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pConfiguration, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, cullMode); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkAcquirePerformanceConfigurationINTEL); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCullModeEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pAcquireInfo); - encoder->EncodeVulkanHandlePtr(pConfiguration, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pConfiguration, nullptr); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeFlagsValue(cullMode); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pAcquireInfo, pConfiguration); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCullModeEXT(commandBuffer, cullMode); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, cullMode); } -VKAPI_ATTR VkResult VKAPI_CALL vkReleasePerformanceConfigurationINTEL( - VkDevice device, - VkPerformanceConfigurationINTEL configuration) +VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFaceEXT( + VkCommandBuffer commandBuffer, + VkFrontFace frontFace) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20023,31 +21071,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkReleasePerformanceConfigurationINTEL( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, configuration); - - ScopedDestroyLock exclusive_scoped_lock; - VkResult result = vulkan_wrappers::GetDeviceTable(device)->ReleasePerformanceConfigurationINTEL(device, configuration); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, frontFace); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkReleasePerformanceConfigurationINTEL); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetFrontFaceEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(configuration); - encoder->EncodeEnumValue(result); - manager->EndDestroyApiCallCapture(configuration); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(frontFace); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, configuration); - - vulkan_wrappers::DestroyWrappedHandle(configuration); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetFrontFaceEXT(commandBuffer, frontFace); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, frontFace); } -VKAPI_ATTR VkResult VKAPI_CALL vkQueueSetPerformanceConfigurationINTEL( - VkQueue queue, - VkPerformanceConfigurationINTEL configuration) +VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopologyEXT( + VkCommandBuffer commandBuffer, + VkPrimitiveTopology primitiveTopology) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20063,29 +21105,26 @@ VKAPI_ATTR VkResult VKAPI_CALL vkQueueSetPerformanceConfigurationINTEL( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, queue, configuration); - - VkResult result = vulkan_wrappers::GetDeviceTable(queue)->QueueSetPerformanceConfigurationINTEL(queue, configuration); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, primitiveTopology); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueueSetPerformanceConfigurationINTEL); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPrimitiveTopologyEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(queue); - encoder->EncodeVulkanHandleValue(configuration); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(primitiveTopology); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, queue, configuration); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPrimitiveTopologyEXT(commandBuffer, primitiveTopology); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, primitiveTopology); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPerformanceParameterINTEL( - VkDevice device, - VkPerformanceParameterTypeINTEL parameter, - VkPerformanceValueINTEL* pValue) +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCountEXT( + VkCommandBuffer commandBuffer, + uint32_t viewportCount, + const VkViewport* pViewports) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20101,36 +21140,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPerformanceParameterINTEL( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, parameter, pValue); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetPerformanceParameterINTEL(device, parameter, pValue); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, viewportCount, pViewports); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPerformanceParameterINTEL); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetViewportWithCountEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeEnumValue(parameter); - EncodeStructPtr(encoder, pValue, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(viewportCount); + EncodeStructArray(encoder, pViewports, viewportCount); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, parameter, pValue); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetViewportWithCountEXT(commandBuffer, viewportCount, pViewports); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, viewportCount, pViewports); } -VKAPI_ATTR void VKAPI_CALL vkSetLocalDimmingAMD( - VkDevice device, - VkSwapchainKHR swapChain, - VkBool32 localDimmingEnable) +VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCountEXT( + VkCommandBuffer commandBuffer, + uint32_t scissorCount, + const VkRect2D* pScissors) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20146,28 +21176,31 @@ VKAPI_ATTR void VKAPI_CALL vkSetLocalDimmingAMD( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, swapChain, localDimmingEnable); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, scissorCount, pScissors); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetLocalDimmingAMD); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetScissorWithCountEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapChain); - encoder->EncodeUInt32Value(localDimmingEnable); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(scissorCount); + EncodeStructArray(encoder, pScissors, scissorCount); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(device)->SetLocalDimmingAMD(device, swapChain, localDimmingEnable); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetScissorWithCountEXT(commandBuffer, scissorCount, pScissors); - CustomEncoderPostCall::Dispatch(manager, device, swapChain, localDimmingEnable); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, scissorCount, pScissors); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA( - VkInstance instance, - const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2EXT( + VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer* pBuffers, + const VkDeviceSize* pOffsets, + const VkDeviceSize* pSizes, + const VkDeviceSize* pStrides) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20183,43 +21216,30 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateImagePipeSurfaceFUCHSIA(instance, pCreateInfo, pAllocator, pSurface); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateImagePipeSurfaceFUCHSIA); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindVertexBuffers2EXT); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(firstBinding); + encoder->EncodeUInt32Value(bindingCount); + encoder->EncodeVulkanHandleArray(pBuffers, bindingCount); + encoder->EncodeUInt64Array(pOffsets, bindingCount); + encoder->EncodeUInt64Array(pSizes, bindingCount); + encoder->EncodeUInt64Array(pStrides, bindingCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindVertexBuffers2EXTHandles, bindingCount, pBuffers); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindVertexBuffers2EXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT( - VkInstance instance, - const VkMetalSurfaceCreateInfoEXT* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthTestEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20235,41 +21255,59 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; + CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthTestEnable); - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthTestEnableEXT); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(depthTestEnable); + manager->EndCommandApiCallCapture(commandBuffer); + } - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateMetalSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthTestEnableEXT(commandBuffer, depthTestEnable); - if (result >= 0) + CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthTestEnable); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthWriteEnable) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); } else { - omit_output_data = true; + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateMetalSurfaceEXT); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthWriteEnable); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthWriteEnableEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(depthWriteEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthWriteEnableEXT(commandBuffer, depthWriteEnable); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthWriteEnable); } -VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressEXT( - VkDevice device, - const VkBufferDeviceAddressInfo* pInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOpEXT( + VkCommandBuffer commandBuffer, + VkCompareOp depthCompareOp) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20285,32 +21323,25 @@ VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkBufferDeviceAddressInfo* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - VkDeviceAddress result = vulkan_wrappers::GetDeviceTable(device)->GetBufferDeviceAddressEXT(device, pInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthCompareOp); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetBufferDeviceAddressEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthCompareOpEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeUInt64Value(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(depthCompareOp); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthCompareOpEXT(commandBuffer, depthCompareOp); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthCompareOp); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolPropertiesEXT( - VkPhysicalDevice physicalDevice, - uint32_t* pToolCount, - VkPhysicalDeviceToolProperties* pToolProperties) +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthBoundsTestEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20326,36 +21357,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolPropertiesEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pToolCount, pToolProperties); - - VkResult result = manager->OverrideGetPhysicalDeviceToolPropertiesEXT(physicalDevice, pToolCount, pToolProperties); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthBoundsTestEnable); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceToolPropertiesEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthBoundsTestEnableEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pToolCount, omit_output_data); - EncodeStructArray(encoder, pToolProperties, (pToolCount != nullptr) ? (*pToolCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(depthBoundsTestEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pToolCount, pToolProperties); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthBoundsTestEnableEXT(commandBuffer, depthBoundsTestEnable); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthBoundsTestEnable); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( - VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkCooperativeMatrixPropertiesNV* pProperties) +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 stencilTestEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20371,36 +21391,29 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPropertyCount, pProperties); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceCooperativeMatrixPropertiesNV(physicalDevice, pPropertyCount, pProperties); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, stencilTestEnable); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetStencilTestEnableEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); - EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(stencilTestEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pPropertyCount, pProperties); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetStencilTestEnableEXT(commandBuffer, stencilTestEnable); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, stencilTestEnable); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( - VkPhysicalDevice physicalDevice, - uint32_t* pCombinationCount, - VkFramebufferMixedSamplesCombinationNV* pCombinations) +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOpEXT( + VkCommandBuffer commandBuffer, + VkStencilFaceFlags faceMask, + VkStencilOp failOp, + VkStencilOp passOp, + VkStencilOp depthFailOp, + VkCompareOp compareOp) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20416,37 +21429,29 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSupportedFramebufferMixedSampl shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pCombinationCount, pCombinations); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(physicalDevice, pCombinationCount, pCombinations); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetStencilOpEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pCombinationCount, omit_output_data); - EncodeStructArray(encoder, pCombinations, (pCombinationCount != nullptr) ? (*pCombinationCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeFlagsValue(faceMask); + encoder->EncodeEnumValue(failOp); + encoder->EncodeEnumValue(passOp); + encoder->EncodeEnumValue(depthFailOp); + encoder->EncodeEnumValue(compareOp); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pCombinationCount, pCombinations); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetStencilOpEXT(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModes2EXT( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, - uint32_t* pPresentModeCount, - VkPresentModeKHR* pPresentModes) +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImageEXT( + VkDevice device, + const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20462,39 +21467,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModes2EXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes); + CustomEncoderPreCall::Dispatch(manager, device, pCopyMemoryToImageInfo); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSurfaceInfo, handle_unwrap_memory); + const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyMemoryToImageInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceSurfacePresentModes2EXT(physicalDevice, pSurfaceInfo_unwrapped, pPresentModeCount, pPresentModes); - if (result < 0) - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyMemoryToImageEXT(device, pCopyMemoryToImageInfo_unwrapped); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceSurfacePresentModes2EXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyMemoryToImageEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pSurfaceInfo); - encoder->EncodeUInt32Ptr(pPresentModeCount, omit_output_data); - encoder->EncodeEnumArray(pPresentModes, (pPresentModeCount != nullptr) ? (*pPresentModeCount) : 0, omit_output_data); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCopyMemoryToImageInfo); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes); + CustomEncoderPostCall::Dispatch(manager, result, device, pCopyMemoryToImageInfo); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireFullScreenExclusiveModeEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemoryEXT( VkDevice device, - VkSwapchainKHR swapchain) + const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20510,28 +21507,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkAcquireFullScreenExclusiveModeEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, swapchain); + CustomEncoderPreCall::Dispatch(manager, device, pCopyImageToMemoryInfo); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->AcquireFullScreenExclusiveModeEXT(device, swapchain); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageToMemoryInfo, handle_unwrap_memory); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAcquireFullScreenExclusiveModeEXT); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyImageToMemoryEXT(device, pCopyImageToMemoryInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyImageToMemoryEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); + EncodeStructPtr(encoder, pCopyImageToMemoryInfo); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, swapchain); + CustomEncoderPostCall::Dispatch(manager, result, device, pCopyImageToMemoryInfo); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkReleaseFullScreenExclusiveModeEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImageEXT( VkDevice device, - VkSwapchainKHR swapchain) + const VkCopyImageToImageInfo* pCopyImageToImageInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20547,29 +21547,32 @@ VKAPI_ATTR VkResult VKAPI_CALL vkReleaseFullScreenExclusiveModeEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, swapchain); + CustomEncoderPreCall::Dispatch(manager, device, pCopyImageToImageInfo); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->ReleaseFullScreenExclusiveModeEXT(device, swapchain); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyImageToImageInfo* pCopyImageToImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageToImageInfo, handle_unwrap_memory); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkReleaseFullScreenExclusiveModeEXT); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyImageToImageEXT(device, pCopyImageToImageInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyImageToImageEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); + EncodeStructPtr(encoder, pCopyImageToImageInfo); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, swapchain); + CustomEncoderPostCall::Dispatch(manager, result, device, pCopyImageToImageInfo); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModes2EXT( +VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayoutEXT( VkDevice device, - const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, - VkDeviceGroupPresentModeFlagsKHR* pModes) + uint32_t transitionCount, + const VkHostImageLayoutTransitionInfo* pTransitions) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20585,40 +21588,34 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModes2EXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pSurfaceInfo, pModes); + CustomEncoderPreCall::Dispatch(manager, device, transitionCount, pTransitions); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSurfaceInfo, handle_unwrap_memory); + const VkHostImageLayoutTransitionInfo* pTransitions_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pTransitions, transitionCount, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo_unwrapped, pModes); - if (result < 0) - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->TransitionImageLayoutEXT(device, transitionCount, pTransitions_unwrapped); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceGroupSurfacePresentModes2EXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkTransitionImageLayoutEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pSurfaceInfo); - encoder->EncodeFlagsPtr(pModes, omit_output_data); + encoder->EncodeUInt32Value(transitionCount); + EncodeStructArray(encoder, pTransitions, transitionCount); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pSurfaceInfo, pModes); + CustomEncoderPostCall::Dispatch(manager, result, device, transitionCount, pTransitions); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT( - VkInstance instance, - const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2EXT( + VkDevice device, + VkImage image, + const VkImageSubresource2* pSubresource, + VkSubresourceLayout2* pLayout) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20634,42 +21631,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateHeadlessSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface); + CustomEncoderPreCall::Dispatch(manager, device, image, pSubresource, pLayout); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + vulkan_wrappers::GetDeviceTable(device)->GetImageSubresourceLayout2EXT(device, image, pSubresource, pLayout); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateHeadlessSurfaceEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageSubresourceLayout2EXT); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(image); + EncodeStructPtr(encoder, pSubresource); + EncodeStructPtr(encoder, pLayout); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, image, pSubresource, pLayout); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEXT( - VkCommandBuffer commandBuffer, - uint32_t lineStippleFactor, - uint16_t lineStipplePattern) +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseSwapchainImagesEXT( + VkDevice device, + const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20685,28 +21667,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, lineStippleFactor, lineStipplePattern); + CustomEncoderPreCall::Dispatch(manager, device, pReleaseInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetLineStippleEXT); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pReleaseInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->ReleaseSwapchainImagesEXT(device, pReleaseInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkReleaseSwapchainImagesEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(lineStippleFactor); - encoder->EncodeUInt16Value(lineStipplePattern); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pReleaseInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetLineStippleEXT(commandBuffer, lineStippleFactor, lineStipplePattern); + CustomEncoderPostCall::Dispatch(manager, result, device, pReleaseInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, lineStippleFactor, lineStipplePattern); + return result; } -VKAPI_ATTR void VKAPI_CALL vkResetQueryPoolEXT( +VKAPI_ATTR void VKAPI_CALL vkGetGeneratedCommandsMemoryRequirementsNV( VkDevice device, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount) + const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20722,27 +21708,29 @@ VKAPI_ATTR void VKAPI_CALL vkResetQueryPoolEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, queryPool, firstQuery, queryCount); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(device)->GetGeneratedCommandsMemoryRequirementsNV(device, pInfo_unwrapped, pMemoryRequirements); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkResetQueryPoolEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetGeneratedCommandsMemoryRequirementsNV); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(queryPool); - encoder->EncodeUInt32Value(firstQuery); - encoder->EncodeUInt32Value(queryCount); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pMemoryRequirements); manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(device)->ResetQueryPoolEXT(device, queryPool, firstQuery, queryCount); - - CustomEncoderPostCall::Dispatch(manager, device, queryPool, firstQuery, queryCount); + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetCullModeEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdPreprocessGeneratedCommandsNV( VkCommandBuffer commandBuffer, - VkCullModeFlags cullMode) + const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20758,25 +21746,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetCullModeEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, cullMode); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pGeneratedCommandsInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCullModeEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPreprocessGeneratedCommandsNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeFlagsValue(cullMode); - manager->EndCommandApiCallCapture(commandBuffer); + EncodeStructPtr(encoder, pGeneratedCommandsInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPreprocessGeneratedCommandsNVHandles, pGeneratedCommandsInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCullModeEXT(commandBuffer, cullMode); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGeneratedCommandsInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, cullMode); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPreprocessGeneratedCommandsNV(commandBuffer, pGeneratedCommandsInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pGeneratedCommandsInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFaceEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdExecuteGeneratedCommandsNV( VkCommandBuffer commandBuffer, - VkFrontFace frontFace) + VkBool32 isPreprocessed, + const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20792,25 +21784,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFaceEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, frontFace); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, isPreprocessed, pGeneratedCommandsInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetFrontFaceEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdExecuteGeneratedCommandsNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(frontFace); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeUInt32Value(isPreprocessed); + EncodeStructPtr(encoder, pGeneratedCommandsInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdExecuteGeneratedCommandsNVHandles, pGeneratedCommandsInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetFrontFaceEXT(commandBuffer, frontFace); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGeneratedCommandsInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, frontFace); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdExecuteGeneratedCommandsNV(commandBuffer, isPreprocessed, pGeneratedCommandsInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, isPreprocessed, pGeneratedCommandsInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopologyEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdBindPipelineShaderGroupNV( VkCommandBuffer commandBuffer, - VkPrimitiveTopology primitiveTopology) + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline, + uint32_t groupIndex) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20826,26 +21824,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopologyEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, primitiveTopology); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineBindPoint, pipeline, groupIndex); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPrimitiveTopologyEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindPipelineShaderGroupNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(primitiveTopology); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeEnumValue(pipelineBindPoint); + encoder->EncodeVulkanHandleValue(pipeline); + encoder->EncodeUInt32Value(groupIndex); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindPipelineShaderGroupNVHandles, pipeline); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPrimitiveTopologyEXT(commandBuffer, primitiveTopology); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindPipelineShaderGroupNV(commandBuffer, pipelineBindPoint, pipeline, groupIndex); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, primitiveTopology); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineBindPoint, pipeline, groupIndex); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCountEXT( - VkCommandBuffer commandBuffer, - uint32_t viewportCount, - const VkViewport* pViewports) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutNV( + VkDevice device, + const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkIndirectCommandsLayoutNV* pIndirectCommandsLayout) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20861,27 +21862,45 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCountEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, viewportCount, pViewports); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetViewportWithCountEXT); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pIndirectCommandsLayout); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateIndirectCommandsLayoutNV(device, pCreateInfo_unwrapped, pAllocator, pIndirectCommandsLayout); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pIndirectCommandsLayout, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateIndirectCommandsLayoutNV); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(viewportCount); - EncodeStructArray(encoder, pViewports, viewportCount); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pIndirectCommandsLayout, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pIndirectCommandsLayout, pCreateInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetViewportWithCountEXT(commandBuffer, viewportCount, pViewports); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pIndirectCommandsLayout); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, viewportCount, pViewports); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCountEXT( - VkCommandBuffer commandBuffer, - uint32_t scissorCount, - const VkRect2D* pScissors) +VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutNV( + VkDevice device, + VkIndirectCommandsLayoutNV indirectCommandsLayout, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20897,31 +21916,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCountEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, scissorCount, pScissors); + CustomEncoderPreCall::Dispatch(manager, device, indirectCommandsLayout, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetScissorWithCountEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyIndirectCommandsLayoutNV); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(scissorCount); - EncodeStructArray(encoder, pScissors, scissorCount); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(indirectCommandsLayout); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(indirectCommandsLayout); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetScissorWithCountEXT(commandBuffer, scissorCount, pScissors); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyIndirectCommandsLayoutNV(device, indirectCommandsLayout, pAllocator); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, scissorCount, pScissors); + CustomEncoderPostCall::Dispatch(manager, device, indirectCommandsLayout, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(indirectCommandsLayout); } -VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2EXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias2EXT( VkCommandBuffer commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - const VkBuffer* pBuffers, - const VkDeviceSize* pOffsets, - const VkDeviceSize* pSizes, - const VkDeviceSize* pStrides) + const VkDepthBiasInfoEXT* pDepthBiasInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20937,30 +21954,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2EXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pDepthBiasInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindVertexBuffers2EXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthBias2EXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstBinding); - encoder->EncodeUInt32Value(bindingCount); - encoder->EncodeVulkanHandleArray(pBuffers, bindingCount); - encoder->EncodeUInt64Array(pOffsets, bindingCount); - encoder->EncodeUInt64Array(pSizes, bindingCount); - encoder->EncodeUInt64Array(pStrides, bindingCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindVertexBuffers2EXTHandles, bindingCount, pBuffers); + EncodeStructPtr(encoder, pDepthBiasInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindVertexBuffers2EXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthBias2EXT(commandBuffer, pDepthBiasInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pDepthBiasInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 depthTestEnable) +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireDrmDisplayEXT( + VkPhysicalDevice physicalDevice, + int32_t drmFd, + VkDisplayKHR display) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -20976,25 +21989,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthTestEnable); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, drmFd, display); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthTestEnableEXT); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->AcquireDrmDisplayEXT(physicalDevice, drmFd, display); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAcquireDrmDisplayEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(depthTestEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeInt32Value(drmFd); + encoder->EncodeVulkanHandleValue(display); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthTestEnableEXT(commandBuffer, depthTestEnable); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, drmFd, display); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthTestEnable); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 depthWriteEnable) +VKAPI_ATTR VkResult VKAPI_CALL vkGetDrmDisplayEXT( + VkPhysicalDevice physicalDevice, + int32_t drmFd, + uint32_t connectorId, + VkDisplayKHR* display) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21010,25 +22029,43 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthWriteEnable); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthWriteEnableEXT); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, drmFd, connectorId, display); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetDrmDisplayEXT(physicalDevice, drmFd, connectorId, display); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, display, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetDrmDisplayEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(depthWriteEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeInt32Value(drmFd); + encoder->EncodeUInt32Value(connectorId); + encoder->EncodeVulkanHandlePtr(display, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, physicalDevice, display, nullptr); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthWriteEnableEXT(commandBuffer, depthWriteEnable); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, drmFd, connectorId, display); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthWriteEnable); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOpEXT( - VkCommandBuffer commandBuffer, - VkCompareOp depthCompareOp) +VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlotEXT( + VkDevice device, + const VkPrivateDataSlotCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkPrivateDataSlot* pPrivateDataSlot) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21037,32 +22074,49 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOpEXT( std::unique_lock exclusive_api_call_lock; if (force_command_serialization) { - exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + bool omit_output_data = false; + + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pPrivateDataSlot); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreatePrivateDataSlotEXT(device, pCreateInfo, pAllocator, pPrivateDataSlot); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pPrivateDataSlot, VulkanCaptureManager::GetUniqueId); } else { - shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + omit_output_data = true; } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthCompareOp); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthCompareOpEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreatePrivateDataSlotEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(depthCompareOp); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pPrivateDataSlot, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pPrivateDataSlot, pCreateInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthCompareOpEXT(commandBuffer, depthCompareOp); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pPrivateDataSlot); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthCompareOp); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 depthBoundsTestEnable) +VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlotEXT( + VkDevice device, + VkPrivateDataSlot privateDataSlot, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21078,25 +22132,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthBoundsTestEnable); + CustomEncoderPreCall::Dispatch(manager, device, privateDataSlot, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthBoundsTestEnableEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyPrivateDataSlotEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(depthBoundsTestEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(privateDataSlot); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(privateDataSlot); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthBoundsTestEnableEXT(commandBuffer, depthBoundsTestEnable); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyPrivateDataSlotEXT(device, privateDataSlot, pAllocator); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthBoundsTestEnable); + CustomEncoderPostCall::Dispatch(manager, device, privateDataSlot, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(privateDataSlot); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 stencilTestEnable) +VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateDataEXT( + VkDevice device, + VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, + uint64_t data) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21112,29 +22173,34 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, stencilTestEnable); + CustomEncoderPreCall::Dispatch(manager, device, objectType, objectHandle, privateDataSlot, data); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetStencilTestEnableEXT); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->SetPrivateDataEXT(device, objectType, objectHandle, privateDataSlot, data); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetPrivateDataEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(stencilTestEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeEnumValue(objectType); + encoder->EncodeUInt64Value(vulkan_wrappers::GetWrappedId(objectHandle, objectType)); + encoder->EncodeVulkanHandleValue(privateDataSlot); + encoder->EncodeUInt64Value(data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetStencilTestEnableEXT(commandBuffer, stencilTestEnable); + CustomEncoderPostCall::Dispatch(manager, result, device, objectType, objectHandle, privateDataSlot, data); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, stencilTestEnable); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOpEXT( - VkCommandBuffer commandBuffer, - VkStencilFaceFlags faceMask, - VkStencilOp failOp, - VkStencilOp passOp, - VkStencilOp depthFailOp, - VkCompareOp compareOp) +VKAPI_ATTR void VKAPI_CALL vkGetPrivateDataEXT( + VkDevice device, + VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, + uint64_t* pData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21150,29 +22216,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOpEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); + CustomEncoderPreCall::Dispatch(manager, device, objectType, objectHandle, privateDataSlot, pData); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetStencilOpEXT); + vulkan_wrappers::GetDeviceTable(device)->GetPrivateDataEXT(device, objectType, objectHandle, privateDataSlot, pData); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPrivateDataEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeFlagsValue(faceMask); - encoder->EncodeEnumValue(failOp); - encoder->EncodeEnumValue(passOp); - encoder->EncodeEnumValue(depthFailOp); - encoder->EncodeEnumValue(compareOp); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeEnumValue(objectType); + encoder->EncodeUInt64Value(vulkan_wrappers::GetWrappedId(objectHandle, objectType)); + encoder->EncodeVulkanHandleValue(privateDataSlot); + encoder->EncodeUInt64Ptr(pData); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetStencilOpEXT(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); + CustomEncoderPostCall::Dispatch(manager, device, objectType, objectHandle, privateDataSlot, pData); } -VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImageEXT( - VkDevice device, - const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchTileQCOM( + VkCommandBuffer commandBuffer, + const VkDispatchTileInfoQCOM* pDispatchTileInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21188,31 +22253,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImageEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pCopyMemoryToImageInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyMemoryToImageInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyMemoryToImageEXT(device, pCopyMemoryToImageInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pDispatchTileInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyMemoryToImageEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDispatchTileQCOM); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCopyMemoryToImageInfo); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pDispatchTileInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCopyMemoryToImageInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDispatchTileQCOM(commandBuffer, pDispatchTileInfo); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pDispatchTileInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemoryEXT( - VkDevice device, - const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdBeginPerTileExecutionQCOM( + VkCommandBuffer commandBuffer, + const VkPerTileBeginInfoQCOM* pPerTileBeginInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21228,31 +22287,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemoryEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pCopyImageToMemoryInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageToMemoryInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyImageToMemoryEXT(device, pCopyImageToMemoryInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pPerTileBeginInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyImageToMemoryEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginPerTileExecutionQCOM); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCopyImageToMemoryInfo); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pPerTileBeginInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCopyImageToMemoryInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginPerTileExecutionQCOM(commandBuffer, pPerTileBeginInfo); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pPerTileBeginInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImageEXT( - VkDevice device, - const VkCopyImageToImageInfo* pCopyImageToImageInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdEndPerTileExecutionQCOM( + VkCommandBuffer commandBuffer, + const VkPerTileEndInfoQCOM* pPerTileEndInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21268,32 +22321,26 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImageEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pCopyImageToImageInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyImageToImageInfo* pCopyImageToImageInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCopyImageToImageInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyImageToImageEXT(device, pCopyImageToImageInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pPerTileEndInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyImageToImageEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndPerTileExecutionQCOM); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCopyImageToImageInfo); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pPerTileEndInfo); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCopyImageToImageInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndPerTileExecutionQCOM(commandBuffer, pPerTileEndInfo); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pPerTileEndInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayoutEXT( +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSizeEXT( VkDevice device, - uint32_t transitionCount, - const VkHostImageLayoutTransitionInfo* pTransitions) + VkDescriptorSetLayout layout, + VkDeviceSize* pLayoutSizeInBytes) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21309,34 +22356,28 @@ VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayoutEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, transitionCount, pTransitions); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkHostImageLayoutTransitionInfo* pTransitions_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pTransitions, transitionCount, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, layout, pLayoutSizeInBytes); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->TransitionImageLayoutEXT(device, transitionCount, pTransitions_unwrapped); + vulkan_wrappers::GetDeviceTable(device)->GetDescriptorSetLayoutSizeEXT(device, layout, pLayoutSizeInBytes); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkTransitionImageLayoutEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDescriptorSetLayoutSizeEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeUInt32Value(transitionCount); - EncodeStructArray(encoder, pTransitions, transitionCount); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(layout); + encoder->EncodeUInt64Ptr(pLayoutSizeInBytes); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, transitionCount, pTransitions); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, layout, pLayoutSizeInBytes); } -VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2EXT( +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutBindingOffsetEXT( VkDevice device, - VkImage image, - const VkImageSubresource2* pSubresource, - VkSubresourceLayout2* pLayout) + VkDescriptorSetLayout layout, + uint32_t binding, + VkDeviceSize* pOffset) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21352,27 +22393,29 @@ VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2EXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, image, pSubresource, pLayout); + CustomEncoderPreCall::Dispatch(manager, device, layout, binding, pOffset); - vulkan_wrappers::GetDeviceTable(device)->GetImageSubresourceLayout2EXT(device, image, pSubresource, pLayout); + vulkan_wrappers::GetDeviceTable(device)->GetDescriptorSetLayoutBindingOffsetEXT(device, layout, binding, pOffset); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetImageSubresourceLayout2EXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDescriptorSetLayoutBindingOffsetEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(image); - EncodeStructPtr(encoder, pSubresource); - EncodeStructPtr(encoder, pLayout); + encoder->EncodeVulkanHandleValue(layout); + encoder->EncodeUInt32Value(binding); + encoder->EncodeUInt64Ptr(pOffset); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, image, pSubresource, pLayout); + CustomEncoderPostCall::Dispatch(manager, device, layout, binding, pOffset); } -VKAPI_ATTR VkResult VKAPI_CALL vkReleaseSwapchainImagesEXT( +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorEXT( VkDevice device, - const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo) + const VkDescriptorGetInfoEXT* pDescriptorInfo, + size_t dataSize, + void* pDescriptor) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21388,32 +22431,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkReleaseSwapchainImagesEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pReleaseInfo); + CustomEncoderPreCall::Dispatch(manager, device, pDescriptorInfo, dataSize, pDescriptor); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pReleaseInfo, handle_unwrap_memory); + const VkDescriptorGetInfoEXT* pDescriptorInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pDescriptorInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->ReleaseSwapchainImagesEXT(device, pReleaseInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(device)->GetDescriptorEXT(device, pDescriptorInfo_unwrapped, dataSize, pDescriptor); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkReleaseSwapchainImagesEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDescriptorEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pReleaseInfo); - encoder->EncodeEnumValue(result); + EncodeStructPtr(encoder, pDescriptorInfo); + encoder->EncodeSizeTValue(dataSize); + encoder->EncodeVoidArray(pDescriptor, dataSize); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pReleaseInfo); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, pDescriptorInfo, dataSize, pDescriptor); } -VKAPI_ATTR void VKAPI_CALL vkGetGeneratedCommandsMemoryRequirementsNV( - VkDevice device, - const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo, - VkMemoryRequirements2* pMemoryRequirements) +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBuffersEXT( + VkCommandBuffer commandBuffer, + uint32_t bufferCount, + const VkDescriptorBufferBindingInfoEXT* pBindingInfos) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21429,29 +22471,34 @@ VKAPI_ATTR void VKAPI_CALL vkGetGeneratedCommandsMemoryRequirementsNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(device)->GetGeneratedCommandsMemoryRequirementsNV(device, pInfo_unwrapped, pMemoryRequirements); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, bufferCount, pBindingInfos); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetGeneratedCommandsMemoryRequirementsNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindDescriptorBuffersEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - EncodeStructPtr(encoder, pMemoryRequirements); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(bufferCount); + EncodeStructArray(encoder, pBindingInfos, bufferCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindDescriptorBuffersEXTHandles, bufferCount, pBindingInfos); } - CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDescriptorBufferBindingInfoEXT* pBindingInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBindingInfos, bufferCount, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindDescriptorBuffersEXT(commandBuffer, bufferCount, pBindingInfos_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, bufferCount, pBindingInfos); } -VKAPI_ATTR void VKAPI_CALL vkCmdPreprocessGeneratedCommandsNV( +VKAPI_ATTR void VKAPI_CALL vkCmdSetDescriptorBufferOffsetsEXT( VkCommandBuffer commandBuffer, - const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo) + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t firstSet, + uint32_t setCount, + const uint32_t* pBufferIndices, + const VkDeviceSize* pOffsets) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21467,29 +22514,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPreprocessGeneratedCommandsNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pGeneratedCommandsInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pBufferIndices, pOffsets); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdPreprocessGeneratedCommandsNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDescriptorBufferOffsetsEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pGeneratedCommandsInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdPreprocessGeneratedCommandsNVHandles, pGeneratedCommandsInfo); + encoder->EncodeEnumValue(pipelineBindPoint); + encoder->EncodeVulkanHandleValue(layout); + encoder->EncodeUInt32Value(firstSet); + encoder->EncodeUInt32Value(setCount); + encoder->EncodeUInt32Array(pBufferIndices, setCount); + encoder->EncodeUInt64Array(pOffsets, setCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdSetDescriptorBufferOffsetsEXTHandles, layout); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGeneratedCommandsInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdPreprocessGeneratedCommandsNV(commandBuffer, pGeneratedCommandsInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDescriptorBufferOffsetsEXT(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pBufferIndices, pOffsets); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pGeneratedCommandsInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pBufferIndices, pOffsets); } -VKAPI_ATTR void VKAPI_CALL vkCmdExecuteGeneratedCommandsNV( +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBufferEmbeddedSamplersEXT( VkCommandBuffer commandBuffer, - VkBool32 isPreprocessed, - const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo) + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21505,31 +22555,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdExecuteGeneratedCommandsNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, isPreprocessed, pGeneratedCommandsInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, set); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdExecuteGeneratedCommandsNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindDescriptorBufferEmbeddedSamplersEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(isPreprocessed); - EncodeStructPtr(encoder, pGeneratedCommandsInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdExecuteGeneratedCommandsNVHandles, pGeneratedCommandsInfo); + encoder->EncodeEnumValue(pipelineBindPoint); + encoder->EncodeVulkanHandleValue(layout); + encoder->EncodeUInt32Value(set); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindDescriptorBufferEmbeddedSamplersEXTHandles, layout); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGeneratedCommandsInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdExecuteGeneratedCommandsNV(commandBuffer, isPreprocessed, pGeneratedCommandsInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindDescriptorBufferEmbeddedSamplersEXT(commandBuffer, pipelineBindPoint, layout, set); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, isPreprocessed, pGeneratedCommandsInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineBindPoint, layout, set); } -VKAPI_ATTR void VKAPI_CALL vkCmdBindPipelineShaderGroupNV( +VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateEnumNV( VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipeline pipeline, - uint32_t groupIndex) + VkFragmentShadingRateNV shadingRate, + const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21545,29 +22592,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindPipelineShaderGroupNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineBindPoint, pipeline, groupIndex); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, shadingRate, combinerOps); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindPipelineShaderGroupNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetFragmentShadingRateEnumNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(pipelineBindPoint); - encoder->EncodeVulkanHandleValue(pipeline); - encoder->EncodeUInt32Value(groupIndex); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindPipelineShaderGroupNVHandles, pipeline); + encoder->EncodeEnumValue(shadingRate); + encoder->EncodeEnumArray(combinerOps, 2); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindPipelineShaderGroupNV(commandBuffer, pipelineBindPoint, pipeline, groupIndex); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetFragmentShadingRateEnumNV(commandBuffer, shadingRate, combinerOps); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineBindPoint, pipeline, groupIndex); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, shadingRate, combinerOps); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutNV( +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceFaultInfoEXT( VkDevice device, - const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkIndirectCommandsLayoutNV* pIndirectCommandsLayout) + VkDeviceFaultCountsEXT* pFaultCounts, + VkDeviceFaultInfoEXT* pFaultInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21585,43 +22630,33 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutNV( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pIndirectCommandsLayout); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateIndirectCommandsLayoutNV(device, pCreateInfo_unwrapped, pAllocator, pIndirectCommandsLayout); + CustomEncoderPreCall::Dispatch(manager, device, pFaultCounts, pFaultInfo); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pIndirectCommandsLayout, VulkanCaptureManager::GetUniqueId); - } - else + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetDeviceFaultInfoEXT(device, pFaultCounts, pFaultInfo); + if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateIndirectCommandsLayoutNV); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceFaultInfoEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pIndirectCommandsLayout, omit_output_data); + EncodeStructPtr(encoder, pFaultCounts, omit_output_data); + EncodeStructPtr(encoder, pFaultInfo, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pIndirectCommandsLayout, pCreateInfo); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pIndirectCommandsLayout); + CustomEncoderPostCall::Dispatch(manager, result, device, pFaultCounts, pFaultInfo); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutNV( - VkDevice device, - VkIndirectCommandsLayoutNV indirectCommandsLayout, - const VkAllocationCallbacks* pAllocator) +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireWinrtDisplayNV( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21637,29 +22672,29 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, indirectCommandsLayout, pAllocator); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, display); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyIndirectCommandsLayoutNV); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->AcquireWinrtDisplayNV(physicalDevice, display); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAcquireWinrtDisplayNV); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(indirectCommandsLayout); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(indirectCommandsLayout); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeVulkanHandleValue(display); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyIndirectCommandsLayoutNV(device, indirectCommandsLayout, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, indirectCommandsLayout, pAllocator); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, display); - vulkan_wrappers::DestroyWrappedHandle(indirectCommandsLayout); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias2EXT( - VkCommandBuffer commandBuffer, - const VkDepthBiasInfoEXT* pDepthBiasInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkGetWinrtDisplayNV( + VkPhysicalDevice physicalDevice, + uint32_t deviceRelativeId, + VkDisplayKHR* pDisplay) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21675,26 +22710,42 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias2EXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pDepthBiasInfo); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthBias2EXT); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, deviceRelativeId, pDisplay); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetWinrtDisplayNV(physicalDevice, deviceRelativeId, pDisplay); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, pDisplay, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetWinrtDisplayNV); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pDepthBiasInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Value(deviceRelativeId); + encoder->EncodeVulkanHandlePtr(pDisplay, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, physicalDevice, pDisplay, nullptr); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthBias2EXT(commandBuffer, pDepthBiasInfo); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, deviceRelativeId, pDisplay); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pDepthBiasInfo); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireDrmDisplayEXT( - VkPhysicalDevice physicalDevice, - int32_t drmFd, - VkDisplayKHR display) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT( + VkInstance instance, + const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21710,31 +22761,42 @@ VKAPI_ATTR VkResult VKAPI_CALL vkAcquireDrmDisplayEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, drmFd, display); + bool omit_output_data = false; - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->AcquireDrmDisplayEXT(physicalDevice, drmFd, display); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAcquireDrmDisplayEXT); + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateDirectFBSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDirectFBSurfaceEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeInt32Value(drmFd); - encoder->EncodeVulkanHandleValue(display); + encoder->EncodeVulkanHandleValue(instance); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, drmFd, display); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetDrmDisplayEXT( +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceDirectFBPresentationSupportEXT( VkPhysicalDevice physicalDevice, - int32_t drmFd, - uint32_t connectorId, - VkDisplayKHR* display) + uint32_t queueFamilyIndex, + IDirectFB* dfb) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21750,43 +22812,70 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetDrmDisplayEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; + CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, dfb); - CustomEncoderPreCall::Dispatch(manager, physicalDevice, drmFd, connectorId, display); + VkBool32 result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceDirectFBPresentationSupportEXT(physicalDevice, queueFamilyIndex, dfb); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetDrmDisplayEXT(physicalDevice, drmFd, connectorId, display); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceDirectFBPresentationSupportEXT); + if (encoder) + { + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Value(queueFamilyIndex); + encoder->EncodeVoidPtr(dfb); + encoder->EncodeUInt32Value(result); + manager->EndApiCallCapture(); + } - if (result >= 0) + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, dfb); + + return result; + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdSetVertexInputEXT( + VkCommandBuffer commandBuffer, + uint32_t vertexBindingDescriptionCount, + const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, + uint32_t vertexAttributeDescriptionCount, + const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) { - vulkan_wrappers::CreateWrappedHandle(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, display, VulkanCaptureManager::GetUniqueId); + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); } else { - omit_output_data = true; + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetDrmDisplayEXT); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetVertexInputEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeInt32Value(drmFd); - encoder->EncodeUInt32Value(connectorId); - encoder->EncodeVulkanHandlePtr(display, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, physicalDevice, display, nullptr); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(vertexBindingDescriptionCount); + EncodeStructArray(encoder, pVertexBindingDescriptions, vertexBindingDescriptionCount); + encoder->EncodeUInt32Value(vertexAttributeDescriptionCount); + EncodeStructArray(encoder, pVertexAttributeDescriptions, vertexAttributeDescriptionCount); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, drmFd, connectorId, display); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetVertexInputEXT(commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlotEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandleFUCHSIA( VkDevice device, - const VkPrivateDataSlotCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkPrivateDataSlot* pPrivateDataSlot) + const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, + zx_handle_t* pZirconHandle) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21804,40 +22893,38 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlotEXT( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pPrivateDataSlot); + CustomEncoderPreCall::Dispatch(manager, device, pGetZirconHandleInfo, pZirconHandle); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreatePrivateDataSlotEXT(device, pCreateInfo, pAllocator, pPrivateDataSlot); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetZirconHandleInfo, handle_unwrap_memory); - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pPrivateDataSlot, VulkanCaptureManager::GetUniqueId); - } - else + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryZirconHandleFUCHSIA(device, pGetZirconHandleInfo_unwrapped, pZirconHandle); + if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreatePrivateDataSlotEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryZirconHandleFUCHSIA); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pPrivateDataSlot, omit_output_data); + EncodeStructPtr(encoder, pGetZirconHandleInfo); + encoder->EncodeUInt32Ptr(pZirconHandle, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pPrivateDataSlot, pCreateInfo); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pPrivateDataSlot); + CustomEncoderPostCall::Dispatch(manager, result, device, pGetZirconHandleInfo, pZirconHandle); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlotEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA( VkDevice device, - VkPrivateDataSlot privateDataSlot, - const VkAllocationCallbacks* pAllocator) + VkExternalMemoryHandleTypeFlagBits handleType, + zx_handle_t zirconHandle, + VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21853,32 +22940,36 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlotEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, privateDataSlot, pAllocator); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyPrivateDataSlotEXT); + CustomEncoderPreCall::Dispatch(manager, device, handleType, zirconHandle, pMemoryZirconHandleProperties); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryZirconHandlePropertiesFUCHSIA(device, handleType, zirconHandle, pMemoryZirconHandleProperties); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryZirconHandlePropertiesFUCHSIA); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(privateDataSlot); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(privateDataSlot); + encoder->EncodeEnumValue(handleType); + encoder->EncodeUInt32Value(zirconHandle); + EncodeStructPtr(encoder, pMemoryZirconHandleProperties, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyPrivateDataSlotEXT(device, privateDataSlot, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, privateDataSlot, pAllocator); + CustomEncoderPostCall::Dispatch(manager, result, device, handleType, zirconHandle, pMemoryZirconHandleProperties); - vulkan_wrappers::DestroyWrappedHandle(privateDataSlot); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateDataEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA( VkDevice device, - VkObjectType objectType, - uint64_t objectHandle, - VkPrivateDataSlot privateDataSlot, - uint64_t data) + const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21894,34 +22985,32 @@ VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateDataEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, objectType, objectHandle, privateDataSlot, data); + CustomEncoderPreCall::Dispatch(manager, device, pImportSemaphoreZirconHandleInfo); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->SetPrivateDataEXT(device, objectType, objectHandle, privateDataSlot, data); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pImportSemaphoreZirconHandleInfo, handle_unwrap_memory); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetPrivateDataEXT); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->ImportSemaphoreZirconHandleFUCHSIA(device, pImportSemaphoreZirconHandleInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkImportSemaphoreZirconHandleFUCHSIA); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeEnumValue(objectType); - encoder->EncodeUInt64Value(vulkan_wrappers::GetWrappedId(objectHandle, objectType)); - encoder->EncodeVulkanHandleValue(privateDataSlot); - encoder->EncodeUInt64Value(data); + EncodeStructPtr(encoder, pImportSemaphoreZirconHandleInfo); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, objectType, objectHandle, privateDataSlot, data); + CustomEncoderPostCall::Dispatch(manager, result, device, pImportSemaphoreZirconHandleInfo); return result; } -VKAPI_ATTR void VKAPI_CALL vkGetPrivateDataEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA( VkDevice device, - VkObjectType objectType, - uint64_t objectHandle, - VkPrivateDataSlot privateDataSlot, - uint64_t* pData) + const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, + zx_handle_t* pZirconHandle) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21937,28 +23026,39 @@ VKAPI_ATTR void VKAPI_CALL vkGetPrivateDataEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, objectType, objectHandle, privateDataSlot, pData); + bool omit_output_data = false; - vulkan_wrappers::GetDeviceTable(device)->GetPrivateDataEXT(device, objectType, objectHandle, privateDataSlot, pData); + CustomEncoderPreCall::Dispatch(manager, device, pGetZirconHandleInfo, pZirconHandle); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPrivateDataEXT); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetZirconHandleInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSemaphoreZirconHandleFUCHSIA(device, pGetZirconHandleInfo_unwrapped, pZirconHandle); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSemaphoreZirconHandleFUCHSIA); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeEnumValue(objectType); - encoder->EncodeUInt64Value(vulkan_wrappers::GetWrappedId(objectHandle, objectType)); - encoder->EncodeVulkanHandleValue(privateDataSlot); - encoder->EncodeUInt64Ptr(pData); + EncodeStructPtr(encoder, pGetZirconHandleInfo); + encoder->EncodeUInt32Ptr(pZirconHandle, omit_output_data); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, objectType, objectHandle, privateDataSlot, pData); + CustomEncoderPostCall::Dispatch(manager, result, device, pGetZirconHandleInfo, pZirconHandle); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdDispatchTileQCOM( +VKAPI_ATTR void VKAPI_CALL vkCmdBindInvocationMaskHUAWEI( VkCommandBuffer commandBuffer, - const VkDispatchTileInfoQCOM* pDispatchTileInfo) + VkImageView imageView, + VkImageLayout imageLayout) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -21974,25 +23074,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDispatchTileQCOM( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pDispatchTileInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, imageView, imageLayout); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDispatchTileQCOM); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindInvocationMaskHUAWEI); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pDispatchTileInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(imageView); + encoder->EncodeEnumValue(imageLayout); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindInvocationMaskHUAWEIHandles, imageView); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDispatchTileQCOM(commandBuffer, pDispatchTileInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindInvocationMaskHUAWEI(commandBuffer, imageView, imageLayout); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pDispatchTileInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, imageView, imageLayout); } -VKAPI_ATTR void VKAPI_CALL vkCmdBeginPerTileExecutionQCOM( - VkCommandBuffer commandBuffer, - const VkPerTileBeginInfoQCOM* pPerTileBeginInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryRemoteAddressNV( + VkDevice device, + const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo, + VkRemoteAddressNV* pAddress) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22008,25 +23110,38 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBeginPerTileExecutionQCOM( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pPerTileBeginInfo); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginPerTileExecutionQCOM); + CustomEncoderPreCall::Dispatch(manager, device, pMemoryGetRemoteAddressInfo, pAddress); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pMemoryGetRemoteAddressInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryRemoteAddressNV(device, pMemoryGetRemoteAddressInfo_unwrapped, pAddress); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryRemoteAddressNV); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pPerTileBeginInfo); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pMemoryGetRemoteAddressInfo); + encoder->EncodeVoidPtrPtr(pAddress, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginPerTileExecutionQCOM(commandBuffer, pPerTileBeginInfo); + CustomEncoderPostCall::Dispatch(manager, result, device, pMemoryGetRemoteAddressInfo, pAddress); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pPerTileBeginInfo); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdEndPerTileExecutionQCOM( +VKAPI_ATTR void VKAPI_CALL vkCmdSetPatchControlPointsEXT( VkCommandBuffer commandBuffer, - const VkPerTileEndInfoQCOM* pPerTileEndInfo) + uint32_t patchControlPoints) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22042,26 +23157,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEndPerTileExecutionQCOM( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pPerTileEndInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, patchControlPoints); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdEndPerTileExecutionQCOM); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPatchControlPointsEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pPerTileEndInfo); + encoder->EncodeUInt32Value(patchControlPoints); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdEndPerTileExecutionQCOM(commandBuffer, pPerTileEndInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPatchControlPointsEXT(commandBuffer, patchControlPoints); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pPerTileEndInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, patchControlPoints); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateEnumNV( +VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnableEXT( VkCommandBuffer commandBuffer, - VkFragmentShadingRateNV shadingRate, - const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) + VkBool32 rasterizerDiscardEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22077,27 +23191,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateEnumNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, shadingRate, combinerOps); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, rasterizerDiscardEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetFragmentShadingRateEnumNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRasterizerDiscardEnableEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(shadingRate); - encoder->EncodeEnumArray(combinerOps, 2); + encoder->EncodeUInt32Value(rasterizerDiscardEnable); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetFragmentShadingRateEnumNV(commandBuffer, shadingRate, combinerOps); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRasterizerDiscardEnableEXT(commandBuffer, rasterizerDiscardEnable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, shadingRate, combinerOps); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, rasterizerDiscardEnable); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceFaultInfoEXT( - VkDevice device, - VkDeviceFaultCountsEXT* pFaultCounts, - VkDeviceFaultInfoEXT* pFaultInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthBiasEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22113,35 +23225,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceFaultInfoEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pFaultCounts, pFaultInfo); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetDeviceFaultInfoEXT(device, pFaultCounts, pFaultInfo); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthBiasEnable); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceFaultInfoEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthBiasEnableEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pFaultCounts, omit_output_data); - EncodeStructPtr(encoder, pFaultInfo, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(depthBiasEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pFaultCounts, pFaultInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthBiasEnableEXT(commandBuffer, depthBiasEnable); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthBiasEnable); } -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireWinrtDisplayNV( - VkPhysicalDevice physicalDevice, - VkDisplayKHR display) +VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEXT( + VkCommandBuffer commandBuffer, + VkLogicOp logicOp) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22157,29 +23259,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkAcquireWinrtDisplayNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, display); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->AcquireWinrtDisplayNV(physicalDevice, display); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, logicOp); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAcquireWinrtDisplayNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetLogicOpEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeVulkanHandleValue(display); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(logicOp); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, display); - - return result; + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetLogicOpEXT(commandBuffer, logicOp); -} + CustomEncoderPostCall::Dispatch(manager, commandBuffer, logicOp); -VKAPI_ATTR VkResult VKAPI_CALL vkGetWinrtDisplayNV( - VkPhysicalDevice physicalDevice, - uint32_t deviceRelativeId, - VkDisplayKHR* pDisplay) +} + +VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 primitiveRestartEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22195,40 +23293,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetWinrtDisplayNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, deviceRelativeId, pDisplay); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetWinrtDisplayNV(physicalDevice, deviceRelativeId, pDisplay); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(physicalDevice, vulkan_wrappers::NoParentWrapper::kHandleValue, pDisplay, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, primitiveRestartEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkGetWinrtDisplayNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPrimitiveRestartEnableEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Value(deviceRelativeId); - encoder->EncodeVulkanHandlePtr(pDisplay, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, physicalDevice, pDisplay, nullptr); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(primitiveRestartEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, deviceRelativeId, pDisplay); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPrimitiveRestartEnableEXT(commandBuffer, primitiveRestartEnable); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, primitiveRestartEnable); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateScreenSurfaceQNX( VkInstance instance, - const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo, + const VkScreenSurfaceCreateInfoQNX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { @@ -22248,9 +23331,9 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); + CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateDirectFBSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface); + VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateScreenSurfaceQNX(instance, pCreateInfo, pAllocator, pSurface); if (result >= 0) { @@ -22261,7 +23344,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT( omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDirectFBSurfaceEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateScreenSurfaceQNX); if (encoder) { encoder->EncodeVulkanHandleValue(instance); @@ -22269,19 +23352,19 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT( EncodeStructPtr(encoder, pAllocator); encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); + CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); return result; } -VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceDirectFBPresentationSupportEXT( +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceScreenPresentationSupportQNX( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, - IDirectFB* dfb) + struct _screen_window* window) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22297,32 +23380,30 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceDirectFBPresentationSupportEXT shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, dfb); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, window); - VkBool32 result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceDirectFBPresentationSupportEXT(physicalDevice, queueFamilyIndex, dfb); + VkBool32 result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceScreenPresentationSupportQNX(physicalDevice, queueFamilyIndex, window); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceDirectFBPresentationSupportEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceScreenPresentationSupportQNX); if (encoder) { encoder->EncodeVulkanHandleValue(physicalDevice); encoder->EncodeUInt32Value(queueFamilyIndex); - encoder->EncodeVoidPtr(dfb); + encoder->EncodeVoidPtr(window); encoder->EncodeUInt32Value(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, dfb); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, window); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetVertexInputEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorWriteEnableEXT( VkCommandBuffer commandBuffer, - uint32_t vertexBindingDescriptionCount, - const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, - uint32_t vertexAttributeDescriptionCount, - const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions) + uint32_t attachmentCount, + const VkBool32* pColorWriteEnables) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22338,29 +23419,30 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetVertexInputEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, attachmentCount, pColorWriteEnables); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetVertexInputEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetColorWriteEnableEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(vertexBindingDescriptionCount); - EncodeStructArray(encoder, pVertexBindingDescriptions, vertexBindingDescriptionCount); - encoder->EncodeUInt32Value(vertexAttributeDescriptionCount); - EncodeStructArray(encoder, pVertexAttributeDescriptions, vertexAttributeDescriptionCount); + encoder->EncodeUInt32Value(attachmentCount); + encoder->EncodeUInt32Array(pColorWriteEnables, attachmentCount); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetVertexInputEXT(commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetColorWriteEnableEXT(commandBuffer, attachmentCount, pColorWriteEnables); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, attachmentCount, pColorWriteEnables); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandleFUCHSIA( - VkDevice device, - const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, - zx_handle_t* pZirconHandle) +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiEXT( + VkCommandBuffer commandBuffer, + uint32_t drawCount, + const VkMultiDrawInfoEXT* pVertexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + uint32_t stride) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22376,40 +23458,75 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandleFUCHSIA( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; + CustomEncoderPreCall::Dispatch(manager, commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride); - CustomEncoderPreCall::Dispatch(manager, device, pGetZirconHandleInfo, pZirconHandle); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawMultiEXT); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(drawCount); + EncodeStructArray(encoder, pVertexInfo, drawCount); + encoder->EncodeUInt32Value(instanceCount); + encoder->EncodeUInt32Value(firstInstance); + encoder->EncodeUInt32Value(stride); + manager->EndCommandApiCallCapture(commandBuffer); + } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetZirconHandleInfo, handle_unwrap_memory); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawMultiEXT(commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryZirconHandleFUCHSIA(device, pGetZirconHandleInfo_unwrapped, pZirconHandle); - if (result < 0) + CustomEncoderPostCall::Dispatch(manager, commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiIndexedEXT( + VkCommandBuffer commandBuffer, + uint32_t drawCount, + const VkMultiDrawIndexedInfoEXT* pIndexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + uint32_t stride, + const int32_t* pVertexOffset) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) { - omit_output_data = true; + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryZirconHandleFUCHSIA); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawMultiIndexedEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pGetZirconHandleInfo); - encoder->EncodeUInt32Ptr(pZirconHandle, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(drawCount); + EncodeStructArray(encoder, pIndexInfo, drawCount); + encoder->EncodeUInt32Value(instanceCount); + encoder->EncodeUInt32Value(firstInstance); + encoder->EncodeUInt32Value(stride); + encoder->EncodeInt32Ptr(pVertexOffset); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pGetZirconHandleInfo, pZirconHandle); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawMultiIndexedEXT(commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateMicromapEXT( VkDevice device, - VkExternalMemoryHandleTypeFlagBits handleType, - zx_handle_t zirconHandle, - VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties) + const VkMicromapCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkMicromapEXT* pMicromap) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22427,34 +23544,43 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, handleType, zirconHandle, pMemoryZirconHandleProperties); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pMicromap); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryZirconHandlePropertiesFUCHSIA(device, handleType, zirconHandle, pMemoryZirconHandleProperties); - if (result < 0) + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkMicromapCreateInfoEXT* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateMicromapEXT(device, pCreateInfo_unwrapped, pAllocator, pMicromap); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pMicromap, VulkanCaptureManager::GetUniqueId); + } + else { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryZirconHandlePropertiesFUCHSIA); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateMicromapEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeEnumValue(handleType); - encoder->EncodeUInt32Value(zirconHandle); - EncodeStructPtr(encoder, pMemoryZirconHandleProperties, omit_output_data); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pMicromap, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCreateApiCallCapture(result, device, pMicromap, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, handleType, zirconHandle, pMemoryZirconHandleProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pMicromap); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA( +VKAPI_ATTR void VKAPI_CALL vkDestroyMicromapEXT( VkDevice device, - const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo) + VkMicromapEXT micromap, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22470,32 +23596,70 @@ VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pImportSemaphoreZirconHandleInfo); + CustomEncoderPreCall::Dispatch(manager, device, micromap, pAllocator); - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pImportSemaphoreZirconHandleInfo, handle_unwrap_memory); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyMicromapEXT); + if (encoder) + { + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(micromap); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(micromap); + } - VkResult result = vulkan_wrappers::GetDeviceTable(device)->ImportSemaphoreZirconHandleFUCHSIA(device, pImportSemaphoreZirconHandleInfo_unwrapped); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyMicromapEXT(device, micromap, pAllocator); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkImportSemaphoreZirconHandleFUCHSIA); + CustomEncoderPostCall::Dispatch(manager, device, micromap, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(micromap); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdBuildMicromapsEXT( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkMicromapBuildInfoEXT* pInfos) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, infoCount, pInfos); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBuildMicromapsEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pImportSemaphoreZirconHandleInfo); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(infoCount); + EncodeStructArray(encoder, pInfos, infoCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBuildMicromapsEXTHandles, infoCount, pInfos); } - CustomEncoderPostCall::Dispatch(manager, result, device, pImportSemaphoreZirconHandleInfo); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkMicromapBuildInfoEXT* pInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pInfos, infoCount, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBuildMicromapsEXT(commandBuffer, infoCount, pInfos_unwrapped); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, infoCount, pInfos); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA( +VKAPI_ATTR VkResult VKAPI_CALL vkBuildMicromapsEXT( VkDevice device, - const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, - zx_handle_t* pZirconHandle) + VkDeferredOperationKHR deferredOperation, + uint32_t infoCount, + const VkMicromapBuildInfoEXT* pInfos) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22511,39 +23675,34 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pGetZirconHandleInfo, pZirconHandle); + CustomEncoderPreCall::Dispatch(manager, device, deferredOperation, infoCount, pInfos); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pGetZirconHandleInfo, handle_unwrap_memory); + const VkMicromapBuildInfoEXT* pInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pInfos, infoCount, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetSemaphoreZirconHandleFUCHSIA(device, pGetZirconHandleInfo_unwrapped, pZirconHandle); - if (result < 0) - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->BuildMicromapsEXT(device, deferredOperation, infoCount, pInfos_unwrapped); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetSemaphoreZirconHandleFUCHSIA); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBuildMicromapsEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pGetZirconHandleInfo); - encoder->EncodeUInt32Ptr(pZirconHandle, omit_output_data); + encoder->EncodeVulkanHandleValue(deferredOperation); + encoder->EncodeUInt32Value(infoCount); + EncodeStructArray(encoder, pInfos, infoCount); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pGetZirconHandleInfo, pZirconHandle); + CustomEncoderPostCall::Dispatch(manager, result, device, deferredOperation, infoCount, pInfos); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdBindInvocationMaskHUAWEI( - VkCommandBuffer commandBuffer, - VkImageView imageView, - VkImageLayout imageLayout) +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMicromapEXT( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMicromapInfoEXT* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22559,27 +23718,33 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindInvocationMaskHUAWEI( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, imageView, imageLayout); + CustomEncoderPreCall::Dispatch(manager, device, deferredOperation, pInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindInvocationMaskHUAWEI); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyMicromapInfoEXT* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyMicromapEXT(device, deferredOperation, pInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyMicromapEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(imageView); - encoder->EncodeEnumValue(imageLayout); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindInvocationMaskHUAWEIHandles, imageView); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(deferredOperation); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindInvocationMaskHUAWEI(commandBuffer, imageView, imageLayout); + CustomEncoderPostCall::Dispatch(manager, result, device, deferredOperation, pInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, imageView, imageLayout); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryRemoteAddressNV( +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMicromapToMemoryEXT( VkDevice device, - const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo, - VkRemoteAddressNV* pAddress) + VkDeferredOperationKHR deferredOperation, + const VkCopyMicromapToMemoryInfoEXT* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22595,38 +23760,33 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryRemoteAddressNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pMemoryGetRemoteAddressInfo, pAddress); + CustomEncoderPreCall::Dispatch(manager, device, deferredOperation, pInfo); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pMemoryGetRemoteAddressInfo, handle_unwrap_memory); + const VkCopyMicromapToMemoryInfoEXT* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetMemoryRemoteAddressNV(device, pMemoryGetRemoteAddressInfo_unwrapped, pAddress); - if (result < 0) - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyMicromapToMemoryEXT(device, deferredOperation, pInfo_unwrapped); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMemoryRemoteAddressNV); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyMicromapToMemoryEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pMemoryGetRemoteAddressInfo); - encoder->EncodeVoidPtrPtr(pAddress, omit_output_data); + encoder->EncodeVulkanHandleValue(deferredOperation); + EncodeStructPtr(encoder, pInfo); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pMemoryGetRemoteAddressInfo, pAddress); + CustomEncoderPostCall::Dispatch(manager, result, device, deferredOperation, pInfo); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetPatchControlPointsEXT( - VkCommandBuffer commandBuffer, - uint32_t patchControlPoints) +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToMicromapEXT( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMemoryToMicromapInfoEXT* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22642,25 +23802,37 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetPatchControlPointsEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, patchControlPoints); + CustomEncoderPreCall::Dispatch(manager, device, deferredOperation, pInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPatchControlPointsEXT); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyMemoryToMicromapInfoEXT* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyMemoryToMicromapEXT(device, deferredOperation, pInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyMemoryToMicromapEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(patchControlPoints); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(deferredOperation); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPatchControlPointsEXT(commandBuffer, patchControlPoints); + CustomEncoderPostCall::Dispatch(manager, result, device, deferredOperation, pInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, patchControlPoints); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 rasterizerDiscardEnable) +VKAPI_ATTR VkResult VKAPI_CALL vkWriteMicromapsPropertiesEXT( + VkDevice device, + uint32_t micromapCount, + const VkMicromapEXT* pMicromaps, + VkQueryType queryType, + size_t dataSize, + void* pData, + size_t stride) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22676,59 +23848,39 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, rasterizerDiscardEnable); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRasterizerDiscardEnableEXT); - if (encoder) - { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(rasterizerDiscardEnable); - manager->EndCommandApiCallCapture(commandBuffer); - } - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRasterizerDiscardEnableEXT(commandBuffer, rasterizerDiscardEnable); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, rasterizerDiscardEnable); + bool omit_output_data = false; -} + CustomEncoderPreCall::Dispatch(manager, device, micromapCount, pMicromaps, queryType, dataSize, pData, stride); -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 depthBiasEnable) -{ - VulkanCaptureManager* manager = VulkanCaptureManager::Get(); - GFXRECON_ASSERT(manager != nullptr); - auto force_command_serialization = manager->GetForceCommandSerialization(); - std::shared_lock shared_api_call_lock; - std::unique_lock exclusive_api_call_lock; - if (force_command_serialization) - { - exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); - } - else + VkResult result = vulkan_wrappers::GetDeviceTable(device)->WriteMicromapsPropertiesEXT(device, micromapCount, pMicromaps, queryType, dataSize, pData, stride); + if (result < 0) { - shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + omit_output_data = true; } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthBiasEnable); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthBiasEnableEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkWriteMicromapsPropertiesEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(depthBiasEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeUInt32Value(micromapCount); + encoder->EncodeVulkanHandleArray(pMicromaps, micromapCount); + encoder->EncodeEnumValue(queryType); + encoder->EncodeSizeTValue(dataSize); + encoder->EncodeVoidArray(pData, dataSize, omit_output_data); + encoder->EncodeSizeTValue(stride); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthBiasEnableEXT(commandBuffer, depthBiasEnable); + CustomEncoderPostCall::Dispatch(manager, result, device, micromapCount, pMicromaps, queryType, dataSize, pData, stride); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthBiasEnable); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMicromapEXT( VkCommandBuffer commandBuffer, - VkLogicOp logicOp) + const VkCopyMicromapInfoEXT* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22744,25 +23896,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, logicOp); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetLogicOpEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyMicromapEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(logicOp); - manager->EndCommandApiCallCapture(commandBuffer); + EncodeStructPtr(encoder, pInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyMicromapEXTHandles, pInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetLogicOpEXT(commandBuffer, logicOp); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyMicromapInfoEXT* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, logicOp); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyMicromapEXT(commandBuffer, pInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnableEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMicromapToMemoryEXT( VkCommandBuffer commandBuffer, - VkBool32 primitiveRestartEnable) + const VkCopyMicromapToMemoryInfoEXT* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22778,27 +23933,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, primitiveRestartEnable); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPrimitiveRestartEnableEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyMicromapToMemoryEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(primitiveRestartEnable); - manager->EndCommandApiCallCapture(commandBuffer); + EncodeStructPtr(encoder, pInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyMicromapToMemoryEXTHandles, pInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPrimitiveRestartEnableEXT(commandBuffer, primitiveRestartEnable); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyMicromapToMemoryInfoEXT* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, primitiveRestartEnable); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyMicromapToMemoryEXT(commandBuffer, pInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateScreenSurfaceQNX( - VkInstance instance, - const VkScreenSurfaceCreateInfoQNX* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface) +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToMicromapEXT( + VkCommandBuffer commandBuffer, + const VkCopyMemoryToMicromapInfoEXT* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22814,42 +23970,32 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateScreenSurfaceQNX( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, instance, pCreateInfo, pAllocator, pSurface); - - VkResult result = vulkan_wrappers::GetInstanceTable(instance)->CreateScreenSurfaceQNX(instance, pCreateInfo, pAllocator, pSurface); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(instance, vulkan_wrappers::NoParentWrapper::kHandleValue, pSurface, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateScreenSurfaceQNX); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyMemoryToMicromapEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(instance); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSurface, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, instance, pSurface, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyMemoryToMicromapEXTHandles, pInfo); } - CustomEncoderPostCall::Dispatch(manager, result, instance, pCreateInfo, pAllocator, pSurface); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkCopyMemoryToMicromapInfoEXT* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyMemoryToMicromapEXT(commandBuffer, pInfo_unwrapped); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pInfo); } -VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceScreenPresentationSupportQNX( - VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - struct _screen_window* window) +VKAPI_ATTR void VKAPI_CALL vkCmdWriteMicromapsPropertiesEXT( + VkCommandBuffer commandBuffer, + uint32_t micromapCount, + const VkMicromapEXT* pMicromaps, + VkQueryType queryType, + VkQueryPool queryPool, + uint32_t firstQuery) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22865,30 +24011,30 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceScreenPresentationSupportQNX( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, window); - - VkBool32 result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceScreenPresentationSupportQNX(physicalDevice, queueFamilyIndex, window); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, micromapCount, pMicromaps, queryType, queryPool, firstQuery); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceScreenPresentationSupportQNX); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWriteMicromapsPropertiesEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Value(queueFamilyIndex); - encoder->EncodeVoidPtr(window); - encoder->EncodeUInt32Value(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(micromapCount); + encoder->EncodeVulkanHandleArray(pMicromaps, micromapCount); + encoder->EncodeEnumValue(queryType); + encoder->EncodeVulkanHandleValue(queryPool); + encoder->EncodeUInt32Value(firstQuery); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWriteMicromapsPropertiesEXTHandles, micromapCount, pMicromaps, queryPool); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, window); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWriteMicromapsPropertiesEXT(commandBuffer, micromapCount, pMicromaps, queryType, queryPool, firstQuery); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, micromapCount, pMicromaps, queryType, queryPool, firstQuery); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetColorWriteEnableEXT( - VkCommandBuffer commandBuffer, - uint32_t attachmentCount, - const VkBool32* pColorWriteEnables) +VKAPI_ATTR void VKAPI_CALL vkGetDeviceMicromapCompatibilityEXT( + VkDevice device, + const VkMicromapVersionInfoEXT* pVersionInfo, + VkAccelerationStructureCompatibilityKHR* pCompatibility) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22904,30 +24050,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetColorWrite shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, attachmentCount, pColorWriteEnables); + CustomEncoderPreCall::Dispatch(manager, device, pVersionInfo, pCompatibility); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetColorWriteEnableEXT); + vulkan_wrappers::GetDeviceTable(device)->GetDeviceMicromapCompatibilityEXT(device, pVersionInfo, pCompatibility); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceMicromapCompatibilityEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(attachmentCount); - encoder->EncodeUInt32Array(pColorWriteEnables, attachmentCount); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pVersionInfo); + encoder->EncodeEnumPtr(pCompatibility); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetColorWriteEnableEXT(commandBuffer, attachmentCount, pColorWriteEnables); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, attachmentCount, pColorWriteEnables); + CustomEncoderPostCall::Dispatch(manager, device, pVersionInfo, pCompatibility); } -VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiEXT( - VkCommandBuffer commandBuffer, - uint32_t drawCount, - const VkMultiDrawInfoEXT* pVertexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride) +VKAPI_ATTR void VKAPI_CALL vkGetMicromapBuildSizesEXT( + VkDevice device, + VkAccelerationStructureBuildTypeKHR buildType, + const VkMicromapBuildInfoEXT* pBuildInfo, + VkMicromapBuildSizesInfoEXT* pSizeInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22943,34 +24087,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride); + CustomEncoderPreCall::Dispatch(manager, device, buildType, pBuildInfo, pSizeInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawMultiEXT); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkMicromapBuildInfoEXT* pBuildInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBuildInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(device)->GetMicromapBuildSizesEXT(device, buildType, pBuildInfo_unwrapped, pSizeInfo); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMicromapBuildSizesEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(drawCount); - EncodeStructArray(encoder, pVertexInfo, drawCount); - encoder->EncodeUInt32Value(instanceCount); - encoder->EncodeUInt32Value(firstInstance); - encoder->EncodeUInt32Value(stride); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeEnumValue(buildType); + EncodeStructPtr(encoder, pBuildInfo); + EncodeStructPtr(encoder, pSizeInfo); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawMultiEXT(commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride); + CustomEncoderPostCall::Dispatch(manager, device, buildType, pBuildInfo, pSizeInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiIndexedEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdDrawClusterHUAWEI( VkCommandBuffer commandBuffer, - uint32_t drawCount, - const VkMultiDrawIndexedInfoEXT* pIndexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride, - const int32_t* pVertexOffset) + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -22986,32 +24128,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiIndexedEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, groupCountX, groupCountY, groupCountZ); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawMultiIndexedEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawClusterHUAWEI); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(drawCount); - EncodeStructArray(encoder, pIndexInfo, drawCount); - encoder->EncodeUInt32Value(instanceCount); - encoder->EncodeUInt32Value(firstInstance); - encoder->EncodeUInt32Value(stride); - encoder->EncodeInt32Ptr(pVertexOffset); + encoder->EncodeUInt32Value(groupCountX); + encoder->EncodeUInt32Value(groupCountY); + encoder->EncodeUInt32Value(groupCountZ); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawMultiIndexedEXT(commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawClusterHUAWEI(commandBuffer, groupCountX, groupCountY, groupCountZ); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, groupCountX, groupCountY, groupCountZ); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateMicromapEXT( - VkDevice device, - const VkMicromapCreateInfoEXT* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkMicromapEXT* pMicromap) +VKAPI_ATTR void VKAPI_CALL vkCmdDrawClusterIndirectHUAWEI( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23027,45 +24165,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateMicromapEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pMicromap); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkMicromapCreateInfoEXT* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateMicromapEXT(device, pCreateInfo_unwrapped, pAllocator, pMicromap); - - if (result >= 0) - { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pMicromap, VulkanCaptureManager::GetUniqueId); - } - else - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateMicromapEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawClusterIndirectHUAWEI); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pMicromap, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pMicromap, pCreateInfo); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(buffer); + encoder->EncodeUInt64Value(offset); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawClusterIndirectHUAWEIHandles, buffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pMicromap); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawClusterIndirectHUAWEI(commandBuffer, buffer, offset); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset); } -VKAPI_ATTR void VKAPI_CALL vkDestroyMicromapEXT( +VKAPI_ATTR void VKAPI_CALL vkSetDeviceMemoryPriorityEXT( VkDevice device, - VkMicromapEXT micromap, - const VkAllocationCallbacks* pAllocator) + VkDeviceMemory memory, + float priority) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23081,30 +24201,27 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyMicromapEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, micromap, pAllocator); + CustomEncoderPreCall::Dispatch(manager, device, memory, priority); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyMicromapEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetDeviceMemoryPriorityEXT); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(micromap); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(micromap); + encoder->EncodeVulkanHandleValue(memory); + encoder->EncodeFloatValue(priority); + manager->EndApiCallCapture(); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyMicromapEXT(device, micromap, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, micromap, pAllocator); + vulkan_wrappers::GetDeviceTable(device)->SetDeviceMemoryPriorityEXT(device, memory, priority); - vulkan_wrappers::DestroyWrappedHandle(micromap); + CustomEncoderPostCall::Dispatch(manager, device, memory, priority); } -VKAPI_ATTR void VKAPI_CALL vkCmdBuildMicromapsEXT( - VkCommandBuffer commandBuffer, - uint32_t infoCount, - const VkMicromapBuildInfoEXT* pInfos) +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutHostMappingInfoVALVE( + VkDevice device, + const VkDescriptorSetBindingReferenceVALVE* pBindingReference, + VkDescriptorSetLayoutHostMappingInfoVALVE* pHostMapping) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23120,31 +24237,30 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBuildMicromapsEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, infoCount, pInfos); + CustomEncoderPreCall::Dispatch(manager, device, pBindingReference, pHostMapping); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBuildMicromapsEXT); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDescriptorSetBindingReferenceVALVE* pBindingReference_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBindingReference, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(device)->GetDescriptorSetLayoutHostMappingInfoVALVE(device, pBindingReference_unwrapped, pHostMapping); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDescriptorSetLayoutHostMappingInfoVALVE); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(infoCount); - EncodeStructArray(encoder, pInfos, infoCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBuildMicromapsEXTHandles, infoCount, pInfos); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pBindingReference); + EncodeStructPtr(encoder, pHostMapping); + manager->EndApiCallCapture(); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkMicromapBuildInfoEXT* pInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pInfos, infoCount, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBuildMicromapsEXT(commandBuffer, infoCount, pInfos_unwrapped); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, infoCount, pInfos); + CustomEncoderPostCall::Dispatch(manager, device, pBindingReference, pHostMapping); } -VKAPI_ATTR VkResult VKAPI_CALL vkBuildMicromapsEXT( +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetHostMappingVALVE( VkDevice device, - VkDeferredOperationKHR deferredOperation, - uint32_t infoCount, - const VkMicromapBuildInfoEXT* pInfos) + VkDescriptorSet descriptorSet, + void** ppData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23160,34 +24276,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkBuildMicromapsEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, deferredOperation, infoCount, pInfos); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkMicromapBuildInfoEXT* pInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pInfos, infoCount, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, device, descriptorSet, ppData); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->BuildMicromapsEXT(device, deferredOperation, infoCount, pInfos_unwrapped); + vulkan_wrappers::GetDeviceTable(device)->GetDescriptorSetHostMappingVALVE(device, descriptorSet, ppData); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBuildMicromapsEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDescriptorSetHostMappingVALVE); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(deferredOperation); - encoder->EncodeUInt32Value(infoCount); - EncodeStructArray(encoder, pInfos, infoCount); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(descriptorSet); + encoder->EncodeVoidPtrPtr(ppData); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, deferredOperation, infoCount, pInfos); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, descriptorSet, ppData); } -VKAPI_ATTR VkResult VKAPI_CALL vkCopyMicromapEXT( +VKAPI_ATTR void VKAPI_CALL vkGetPipelineIndirectMemoryRequirementsNV( VkDevice device, - VkDeferredOperationKHR deferredOperation, - const VkCopyMicromapInfoEXT* pInfo) + const VkComputePipelineCreateInfo* pCreateInfo, + VkMemoryRequirements2* pMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23203,33 +24312,30 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCopyMicromapEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, deferredOperation, pInfo); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pMemoryRequirements); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyMicromapInfoEXT* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + const VkComputePipelineCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyMicromapEXT(device, deferredOperation, pInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(device)->GetPipelineIndirectMemoryRequirementsNV(device, pCreateInfo_unwrapped, pMemoryRequirements); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyMicromapEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPipelineIndirectMemoryRequirementsNV); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(deferredOperation); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeEnumValue(result); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pMemoryRequirements); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, deferredOperation, pInfo); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, pCreateInfo, pMemoryRequirements); } -VKAPI_ATTR VkResult VKAPI_CALL vkCopyMicromapToMemoryEXT( - VkDevice device, - VkDeferredOperationKHR deferredOperation, - const VkCopyMicromapToMemoryInfoEXT* pInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdUpdatePipelineIndirectBufferNV( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23245,33 +24351,26 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCopyMicromapToMemoryEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, deferredOperation, pInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyMicromapToMemoryInfoEXT* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyMicromapToMemoryEXT(device, deferredOperation, pInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineBindPoint, pipeline); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyMicromapToMemoryEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdUpdatePipelineIndirectBufferNV); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(deferredOperation); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(pipelineBindPoint); + encoder->EncodeVulkanHandleValue(pipeline); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdUpdatePipelineIndirectBufferNVHandles, pipeline); } - CustomEncoderPostCall::Dispatch(manager, result, device, deferredOperation, pInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdUpdatePipelineIndirectBufferNV(commandBuffer, pipelineBindPoint, pipeline); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineBindPoint, pipeline); } -VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToMicromapEXT( +VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetPipelineIndirectDeviceAddressNV( VkDevice device, - VkDeferredOperationKHR deferredOperation, - const VkCopyMemoryToMicromapInfoEXT* pInfo) + const VkPipelineIndirectDeviceAddressInfoNV* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23287,37 +24386,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToMicromapEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, deferredOperation, pInfo); + CustomEncoderPreCall::Dispatch(manager, device, pInfo); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyMemoryToMicromapInfoEXT* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); + const VkPipelineIndirectDeviceAddressInfoNV* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CopyMemoryToMicromapEXT(device, deferredOperation, pInfo_unwrapped); + VkDeviceAddress result = vulkan_wrappers::GetDeviceTable(device)->GetPipelineIndirectDeviceAddressNV(device, pInfo_unwrapped); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkCopyMemoryToMicromapEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPipelineIndirectDeviceAddressNV); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(deferredOperation); EncodeStructPtr(encoder, pInfo); - encoder->EncodeEnumValue(result); + encoder->EncodeUInt64Value(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, deferredOperation, pInfo); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkWriteMicromapsPropertiesEXT( - VkDevice device, - uint32_t micromapCount, - const VkMicromapEXT* pMicromaps, - VkQueryType queryType, - size_t dataSize, - void* pData, - size_t stride) +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClampEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthClampEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23333,39 +24426,25 @@ VKAPI_ATTR VkResult VKAPI_CALL vkWriteMicromapsPropertiesEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, micromapCount, pMicromaps, queryType, dataSize, pData, stride); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->WriteMicromapsPropertiesEXT(device, micromapCount, pMicromaps, queryType, dataSize, pData, stride); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthClampEnable); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkWriteMicromapsPropertiesEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthClampEnableEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeUInt32Value(micromapCount); - encoder->EncodeVulkanHandleArray(pMicromaps, micromapCount); - encoder->EncodeEnumValue(queryType); - encoder->EncodeSizeTValue(dataSize); - encoder->EncodeVoidArray(pData, dataSize, omit_output_data); - encoder->EncodeSizeTValue(stride); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(depthClampEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, micromapCount, pMicromaps, queryType, dataSize, pData, stride); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthClampEnableEXT(commandBuffer, depthClampEnable); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthClampEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyMicromapEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetPolygonModeEXT( VkCommandBuffer commandBuffer, - const VkCopyMicromapInfoEXT* pInfo) + VkPolygonMode polygonMode) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23381,28 +24460,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyMicromapEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, polygonMode); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyMicromapEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPolygonModeEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyMicromapEXTHandles, pInfo); + encoder->EncodeEnumValue(polygonMode); + manager->EndCommandApiCallCapture(commandBuffer); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyMicromapInfoEXT* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyMicromapEXT(commandBuffer, pInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPolygonModeEXT(commandBuffer, polygonMode); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, polygonMode); } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyMicromapToMemoryEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizationSamplesEXT( VkCommandBuffer commandBuffer, - const VkCopyMicromapToMemoryInfoEXT* pInfo) + VkSampleCountFlagBits rasterizationSamples) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23418,28 +24494,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyMicromapToMemoryEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, rasterizationSamples); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyMicromapToMemoryEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRasterizationSamplesEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyMicromapToMemoryEXTHandles, pInfo); + encoder->EncodeEnumValue(rasterizationSamples); + manager->EndCommandApiCallCapture(commandBuffer); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyMicromapToMemoryInfoEXT* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyMicromapToMemoryEXT(commandBuffer, pInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRasterizationSamplesEXT(commandBuffer, rasterizationSamples); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, rasterizationSamples); } -VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToMicromapEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleMaskEXT( VkCommandBuffer commandBuffer, - const VkCopyMemoryToMicromapInfoEXT* pInfo) + VkSampleCountFlagBits samples, + const VkSampleMask* pSampleMask) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23455,32 +24529,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToMicromapEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, samples, pSampleMask); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdCopyMemoryToMicromapEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetSampleMaskEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdCopyMemoryToMicromapEXTHandles, pInfo); + encoder->EncodeEnumValue(samples); + encoder->EncodeUInt32Array(pSampleMask, (samples + 31) / 32); + manager->EndCommandApiCallCapture(commandBuffer); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkCopyMemoryToMicromapInfoEXT* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdCopyMemoryToMicromapEXT(commandBuffer, pInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetSampleMaskEXT(commandBuffer, samples, pSampleMask); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, samples, pSampleMask); } -VKAPI_ATTR void VKAPI_CALL vkCmdWriteMicromapsPropertiesEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetAlphaToCoverageEnableEXT( VkCommandBuffer commandBuffer, - uint32_t micromapCount, - const VkMicromapEXT* pMicromaps, - VkQueryType queryType, - VkQueryPool queryPool, - uint32_t firstQuery) + VkBool32 alphaToCoverageEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23496,30 +24564,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdWriteMicromapsPropertiesEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, micromapCount, pMicromaps, queryType, queryPool, firstQuery); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, alphaToCoverageEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdWriteMicromapsPropertiesEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetAlphaToCoverageEnableEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(micromapCount); - encoder->EncodeVulkanHandleArray(pMicromaps, micromapCount); - encoder->EncodeEnumValue(queryType); - encoder->EncodeVulkanHandleValue(queryPool); - encoder->EncodeUInt32Value(firstQuery); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdWriteMicromapsPropertiesEXTHandles, micromapCount, pMicromaps, queryPool); + encoder->EncodeUInt32Value(alphaToCoverageEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdWriteMicromapsPropertiesEXT(commandBuffer, micromapCount, pMicromaps, queryType, queryPool, firstQuery); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetAlphaToCoverageEnableEXT(commandBuffer, alphaToCoverageEnable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, micromapCount, pMicromaps, queryType, queryPool, firstQuery); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, alphaToCoverageEnable); } -VKAPI_ATTR void VKAPI_CALL vkGetDeviceMicromapCompatibilityEXT( - VkDevice device, - const VkMicromapVersionInfoEXT* pVersionInfo, - VkAccelerationStructureCompatibilityKHR* pCompatibility) +VKAPI_ATTR void VKAPI_CALL vkCmdSetAlphaToOneEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 alphaToOneEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23535,28 +24598,25 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceMicromapCompatibilityEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pVersionInfo, pCompatibility); - - vulkan_wrappers::GetDeviceTable(device)->GetDeviceMicromapCompatibilityEXT(device, pVersionInfo, pCompatibility); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, alphaToOneEnable); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDeviceMicromapCompatibilityEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetAlphaToOneEnableEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pVersionInfo); - encoder->EncodeEnumPtr(pCompatibility); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(alphaToOneEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, device, pVersionInfo, pCompatibility); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetAlphaToOneEnableEXT(commandBuffer, alphaToOneEnable); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, alphaToOneEnable); } -VKAPI_ATTR void VKAPI_CALL vkGetMicromapBuildSizesEXT( - VkDevice device, - VkAccelerationStructureBuildTypeKHR buildType, - const VkMicromapBuildInfoEXT* pBuildInfo, - VkMicromapBuildSizesInfoEXT* pSizeInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 logicOpEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23572,32 +24632,27 @@ VKAPI_ATTR void VKAPI_CALL vkGetMicromapBuildSizesEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, buildType, pBuildInfo, pSizeInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkMicromapBuildInfoEXT* pBuildInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBuildInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(device)->GetMicromapBuildSizesEXT(device, buildType, pBuildInfo_unwrapped, pSizeInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, logicOpEnable); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetMicromapBuildSizesEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetLogicOpEnableEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeEnumValue(buildType); - EncodeStructPtr(encoder, pBuildInfo); - EncodeStructPtr(encoder, pSizeInfo); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(logicOpEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, device, buildType, pBuildInfo, pSizeInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetLogicOpEnableEXT(commandBuffer, logicOpEnable); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, logicOpEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdDrawClusterHUAWEI( +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendEnableEXT( VkCommandBuffer commandBuffer, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkBool32* pColorBlendEnables) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23613,28 +24668,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawClusterHUAWEI( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, groupCountX, groupCountY, groupCountZ); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorBlendEnables); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawClusterHUAWEI); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetColorBlendEnableEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(groupCountX); - encoder->EncodeUInt32Value(groupCountY); - encoder->EncodeUInt32Value(groupCountZ); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(firstAttachment); + encoder->EncodeUInt32Value(attachmentCount); + encoder->EncodeUInt32Array(pColorBlendEnables, attachmentCount); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawClusterHUAWEI(commandBuffer, groupCountX, groupCountY, groupCountZ); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetColorBlendEnableEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendEnables); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, groupCountX, groupCountY, groupCountZ); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorBlendEnables); } -VKAPI_ATTR void VKAPI_CALL vkCmdDrawClusterIndirectHUAWEI( +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendEquationEXT( VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset) + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorBlendEquationEXT* pColorBlendEquations) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23650,27 +24706,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawClusterIndirectHUAWEI( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, buffer, offset); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorBlendEquations); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDrawClusterIndirectHUAWEI); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetColorBlendEquationEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(buffer); - encoder->EncodeUInt64Value(offset); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDrawClusterIndirectHUAWEIHandles, buffer); + encoder->EncodeUInt32Value(firstAttachment); + encoder->EncodeUInt32Value(attachmentCount); + EncodeStructArray(encoder, pColorBlendEquations, attachmentCount); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDrawClusterIndirectHUAWEI(commandBuffer, buffer, offset); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetColorBlendEquationEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendEquations); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, buffer, offset); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorBlendEquations); } -VKAPI_ATTR void VKAPI_CALL vkSetDeviceMemoryPriorityEXT( - VkDevice device, - VkDeviceMemory memory, - float priority) +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorWriteMaskEXT( + VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorComponentFlags* pColorWriteMasks) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23686,27 +24744,27 @@ VKAPI_ATTR void VKAPI_CALL vkSetDeviceMemoryPriorityEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, memory, priority); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorWriteMasks); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetDeviceMemoryPriorityEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetColorWriteMaskEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(memory); - encoder->EncodeFloatValue(priority); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(firstAttachment); + encoder->EncodeUInt32Value(attachmentCount); + encoder->EncodeFlagsArray(pColorWriteMasks, attachmentCount); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(device)->SetDeviceMemoryPriorityEXT(device, memory, priority); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetColorWriteMaskEXT(commandBuffer, firstAttachment, attachmentCount, pColorWriteMasks); - CustomEncoderPostCall::Dispatch(manager, device, memory, priority); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorWriteMasks); } -VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutHostMappingInfoVALVE( - VkDevice device, - const VkDescriptorSetBindingReferenceVALVE* pBindingReference, - VkDescriptorSetLayoutHostMappingInfoVALVE* pHostMapping) +VKAPI_ATTR void VKAPI_CALL vkCmdSetTessellationDomainOriginEXT( + VkCommandBuffer commandBuffer, + VkTessellationDomainOrigin domainOrigin) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23722,30 +24780,25 @@ VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutHostMappingInfoVALVE( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pBindingReference, pHostMapping); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkDescriptorSetBindingReferenceVALVE* pBindingReference_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pBindingReference, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(device)->GetDescriptorSetLayoutHostMappingInfoVALVE(device, pBindingReference_unwrapped, pHostMapping); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, domainOrigin); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDescriptorSetLayoutHostMappingInfoVALVE); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetTessellationDomainOriginEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pBindingReference); - EncodeStructPtr(encoder, pHostMapping); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(domainOrigin); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, device, pBindingReference, pHostMapping); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetTessellationDomainOriginEXT(commandBuffer, domainOrigin); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, domainOrigin); } -VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetHostMappingVALVE( - VkDevice device, - VkDescriptorSet descriptorSet, - void** ppData) +VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizationStreamEXT( + VkCommandBuffer commandBuffer, + uint32_t rasterizationStream) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23761,27 +24814,25 @@ VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetHostMappingVALVE( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, descriptorSet, ppData); - - vulkan_wrappers::GetDeviceTable(device)->GetDescriptorSetHostMappingVALVE(device, descriptorSet, ppData); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, rasterizationStream); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDescriptorSetHostMappingVALVE); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRasterizationStreamEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(descriptorSet); - encoder->EncodeVoidPtrPtr(ppData); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(rasterizationStream); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, device, descriptorSet, ppData); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRasterizationStreamEXT(commandBuffer, rasterizationStream); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, rasterizationStream); } -VKAPI_ATTR void VKAPI_CALL vkGetPipelineIndirectMemoryRequirementsNV( - VkDevice device, - const VkComputePipelineCreateInfo* pCreateInfo, - VkMemoryRequirements2* pMemoryRequirements) +VKAPI_ATTR void VKAPI_CALL vkCmdSetConservativeRasterizationModeEXT( + VkCommandBuffer commandBuffer, + VkConservativeRasterizationModeEXT conservativeRasterizationMode) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23797,30 +24848,25 @@ VKAPI_ATTR void VKAPI_CALL vkGetPipelineIndirectMemoryRequirementsNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pMemoryRequirements); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkComputePipelineCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(device)->GetPipelineIndirectMemoryRequirementsNV(device, pCreateInfo_unwrapped, pMemoryRequirements); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, conservativeRasterizationMode); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPipelineIndirectMemoryRequirementsNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetConservativeRasterizationModeEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pMemoryRequirements); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeEnumValue(conservativeRasterizationMode); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, device, pCreateInfo, pMemoryRequirements); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetConservativeRasterizationModeEXT(commandBuffer, conservativeRasterizationMode); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, conservativeRasterizationMode); } -VKAPI_ATTR void VKAPI_CALL vkCmdUpdatePipelineIndirectBufferNV( +VKAPI_ATTR void VKAPI_CALL vkCmdSetExtraPrimitiveOverestimationSizeEXT( VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipeline pipeline) + float extraPrimitiveOverestimationSize) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23836,26 +24882,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdUpdatePipelineIndirectBufferNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pipelineBindPoint, pipeline); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, extraPrimitiveOverestimationSize); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdUpdatePipelineIndirectBufferNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetExtraPrimitiveOverestimationSizeEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(pipelineBindPoint); - encoder->EncodeVulkanHandleValue(pipeline); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdUpdatePipelineIndirectBufferNVHandles, pipeline); + encoder->EncodeFloatValue(extraPrimitiveOverestimationSize); + manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdUpdatePipelineIndirectBufferNV(commandBuffer, pipelineBindPoint, pipeline); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetExtraPrimitiveOverestimationSizeEXT(commandBuffer, extraPrimitiveOverestimationSize); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pipelineBindPoint, pipeline); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, extraPrimitiveOverestimationSize); } -VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetPipelineIndirectDeviceAddressNV( - VkDevice device, - const VkPipelineIndirectDeviceAddressInfoNV* pInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClipEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthClipEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23871,31 +24916,25 @@ VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetPipelineIndirectDeviceAddressNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo); - - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkPipelineIndirectDeviceAddressInfoNV* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - - VkDeviceAddress result = vulkan_wrappers::GetDeviceTable(device)->GetPipelineIndirectDeviceAddressNV(device, pInfo_unwrapped); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthClipEnable); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPipelineIndirectDeviceAddressNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthClipEnableEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pInfo); - encoder->EncodeUInt64Value(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(depthClipEnable); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthClipEnableEXT(commandBuffer, depthClipEnable); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthClipEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClampEnableEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEnableEXT( VkCommandBuffer commandBuffer, - VkBool32 depthClampEnable) + VkBool32 sampleLocationsEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23911,25 +24950,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClampEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthClampEnable); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, sampleLocationsEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthClampEnableEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetSampleLocationsEnableEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(depthClampEnable); + encoder->EncodeUInt32Value(sampleLocationsEnable); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthClampEnableEXT(commandBuffer, depthClampEnable); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetSampleLocationsEnableEXT(commandBuffer, sampleLocationsEnable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthClampEnable); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, sampleLocationsEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetPolygonModeEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendAdvancedEXT( VkCommandBuffer commandBuffer, - VkPolygonMode polygonMode) + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorBlendAdvancedEXT* pColorBlendAdvanced) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23945,25 +24986,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetPolygonModeEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, polygonMode); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorBlendAdvanced); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetPolygonModeEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetColorBlendAdvancedEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(polygonMode); + encoder->EncodeUInt32Value(firstAttachment); + encoder->EncodeUInt32Value(attachmentCount); + EncodeStructArray(encoder, pColorBlendAdvanced, attachmentCount); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetPolygonModeEXT(commandBuffer, polygonMode); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetColorBlendAdvancedEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendAdvanced); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, polygonMode); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorBlendAdvanced); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizationSamplesEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetProvokingVertexModeEXT( VkCommandBuffer commandBuffer, - VkSampleCountFlagBits rasterizationSamples) + VkProvokingVertexModeEXT provokingVertexMode) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -23979,26 +25022,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizationSamplesEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, rasterizationSamples); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, provokingVertexMode); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRasterizationSamplesEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetProvokingVertexModeEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(rasterizationSamples); + encoder->EncodeEnumValue(provokingVertexMode); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRasterizationSamplesEXT(commandBuffer, rasterizationSamples); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetProvokingVertexModeEXT(commandBuffer, provokingVertexMode); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, rasterizationSamples); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, provokingVertexMode); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleMaskEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineRasterizationModeEXT( VkCommandBuffer commandBuffer, - VkSampleCountFlagBits samples, - const VkSampleMask* pSampleMask) + VkLineRasterizationModeEXT lineRasterizationMode) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24014,26 +25056,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleMaskEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, samples, pSampleMask); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, lineRasterizationMode); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetSampleMaskEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetLineRasterizationModeEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(samples); - encoder->EncodeUInt32Array(pSampleMask, (samples + 31) / 32); + encoder->EncodeEnumValue(lineRasterizationMode); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetSampleMaskEXT(commandBuffer, samples, pSampleMask); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetLineRasterizationModeEXT(commandBuffer, lineRasterizationMode); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, samples, pSampleMask); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, lineRasterizationMode); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetAlphaToCoverageEnableEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEnableEXT( VkCommandBuffer commandBuffer, - VkBool32 alphaToCoverageEnable) + VkBool32 stippledLineEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24049,25 +25090,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetAlphaToCoverageEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, alphaToCoverageEnable); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, stippledLineEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetAlphaToCoverageEnableEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetLineStippleEnableEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(alphaToCoverageEnable); + encoder->EncodeUInt32Value(stippledLineEnable); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetAlphaToCoverageEnableEXT(commandBuffer, alphaToCoverageEnable); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetLineStippleEnableEXT(commandBuffer, stippledLineEnable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, alphaToCoverageEnable); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, stippledLineEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetAlphaToOneEnableEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClipNegativeOneToOneEXT( VkCommandBuffer commandBuffer, - VkBool32 alphaToOneEnable) + VkBool32 negativeOneToOne) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24083,25 +25124,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetAlphaToOneEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, alphaToOneEnable); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, negativeOneToOne); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetAlphaToOneEnableEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthClipNegativeOneToOneEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(alphaToOneEnable); + encoder->EncodeUInt32Value(negativeOneToOne); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetAlphaToOneEnableEXT(commandBuffer, alphaToOneEnable); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthClipNegativeOneToOneEXT(commandBuffer, negativeOneToOne); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, alphaToOneEnable); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, negativeOneToOne); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEnableEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingEnableNV( VkCommandBuffer commandBuffer, - VkBool32 logicOpEnable) + VkBool32 viewportWScalingEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24117,27 +25158,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, logicOpEnable); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, viewportWScalingEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetLogicOpEnableEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetViewportWScalingEnableNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(logicOpEnable); + encoder->EncodeUInt32Value(viewportWScalingEnable); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetLogicOpEnableEXT(commandBuffer, logicOpEnable); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetViewportWScalingEnableNV(commandBuffer, viewportWScalingEnable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, logicOpEnable); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, viewportWScalingEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendEnableEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportSwizzleNV( VkCommandBuffer commandBuffer, - uint32_t firstAttachment, - uint32_t attachmentCount, - const VkBool32* pColorBlendEnables) + uint32_t firstViewport, + uint32_t viewportCount, + const VkViewportSwizzleNV* pViewportSwizzles) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24153,29 +25194,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorBlendEnables); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstViewport, viewportCount, pViewportSwizzles); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetColorBlendEnableEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetViewportSwizzleNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstAttachment); - encoder->EncodeUInt32Value(attachmentCount); - encoder->EncodeUInt32Array(pColorBlendEnables, attachmentCount); + encoder->EncodeUInt32Value(firstViewport); + encoder->EncodeUInt32Value(viewportCount); + EncodeStructArray(encoder, pViewportSwizzles, viewportCount); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetColorBlendEnableEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendEnables); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetViewportSwizzleNV(commandBuffer, firstViewport, viewportCount, pViewportSwizzles); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorBlendEnables); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstViewport, viewportCount, pViewportSwizzles); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendEquationEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageToColorEnableNV( VkCommandBuffer commandBuffer, - uint32_t firstAttachment, - uint32_t attachmentCount, - const VkColorBlendEquationEXT* pColorBlendEquations) + VkBool32 coverageToColorEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24191,29 +25230,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendEquationEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorBlendEquations); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, coverageToColorEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetColorBlendEquationEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCoverageToColorEnableNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstAttachment); - encoder->EncodeUInt32Value(attachmentCount); - EncodeStructArray(encoder, pColorBlendEquations, attachmentCount); + encoder->EncodeUInt32Value(coverageToColorEnable); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetColorBlendEquationEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendEquations); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCoverageToColorEnableNV(commandBuffer, coverageToColorEnable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorBlendEquations); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, coverageToColorEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetColorWriteMaskEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageToColorLocationNV( VkCommandBuffer commandBuffer, - uint32_t firstAttachment, - uint32_t attachmentCount, - const VkColorComponentFlags* pColorWriteMasks) + uint32_t coverageToColorLocation) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24229,27 +25264,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetColorWriteMaskEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorWriteMasks); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, coverageToColorLocation); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetColorWriteMaskEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCoverageToColorLocationNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstAttachment); - encoder->EncodeUInt32Value(attachmentCount); - encoder->EncodeFlagsArray(pColorWriteMasks, attachmentCount); + encoder->EncodeUInt32Value(coverageToColorLocation); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetColorWriteMaskEXT(commandBuffer, firstAttachment, attachmentCount, pColorWriteMasks); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCoverageToColorLocationNV(commandBuffer, coverageToColorLocation); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorWriteMasks); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, coverageToColorLocation); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetTessellationDomainOriginEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageModulationModeNV( VkCommandBuffer commandBuffer, - VkTessellationDomainOrigin domainOrigin) + VkCoverageModulationModeNV coverageModulationMode) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24265,25 +25298,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetTessellationDomainOriginEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, domainOrigin); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, coverageModulationMode); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetTessellationDomainOriginEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCoverageModulationModeNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(domainOrigin); + encoder->EncodeEnumValue(coverageModulationMode); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetTessellationDomainOriginEXT(commandBuffer, domainOrigin); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCoverageModulationModeNV(commandBuffer, coverageModulationMode); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, domainOrigin); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, coverageModulationMode); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizationStreamEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageModulationTableEnableNV( VkCommandBuffer commandBuffer, - uint32_t rasterizationStream) + VkBool32 coverageModulationTableEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24299,25 +25332,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizationStreamEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, rasterizationStream); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, coverageModulationTableEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRasterizationStreamEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCoverageModulationTableEnableNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(rasterizationStream); + encoder->EncodeUInt32Value(coverageModulationTableEnable); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRasterizationStreamEXT(commandBuffer, rasterizationStream); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCoverageModulationTableEnableNV(commandBuffer, coverageModulationTableEnable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, rasterizationStream); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, coverageModulationTableEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetConservativeRasterizationModeEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageModulationTableNV( VkCommandBuffer commandBuffer, - VkConservativeRasterizationModeEXT conservativeRasterizationMode) + uint32_t coverageModulationTableCount, + const float* pCoverageModulationTable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24333,25 +25367,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetConservativeRasterizationModeEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, conservativeRasterizationMode); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, coverageModulationTableCount, pCoverageModulationTable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetConservativeRasterizationModeEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCoverageModulationTableNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(conservativeRasterizationMode); + encoder->EncodeUInt32Value(coverageModulationTableCount); + encoder->EncodeFloatArray(pCoverageModulationTable, coverageModulationTableCount); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetConservativeRasterizationModeEXT(commandBuffer, conservativeRasterizationMode); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCoverageModulationTableNV(commandBuffer, coverageModulationTableCount, pCoverageModulationTable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, conservativeRasterizationMode); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, coverageModulationTableCount, pCoverageModulationTable); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetExtraPrimitiveOverestimationSizeEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetShadingRateImageEnableNV( VkCommandBuffer commandBuffer, - float extraPrimitiveOverestimationSize) + VkBool32 shadingRateImageEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24367,25 +25402,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetExtraPrimitiveOverestimationSizeEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, extraPrimitiveOverestimationSize); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, shadingRateImageEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetExtraPrimitiveOverestimationSizeEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetShadingRateImageEnableNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeFloatValue(extraPrimitiveOverestimationSize); + encoder->EncodeUInt32Value(shadingRateImageEnable); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetExtraPrimitiveOverestimationSizeEXT(commandBuffer, extraPrimitiveOverestimationSize); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetShadingRateImageEnableNV(commandBuffer, shadingRateImageEnable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, extraPrimitiveOverestimationSize); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, shadingRateImageEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClipEnableEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetRepresentativeFragmentTestEnableNV( VkCommandBuffer commandBuffer, - VkBool32 depthClipEnable) + VkBool32 representativeFragmentTestEnable) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24401,25 +25436,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClipEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthClipEnable); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, representativeFragmentTestEnable); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthClipEnableEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRepresentativeFragmentTestEnableNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(depthClipEnable); + encoder->EncodeUInt32Value(representativeFragmentTestEnable); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthClipEnableEXT(commandBuffer, depthClipEnable); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRepresentativeFragmentTestEnableNV(commandBuffer, representativeFragmentTestEnable); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthClipEnable); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, representativeFragmentTestEnable); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEnableEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageReductionModeNV( VkCommandBuffer commandBuffer, - VkBool32 sampleLocationsEnable) + VkCoverageReductionModeNV coverageReductionMode) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24435,27 +25470,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, sampleLocationsEnable); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, coverageReductionMode); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetSampleLocationsEnableEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCoverageReductionModeNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(sampleLocationsEnable); + encoder->EncodeEnumValue(coverageReductionMode); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetSampleLocationsEnableEXT(commandBuffer, sampleLocationsEnable); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCoverageReductionModeNV(commandBuffer, coverageReductionMode); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, sampleLocationsEnable); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, coverageReductionMode); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendAdvancedEXT( - VkCommandBuffer commandBuffer, - uint32_t firstAttachment, - uint32_t attachmentCount, - const VkColorBlendAdvancedEXT* pColorBlendAdvanced) +VKAPI_ATTR void VKAPI_CALL vkGetShaderModuleIdentifierEXT( + VkDevice device, + VkShaderModule shaderModule, + VkShaderModuleIdentifierEXT* pIdentifier) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24471,27 +25505,27 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendAdvancedEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorBlendAdvanced); + CustomEncoderPreCall::Dispatch(manager, device, shaderModule, pIdentifier); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetColorBlendAdvancedEXT); + vulkan_wrappers::GetDeviceTable(device)->GetShaderModuleIdentifierEXT(device, shaderModule, pIdentifier); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetShaderModuleIdentifierEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstAttachment); - encoder->EncodeUInt32Value(attachmentCount); - EncodeStructArray(encoder, pColorBlendAdvanced, attachmentCount); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(shaderModule); + EncodeStructPtr(encoder, pIdentifier); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetColorBlendAdvancedEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendAdvanced); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstAttachment, attachmentCount, pColorBlendAdvanced); + CustomEncoderPostCall::Dispatch(manager, device, shaderModule, pIdentifier); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetProvokingVertexModeEXT( - VkCommandBuffer commandBuffer, - VkProvokingVertexModeEXT provokingVertexMode) +VKAPI_ATTR void VKAPI_CALL vkGetShaderModuleCreateInfoIdentifierEXT( + VkDevice device, + const VkShaderModuleCreateInfo* pCreateInfo, + VkShaderModuleIdentifierEXT* pIdentifier) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24507,25 +25541,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetProvokingVertexModeEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, provokingVertexMode); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pIdentifier); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetProvokingVertexModeEXT); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkShaderModuleCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); + + vulkan_wrappers::GetDeviceTable(device)->GetShaderModuleCreateInfoIdentifierEXT(device, pCreateInfo_unwrapped, pIdentifier); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetShaderModuleCreateInfoIdentifierEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(provokingVertexMode); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pIdentifier); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetProvokingVertexModeEXT(commandBuffer, provokingVertexMode); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, provokingVertexMode); + CustomEncoderPostCall::Dispatch(manager, device, pCreateInfo, pIdentifier); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetLineRasterizationModeEXT( - VkCommandBuffer commandBuffer, - VkLineRasterizationModeEXT lineRasterizationMode) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceOpticalFlowImageFormatsNV( + VkPhysicalDevice physicalDevice, + const VkOpticalFlowImageFormatInfoNV* pOpticalFlowImageFormatInfo, + uint32_t* pFormatCount, + VkOpticalFlowImageFormatPropertiesNV* pImageFormatProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24541,25 +25581,38 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetLineRasterizationModeEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, lineRasterizationMode); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetLineRasterizationModeEXT); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pOpticalFlowImageFormatInfo, pFormatCount, pImageFormatProperties); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceOpticalFlowImageFormatsNV(physicalDevice, pOpticalFlowImageFormatInfo, pFormatCount, pImageFormatProperties); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceOpticalFlowImageFormatsNV); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(lineRasterizationMode); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pOpticalFlowImageFormatInfo); + encoder->EncodeUInt32Ptr(pFormatCount, omit_output_data); + EncodeStructArray(encoder, pImageFormatProperties, (pFormatCount != nullptr) ? (*pFormatCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetLineRasterizationModeEXT(commandBuffer, lineRasterizationMode); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pOpticalFlowImageFormatInfo, pFormatCount, pImageFormatProperties); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, lineRasterizationMode); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 stippledLineEnable) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateOpticalFlowSessionNV( + VkDevice device, + const VkOpticalFlowSessionCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkOpticalFlowSessionNV* pSession) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24575,25 +25628,42 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, stippledLineEnable); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetLineStippleEnableEXT); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pSession); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateOpticalFlowSessionNV(device, pCreateInfo, pAllocator, pSession); + + if (result >= 0) + { + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pSession, VulkanCaptureManager::GetUniqueId); + } + else + { + omit_output_data = true; + } + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateOpticalFlowSessionNV); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(stippledLineEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pSession, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndCreateApiCallCapture(result, device, pSession, pCreateInfo); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetLineStippleEnableEXT(commandBuffer, stippledLineEnable); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pSession); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, stippledLineEnable); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClipNegativeOneToOneEXT( - VkCommandBuffer commandBuffer, - VkBool32 negativeOneToOne) +VKAPI_ATTR void VKAPI_CALL vkDestroyOpticalFlowSessionNV( + VkDevice device, + VkOpticalFlowSessionNV session, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24609,25 +25679,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClipNegativeOneToOneEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, negativeOneToOne); + CustomEncoderPreCall::Dispatch(manager, device, session, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthClipNegativeOneToOneEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyOpticalFlowSessionNV); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(negativeOneToOne); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(session); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(session); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthClipNegativeOneToOneEXT(commandBuffer, negativeOneToOne); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyOpticalFlowSessionNV(device, session, pAllocator); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, negativeOneToOne); + CustomEncoderPostCall::Dispatch(manager, device, session, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(session); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingEnableNV( - VkCommandBuffer commandBuffer, - VkBool32 viewportWScalingEnable) +VKAPI_ATTR VkResult VKAPI_CALL vkBindOpticalFlowSessionImageNV( + VkDevice device, + VkOpticalFlowSessionNV session, + VkOpticalFlowSessionBindingPointNV bindingPoint, + VkImageView view, + VkImageLayout layout) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24643,27 +25720,32 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingEnableNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, viewportWScalingEnable); + CustomEncoderPreCall::Dispatch(manager, device, session, bindingPoint, view, layout); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetViewportWScalingEnableNV); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindOpticalFlowSessionImageNV(device, session, bindingPoint, view, layout); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindOpticalFlowSessionImageNV); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(viewportWScalingEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(session); + encoder->EncodeEnumValue(bindingPoint); + encoder->EncodeVulkanHandleValue(view); + encoder->EncodeEnumValue(layout); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetViewportWScalingEnableNV(commandBuffer, viewportWScalingEnable); + CustomEncoderPostCall::Dispatch(manager, result, device, session, bindingPoint, view, layout); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, viewportWScalingEnable); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportSwizzleNV( +VKAPI_ATTR void VKAPI_CALL vkCmdOpticalFlowExecuteNV( VkCommandBuffer commandBuffer, - uint32_t firstViewport, - uint32_t viewportCount, - const VkViewportSwizzleNV* pViewportSwizzles) + VkOpticalFlowSessionNV session, + const VkOpticalFlowExecuteInfoNV* pExecuteInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24679,27 +25761,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportSwizzleNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, firstViewport, viewportCount, pViewportSwizzles); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, session, pExecuteInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetViewportSwizzleNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdOpticalFlowExecuteNV); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(firstViewport); - encoder->EncodeUInt32Value(viewportCount); - EncodeStructArray(encoder, pViewportSwizzles, viewportCount); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(session); + EncodeStructPtr(encoder, pExecuteInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdOpticalFlowExecuteNVHandles, session); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetViewportSwizzleNV(commandBuffer, firstViewport, viewportCount, pViewportSwizzles); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdOpticalFlowExecuteNV(commandBuffer, session, pExecuteInfo); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, firstViewport, viewportCount, pViewportSwizzles); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, session, pExecuteInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageToColorEnableNV( - VkCommandBuffer commandBuffer, - VkBool32 coverageToColorEnable) +VKAPI_ATTR void VKAPI_CALL vkAntiLagUpdateAMD( + VkDevice device, + const VkAntiLagDataAMD* pData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24715,25 +25796,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageToColorEnableNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, coverageToColorEnable); + CustomEncoderPreCall::Dispatch(manager, device, pData); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCoverageToColorEnableNV); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAntiLagUpdateAMD); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(coverageToColorEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pData); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCoverageToColorEnableNV(commandBuffer, coverageToColorEnable); + vulkan_wrappers::GetDeviceTable(device)->AntiLagUpdateAMD(device, pData); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, coverageToColorEnable); + CustomEncoderPostCall::Dispatch(manager, device, pData); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageToColorLocationNV( - VkCommandBuffer commandBuffer, - uint32_t coverageToColorLocation) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateShadersEXT( + VkDevice device, + uint32_t createInfoCount, + const VkShaderCreateInfoEXT* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkShaderEXT* pShaders) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24749,59 +25833,46 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageToColorLocationNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, coverageToColorLocation); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCoverageToColorLocationNV); - if (encoder) - { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(coverageToColorLocation); - manager->EndCommandApiCallCapture(commandBuffer); - } + bool omit_output_data = false; - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCoverageToColorLocationNV(commandBuffer, coverageToColorLocation); + CustomEncoderPreCall::Dispatch(manager, device, createInfoCount, pCreateInfos, pAllocator, pShaders); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, coverageToColorLocation); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkShaderCreateInfoEXT* pCreateInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pCreateInfos, createInfoCount, handle_unwrap_memory); -} + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateShadersEXT(device, createInfoCount, pCreateInfos_unwrapped, pAllocator, pShaders); -VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageModulationModeNV( - VkCommandBuffer commandBuffer, - VkCoverageModulationModeNV coverageModulationMode) -{ - VulkanCaptureManager* manager = VulkanCaptureManager::Get(); - GFXRECON_ASSERT(manager != nullptr); - auto force_command_serialization = manager->GetForceCommandSerialization(); - std::shared_lock shared_api_call_lock; - std::unique_lock exclusive_api_call_lock; - if (force_command_serialization) + if (result >= 0) { - exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + vulkan_wrappers::CreateWrappedHandles(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pShaders, createInfoCount, VulkanCaptureManager::GetUniqueId); } else { - shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + omit_output_data = true; } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, coverageModulationMode); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCoverageModulationModeNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateShadersEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(coverageModulationMode); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeUInt32Value(createInfoCount); + EncodeStructArray(encoder, pCreateInfos, createInfoCount); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandleArray(pShaders, createInfoCount, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndGroupCreateApiCallCapture(result, device, nullptr, createInfoCount, pShaders, pCreateInfos); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCoverageModulationModeNV(commandBuffer, coverageModulationMode); + CustomEncoderPostCall::Dispatch(manager, result, device, createInfoCount, pCreateInfos, pAllocator, pShaders); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, coverageModulationMode); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageModulationTableEnableNV( - VkCommandBuffer commandBuffer, - VkBool32 coverageModulationTableEnable) +VKAPI_ATTR void VKAPI_CALL vkDestroyShaderEXT( + VkDevice device, + VkShaderEXT shader, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24817,26 +25888,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageModulationTableEnableNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, coverageModulationTableEnable); + CustomEncoderPreCall::Dispatch(manager, device, shader, pAllocator); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCoverageModulationTableEnableNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyShaderEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(coverageModulationTableEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(shader); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(shader); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCoverageModulationTableEnableNV(commandBuffer, coverageModulationTableEnable); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyShaderEXT(device, shader, pAllocator); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, coverageModulationTableEnable); + CustomEncoderPostCall::Dispatch(manager, device, shader, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(shader); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageModulationTableNV( - VkCommandBuffer commandBuffer, - uint32_t coverageModulationTableCount, - const float* pCoverageModulationTable) +VKAPI_ATTR VkResult VKAPI_CALL vkGetShaderBinaryDataEXT( + VkDevice device, + VkShaderEXT shader, + size_t* pDataSize, + void* pData) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24852,26 +25928,38 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageModulationTableNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, coverageModulationTableCount, pCoverageModulationTable); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCoverageModulationTableNV); + CustomEncoderPreCall::Dispatch(manager, device, shader, pDataSize, pData); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetShaderBinaryDataEXT(device, shader, pDataSize, pData); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetShaderBinaryDataEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(coverageModulationTableCount); - encoder->EncodeFloatArray(pCoverageModulationTable, coverageModulationTableCount); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(shader); + encoder->EncodeSizeTPtr(pDataSize, omit_output_data); + encoder->EncodeVoidArray(pData, (pDataSize != nullptr) ? (*pDataSize) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCoverageModulationTableNV(commandBuffer, coverageModulationTableCount, pCoverageModulationTable); + CustomEncoderPostCall::Dispatch(manager, result, device, shader, pDataSize, pData); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, coverageModulationTableCount, pCoverageModulationTable); + return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdSetShadingRateImageEnableNV( +VKAPI_ATTR void VKAPI_CALL vkCmdBindShadersEXT( VkCommandBuffer commandBuffer, - VkBool32 shadingRateImageEnable) + uint32_t stageCount, + const VkShaderStageFlagBits* pStages, + const VkShaderEXT* pShaders) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24887,25 +25975,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetShadingRateImageEnableNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, shadingRateImageEnable); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, stageCount, pStages, pShaders); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetShadingRateImageEnableNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindShadersEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(shadingRateImageEnable); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeUInt32Value(stageCount); + encoder->EncodeEnumArray(pStages, stageCount); + encoder->EncodeVulkanHandleArray(pShaders, stageCount); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindShadersEXTHandles, stageCount, pShaders); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetShadingRateImageEnableNV(commandBuffer, shadingRateImageEnable); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindShadersEXT(commandBuffer, stageCount, pStages, pShaders); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, shadingRateImageEnable); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, stageCount, pStages, pShaders); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetRepresentativeFragmentTestEnableNV( +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClampRangeEXT( VkCommandBuffer commandBuffer, - VkBool32 representativeFragmentTestEnable) + VkDepthClampModeEXT depthClampMode, + const VkDepthClampRangeEXT* pDepthClampRange) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24921,25 +26012,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetRepresentativeFragmentTestEnableNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, representativeFragmentTestEnable); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthClampMode, pDepthClampRange); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetRepresentativeFragmentTestEnableNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthClampRangeEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(representativeFragmentTestEnable); + encoder->EncodeEnumValue(depthClampMode); + EncodeStructPtr(encoder, pDepthClampRange); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetRepresentativeFragmentTestEnableNV(commandBuffer, representativeFragmentTestEnable); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthClampRangeEXT(commandBuffer, depthClampMode, pDepthClampRange); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, representativeFragmentTestEnable); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthClampMode, pDepthClampRange); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageReductionModeNV( - VkCommandBuffer commandBuffer, - VkCoverageReductionModeNV coverageReductionMode) +VKAPI_ATTR VkResult VKAPI_CALL vkGetFramebufferTilePropertiesQCOM( + VkDevice device, + VkFramebuffer framebuffer, + uint32_t* pPropertiesCount, + VkTilePropertiesQCOM* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24955,26 +26049,37 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageReductionModeNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, coverageReductionMode); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetCoverageReductionModeNV); + CustomEncoderPreCall::Dispatch(manager, device, framebuffer, pPropertiesCount, pProperties); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetFramebufferTilePropertiesQCOM(device, framebuffer, pPropertiesCount, pProperties); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetFramebufferTilePropertiesQCOM); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(coverageReductionMode); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(framebuffer); + encoder->EncodeUInt32Ptr(pPropertiesCount, omit_output_data); + EncodeStructArray(encoder, pProperties, (pPropertiesCount != nullptr) ? (*pPropertiesCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetCoverageReductionModeNV(commandBuffer, coverageReductionMode); + CustomEncoderPostCall::Dispatch(manager, result, device, framebuffer, pPropertiesCount, pProperties); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, coverageReductionMode); + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetShaderModuleIdentifierEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkGetDynamicRenderingTilePropertiesQCOM( VkDevice device, - VkShaderModule shaderModule, - VkShaderModuleIdentifierEXT* pIdentifier) + const VkRenderingInfo* pRenderingInfo, + VkTilePropertiesQCOM* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -24990,27 +26095,39 @@ VKAPI_ATTR void VKAPI_CALL vkGetShaderModuleIdentifierEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, shaderModule, pIdentifier); + bool omit_output_data = false; - vulkan_wrappers::GetDeviceTable(device)->GetShaderModuleIdentifierEXT(device, shaderModule, pIdentifier); + CustomEncoderPreCall::Dispatch(manager, device, pRenderingInfo, pProperties); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetShaderModuleIdentifierEXT); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkRenderingInfo* pRenderingInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pRenderingInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetDynamicRenderingTilePropertiesQCOM(device, pRenderingInfo_unwrapped, pProperties); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDynamicRenderingTilePropertiesQCOM); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(shaderModule); - EncodeStructPtr(encoder, pIdentifier); + EncodeStructPtr(encoder, pRenderingInfo); + EncodeStructPtr(encoder, pProperties, omit_output_data); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, shaderModule, pIdentifier); + CustomEncoderPostCall::Dispatch(manager, result, device, pRenderingInfo, pProperties); + + return result; } -VKAPI_ATTR void VKAPI_CALL vkGetShaderModuleCreateInfoIdentifierEXT( - VkDevice device, - const VkShaderModuleCreateInfo* pCreateInfo, - VkShaderModuleIdentifierEXT* pIdentifier) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeVectorPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeVectorPropertiesNV* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25026,31 +26143,35 @@ VKAPI_ATTR void VKAPI_CALL vkGetShaderModuleCreateInfoIdentifierEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pIdentifier); + bool omit_output_data = false; - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkShaderModuleCreateInfo* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPropertyCount, pProperties); - vulkan_wrappers::GetDeviceTable(device)->GetShaderModuleCreateInfoIdentifierEXT(device, pCreateInfo_unwrapped, pIdentifier); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceCooperativeVectorPropertiesNV(physicalDevice, pPropertyCount, pProperties); + if (result < 0) + { + omit_output_data = true; + } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetShaderModuleCreateInfoIdentifierEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceCooperativeVectorPropertiesNV); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pIdentifier); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); + EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, device, pCreateInfo, pIdentifier); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pPropertyCount, pProperties); + + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceOpticalFlowImageFormatsNV( - VkPhysicalDevice physicalDevice, - const VkOpticalFlowImageFormatInfoNV* pOpticalFlowImageFormatInfo, - uint32_t* pFormatCount, - VkOpticalFlowImageFormatPropertiesNV* pImageFormatProperties) +VKAPI_ATTR VkResult VKAPI_CALL vkConvertCooperativeVectorMatrixNV( + VkDevice device, + const VkConvertCooperativeVectorMatrixInfoNV* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25066,38 +26187,29 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceOpticalFlowImageFormatsNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pOpticalFlowImageFormatInfo, pFormatCount, pImageFormatProperties); + CustomEncoderPreCall::Dispatch(manager, device, pInfo); - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceOpticalFlowImageFormatsNV(physicalDevice, pOpticalFlowImageFormatInfo, pFormatCount, pImageFormatProperties); - if (result < 0) - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->ConvertCooperativeVectorMatrixNV(device, pInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceOpticalFlowImageFormatsNV); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkConvertCooperativeVectorMatrixNV); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - EncodeStructPtr(encoder, pOpticalFlowImageFormatInfo); - encoder->EncodeUInt32Ptr(pFormatCount, omit_output_data); - EncodeStructArray(encoder, pImageFormatProperties, (pFormatCount != nullptr) ? (*pFormatCount) : 0, omit_output_data); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pOpticalFlowImageFormatInfo, pFormatCount, pImageFormatProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateOpticalFlowSessionNV( - VkDevice device, - const VkOpticalFlowSessionCreateInfoNV* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkOpticalFlowSessionNV* pSession) +VKAPI_ATTR void VKAPI_CALL vkCmdConvertCooperativeVectorMatrixNV( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkConvertCooperativeVectorMatrixInfoNV* pInfos) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25113,42 +26225,66 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateOpticalFlowSessionNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; + CustomEncoderPreCall::Dispatch(manager, commandBuffer, infoCount, pInfos); - CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pSession); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdConvertCooperativeVectorMatrixNV); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeUInt32Value(infoCount); + EncodeStructArray(encoder, pInfos, infoCount); + manager->EndCommandApiCallCapture(commandBuffer); + } - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateOpticalFlowSessionNV(device, pCreateInfo, pAllocator, pSession); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdConvertCooperativeVectorMatrixNV(commandBuffer, infoCount, pInfos); - if (result >= 0) + CustomEncoderPostCall::Dispatch(manager, commandBuffer, infoCount, pInfos); + +} + +VKAPI_ATTR VkResult VKAPI_CALL vkSetLatencySleepModeNV( + VkDevice device, + VkSwapchainKHR swapchain, + const VkLatencySleepModeInfoNV* pSleepModeInfo) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) { - vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pSession, VulkanCaptureManager::GetUniqueId); + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); } else { - omit_output_data = true; + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateOpticalFlowSessionNV); + CustomEncoderPreCall::Dispatch(manager, device, swapchain, pSleepModeInfo); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->SetLatencySleepModeNV(device, swapchain, pSleepModeInfo); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetLatencySleepModeNV); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pCreateInfo); - EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandlePtr(pSession, omit_output_data); + encoder->EncodeVulkanHandleValue(swapchain); + EncodeStructPtr(encoder, pSleepModeInfo); encoder->EncodeEnumValue(result); - manager->EndCreateApiCallCapture(result, device, pSession, pCreateInfo); + manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pSession); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, pSleepModeInfo); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroyOpticalFlowSessionNV( +VKAPI_ATTR VkResult VKAPI_CALL vkLatencySleepNV( VkDevice device, - VkOpticalFlowSessionNV session, - const VkAllocationCallbacks* pAllocator) + VkSwapchainKHR swapchain, + const VkLatencySleepInfoNV* pSleepInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25164,32 +26300,33 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyOpticalFlowSessionNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, session, pAllocator); + CustomEncoderPreCall::Dispatch(manager, device, swapchain, pSleepInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyOpticalFlowSessionNV); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkLatencySleepInfoNV* pSleepInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSleepInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->LatencySleepNV(device, swapchain, pSleepInfo_unwrapped); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkLatencySleepNV); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(session); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(session); + encoder->EncodeVulkanHandleValue(swapchain); + EncodeStructPtr(encoder, pSleepInfo); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyOpticalFlowSessionNV(device, session, pAllocator); - - CustomEncoderPostCall::Dispatch(manager, device, session, pAllocator); + CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, pSleepInfo); - vulkan_wrappers::DestroyWrappedHandle(session); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkBindOpticalFlowSessionImageNV( +VKAPI_ATTR void VKAPI_CALL vkSetLatencyMarkerNV( VkDevice device, - VkOpticalFlowSessionNV session, - VkOpticalFlowSessionBindingPointNV bindingPoint, - VkImageView view, - VkImageLayout layout) + VkSwapchainKHR swapchain, + const VkSetLatencyMarkerInfoNV* pLatencyMarkerInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25205,32 +26342,27 @@ VKAPI_ATTR VkResult VKAPI_CALL vkBindOpticalFlowSessionImageNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, session, bindingPoint, view, layout); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindOpticalFlowSessionImageNV(device, session, bindingPoint, view, layout); + CustomEncoderPreCall::Dispatch(manager, device, swapchain, pLatencyMarkerInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindOpticalFlowSessionImageNV); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetLatencyMarkerNV); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(session); - encoder->EncodeEnumValue(bindingPoint); - encoder->EncodeVulkanHandleValue(view); - encoder->EncodeEnumValue(layout); - encoder->EncodeEnumValue(result); + encoder->EncodeVulkanHandleValue(swapchain); + EncodeStructPtr(encoder, pLatencyMarkerInfo); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, session, bindingPoint, view, layout); + vulkan_wrappers::GetDeviceTable(device)->SetLatencyMarkerNV(device, swapchain, pLatencyMarkerInfo); - return result; + CustomEncoderPostCall::Dispatch(manager, device, swapchain, pLatencyMarkerInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdOpticalFlowExecuteNV( - VkCommandBuffer commandBuffer, - VkOpticalFlowSessionNV session, - const VkOpticalFlowExecuteInfoNV* pExecuteInfo) +VKAPI_ATTR void VKAPI_CALL vkGetLatencyTimingsNV( + VkDevice device, + VkSwapchainKHR swapchain, + VkGetLatencyMarkerInfoNV* pLatencyMarkerInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25246,26 +26378,26 @@ VKAPI_ATTR void VKAPI_CALL vkCmdOpticalFlowExecuteNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, session, pExecuteInfo); + CustomEncoderPreCall::Dispatch(manager, device, swapchain, pLatencyMarkerInfo); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdOpticalFlowExecuteNV); + vulkan_wrappers::GetDeviceTable(device)->GetLatencyTimingsNV(device, swapchain, pLatencyMarkerInfo); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetLatencyTimingsNV); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeVulkanHandleValue(session); - EncodeStructPtr(encoder, pExecuteInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdOpticalFlowExecuteNVHandles, session); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(swapchain); + EncodeStructPtr(encoder, pLatencyMarkerInfo); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdOpticalFlowExecuteNV(commandBuffer, session, pExecuteInfo); - - CustomEncoderPostCall::Dispatch(manager, commandBuffer, session, pExecuteInfo); + CustomEncoderPostCall::Dispatch(manager, device, swapchain, pLatencyMarkerInfo); } -VKAPI_ATTR void VKAPI_CALL vkAntiLagUpdateAMD( - VkDevice device, - const VkAntiLagDataAMD* pData) +VKAPI_ATTR void VKAPI_CALL vkQueueNotifyOutOfBandNV( + VkQueue queue, + const VkOutOfBandQueueTypeInfoNV* pQueueTypeInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25281,28 +26413,30 @@ VKAPI_ATTR void VKAPI_CALL vkAntiLagUpdateAMD( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pData); + CustomEncoderPreCall::Dispatch(manager, queue, pQueueTypeInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkAntiLagUpdateAMD); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueueNotifyOutOfBandNV); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pData); + encoder->EncodeVulkanHandleValue(queue); + EncodeStructPtr(encoder, pQueueTypeInfo); manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(device)->AntiLagUpdateAMD(device, pData); + vulkan_wrappers::GetDeviceTable(queue)->QueueNotifyOutOfBandNV(queue, pQueueTypeInfo); - CustomEncoderPostCall::Dispatch(manager, device, pData); + CustomEncoderPostCall::Dispatch(manager, queue, pQueueTypeInfo); } -VKAPI_ATTR VkResult VKAPI_CALL vkCreateShadersEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDataGraphPipelinesARM( VkDevice device, + VkDeferredOperationKHR deferredOperation, + VkPipelineCache pipelineCache, uint32_t createInfoCount, - const VkShaderCreateInfoEXT* pCreateInfos, + const VkDataGraphPipelineCreateInfoARM* pCreateInfos, const VkAllocationCallbacks* pAllocator, - VkShaderEXT* pShaders) + VkPipeline* pPipelines) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25320,44 +26454,47 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateShadersEXT( bool omit_output_data = false; - CustomEncoderPreCall::Dispatch(manager, device, createInfoCount, pCreateInfos, pAllocator, pShaders); + CustomEncoderPreCall::Dispatch(manager, device, deferredOperation, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkShaderCreateInfoEXT* pCreateInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pCreateInfos, createInfoCount, handle_unwrap_memory); + const VkDataGraphPipelineCreateInfoARM* pCreateInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pCreateInfos, createInfoCount, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateShadersEXT(device, createInfoCount, pCreateInfos_unwrapped, pAllocator, pShaders); + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateDataGraphPipelinesARM(device, deferredOperation, pipelineCache, createInfoCount, pCreateInfos_unwrapped, pAllocator, pPipelines); if (result >= 0) { - vulkan_wrappers::CreateWrappedHandles(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pShaders, createInfoCount, VulkanCaptureManager::GetUniqueId); + vulkan_wrappers::CreateWrappedHandles(device, deferredOperation, pPipelines, createInfoCount, VulkanCaptureManager::GetUniqueId); } else { omit_output_data = true; } - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateShadersEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDataGraphPipelinesARM); if (encoder) { encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(deferredOperation); + encoder->EncodeVulkanHandleValue(pipelineCache); encoder->EncodeUInt32Value(createInfoCount); EncodeStructArray(encoder, pCreateInfos, createInfoCount); EncodeStructPtr(encoder, pAllocator); - encoder->EncodeVulkanHandleArray(pShaders, createInfoCount, omit_output_data); + encoder->EncodeVulkanHandleArray(pPipelines, createInfoCount, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndGroupCreateApiCallCapture(result, device, nullptr, createInfoCount, pShaders, pCreateInfos); + manager->EndGroupCreateApiCallCapture(result, device, deferredOperation, createInfoCount, pPipelines, pCreateInfos); } - CustomEncoderPostCall::Dispatch(manager, result, device, createInfoCount, pCreateInfos, pAllocator, pShaders); + CustomEncoderPostCall::Dispatch(manager, result, device, deferredOperation, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); return result; } -VKAPI_ATTR void VKAPI_CALL vkDestroyShaderEXT( +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDataGraphPipelineSessionARM( VkDevice device, - VkShaderEXT shader, - const VkAllocationCallbacks* pAllocator) + const VkDataGraphPipelineSessionCreateInfoARM* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDataGraphPipelineSessionARM* pSession) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25373,78 +26510,46 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyShaderEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, shader, pAllocator); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyShaderEXT); - if (encoder) - { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(shader); - EncodeStructPtr(encoder, pAllocator); - manager->EndDestroyApiCallCapture(shader); - } - - ScopedDestroyLock exclusive_scoped_lock; - vulkan_wrappers::GetDeviceTable(device)->DestroyShaderEXT(device, shader, pAllocator); + bool omit_output_data = false; - CustomEncoderPostCall::Dispatch(manager, device, shader, pAllocator); + CustomEncoderPreCall::Dispatch(manager, device, pCreateInfo, pAllocator, pSession); - vulkan_wrappers::DestroyWrappedHandle(shader); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDataGraphPipelineSessionCreateInfoARM* pCreateInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pCreateInfo, handle_unwrap_memory); -} + VkResult result = vulkan_wrappers::GetDeviceTable(device)->CreateDataGraphPipelineSessionARM(device, pCreateInfo_unwrapped, pAllocator, pSession); -VKAPI_ATTR VkResult VKAPI_CALL vkGetShaderBinaryDataEXT( - VkDevice device, - VkShaderEXT shader, - size_t* pDataSize, - void* pData) -{ - VulkanCaptureManager* manager = VulkanCaptureManager::Get(); - GFXRECON_ASSERT(manager != nullptr); - auto force_command_serialization = manager->GetForceCommandSerialization(); - std::shared_lock shared_api_call_lock; - std::unique_lock exclusive_api_call_lock; - if (force_command_serialization) + if (result >= 0) { - exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + vulkan_wrappers::CreateWrappedHandle(device, vulkan_wrappers::NoParentWrapper::kHandleValue, pSession, VulkanCaptureManager::GetUniqueId); } else - { - shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); - } - - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, shader, pDataSize, pData); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetShaderBinaryDataEXT(device, shader, pDataSize, pData); - if (result < 0) { omit_output_data = true; } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetShaderBinaryDataEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCreateDataGraphPipelineSessionARM); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(shader); - encoder->EncodeSizeTPtr(pDataSize, omit_output_data); - encoder->EncodeVoidArray(pData, (pDataSize != nullptr) ? (*pDataSize) : 0, omit_output_data); + EncodeStructPtr(encoder, pCreateInfo); + EncodeStructPtr(encoder, pAllocator); + encoder->EncodeVulkanHandlePtr(pSession, omit_output_data); encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCreateApiCallCapture(result, device, pSession, pCreateInfo); } - CustomEncoderPostCall::Dispatch(manager, result, device, shader, pDataSize, pData); + CustomEncoderPostCall::Dispatch(manager, result, device, pCreateInfo, pAllocator, pSession); return result; } -VKAPI_ATTR void VKAPI_CALL vkCmdBindShadersEXT( - VkCommandBuffer commandBuffer, - uint32_t stageCount, - const VkShaderStageFlagBits* pStages, - const VkShaderEXT* pShaders) +VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelineSessionBindPointRequirementsARM( + VkDevice device, + const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* pInfo, + uint32_t* pBindPointRequirementCount, + VkDataGraphPipelineSessionBindPointRequirementARM* pBindPointRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25460,65 +26565,40 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindShadersEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, stageCount, pStages, pShaders); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindShadersEXT); - if (encoder) - { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(stageCount); - encoder->EncodeEnumArray(pStages, stageCount); - encoder->EncodeVulkanHandleArray(pShaders, stageCount); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindShadersEXTHandles, stageCount, pShaders); - } - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindShadersEXT(commandBuffer, stageCount, pStages, pShaders); + bool omit_output_data = false; - CustomEncoderPostCall::Dispatch(manager, commandBuffer, stageCount, pStages, pShaders); + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pBindPointRequirementCount, pBindPointRequirements); -} + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClampRangeEXT( - VkCommandBuffer commandBuffer, - VkDepthClampModeEXT depthClampMode, - const VkDepthClampRangeEXT* pDepthClampRange) -{ - VulkanCaptureManager* manager = VulkanCaptureManager::Get(); - GFXRECON_ASSERT(manager != nullptr); - auto force_command_serialization = manager->GetForceCommandSerialization(); - std::shared_lock shared_api_call_lock; - std::unique_lock exclusive_api_call_lock; - if (force_command_serialization) - { - exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); - } - else + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetDataGraphPipelineSessionBindPointRequirementsARM(device, pInfo_unwrapped, pBindPointRequirementCount, pBindPointRequirements); + if (result < 0) { - shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + omit_output_data = true; } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, depthClampMode, pDepthClampRange); - - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetDepthClampRangeEXT); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDataGraphPipelineSessionBindPointRequirementsARM); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeEnumValue(depthClampMode); - EncodeStructPtr(encoder, pDepthClampRange); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pInfo); + encoder->EncodeUInt32Ptr(pBindPointRequirementCount, omit_output_data); + EncodeStructArray(encoder, pBindPointRequirements, (pBindPointRequirementCount != nullptr) ? (*pBindPointRequirementCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetDepthClampRangeEXT(commandBuffer, depthClampMode, pDepthClampRange); + CustomEncoderPostCall::Dispatch(manager, result, device, pInfo, pBindPointRequirementCount, pBindPointRequirements); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, depthClampMode, pDepthClampRange); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetFramebufferTilePropertiesQCOM( +VKAPI_ATTR void VKAPI_CALL vkGetDataGraphPipelineSessionMemoryRequirementsARM( VkDevice device, - VkFramebuffer framebuffer, - uint32_t* pPropertiesCount, - VkTilePropertiesQCOM* pProperties) + const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25534,37 +26614,30 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetFramebufferTilePropertiesQCOM( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; + CustomEncoderPreCall::Dispatch(manager, device, pInfo, pMemoryRequirements); - CustomEncoderPreCall::Dispatch(manager, device, framebuffer, pPropertiesCount, pProperties); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* pInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pInfo, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetFramebufferTilePropertiesQCOM(device, framebuffer, pPropertiesCount, pProperties); - if (result < 0) - { - omit_output_data = true; - } + vulkan_wrappers::GetDeviceTable(device)->GetDataGraphPipelineSessionMemoryRequirementsARM(device, pInfo_unwrapped, pMemoryRequirements); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetFramebufferTilePropertiesQCOM); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDataGraphPipelineSessionMemoryRequirementsARM); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(framebuffer); - encoder->EncodeUInt32Ptr(pPropertiesCount, omit_output_data); - EncodeStructArray(encoder, pProperties, (pPropertiesCount != nullptr) ? (*pPropertiesCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); + EncodeStructPtr(encoder, pInfo); + EncodeStructPtr(encoder, pMemoryRequirements); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, framebuffer, pPropertiesCount, pProperties); - - return result; + CustomEncoderPostCall::Dispatch(manager, device, pInfo, pMemoryRequirements); } -VKAPI_ATTR VkResult VKAPI_CALL vkGetDynamicRenderingTilePropertiesQCOM( +VKAPI_ATTR VkResult VKAPI_CALL vkBindDataGraphPipelineSessionMemoryARM( VkDevice device, - const VkRenderingInfo* pRenderingInfo, - VkTilePropertiesQCOM* pProperties) + uint32_t bindInfoCount, + const VkBindDataGraphPipelineSessionMemoryInfoARM* pBindInfos) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25580,39 +26653,33 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetDynamicRenderingTilePropertiesQCOM( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, device, pRenderingInfo, pProperties); + CustomEncoderPreCall::Dispatch(manager, device, bindInfoCount, pBindInfos); auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkRenderingInfo* pRenderingInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pRenderingInfo, handle_unwrap_memory); + const VkBindDataGraphPipelineSessionMemoryInfoARM* pBindInfos_unwrapped = vulkan_wrappers::UnwrapStructArrayHandles(pBindInfos, bindInfoCount, handle_unwrap_memory); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetDynamicRenderingTilePropertiesQCOM(device, pRenderingInfo_unwrapped, pProperties); - if (result < 0) - { - omit_output_data = true; - } + VkResult result = vulkan_wrappers::GetDeviceTable(device)->BindDataGraphPipelineSessionMemoryARM(device, bindInfoCount, pBindInfos_unwrapped); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDynamicRenderingTilePropertiesQCOM); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkBindDataGraphPipelineSessionMemoryARM); if (encoder) { encoder->EncodeVulkanHandleValue(device); - EncodeStructPtr(encoder, pRenderingInfo); - EncodeStructPtr(encoder, pProperties, omit_output_data); + encoder->EncodeUInt32Value(bindInfoCount); + EncodeStructArray(encoder, pBindInfos, bindInfoCount); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, pRenderingInfo, pProperties); + CustomEncoderPostCall::Dispatch(manager, result, device, bindInfoCount, pBindInfos); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeVectorPropertiesNV( - VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkCooperativeVectorPropertiesNV* pProperties) +VKAPI_ATTR void VKAPI_CALL vkDestroyDataGraphPipelineSessionARM( + VkDevice device, + VkDataGraphPipelineSessionARM session, + const VkAllocationCallbacks* pAllocator) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25628,35 +26695,30 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeVectorPropertiesNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - bool omit_output_data = false; - - CustomEncoderPreCall::Dispatch(manager, physicalDevice, pPropertyCount, pProperties); - - VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceCooperativeVectorPropertiesNV(physicalDevice, pPropertyCount, pProperties); - if (result < 0) - { - omit_output_data = true; - } + CustomEncoderPreCall::Dispatch(manager, device, session, pAllocator); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceCooperativeVectorPropertiesNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkDestroyDataGraphPipelineSessionARM); if (encoder) { - encoder->EncodeVulkanHandleValue(physicalDevice); - encoder->EncodeUInt32Ptr(pPropertyCount, omit_output_data); - EncodeStructArray(encoder, pProperties, (pPropertyCount != nullptr) ? (*pPropertyCount) : 0, omit_output_data); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(session); + EncodeStructPtr(encoder, pAllocator); + manager->EndDestroyApiCallCapture(session); } - CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, pPropertyCount, pProperties); + ScopedDestroyLock exclusive_scoped_lock; + vulkan_wrappers::GetDeviceTable(device)->DestroyDataGraphPipelineSessionARM(device, session, pAllocator); - return result; + CustomEncoderPostCall::Dispatch(manager, device, session, pAllocator); + + vulkan_wrappers::DestroyWrappedHandle(session); } -VKAPI_ATTR VkResult VKAPI_CALL vkConvertCooperativeVectorMatrixNV( - VkDevice device, - const VkConvertCooperativeVectorMatrixInfoNV* pInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchDataGraphARM( + VkCommandBuffer commandBuffer, + VkDataGraphPipelineSessionARM session, + const VkDataGraphPipelineDispatchInfoARM* pInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25672,29 +26734,28 @@ VKAPI_ATTR VkResult VKAPI_CALL vkConvertCooperativeVectorMatrixNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, pInfo); - - VkResult result = vulkan_wrappers::GetDeviceTable(device)->ConvertCooperativeVectorMatrixNV(device, pInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, session, pInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkConvertCooperativeVectorMatrixNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDispatchDataGraphARM); if (encoder) { - encoder->EncodeVulkanHandleValue(device); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeVulkanHandleValue(session); EncodeStructPtr(encoder, pInfo); - encoder->EncodeEnumValue(result); - manager->EndApiCallCapture(); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdDispatchDataGraphARMHandles, session); } - CustomEncoderPostCall::Dispatch(manager, result, device, pInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDispatchDataGraphARM(commandBuffer, session, pInfo); - return result; + CustomEncoderPostCall::Dispatch(manager, commandBuffer, session, pInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdConvertCooperativeVectorMatrixNV( - VkCommandBuffer commandBuffer, - uint32_t infoCount, - const VkConvertCooperativeVectorMatrixInfoNV* pInfos) +VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelineAvailablePropertiesARM( + VkDevice device, + const VkDataGraphPipelineInfoARM* pPipelineInfo, + uint32_t* pPropertiesCount, + VkDataGraphPipelinePropertyARM* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25710,27 +26771,41 @@ VKAPI_ATTR void VKAPI_CALL vkCmdConvertCooperativeVectorMatrixNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, infoCount, pInfos); + bool omit_output_data = false; - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdConvertCooperativeVectorMatrixNV); + CustomEncoderPreCall::Dispatch(manager, device, pPipelineInfo, pPropertiesCount, pProperties); + + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDataGraphPipelineInfoARM* pPipelineInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPipelineInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetDataGraphPipelineAvailablePropertiesARM(device, pPipelineInfo_unwrapped, pPropertiesCount, pProperties); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDataGraphPipelineAvailablePropertiesARM); if (encoder) { - encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeUInt32Value(infoCount); - EncodeStructArray(encoder, pInfos, infoCount); - manager->EndCommandApiCallCapture(commandBuffer); + encoder->EncodeVulkanHandleValue(device); + EncodeStructPtr(encoder, pPipelineInfo); + encoder->EncodeUInt32Ptr(pPropertiesCount, omit_output_data); + encoder->EncodeEnumArray(pProperties, (pPropertiesCount != nullptr) ? (*pPropertiesCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdConvertCooperativeVectorMatrixNV(commandBuffer, infoCount, pInfos); + CustomEncoderPostCall::Dispatch(manager, result, device, pPipelineInfo, pPropertiesCount, pProperties); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, infoCount, pInfos); + return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkSetLatencySleepModeNV( +VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelinePropertiesARM( VkDevice device, - VkSwapchainKHR swapchain, - const VkLatencySleepModeInfoNV* pSleepModeInfo) + const VkDataGraphPipelineInfoARM* pPipelineInfo, + uint32_t propertiesCount, + VkDataGraphPipelinePropertyQueryResultARM* pProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25746,30 +26821,41 @@ VKAPI_ATTR VkResult VKAPI_CALL vkSetLatencySleepModeNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, swapchain, pSleepModeInfo); + bool omit_output_data = false; - VkResult result = vulkan_wrappers::GetDeviceTable(device)->SetLatencySleepModeNV(device, swapchain, pSleepModeInfo); + CustomEncoderPreCall::Dispatch(manager, device, pPipelineInfo, propertiesCount, pProperties); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetLatencySleepModeNV); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkDataGraphPipelineInfoARM* pPipelineInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pPipelineInfo, handle_unwrap_memory); + + VkResult result = vulkan_wrappers::GetDeviceTable(device)->GetDataGraphPipelinePropertiesARM(device, pPipelineInfo_unwrapped, propertiesCount, pProperties); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetDataGraphPipelinePropertiesARM); if (encoder) { encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); - EncodeStructPtr(encoder, pSleepModeInfo); + EncodeStructPtr(encoder, pPipelineInfo); + encoder->EncodeUInt32Value(propertiesCount); + EncodeStructArray(encoder, pProperties, propertiesCount, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, pSleepModeInfo); + CustomEncoderPostCall::Dispatch(manager, result, device, pPipelineInfo, propertiesCount, pProperties); return result; } -VKAPI_ATTR VkResult VKAPI_CALL vkLatencySleepNV( - VkDevice device, - VkSwapchainKHR swapchain, - const VkLatencySleepInfoNV* pSleepInfo) +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t* pQueueFamilyDataGraphPropertyCount, + VkQueueFamilyDataGraphPropertiesARM* pQueueFamilyDataGraphProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25785,33 +26871,37 @@ VKAPI_ATTR VkResult VKAPI_CALL vkLatencySleepNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, swapchain, pSleepInfo); + bool omit_output_data = false; - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkLatencySleepInfoNV* pSleepInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pSleepInfo, handle_unwrap_memory); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, pQueueFamilyDataGraphPropertyCount, pQueueFamilyDataGraphProperties); - VkResult result = vulkan_wrappers::GetDeviceTable(device)->LatencySleepNV(device, swapchain, pSleepInfo_unwrapped); + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM(physicalDevice, queueFamilyIndex, pQueueFamilyDataGraphPropertyCount, pQueueFamilyDataGraphProperties); + if (result < 0) + { + omit_output_data = true; + } - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkLatencySleepNV); + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); - EncodeStructPtr(encoder, pSleepInfo); + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Value(queueFamilyIndex); + encoder->EncodeUInt32Ptr(pQueueFamilyDataGraphPropertyCount, omit_output_data); + EncodeStructArray(encoder, pQueueFamilyDataGraphProperties, (pQueueFamilyDataGraphPropertyCount != nullptr) ? (*pQueueFamilyDataGraphPropertyCount) : 0, omit_output_data); encoder->EncodeEnumValue(result); manager->EndApiCallCapture(); } - CustomEncoderPostCall::Dispatch(manager, result, device, swapchain, pSleepInfo); + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, pQueueFamilyDataGraphPropertyCount, pQueueFamilyDataGraphProperties); return result; } -VKAPI_ATTR void VKAPI_CALL vkSetLatencyMarkerNV( - VkDevice device, - VkSwapchainKHR swapchain, - const VkSetLatencyMarkerInfoNV* pLatencyMarkerInfo) +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* pQueueFamilyDataGraphProcessingEngineInfo, + VkQueueFamilyDataGraphProcessingEnginePropertiesARM* pQueueFamilyDataGraphProcessingEngineProperties) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25827,27 +26917,26 @@ VKAPI_ATTR void VKAPI_CALL vkSetLatencyMarkerNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, swapchain, pLatencyMarkerInfo); + CustomEncoderPreCall::Dispatch(manager, physicalDevice, pQueueFamilyDataGraphProcessingEngineInfo, pQueueFamilyDataGraphProcessingEngineProperties); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkSetLatencyMarkerNV); + vulkan_wrappers::GetInstanceTable(physicalDevice)->GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM(physicalDevice, pQueueFamilyDataGraphProcessingEngineInfo, pQueueFamilyDataGraphProcessingEngineProperties); + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); - EncodeStructPtr(encoder, pLatencyMarkerInfo); + encoder->EncodeVulkanHandleValue(physicalDevice); + EncodeStructPtr(encoder, pQueueFamilyDataGraphProcessingEngineInfo); + EncodeStructPtr(encoder, pQueueFamilyDataGraphProcessingEngineProperties); manager->EndApiCallCapture(); } - vulkan_wrappers::GetDeviceTable(device)->SetLatencyMarkerNV(device, swapchain, pLatencyMarkerInfo); - - CustomEncoderPostCall::Dispatch(manager, device, swapchain, pLatencyMarkerInfo); + CustomEncoderPostCall::Dispatch(manager, physicalDevice, pQueueFamilyDataGraphProcessingEngineInfo, pQueueFamilyDataGraphProcessingEngineProperties); } -VKAPI_ATTR void VKAPI_CALL vkGetLatencyTimingsNV( - VkDevice device, - VkSwapchainKHR swapchain, - VkGetLatencyMarkerInfoNV* pLatencyMarkerInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdSetAttachmentFeedbackLoopEnableEXT( + VkCommandBuffer commandBuffer, + VkImageAspectFlags aspectMask) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25863,26 +26952,25 @@ VKAPI_ATTR void VKAPI_CALL vkGetLatencyTimingsNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, device, swapchain, pLatencyMarkerInfo); - - vulkan_wrappers::GetDeviceTable(device)->GetLatencyTimingsNV(device, swapchain, pLatencyMarkerInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, aspectMask); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkGetLatencyTimingsNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetAttachmentFeedbackLoopEnableEXT); if (encoder) { - encoder->EncodeVulkanHandleValue(device); - encoder->EncodeVulkanHandleValue(swapchain); - EncodeStructPtr(encoder, pLatencyMarkerInfo); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + encoder->EncodeFlagsValue(aspectMask); + manager->EndCommandApiCallCapture(commandBuffer); } - CustomEncoderPostCall::Dispatch(manager, device, swapchain, pLatencyMarkerInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetAttachmentFeedbackLoopEnableEXT(commandBuffer, aspectMask); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, aspectMask); } -VKAPI_ATTR void VKAPI_CALL vkQueueNotifyOutOfBandNV( - VkQueue queue, - const VkOutOfBandQueueTypeInfoNV* pQueueTypeInfo) +VKAPI_ATTR void VKAPI_CALL vkCmdBindTileMemoryQCOM( + VkCommandBuffer commandBuffer, + const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25898,25 +26986,28 @@ VKAPI_ATTR void VKAPI_CALL vkQueueNotifyOutOfBandNV( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, queue, pQueueTypeInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pTileMemoryBindInfo); - auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkQueueNotifyOutOfBandNV); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindTileMemoryQCOM); if (encoder) { - encoder->EncodeVulkanHandleValue(queue); - EncodeStructPtr(encoder, pQueueTypeInfo); - manager->EndApiCallCapture(); + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pTileMemoryBindInfo); + manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindTileMemoryQCOMHandles, pTileMemoryBindInfo); } - vulkan_wrappers::GetDeviceTable(queue)->QueueNotifyOutOfBandNV(queue, pQueueTypeInfo); + auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); + const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pTileMemoryBindInfo, handle_unwrap_memory); - CustomEncoderPostCall::Dispatch(manager, queue, pQueueTypeInfo); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindTileMemoryQCOM(commandBuffer, pTileMemoryBindInfo_unwrapped); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pTileMemoryBindInfo); } -VKAPI_ATTR void VKAPI_CALL vkCmdSetAttachmentFeedbackLoopEnableEXT( +VKAPI_ATTR void VKAPI_CALL vkCmdDecompressMemoryEXT( VkCommandBuffer commandBuffer, - VkImageAspectFlags aspectMask) + const VkDecompressMemoryInfoEXT* pDecompressMemoryInfoEXT) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25932,25 +27023,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetAttachmentFeedbackLoopEnableEXT( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, aspectMask); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pDecompressMemoryInfoEXT); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetAttachmentFeedbackLoopEnableEXT); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDecompressMemoryEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - encoder->EncodeFlagsValue(aspectMask); + EncodeStructPtr(encoder, pDecompressMemoryInfoEXT); manager->EndCommandApiCallCapture(commandBuffer); } - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetAttachmentFeedbackLoopEnableEXT(commandBuffer, aspectMask); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDecompressMemoryEXT(commandBuffer, pDecompressMemoryInfoEXT); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, aspectMask); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pDecompressMemoryInfoEXT); } -VKAPI_ATTR void VKAPI_CALL vkCmdBindTileMemoryQCOM( +VKAPI_ATTR void VKAPI_CALL vkCmdDecompressMemoryIndirectCountEXT( VkCommandBuffer commandBuffer, - const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo) + VkMemoryDecompressionMethodFlagsEXT decompressionMethod, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t maxDecompressionCount, + uint32_t stride) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -25966,22 +27061,23 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindTileMemoryQCOM( shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); } - CustomEncoderPreCall::Dispatch(manager, commandBuffer, pTileMemoryBindInfo); + CustomEncoderPreCall::Dispatch(manager, commandBuffer, decompressionMethod, indirectCommandsAddress, indirectCommandsCountAddress, maxDecompressionCount, stride); - auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBindTileMemoryQCOM); + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdDecompressMemoryIndirectCountEXT); if (encoder) { encoder->EncodeVulkanHandleValue(commandBuffer); - EncodeStructPtr(encoder, pTileMemoryBindInfo); - manager->EndCommandApiCallCapture(commandBuffer, TrackCmdBindTileMemoryQCOMHandles, pTileMemoryBindInfo); + encoder->EncodeFlags64Value(decompressionMethod); + encoder->EncodeUInt64Value(indirectCommandsAddress); + encoder->EncodeUInt64Value(indirectCommandsCountAddress); + encoder->EncodeUInt32Value(maxDecompressionCount); + encoder->EncodeUInt32Value(stride); + manager->EndCommandApiCallCapture(commandBuffer); } - auto handle_unwrap_memory = manager->GetHandleUnwrapMemory(); - const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo_unwrapped = vulkan_wrappers::UnwrapStructPtrHandles(pTileMemoryBindInfo, handle_unwrap_memory); - - vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBindTileMemoryQCOM(commandBuffer, pTileMemoryBindInfo_unwrapped); + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdDecompressMemoryIndirectCountEXT(commandBuffer, decompressionMethod, indirectCommandsAddress, indirectCommandsCountAddress, maxDecompressionCount, stride); - CustomEncoderPostCall::Dispatch(manager, commandBuffer, pTileMemoryBindInfo); + CustomEncoderPostCall::Dispatch(manager, commandBuffer, decompressionMethod, indirectCommandsAddress, indirectCommandsCountAddress, maxDecompressionCount, stride); } @@ -26579,9 +27675,58 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryMetalHandlePropertiesEXT( } +VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t* pCounterCount, + VkPerformanceCounterARM* pCounters, + VkPerformanceCounterDescriptionARM* pCounterDescriptions) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + bool omit_output_data = false; + + CustomEncoderPreCall::Dispatch(manager, physicalDevice, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions); + + VkResult result = vulkan_wrappers::GetInstanceTable(physicalDevice)->EnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(physicalDevice, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions); + if (result < 0) + { + omit_output_data = true; + } + + auto encoder = manager->BeginApiCallCapture(format::ApiCallId::ApiCall_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM); + if (encoder) + { + encoder->EncodeVulkanHandleValue(physicalDevice); + encoder->EncodeUInt32Value(queueFamilyIndex); + encoder->EncodeUInt32Ptr(pCounterCount, omit_output_data); + EncodeStructArray(encoder, pCounters, (pCounterCount != nullptr) ? (*pCounterCount) : 0, omit_output_data); + EncodeStructArray(encoder, pCounterDescriptions, (pCounterCount != nullptr) ? (*pCounterCount) : 0, omit_output_data); + encoder->EncodeEnumValue(result); + manager->EndApiCallCapture(); + } + + CustomEncoderPostCall::Dispatch(manager, result, physicalDevice, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions); + + return result; + +} + VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering2EXT( VkCommandBuffer commandBuffer, - const VkRenderingEndInfoEXT* pRenderingEndInfo) + const VkRenderingEndInfoKHR* pRenderingEndInfo) { VulkanCaptureManager* manager = VulkanCaptureManager::Get(); GFXRECON_ASSERT(manager != nullptr); @@ -26613,6 +27758,74 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering2EXT( } +VKAPI_ATTR void VKAPI_CALL vkCmdBeginCustomResolveEXT( + VkCommandBuffer commandBuffer, + const VkBeginCustomResolveInfoEXT* pBeginCustomResolveInfo) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pBeginCustomResolveInfo); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdBeginCustomResolveEXT); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pBeginCustomResolveInfo); + manager->EndCommandApiCallCapture(commandBuffer); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdBeginCustomResolveEXT(commandBuffer, pBeginCustomResolveInfo); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pBeginCustomResolveInfo); + +} + +VKAPI_ATTR void VKAPI_CALL vkCmdSetComputeOccupancyPriorityNV( + VkCommandBuffer commandBuffer, + const VkComputeOccupancyPriorityParametersNV* pParameters) +{ + VulkanCaptureManager* manager = VulkanCaptureManager::Get(); + GFXRECON_ASSERT(manager != nullptr); + auto force_command_serialization = manager->GetForceCommandSerialization(); + std::shared_lock shared_api_call_lock; + std::unique_lock exclusive_api_call_lock; + if (force_command_serialization) + { + exclusive_api_call_lock = VulkanCaptureManager::AcquireExclusiveApiCallLock(); + } + else + { + shared_api_call_lock = VulkanCaptureManager::AcquireSharedApiCallLock(); + } + + CustomEncoderPreCall::Dispatch(manager, commandBuffer, pParameters); + + auto encoder = manager->BeginTrackedApiCallCapture(format::ApiCallId::ApiCall_vkCmdSetComputeOccupancyPriorityNV); + if (encoder) + { + encoder->EncodeVulkanHandleValue(commandBuffer); + EncodeStructPtr(encoder, pParameters); + manager->EndCommandApiCallCapture(commandBuffer); + } + + vulkan_wrappers::GetDeviceTable(commandBuffer)->CmdSetComputeOccupancyPriorityNV(commandBuffer, pParameters); + + CustomEncoderPostCall::Dispatch(manager, commandBuffer, pParameters); + +} + VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureKHR( VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_api_call_encoders.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_api_call_encoders.h index ec41c691b..88687797b 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_api_call_encoders.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_api_call_encoders.h @@ -238,29 +238,6 @@ VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore( VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator); -VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent( - VkDevice device, - const VkEventCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkEvent* pEvent); - -VKAPI_ATTR void VKAPI_CALL vkDestroyEvent( - VkDevice device, - VkEvent event, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus( - VkDevice device, - VkEvent event); - -VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent( - VkDevice device, - VkEvent event); - -VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent( - VkDevice device, - VkEvent event); - VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool( VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, @@ -293,17 +270,6 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer( VkBuffer buffer, const VkAllocationCallbacks* pAllocator); -VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView( - VkDevice device, - const VkBufferViewCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkBufferView* pView); - -VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView( - VkDevice device, - VkBufferView bufferView, - const VkAllocationCallbacks* pAllocator); - VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage( VkDevice device, const VkImageCreateInfo* pCreateInfo, @@ -332,6 +298,174 @@ VKAPI_ATTR void VKAPI_CALL vkDestroyImageView( VkImageView imageView, const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool( + VkDevice device, + const VkCommandPoolCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCommandPool* pCommandPool); + +VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool( + VkDevice device, + VkCommandPool commandPool, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool( + VkDevice device, + VkCommandPool commandPool, + VkCommandPoolResetFlags flags); + +VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers( + VkDevice device, + const VkCommandBufferAllocateInfo* pAllocateInfo, + VkCommandBuffer* pCommandBuffers); + +VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers( + VkDevice device, + VkCommandPool commandPool, + uint32_t commandBufferCount, + const VkCommandBuffer* pCommandBuffers); + +VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer( + VkCommandBuffer commandBuffer, + const VkCommandBufferBeginInfo* pBeginInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer( + VkCommandBuffer commandBuffer); + +VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer( + VkCommandBuffer commandBuffer, + VkCommandBufferResetFlags flags); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer( + VkCommandBuffer commandBuffer, + VkBuffer srcBuffer, + VkBuffer dstBuffer, + uint32_t regionCount, + const VkBufferCopy* pRegions); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage( + VkCommandBuffer commandBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkImageCopy* pRegions); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage( + VkCommandBuffer commandBuffer, + VkBuffer srcBuffer, + VkImage dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkBufferImageCopy* pRegions); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer( + VkCommandBuffer commandBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkBuffer dstBuffer, + uint32_t regionCount, + const VkBufferImageCopy* pRegions); + +VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer( + VkCommandBuffer commandBuffer, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize dataSize, + const void* pData); + +VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer( + VkCommandBuffer commandBuffer, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize size, + uint32_t data); + +VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier( + VkCommandBuffer commandBuffer, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkDependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + const VkMemoryBarrier* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const VkBufferMemoryBarrier* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const VkImageMemoryBarrier* pImageMemoryBarriers); + +VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query, + VkQueryControlFlags flags); + +VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query); + +VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount); + +VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp( + VkCommandBuffer commandBuffer, + VkPipelineStageFlagBits pipelineStage, + VkQueryPool queryPool, + uint32_t query); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags); + +VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands( + VkCommandBuffer commandBuffer, + uint32_t commandBufferCount, + const VkCommandBuffer* pCommandBuffers); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent( + VkDevice device, + const VkEventCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkEvent* pEvent); + +VKAPI_ATTR void VKAPI_CALL vkDestroyEvent( + VkDevice device, + VkEvent event, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus( + VkDevice device, + VkEvent event); + +VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent( + VkDevice device, + VkEvent event); + +VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent( + VkDevice device, + VkEvent event); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView( + VkDevice device, + const VkBufferViewCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkBufferView* pView); + +VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView( + VkDevice device, + VkBufferView bufferView, + const VkAllocationCallbacks* pAllocator); + VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule( VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, @@ -438,6 +572,71 @@ VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets( uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies); +VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t firstSet, + uint32_t descriptorSetCount, + const VkDescriptorSet* pDescriptorSets, + uint32_t dynamicOffsetCount, + const uint32_t* pDynamicOffsets); + +VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage( + VkCommandBuffer commandBuffer, + VkImage image, + VkImageLayout imageLayout, + const VkClearColorValue* pColor, + uint32_t rangeCount, + const VkImageSubresourceRange* pRanges); + +VKAPI_ATTR void VKAPI_CALL vkCmdDispatch( + VkCommandBuffer commandBuffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ); + +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent( + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags stageMask); + +VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent( + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags stageMask); + +VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents( + VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent* pEvents, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + uint32_t memoryBarrierCount, + const VkMemoryBarrier* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const VkBufferMemoryBarrier* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const VkImageMemoryBarrier* pImageMemoryBarriers); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants( + VkCommandBuffer commandBuffer, + VkPipelineLayout layout, + VkShaderStageFlags stageFlags, + uint32_t offset, + uint32_t size, + const void* pValues); + VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer( VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, @@ -456,57 +655,14 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass( VkRenderPass* pRenderPass); VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass( - VkDevice device, - VkRenderPass renderPass, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity( - VkDevice device, - VkRenderPass renderPass, - VkExtent2D* pGranularity); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool( - VkDevice device, - const VkCommandPoolCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkCommandPool* pCommandPool); - -VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool( - VkDevice device, - VkCommandPool commandPool, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool( - VkDevice device, - VkCommandPool commandPool, - VkCommandPoolResetFlags flags); - -VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers( - VkDevice device, - const VkCommandBufferAllocateInfo* pAllocateInfo, - VkCommandBuffer* pCommandBuffers); - -VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers( - VkDevice device, - VkCommandPool commandPool, - uint32_t commandBufferCount, - const VkCommandBuffer* pCommandBuffers); - -VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer( - VkCommandBuffer commandBuffer, - const VkCommandBufferBeginInfo* pBeginInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer( - VkCommandBuffer commandBuffer); - -VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer( - VkCommandBuffer commandBuffer, - VkCommandBufferResetFlags flags); + VkDevice device, + VkRenderPass renderPass, + const VkAllocationCallbacks* pAllocator); -VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline( - VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipeline pipeline); +VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity( + VkDevice device, + VkRenderPass renderPass, + VkExtent2D* pGranularity); VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport( VkCommandBuffer commandBuffer, @@ -554,16 +710,6 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference( VkStencilFaceFlags faceMask, uint32_t reference); -VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets( - VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipelineLayout layout, - uint32_t firstSet, - uint32_t descriptorSetCount, - const VkDescriptorSet* pDescriptorSets, - uint32_t dynamicOffsetCount, - const uint32_t* pDynamicOffsets); - VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer( VkCommandBuffer commandBuffer, VkBuffer buffer, @@ -606,33 +752,6 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect( uint32_t drawCount, uint32_t stride); -VKAPI_ATTR void VKAPI_CALL vkCmdDispatch( - VkCommandBuffer commandBuffer, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ); - -VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer( - VkCommandBuffer commandBuffer, - VkBuffer srcBuffer, - VkBuffer dstBuffer, - uint32_t regionCount, - const VkBufferCopy* pRegions); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage( - VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageCopy* pRegions); - VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage( VkCommandBuffer commandBuffer, VkImage srcImage, @@ -643,44 +762,6 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage( const VkImageBlit* pRegions, VkFilter filter); -VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage( - VkCommandBuffer commandBuffer, - VkBuffer srcBuffer, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkBufferImageCopy* pRegions); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer( - VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkBuffer dstBuffer, - uint32_t regionCount, - const VkBufferImageCopy* pRegions); - -VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer( - VkCommandBuffer commandBuffer, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize dataSize, - const void* pData); - -VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer( - VkCommandBuffer commandBuffer, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize size, - uint32_t data); - -VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage( - VkCommandBuffer commandBuffer, - VkImage image, - VkImageLayout imageLayout, - const VkClearColorValue* pColor, - uint32_t rangeCount, - const VkImageSubresourceRange* pRanges); - VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage( VkCommandBuffer commandBuffer, VkImage image, @@ -705,82 +786,6 @@ VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage( uint32_t regionCount, const VkImageResolve* pRegions); -VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent( - VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags stageMask); - -VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent( - VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags stageMask); - -VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents( - VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent* pEvents, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - uint32_t memoryBarrierCount, - const VkMemoryBarrier* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VkBufferMemoryBarrier* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VkImageMemoryBarrier* pImageMemoryBarriers); - -VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier( - VkCommandBuffer commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - const VkMemoryBarrier* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VkBufferMemoryBarrier* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VkImageMemoryBarrier* pImageMemoryBarriers); - -VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t query, - VkQueryControlFlags flags); - -VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t query); - -VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount); - -VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp( - VkCommandBuffer commandBuffer, - VkPipelineStageFlagBits pipelineStage, - VkQueryPool queryPool, - uint32_t query); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags); - -VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants( - VkCommandBuffer commandBuffer, - VkPipelineLayout layout, - VkShaderStageFlags stageFlags, - uint32_t offset, - uint32_t size, - const void* pValues); - VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass( VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, @@ -793,11 +798,6 @@ VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass( VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass( VkCommandBuffer commandBuffer); -VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands( - VkCommandBuffer commandBuffer, - uint32_t commandBufferCount, - const VkCommandBuffer* pCommandBuffers); - VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2( VkDevice device, uint32_t bindInfoCount, @@ -819,15 +819,6 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask( VkCommandBuffer commandBuffer, uint32_t deviceMask); -VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase( - VkCommandBuffer commandBuffer, - uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ); - VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups( VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, @@ -892,6 +883,46 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2( const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue); +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, + VkExternalBufferProperties* pExternalBufferProperties); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, + VkExternalFenceProperties* pExternalFenceProperties); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, + VkExternalSemaphoreProperties* pExternalSemaphoreProperties); + +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase( + VkCommandBuffer commandBuffer, + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplate( + VkDevice device, + const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); + +VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate( + VkDevice device, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport( + VkDevice device, + const VkDescriptorSetLayoutCreateInfo* pCreateInfo, + VkDescriptorSetLayoutSupport* pSupport); + VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion( VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, @@ -903,36 +934,37 @@ VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion( VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator); -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplate( +VKAPI_ATTR void VKAPI_CALL vkResetQueryPool( VkDevice device, - const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount); -VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate( +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue( VkDevice device, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - const VkAllocationCallbacks* pAllocator); + VkSemaphore semaphore, + uint64_t* pValue); -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, - VkExternalBufferProperties* pExternalBufferProperties); +VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores( + VkDevice device, + const VkSemaphoreWaitInfo* pWaitInfo, + uint64_t timeout); -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, - VkExternalFenceProperties* pExternalFenceProperties); +VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore( + VkDevice device, + const VkSemaphoreSignalInfo* pSignalInfo); -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, - VkExternalSemaphoreProperties* pExternalSemaphoreProperties); +VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddress( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo); + +VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo); -VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport( +VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress( VkDevice device, - const VkDescriptorSetLayoutCreateInfo* pCreateInfo, - VkDescriptorSetLayoutSupport* pSupport); + const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount( VkCommandBuffer commandBuffer, @@ -972,38 +1004,6 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2( VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo); -VKAPI_ATTR void VKAPI_CALL vkResetQueryPool( - VkDevice device, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue( - VkDevice device, - VkSemaphore semaphore, - uint64_t* pValue); - -VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores( - VkDevice device, - const VkSemaphoreWaitInfo* pWaitInfo, - uint64_t timeout); - -VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore( - VkDevice device, - const VkSemaphoreSignalInfo* pSignalInfo); - -VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddress( - VkDevice device, - const VkBufferDeviceAddressInfo* pInfo); - -VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress( - VkDevice device, - const VkBufferDeviceAddressInfo* pInfo); - -VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress( - VkDevice device, - const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); - VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolProperties( VkPhysicalDevice physicalDevice, uint32_t* pToolCount, @@ -1034,22 +1034,6 @@ VKAPI_ATTR void VKAPI_CALL vkGetPrivateData( VkPrivateDataSlot privateDataSlot, uint64_t* pData); -VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2( - VkCommandBuffer commandBuffer, - VkEvent event, - const VkDependencyInfo* pDependencyInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2( - VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags2 stageMask); - -VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2( - VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent* pEvents, - const VkDependencyInfo* pDependencyInfos); - VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2( VkCommandBuffer commandBuffer, const VkDependencyInfo* pDependencyInfo); @@ -1082,6 +1066,38 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2( VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); +VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirements( + VkDevice device, + const VkDeviceBufferMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirements( + VkDevice device, + const VkDeviceImageMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements( + VkDevice device, + const VkDeviceImageMemoryRequirements* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2( + VkCommandBuffer commandBuffer, + VkEvent event, + const VkDependencyInfo* pDependencyInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2( + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags2 stageMask); + +VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2( + VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent* pEvents, + const VkDependencyInfo* pDependencyInfos); + VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2( VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo); @@ -1168,27 +1184,6 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnable( VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable); -VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirements( - VkDevice device, - const VkDeviceBufferMemoryRequirements* pInfo, - VkMemoryRequirements2* pMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirements( - VkDevice device, - const VkDeviceImageMemoryRequirements* pInfo, - VkMemoryRequirements2* pMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements( - VkDevice device, - const VkDeviceImageMemoryRequirements* pInfo, - uint32_t* pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStipple( - VkCommandBuffer commandBuffer, - uint32_t lineStippleFactor, - uint16_t lineStipplePattern); - VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2( VkDevice device, const VkMemoryMapInfo* pMemoryMapInfo, @@ -1198,18 +1193,6 @@ VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2( VkDevice device, const VkMemoryUnmapInfo* pMemoryUnmapInfo); -VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkDeviceSize size, - VkIndexType indexType); - -VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularity( - VkDevice device, - const VkRenderingAreaInfo* pRenderingAreaInfo, - VkExtent2D* pGranularity); - VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayout( VkDevice device, const VkDeviceImageSubresourceInfo* pInfo, @@ -1221,6 +1204,23 @@ VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2( const VkImageSubresource2* pSubresource, VkSubresourceLayout2* pLayout); +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImage( + VkDevice device, + const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemory( + VkDevice device, + const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImage( + VkDevice device, + const VkCopyImageToImageInfo* pCopyImageToImageInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayout( + VkDevice device, + uint32_t transitionCount, + const VkHostImageLayoutTransitionInfo* pTransitions); + VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet( VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, @@ -1229,14 +1229,6 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet( uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites); -VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocations( - VkCommandBuffer commandBuffer, - const VkRenderingAttachmentLocationInfo* pLocationInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndices( - VkCommandBuffer commandBuffer, - const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); - VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2( VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); @@ -1249,22 +1241,30 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2( VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); -VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImage( - VkDevice device, - const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStipple( + VkCommandBuffer commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern); -VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemory( - VkDevice device, - const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); +VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType); -VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImage( +VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularity( VkDevice device, - const VkCopyImageToImageInfo* pCopyImageToImageInfo); + const VkRenderingAreaInfo* pRenderingAreaInfo, + VkExtent2D* pGranularity); -VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayout( - VkDevice device, - uint32_t transitionCount, - const VkHostImageLayoutTransitionInfo* pTransitions); +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocations( + VkCommandBuffer commandBuffer, + const VkRenderingAttachmentLocationInfo* pLocationInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndices( + VkCommandBuffer commandBuffer, + const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR( VkInstance instance, @@ -2098,6 +2098,18 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( VkCommandBuffer commandBuffer, const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo); +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryIndirectKHR( + VkCommandBuffer commandBuffer, + const VkCopyMemoryIndirectInfoKHR* pCopyMemoryIndirectInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToImageIndirectKHR( + VkCommandBuffer commandBuffer, + const VkCopyMemoryToImageIndirectInfoKHR* pCopyMemoryToImageIndirectInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering2KHR( + VkCommandBuffer commandBuffer, + const VkRenderingEndInfoKHR* pRenderingEndInfo); + VKAPI_ATTR void VKAPI_CALL vkFrameBoundaryANDROID( VkDevice device, VkSemaphore semaphore, @@ -2634,6 +2646,28 @@ VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointData2NV( uint32_t* pCheckpointDataCount, VkCheckpointData2NV* pCheckpointData); +VKAPI_ATTR VkResult VKAPI_CALL vkSetSwapchainPresentTimingQueueSizeEXT( + VkDevice device, + VkSwapchainKHR swapchain, + uint32_t size); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainTimingPropertiesEXT( + VkDevice device, + VkSwapchainKHR swapchain, + VkSwapchainTimingPropertiesEXT* pSwapchainTimingProperties, + uint64_t* pSwapchainTimingPropertiesCounter); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainTimeDomainPropertiesEXT( + VkDevice device, + VkSwapchainKHR swapchain, + VkSwapchainTimeDomainPropertiesEXT* pSwapchainTimeDomainProperties, + uint64_t* pTimeDomainsCounter); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingEXT( + VkDevice device, + const VkPastPresentationTimingInfoEXT* pPastPresentationTimingInfo, + VkPastPresentationTimingPropertiesEXT* pPastPresentationTimingProperties); + VKAPI_ATTR VkResult VKAPI_CALL vkInitializePerformanceApiINTEL( VkDevice device, const VkInitializePerformanceApiInfoINTEL* pInitializeInfo); @@ -2912,6 +2946,43 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEndPerTileExecutionQCOM( VkCommandBuffer commandBuffer, const VkPerTileEndInfoQCOM* pPerTileEndInfo); +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSizeEXT( + VkDevice device, + VkDescriptorSetLayout layout, + VkDeviceSize* pLayoutSizeInBytes); + +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutBindingOffsetEXT( + VkDevice device, + VkDescriptorSetLayout layout, + uint32_t binding, + VkDeviceSize* pOffset); + +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorEXT( + VkDevice device, + const VkDescriptorGetInfoEXT* pDescriptorInfo, + size_t dataSize, + void* pDescriptor); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBuffersEXT( + VkCommandBuffer commandBuffer, + uint32_t bufferCount, + const VkDescriptorBufferBindingInfoEXT* pBindingInfos); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetDescriptorBufferOffsetsEXT( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t firstSet, + uint32_t setCount, + const uint32_t* pBufferIndices, + const VkDeviceSize* pOffsets); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBufferEmbeddedSamplersEXT( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set); + VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateEnumNV( VkCommandBuffer commandBuffer, VkFragmentShadingRateNV shadingRate, @@ -3406,6 +3477,70 @@ VKAPI_ATTR void VKAPI_CALL vkQueueNotifyOutOfBandNV( VkQueue queue, const VkOutOfBandQueueTypeInfoNV* pQueueTypeInfo); +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDataGraphPipelinesARM( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkDataGraphPipelineCreateInfoARM* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDataGraphPipelineSessionARM( + VkDevice device, + const VkDataGraphPipelineSessionCreateInfoARM* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDataGraphPipelineSessionARM* pSession); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelineSessionBindPointRequirementsARM( + VkDevice device, + const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* pInfo, + uint32_t* pBindPointRequirementCount, + VkDataGraphPipelineSessionBindPointRequirementARM* pBindPointRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetDataGraphPipelineSessionMemoryRequirementsARM( + VkDevice device, + const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* pInfo, + VkMemoryRequirements2* pMemoryRequirements); + +VKAPI_ATTR VkResult VKAPI_CALL vkBindDataGraphPipelineSessionMemoryARM( + VkDevice device, + uint32_t bindInfoCount, + const VkBindDataGraphPipelineSessionMemoryInfoARM* pBindInfos); + +VKAPI_ATTR void VKAPI_CALL vkDestroyDataGraphPipelineSessionARM( + VkDevice device, + VkDataGraphPipelineSessionARM session, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchDataGraphARM( + VkCommandBuffer commandBuffer, + VkDataGraphPipelineSessionARM session, + const VkDataGraphPipelineDispatchInfoARM* pInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelineAvailablePropertiesARM( + VkDevice device, + const VkDataGraphPipelineInfoARM* pPipelineInfo, + uint32_t* pPropertiesCount, + VkDataGraphPipelinePropertyARM* pProperties); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelinePropertiesARM( + VkDevice device, + const VkDataGraphPipelineInfoARM* pPipelineInfo, + uint32_t propertiesCount, + VkDataGraphPipelinePropertyQueryResultARM* pProperties); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t* pQueueFamilyDataGraphPropertyCount, + VkQueueFamilyDataGraphPropertiesARM* pQueueFamilyDataGraphProperties); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* pQueueFamilyDataGraphProcessingEngineInfo, + VkQueueFamilyDataGraphProcessingEnginePropertiesARM* pQueueFamilyDataGraphProcessingEngineProperties); + VKAPI_ATTR void VKAPI_CALL vkCmdSetAttachmentFeedbackLoopEnableEXT( VkCommandBuffer commandBuffer, VkImageAspectFlags aspectMask); @@ -3414,6 +3549,18 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindTileMemoryQCOM( VkCommandBuffer commandBuffer, const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo); +VKAPI_ATTR void VKAPI_CALL vkCmdDecompressMemoryEXT( + VkCommandBuffer commandBuffer, + const VkDecompressMemoryInfoEXT* pDecompressMemoryInfoEXT); + +VKAPI_ATTR void VKAPI_CALL vkCmdDecompressMemoryIndirectCountEXT( + VkCommandBuffer commandBuffer, + VkMemoryDecompressionMethodFlagsEXT decompressionMethod, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t maxDecompressionCount, + uint32_t stride); + VKAPI_ATTR void VKAPI_CALL vkGetPartitionedAccelerationStructuresBuildSizesNV( VkDevice device, const VkPartitionedAccelerationStructureInstancesInputNV* pInfo, @@ -3488,9 +3635,24 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryMetalHandlePropertiesEXT( const void* pHandle, VkMemoryMetalHandlePropertiesEXT* pMemoryMetalHandleProperties); +VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t* pCounterCount, + VkPerformanceCounterARM* pCounters, + VkPerformanceCounterDescriptionARM* pCounterDescriptions); + VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering2EXT( VkCommandBuffer commandBuffer, - const VkRenderingEndInfoEXT* pRenderingEndInfo); + const VkRenderingEndInfoKHR* pRenderingEndInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdBeginCustomResolveEXT( + VkCommandBuffer commandBuffer, + const VkBeginCustomResolveInfoEXT* pBeginCustomResolveInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetComputeOccupancyPriorityNV( + VkCommandBuffer commandBuffer, + const VkComputeOccupancyPriorityParametersNV* pParameters); VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureKHR( VkDevice device, diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_command_buffer_util.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_command_buffer_util.cpp index 0c5c07fe7..4d26175fb 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_command_buffer_util.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_command_buffer_util.cpp @@ -65,143 +65,156 @@ void TrackBeginCommandBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapp } } -void TrackCmdBindPipelineHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipeline pipeline) +void TrackCmdCopyBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer srcBuffer, VkBuffer dstBuffer) { assert(wrapper != nullptr); - if(pipeline != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::PipelineHandle].insert(vulkan_wrappers::GetWrappedId(pipeline)); + if(srcBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(srcBuffer)); + if(dstBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(dstBuffer)); } -void TrackCmdBindDescriptorSetsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipelineLayout layout, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets) +void TrackCmdCopyImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkImage dstImage) { assert(wrapper != nullptr); - if(layout != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::PipelineLayoutHandle].insert(vulkan_wrappers::GetWrappedId(layout)); - - if (pDescriptorSets != nullptr) - { - for (uint32_t pDescriptorSets_index = 0; pDescriptorSets_index < descriptorSetCount; ++pDescriptorSets_index) - { - if(pDescriptorSets[pDescriptorSets_index] != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::DescriptorSetHandle].insert(vulkan_wrappers::GetWrappedId(pDescriptorSets[pDescriptorSets_index])); - } - } + if(srcImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(srcImage)); + if(dstImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(dstImage)); } -void TrackCmdBindIndexBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer) +void TrackCmdCopyBufferToImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer srcBuffer, VkImage dstImage) { assert(wrapper != nullptr); - if(buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(buffer)); + if(srcBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(srcBuffer)); + if(dstImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(dstImage)); } -void TrackCmdBindVertexBuffersHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t bindingCount, const VkBuffer* pBuffers) +void TrackCmdCopyImageToBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkBuffer dstBuffer) { assert(wrapper != nullptr); - if (pBuffers != nullptr) - { - for (uint32_t pBuffers_index = 0; pBuffers_index < bindingCount; ++pBuffers_index) - { - if(pBuffers[pBuffers_index] != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pBuffers[pBuffers_index])); - } - } + if(srcImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(srcImage)); + if(dstBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(dstBuffer)); } -void TrackCmdDrawIndirectHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer) +void TrackCmdUpdateBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer dstBuffer) { assert(wrapper != nullptr); - if(buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(buffer)); + if(dstBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(dstBuffer)); } -void TrackCmdDrawIndexedIndirectHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer) +void TrackCmdFillBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer dstBuffer) { assert(wrapper != nullptr); - if(buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(buffer)); + if(dstBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(dstBuffer)); } -void TrackCmdDispatchIndirectHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer) +void TrackCmdPipelineBarrierHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) { assert(wrapper != nullptr); - if(buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(buffer)); + if (pBufferMemoryBarriers != nullptr) + { + for (uint32_t pBufferMemoryBarriers_index = 0; pBufferMemoryBarriers_index < bufferMemoryBarrierCount; ++pBufferMemoryBarriers_index) + { + if(pBufferMemoryBarriers[pBufferMemoryBarriers_index].buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pBufferMemoryBarriers[pBufferMemoryBarriers_index].buffer)); + } + } + + if (pImageMemoryBarriers != nullptr) + { + for (uint32_t pImageMemoryBarriers_index = 0; pImageMemoryBarriers_index < imageMemoryBarrierCount; ++pImageMemoryBarriers_index) + { + if(pImageMemoryBarriers[pImageMemoryBarriers_index].image != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(pImageMemoryBarriers[pImageMemoryBarriers_index].image)); + } + } } -void TrackCmdCopyBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer srcBuffer, VkBuffer dstBuffer) +void TrackCmdBeginQueryHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool) { assert(wrapper != nullptr); - if(srcBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(srcBuffer)); - if(dstBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(dstBuffer)); + if(queryPool != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::QueryPoolHandle].insert(vulkan_wrappers::GetWrappedId(queryPool)); } -void TrackCmdCopyImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkImage dstImage) +void TrackCmdEndQueryHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool) { assert(wrapper != nullptr); - if(srcImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(srcImage)); - if(dstImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(dstImage)); + if(queryPool != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::QueryPoolHandle].insert(vulkan_wrappers::GetWrappedId(queryPool)); } -void TrackCmdBlitImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkImage dstImage) +void TrackCmdResetQueryPoolHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool) { assert(wrapper != nullptr); - if(srcImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(srcImage)); - if(dstImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(dstImage)); + if(queryPool != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::QueryPoolHandle].insert(vulkan_wrappers::GetWrappedId(queryPool)); } -void TrackCmdCopyBufferToImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer srcBuffer, VkImage dstImage) +void TrackCmdWriteTimestampHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool) { assert(wrapper != nullptr); - if(srcBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(srcBuffer)); - if(dstImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(dstImage)); + if(queryPool != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::QueryPoolHandle].insert(vulkan_wrappers::GetWrappedId(queryPool)); } -void TrackCmdCopyImageToBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkBuffer dstBuffer) +void TrackCmdCopyQueryPoolResultsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool, VkBuffer dstBuffer) { assert(wrapper != nullptr); - if(srcImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(srcImage)); + if(queryPool != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::QueryPoolHandle].insert(vulkan_wrappers::GetWrappedId(queryPool)); if(dstBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(dstBuffer)); } -void TrackCmdUpdateBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer dstBuffer) +void TrackCmdExecuteCommandsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers) { assert(wrapper != nullptr); - if(dstBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(dstBuffer)); + if (pCommandBuffers != nullptr) + { + for (uint32_t pCommandBuffers_index = 0; pCommandBuffers_index < commandBufferCount; ++pCommandBuffers_index) + { + if(pCommandBuffers[pCommandBuffers_index] != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::CommandBufferHandle].insert(vulkan_wrappers::GetWrappedId(pCommandBuffers[pCommandBuffers_index])); + } + } } -void TrackCmdFillBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer dstBuffer) +void TrackCmdBindPipelineHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipeline pipeline) { assert(wrapper != nullptr); - if(dstBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(dstBuffer)); + if(pipeline != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::PipelineHandle].insert(vulkan_wrappers::GetWrappedId(pipeline)); } -void TrackCmdClearColorImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage image) +void TrackCmdBindDescriptorSetsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipelineLayout layout, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets) { assert(wrapper != nullptr); - if(image != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(image)); + if(layout != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::PipelineLayoutHandle].insert(vulkan_wrappers::GetWrappedId(layout)); + + if (pDescriptorSets != nullptr) + { + for (uint32_t pDescriptorSets_index = 0; pDescriptorSets_index < descriptorSetCount; ++pDescriptorSets_index) + { + if(pDescriptorSets[pDescriptorSets_index] != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::DescriptorSetHandle].insert(vulkan_wrappers::GetWrappedId(pDescriptorSets[pDescriptorSets_index])); + } + } } -void TrackCmdClearDepthStencilImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage image) +void TrackCmdClearColorImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage image) { assert(wrapper != nullptr); if(image != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(image)); } -void TrackCmdResolveImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkImage dstImage) +void TrackCmdDispatchIndirectHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer) { assert(wrapper != nullptr); - if(srcImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(srcImage)); - if(dstImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(dstImage)); + if(buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(buffer)); } void TrackCmdSetEventHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkEvent event) @@ -247,68 +260,68 @@ void TrackCmdWaitEventsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, u } } -void TrackCmdPipelineBarrierHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) +void TrackCmdPushConstantsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipelineLayout layout) { assert(wrapper != nullptr); - if (pBufferMemoryBarriers != nullptr) - { - for (uint32_t pBufferMemoryBarriers_index = 0; pBufferMemoryBarriers_index < bufferMemoryBarrierCount; ++pBufferMemoryBarriers_index) - { - if(pBufferMemoryBarriers[pBufferMemoryBarriers_index].buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pBufferMemoryBarriers[pBufferMemoryBarriers_index].buffer)); - } - } + if(layout != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::PipelineLayoutHandle].insert(vulkan_wrappers::GetWrappedId(layout)); +} - if (pImageMemoryBarriers != nullptr) - { - for (uint32_t pImageMemoryBarriers_index = 0; pImageMemoryBarriers_index < imageMemoryBarrierCount; ++pImageMemoryBarriers_index) - { - if(pImageMemoryBarriers[pImageMemoryBarriers_index].image != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(pImageMemoryBarriers[pImageMemoryBarriers_index].image)); - } - } +void TrackCmdBindIndexBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer) +{ + assert(wrapper != nullptr); + + if(buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(buffer)); } -void TrackCmdBeginQueryHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool) +void TrackCmdBindVertexBuffersHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t bindingCount, const VkBuffer* pBuffers) { assert(wrapper != nullptr); - if(queryPool != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::QueryPoolHandle].insert(vulkan_wrappers::GetWrappedId(queryPool)); + if (pBuffers != nullptr) + { + for (uint32_t pBuffers_index = 0; pBuffers_index < bindingCount; ++pBuffers_index) + { + if(pBuffers[pBuffers_index] != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pBuffers[pBuffers_index])); + } + } } -void TrackCmdEndQueryHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool) +void TrackCmdDrawIndirectHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer) { assert(wrapper != nullptr); - if(queryPool != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::QueryPoolHandle].insert(vulkan_wrappers::GetWrappedId(queryPool)); + if(buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(buffer)); } -void TrackCmdResetQueryPoolHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool) +void TrackCmdDrawIndexedIndirectHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer) { assert(wrapper != nullptr); - if(queryPool != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::QueryPoolHandle].insert(vulkan_wrappers::GetWrappedId(queryPool)); + if(buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(buffer)); } -void TrackCmdWriteTimestampHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool) +void TrackCmdBlitImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkImage dstImage) { assert(wrapper != nullptr); - if(queryPool != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::QueryPoolHandle].insert(vulkan_wrappers::GetWrappedId(queryPool)); + if(srcImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(srcImage)); + if(dstImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(dstImage)); } -void TrackCmdCopyQueryPoolResultsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool, VkBuffer dstBuffer) +void TrackCmdClearDepthStencilImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage image) { assert(wrapper != nullptr); - if(queryPool != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::QueryPoolHandle].insert(vulkan_wrappers::GetWrappedId(queryPool)); - if(dstBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(dstBuffer)); + if(image != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(image)); } -void TrackCmdPushConstantsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipelineLayout layout) +void TrackCmdResolveImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkImage dstImage) { assert(wrapper != nullptr); - if(layout != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::PipelineLayoutHandle].insert(vulkan_wrappers::GetWrappedId(layout)); + if(srcImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(srcImage)); + if(dstImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(dstImage)); } void TrackCmdBeginRenderPassHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkRenderPassBeginInfo* pRenderPassBegin) @@ -344,19 +357,6 @@ void TrackCmdBeginRenderPassHandles(vulkan_wrappers::CommandBufferWrapper* wrapp } } -void TrackCmdExecuteCommandsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers) -{ - assert(wrapper != nullptr); - - if (pCommandBuffers != nullptr) - { - for (uint32_t pCommandBuffers_index = 0; pCommandBuffers_index < commandBufferCount; ++pCommandBuffers_index) - { - if(pCommandBuffers[pCommandBuffers_index] != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::CommandBufferHandle].insert(vulkan_wrappers::GetWrappedId(pCommandBuffers[pCommandBuffers_index])); - } - } -} - void TrackCmdDrawIndirectCountHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer, VkBuffer countBuffer) { assert(wrapper != nullptr); @@ -406,12 +406,10 @@ void TrackCmdBeginRenderPass2Handles(vulkan_wrappers::CommandBufferWrapper* wrap } } -void TrackCmdSetEvent2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkEvent event, const VkDependencyInfo* pDependencyInfo) +void TrackCmdPipelineBarrier2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkDependencyInfo* pDependencyInfo) { assert(wrapper != nullptr); - if(event != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::EventHandle].insert(vulkan_wrappers::GetWrappedId(event)); - if (pDependencyInfo != nullptr) { if (pDependencyInfo->pBufferMemoryBarriers != nullptr) @@ -432,52 +430,63 @@ void TrackCmdSetEvent2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, Vk } } -void TrackCmdResetEvent2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkEvent event) +void TrackCmdWriteTimestamp2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool) { assert(wrapper != nullptr); - if(event != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::EventHandle].insert(vulkan_wrappers::GetWrappedId(event)); + if(queryPool != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::QueryPoolHandle].insert(vulkan_wrappers::GetWrappedId(queryPool)); } -void TrackCmdWaitEvents2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos) +void TrackCmdCopyBuffer2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkCopyBufferInfo2* pCopyBufferInfo) { assert(wrapper != nullptr); - if (pEvents != nullptr) + if (pCopyBufferInfo != nullptr) { - for (uint32_t pEvents_index = 0; pEvents_index < eventCount; ++pEvents_index) - { - if(pEvents[pEvents_index] != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::EventHandle].insert(vulkan_wrappers::GetWrappedId(pEvents[pEvents_index])); - } + if(pCopyBufferInfo->srcBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pCopyBufferInfo->srcBuffer)); + if(pCopyBufferInfo->dstBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pCopyBufferInfo->dstBuffer)); } +} - if (pDependencyInfos != nullptr) +void TrackCmdCopyImage2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkCopyImageInfo2* pCopyImageInfo) +{ + assert(wrapper != nullptr); + + if (pCopyImageInfo != nullptr) { - for (uint32_t pDependencyInfos_index = 0; pDependencyInfos_index < eventCount; ++pDependencyInfos_index) - { - if (pDependencyInfos[pDependencyInfos_index].pBufferMemoryBarriers != nullptr) - { - for (uint32_t pBufferMemoryBarriers_index = 0; pBufferMemoryBarriers_index < pDependencyInfos[pDependencyInfos_index].bufferMemoryBarrierCount; ++pBufferMemoryBarriers_index) - { - if(pDependencyInfos[pDependencyInfos_index].pBufferMemoryBarriers[pBufferMemoryBarriers_index].buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pDependencyInfos[pDependencyInfos_index].pBufferMemoryBarriers[pBufferMemoryBarriers_index].buffer)); - } - } + if(pCopyImageInfo->srcImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(pCopyImageInfo->srcImage)); + if(pCopyImageInfo->dstImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(pCopyImageInfo->dstImage)); + } +} - if (pDependencyInfos[pDependencyInfos_index].pImageMemoryBarriers != nullptr) - { - for (uint32_t pImageMemoryBarriers_index = 0; pImageMemoryBarriers_index < pDependencyInfos[pDependencyInfos_index].imageMemoryBarrierCount; ++pImageMemoryBarriers_index) - { - if(pDependencyInfos[pDependencyInfos_index].pImageMemoryBarriers[pImageMemoryBarriers_index].image != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(pDependencyInfos[pDependencyInfos_index].pImageMemoryBarriers[pImageMemoryBarriers_index].image)); - } - } - } +void TrackCmdCopyBufferToImage2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo) +{ + assert(wrapper != nullptr); + + if (pCopyBufferToImageInfo != nullptr) + { + if(pCopyBufferToImageInfo->srcBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pCopyBufferToImageInfo->srcBuffer)); + if(pCopyBufferToImageInfo->dstImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(pCopyBufferToImageInfo->dstImage)); } } -void TrackCmdPipelineBarrier2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkDependencyInfo* pDependencyInfo) +void TrackCmdCopyImageToBuffer2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo) +{ + assert(wrapper != nullptr); + + if (pCopyImageToBufferInfo != nullptr) + { + if(pCopyImageToBufferInfo->srcImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(pCopyImageToBufferInfo->srcImage)); + if(pCopyImageToBufferInfo->dstBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pCopyImageToBufferInfo->dstBuffer)); + } +} + +void TrackCmdSetEvent2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkEvent event, const VkDependencyInfo* pDependencyInfo) { assert(wrapper != nullptr); + if(event != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::EventHandle].insert(vulkan_wrappers::GetWrappedId(event)); + if (pDependencyInfo != nullptr) { if (pDependencyInfo->pBufferMemoryBarriers != nullptr) @@ -498,54 +507,45 @@ void TrackCmdPipelineBarrier2Handles(vulkan_wrappers::CommandBufferWrapper* wrap } } -void TrackCmdWriteTimestamp2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool) -{ - assert(wrapper != nullptr); - - if(queryPool != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::QueryPoolHandle].insert(vulkan_wrappers::GetWrappedId(queryPool)); -} - -void TrackCmdCopyBuffer2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkCopyBufferInfo2* pCopyBufferInfo) +void TrackCmdResetEvent2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkEvent event) { assert(wrapper != nullptr); - if (pCopyBufferInfo != nullptr) - { - if(pCopyBufferInfo->srcBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pCopyBufferInfo->srcBuffer)); - if(pCopyBufferInfo->dstBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pCopyBufferInfo->dstBuffer)); - } + if(event != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::EventHandle].insert(vulkan_wrappers::GetWrappedId(event)); } -void TrackCmdCopyImage2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkCopyImageInfo2* pCopyImageInfo) +void TrackCmdWaitEvents2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos) { assert(wrapper != nullptr); - if (pCopyImageInfo != nullptr) + if (pEvents != nullptr) { - if(pCopyImageInfo->srcImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(pCopyImageInfo->srcImage)); - if(pCopyImageInfo->dstImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(pCopyImageInfo->dstImage)); + for (uint32_t pEvents_index = 0; pEvents_index < eventCount; ++pEvents_index) + { + if(pEvents[pEvents_index] != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::EventHandle].insert(vulkan_wrappers::GetWrappedId(pEvents[pEvents_index])); + } } -} -void TrackCmdCopyBufferToImage2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo) -{ - assert(wrapper != nullptr); - - if (pCopyBufferToImageInfo != nullptr) + if (pDependencyInfos != nullptr) { - if(pCopyBufferToImageInfo->srcBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pCopyBufferToImageInfo->srcBuffer)); - if(pCopyBufferToImageInfo->dstImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(pCopyBufferToImageInfo->dstImage)); - } -} - -void TrackCmdCopyImageToBuffer2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo) -{ - assert(wrapper != nullptr); + for (uint32_t pDependencyInfos_index = 0; pDependencyInfos_index < eventCount; ++pDependencyInfos_index) + { + if (pDependencyInfos[pDependencyInfos_index].pBufferMemoryBarriers != nullptr) + { + for (uint32_t pBufferMemoryBarriers_index = 0; pBufferMemoryBarriers_index < pDependencyInfos[pDependencyInfos_index].bufferMemoryBarrierCount; ++pBufferMemoryBarriers_index) + { + if(pDependencyInfos[pDependencyInfos_index].pBufferMemoryBarriers[pBufferMemoryBarriers_index].buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pDependencyInfos[pDependencyInfos_index].pBufferMemoryBarriers[pBufferMemoryBarriers_index].buffer)); + } + } - if (pCopyImageToBufferInfo != nullptr) - { - if(pCopyImageToBufferInfo->srcImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(pCopyImageToBufferInfo->srcImage)); - if(pCopyImageToBufferInfo->dstBuffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pCopyImageToBufferInfo->dstBuffer)); + if (pDependencyInfos[pDependencyInfos_index].pImageMemoryBarriers != nullptr) + { + for (uint32_t pImageMemoryBarriers_index = 0; pImageMemoryBarriers_index < pDependencyInfos[pDependencyInfos_index].imageMemoryBarrierCount; ++pImageMemoryBarriers_index) + { + if(pDependencyInfos[pDependencyInfos_index].pImageMemoryBarriers[pImageMemoryBarriers_index].image != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(pDependencyInfos[pDependencyInfos_index].pImageMemoryBarriers[pImageMemoryBarriers_index].image)); + } + } + } } } @@ -636,13 +636,6 @@ void TrackCmdBindVertexBuffers2Handles(vulkan_wrappers::CommandBufferWrapper* wr } } -void TrackCmdBindIndexBuffer2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer) -{ - assert(wrapper != nullptr); - - if(buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(buffer)); -} - void TrackCmdPushDescriptorSetHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipelineLayout layout, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites) { assert(wrapper != nullptr); @@ -888,6 +881,13 @@ void TrackCmdPushDescriptorSet2Handles(vulkan_wrappers::CommandBufferWrapper* wr } } +void TrackCmdBindIndexBuffer2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer) +{ + assert(wrapper != nullptr); + + if(buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(buffer)); +} + void TrackCmdBeginVideoCodingKHRHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkVideoBeginCodingInfoKHR* pBeginInfo) { assert(wrapper != nullptr); @@ -1516,6 +1516,16 @@ void TrackCmdBindDescriptorBufferEmbeddedSamplers2EXTHandles(vulkan_wrappers::Co } } +void TrackCmdCopyMemoryToImageIndirectKHRHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkCopyMemoryToImageIndirectInfoKHR* pCopyMemoryToImageIndirectInfo) +{ + assert(wrapper != nullptr); + + if (pCopyMemoryToImageIndirectInfo != nullptr) + { + if(pCopyMemoryToImageIndirectInfo->dstImage != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::ImageHandle].insert(vulkan_wrappers::GetWrappedId(pCopyMemoryToImageIndirectInfo->dstImage)); + } +} + void TrackCmdBindTransformFeedbackBuffersEXTHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t bindingCount, const VkBuffer* pBuffers) { assert(wrapper != nullptr); @@ -1757,6 +1767,48 @@ void TrackCmdBindPipelineShaderGroupNVHandles(vulkan_wrappers::CommandBufferWrap if(pipeline != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::PipelineHandle].insert(vulkan_wrappers::GetWrappedId(pipeline)); } +void TrackCmdBindDescriptorBuffersEXTHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t bufferCount, const VkDescriptorBufferBindingInfoEXT* pBindingInfos) +{ + assert(wrapper != nullptr); + + if (pBindingInfos != nullptr) + { + for (uint32_t pBindingInfos_index = 0; pBindingInfos_index < bufferCount; ++pBindingInfos_index) + { + auto pnext_header = reinterpret_cast(pBindingInfos->pNext); + while (pnext_header) + { + switch (pnext_header->sType) + { + default: + break; + case VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT: + { + auto pnext_value = reinterpret_cast(pnext_header); + if(pnext_value->buffer != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::BufferHandle].insert(vulkan_wrappers::GetWrappedId(pnext_value->buffer)); + break; + } + } + pnext_header = pnext_header->pNext; + } + } + } +} + +void TrackCmdSetDescriptorBufferOffsetsEXTHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipelineLayout layout) +{ + assert(wrapper != nullptr); + + if(layout != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::PipelineLayoutHandle].insert(vulkan_wrappers::GetWrappedId(layout)); +} + +void TrackCmdBindDescriptorBufferEmbeddedSamplersEXTHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipelineLayout layout) +{ + assert(wrapper != nullptr); + + if(layout != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::PipelineLayoutHandle].insert(vulkan_wrappers::GetWrappedId(layout)); +} + void TrackCmdBindInvocationMaskHUAWEIHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImageView imageView) { assert(wrapper != nullptr); @@ -1856,6 +1908,13 @@ void TrackCmdBindShadersEXTHandles(vulkan_wrappers::CommandBufferWrapper* wrappe } } +void TrackCmdDispatchDataGraphARMHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkDataGraphPipelineSessionARM session) +{ + assert(wrapper != nullptr); + + if(session != VK_NULL_HANDLE) wrapper->command_handles[vulkan_state_info::CommandHandleType::DataGraphPipelineSessionARMHandle].insert(vulkan_wrappers::GetWrappedId(session)); +} + void TrackCmdBindTileMemoryQCOMHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo) { assert(wrapper != nullptr); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_command_buffer_util.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_command_buffer_util.h index 3acb69119..611eb9293 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_command_buffer_util.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_command_buffer_util.h @@ -47,39 +47,39 @@ GFXRECON_BEGIN_NAMESPACE(encode) void TrackBeginCommandBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkCommandBufferBeginInfo* pBeginInfo); -void TrackCmdBindPipelineHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipeline pipeline); +void TrackCmdCopyBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer srcBuffer, VkBuffer dstBuffer); -void TrackCmdBindDescriptorSetsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipelineLayout layout, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets); +void TrackCmdCopyImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkImage dstImage); -void TrackCmdBindIndexBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer); +void TrackCmdCopyBufferToImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer srcBuffer, VkImage dstImage); -void TrackCmdBindVertexBuffersHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t bindingCount, const VkBuffer* pBuffers); +void TrackCmdCopyImageToBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkBuffer dstBuffer); -void TrackCmdDrawIndirectHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer); +void TrackCmdUpdateBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer dstBuffer); -void TrackCmdDrawIndexedIndirectHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer); +void TrackCmdFillBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer dstBuffer); -void TrackCmdDispatchIndirectHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer); +void TrackCmdPipelineBarrierHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers); -void TrackCmdCopyBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer srcBuffer, VkBuffer dstBuffer); +void TrackCmdBeginQueryHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool); -void TrackCmdCopyImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkImage dstImage); +void TrackCmdEndQueryHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool); -void TrackCmdBlitImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkImage dstImage); +void TrackCmdResetQueryPoolHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool); -void TrackCmdCopyBufferToImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer srcBuffer, VkImage dstImage); +void TrackCmdWriteTimestampHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool); -void TrackCmdCopyImageToBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkBuffer dstBuffer); +void TrackCmdCopyQueryPoolResultsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool, VkBuffer dstBuffer); -void TrackCmdUpdateBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer dstBuffer); +void TrackCmdExecuteCommandsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers); -void TrackCmdFillBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer dstBuffer); +void TrackCmdBindPipelineHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipeline pipeline); -void TrackCmdClearColorImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage image); +void TrackCmdBindDescriptorSetsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipelineLayout layout, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets); -void TrackCmdClearDepthStencilImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage image); +void TrackCmdClearColorImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage image); -void TrackCmdResolveImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkImage dstImage); +void TrackCmdDispatchIndirectHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer); void TrackCmdSetEventHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkEvent event); @@ -87,23 +87,23 @@ void TrackCmdResetEventHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, V void TrackCmdWaitEventsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t eventCount, const VkEvent* pEvents, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers); -void TrackCmdPipelineBarrierHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers); +void TrackCmdPushConstantsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipelineLayout layout); -void TrackCmdBeginQueryHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool); +void TrackCmdBindIndexBufferHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer); -void TrackCmdEndQueryHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool); +void TrackCmdBindVertexBuffersHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t bindingCount, const VkBuffer* pBuffers); -void TrackCmdResetQueryPoolHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool); +void TrackCmdDrawIndirectHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer); -void TrackCmdWriteTimestampHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool); +void TrackCmdDrawIndexedIndirectHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer); -void TrackCmdCopyQueryPoolResultsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool, VkBuffer dstBuffer); +void TrackCmdBlitImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkImage dstImage); -void TrackCmdPushConstantsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipelineLayout layout); +void TrackCmdClearDepthStencilImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage image); -void TrackCmdBeginRenderPassHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkRenderPassBeginInfo* pRenderPassBegin); +void TrackCmdResolveImageHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImage srcImage, VkImage dstImage); -void TrackCmdExecuteCommandsHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers); +void TrackCmdBeginRenderPassHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkRenderPassBeginInfo* pRenderPassBegin); void TrackCmdDrawIndirectCountHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer, VkBuffer countBuffer); @@ -111,12 +111,6 @@ void TrackCmdDrawIndexedIndirectCountHandles(vulkan_wrappers::CommandBufferWrapp void TrackCmdBeginRenderPass2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkRenderPassBeginInfo* pRenderPassBegin); -void TrackCmdSetEvent2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkEvent event, const VkDependencyInfo* pDependencyInfo); - -void TrackCmdResetEvent2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkEvent event); - -void TrackCmdWaitEvents2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos); - void TrackCmdPipelineBarrier2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkDependencyInfo* pDependencyInfo); void TrackCmdWriteTimestamp2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkQueryPool queryPool); @@ -129,6 +123,12 @@ void TrackCmdCopyBufferToImage2Handles(vulkan_wrappers::CommandBufferWrapper* wr void TrackCmdCopyImageToBuffer2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); +void TrackCmdSetEvent2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkEvent event, const VkDependencyInfo* pDependencyInfo); + +void TrackCmdResetEvent2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkEvent event); + +void TrackCmdWaitEvents2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos); + void TrackCmdBlitImage2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkBlitImageInfo2* pBlitImageInfo); void TrackCmdResolveImage2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkResolveImageInfo2* pResolveImageInfo); @@ -137,8 +137,6 @@ void TrackCmdBeginRenderingHandles(vulkan_wrappers::CommandBufferWrapper* wrappe void TrackCmdBindVertexBuffers2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t bindingCount, const VkBuffer* pBuffers); -void TrackCmdBindIndexBuffer2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer); - void TrackCmdPushDescriptorSetHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipelineLayout layout, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites); void TrackCmdBindDescriptorSets2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); @@ -147,6 +145,8 @@ void TrackCmdPushConstants2Handles(vulkan_wrappers::CommandBufferWrapper* wrappe void TrackCmdPushDescriptorSet2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); +void TrackCmdBindIndexBuffer2Handles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkBuffer buffer); + void TrackCmdBeginVideoCodingKHRHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkVideoBeginCodingInfoKHR* pBeginInfo); void TrackCmdDecodeVideoKHRHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkVideoDecodeInfoKHR* pDecodeInfo); @@ -197,6 +197,8 @@ void TrackCmdSetDescriptorBufferOffsets2EXTHandles(vulkan_wrappers::CommandBuffe void TrackCmdBindDescriptorBufferEmbeddedSamplers2EXTHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo); +void TrackCmdCopyMemoryToImageIndirectKHRHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkCopyMemoryToImageIndirectInfoKHR* pCopyMemoryToImageIndirectInfo); + void TrackCmdBindTransformFeedbackBuffersEXTHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t bindingCount, const VkBuffer* pBuffers); void TrackCmdBeginTransformFeedbackEXTHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers); @@ -241,6 +243,12 @@ void TrackCmdExecuteGeneratedCommandsNVHandles(vulkan_wrappers::CommandBufferWra void TrackCmdBindPipelineShaderGroupNVHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipeline pipeline); +void TrackCmdBindDescriptorBuffersEXTHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t bufferCount, const VkDescriptorBufferBindingInfoEXT* pBindingInfos); + +void TrackCmdSetDescriptorBufferOffsetsEXTHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipelineLayout layout); + +void TrackCmdBindDescriptorBufferEmbeddedSamplersEXTHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkPipelineLayout layout); + void TrackCmdBindInvocationMaskHUAWEIHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkImageView imageView); void TrackCmdBuildMicromapsEXTHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t infoCount, const VkMicromapBuildInfoEXT* pInfos); @@ -261,6 +269,8 @@ void TrackCmdOpticalFlowExecuteNVHandles(vulkan_wrappers::CommandBufferWrapper* void TrackCmdBindShadersEXTHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, uint32_t stageCount, const VkShaderEXT* pShaders); +void TrackCmdDispatchDataGraphARMHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, VkDataGraphPipelineSessionARM session); + void TrackCmdBindTileMemoryQCOMHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo); void TrackCmdPreprocessGeneratedCommandsEXTHandles(vulkan_wrappers::CommandBufferWrapper* wrapper, const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo, VkCommandBuffer stateCommandBuffer); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_consumer.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_consumer.h index acd12cc7f..c75033a78 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_consumer.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_consumer.h @@ -299,38 +299,6 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId semaphore, StructPointerDecoder* pAllocator) {} - virtual void Process_vkCreateEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pEvent) {} - - virtual void Process_vkDestroyEvent( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId event, - StructPointerDecoder* pAllocator) {} - - virtual void Process_vkGetEventStatus( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) {} - - virtual void Process_vkSetEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) {} - - virtual void Process_vkResetEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) {} - virtual void Process_vkCreateQueryPool( const ApiCallInfo& call_info, VkResult returnValue, @@ -371,20 +339,6 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId buffer, StructPointerDecoder* pAllocator) {} - virtual void Process_vkCreateBufferView( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pView) {} - - virtual void Process_vkDestroyBufferView( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId bufferView, - StructPointerDecoder* pAllocator) {} - virtual void Process_vkCreateImage( const ApiCallInfo& call_info, VkResult returnValue, @@ -420,6 +374,213 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId imageView, StructPointerDecoder* pAllocator) {} + virtual void Process_vkCreateCommandPool( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pCommandPool) {} + + virtual void Process_vkDestroyCommandPool( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId commandPool, + StructPointerDecoder* pAllocator) {} + + virtual void Process_vkResetCommandPool( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId commandPool, + VkCommandPoolResetFlags flags) {} + + virtual void Process_vkAllocateCommandBuffers( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pAllocateInfo, + HandlePointerDecoder* pCommandBuffers) {} + + virtual void Process_vkFreeCommandBuffers( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId commandPool, + uint32_t commandBufferCount, + HandlePointerDecoder* pCommandBuffers) {} + + virtual void Process_vkBeginCommandBuffer( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId commandBuffer, + StructPointerDecoder* pBeginInfo) {} + + virtual void Process_vkEndCommandBuffer( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId commandBuffer) {} + + virtual void Process_vkResetCommandBuffer( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId commandBuffer, + VkCommandBufferResetFlags flags) {} + + virtual void Process_vkCmdCopyBuffer( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId srcBuffer, + format::HandleId dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions) {} + + virtual void Process_vkCmdCopyImage( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) {} + + virtual void Process_vkCmdCopyBufferToImage( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId srcBuffer, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) {} + + virtual void Process_vkCmdCopyImageToBuffer( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions) {} + + virtual void Process_vkCmdUpdateBuffer( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize dataSize, + PointerDecoder* pData) {} + + virtual void Process_vkCmdFillBuffer( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize size, + uint32_t data) {} + + virtual void Process_vkCmdPipelineBarrier( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkDependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + StructPointerDecoder* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + StructPointerDecoder* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + StructPointerDecoder* pImageMemoryBarriers) {} + + virtual void Process_vkCmdBeginQuery( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t query, + VkQueryControlFlags flags) {} + + virtual void Process_vkCmdEndQuery( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t query) {} + + virtual void Process_vkCmdResetQueryPool( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount) {} + + virtual void Process_vkCmdWriteTimestamp( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineStageFlagBits pipelineStage, + format::HandleId queryPool, + uint32_t query) {} + + virtual void Process_vkCmdCopyQueryPoolResults( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags) {} + + virtual void Process_vkCmdExecuteCommands( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t commandBufferCount, + HandlePointerDecoder* pCommandBuffers) {} + + virtual void Process_vkCreateEvent( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pEvent) {} + + virtual void Process_vkDestroyEvent( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId event, + StructPointerDecoder* pAllocator) {} + + virtual void Process_vkGetEventStatus( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId event) {} + + virtual void Process_vkSetEvent( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId event) {} + + virtual void Process_vkResetEvent( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId event) {} + + virtual void Process_vkCreateBufferView( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pView) {} + + virtual void Process_vkDestroyBufferView( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId bufferView, + StructPointerDecoder* pAllocator) {} + virtual void Process_vkCreateShaderModule( const ApiCallInfo& call_info, VkResult returnValue, @@ -464,16 +625,6 @@ class VulkanConsumer : public VulkanConsumerBase uint32_t srcCacheCount, HandlePointerDecoder* pSrcCaches) {} - virtual void Process_vkCreateGraphicsPipelines( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId pipelineCache, - uint32_t createInfoCount, - StructPointerDecoder* pCreateInfos, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelines) {} - virtual void Process_vkCreateComputePipelines( const ApiCallInfo& call_info, VkResult returnValue, @@ -560,21 +711,105 @@ class VulkanConsumer : public VulkanConsumerBase StructPointerDecoder* pAllocateInfo, HandlePointerDecoder* pDescriptorSets) {} - virtual void Process_vkFreeDescriptorSets( + virtual void Process_vkFreeDescriptorSets( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId descriptorPool, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets) {} + + virtual void Process_vkUpdateDescriptorSets( + const ApiCallInfo& call_info, + format::HandleId device, + uint32_t descriptorWriteCount, + StructPointerDecoder* pDescriptorWrites, + uint32_t descriptorCopyCount, + StructPointerDecoder* pDescriptorCopies) {} + + virtual void Process_vkCmdBindPipeline( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId pipeline) {} + + virtual void Process_vkCmdBindDescriptorSets( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets, + uint32_t dynamicOffsetCount, + PointerDecoder* pDynamicOffsets) {} + + virtual void Process_vkCmdClearColorImage( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId image, + VkImageLayout imageLayout, + StructPointerDecoder* pColor, + uint32_t rangeCount, + StructPointerDecoder* pRanges) {} + + virtual void Process_vkCmdDispatch( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) {} + + virtual void Process_vkCmdDispatchIndirect( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset) {} + + virtual void Process_vkCmdSetEvent( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId event, + VkPipelineStageFlags stageMask) {} + + virtual void Process_vkCmdResetEvent( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId event, + VkPipelineStageFlags stageMask) {} + + virtual void Process_vkCmdWaitEvents( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t eventCount, + HandlePointerDecoder* pEvents, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + uint32_t memoryBarrierCount, + StructPointerDecoder* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + StructPointerDecoder* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + StructPointerDecoder* pImageMemoryBarriers) {} + + virtual void Process_vkCmdPushConstants( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId layout, + VkShaderStageFlags stageFlags, + uint32_t offset, + uint32_t size, + PointerDecoder* pValues) {} + + virtual void Process_vkCreateGraphicsPipelines( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - format::HandleId descriptorPool, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets) {} - - virtual void Process_vkUpdateDescriptorSets( - const ApiCallInfo& call_info, - format::HandleId device, - uint32_t descriptorWriteCount, - StructPointerDecoder* pDescriptorWrites, - uint32_t descriptorCopyCount, - StructPointerDecoder* pDescriptorCopies) {} + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) {} virtual void Process_vkCreateFramebuffer( const ApiCallInfo& call_info, @@ -610,64 +845,6 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId renderPass, StructPointerDecoder* pGranularity) {} - virtual void Process_vkCreateCommandPool( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pCommandPool) {} - - virtual void Process_vkDestroyCommandPool( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId commandPool, - StructPointerDecoder* pAllocator) {} - - virtual void Process_vkResetCommandPool( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId commandPool, - VkCommandPoolResetFlags flags) {} - - virtual void Process_vkAllocateCommandBuffers( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pAllocateInfo, - HandlePointerDecoder* pCommandBuffers) {} - - virtual void Process_vkFreeCommandBuffers( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId commandPool, - uint32_t commandBufferCount, - HandlePointerDecoder* pCommandBuffers) {} - - virtual void Process_vkBeginCommandBuffer( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId commandBuffer, - StructPointerDecoder* pBeginInfo) {} - - virtual void Process_vkEndCommandBuffer( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId commandBuffer) {} - - virtual void Process_vkResetCommandBuffer( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId commandBuffer, - VkCommandBufferResetFlags flags) {} - - virtual void Process_vkCmdBindPipeline( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - format::HandleId pipeline) {} - virtual void Process_vkCmdSetViewport( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -723,17 +900,6 @@ class VulkanConsumer : public VulkanConsumerBase VkStencilFaceFlags faceMask, uint32_t reference) {} - virtual void Process_vkCmdBindDescriptorSets( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - format::HandleId layout, - uint32_t firstSet, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets, - uint32_t dynamicOffsetCount, - PointerDecoder* pDynamicOffsets) {} - virtual void Process_vkCmdBindIndexBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -780,205 +946,45 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId buffer, VkDeviceSize offset, uint32_t drawCount, - uint32_t stride) {} - - virtual void Process_vkCmdDispatch( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) {} - - virtual void Process_vkCmdDispatchIndirect( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset) {} - - virtual void Process_vkCmdCopyBuffer( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcBuffer, - format::HandleId dstBuffer, - uint32_t regionCount, - StructPointerDecoder* pRegions) {} - - virtual void Process_vkCmdCopyImage( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) {} - - virtual void Process_vkCmdBlitImage( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions, - VkFilter filter) {} - - virtual void Process_vkCmdCopyBufferToImage( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcBuffer, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) {} - - virtual void Process_vkCmdCopyImageToBuffer( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstBuffer, - uint32_t regionCount, - StructPointerDecoder* pRegions) {} - - virtual void Process_vkCmdUpdateBuffer( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize dataSize, - PointerDecoder* pData) {} - - virtual void Process_vkCmdFillBuffer( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize size, - uint32_t data) {} - - virtual void Process_vkCmdClearColorImage( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId image, - VkImageLayout imageLayout, - StructPointerDecoder* pColor, - uint32_t rangeCount, - StructPointerDecoder* pRanges) {} - - virtual void Process_vkCmdClearDepthStencilImage( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId image, - VkImageLayout imageLayout, - StructPointerDecoder* pDepthStencil, - uint32_t rangeCount, - StructPointerDecoder* pRanges) {} - - virtual void Process_vkCmdClearAttachments( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t attachmentCount, - StructPointerDecoder* pAttachments, - uint32_t rectCount, - StructPointerDecoder* pRects) {} - - virtual void Process_vkCmdResolveImage( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) {} - - virtual void Process_vkCmdSetEvent( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags stageMask) {} - - virtual void Process_vkCmdResetEvent( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags stageMask) {} - - virtual void Process_vkCmdWaitEvents( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t eventCount, - HandlePointerDecoder* pEvents, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - uint32_t memoryBarrierCount, - StructPointerDecoder* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - StructPointerDecoder* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - StructPointerDecoder* pImageMemoryBarriers) {} - - virtual void Process_vkCmdPipelineBarrier( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - StructPointerDecoder* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - StructPointerDecoder* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - StructPointerDecoder* pImageMemoryBarriers) {} - - virtual void Process_vkCmdBeginQuery( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t query, - VkQueryControlFlags flags) {} - - virtual void Process_vkCmdEndQuery( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t query) {} + uint32_t stride) {} - virtual void Process_vkCmdResetQueryPool( + virtual void Process_vkCmdBlitImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount) {} + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + VkFilter filter) {} - virtual void Process_vkCmdWriteTimestamp( + virtual void Process_vkCmdClearDepthStencilImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlagBits pipelineStage, - format::HandleId queryPool, - uint32_t query) {} + format::HandleId image, + VkImageLayout imageLayout, + StructPointerDecoder* pDepthStencil, + uint32_t rangeCount, + StructPointerDecoder* pRanges) {} - virtual void Process_vkCmdCopyQueryPoolResults( + virtual void Process_vkCmdClearAttachments( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags) {} + uint32_t attachmentCount, + StructPointerDecoder* pAttachments, + uint32_t rectCount, + StructPointerDecoder* pRects) {} - virtual void Process_vkCmdPushConstants( + virtual void Process_vkCmdResolveImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId layout, - VkShaderStageFlags stageFlags, - uint32_t offset, - uint32_t size, - PointerDecoder* pValues) {} + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) {} virtual void Process_vkCmdBeginRenderPass( const ApiCallInfo& call_info, @@ -995,12 +1001,6 @@ class VulkanConsumer : public VulkanConsumerBase const ApiCallInfo& call_info, format::HandleId commandBuffer) {} - virtual void Process_vkCmdExecuteCommands( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t commandBufferCount, - HandlePointerDecoder* pCommandBuffers) {} - virtual void Process_vkBindBufferMemory2( const ApiCallInfo& call_info, VkResult returnValue, @@ -1028,16 +1028,6 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId commandBuffer, uint32_t deviceMask) {} - virtual void Process_vkCmdDispatchBase( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) {} - virtual void Process_vkEnumeratePhysicalDeviceGroups( const ApiCallInfo& call_info, VkResult returnValue, @@ -1117,34 +1107,6 @@ class VulkanConsumer : public VulkanConsumerBase StructPointerDecoder* pQueueInfo, HandlePointerDecoder* pQueue) {} - virtual void Process_vkCreateSamplerYcbcrConversion( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pYcbcrConversion) {} - - virtual void Process_vkDestroySamplerYcbcrConversion( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId ycbcrConversion, - StructPointerDecoder* pAllocator) {} - - virtual void Process_vkCreateDescriptorUpdateTemplate( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pDescriptorUpdateTemplate) {} - - virtual void Process_vkDestroyDescriptorUpdateTemplate( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId descriptorUpdateTemplate, - StructPointerDecoder* pAllocator) {} - virtual void Process_vkGetPhysicalDeviceExternalBufferProperties( const ApiCallInfo& call_info, format::HandleId physicalDevice, @@ -1163,56 +1125,49 @@ class VulkanConsumer : public VulkanConsumerBase StructPointerDecoder* pExternalSemaphoreInfo, StructPointerDecoder* pExternalSemaphoreProperties) {} - virtual void Process_vkGetDescriptorSetLayoutSupport( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pSupport) {} - - virtual void Process_vkCmdDrawIndirectCount( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - format::HandleId countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) {} - - virtual void Process_vkCmdDrawIndexedIndirectCount( + virtual void Process_vkCmdDispatchBase( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - format::HandleId countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) {} + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) {} - virtual void Process_vkCreateRenderPass2( + virtual void Process_vkCreateDescriptorUpdateTemplate( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pCreateInfo, StructPointerDecoder* pAllocator, - HandlePointerDecoder* pRenderPass) {} + HandlePointerDecoder* pDescriptorUpdateTemplate) {} - virtual void Process_vkCmdBeginRenderPass2( + virtual void Process_vkDestroyDescriptorUpdateTemplate( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pRenderPassBegin, - StructPointerDecoder* pSubpassBeginInfo) {} + format::HandleId device, + format::HandleId descriptorUpdateTemplate, + StructPointerDecoder* pAllocator) {} - virtual void Process_vkCmdNextSubpass2( + virtual void Process_vkGetDescriptorSetLayoutSupport( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pSubpassBeginInfo, - StructPointerDecoder* pSubpassEndInfo) {} + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pSupport) {} - virtual void Process_vkCmdEndRenderPass2( + virtual void Process_vkCreateSamplerYcbcrConversion( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pSubpassEndInfo) {} + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pYcbcrConversion) {} + + virtual void Process_vkDestroySamplerYcbcrConversion( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId ycbcrConversion, + StructPointerDecoder* pAllocator) {} virtual void Process_vkResetQueryPool( const ApiCallInfo& call_info, @@ -1259,6 +1214,51 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId device, StructPointerDecoder* pInfo) {} + virtual void Process_vkCmdDrawIndirectCount( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + format::HandleId countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) {} + + virtual void Process_vkCmdDrawIndexedIndirectCount( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + format::HandleId countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) {} + + virtual void Process_vkCreateRenderPass2( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pRenderPass) {} + + virtual void Process_vkCmdBeginRenderPass2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pRenderPassBegin, + StructPointerDecoder* pSubpassBeginInfo) {} + + virtual void Process_vkCmdNextSubpass2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pSubpassBeginInfo, + StructPointerDecoder* pSubpassEndInfo) {} + + virtual void Process_vkCmdEndRenderPass2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pSubpassEndInfo) {} + virtual void Process_vkGetPhysicalDeviceToolProperties( const ApiCallInfo& call_info, VkResult returnValue, @@ -1297,25 +1297,6 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId privateDataSlot, PointerDecoder* pData) {} - virtual void Process_vkCmdSetEvent2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - StructPointerDecoder* pDependencyInfo) {} - - virtual void Process_vkCmdResetEvent2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags2 stageMask) {} - - virtual void Process_vkCmdWaitEvents2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t eventCount, - HandlePointerDecoder* pEvents, - StructPointerDecoder* pDependencyInfos) {} - virtual void Process_vkCmdPipelineBarrier2( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -1341,20 +1322,58 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pCopyBufferInfo) {} - virtual void Process_vkCmdCopyImage2( + virtual void Process_vkCmdCopyImage2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyImageInfo) {} + + virtual void Process_vkCmdCopyBufferToImage2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyBufferToImageInfo) {} + + virtual void Process_vkCmdCopyImageToBuffer2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyImageToBufferInfo) {} + + virtual void Process_vkGetDeviceBufferMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) {} + + virtual void Process_vkGetDeviceImageMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) {} + + virtual void Process_vkGetDeviceImageSparseMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pSparseMemoryRequirementCount, + StructPointerDecoder* pSparseMemoryRequirements) {} + + virtual void Process_vkCmdSetEvent2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyImageInfo) {} + format::HandleId event, + StructPointerDecoder* pDependencyInfo) {} - virtual void Process_vkCmdCopyBufferToImage2( + virtual void Process_vkCmdResetEvent2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyBufferToImageInfo) {} + format::HandleId event, + VkPipelineStageFlags2 stageMask) {} - virtual void Process_vkCmdCopyImageToBuffer2( + virtual void Process_vkCmdWaitEvents2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyImageToBufferInfo) {} + uint32_t eventCount, + HandlePointerDecoder* pEvents, + StructPointerDecoder* pDependencyInfos) {} virtual void Process_vkCmdBlitImage2( const ApiCallInfo& call_info, @@ -1461,31 +1480,6 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId commandBuffer, VkBool32 primitiveRestartEnable) {} - virtual void Process_vkGetDeviceBufferMemoryRequirements( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pMemoryRequirements) {} - - virtual void Process_vkGetDeviceImageMemoryRequirements( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pMemoryRequirements) {} - - virtual void Process_vkGetDeviceImageSparseMemoryRequirements( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - PointerDecoder* pSparseMemoryRequirementCount, - StructPointerDecoder* pSparseMemoryRequirements) {} - - virtual void Process_vkCmdSetLineStipple( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t lineStippleFactor, - uint16_t lineStipplePattern) {} - virtual void Process_vkMapMemory2( const ApiCallInfo& call_info, VkResult returnValue, @@ -1499,20 +1493,6 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId device, StructPointerDecoder* pMemoryUnmapInfo) {} - virtual void Process_vkCmdBindIndexBuffer2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkDeviceSize size, - VkIndexType indexType) {} - - virtual void Process_vkGetRenderingAreaGranularity( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pRenderingAreaInfo, - StructPointerDecoder* pGranularity) {} - virtual void Process_vkGetDeviceImageSubresourceLayout( const ApiCallInfo& call_info, format::HandleId device, @@ -1526,6 +1506,31 @@ class VulkanConsumer : public VulkanConsumerBase StructPointerDecoder* pSubresource, StructPointerDecoder* pLayout) {} + virtual void Process_vkCopyMemoryToImage( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyMemoryToImageInfo) {} + + virtual void Process_vkCopyImageToMemory( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyImageToMemoryInfo) {} + + virtual void Process_vkCopyImageToImage( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyImageToImageInfo) {} + + virtual void Process_vkTransitionImageLayout( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + uint32_t transitionCount, + StructPointerDecoder* pTransitions) {} + virtual void Process_vkCmdPushDescriptorSet( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -1535,16 +1540,6 @@ class VulkanConsumer : public VulkanConsumerBase uint32_t descriptorWriteCount, StructPointerDecoder* pDescriptorWrites) {} - virtual void Process_vkCmdSetRenderingAttachmentLocations( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pLocationInfo) {} - - virtual void Process_vkCmdSetRenderingInputAttachmentIndices( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pInputAttachmentIndexInfo) {} - virtual void Process_vkCmdBindDescriptorSets2( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -1560,30 +1555,35 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pPushDescriptorSetInfo) {} - virtual void Process_vkCopyMemoryToImage( + virtual void Process_vkCmdSetLineStipple( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCopyMemoryToImageInfo) {} + format::HandleId commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern) {} - virtual void Process_vkCopyImageToMemory( + virtual void Process_vkCmdBindIndexBuffer2( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCopyImageToMemoryInfo) {} + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType) {} - virtual void Process_vkCopyImageToImage( + virtual void Process_vkGetRenderingAreaGranularity( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCopyImageToImageInfo) {} + StructPointerDecoder* pRenderingAreaInfo, + StructPointerDecoder* pGranularity) {} - virtual void Process_vkTransitionImageLayout( + virtual void Process_vkCmdSetRenderingAttachmentLocations( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - uint32_t transitionCount, - StructPointerDecoder* pTransitions) {} + format::HandleId commandBuffer, + StructPointerDecoder* pLocationInfo) {} + + virtual void Process_vkCmdSetRenderingInputAttachmentIndices( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pInputAttachmentIndexInfo) {} virtual void Process_vkDestroySurfaceKHR( const ApiCallInfo& call_info, @@ -2671,6 +2671,21 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pBindDescriptorBufferEmbeddedSamplersInfo) {} + virtual void Process_vkCmdCopyMemoryIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryIndirectInfo) {} + + virtual void Process_vkCmdCopyMemoryToImageIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryToImageIndirectInfo) {} + + virtual void Process_vkCmdEndRendering2KHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pRenderingEndInfo) {} + virtual void Process_vkFrameBoundaryANDROID( const ApiCallInfo& call_info, format::HandleId device, @@ -3350,6 +3365,36 @@ class VulkanConsumer : public VulkanConsumerBase PointerDecoder* pCheckpointDataCount, StructPointerDecoder* pCheckpointData) {} + virtual void Process_vkSetSwapchainPresentTimingQueueSizeEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + uint32_t size) {} + + virtual void Process_vkGetSwapchainTimingPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimingProperties, + PointerDecoder* pSwapchainTimingPropertiesCounter) {} + + virtual void Process_vkGetSwapchainTimeDomainPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimeDomainProperties, + PointerDecoder* pTimeDomainsCounter) {} + + virtual void Process_vkGetPastPresentationTimingEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPastPresentationTimingInfo, + StructPointerDecoder* pPastPresentationTimingProperties) {} + virtual void Process_vkInitializePerformanceApiINTEL( const ApiCallInfo& call_info, VkResult returnValue, @@ -3714,6 +3759,49 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pPerTileEndInfo) {} + virtual void Process_vkGetDescriptorSetLayoutSizeEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + PointerDecoder* pLayoutSizeInBytes) {} + + virtual void Process_vkGetDescriptorSetLayoutBindingOffsetEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + uint32_t binding, + PointerDecoder* pOffset) {} + + virtual void Process_vkGetDescriptorEXT( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pDescriptorInfo, + size_t dataSize, + PointerDecoder* pDescriptor) {} + + virtual void Process_vkCmdBindDescriptorBuffersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t bufferCount, + StructPointerDecoder* pBindingInfos) {} + + virtual void Process_vkCmdSetDescriptorBufferOffsetsEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t setCount, + PointerDecoder* pBufferIndices, + PointerDecoder* pOffsets) {} + + virtual void Process_vkCmdBindDescriptorBufferEmbeddedSamplersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t set) {} + virtual void Process_vkCmdSetFragmentShadingRateEnumNV( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -4337,6 +4425,88 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId queue, StructPointerDecoder* pQueueTypeInfo) {} + virtual void Process_vkCreateDataGraphPipelinesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId deferredOperation, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) {} + + virtual void Process_vkCreateDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSession) {} + + virtual void Process_vkGetDataGraphPipelineSessionBindPointRequirementsARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pBindPointRequirementCount, + StructPointerDecoder* pBindPointRequirements) {} + + virtual void Process_vkGetDataGraphPipelineSessionMemoryRequirementsARM( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) {} + + virtual void Process_vkBindDataGraphPipelineSessionMemoryARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + uint32_t bindInfoCount, + StructPointerDecoder* pBindInfos) {} + + virtual void Process_vkDestroyDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId session, + StructPointerDecoder* pAllocator) {} + + virtual void Process_vkCmdDispatchDataGraphARM( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId session, + StructPointerDecoder* pInfo) {} + + virtual void Process_vkGetDataGraphPipelineAvailablePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + PointerDecoder* pPropertiesCount, + PointerDecoder* pProperties) {} + + virtual void Process_vkGetDataGraphPipelinePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + uint32_t propertiesCount, + StructPointerDecoder* pProperties) {} + + virtual void Process_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pQueueFamilyDataGraphPropertyCount, + StructPointerDecoder* pQueueFamilyDataGraphProperties) {} + + virtual void Process_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineInfo, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineProperties) {} + virtual void Process_vkCmdSetAttachmentFeedbackLoopEnableEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -4347,6 +4517,20 @@ class VulkanConsumer : public VulkanConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pTileMemoryBindInfo) {} + virtual void Process_vkCmdDecompressMemoryEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pDecompressMemoryInfoEXT) {} + + virtual void Process_vkCmdDecompressMemoryIndirectCountEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkMemoryDecompressionMethodFlagsEXT decompressionMethod, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t maxDecompressionCount, + uint32_t stride) {} + virtual void Process_vkGetPartitionedAccelerationStructuresBuildSizesNV( const ApiCallInfo& call_info, format::HandleId device, @@ -4440,10 +4624,29 @@ class VulkanConsumer : public VulkanConsumerBase uint64_t pHandle, StructPointerDecoder* pMemoryMetalHandleProperties) {} + virtual void Process_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pCounterCount, + StructPointerDecoder* pCounters, + StructPointerDecoder* pCounterDescriptions) {} + virtual void Process_vkCmdEndRendering2EXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pRenderingEndInfo) {} + StructPointerDecoder* pRenderingEndInfo) {} + + virtual void Process_vkCmdBeginCustomResolveEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pBeginCustomResolveInfo) {} + + virtual void Process_vkCmdSetComputeOccupancyPriorityNV( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pParameters) {} virtual void Process_vkCreateAccelerationStructureKHR( const ApiCallInfo& call_info, diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_consumer.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_consumer.cpp index ce9fef5d8..871a39660 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_consumer.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_consumer.cpp @@ -9482,6 +9482,70 @@ void VulkanCppConsumer::Process_vkCmdSetDescriptorBufferOffsets2EXT( fprintf(file, "\t}\n"); Post_APICall(format::ApiCallId::ApiCall_vkCmdSetDescriptorBufferOffsets2EXT); } +void VulkanCppConsumer::Process_vkCmdCopyMemoryIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryIndirectInfo) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_pcopy_memory_indirect_info; + std::string pcopy_memory_indirect_info_struct = GenerateStruct_VkCopyMemoryIndirectInfoKHR(stream_pcopy_memory_indirect_info, + pCopyMemoryIndirectInfo->GetPointer(), + pCopyMemoryIndirectInfo->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_pcopy_memory_indirect_info.str().c_str()); + pfn_loader_.AddMethodName("vkCmdCopyMemoryIndirectKHR"); + fprintf(file, + "\t\tloaded_vkCmdCopyMemoryIndirectKHR(%s, &%s);\n", + this->GetHandle(commandBuffer).c_str(), + pcopy_memory_indirect_info_struct.c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkCmdCopyMemoryIndirectKHR); +} + +void VulkanCppConsumer::Process_vkCmdCopyMemoryToImageIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryToImageIndirectInfo) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_pcopy_memory_to_image_indirect_info; + std::string pcopy_memory_to_image_indirect_info_struct = GenerateStruct_VkCopyMemoryToImageIndirectInfoKHR(stream_pcopy_memory_to_image_indirect_info, + pCopyMemoryToImageIndirectInfo->GetPointer(), + pCopyMemoryToImageIndirectInfo->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_pcopy_memory_to_image_indirect_info.str().c_str()); + pfn_loader_.AddMethodName("vkCmdCopyMemoryToImageIndirectKHR"); + fprintf(file, + "\t\tloaded_vkCmdCopyMemoryToImageIndirectKHR(%s, &%s);\n", + this->GetHandle(commandBuffer).c_str(), + pcopy_memory_to_image_indirect_info_struct.c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkCmdCopyMemoryToImageIndirectKHR); +} +void VulkanCppConsumer::Process_vkCmdEndRendering2KHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pRenderingEndInfo) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_prendering_end_info; + std::string prendering_end_info_struct = GenerateStruct_VkRenderingEndInfoKHR(stream_prendering_end_info, + pRenderingEndInfo->GetPointer(), + pRenderingEndInfo->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_prendering_end_info.str().c_str()); + pfn_loader_.AddMethodName("vkCmdEndRendering2KHR"); + fprintf(file, + "\t\tloaded_vkCmdEndRendering2KHR(%s, &%s);\n", + this->GetHandle(commandBuffer).c_str(), + prendering_end_info_struct.c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkCmdEndRendering2KHR); +} void VulkanCppConsumer::Process_vkFrameBoundaryANDROID( const ApiCallInfo& call_info, format::HandleId device, @@ -11841,6 +11905,125 @@ void VulkanCppConsumer::Process_vkGetQueueCheckpointDataNV( fprintf(file, "\t}\n"); Post_APICall(format::ApiCallId::ApiCall_vkGetQueueCheckpointDataNV); } +void VulkanCppConsumer::Process_vkGetPastPresentationTimingEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPastPresentationTimingInfo, + StructPointerDecoder* pPastPresentationTimingProperties) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_ppast_presentation_timing_info; + std::string ppast_presentation_timing_info_struct = GenerateStruct_VkPastPresentationTimingInfoEXT(stream_ppast_presentation_timing_info, + pPastPresentationTimingInfo->GetPointer(), + pPastPresentationTimingInfo->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_ppast_presentation_timing_info.str().c_str()); + std::string ppast_presentation_timing_properties_name = "NULL"; + if (!pPastPresentationTimingProperties->IsNull()) { + ppast_presentation_timing_properties_name = "pPastPresentationTimingProperties_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkPastPresentationTimingPropertiesEXT %s = {};\n", ppast_presentation_timing_properties_name.c_str()); + ppast_presentation_timing_properties_name.insert(0, "&"); + } + pfn_loader_.AddMethodName("vkGetPastPresentationTimingEXT"); + fprintf(file, + "\t\tVK_CALL_CHECK(loaded_vkGetPastPresentationTimingEXT(%s, &%s, %s), %s);\n", + this->GetHandle(device).c_str(), + ppast_presentation_timing_info_struct.c_str(), + ppast_presentation_timing_properties_name.c_str(), + util::ToString(returnValue).c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkGetPastPresentationTimingEXT); +} + +void VulkanCppConsumer::Process_vkGetSwapchainTimeDomainPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimeDomainProperties, + PointerDecoder* pTimeDomainsCounter) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::string pswapchain_time_domain_properties_name = "NULL"; + if (!pSwapchainTimeDomainProperties->IsNull()) { + pswapchain_time_domain_properties_name = "pSwapchainTimeDomainProperties_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkSwapchainTimeDomainPropertiesEXT %s = {};\n", pswapchain_time_domain_properties_name.c_str()); + pswapchain_time_domain_properties_name.insert(0, "&"); + } + std::string ptime_domains_counter_name = "NULL"; + if (!pTimeDomainsCounter->IsNull()) { + ptime_domains_counter_name = "pTimeDomainsCounter_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tuint64_t %s = %s;\n", ptime_domains_counter_name.c_str(), util::ToString(*pTimeDomainsCounter->GetPointer()).c_str()); + ptime_domains_counter_name.insert(0, "&"); + } + pfn_loader_.AddMethodName("vkGetSwapchainTimeDomainPropertiesEXT"); + fprintf(file, + "\t\tVK_CALL_CHECK(loaded_vkGetSwapchainTimeDomainPropertiesEXT(%s, %s, %s, %s), %s);\n", + this->GetHandle(device).c_str(), + this->GetHandle(swapchain).c_str(), + pswapchain_time_domain_properties_name.c_str(), + ptime_domains_counter_name.c_str(), + util::ToString(returnValue).c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkGetSwapchainTimeDomainPropertiesEXT); +} + +void VulkanCppConsumer::Process_vkGetSwapchainTimingPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimingProperties, + PointerDecoder* pSwapchainTimingPropertiesCounter) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::string pswapchain_timing_properties_name = "NULL"; + if (!pSwapchainTimingProperties->IsNull()) { + pswapchain_timing_properties_name = "pSwapchainTimingProperties_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkSwapchainTimingPropertiesEXT %s = {};\n", pswapchain_timing_properties_name.c_str()); + pswapchain_timing_properties_name.insert(0, "&"); + } + std::string pswapchain_timing_properties_counter_name = "NULL"; + if (!pSwapchainTimingPropertiesCounter->IsNull()) { + pswapchain_timing_properties_counter_name = "pSwapchainTimingPropertiesCounter_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tuint64_t %s = %s;\n", pswapchain_timing_properties_counter_name.c_str(), util::ToString(*pSwapchainTimingPropertiesCounter->GetPointer()).c_str()); + pswapchain_timing_properties_counter_name.insert(0, "&"); + } + pfn_loader_.AddMethodName("vkGetSwapchainTimingPropertiesEXT"); + fprintf(file, + "\t\tVK_CALL_CHECK(loaded_vkGetSwapchainTimingPropertiesEXT(%s, %s, %s, %s), %s);\n", + this->GetHandle(device).c_str(), + this->GetHandle(swapchain).c_str(), + pswapchain_timing_properties_name.c_str(), + pswapchain_timing_properties_counter_name.c_str(), + util::ToString(returnValue).c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkGetSwapchainTimingPropertiesEXT); +} + +void VulkanCppConsumer::Process_vkSetSwapchainPresentTimingQueueSizeEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + uint32_t size) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + pfn_loader_.AddMethodName("vkSetSwapchainPresentTimingQueueSizeEXT"); + fprintf(file, + "\t\tVK_CALL_CHECK(loaded_vkSetSwapchainPresentTimingQueueSizeEXT(%s, %s, %u), %s);\n", + this->GetHandle(device).c_str(), + this->GetHandle(swapchain).c_str(), + size, + util::ToString(returnValue).c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkSetSwapchainPresentTimingQueueSizeEXT); +} void VulkanCppConsumer::Process_vkAcquirePerformanceConfigurationINTEL( const ApiCallInfo& call_info, VkResult returnValue, @@ -13227,6 +13410,186 @@ void VulkanCppConsumer::Process_vkCmdEndPerTileExecutionQCOM( fprintf(file, "\t}\n"); Post_APICall(format::ApiCallId::ApiCall_vkCmdEndPerTileExecutionQCOM); } +void VulkanCppConsumer::Process_vkCmdBindDescriptorBufferEmbeddedSamplersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t set) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + pfn_loader_.AddMethodName("vkCmdBindDescriptorBufferEmbeddedSamplersEXT"); + fprintf(file, + "\t\tloaded_vkCmdBindDescriptorBufferEmbeddedSamplersEXT(%s, %s, %s, %u);\n", + this->GetHandle(commandBuffer).c_str(), + util::ToString(pipelineBindPoint).c_str(), + this->GetHandle(layout).c_str(), + set); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkCmdBindDescriptorBufferEmbeddedSamplersEXT); +} + +void VulkanCppConsumer::Process_vkCmdBindDescriptorBuffersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t bufferCount, + StructPointerDecoder* pBindingInfos) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_pbinding_infos; + std::string pbinding_infos_array = "NULL"; + PointerPairContainerGetPointer()), decltype(pBindingInfos->GetMetaStructPointer())> pbinding_infos_pair{ pBindingInfos->GetPointer(), pBindingInfos->GetMetaStructPointer(), bufferCount }; + std::string pbinding_infos_names = toStringJoin(pbinding_infos_pair.begin(), + pbinding_infos_pair.end(), + [&](auto pair) {{ return GenerateStruct_VkDescriptorBufferBindingInfoEXT(stream_pbinding_infos, pair.t1, pair.t2, *this); }}, + ", "); + if (stream_pbinding_infos.str().length() > 0) { + fprintf(file, "%s", stream_pbinding_infos.str().c_str()); + if (bufferCount == 1) { + pbinding_infos_array = "&" + pbinding_infos_names; + } else if (bufferCount > 1) { + pbinding_infos_array = "pBindingInfos_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkDescriptorBufferBindingInfoEXT %s[] = { %s };\n", pbinding_infos_array.c_str(), pbinding_infos_names.c_str()); + } + } + pfn_loader_.AddMethodName("vkCmdBindDescriptorBuffersEXT"); + fprintf(file, + "\t\tloaded_vkCmdBindDescriptorBuffersEXT(%s, %u, %s);\n", + this->GetHandle(commandBuffer).c_str(), + bufferCount, + pbinding_infos_array.c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkCmdBindDescriptorBuffersEXT); +} + +void VulkanCppConsumer::Process_vkCmdSetDescriptorBufferOffsetsEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t setCount, + PointerDecoder* pBufferIndices, + PointerDecoder* pOffsets) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::string pbuffer_indices_array = "pBufferIndices_" + std::to_string(this->GetNextId()); + if (setCount > 0) { + std::string pbuffer_indices_values = toStringJoin(pBufferIndices->GetPointer(), + pBufferIndices->GetPointer() + setCount, + [&](const auto current) { return std::to_string(current) + ""; }, + ", "); + fprintf(file, "\t\tuint32_t %s[] = { %s };\n", pbuffer_indices_array.c_str(), pbuffer_indices_values.c_str()); + } else { + pbuffer_indices_array = "NULL"; + } + std::string poffsets_array = "pOffsets_" + std::to_string(this->GetNextId()); + if (setCount > 0) { + std::string poffsets_values = toStringJoin(pOffsets->GetPointer(), + pOffsets->GetPointer() + setCount, + [&](const auto current) { return std::to_string(current) + "UL"; }, + ", "); + fprintf(file, "\t\tVkDeviceSize %s[] = { %s };\n", poffsets_array.c_str(), poffsets_values.c_str()); + } else { + poffsets_array = "NULL"; + } + pfn_loader_.AddMethodName("vkCmdSetDescriptorBufferOffsetsEXT"); + fprintf(file, + "\t\tloaded_vkCmdSetDescriptorBufferOffsetsEXT(%s, %s, %s, %u, %u, %s, %s);\n", + this->GetHandle(commandBuffer).c_str(), + util::ToString(pipelineBindPoint).c_str(), + this->GetHandle(layout).c_str(), + firstSet, + setCount, + pbuffer_indices_array.c_str(), + poffsets_array.c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkCmdSetDescriptorBufferOffsetsEXT); +} + +void VulkanCppConsumer::Process_vkGetDescriptorEXT( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pDescriptorInfo, + size_t dataSize, + PointerDecoder* pDescriptor) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_pdescriptor_info; + std::string pdescriptor_info_struct = GenerateStruct_VkDescriptorGetInfoEXT(stream_pdescriptor_info, + pDescriptorInfo->GetPointer(), + pDescriptorInfo->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_pdescriptor_info.str().c_str()); + std::string pdescriptor_name = "NULL"; + if (!pDescriptor->IsNull()) { + pdescriptor_name = "pDescriptor_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tuint8_t %s[%" PRIu64 "] = {};\n", pdescriptor_name.c_str(), util::platform::SizeTtoUint64(dataSize)); + } + pfn_loader_.AddMethodName("vkGetDescriptorEXT"); + fprintf(file, + "\t\tloaded_vkGetDescriptorEXT(%s, &%s, %" PRIu64 ", %s);\n", + this->GetHandle(device).c_str(), + pdescriptor_info_struct.c_str(), + util::platform::SizeTtoUint64(dataSize), + pdescriptor_name.c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkGetDescriptorEXT); +} + +void VulkanCppConsumer::Process_vkGetDescriptorSetLayoutBindingOffsetEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + uint32_t binding, + PointerDecoder* pOffset) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::string poffset_name = "NULL"; + if (!pOffset->IsNull()) { + poffset_name = "pOffset_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkDeviceSize %s = %s;\n", poffset_name.c_str(), util::ToString(*pOffset->GetPointer()).c_str()); + poffset_name.insert(0, "&"); + } + pfn_loader_.AddMethodName("vkGetDescriptorSetLayoutBindingOffsetEXT"); + fprintf(file, + "\t\tloaded_vkGetDescriptorSetLayoutBindingOffsetEXT(%s, %s, %u, %s);\n", + this->GetHandle(device).c_str(), + this->GetHandle(layout).c_str(), + binding, + poffset_name.c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkGetDescriptorSetLayoutBindingOffsetEXT); +} + +void VulkanCppConsumer::Process_vkGetDescriptorSetLayoutSizeEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + PointerDecoder* pLayoutSizeInBytes) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::string playout_size_in_bytes_name = "NULL"; + if (!pLayoutSizeInBytes->IsNull()) { + playout_size_in_bytes_name = "pLayoutSizeInBytes_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkDeviceSize %s = %s;\n", playout_size_in_bytes_name.c_str(), util::ToString(*pLayoutSizeInBytes->GetPointer()).c_str()); + playout_size_in_bytes_name.insert(0, "&"); + } + pfn_loader_.AddMethodName("vkGetDescriptorSetLayoutSizeEXT"); + fprintf(file, + "\t\tloaded_vkGetDescriptorSetLayoutSizeEXT(%s, %s, %s);\n", + this->GetHandle(device).c_str(), + this->GetHandle(layout).c_str(), + playout_size_in_bytes_name.c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkGetDescriptorSetLayoutSizeEXT); +} void VulkanCppConsumer::Process_vkCmdSetFragmentShadingRateEnumNV( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -14925,7 +15288,7 @@ void VulkanCppConsumer::Process_vkCmdSetSampleMaskEXT( FILE* file = GetFrameFile(); fprintf(file, "\t{\n"); std::string psample_mask_array = "pSampleMask_" + std::to_string(this->GetNextId()); - if ((samples + 31) / 32 > 0) { + if ((samples + 31) / 32 > 0 && pSampleMask->GetPointer() != nullptr) { std::string psample_mask_values = toStringJoin(pSampleMask->GetPointer(), pSampleMask->GetPointer() + (samples + 31) / 32, [&](const auto current) { return std::to_string(current) + ""; }, @@ -15678,6 +16041,374 @@ void VulkanCppConsumer::Process_vkSetLatencySleepModeNV( fprintf(file, "\t}\n"); Post_APICall(format::ApiCallId::ApiCall_vkSetLatencySleepModeNV); } +void VulkanCppConsumer::Process_vkBindDataGraphPipelineSessionMemoryARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + uint32_t bindInfoCount, + StructPointerDecoder* pBindInfos) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_pbind_infos; + std::string pbind_infos_array = "NULL"; + PointerPairContainerGetPointer()), decltype(pBindInfos->GetMetaStructPointer())> pbind_infos_pair{ pBindInfos->GetPointer(), pBindInfos->GetMetaStructPointer(), bindInfoCount }; + std::string pbind_infos_names = toStringJoin(pbind_infos_pair.begin(), + pbind_infos_pair.end(), + [&](auto pair) {{ return GenerateStruct_VkBindDataGraphPipelineSessionMemoryInfoARM(stream_pbind_infos, pair.t1, pair.t2, *this); }}, + ", "); + if (stream_pbind_infos.str().length() > 0) { + fprintf(file, "%s", stream_pbind_infos.str().c_str()); + if (bindInfoCount == 1) { + pbind_infos_array = "&" + pbind_infos_names; + } else if (bindInfoCount > 1) { + pbind_infos_array = "pBindInfos_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkBindDataGraphPipelineSessionMemoryInfoARM %s[] = { %s };\n", pbind_infos_array.c_str(), pbind_infos_names.c_str()); + } + } + pfn_loader_.AddMethodName("vkBindDataGraphPipelineSessionMemoryARM"); + fprintf(file, + "\t\tVK_CALL_CHECK(loaded_vkBindDataGraphPipelineSessionMemoryARM(%s, %u, %s), %s);\n", + this->GetHandle(device).c_str(), + bindInfoCount, + pbind_infos_array.c_str(), + util::ToString(returnValue).c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkBindDataGraphPipelineSessionMemoryARM); +} + +void VulkanCppConsumer::Process_vkCmdDispatchDataGraphARM( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId session, + StructPointerDecoder* pInfo) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_pinfo; + std::string pinfo_struct = GenerateStruct_VkDataGraphPipelineDispatchInfoARM(stream_pinfo, + pInfo->GetPointer(), + pInfo->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_pinfo.str().c_str()); + pfn_loader_.AddMethodName("vkCmdDispatchDataGraphARM"); + fprintf(file, + "\t\tloaded_vkCmdDispatchDataGraphARM(%s, %s, &%s);\n", + this->GetHandle(commandBuffer).c_str(), + this->GetHandle(session).c_str(), + pinfo_struct.c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkCmdDispatchDataGraphARM); +} + +void VulkanCppConsumer::Process_vkCreateDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSession) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_pcreate_info; + std::string pcreate_info_struct = GenerateStruct_VkDataGraphPipelineSessionCreateInfoARM(stream_pcreate_info, + pCreateInfo->GetPointer(), + pCreateInfo->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_pcreate_info.str().c_str()); + std::string psession_name = "pSession_" + std::to_string(this->GetNextId(VK_OBJECT_TYPE_DATA_GRAPH_PIPELINE_SESSION_ARM)); + AddKnownVariables("VkDataGraphPipelineSessionARM", psession_name, pSession->GetPointer()); + if (returnValue == VK_SUCCESS) { + this->AddHandles(psession_name, + pSession->GetPointer()); + } + pfn_loader_.AddMethodName("vkCreateDataGraphPipelineSessionARM"); + fprintf(file, + "\t\tVK_CALL_CHECK(loaded_vkCreateDataGraphPipelineSessionARM(%s, &%s, %s, &%s), %s);\n", + this->GetHandle(device).c_str(), + pcreate_info_struct.c_str(), + "nullptr", + psession_name.c_str(), + util::ToString(returnValue).c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkCreateDataGraphPipelineSessionARM); +} + +void VulkanCppConsumer::Process_vkCreateDataGraphPipelinesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId deferredOperation, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_pcreate_infos; + std::string pcreate_infos_array = "NULL"; + PointerPairContainerGetPointer()), decltype(pCreateInfos->GetMetaStructPointer())> pcreate_infos_pair{ pCreateInfos->GetPointer(), pCreateInfos->GetMetaStructPointer(), createInfoCount }; + std::string pcreate_infos_names = toStringJoin(pcreate_infos_pair.begin(), + pcreate_infos_pair.end(), + [&](auto pair) {{ return GenerateStruct_VkDataGraphPipelineCreateInfoARM(stream_pcreate_infos, pair.t1, pair.t2, *this); }}, + ", "); + if (stream_pcreate_infos.str().length() > 0) { + fprintf(file, "%s", stream_pcreate_infos.str().c_str()); + if (createInfoCount == 1) { + pcreate_infos_array = "&" + pcreate_infos_names; + } else if (createInfoCount > 1) { + pcreate_infos_array = "pCreateInfos_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkDataGraphPipelineCreateInfoARM %s[] = { %s };\n", pcreate_infos_array.c_str(), pcreate_infos_names.c_str()); + } + } + std::string ppipelines_name = "pPipelines_" + std::to_string(this->GetNextId(VK_OBJECT_TYPE_PIPELINE)); + AddKnownVariables("VkPipeline", ppipelines_name, pPipelines->GetPointer(), createInfoCount); + if (returnValue == VK_SUCCESS) { + this->AddHandles(ppipelines_name, + pPipelines->GetPointer(), createInfoCount); + } + pfn_loader_.AddMethodName("vkCreateDataGraphPipelinesARM"); + fprintf(file, + "\t\tVK_CALL_CHECK(loaded_vkCreateDataGraphPipelinesARM(%s, %s, %s, %u, %s, %s, %s), %s);\n", + this->GetHandle(device).c_str(), + this->GetHandle(deferredOperation).c_str(), + this->GetHandle(pipelineCache).c_str(), + createInfoCount, + pcreate_infos_array.c_str(), + "nullptr", + ppipelines_name.c_str(), + util::ToString(returnValue).c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkCreateDataGraphPipelinesARM); +} + +void VulkanCppConsumer::Process_vkDestroyDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId session, + StructPointerDecoder* pAllocator) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + pfn_loader_.AddMethodName("vkDestroyDataGraphPipelineSessionARM"); + fprintf(file, + "\t\tloaded_vkDestroyDataGraphPipelineSessionARM(%s, %s, %s);\n", + this->GetHandle(device).c_str(), + this->GetHandle(session).c_str(), + "nullptr"); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkDestroyDataGraphPipelineSessionARM); +} + +void VulkanCppConsumer::Process_vkGetDataGraphPipelineAvailablePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + PointerDecoder* pPropertiesCount, + PointerDecoder* pProperties) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_ppipeline_info; + std::string ppipeline_info_struct = GenerateStruct_VkDataGraphPipelineInfoARM(stream_ppipeline_info, + pPipelineInfo->GetPointer(), + pPipelineInfo->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_ppipeline_info.str().c_str()); + std::string pproperties_count_name = "NULL"; + if (!pPropertiesCount->IsNull()) { + pproperties_count_name = "pPropertiesCount_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tuint32_t %s = %s;\n", pproperties_count_name.c_str(), util::ToString(*pPropertiesCount->GetPointer()).c_str()); + pproperties_count_name.insert(0, "&"); + } + std::string pproperties_name = "NULL"; + if (!pProperties->IsNull()) { + const uint32_t* in_pproperties_count = pPropertiesCount->GetPointer(); + pproperties_name = "pProperties_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkDataGraphPipelinePropertyARM %s[%d] = {};\n", pproperties_name.c_str(), *in_pproperties_count); + } + pfn_loader_.AddMethodName("vkGetDataGraphPipelineAvailablePropertiesARM"); + fprintf(file, + "\t\tVK_CALL_CHECK(loaded_vkGetDataGraphPipelineAvailablePropertiesARM(%s, &%s, %s, %s), %s);\n", + this->GetHandle(device).c_str(), + ppipeline_info_struct.c_str(), + pproperties_count_name.c_str(), + pproperties_name.c_str(), + util::ToString(returnValue).c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkGetDataGraphPipelineAvailablePropertiesARM); +} + +void VulkanCppConsumer::Process_vkGetDataGraphPipelinePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + uint32_t propertiesCount, + StructPointerDecoder* pProperties) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_ppipeline_info; + std::string ppipeline_info_struct = GenerateStruct_VkDataGraphPipelineInfoARM(stream_ppipeline_info, + pPipelineInfo->GetPointer(), + pPipelineInfo->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_ppipeline_info.str().c_str()); + std::string pproperties_name = "NULL"; + if (!pProperties->IsNull()) { + pproperties_name = "pProperties_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkDataGraphPipelinePropertyQueryResultARM %s[%d] = {};\n", pproperties_name.c_str(), propertiesCount); + } + pfn_loader_.AddMethodName("vkGetDataGraphPipelinePropertiesARM"); + fprintf(file, + "\t\tVK_CALL_CHECK(loaded_vkGetDataGraphPipelinePropertiesARM(%s, &%s, %u, %s), %s);\n", + this->GetHandle(device).c_str(), + ppipeline_info_struct.c_str(), + propertiesCount, + pproperties_name.c_str(), + util::ToString(returnValue).c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkGetDataGraphPipelinePropertiesARM); +} + +void VulkanCppConsumer::Process_vkGetDataGraphPipelineSessionBindPointRequirementsARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pBindPointRequirementCount, + StructPointerDecoder* pBindPointRequirements) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_pinfo; + std::string pinfo_struct = GenerateStruct_VkDataGraphPipelineSessionBindPointRequirementsInfoARM(stream_pinfo, + pInfo->GetPointer(), + pInfo->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_pinfo.str().c_str()); + std::string pbind_point_requirement_count_name = "NULL"; + if (!pBindPointRequirementCount->IsNull()) { + pbind_point_requirement_count_name = "pBindPointRequirementCount_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tuint32_t %s = %s;\n", pbind_point_requirement_count_name.c_str(), util::ToString(*pBindPointRequirementCount->GetPointer()).c_str()); + pbind_point_requirement_count_name.insert(0, "&"); + } + std::string pbind_point_requirements_name = "NULL"; + if (!pBindPointRequirements->IsNull()) { + const uint32_t* in_pbind_point_requirement_count = pBindPointRequirementCount->GetPointer(); + pbind_point_requirements_name = "pBindPointRequirements_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkDataGraphPipelineSessionBindPointRequirementARM %s[%d] = {};\n", pbind_point_requirements_name.c_str(), *in_pbind_point_requirement_count); + } + pfn_loader_.AddMethodName("vkGetDataGraphPipelineSessionBindPointRequirementsARM"); + fprintf(file, + "\t\tVK_CALL_CHECK(loaded_vkGetDataGraphPipelineSessionBindPointRequirementsARM(%s, &%s, %s, %s), %s);\n", + this->GetHandle(device).c_str(), + pinfo_struct.c_str(), + pbind_point_requirement_count_name.c_str(), + pbind_point_requirements_name.c_str(), + util::ToString(returnValue).c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkGetDataGraphPipelineSessionBindPointRequirementsARM); +} + +void VulkanCppConsumer::Process_vkGetDataGraphPipelineSessionMemoryRequirementsARM( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_pinfo; + std::string pinfo_struct = GenerateStruct_VkDataGraphPipelineSessionMemoryRequirementsInfoARM(stream_pinfo, + pInfo->GetPointer(), + pInfo->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_pinfo.str().c_str()); + std::string pmemory_requirements_name = "NULL"; + if (!pMemoryRequirements->IsNull()) { + pmemory_requirements_name = "pMemoryRequirements_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkMemoryRequirements2 %s = {};\n", pmemory_requirements_name.c_str()); + pmemory_requirements_name.insert(0, "&"); + } + pfn_loader_.AddMethodName("vkGetDataGraphPipelineSessionMemoryRequirementsARM"); + fprintf(file, + "\t\tloaded_vkGetDataGraphPipelineSessionMemoryRequirementsARM(%s, &%s, %s);\n", + this->GetHandle(device).c_str(), + pinfo_struct.c_str(), + pmemory_requirements_name.c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkGetDataGraphPipelineSessionMemoryRequirementsARM); +} + +void VulkanCppConsumer::Process_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineInfo, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineProperties) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_pqueue_family_data_graph_processing_engine_info; + std::string pqueue_family_data_graph_processing_engine_info_struct = GenerateStruct_VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM(stream_pqueue_family_data_graph_processing_engine_info, + pQueueFamilyDataGraphProcessingEngineInfo->GetPointer(), + pQueueFamilyDataGraphProcessingEngineInfo->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_pqueue_family_data_graph_processing_engine_info.str().c_str()); + std::string pqueue_family_data_graph_processing_engine_properties_name = "NULL"; + if (!pQueueFamilyDataGraphProcessingEngineProperties->IsNull()) { + pqueue_family_data_graph_processing_engine_properties_name = "pQueueFamilyDataGraphProcessingEngineProperties_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkQueueFamilyDataGraphProcessingEnginePropertiesARM %s = {};\n", pqueue_family_data_graph_processing_engine_properties_name.c_str()); + pqueue_family_data_graph_processing_engine_properties_name.insert(0, "&"); + } + pfn_loader_.AddMethodName("vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM"); + fprintf(file, + "\t\tloaded_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM(%s, &%s, %s);\n", + this->GetHandle(physicalDevice).c_str(), + pqueue_family_data_graph_processing_engine_info_struct.c_str(), + pqueue_family_data_graph_processing_engine_properties_name.c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM); +} + +void VulkanCppConsumer::Process_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pQueueFamilyDataGraphPropertyCount, + StructPointerDecoder* pQueueFamilyDataGraphProperties) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::string pqueue_family_data_graph_property_count_name = "NULL"; + if (!pQueueFamilyDataGraphPropertyCount->IsNull()) { + pqueue_family_data_graph_property_count_name = "pQueueFamilyDataGraphPropertyCount_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tuint32_t %s = %s;\n", pqueue_family_data_graph_property_count_name.c_str(), util::ToString(*pQueueFamilyDataGraphPropertyCount->GetPointer()).c_str()); + pqueue_family_data_graph_property_count_name.insert(0, "&"); + } + std::string pqueue_family_data_graph_properties_name = "NULL"; + if (!pQueueFamilyDataGraphProperties->IsNull()) { + const uint32_t* in_pqueue_family_data_graph_property_count = pQueueFamilyDataGraphPropertyCount->GetPointer(); + pqueue_family_data_graph_properties_name = "pQueueFamilyDataGraphProperties_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkQueueFamilyDataGraphPropertiesARM %s[%d] = {};\n", pqueue_family_data_graph_properties_name.c_str(), *in_pqueue_family_data_graph_property_count); + } + pfn_loader_.AddMethodName("vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM"); + fprintf(file, + "\t\tVK_CALL_CHECK(loaded_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM(%s, %u, %s, %s), %s);\n", + this->GetHandle(physicalDevice).c_str(), + queueFamilyIndex, + pqueue_family_data_graph_property_count_name.c_str(), + pqueue_family_data_graph_properties_name.c_str(), + util::ToString(returnValue).c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM); +} void VulkanCppConsumer::Process_vkCmdSetAttachmentFeedbackLoopEnableEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -15714,6 +16445,51 @@ void VulkanCppConsumer::Process_vkCmdBindTileMemoryQCOM( fprintf(file, "\t}\n"); Post_APICall(format::ApiCallId::ApiCall_vkCmdBindTileMemoryQCOM); } +void VulkanCppConsumer::Process_vkCmdDecompressMemoryEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pDecompressMemoryInfoEXT) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_pdecompress_memory_info_e_x_t; + std::string pdecompress_memory_info_e_x_t_struct = GenerateStruct_VkDecompressMemoryInfoEXT(stream_pdecompress_memory_info_e_x_t, + pDecompressMemoryInfoEXT->GetPointer(), + pDecompressMemoryInfoEXT->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_pdecompress_memory_info_e_x_t.str().c_str()); + pfn_loader_.AddMethodName("vkCmdDecompressMemoryEXT"); + fprintf(file, + "\t\tloaded_vkCmdDecompressMemoryEXT(%s, &%s);\n", + this->GetHandle(commandBuffer).c_str(), + pdecompress_memory_info_e_x_t_struct.c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkCmdDecompressMemoryEXT); +} + +void VulkanCppConsumer::Process_vkCmdDecompressMemoryIndirectCountEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkMemoryDecompressionMethodFlagsEXT decompressionMethod, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t maxDecompressionCount, + uint32_t stride) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + pfn_loader_.AddMethodName("vkCmdDecompressMemoryIndirectCountEXT"); + fprintf(file, + "\t\tloaded_vkCmdDecompressMemoryIndirectCountEXT(%s, %s, %" PRIu64 "UL, %" PRIu64 "UL, %u, %u);\n", + this->GetHandle(commandBuffer).c_str(), + util::ToString(decompressionMethod).c_str(), + indirectCommandsAddress, + indirectCommandsCountAddress, + maxDecompressionCount, + stride); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkCmdDecompressMemoryIndirectCountEXT); +} void VulkanCppConsumer::Process_vkCmdBuildPartitionedAccelerationStructuresNV( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -16110,15 +16886,56 @@ void VulkanCppConsumer::Process_vkGetMemoryMetalHandlePropertiesEXT( fprintf(file, "\t}\n"); Post_APICall(format::ApiCallId::ApiCall_vkGetMemoryMetalHandlePropertiesEXT); } +void VulkanCppConsumer::Process_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pCounterCount, + StructPointerDecoder* pCounters, + StructPointerDecoder* pCounterDescriptions) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::string pcounter_count_name = "NULL"; + if (!pCounterCount->IsNull()) { + pcounter_count_name = "pCounterCount_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tuint32_t %s = %s;\n", pcounter_count_name.c_str(), util::ToString(*pCounterCount->GetPointer()).c_str()); + pcounter_count_name.insert(0, "&"); + } + std::string pcounters_name = "NULL"; + if (!pCounters->IsNull()) { + const uint32_t* in_pcounter_count = pCounterCount->GetPointer(); + pcounters_name = "pCounters_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkPerformanceCounterARM %s[%d] = {};\n", pcounters_name.c_str(), *in_pcounter_count); + } + std::string pcounter_descriptions_name = "NULL"; + if (!pCounterDescriptions->IsNull()) { + const uint32_t* in_pcounter_count = pCounterCount->GetPointer(); + pcounter_descriptions_name = "pCounterDescriptions_" + std::to_string(this->GetNextId()); + fprintf(file, "\t\tVkPerformanceCounterDescriptionARM %s[%d] = {};\n", pcounter_descriptions_name.c_str(), *in_pcounter_count); + } + pfn_loader_.AddMethodName("vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM"); + fprintf(file, + "\t\tVK_CALL_CHECK(loaded_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(%s, %u, %s, %s, %s), %s);\n", + this->GetHandle(physicalDevice).c_str(), + queueFamilyIndex, + pcounter_count_name.c_str(), + pcounters_name.c_str(), + pcounter_descriptions_name.c_str(), + util::ToString(returnValue).c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM); +} void VulkanCppConsumer::Process_vkCmdEndRendering2EXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pRenderingEndInfo) + StructPointerDecoder* pRenderingEndInfo) { FILE* file = GetFrameFile(); fprintf(file, "\t{\n"); std::stringstream stream_prendering_end_info; - std::string prendering_end_info_struct = GenerateStruct_VkRenderingEndInfoEXT(stream_prendering_end_info, + std::string prendering_end_info_struct = GenerateStruct_VkRenderingEndInfoKHR(stream_prendering_end_info, pRenderingEndInfo->GetPointer(), pRenderingEndInfo->GetMetaStructPointer(), *this); @@ -16131,6 +16948,48 @@ void VulkanCppConsumer::Process_vkCmdEndRendering2EXT( fprintf(file, "\t}\n"); Post_APICall(format::ApiCallId::ApiCall_vkCmdEndRendering2EXT); } +void VulkanCppConsumer::Process_vkCmdBeginCustomResolveEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pBeginCustomResolveInfo) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_pbegin_custom_resolve_info; + std::string pbegin_custom_resolve_info_struct = GenerateStruct_VkBeginCustomResolveInfoEXT(stream_pbegin_custom_resolve_info, + pBeginCustomResolveInfo->GetPointer(), + pBeginCustomResolveInfo->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_pbegin_custom_resolve_info.str().c_str()); + pfn_loader_.AddMethodName("vkCmdBeginCustomResolveEXT"); + fprintf(file, + "\t\tloaded_vkCmdBeginCustomResolveEXT(%s, &%s);\n", + this->GetHandle(commandBuffer).c_str(), + pbegin_custom_resolve_info_struct.c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkCmdBeginCustomResolveEXT); +} +void VulkanCppConsumer::Process_vkCmdSetComputeOccupancyPriorityNV( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pParameters) +{ + FILE* file = GetFrameFile(); + fprintf(file, "\t{\n"); + std::stringstream stream_pparameters; + std::string pparameters_struct = GenerateStruct_VkComputeOccupancyPriorityParametersNV(stream_pparameters, + pParameters->GetPointer(), + pParameters->GetMetaStructPointer(), + *this); + fprintf(file, "%s", stream_pparameters.str().c_str()); + pfn_loader_.AddMethodName("vkCmdSetComputeOccupancyPriorityNV"); + fprintf(file, + "\t\tloaded_vkCmdSetComputeOccupancyPriorityNV(%s, &%s);\n", + this->GetHandle(commandBuffer).c_str(), + pparameters_struct.c_str()); + fprintf(file, "\t}\n"); + Post_APICall(format::ApiCallId::ApiCall_vkCmdSetComputeOccupancyPriorityNV); +} void VulkanCppConsumer::Process_vkCmdBuildAccelerationStructuresIndirectKHR( const ApiCallInfo& call_info, format::HandleId commandBuffer, diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_consumer.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_consumer.h index c2be17398..135a24d58 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_consumer.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_consumer.h @@ -2608,6 +2608,19 @@ class VulkanCppConsumer : public VulkanCppConsumerBase const ApiCallInfo& call_info, format::HandleId commandBuffer, StructPointerDecoder* pSetDescriptorBufferOffsetsInfo) override; + virtual void Process_vkCmdCopyMemoryIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryIndirectInfo) override; + + virtual void Process_vkCmdCopyMemoryToImageIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryToImageIndirectInfo) override; + virtual void Process_vkCmdEndRendering2KHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pRenderingEndInfo) override; virtual void Process_vkFrameBoundaryANDROID( const ApiCallInfo& call_info, format::HandleId device, @@ -3214,6 +3227,35 @@ class VulkanCppConsumer : public VulkanCppConsumerBase format::HandleId queue, PointerDecoder* pCheckpointDataCount, StructPointerDecoder* pCheckpointData) override; + virtual void Process_vkGetPastPresentationTimingEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPastPresentationTimingInfo, + StructPointerDecoder* pPastPresentationTimingProperties) override; + + virtual void Process_vkGetSwapchainTimeDomainPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimeDomainProperties, + PointerDecoder* pTimeDomainsCounter) override; + + virtual void Process_vkGetSwapchainTimingPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimingProperties, + PointerDecoder* pSwapchainTimingPropertiesCounter) override; + + virtual void Process_vkSetSwapchainPresentTimingQueueSizeEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + uint32_t size) override; virtual void Process_vkAcquirePerformanceConfigurationINTEL( const ApiCallInfo& call_info, VkResult returnValue, @@ -3558,6 +3600,48 @@ class VulkanCppConsumer : public VulkanCppConsumerBase const ApiCallInfo& call_info, format::HandleId commandBuffer, StructPointerDecoder* pPerTileEndInfo) override; + virtual void Process_vkCmdBindDescriptorBufferEmbeddedSamplersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t set) override; + + virtual void Process_vkCmdBindDescriptorBuffersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t bufferCount, + StructPointerDecoder* pBindingInfos) override; + + virtual void Process_vkCmdSetDescriptorBufferOffsetsEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t setCount, + PointerDecoder* pBufferIndices, + PointerDecoder* pOffsets) override; + + virtual void Process_vkGetDescriptorEXT( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pDescriptorInfo, + size_t dataSize, + PointerDecoder* pDescriptor) override; + + virtual void Process_vkGetDescriptorSetLayoutBindingOffsetEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + uint32_t binding, + PointerDecoder* pOffset) override; + + virtual void Process_vkGetDescriptorSetLayoutSizeEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + PointerDecoder* pLayoutSizeInBytes) override; virtual void Process_vkCmdSetFragmentShadingRateEnumNV( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -4155,6 +4239,87 @@ class VulkanCppConsumer : public VulkanCppConsumerBase format::HandleId device, format::HandleId swapchain, StructPointerDecoder* pSleepModeInfo) override; + virtual void Process_vkBindDataGraphPipelineSessionMemoryARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + uint32_t bindInfoCount, + StructPointerDecoder* pBindInfos) override; + + virtual void Process_vkCmdDispatchDataGraphARM( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId session, + StructPointerDecoder* pInfo) override; + + virtual void Process_vkCreateDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSession) override; + + virtual void Process_vkCreateDataGraphPipelinesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId deferredOperation, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) override; + + virtual void Process_vkDestroyDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId session, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkGetDataGraphPipelineAvailablePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + PointerDecoder* pPropertiesCount, + PointerDecoder* pProperties) override; + + virtual void Process_vkGetDataGraphPipelinePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + uint32_t propertiesCount, + StructPointerDecoder* pProperties) override; + + virtual void Process_vkGetDataGraphPipelineSessionBindPointRequirementsARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pBindPointRequirementCount, + StructPointerDecoder* pBindPointRequirements) override; + + virtual void Process_vkGetDataGraphPipelineSessionMemoryRequirementsARM( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) override; + + virtual void Process_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineInfo, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineProperties) override; + + virtual void Process_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pQueueFamilyDataGraphPropertyCount, + StructPointerDecoder* pQueueFamilyDataGraphProperties) override; virtual void Process_vkCmdSetAttachmentFeedbackLoopEnableEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -4163,6 +4328,19 @@ class VulkanCppConsumer : public VulkanCppConsumerBase const ApiCallInfo& call_info, format::HandleId commandBuffer, StructPointerDecoder* pTileMemoryBindInfo) override; + virtual void Process_vkCmdDecompressMemoryEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pDecompressMemoryInfoEXT) override; + + virtual void Process_vkCmdDecompressMemoryIndirectCountEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkMemoryDecompressionMethodFlagsEXT decompressionMethod, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t maxDecompressionCount, + uint32_t stride) override; virtual void Process_vkCmdBuildPartitionedAccelerationStructuresNV( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -4252,10 +4430,26 @@ class VulkanCppConsumer : public VulkanCppConsumerBase VkExternalMemoryHandleTypeFlagBits handleType, uint64_t pHandle, StructPointerDecoder* pMemoryMetalHandleProperties) override; + virtual void Process_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pCounterCount, + StructPointerDecoder* pCounters, + StructPointerDecoder* pCounterDescriptions) override; virtual void Process_vkCmdEndRendering2EXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pRenderingEndInfo) override; + StructPointerDecoder* pRenderingEndInfo) override; + virtual void Process_vkCmdBeginCustomResolveEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pBeginCustomResolveInfo) override; + virtual void Process_vkCmdSetComputeOccupancyPriorityNV( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pParameters) override; virtual void Process_vkCmdBuildAccelerationStructuresIndirectKHR( const ApiCallInfo& call_info, format::HandleId commandBuffer, diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_consumer_extension.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_consumer_extension.cpp index 8da822282..2a0c4eb61 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_consumer_extension.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_consumer_extension.cpp @@ -1713,136 +1713,6 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoEncodeH265CapabilitiesKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoEncodeH265DpbSlotInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoEncodeH265GopRemainingFrameInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoEncodeH265PictureInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoEncodeH265ProfileInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoEncodeH265QualityLevelPropertiesKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoEncodeH265RateControlInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoEncodeH265RateControlLayerInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoEncodeH265SessionCreateInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoEncodeH265SessionParametersAddInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoEncodeH265SessionParametersCreateInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoEncodeH265SessionParametersFeedbackInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoEncodeH265SessionParametersGetInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_KHR: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -2073,66 +1943,6 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoDecodeH265CapabilitiesKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoDecodeH265DpbSlotInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoDecodeH265PictureInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoDecodeH265ProfileInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoDecodeH265SessionParametersAddInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoDecodeH265SessionParametersCreateInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -2353,6 +2163,16 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(out, + casted_struct, + decoded_struct, + consumer); + + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -2823,6 +2643,26 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR(out, + casted_struct, + decoded_struct, + consumer); + + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_INTRA_REFRESH_FEATURES_KHR: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -3043,6 +2883,16 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceShaderFmaFeaturesKHR(out, + casted_struct, + decoded_struct, + consumer); + + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -3073,46 +2923,6 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkPhysicalDeviceVideoMaintenance2FeaturesKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoDecodeAV1InlineSessionParametersInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoDecodeH264InlineSessionParametersInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR: { - auto casted_struct = reinterpret_cast(struct_info); - auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); - next_var_name = "&" + GenerateStruct_VkVideoDecodeH265InlineSessionParametersInfoKHR(out, - casted_struct, - decoded_struct, - consumer); - - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -3153,6 +2963,46 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceMaintenance10FeaturesKHR(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceMaintenance10PropertiesKHR(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkRenderingAttachmentFlagsInfoKHR(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkResolveImageModeInfoKHR(out, + casted_struct, + decoded_struct, + consumer); + + break; + } case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -3973,6 +3823,46 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDevicePresentTimingFeaturesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPresentTimingSurfaceCapabilitiesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPresentTimingsInfoEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkSwapchainCalibratedTimestampInfoEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -4493,6 +4383,16 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -4583,6 +4483,56 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } + case VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkDescriptorBufferBindingPushDescriptorBufferHandleEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkOpaqueCaptureDescriptorDataCreateInfoEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceDescriptorBufferFeaturesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceDescriptorBufferPropertiesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -5013,6 +4963,46 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_PROFILE_RGB_CONVERSION_INFO_VALVE: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkVideoEncodeProfileRgbConversionInfoVALVE(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RGB_CONVERSION_CAPABILITIES_VALVE: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkVideoEncodeRgbConversionCapabilitiesVALVE(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_RGB_CONVERSION_CREATE_INFO_VALVE: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkVideoEncodeSessionRgbConversionCreateInfoVALVE(out, + casted_struct, + decoded_struct, + consumer); + + break; + } case VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -5893,6 +5883,66 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkDataGraphPipelineCompilerControlCreateInfoARM(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkDataGraphPipelineIdentifierCreateInfoARM(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkDataGraphPipelineShaderModuleCreateInfoARM(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkDataGraphProcessingEngineCreateInfoARM(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceDataGraphFeaturesARM(out, + casted_struct, + decoded_struct, + consumer); + + break; + } case VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_RENDER_AREAS_RENDER_PASS_BEGIN_INFO_QCOM: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -6093,6 +6143,26 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceMemoryDecompressionFeaturesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceMemoryDecompressionPropertiesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } case VK_STRUCTURE_TYPE_DISPLAY_MODE_STEREO_PROPERTIES_NV: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -6283,6 +6353,26 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -6363,6 +6453,36 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkRenderPassPerformanceCountersByRegionBeginInfoARM(out, + casted_struct, + decoded_struct, + consumer); + + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -6443,6 +6563,76 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkCustomResolveCreateInfoEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceCustomResolveFeaturesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_BUILTIN_MODEL_CREATE_INFO_QCOM: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkDataGraphPipelineBuiltinModelCreateInfoQCOM(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceDataGraphModelFeaturesQCOM(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceShaderLongVectorFeaturesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceShaderLongVectorPropertiesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); @@ -6453,6 +6643,26 @@ std::string GenerateExtension(std::ostream& out, const void* struct_info, void* break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(out, + casted_struct, + decoded_struct, + consumer); + + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV: { + auto casted_struct = reinterpret_cast(struct_info); + auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); + next_var_name = "&" + GenerateStruct_VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV(out, + casted_struct, + decoded_struct, + consumer); + + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR: { auto casted_struct = reinterpret_cast(struct_info); auto decoded_struct = reinterpret_cast(pnext_meta_data->GetMetaStructPointer()); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_structs.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_structs.cpp index 4f4071b9c..340c0ffc4 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_structs.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_structs.cpp @@ -331,16 +331,52 @@ std::string GenerateStruct_StdVideoAV1TileInfo(std::ostream &out, const StdVideo &structInfo->flags, metaInfo->flags, consumer); + std::string pmi_col_starts_array = "NULL"; + if (structInfo->pMiColStarts != NULL) { + std::string pmi_col_starts_values; + for (uint32_t idx0 = 0; idx0 < structInfo->TileCols; ++idx0) { + pmi_col_starts_values += std::to_string(structInfo->pMiColStarts[idx0]) + ", "; + } + pmi_col_starts_array = "pMiColStarts_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint16_t " << pmi_col_starts_array << "[] = {" << pmi_col_starts_values << "};" << std::endl; + } + std::string pmi_row_starts_array = "NULL"; + if (structInfo->pMiRowStarts != NULL) { + std::string pmi_row_starts_values; + for (uint32_t idx0 = 0; idx0 < structInfo->TileRows; ++idx0) { + pmi_row_starts_values += std::to_string(structInfo->pMiRowStarts[idx0]) + ", "; + } + pmi_row_starts_array = "pMiRowStarts_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint16_t " << pmi_row_starts_array << "[] = {" << pmi_row_starts_values << "};" << std::endl; + } + std::string pwidth_in_sbs_minus1_array = "NULL"; + if (structInfo->pWidthInSbsMinus1 != NULL) { + std::string pwidth_in_sbs_minus1_values; + for (uint32_t idx0 = 0; idx0 < structInfo->TileCols; ++idx0) { + pwidth_in_sbs_minus1_values += std::to_string(structInfo->pWidthInSbsMinus1[idx0]) + ", "; + } + pwidth_in_sbs_minus1_array = "pWidthInSbsMinus1_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint16_t " << pwidth_in_sbs_minus1_array << "[] = {" << pwidth_in_sbs_minus1_values << "};" << std::endl; + } + std::string pheight_in_sbs_minus1_array = "NULL"; + if (structInfo->pHeightInSbsMinus1 != NULL) { + std::string pheight_in_sbs_minus1_values; + for (uint32_t idx0 = 0; idx0 < structInfo->TileRows; ++idx0) { + pheight_in_sbs_minus1_values += std::to_string(structInfo->pHeightInSbsMinus1[idx0]) + ", "; + } + pheight_in_sbs_minus1_array = "pHeightInSbsMinus1_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint16_t " << pheight_in_sbs_minus1_array << "[] = {" << pheight_in_sbs_minus1_values << "};" << std::endl; + } struct_body << "\t" << flags_info_var << "," << std::endl; struct_body << "\t\t\t" << std::to_string(structInfo->TileCols) << "," << std::endl; struct_body << "\t\t\t" << std::to_string(structInfo->TileRows) << "," << std::endl; struct_body << "\t\t\t" << structInfo->context_update_tile_id << "," << std::endl; struct_body << "\t\t\t" << std::to_string(structInfo->tile_size_bytes_minus_1) << "," << std::endl; struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->reserved1[0]), 7) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pMiColStarts << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pMiRowStarts << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pWidthInSbsMinus1 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pHeightInSbsMinus1 << ","; + struct_body << "\t\t\t" << pmi_col_starts_array << "," << std::endl; + struct_body << "\t\t\t" << pmi_row_starts_array << "," << std::endl; + struct_body << "\t\t\t" << pwidth_in_sbs_minus1_array << "," << std::endl; + struct_body << "\t\t\t" << pheight_in_sbs_minus1_array << ","; std::string variable_name = consumer.AddStruct(struct_body, "stdVideoAV1TileInfo"); out << "\t\t" << "StdVideoAV1TileInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; @@ -635,73 +671,6 @@ std::string GenerateStruct_StdVideoDecodeH264ReferenceInfoFlags(std::ostream &ou } -std::string GenerateStruct_StdVideoDecodeH265PictureInfo(std::ostream &out, const StdVideoDecodeH265PictureInfo* structInfo, Decoded_StdVideoDecodeH265PictureInfo* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoDecodeH265PictureInfoFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->sps_video_parameter_set_id) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pps_seq_parameter_set_id) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pps_pic_parameter_set_id) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->NumDeltaPocsOfRefRpsIdx) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->PicOrderCntVal << "," << std::endl; - struct_body << "\t\t\t" << structInfo->NumBitsForSTRefPicSetInSlice << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reserved << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->RefPicSetStCurrBefore[0]), STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->RefPicSetStCurrAfter[0]), STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->RefPicSetLtCurr[0]), STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoDecodeH265PictureInfo"); - out << "\t\t" << "StdVideoDecodeH265PictureInfo " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoDecodeH265PictureInfoFlags(std::ostream &out, const StdVideoDecodeH265PictureInfoFlags* structInfo, Decoded_StdVideoDecodeH265PictureInfoFlags* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->IrapPicFlag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->IdrPicFlag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->IsReference << "," << std::endl; - struct_body << "\t\t\t" << structInfo->short_term_ref_pic_set_sps_flag << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoDecodeH265PictureInfoFlags"); - out << "\t\t" << "StdVideoDecodeH265PictureInfoFlags " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoDecodeH265ReferenceInfo(std::ostream &out, const StdVideoDecodeH265ReferenceInfo* structInfo, Decoded_StdVideoDecodeH265ReferenceInfo* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoDecodeH265ReferenceInfoFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->PicOrderCntVal << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoDecodeH265ReferenceInfo"); - out << "\t\t" << "StdVideoDecodeH265ReferenceInfo " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoDecodeH265ReferenceInfoFlags(std::ostream &out, const StdVideoDecodeH265ReferenceInfoFlags* structInfo, Decoded_StdVideoDecodeH265ReferenceInfoFlags* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->used_for_long_term_reference << "," << std::endl; - struct_body << "\t\t\t" << structInfo->unused_for_reference << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoDecodeH265ReferenceInfoFlags"); - out << "\t\t" << "StdVideoDecodeH265ReferenceInfoFlags " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - std::string GenerateStruct_StdVideoDecodeVP9PictureInfo(std::ostream &out, const StdVideoDecodeVP9PictureInfo* structInfo, Decoded_StdVideoDecodeVP9PictureInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string flags_info_var = GenerateStruct_StdVideoDecodeVP9PictureInfoFlags(out, @@ -1139,29 +1108,53 @@ std::string GenerateStruct_StdVideoEncodeH264ReferenceListsInfo(std::ostream &ou &structInfo->flags, metaInfo->flags, consumer); - std::string pref_list0_mod_operations_struct = "NULL"; + std::string pref_list0_mod_operations_array = "NULL"; if (structInfo->pRefList0ModOperations != NULL) { - pref_list0_mod_operations_struct = GenerateStruct_StdVideoEncodeH264RefListModEntry(out, - structInfo->pRefList0ModOperations, - metaInfo->pRefList0ModOperations->GetMetaStructPointer(), - consumer); - pref_list0_mod_operations_struct.insert(0, "&"); + pref_list0_mod_operations_array = "pRefList0ModOperations_" + std::to_string(consumer.GetNextId()); + std::string pref_list0_mod_operations_names; + for (uint32_t idx = 0; idx < structInfo->refList0ModOpCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pRefList0ModOperations + idx != NULL) { + variable_name = GenerateStruct_StdVideoEncodeH264RefListModEntry(out, + structInfo->pRefList0ModOperations + idx, + metaInfo->pRefList0ModOperations->GetMetaStructPointer() + idx, + consumer); + } + pref_list0_mod_operations_names += variable_name + ", "; + } + out << "\t\t" << "StdVideoEncodeH264RefListModEntry " << pref_list0_mod_operations_array << "[] = {" << pref_list0_mod_operations_names << "};" << std::endl; } - std::string pref_list1_mod_operations_struct = "NULL"; + std::string pref_list1_mod_operations_array = "NULL"; if (structInfo->pRefList1ModOperations != NULL) { - pref_list1_mod_operations_struct = GenerateStruct_StdVideoEncodeH264RefListModEntry(out, - structInfo->pRefList1ModOperations, - metaInfo->pRefList1ModOperations->GetMetaStructPointer(), - consumer); - pref_list1_mod_operations_struct.insert(0, "&"); + pref_list1_mod_operations_array = "pRefList1ModOperations_" + std::to_string(consumer.GetNextId()); + std::string pref_list1_mod_operations_names; + for (uint32_t idx = 0; idx < structInfo->refList1ModOpCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pRefList1ModOperations + idx != NULL) { + variable_name = GenerateStruct_StdVideoEncodeH264RefListModEntry(out, + structInfo->pRefList1ModOperations + idx, + metaInfo->pRefList1ModOperations->GetMetaStructPointer() + idx, + consumer); + } + pref_list1_mod_operations_names += variable_name + ", "; + } + out << "\t\t" << "StdVideoEncodeH264RefListModEntry " << pref_list1_mod_operations_array << "[] = {" << pref_list1_mod_operations_names << "};" << std::endl; } - std::string pref_pic_marking_operations_struct = "NULL"; + std::string pref_pic_marking_operations_array = "NULL"; if (structInfo->pRefPicMarkingOperations != NULL) { - pref_pic_marking_operations_struct = GenerateStruct_StdVideoEncodeH264RefPicMarkingEntry(out, - structInfo->pRefPicMarkingOperations, - metaInfo->pRefPicMarkingOperations->GetMetaStructPointer(), - consumer); - pref_pic_marking_operations_struct.insert(0, "&"); + pref_pic_marking_operations_array = "pRefPicMarkingOperations_" + std::to_string(consumer.GetNextId()); + std::string pref_pic_marking_operations_names; + for (uint32_t idx = 0; idx < structInfo->refPicMarkingOpCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pRefPicMarkingOperations + idx != NULL) { + variable_name = GenerateStruct_StdVideoEncodeH264RefPicMarkingEntry(out, + structInfo->pRefPicMarkingOperations + idx, + metaInfo->pRefPicMarkingOperations->GetMetaStructPointer() + idx, + consumer); + } + pref_pic_marking_operations_names += variable_name + ", "; + } + out << "\t\t" << "StdVideoEncodeH264RefPicMarkingEntry " << pref_pic_marking_operations_array << "[] = {" << pref_pic_marking_operations_names << "};" << std::endl; } struct_body << "\t" << flags_info_var << "," << std::endl; struct_body << "\t\t\t" << std::to_string(structInfo->num_ref_idx_l0_active_minus1) << "," << std::endl; @@ -1172,9 +1165,9 @@ std::string GenerateStruct_StdVideoEncodeH264ReferenceListsInfo(std::ostream &ou struct_body << "\t\t\t" << std::to_string(structInfo->refList1ModOpCount) << "," << std::endl; struct_body << "\t\t\t" << std::to_string(structInfo->refPicMarkingOpCount) << "," << std::endl; struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->reserved1[0]), 7) << "," << std::endl; - struct_body << "\t\t\t" << pref_list0_mod_operations_struct << "," << std::endl; - struct_body << "\t\t\t" << pref_list1_mod_operations_struct << "," << std::endl; - struct_body << "\t\t\t" << pref_pic_marking_operations_struct << ","; + struct_body << "\t\t\t" << pref_list0_mod_operations_array << "," << std::endl; + struct_body << "\t\t\t" << pref_list1_mod_operations_array << "," << std::endl; + struct_body << "\t\t\t" << pref_pic_marking_operations_array << ","; std::string variable_name = consumer.AddStruct(struct_body, "stdVideoEncodeH264ReferenceListsInfo"); out << "\t\t" << "StdVideoEncodeH264ReferenceListsInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; @@ -1280,257 +1273,6 @@ std::string GenerateStruct_StdVideoEncodeH264WeightTableFlags(std::ostream &out, } -std::string GenerateStruct_StdVideoEncodeH265LongTermRefPics(std::ostream &out, const StdVideoEncodeH265LongTermRefPics* structInfo, Decoded_StdVideoEncodeH265LongTermRefPics* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << std::to_string(structInfo->num_long_term_sps) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->num_long_term_pics) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->lt_idx_sps[0]), STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->poc_lsb_lt[0]), STD_VIDEO_H265_MAX_LONG_TERM_PICS) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->used_by_curr_pic_lt_flag << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->delta_poc_msb_present_flag[0]), STD_VIDEO_H265_MAX_DELTA_POC) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->delta_poc_msb_cycle_lt[0]), STD_VIDEO_H265_MAX_DELTA_POC) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoEncodeH265LongTermRefPics"); - out << "\t\t" << "StdVideoEncodeH265LongTermRefPics " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoEncodeH265PictureInfo(std::ostream &out, const StdVideoEncodeH265PictureInfo* structInfo, Decoded_StdVideoEncodeH265PictureInfo* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoEncodeH265PictureInfoFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - std::string pref_lists_struct = "NULL"; - if (structInfo->pRefLists != NULL) { - pref_lists_struct = GenerateStruct_StdVideoEncodeH265ReferenceListsInfo(out, - structInfo->pRefLists, - metaInfo->pRefLists->GetMetaStructPointer(), - consumer); - pref_lists_struct.insert(0, "&"); - } - std::string pshort_term_ref_pic_set_struct = "NULL"; - if (structInfo->pShortTermRefPicSet != NULL) { - pshort_term_ref_pic_set_struct = GenerateStruct_StdVideoH265ShortTermRefPicSet(out, - structInfo->pShortTermRefPicSet, - metaInfo->pShortTermRefPicSet->GetMetaStructPointer(), - consumer); - pshort_term_ref_pic_set_struct.insert(0, "&"); - } - std::string plong_term_ref_pics_struct = "NULL"; - if (structInfo->pLongTermRefPics != NULL) { - plong_term_ref_pics_struct = GenerateStruct_StdVideoEncodeH265LongTermRefPics(out, - structInfo->pLongTermRefPics, - metaInfo->pLongTermRefPics->GetMetaStructPointer(), - consumer); - plong_term_ref_pics_struct.insert(0, "&"); - } - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH265PictureType(" << structInfo->pic_type << ")" << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->sps_video_parameter_set_id) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pps_seq_parameter_set_id) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pps_pic_parameter_set_id) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->short_term_ref_pic_set_idx) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->PicOrderCntVal << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->TemporalId) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->reserved1[0]), 7) << "," << std::endl; - struct_body << "\t\t\t" << pref_lists_struct << "," << std::endl; - struct_body << "\t\t\t" << pshort_term_ref_pic_set_struct << "," << std::endl; - struct_body << "\t\t\t" << plong_term_ref_pics_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoEncodeH265PictureInfo"); - out << "\t\t" << "StdVideoEncodeH265PictureInfo " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoEncodeH265PictureInfoFlags(std::ostream &out, const StdVideoEncodeH265PictureInfoFlags* structInfo, Decoded_StdVideoEncodeH265PictureInfoFlags* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->is_reference << "," << std::endl; - struct_body << "\t\t\t" << structInfo->IrapPicFlag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->used_for_long_term_reference << "," << std::endl; - struct_body << "\t\t\t" << structInfo->discardable_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cross_layer_bla_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pic_output_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->no_output_of_prior_pics_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->short_term_ref_pic_set_sps_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->slice_temporal_mvp_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reserved << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoEncodeH265PictureInfoFlags"); - out << "\t\t" << "StdVideoEncodeH265PictureInfoFlags " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoEncodeH265ReferenceInfo(std::ostream &out, const StdVideoEncodeH265ReferenceInfo* structInfo, Decoded_StdVideoEncodeH265ReferenceInfo* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoEncodeH265ReferenceInfoFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH265PictureType(" << structInfo->pic_type << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->PicOrderCntVal << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->TemporalId) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoEncodeH265ReferenceInfo"); - out << "\t\t" << "StdVideoEncodeH265ReferenceInfo " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoEncodeH265ReferenceInfoFlags(std::ostream &out, const StdVideoEncodeH265ReferenceInfoFlags* structInfo, Decoded_StdVideoEncodeH265ReferenceInfoFlags* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->used_for_long_term_reference << "," << std::endl; - struct_body << "\t\t\t" << structInfo->unused_for_reference << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reserved << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoEncodeH265ReferenceInfoFlags"); - out << "\t\t" << "StdVideoEncodeH265ReferenceInfoFlags " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoEncodeH265ReferenceListsInfo(std::ostream &out, const StdVideoEncodeH265ReferenceListsInfo* structInfo, Decoded_StdVideoEncodeH265ReferenceListsInfo* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoEncodeH265ReferenceListsInfoFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->num_ref_idx_l0_active_minus1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->num_ref_idx_l1_active_minus1) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->RefPicList0[0]), STD_VIDEO_H265_MAX_NUM_LIST_REF) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->RefPicList1[0]), STD_VIDEO_H265_MAX_NUM_LIST_REF) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->list_entry_l0[0]), STD_VIDEO_H265_MAX_NUM_LIST_REF) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->list_entry_l1[0]), STD_VIDEO_H265_MAX_NUM_LIST_REF) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoEncodeH265ReferenceListsInfo"); - out << "\t\t" << "StdVideoEncodeH265ReferenceListsInfo " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoEncodeH265ReferenceListsInfoFlags(std::ostream &out, const StdVideoEncodeH265ReferenceListsInfoFlags* structInfo, Decoded_StdVideoEncodeH265ReferenceListsInfoFlags* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->ref_pic_list_modification_flag_l0 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->ref_pic_list_modification_flag_l1 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reserved << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoEncodeH265ReferenceListsInfoFlags"); - out << "\t\t" << "StdVideoEncodeH265ReferenceListsInfoFlags " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoEncodeH265SliceSegmentHeader(std::ostream &out, const StdVideoEncodeH265SliceSegmentHeader* structInfo, Decoded_StdVideoEncodeH265SliceSegmentHeader* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoEncodeH265SliceSegmentHeaderFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - std::string pweight_table_struct = "NULL"; - if (structInfo->pWeightTable != NULL) { - pweight_table_struct = GenerateStruct_StdVideoEncodeH265WeightTable(out, - structInfo->pWeightTable, - metaInfo->pWeightTable->GetMetaStructPointer(), - consumer); - pweight_table_struct.insert(0, "&"); - } - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH265SliceType(" << structInfo->slice_type << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->slice_segment_address << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->collocated_ref_idx) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->MaxNumMergeCand) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->slice_cb_qp_offset) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->slice_cr_qp_offset) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->slice_beta_offset_div2) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->slice_tc_offset_div2) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->slice_act_y_qp_offset) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->slice_act_cb_qp_offset) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->slice_act_cr_qp_offset) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->slice_qp_delta) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reserved1 << "," << std::endl; - struct_body << "\t\t\t" << pweight_table_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoEncodeH265SliceSegmentHeader"); - out << "\t\t" << "StdVideoEncodeH265SliceSegmentHeader " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoEncodeH265SliceSegmentHeaderFlags(std::ostream &out, const StdVideoEncodeH265SliceSegmentHeaderFlags* structInfo, Decoded_StdVideoEncodeH265SliceSegmentHeaderFlags* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->first_slice_segment_in_pic_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dependent_slice_segment_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->slice_sao_luma_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->slice_sao_chroma_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->num_ref_idx_active_override_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->mvd_l1_zero_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cabac_init_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cu_chroma_qp_offset_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deblocking_filter_override_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->slice_deblocking_filter_disabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->collocated_from_l0_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->slice_loop_filter_across_slices_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reserved << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoEncodeH265SliceSegmentHeaderFlags"); - out << "\t\t" << "StdVideoEncodeH265SliceSegmentHeaderFlags " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoEncodeH265WeightTable(std::ostream &out, const StdVideoEncodeH265WeightTable* structInfo, Decoded_StdVideoEncodeH265WeightTable* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoEncodeH265WeightTableFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->luma_log2_weight_denom) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->delta_chroma_log2_weight_denom) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->delta_luma_weight_l0[0]), STD_VIDEO_H265_MAX_NUM_LIST_REF) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->luma_offset_l0[0]), STD_VIDEO_H265_MAX_NUM_LIST_REF) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->delta_chroma_weight_l0[0][0]), STD_VIDEO_H265_MAX_NUM_LIST_REF) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->delta_chroma_offset_l0[0][0]), STD_VIDEO_H265_MAX_NUM_LIST_REF) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->delta_luma_weight_l1[0]), STD_VIDEO_H265_MAX_NUM_LIST_REF) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->luma_offset_l1[0]), STD_VIDEO_H265_MAX_NUM_LIST_REF) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->delta_chroma_weight_l1[0][0]), STD_VIDEO_H265_MAX_NUM_LIST_REF) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->delta_chroma_offset_l1[0][0]), STD_VIDEO_H265_MAX_NUM_LIST_REF) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoEncodeH265WeightTable"); - out << "\t\t" << "StdVideoEncodeH265WeightTable " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoEncodeH265WeightTableFlags(std::ostream &out, const StdVideoEncodeH265WeightTableFlags* structInfo, Decoded_StdVideoEncodeH265WeightTableFlags* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->luma_weight_l0_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->chroma_weight_l0_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->luma_weight_l1_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->chroma_weight_l1_flag << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoEncodeH265WeightTableFlags"); - out << "\t\t" << "StdVideoEncodeH265WeightTableFlags " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - std::string GenerateStruct_StdVideoH264HrdParameters(std::ostream &out, const StdVideoH264HrdParameters* structInfo, Decoded_StdVideoH264HrdParameters* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; struct_body << "\t" << std::to_string(structInfo->cpb_cnt_minus1) << "," << std::endl; @@ -1623,6 +1365,11 @@ std::string GenerateStruct_StdVideoH264SequenceParameterSet(std::ostream &out, c &structInfo->flags, metaInfo->flags, consumer); + std::string poffset_for_ref_frame_array = "NULL"; + if (structInfo->pOffsetForRefFrame != NULL) { + poffset_for_ref_frame_array = "pOffsetForRefFrame_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "int32_t " << poffset_for_ref_frame_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pOffsetForRefFrame, structInfo->num_ref_frames_in_pic_order_cnt_cycle) << ";" << std::endl; + } std::string pscaling_lists_struct = "NULL"; if (structInfo->pScalingLists != NULL) { pscaling_lists_struct = GenerateStruct_StdVideoH264ScalingLists(out, @@ -1661,6 +1408,7 @@ std::string GenerateStruct_StdVideoH264SequenceParameterSet(std::ostream &out, c struct_body << "\t\t\t" << structInfo->frame_crop_top_offset << "," << std::endl; struct_body << "\t\t\t" << structInfo->frame_crop_bottom_offset << "," << std::endl; struct_body << "\t\t\t" << structInfo->reserved2 << "," << std::endl; + struct_body << "\t\t\t" << poffset_for_ref_frame_array << "," << std::endl; struct_body << "\t\t\t" << pscaling_lists_struct << "," << std::endl; struct_body << "\t\t\t" << psequence_parameter_set_vui_struct << ","; std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH264SequenceParameterSet"); @@ -1757,20451 +1505,20347 @@ std::string GenerateStruct_StdVideoH264SpsVuiFlags(std::ostream &out, const StdV } -std::string GenerateStruct_StdVideoH265DecPicBufMgr(std::ostream &out, const StdVideoH265DecPicBufMgr* structInfo, Decoded_StdVideoH265DecPicBufMgr* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_StdVideoVP9ColorConfig(std::ostream &out, const StdVideoVP9ColorConfig* structInfo, Decoded_StdVideoVP9ColorConfig* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->max_latency_increase_plus1[0]), STD_VIDEO_H265_SUBLAYERS_LIST_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->max_dec_pic_buffering_minus1[0]), STD_VIDEO_H265_SUBLAYERS_LIST_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->max_num_reorder_pics[0]), STD_VIDEO_H265_SUBLAYERS_LIST_SIZE) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265DecPicBufMgr"); - out << "\t\t" << "StdVideoH265DecPicBufMgr " << variable_name << " {" << std::endl; + std::string flags_info_var = GenerateStruct_StdVideoVP9ColorConfigFlags(out, + &structInfo->flags, + metaInfo->flags, + consumer); + struct_body << "\t" << flags_info_var << "," << std::endl; + struct_body << "\t\t\t" << std::to_string(structInfo->BitDepth) << "," << std::endl; + struct_body << "\t\t\t" << std::to_string(structInfo->subsampling_x) << "," << std::endl; + struct_body << "\t\t\t" << std::to_string(structInfo->subsampling_y) << "," << std::endl; + struct_body << "\t\t\t" << std::to_string(structInfo->reserved1) << "," << std::endl; + struct_body << "\t\t\t" << "StdVideoVP9ColorSpace(" << structInfo->color_space << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "stdVideoVP9ColorConfig"); + out << "\t\t" << "StdVideoVP9ColorConfig " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265HrdFlags(std::ostream &out, const StdVideoH265HrdFlags* structInfo, Decoded_StdVideoH265HrdFlags* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_StdVideoVP9ColorConfigFlags(std::ostream &out, const StdVideoVP9ColorConfigFlags* structInfo, Decoded_StdVideoVP9ColorConfigFlags* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->nal_hrd_parameters_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vcl_hrd_parameters_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sub_pic_hrd_params_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sub_pic_cpb_params_in_pic_timing_sei_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fixed_pic_rate_general_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fixed_pic_rate_within_cvs_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->low_delay_hrd_flag << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265HrdFlags"); - out << "\t\t" << "StdVideoH265HrdFlags " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->color_range << "," << std::endl; + struct_body << "\t\t\t" << structInfo->reserved << ","; + std::string variable_name = consumer.AddStruct(struct_body, "stdVideoVP9ColorConfigFlags"); + out << "\t\t" << "StdVideoVP9ColorConfigFlags " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265HrdParameters(std::ostream &out, const StdVideoH265HrdParameters* structInfo, Decoded_StdVideoH265HrdParameters* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_StdVideoVP9LoopFilter(std::ostream &out, const StdVideoVP9LoopFilter* structInfo, Decoded_StdVideoVP9LoopFilter* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoH265HrdFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - std::string psub_layer_hrd_parameters_nal_struct = "NULL"; - if (structInfo->pSubLayerHrdParametersNal != NULL) { - psub_layer_hrd_parameters_nal_struct = GenerateStruct_StdVideoH265SubLayerHrdParameters(out, - structInfo->pSubLayerHrdParametersNal, - metaInfo->pSubLayerHrdParametersNal->GetMetaStructPointer(), - consumer); - psub_layer_hrd_parameters_nal_struct.insert(0, "&"); - } - std::string psub_layer_hrd_parameters_vcl_struct = "NULL"; - if (structInfo->pSubLayerHrdParametersVcl != NULL) { - psub_layer_hrd_parameters_vcl_struct = GenerateStruct_StdVideoH265SubLayerHrdParameters(out, - structInfo->pSubLayerHrdParametersVcl, - metaInfo->pSubLayerHrdParametersVcl->GetMetaStructPointer(), - consumer); - psub_layer_hrd_parameters_vcl_struct.insert(0, "&"); - } + std::string flags_info_var = GenerateStruct_StdVideoVP9LoopFilterFlags(out, + &structInfo->flags, + metaInfo->flags, + consumer); struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->tick_divisor_minus2) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->du_cpb_removal_delay_increment_length_minus1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->dpb_output_delay_du_length_minus1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->bit_rate_scale) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->cpb_size_scale) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->cpb_size_du_scale) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->initial_cpb_removal_delay_length_minus1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->au_cpb_removal_delay_length_minus1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->dpb_output_delay_length_minus1) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->cpb_cnt_minus1[0]), STD_VIDEO_H265_SUBLAYERS_LIST_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->elemental_duration_in_tc_minus1[0]), STD_VIDEO_H265_SUBLAYERS_LIST_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->reserved[0]), 3) << "," << std::endl; - struct_body << "\t\t\t" << psub_layer_hrd_parameters_nal_struct << "," << std::endl; - struct_body << "\t\t\t" << psub_layer_hrd_parameters_vcl_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265HrdParameters"); - out << "\t\t" << "StdVideoH265HrdParameters " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << std::to_string(structInfo->loop_filter_level) << "," << std::endl; + struct_body << "\t\t\t" << std::to_string(structInfo->loop_filter_sharpness) << "," << std::endl; + struct_body << "\t\t\t" << std::to_string(structInfo->update_ref_delta) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->loop_filter_ref_deltas[0]), STD_VIDEO_VP9_MAX_REF_FRAMES) << "," << std::endl; + struct_body << "\t\t\t" << std::to_string(structInfo->update_mode_delta) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->loop_filter_mode_deltas[0]), STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "stdVideoVP9LoopFilter"); + out << "\t\t" << "StdVideoVP9LoopFilter " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265LongTermRefPicsSps(std::ostream &out, const StdVideoH265LongTermRefPicsSps* structInfo, Decoded_StdVideoH265LongTermRefPicsSps* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_StdVideoVP9LoopFilterFlags(std::ostream &out, const StdVideoVP9LoopFilterFlags* structInfo, Decoded_StdVideoVP9LoopFilterFlags* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->used_by_curr_pic_lt_sps_flag << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->lt_ref_pic_poc_lsb_sps[0]), STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265LongTermRefPicsSps"); - out << "\t\t" << "StdVideoH265LongTermRefPicsSps " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->loop_filter_delta_enabled << "," << std::endl; + struct_body << "\t\t\t" << structInfo->loop_filter_delta_update << "," << std::endl; + struct_body << "\t\t\t" << structInfo->reserved << ","; + std::string variable_name = consumer.AddStruct(struct_body, "stdVideoVP9LoopFilterFlags"); + out << "\t\t" << "StdVideoVP9LoopFilterFlags " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265PictureParameterSet(std::ostream &out, const StdVideoH265PictureParameterSet* structInfo, Decoded_StdVideoH265PictureParameterSet* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_StdVideoVP9Segmentation(std::ostream &out, const StdVideoVP9Segmentation* structInfo, Decoded_StdVideoVP9Segmentation* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoH265PpsFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - std::string pscaling_lists_struct = "NULL"; - if (structInfo->pScalingLists != NULL) { - pscaling_lists_struct = GenerateStruct_StdVideoH265ScalingLists(out, - structInfo->pScalingLists, - metaInfo->pScalingLists->GetMetaStructPointer(), - consumer); - pscaling_lists_struct.insert(0, "&"); - } - std::string ppredictor_palette_entries_struct = "NULL"; - if (structInfo->pPredictorPaletteEntries != NULL) { - ppredictor_palette_entries_struct = GenerateStruct_StdVideoH265PredictorPaletteEntries(out, - structInfo->pPredictorPaletteEntries, - metaInfo->pPredictorPaletteEntries->GetMetaStructPointer(), - consumer); - ppredictor_palette_entries_struct.insert(0, "&"); - } + std::string flags_info_var = GenerateStruct_StdVideoVP9SegmentationFlags(out, + &structInfo->flags, + metaInfo->flags, + consumer); struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pps_pic_parameter_set_id) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pps_seq_parameter_set_id) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->sps_video_parameter_set_id) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->num_extra_slice_header_bits) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->num_ref_idx_l0_default_active_minus1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->num_ref_idx_l1_default_active_minus1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->init_qp_minus26) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->diff_cu_qp_delta_depth) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pps_cb_qp_offset) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pps_cr_qp_offset) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pps_beta_offset_div2) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pps_tc_offset_div2) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->log2_parallel_merge_level_minus2) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->log2_max_transform_skip_block_size_minus2) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->diff_cu_chroma_qp_offset_depth) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->chroma_qp_offset_list_len_minus1) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->cb_qp_offset_list[0]), STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->cr_qp_offset_list[0]), STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->log2_sao_offset_scale_luma) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->log2_sao_offset_scale_chroma) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pps_act_y_qp_offset_plus5) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pps_act_cb_qp_offset_plus5) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pps_act_cr_qp_offset_plus3) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pps_num_palette_predictor_initializers) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->luma_bit_depth_entry_minus8) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->chroma_bit_depth_entry_minus8) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->num_tile_columns_minus1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->num_tile_rows_minus1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->reserved1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->reserved2) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->column_width_minus1[0]), STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->row_height_minus1[0]), STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reserved3 << "," << std::endl; - struct_body << "\t\t\t" << pscaling_lists_struct << "," << std::endl; - struct_body << "\t\t\t" << ppredictor_palette_entries_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265PictureParameterSet"); - out << "\t\t" << "StdVideoH265PictureParameterSet " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->segmentation_tree_probs[0]), STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->segmentation_pred_prob[0]), STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->FeatureEnabled[0]), STD_VIDEO_VP9_MAX_SEGMENTS) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->FeatureData[0][0]), STD_VIDEO_VP9_MAX_SEGMENTS) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "stdVideoVP9Segmentation"); + out << "\t\t" << "StdVideoVP9Segmentation " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265PpsFlags(std::ostream &out, const StdVideoH265PpsFlags* structInfo, Decoded_StdVideoH265PpsFlags* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_StdVideoVP9SegmentationFlags(std::ostream &out, const StdVideoVP9SegmentationFlags* structInfo, Decoded_StdVideoVP9SegmentationFlags* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->dependent_slice_segments_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->output_flag_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sign_data_hiding_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cabac_init_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->constrained_intra_pred_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->transform_skip_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cu_qp_delta_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pps_slice_chroma_qp_offsets_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->weighted_pred_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->weighted_bipred_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->transquant_bypass_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tiles_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->entropy_coding_sync_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->uniform_spacing_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->loop_filter_across_tiles_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pps_loop_filter_across_slices_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deblocking_filter_control_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deblocking_filter_override_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pps_deblocking_filter_disabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pps_scaling_list_data_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->lists_modification_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->slice_segment_header_extension_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pps_extension_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cross_component_prediction_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->chroma_qp_offset_list_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pps_curr_pic_ref_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->residual_adaptive_colour_transform_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pps_slice_act_qp_offsets_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pps_palette_predictor_initializers_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->monochrome_palette_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pps_range_extension_flag << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265PpsFlags"); - out << "\t\t" << "StdVideoH265PpsFlags " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->segmentation_update_map << "," << std::endl; + struct_body << "\t\t\t" << structInfo->segmentation_temporal_update << "," << std::endl; + struct_body << "\t\t\t" << structInfo->segmentation_update_data << "," << std::endl; + struct_body << "\t\t\t" << structInfo->segmentation_abs_or_delta_update << "," << std::endl; + struct_body << "\t\t\t" << structInfo->reserved << ","; + std::string variable_name = consumer.AddStruct(struct_body, "stdVideoVP9SegmentationFlags"); + out << "\t\t" << "StdVideoVP9SegmentationFlags " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265PredictorPaletteEntries(std::ostream &out, const StdVideoH265PredictorPaletteEntries* structInfo, Decoded_StdVideoH265PredictorPaletteEntries* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAllocationCallbacks(std::ostream &out, const VkAllocationCallbacks* structInfo, Decoded_VkAllocationCallbacks* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->PredictorPaletteEntries[0][0]), STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265PredictorPaletteEntries"); - out << "\t\t" << "StdVideoH265PredictorPaletteEntries " << variable_name << " {" << std::endl; + out << "\t\t" << "// TODO: Support pUserData (non-struct output) argument." << std::endl; + struct_body << "\t\t\t" << structInfo->pfnAllocation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pfnReallocation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pfnFree << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pfnInternalAllocation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pfnInternalFree << ","; + std::string variable_name = consumer.AddStruct(struct_body, "allocationCallbacks"); + out << "\t\t" << "VkAllocationCallbacks " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265ProfileTierLevel(std::ostream &out, const StdVideoH265ProfileTierLevel* structInfo, Decoded_StdVideoH265ProfileTierLevel* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkApplicationInfo(std::ostream &out, const VkApplicationInfo* structInfo, Decoded_VkApplicationInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoH265ProfileTierLevelFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH265ProfileIdc(" << structInfo->general_profile_idc << ")" << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH265LevelIdc(" << structInfo->general_level_idc << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265ProfileTierLevel"); - out << "\t\t" << "StdVideoH265ProfileTierLevel " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pApplicationName) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->applicationVersion << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pEngineName) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->engineVersion << "," << std::endl; + struct_body << "\t\t\t" << structInfo->apiVersion << ","; + std::string variable_name = consumer.AddStruct(struct_body, "applicationInfo"); + out << "\t\t" << "VkApplicationInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265ProfileTierLevelFlags(std::ostream &out, const StdVideoH265ProfileTierLevelFlags* structInfo, Decoded_StdVideoH265ProfileTierLevelFlags* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAttachmentDescription(std::ostream &out, const VkAttachmentDescription* structInfo, Decoded_VkAttachmentDescription* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->general_tier_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->general_progressive_source_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->general_interlaced_source_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->general_non_packed_constraint_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->general_frame_only_constraint_flag << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265ProfileTierLevelFlags"); - out << "\t\t" << "StdVideoH265ProfileTierLevelFlags " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkAttachmentDescriptionFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->samples << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAttachmentLoadOp(" << structInfo->loadOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAttachmentStoreOp(" << structInfo->storeOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAttachmentLoadOp(" << structInfo->stencilLoadOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAttachmentStoreOp(" << structInfo->stencilStoreOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->initialLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->finalLayout << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "attachmentDescription"); + out << "\t\t" << "VkAttachmentDescription " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265ScalingLists(std::ostream &out, const StdVideoH265ScalingLists* structInfo, Decoded_StdVideoH265ScalingLists* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAttachmentReference(std::ostream &out, const VkAttachmentReference* structInfo, Decoded_VkAttachmentReference* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->ScalingList4x4[0][0]), STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->ScalingList8x8[0][0]), STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->ScalingList16x16[0][0]), STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->ScalingList32x32[0][0]), STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->ScalingListDCCoef16x16[0]), STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->ScalingListDCCoef32x32[0]), STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265ScalingLists"); - out << "\t\t" << "StdVideoH265ScalingLists " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->attachment << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->layout << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "attachmentReference"); + out << "\t\t" << "VkAttachmentReference " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265SequenceParameterSet(std::ostream &out, const StdVideoH265SequenceParameterSet* structInfo, Decoded_StdVideoH265SequenceParameterSet* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBufferCopy(std::ostream &out, const VkBufferCopy* structInfo, Decoded_VkBufferCopy* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoH265SpsFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - std::string pprofile_tier_level_struct = "NULL"; - if (structInfo->pProfileTierLevel != NULL) { - pprofile_tier_level_struct = GenerateStruct_StdVideoH265ProfileTierLevel(out, - structInfo->pProfileTierLevel, - metaInfo->pProfileTierLevel->GetMetaStructPointer(), - consumer); - pprofile_tier_level_struct.insert(0, "&"); - } - std::string pdec_pic_buf_mgr_struct = "NULL"; - if (structInfo->pDecPicBufMgr != NULL) { - pdec_pic_buf_mgr_struct = GenerateStruct_StdVideoH265DecPicBufMgr(out, - structInfo->pDecPicBufMgr, - metaInfo->pDecPicBufMgr->GetMetaStructPointer(), - consumer); - pdec_pic_buf_mgr_struct.insert(0, "&"); - } - std::string pscaling_lists_struct = "NULL"; - if (structInfo->pScalingLists != NULL) { - pscaling_lists_struct = GenerateStruct_StdVideoH265ScalingLists(out, - structInfo->pScalingLists, - metaInfo->pScalingLists->GetMetaStructPointer(), - consumer); - pscaling_lists_struct.insert(0, "&"); - } - std::string pshort_term_ref_pic_set_struct = "NULL"; - if (structInfo->pShortTermRefPicSet != NULL) { - pshort_term_ref_pic_set_struct = GenerateStruct_StdVideoH265ShortTermRefPicSet(out, - structInfo->pShortTermRefPicSet, - metaInfo->pShortTermRefPicSet->GetMetaStructPointer(), - consumer); - pshort_term_ref_pic_set_struct.insert(0, "&"); - } - std::string plong_term_ref_pics_sps_struct = "NULL"; - if (structInfo->pLongTermRefPicsSps != NULL) { - plong_term_ref_pics_sps_struct = GenerateStruct_StdVideoH265LongTermRefPicsSps(out, - structInfo->pLongTermRefPicsSps, - metaInfo->pLongTermRefPicsSps->GetMetaStructPointer(), - consumer); - plong_term_ref_pics_sps_struct.insert(0, "&"); - } - std::string psequence_parameter_set_vui_struct = "NULL"; - if (structInfo->pSequenceParameterSetVui != NULL) { - psequence_parameter_set_vui_struct = GenerateStruct_StdVideoH265SequenceParameterSetVui(out, - structInfo->pSequenceParameterSetVui, - metaInfo->pSequenceParameterSetVui->GetMetaStructPointer(), - consumer); - psequence_parameter_set_vui_struct.insert(0, "&"); - } - std::string ppredictor_palette_entries_struct = "NULL"; - if (structInfo->pPredictorPaletteEntries != NULL) { - ppredictor_palette_entries_struct = GenerateStruct_StdVideoH265PredictorPaletteEntries(out, - structInfo->pPredictorPaletteEntries, - metaInfo->pPredictorPaletteEntries->GetMetaStructPointer(), - consumer); - ppredictor_palette_entries_struct.insert(0, "&"); - } - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH265ChromaFormatIdc(" << structInfo->chroma_format_idc << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pic_width_in_luma_samples << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pic_height_in_luma_samples << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->sps_video_parameter_set_id) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->sps_max_sub_layers_minus1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->sps_seq_parameter_set_id) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->bit_depth_luma_minus8) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->bit_depth_chroma_minus8) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->log2_max_pic_order_cnt_lsb_minus4) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->log2_min_luma_coding_block_size_minus3) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->log2_diff_max_min_luma_coding_block_size) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->log2_min_luma_transform_block_size_minus2) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->log2_diff_max_min_luma_transform_block_size) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->max_transform_hierarchy_depth_inter) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->max_transform_hierarchy_depth_intra) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->num_short_term_ref_pic_sets) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->num_long_term_ref_pics_sps) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pcm_sample_bit_depth_luma_minus1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->pcm_sample_bit_depth_chroma_minus1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->log2_min_pcm_luma_coding_block_size_minus3) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->log2_diff_max_min_pcm_luma_coding_block_size) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->reserved1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->reserved2) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->palette_max_size) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->delta_palette_max_predictor_size) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->motion_vector_resolution_control_idc) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->sps_num_palette_predictor_initializers_minus1) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->conf_win_left_offset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->conf_win_right_offset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->conf_win_top_offset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->conf_win_bottom_offset << "," << std::endl; - struct_body << "\t\t\t" << pprofile_tier_level_struct << "," << std::endl; - struct_body << "\t\t\t" << pdec_pic_buf_mgr_struct << "," << std::endl; - struct_body << "\t\t\t" << pscaling_lists_struct << "," << std::endl; - struct_body << "\t\t\t" << pshort_term_ref_pic_set_struct << "," << std::endl; - struct_body << "\t\t\t" << plong_term_ref_pics_sps_struct << "," << std::endl; - struct_body << "\t\t\t" << psequence_parameter_set_vui_struct << "," << std::endl; - struct_body << "\t\t\t" << ppredictor_palette_entries_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265SequenceParameterSet"); - out << "\t\t" << "StdVideoH265SequenceParameterSet " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->srcOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bufferCopy"); + out << "\t\t" << "VkBufferCopy " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265SequenceParameterSetVui(std::ostream &out, const StdVideoH265SequenceParameterSetVui* structInfo, Decoded_StdVideoH265SequenceParameterSetVui* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBufferCreateInfo(std::ostream &out, const VkBufferCreateInfo* structInfo, Decoded_VkBufferCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoH265SpsVuiFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - std::string phrd_parameters_struct = "NULL"; - if (structInfo->pHrdParameters != NULL) { - phrd_parameters_struct = GenerateStruct_StdVideoH265HrdParameters(out, - structInfo->pHrdParameters, - metaInfo->pHrdParameters->GetMetaStructPointer(), - consumer); - phrd_parameters_struct.insert(0, "&"); + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pqueue_family_indices_array = "NULL"; + if (structInfo->pQueueFamilyIndices != NULL) { + pqueue_family_indices_array = "pQueueFamilyIndices_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pqueue_family_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pQueueFamilyIndices, structInfo->queueFamilyIndexCount) << ";" << std::endl; } - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH265AspectRatioIdc(" << structInfo->aspect_ratio_idc << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sar_width << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sar_height << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->video_format) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->colour_primaries) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->transfer_characteristics) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->matrix_coeffs) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->chroma_sample_loc_type_top_field) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->chroma_sample_loc_type_bottom_field) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->reserved1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->reserved2) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->def_disp_win_left_offset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->def_disp_win_right_offset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->def_disp_win_top_offset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->def_disp_win_bottom_offset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vui_num_units_in_tick << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vui_time_scale << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vui_num_ticks_poc_diff_one_minus1 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->min_spatial_segmentation_idc << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reserved3 << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->max_bytes_per_pic_denom) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->max_bits_per_min_cu_denom) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->log2_max_mv_length_horizontal) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->log2_max_mv_length_vertical) << "," << std::endl; - struct_body << "\t\t\t" << phrd_parameters_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265SequenceParameterSetVui"); - out << "\t\t" << "StdVideoH265SequenceParameterSetVui " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkBufferCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkBufferUsageFlags(" << structInfo->usage << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSharingMode(" << structInfo->sharingMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->queueFamilyIndexCount << "," << std::endl; + struct_body << "\t\t\t" << pqueue_family_indices_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bufferCreateInfo"); + out << "\t\t" << "VkBufferCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265ShortTermRefPicSet(std::ostream &out, const StdVideoH265ShortTermRefPicSet* structInfo, Decoded_StdVideoH265ShortTermRefPicSet* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBufferImageCopy(std::ostream &out, const VkBufferImageCopy* structInfo, Decoded_VkBufferImageCopy* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoH265ShortTermRefPicSetFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->delta_idx_minus1 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->use_delta_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->abs_delta_rps_minus1 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->used_by_curr_pic_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->used_by_curr_pic_s0_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->used_by_curr_pic_s1_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reserved1 << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->reserved2) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->reserved3) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->num_negative_pics) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->num_positive_pics) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->delta_poc_s0_minus1[0]), STD_VIDEO_H265_MAX_DPB_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->delta_poc_s1_minus1[0]), STD_VIDEO_H265_MAX_DPB_SIZE) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265ShortTermRefPicSet"); - out << "\t\t" << "StdVideoH265ShortTermRefPicSet " << variable_name << " {" << std::endl; + std::string image_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->imageSubresource, + metaInfo->imageSubresource, + consumer); + std::string image_offset_info_var = GenerateStruct_VkOffset3D(out, + &structInfo->imageOffset, + metaInfo->imageOffset, + consumer); + std::string image_extent_info_var = GenerateStruct_VkExtent3D(out, + &structInfo->imageExtent, + metaInfo->imageExtent, + consumer); + struct_body << "\t" << structInfo->bufferOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferRowLength << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferImageHeight << "," << std::endl; + struct_body << "\t\t\t" << image_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << image_offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << image_extent_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bufferImageCopy"); + out << "\t\t" << "VkBufferImageCopy " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265ShortTermRefPicSetFlags(std::ostream &out, const StdVideoH265ShortTermRefPicSetFlags* structInfo, Decoded_StdVideoH265ShortTermRefPicSetFlags* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBufferMemoryBarrier(std::ostream &out, const VkBufferMemoryBarrier* structInfo, Decoded_VkBufferMemoryBarrier* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->inter_ref_pic_set_prediction_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->delta_rps_sign << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265ShortTermRefPicSetFlags"); - out << "\t\t" << "StdVideoH265ShortTermRefPicSetFlags " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->srcAccessMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->dstAccessMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->srcQueueFamilyIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstQueueFamilyIndex << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bufferMemoryBarrier"); + out << "\t\t" << "VkBufferMemoryBarrier " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265SpsFlags(std::ostream &out, const StdVideoH265SpsFlags* structInfo, Decoded_StdVideoH265SpsFlags* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->sps_temporal_id_nesting_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->separate_colour_plane_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->conformance_window_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sps_sub_layer_ordering_info_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->scaling_list_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sps_scaling_list_data_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->amp_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sample_adaptive_offset_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pcm_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pcm_loop_filter_disabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->long_term_ref_pics_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sps_temporal_mvp_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->strong_intra_smoothing_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vui_parameters_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sps_extension_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sps_range_extension_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->transform_skip_rotation_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->transform_skip_context_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->implicit_rdpcm_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->explicit_rdpcm_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extended_precision_processing_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->intra_smoothing_disabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->high_precision_offsets_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->persistent_rice_adaptation_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cabac_bypass_alignment_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sps_scc_extension_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sps_curr_pic_ref_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->palette_mode_enabled_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sps_palette_predictor_initializers_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->intra_boundary_filtering_disabled_flag << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265SpsFlags"); - out << "\t\t" << "StdVideoH265SpsFlags " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoH265SpsVuiFlags(std::ostream &out, const StdVideoH265SpsVuiFlags* structInfo, Decoded_StdVideoH265SpsVuiFlags* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBufferViewCreateInfo(std::ostream &out, const VkBufferViewCreateInfo* structInfo, Decoded_VkBufferViewCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->aspect_ratio_info_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->overscan_info_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->overscan_appropriate_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->video_signal_type_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->video_full_range_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->colour_description_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->chroma_loc_info_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->neutral_chroma_indication_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->field_seq_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->frame_field_info_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->default_display_window_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vui_timing_info_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vui_poc_proportional_to_timing_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vui_hrd_parameters_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bitstream_restriction_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tiles_fixed_structure_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->motion_vectors_over_pic_boundaries_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->restricted_ref_pic_lists_flag << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265SpsVuiFlags"); - out << "\t\t" << "StdVideoH265SpsVuiFlags " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkBufferViewCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->range << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bufferViewCreateInfo"); + out << "\t\t" << "VkBufferViewCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265SubLayerHrdParameters(std::ostream &out, const StdVideoH265SubLayerHrdParameters* structInfo, Decoded_StdVideoH265SubLayerHrdParameters* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkClearAttachment(std::ostream &out, const VkClearAttachment* structInfo, Decoded_VkClearAttachment* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->bit_rate_value_minus1[0]), STD_VIDEO_H265_CPB_CNT_LIST_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->cpb_size_value_minus1[0]), STD_VIDEO_H265_CPB_CNT_LIST_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->cpb_size_du_value_minus1[0]), STD_VIDEO_H265_CPB_CNT_LIST_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->bit_rate_du_value_minus1[0]), STD_VIDEO_H265_CPB_CNT_LIST_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cbr_flag << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265SubLayerHrdParameters"); - out << "\t\t" << "StdVideoH265SubLayerHrdParameters " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkImageAspectFlags(" << structInfo->aspectMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->colorAttachment << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(structInfo->clearValue) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "clearAttachment"); + out << "\t\t" << "VkClearAttachment " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265VideoParameterSet(std::ostream &out, const StdVideoH265VideoParameterSet* structInfo, Decoded_StdVideoH265VideoParameterSet* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkClearDepthStencilValue(std::ostream &out, const VkClearDepthStencilValue* structInfo, Decoded_VkClearDepthStencilValue* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoH265VpsFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - std::string pdec_pic_buf_mgr_struct = "NULL"; - if (structInfo->pDecPicBufMgr != NULL) { - pdec_pic_buf_mgr_struct = GenerateStruct_StdVideoH265DecPicBufMgr(out, - structInfo->pDecPicBufMgr, - metaInfo->pDecPicBufMgr->GetMetaStructPointer(), - consumer); - pdec_pic_buf_mgr_struct.insert(0, "&"); - } - std::string phrd_parameters_struct = "NULL"; - if (structInfo->pHrdParameters != NULL) { - phrd_parameters_struct = GenerateStruct_StdVideoH265HrdParameters(out, - structInfo->pHrdParameters, - metaInfo->pHrdParameters->GetMetaStructPointer(), - consumer); - phrd_parameters_struct.insert(0, "&"); - } - std::string pprofile_tier_level_struct = "NULL"; - if (structInfo->pProfileTierLevel != NULL) { - pprofile_tier_level_struct = GenerateStruct_StdVideoH265ProfileTierLevel(out, - structInfo->pProfileTierLevel, - metaInfo->pProfileTierLevel->GetMetaStructPointer(), - consumer); - pprofile_tier_level_struct.insert(0, "&"); - } - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->vps_video_parameter_set_id) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->vps_max_sub_layers_minus1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->reserved1) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->reserved2) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vps_num_units_in_tick << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vps_time_scale << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vps_num_ticks_poc_diff_one_minus1 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reserved3 << "," << std::endl; - struct_body << "\t\t\t" << pdec_pic_buf_mgr_struct << "," << std::endl; - struct_body << "\t\t\t" << phrd_parameters_struct << "," << std::endl; - struct_body << "\t\t\t" << pprofile_tier_level_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265VideoParameterSet"); - out << "\t\t" << "StdVideoH265VideoParameterSet " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->depth << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stencil << ","; + std::string variable_name = consumer.AddStruct(struct_body, "clearDepthStencilValue"); + out << "\t\t" << "VkClearDepthStencilValue " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoH265VpsFlags(std::ostream &out, const StdVideoH265VpsFlags* structInfo, Decoded_StdVideoH265VpsFlags* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkClearRect(std::ostream &out, const VkClearRect* structInfo, Decoded_VkClearRect* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->vps_temporal_id_nesting_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vps_sub_layer_ordering_info_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vps_timing_info_present_flag << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vps_poc_proportional_to_timing_flag << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoH265VpsFlags"); - out << "\t\t" << "StdVideoH265VpsFlags " << variable_name << " {" << std::endl; + std::string rect_info_var = GenerateStruct_VkRect2D(out, + &structInfo->rect, + metaInfo->rect, + consumer); + struct_body << "\t" << rect_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->baseArrayLayer << "," << std::endl; + struct_body << "\t\t\t" << structInfo->layerCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "clearRect"); + out << "\t\t" << "VkClearRect " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoVP9ColorConfig(std::ostream &out, const StdVideoVP9ColorConfig* structInfo, Decoded_StdVideoVP9ColorConfig* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCommandBufferAllocateInfo(std::ostream &out, const VkCommandBufferAllocateInfo* structInfo, Decoded_VkCommandBufferAllocateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoVP9ColorConfigFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->BitDepth) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->subsampling_x) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->subsampling_y) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->reserved1) << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoVP9ColorSpace(" << structInfo->color_space << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoVP9ColorConfig"); - out << "\t\t" << "StdVideoVP9ColorConfig " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_StdVideoVP9ColorConfigFlags(std::ostream &out, const StdVideoVP9ColorConfigFlags* structInfo, Decoded_StdVideoVP9ColorConfigFlags* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->color_range << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reserved << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoVP9ColorConfigFlags"); - out << "\t\t" << "StdVideoVP9ColorConfigFlags " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->commandPool) << "," << std::endl; + struct_body << "\t\t\t" << "VkCommandBufferLevel(" << structInfo->level << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->commandBufferCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "commandBufferAllocateInfo"); + out << "\t\t" << "VkCommandBufferAllocateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoVP9LoopFilter(std::ostream &out, const StdVideoVP9LoopFilter* structInfo, Decoded_StdVideoVP9LoopFilter* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCommandBufferBeginInfo(std::ostream &out, const VkCommandBufferBeginInfo* structInfo, Decoded_VkCommandBufferBeginInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoVP9LoopFilterFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->loop_filter_level) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->loop_filter_sharpness) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->update_ref_delta) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->loop_filter_ref_deltas[0]), STD_VIDEO_VP9_MAX_REF_FRAMES) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->update_mode_delta) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->loop_filter_mode_deltas[0]), STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoVP9LoopFilter"); - out << "\t\t" << "StdVideoVP9LoopFilter " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pinheritance_info_struct = "NULL"; + if (structInfo->pInheritanceInfo != NULL) { + pinheritance_info_struct = GenerateStruct_VkCommandBufferInheritanceInfo(out, + structInfo->pInheritanceInfo, + metaInfo->pInheritanceInfo->GetMetaStructPointer(), + consumer); + pinheritance_info_struct.insert(0, "&"); + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkCommandBufferUsageFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << pinheritance_info_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "commandBufferBeginInfo"); + out << "\t\t" << "VkCommandBufferBeginInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoVP9LoopFilterFlags(std::ostream &out, const StdVideoVP9LoopFilterFlags* structInfo, Decoded_StdVideoVP9LoopFilterFlags* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCommandBufferInheritanceInfo(std::ostream &out, const VkCommandBufferInheritanceInfo* structInfo, Decoded_VkCommandBufferInheritanceInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->loop_filter_delta_enabled << "," << std::endl; - struct_body << "\t\t\t" << structInfo->loop_filter_delta_update << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reserved << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoVP9LoopFilterFlags"); - out << "\t\t" << "StdVideoVP9LoopFilterFlags " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->renderPass) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subpass << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->framebuffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->occlusionQueryEnable << "," << std::endl; + struct_body << "\t\t\t" << "VkQueryControlFlags(" << structInfo->queryFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkQueryPipelineStatisticFlags(" << structInfo->pipelineStatistics << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "commandBufferInheritanceInfo"); + out << "\t\t" << "VkCommandBufferInheritanceInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoVP9Segmentation(std::ostream &out, const StdVideoVP9Segmentation* structInfo, Decoded_StdVideoVP9Segmentation* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCommandPoolCreateInfo(std::ostream &out, const VkCommandPoolCreateInfo* structInfo, Decoded_VkCommandPoolCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string flags_info_var = GenerateStruct_StdVideoVP9SegmentationFlags(out, - &structInfo->flags, - metaInfo->flags, - consumer); - struct_body << "\t" << flags_info_var << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->segmentation_tree_probs[0]), STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->segmentation_pred_prob[0]), STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->FeatureEnabled[0]), STD_VIDEO_VP9_MAX_SEGMENTS) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->FeatureData[0][0]), STD_VIDEO_VP9_MAX_SEGMENTS) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoVP9Segmentation"); - out << "\t\t" << "StdVideoVP9Segmentation " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkCommandPoolCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->queueFamilyIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "commandPoolCreateInfo"); + out << "\t\t" << "VkCommandPoolCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_StdVideoVP9SegmentationFlags(std::ostream &out, const StdVideoVP9SegmentationFlags* structInfo, Decoded_StdVideoVP9SegmentationFlags* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkComponentMapping(std::ostream &out, const VkComponentMapping* structInfo, Decoded_VkComponentMapping* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->segmentation_update_map << "," << std::endl; - struct_body << "\t\t\t" << structInfo->segmentation_temporal_update << "," << std::endl; - struct_body << "\t\t\t" << structInfo->segmentation_update_data << "," << std::endl; - struct_body << "\t\t\t" << structInfo->segmentation_abs_or_delta_update << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reserved << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stdVideoVP9SegmentationFlags"); - out << "\t\t" << "StdVideoVP9SegmentationFlags " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkComponentSwizzle(" << structInfo->r << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentSwizzle(" << structInfo->g << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentSwizzle(" << structInfo->b << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentSwizzle(" << structInfo->a << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "componentMapping"); + out << "\t\t" << "VkComponentMapping " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAllocationCallbacks(std::ostream &out, const VkAllocationCallbacks* structInfo, Decoded_VkAllocationCallbacks* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkComputePipelineCreateInfo(std::ostream &out, const VkComputePipelineCreateInfo* structInfo, Decoded_VkComputePipelineCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - out << "\t\t" << "// TODO: Support pUserData (non-struct output) argument." << std::endl; - struct_body << "\t\t\t" << structInfo->pfnAllocation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pfnReallocation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pfnFree << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pfnInternalAllocation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pfnInternalFree << ","; - std::string variable_name = consumer.AddStruct(struct_body, "allocationCallbacks"); - out << "\t\t" << "VkAllocationCallbacks " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string stage_info_var = GenerateStruct_VkPipelineShaderStageCreateInfo(out, + &structInfo->stage, + metaInfo->stage, + consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << stage_info_var << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->basePipelineHandle) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->basePipelineIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "computePipelineCreateInfo"); + out << "\t\t" << "VkComputePipelineCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkApplicationInfo(std::ostream &out, const VkApplicationInfo* structInfo, Decoded_VkApplicationInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCopyDescriptorSet(std::ostream &out, const VkCopyDescriptorSet* structInfo, Decoded_VkCopyDescriptorSet* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pApplicationName) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->applicationVersion << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pEngineName) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->engineVersion << "," << std::endl; - struct_body << "\t\t\t" << structInfo->apiVersion << ","; - std::string variable_name = consumer.AddStruct(struct_body, "applicationInfo"); - out << "\t\t" << "VkApplicationInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcSet) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->srcBinding << "," << std::endl; + struct_body << "\t\t\t" << structInfo->srcArrayElement << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstSet) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstBinding << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstArrayElement << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "copyDescriptorSet"); + out << "\t\t" << "VkCopyDescriptorSet " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAttachmentDescription(std::ostream &out, const VkAttachmentDescription* structInfo, Decoded_VkAttachmentDescription* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorBufferInfo(std::ostream &out, const VkDescriptorBufferInfo* structInfo, Decoded_VkDescriptorBufferInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkAttachmentDescriptionFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->samples << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAttachmentLoadOp(" << structInfo->loadOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAttachmentStoreOp(" << structInfo->storeOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAttachmentLoadOp(" << structInfo->stencilLoadOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAttachmentStoreOp(" << structInfo->stencilStoreOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->initialLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->finalLayout << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "attachmentDescription"); - out << "\t\t" << "VkAttachmentDescription " << variable_name << " {" << std::endl; + struct_body << "\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->range << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorBufferInfo"); + out << "\t\t" << "VkDescriptorBufferInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAttachmentReference(std::ostream &out, const VkAttachmentReference* structInfo, Decoded_VkAttachmentReference* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorPoolCreateInfo(std::ostream &out, const VkDescriptorPoolCreateInfo* structInfo, Decoded_VkDescriptorPoolCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->attachment << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->layout << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "attachmentReference"); - out << "\t\t" << "VkAttachmentReference " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string ppool_sizes_array = "NULL"; + if (structInfo->pPoolSizes != NULL) { + ppool_sizes_array = "pPoolSizes_" + std::to_string(consumer.GetNextId()); + std::string ppool_sizes_names; + for (uint32_t idx = 0; idx < structInfo->poolSizeCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pPoolSizes + idx != NULL) { + variable_name = GenerateStruct_VkDescriptorPoolSize(out, + structInfo->pPoolSizes + idx, + metaInfo->pPoolSizes->GetMetaStructPointer() + idx, + consumer); + } + ppool_sizes_names += variable_name + ", "; + } + out << "\t\t" << "VkDescriptorPoolSize " << ppool_sizes_array << "[] = {" << ppool_sizes_names << "};" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkDescriptorPoolCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSets << "," << std::endl; + struct_body << "\t\t\t" << structInfo->poolSizeCount << "," << std::endl; + struct_body << "\t\t\t" << ppool_sizes_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorPoolCreateInfo"); + out << "\t\t" << "VkDescriptorPoolCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBufferCopy(std::ostream &out, const VkBufferCopy* structInfo, Decoded_VkBufferCopy* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorPoolSize(std::ostream &out, const VkDescriptorPoolSize* structInfo, Decoded_VkDescriptorPoolSize* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->srcOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bufferCopy"); - out << "\t\t" << "VkBufferCopy " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkDescriptorType(" << structInfo->type << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorPoolSize"); + out << "\t\t" << "VkDescriptorPoolSize " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBufferCreateInfo(std::ostream &out, const VkBufferCreateInfo* structInfo, Decoded_VkBufferCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorSetAllocateInfo(std::ostream &out, const VkDescriptorSetAllocateInfo* structInfo, Decoded_VkDescriptorSetAllocateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pqueue_family_indices_array = "NULL"; - if (structInfo->pQueueFamilyIndices != NULL) { - pqueue_family_indices_array = "pQueueFamilyIndices_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pqueue_family_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pQueueFamilyIndices, structInfo->queueFamilyIndexCount) << ";" << std::endl; + std::string pset_layouts_array = "NULL"; + if (metaInfo->pSetLayouts.GetPointer() != NULL && structInfo->descriptorSetCount > 0) { + pset_layouts_array = "pset_layouts_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)); + std::string pset_layouts_values = toStringJoin(metaInfo->pSetLayouts.GetPointer(), + metaInfo->pSetLayouts.GetPointer() + structInfo->descriptorSetCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->descriptorSetCount == 1) { + pset_layouts_array = "&" + pset_layouts_values; + } else if (structInfo->descriptorSetCount > 1) { + out << "\t\t" << "VkDescriptorSetLayout " << pset_layouts_array << "[] = {" << pset_layouts_values << "};" << std::endl; + } } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkBufferCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkBufferUsageFlags(" << structInfo->usage << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSharingMode(" << structInfo->sharingMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queueFamilyIndexCount << "," << std::endl; - struct_body << "\t\t\t" << pqueue_family_indices_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bufferCreateInfo"); - out << "\t\t" << "VkBufferCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->descriptorPool) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorSetCount << "," << std::endl; + struct_body << "\t\t\t" << pset_layouts_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetAllocateInfo"); + out << "\t\t" << "VkDescriptorSetAllocateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBufferImageCopy(std::ostream &out, const VkBufferImageCopy* structInfo, Decoded_VkBufferImageCopy* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorSetLayoutBinding(std::ostream &out, const VkDescriptorSetLayoutBinding* structInfo, Decoded_VkDescriptorSetLayoutBinding* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string image_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, - &structInfo->imageSubresource, - metaInfo->imageSubresource, - consumer); - std::string image_offset_info_var = GenerateStruct_VkOffset3D(out, - &structInfo->imageOffset, - metaInfo->imageOffset, - consumer); - std::string image_extent_info_var = GenerateStruct_VkExtent3D(out, - &structInfo->imageExtent, - metaInfo->imageExtent, - consumer); - struct_body << "\t" << structInfo->bufferOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferRowLength << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferImageHeight << "," << std::endl; - struct_body << "\t\t\t" << image_subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << image_offset_info_var << "," << std::endl; - struct_body << "\t\t\t" << image_extent_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bufferImageCopy"); - out << "\t\t" << "VkBufferImageCopy " << variable_name << " {" << std::endl; + std::string pimmutable_samplers_array = "NULL"; + if (metaInfo->pImmutableSamplers.GetPointer() != NULL && structInfo->descriptorCount > 0) { + pimmutable_samplers_array = "pimmutable_samplers_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_SAMPLER)); + std::string pimmutable_samplers_values = toStringJoin(metaInfo->pImmutableSamplers.GetPointer(), + metaInfo->pImmutableSamplers.GetPointer() + structInfo->descriptorCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->descriptorCount == 1) { + pimmutable_samplers_array = "&" + pimmutable_samplers_values; + } else if (structInfo->descriptorCount > 1) { + out << "\t\t" << "VkSampler " << pimmutable_samplers_array << "[] = {" << pimmutable_samplers_values << "};" << std::endl; + } + } + struct_body << "\t" << structInfo->binding << "," << std::endl; + struct_body << "\t\t\t" << "VkDescriptorType(" << structInfo->descriptorType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorCount << "," << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->stageFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << pimmutable_samplers_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetLayoutBinding"); + out << "\t\t" << "VkDescriptorSetLayoutBinding " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBufferMemoryBarrier(std::ostream &out, const VkBufferMemoryBarrier* structInfo, Decoded_VkBufferMemoryBarrier* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorSetLayoutCreateInfo(std::ostream &out, const VkDescriptorSetLayoutCreateInfo* structInfo, Decoded_VkDescriptorSetLayoutCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pbindings_array = "NULL"; + if (structInfo->pBindings != NULL) { + pbindings_array = "pBindings_" + std::to_string(consumer.GetNextId()); + std::string pbindings_names; + for (uint32_t idx = 0; idx < structInfo->bindingCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pBindings + idx != NULL) { + variable_name = GenerateStruct_VkDescriptorSetLayoutBinding(out, + structInfo->pBindings + idx, + metaInfo->pBindings->GetMetaStructPointer() + idx, + consumer); + } + pbindings_names += variable_name + ", "; + } + out << "\t\t" << "VkDescriptorSetLayoutBinding " << pbindings_array << "[] = {" << pbindings_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->srcAccessMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->dstAccessMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcQueueFamilyIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstQueueFamilyIndex << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bufferMemoryBarrier"); - out << "\t\t" << "VkBufferMemoryBarrier " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDescriptorSetLayoutCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bindingCount << "," << std::endl; + struct_body << "\t\t\t" << pbindings_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetLayoutCreateInfo"); + out << "\t\t" << "VkDescriptorSetLayoutCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBufferViewCreateInfo(std::ostream &out, const VkBufferViewCreateInfo* structInfo, Decoded_VkBufferViewCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceCreateInfo(std::ostream &out, const VkDeviceCreateInfo* structInfo, Decoded_VkDeviceCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pqueue_create_infos_array = "NULL"; + if (structInfo->pQueueCreateInfos != NULL) { + pqueue_create_infos_array = "pQueueCreateInfos_" + std::to_string(consumer.GetNextId()); + std::string pqueue_create_infos_names; + for (uint32_t idx = 0; idx < structInfo->queueCreateInfoCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pQueueCreateInfos + idx != NULL) { + variable_name = GenerateStruct_VkDeviceQueueCreateInfo(out, + structInfo->pQueueCreateInfos + idx, + metaInfo->pQueueCreateInfos->GetMetaStructPointer() + idx, + consumer); + } + pqueue_create_infos_names += variable_name + ", "; + } + out << "\t\t" << "VkDeviceQueueCreateInfo " << pqueue_create_infos_array << "[] = {" << pqueue_create_infos_names << "};" << std::endl; + } + std::string pp_enabled_layer_names_var = "NULL"; + if (structInfo->enabledLayerCount) { + pp_enabled_layer_names_var = "ppEnabledLayerNames_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "const char* " << pp_enabled_layer_names_var << "[] = " << VulkanCppConsumerBase::EscapeStringArray(structInfo->ppEnabledLayerNames, structInfo->enabledLayerCount) << ";" << std::endl; + } + std::string pp_enabled_extension_names_var = "NULL"; + if (structInfo->enabledExtensionCount) { + pp_enabled_extension_names_var = "ppEnabledExtensionNames_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "const char* " << pp_enabled_extension_names_var << "[] = " << VulkanCppConsumerBase::EscapeStringArray(structInfo->ppEnabledExtensionNames, structInfo->enabledExtensionCount) << ";" << std::endl; + } + std::string penabled_features_struct = "NULL"; + if (structInfo->pEnabledFeatures != NULL) { + penabled_features_struct = GenerateStruct_VkPhysicalDeviceFeatures(out, + structInfo->pEnabledFeatures, + metaInfo->pEnabledFeatures->GetMetaStructPointer(), + consumer); + penabled_features_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkBufferViewCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->range << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bufferViewCreateInfo"); - out << "\t\t" << "VkBufferViewCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDeviceCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->queueCreateInfoCount << "," << std::endl; + struct_body << "\t\t\t" << pqueue_create_infos_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->enabledLayerCount << "," << std::endl; + struct_body << "\t\t\t" << pp_enabled_layer_names_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->enabledExtensionCount << "," << std::endl; + struct_body << "\t\t\t" << pp_enabled_extension_names_var << "," << std::endl; + struct_body << "\t\t\t" << penabled_features_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceCreateInfo"); + out << "\t\t" << "VkDeviceCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkClearAttachment(std::ostream &out, const VkClearAttachment* structInfo, Decoded_VkClearAttachment* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceQueueCreateInfo(std::ostream &out, const VkDeviceQueueCreateInfo* structInfo, Decoded_VkDeviceQueueCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkImageAspectFlags(" << structInfo->aspectMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->colorAttachment << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(structInfo->clearValue) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "clearAttachment"); - out << "\t\t" << "VkClearAttachment " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pqueue_priorities_array = "NULL"; + if (structInfo->pQueuePriorities != NULL) { + pqueue_priorities_array = "pQueuePriorities_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "float " << pqueue_priorities_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pQueuePriorities, structInfo->queueCount) << ";" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkDeviceQueueCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->queueFamilyIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->queueCount << "," << std::endl; + struct_body << "\t\t\t" << pqueue_priorities_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceQueueCreateInfo"); + out << "\t\t" << "VkDeviceQueueCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkClearDepthStencilValue(std::ostream &out, const VkClearDepthStencilValue* structInfo, Decoded_VkClearDepthStencilValue* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDispatchIndirectCommand(std::ostream &out, const VkDispatchIndirectCommand* structInfo, Decoded_VkDispatchIndirectCommand* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->depth << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stencil << ","; - std::string variable_name = consumer.AddStruct(struct_body, "clearDepthStencilValue"); - out << "\t\t" << "VkClearDepthStencilValue " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->x << "," << std::endl; + struct_body << "\t\t\t" << structInfo->y << "," << std::endl; + struct_body << "\t\t\t" << structInfo->z << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dispatchIndirectCommand"); + out << "\t\t" << "VkDispatchIndirectCommand " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkClearRect(std::ostream &out, const VkClearRect* structInfo, Decoded_VkClearRect* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDrawIndexedIndirectCommand(std::ostream &out, const VkDrawIndexedIndirectCommand* structInfo, Decoded_VkDrawIndexedIndirectCommand* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string rect_info_var = GenerateStruct_VkRect2D(out, - &structInfo->rect, - metaInfo->rect, - consumer); - struct_body << "\t" << rect_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->baseArrayLayer << "," << std::endl; - struct_body << "\t\t\t" << structInfo->layerCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "clearRect"); - out << "\t\t" << "VkClearRect " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->indexCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->instanceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->firstIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->firstInstance << ","; + std::string variable_name = consumer.AddStruct(struct_body, "drawIndexedIndirectCommand"); + out << "\t\t" << "VkDrawIndexedIndirectCommand " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCommandBufferAllocateInfo(std::ostream &out, const VkCommandBufferAllocateInfo* structInfo, Decoded_VkCommandBufferAllocateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDrawIndirectCommand(std::ostream &out, const VkDrawIndirectCommand* structInfo, Decoded_VkDrawIndirectCommand* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->commandPool) << "," << std::endl; - struct_body << "\t\t\t" << "VkCommandBufferLevel(" << structInfo->level << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->commandBufferCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "commandBufferAllocateInfo"); - out << "\t\t" << "VkCommandBufferAllocateInfo " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->vertexCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->instanceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->firstVertex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->firstInstance << ","; + std::string variable_name = consumer.AddStruct(struct_body, "drawIndirectCommand"); + out << "\t\t" << "VkDrawIndirectCommand " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCommandBufferBeginInfo(std::ostream &out, const VkCommandBufferBeginInfo* structInfo, Decoded_VkCommandBufferBeginInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkEventCreateInfo(std::ostream &out, const VkEventCreateInfo* structInfo, Decoded_VkEventCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pinheritance_info_struct = "NULL"; - if (structInfo->pInheritanceInfo != NULL) { - pinheritance_info_struct = GenerateStruct_VkCommandBufferInheritanceInfo(out, - structInfo->pInheritanceInfo, - metaInfo->pInheritanceInfo->GetMetaStructPointer(), - consumer); - pinheritance_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkCommandBufferUsageFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << pinheritance_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "commandBufferBeginInfo"); - out << "\t\t" << "VkCommandBufferBeginInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkEventCreateFlags(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "eventCreateInfo"); + out << "\t\t" << "VkEventCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCommandBufferInheritanceInfo(std::ostream &out, const VkCommandBufferInheritanceInfo* structInfo, Decoded_VkCommandBufferInheritanceInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExtensionProperties(std::ostream &out, const VkExtensionProperties* structInfo, Decoded_VkExtensionProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->renderPass) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subpass << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->framebuffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->occlusionQueryEnable << "," << std::endl; - struct_body << "\t\t\t" << "VkQueryControlFlags(" << structInfo->queryFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkQueryPipelineStatisticFlags(" << structInfo->pipelineStatistics << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "commandBufferInheritanceInfo"); - out << "\t\t" << "VkCommandBufferInheritanceInfo " << variable_name << " {" << std::endl; + struct_body << "\t" << VulkanCppConsumerBase::ToEscape(structInfo->extensionName) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->specVersion << ","; + std::string variable_name = consumer.AddStruct(struct_body, "extensionProperties"); + out << "\t\t" << "VkExtensionProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCommandPoolCreateInfo(std::ostream &out, const VkCommandPoolCreateInfo* structInfo, Decoded_VkCommandPoolCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExtent2D(std::ostream &out, const VkExtent2D* structInfo, Decoded_VkExtent2D* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkCommandPoolCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queueFamilyIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "commandPoolCreateInfo"); - out << "\t\t" << "VkCommandPoolCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->width << "," << std::endl; + struct_body << "\t\t\t" << structInfo->height << ","; + std::string variable_name = consumer.AddStruct(struct_body, "extent2D"); + out << "\t\t" << "VkExtent2D " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkComponentMapping(std::ostream &out, const VkComponentMapping* structInfo, Decoded_VkComponentMapping* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExtent3D(std::ostream &out, const VkExtent3D* structInfo, Decoded_VkExtent3D* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkComponentSwizzle(" << structInfo->r << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentSwizzle(" << structInfo->g << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentSwizzle(" << structInfo->b << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentSwizzle(" << structInfo->a << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "componentMapping"); - out << "\t\t" << "VkComponentMapping " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->width << "," << std::endl; + struct_body << "\t\t\t" << structInfo->height << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depth << ","; + std::string variable_name = consumer.AddStruct(struct_body, "extent3D"); + out << "\t\t" << "VkExtent3D " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkComputePipelineCreateInfo(std::ostream &out, const VkComputePipelineCreateInfo* structInfo, Decoded_VkComputePipelineCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkFenceCreateInfo(std::ostream &out, const VkFenceCreateInfo* structInfo, Decoded_VkFenceCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string stage_info_var = GenerateStruct_VkPipelineShaderStageCreateInfo(out, - &structInfo->stage, - metaInfo->stage, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << stage_info_var << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->basePipelineHandle) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->basePipelineIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "computePipelineCreateInfo"); - out << "\t\t" << "VkComputePipelineCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFenceCreateFlags(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "fenceCreateInfo"); + out << "\t\t" << "VkFenceCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCopyDescriptorSet(std::ostream &out, const VkCopyDescriptorSet* structInfo, Decoded_VkCopyDescriptorSet* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkFormatProperties(std::ostream &out, const VkFormatProperties* structInfo, Decoded_VkFormatProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcSet) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcBinding << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcArrayElement << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstSet) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstBinding << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstArrayElement << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "copyDescriptorSet"); - out << "\t\t" << "VkCopyDescriptorSet " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkFormatFeatureFlags(" << structInfo->linearTilingFeatures << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormatFeatureFlags(" << structInfo->optimalTilingFeatures << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormatFeatureFlags(" << structInfo->bufferFeatures << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "formatProperties"); + out << "\t\t" << "VkFormatProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDescriptorBufferInfo(std::ostream &out, const VkDescriptorBufferInfo* structInfo, Decoded_VkDescriptorBufferInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkFramebufferCreateInfo(std::ostream &out, const VkFramebufferCreateInfo* structInfo, Decoded_VkFramebufferCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->range << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "descriptorBufferInfo"); - out << "\t\t" << "VkDescriptorBufferInfo " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pattachments_array = "NULL"; + if (metaInfo->pAttachments.GetPointer() != NULL && structInfo->attachmentCount > 0) { + pattachments_array = "pattachments_array_" + std::to_string(consumer.GetNextId()); + std::string pattachments_values = toStringJoin(metaInfo->pAttachments.GetPointer(), + metaInfo->pAttachments.GetPointer() + structInfo->attachmentCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->attachmentCount == 1) { + pattachments_array = "&" + pattachments_values; + } else if (structInfo->attachmentCount > 1) { + out << "\t\t" << "VkImageView " << pattachments_array << "[] = {" << pattachments_values << "};" << std::endl; + } + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkFramebufferCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->renderPass) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->attachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pattachments_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->width << "," << std::endl; + struct_body << "\t\t\t" << structInfo->height << "," << std::endl; + struct_body << "\t\t\t" << structInfo->layers << ","; + std::string variable_name = consumer.AddStruct(struct_body, "framebufferCreateInfo"); + out << "\t\t" << "VkFramebufferCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDescriptorPoolCreateInfo(std::ostream &out, const VkDescriptorPoolCreateInfo* structInfo, Decoded_VkDescriptorPoolCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkGraphicsPipelineCreateInfo(std::ostream &out, const VkGraphicsPipelineCreateInfo* structInfo, Decoded_VkGraphicsPipelineCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ppool_sizes_array = "NULL"; - if (structInfo->pPoolSizes != NULL) { - ppool_sizes_array = "pPoolSizes_" + std::to_string(consumer.GetNextId()); - std::string ppool_sizes_names; - for (uint32_t idx = 0; idx < structInfo->poolSizeCount; idx++) { + std::string pstages_array = "NULL"; + if (structInfo->pStages != NULL) { + pstages_array = "pStages_" + std::to_string(consumer.GetNextId()); + std::string pstages_names; + for (uint32_t idx = 0; idx < structInfo->stageCount; idx++) { std::string variable_name = "NULL"; - if (structInfo->pPoolSizes + idx != NULL) { - variable_name = GenerateStruct_VkDescriptorPoolSize(out, - structInfo->pPoolSizes + idx, - metaInfo->pPoolSizes->GetMetaStructPointer() + idx, - consumer); + if (structInfo->pStages + idx != NULL) { + variable_name = GenerateStruct_VkPipelineShaderStageCreateInfo(out, + structInfo->pStages + idx, + metaInfo->pStages->GetMetaStructPointer() + idx, + consumer); } - ppool_sizes_names += variable_name + ", "; + pstages_names += variable_name + ", "; } - out << "\t\t" << "VkDescriptorPoolSize " << ppool_sizes_array << "[] = {" << ppool_sizes_names << "};" << std::endl; + out << "\t\t" << "VkPipelineShaderStageCreateInfo " << pstages_array << "[] = {" << pstages_names << "};" << std::endl; + } + std::string pvertex_input_state_struct = "NULL"; + if (structInfo->pVertexInputState != NULL) { + pvertex_input_state_struct = GenerateStruct_VkPipelineVertexInputStateCreateInfo(out, + structInfo->pVertexInputState, + metaInfo->pVertexInputState->GetMetaStructPointer(), + consumer); + pvertex_input_state_struct.insert(0, "&"); + } + std::string pinput_assembly_state_struct = "NULL"; + if (structInfo->pInputAssemblyState != NULL) { + pinput_assembly_state_struct = GenerateStruct_VkPipelineInputAssemblyStateCreateInfo(out, + structInfo->pInputAssemblyState, + metaInfo->pInputAssemblyState->GetMetaStructPointer(), + consumer); + pinput_assembly_state_struct.insert(0, "&"); + } + std::string ptessellation_state_struct = "NULL"; + if (structInfo->pTessellationState != NULL) { + ptessellation_state_struct = GenerateStruct_VkPipelineTessellationStateCreateInfo(out, + structInfo->pTessellationState, + metaInfo->pTessellationState->GetMetaStructPointer(), + consumer); + ptessellation_state_struct.insert(0, "&"); + } + std::string pviewport_state_struct = "NULL"; + if (structInfo->pViewportState != NULL) { + pviewport_state_struct = GenerateStruct_VkPipelineViewportStateCreateInfo(out, + structInfo->pViewportState, + metaInfo->pViewportState->GetMetaStructPointer(), + consumer); + pviewport_state_struct.insert(0, "&"); + } + std::string prasterization_state_struct = "NULL"; + if (structInfo->pRasterizationState != NULL) { + prasterization_state_struct = GenerateStruct_VkPipelineRasterizationStateCreateInfo(out, + structInfo->pRasterizationState, + metaInfo->pRasterizationState->GetMetaStructPointer(), + consumer); + prasterization_state_struct.insert(0, "&"); + } + std::string pmultisample_state_struct = "NULL"; + if (structInfo->pMultisampleState != NULL) { + pmultisample_state_struct = GenerateStruct_VkPipelineMultisampleStateCreateInfo(out, + structInfo->pMultisampleState, + metaInfo->pMultisampleState->GetMetaStructPointer(), + consumer); + pmultisample_state_struct.insert(0, "&"); + } + std::string pdepth_stencil_state_struct = "NULL"; + if (structInfo->pDepthStencilState != NULL) { + pdepth_stencil_state_struct = GenerateStruct_VkPipelineDepthStencilStateCreateInfo(out, + structInfo->pDepthStencilState, + metaInfo->pDepthStencilState->GetMetaStructPointer(), + consumer); + pdepth_stencil_state_struct.insert(0, "&"); + } + std::string pcolor_blend_state_struct = "NULL"; + if (structInfo->pColorBlendState != NULL) { + pcolor_blend_state_struct = GenerateStruct_VkPipelineColorBlendStateCreateInfo(out, + structInfo->pColorBlendState, + metaInfo->pColorBlendState->GetMetaStructPointer(), + consumer); + pcolor_blend_state_struct.insert(0, "&"); + } + std::string pdynamic_state_struct = "NULL"; + if (structInfo->pDynamicState != NULL) { + pdynamic_state_struct = GenerateStruct_VkPipelineDynamicStateCreateInfo(out, + structInfo->pDynamicState, + metaInfo->pDynamicState->GetMetaStructPointer(), + consumer); + pdynamic_state_struct.insert(0, "&"); } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDescriptorPoolCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSets << "," << std::endl; - struct_body << "\t\t\t" << structInfo->poolSizeCount << "," << std::endl; - struct_body << "\t\t\t" << ppool_sizes_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "descriptorPoolCreateInfo"); - out << "\t\t" << "VkDescriptorPoolCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stageCount << "," << std::endl; + struct_body << "\t\t\t" << pstages_array << "," << std::endl; + struct_body << "\t\t\t" << pvertex_input_state_struct << "," << std::endl; + struct_body << "\t\t\t" << pinput_assembly_state_struct << "," << std::endl; + struct_body << "\t\t\t" << ptessellation_state_struct << "," << std::endl; + struct_body << "\t\t\t" << pviewport_state_struct << "," << std::endl; + struct_body << "\t\t\t" << prasterization_state_struct << "," << std::endl; + struct_body << "\t\t\t" << pmultisample_state_struct << "," << std::endl; + struct_body << "\t\t\t" << pdepth_stencil_state_struct << "," << std::endl; + struct_body << "\t\t\t" << pcolor_blend_state_struct << "," << std::endl; + struct_body << "\t\t\t" << pdynamic_state_struct << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->renderPass) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subpass << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->basePipelineHandle) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->basePipelineIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "graphicsPipelineCreateInfo"); + out << "\t\t" << "VkGraphicsPipelineCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDescriptorPoolSize(std::ostream &out, const VkDescriptorPoolSize* structInfo, Decoded_VkDescriptorPoolSize* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageBlit(std::ostream &out, const VkImageBlit* structInfo, Decoded_VkImageBlit* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkDescriptorType(" << structInfo->type << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "descriptorPoolSize"); - out << "\t\t" << "VkDescriptorPoolSize " << variable_name << " {" << std::endl; + std::string src_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->srcSubresource, + metaInfo->srcSubresource, + consumer); + std::string dst_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->dstSubresource, + metaInfo->dstSubresource, + consumer); + struct_body << "\t" << src_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->srcOffsets[0]), 2) << "," << std::endl; + struct_body << "\t\t\t" << dst_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->dstOffsets[0]), 2) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageBlit"); + out << "\t\t" << "VkImageBlit " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDescriptorSetAllocateInfo(std::ostream &out, const VkDescriptorSetAllocateInfo* structInfo, Decoded_VkDescriptorSetAllocateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageCopy(std::ostream &out, const VkImageCopy* structInfo, Decoded_VkImageCopy* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pset_layouts_array = "NULL"; - if (metaInfo->pSetLayouts.GetPointer() != NULL && structInfo->descriptorSetCount > 0) { - pset_layouts_array = "pset_layouts_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)); - std::string pset_layouts_values = toStringJoin(metaInfo->pSetLayouts.GetPointer(), - metaInfo->pSetLayouts.GetPointer() + structInfo->descriptorSetCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->descriptorSetCount == 1) { - pset_layouts_array = "&" + pset_layouts_values; - } else if (structInfo->descriptorSetCount > 1) { - out << "\t\t" << "VkDescriptorSetLayout " << pset_layouts_array << "[] = {" << pset_layouts_values << "};" << std::endl; - } - } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->descriptorPool) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorSetCount << "," << std::endl; - struct_body << "\t\t\t" << pset_layouts_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetAllocateInfo"); - out << "\t\t" << "VkDescriptorSetAllocateInfo " << variable_name << " {" << std::endl; + std::string src_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->srcSubresource, + metaInfo->srcSubresource, + consumer); + std::string src_offset_info_var = GenerateStruct_VkOffset3D(out, + &structInfo->srcOffset, + metaInfo->srcOffset, + consumer); + std::string dst_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->dstSubresource, + metaInfo->dstSubresource, + consumer); + std::string dst_offset_info_var = GenerateStruct_VkOffset3D(out, + &structInfo->dstOffset, + metaInfo->dstOffset, + consumer); + std::string extent_info_var = GenerateStruct_VkExtent3D(out, + &structInfo->extent, + metaInfo->extent, + consumer); + struct_body << "\t" << src_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << src_offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << dst_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << dst_offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << extent_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageCopy"); + out << "\t\t" << "VkImageCopy " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDescriptorSetLayoutBinding(std::ostream &out, const VkDescriptorSetLayoutBinding* structInfo, Decoded_VkDescriptorSetLayoutBinding* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string pimmutable_samplers_array = "NULL"; - if (metaInfo->pImmutableSamplers.GetPointer() != NULL && structInfo->descriptorCount > 0) { - pimmutable_samplers_array = "pimmutable_samplers_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_SAMPLER)); - std::string pimmutable_samplers_values = toStringJoin(metaInfo->pImmutableSamplers.GetPointer(), - metaInfo->pImmutableSamplers.GetPointer() + structInfo->descriptorCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->descriptorCount == 1) { - pimmutable_samplers_array = "&" + pimmutable_samplers_values; - } else if (structInfo->descriptorCount > 1) { - out << "\t\t" << "VkSampler " << pimmutable_samplers_array << "[] = {" << pimmutable_samplers_values << "};" << std::endl; - } - } - struct_body << "\t" << structInfo->binding << "," << std::endl; - struct_body << "\t\t\t" << "VkDescriptorType(" << structInfo->descriptorType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorCount << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->stageFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << pimmutable_samplers_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetLayoutBinding"); - out << "\t\t" << "VkDescriptorSetLayoutBinding " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkDescriptorSetLayoutCreateInfo(std::ostream &out, const VkDescriptorSetLayoutCreateInfo* structInfo, Decoded_VkDescriptorSetLayoutCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageCreateInfo(std::ostream &out, const VkImageCreateInfo* structInfo, Decoded_VkImageCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pbindings_array = "NULL"; - if (structInfo->pBindings != NULL) { - pbindings_array = "pBindings_" + std::to_string(consumer.GetNextId()); - std::string pbindings_names; - for (uint32_t idx = 0; idx < structInfo->bindingCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pBindings + idx != NULL) { - variable_name = GenerateStruct_VkDescriptorSetLayoutBinding(out, - structInfo->pBindings + idx, - metaInfo->pBindings->GetMetaStructPointer() + idx, - consumer); - } - pbindings_names += variable_name + ", "; - } - out << "\t\t" << "VkDescriptorSetLayoutBinding " << pbindings_array << "[] = {" << pbindings_names << "};" << std::endl; + std::string extent_info_var = GenerateStruct_VkExtent3D(out, + &structInfo->extent, + metaInfo->extent, + consumer); + std::string pqueue_family_indices_array = "NULL"; + if (structInfo->pQueueFamilyIndices != NULL) { + pqueue_family_indices_array = "pQueueFamilyIndices_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pqueue_family_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pQueueFamilyIndices, structInfo->queueFamilyIndexCount) << ";" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDescriptorSetLayoutCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bindingCount << "," << std::endl; - struct_body << "\t\t\t" << pbindings_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetLayoutCreateInfo"); - out << "\t\t" << "VkDescriptorSetLayoutCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkImageCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageType(" << structInfo->imageType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->mipLevels << "," << std::endl; + struct_body << "\t\t\t" << structInfo->arrayLayers << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->samples << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageTiling(" << structInfo->tiling << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->usage << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSharingMode(" << structInfo->sharingMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->queueFamilyIndexCount << "," << std::endl; + struct_body << "\t\t\t" << pqueue_family_indices_array << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->initialLayout << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageCreateInfo"); + out << "\t\t" << "VkImageCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceCreateInfo(std::ostream &out, const VkDeviceCreateInfo* structInfo, Decoded_VkDeviceCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageFormatProperties(std::ostream &out, const VkImageFormatProperties* structInfo, Decoded_VkImageFormatProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pqueue_create_infos_array = "NULL"; - if (structInfo->pQueueCreateInfos != NULL) { - pqueue_create_infos_array = "pQueueCreateInfos_" + std::to_string(consumer.GetNextId()); - std::string pqueue_create_infos_names; - for (uint32_t idx = 0; idx < structInfo->queueCreateInfoCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pQueueCreateInfos + idx != NULL) { - variable_name = GenerateStruct_VkDeviceQueueCreateInfo(out, - structInfo->pQueueCreateInfos + idx, - metaInfo->pQueueCreateInfos->GetMetaStructPointer() + idx, - consumer); - } - pqueue_create_infos_names += variable_name + ", "; - } - out << "\t\t" << "VkDeviceQueueCreateInfo " << pqueue_create_infos_array << "[] = {" << pqueue_create_infos_names << "};" << std::endl; - } - std::string pp_enabled_layer_names_var = "NULL"; - if (structInfo->enabledLayerCount) { - pp_enabled_layer_names_var = "ppEnabledLayerNames_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "const char* " << pp_enabled_layer_names_var << "[] = " << VulkanCppConsumerBase::EscapeStringArray(structInfo->ppEnabledLayerNames, structInfo->enabledLayerCount) << ";" << std::endl; - } - std::string pp_enabled_extension_names_var = "NULL"; - if (structInfo->enabledExtensionCount) { - pp_enabled_extension_names_var = "ppEnabledExtensionNames_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "const char* " << pp_enabled_extension_names_var << "[] = " << VulkanCppConsumerBase::EscapeStringArray(structInfo->ppEnabledExtensionNames, structInfo->enabledExtensionCount) << ";" << std::endl; - } - std::string penabled_features_struct = "NULL"; - if (structInfo->pEnabledFeatures != NULL) { - penabled_features_struct = GenerateStruct_VkPhysicalDeviceFeatures(out, - structInfo->pEnabledFeatures, - metaInfo->pEnabledFeatures->GetMetaStructPointer(), - consumer); - penabled_features_struct.insert(0, "&"); - } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDeviceCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queueCreateInfoCount << "," << std::endl; - struct_body << "\t\t\t" << pqueue_create_infos_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->enabledLayerCount << "," << std::endl; - struct_body << "\t\t\t" << pp_enabled_layer_names_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->enabledExtensionCount << "," << std::endl; - struct_body << "\t\t\t" << pp_enabled_extension_names_var << "," << std::endl; - struct_body << "\t\t\t" << penabled_features_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceCreateInfo"); - out << "\t\t" << "VkDeviceCreateInfo " << variable_name << " {" << std::endl; + std::string max_extent_info_var = GenerateStruct_VkExtent3D(out, + &structInfo->maxExtent, + metaInfo->maxExtent, + consumer); + struct_body << "\t" << max_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxMipLevels << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxArrayLayers << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->sampleCounts << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxResourceSize << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageFormatProperties"); + out << "\t\t" << "VkImageFormatProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceQueueCreateInfo(std::ostream &out, const VkDeviceQueueCreateInfo* structInfo, Decoded_VkDeviceQueueCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageMemoryBarrier(std::ostream &out, const VkImageMemoryBarrier* structInfo, Decoded_VkImageMemoryBarrier* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pqueue_priorities_array = "NULL"; - if (structInfo->pQueuePriorities != NULL) { - pqueue_priorities_array = "pQueuePriorities_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "float " << pqueue_priorities_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pQueuePriorities, structInfo->queueCount) << ";" << std::endl; - } + std::string subresource_range_info_var = GenerateStruct_VkImageSubresourceRange(out, + &structInfo->subresourceRange, + metaInfo->subresourceRange, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDeviceQueueCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queueFamilyIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queueCount << "," << std::endl; - struct_body << "\t\t\t" << pqueue_priorities_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceQueueCreateInfo"); - out << "\t\t" << "VkDeviceQueueCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->srcAccessMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->dstAccessMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->oldLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->newLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->srcQueueFamilyIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstQueueFamilyIndex << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; + struct_body << "\t\t\t" << subresource_range_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageMemoryBarrier"); + out << "\t\t" << "VkImageMemoryBarrier " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDispatchIndirectCommand(std::ostream &out, const VkDispatchIndirectCommand* structInfo, Decoded_VkDispatchIndirectCommand* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageResolve(std::ostream &out, const VkImageResolve* structInfo, Decoded_VkImageResolve* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->x << "," << std::endl; - struct_body << "\t\t\t" << structInfo->y << "," << std::endl; - struct_body << "\t\t\t" << structInfo->z << ","; - std::string variable_name = consumer.AddStruct(struct_body, "dispatchIndirectCommand"); - out << "\t\t" << "VkDispatchIndirectCommand " << variable_name << " {" << std::endl; + std::string src_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->srcSubresource, + metaInfo->srcSubresource, + consumer); + std::string src_offset_info_var = GenerateStruct_VkOffset3D(out, + &structInfo->srcOffset, + metaInfo->srcOffset, + consumer); + std::string dst_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->dstSubresource, + metaInfo->dstSubresource, + consumer); + std::string dst_offset_info_var = GenerateStruct_VkOffset3D(out, + &structInfo->dstOffset, + metaInfo->dstOffset, + consumer); + std::string extent_info_var = GenerateStruct_VkExtent3D(out, + &structInfo->extent, + metaInfo->extent, + consumer); + struct_body << "\t" << src_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << src_offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << dst_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << dst_offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << extent_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageResolve"); + out << "\t\t" << "VkImageResolve " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDrawIndexedIndirectCommand(std::ostream &out, const VkDrawIndexedIndirectCommand* structInfo, Decoded_VkDrawIndexedIndirectCommand* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageSubresource(std::ostream &out, const VkImageSubresource* structInfo, Decoded_VkImageSubresource* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->indexCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->instanceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->firstIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->firstInstance << ","; - std::string variable_name = consumer.AddStruct(struct_body, "drawIndexedIndirectCommand"); - out << "\t\t" << "VkDrawIndexedIndirectCommand " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkImageAspectFlags(" << structInfo->aspectMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->mipLevel << "," << std::endl; + struct_body << "\t\t\t" << structInfo->arrayLayer << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageSubresource"); + out << "\t\t" << "VkImageSubresource " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDrawIndirectCommand(std::ostream &out, const VkDrawIndirectCommand* structInfo, Decoded_VkDrawIndirectCommand* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageSubresourceLayers(std::ostream &out, const VkImageSubresourceLayers* structInfo, Decoded_VkImageSubresourceLayers* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->vertexCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->instanceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->firstVertex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->firstInstance << ","; - std::string variable_name = consumer.AddStruct(struct_body, "drawIndirectCommand"); - out << "\t\t" << "VkDrawIndirectCommand " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkImageAspectFlags(" << structInfo->aspectMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->mipLevel << "," << std::endl; + struct_body << "\t\t\t" << structInfo->baseArrayLayer << "," << std::endl; + struct_body << "\t\t\t" << structInfo->layerCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageSubresourceLayers"); + out << "\t\t" << "VkImageSubresourceLayers " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkEventCreateInfo(std::ostream &out, const VkEventCreateInfo* structInfo, Decoded_VkEventCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageSubresourceRange(std::ostream &out, const VkImageSubresourceRange* structInfo, Decoded_VkImageSubresourceRange* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkEventCreateFlags(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "eventCreateInfo"); - out << "\t\t" << "VkEventCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkImageAspectFlags(" << structInfo->aspectMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->baseMipLevel << "," << std::endl; + struct_body << "\t\t\t" << structInfo->levelCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->baseArrayLayer << "," << std::endl; + struct_body << "\t\t\t" << structInfo->layerCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageSubresourceRange"); + out << "\t\t" << "VkImageSubresourceRange " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExtensionProperties(std::ostream &out, const VkExtensionProperties* structInfo, Decoded_VkExtensionProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageViewCreateInfo(std::ostream &out, const VkImageViewCreateInfo* structInfo, Decoded_VkImageViewCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << VulkanCppConsumerBase::ToEscape(structInfo->extensionName) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->specVersion << ","; - std::string variable_name = consumer.AddStruct(struct_body, "extensionProperties"); - out << "\t\t" << "VkExtensionProperties " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string components_info_var = GenerateStruct_VkComponentMapping(out, + &structInfo->components, + metaInfo->components, + consumer); + std::string subresource_range_info_var = GenerateStruct_VkImageSubresourceRange(out, + &structInfo->subresourceRange, + metaInfo->subresourceRange, + consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkImageViewCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageViewType(" << structInfo->viewType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << components_info_var << "," << std::endl; + struct_body << "\t\t\t" << subresource_range_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageViewCreateInfo"); + out << "\t\t" << "VkImageViewCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExtent2D(std::ostream &out, const VkExtent2D* structInfo, Decoded_VkExtent2D* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkLayerProperties(std::ostream &out, const VkLayerProperties* structInfo, Decoded_VkLayerProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->width << "," << std::endl; - struct_body << "\t\t\t" << structInfo->height << ","; - std::string variable_name = consumer.AddStruct(struct_body, "extent2D"); - out << "\t\t" << "VkExtent2D " << variable_name << " {" << std::endl; + struct_body << "\t" << VulkanCppConsumerBase::ToEscape(structInfo->layerName) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->specVersion << "," << std::endl; + struct_body << "\t\t\t" << structInfo->implementationVersion << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "layerProperties"); + out << "\t\t" << "VkLayerProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExtent3D(std::ostream &out, const VkExtent3D* structInfo, Decoded_VkExtent3D* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMappedMemoryRange(std::ostream &out, const VkMappedMemoryRange* structInfo, Decoded_VkMappedMemoryRange* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->width << "," << std::endl; - struct_body << "\t\t\t" << structInfo->height << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depth << ","; - std::string variable_name = consumer.AddStruct(struct_body, "extent3D"); - out << "\t\t" << "VkExtent3D " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "mappedMemoryRange"); + out << "\t\t" << "VkMappedMemoryRange " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkFenceCreateInfo(std::ostream &out, const VkFenceCreateInfo* structInfo, Decoded_VkFenceCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryBarrier(std::ostream &out, const VkMemoryBarrier* structInfo, Decoded_VkMemoryBarrier* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFenceCreateFlags(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "fenceCreateInfo"); - out << "\t\t" << "VkFenceCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->srcAccessMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->dstAccessMask << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryBarrier"); + out << "\t\t" << "VkMemoryBarrier " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkFormatProperties(std::ostream &out, const VkFormatProperties* structInfo, Decoded_VkFormatProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryHeap(std::ostream &out, const VkMemoryHeap* structInfo, Decoded_VkMemoryHeap* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkFormatFeatureFlags(" << structInfo->linearTilingFeatures << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormatFeatureFlags(" << structInfo->optimalTilingFeatures << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormatFeatureFlags(" << structInfo->bufferFeatures << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "formatProperties"); - out << "\t\t" << "VkFormatProperties " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->size << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkMemoryHeapFlags(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryHeap"); + out << "\t\t" << "VkMemoryHeap " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkFramebufferCreateInfo(std::ostream &out, const VkFramebufferCreateInfo* structInfo, Decoded_VkFramebufferCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryRequirements(std::ostream &out, const VkMemoryRequirements* structInfo, Decoded_VkMemoryRequirements* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pattachments_array = "NULL"; - if (metaInfo->pAttachments.GetPointer() != NULL && structInfo->attachmentCount > 0) { - pattachments_array = "pattachments_array_" + std::to_string(consumer.GetNextId()); - std::string pattachments_values = toStringJoin(metaInfo->pAttachments.GetPointer(), - metaInfo->pAttachments.GetPointer() + structInfo->attachmentCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->attachmentCount == 1) { - pattachments_array = "&" + pattachments_values; - } else if (structInfo->attachmentCount > 1) { - out << "\t\t" << "VkImageView " << pattachments_array << "[] = {" << pattachments_values << "};" << std::endl; - } - } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFramebufferCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->renderPass) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->attachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pattachments_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->width << "," << std::endl; - struct_body << "\t\t\t" << structInfo->height << "," << std::endl; - struct_body << "\t\t\t" << structInfo->layers << ","; - std::string variable_name = consumer.AddStruct(struct_body, "framebufferCreateInfo"); - out << "\t\t" << "VkFramebufferCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->size << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->alignment << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryTypeBits << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryRequirements"); + out << "\t\t" << "VkMemoryRequirements " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkGraphicsPipelineCreateInfo(std::ostream &out, const VkGraphicsPipelineCreateInfo* structInfo, Decoded_VkGraphicsPipelineCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryType(std::ostream &out, const VkMemoryType* structInfo, Decoded_VkMemoryType* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstages_array = "NULL"; - if (structInfo->pStages != NULL) { - pstages_array = "pStages_" + std::to_string(consumer.GetNextId()); - std::string pstages_names; - for (uint32_t idx = 0; idx < structInfo->stageCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStages + idx != NULL) { - variable_name = GenerateStruct_VkPipelineShaderStageCreateInfo(out, - structInfo->pStages + idx, - metaInfo->pStages->GetMetaStructPointer() + idx, - consumer); - } - pstages_names += variable_name + ", "; - } - out << "\t\t" << "VkPipelineShaderStageCreateInfo " << pstages_array << "[] = {" << pstages_names << "};" << std::endl; - } - std::string pvertex_input_state_struct = "NULL"; - if (structInfo->pVertexInputState != NULL) { - pvertex_input_state_struct = GenerateStruct_VkPipelineVertexInputStateCreateInfo(out, - structInfo->pVertexInputState, - metaInfo->pVertexInputState->GetMetaStructPointer(), - consumer); - pvertex_input_state_struct.insert(0, "&"); - } - std::string pinput_assembly_state_struct = "NULL"; - if (structInfo->pInputAssemblyState != NULL) { - pinput_assembly_state_struct = GenerateStruct_VkPipelineInputAssemblyStateCreateInfo(out, - structInfo->pInputAssemblyState, - metaInfo->pInputAssemblyState->GetMetaStructPointer(), - consumer); - pinput_assembly_state_struct.insert(0, "&"); - } - std::string ptessellation_state_struct = "NULL"; - if (structInfo->pTessellationState != NULL) { - ptessellation_state_struct = GenerateStruct_VkPipelineTessellationStateCreateInfo(out, - structInfo->pTessellationState, - metaInfo->pTessellationState->GetMetaStructPointer(), - consumer); - ptessellation_state_struct.insert(0, "&"); - } - std::string pviewport_state_struct = "NULL"; - if (structInfo->pViewportState != NULL) { - pviewport_state_struct = GenerateStruct_VkPipelineViewportStateCreateInfo(out, - structInfo->pViewportState, - metaInfo->pViewportState->GetMetaStructPointer(), - consumer); - pviewport_state_struct.insert(0, "&"); - } - std::string prasterization_state_struct = "NULL"; - if (structInfo->pRasterizationState != NULL) { - prasterization_state_struct = GenerateStruct_VkPipelineRasterizationStateCreateInfo(out, - structInfo->pRasterizationState, - metaInfo->pRasterizationState->GetMetaStructPointer(), - consumer); - prasterization_state_struct.insert(0, "&"); - } - std::string pmultisample_state_struct = "NULL"; - if (structInfo->pMultisampleState != NULL) { - pmultisample_state_struct = GenerateStruct_VkPipelineMultisampleStateCreateInfo(out, - structInfo->pMultisampleState, - metaInfo->pMultisampleState->GetMetaStructPointer(), - consumer); - pmultisample_state_struct.insert(0, "&"); - } - std::string pdepth_stencil_state_struct = "NULL"; - if (structInfo->pDepthStencilState != NULL) { - pdepth_stencil_state_struct = GenerateStruct_VkPipelineDepthStencilStateCreateInfo(out, - structInfo->pDepthStencilState, - metaInfo->pDepthStencilState->GetMetaStructPointer(), - consumer); - pdepth_stencil_state_struct.insert(0, "&"); - } - std::string pcolor_blend_state_struct = "NULL"; - if (structInfo->pColorBlendState != NULL) { - pcolor_blend_state_struct = GenerateStruct_VkPipelineColorBlendStateCreateInfo(out, - structInfo->pColorBlendState, - metaInfo->pColorBlendState->GetMetaStructPointer(), - consumer); - pcolor_blend_state_struct.insert(0, "&"); - } - std::string pdynamic_state_struct = "NULL"; - if (structInfo->pDynamicState != NULL) { - pdynamic_state_struct = GenerateStruct_VkPipelineDynamicStateCreateInfo(out, - structInfo->pDynamicState, - metaInfo->pDynamicState->GetMetaStructPointer(), - consumer); - pdynamic_state_struct.insert(0, "&"); - } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stageCount << "," << std::endl; - struct_body << "\t\t\t" << pstages_array << "," << std::endl; - struct_body << "\t\t\t" << pvertex_input_state_struct << "," << std::endl; - struct_body << "\t\t\t" << pinput_assembly_state_struct << "," << std::endl; - struct_body << "\t\t\t" << ptessellation_state_struct << "," << std::endl; - struct_body << "\t\t\t" << pviewport_state_struct << "," << std::endl; - struct_body << "\t\t\t" << prasterization_state_struct << "," << std::endl; - struct_body << "\t\t\t" << pmultisample_state_struct << "," << std::endl; - struct_body << "\t\t\t" << pdepth_stencil_state_struct << "," << std::endl; - struct_body << "\t\t\t" << pcolor_blend_state_struct << "," << std::endl; - struct_body << "\t\t\t" << pdynamic_state_struct << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->renderPass) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subpass << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->basePipelineHandle) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->basePipelineIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "graphicsPipelineCreateInfo"); - out << "\t\t" << "VkGraphicsPipelineCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkMemoryPropertyFlags(" << structInfo->propertyFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->heapIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryType"); + out << "\t\t" << "VkMemoryType " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageBlit(std::ostream &out, const VkImageBlit* structInfo, Decoded_VkImageBlit* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkOffset2D(std::ostream &out, const VkOffset2D* structInfo, Decoded_VkOffset2D* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string src_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, - &structInfo->srcSubresource, - metaInfo->srcSubresource, - consumer); - std::string dst_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, - &structInfo->dstSubresource, - metaInfo->dstSubresource, - consumer); - struct_body << "\t" << src_subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->srcOffsets[0]), 2) << "," << std::endl; - struct_body << "\t\t\t" << dst_subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->dstOffsets[0]), 2) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageBlit"); - out << "\t\t" << "VkImageBlit " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->x << "," << std::endl; + struct_body << "\t\t\t" << structInfo->y << ","; + std::string variable_name = consumer.AddStruct(struct_body, "offset2D"); + out << "\t\t" << "VkOffset2D " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageCopy(std::ostream &out, const VkImageCopy* structInfo, Decoded_VkImageCopy* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkOffset3D(std::ostream &out, const VkOffset3D* structInfo, Decoded_VkOffset3D* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string src_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, - &structInfo->srcSubresource, - metaInfo->srcSubresource, - consumer); - std::string src_offset_info_var = GenerateStruct_VkOffset3D(out, - &structInfo->srcOffset, - metaInfo->srcOffset, - consumer); - std::string dst_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, - &structInfo->dstSubresource, - metaInfo->dstSubresource, - consumer); - std::string dst_offset_info_var = GenerateStruct_VkOffset3D(out, - &structInfo->dstOffset, - metaInfo->dstOffset, - consumer); - std::string extent_info_var = GenerateStruct_VkExtent3D(out, - &structInfo->extent, - metaInfo->extent, - consumer); - struct_body << "\t" << src_subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << src_offset_info_var << "," << std::endl; - struct_body << "\t\t\t" << dst_subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << dst_offset_info_var << "," << std::endl; - struct_body << "\t\t\t" << extent_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageCopy"); - out << "\t\t" << "VkImageCopy " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->x << "," << std::endl; + struct_body << "\t\t\t" << structInfo->y << "," << std::endl; + struct_body << "\t\t\t" << structInfo->z << ","; + std::string variable_name = consumer.AddStruct(struct_body, "offset3D"); + out << "\t\t" << "VkOffset3D " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageCreateInfo(std::ostream &out, const VkImageCreateInfo* structInfo, Decoded_VkImageCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFeatures(std::ostream &out, const VkPhysicalDeviceFeatures* structInfo, Decoded_VkPhysicalDeviceFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string extent_info_var = GenerateStruct_VkExtent3D(out, - &structInfo->extent, - metaInfo->extent, - consumer); - std::string pqueue_family_indices_array = "NULL"; - if (structInfo->pQueueFamilyIndices != NULL) { - pqueue_family_indices_array = "pQueueFamilyIndices_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pqueue_family_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pQueueFamilyIndices, structInfo->queueFamilyIndexCount) << ";" << std::endl; - } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImageCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageType(" << structInfo->imageType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->mipLevels << "," << std::endl; - struct_body << "\t\t\t" << structInfo->arrayLayers << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->samples << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageTiling(" << structInfo->tiling << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->usage << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSharingMode(" << structInfo->sharingMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queueFamilyIndexCount << "," << std::endl; - struct_body << "\t\t\t" << pqueue_family_indices_array << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->initialLayout << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageCreateInfo"); - out << "\t\t" << "VkImageCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->robustBufferAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fullDrawIndexUint32 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imageCubeArray << "," << std::endl; + struct_body << "\t\t\t" << structInfo->independentBlend << "," << std::endl; + struct_body << "\t\t\t" << structInfo->geometryShader << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tessellationShader << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sampleRateShading << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dualSrcBlend << "," << std::endl; + struct_body << "\t\t\t" << structInfo->logicOp << "," << std::endl; + struct_body << "\t\t\t" << structInfo->multiDrawIndirect << "," << std::endl; + struct_body << "\t\t\t" << structInfo->drawIndirectFirstInstance << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthClamp << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthBiasClamp << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fillModeNonSolid << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthBounds << "," << std::endl; + struct_body << "\t\t\t" << structInfo->wideLines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->largePoints << "," << std::endl; + struct_body << "\t\t\t" << structInfo->alphaToOne << "," << std::endl; + struct_body << "\t\t\t" << structInfo->multiViewport << "," << std::endl; + struct_body << "\t\t\t" << structInfo->samplerAnisotropy << "," << std::endl; + struct_body << "\t\t\t" << structInfo->textureCompressionETC2 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->textureCompressionASTC_LDR << "," << std::endl; + struct_body << "\t\t\t" << structInfo->textureCompressionBC << "," << std::endl; + struct_body << "\t\t\t" << structInfo->occlusionQueryPrecise << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineStatisticsQuery << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexPipelineStoresAndAtomics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentStoresAndAtomics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderTessellationAndGeometryPointSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderImageGatherExtended << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageImageExtendedFormats << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageImageMultisample << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageImageReadWithoutFormat << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageImageWriteWithoutFormat << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderUniformBufferArrayDynamicIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSampledImageArrayDynamicIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageBufferArrayDynamicIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageImageArrayDynamicIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderClipDistance << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderCullDistance << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderFloat64 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderInt64 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderInt16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderResourceResidency << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderResourceMinLod << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sparseBinding << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sparseResidencyBuffer << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sparseResidencyImage2D << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sparseResidencyImage3D << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sparseResidency2Samples << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sparseResidency4Samples << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sparseResidency8Samples << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sparseResidency16Samples << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sparseResidencyAliased << "," << std::endl; + struct_body << "\t\t\t" << structInfo->variableMultisampleRate << "," << std::endl; + struct_body << "\t\t\t" << structInfo->inheritedQueries << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFeatures"); + out << "\t\t" << "VkPhysicalDeviceFeatures " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceLimits(std::ostream &out, const VkPhysicalDeviceLimits* structInfo, Decoded_VkPhysicalDeviceLimits* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + struct_body << "\t" << structInfo->maxImageDimension1D << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxImageDimension2D << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxImageDimension3D << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxImageDimensionCube << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxImageArrayLayers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTexelBufferElements << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxUniformBufferRange << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxStorageBufferRange << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPushConstantsSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxMemoryAllocationCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSamplerAllocationCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferImageGranularity << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sparseAddressSpaceSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxBoundDescriptorSets << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorSamplers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUniformBuffers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorStorageBuffers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorSampledImages << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorStorageImages << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorInputAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageResources << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetSamplers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUniformBuffers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUniformBuffersDynamic << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetStorageBuffers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetStorageBuffersDynamic << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetSampledImages << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetStorageImages << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetInputAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxVertexInputAttributes << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxVertexInputBindings << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxVertexInputAttributeOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxVertexInputBindingStride << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxVertexOutputComponents << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTessellationGenerationLevel << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTessellationPatchSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTessellationControlPerVertexInputComponents << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTessellationControlPerVertexOutputComponents << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTessellationControlPerPatchOutputComponents << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTessellationControlTotalOutputComponents << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTessellationEvaluationInputComponents << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTessellationEvaluationOutputComponents << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxGeometryShaderInvocations << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxGeometryInputComponents << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxGeometryOutputComponents << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxGeometryOutputVertices << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxGeometryTotalOutputComponents << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxFragmentInputComponents << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxFragmentOutputAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxFragmentDualSrcAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxFragmentCombinedOutputResources << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxComputeSharedMemorySize << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->maxComputeWorkGroupCount[0]), 3) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxComputeWorkGroupInvocations << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->maxComputeWorkGroupSize[0]), 3) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subPixelPrecisionBits << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subTexelPrecisionBits << "," << std::endl; + struct_body << "\t\t\t" << structInfo->mipmapPrecisionBits << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDrawIndexedIndexValue << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDrawIndirectCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSamplerLodBias << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSamplerAnisotropy << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxViewports << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->maxViewportDimensions[0]), 2) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->viewportBoundsRange[0]), 2) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->viewportSubPixelBits << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minMemoryMapAlignment << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minTexelBufferOffsetAlignment << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minUniformBufferOffsetAlignment << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minStorageBufferOffsetAlignment << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minTexelOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTexelOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minTexelGatherOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTexelGatherOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minInterpolationOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxInterpolationOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subPixelInterpolationOffsetBits << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxFramebufferWidth << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxFramebufferHeight << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxFramebufferLayers << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->framebufferColorSampleCounts << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->framebufferDepthSampleCounts << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->framebufferStencilSampleCounts << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->framebufferNoAttachmentsSampleCounts << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxColorAttachments << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->sampledImageColorSampleCounts << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->sampledImageIntegerSampleCounts << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->sampledImageDepthSampleCounts << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->sampledImageStencilSampleCounts << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->storageImageSampleCounts << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSampleMaskWords << "," << std::endl; + struct_body << "\t\t\t" << structInfo->timestampComputeAndGraphics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->timestampPeriod << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxClipDistances << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxCullDistances << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxCombinedClipAndCullDistances << "," << std::endl; + struct_body << "\t\t\t" << structInfo->discreteQueuePriorities << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->pointSizeRange[0]), 2) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->lineWidthRange[0]), 2) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pointSizeGranularity << "," << std::endl; + struct_body << "\t\t\t" << structInfo->lineWidthGranularity << "," << std::endl; + struct_body << "\t\t\t" << structInfo->strictLines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->standardSampleLocations << "," << std::endl; + struct_body << "\t\t\t" << structInfo->optimalBufferCopyOffsetAlignment << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->optimalBufferCopyRowPitchAlignment << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->nonCoherentAtomSize << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLimits"); + out << "\t\t" << "VkPhysicalDeviceLimits " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceMemoryProperties(std::ostream &out, const VkPhysicalDeviceMemoryProperties* structInfo, Decoded_VkPhysicalDeviceMemoryProperties* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + struct_body << "\t" << structInfo->memoryTypeCount << "," << std::endl; + struct_body << "\t\t\t{}," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryHeapCount << "," << std::endl; + struct_body << "\t\t\t{}," << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMemoryProperties"); + out << "\t\t" << "VkPhysicalDeviceMemoryProperties " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceProperties(std::ostream &out, const VkPhysicalDeviceProperties* structInfo, Decoded_VkPhysicalDeviceProperties* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string limits_info_var = GenerateStruct_VkPhysicalDeviceLimits(out, + &structInfo->limits, + metaInfo->limits, + consumer); + std::string sparse_properties_info_var = GenerateStruct_VkPhysicalDeviceSparseProperties(out, + &structInfo->sparseProperties, + metaInfo->sparseProperties, + consumer); + struct_body << "\t" << structInfo->apiVersion << "," << std::endl; + struct_body << "\t\t\t" << structInfo->driverVersion << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vendorID << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceID << "," << std::endl; + struct_body << "\t\t\t" << "VkPhysicalDeviceType(" << structInfo->deviceType << ")" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->deviceName) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->pipelineCacheUUID[0]), VK_UUID_SIZE) << "," << std::endl; + struct_body << "\t\t\t" << limits_info_var << "," << std::endl; + struct_body << "\t\t\t" << sparse_properties_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceProperties"); + out << "\t\t" << "VkPhysicalDeviceProperties " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceSparseProperties(std::ostream &out, const VkPhysicalDeviceSparseProperties* structInfo, Decoded_VkPhysicalDeviceSparseProperties* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + struct_body << "\t" << structInfo->residencyStandard2DBlockShape << "," << std::endl; + struct_body << "\t\t\t" << structInfo->residencyStandard2DMultisampleBlockShape << "," << std::endl; + struct_body << "\t\t\t" << structInfo->residencyStandard3DBlockShape << "," << std::endl; + struct_body << "\t\t\t" << structInfo->residencyAlignedMipSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->residencyNonResidentStrict << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSparseProperties"); + out << "\t\t" << "VkPhysicalDeviceSparseProperties " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPipelineCacheCreateInfo(std::ostream &out, const VkPipelineCacheCreateInfo* structInfo, Decoded_VkPipelineCacheCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pinitial_data_array = "NULL"; + if (structInfo->pInitialData != NULL) { + std::string pinitial_data_values; + for (uint32_t idx0 = 0; idx0 < structInfo->initialDataSize; ++idx0) { + pinitial_data_values += std::to_string(reinterpret_cast(structInfo->pInitialData)[idx0]) + ", "; + } + pinitial_data_array = "pInitialData_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint8_t " << pinitial_data_array << "[] = {" << pinitial_data_values << "};" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineCacheCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->initialDataSize << "," << std::endl; + struct_body << "\t\t\t" << pinitial_data_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineCacheCreateInfo"); + out << "\t\t" << "VkPipelineCacheCreateInfo " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPipelineCacheHeaderVersionOne(std::ostream &out, const VkPipelineCacheHeaderVersionOne* structInfo, Decoded_VkPipelineCacheHeaderVersionOne* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + struct_body << "\t" << structInfo->headerSize << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineCacheHeaderVersion(" << structInfo->headerVersion << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vendorID << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceID << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->pipelineCacheUUID[0]), VK_UUID_SIZE) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineCacheHeaderVersionOne"); + out << "\t\t" << "VkPipelineCacheHeaderVersionOne " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPipelineColorBlendAttachmentState(std::ostream &out, const VkPipelineColorBlendAttachmentState* structInfo, Decoded_VkPipelineColorBlendAttachmentState* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + struct_body << "\t" << structInfo->blendEnable << "," << std::endl; + struct_body << "\t\t\t" << "VkBlendFactor(" << structInfo->srcColorBlendFactor << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBlendFactor(" << structInfo->dstColorBlendFactor << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBlendOp(" << structInfo->colorBlendOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBlendFactor(" << structInfo->srcAlphaBlendFactor << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBlendFactor(" << structInfo->dstAlphaBlendFactor << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBlendOp(" << structInfo->alphaBlendOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkColorComponentFlags(" << structInfo->colorWriteMask << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineColorBlendAttachmentState"); + out << "\t\t" << "VkPipelineColorBlendAttachmentState " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPipelineColorBlendStateCreateInfo(std::ostream &out, const VkPipelineColorBlendStateCreateInfo* structInfo, Decoded_VkPipelineColorBlendStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pattachments_array = "NULL"; + if (structInfo->pAttachments != NULL) { + pattachments_array = "pAttachments_" + std::to_string(consumer.GetNextId()); + std::string pattachments_names; + for (uint32_t idx = 0; idx < structInfo->attachmentCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pAttachments + idx != NULL) { + variable_name = GenerateStruct_VkPipelineColorBlendAttachmentState(out, + structInfo->pAttachments + idx, + metaInfo->pAttachments->GetMetaStructPointer() + idx, + consumer); + } + pattachments_names += variable_name + ", "; + } + out << "\t\t" << "VkPipelineColorBlendAttachmentState " << pattachments_array << "[] = {" << pattachments_names << "};" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineColorBlendStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->logicOpEnable << "," << std::endl; + struct_body << "\t\t\t" << "VkLogicOp(" << structInfo->logicOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->attachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pattachments_array << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->blendConstants[0]), 4) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineColorBlendStateCreateInfo"); + out << "\t\t" << "VkPipelineColorBlendStateCreateInfo " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPipelineDepthStencilStateCreateInfo(std::ostream &out, const VkPipelineDepthStencilStateCreateInfo* structInfo, Decoded_VkPipelineDepthStencilStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string front_info_var = GenerateStruct_VkStencilOpState(out, + &structInfo->front, + metaInfo->front, + consumer); + std::string back_info_var = GenerateStruct_VkStencilOpState(out, + &structInfo->back, + metaInfo->back, + consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineDepthStencilStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthTestEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthWriteEnable << "," << std::endl; + struct_body << "\t\t\t" << "VkCompareOp(" << structInfo->depthCompareOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthBoundsTestEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stencilTestEnable << "," << std::endl; + struct_body << "\t\t\t" << front_info_var << "," << std::endl; + struct_body << "\t\t\t" << back_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minDepthBounds << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDepthBounds << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineDepthStencilStateCreateInfo"); + out << "\t\t" << "VkPipelineDepthStencilStateCreateInfo " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPipelineDynamicStateCreateInfo(std::ostream &out, const VkPipelineDynamicStateCreateInfo* structInfo, Decoded_VkPipelineDynamicStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pdynamic_states_values; + std::string pdynamic_states_array = "NULL"; + if (structInfo->pDynamicStates != NULL) { + for (uint32_t idx = 0; idx < structInfo->dynamicStateCount; idx++) { + pdynamic_states_values += util::ToString(structInfo->pDynamicStates[idx]) + ", "; + } + pdynamic_states_array = "pDynamicStates_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkDynamicState " << pdynamic_states_array << "[] = {" << pdynamic_states_values << "};" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineDynamicStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dynamicStateCount << "," << std::endl; + struct_body << "\t\t\t" << pdynamic_states_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineDynamicStateCreateInfo"); + out << "\t\t" << "VkPipelineDynamicStateCreateInfo " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPipelineInputAssemblyStateCreateInfo(std::ostream &out, const VkPipelineInputAssemblyStateCreateInfo* structInfo, Decoded_VkPipelineInputAssemblyStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineInputAssemblyStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPrimitiveTopology(" << structInfo->topology << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->primitiveRestartEnable << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineInputAssemblyStateCreateInfo"); + out << "\t\t" << "VkPipelineInputAssemblyStateCreateInfo " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPipelineLayoutCreateInfo(std::ostream &out, const VkPipelineLayoutCreateInfo* structInfo, Decoded_VkPipelineLayoutCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pset_layouts_array = "NULL"; + if (metaInfo->pSetLayouts.GetPointer() != NULL && structInfo->setLayoutCount > 0) { + pset_layouts_array = "pset_layouts_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)); + std::string pset_layouts_values = toStringJoin(metaInfo->pSetLayouts.GetPointer(), + metaInfo->pSetLayouts.GetPointer() + structInfo->setLayoutCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->setLayoutCount == 1) { + pset_layouts_array = "&" + pset_layouts_values; + } else if (structInfo->setLayoutCount > 1) { + out << "\t\t" << "VkDescriptorSetLayout " << pset_layouts_array << "[] = {" << pset_layouts_values << "};" << std::endl; + } + } + std::string ppush_constant_ranges_array = "NULL"; + if (structInfo->pPushConstantRanges != NULL) { + ppush_constant_ranges_array = "pPushConstantRanges_" + std::to_string(consumer.GetNextId()); + std::string ppush_constant_ranges_names; + for (uint32_t idx = 0; idx < structInfo->pushConstantRangeCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pPushConstantRanges + idx != NULL) { + variable_name = GenerateStruct_VkPushConstantRange(out, + structInfo->pPushConstantRanges + idx, + metaInfo->pPushConstantRanges->GetMetaStructPointer() + idx, + consumer); + } + ppush_constant_ranges_names += variable_name + ", "; + } + out << "\t\t" << "VkPushConstantRange " << ppush_constant_ranges_array << "[] = {" << ppush_constant_ranges_names << "};" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineLayoutCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->setLayoutCount << "," << std::endl; + struct_body << "\t\t\t" << pset_layouts_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pushConstantRangeCount << "," << std::endl; + struct_body << "\t\t\t" << ppush_constant_ranges_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineLayoutCreateInfo"); + out << "\t\t" << "VkPipelineLayoutCreateInfo " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPipelineMultisampleStateCreateInfo(std::ostream &out, const VkPipelineMultisampleStateCreateInfo* structInfo, Decoded_VkPipelineMultisampleStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string psample_mask_array = "NULL"; + if (structInfo->pSampleMask != NULL) { + std::string psample_mask_values; + for (uint32_t idx0 = 0; idx0 < (structInfo->rasterizationSamples + 31) / 32; ++idx0) { + psample_mask_values += std::to_string(structInfo->pSampleMask[idx0]) + ", "; + } + psample_mask_array = "pSampleMask_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkSampleMask " << psample_mask_array << "[] = {" << psample_mask_values << "};" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineMultisampleStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->rasterizationSamples << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sampleShadingEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minSampleShading << "," << std::endl; + struct_body << "\t\t\t" << psample_mask_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->alphaToCoverageEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->alphaToOneEnable << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineMultisampleStateCreateInfo"); + out << "\t\t" << "VkPipelineMultisampleStateCreateInfo " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPipelineRasterizationStateCreateInfo(std::ostream &out, const VkPipelineRasterizationStateCreateInfo* structInfo, Decoded_VkPipelineRasterizationStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineRasterizationStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthClampEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->rasterizerDiscardEnable << "," << std::endl; + struct_body << "\t\t\t" << "VkPolygonMode(" << structInfo->polygonMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkCullModeFlags(" << structInfo->cullMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFrontFace(" << structInfo->frontFace << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthBiasEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthBiasConstantFactor << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthBiasClamp << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthBiasSlopeFactor << "," << std::endl; + struct_body << "\t\t\t" << structInfo->lineWidth << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineRasterizationStateCreateInfo"); + out << "\t\t" << "VkPipelineRasterizationStateCreateInfo " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPipelineShaderStageCreateInfo(std::ostream &out, const VkPipelineShaderStageCreateInfo* structInfo, Decoded_VkPipelineShaderStageCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pspecialization_info_struct = "NULL"; + if (structInfo->pSpecializationInfo != NULL) { + pspecialization_info_struct = GenerateStruct_VkSpecializationInfo(out, + structInfo->pSpecializationInfo, + metaInfo->pSpecializationInfo->GetMetaStructPointer(), + consumer); + pspecialization_info_struct.insert(0, "&"); + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineShaderStageCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlagBits(" << structInfo->stage << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->module) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pName) << "," << std::endl; + struct_body << "\t\t\t" << pspecialization_info_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineShaderStageCreateInfo"); + out << "\t\t" << "VkPipelineShaderStageCreateInfo " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPipelineTessellationStateCreateInfo(std::ostream &out, const VkPipelineTessellationStateCreateInfo* structInfo, Decoded_VkPipelineTessellationStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineTessellationStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->patchControlPoints << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineTessellationStateCreateInfo"); + out << "\t\t" << "VkPipelineTessellationStateCreateInfo " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPipelineVertexInputStateCreateInfo(std::ostream &out, const VkPipelineVertexInputStateCreateInfo* structInfo, Decoded_VkPipelineVertexInputStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pvertex_binding_descriptions_array = "NULL"; + if (structInfo->pVertexBindingDescriptions != NULL) { + pvertex_binding_descriptions_array = "pVertexBindingDescriptions_" + std::to_string(consumer.GetNextId()); + std::string pvertex_binding_descriptions_names; + for (uint32_t idx = 0; idx < structInfo->vertexBindingDescriptionCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pVertexBindingDescriptions + idx != NULL) { + variable_name = GenerateStruct_VkVertexInputBindingDescription(out, + structInfo->pVertexBindingDescriptions + idx, + metaInfo->pVertexBindingDescriptions->GetMetaStructPointer() + idx, + consumer); + } + pvertex_binding_descriptions_names += variable_name + ", "; + } + out << "\t\t" << "VkVertexInputBindingDescription " << pvertex_binding_descriptions_array << "[] = {" << pvertex_binding_descriptions_names << "};" << std::endl; + } + std::string pvertex_attribute_descriptions_array = "NULL"; + if (structInfo->pVertexAttributeDescriptions != NULL) { + pvertex_attribute_descriptions_array = "pVertexAttributeDescriptions_" + std::to_string(consumer.GetNextId()); + std::string pvertex_attribute_descriptions_names; + for (uint32_t idx = 0; idx < structInfo->vertexAttributeDescriptionCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pVertexAttributeDescriptions + idx != NULL) { + variable_name = GenerateStruct_VkVertexInputAttributeDescription(out, + structInfo->pVertexAttributeDescriptions + idx, + metaInfo->pVertexAttributeDescriptions->GetMetaStructPointer() + idx, + consumer); + } + pvertex_attribute_descriptions_names += variable_name + ", "; + } + out << "\t\t" << "VkVertexInputAttributeDescription " << pvertex_attribute_descriptions_array << "[] = {" << pvertex_attribute_descriptions_names << "};" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineVertexInputStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexBindingDescriptionCount << "," << std::endl; + struct_body << "\t\t\t" << pvertex_binding_descriptions_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexAttributeDescriptionCount << "," << std::endl; + struct_body << "\t\t\t" << pvertex_attribute_descriptions_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineVertexInputStateCreateInfo"); + out << "\t\t" << "VkPipelineVertexInputStateCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageFormatProperties(std::ostream &out, const VkImageFormatProperties* structInfo, Decoded_VkImageFormatProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineViewportStateCreateInfo(std::ostream &out, const VkPipelineViewportStateCreateInfo* structInfo, Decoded_VkPipelineViewportStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string max_extent_info_var = GenerateStruct_VkExtent3D(out, - &structInfo->maxExtent, - metaInfo->maxExtent, - consumer); - struct_body << "\t" << max_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxMipLevels << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxArrayLayers << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->sampleCounts << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxResourceSize << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageFormatProperties"); - out << "\t\t" << "VkImageFormatProperties " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pviewports_array = "NULL"; + if (structInfo->pViewports != NULL) { + pviewports_array = "pViewports_" + std::to_string(consumer.GetNextId()); + std::string pviewports_names; + for (uint32_t idx = 0; idx < structInfo->viewportCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pViewports + idx != NULL) { + variable_name = GenerateStruct_VkViewport(out, + structInfo->pViewports + idx, + metaInfo->pViewports->GetMetaStructPointer() + idx, + consumer); + } + pviewports_names += variable_name + ", "; + } + out << "\t\t" << "VkViewport " << pviewports_array << "[] = {" << pviewports_names << "};" << std::endl; + } + std::string pscissors_array = "NULL"; + if (structInfo->pScissors != NULL) { + pscissors_array = "pScissors_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkRect2D " << pscissors_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pScissors, structInfo->scissorCount) << ";" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineViewportStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->viewportCount << "," << std::endl; + struct_body << "\t\t\t" << pviewports_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->scissorCount << "," << std::endl; + struct_body << "\t\t\t" << pscissors_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineViewportStateCreateInfo"); + out << "\t\t" << "VkPipelineViewportStateCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageMemoryBarrier(std::ostream &out, const VkImageMemoryBarrier* structInfo, Decoded_VkImageMemoryBarrier* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPushConstantRange(std::ostream &out, const VkPushConstantRange* structInfo, Decoded_VkPushConstantRange* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + struct_body << "\t" << "VkShaderStageFlags(" << structInfo->stageFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pushConstantRange"); + out << "\t\t" << "VkPushConstantRange " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkQueryPoolCreateInfo(std::ostream &out, const VkQueryPoolCreateInfo* structInfo, Decoded_VkQueryPoolCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string subresource_range_info_var = GenerateStruct_VkImageSubresourceRange(out, - &structInfo->subresourceRange, - metaInfo->subresourceRange, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->srcAccessMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->dstAccessMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->oldLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->newLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcQueueFamilyIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstQueueFamilyIndex << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; - struct_body << "\t\t\t" << subresource_range_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageMemoryBarrier"); - out << "\t\t" << "VkImageMemoryBarrier " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkQueryPoolCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkQueryType(" << structInfo->queryType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->queryCount << "," << std::endl; + struct_body << "\t\t\t" << "VkQueryPipelineStatisticFlags(" << structInfo->pipelineStatistics << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "queryPoolCreateInfo"); + out << "\t\t" << "VkQueryPoolCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageResolve(std::ostream &out, const VkImageResolve* structInfo, Decoded_VkImageResolve* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkQueueFamilyProperties(std::ostream &out, const VkQueueFamilyProperties* structInfo, Decoded_VkQueueFamilyProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string src_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, - &structInfo->srcSubresource, - metaInfo->srcSubresource, - consumer); - std::string src_offset_info_var = GenerateStruct_VkOffset3D(out, - &structInfo->srcOffset, - metaInfo->srcOffset, - consumer); - std::string dst_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, - &structInfo->dstSubresource, - metaInfo->dstSubresource, - consumer); - std::string dst_offset_info_var = GenerateStruct_VkOffset3D(out, - &structInfo->dstOffset, - metaInfo->dstOffset, - consumer); - std::string extent_info_var = GenerateStruct_VkExtent3D(out, - &structInfo->extent, - metaInfo->extent, - consumer); - struct_body << "\t" << src_subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << src_offset_info_var << "," << std::endl; - struct_body << "\t\t\t" << dst_subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << dst_offset_info_var << "," << std::endl; - struct_body << "\t\t\t" << extent_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageResolve"); - out << "\t\t" << "VkImageResolve " << variable_name << " {" << std::endl; + std::string min_image_transfer_granularity_info_var = GenerateStruct_VkExtent3D(out, + &structInfo->minImageTransferGranularity, + metaInfo->minImageTransferGranularity, + consumer); + struct_body << "\t" << "VkQueueFlags(" << structInfo->queueFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->queueCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->timestampValidBits << "," << std::endl; + struct_body << "\t\t\t" << min_image_transfer_granularity_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyProperties"); + out << "\t\t" << "VkQueueFamilyProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageSubresource(std::ostream &out, const VkImageSubresource* structInfo, Decoded_VkImageSubresource* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRect2D(std::ostream &out, const VkRect2D* structInfo, Decoded_VkRect2D* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkImageAspectFlags(" << structInfo->aspectMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->mipLevel << "," << std::endl; - struct_body << "\t\t\t" << structInfo->arrayLayer << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageSubresource"); - out << "\t\t" << "VkImageSubresource " << variable_name << " {" << std::endl; + std::string offset_info_var = GenerateStruct_VkOffset2D(out, + &structInfo->offset, + metaInfo->offset, + consumer); + std::string extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->extent, + metaInfo->extent, + consumer); + struct_body << "\t" << offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << extent_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "rect2D"); + out << "\t\t" << "VkRect2D " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageSubresourceLayers(std::ostream &out, const VkImageSubresourceLayers* structInfo, Decoded_VkImageSubresourceLayers* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassBeginInfo(std::ostream &out, const VkRenderPassBeginInfo* structInfo, Decoded_VkRenderPassBeginInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkImageAspectFlags(" << structInfo->aspectMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->mipLevel << "," << std::endl; - struct_body << "\t\t\t" << structInfo->baseArrayLayer << "," << std::endl; - struct_body << "\t\t\t" << structInfo->layerCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageSubresourceLayers"); - out << "\t\t" << "VkImageSubresourceLayers " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string render_area_info_var = GenerateStruct_VkRect2D(out, + &structInfo->renderArea, + metaInfo->renderArea, + consumer); + std::string pclear_values_array = "NULL"; + if (structInfo->pClearValues != NULL) { + pclear_values_array = "pClearValues_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkClearValue " << pclear_values_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pClearValues, structInfo->clearValueCount) << ";" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->renderPass) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->framebuffer) << "," << std::endl; + struct_body << "\t\t\t" << render_area_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->clearValueCount << "," << std::endl; + struct_body << "\t\t\t" << pclear_values_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassBeginInfo"); + out << "\t\t" << "VkRenderPassBeginInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageSubresourceRange(std::ostream &out, const VkImageSubresourceRange* structInfo, Decoded_VkImageSubresourceRange* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassCreateInfo(std::ostream &out, const VkRenderPassCreateInfo* structInfo, Decoded_VkRenderPassCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkImageAspectFlags(" << structInfo->aspectMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->baseMipLevel << "," << std::endl; - struct_body << "\t\t\t" << structInfo->levelCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->baseArrayLayer << "," << std::endl; - struct_body << "\t\t\t" << structInfo->layerCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageSubresourceRange"); - out << "\t\t" << "VkImageSubresourceRange " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pattachments_array = "NULL"; + if (structInfo->pAttachments != NULL) { + pattachments_array = "pAttachments_" + std::to_string(consumer.GetNextId()); + std::string pattachments_names; + for (uint32_t idx = 0; idx < structInfo->attachmentCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pAttachments + idx != NULL) { + variable_name = GenerateStruct_VkAttachmentDescription(out, + structInfo->pAttachments + idx, + metaInfo->pAttachments->GetMetaStructPointer() + idx, + consumer); + } + pattachments_names += variable_name + ", "; + } + out << "\t\t" << "VkAttachmentDescription " << pattachments_array << "[] = {" << pattachments_names << "};" << std::endl; + } + std::string psubpasses_array = "NULL"; + if (structInfo->pSubpasses != NULL) { + psubpasses_array = "pSubpasses_" + std::to_string(consumer.GetNextId()); + std::string psubpasses_names; + for (uint32_t idx = 0; idx < structInfo->subpassCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pSubpasses + idx != NULL) { + variable_name = GenerateStruct_VkSubpassDescription(out, + structInfo->pSubpasses + idx, + metaInfo->pSubpasses->GetMetaStructPointer() + idx, + consumer); + } + psubpasses_names += variable_name + ", "; + } + out << "\t\t" << "VkSubpassDescription " << psubpasses_array << "[] = {" << psubpasses_names << "};" << std::endl; + } + std::string pdependencies_array = "NULL"; + if (structInfo->pDependencies != NULL) { + pdependencies_array = "pDependencies_" + std::to_string(consumer.GetNextId()); + std::string pdependencies_names; + for (uint32_t idx = 0; idx < structInfo->dependencyCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pDependencies + idx != NULL) { + variable_name = GenerateStruct_VkSubpassDependency(out, + structInfo->pDependencies + idx, + metaInfo->pDependencies->GetMetaStructPointer() + idx, + consumer); + } + pdependencies_names += variable_name + ", "; + } + out << "\t\t" << "VkSubpassDependency " << pdependencies_array << "[] = {" << pdependencies_names << "};" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkRenderPassCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->attachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pattachments_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subpassCount << "," << std::endl; + struct_body << "\t\t\t" << psubpasses_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dependencyCount << "," << std::endl; + struct_body << "\t\t\t" << pdependencies_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassCreateInfo"); + out << "\t\t" << "VkRenderPassCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageViewCreateInfo(std::ostream &out, const VkImageViewCreateInfo* structInfo, Decoded_VkImageViewCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSamplerCreateInfo(std::ostream &out, const VkSamplerCreateInfo* structInfo, Decoded_VkSamplerCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string components_info_var = GenerateStruct_VkComponentMapping(out, - &structInfo->components, - metaInfo->components, - consumer); - std::string subresource_range_info_var = GenerateStruct_VkImageSubresourceRange(out, - &structInfo->subresourceRange, - metaInfo->subresourceRange, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImageViewCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageViewType(" << structInfo->viewType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << components_info_var << "," << std::endl; - struct_body << "\t\t\t" << subresource_range_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageViewCreateInfo"); - out << "\t\t" << "VkImageViewCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkSamplerCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFilter(" << structInfo->magFilter << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFilter(" << structInfo->minFilter << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSamplerMipmapMode(" << structInfo->mipmapMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSamplerAddressMode(" << structInfo->addressModeU << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSamplerAddressMode(" << structInfo->addressModeV << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSamplerAddressMode(" << structInfo->addressModeW << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->mipLodBias << "," << std::endl; + struct_body << "\t\t\t" << structInfo->anisotropyEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxAnisotropy << "," << std::endl; + struct_body << "\t\t\t" << structInfo->compareEnable << "," << std::endl; + struct_body << "\t\t\t" << "VkCompareOp(" << structInfo->compareOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minLod << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxLod << "," << std::endl; + struct_body << "\t\t\t" << "VkBorderColor(" << structInfo->borderColor << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->unnormalizedCoordinates << ","; + std::string variable_name = consumer.AddStruct(struct_body, "samplerCreateInfo"); + out << "\t\t" << "VkSamplerCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkLayerProperties(std::ostream &out, const VkLayerProperties* structInfo, Decoded_VkLayerProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSemaphoreCreateInfo(std::ostream &out, const VkSemaphoreCreateInfo* structInfo, Decoded_VkSemaphoreCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << VulkanCppConsumerBase::ToEscape(structInfo->layerName) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->specVersion << "," << std::endl; - struct_body << "\t\t\t" << structInfo->implementationVersion << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "layerProperties"); - out << "\t\t" << "VkLayerProperties " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkSemaphoreCreateFlags(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "semaphoreCreateInfo"); + out << "\t\t" << "VkSemaphoreCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMappedMemoryRange(std::ostream &out, const VkMappedMemoryRange* structInfo, Decoded_VkMappedMemoryRange* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkShaderModuleCreateInfo(std::ostream &out, const VkShaderModuleCreateInfo* structInfo, Decoded_VkShaderModuleCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pcode_array = "NULL"; + if (structInfo->pCode != NULL) { + pcode_array = "pCode_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pcode_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pCode, structInfo->codeSize / 4) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "mappedMemoryRange"); - out << "\t\t" << "VkMappedMemoryRange " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkShaderModuleCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->codeSize << "," << std::endl; + struct_body << "\t\t\t" << pcode_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "shaderModuleCreateInfo"); + out << "\t\t" << "VkShaderModuleCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryBarrier(std::ostream &out, const VkMemoryBarrier* structInfo, Decoded_VkMemoryBarrier* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSparseBufferMemoryBindInfo(std::ostream &out, const VkSparseBufferMemoryBindInfo* structInfo, Decoded_VkSparseBufferMemoryBindInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->srcAccessMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->dstAccessMask << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryBarrier"); - out << "\t\t" << "VkMemoryBarrier " << variable_name << " {" << std::endl; + std::string pbinds_array = "NULL"; + if (structInfo->pBinds != NULL) { + pbinds_array = "pBinds_" + std::to_string(consumer.GetNextId()); + std::string pbinds_names; + for (uint32_t idx = 0; idx < structInfo->bindCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pBinds + idx != NULL) { + variable_name = GenerateStruct_VkSparseMemoryBind(out, + structInfo->pBinds + idx, + metaInfo->pBinds->GetMetaStructPointer() + idx, + consumer); + } + pbinds_names += variable_name + ", "; + } + out << "\t\t" << "VkSparseMemoryBind " << pbinds_array << "[] = {" << pbinds_names << "};" << std::endl; + } + struct_body << "\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bindCount << "," << std::endl; + struct_body << "\t\t\t" << pbinds_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "sparseBufferMemoryBindInfo"); + out << "\t\t" << "VkSparseBufferMemoryBindInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryHeap(std::ostream &out, const VkMemoryHeap* structInfo, Decoded_VkMemoryHeap* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSparseImageFormatProperties(std::ostream &out, const VkSparseImageFormatProperties* structInfo, Decoded_VkSparseImageFormatProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->size << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkMemoryHeapFlags(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryHeap"); - out << "\t\t" << "VkMemoryHeap " << variable_name << " {" << std::endl; + std::string image_granularity_info_var = GenerateStruct_VkExtent3D(out, + &structInfo->imageGranularity, + metaInfo->imageGranularity, + consumer); + struct_body << "\t" << "VkImageAspectFlags(" << structInfo->aspectMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << image_granularity_info_var << "," << std::endl; + struct_body << "\t\t\t" << "VkSparseImageFormatFlags(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "sparseImageFormatProperties"); + out << "\t\t" << "VkSparseImageFormatProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryRequirements(std::ostream &out, const VkMemoryRequirements* structInfo, Decoded_VkMemoryRequirements* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSparseImageMemoryBind(std::ostream &out, const VkSparseImageMemoryBind* structInfo, Decoded_VkSparseImageMemoryBind* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->size << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->alignment << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryTypeBits << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryRequirements"); - out << "\t\t" << "VkMemoryRequirements " << variable_name << " {" << std::endl; + std::string subresource_info_var = GenerateStruct_VkImageSubresource(out, + &structInfo->subresource, + metaInfo->subresource, + consumer); + std::string offset_info_var = GenerateStruct_VkOffset3D(out, + &structInfo->offset, + metaInfo->offset, + consumer); + std::string extent_info_var = GenerateStruct_VkExtent3D(out, + &structInfo->extent, + metaInfo->extent, + consumer); + struct_body << "\t" << subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkSparseMemoryBindFlags(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "sparseImageMemoryBind"); + out << "\t\t" << "VkSparseImageMemoryBind " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryType(std::ostream &out, const VkMemoryType* structInfo, Decoded_VkMemoryType* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSparseImageMemoryBindInfo(std::ostream &out, const VkSparseImageMemoryBindInfo* structInfo, Decoded_VkSparseImageMemoryBindInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkMemoryPropertyFlags(" << structInfo->propertyFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->heapIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryType"); - out << "\t\t" << "VkMemoryType " << variable_name << " {" << std::endl; + std::string pbinds_array = "NULL"; + if (structInfo->pBinds != NULL) { + pbinds_array = "pBinds_" + std::to_string(consumer.GetNextId()); + std::string pbinds_names; + for (uint32_t idx = 0; idx < structInfo->bindCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pBinds + idx != NULL) { + variable_name = GenerateStruct_VkSparseImageMemoryBind(out, + structInfo->pBinds + idx, + metaInfo->pBinds->GetMetaStructPointer() + idx, + consumer); + } + pbinds_names += variable_name + ", "; + } + out << "\t\t" << "VkSparseImageMemoryBind " << pbinds_array << "[] = {" << pbinds_names << "};" << std::endl; + } + struct_body << "\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bindCount << "," << std::endl; + struct_body << "\t\t\t" << pbinds_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "sparseImageMemoryBindInfo"); + out << "\t\t" << "VkSparseImageMemoryBindInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkOffset2D(std::ostream &out, const VkOffset2D* structInfo, Decoded_VkOffset2D* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSparseImageMemoryRequirements(std::ostream &out, const VkSparseImageMemoryRequirements* structInfo, Decoded_VkSparseImageMemoryRequirements* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->x << "," << std::endl; - struct_body << "\t\t\t" << structInfo->y << ","; - std::string variable_name = consumer.AddStruct(struct_body, "offset2D"); - out << "\t\t" << "VkOffset2D " << variable_name << " {" << std::endl; + std::string format_properties_info_var = GenerateStruct_VkSparseImageFormatProperties(out, + &structInfo->formatProperties, + metaInfo->formatProperties, + consumer); + struct_body << "\t" << format_properties_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imageMipTailFirstLod << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imageMipTailSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imageMipTailOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imageMipTailStride << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "sparseImageMemoryRequirements"); + out << "\t\t" << "VkSparseImageMemoryRequirements " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkOffset3D(std::ostream &out, const VkOffset3D* structInfo, Decoded_VkOffset3D* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSparseImageOpaqueMemoryBindInfo(std::ostream &out, const VkSparseImageOpaqueMemoryBindInfo* structInfo, Decoded_VkSparseImageOpaqueMemoryBindInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->x << "," << std::endl; - struct_body << "\t\t\t" << structInfo->y << "," << std::endl; - struct_body << "\t\t\t" << structInfo->z << ","; - std::string variable_name = consumer.AddStruct(struct_body, "offset3D"); - out << "\t\t" << "VkOffset3D " << variable_name << " {" << std::endl; + std::string pbinds_array = "NULL"; + if (structInfo->pBinds != NULL) { + pbinds_array = "pBinds_" + std::to_string(consumer.GetNextId()); + std::string pbinds_names; + for (uint32_t idx = 0; idx < structInfo->bindCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pBinds + idx != NULL) { + variable_name = GenerateStruct_VkSparseMemoryBind(out, + structInfo->pBinds + idx, + metaInfo->pBinds->GetMetaStructPointer() + idx, + consumer); + } + pbinds_names += variable_name + ", "; + } + out << "\t\t" << "VkSparseMemoryBind " << pbinds_array << "[] = {" << pbinds_names << "};" << std::endl; + } + struct_body << "\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bindCount << "," << std::endl; + struct_body << "\t\t\t" << pbinds_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "sparseImageOpaqueMemoryBindInfo"); + out << "\t\t" << "VkSparseImageOpaqueMemoryBindInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFeatures(std::ostream &out, const VkPhysicalDeviceFeatures* structInfo, Decoded_VkPhysicalDeviceFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSparseMemoryBind(std::ostream &out, const VkSparseMemoryBind* structInfo, Decoded_VkSparseMemoryBind* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->robustBufferAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fullDrawIndexUint32 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageCubeArray << "," << std::endl; - struct_body << "\t\t\t" << structInfo->independentBlend << "," << std::endl; - struct_body << "\t\t\t" << structInfo->geometryShader << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tessellationShader << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sampleRateShading << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dualSrcBlend << "," << std::endl; - struct_body << "\t\t\t" << structInfo->logicOp << "," << std::endl; - struct_body << "\t\t\t" << structInfo->multiDrawIndirect << "," << std::endl; - struct_body << "\t\t\t" << structInfo->drawIndirectFirstInstance << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthClamp << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthBiasClamp << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fillModeNonSolid << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthBounds << "," << std::endl; - struct_body << "\t\t\t" << structInfo->wideLines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->largePoints << "," << std::endl; - struct_body << "\t\t\t" << structInfo->alphaToOne << "," << std::endl; - struct_body << "\t\t\t" << structInfo->multiViewport << "," << std::endl; - struct_body << "\t\t\t" << structInfo->samplerAnisotropy << "," << std::endl; - struct_body << "\t\t\t" << structInfo->textureCompressionETC2 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->textureCompressionASTC_LDR << "," << std::endl; - struct_body << "\t\t\t" << structInfo->textureCompressionBC << "," << std::endl; - struct_body << "\t\t\t" << structInfo->occlusionQueryPrecise << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineStatisticsQuery << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexPipelineStoresAndAtomics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentStoresAndAtomics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderTessellationAndGeometryPointSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderImageGatherExtended << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageImageExtendedFormats << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageImageMultisample << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageImageReadWithoutFormat << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageImageWriteWithoutFormat << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderUniformBufferArrayDynamicIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSampledImageArrayDynamicIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageBufferArrayDynamicIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageImageArrayDynamicIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderClipDistance << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderCullDistance << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderFloat64 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderInt64 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderInt16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderResourceResidency << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderResourceMinLod << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sparseBinding << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sparseResidencyBuffer << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sparseResidencyImage2D << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sparseResidencyImage3D << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sparseResidency2Samples << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sparseResidency4Samples << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sparseResidency8Samples << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sparseResidency16Samples << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sparseResidencyAliased << "," << std::endl; - struct_body << "\t\t\t" << structInfo->variableMultisampleRate << "," << std::endl; - struct_body << "\t\t\t" << structInfo->inheritedQueries << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFeatures"); - out << "\t\t" << "VkPhysicalDeviceFeatures " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->resourceOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkSparseMemoryBindFlags(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "sparseMemoryBind"); + out << "\t\t" << "VkSparseMemoryBind " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceLimits(std::ostream &out, const VkPhysicalDeviceLimits* structInfo, Decoded_VkPhysicalDeviceLimits* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSpecializationInfo(std::ostream &out, const VkSpecializationInfo* structInfo, Decoded_VkSpecializationInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->maxImageDimension1D << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxImageDimension2D << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxImageDimension3D << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxImageDimensionCube << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxImageArrayLayers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTexelBufferElements << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxUniformBufferRange << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxStorageBufferRange << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPushConstantsSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxMemoryAllocationCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSamplerAllocationCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferImageGranularity << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sparseAddressSpaceSize << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxBoundDescriptorSets << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorSamplers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUniformBuffers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorStorageBuffers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorSampledImages << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorStorageImages << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorInputAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageResources << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetSamplers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUniformBuffers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUniformBuffersDynamic << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetStorageBuffers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetStorageBuffersDynamic << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetSampledImages << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetStorageImages << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetInputAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxVertexInputAttributes << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxVertexInputBindings << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxVertexInputAttributeOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxVertexInputBindingStride << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxVertexOutputComponents << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTessellationGenerationLevel << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTessellationPatchSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTessellationControlPerVertexInputComponents << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTessellationControlPerVertexOutputComponents << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTessellationControlPerPatchOutputComponents << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTessellationControlTotalOutputComponents << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTessellationEvaluationInputComponents << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTessellationEvaluationOutputComponents << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxGeometryShaderInvocations << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxGeometryInputComponents << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxGeometryOutputComponents << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxGeometryOutputVertices << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxGeometryTotalOutputComponents << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxFragmentInputComponents << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxFragmentOutputAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxFragmentDualSrcAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxFragmentCombinedOutputResources << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxComputeSharedMemorySize << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->maxComputeWorkGroupCount[0]), 3) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxComputeWorkGroupInvocations << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->maxComputeWorkGroupSize[0]), 3) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subPixelPrecisionBits << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subTexelPrecisionBits << "," << std::endl; - struct_body << "\t\t\t" << structInfo->mipmapPrecisionBits << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDrawIndexedIndexValue << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDrawIndirectCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSamplerLodBias << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSamplerAnisotropy << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxViewports << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->maxViewportDimensions[0]), 2) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->viewportBoundsRange[0]), 2) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewportSubPixelBits << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minMemoryMapAlignment << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minTexelBufferOffsetAlignment << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minUniformBufferOffsetAlignment << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minStorageBufferOffsetAlignment << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minTexelOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTexelOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minTexelGatherOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTexelGatherOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minInterpolationOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxInterpolationOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subPixelInterpolationOffsetBits << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxFramebufferWidth << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxFramebufferHeight << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxFramebufferLayers << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->framebufferColorSampleCounts << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->framebufferDepthSampleCounts << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->framebufferStencilSampleCounts << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->framebufferNoAttachmentsSampleCounts << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxColorAttachments << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->sampledImageColorSampleCounts << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->sampledImageIntegerSampleCounts << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->sampledImageDepthSampleCounts << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->sampledImageStencilSampleCounts << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->storageImageSampleCounts << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSampleMaskWords << "," << std::endl; - struct_body << "\t\t\t" << structInfo->timestampComputeAndGraphics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->timestampPeriod << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxClipDistances << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxCullDistances << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxCombinedClipAndCullDistances << "," << std::endl; - struct_body << "\t\t\t" << structInfo->discreteQueuePriorities << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->pointSizeRange[0]), 2) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->lineWidthRange[0]), 2) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pointSizeGranularity << "," << std::endl; - struct_body << "\t\t\t" << structInfo->lineWidthGranularity << "," << std::endl; - struct_body << "\t\t\t" << structInfo->strictLines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->standardSampleLocations << "," << std::endl; - struct_body << "\t\t\t" << structInfo->optimalBufferCopyOffsetAlignment << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->optimalBufferCopyRowPitchAlignment << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->nonCoherentAtomSize << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLimits"); - out << "\t\t" << "VkPhysicalDeviceLimits " << variable_name << " {" << std::endl; + std::string pmap_entries_array = "NULL"; + if (structInfo->pMapEntries != NULL) { + pmap_entries_array = "pMapEntries_" + std::to_string(consumer.GetNextId()); + std::string pmap_entries_names; + for (uint32_t idx = 0; idx < structInfo->mapEntryCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pMapEntries + idx != NULL) { + variable_name = GenerateStruct_VkSpecializationMapEntry(out, + structInfo->pMapEntries + idx, + metaInfo->pMapEntries->GetMetaStructPointer() + idx, + consumer); + } + pmap_entries_names += variable_name + ", "; + } + out << "\t\t" << "VkSpecializationMapEntry " << pmap_entries_array << "[] = {" << pmap_entries_names << "};" << std::endl; + } + std::string pdata_array = "NULL"; + if (structInfo->pData != NULL) { + std::string pdata_values; + for (uint32_t idx0 = 0; idx0 < structInfo->dataSize; ++idx0) { + pdata_values += std::to_string(reinterpret_cast(structInfo->pData)[idx0]) + ", "; + } + pdata_array = "pData_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint8_t " << pdata_array << "[] = {" << pdata_values << "};" << std::endl; + } + struct_body << "\t" << structInfo->mapEntryCount << "," << std::endl; + struct_body << "\t\t\t" << pmap_entries_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dataSize << "," << std::endl; + struct_body << "\t\t\t" << pdata_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "specializationInfo"); + out << "\t\t" << "VkSpecializationInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMemoryProperties(std::ostream &out, const VkPhysicalDeviceMemoryProperties* structInfo, Decoded_VkPhysicalDeviceMemoryProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSpecializationMapEntry(std::ostream &out, const VkSpecializationMapEntry* structInfo, Decoded_VkSpecializationMapEntry* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->memoryTypeCount << "," << std::endl; - struct_body << "\t\t\t{}," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryHeapCount << "," << std::endl; - struct_body << "\t\t\t{}," << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMemoryProperties"); - out << "\t\t" << "VkPhysicalDeviceMemoryProperties " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->constantID << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << ","; + std::string variable_name = consumer.AddStruct(struct_body, "specializationMapEntry"); + out << "\t\t" << "VkSpecializationMapEntry " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceProperties(std::ostream &out, const VkPhysicalDeviceProperties* structInfo, Decoded_VkPhysicalDeviceProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkStencilOpState(std::ostream &out, const VkStencilOpState* structInfo, Decoded_VkStencilOpState* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string limits_info_var = GenerateStruct_VkPhysicalDeviceLimits(out, - &structInfo->limits, - metaInfo->limits, - consumer); - std::string sparse_properties_info_var = GenerateStruct_VkPhysicalDeviceSparseProperties(out, - &structInfo->sparseProperties, - metaInfo->sparseProperties, - consumer); - struct_body << "\t" << structInfo->apiVersion << "," << std::endl; - struct_body << "\t\t\t" << structInfo->driverVersion << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vendorID << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceID << "," << std::endl; - struct_body << "\t\t\t" << "VkPhysicalDeviceType(" << structInfo->deviceType << ")" << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->deviceName) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->pipelineCacheUUID[0]), VK_UUID_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << limits_info_var << "," << std::endl; - struct_body << "\t\t\t" << sparse_properties_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceProperties"); - out << "\t\t" << "VkPhysicalDeviceProperties " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkStencilOp(" << structInfo->failOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkStencilOp(" << structInfo->passOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkStencilOp(" << structInfo->depthFailOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkCompareOp(" << structInfo->compareOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->compareMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->writeMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->reference << ","; + std::string variable_name = consumer.AddStruct(struct_body, "stencilOpState"); + out << "\t\t" << "VkStencilOpState " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkSubpassDependency(std::ostream &out, const VkSubpassDependency* structInfo, Decoded_VkSubpassDependency* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + struct_body << "\t" << structInfo->srcSubpass << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstSubpass << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlags(" << structInfo->srcStageMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlags(" << structInfo->dstStageMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->srcAccessMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->dstAccessMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkDependencyFlags(" << structInfo->dependencyFlags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "subpassDependency"); + out << "\t\t" << "VkSubpassDependency " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkSubpassDescription(std::ostream &out, const VkSubpassDescription* structInfo, Decoded_VkSubpassDescription* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pinput_attachments_array = "NULL"; + if (structInfo->pInputAttachments != NULL) { + pinput_attachments_array = "pInputAttachments_" + std::to_string(consumer.GetNextId()); + std::string pinput_attachments_names; + for (uint32_t idx = 0; idx < structInfo->inputAttachmentCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pInputAttachments + idx != NULL) { + variable_name = GenerateStruct_VkAttachmentReference(out, + structInfo->pInputAttachments + idx, + metaInfo->pInputAttachments->GetMetaStructPointer() + idx, + consumer); + } + pinput_attachments_names += variable_name + ", "; + } + out << "\t\t" << "VkAttachmentReference " << pinput_attachments_array << "[] = {" << pinput_attachments_names << "};" << std::endl; + } + std::string pcolor_attachments_array = "NULL"; + if (structInfo->pColorAttachments != NULL) { + pcolor_attachments_array = "pColorAttachments_" + std::to_string(consumer.GetNextId()); + std::string pcolor_attachments_names; + for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pColorAttachments + idx != NULL) { + variable_name = GenerateStruct_VkAttachmentReference(out, + structInfo->pColorAttachments + idx, + metaInfo->pColorAttachments->GetMetaStructPointer() + idx, + consumer); + } + pcolor_attachments_names += variable_name + ", "; + } + out << "\t\t" << "VkAttachmentReference " << pcolor_attachments_array << "[] = {" << pcolor_attachments_names << "};" << std::endl; + } + std::string presolve_attachments_array = "NULL"; + if (structInfo->pResolveAttachments != NULL) { + presolve_attachments_array = "pResolveAttachments_" + std::to_string(consumer.GetNextId()); + std::string presolve_attachments_names; + for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pResolveAttachments + idx != NULL) { + variable_name = GenerateStruct_VkAttachmentReference(out, + structInfo->pResolveAttachments + idx, + metaInfo->pResolveAttachments->GetMetaStructPointer() + idx, + consumer); + } + presolve_attachments_names += variable_name + ", "; + } + out << "\t\t" << "VkAttachmentReference " << presolve_attachments_array << "[] = {" << presolve_attachments_names << "};" << std::endl; + } + std::string pdepth_stencil_attachment_struct = "NULL"; + if (structInfo->pDepthStencilAttachment != NULL) { + pdepth_stencil_attachment_struct = GenerateStruct_VkAttachmentReference(out, + structInfo->pDepthStencilAttachment, + metaInfo->pDepthStencilAttachment->GetMetaStructPointer(), + consumer); + pdepth_stencil_attachment_struct.insert(0, "&"); + } + std::string ppreserve_attachments_array = "NULL"; + if (structInfo->pPreserveAttachments != NULL) { + ppreserve_attachments_array = "pPreserveAttachments_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << ppreserve_attachments_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pPreserveAttachments, structInfo->preserveAttachmentCount) << ";" << std::endl; + } + struct_body << "\t" << "VkSubpassDescriptionFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineBindPoint(" << structInfo->pipelineBindPoint << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->inputAttachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pinput_attachments_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pcolor_attachments_array << "," << std::endl; + struct_body << "\t\t\t" << presolve_attachments_array << "," << std::endl; + struct_body << "\t\t\t" << pdepth_stencil_attachment_struct << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preserveAttachmentCount << "," << std::endl; + struct_body << "\t\t\t" << ppreserve_attachments_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "subpassDescription"); + out << "\t\t" << "VkSubpassDescription " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSparseProperties(std::ostream &out, const VkPhysicalDeviceSparseProperties* structInfo, Decoded_VkPhysicalDeviceSparseProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSubresourceLayout(std::ostream &out, const VkSubresourceLayout* structInfo, Decoded_VkSubresourceLayout* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->residencyStandard2DBlockShape << "," << std::endl; - struct_body << "\t\t\t" << structInfo->residencyStandard2DMultisampleBlockShape << "," << std::endl; - struct_body << "\t\t\t" << structInfo->residencyStandard3DBlockShape << "," << std::endl; - struct_body << "\t\t\t" << structInfo->residencyAlignedMipSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->residencyNonResidentStrict << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSparseProperties"); - out << "\t\t" << "VkPhysicalDeviceSparseProperties " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->offset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->rowPitch << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->arrayPitch << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthPitch << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "subresourceLayout"); + out << "\t\t" << "VkSubresourceLayout " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineCacheCreateInfo(std::ostream &out, const VkPipelineCacheCreateInfo* structInfo, Decoded_VkPipelineCacheCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVertexInputAttributeDescription(std::ostream &out, const VkVertexInputAttributeDescription* structInfo, Decoded_VkVertexInputAttributeDescription* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pinitial_data_array = "NULL"; - if (structInfo->pInitialData != NULL) { - std::string pinitial_data_values; - for (uint32_t idx0 = 0; idx0 < structInfo->initialDataSize; ++idx0) { - pinitial_data_values += std::to_string(reinterpret_cast(structInfo->pInitialData)[idx0]) + ", "; - } - pinitial_data_array = "pInitialData_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint8_t " << pinitial_data_array << "[] = {" << pinitial_data_values << "};" << std::endl; - } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineCacheCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->initialDataSize << "," << std::endl; - struct_body << "\t\t\t" << pinitial_data_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineCacheCreateInfo"); - out << "\t\t" << "VkPipelineCacheCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->location << "," << std::endl; + struct_body << "\t\t\t" << structInfo->binding << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << ","; + std::string variable_name = consumer.AddStruct(struct_body, "vertexInputAttributeDescription"); + out << "\t\t" << "VkVertexInputAttributeDescription " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineCacheHeaderVersionOne(std::ostream &out, const VkPipelineCacheHeaderVersionOne* structInfo, Decoded_VkPipelineCacheHeaderVersionOne* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVertexInputBindingDescription(std::ostream &out, const VkVertexInputBindingDescription* structInfo, Decoded_VkVertexInputBindingDescription* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->headerSize << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineCacheHeaderVersion(" << structInfo->headerVersion << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vendorID << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceID << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->pipelineCacheUUID[0]), VK_UUID_SIZE) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineCacheHeaderVersionOne"); - out << "\t\t" << "VkPipelineCacheHeaderVersionOne " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->binding << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stride << "," << std::endl; + struct_body << "\t\t\t" << "VkVertexInputRate(" << structInfo->inputRate << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "vertexInputBindingDescription"); + out << "\t\t" << "VkVertexInputBindingDescription " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineColorBlendAttachmentState(std::ostream &out, const VkPipelineColorBlendAttachmentState* structInfo, Decoded_VkPipelineColorBlendAttachmentState* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkViewport(std::ostream &out, const VkViewport* structInfo, Decoded_VkViewport* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->blendEnable << "," << std::endl; - struct_body << "\t\t\t" << "VkBlendFactor(" << structInfo->srcColorBlendFactor << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBlendFactor(" << structInfo->dstColorBlendFactor << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBlendOp(" << structInfo->colorBlendOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBlendFactor(" << structInfo->srcAlphaBlendFactor << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBlendFactor(" << structInfo->dstAlphaBlendFactor << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBlendOp(" << structInfo->alphaBlendOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkColorComponentFlags(" << structInfo->colorWriteMask << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineColorBlendAttachmentState"); - out << "\t\t" << "VkPipelineColorBlendAttachmentState " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->x << "," << std::endl; + struct_body << "\t\t\t" << structInfo->y << "," << std::endl; + struct_body << "\t\t\t" << structInfo->width << "," << std::endl; + struct_body << "\t\t\t" << structInfo->height << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minDepth << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDepth << ","; + std::string variable_name = consumer.AddStruct(struct_body, "viewport"); + out << "\t\t" << "VkViewport " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineColorBlendStateCreateInfo(std::ostream &out, const VkPipelineColorBlendStateCreateInfo* structInfo, Decoded_VkPipelineColorBlendStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindBufferMemoryDeviceGroupInfo(std::ostream &out, const VkBindBufferMemoryDeviceGroupInfo* structInfo, Decoded_VkBindBufferMemoryDeviceGroupInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pattachments_array = "NULL"; - if (structInfo->pAttachments != NULL) { - pattachments_array = "pAttachments_" + std::to_string(consumer.GetNextId()); - std::string pattachments_names; - for (uint32_t idx = 0; idx < structInfo->attachmentCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pAttachments + idx != NULL) { - variable_name = GenerateStruct_VkPipelineColorBlendAttachmentState(out, - structInfo->pAttachments + idx, - metaInfo->pAttachments->GetMetaStructPointer() + idx, - consumer); - } - pattachments_names += variable_name + ", "; - } - out << "\t\t" << "VkPipelineColorBlendAttachmentState " << pattachments_array << "[] = {" << pattachments_names << "};" << std::endl; + std::string pdevice_indices_array = "NULL"; + if (structInfo->pDeviceIndices != NULL) { + pdevice_indices_array = "pDeviceIndices_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pdevice_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDeviceIndices, structInfo->deviceIndexCount) << ";" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineColorBlendStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->logicOpEnable << "," << std::endl; - struct_body << "\t\t\t" << "VkLogicOp(" << structInfo->logicOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->attachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pattachments_array << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->blendConstants[0]), 4) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineColorBlendStateCreateInfo"); - out << "\t\t" << "VkPipelineColorBlendStateCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->deviceIndexCount << "," << std::endl; + struct_body << "\t\t\t" << pdevice_indices_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindBufferMemoryDeviceGroupInfo"); + out << "\t\t" << "VkBindBufferMemoryDeviceGroupInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineDepthStencilStateCreateInfo(std::ostream &out, const VkPipelineDepthStencilStateCreateInfo* structInfo, Decoded_VkPipelineDepthStencilStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindBufferMemoryInfo(std::ostream &out, const VkBindBufferMemoryInfo* structInfo, Decoded_VkBindBufferMemoryInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string front_info_var = GenerateStruct_VkStencilOpState(out, - &structInfo->front, - metaInfo->front, - consumer); - std::string back_info_var = GenerateStruct_VkStencilOpState(out, - &structInfo->back, - metaInfo->back, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineDepthStencilStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthTestEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthWriteEnable << "," << std::endl; - struct_body << "\t\t\t" << "VkCompareOp(" << structInfo->depthCompareOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthBoundsTestEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stencilTestEnable << "," << std::endl; - struct_body << "\t\t\t" << front_info_var << "," << std::endl; - struct_body << "\t\t\t" << back_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minDepthBounds << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDepthBounds << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineDepthStencilStateCreateInfo"); - out << "\t\t" << "VkPipelineDepthStencilStateCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryOffset << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindBufferMemoryInfo"); + out << "\t\t" << "VkBindBufferMemoryInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineDynamicStateCreateInfo(std::ostream &out, const VkPipelineDynamicStateCreateInfo* structInfo, Decoded_VkPipelineDynamicStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindImageMemoryDeviceGroupInfo(std::ostream &out, const VkBindImageMemoryDeviceGroupInfo* structInfo, Decoded_VkBindImageMemoryDeviceGroupInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdynamic_states_values; - std::string pdynamic_states_array = "NULL"; - if (structInfo->pDynamicStates != NULL) { - for (uint32_t idx = 0; idx < structInfo->dynamicStateCount; idx++) { - pdynamic_states_values += util::ToString(structInfo->pDynamicStates[idx]) + ", "; - } - pdynamic_states_array = "pDynamicStates_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkDynamicState " << pdynamic_states_array << "[] = {" << pdynamic_states_values << "};" << std::endl; + std::string pdevice_indices_array = "NULL"; + if (structInfo->pDeviceIndices != NULL) { + pdevice_indices_array = "pDeviceIndices_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pdevice_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDeviceIndices, structInfo->deviceIndexCount) << ";" << std::endl; + } + std::string psplit_instance_bind_regions_array = "NULL"; + if (structInfo->pSplitInstanceBindRegions != NULL) { + psplit_instance_bind_regions_array = "pSplitInstanceBindRegions_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkRect2D " << psplit_instance_bind_regions_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pSplitInstanceBindRegions, structInfo->splitInstanceBindRegionCount) << ";" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineDynamicStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dynamicStateCount << "," << std::endl; - struct_body << "\t\t\t" << pdynamic_states_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineDynamicStateCreateInfo"); - out << "\t\t" << "VkPipelineDynamicStateCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->deviceIndexCount << "," << std::endl; + struct_body << "\t\t\t" << pdevice_indices_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->splitInstanceBindRegionCount << "," << std::endl; + struct_body << "\t\t\t" << psplit_instance_bind_regions_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindImageMemoryDeviceGroupInfo"); + out << "\t\t" << "VkBindImageMemoryDeviceGroupInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineInputAssemblyStateCreateInfo(std::ostream &out, const VkPipelineInputAssemblyStateCreateInfo* structInfo, Decoded_VkPipelineInputAssemblyStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindImageMemoryInfo(std::ostream &out, const VkBindImageMemoryInfo* structInfo, Decoded_VkBindImageMemoryInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineInputAssemblyStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPrimitiveTopology(" << structInfo->topology << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->primitiveRestartEnable << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineInputAssemblyStateCreateInfo"); - out << "\t\t" << "VkPipelineInputAssemblyStateCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryOffset << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindImageMemoryInfo"); + out << "\t\t" << "VkBindImageMemoryInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineLayoutCreateInfo(std::ostream &out, const VkPipelineLayoutCreateInfo* structInfo, Decoded_VkPipelineLayoutCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindImagePlaneMemoryInfo(std::ostream &out, const VkBindImagePlaneMemoryInfo* structInfo, Decoded_VkBindImagePlaneMemoryInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pset_layouts_array = "NULL"; - if (metaInfo->pSetLayouts.GetPointer() != NULL && structInfo->setLayoutCount > 0) { - pset_layouts_array = "pset_layouts_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)); - std::string pset_layouts_values = toStringJoin(metaInfo->pSetLayouts.GetPointer(), - metaInfo->pSetLayouts.GetPointer() + structInfo->setLayoutCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->setLayoutCount == 1) { - pset_layouts_array = "&" + pset_layouts_values; - } else if (structInfo->setLayoutCount > 1) { - out << "\t\t" << "VkDescriptorSetLayout " << pset_layouts_array << "[] = {" << pset_layouts_values << "};" << std::endl; - } - } - std::string ppush_constant_ranges_array = "NULL"; - if (structInfo->pPushConstantRanges != NULL) { - ppush_constant_ranges_array = "pPushConstantRanges_" + std::to_string(consumer.GetNextId()); - std::string ppush_constant_ranges_names; - for (uint32_t idx = 0; idx < structInfo->pushConstantRangeCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pPushConstantRanges + idx != NULL) { - variable_name = GenerateStruct_VkPushConstantRange(out, - structInfo->pPushConstantRanges + idx, - metaInfo->pPushConstantRanges->GetMetaStructPointer() + idx, - consumer); - } - ppush_constant_ranges_names += variable_name + ", "; - } - out << "\t\t" << "VkPushConstantRange " << ppush_constant_ranges_array << "[] = {" << ppush_constant_ranges_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineLayoutCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->setLayoutCount << "," << std::endl; - struct_body << "\t\t\t" << pset_layouts_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pushConstantRangeCount << "," << std::endl; - struct_body << "\t\t\t" << ppush_constant_ranges_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineLayoutCreateInfo"); - out << "\t\t" << "VkPipelineLayoutCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkImageAspectFlagBits(" << structInfo->planeAspect << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindImagePlaneMemoryInfo"); + out << "\t\t" << "VkBindImagePlaneMemoryInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineMultisampleStateCreateInfo(std::ostream &out, const VkPipelineMultisampleStateCreateInfo* structInfo, Decoded_VkPipelineMultisampleStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string psample_mask_array = "NULL"; - if (structInfo->pSampleMask != NULL) { - std::string psample_mask_values; - for (uint32_t idx0 = 0; idx0 < (structInfo->rasterizationSamples + 31) / 32; ++idx0) { - psample_mask_values += std::to_string(structInfo->pSampleMask[idx0]) + ", "; - } - psample_mask_array = "pSampleMask_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkSampleMask " << psample_mask_array << "[] = {" << psample_mask_values << "};" << std::endl; - } +std::string GenerateStruct_VkBufferMemoryRequirementsInfo2(std::ostream &out, const VkBufferMemoryRequirementsInfo2* structInfo, Decoded_VkBufferMemoryRequirementsInfo2* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineMultisampleStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->rasterizationSamples << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sampleShadingEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minSampleShading << "," << std::endl; - struct_body << "\t\t\t" << psample_mask_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->alphaToCoverageEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->alphaToOneEnable << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineMultisampleStateCreateInfo"); - out << "\t\t" << "VkPipelineMultisampleStateCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bufferMemoryRequirementsInfo2"); + out << "\t\t" << "VkBufferMemoryRequirementsInfo2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineRasterizationStateCreateInfo(std::ostream &out, const VkPipelineRasterizationStateCreateInfo* structInfo, Decoded_VkPipelineRasterizationStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorSetLayoutSupport(std::ostream &out, const VkDescriptorSetLayoutSupport* structInfo, Decoded_VkDescriptorSetLayoutSupport* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRasterizationStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthClampEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->rasterizerDiscardEnable << "," << std::endl; - struct_body << "\t\t\t" << "VkPolygonMode(" << structInfo->polygonMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkCullModeFlags(" << structInfo->cullMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFrontFace(" << structInfo->frontFace << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthBiasEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthBiasConstantFactor << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthBiasClamp << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthBiasSlopeFactor << "," << std::endl; - struct_body << "\t\t\t" << structInfo->lineWidth << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineRasterizationStateCreateInfo"); - out << "\t\t" << "VkPipelineRasterizationStateCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->supported << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetLayoutSupport"); + out << "\t\t" << "VkDescriptorSetLayoutSupport " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineShaderStageCreateInfo(std::ostream &out, const VkPipelineShaderStageCreateInfo* structInfo, Decoded_VkPipelineShaderStageCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorUpdateTemplateCreateInfo(std::ostream &out, const VkDescriptorUpdateTemplateCreateInfo* structInfo, Decoded_VkDescriptorUpdateTemplateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pspecialization_info_struct = "NULL"; - if (structInfo->pSpecializationInfo != NULL) { - pspecialization_info_struct = GenerateStruct_VkSpecializationInfo(out, - structInfo->pSpecializationInfo, - metaInfo->pSpecializationInfo->GetMetaStructPointer(), - consumer); - pspecialization_info_struct.insert(0, "&"); + std::string pdescriptor_update_entries_array = "NULL"; + if (structInfo->pDescriptorUpdateEntries != NULL) { + pdescriptor_update_entries_array = "pDescriptorUpdateEntries_" + std::to_string(consumer.GetNextId()); + std::string pdescriptor_update_entries_names; + for (uint32_t idx = 0; idx < structInfo->descriptorUpdateEntryCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pDescriptorUpdateEntries + idx != NULL) { + variable_name = GenerateStruct_VkDescriptorUpdateTemplateEntry(out, + structInfo->pDescriptorUpdateEntries + idx, + metaInfo->pDescriptorUpdateEntries->GetMetaStructPointer() + idx, + consumer); + } + pdescriptor_update_entries_names += variable_name + ", "; + } + out << "\t\t" << "VkDescriptorUpdateTemplateEntry " << pdescriptor_update_entries_array << "[] = {" << pdescriptor_update_entries_names << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineShaderStageCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlagBits(" << structInfo->stage << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->module) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pName) << "," << std::endl; - struct_body << "\t\t\t" << pspecialization_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineShaderStageCreateInfo"); - out << "\t\t" << "VkPipelineShaderStageCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDescriptorUpdateTemplateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorUpdateEntryCount << "," << std::endl; + struct_body << "\t\t\t" << pdescriptor_update_entries_array << "," << std::endl; + struct_body << "\t\t\t" << "VkDescriptorUpdateTemplateType(" << structInfo->templateType << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->descriptorSetLayout) << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineBindPoint(" << structInfo->pipelineBindPoint << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipelineLayout) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->set << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorUpdateTemplateCreateInfo"); + out << "\t\t" << "VkDescriptorUpdateTemplateCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineTessellationStateCreateInfo(std::ostream &out, const VkPipelineTessellationStateCreateInfo* structInfo, Decoded_VkPipelineTessellationStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceGroupBindSparseInfo(std::ostream &out, const VkDeviceGroupBindSparseInfo* structInfo, Decoded_VkDeviceGroupBindSparseInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineTessellationStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->patchControlPoints << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineTessellationStateCreateInfo"); - out << "\t\t" << "VkPipelineTessellationStateCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->resourceDeviceIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryDeviceIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupBindSparseInfo"); + out << "\t\t" << "VkDeviceGroupBindSparseInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineVertexInputStateCreateInfo(std::ostream &out, const VkPipelineVertexInputStateCreateInfo* structInfo, Decoded_VkPipelineVertexInputStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceGroupCommandBufferBeginInfo(std::ostream &out, const VkDeviceGroupCommandBufferBeginInfo* structInfo, Decoded_VkDeviceGroupCommandBufferBeginInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pvertex_binding_descriptions_array = "NULL"; - if (structInfo->pVertexBindingDescriptions != NULL) { - pvertex_binding_descriptions_array = "pVertexBindingDescriptions_" + std::to_string(consumer.GetNextId()); - std::string pvertex_binding_descriptions_names; - for (uint32_t idx = 0; idx < structInfo->vertexBindingDescriptionCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pVertexBindingDescriptions + idx != NULL) { - variable_name = GenerateStruct_VkVertexInputBindingDescription(out, - structInfo->pVertexBindingDescriptions + idx, - metaInfo->pVertexBindingDescriptions->GetMetaStructPointer() + idx, - consumer); - } - pvertex_binding_descriptions_names += variable_name + ", "; - } - out << "\t\t" << "VkVertexInputBindingDescription " << pvertex_binding_descriptions_array << "[] = {" << pvertex_binding_descriptions_names << "};" << std::endl; - } - std::string pvertex_attribute_descriptions_array = "NULL"; - if (structInfo->pVertexAttributeDescriptions != NULL) { - pvertex_attribute_descriptions_array = "pVertexAttributeDescriptions_" + std::to_string(consumer.GetNextId()); - std::string pvertex_attribute_descriptions_names; - for (uint32_t idx = 0; idx < structInfo->vertexAttributeDescriptionCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pVertexAttributeDescriptions + idx != NULL) { - variable_name = GenerateStruct_VkVertexInputAttributeDescription(out, - structInfo->pVertexAttributeDescriptions + idx, - metaInfo->pVertexAttributeDescriptions->GetMetaStructPointer() + idx, - consumer); - } - pvertex_attribute_descriptions_names += variable_name + ", "; - } - out << "\t\t" << "VkVertexInputAttributeDescription " << pvertex_attribute_descriptions_array << "[] = {" << pvertex_attribute_descriptions_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineVertexInputStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexBindingDescriptionCount << "," << std::endl; - struct_body << "\t\t\t" << pvertex_binding_descriptions_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexAttributeDescriptionCount << "," << std::endl; - struct_body << "\t\t\t" << pvertex_attribute_descriptions_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineVertexInputStateCreateInfo"); - out << "\t\t" << "VkPipelineVertexInputStateCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->deviceMask << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupCommandBufferBeginInfo"); + out << "\t\t" << "VkDeviceGroupCommandBufferBeginInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineViewportStateCreateInfo(std::ostream &out, const VkPipelineViewportStateCreateInfo* structInfo, Decoded_VkPipelineViewportStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceGroupDeviceCreateInfo(std::ostream &out, const VkDeviceGroupDeviceCreateInfo* structInfo, Decoded_VkDeviceGroupDeviceCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pviewports_array = "NULL"; - if (structInfo->pViewports != NULL) { - pviewports_array = "pViewports_" + std::to_string(consumer.GetNextId()); - std::string pviewports_names; - for (uint32_t idx = 0; idx < structInfo->viewportCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pViewports + idx != NULL) { - variable_name = GenerateStruct_VkViewport(out, - structInfo->pViewports + idx, - metaInfo->pViewports->GetMetaStructPointer() + idx, - consumer); - } - pviewports_names += variable_name + ", "; + std::string pphysical_devices_array = "NULL"; + if (metaInfo->pPhysicalDevices.GetPointer() != NULL && structInfo->physicalDeviceCount > 0) { + pphysical_devices_array = "pphysical_devices_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_PHYSICAL_DEVICE)); + std::string pphysical_devices_values = toStringJoin(metaInfo->pPhysicalDevices.GetPointer(), + metaInfo->pPhysicalDevices.GetPointer() + structInfo->physicalDeviceCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->physicalDeviceCount == 1) { + pphysical_devices_array = "&" + pphysical_devices_values; + } else if (structInfo->physicalDeviceCount > 1) { + out << "\t\t" << "VkPhysicalDevice " << pphysical_devices_array << "[] = {" << pphysical_devices_values << "};" << std::endl; } - out << "\t\t" << "VkViewport " << pviewports_array << "[] = {" << pviewports_names << "};" << std::endl; - } - std::string pscissors_array = "NULL"; - if (structInfo->pScissors != NULL) { - pscissors_array = "pScissors_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkRect2D " << pscissors_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pScissors, structInfo->scissorCount) << ";" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineViewportStateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewportCount << "," << std::endl; - struct_body << "\t\t\t" << pviewports_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->scissorCount << "," << std::endl; - struct_body << "\t\t\t" << pscissors_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineViewportStateCreateInfo"); - out << "\t\t" << "VkPipelineViewportStateCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->physicalDeviceCount << "," << std::endl; + struct_body << "\t\t\t" << pphysical_devices_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupDeviceCreateInfo"); + out << "\t\t" << "VkDeviceGroupDeviceCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPushConstantRange(std::ostream &out, const VkPushConstantRange* structInfo, Decoded_VkPushConstantRange* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceGroupRenderPassBeginInfo(std::ostream &out, const VkDeviceGroupRenderPassBeginInfo* structInfo, Decoded_VkDeviceGroupRenderPassBeginInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkShaderStageFlags(" << structInfo->stageFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pushConstantRange"); - out << "\t\t" << "VkPushConstantRange " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pdevice_render_areas_array = "NULL"; + if (structInfo->pDeviceRenderAreas != NULL) { + pdevice_render_areas_array = "pDeviceRenderAreas_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkRect2D " << pdevice_render_areas_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDeviceRenderAreas, structInfo->deviceRenderAreaCount) << ";" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceRenderAreaCount << "," << std::endl; + struct_body << "\t\t\t" << pdevice_render_areas_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupRenderPassBeginInfo"); + out << "\t\t" << "VkDeviceGroupRenderPassBeginInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkQueryPoolCreateInfo(std::ostream &out, const VkQueryPoolCreateInfo* structInfo, Decoded_VkQueryPoolCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceGroupSubmitInfo(std::ostream &out, const VkDeviceGroupSubmitInfo* structInfo, Decoded_VkDeviceGroupSubmitInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pwait_semaphore_device_indices_array = "NULL"; + if (structInfo->pWaitSemaphoreDeviceIndices != NULL) { + pwait_semaphore_device_indices_array = "pWaitSemaphoreDeviceIndices_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pwait_semaphore_device_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pWaitSemaphoreDeviceIndices, structInfo->waitSemaphoreCount) << ";" << std::endl; + } + std::string pcommand_buffer_device_masks_array = "NULL"; + if (structInfo->pCommandBufferDeviceMasks != NULL) { + pcommand_buffer_device_masks_array = "pCommandBufferDeviceMasks_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pcommand_buffer_device_masks_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pCommandBufferDeviceMasks, structInfo->commandBufferCount) << ";" << std::endl; + } + std::string psignal_semaphore_device_indices_array = "NULL"; + if (structInfo->pSignalSemaphoreDeviceIndices != NULL) { + psignal_semaphore_device_indices_array = "pSignalSemaphoreDeviceIndices_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << psignal_semaphore_device_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pSignalSemaphoreDeviceIndices, structInfo->signalSemaphoreCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkQueryPoolCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkQueryType(" << structInfo->queryType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queryCount << "," << std::endl; - struct_body << "\t\t\t" << "VkQueryPipelineStatisticFlags(" << structInfo->pipelineStatistics << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "queryPoolCreateInfo"); - out << "\t\t" << "VkQueryPoolCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->waitSemaphoreCount << "," << std::endl; + struct_body << "\t\t\t" << pwait_semaphore_device_indices_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->commandBufferCount << "," << std::endl; + struct_body << "\t\t\t" << pcommand_buffer_device_masks_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->signalSemaphoreCount << "," << std::endl; + struct_body << "\t\t\t" << psignal_semaphore_device_indices_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupSubmitInfo"); + out << "\t\t" << "VkDeviceGroupSubmitInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkQueueFamilyProperties(std::ostream &out, const VkQueueFamilyProperties* structInfo, Decoded_VkQueueFamilyProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceQueueInfo2(std::ostream &out, const VkDeviceQueueInfo2* structInfo, Decoded_VkDeviceQueueInfo2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string min_image_transfer_granularity_info_var = GenerateStruct_VkExtent3D(out, - &structInfo->minImageTransferGranularity, - metaInfo->minImageTransferGranularity, - consumer); - struct_body << "\t" << "VkQueueFlags(" << structInfo->queueFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queueCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->timestampValidBits << "," << std::endl; - struct_body << "\t\t\t" << min_image_transfer_granularity_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyProperties"); - out << "\t\t" << "VkQueueFamilyProperties " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkDeviceQueueCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->queueFamilyIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->queueIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceQueueInfo2"); + out << "\t\t" << "VkDeviceQueueInfo2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRect2D(std::ostream &out, const VkRect2D* structInfo, Decoded_VkRect2D* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExportFenceCreateInfo(std::ostream &out, const VkExportFenceCreateInfo* structInfo, Decoded_VkExportFenceCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string offset_info_var = GenerateStruct_VkOffset2D(out, - &structInfo->offset, - metaInfo->offset, - consumer); - std::string extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->extent, - metaInfo->extent, - consumer); - struct_body << "\t" << offset_info_var << "," << std::endl; - struct_body << "\t\t\t" << extent_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "rect2D"); - out << "\t\t" << "VkRect2D " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlags(" << structInfo->handleTypes << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "exportFenceCreateInfo"); + out << "\t\t" << "VkExportFenceCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassBeginInfo(std::ostream &out, const VkRenderPassBeginInfo* structInfo, Decoded_VkRenderPassBeginInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExportMemoryAllocateInfo(std::ostream &out, const VkExportMemoryAllocateInfo* structInfo, Decoded_VkExportMemoryAllocateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string render_area_info_var = GenerateStruct_VkRect2D(out, - &structInfo->renderArea, - metaInfo->renderArea, - consumer); - std::string pclear_values_array = "NULL"; - if (structInfo->pClearValues != NULL) { - pclear_values_array = "pClearValues_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkClearValue " << pclear_values_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pClearValues, structInfo->clearValueCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->renderPass) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->framebuffer) << "," << std::endl; - struct_body << "\t\t\t" << render_area_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->clearValueCount << "," << std::endl; - struct_body << "\t\t\t" << pclear_values_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassBeginInfo"); - out << "\t\t" << "VkRenderPassBeginInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlags(" << structInfo->handleTypes << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "exportMemoryAllocateInfo"); + out << "\t\t" << "VkExportMemoryAllocateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassCreateInfo(std::ostream &out, const VkRenderPassCreateInfo* structInfo, Decoded_VkRenderPassCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExportSemaphoreCreateInfo(std::ostream &out, const VkExportSemaphoreCreateInfo* structInfo, Decoded_VkExportSemaphoreCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pattachments_array = "NULL"; - if (structInfo->pAttachments != NULL) { - pattachments_array = "pAttachments_" + std::to_string(consumer.GetNextId()); - std::string pattachments_names; - for (uint32_t idx = 0; idx < structInfo->attachmentCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pAttachments + idx != NULL) { - variable_name = GenerateStruct_VkAttachmentDescription(out, - structInfo->pAttachments + idx, - metaInfo->pAttachments->GetMetaStructPointer() + idx, - consumer); - } - pattachments_names += variable_name + ", "; - } - out << "\t\t" << "VkAttachmentDescription " << pattachments_array << "[] = {" << pattachments_names << "};" << std::endl; - } - std::string psubpasses_array = "NULL"; - if (structInfo->pSubpasses != NULL) { - psubpasses_array = "pSubpasses_" + std::to_string(consumer.GetNextId()); - std::string psubpasses_names; - for (uint32_t idx = 0; idx < structInfo->subpassCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pSubpasses + idx != NULL) { - variable_name = GenerateStruct_VkSubpassDescription(out, - structInfo->pSubpasses + idx, - metaInfo->pSubpasses->GetMetaStructPointer() + idx, - consumer); - } - psubpasses_names += variable_name + ", "; - } - out << "\t\t" << "VkSubpassDescription " << psubpasses_array << "[] = {" << psubpasses_names << "};" << std::endl; - } - std::string pdependencies_array = "NULL"; - if (structInfo->pDependencies != NULL) { - pdependencies_array = "pDependencies_" + std::to_string(consumer.GetNextId()); - std::string pdependencies_names; - for (uint32_t idx = 0; idx < structInfo->dependencyCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pDependencies + idx != NULL) { - variable_name = GenerateStruct_VkSubpassDependency(out, - structInfo->pDependencies + idx, - metaInfo->pDependencies->GetMetaStructPointer() + idx, - consumer); - } - pdependencies_names += variable_name + ", "; - } - out << "\t\t" << "VkSubpassDependency " << pdependencies_array << "[] = {" << pdependencies_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkRenderPassCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->attachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pattachments_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subpassCount << "," << std::endl; - struct_body << "\t\t\t" << psubpasses_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dependencyCount << "," << std::endl; - struct_body << "\t\t\t" << pdependencies_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassCreateInfo"); - out << "\t\t" << "VkRenderPassCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlags(" << structInfo->handleTypes << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "exportSemaphoreCreateInfo"); + out << "\t\t" << "VkExportSemaphoreCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSamplerCreateInfo(std::ostream &out, const VkSamplerCreateInfo* structInfo, Decoded_VkSamplerCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExternalBufferProperties(std::ostream &out, const VkExternalBufferProperties* structInfo, Decoded_VkExternalBufferProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string external_memory_properties_info_var = GenerateStruct_VkExternalMemoryProperties(out, + &structInfo->externalMemoryProperties, + metaInfo->externalMemoryProperties, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSamplerCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFilter(" << structInfo->magFilter << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFilter(" << structInfo->minFilter << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSamplerMipmapMode(" << structInfo->mipmapMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSamplerAddressMode(" << structInfo->addressModeU << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSamplerAddressMode(" << structInfo->addressModeV << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSamplerAddressMode(" << structInfo->addressModeW << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->mipLodBias << "," << std::endl; - struct_body << "\t\t\t" << structInfo->anisotropyEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxAnisotropy << "," << std::endl; - struct_body << "\t\t\t" << structInfo->compareEnable << "," << std::endl; - struct_body << "\t\t\t" << "VkCompareOp(" << structInfo->compareOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minLod << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxLod << "," << std::endl; - struct_body << "\t\t\t" << "VkBorderColor(" << structInfo->borderColor << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->unnormalizedCoordinates << ","; - std::string variable_name = consumer.AddStruct(struct_body, "samplerCreateInfo"); - out << "\t\t" << "VkSamplerCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << external_memory_properties_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "externalBufferProperties"); + out << "\t\t" << "VkExternalBufferProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSemaphoreCreateInfo(std::ostream &out, const VkSemaphoreCreateInfo* structInfo, Decoded_VkSemaphoreCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExternalFenceProperties(std::ostream &out, const VkExternalFenceProperties* structInfo, Decoded_VkExternalFenceProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSemaphoreCreateFlags(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "semaphoreCreateInfo"); - out << "\t\t" << "VkSemaphoreCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlags(" << structInfo->exportFromImportedHandleTypes << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlags(" << structInfo->compatibleHandleTypes << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalFenceFeatureFlags(" << structInfo->externalFenceFeatures << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "externalFenceProperties"); + out << "\t\t" << "VkExternalFenceProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkShaderModuleCreateInfo(std::ostream &out, const VkShaderModuleCreateInfo* structInfo, Decoded_VkShaderModuleCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExternalImageFormatProperties(std::ostream &out, const VkExternalImageFormatProperties* structInfo, Decoded_VkExternalImageFormatProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcode_array = "NULL"; - if (structInfo->pCode != NULL) { - pcode_array = "pCode_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pcode_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pCode, structInfo->codeSize / 4) << ";" << std::endl; - } + std::string external_memory_properties_info_var = GenerateStruct_VkExternalMemoryProperties(out, + &structInfo->externalMemoryProperties, + metaInfo->externalMemoryProperties, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderModuleCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->codeSize << "," << std::endl; - struct_body << "\t\t\t" << pcode_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "shaderModuleCreateInfo"); - out << "\t\t" << "VkShaderModuleCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << external_memory_properties_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "externalImageFormatProperties"); + out << "\t\t" << "VkExternalImageFormatProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSparseBufferMemoryBindInfo(std::ostream &out, const VkSparseBufferMemoryBindInfo* structInfo, Decoded_VkSparseBufferMemoryBindInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExternalMemoryBufferCreateInfo(std::ostream &out, const VkExternalMemoryBufferCreateInfo* structInfo, Decoded_VkExternalMemoryBufferCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pbinds_array = "NULL"; - if (structInfo->pBinds != NULL) { - pbinds_array = "pBinds_" + std::to_string(consumer.GetNextId()); - std::string pbinds_names; - for (uint32_t idx = 0; idx < structInfo->bindCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pBinds + idx != NULL) { - variable_name = GenerateStruct_VkSparseMemoryBind(out, - structInfo->pBinds + idx, - metaInfo->pBinds->GetMetaStructPointer() + idx, - consumer); - } - pbinds_names += variable_name + ", "; - } - out << "\t\t" << "VkSparseMemoryBind " << pbinds_array << "[] = {" << pbinds_names << "};" << std::endl; - } - struct_body << "\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bindCount << "," << std::endl; - struct_body << "\t\t\t" << pbinds_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "sparseBufferMemoryBindInfo"); - out << "\t\t" << "VkSparseBufferMemoryBindInfo " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlags(" << structInfo->handleTypes << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "externalMemoryBufferCreateInfo"); + out << "\t\t" << "VkExternalMemoryBufferCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSparseImageFormatProperties(std::ostream &out, const VkSparseImageFormatProperties* structInfo, Decoded_VkSparseImageFormatProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExternalMemoryImageCreateInfo(std::ostream &out, const VkExternalMemoryImageCreateInfo* structInfo, Decoded_VkExternalMemoryImageCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string image_granularity_info_var = GenerateStruct_VkExtent3D(out, - &structInfo->imageGranularity, - metaInfo->imageGranularity, - consumer); - struct_body << "\t" << "VkImageAspectFlags(" << structInfo->aspectMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << image_granularity_info_var << "," << std::endl; - struct_body << "\t\t\t" << "VkSparseImageFormatFlags(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "sparseImageFormatProperties"); - out << "\t\t" << "VkSparseImageFormatProperties " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlags(" << structInfo->handleTypes << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "externalMemoryImageCreateInfo"); + out << "\t\t" << "VkExternalMemoryImageCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSparseImageMemoryBind(std::ostream &out, const VkSparseImageMemoryBind* structInfo, Decoded_VkSparseImageMemoryBind* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExternalMemoryProperties(std::ostream &out, const VkExternalMemoryProperties* structInfo, Decoded_VkExternalMemoryProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string subresource_info_var = GenerateStruct_VkImageSubresource(out, - &structInfo->subresource, - metaInfo->subresource, - consumer); - std::string offset_info_var = GenerateStruct_VkOffset3D(out, - &structInfo->offset, - metaInfo->offset, - consumer); - std::string extent_info_var = GenerateStruct_VkExtent3D(out, - &structInfo->extent, - metaInfo->extent, - consumer); - struct_body << "\t" << subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << offset_info_var << "," << std::endl; - struct_body << "\t\t\t" << extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkSparseMemoryBindFlags(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "sparseImageMemoryBind"); - out << "\t\t" << "VkSparseImageMemoryBind " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkExternalMemoryFeatureFlags(" << structInfo->externalMemoryFeatures << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlags(" << structInfo->exportFromImportedHandleTypes << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlags(" << structInfo->compatibleHandleTypes << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "externalMemoryProperties"); + out << "\t\t" << "VkExternalMemoryProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSparseImageMemoryBindInfo(std::ostream &out, const VkSparseImageMemoryBindInfo* structInfo, Decoded_VkSparseImageMemoryBindInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExternalSemaphoreProperties(std::ostream &out, const VkExternalSemaphoreProperties* structInfo, Decoded_VkExternalSemaphoreProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pbinds_array = "NULL"; - if (structInfo->pBinds != NULL) { - pbinds_array = "pBinds_" + std::to_string(consumer.GetNextId()); - std::string pbinds_names; - for (uint32_t idx = 0; idx < structInfo->bindCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pBinds + idx != NULL) { - variable_name = GenerateStruct_VkSparseImageMemoryBind(out, - structInfo->pBinds + idx, - metaInfo->pBinds->GetMetaStructPointer() + idx, - consumer); - } - pbinds_names += variable_name + ", "; - } - out << "\t\t" << "VkSparseImageMemoryBind " << pbinds_array << "[] = {" << pbinds_names << "};" << std::endl; - } - struct_body << "\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bindCount << "," << std::endl; - struct_body << "\t\t\t" << pbinds_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "sparseImageMemoryBindInfo"); - out << "\t\t" << "VkSparseImageMemoryBindInfo " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlags(" << structInfo->exportFromImportedHandleTypes << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlags(" << structInfo->compatibleHandleTypes << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalSemaphoreFeatureFlags(" << structInfo->externalSemaphoreFeatures << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "externalSemaphoreProperties"); + out << "\t\t" << "VkExternalSemaphoreProperties " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkFormatProperties2(std::ostream &out, const VkFormatProperties2* structInfo, Decoded_VkFormatProperties2* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string format_properties_info_var = GenerateStruct_VkFormatProperties(out, + &structInfo->formatProperties, + metaInfo->formatProperties, + consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << format_properties_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "formatProperties2"); + out << "\t\t" << "VkFormatProperties2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSparseImageMemoryRequirements(std::ostream &out, const VkSparseImageMemoryRequirements* structInfo, Decoded_VkSparseImageMemoryRequirements* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageFormatProperties2(std::ostream &out, const VkImageFormatProperties2* structInfo, Decoded_VkImageFormatProperties2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string format_properties_info_var = GenerateStruct_VkSparseImageFormatProperties(out, - &structInfo->formatProperties, - metaInfo->formatProperties, + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string image_format_properties_info_var = GenerateStruct_VkImageFormatProperties(out, + &structInfo->imageFormatProperties, + metaInfo->imageFormatProperties, consumer); - struct_body << "\t" << format_properties_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageMipTailFirstLod << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageMipTailSize << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageMipTailOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageMipTailStride << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "sparseImageMemoryRequirements"); - out << "\t\t" << "VkSparseImageMemoryRequirements " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << image_format_properties_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageFormatProperties2"); + out << "\t\t" << "VkImageFormatProperties2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSparseImageOpaqueMemoryBindInfo(std::ostream &out, const VkSparseImageOpaqueMemoryBindInfo* structInfo, Decoded_VkSparseImageOpaqueMemoryBindInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageMemoryRequirementsInfo2(std::ostream &out, const VkImageMemoryRequirementsInfo2* structInfo, Decoded_VkImageMemoryRequirementsInfo2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pbinds_array = "NULL"; - if (structInfo->pBinds != NULL) { - pbinds_array = "pBinds_" + std::to_string(consumer.GetNextId()); - std::string pbinds_names; - for (uint32_t idx = 0; idx < structInfo->bindCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pBinds + idx != NULL) { - variable_name = GenerateStruct_VkSparseMemoryBind(out, - structInfo->pBinds + idx, - metaInfo->pBinds->GetMetaStructPointer() + idx, - consumer); - } - pbinds_names += variable_name + ", "; - } - out << "\t\t" << "VkSparseMemoryBind " << pbinds_array << "[] = {" << pbinds_names << "};" << std::endl; - } - struct_body << "\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bindCount << "," << std::endl; - struct_body << "\t\t\t" << pbinds_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "sparseImageOpaqueMemoryBindInfo"); - out << "\t\t" << "VkSparseImageOpaqueMemoryBindInfo " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageMemoryRequirementsInfo2"); + out << "\t\t" << "VkImageMemoryRequirementsInfo2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSparseMemoryBind(std::ostream &out, const VkSparseMemoryBind* structInfo, Decoded_VkSparseMemoryBind* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImagePlaneMemoryRequirementsInfo(std::ostream &out, const VkImagePlaneMemoryRequirementsInfo* structInfo, Decoded_VkImagePlaneMemoryRequirementsInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->resourceOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkSparseMemoryBindFlags(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "sparseMemoryBind"); - out << "\t\t" << "VkSparseMemoryBind " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkImageAspectFlagBits(" << structInfo->planeAspect << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imagePlaneMemoryRequirementsInfo"); + out << "\t\t" << "VkImagePlaneMemoryRequirementsInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSpecializationInfo(std::ostream &out, const VkSpecializationInfo* structInfo, Decoded_VkSpecializationInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageSparseMemoryRequirementsInfo2(std::ostream &out, const VkImageSparseMemoryRequirementsInfo2* structInfo, Decoded_VkImageSparseMemoryRequirementsInfo2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pmap_entries_array = "NULL"; - if (structInfo->pMapEntries != NULL) { - pmap_entries_array = "pMapEntries_" + std::to_string(consumer.GetNextId()); - std::string pmap_entries_names; - for (uint32_t idx = 0; idx < structInfo->mapEntryCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pMapEntries + idx != NULL) { - variable_name = GenerateStruct_VkSpecializationMapEntry(out, - structInfo->pMapEntries + idx, - metaInfo->pMapEntries->GetMetaStructPointer() + idx, - consumer); - } - pmap_entries_names += variable_name + ", "; - } - out << "\t\t" << "VkSpecializationMapEntry " << pmap_entries_array << "[] = {" << pmap_entries_names << "};" << std::endl; - } - std::string pdata_array = "NULL"; - if (structInfo->pData != NULL) { - std::string pdata_values; - for (uint32_t idx0 = 0; idx0 < structInfo->dataSize; ++idx0) { - pdata_values += std::to_string(reinterpret_cast(structInfo->pData)[idx0]) + ", "; - } - pdata_array = "pData_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint8_t " << pdata_array << "[] = {" << pdata_values << "};" << std::endl; - } - struct_body << "\t" << structInfo->mapEntryCount << "," << std::endl; - struct_body << "\t\t\t" << pmap_entries_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dataSize << "," << std::endl; - struct_body << "\t\t\t" << pdata_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "specializationInfo"); - out << "\t\t" << "VkSpecializationInfo " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageSparseMemoryRequirementsInfo2"); + out << "\t\t" << "VkImageSparseMemoryRequirementsInfo2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSpecializationMapEntry(std::ostream &out, const VkSpecializationMapEntry* structInfo, Decoded_VkSpecializationMapEntry* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageViewUsageCreateInfo(std::ostream &out, const VkImageViewUsageCreateInfo* structInfo, Decoded_VkImageViewUsageCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->constantID << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << ","; - std::string variable_name = consumer.AddStruct(struct_body, "specializationMapEntry"); - out << "\t\t" << "VkSpecializationMapEntry " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->usage << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageViewUsageCreateInfo"); + out << "\t\t" << "VkImageViewUsageCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkStencilOpState(std::ostream &out, const VkStencilOpState* structInfo, Decoded_VkStencilOpState* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkInputAttachmentAspectReference(std::ostream &out, const VkInputAttachmentAspectReference* structInfo, Decoded_VkInputAttachmentAspectReference* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkStencilOp(" << structInfo->failOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkStencilOp(" << structInfo->passOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkStencilOp(" << structInfo->depthFailOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkCompareOp(" << structInfo->compareOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->compareMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->writeMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reference << ","; - std::string variable_name = consumer.AddStruct(struct_body, "stencilOpState"); - out << "\t\t" << "VkStencilOpState " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->subpass << "," << std::endl; + struct_body << "\t\t\t" << structInfo->inputAttachmentIndex << "," << std::endl; + struct_body << "\t\t\t" << "VkImageAspectFlags(" << structInfo->aspectMask << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "inputAttachmentAspectReference"); + out << "\t\t" << "VkInputAttachmentAspectReference " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSubpassDependency(std::ostream &out, const VkSubpassDependency* structInfo, Decoded_VkSubpassDependency* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryDedicatedAllocateInfo(std::ostream &out, const VkMemoryDedicatedAllocateInfo* structInfo, Decoded_VkMemoryDedicatedAllocateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->srcSubpass << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstSubpass << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlags(" << structInfo->srcStageMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlags(" << structInfo->dstStageMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->srcAccessMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->dstAccessMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkDependencyFlags(" << structInfo->dependencyFlags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "subpassDependency"); - out << "\t\t" << "VkSubpassDependency " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryDedicatedAllocateInfo"); + out << "\t\t" << "VkMemoryDedicatedAllocateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSubpassDescription(std::ostream &out, const VkSubpassDescription* structInfo, Decoded_VkSubpassDescription* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryDedicatedRequirements(std::ostream &out, const VkMemoryDedicatedRequirements* structInfo, Decoded_VkMemoryDedicatedRequirements* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pinput_attachments_array = "NULL"; - if (structInfo->pInputAttachments != NULL) { - pinput_attachments_array = "pInputAttachments_" + std::to_string(consumer.GetNextId()); - std::string pinput_attachments_names; - for (uint32_t idx = 0; idx < structInfo->inputAttachmentCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pInputAttachments + idx != NULL) { - variable_name = GenerateStruct_VkAttachmentReference(out, - structInfo->pInputAttachments + idx, - metaInfo->pInputAttachments->GetMetaStructPointer() + idx, - consumer); - } - pinput_attachments_names += variable_name + ", "; - } - out << "\t\t" << "VkAttachmentReference " << pinput_attachments_array << "[] = {" << pinput_attachments_names << "};" << std::endl; - } - std::string pcolor_attachments_array = "NULL"; - if (structInfo->pColorAttachments != NULL) { - pcolor_attachments_array = "pColorAttachments_" + std::to_string(consumer.GetNextId()); - std::string pcolor_attachments_names; - for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pColorAttachments + idx != NULL) { - variable_name = GenerateStruct_VkAttachmentReference(out, - structInfo->pColorAttachments + idx, - metaInfo->pColorAttachments->GetMetaStructPointer() + idx, - consumer); - } - pcolor_attachments_names += variable_name + ", "; - } - out << "\t\t" << "VkAttachmentReference " << pcolor_attachments_array << "[] = {" << pcolor_attachments_names << "};" << std::endl; - } - std::string presolve_attachments_array = "NULL"; - if (structInfo->pResolveAttachments != NULL) { - presolve_attachments_array = "pResolveAttachments_" + std::to_string(consumer.GetNextId()); - std::string presolve_attachments_names; - for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pResolveAttachments + idx != NULL) { - variable_name = GenerateStruct_VkAttachmentReference(out, - structInfo->pResolveAttachments + idx, - metaInfo->pResolveAttachments->GetMetaStructPointer() + idx, - consumer); - } - presolve_attachments_names += variable_name + ", "; - } - out << "\t\t" << "VkAttachmentReference " << presolve_attachments_array << "[] = {" << presolve_attachments_names << "};" << std::endl; - } - std::string pdepth_stencil_attachment_struct = "NULL"; - if (structInfo->pDepthStencilAttachment != NULL) { - pdepth_stencil_attachment_struct = GenerateStruct_VkAttachmentReference(out, - structInfo->pDepthStencilAttachment, - metaInfo->pDepthStencilAttachment->GetMetaStructPointer(), - consumer); - pdepth_stencil_attachment_struct.insert(0, "&"); - } - std::string ppreserve_attachments_array = "NULL"; - if (structInfo->pPreserveAttachments != NULL) { - ppreserve_attachments_array = "pPreserveAttachments_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << ppreserve_attachments_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pPreserveAttachments, structInfo->preserveAttachmentCount) << ";" << std::endl; - } - struct_body << "\t" << "VkSubpassDescriptionFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineBindPoint(" << structInfo->pipelineBindPoint << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->inputAttachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pinput_attachments_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pcolor_attachments_array << "," << std::endl; - struct_body << "\t\t\t" << presolve_attachments_array << "," << std::endl; - struct_body << "\t\t\t" << pdepth_stencil_attachment_struct << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preserveAttachmentCount << "," << std::endl; - struct_body << "\t\t\t" << ppreserve_attachments_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "subpassDescription"); - out << "\t\t" << "VkSubpassDescription " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->prefersDedicatedAllocation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->requiresDedicatedAllocation << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryDedicatedRequirements"); + out << "\t\t" << "VkMemoryDedicatedRequirements " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkMemoryRequirements2(std::ostream &out, const VkMemoryRequirements2* structInfo, Decoded_VkMemoryRequirements2* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string memory_requirements_info_var = GenerateStruct_VkMemoryRequirements(out, + &structInfo->memoryRequirements, + metaInfo->memoryRequirements, + consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << memory_requirements_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryRequirements2"); + out << "\t\t" << variable_name << " = {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSubresourceLayout(std::ostream &out, const VkSubresourceLayout* structInfo, Decoded_VkSubresourceLayout* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevice16BitStorageFeatures(std::ostream &out, const VkPhysicalDevice16BitStorageFeatures* structInfo, Decoded_VkPhysicalDevice16BitStorageFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->offset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->rowPitch << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->arrayPitch << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthPitch << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "subresourceLayout"); - out << "\t\t" << "VkSubresourceLayout " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->storageBuffer16BitAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->uniformAndStorageBuffer16BitAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->storagePushConstant16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->storageInputOutput16 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevice16BitStorageFeatures"); + out << "\t\t" << "VkPhysicalDevice16BitStorageFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVertexInputAttributeDescription(std::ostream &out, const VkVertexInputAttributeDescription* structInfo, Decoded_VkVertexInputAttributeDescription* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExternalBufferInfo(std::ostream &out, const VkPhysicalDeviceExternalBufferInfo* structInfo, Decoded_VkPhysicalDeviceExternalBufferInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->location << "," << std::endl; - struct_body << "\t\t\t" << structInfo->binding << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << ","; - std::string variable_name = consumer.AddStruct(struct_body, "vertexInputAttributeDescription"); - out << "\t\t" << "VkVertexInputAttributeDescription " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkBufferCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBufferUsageFlags(" << structInfo->usage << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalBufferInfo"); + out << "\t\t" << "VkPhysicalDeviceExternalBufferInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVertexInputBindingDescription(std::ostream &out, const VkVertexInputBindingDescription* structInfo, Decoded_VkVertexInputBindingDescription* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExternalFenceInfo(std::ostream &out, const VkPhysicalDeviceExternalFenceInfo* structInfo, Decoded_VkPhysicalDeviceExternalFenceInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->binding << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stride << "," << std::endl; - struct_body << "\t\t\t" << "VkVertexInputRate(" << structInfo->inputRate << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "vertexInputBindingDescription"); - out << "\t\t" << "VkVertexInputBindingDescription " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalFenceInfo"); + out << "\t\t" << "VkPhysicalDeviceExternalFenceInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkViewport(std::ostream &out, const VkViewport* structInfo, Decoded_VkViewport* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExternalImageFormatInfo(std::ostream &out, const VkPhysicalDeviceExternalImageFormatInfo* structInfo, Decoded_VkPhysicalDeviceExternalImageFormatInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->x << "," << std::endl; - struct_body << "\t\t\t" << structInfo->y << "," << std::endl; - struct_body << "\t\t\t" << structInfo->width << "," << std::endl; - struct_body << "\t\t\t" << structInfo->height << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minDepth << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDepth << ","; - std::string variable_name = consumer.AddStruct(struct_body, "viewport"); - out << "\t\t" << "VkViewport " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalImageFormatInfo"); + out << "\t\t" << "VkPhysicalDeviceExternalImageFormatInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBindBufferMemoryDeviceGroupInfo(std::ostream &out, const VkBindBufferMemoryDeviceGroupInfo* structInfo, Decoded_VkBindBufferMemoryDeviceGroupInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExternalSemaphoreInfo(std::ostream &out, const VkPhysicalDeviceExternalSemaphoreInfo* structInfo, Decoded_VkPhysicalDeviceExternalSemaphoreInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdevice_indices_array = "NULL"; - if (structInfo->pDeviceIndices != NULL) { - pdevice_indices_array = "pDeviceIndices_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pdevice_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDeviceIndices, structInfo->deviceIndexCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceIndexCount << "," << std::endl; - struct_body << "\t\t\t" << pdevice_indices_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bindBufferMemoryDeviceGroupInfo"); - out << "\t\t" << "VkBindBufferMemoryDeviceGroupInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalSemaphoreInfo"); + out << "\t\t" << "VkPhysicalDeviceExternalSemaphoreInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBindBufferMemoryInfo(std::ostream &out, const VkBindBufferMemoryInfo* structInfo, Decoded_VkBindBufferMemoryInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFeatures2(std::ostream &out, const VkPhysicalDeviceFeatures2* structInfo, Decoded_VkPhysicalDeviceFeatures2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string features_info_var = GenerateStruct_VkPhysicalDeviceFeatures(out, + &structInfo->features, + metaInfo->features, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryOffset << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bindBufferMemoryInfo"); - out << "\t\t" << "VkBindBufferMemoryInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << features_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFeatures2"); + out << "\t\t" << "VkPhysicalDeviceFeatures2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBindImageMemoryDeviceGroupInfo(std::ostream &out, const VkBindImageMemoryDeviceGroupInfo* structInfo, Decoded_VkBindImageMemoryDeviceGroupInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceGroupProperties(std::ostream &out, const VkPhysicalDeviceGroupProperties* structInfo, Decoded_VkPhysicalDeviceGroupProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdevice_indices_array = "NULL"; - if (structInfo->pDeviceIndices != NULL) { - pdevice_indices_array = "pDeviceIndices_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pdevice_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDeviceIndices, structInfo->deviceIndexCount) << ";" << std::endl; - } - std::string psplit_instance_bind_regions_array = "NULL"; - if (structInfo->pSplitInstanceBindRegions != NULL) { - psplit_instance_bind_regions_array = "pSplitInstanceBindRegions_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkRect2D " << psplit_instance_bind_regions_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pSplitInstanceBindRegions, structInfo->splitInstanceBindRegionCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceIndexCount << "," << std::endl; - struct_body << "\t\t\t" << pdevice_indices_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->splitInstanceBindRegionCount << "," << std::endl; - struct_body << "\t\t\t" << psplit_instance_bind_regions_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bindImageMemoryDeviceGroupInfo"); - out << "\t\t" << "VkBindImageMemoryDeviceGroupInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->physicalDeviceCount << "," << std::endl; + out << "\t\t" << "// TODO: Support physicalDevices (output with array length value?) argument." << std::endl; + struct_body << "\t\t\t" << structInfo->subsetAllocation << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceGroupProperties"); + out << "\t\t" << "VkPhysicalDeviceGroupProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBindImageMemoryInfo(std::ostream &out, const VkBindImageMemoryInfo* structInfo, Decoded_VkBindImageMemoryInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceIDProperties(std::ostream &out, const VkPhysicalDeviceIDProperties* structInfo, Decoded_VkPhysicalDeviceIDProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryOffset << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bindImageMemoryInfo"); - out << "\t\t" << "VkBindImageMemoryInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->deviceUUID[0]), VK_UUID_SIZE) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->driverUUID[0]), VK_UUID_SIZE) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->deviceLUID[0]), VK_LUID_SIZE) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceNodeMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceLUIDValid << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceIDProperties"); + out << "\t\t" << "VkPhysicalDeviceIDProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBindImagePlaneMemoryInfo(std::ostream &out, const VkBindImagePlaneMemoryInfo* structInfo, Decoded_VkBindImagePlaneMemoryInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceImageFormatInfo2(std::ostream &out, const VkPhysicalDeviceImageFormatInfo2* structInfo, Decoded_VkPhysicalDeviceImageFormatInfo2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImageAspectFlagBits(" << structInfo->planeAspect << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bindImagePlaneMemoryInfo"); - out << "\t\t" << "VkBindImagePlaneMemoryInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageType(" << structInfo->type << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageTiling(" << structInfo->tiling << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->usage << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageCreateFlags(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageFormatInfo2"); + out << "\t\t" << "VkPhysicalDeviceImageFormatInfo2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBufferMemoryRequirementsInfo2(std::ostream &out, const VkBufferMemoryRequirementsInfo2* structInfo, Decoded_VkBufferMemoryRequirementsInfo2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMaintenance3Properties(std::ostream &out, const VkPhysicalDeviceMaintenance3Properties* structInfo, Decoded_VkPhysicalDeviceMaintenance3Properties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bufferMemoryRequirementsInfo2"); - out << "\t\t" << "VkBufferMemoryRequirementsInfo2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerSetDescriptors << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxMemoryAllocationSize << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance3Properties"); + out << "\t\t" << "VkPhysicalDeviceMaintenance3Properties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDescriptorSetLayoutSupport(std::ostream &out, const VkDescriptorSetLayoutSupport* structInfo, Decoded_VkDescriptorSetLayoutSupport* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMemoryProperties2(std::ostream &out, const VkPhysicalDeviceMemoryProperties2* structInfo, Decoded_VkPhysicalDeviceMemoryProperties2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string memory_properties_info_var = GenerateStruct_VkPhysicalDeviceMemoryProperties(out, + &structInfo->memoryProperties, + metaInfo->memoryProperties, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->supported << ","; - std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetLayoutSupport"); - out << "\t\t" << "VkDescriptorSetLayoutSupport " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << memory_properties_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMemoryProperties2"); + out << "\t\t" << "VkPhysicalDeviceMemoryProperties2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDescriptorUpdateTemplateCreateInfo(std::ostream &out, const VkDescriptorUpdateTemplateCreateInfo* structInfo, Decoded_VkDescriptorUpdateTemplateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMultiviewFeatures(std::ostream &out, const VkPhysicalDeviceMultiviewFeatures* structInfo, Decoded_VkPhysicalDeviceMultiviewFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdescriptor_update_entries_array = "NULL"; - if (structInfo->pDescriptorUpdateEntries != NULL) { - pdescriptor_update_entries_array = "pDescriptorUpdateEntries_" + std::to_string(consumer.GetNextId()); - std::string pdescriptor_update_entries_names; - for (uint32_t idx = 0; idx < structInfo->descriptorUpdateEntryCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pDescriptorUpdateEntries + idx != NULL) { - variable_name = GenerateStruct_VkDescriptorUpdateTemplateEntry(out, - structInfo->pDescriptorUpdateEntries + idx, - metaInfo->pDescriptorUpdateEntries->GetMetaStructPointer() + idx, - consumer); - } - pdescriptor_update_entries_names += variable_name + ", "; - } - out << "\t\t" << "VkDescriptorUpdateTemplateEntry " << pdescriptor_update_entries_array << "[] = {" << pdescriptor_update_entries_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDescriptorUpdateTemplateCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorUpdateEntryCount << "," << std::endl; - struct_body << "\t\t\t" << pdescriptor_update_entries_array << "," << std::endl; - struct_body << "\t\t\t" << "VkDescriptorUpdateTemplateType(" << structInfo->templateType << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->descriptorSetLayout) << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineBindPoint(" << structInfo->pipelineBindPoint << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipelineLayout) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->set << ","; - std::string variable_name = consumer.AddStruct(struct_body, "descriptorUpdateTemplateCreateInfo"); - out << "\t\t" << "VkDescriptorUpdateTemplateCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->multiview << "," << std::endl; + struct_body << "\t\t\t" << structInfo->multiviewGeometryShader << "," << std::endl; + struct_body << "\t\t\t" << structInfo->multiviewTessellationShader << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMultiviewFeatures"); + out << "\t\t" << "VkPhysicalDeviceMultiviewFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceGroupBindSparseInfo(std::ostream &out, const VkDeviceGroupBindSparseInfo* structInfo, Decoded_VkDeviceGroupBindSparseInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMultiviewProperties(std::ostream &out, const VkPhysicalDeviceMultiviewProperties* structInfo, Decoded_VkPhysicalDeviceMultiviewProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->resourceDeviceIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryDeviceIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupBindSparseInfo"); - out << "\t\t" << "VkDeviceGroupBindSparseInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxMultiviewViewCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxMultiviewInstanceIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMultiviewProperties"); + out << "\t\t" << "VkPhysicalDeviceMultiviewProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceGroupCommandBufferBeginInfo(std::ostream &out, const VkDeviceGroupCommandBufferBeginInfo* structInfo, Decoded_VkDeviceGroupCommandBufferBeginInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePointClippingProperties(std::ostream &out, const VkPhysicalDevicePointClippingProperties* structInfo, Decoded_VkPhysicalDevicePointClippingProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceMask << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupCommandBufferBeginInfo"); - out << "\t\t" << "VkDeviceGroupCommandBufferBeginInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPointClippingBehavior(" << structInfo->pointClippingBehavior << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePointClippingProperties"); + out << "\t\t" << "VkPhysicalDevicePointClippingProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceGroupDeviceCreateInfo(std::ostream &out, const VkDeviceGroupDeviceCreateInfo* structInfo, Decoded_VkDeviceGroupDeviceCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceProperties2(std::ostream &out, const VkPhysicalDeviceProperties2* structInfo, Decoded_VkPhysicalDeviceProperties2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pphysical_devices_array = "NULL"; - if (metaInfo->pPhysicalDevices.GetPointer() != NULL && structInfo->physicalDeviceCount > 0) { - pphysical_devices_array = "pphysical_devices_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_PHYSICAL_DEVICE)); - std::string pphysical_devices_values = toStringJoin(metaInfo->pPhysicalDevices.GetPointer(), - metaInfo->pPhysicalDevices.GetPointer() + structInfo->physicalDeviceCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->physicalDeviceCount == 1) { - pphysical_devices_array = "&" + pphysical_devices_values; - } else if (structInfo->physicalDeviceCount > 1) { - out << "\t\t" << "VkPhysicalDevice " << pphysical_devices_array << "[] = {" << pphysical_devices_values << "};" << std::endl; - } - } + std::string properties_info_var = GenerateStruct_VkPhysicalDeviceProperties(out, + &structInfo->properties, + metaInfo->properties, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->physicalDeviceCount << "," << std::endl; - struct_body << "\t\t\t" << pphysical_devices_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupDeviceCreateInfo"); - out << "\t\t" << "VkDeviceGroupDeviceCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << properties_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceProperties2"); + out << "\t\t" << "VkPhysicalDeviceProperties2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceGroupRenderPassBeginInfo(std::ostream &out, const VkDeviceGroupRenderPassBeginInfo* structInfo, Decoded_VkDeviceGroupRenderPassBeginInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceProtectedMemoryFeatures(std::ostream &out, const VkPhysicalDeviceProtectedMemoryFeatures* structInfo, Decoded_VkPhysicalDeviceProtectedMemoryFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdevice_render_areas_array = "NULL"; - if (structInfo->pDeviceRenderAreas != NULL) { - pdevice_render_areas_array = "pDeviceRenderAreas_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkRect2D " << pdevice_render_areas_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDeviceRenderAreas, structInfo->deviceRenderAreaCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceRenderAreaCount << "," << std::endl; - struct_body << "\t\t\t" << pdevice_render_areas_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupRenderPassBeginInfo"); - out << "\t\t" << "VkDeviceGroupRenderPassBeginInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->protectedMemory << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceProtectedMemoryFeatures"); + out << "\t\t" << "VkPhysicalDeviceProtectedMemoryFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceGroupSubmitInfo(std::ostream &out, const VkDeviceGroupSubmitInfo* structInfo, Decoded_VkDeviceGroupSubmitInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceProtectedMemoryProperties(std::ostream &out, const VkPhysicalDeviceProtectedMemoryProperties* structInfo, Decoded_VkPhysicalDeviceProtectedMemoryProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pwait_semaphore_device_indices_array = "NULL"; - if (structInfo->pWaitSemaphoreDeviceIndices != NULL) { - pwait_semaphore_device_indices_array = "pWaitSemaphoreDeviceIndices_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pwait_semaphore_device_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pWaitSemaphoreDeviceIndices, structInfo->waitSemaphoreCount) << ";" << std::endl; - } - std::string pcommand_buffer_device_masks_array = "NULL"; - if (structInfo->pCommandBufferDeviceMasks != NULL) { - pcommand_buffer_device_masks_array = "pCommandBufferDeviceMasks_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pcommand_buffer_device_masks_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pCommandBufferDeviceMasks, structInfo->commandBufferCount) << ";" << std::endl; - } - std::string psignal_semaphore_device_indices_array = "NULL"; - if (structInfo->pSignalSemaphoreDeviceIndices != NULL) { - psignal_semaphore_device_indices_array = "pSignalSemaphoreDeviceIndices_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << psignal_semaphore_device_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pSignalSemaphoreDeviceIndices, structInfo->signalSemaphoreCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->waitSemaphoreCount << "," << std::endl; - struct_body << "\t\t\t" << pwait_semaphore_device_indices_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->commandBufferCount << "," << std::endl; - struct_body << "\t\t\t" << pcommand_buffer_device_masks_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->signalSemaphoreCount << "," << std::endl; - struct_body << "\t\t\t" << psignal_semaphore_device_indices_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupSubmitInfo"); - out << "\t\t" << "VkDeviceGroupSubmitInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->protectedNoFault << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceProtectedMemoryProperties"); + out << "\t\t" << "VkPhysicalDeviceProtectedMemoryProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceQueueInfo2(std::ostream &out, const VkDeviceQueueInfo2* structInfo, Decoded_VkDeviceQueueInfo2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceSamplerYcbcrConversionFeatures(std::ostream &out, const VkPhysicalDeviceSamplerYcbcrConversionFeatures* structInfo, Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDeviceQueueCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queueFamilyIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queueIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceQueueInfo2"); - out << "\t\t" << "VkDeviceQueueInfo2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->samplerYcbcrConversion << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSamplerYcbcrConversionFeatures"); + out << "\t\t" << "VkPhysicalDeviceSamplerYcbcrConversionFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExportFenceCreateInfo(std::ostream &out, const VkExportFenceCreateInfo* structInfo, Decoded_VkExportFenceCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderDrawParametersFeatures(std::ostream &out, const VkPhysicalDeviceShaderDrawParametersFeatures* structInfo, Decoded_VkPhysicalDeviceShaderDrawParametersFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlags(" << structInfo->handleTypes << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "exportFenceCreateInfo"); - out << "\t\t" << "VkExportFenceCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDrawParameters << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderDrawParametersFeatures"); + out << "\t\t" << "VkPhysicalDeviceShaderDrawParametersFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExportMemoryAllocateInfo(std::ostream &out, const VkExportMemoryAllocateInfo* structInfo, Decoded_VkExportMemoryAllocateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceSparseImageFormatInfo2(std::ostream &out, const VkPhysicalDeviceSparseImageFormatInfo2* structInfo, Decoded_VkPhysicalDeviceSparseImageFormatInfo2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlags(" << structInfo->handleTypes << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "exportMemoryAllocateInfo"); - out << "\t\t" << "VkExportMemoryAllocateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageType(" << structInfo->type << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->samples << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->usage << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageTiling(" << structInfo->tiling << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSparseImageFormatInfo2"); + out << "\t\t" << "VkPhysicalDeviceSparseImageFormatInfo2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExportSemaphoreCreateInfo(std::ostream &out, const VkExportSemaphoreCreateInfo* structInfo, Decoded_VkExportSemaphoreCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceSubgroupProperties(std::ostream &out, const VkPhysicalDeviceSubgroupProperties* structInfo, Decoded_VkPhysicalDeviceSubgroupProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlags(" << structInfo->handleTypes << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "exportSemaphoreCreateInfo"); - out << "\t\t" << "VkExportSemaphoreCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->subgroupSize << "," << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->supportedStages << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSubgroupFeatureFlags(" << structInfo->supportedOperations << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->quadOperationsInAllStages << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSubgroupProperties"); + out << "\t\t" << "VkPhysicalDeviceSubgroupProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExternalBufferProperties(std::ostream &out, const VkExternalBufferProperties* structInfo, Decoded_VkExternalBufferProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVariablePointersFeatures(std::ostream &out, const VkPhysicalDeviceVariablePointersFeatures* structInfo, Decoded_VkPhysicalDeviceVariablePointersFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string external_memory_properties_info_var = GenerateStruct_VkExternalMemoryProperties(out, - &structInfo->externalMemoryProperties, - metaInfo->externalMemoryProperties, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << external_memory_properties_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "externalBufferProperties"); - out << "\t\t" << "VkExternalBufferProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->variablePointersStorageBuffer << "," << std::endl; + struct_body << "\t\t\t" << structInfo->variablePointers << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVariablePointersFeatures"); + out << "\t\t" << "VkPhysicalDeviceVariablePointersFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExternalFenceProperties(std::ostream &out, const VkExternalFenceProperties* structInfo, Decoded_VkExternalFenceProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineTessellationDomainOriginStateCreateInfo(std::ostream &out, const VkPipelineTessellationDomainOriginStateCreateInfo* structInfo, Decoded_VkPipelineTessellationDomainOriginStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlags(" << structInfo->exportFromImportedHandleTypes << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlags(" << structInfo->compatibleHandleTypes << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalFenceFeatureFlags(" << structInfo->externalFenceFeatures << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "externalFenceProperties"); - out << "\t\t" << "VkExternalFenceProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkTessellationDomainOrigin(" << structInfo->domainOrigin << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineTessellationDomainOriginStateCreateInfo"); + out << "\t\t" << "VkPipelineTessellationDomainOriginStateCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExternalImageFormatProperties(std::ostream &out, const VkExternalImageFormatProperties* structInfo, Decoded_VkExternalImageFormatProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkProtectedSubmitInfo(std::ostream &out, const VkProtectedSubmitInfo* structInfo, Decoded_VkProtectedSubmitInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string external_memory_properties_info_var = GenerateStruct_VkExternalMemoryProperties(out, - &structInfo->externalMemoryProperties, - metaInfo->externalMemoryProperties, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << external_memory_properties_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "externalImageFormatProperties"); - out << "\t\t" << "VkExternalImageFormatProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->protectedSubmit << ","; + std::string variable_name = consumer.AddStruct(struct_body, "protectedSubmitInfo"); + out << "\t\t" << "VkProtectedSubmitInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExternalMemoryBufferCreateInfo(std::ostream &out, const VkExternalMemoryBufferCreateInfo* structInfo, Decoded_VkExternalMemoryBufferCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkQueueFamilyProperties2(std::ostream &out, const VkQueueFamilyProperties2* structInfo, Decoded_VkQueueFamilyProperties2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string queue_family_properties_info_var = GenerateStruct_VkQueueFamilyProperties(out, + &structInfo->queueFamilyProperties, + metaInfo->queueFamilyProperties, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlags(" << structInfo->handleTypes << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "externalMemoryBufferCreateInfo"); - out << "\t\t" << "VkExternalMemoryBufferCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << queue_family_properties_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyProperties2"); + out << "\t\t" << "VkQueueFamilyProperties2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExternalMemoryImageCreateInfo(std::ostream &out, const VkExternalMemoryImageCreateInfo* structInfo, Decoded_VkExternalMemoryImageCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassInputAttachmentAspectCreateInfo(std::ostream &out, const VkRenderPassInputAttachmentAspectCreateInfo* structInfo, Decoded_VkRenderPassInputAttachmentAspectCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string paspect_references_array = "NULL"; + if (structInfo->pAspectReferences != NULL) { + paspect_references_array = "pAspectReferences_" + std::to_string(consumer.GetNextId()); + std::string paspect_references_names; + for (uint32_t idx = 0; idx < structInfo->aspectReferenceCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pAspectReferences + idx != NULL) { + variable_name = GenerateStruct_VkInputAttachmentAspectReference(out, + structInfo->pAspectReferences + idx, + metaInfo->pAspectReferences->GetMetaStructPointer() + idx, + consumer); + } + paspect_references_names += variable_name + ", "; + } + out << "\t\t" << "VkInputAttachmentAspectReference " << paspect_references_array << "[] = {" << paspect_references_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlags(" << structInfo->handleTypes << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "externalMemoryImageCreateInfo"); - out << "\t\t" << "VkExternalMemoryImageCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->aspectReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << paspect_references_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassInputAttachmentAspectCreateInfo"); + out << "\t\t" << "VkRenderPassInputAttachmentAspectCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExternalMemoryProperties(std::ostream &out, const VkExternalMemoryProperties* structInfo, Decoded_VkExternalMemoryProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassMultiviewCreateInfo(std::ostream &out, const VkRenderPassMultiviewCreateInfo* structInfo, Decoded_VkRenderPassMultiviewCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkExternalMemoryFeatureFlags(" << structInfo->externalMemoryFeatures << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlags(" << structInfo->exportFromImportedHandleTypes << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlags(" << structInfo->compatibleHandleTypes << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "externalMemoryProperties"); - out << "\t\t" << "VkExternalMemoryProperties " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pview_masks_array = "NULL"; + if (structInfo->pViewMasks != NULL) { + pview_masks_array = "pViewMasks_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pview_masks_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pViewMasks, structInfo->subpassCount) << ";" << std::endl; + } + std::string pview_offsets_array = "NULL"; + if (structInfo->pViewOffsets != NULL) { + pview_offsets_array = "pViewOffsets_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "int32_t " << pview_offsets_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pViewOffsets, structInfo->dependencyCount) << ";" << std::endl; + } + std::string pcorrelation_masks_array = "NULL"; + if (structInfo->pCorrelationMasks != NULL) { + pcorrelation_masks_array = "pCorrelationMasks_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pcorrelation_masks_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pCorrelationMasks, structInfo->correlationMaskCount) << ";" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subpassCount << "," << std::endl; + struct_body << "\t\t\t" << pview_masks_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dependencyCount << "," << std::endl; + struct_body << "\t\t\t" << pview_offsets_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->correlationMaskCount << "," << std::endl; + struct_body << "\t\t\t" << pcorrelation_masks_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassMultiviewCreateInfo"); + out << "\t\t" << "VkRenderPassMultiviewCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExternalSemaphoreProperties(std::ostream &out, const VkExternalSemaphoreProperties* structInfo, Decoded_VkExternalSemaphoreProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSamplerYcbcrConversionCreateInfo(std::ostream &out, const VkSamplerYcbcrConversionCreateInfo* structInfo, Decoded_VkSamplerYcbcrConversionCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string components_info_var = GenerateStruct_VkComponentMapping(out, + &structInfo->components, + metaInfo->components, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlags(" << structInfo->exportFromImportedHandleTypes << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlags(" << structInfo->compatibleHandleTypes << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalSemaphoreFeatureFlags(" << structInfo->externalSemaphoreFeatures << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "externalSemaphoreProperties"); - out << "\t\t" << "VkExternalSemaphoreProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSamplerYcbcrModelConversion(" << structInfo->ycbcrModel << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSamplerYcbcrRange(" << structInfo->ycbcrRange << ")" << "," << std::endl; + struct_body << "\t\t\t" << components_info_var << "," << std::endl; + struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->xChromaOffset << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->yChromaOffset << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFilter(" << structInfo->chromaFilter << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->forceExplicitReconstruction << ","; + std::string variable_name = consumer.AddStruct(struct_body, "samplerYcbcrConversionCreateInfo"); + out << "\t\t" << "VkSamplerYcbcrConversionCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkFormatProperties2(std::ostream &out, const VkFormatProperties2* structInfo, Decoded_VkFormatProperties2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSamplerYcbcrConversionImageFormatProperties(std::ostream &out, const VkSamplerYcbcrConversionImageFormatProperties* structInfo, Decoded_VkSamplerYcbcrConversionImageFormatProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string format_properties_info_var = GenerateStruct_VkFormatProperties(out, - &structInfo->formatProperties, - metaInfo->formatProperties, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << format_properties_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "formatProperties2"); - out << "\t\t" << "VkFormatProperties2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->combinedImageSamplerDescriptorCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "samplerYcbcrConversionImageFormatProperties"); + out << "\t\t" << "VkSamplerYcbcrConversionImageFormatProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageFormatProperties2(std::ostream &out, const VkImageFormatProperties2* structInfo, Decoded_VkImageFormatProperties2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSamplerYcbcrConversionInfo(std::ostream &out, const VkSamplerYcbcrConversionInfo* structInfo, Decoded_VkSamplerYcbcrConversionInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string image_format_properties_info_var = GenerateStruct_VkImageFormatProperties(out, - &structInfo->imageFormatProperties, - metaInfo->imageFormatProperties, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << image_format_properties_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageFormatProperties2"); - out << "\t\t" << "VkImageFormatProperties2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->conversion) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "samplerYcbcrConversionInfo"); + out << "\t\t" << "VkSamplerYcbcrConversionInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageMemoryRequirementsInfo2(std::ostream &out, const VkImageMemoryRequirementsInfo2* structInfo, Decoded_VkImageMemoryRequirementsInfo2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSparseImageFormatProperties2(std::ostream &out, const VkSparseImageFormatProperties2* structInfo, Decoded_VkSparseImageFormatProperties2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string properties_info_var = GenerateStruct_VkSparseImageFormatProperties(out, + &structInfo->properties, + metaInfo->properties, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageMemoryRequirementsInfo2"); - out << "\t\t" << "VkImageMemoryRequirementsInfo2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << properties_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "sparseImageFormatProperties2"); + out << "\t\t" << "VkSparseImageFormatProperties2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImagePlaneMemoryRequirementsInfo(std::ostream &out, const VkImagePlaneMemoryRequirementsInfo* structInfo, Decoded_VkImagePlaneMemoryRequirementsInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSparseImageMemoryRequirements2(std::ostream &out, const VkSparseImageMemoryRequirements2* structInfo, Decoded_VkSparseImageMemoryRequirements2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string memory_requirements_info_var = GenerateStruct_VkSparseImageMemoryRequirements(out, + &structInfo->memoryRequirements, + metaInfo->memoryRequirements, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImageAspectFlagBits(" << structInfo->planeAspect << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imagePlaneMemoryRequirementsInfo"); - out << "\t\t" << "VkImagePlaneMemoryRequirementsInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << memory_requirements_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "sparseImageMemoryRequirements2"); + out << "\t\t" << "VkSparseImageMemoryRequirements2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageSparseMemoryRequirementsInfo2(std::ostream &out, const VkImageSparseMemoryRequirementsInfo2* structInfo, Decoded_VkImageSparseMemoryRequirementsInfo2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAttachmentDescription2(std::ostream &out, const VkAttachmentDescription2* structInfo, Decoded_VkAttachmentDescription2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageSparseMemoryRequirementsInfo2"); - out << "\t\t" << "VkImageSparseMemoryRequirementsInfo2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkAttachmentDescriptionFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->samples << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAttachmentLoadOp(" << structInfo->loadOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAttachmentStoreOp(" << structInfo->storeOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAttachmentLoadOp(" << structInfo->stencilLoadOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAttachmentStoreOp(" << structInfo->stencilStoreOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->initialLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->finalLayout << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "attachmentDescription2"); + out << "\t\t" << "VkAttachmentDescription2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageViewUsageCreateInfo(std::ostream &out, const VkImageViewUsageCreateInfo* structInfo, Decoded_VkImageViewUsageCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAttachmentDescriptionStencilLayout(std::ostream &out, const VkAttachmentDescriptionStencilLayout* structInfo, Decoded_VkAttachmentDescriptionStencilLayout* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->usage << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageViewUsageCreateInfo"); - out << "\t\t" << "VkImageViewUsageCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->stencilInitialLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->stencilFinalLayout << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "attachmentDescriptionStencilLayout"); + out << "\t\t" << "VkAttachmentDescriptionStencilLayout " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkInputAttachmentAspectReference(std::ostream &out, const VkInputAttachmentAspectReference* structInfo, Decoded_VkInputAttachmentAspectReference* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAttachmentReference2(std::ostream &out, const VkAttachmentReference2* structInfo, Decoded_VkAttachmentReference2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->subpass << "," << std::endl; - struct_body << "\t\t\t" << structInfo->inputAttachmentIndex << "," << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->attachment << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->layout << ")" << "," << std::endl; struct_body << "\t\t\t" << "VkImageAspectFlags(" << structInfo->aspectMask << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "inputAttachmentAspectReference"); - out << "\t\t" << "VkInputAttachmentAspectReference " << variable_name << " {" << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "attachmentReference2"); + out << "\t\t" << "VkAttachmentReference2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryDedicatedAllocateInfo(std::ostream &out, const VkMemoryDedicatedAllocateInfo* structInfo, Decoded_VkMemoryDedicatedAllocateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAttachmentReferenceStencilLayout(std::ostream &out, const VkAttachmentReferenceStencilLayout* structInfo, Decoded_VkAttachmentReferenceStencilLayout* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryDedicatedAllocateInfo"); - out << "\t\t" << "VkMemoryDedicatedAllocateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->stencilLayout << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "attachmentReferenceStencilLayout"); + out << "\t\t" << "VkAttachmentReferenceStencilLayout " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryDedicatedRequirements(std::ostream &out, const VkMemoryDedicatedRequirements* structInfo, Decoded_VkMemoryDedicatedRequirements* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBufferDeviceAddressInfo(std::ostream &out, const VkBufferDeviceAddressInfo* structInfo, Decoded_VkBufferDeviceAddressInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->prefersDedicatedAllocation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->requiresDedicatedAllocation << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryDedicatedRequirements"); - out << "\t\t" << "VkMemoryDedicatedRequirements " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bufferDeviceAddressInfo"); + out << "\t\t" << "VkBufferDeviceAddressInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryRequirements2(std::ostream &out, const VkMemoryRequirements2* structInfo, Decoded_VkMemoryRequirements2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBufferOpaqueCaptureAddressCreateInfo(std::ostream &out, const VkBufferOpaqueCaptureAddressCreateInfo* structInfo, Decoded_VkBufferOpaqueCaptureAddressCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string memory_requirements_info_var = GenerateStruct_VkMemoryRequirements(out, - &structInfo->memoryRequirements, - metaInfo->memoryRequirements, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << memory_requirements_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryRequirements2"); - out << "\t\t" << variable_name << " = {" << std::endl; + struct_body << "\t\t\t" << structInfo->opaqueCaptureAddress << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bufferOpaqueCaptureAddressCreateInfo"); + out << "\t\t" << "VkBufferOpaqueCaptureAddressCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevice16BitStorageFeatures(std::ostream &out, const VkPhysicalDevice16BitStorageFeatures* structInfo, Decoded_VkPhysicalDevice16BitStorageFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkConformanceVersion(std::ostream &out, const VkConformanceVersion* structInfo, Decoded_VkConformanceVersion* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->storageBuffer16BitAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->uniformAndStorageBuffer16BitAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->storagePushConstant16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->storageInputOutput16 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevice16BitStorageFeatures"); - out << "\t\t" << "VkPhysicalDevice16BitStorageFeatures " << variable_name << " {" << std::endl; + struct_body << "\t" << std::to_string(structInfo->major) << "," << std::endl; + struct_body << "\t\t\t" << std::to_string(structInfo->minor) << "," << std::endl; + struct_body << "\t\t\t" << std::to_string(structInfo->subminor) << "," << std::endl; + struct_body << "\t\t\t" << std::to_string(structInfo->patch) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "conformanceVersion"); + out << "\t\t" << "VkConformanceVersion " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExternalBufferInfo(std::ostream &out, const VkPhysicalDeviceExternalBufferInfo* structInfo, Decoded_VkPhysicalDeviceExternalBufferInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorSetLayoutBindingFlagsCreateInfo(std::ostream &out, const VkDescriptorSetLayoutBindingFlagsCreateInfo* structInfo, Decoded_VkDescriptorSetLayoutBindingFlagsCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pbinding_flags_values; + std::string pbinding_flags_array = "NULL"; + if (structInfo->pBindingFlags != NULL) { + for (uint32_t idx = 0; idx < structInfo->bindingCount; idx++) { + pbinding_flags_values += util::ToString(structInfo->pBindingFlags[idx]) + ", "; + } + pbinding_flags_array = "pBindingFlags_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkDescriptorBindingFlags " << pbinding_flags_array << "[] = {" << pbinding_flags_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkBufferCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBufferUsageFlags(" << structInfo->usage << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalBufferInfo"); - out << "\t\t" << "VkPhysicalDeviceExternalBufferInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->bindingCount << "," << std::endl; + struct_body << "\t\t\t" << pbinding_flags_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetLayoutBindingFlagsCreateInfo"); + out << "\t\t" << "VkDescriptorSetLayoutBindingFlagsCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExternalFenceInfo(std::ostream &out, const VkPhysicalDeviceExternalFenceInfo* structInfo, Decoded_VkPhysicalDeviceExternalFenceInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorSetVariableDescriptorCountAllocateInfo(std::ostream &out, const VkDescriptorSetVariableDescriptorCountAllocateInfo* structInfo, Decoded_VkDescriptorSetVariableDescriptorCountAllocateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pdescriptor_counts_array = "NULL"; + if (structInfo->pDescriptorCounts != NULL) { + pdescriptor_counts_array = "pDescriptorCounts_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pdescriptor_counts_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDescriptorCounts, structInfo->descriptorSetCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalFenceInfo"); - out << "\t\t" << "VkPhysicalDeviceExternalFenceInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorSetCount << "," << std::endl; + struct_body << "\t\t\t" << pdescriptor_counts_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetVariableDescriptorCountAllocateInfo"); + out << "\t\t" << "VkDescriptorSetVariableDescriptorCountAllocateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExternalImageFormatInfo(std::ostream &out, const VkPhysicalDeviceExternalImageFormatInfo* structInfo, Decoded_VkPhysicalDeviceExternalImageFormatInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorSetVariableDescriptorCountLayoutSupport(std::ostream &out, const VkDescriptorSetVariableDescriptorCountLayoutSupport* structInfo, Decoded_VkDescriptorSetVariableDescriptorCountLayoutSupport* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalImageFormatInfo"); - out << "\t\t" << "VkPhysicalDeviceExternalImageFormatInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxVariableDescriptorCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetVariableDescriptorCountLayoutSupport"); + out << "\t\t" << "VkDescriptorSetVariableDescriptorCountLayoutSupport " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExternalSemaphoreInfo(std::ostream &out, const VkPhysicalDeviceExternalSemaphoreInfo* structInfo, Decoded_VkPhysicalDeviceExternalSemaphoreInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceMemoryOpaqueCaptureAddressInfo(std::ostream &out, const VkDeviceMemoryOpaqueCaptureAddressInfo* structInfo, Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalSemaphoreInfo"); - out << "\t\t" << "VkPhysicalDeviceExternalSemaphoreInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceMemoryOpaqueCaptureAddressInfo"); + out << "\t\t" << "VkDeviceMemoryOpaqueCaptureAddressInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFeatures2(std::ostream &out, const VkPhysicalDeviceFeatures2* structInfo, Decoded_VkPhysicalDeviceFeatures2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkFramebufferAttachmentImageInfo(std::ostream &out, const VkFramebufferAttachmentImageInfo* structInfo, Decoded_VkFramebufferAttachmentImageInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string features_info_var = GenerateStruct_VkPhysicalDeviceFeatures(out, - &structInfo->features, - metaInfo->features, - consumer); + std::string pview_formats_values; + std::string pview_formats_array = "NULL"; + if (structInfo->pViewFormats != NULL) { + for (uint32_t idx = 0; idx < structInfo->viewFormatCount; idx++) { + pview_formats_values += util::ToString(structInfo->pViewFormats[idx]) + ", "; + } + pview_formats_array = "pViewFormats_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkFormat " << pview_formats_array << "[] = {" << pview_formats_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << features_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFeatures2"); - out << "\t\t" << "VkPhysicalDeviceFeatures2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkImageCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->usage << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->width << "," << std::endl; + struct_body << "\t\t\t" << structInfo->height << "," << std::endl; + struct_body << "\t\t\t" << structInfo->layerCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->viewFormatCount << "," << std::endl; + struct_body << "\t\t\t" << pview_formats_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "framebufferAttachmentImageInfo"); + out << "\t\t" << "VkFramebufferAttachmentImageInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceGroupProperties(std::ostream &out, const VkPhysicalDeviceGroupProperties* structInfo, Decoded_VkPhysicalDeviceGroupProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkFramebufferAttachmentsCreateInfo(std::ostream &out, const VkFramebufferAttachmentsCreateInfo* structInfo, Decoded_VkFramebufferAttachmentsCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pattachment_image_infos_array = "NULL"; + if (structInfo->pAttachmentImageInfos != NULL) { + pattachment_image_infos_array = "pAttachmentImageInfos_" + std::to_string(consumer.GetNextId()); + std::string pattachment_image_infos_names; + for (uint32_t idx = 0; idx < structInfo->attachmentImageInfoCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pAttachmentImageInfos + idx != NULL) { + variable_name = GenerateStruct_VkFramebufferAttachmentImageInfo(out, + structInfo->pAttachmentImageInfos + idx, + metaInfo->pAttachmentImageInfos->GetMetaStructPointer() + idx, + consumer); + } + pattachment_image_infos_names += variable_name + ", "; + } + out << "\t\t" << "VkFramebufferAttachmentImageInfo " << pattachment_image_infos_array << "[] = {" << pattachment_image_infos_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->physicalDeviceCount << "," << std::endl; - out << "\t\t" << "// TODO: Support physicalDevices (output with array length value?) argument." << std::endl; - struct_body << "\t\t\t" << structInfo->subsetAllocation << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceGroupProperties"); - out << "\t\t" << "VkPhysicalDeviceGroupProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->attachmentImageInfoCount << "," << std::endl; + struct_body << "\t\t\t" << pattachment_image_infos_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "framebufferAttachmentsCreateInfo"); + out << "\t\t" << "VkFramebufferAttachmentsCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceIDProperties(std::ostream &out, const VkPhysicalDeviceIDProperties* structInfo, Decoded_VkPhysicalDeviceIDProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageFormatListCreateInfo(std::ostream &out, const VkImageFormatListCreateInfo* structInfo, Decoded_VkImageFormatListCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pview_formats_values; + std::string pview_formats_array = "NULL"; + if (structInfo->pViewFormats != NULL) { + for (uint32_t idx = 0; idx < structInfo->viewFormatCount; idx++) { + pview_formats_values += util::ToString(structInfo->pViewFormats[idx]) + ", "; + } + pview_formats_array = "pViewFormats_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkFormat " << pview_formats_array << "[] = {" << pview_formats_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->deviceUUID[0]), VK_UUID_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->driverUUID[0]), VK_UUID_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->deviceLUID[0]), VK_LUID_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceNodeMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceLUIDValid << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceIDProperties"); - out << "\t\t" << "VkPhysicalDeviceIDProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->viewFormatCount << "," << std::endl; + struct_body << "\t\t\t" << pview_formats_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageFormatListCreateInfo"); + out << "\t\t" << "VkImageFormatListCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceImageFormatInfo2(std::ostream &out, const VkPhysicalDeviceImageFormatInfo2* structInfo, Decoded_VkPhysicalDeviceImageFormatInfo2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageStencilUsageCreateInfo(std::ostream &out, const VkImageStencilUsageCreateInfo* structInfo, Decoded_VkImageStencilUsageCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageType(" << structInfo->type << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageTiling(" << structInfo->tiling << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->usage << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageCreateFlags(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageFormatInfo2"); - out << "\t\t" << "VkPhysicalDeviceImageFormatInfo2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->stencilUsage << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageStencilUsageCreateInfo"); + out << "\t\t" << "VkImageStencilUsageCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMaintenance3Properties(std::ostream &out, const VkPhysicalDeviceMaintenance3Properties* structInfo, Decoded_VkPhysicalDeviceMaintenance3Properties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryOpaqueCaptureAddressAllocateInfo(std::ostream &out, const VkMemoryOpaqueCaptureAddressAllocateInfo* structInfo, Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerSetDescriptors << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxMemoryAllocationSize << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance3Properties"); - out << "\t\t" << "VkPhysicalDeviceMaintenance3Properties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->opaqueCaptureAddress << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryOpaqueCaptureAddressAllocateInfo"); + out << "\t\t" << "VkMemoryOpaqueCaptureAddressAllocateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMemoryProperties2(std::ostream &out, const VkPhysicalDeviceMemoryProperties2* structInfo, Decoded_VkPhysicalDeviceMemoryProperties2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevice8BitStorageFeatures(std::ostream &out, const VkPhysicalDevice8BitStorageFeatures* structInfo, Decoded_VkPhysicalDevice8BitStorageFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string memory_properties_info_var = GenerateStruct_VkPhysicalDeviceMemoryProperties(out, - &structInfo->memoryProperties, - metaInfo->memoryProperties, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << memory_properties_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMemoryProperties2"); - out << "\t\t" << "VkPhysicalDeviceMemoryProperties2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->storageBuffer8BitAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->uniformAndStorageBuffer8BitAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->storagePushConstant8 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevice8BitStorageFeatures"); + out << "\t\t" << "VkPhysicalDevice8BitStorageFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMultiviewFeatures(std::ostream &out, const VkPhysicalDeviceMultiviewFeatures* structInfo, Decoded_VkPhysicalDeviceMultiviewFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceBufferDeviceAddressFeatures(std::ostream &out, const VkPhysicalDeviceBufferDeviceAddressFeatures* structInfo, Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->multiview << "," << std::endl; - struct_body << "\t\t\t" << structInfo->multiviewGeometryShader << "," << std::endl; - struct_body << "\t\t\t" << structInfo->multiviewTessellationShader << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMultiviewFeatures"); - out << "\t\t" << "VkPhysicalDeviceMultiviewFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->bufferDeviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferDeviceAddressCaptureReplay << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferDeviceAddressMultiDevice << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceBufferDeviceAddressFeatures"); + out << "\t\t" << "VkPhysicalDeviceBufferDeviceAddressFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMultiviewProperties(std::ostream &out, const VkPhysicalDeviceMultiviewProperties* structInfo, Decoded_VkPhysicalDeviceMultiviewProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDepthStencilResolveProperties(std::ostream &out, const VkPhysicalDeviceDepthStencilResolveProperties* structInfo, Decoded_VkPhysicalDeviceDepthStencilResolveProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxMultiviewViewCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxMultiviewInstanceIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMultiviewProperties"); - out << "\t\t" << "VkPhysicalDeviceMultiviewProperties " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkResolveModeFlags(" << structInfo->supportedDepthResolveModes << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkResolveModeFlags(" << structInfo->supportedStencilResolveModes << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->independentResolveNone << "," << std::endl; + struct_body << "\t\t\t" << structInfo->independentResolve << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDepthStencilResolveProperties"); + out << "\t\t" << "VkPhysicalDeviceDepthStencilResolveProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePointClippingProperties(std::ostream &out, const VkPhysicalDevicePointClippingProperties* structInfo, Decoded_VkPhysicalDevicePointClippingProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDescriptorIndexingFeatures(std::ostream &out, const VkPhysicalDeviceDescriptorIndexingFeatures* structInfo, Decoded_VkPhysicalDeviceDescriptorIndexingFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPointClippingBehavior(" << structInfo->pointClippingBehavior << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePointClippingProperties"); - out << "\t\t" << "VkPhysicalDevicePointClippingProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderInputAttachmentArrayDynamicIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderUniformTexelBufferArrayDynamicIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageTexelBufferArrayDynamicIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderUniformBufferArrayNonUniformIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSampledImageArrayNonUniformIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageBufferArrayNonUniformIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageImageArrayNonUniformIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderInputAttachmentArrayNonUniformIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderUniformTexelBufferArrayNonUniformIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageTexelBufferArrayNonUniformIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingUniformBufferUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingSampledImageUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingStorageImageUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingStorageBufferUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingUniformTexelBufferUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingStorageTexelBufferUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingUpdateUnusedWhilePending << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingPartiallyBound << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingVariableDescriptorCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->runtimeDescriptorArray << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDescriptorIndexingFeatures"); + out << "\t\t" << "VkPhysicalDeviceDescriptorIndexingFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceProperties2(std::ostream &out, const VkPhysicalDeviceProperties2* structInfo, Decoded_VkPhysicalDeviceProperties2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDescriptorIndexingProperties(std::ostream &out, const VkPhysicalDeviceDescriptorIndexingProperties* structInfo, Decoded_VkPhysicalDeviceDescriptorIndexingProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string properties_info_var = GenerateStruct_VkPhysicalDeviceProperties(out, - &structInfo->properties, - metaInfo->properties, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << properties_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceProperties2"); - out << "\t\t" << "VkPhysicalDeviceProperties2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxUpdateAfterBindDescriptorsInAllPools << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderUniformBufferArrayNonUniformIndexingNative << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSampledImageArrayNonUniformIndexingNative << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageBufferArrayNonUniformIndexingNative << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageImageArrayNonUniformIndexingNative << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderInputAttachmentArrayNonUniformIndexingNative << "," << std::endl; + struct_body << "\t\t\t" << structInfo->robustBufferAccessUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->quadDivergentImplicitLod << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindSamplers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindUniformBuffers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindStorageBuffers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindSampledImages << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindStorageImages << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindInputAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageUpdateAfterBindResources << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindSamplers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindUniformBuffers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindStorageBuffers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindSampledImages << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindStorageImages << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindInputAttachments << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDescriptorIndexingProperties"); + out << "\t\t" << "VkPhysicalDeviceDescriptorIndexingProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceProtectedMemoryFeatures(std::ostream &out, const VkPhysicalDeviceProtectedMemoryFeatures* structInfo, Decoded_VkPhysicalDeviceProtectedMemoryFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDriverProperties(std::ostream &out, const VkPhysicalDeviceDriverProperties* structInfo, Decoded_VkPhysicalDeviceDriverProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string conformance_version_info_var = GenerateStruct_VkConformanceVersion(out, + &structInfo->conformanceVersion, + metaInfo->conformanceVersion, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->protectedMemory << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceProtectedMemoryFeatures"); - out << "\t\t" << "VkPhysicalDeviceProtectedMemoryFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDriverId(" << structInfo->driverID << ")" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->driverName) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->driverInfo) << "," << std::endl; + struct_body << "\t\t\t" << conformance_version_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDriverProperties"); + out << "\t\t" << "VkPhysicalDeviceDriverProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceProtectedMemoryProperties(std::ostream &out, const VkPhysicalDeviceProtectedMemoryProperties* structInfo, Decoded_VkPhysicalDeviceProtectedMemoryProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFloatControlsProperties(std::ostream &out, const VkPhysicalDeviceFloatControlsProperties* structInfo, Decoded_VkPhysicalDeviceFloatControlsProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->protectedNoFault << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceProtectedMemoryProperties"); - out << "\t\t" << "VkPhysicalDeviceProtectedMemoryProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkShaderFloatControlsIndependence(" << structInfo->denormBehaviorIndependence << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkShaderFloatControlsIndependence(" << structInfo->roundingModeIndependence << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSignedZeroInfNanPreserveFloat16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSignedZeroInfNanPreserveFloat32 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSignedZeroInfNanPreserveFloat64 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDenormPreserveFloat16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDenormPreserveFloat32 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDenormPreserveFloat64 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDenormFlushToZeroFloat16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDenormFlushToZeroFloat32 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDenormFlushToZeroFloat64 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTEFloat16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTEFloat32 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTEFloat64 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTZFloat16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTZFloat32 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTZFloat64 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFloatControlsProperties"); + out << "\t\t" << "VkPhysicalDeviceFloatControlsProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSamplerYcbcrConversionFeatures(std::ostream &out, const VkPhysicalDeviceSamplerYcbcrConversionFeatures* structInfo, Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceHostQueryResetFeatures(std::ostream &out, const VkPhysicalDeviceHostQueryResetFeatures* structInfo, Decoded_VkPhysicalDeviceHostQueryResetFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->samplerYcbcrConversion << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSamplerYcbcrConversionFeatures"); - out << "\t\t" << "VkPhysicalDeviceSamplerYcbcrConversionFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->hostQueryReset << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceHostQueryResetFeatures"); + out << "\t\t" << "VkPhysicalDeviceHostQueryResetFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderDrawParametersFeatures(std::ostream &out, const VkPhysicalDeviceShaderDrawParametersFeatures* structInfo, Decoded_VkPhysicalDeviceShaderDrawParametersFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceImagelessFramebufferFeatures(std::ostream &out, const VkPhysicalDeviceImagelessFramebufferFeatures* structInfo, Decoded_VkPhysicalDeviceImagelessFramebufferFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDrawParameters << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderDrawParametersFeatures"); - out << "\t\t" << "VkPhysicalDeviceShaderDrawParametersFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->imagelessFramebuffer << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImagelessFramebufferFeatures"); + out << "\t\t" << "VkPhysicalDeviceImagelessFramebufferFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSparseImageFormatInfo2(std::ostream &out, const VkPhysicalDeviceSparseImageFormatInfo2* structInfo, Decoded_VkPhysicalDeviceSparseImageFormatInfo2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceSamplerFilterMinmaxProperties(std::ostream &out, const VkPhysicalDeviceSamplerFilterMinmaxProperties* structInfo, Decoded_VkPhysicalDeviceSamplerFilterMinmaxProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageType(" << structInfo->type << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->samples << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->usage << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageTiling(" << structInfo->tiling << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSparseImageFormatInfo2"); - out << "\t\t" << "VkPhysicalDeviceSparseImageFormatInfo2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->filterMinmaxSingleComponentFormats << "," << std::endl; + struct_body << "\t\t\t" << structInfo->filterMinmaxImageComponentMapping << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSamplerFilterMinmaxProperties"); + out << "\t\t" << "VkPhysicalDeviceSamplerFilterMinmaxProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSubgroupProperties(std::ostream &out, const VkPhysicalDeviceSubgroupProperties* structInfo, Decoded_VkPhysicalDeviceSubgroupProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceScalarBlockLayoutFeatures(std::ostream &out, const VkPhysicalDeviceScalarBlockLayoutFeatures* structInfo, Decoded_VkPhysicalDeviceScalarBlockLayoutFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subgroupSize << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->supportedStages << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSubgroupFeatureFlags(" << structInfo->supportedOperations << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->quadOperationsInAllStages << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSubgroupProperties"); - out << "\t\t" << "VkPhysicalDeviceSubgroupProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->scalarBlockLayout << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceScalarBlockLayoutFeatures"); + out << "\t\t" << "VkPhysicalDeviceScalarBlockLayoutFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVariablePointersFeatures(std::ostream &out, const VkPhysicalDeviceVariablePointersFeatures* structInfo, Decoded_VkPhysicalDeviceVariablePointersFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(std::ostream &out, const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* structInfo, Decoded_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->variablePointersStorageBuffer << "," << std::endl; - struct_body << "\t\t\t" << structInfo->variablePointers << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVariablePointersFeatures"); - out << "\t\t" << "VkPhysicalDeviceVariablePointersFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->separateDepthStencilLayouts << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSeparateDepthStencilLayoutsFeatures"); + out << "\t\t" << "VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineTessellationDomainOriginStateCreateInfo(std::ostream &out, const VkPipelineTessellationDomainOriginStateCreateInfo* structInfo, Decoded_VkPipelineTessellationDomainOriginStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderAtomicInt64Features(std::ostream &out, const VkPhysicalDeviceShaderAtomicInt64Features* structInfo, Decoded_VkPhysicalDeviceShaderAtomicInt64Features* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkTessellationDomainOrigin(" << structInfo->domainOrigin << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineTessellationDomainOriginStateCreateInfo"); - out << "\t\t" << "VkPipelineTessellationDomainOriginStateCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBufferInt64Atomics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSharedInt64Atomics << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderAtomicInt64Features"); + out << "\t\t" << "VkPhysicalDeviceShaderAtomicInt64Features " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkProtectedSubmitInfo(std::ostream &out, const VkProtectedSubmitInfo* structInfo, Decoded_VkProtectedSubmitInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderFloat16Int8Features(std::ostream &out, const VkPhysicalDeviceShaderFloat16Int8Features* structInfo, Decoded_VkPhysicalDeviceShaderFloat16Int8Features* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->protectedSubmit << ","; - std::string variable_name = consumer.AddStruct(struct_body, "protectedSubmitInfo"); - out << "\t\t" << "VkProtectedSubmitInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderFloat16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderInt8 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderFloat16Int8Features"); + out << "\t\t" << "VkPhysicalDeviceShaderFloat16Int8Features " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkQueueFamilyProperties2(std::ostream &out, const VkQueueFamilyProperties2* structInfo, Decoded_VkQueueFamilyProperties2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(std::ostream &out, const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* structInfo, Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string queue_family_properties_info_var = GenerateStruct_VkQueueFamilyProperties(out, - &structInfo->queueFamilyProperties, - metaInfo->queueFamilyProperties, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << queue_family_properties_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyProperties2"); - out << "\t\t" << "VkQueueFamilyProperties2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSubgroupExtendedTypes << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderSubgroupExtendedTypesFeatures"); + out << "\t\t" << "VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassInputAttachmentAspectCreateInfo(std::ostream &out, const VkRenderPassInputAttachmentAspectCreateInfo* structInfo, Decoded_VkRenderPassInputAttachmentAspectCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceTimelineSemaphoreFeatures(std::ostream &out, const VkPhysicalDeviceTimelineSemaphoreFeatures* structInfo, Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string paspect_references_array = "NULL"; - if (structInfo->pAspectReferences != NULL) { - paspect_references_array = "pAspectReferences_" + std::to_string(consumer.GetNextId()); - std::string paspect_references_names; - for (uint32_t idx = 0; idx < structInfo->aspectReferenceCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pAspectReferences + idx != NULL) { - variable_name = GenerateStruct_VkInputAttachmentAspectReference(out, - structInfo->pAspectReferences + idx, - metaInfo->pAspectReferences->GetMetaStructPointer() + idx, - consumer); - } - paspect_references_names += variable_name + ", "; - } - out << "\t\t" << "VkInputAttachmentAspectReference " << paspect_references_array << "[] = {" << paspect_references_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->aspectReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << paspect_references_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassInputAttachmentAspectCreateInfo"); - out << "\t\t" << "VkRenderPassInputAttachmentAspectCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->timelineSemaphore << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTimelineSemaphoreFeatures"); + out << "\t\t" << "VkPhysicalDeviceTimelineSemaphoreFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassMultiviewCreateInfo(std::ostream &out, const VkRenderPassMultiviewCreateInfo* structInfo, Decoded_VkRenderPassMultiviewCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceTimelineSemaphoreProperties(std::ostream &out, const VkPhysicalDeviceTimelineSemaphoreProperties* structInfo, Decoded_VkPhysicalDeviceTimelineSemaphoreProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pview_masks_array = "NULL"; - if (structInfo->pViewMasks != NULL) { - pview_masks_array = "pViewMasks_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pview_masks_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pViewMasks, structInfo->subpassCount) << ";" << std::endl; - } - std::string pview_offsets_array = "NULL"; - if (structInfo->pViewOffsets != NULL) { - pview_offsets_array = "pViewOffsets_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "int32_t " << pview_offsets_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pViewOffsets, structInfo->dependencyCount) << ";" << std::endl; - } - std::string pcorrelation_masks_array = "NULL"; - if (structInfo->pCorrelationMasks != NULL) { - pcorrelation_masks_array = "pCorrelationMasks_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pcorrelation_masks_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pCorrelationMasks, structInfo->correlationMaskCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subpassCount << "," << std::endl; - struct_body << "\t\t\t" << pview_masks_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dependencyCount << "," << std::endl; - struct_body << "\t\t\t" << pview_offsets_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->correlationMaskCount << "," << std::endl; - struct_body << "\t\t\t" << pcorrelation_masks_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassMultiviewCreateInfo"); - out << "\t\t" << "VkRenderPassMultiviewCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxTimelineSemaphoreValueDifference << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTimelineSemaphoreProperties"); + out << "\t\t" << "VkPhysicalDeviceTimelineSemaphoreProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSamplerYcbcrConversionCreateInfo(std::ostream &out, const VkSamplerYcbcrConversionCreateInfo* structInfo, Decoded_VkSamplerYcbcrConversionCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(std::ostream &out, const VkPhysicalDeviceUniformBufferStandardLayoutFeatures* structInfo, Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string components_info_var = GenerateStruct_VkComponentMapping(out, - &structInfo->components, - metaInfo->components, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSamplerYcbcrModelConversion(" << structInfo->ycbcrModel << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSamplerYcbcrRange(" << structInfo->ycbcrRange << ")" << "," << std::endl; - struct_body << "\t\t\t" << components_info_var << "," << std::endl; - struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->xChromaOffset << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->yChromaOffset << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFilter(" << structInfo->chromaFilter << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->forceExplicitReconstruction << ","; - std::string variable_name = consumer.AddStruct(struct_body, "samplerYcbcrConversionCreateInfo"); - out << "\t\t" << "VkSamplerYcbcrConversionCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->uniformBufferStandardLayout << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceUniformBufferStandardLayoutFeatures"); + out << "\t\t" << "VkPhysicalDeviceUniformBufferStandardLayoutFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSamplerYcbcrConversionImageFormatProperties(std::ostream &out, const VkSamplerYcbcrConversionImageFormatProperties* structInfo, Decoded_VkSamplerYcbcrConversionImageFormatProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVulkan11Features(std::ostream &out, const VkPhysicalDeviceVulkan11Features* structInfo, Decoded_VkPhysicalDeviceVulkan11Features* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->combinedImageSamplerDescriptorCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "samplerYcbcrConversionImageFormatProperties"); - out << "\t\t" << "VkSamplerYcbcrConversionImageFormatProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->storageBuffer16BitAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->uniformAndStorageBuffer16BitAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->storagePushConstant16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->storageInputOutput16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->multiview << "," << std::endl; + struct_body << "\t\t\t" << structInfo->multiviewGeometryShader << "," << std::endl; + struct_body << "\t\t\t" << structInfo->multiviewTessellationShader << "," << std::endl; + struct_body << "\t\t\t" << structInfo->variablePointersStorageBuffer << "," << std::endl; + struct_body << "\t\t\t" << structInfo->variablePointers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->protectedMemory << "," << std::endl; + struct_body << "\t\t\t" << structInfo->samplerYcbcrConversion << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDrawParameters << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan11Features"); + out << "\t\t" << "VkPhysicalDeviceVulkan11Features " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSamplerYcbcrConversionInfo(std::ostream &out, const VkSamplerYcbcrConversionInfo* structInfo, Decoded_VkSamplerYcbcrConversionInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVulkan11Properties(std::ostream &out, const VkPhysicalDeviceVulkan11Properties* structInfo, Decoded_VkPhysicalDeviceVulkan11Properties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->conversion) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "samplerYcbcrConversionInfo"); - out << "\t\t" << "VkSamplerYcbcrConversionInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->deviceUUID[0]), VK_UUID_SIZE) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->driverUUID[0]), VK_UUID_SIZE) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->deviceLUID[0]), VK_LUID_SIZE) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceNodeMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceLUIDValid << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subgroupSize << "," << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->subgroupSupportedStages << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSubgroupFeatureFlags(" << structInfo->subgroupSupportedOperations << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subgroupQuadOperationsInAllStages << "," << std::endl; + struct_body << "\t\t\t" << "VkPointClippingBehavior(" << structInfo->pointClippingBehavior << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxMultiviewViewCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxMultiviewInstanceIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->protectedNoFault << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerSetDescriptors << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxMemoryAllocationSize << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan11Properties"); + out << "\t\t" << "VkPhysicalDeviceVulkan11Properties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSparseImageFormatProperties2(std::ostream &out, const VkSparseImageFormatProperties2* structInfo, Decoded_VkSparseImageFormatProperties2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVulkan12Features(std::ostream &out, const VkPhysicalDeviceVulkan12Features* structInfo, Decoded_VkPhysicalDeviceVulkan12Features* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string properties_info_var = GenerateStruct_VkSparseImageFormatProperties(out, - &structInfo->properties, - metaInfo->properties, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << properties_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "sparseImageFormatProperties2"); - out << "\t\t" << "VkSparseImageFormatProperties2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->samplerMirrorClampToEdge << "," << std::endl; + struct_body << "\t\t\t" << structInfo->drawIndirectCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->storageBuffer8BitAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->uniformAndStorageBuffer8BitAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->storagePushConstant8 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBufferInt64Atomics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSharedInt64Atomics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderFloat16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderInt8 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderInputAttachmentArrayDynamicIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderUniformTexelBufferArrayDynamicIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageTexelBufferArrayDynamicIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderUniformBufferArrayNonUniformIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSampledImageArrayNonUniformIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageBufferArrayNonUniformIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageImageArrayNonUniformIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderInputAttachmentArrayNonUniformIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderUniformTexelBufferArrayNonUniformIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageTexelBufferArrayNonUniformIndexing << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingUniformBufferUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingSampledImageUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingStorageImageUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingStorageBufferUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingUniformTexelBufferUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingStorageTexelBufferUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingUpdateUnusedWhilePending << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingPartiallyBound << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingVariableDescriptorCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->runtimeDescriptorArray << "," << std::endl; + struct_body << "\t\t\t" << structInfo->samplerFilterMinmax << "," << std::endl; + struct_body << "\t\t\t" << structInfo->scalarBlockLayout << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imagelessFramebuffer << "," << std::endl; + struct_body << "\t\t\t" << structInfo->uniformBufferStandardLayout << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSubgroupExtendedTypes << "," << std::endl; + struct_body << "\t\t\t" << structInfo->separateDepthStencilLayouts << "," << std::endl; + struct_body << "\t\t\t" << structInfo->hostQueryReset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->timelineSemaphore << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferDeviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferDeviceAddressCaptureReplay << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferDeviceAddressMultiDevice << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vulkanMemoryModel << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vulkanMemoryModelDeviceScope << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vulkanMemoryModelAvailabilityVisibilityChains << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderOutputViewportIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderOutputLayer << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subgroupBroadcastDynamicId << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan12Features"); + out << "\t\t" << "VkPhysicalDeviceVulkan12Features " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSparseImageMemoryRequirements2(std::ostream &out, const VkSparseImageMemoryRequirements2* structInfo, Decoded_VkSparseImageMemoryRequirements2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVulkan12Properties(std::ostream &out, const VkPhysicalDeviceVulkan12Properties* structInfo, Decoded_VkPhysicalDeviceVulkan12Properties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string memory_requirements_info_var = GenerateStruct_VkSparseImageMemoryRequirements(out, - &structInfo->memoryRequirements, - metaInfo->memoryRequirements, - consumer); + std::string conformance_version_info_var = GenerateStruct_VkConformanceVersion(out, + &structInfo->conformanceVersion, + metaInfo->conformanceVersion, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << memory_requirements_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "sparseImageMemoryRequirements2"); - out << "\t\t" << "VkSparseImageMemoryRequirements2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDriverId(" << structInfo->driverID << ")" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->driverName) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->driverInfo) << "," << std::endl; + struct_body << "\t\t\t" << conformance_version_info_var << "," << std::endl; + struct_body << "\t\t\t" << "VkShaderFloatControlsIndependence(" << structInfo->denormBehaviorIndependence << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkShaderFloatControlsIndependence(" << structInfo->roundingModeIndependence << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSignedZeroInfNanPreserveFloat16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSignedZeroInfNanPreserveFloat32 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSignedZeroInfNanPreserveFloat64 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDenormPreserveFloat16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDenormPreserveFloat32 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDenormPreserveFloat64 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDenormFlushToZeroFloat16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDenormFlushToZeroFloat32 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDenormFlushToZeroFloat64 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTEFloat16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTEFloat32 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTEFloat64 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTZFloat16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTZFloat32 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTZFloat64 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxUpdateAfterBindDescriptorsInAllPools << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderUniformBufferArrayNonUniformIndexingNative << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSampledImageArrayNonUniformIndexingNative << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageBufferArrayNonUniformIndexingNative << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderStorageImageArrayNonUniformIndexingNative << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderInputAttachmentArrayNonUniformIndexingNative << "," << std::endl; + struct_body << "\t\t\t" << structInfo->robustBufferAccessUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->quadDivergentImplicitLod << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindSamplers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindUniformBuffers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindStorageBuffers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindSampledImages << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindStorageImages << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindInputAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageUpdateAfterBindResources << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindSamplers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindUniformBuffers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindStorageBuffers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindSampledImages << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindStorageImages << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindInputAttachments << "," << std::endl; + struct_body << "\t\t\t" << "VkResolveModeFlags(" << structInfo->supportedDepthResolveModes << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkResolveModeFlags(" << structInfo->supportedStencilResolveModes << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->independentResolveNone << "," << std::endl; + struct_body << "\t\t\t" << structInfo->independentResolve << "," << std::endl; + struct_body << "\t\t\t" << structInfo->filterMinmaxSingleComponentFormats << "," << std::endl; + struct_body << "\t\t\t" << structInfo->filterMinmaxImageComponentMapping << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTimelineSemaphoreValueDifference << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->framebufferIntegerColorSampleCounts << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan12Properties"); + out << "\t\t" << "VkPhysicalDeviceVulkan12Properties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAttachmentDescription2(std::ostream &out, const VkAttachmentDescription2* structInfo, Decoded_VkAttachmentDescription2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVulkanMemoryModelFeatures(std::ostream &out, const VkPhysicalDeviceVulkanMemoryModelFeatures* structInfo, Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkAttachmentDescriptionFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->samples << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAttachmentLoadOp(" << structInfo->loadOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAttachmentStoreOp(" << structInfo->storeOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAttachmentLoadOp(" << structInfo->stencilLoadOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAttachmentStoreOp(" << structInfo->stencilStoreOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->initialLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->finalLayout << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "attachmentDescription2"); - out << "\t\t" << "VkAttachmentDescription2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->vulkanMemoryModel << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vulkanMemoryModelDeviceScope << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vulkanMemoryModelAvailabilityVisibilityChains << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkanMemoryModelFeatures"); + out << "\t\t" << "VkPhysicalDeviceVulkanMemoryModelFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAttachmentDescriptionStencilLayout(std::ostream &out, const VkAttachmentDescriptionStencilLayout* structInfo, Decoded_VkAttachmentDescriptionStencilLayout* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassAttachmentBeginInfo(std::ostream &out, const VkRenderPassAttachmentBeginInfo* structInfo, Decoded_VkRenderPassAttachmentBeginInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pattachments_array = "NULL"; + if (metaInfo->pAttachments.GetPointer() != NULL && structInfo->attachmentCount > 0) { + pattachments_array = "pattachments_array_" + std::to_string(consumer.GetNextId()); + std::string pattachments_values = toStringJoin(metaInfo->pAttachments.GetPointer(), + metaInfo->pAttachments.GetPointer() + structInfo->attachmentCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->attachmentCount == 1) { + pattachments_array = "&" + pattachments_values; + } else if (structInfo->attachmentCount > 1) { + out << "\t\t" << "VkImageView " << pattachments_array << "[] = {" << pattachments_values << "};" << std::endl; + } + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->stencilInitialLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->stencilFinalLayout << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "attachmentDescriptionStencilLayout"); - out << "\t\t" << "VkAttachmentDescriptionStencilLayout " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->attachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pattachments_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassAttachmentBeginInfo"); + out << "\t\t" << "VkRenderPassAttachmentBeginInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAttachmentReference2(std::ostream &out, const VkAttachmentReference2* structInfo, Decoded_VkAttachmentReference2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassCreateInfo2(std::ostream &out, const VkRenderPassCreateInfo2* structInfo, Decoded_VkRenderPassCreateInfo2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pattachments_array = "NULL"; + if (structInfo->pAttachments != NULL) { + pattachments_array = "pAttachments_" + std::to_string(consumer.GetNextId()); + std::string pattachments_names; + for (uint32_t idx = 0; idx < structInfo->attachmentCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pAttachments + idx != NULL) { + variable_name = GenerateStruct_VkAttachmentDescription2(out, + structInfo->pAttachments + idx, + metaInfo->pAttachments->GetMetaStructPointer() + idx, + consumer); + } + pattachments_names += variable_name + ", "; + } + out << "\t\t" << "VkAttachmentDescription2 " << pattachments_array << "[] = {" << pattachments_names << "};" << std::endl; + } + std::string psubpasses_array = "NULL"; + if (structInfo->pSubpasses != NULL) { + psubpasses_array = "pSubpasses_" + std::to_string(consumer.GetNextId()); + std::string psubpasses_names; + for (uint32_t idx = 0; idx < structInfo->subpassCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pSubpasses + idx != NULL) { + variable_name = GenerateStruct_VkSubpassDescription2(out, + structInfo->pSubpasses + idx, + metaInfo->pSubpasses->GetMetaStructPointer() + idx, + consumer); + } + psubpasses_names += variable_name + ", "; + } + out << "\t\t" << "VkSubpassDescription2 " << psubpasses_array << "[] = {" << psubpasses_names << "};" << std::endl; + } + std::string pdependencies_array = "NULL"; + if (structInfo->pDependencies != NULL) { + pdependencies_array = "pDependencies_" + std::to_string(consumer.GetNextId()); + std::string pdependencies_names; + for (uint32_t idx = 0; idx < structInfo->dependencyCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pDependencies + idx != NULL) { + variable_name = GenerateStruct_VkSubpassDependency2(out, + structInfo->pDependencies + idx, + metaInfo->pDependencies->GetMetaStructPointer() + idx, + consumer); + } + pdependencies_names += variable_name + ", "; + } + out << "\t\t" << "VkSubpassDependency2 " << pdependencies_array << "[] = {" << pdependencies_names << "};" << std::endl; + } + std::string pcorrelated_view_masks_array = "NULL"; + if (structInfo->pCorrelatedViewMasks != NULL) { + pcorrelated_view_masks_array = "pCorrelatedViewMasks_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pcorrelated_view_masks_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pCorrelatedViewMasks, structInfo->correlatedViewMaskCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->attachment << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->layout << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageAspectFlags(" << structInfo->aspectMask << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "attachmentReference2"); - out << "\t\t" << "VkAttachmentReference2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkRenderPassCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->attachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pattachments_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subpassCount << "," << std::endl; + struct_body << "\t\t\t" << psubpasses_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dependencyCount << "," << std::endl; + struct_body << "\t\t\t" << pdependencies_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->correlatedViewMaskCount << "," << std::endl; + struct_body << "\t\t\t" << pcorrelated_view_masks_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassCreateInfo2"); + out << "\t\t" << "VkRenderPassCreateInfo2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAttachmentReferenceStencilLayout(std::ostream &out, const VkAttachmentReferenceStencilLayout* structInfo, Decoded_VkAttachmentReferenceStencilLayout* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSamplerReductionModeCreateInfo(std::ostream &out, const VkSamplerReductionModeCreateInfo* structInfo, Decoded_VkSamplerReductionModeCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->stencilLayout << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "attachmentReferenceStencilLayout"); - out << "\t\t" << "VkAttachmentReferenceStencilLayout " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkSamplerReductionMode(" << structInfo->reductionMode << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "samplerReductionModeCreateInfo"); + out << "\t\t" << "VkSamplerReductionModeCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBufferDeviceAddressInfo(std::ostream &out, const VkBufferDeviceAddressInfo* structInfo, Decoded_VkBufferDeviceAddressInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSemaphoreSignalInfo(std::ostream &out, const VkSemaphoreSignalInfo* structInfo, Decoded_VkSemaphoreSignalInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bufferDeviceAddressInfo"); - out << "\t\t" << "VkBufferDeviceAddressInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->value << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "semaphoreSignalInfo"); + out << "\t\t" << "VkSemaphoreSignalInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBufferOpaqueCaptureAddressCreateInfo(std::ostream &out, const VkBufferOpaqueCaptureAddressCreateInfo* structInfo, Decoded_VkBufferOpaqueCaptureAddressCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSemaphoreTypeCreateInfo(std::ostream &out, const VkSemaphoreTypeCreateInfo* structInfo, Decoded_VkSemaphoreTypeCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->opaqueCaptureAddress << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bufferOpaqueCaptureAddressCreateInfo"); - out << "\t\t" << "VkBufferOpaqueCaptureAddressCreateInfo " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkConformanceVersion(std::ostream &out, const VkConformanceVersion* structInfo, Decoded_VkConformanceVersion* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << std::to_string(structInfo->major) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->minor) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->subminor) << "," << std::endl; - struct_body << "\t\t\t" << std::to_string(structInfo->patch) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "conformanceVersion"); - out << "\t\t" << "VkConformanceVersion " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkSemaphoreType(" << structInfo->semaphoreType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->initialValue << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "semaphoreTypeCreateInfo"); + out << "\t\t" << "VkSemaphoreTypeCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDescriptorSetLayoutBindingFlagsCreateInfo(std::ostream &out, const VkDescriptorSetLayoutBindingFlagsCreateInfo* structInfo, Decoded_VkDescriptorSetLayoutBindingFlagsCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSemaphoreWaitInfo(std::ostream &out, const VkSemaphoreWaitInfo* structInfo, Decoded_VkSemaphoreWaitInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pbinding_flags_values; - std::string pbinding_flags_array = "NULL"; - if (structInfo->pBindingFlags != NULL) { - for (uint32_t idx = 0; idx < structInfo->bindingCount; idx++) { - pbinding_flags_values += util::ToString(structInfo->pBindingFlags[idx]) + ", "; + std::string psemaphores_array = "NULL"; + if (metaInfo->pSemaphores.GetPointer() != NULL && structInfo->semaphoreCount > 0) { + psemaphores_array = "psemaphores_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_SEMAPHORE)); + std::string psemaphores_values = toStringJoin(metaInfo->pSemaphores.GetPointer(), + metaInfo->pSemaphores.GetPointer() + structInfo->semaphoreCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->semaphoreCount == 1) { + psemaphores_array = "&" + psemaphores_values; + } else if (structInfo->semaphoreCount > 1) { + out << "\t\t" << "VkSemaphore " << psemaphores_array << "[] = {" << psemaphores_values << "};" << std::endl; } - pbinding_flags_array = "pBindingFlags_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkDescriptorBindingFlags " << pbinding_flags_array << "[] = {" << pbinding_flags_values << "};" << std::endl; } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bindingCount << "," << std::endl; - struct_body << "\t\t\t" << pbinding_flags_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetLayoutBindingFlagsCreateInfo"); - out << "\t\t" << "VkDescriptorSetLayoutBindingFlagsCreateInfo " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkDescriptorSetVariableDescriptorCountAllocateInfo(std::ostream &out, const VkDescriptorSetVariableDescriptorCountAllocateInfo* structInfo, Decoded_VkDescriptorSetVariableDescriptorCountAllocateInfo* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdescriptor_counts_array = "NULL"; - if (structInfo->pDescriptorCounts != NULL) { - pdescriptor_counts_array = "pDescriptorCounts_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pdescriptor_counts_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDescriptorCounts, structInfo->descriptorSetCount) << ";" << std::endl; + std::string pvalues_array = "pvalues_array_" + std::to_string(consumer.GetNextId()); + if (structInfo->semaphoreCount > 0) { + std::string pvalues_values = toStringJoin(structInfo->pValues, + structInfo->pValues + structInfo->semaphoreCount, + [](uint64_t current) { return std::to_string(current); }, + ", "); + if (structInfo->semaphoreCount == 1) { + pvalues_array = "&" + pvalues_values; + } else if (structInfo->semaphoreCount > 1) { + out << "\t\t" << "uint64_t " << pvalues_array << "[] = {" << pvalues_values << "};" << std::endl; + } } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorSetCount << "," << std::endl; - struct_body << "\t\t\t" << pdescriptor_counts_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetVariableDescriptorCountAllocateInfo"); - out << "\t\t" << "VkDescriptorSetVariableDescriptorCountAllocateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkSemaphoreWaitFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->semaphoreCount << "," << std::endl; + struct_body << "\t\t\t" << psemaphores_array << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << pvalues_array << " }" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "semaphoreWaitInfo"); + out << "\t\t" << "VkSemaphoreWaitInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDescriptorSetVariableDescriptorCountLayoutSupport(std::ostream &out, const VkDescriptorSetVariableDescriptorCountLayoutSupport* structInfo, Decoded_VkDescriptorSetVariableDescriptorCountLayoutSupport* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSubpassBeginInfo(std::ostream &out, const VkSubpassBeginInfo* structInfo, Decoded_VkSubpassBeginInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxVariableDescriptorCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetVariableDescriptorCountLayoutSupport"); - out << "\t\t" << "VkDescriptorSetVariableDescriptorCountLayoutSupport " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkSubpassContents(" << structInfo->contents << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "subpassBeginInfo"); + out << "\t\t" << "VkSubpassBeginInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceMemoryOpaqueCaptureAddressInfo(std::ostream &out, const VkDeviceMemoryOpaqueCaptureAddressInfo* structInfo, Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSubpassDependency2(std::ostream &out, const VkSubpassDependency2* structInfo, Decoded_VkSubpassDependency2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceMemoryOpaqueCaptureAddressInfo"); - out << "\t\t" << "VkDeviceMemoryOpaqueCaptureAddressInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->srcSubpass << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstSubpass << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlags(" << structInfo->srcStageMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlags(" << structInfo->dstStageMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->srcAccessMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->dstAccessMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkDependencyFlags(" << structInfo->dependencyFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->viewOffset << ","; + std::string variable_name = consumer.AddStruct(struct_body, "subpassDependency2"); + out << "\t\t" << "VkSubpassDependency2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkFramebufferAttachmentImageInfo(std::ostream &out, const VkFramebufferAttachmentImageInfo* structInfo, Decoded_VkFramebufferAttachmentImageInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSubpassDescription2(std::ostream &out, const VkSubpassDescription2* structInfo, Decoded_VkSubpassDescription2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pview_formats_values; - std::string pview_formats_array = "NULL"; - if (structInfo->pViewFormats != NULL) { - for (uint32_t idx = 0; idx < structInfo->viewFormatCount; idx++) { - pview_formats_values += util::ToString(structInfo->pViewFormats[idx]) + ", "; + std::string pinput_attachments_array = "NULL"; + if (structInfo->pInputAttachments != NULL) { + pinput_attachments_array = "pInputAttachments_" + std::to_string(consumer.GetNextId()); + std::string pinput_attachments_names; + for (uint32_t idx = 0; idx < structInfo->inputAttachmentCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pInputAttachments + idx != NULL) { + variable_name = GenerateStruct_VkAttachmentReference2(out, + structInfo->pInputAttachments + idx, + metaInfo->pInputAttachments->GetMetaStructPointer() + idx, + consumer); + } + pinput_attachments_names += variable_name + ", "; } - pview_formats_array = "pViewFormats_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkFormat " << pview_formats_array << "[] = {" << pview_formats_values << "};" << std::endl; + out << "\t\t" << "VkAttachmentReference2 " << pinput_attachments_array << "[] = {" << pinput_attachments_names << "};" << std::endl; } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImageCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->usage << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->width << "," << std::endl; - struct_body << "\t\t\t" << structInfo->height << "," << std::endl; - struct_body << "\t\t\t" << structInfo->layerCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewFormatCount << "," << std::endl; - struct_body << "\t\t\t" << pview_formats_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "framebufferAttachmentImageInfo"); - out << "\t\t" << "VkFramebufferAttachmentImageInfo " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkFramebufferAttachmentsCreateInfo(std::ostream &out, const VkFramebufferAttachmentsCreateInfo* structInfo, Decoded_VkFramebufferAttachmentsCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pattachment_image_infos_array = "NULL"; - if (structInfo->pAttachmentImageInfos != NULL) { - pattachment_image_infos_array = "pAttachmentImageInfos_" + std::to_string(consumer.GetNextId()); - std::string pattachment_image_infos_names; - for (uint32_t idx = 0; idx < structInfo->attachmentImageInfoCount; idx++) { + std::string pcolor_attachments_array = "NULL"; + if (structInfo->pColorAttachments != NULL) { + pcolor_attachments_array = "pColorAttachments_" + std::to_string(consumer.GetNextId()); + std::string pcolor_attachments_names; + for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { std::string variable_name = "NULL"; - if (structInfo->pAttachmentImageInfos + idx != NULL) { - variable_name = GenerateStruct_VkFramebufferAttachmentImageInfo(out, - structInfo->pAttachmentImageInfos + idx, - metaInfo->pAttachmentImageInfos->GetMetaStructPointer() + idx, - consumer); + if (structInfo->pColorAttachments + idx != NULL) { + variable_name = GenerateStruct_VkAttachmentReference2(out, + structInfo->pColorAttachments + idx, + metaInfo->pColorAttachments->GetMetaStructPointer() + idx, + consumer); } - pattachment_image_infos_names += variable_name + ", "; + pcolor_attachments_names += variable_name + ", "; } - out << "\t\t" << "VkFramebufferAttachmentImageInfo " << pattachment_image_infos_array << "[] = {" << pattachment_image_infos_names << "};" << std::endl; + out << "\t\t" << "VkAttachmentReference2 " << pcolor_attachments_array << "[] = {" << pcolor_attachments_names << "};" << std::endl; } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->attachmentImageInfoCount << "," << std::endl; - struct_body << "\t\t\t" << pattachment_image_infos_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "framebufferAttachmentsCreateInfo"); - out << "\t\t" << "VkFramebufferAttachmentsCreateInfo " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkImageFormatListCreateInfo(std::ostream &out, const VkImageFormatListCreateInfo* structInfo, Decoded_VkImageFormatListCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pview_formats_values; - std::string pview_formats_array = "NULL"; - if (structInfo->pViewFormats != NULL) { - for (uint32_t idx = 0; idx < structInfo->viewFormatCount; idx++) { - pview_formats_values += util::ToString(structInfo->pViewFormats[idx]) + ", "; + std::string presolve_attachments_array = "NULL"; + if (structInfo->pResolveAttachments != NULL) { + presolve_attachments_array = "pResolveAttachments_" + std::to_string(consumer.GetNextId()); + std::string presolve_attachments_names; + for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pResolveAttachments + idx != NULL) { + variable_name = GenerateStruct_VkAttachmentReference2(out, + structInfo->pResolveAttachments + idx, + metaInfo->pResolveAttachments->GetMetaStructPointer() + idx, + consumer); + } + presolve_attachments_names += variable_name + ", "; } - pview_formats_array = "pViewFormats_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkFormat " << pview_formats_array << "[] = {" << pview_formats_values << "};" << std::endl; + out << "\t\t" << "VkAttachmentReference2 " << presolve_attachments_array << "[] = {" << presolve_attachments_names << "};" << std::endl; + } + std::string pdepth_stencil_attachment_struct = "NULL"; + if (structInfo->pDepthStencilAttachment != NULL) { + pdepth_stencil_attachment_struct = GenerateStruct_VkAttachmentReference2(out, + structInfo->pDepthStencilAttachment, + metaInfo->pDepthStencilAttachment->GetMetaStructPointer(), + consumer); + pdepth_stencil_attachment_struct.insert(0, "&"); + } + std::string ppreserve_attachments_array = "NULL"; + if (structInfo->pPreserveAttachments != NULL) { + ppreserve_attachments_array = "pPreserveAttachments_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << ppreserve_attachments_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pPreserveAttachments, structInfo->preserveAttachmentCount) << ";" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewFormatCount << "," << std::endl; - struct_body << "\t\t\t" << pview_formats_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageFormatListCreateInfo"); - out << "\t\t" << "VkImageFormatListCreateInfo " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkImageStencilUsageCreateInfo(std::ostream &out, const VkImageStencilUsageCreateInfo* structInfo, Decoded_VkImageStencilUsageCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->stencilUsage << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageStencilUsageCreateInfo"); - out << "\t\t" << "VkImageStencilUsageCreateInfo " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkMemoryOpaqueCaptureAddressAllocateInfo(std::ostream &out, const VkMemoryOpaqueCaptureAddressAllocateInfo* structInfo, Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->opaqueCaptureAddress << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryOpaqueCaptureAddressAllocateInfo"); - out << "\t\t" << "VkMemoryOpaqueCaptureAddressAllocateInfo " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkPhysicalDevice8BitStorageFeatures(std::ostream &out, const VkPhysicalDevice8BitStorageFeatures* structInfo, Decoded_VkPhysicalDevice8BitStorageFeatures* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->storageBuffer8BitAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->uniformAndStorageBuffer8BitAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->storagePushConstant8 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevice8BitStorageFeatures"); - out << "\t\t" << "VkPhysicalDevice8BitStorageFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkSubpassDescriptionFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineBindPoint(" << structInfo->pipelineBindPoint << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->viewMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->inputAttachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pinput_attachments_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pcolor_attachments_array << "," << std::endl; + struct_body << "\t\t\t" << presolve_attachments_array << "," << std::endl; + struct_body << "\t\t\t" << pdepth_stencil_attachment_struct << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preserveAttachmentCount << "," << std::endl; + struct_body << "\t\t\t" << ppreserve_attachments_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "subpassDescription2"); + out << "\t\t" << "VkSubpassDescription2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceBufferDeviceAddressFeatures(std::ostream &out, const VkPhysicalDeviceBufferDeviceAddressFeatures* structInfo, Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSubpassDescriptionDepthStencilResolve(std::ostream &out, const VkSubpassDescriptionDepthStencilResolve* structInfo, Decoded_VkSubpassDescriptionDepthStencilResolve* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pdepth_stencil_resolve_attachment_struct = "NULL"; + if (structInfo->pDepthStencilResolveAttachment != NULL) { + pdepth_stencil_resolve_attachment_struct = GenerateStruct_VkAttachmentReference2(out, + structInfo->pDepthStencilResolveAttachment, + metaInfo->pDepthStencilResolveAttachment->GetMetaStructPointer(), + consumer); + pdepth_stencil_resolve_attachment_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferDeviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferDeviceAddressCaptureReplay << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferDeviceAddressMultiDevice << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceBufferDeviceAddressFeatures"); - out << "\t\t" << "VkPhysicalDeviceBufferDeviceAddressFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkResolveModeFlagBits(" << structInfo->depthResolveMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkResolveModeFlagBits(" << structInfo->stencilResolveMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << pdepth_stencil_resolve_attachment_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "subpassDescriptionDepthStencilResolve"); + out << "\t\t" << "VkSubpassDescriptionDepthStencilResolve " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDepthStencilResolveProperties(std::ostream &out, const VkPhysicalDeviceDepthStencilResolveProperties* structInfo, Decoded_VkPhysicalDeviceDepthStencilResolveProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSubpassEndInfo(std::ostream &out, const VkSubpassEndInfo* structInfo, Decoded_VkSubpassEndInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkResolveModeFlags(" << structInfo->supportedDepthResolveModes << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkResolveModeFlags(" << structInfo->supportedStencilResolveModes << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->independentResolveNone << "," << std::endl; - struct_body << "\t\t\t" << structInfo->independentResolve << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDepthStencilResolveProperties"); - out << "\t\t" << "VkPhysicalDeviceDepthStencilResolveProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pnext_name << ","; + std::string variable_name = consumer.AddStruct(struct_body, "subpassEndInfo"); + out << "\t\t" << "VkSubpassEndInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDescriptorIndexingFeatures(std::ostream &out, const VkPhysicalDeviceDescriptorIndexingFeatures* structInfo, Decoded_VkPhysicalDeviceDescriptorIndexingFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkTimelineSemaphoreSubmitInfo(std::ostream &out, const VkTimelineSemaphoreSubmitInfo* structInfo, Decoded_VkTimelineSemaphoreSubmitInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pwait_semaphore_values_array = "pwait_semaphore_values_array_" + std::to_string(consumer.GetNextId()); + if (structInfo->waitSemaphoreValueCount > 0) { + std::string pwait_semaphore_values_values = toStringJoin(structInfo->pWaitSemaphoreValues, + structInfo->pWaitSemaphoreValues + structInfo->waitSemaphoreValueCount, + [](uint64_t current) { return std::to_string(current); }, + ", "); + if (structInfo->waitSemaphoreValueCount == 1) { + pwait_semaphore_values_array = "&" + pwait_semaphore_values_values; + } else if (structInfo->waitSemaphoreValueCount > 1) { + out << "\t\t" << "uint64_t " << pwait_semaphore_values_array << "[] = {" << pwait_semaphore_values_values << "};" << std::endl; + } + } + std::string psignal_semaphore_values_array = "psignal_semaphore_values_array_" + std::to_string(consumer.GetNextId()); + if (structInfo->signalSemaphoreValueCount > 0) { + std::string psignal_semaphore_values_values = toStringJoin(structInfo->pSignalSemaphoreValues, + structInfo->pSignalSemaphoreValues + structInfo->signalSemaphoreValueCount, + [](uint64_t current) { return std::to_string(current); }, + ", "); + if (structInfo->signalSemaphoreValueCount == 1) { + psignal_semaphore_values_array = "&" + psignal_semaphore_values_values; + } else if (structInfo->signalSemaphoreValueCount > 1) { + out << "\t\t" << "uint64_t " << psignal_semaphore_values_array << "[] = {" << psignal_semaphore_values_values << "};" << std::endl; + } + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderInputAttachmentArrayDynamicIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderUniformTexelBufferArrayDynamicIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageTexelBufferArrayDynamicIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderUniformBufferArrayNonUniformIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSampledImageArrayNonUniformIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageBufferArrayNonUniformIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageImageArrayNonUniformIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderInputAttachmentArrayNonUniformIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderUniformTexelBufferArrayNonUniformIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageTexelBufferArrayNonUniformIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingUniformBufferUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingSampledImageUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingStorageImageUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingStorageBufferUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingUniformTexelBufferUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingStorageTexelBufferUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingUpdateUnusedWhilePending << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingPartiallyBound << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingVariableDescriptorCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->runtimeDescriptorArray << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDescriptorIndexingFeatures"); - out << "\t\t" << "VkPhysicalDeviceDescriptorIndexingFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->waitSemaphoreValueCount << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << pwait_semaphore_values_array << " }" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->signalSemaphoreValueCount << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << psignal_semaphore_values_array << " }" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "timelineSemaphoreSubmitInfo"); + out << "\t\t" << "VkTimelineSemaphoreSubmitInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDescriptorIndexingProperties(std::ostream &out, const VkPhysicalDeviceDescriptorIndexingProperties* structInfo, Decoded_VkPhysicalDeviceDescriptorIndexingProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBlitImageInfo2(std::ostream &out, const VkBlitImageInfo2* structInfo, Decoded_VkBlitImageInfo2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pregions_array = "NULL"; + if (structInfo->pRegions != NULL) { + pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); + std::string pregions_names; + for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pRegions + idx != NULL) { + variable_name = GenerateStruct_VkImageBlit2(out, + structInfo->pRegions + idx, + metaInfo->pRegions->GetMetaStructPointer() + idx, + consumer); + } + pregions_names += variable_name + ", "; + } + out << "\t\t" << "VkImageBlit2 " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxUpdateAfterBindDescriptorsInAllPools << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderUniformBufferArrayNonUniformIndexingNative << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSampledImageArrayNonUniformIndexingNative << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageBufferArrayNonUniformIndexingNative << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageImageArrayNonUniformIndexingNative << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderInputAttachmentArrayNonUniformIndexingNative << "," << std::endl; - struct_body << "\t\t\t" << structInfo->robustBufferAccessUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->quadDivergentImplicitLod << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindSamplers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindUniformBuffers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindStorageBuffers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindSampledImages << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindStorageImages << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindInputAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageUpdateAfterBindResources << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindSamplers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindUniformBuffers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindStorageBuffers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindSampledImages << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindStorageImages << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindInputAttachments << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDescriptorIndexingProperties"); - out << "\t\t" << "VkPhysicalDeviceDescriptorIndexingProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcImage) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->srcImageLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstImage) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->dstImageLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; + struct_body << "\t\t\t" << pregions_array << "," << std::endl; + struct_body << "\t\t\t" << "VkFilter(" << structInfo->filter << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "blitImageInfo2"); + out << "\t\t" << "VkBlitImageInfo2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDriverProperties(std::ostream &out, const VkPhysicalDeviceDriverProperties* structInfo, Decoded_VkPhysicalDeviceDriverProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBufferCopy2(std::ostream &out, const VkBufferCopy2* structInfo, Decoded_VkBufferCopy2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string conformance_version_info_var = GenerateStruct_VkConformanceVersion(out, - &structInfo->conformanceVersion, - metaInfo->conformanceVersion, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDriverId(" << structInfo->driverID << ")" << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->driverName) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->driverInfo) << "," << std::endl; - struct_body << "\t\t\t" << conformance_version_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDriverProperties"); - out << "\t\t" << "VkPhysicalDeviceDriverProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->srcOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bufferCopy2"); + out << "\t\t" << "VkBufferCopy2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFloatControlsProperties(std::ostream &out, const VkPhysicalDeviceFloatControlsProperties* structInfo, Decoded_VkPhysicalDeviceFloatControlsProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBufferImageCopy2(std::ostream &out, const VkBufferImageCopy2* structInfo, Decoded_VkBufferImageCopy2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderFloatControlsIndependence(" << structInfo->denormBehaviorIndependence << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderFloatControlsIndependence(" << structInfo->roundingModeIndependence << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSignedZeroInfNanPreserveFloat16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSignedZeroInfNanPreserveFloat32 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSignedZeroInfNanPreserveFloat64 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDenormPreserveFloat16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDenormPreserveFloat32 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDenormPreserveFloat64 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDenormFlushToZeroFloat16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDenormFlushToZeroFloat32 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDenormFlushToZeroFloat64 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTEFloat16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTEFloat32 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTEFloat64 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTZFloat16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTZFloat32 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTZFloat64 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFloatControlsProperties"); - out << "\t\t" << "VkPhysicalDeviceFloatControlsProperties " << variable_name << " {" << std::endl; + std::string image_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->imageSubresource, + metaInfo->imageSubresource, + consumer); + std::string image_offset_info_var = GenerateStruct_VkOffset3D(out, + &structInfo->imageOffset, + metaInfo->imageOffset, + consumer); + std::string image_extent_info_var = GenerateStruct_VkExtent3D(out, + &structInfo->imageExtent, + metaInfo->imageExtent, + consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferRowLength << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferImageHeight << "," << std::endl; + struct_body << "\t\t\t" << image_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << image_offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << image_extent_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bufferImageCopy2"); + out << "\t\t" << "VkBufferImageCopy2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceHostQueryResetFeatures(std::ostream &out, const VkPhysicalDeviceHostQueryResetFeatures* structInfo, Decoded_VkPhysicalDeviceHostQueryResetFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBufferMemoryBarrier2(std::ostream &out, const VkBufferMemoryBarrier2* structInfo, Decoded_VkBufferMemoryBarrier2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hostQueryReset << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceHostQueryResetFeatures"); - out << "\t\t" << "VkPhysicalDeviceHostQueryResetFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->srcStageMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags2(" << structInfo->srcAccessMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->dstStageMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags2(" << structInfo->dstAccessMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->srcQueueFamilyIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstQueueFamilyIndex << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bufferMemoryBarrier2"); + out << "\t\t" << "VkBufferMemoryBarrier2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceImagelessFramebufferFeatures(std::ostream &out, const VkPhysicalDeviceImagelessFramebufferFeatures* structInfo, Decoded_VkPhysicalDeviceImagelessFramebufferFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCommandBufferInheritanceRenderingInfo(std::ostream &out, const VkCommandBufferInheritanceRenderingInfo* structInfo, Decoded_VkCommandBufferInheritanceRenderingInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pcolor_attachment_formats_values; + std::string pcolor_attachment_formats_array = "NULL"; + if (structInfo->pColorAttachmentFormats != NULL) { + for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { + pcolor_attachment_formats_values += util::ToString(structInfo->pColorAttachmentFormats[idx]) + ", "; + } + pcolor_attachment_formats_array = "pColorAttachmentFormats_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkFormat " << pcolor_attachment_formats_array << "[] = {" << pcolor_attachment_formats_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imagelessFramebuffer << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImagelessFramebufferFeatures"); - out << "\t\t" << "VkPhysicalDeviceImagelessFramebufferFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkRenderingFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->viewMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pcolor_attachment_formats_array << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->depthAttachmentFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->stencilAttachmentFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->rasterizationSamples << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "commandBufferInheritanceRenderingInfo"); + out << "\t\t" << "VkCommandBufferInheritanceRenderingInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSamplerFilterMinmaxProperties(std::ostream &out, const VkPhysicalDeviceSamplerFilterMinmaxProperties* structInfo, Decoded_VkPhysicalDeviceSamplerFilterMinmaxProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCommandBufferSubmitInfo(std::ostream &out, const VkCommandBufferSubmitInfo* structInfo, Decoded_VkCommandBufferSubmitInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->filterMinmaxSingleComponentFormats << "," << std::endl; - struct_body << "\t\t\t" << structInfo->filterMinmaxImageComponentMapping << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSamplerFilterMinmaxProperties"); - out << "\t\t" << "VkPhysicalDeviceSamplerFilterMinmaxProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->commandBuffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceMask << ","; + std::string variable_name = consumer.AddStruct(struct_body, "commandBufferSubmitInfo"); + out << "\t\t" << "VkCommandBufferSubmitInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceScalarBlockLayoutFeatures(std::ostream &out, const VkPhysicalDeviceScalarBlockLayoutFeatures* structInfo, Decoded_VkPhysicalDeviceScalarBlockLayoutFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCopyBufferInfo2(std::ostream &out, const VkCopyBufferInfo2* structInfo, Decoded_VkCopyBufferInfo2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pregions_array = "NULL"; + if (structInfo->pRegions != NULL) { + pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); + std::string pregions_names; + for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pRegions + idx != NULL) { + variable_name = GenerateStruct_VkBufferCopy2(out, + structInfo->pRegions + idx, + metaInfo->pRegions->GetMetaStructPointer() + idx, + consumer); + } + pregions_names += variable_name + ", "; + } + out << "\t\t" << "VkBufferCopy2 " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->scalarBlockLayout << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceScalarBlockLayoutFeatures"); - out << "\t\t" << "VkPhysicalDeviceScalarBlockLayoutFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcBuffer) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstBuffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; + struct_body << "\t\t\t" << pregions_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "copyBufferInfo2"); + out << "\t\t" << "VkCopyBufferInfo2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(std::ostream &out, const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* structInfo, Decoded_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCopyBufferToImageInfo2(std::ostream &out, const VkCopyBufferToImageInfo2* structInfo, Decoded_VkCopyBufferToImageInfo2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pregions_array = "NULL"; + if (structInfo->pRegions != NULL) { + pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); + std::string pregions_names; + for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pRegions + idx != NULL) { + variable_name = GenerateStruct_VkBufferImageCopy2(out, + structInfo->pRegions + idx, + metaInfo->pRegions->GetMetaStructPointer() + idx, + consumer); + } + pregions_names += variable_name + ", "; + } + out << "\t\t" << "VkBufferImageCopy2 " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->separateDepthStencilLayouts << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSeparateDepthStencilLayoutsFeatures"); - out << "\t\t" << "VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcBuffer) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstImage) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->dstImageLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; + struct_body << "\t\t\t" << pregions_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "copyBufferToImageInfo2"); + out << "\t\t" << "VkCopyBufferToImageInfo2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderAtomicInt64Features(std::ostream &out, const VkPhysicalDeviceShaderAtomicInt64Features* structInfo, Decoded_VkPhysicalDeviceShaderAtomicInt64Features* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCopyImageInfo2(std::ostream &out, const VkCopyImageInfo2* structInfo, Decoded_VkCopyImageInfo2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pregions_array = "NULL"; + if (structInfo->pRegions != NULL) { + pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); + std::string pregions_names; + for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pRegions + idx != NULL) { + variable_name = GenerateStruct_VkImageCopy2(out, + structInfo->pRegions + idx, + metaInfo->pRegions->GetMetaStructPointer() + idx, + consumer); + } + pregions_names += variable_name + ", "; + } + out << "\t\t" << "VkImageCopy2 " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBufferInt64Atomics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSharedInt64Atomics << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderAtomicInt64Features"); - out << "\t\t" << "VkPhysicalDeviceShaderAtomicInt64Features " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcImage) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->srcImageLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstImage) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->dstImageLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; + struct_body << "\t\t\t" << pregions_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "copyImageInfo2"); + out << "\t\t" << "VkCopyImageInfo2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderFloat16Int8Features(std::ostream &out, const VkPhysicalDeviceShaderFloat16Int8Features* structInfo, Decoded_VkPhysicalDeviceShaderFloat16Int8Features* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCopyImageToBufferInfo2(std::ostream &out, const VkCopyImageToBufferInfo2* structInfo, Decoded_VkCopyImageToBufferInfo2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pregions_array = "NULL"; + if (structInfo->pRegions != NULL) { + pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); + std::string pregions_names; + for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pRegions + idx != NULL) { + variable_name = GenerateStruct_VkBufferImageCopy2(out, + structInfo->pRegions + idx, + metaInfo->pRegions->GetMetaStructPointer() + idx, + consumer); + } + pregions_names += variable_name + ", "; + } + out << "\t\t" << "VkBufferImageCopy2 " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderFloat16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderInt8 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderFloat16Int8Features"); - out << "\t\t" << "VkPhysicalDeviceShaderFloat16Int8Features " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcImage) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->srcImageLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstBuffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; + struct_body << "\t\t\t" << pregions_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "copyImageToBufferInfo2"); + out << "\t\t" << "VkCopyImageToBufferInfo2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(std::ostream &out, const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* structInfo, Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDependencyInfo(std::ostream &out, const VkDependencyInfo* structInfo, Decoded_VkDependencyInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pmemory_barriers_array = "NULL"; + if (structInfo->pMemoryBarriers != NULL) { + pmemory_barriers_array = "pMemoryBarriers_" + std::to_string(consumer.GetNextId()); + std::string pmemory_barriers_names; + for (uint32_t idx = 0; idx < structInfo->memoryBarrierCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pMemoryBarriers + idx != NULL) { + variable_name = GenerateStruct_VkMemoryBarrier2(out, + structInfo->pMemoryBarriers + idx, + metaInfo->pMemoryBarriers->GetMetaStructPointer() + idx, + consumer); + } + pmemory_barriers_names += variable_name + ", "; + } + out << "\t\t" << "VkMemoryBarrier2 " << pmemory_barriers_array << "[] = {" << pmemory_barriers_names << "};" << std::endl; + } + std::string pbuffer_memory_barriers_array = "NULL"; + if (structInfo->pBufferMemoryBarriers != NULL) { + pbuffer_memory_barriers_array = "pBufferMemoryBarriers_" + std::to_string(consumer.GetNextId()); + std::string pbuffer_memory_barriers_names; + for (uint32_t idx = 0; idx < structInfo->bufferMemoryBarrierCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pBufferMemoryBarriers + idx != NULL) { + variable_name = GenerateStruct_VkBufferMemoryBarrier2(out, + structInfo->pBufferMemoryBarriers + idx, + metaInfo->pBufferMemoryBarriers->GetMetaStructPointer() + idx, + consumer); + } + pbuffer_memory_barriers_names += variable_name + ", "; + } + out << "\t\t" << "VkBufferMemoryBarrier2 " << pbuffer_memory_barriers_array << "[] = {" << pbuffer_memory_barriers_names << "};" << std::endl; + } + std::string pimage_memory_barriers_array = "NULL"; + if (structInfo->pImageMemoryBarriers != NULL) { + pimage_memory_barriers_array = "pImageMemoryBarriers_" + std::to_string(consumer.GetNextId()); + std::string pimage_memory_barriers_names; + for (uint32_t idx = 0; idx < structInfo->imageMemoryBarrierCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pImageMemoryBarriers + idx != NULL) { + variable_name = GenerateStruct_VkImageMemoryBarrier2(out, + structInfo->pImageMemoryBarriers + idx, + metaInfo->pImageMemoryBarriers->GetMetaStructPointer() + idx, + consumer); + } + pimage_memory_barriers_names += variable_name + ", "; + } + out << "\t\t" << "VkImageMemoryBarrier2 " << pimage_memory_barriers_array << "[] = {" << pimage_memory_barriers_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSubgroupExtendedTypes << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderSubgroupExtendedTypesFeatures"); - out << "\t\t" << "VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDependencyFlags(" << structInfo->dependencyFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryBarrierCount << "," << std::endl; + struct_body << "\t\t\t" << pmemory_barriers_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferMemoryBarrierCount << "," << std::endl; + struct_body << "\t\t\t" << pbuffer_memory_barriers_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imageMemoryBarrierCount << "," << std::endl; + struct_body << "\t\t\t" << pimage_memory_barriers_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dependencyInfo"); + out << "\t\t" << "VkDependencyInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceTimelineSemaphoreFeatures(std::ostream &out, const VkPhysicalDeviceTimelineSemaphoreFeatures* structInfo, Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorPoolInlineUniformBlockCreateInfo(std::ostream &out, const VkDescriptorPoolInlineUniformBlockCreateInfo* structInfo, Decoded_VkDescriptorPoolInlineUniformBlockCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->timelineSemaphore << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTimelineSemaphoreFeatures"); - out << "\t\t" << "VkPhysicalDeviceTimelineSemaphoreFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxInlineUniformBlockBindings << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorPoolInlineUniformBlockCreateInfo"); + out << "\t\t" << "VkDescriptorPoolInlineUniformBlockCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceTimelineSemaphoreProperties(std::ostream &out, const VkPhysicalDeviceTimelineSemaphoreProperties* structInfo, Decoded_VkPhysicalDeviceTimelineSemaphoreProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceBufferMemoryRequirements(std::ostream &out, const VkDeviceBufferMemoryRequirements* structInfo, Decoded_VkDeviceBufferMemoryRequirements* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pcreate_info_struct = "NULL"; + if (structInfo->pCreateInfo != NULL) { + pcreate_info_struct = GenerateStruct_VkBufferCreateInfo(out, + structInfo->pCreateInfo, + metaInfo->pCreateInfo->GetMetaStructPointer(), + consumer); + pcreate_info_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTimelineSemaphoreValueDifference << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTimelineSemaphoreProperties"); - out << "\t\t" << "VkPhysicalDeviceTimelineSemaphoreProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pcreate_info_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceBufferMemoryRequirements"); + out << "\t\t" << "VkDeviceBufferMemoryRequirements " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(std::ostream &out, const VkPhysicalDeviceUniformBufferStandardLayoutFeatures* structInfo, Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceImageMemoryRequirements(std::ostream &out, const VkDeviceImageMemoryRequirements* structInfo, Decoded_VkDeviceImageMemoryRequirements* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pcreate_info_struct = "NULL"; + if (structInfo->pCreateInfo != NULL) { + pcreate_info_struct = GenerateStruct_VkImageCreateInfo(out, + structInfo->pCreateInfo, + metaInfo->pCreateInfo->GetMetaStructPointer(), + consumer); + pcreate_info_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->uniformBufferStandardLayout << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceUniformBufferStandardLayoutFeatures"); - out << "\t\t" << "VkPhysicalDeviceUniformBufferStandardLayoutFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pcreate_info_struct << "," << std::endl; + struct_body << "\t\t\t" << "VkImageAspectFlagBits(" << structInfo->planeAspect << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceImageMemoryRequirements"); + out << "\t\t" << "VkDeviceImageMemoryRequirements " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVulkan11Features(std::ostream &out, const VkPhysicalDeviceVulkan11Features* structInfo, Decoded_VkPhysicalDeviceVulkan11Features* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDevicePrivateDataCreateInfo(std::ostream &out, const VkDevicePrivateDataCreateInfo* structInfo, Decoded_VkDevicePrivateDataCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->storageBuffer16BitAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->uniformAndStorageBuffer16BitAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->storagePushConstant16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->storageInputOutput16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->multiview << "," << std::endl; - struct_body << "\t\t\t" << structInfo->multiviewGeometryShader << "," << std::endl; - struct_body << "\t\t\t" << structInfo->multiviewTessellationShader << "," << std::endl; - struct_body << "\t\t\t" << structInfo->variablePointersStorageBuffer << "," << std::endl; - struct_body << "\t\t\t" << structInfo->variablePointers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->protectedMemory << "," << std::endl; - struct_body << "\t\t\t" << structInfo->samplerYcbcrConversion << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDrawParameters << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan11Features"); - out << "\t\t" << "VkPhysicalDeviceVulkan11Features " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->privateDataSlotRequestCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "devicePrivateDataCreateInfo"); + out << "\t\t" << "VkDevicePrivateDataCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVulkan11Properties(std::ostream &out, const VkPhysicalDeviceVulkan11Properties* structInfo, Decoded_VkPhysicalDeviceVulkan11Properties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkFormatProperties3(std::ostream &out, const VkFormatProperties3* structInfo, Decoded_VkFormatProperties3* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->deviceUUID[0]), VK_UUID_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->driverUUID[0]), VK_UUID_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->deviceLUID[0]), VK_LUID_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceNodeMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceLUIDValid << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subgroupSize << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->subgroupSupportedStages << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSubgroupFeatureFlags(" << structInfo->subgroupSupportedOperations << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subgroupQuadOperationsInAllStages << "," << std::endl; - struct_body << "\t\t\t" << "VkPointClippingBehavior(" << structInfo->pointClippingBehavior << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxMultiviewViewCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxMultiviewInstanceIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->protectedNoFault << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerSetDescriptors << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxMemoryAllocationSize << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan11Properties"); - out << "\t\t" << "VkPhysicalDeviceVulkan11Properties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFormatFeatureFlags2(" << structInfo->linearTilingFeatures << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormatFeatureFlags2(" << structInfo->optimalTilingFeatures << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormatFeatureFlags2(" << structInfo->bufferFeatures << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "formatProperties3"); + out << "\t\t" << "VkFormatProperties3 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVulkan12Features(std::ostream &out, const VkPhysicalDeviceVulkan12Features* structInfo, Decoded_VkPhysicalDeviceVulkan12Features* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageBlit2(std::ostream &out, const VkImageBlit2* structInfo, Decoded_VkImageBlit2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string src_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->srcSubresource, + metaInfo->srcSubresource, + consumer); + std::string dst_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->dstSubresource, + metaInfo->dstSubresource, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->samplerMirrorClampToEdge << "," << std::endl; - struct_body << "\t\t\t" << structInfo->drawIndirectCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->storageBuffer8BitAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->uniformAndStorageBuffer8BitAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->storagePushConstant8 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBufferInt64Atomics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSharedInt64Atomics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderFloat16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderInt8 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderInputAttachmentArrayDynamicIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderUniformTexelBufferArrayDynamicIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageTexelBufferArrayDynamicIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderUniformBufferArrayNonUniformIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSampledImageArrayNonUniformIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageBufferArrayNonUniformIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageImageArrayNonUniformIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderInputAttachmentArrayNonUniformIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderUniformTexelBufferArrayNonUniformIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageTexelBufferArrayNonUniformIndexing << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingUniformBufferUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingSampledImageUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingStorageImageUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingStorageBufferUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingUniformTexelBufferUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingStorageTexelBufferUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingUpdateUnusedWhilePending << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingPartiallyBound << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingVariableDescriptorCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->runtimeDescriptorArray << "," << std::endl; - struct_body << "\t\t\t" << structInfo->samplerFilterMinmax << "," << std::endl; - struct_body << "\t\t\t" << structInfo->scalarBlockLayout << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imagelessFramebuffer << "," << std::endl; - struct_body << "\t\t\t" << structInfo->uniformBufferStandardLayout << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSubgroupExtendedTypes << "," << std::endl; - struct_body << "\t\t\t" << structInfo->separateDepthStencilLayouts << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hostQueryReset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->timelineSemaphore << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferDeviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferDeviceAddressCaptureReplay << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferDeviceAddressMultiDevice << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vulkanMemoryModel << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vulkanMemoryModelDeviceScope << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vulkanMemoryModelAvailabilityVisibilityChains << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderOutputViewportIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderOutputLayer << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subgroupBroadcastDynamicId << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan12Features"); - out << "\t\t" << "VkPhysicalDeviceVulkan12Features " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << src_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->srcOffsets[0]), 2) << "," << std::endl; + struct_body << "\t\t\t" << dst_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->dstOffsets[0]), 2) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageBlit2"); + out << "\t\t" << "VkImageBlit2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVulkan12Properties(std::ostream &out, const VkPhysicalDeviceVulkan12Properties* structInfo, Decoded_VkPhysicalDeviceVulkan12Properties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageCopy2(std::ostream &out, const VkImageCopy2* structInfo, Decoded_VkImageCopy2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string conformance_version_info_var = GenerateStruct_VkConformanceVersion(out, - &structInfo->conformanceVersion, - metaInfo->conformanceVersion, + std::string src_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->srcSubresource, + metaInfo->srcSubresource, + consumer); + std::string src_offset_info_var = GenerateStruct_VkOffset3D(out, + &structInfo->srcOffset, + metaInfo->srcOffset, + consumer); + std::string dst_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->dstSubresource, + metaInfo->dstSubresource, consumer); + std::string dst_offset_info_var = GenerateStruct_VkOffset3D(out, + &structInfo->dstOffset, + metaInfo->dstOffset, + consumer); + std::string extent_info_var = GenerateStruct_VkExtent3D(out, + &structInfo->extent, + metaInfo->extent, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDriverId(" << structInfo->driverID << ")" << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->driverName) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->driverInfo) << "," << std::endl; - struct_body << "\t\t\t" << conformance_version_info_var << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderFloatControlsIndependence(" << structInfo->denormBehaviorIndependence << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderFloatControlsIndependence(" << structInfo->roundingModeIndependence << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSignedZeroInfNanPreserveFloat16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSignedZeroInfNanPreserveFloat32 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSignedZeroInfNanPreserveFloat64 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDenormPreserveFloat16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDenormPreserveFloat32 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDenormPreserveFloat64 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDenormFlushToZeroFloat16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDenormFlushToZeroFloat32 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDenormFlushToZeroFloat64 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTEFloat16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTEFloat32 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTEFloat64 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTZFloat16 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTZFloat32 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderRoundingModeRTZFloat64 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxUpdateAfterBindDescriptorsInAllPools << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderUniformBufferArrayNonUniformIndexingNative << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSampledImageArrayNonUniformIndexingNative << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageBufferArrayNonUniformIndexingNative << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderStorageImageArrayNonUniformIndexingNative << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderInputAttachmentArrayNonUniformIndexingNative << "," << std::endl; - struct_body << "\t\t\t" << structInfo->robustBufferAccessUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->quadDivergentImplicitLod << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindSamplers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindUniformBuffers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindStorageBuffers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindSampledImages << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindStorageImages << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindInputAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageUpdateAfterBindResources << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindSamplers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindUniformBuffers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindStorageBuffers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindSampledImages << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindStorageImages << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindInputAttachments << "," << std::endl; - struct_body << "\t\t\t" << "VkResolveModeFlags(" << structInfo->supportedDepthResolveModes << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkResolveModeFlags(" << structInfo->supportedStencilResolveModes << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->independentResolveNone << "," << std::endl; - struct_body << "\t\t\t" << structInfo->independentResolve << "," << std::endl; - struct_body << "\t\t\t" << structInfo->filterMinmaxSingleComponentFormats << "," << std::endl; - struct_body << "\t\t\t" << structInfo->filterMinmaxImageComponentMapping << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTimelineSemaphoreValueDifference << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->framebufferIntegerColorSampleCounts << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan12Properties"); - out << "\t\t" << "VkPhysicalDeviceVulkan12Properties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << src_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << src_offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << dst_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << dst_offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << extent_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageCopy2"); + out << "\t\t" << "VkImageCopy2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVulkanMemoryModelFeatures(std::ostream &out, const VkPhysicalDeviceVulkanMemoryModelFeatures* structInfo, Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageMemoryBarrier2(std::ostream &out, const VkImageMemoryBarrier2* structInfo, Decoded_VkImageMemoryBarrier2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string subresource_range_info_var = GenerateStruct_VkImageSubresourceRange(out, + &structInfo->subresourceRange, + metaInfo->subresourceRange, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vulkanMemoryModel << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vulkanMemoryModelDeviceScope << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vulkanMemoryModelAvailabilityVisibilityChains << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkanMemoryModelFeatures"); - out << "\t\t" << "VkPhysicalDeviceVulkanMemoryModelFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->srcStageMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags2(" << structInfo->srcAccessMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->dstStageMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags2(" << structInfo->dstAccessMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->oldLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->newLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->srcQueueFamilyIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstQueueFamilyIndex << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; + struct_body << "\t\t\t" << subresource_range_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageMemoryBarrier2"); + out << "\t\t" << "VkImageMemoryBarrier2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassAttachmentBeginInfo(std::ostream &out, const VkRenderPassAttachmentBeginInfo* structInfo, Decoded_VkRenderPassAttachmentBeginInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageResolve2(std::ostream &out, const VkImageResolve2* structInfo, Decoded_VkImageResolve2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pattachments_array = "NULL"; - if (metaInfo->pAttachments.GetPointer() != NULL && structInfo->attachmentCount > 0) { - pattachments_array = "pattachments_array_" + std::to_string(consumer.GetNextId()); - std::string pattachments_values = toStringJoin(metaInfo->pAttachments.GetPointer(), - metaInfo->pAttachments.GetPointer() + structInfo->attachmentCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->attachmentCount == 1) { - pattachments_array = "&" + pattachments_values; - } else if (structInfo->attachmentCount > 1) { - out << "\t\t" << "VkImageView " << pattachments_array << "[] = {" << pattachments_values << "};" << std::endl; - } - } + std::string src_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->srcSubresource, + metaInfo->srcSubresource, + consumer); + std::string src_offset_info_var = GenerateStruct_VkOffset3D(out, + &structInfo->srcOffset, + metaInfo->srcOffset, + consumer); + std::string dst_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->dstSubresource, + metaInfo->dstSubresource, + consumer); + std::string dst_offset_info_var = GenerateStruct_VkOffset3D(out, + &structInfo->dstOffset, + metaInfo->dstOffset, + consumer); + std::string extent_info_var = GenerateStruct_VkExtent3D(out, + &structInfo->extent, + metaInfo->extent, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->attachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pattachments_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassAttachmentBeginInfo"); - out << "\t\t" << "VkRenderPassAttachmentBeginInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << src_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << src_offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << dst_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << dst_offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << extent_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageResolve2"); + out << "\t\t" << "VkImageResolve2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassCreateInfo2(std::ostream &out, const VkRenderPassCreateInfo2* structInfo, Decoded_VkRenderPassCreateInfo2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryBarrier2(std::ostream &out, const VkMemoryBarrier2* structInfo, Decoded_VkMemoryBarrier2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pattachments_array = "NULL"; - if (structInfo->pAttachments != NULL) { - pattachments_array = "pAttachments_" + std::to_string(consumer.GetNextId()); - std::string pattachments_names; - for (uint32_t idx = 0; idx < structInfo->attachmentCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pAttachments + idx != NULL) { - variable_name = GenerateStruct_VkAttachmentDescription2(out, - structInfo->pAttachments + idx, - metaInfo->pAttachments->GetMetaStructPointer() + idx, - consumer); - } - pattachments_names += variable_name + ", "; - } - out << "\t\t" << "VkAttachmentDescription2 " << pattachments_array << "[] = {" << pattachments_names << "};" << std::endl; - } - std::string psubpasses_array = "NULL"; - if (structInfo->pSubpasses != NULL) { - psubpasses_array = "pSubpasses_" + std::to_string(consumer.GetNextId()); - std::string psubpasses_names; - for (uint32_t idx = 0; idx < structInfo->subpassCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pSubpasses + idx != NULL) { - variable_name = GenerateStruct_VkSubpassDescription2(out, - structInfo->pSubpasses + idx, - metaInfo->pSubpasses->GetMetaStructPointer() + idx, - consumer); - } - psubpasses_names += variable_name + ", "; - } - out << "\t\t" << "VkSubpassDescription2 " << psubpasses_array << "[] = {" << psubpasses_names << "};" << std::endl; - } - std::string pdependencies_array = "NULL"; - if (structInfo->pDependencies != NULL) { - pdependencies_array = "pDependencies_" + std::to_string(consumer.GetNextId()); - std::string pdependencies_names; - for (uint32_t idx = 0; idx < structInfo->dependencyCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pDependencies + idx != NULL) { - variable_name = GenerateStruct_VkSubpassDependency2(out, - structInfo->pDependencies + idx, - metaInfo->pDependencies->GetMetaStructPointer() + idx, - consumer); - } - pdependencies_names += variable_name + ", "; - } - out << "\t\t" << "VkSubpassDependency2 " << pdependencies_array << "[] = {" << pdependencies_names << "};" << std::endl; - } - std::string pcorrelated_view_masks_array = "NULL"; - if (structInfo->pCorrelatedViewMasks != NULL) { - pcorrelated_view_masks_array = "pCorrelatedViewMasks_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pcorrelated_view_masks_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pCorrelatedViewMasks, structInfo->correlatedViewMaskCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkRenderPassCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->attachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pattachments_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subpassCount << "," << std::endl; - struct_body << "\t\t\t" << psubpasses_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dependencyCount << "," << std::endl; - struct_body << "\t\t\t" << pdependencies_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->correlatedViewMaskCount << "," << std::endl; - struct_body << "\t\t\t" << pcorrelated_view_masks_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassCreateInfo2"); - out << "\t\t" << "VkRenderPassCreateInfo2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->srcStageMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags2(" << structInfo->srcAccessMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->dstStageMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags2(" << structInfo->dstAccessMask << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryBarrier2"); + out << "\t\t" << "VkMemoryBarrier2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSamplerReductionModeCreateInfo(std::ostream &out, const VkSamplerReductionModeCreateInfo* structInfo, Decoded_VkSamplerReductionModeCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDynamicRenderingFeatures(std::ostream &out, const VkPhysicalDeviceDynamicRenderingFeatures* structInfo, Decoded_VkPhysicalDeviceDynamicRenderingFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSamplerReductionMode(" << structInfo->reductionMode << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "samplerReductionModeCreateInfo"); - out << "\t\t" << "VkSamplerReductionModeCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->dynamicRendering << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDynamicRenderingFeatures"); + out << "\t\t" << "VkPhysicalDeviceDynamicRenderingFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSemaphoreSignalInfo(std::ostream &out, const VkSemaphoreSignalInfo* structInfo, Decoded_VkSemaphoreSignalInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceImageRobustnessFeatures(std::ostream &out, const VkPhysicalDeviceImageRobustnessFeatures* structInfo, Decoded_VkPhysicalDeviceImageRobustnessFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->value << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "semaphoreSignalInfo"); - out << "\t\t" << "VkSemaphoreSignalInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->robustImageAccess << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageRobustnessFeatures"); + out << "\t\t" << "VkPhysicalDeviceImageRobustnessFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSemaphoreTypeCreateInfo(std::ostream &out, const VkSemaphoreTypeCreateInfo* structInfo, Decoded_VkSemaphoreTypeCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceInlineUniformBlockFeatures(std::ostream &out, const VkPhysicalDeviceInlineUniformBlockFeatures* structInfo, Decoded_VkPhysicalDeviceInlineUniformBlockFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSemaphoreType(" << structInfo->semaphoreType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->initialValue << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "semaphoreTypeCreateInfo"); - out << "\t\t" << "VkSemaphoreTypeCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->inlineUniformBlock << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingInlineUniformBlockUpdateAfterBind << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceInlineUniformBlockFeatures"); + out << "\t\t" << "VkPhysicalDeviceInlineUniformBlockFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSemaphoreWaitInfo(std::ostream &out, const VkSemaphoreWaitInfo* structInfo, Decoded_VkSemaphoreWaitInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceInlineUniformBlockProperties(std::ostream &out, const VkPhysicalDeviceInlineUniformBlockProperties* structInfo, Decoded_VkPhysicalDeviceInlineUniformBlockProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string psemaphores_array = "NULL"; - if (metaInfo->pSemaphores.GetPointer() != NULL && structInfo->semaphoreCount > 0) { - psemaphores_array = "psemaphores_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_SEMAPHORE)); - std::string psemaphores_values = toStringJoin(metaInfo->pSemaphores.GetPointer(), - metaInfo->pSemaphores.GetPointer() + structInfo->semaphoreCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->semaphoreCount == 1) { - psemaphores_array = "&" + psemaphores_values; - } else if (structInfo->semaphoreCount > 1) { - out << "\t\t" << "VkSemaphore " << psemaphores_array << "[] = {" << psemaphores_values << "};" << std::endl; - } - } - std::string pvalues_array = "pvalues_array_" + std::to_string(consumer.GetNextId()); - if (structInfo->semaphoreCount > 0) { - std::string pvalues_values = toStringJoin(structInfo->pValues, - structInfo->pValues + structInfo->semaphoreCount, - [](uint64_t current) { return std::to_string(current); }, - ", "); - if (structInfo->semaphoreCount == 1) { - pvalues_array = "&" + pvalues_values; - } else if (structInfo->semaphoreCount > 1) { - out << "\t\t" << "uint64_t " << pvalues_array << "[] = {" << pvalues_values << "};" << std::endl; - } - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSemaphoreWaitFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->semaphoreCount << "," << std::endl; - struct_body << "\t\t\t" << psemaphores_array << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << pvalues_array << " }" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "semaphoreWaitInfo"); - out << "\t\t" << "VkSemaphoreWaitInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxInlineUniformBlockSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorInlineUniformBlocks << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetInlineUniformBlocks << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindInlineUniformBlocks << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceInlineUniformBlockProperties"); + out << "\t\t" << "VkPhysicalDeviceInlineUniformBlockProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSubpassBeginInfo(std::ostream &out, const VkSubpassBeginInfo* structInfo, Decoded_VkSubpassBeginInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMaintenance4Features(std::ostream &out, const VkPhysicalDeviceMaintenance4Features* structInfo, Decoded_VkPhysicalDeviceMaintenance4Features* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSubpassContents(" << structInfo->contents << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "subpassBeginInfo"); - out << "\t\t" << "VkSubpassBeginInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maintenance4 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance4Features"); + out << "\t\t" << "VkPhysicalDeviceMaintenance4Features " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSubpassDependency2(std::ostream &out, const VkSubpassDependency2* structInfo, Decoded_VkSubpassDependency2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMaintenance4Properties(std::ostream &out, const VkPhysicalDeviceMaintenance4Properties* structInfo, Decoded_VkPhysicalDeviceMaintenance4Properties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcSubpass << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstSubpass << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlags(" << structInfo->srcStageMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlags(" << structInfo->dstStageMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->srcAccessMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags(" << structInfo->dstAccessMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkDependencyFlags(" << structInfo->dependencyFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewOffset << ","; - std::string variable_name = consumer.AddStruct(struct_body, "subpassDependency2"); - out << "\t\t" << "VkSubpassDependency2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxBufferSize << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance4Properties"); + out << "\t\t" << "VkPhysicalDeviceMaintenance4Properties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSubpassDescription2(std::ostream &out, const VkSubpassDescription2* structInfo, Decoded_VkSubpassDescription2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePipelineCreationCacheControlFeatures(std::ostream &out, const VkPhysicalDevicePipelineCreationCacheControlFeatures* structInfo, Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineCreationCacheControl << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineCreationCacheControlFeatures"); + out << "\t\t" << "VkPhysicalDevicePipelineCreationCacheControlFeatures " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDevicePrivateDataFeatures(std::ostream &out, const VkPhysicalDevicePrivateDataFeatures* structInfo, Decoded_VkPhysicalDevicePrivateDataFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pinput_attachments_array = "NULL"; - if (structInfo->pInputAttachments != NULL) { - pinput_attachments_array = "pInputAttachments_" + std::to_string(consumer.GetNextId()); - std::string pinput_attachments_names; - for (uint32_t idx = 0; idx < structInfo->inputAttachmentCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pInputAttachments + idx != NULL) { - variable_name = GenerateStruct_VkAttachmentReference2(out, - structInfo->pInputAttachments + idx, - metaInfo->pInputAttachments->GetMetaStructPointer() + idx, - consumer); - } - pinput_attachments_names += variable_name + ", "; - } - out << "\t\t" << "VkAttachmentReference2 " << pinput_attachments_array << "[] = {" << pinput_attachments_names << "};" << std::endl; - } - std::string pcolor_attachments_array = "NULL"; - if (structInfo->pColorAttachments != NULL) { - pcolor_attachments_array = "pColorAttachments_" + std::to_string(consumer.GetNextId()); - std::string pcolor_attachments_names; - for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pColorAttachments + idx != NULL) { - variable_name = GenerateStruct_VkAttachmentReference2(out, - structInfo->pColorAttachments + idx, - metaInfo->pColorAttachments->GetMetaStructPointer() + idx, - consumer); - } - pcolor_attachments_names += variable_name + ", "; - } - out << "\t\t" << "VkAttachmentReference2 " << pcolor_attachments_array << "[] = {" << pcolor_attachments_names << "};" << std::endl; - } - std::string presolve_attachments_array = "NULL"; - if (structInfo->pResolveAttachments != NULL) { - presolve_attachments_array = "pResolveAttachments_" + std::to_string(consumer.GetNextId()); - std::string presolve_attachments_names; - for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pResolveAttachments + idx != NULL) { - variable_name = GenerateStruct_VkAttachmentReference2(out, - structInfo->pResolveAttachments + idx, - metaInfo->pResolveAttachments->GetMetaStructPointer() + idx, - consumer); - } - presolve_attachments_names += variable_name + ", "; - } - out << "\t\t" << "VkAttachmentReference2 " << presolve_attachments_array << "[] = {" << presolve_attachments_names << "};" << std::endl; - } - std::string pdepth_stencil_attachment_struct = "NULL"; - if (structInfo->pDepthStencilAttachment != NULL) { - pdepth_stencil_attachment_struct = GenerateStruct_VkAttachmentReference2(out, - structInfo->pDepthStencilAttachment, - metaInfo->pDepthStencilAttachment->GetMetaStructPointer(), - consumer); - pdepth_stencil_attachment_struct.insert(0, "&"); - } - std::string ppreserve_attachments_array = "NULL"; - if (structInfo->pPreserveAttachments != NULL) { - ppreserve_attachments_array = "pPreserveAttachments_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << ppreserve_attachments_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pPreserveAttachments, structInfo->preserveAttachmentCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSubpassDescriptionFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineBindPoint(" << structInfo->pipelineBindPoint << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->inputAttachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pinput_attachments_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pcolor_attachments_array << "," << std::endl; - struct_body << "\t\t\t" << presolve_attachments_array << "," << std::endl; - struct_body << "\t\t\t" << pdepth_stencil_attachment_struct << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preserveAttachmentCount << "," << std::endl; - struct_body << "\t\t\t" << ppreserve_attachments_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "subpassDescription2"); - out << "\t\t" << "VkSubpassDescription2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->privateData << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePrivateDataFeatures"); + out << "\t\t" << "VkPhysicalDevicePrivateDataFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSubpassDescriptionDepthStencilResolve(std::ostream &out, const VkSubpassDescriptionDepthStencilResolve* structInfo, Decoded_VkSubpassDescriptionDepthStencilResolve* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures(std::ostream &out, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* structInfo, Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdepth_stencil_resolve_attachment_struct = "NULL"; - if (structInfo->pDepthStencilResolveAttachment != NULL) { - pdepth_stencil_resolve_attachment_struct = GenerateStruct_VkAttachmentReference2(out, - structInfo->pDepthStencilResolveAttachment, - metaInfo->pDepthStencilResolveAttachment->GetMetaStructPointer(), - consumer); - pdepth_stencil_resolve_attachment_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkResolveModeFlagBits(" << structInfo->depthResolveMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkResolveModeFlagBits(" << structInfo->stencilResolveMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << pdepth_stencil_resolve_attachment_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "subpassDescriptionDepthStencilResolve"); - out << "\t\t" << "VkSubpassDescriptionDepthStencilResolve " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDemoteToHelperInvocation << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderDemoteToHelperInvocationFeatures"); + out << "\t\t" << "VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSubpassEndInfo(std::ostream &out, const VkSubpassEndInfo* structInfo, Decoded_VkSubpassEndInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderIntegerDotProductFeatures(std::ostream &out, const VkPhysicalDeviceShaderIntegerDotProductFeatures* structInfo, Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << ","; - std::string variable_name = consumer.AddStruct(struct_body, "subpassEndInfo"); - out << "\t\t" << "VkSubpassEndInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderIntegerDotProduct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderIntegerDotProductFeatures"); + out << "\t\t" << "VkPhysicalDeviceShaderIntegerDotProductFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkTimelineSemaphoreSubmitInfo(std::ostream &out, const VkTimelineSemaphoreSubmitInfo* structInfo, Decoded_VkTimelineSemaphoreSubmitInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderIntegerDotProductProperties(std::ostream &out, const VkPhysicalDeviceShaderIntegerDotProductProperties* structInfo, Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pwait_semaphore_values_array = "pwait_semaphore_values_array_" + std::to_string(consumer.GetNextId()); - if (structInfo->waitSemaphoreValueCount > 0) { - std::string pwait_semaphore_values_values = toStringJoin(structInfo->pWaitSemaphoreValues, - structInfo->pWaitSemaphoreValues + structInfo->waitSemaphoreValueCount, - [](uint64_t current) { return std::to_string(current); }, - ", "); - if (structInfo->waitSemaphoreValueCount == 1) { - pwait_semaphore_values_array = "&" + pwait_semaphore_values_values; - } else if (structInfo->waitSemaphoreValueCount > 1) { - out << "\t\t" << "uint64_t " << pwait_semaphore_values_array << "[] = {" << pwait_semaphore_values_values << "};" << std::endl; - } - } - std::string psignal_semaphore_values_array = "psignal_semaphore_values_array_" + std::to_string(consumer.GetNextId()); - if (structInfo->signalSemaphoreValueCount > 0) { - std::string psignal_semaphore_values_values = toStringJoin(structInfo->pSignalSemaphoreValues, - structInfo->pSignalSemaphoreValues + structInfo->signalSemaphoreValueCount, - [](uint64_t current) { return std::to_string(current); }, - ", "); - if (structInfo->signalSemaphoreValueCount == 1) { - psignal_semaphore_values_array = "&" + psignal_semaphore_values_values; - } else if (structInfo->signalSemaphoreValueCount > 1) { - out << "\t\t" << "uint64_t " << psignal_semaphore_values_array << "[] = {" << psignal_semaphore_values_values << "};" << std::endl; - } - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->waitSemaphoreValueCount << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << pwait_semaphore_values_array << " }" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->signalSemaphoreValueCount << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << psignal_semaphore_values_array << " }" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "timelineSemaphoreSubmitInfo"); - out << "\t\t" << "VkTimelineSemaphoreSubmitInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct8BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct8BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct8BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct4x8BitPackedUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct4x8BitPackedSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct4x8BitPackedMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct16BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct16BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct16BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct32BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct32BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct32BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct64BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct64BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct64BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating8BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating8BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating16BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating16BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating32BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating32BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating64BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating64BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderIntegerDotProductProperties"); + out << "\t\t" << "VkPhysicalDeviceShaderIntegerDotProductProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBlitImageInfo2(std::ostream &out, const VkBlitImageInfo2* structInfo, Decoded_VkBlitImageInfo2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderTerminateInvocationFeatures(std::ostream &out, const VkPhysicalDeviceShaderTerminateInvocationFeatures* structInfo, Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pregions_array = "NULL"; - if (structInfo->pRegions != NULL) { - pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); - std::string pregions_names; - for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pRegions + idx != NULL) { - variable_name = GenerateStruct_VkImageBlit2(out, - structInfo->pRegions + idx, - metaInfo->pRegions->GetMetaStructPointer() + idx, - consumer); - } - pregions_names += variable_name + ", "; - } - out << "\t\t" << "VkImageBlit2 " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcImage) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->srcImageLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstImage) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->dstImageLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; - struct_body << "\t\t\t" << pregions_array << "," << std::endl; - struct_body << "\t\t\t" << "VkFilter(" << structInfo->filter << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "blitImageInfo2"); - out << "\t\t" << "VkBlitImageInfo2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderTerminateInvocation << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderTerminateInvocationFeatures"); + out << "\t\t" << "VkPhysicalDeviceShaderTerminateInvocationFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBufferCopy2(std::ostream &out, const VkBufferCopy2* structInfo, Decoded_VkBufferCopy2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceSubgroupSizeControlFeatures(std::ostream &out, const VkPhysicalDeviceSubgroupSizeControlFeatures* structInfo, Decoded_VkPhysicalDeviceSubgroupSizeControlFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bufferCopy2"); - out << "\t\t" << "VkBufferCopy2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->subgroupSizeControl << "," << std::endl; + struct_body << "\t\t\t" << structInfo->computeFullSubgroups << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSubgroupSizeControlFeatures"); + out << "\t\t" << "VkPhysicalDeviceSubgroupSizeControlFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBufferImageCopy2(std::ostream &out, const VkBufferImageCopy2* structInfo, Decoded_VkBufferImageCopy2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceSubgroupSizeControlProperties(std::ostream &out, const VkPhysicalDeviceSubgroupSizeControlProperties* structInfo, Decoded_VkPhysicalDeviceSubgroupSizeControlProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string image_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, - &structInfo->imageSubresource, - metaInfo->imageSubresource, - consumer); - std::string image_offset_info_var = GenerateStruct_VkOffset3D(out, - &structInfo->imageOffset, - metaInfo->imageOffset, - consumer); - std::string image_extent_info_var = GenerateStruct_VkExtent3D(out, - &structInfo->imageExtent, - metaInfo->imageExtent, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferRowLength << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferImageHeight << "," << std::endl; - struct_body << "\t\t\t" << image_subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << image_offset_info_var << "," << std::endl; - struct_body << "\t\t\t" << image_extent_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bufferImageCopy2"); - out << "\t\t" << "VkBufferImageCopy2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->minSubgroupSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSubgroupSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxComputeWorkgroupSubgroups << "," << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->requiredSubgroupSizeStages << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSubgroupSizeControlProperties"); + out << "\t\t" << "VkPhysicalDeviceSubgroupSizeControlProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBufferMemoryBarrier2(std::ostream &out, const VkBufferMemoryBarrier2* structInfo, Decoded_VkBufferMemoryBarrier2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceSynchronization2Features(std::ostream &out, const VkPhysicalDeviceSynchronization2Features* structInfo, Decoded_VkPhysicalDeviceSynchronization2Features* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->srcStageMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags2(" << structInfo->srcAccessMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->dstStageMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags2(" << structInfo->dstAccessMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcQueueFamilyIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstQueueFamilyIndex << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bufferMemoryBarrier2"); - out << "\t\t" << "VkBufferMemoryBarrier2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->synchronization2 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSynchronization2Features"); + out << "\t\t" << "VkPhysicalDeviceSynchronization2Features " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCommandBufferInheritanceRenderingInfo(std::ostream &out, const VkCommandBufferInheritanceRenderingInfo* structInfo, Decoded_VkCommandBufferInheritanceRenderingInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceTexelBufferAlignmentProperties(std::ostream &out, const VkPhysicalDeviceTexelBufferAlignmentProperties* structInfo, Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcolor_attachment_formats_values; - std::string pcolor_attachment_formats_array = "NULL"; - if (structInfo->pColorAttachmentFormats != NULL) { - for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { - pcolor_attachment_formats_values += util::ToString(structInfo->pColorAttachmentFormats[idx]) + ", "; - } - pcolor_attachment_formats_array = "pColorAttachmentFormats_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkFormat " << pcolor_attachment_formats_array << "[] = {" << pcolor_attachment_formats_values << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkRenderingFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pcolor_attachment_formats_array << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->depthAttachmentFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->stencilAttachmentFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->rasterizationSamples << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "commandBufferInheritanceRenderingInfo"); - out << "\t\t" << "VkCommandBufferInheritanceRenderingInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->storageTexelBufferOffsetAlignmentBytes << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->storageTexelBufferOffsetSingleTexelAlignment << "," << std::endl; + struct_body << "\t\t\t" << structInfo->uniformTexelBufferOffsetAlignmentBytes << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->uniformTexelBufferOffsetSingleTexelAlignment << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTexelBufferAlignmentProperties"); + out << "\t\t" << "VkPhysicalDeviceTexelBufferAlignmentProperties " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceTextureCompressionASTCHDRFeatures(std::ostream &out, const VkPhysicalDeviceTextureCompressionASTCHDRFeatures* structInfo, Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->textureCompressionASTC_HDR << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTextureCompressionASTCHDRFeatures"); + out << "\t\t" << "VkPhysicalDeviceTextureCompressionASTCHDRFeatures " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceToolProperties(std::ostream &out, const VkPhysicalDeviceToolProperties* structInfo, Decoded_VkPhysicalDeviceToolProperties* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->name) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->version) << "," << std::endl; + struct_body << "\t\t\t" << "VkToolPurposeFlags(" << structInfo->purposes << ")" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->layer) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceToolProperties"); + out << "\t\t" << "VkPhysicalDeviceToolProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCommandBufferSubmitInfo(std::ostream &out, const VkCommandBufferSubmitInfo* structInfo, Decoded_VkCommandBufferSubmitInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVulkan13Features(std::ostream &out, const VkPhysicalDeviceVulkan13Features* structInfo, Decoded_VkPhysicalDeviceVulkan13Features* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->commandBuffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceMask << ","; - std::string variable_name = consumer.AddStruct(struct_body, "commandBufferSubmitInfo"); - out << "\t\t" << "VkCommandBufferSubmitInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->robustImageAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->inlineUniformBlock << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBindingInlineUniformBlockUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineCreationCacheControl << "," << std::endl; + struct_body << "\t\t\t" << structInfo->privateData << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDemoteToHelperInvocation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderTerminateInvocation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subgroupSizeControl << "," << std::endl; + struct_body << "\t\t\t" << structInfo->computeFullSubgroups << "," << std::endl; + struct_body << "\t\t\t" << structInfo->synchronization2 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->textureCompressionASTC_HDR << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderZeroInitializeWorkgroupMemory << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dynamicRendering << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderIntegerDotProduct << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maintenance4 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan13Features"); + out << "\t\t" << "VkPhysicalDeviceVulkan13Features " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCopyBufferInfo2(std::ostream &out, const VkCopyBufferInfo2* structInfo, Decoded_VkCopyBufferInfo2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVulkan13Properties(std::ostream &out, const VkPhysicalDeviceVulkan13Properties* structInfo, Decoded_VkPhysicalDeviceVulkan13Properties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pregions_array = "NULL"; - if (structInfo->pRegions != NULL) { - pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); - std::string pregions_names; - for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pRegions + idx != NULL) { - variable_name = GenerateStruct_VkBufferCopy2(out, - structInfo->pRegions + idx, - metaInfo->pRegions->GetMetaStructPointer() + idx, - consumer); - } - pregions_names += variable_name + ", "; - } - out << "\t\t" << "VkBufferCopy2 " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcBuffer) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstBuffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; - struct_body << "\t\t\t" << pregions_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "copyBufferInfo2"); - out << "\t\t" << "VkCopyBufferInfo2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->minSubgroupSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSubgroupSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxComputeWorkgroupSubgroups << "," << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->requiredSubgroupSizeStages << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxInlineUniformBlockSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorInlineUniformBlocks << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetInlineUniformBlocks << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindInlineUniformBlocks << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxInlineUniformTotalSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct8BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct8BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct8BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct4x8BitPackedUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct4x8BitPackedSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct4x8BitPackedMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct16BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct16BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct16BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct32BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct32BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct32BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct64BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct64BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProduct64BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating8BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating8BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating16BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating16BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating32BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating32BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating64BitUnsignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating64BitSignedAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->storageTexelBufferOffsetAlignmentBytes << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->storageTexelBufferOffsetSingleTexelAlignment << "," << std::endl; + struct_body << "\t\t\t" << structInfo->uniformTexelBufferOffsetAlignmentBytes << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->uniformTexelBufferOffsetSingleTexelAlignment << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxBufferSize << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan13Properties"); + out << "\t\t" << "VkPhysicalDeviceVulkan13Properties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCopyBufferToImageInfo2(std::ostream &out, const VkCopyBufferToImageInfo2* structInfo, Decoded_VkCopyBufferToImageInfo2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(std::ostream &out, const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* structInfo, Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pregions_array = "NULL"; - if (structInfo->pRegions != NULL) { - pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); - std::string pregions_names; - for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pRegions + idx != NULL) { - variable_name = GenerateStruct_VkBufferImageCopy2(out, - structInfo->pRegions + idx, - metaInfo->pRegions->GetMetaStructPointer() + idx, - consumer); - } - pregions_names += variable_name + ", "; - } - out << "\t\t" << "VkBufferImageCopy2 " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcBuffer) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstImage) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->dstImageLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; - struct_body << "\t\t\t" << pregions_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "copyBufferToImageInfo2"); - out << "\t\t" << "VkCopyBufferToImageInfo2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderZeroInitializeWorkgroupMemory << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceZeroInitializeWorkgroupMemoryFeatures"); + out << "\t\t" << "VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCopyImageInfo2(std::ostream &out, const VkCopyImageInfo2* structInfo, Decoded_VkCopyImageInfo2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineCreationFeedback(std::ostream &out, const VkPipelineCreationFeedback* structInfo, Decoded_VkPipelineCreationFeedback* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pregions_array = "NULL"; - if (structInfo->pRegions != NULL) { - pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); - std::string pregions_names; - for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pRegions + idx != NULL) { - variable_name = GenerateStruct_VkImageCopy2(out, - structInfo->pRegions + idx, - metaInfo->pRegions->GetMetaStructPointer() + idx, - consumer); - } - pregions_names += variable_name + ", "; - } - out << "\t\t" << "VkImageCopy2 " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; - } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcImage) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->srcImageLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstImage) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->dstImageLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; - struct_body << "\t\t\t" << pregions_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "copyImageInfo2"); - out << "\t\t" << "VkCopyImageInfo2 " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkPipelineCreationFeedbackFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->duration << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineCreationFeedback"); + out << "\t\t" << "VkPipelineCreationFeedback " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCopyImageToBufferInfo2(std::ostream &out, const VkCopyImageToBufferInfo2* structInfo, Decoded_VkCopyImageToBufferInfo2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineCreationFeedbackCreateInfo(std::ostream &out, const VkPipelineCreationFeedbackCreateInfo* structInfo, Decoded_VkPipelineCreationFeedbackCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pregions_array = "NULL"; - if (structInfo->pRegions != NULL) { - pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); - std::string pregions_names; - for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { + std::string ppipeline_creation_feedback_name = "NULL"; + if (structInfo->pPipelineCreationFeedback != NULL) { + ppipeline_creation_feedback_name = GenerateStruct_VkPipelineCreationFeedback(out, + structInfo->pPipelineCreationFeedback, + metaInfo->pPipelineCreationFeedback->GetMetaStructPointer(), + consumer); + ppipeline_creation_feedback_name.insert(0, "&"); + } + std::string ppipeline_stage_creation_feedbacks_array = "NULL"; + if (structInfo->pPipelineStageCreationFeedbacks != NULL) { + ppipeline_stage_creation_feedbacks_array = "pPipelineStageCreationFeedbacks_" + std::to_string(consumer.GetNextId()); + std::string ppipeline_stage_creation_feedbacks_names; + for (uint32_t idx = 0; idx < structInfo->pipelineStageCreationFeedbackCount; idx++) { std::string variable_name = "NULL"; - if (structInfo->pRegions + idx != NULL) { - variable_name = GenerateStruct_VkBufferImageCopy2(out, - structInfo->pRegions + idx, - metaInfo->pRegions->GetMetaStructPointer() + idx, - consumer); + if (structInfo->pPipelineStageCreationFeedbacks + idx != NULL) { + variable_name = GenerateStruct_VkPipelineCreationFeedback(out, + structInfo->pPipelineStageCreationFeedbacks + idx, + metaInfo->pPipelineStageCreationFeedbacks->GetMetaStructPointer() + idx, + consumer); } - pregions_names += variable_name + ", "; + ppipeline_stage_creation_feedbacks_names += variable_name + ", "; } - out << "\t\t" << "VkBufferImageCopy2 " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; + out << "\t\t" << "VkPipelineCreationFeedback " << ppipeline_stage_creation_feedbacks_array << "[] = {" << ppipeline_stage_creation_feedbacks_names << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcImage) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->srcImageLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstBuffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; - struct_body << "\t\t\t" << pregions_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "copyImageToBufferInfo2"); - out << "\t\t" << "VkCopyImageToBufferInfo2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << ppipeline_creation_feedback_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineStageCreationFeedbackCount << "," << std::endl; + struct_body << "\t\t\t" << ppipeline_stage_creation_feedbacks_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineCreationFeedbackCreateInfo"); + out << "\t\t" << "VkPipelineCreationFeedbackCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDependencyInfo(std::ostream &out, const VkDependencyInfo* structInfo, Decoded_VkDependencyInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineRenderingCreateInfo(std::ostream &out, const VkPipelineRenderingCreateInfo* structInfo, Decoded_VkPipelineRenderingCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pmemory_barriers_array = "NULL"; - if (structInfo->pMemoryBarriers != NULL) { - pmemory_barriers_array = "pMemoryBarriers_" + std::to_string(consumer.GetNextId()); - std::string pmemory_barriers_names; - for (uint32_t idx = 0; idx < structInfo->memoryBarrierCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pMemoryBarriers + idx != NULL) { - variable_name = GenerateStruct_VkMemoryBarrier2(out, - structInfo->pMemoryBarriers + idx, - metaInfo->pMemoryBarriers->GetMetaStructPointer() + idx, - consumer); - } - pmemory_barriers_names += variable_name + ", "; - } - out << "\t\t" << "VkMemoryBarrier2 " << pmemory_barriers_array << "[] = {" << pmemory_barriers_names << "};" << std::endl; - } - std::string pbuffer_memory_barriers_array = "NULL"; - if (structInfo->pBufferMemoryBarriers != NULL) { - pbuffer_memory_barriers_array = "pBufferMemoryBarriers_" + std::to_string(consumer.GetNextId()); - std::string pbuffer_memory_barriers_names; - for (uint32_t idx = 0; idx < structInfo->bufferMemoryBarrierCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pBufferMemoryBarriers + idx != NULL) { - variable_name = GenerateStruct_VkBufferMemoryBarrier2(out, - structInfo->pBufferMemoryBarriers + idx, - metaInfo->pBufferMemoryBarriers->GetMetaStructPointer() + idx, - consumer); - } - pbuffer_memory_barriers_names += variable_name + ", "; - } - out << "\t\t" << "VkBufferMemoryBarrier2 " << pbuffer_memory_barriers_array << "[] = {" << pbuffer_memory_barriers_names << "};" << std::endl; - } - std::string pimage_memory_barriers_array = "NULL"; - if (structInfo->pImageMemoryBarriers != NULL) { - pimage_memory_barriers_array = "pImageMemoryBarriers_" + std::to_string(consumer.GetNextId()); - std::string pimage_memory_barriers_names; - for (uint32_t idx = 0; idx < structInfo->imageMemoryBarrierCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pImageMemoryBarriers + idx != NULL) { - variable_name = GenerateStruct_VkImageMemoryBarrier2(out, - structInfo->pImageMemoryBarriers + idx, - metaInfo->pImageMemoryBarriers->GetMetaStructPointer() + idx, - consumer); - } - pimage_memory_barriers_names += variable_name + ", "; + std::string pcolor_attachment_formats_values; + std::string pcolor_attachment_formats_array = "NULL"; + if (structInfo->pColorAttachmentFormats != NULL) { + for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { + pcolor_attachment_formats_values += util::ToString(structInfo->pColorAttachmentFormats[idx]) + ", "; } - out << "\t\t" << "VkImageMemoryBarrier2 " << pimage_memory_barriers_array << "[] = {" << pimage_memory_barriers_names << "};" << std::endl; + pcolor_attachment_formats_array = "pColorAttachmentFormats_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkFormat " << pcolor_attachment_formats_array << "[] = {" << pcolor_attachment_formats_values << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDependencyFlags(" << structInfo->dependencyFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryBarrierCount << "," << std::endl; - struct_body << "\t\t\t" << pmemory_barriers_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferMemoryBarrierCount << "," << std::endl; - struct_body << "\t\t\t" << pbuffer_memory_barriers_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageMemoryBarrierCount << "," << std::endl; - struct_body << "\t\t\t" << pimage_memory_barriers_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "dependencyInfo"); - out << "\t\t" << "VkDependencyInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->viewMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pcolor_attachment_formats_array << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->depthAttachmentFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->stencilAttachmentFormat << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineRenderingCreateInfo"); + out << "\t\t" << "VkPipelineRenderingCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDescriptorPoolInlineUniformBlockCreateInfo(std::ostream &out, const VkDescriptorPoolInlineUniformBlockCreateInfo* structInfo, Decoded_VkDescriptorPoolInlineUniformBlockCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(std::ostream &out, const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* structInfo, Decoded_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxInlineUniformBlockBindings << ","; - std::string variable_name = consumer.AddStruct(struct_body, "descriptorPoolInlineUniformBlockCreateInfo"); - out << "\t\t" << "VkDescriptorPoolInlineUniformBlockCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->requiredSubgroupSize << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineShaderStageRequiredSubgroupSizeCreateInfo"); + out << "\t\t" << "VkPipelineShaderStageRequiredSubgroupSizeCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceBufferMemoryRequirements(std::ostream &out, const VkDeviceBufferMemoryRequirements* structInfo, Decoded_VkDeviceBufferMemoryRequirements* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPrivateDataSlotCreateInfo(std::ostream &out, const VkPrivateDataSlotCreateInfo* structInfo, Decoded_VkPrivateDataSlotCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcreate_info_struct = "NULL"; - if (structInfo->pCreateInfo != NULL) { - pcreate_info_struct = GenerateStruct_VkBufferCreateInfo(out, - structInfo->pCreateInfo, - metaInfo->pCreateInfo->GetMetaStructPointer(), - consumer); - pcreate_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pcreate_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceBufferMemoryRequirements"); - out << "\t\t" << "VkDeviceBufferMemoryRequirements " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPrivateDataSlotCreateFlags(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "privateDataSlotCreateInfo"); + out << "\t\t" << "VkPrivateDataSlotCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceImageMemoryRequirements(std::ostream &out, const VkDeviceImageMemoryRequirements* structInfo, Decoded_VkDeviceImageMemoryRequirements* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderingAttachmentInfo(std::ostream &out, const VkRenderingAttachmentInfo* structInfo, Decoded_VkRenderingAttachmentInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcreate_info_struct = "NULL"; - if (structInfo->pCreateInfo != NULL) { - pcreate_info_struct = GenerateStruct_VkImageCreateInfo(out, - structInfo->pCreateInfo, - metaInfo->pCreateInfo->GetMetaStructPointer(), - consumer); - pcreate_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pcreate_info_struct << "," << std::endl; - struct_body << "\t\t\t" << "VkImageAspectFlagBits(" << structInfo->planeAspect << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceImageMemoryRequirements"); - out << "\t\t" << "VkDeviceImageMemoryRequirements " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->imageView) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->imageLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkResolveModeFlagBits(" << structInfo->resolveMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->resolveImageView) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->resolveImageLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAttachmentLoadOp(" << structInfo->loadOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAttachmentStoreOp(" << structInfo->storeOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(structInfo->clearValue) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderingAttachmentInfo"); + out << "\t\t" << "VkRenderingAttachmentInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDevicePrivateDataCreateInfo(std::ostream &out, const VkDevicePrivateDataCreateInfo* structInfo, Decoded_VkDevicePrivateDataCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderingInfo(std::ostream &out, const VkRenderingInfo* structInfo, Decoded_VkRenderingInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string render_area_info_var = GenerateStruct_VkRect2D(out, + &structInfo->renderArea, + metaInfo->renderArea, + consumer); + std::string pcolor_attachments_array = "NULL"; + if (structInfo->pColorAttachments != NULL) { + pcolor_attachments_array = "pColorAttachments_" + std::to_string(consumer.GetNextId()); + std::string pcolor_attachments_names; + for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pColorAttachments + idx != NULL) { + variable_name = GenerateStruct_VkRenderingAttachmentInfo(out, + structInfo->pColorAttachments + idx, + metaInfo->pColorAttachments->GetMetaStructPointer() + idx, + consumer); + } + pcolor_attachments_names += variable_name + ", "; + } + out << "\t\t" << "VkRenderingAttachmentInfo " << pcolor_attachments_array << "[] = {" << pcolor_attachments_names << "};" << std::endl; + } + std::string pdepth_attachment_struct = "NULL"; + if (structInfo->pDepthAttachment != NULL) { + pdepth_attachment_struct = GenerateStruct_VkRenderingAttachmentInfo(out, + structInfo->pDepthAttachment, + metaInfo->pDepthAttachment->GetMetaStructPointer(), + consumer); + pdepth_attachment_struct.insert(0, "&"); + } + std::string pstencil_attachment_struct = "NULL"; + if (structInfo->pStencilAttachment != NULL) { + pstencil_attachment_struct = GenerateStruct_VkRenderingAttachmentInfo(out, + structInfo->pStencilAttachment, + metaInfo->pStencilAttachment->GetMetaStructPointer(), + consumer); + pstencil_attachment_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->privateDataSlotRequestCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "devicePrivateDataCreateInfo"); - out << "\t\t" << "VkDevicePrivateDataCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkRenderingFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << render_area_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->layerCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->viewMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pcolor_attachments_array << "," << std::endl; + struct_body << "\t\t\t" << pdepth_attachment_struct << "," << std::endl; + struct_body << "\t\t\t" << pstencil_attachment_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderingInfo"); + out << "\t\t" << "VkRenderingInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkFormatProperties3(std::ostream &out, const VkFormatProperties3* structInfo, Decoded_VkFormatProperties3* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkResolveImageInfo2(std::ostream &out, const VkResolveImageInfo2* structInfo, Decoded_VkResolveImageInfo2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pregions_array = "NULL"; + if (structInfo->pRegions != NULL) { + pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); + std::string pregions_names; + for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pRegions + idx != NULL) { + variable_name = GenerateStruct_VkImageResolve2(out, + structInfo->pRegions + idx, + metaInfo->pRegions->GetMetaStructPointer() + idx, + consumer); + } + pregions_names += variable_name + ", "; + } + out << "\t\t" << "VkImageResolve2 " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFormatFeatureFlags2(" << structInfo->linearTilingFeatures << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormatFeatureFlags2(" << structInfo->optimalTilingFeatures << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormatFeatureFlags2(" << structInfo->bufferFeatures << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "formatProperties3"); - out << "\t\t" << "VkFormatProperties3 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcImage) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->srcImageLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstImage) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->dstImageLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; + struct_body << "\t\t\t" << pregions_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "resolveImageInfo2"); + out << "\t\t" << "VkResolveImageInfo2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageBlit2(std::ostream &out, const VkImageBlit2* structInfo, Decoded_VkImageBlit2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSemaphoreSubmitInfo(std::ostream &out, const VkSemaphoreSubmitInfo* structInfo, Decoded_VkSemaphoreSubmitInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string src_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, - &structInfo->srcSubresource, - metaInfo->srcSubresource, - consumer); - std::string dst_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, - &structInfo->dstSubresource, - metaInfo->dstSubresource, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << src_subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->srcOffsets[0]), 2) << "," << std::endl; - struct_body << "\t\t\t" << dst_subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->dstOffsets[0]), 2) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageBlit2"); - out << "\t\t" << "VkImageBlit2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->value << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->stageMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "semaphoreSubmitInfo"); + out << "\t\t" << "VkSemaphoreSubmitInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageCopy2(std::ostream &out, const VkImageCopy2* structInfo, Decoded_VkImageCopy2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkWriteDescriptorSetInlineUniformBlock(std::ostream &out, const VkWriteDescriptorSetInlineUniformBlock* structInfo, Decoded_VkWriteDescriptorSetInlineUniformBlock* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string src_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, - &structInfo->srcSubresource, - metaInfo->srcSubresource, - consumer); - std::string src_offset_info_var = GenerateStruct_VkOffset3D(out, - &structInfo->srcOffset, - metaInfo->srcOffset, - consumer); - std::string dst_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, - &structInfo->dstSubresource, - metaInfo->dstSubresource, - consumer); - std::string dst_offset_info_var = GenerateStruct_VkOffset3D(out, - &structInfo->dstOffset, - metaInfo->dstOffset, - consumer); - std::string extent_info_var = GenerateStruct_VkExtent3D(out, - &structInfo->extent, - metaInfo->extent, - consumer); + std::string pdata_array = "NULL"; + if (structInfo->pData != NULL) { + std::string pdata_values; + for (uint32_t idx0 = 0; idx0 < structInfo->dataSize; ++idx0) { + pdata_values += std::to_string(reinterpret_cast(structInfo->pData)[idx0]) + ", "; + } + pdata_array = "pData_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint8_t " << pdata_array << "[] = {" << pdata_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << src_subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << src_offset_info_var << "," << std::endl; - struct_body << "\t\t\t" << dst_subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << dst_offset_info_var << "," << std::endl; - struct_body << "\t\t\t" << extent_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageCopy2"); - out << "\t\t" << "VkImageCopy2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->dataSize << "," << std::endl; + struct_body << "\t\t\t" << pdata_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "writeDescriptorSetInlineUniformBlock"); + out << "\t\t" << "VkWriteDescriptorSetInlineUniformBlock " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageMemoryBarrier2(std::ostream &out, const VkImageMemoryBarrier2* structInfo, Decoded_VkImageMemoryBarrier2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindDescriptorSetsInfo(std::ostream &out, const VkBindDescriptorSetsInfo* structInfo, Decoded_VkBindDescriptorSetsInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string subresource_range_info_var = GenerateStruct_VkImageSubresourceRange(out, - &structInfo->subresourceRange, - metaInfo->subresourceRange, - consumer); + std::string pdescriptor_sets_array = "NULL"; + if (metaInfo->pDescriptorSets.GetPointer() != NULL && structInfo->descriptorSetCount > 0) { + pdescriptor_sets_array = "pdescriptor_sets_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DESCRIPTOR_SET)); + std::string pdescriptor_sets_values = toStringJoin(metaInfo->pDescriptorSets.GetPointer(), + metaInfo->pDescriptorSets.GetPointer() + structInfo->descriptorSetCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->descriptorSetCount == 1) { + pdescriptor_sets_array = "&" + pdescriptor_sets_values; + } else if (structInfo->descriptorSetCount > 1) { + out << "\t\t" << "VkDescriptorSet " << pdescriptor_sets_array << "[] = {" << pdescriptor_sets_values << "};" << std::endl; + } + } + std::string pdynamic_offsets_array = "NULL"; + if (structInfo->pDynamicOffsets != NULL) { + pdynamic_offsets_array = "pDynamicOffsets_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pdynamic_offsets_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDynamicOffsets, structInfo->dynamicOffsetCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->srcStageMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags2(" << structInfo->srcAccessMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->dstStageMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags2(" << structInfo->dstAccessMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->oldLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->newLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcQueueFamilyIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstQueueFamilyIndex << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; - struct_body << "\t\t\t" << subresource_range_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageMemoryBarrier2"); - out << "\t\t" << "VkImageMemoryBarrier2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->stageFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->firstSet << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorSetCount << "," << std::endl; + struct_body << "\t\t\t" << pdescriptor_sets_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dynamicOffsetCount << "," << std::endl; + struct_body << "\t\t\t" << pdynamic_offsets_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindDescriptorSetsInfo"); + out << "\t\t" << "VkBindDescriptorSetsInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageResolve2(std::ostream &out, const VkImageResolve2* structInfo, Decoded_VkImageResolve2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindMemoryStatus(std::ostream &out, const VkBindMemoryStatus* structInfo, Decoded_VkBindMemoryStatus* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string src_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, - &structInfo->srcSubresource, - metaInfo->srcSubresource, - consumer); - std::string src_offset_info_var = GenerateStruct_VkOffset3D(out, - &structInfo->srcOffset, - metaInfo->srcOffset, - consumer); - std::string dst_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, - &structInfo->dstSubresource, - metaInfo->dstSubresource, - consumer); - std::string dst_offset_info_var = GenerateStruct_VkOffset3D(out, - &structInfo->dstOffset, - metaInfo->dstOffset, - consumer); - std::string extent_info_var = GenerateStruct_VkExtent3D(out, - &structInfo->extent, - metaInfo->extent, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << src_subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << src_offset_info_var << "," << std::endl; - struct_body << "\t\t\t" << dst_subresource_info_var << "," << std::endl; - struct_body << "\t\t\t" << dst_offset_info_var << "," << std::endl; - struct_body << "\t\t\t" << extent_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageResolve2"); - out << "\t\t" << "VkImageResolve2 " << variable_name << " {" << std::endl; + out << "\t\t" << "// TODO: Support pResult (non-struct output) argument." << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "bindMemoryStatus"); + out << "\t\t" << "VkBindMemoryStatus " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryBarrier2(std::ostream &out, const VkMemoryBarrier2* structInfo, Decoded_VkMemoryBarrier2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBufferUsageFlags2CreateInfo(std::ostream &out, const VkBufferUsageFlags2CreateInfo* structInfo, Decoded_VkBufferUsageFlags2CreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->srcStageMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags2(" << structInfo->srcAccessMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->dstStageMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags2(" << structInfo->dstAccessMask << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryBarrier2"); - out << "\t\t" << "VkMemoryBarrier2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkBufferUsageFlags2(" << structInfo->usage << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bufferUsageFlags2CreateInfo"); + out << "\t\t" << "VkBufferUsageFlags2CreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDynamicRenderingFeatures(std::ostream &out, const VkPhysicalDeviceDynamicRenderingFeatures* structInfo, Decoded_VkPhysicalDeviceDynamicRenderingFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCopyImageToImageInfo(std::ostream &out, const VkCopyImageToImageInfo* structInfo, Decoded_VkCopyImageToImageInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pregions_array = "NULL"; + if (structInfo->pRegions != NULL) { + pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); + std::string pregions_names; + for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pRegions + idx != NULL) { + variable_name = GenerateStruct_VkImageCopy2(out, + structInfo->pRegions + idx, + metaInfo->pRegions->GetMetaStructPointer() + idx, + consumer); + } + pregions_names += variable_name + ", "; + } + out << "\t\t" << "VkImageCopy2 " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dynamicRendering << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDynamicRenderingFeatures"); - out << "\t\t" << "VkPhysicalDeviceDynamicRenderingFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkHostImageCopyFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcImage) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->srcImageLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstImage) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->dstImageLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; + struct_body << "\t\t\t" << pregions_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "copyImageToImageInfo"); + out << "\t\t" << "VkCopyImageToImageInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceImageRobustnessFeatures(std::ostream &out, const VkPhysicalDeviceImageRobustnessFeatures* structInfo, Decoded_VkPhysicalDeviceImageRobustnessFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceImageSubresourceInfo(std::ostream &out, const VkDeviceImageSubresourceInfo* structInfo, Decoded_VkDeviceImageSubresourceInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pcreate_info_struct = "NULL"; + if (structInfo->pCreateInfo != NULL) { + pcreate_info_struct = GenerateStruct_VkImageCreateInfo(out, + structInfo->pCreateInfo, + metaInfo->pCreateInfo->GetMetaStructPointer(), + consumer); + pcreate_info_struct.insert(0, "&"); + } + std::string psubresource_struct = "NULL"; + if (structInfo->pSubresource != NULL) { + psubresource_struct = GenerateStruct_VkImageSubresource2(out, + structInfo->pSubresource, + metaInfo->pSubresource->GetMetaStructPointer(), + consumer); + psubresource_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->robustImageAccess << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageRobustnessFeatures"); - out << "\t\t" << "VkPhysicalDeviceImageRobustnessFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pcreate_info_struct << "," << std::endl; + struct_body << "\t\t\t" << psubresource_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceImageSubresourceInfo"); + out << "\t\t" << "VkDeviceImageSubresourceInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceInlineUniformBlockFeatures(std::ostream &out, const VkPhysicalDeviceInlineUniformBlockFeatures* structInfo, Decoded_VkPhysicalDeviceInlineUniformBlockFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceQueueGlobalPriorityCreateInfo(std::ostream &out, const VkDeviceQueueGlobalPriorityCreateInfo* structInfo, Decoded_VkDeviceQueueGlobalPriorityCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->inlineUniformBlock << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingInlineUniformBlockUpdateAfterBind << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceInlineUniformBlockFeatures"); - out << "\t\t" << "VkPhysicalDeviceInlineUniformBlockFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkQueueGlobalPriority(" << structInfo->globalPriority << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceQueueGlobalPriorityCreateInfo"); + out << "\t\t" << "VkDeviceQueueGlobalPriorityCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceInlineUniformBlockProperties(std::ostream &out, const VkPhysicalDeviceInlineUniformBlockProperties* structInfo, Decoded_VkPhysicalDeviceInlineUniformBlockProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkHostImageCopyDevicePerformanceQuery(std::ostream &out, const VkHostImageCopyDevicePerformanceQuery* structInfo, Decoded_VkHostImageCopyDevicePerformanceQuery* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxInlineUniformBlockSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorInlineUniformBlocks << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetInlineUniformBlocks << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindInlineUniformBlocks << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceInlineUniformBlockProperties"); - out << "\t\t" << "VkPhysicalDeviceInlineUniformBlockProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->optimalDeviceAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->identicalMemoryLayout << ","; + std::string variable_name = consumer.AddStruct(struct_body, "hostImageCopyDevicePerformanceQuery"); + out << "\t\t" << "VkHostImageCopyDevicePerformanceQuery " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMaintenance4Features(std::ostream &out, const VkPhysicalDeviceMaintenance4Features* structInfo, Decoded_VkPhysicalDeviceMaintenance4Features* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkHostImageLayoutTransitionInfo(std::ostream &out, const VkHostImageLayoutTransitionInfo* structInfo, Decoded_VkHostImageLayoutTransitionInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string subresource_range_info_var = GenerateStruct_VkImageSubresourceRange(out, + &structInfo->subresourceRange, + metaInfo->subresourceRange, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maintenance4 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance4Features"); - out << "\t\t" << "VkPhysicalDeviceMaintenance4Features " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->oldLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->newLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << subresource_range_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "hostImageLayoutTransitionInfo"); + out << "\t\t" << "VkHostImageLayoutTransitionInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMaintenance4Properties(std::ostream &out, const VkPhysicalDeviceMaintenance4Properties* structInfo, Decoded_VkPhysicalDeviceMaintenance4Properties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageSubresource2(std::ostream &out, const VkImageSubresource2* structInfo, Decoded_VkImageSubresource2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string image_subresource_info_var = GenerateStruct_VkImageSubresource(out, + &structInfo->imageSubresource, + metaInfo->imageSubresource, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxBufferSize << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance4Properties"); - out << "\t\t" << "VkPhysicalDeviceMaintenance4Properties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << image_subresource_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageSubresource2"); + out << "\t\t" << "VkImageSubresource2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePipelineCreationCacheControlFeatures(std::ostream &out, const VkPhysicalDevicePipelineCreationCacheControlFeatures* structInfo, Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryMapInfo(std::ostream &out, const VkMemoryMapInfo* structInfo, Decoded_VkMemoryMapInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineCreationCacheControl << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineCreationCacheControlFeatures"); - out << "\t\t" << "VkPhysicalDevicePipelineCreationCacheControlFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkMemoryMapFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryMapInfo"); + out << "\t\t" << "VkMemoryMapInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePrivateDataFeatures(std::ostream &out, const VkPhysicalDevicePrivateDataFeatures* structInfo, Decoded_VkPhysicalDevicePrivateDataFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryUnmapInfo(std::ostream &out, const VkMemoryUnmapInfo* structInfo, Decoded_VkMemoryUnmapInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->privateData << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePrivateDataFeatures"); - out << "\t\t" << "VkPhysicalDevicePrivateDataFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkMemoryUnmapFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryUnmapInfo"); + out << "\t\t" << "VkMemoryUnmapInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures(std::ostream &out, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* structInfo, Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDynamicRenderingLocalReadFeatures(std::ostream &out, const VkPhysicalDeviceDynamicRenderingLocalReadFeatures* structInfo, Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDemoteToHelperInvocation << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderDemoteToHelperInvocationFeatures"); - out << "\t\t" << "VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->dynamicRenderingLocalRead << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDynamicRenderingLocalReadFeatures"); + out << "\t\t" << "VkPhysicalDeviceDynamicRenderingLocalReadFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderIntegerDotProductFeatures(std::ostream &out, const VkPhysicalDeviceShaderIntegerDotProductFeatures* structInfo, Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceGlobalPriorityQueryFeatures(std::ostream &out, const VkPhysicalDeviceGlobalPriorityQueryFeatures* structInfo, Decoded_VkPhysicalDeviceGlobalPriorityQueryFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderIntegerDotProduct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderIntegerDotProductFeatures"); - out << "\t\t" << "VkPhysicalDeviceShaderIntegerDotProductFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->globalPriorityQuery << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceGlobalPriorityQueryFeatures"); + out << "\t\t" << "VkPhysicalDeviceGlobalPriorityQueryFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderIntegerDotProductProperties(std::ostream &out, const VkPhysicalDeviceShaderIntegerDotProductProperties* structInfo, Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceHostImageCopyFeatures(std::ostream &out, const VkPhysicalDeviceHostImageCopyFeatures* structInfo, Decoded_VkPhysicalDeviceHostImageCopyFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct8BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct8BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct8BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct4x8BitPackedUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct4x8BitPackedSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct4x8BitPackedMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct16BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct16BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct16BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct32BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct32BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct32BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct64BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct64BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct64BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating8BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating8BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating16BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating16BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating32BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating32BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating64BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating64BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderIntegerDotProductProperties"); - out << "\t\t" << "VkPhysicalDeviceShaderIntegerDotProductProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->hostImageCopy << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceHostImageCopyFeatures"); + out << "\t\t" << "VkPhysicalDeviceHostImageCopyFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderTerminateInvocationFeatures(std::ostream &out, const VkPhysicalDeviceShaderTerminateInvocationFeatures* structInfo, Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceHostImageCopyProperties(std::ostream &out, const VkPhysicalDeviceHostImageCopyProperties* structInfo, Decoded_VkPhysicalDeviceHostImageCopyProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pcopy_src_layouts_array = "NULL"; + if (structInfo->pCopySrcLayouts != NULL) { + std::string pcopy_src_layouts_values; + for (uint32_t idx = 0; idx < structInfo->copySrcLayoutCount; idx++) { + pcopy_src_layouts_values += util::ToString(structInfo->pCopySrcLayouts[idx]) + ", "; + } + pcopy_src_layouts_array = "pCopySrcLayouts_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkImageLayout " << pcopy_src_layouts_array << "[] = {" << pcopy_src_layouts_values << "};" << std::endl; + } + std::string pcopy_dst_layouts_array = "NULL"; + if (structInfo->pCopyDstLayouts != NULL) { + std::string pcopy_dst_layouts_values; + for (uint32_t idx = 0; idx < structInfo->copyDstLayoutCount; idx++) { + pcopy_dst_layouts_values += util::ToString(structInfo->pCopyDstLayouts[idx]) + ", "; + } + pcopy_dst_layouts_array = "pCopyDstLayouts_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkImageLayout " << pcopy_dst_layouts_array << "[] = {" << pcopy_dst_layouts_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderTerminateInvocation << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderTerminateInvocationFeatures"); - out << "\t\t" << "VkPhysicalDeviceShaderTerminateInvocationFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->copySrcLayoutCount << "," << std::endl; + struct_body << "\t\t\t" << pcopy_src_layouts_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->copyDstLayoutCount << "," << std::endl; + struct_body << "\t\t\t" << pcopy_dst_layouts_array << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->optimalTilingLayoutUUID[0]), VK_UUID_SIZE) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->identicalMemoryTypeRequirements << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceHostImageCopyProperties"); + out << "\t\t" << "VkPhysicalDeviceHostImageCopyProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSubgroupSizeControlFeatures(std::ostream &out, const VkPhysicalDeviceSubgroupSizeControlFeatures* structInfo, Decoded_VkPhysicalDeviceSubgroupSizeControlFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceIndexTypeUint8Features(std::ostream &out, const VkPhysicalDeviceIndexTypeUint8Features* structInfo, Decoded_VkPhysicalDeviceIndexTypeUint8Features* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subgroupSizeControl << "," << std::endl; - struct_body << "\t\t\t" << structInfo->computeFullSubgroups << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSubgroupSizeControlFeatures"); - out << "\t\t" << "VkPhysicalDeviceSubgroupSizeControlFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->indexTypeUint8 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceIndexTypeUint8Features"); + out << "\t\t" << "VkPhysicalDeviceIndexTypeUint8Features " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSubgroupSizeControlProperties(std::ostream &out, const VkPhysicalDeviceSubgroupSizeControlProperties* structInfo, Decoded_VkPhysicalDeviceSubgroupSizeControlProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceLineRasterizationFeatures(std::ostream &out, const VkPhysicalDeviceLineRasterizationFeatures* structInfo, Decoded_VkPhysicalDeviceLineRasterizationFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minSubgroupSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSubgroupSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxComputeWorkgroupSubgroups << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->requiredSubgroupSizeStages << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSubgroupSizeControlProperties"); - out << "\t\t" << "VkPhysicalDeviceSubgroupSizeControlProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->rectangularLines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bresenhamLines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->smoothLines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stippledRectangularLines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stippledBresenhamLines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stippledSmoothLines << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLineRasterizationFeatures"); + out << "\t\t" << "VkPhysicalDeviceLineRasterizationFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSynchronization2Features(std::ostream &out, const VkPhysicalDeviceSynchronization2Features* structInfo, Decoded_VkPhysicalDeviceSynchronization2Features* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceLineRasterizationProperties(std::ostream &out, const VkPhysicalDeviceLineRasterizationProperties* structInfo, Decoded_VkPhysicalDeviceLineRasterizationProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->synchronization2 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSynchronization2Features"); - out << "\t\t" << "VkPhysicalDeviceSynchronization2Features " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->lineSubPixelPrecisionBits << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLineRasterizationProperties"); + out << "\t\t" << "VkPhysicalDeviceLineRasterizationProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceTexelBufferAlignmentProperties(std::ostream &out, const VkPhysicalDeviceTexelBufferAlignmentProperties* structInfo, Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMaintenance5Features(std::ostream &out, const VkPhysicalDeviceMaintenance5Features* structInfo, Decoded_VkPhysicalDeviceMaintenance5Features* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->storageTexelBufferOffsetAlignmentBytes << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->storageTexelBufferOffsetSingleTexelAlignment << "," << std::endl; - struct_body << "\t\t\t" << structInfo->uniformTexelBufferOffsetAlignmentBytes << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->uniformTexelBufferOffsetSingleTexelAlignment << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTexelBufferAlignmentProperties"); - out << "\t\t" << "VkPhysicalDeviceTexelBufferAlignmentProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maintenance5 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance5Features"); + out << "\t\t" << "VkPhysicalDeviceMaintenance5Features " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceTextureCompressionASTCHDRFeatures(std::ostream &out, const VkPhysicalDeviceTextureCompressionASTCHDRFeatures* structInfo, Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMaintenance5Properties(std::ostream &out, const VkPhysicalDeviceMaintenance5Properties* structInfo, Decoded_VkPhysicalDeviceMaintenance5Properties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->textureCompressionASTC_HDR << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTextureCompressionASTCHDRFeatures"); - out << "\t\t" << "VkPhysicalDeviceTextureCompressionASTCHDRFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->earlyFragmentMultisampleCoverageAfterSampleCounting << "," << std::endl; + struct_body << "\t\t\t" << structInfo->earlyFragmentSampleMaskTestBeforeSampleCounting << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthStencilSwizzleOneSupport << "," << std::endl; + struct_body << "\t\t\t" << structInfo->polygonModePointSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->nonStrictSinglePixelWideLinesUseParallelogram << "," << std::endl; + struct_body << "\t\t\t" << structInfo->nonStrictWideLinesUseParallelogram << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance5Properties"); + out << "\t\t" << "VkPhysicalDeviceMaintenance5Properties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceToolProperties(std::ostream &out, const VkPhysicalDeviceToolProperties* structInfo, Decoded_VkPhysicalDeviceToolProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMaintenance6Features(std::ostream &out, const VkPhysicalDeviceMaintenance6Features* structInfo, Decoded_VkPhysicalDeviceMaintenance6Features* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->name) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->version) << "," << std::endl; - struct_body << "\t\t\t" << "VkToolPurposeFlags(" << structInfo->purposes << ")" << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->layer) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceToolProperties"); - out << "\t\t" << "VkPhysicalDeviceToolProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maintenance6 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance6Features"); + out << "\t\t" << "VkPhysicalDeviceMaintenance6Features " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVulkan13Features(std::ostream &out, const VkPhysicalDeviceVulkan13Features* structInfo, Decoded_VkPhysicalDeviceVulkan13Features* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMaintenance6Properties(std::ostream &out, const VkPhysicalDeviceMaintenance6Properties* structInfo, Decoded_VkPhysicalDeviceMaintenance6Properties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->robustImageAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->inlineUniformBlock << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorBindingInlineUniformBlockUpdateAfterBind << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineCreationCacheControl << "," << std::endl; - struct_body << "\t\t\t" << structInfo->privateData << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDemoteToHelperInvocation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderTerminateInvocation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subgroupSizeControl << "," << std::endl; - struct_body << "\t\t\t" << structInfo->computeFullSubgroups << "," << std::endl; - struct_body << "\t\t\t" << structInfo->synchronization2 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->textureCompressionASTC_HDR << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderZeroInitializeWorkgroupMemory << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dynamicRendering << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderIntegerDotProduct << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maintenance4 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan13Features"); - out << "\t\t" << "VkPhysicalDeviceVulkan13Features " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->blockTexelViewCompatibleMultipleLayers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxCombinedImageSamplerDescriptorCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShadingRateClampCombinerInputs << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance6Properties"); + out << "\t\t" << "VkPhysicalDeviceMaintenance6Properties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVulkan13Properties(std::ostream &out, const VkPhysicalDeviceVulkan13Properties* structInfo, Decoded_VkPhysicalDeviceVulkan13Properties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePipelineProtectedAccessFeatures(std::ostream &out, const VkPhysicalDevicePipelineProtectedAccessFeatures* structInfo, Decoded_VkPhysicalDevicePipelineProtectedAccessFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minSubgroupSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSubgroupSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxComputeWorkgroupSubgroups << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->requiredSubgroupSizeStages << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxInlineUniformBlockSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorInlineUniformBlocks << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetInlineUniformBlocks << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindInlineUniformBlocks << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxInlineUniformTotalSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct8BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct8BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct8BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct4x8BitPackedUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct4x8BitPackedSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct4x8BitPackedMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct16BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct16BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct16BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct32BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct32BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct32BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct64BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct64BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProduct64BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating8BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating8BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating16BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating16BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating32BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating32BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating64BitUnsignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating64BitSignedAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->storageTexelBufferOffsetAlignmentBytes << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->storageTexelBufferOffsetSingleTexelAlignment << "," << std::endl; - struct_body << "\t\t\t" << structInfo->uniformTexelBufferOffsetAlignmentBytes << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->uniformTexelBufferOffsetSingleTexelAlignment << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxBufferSize << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan13Properties"); - out << "\t\t" << "VkPhysicalDeviceVulkan13Properties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineProtectedAccess << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineProtectedAccessFeatures"); + out << "\t\t" << "VkPhysicalDevicePipelineProtectedAccessFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(std::ostream &out, const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* structInfo, Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePipelineRobustnessFeatures(std::ostream &out, const VkPhysicalDevicePipelineRobustnessFeatures* structInfo, Decoded_VkPhysicalDevicePipelineRobustnessFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderZeroInitializeWorkgroupMemory << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceZeroInitializeWorkgroupMemoryFeatures"); - out << "\t\t" << "VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkPipelineCreationFeedback(std::ostream &out, const VkPipelineCreationFeedback* structInfo, Decoded_VkPipelineCreationFeedback* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << "VkPipelineCreationFeedbackFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->duration << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineCreationFeedback"); - out << "\t\t" << "VkPipelineCreationFeedback " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineRobustness << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineRobustnessFeatures"); + out << "\t\t" << "VkPhysicalDevicePipelineRobustnessFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineCreationFeedbackCreateInfo(std::ostream &out, const VkPipelineCreationFeedbackCreateInfo* structInfo, Decoded_VkPipelineCreationFeedbackCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePipelineRobustnessProperties(std::ostream &out, const VkPhysicalDevicePipelineRobustnessProperties* structInfo, Decoded_VkPhysicalDevicePipelineRobustnessProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ppipeline_creation_feedback_name = "NULL"; - if (structInfo->pPipelineCreationFeedback != NULL) { - ppipeline_creation_feedback_name = GenerateStruct_VkPipelineCreationFeedback(out, - structInfo->pPipelineCreationFeedback, - metaInfo->pPipelineCreationFeedback->GetMetaStructPointer(), - consumer); - ppipeline_creation_feedback_name.insert(0, "&"); - } - std::string ppipeline_stage_creation_feedbacks_array = "NULL"; - if (structInfo->pPipelineStageCreationFeedbacks != NULL) { - ppipeline_stage_creation_feedbacks_array = "pPipelineStageCreationFeedbacks_" + std::to_string(consumer.GetNextId()); - std::string ppipeline_stage_creation_feedbacks_names; - for (uint32_t idx = 0; idx < structInfo->pipelineStageCreationFeedbackCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pPipelineStageCreationFeedbacks + idx != NULL) { - variable_name = GenerateStruct_VkPipelineCreationFeedback(out, - structInfo->pPipelineStageCreationFeedbacks + idx, - metaInfo->pPipelineStageCreationFeedbacks->GetMetaStructPointer() + idx, - consumer); - } - ppipeline_stage_creation_feedbacks_names += variable_name + ", "; - } - out << "\t\t" << "VkPipelineCreationFeedback " << ppipeline_stage_creation_feedbacks_array << "[] = {" << ppipeline_stage_creation_feedbacks_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << ppipeline_creation_feedback_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineStageCreationFeedbackCount << "," << std::endl; - struct_body << "\t\t\t" << ppipeline_stage_creation_feedbacks_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineCreationFeedbackCreateInfo"); - out << "\t\t" << "VkPipelineCreationFeedbackCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->defaultRobustnessStorageBuffers << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->defaultRobustnessUniformBuffers << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->defaultRobustnessVertexInputs << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineRobustnessImageBehavior(" << structInfo->defaultRobustnessImages << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineRobustnessProperties"); + out << "\t\t" << "VkPhysicalDevicePipelineRobustnessProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineRenderingCreateInfo(std::ostream &out, const VkPipelineRenderingCreateInfo* structInfo, Decoded_VkPipelineRenderingCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePushDescriptorProperties(std::ostream &out, const VkPhysicalDevicePushDescriptorProperties* structInfo, Decoded_VkPhysicalDevicePushDescriptorProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcolor_attachment_formats_values; - std::string pcolor_attachment_formats_array = "NULL"; - if (structInfo->pColorAttachmentFormats != NULL) { - for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { - pcolor_attachment_formats_values += util::ToString(structInfo->pColorAttachmentFormats[idx]) + ", "; - } - pcolor_attachment_formats_array = "pColorAttachmentFormats_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkFormat " << pcolor_attachment_formats_array << "[] = {" << pcolor_attachment_formats_values << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pcolor_attachment_formats_array << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->depthAttachmentFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->stencilAttachmentFormat << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineRenderingCreateInfo"); - out << "\t\t" << "VkPipelineRenderingCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxPushDescriptors << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePushDescriptorProperties"); + out << "\t\t" << "VkPhysicalDevicePushDescriptorProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo(std::ostream &out, const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* structInfo, Decoded_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderExpectAssumeFeatures(std::ostream &out, const VkPhysicalDeviceShaderExpectAssumeFeatures* structInfo, Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->requiredSubgroupSize << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineShaderStageRequiredSubgroupSizeCreateInfo"); - out << "\t\t" << "VkPipelineShaderStageRequiredSubgroupSizeCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderExpectAssume << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderExpectAssumeFeatures"); + out << "\t\t" << "VkPhysicalDeviceShaderExpectAssumeFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPrivateDataSlotCreateInfo(std::ostream &out, const VkPrivateDataSlotCreateInfo* structInfo, Decoded_VkPrivateDataSlotCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderFloatControls2Features(std::ostream &out, const VkPhysicalDeviceShaderFloatControls2Features* structInfo, Decoded_VkPhysicalDeviceShaderFloatControls2Features* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPrivateDataSlotCreateFlags(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "privateDataSlotCreateInfo"); - out << "\t\t" << "VkPrivateDataSlotCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderFloatControls2 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderFloatControls2Features"); + out << "\t\t" << "VkPhysicalDeviceShaderFloatControls2Features " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderingAttachmentInfo(std::ostream &out, const VkRenderingAttachmentInfo* structInfo, Decoded_VkRenderingAttachmentInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderSubgroupRotateFeatures(std::ostream &out, const VkPhysicalDeviceShaderSubgroupRotateFeatures* structInfo, Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->imageView) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->imageLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkResolveModeFlagBits(" << structInfo->resolveMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->resolveImageView) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->resolveImageLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAttachmentLoadOp(" << structInfo->loadOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAttachmentStoreOp(" << structInfo->storeOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(structInfo->clearValue) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderingAttachmentInfo"); - out << "\t\t" << "VkRenderingAttachmentInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSubgroupRotate << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSubgroupRotateClustered << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderSubgroupRotateFeatures"); + out << "\t\t" << "VkPhysicalDeviceShaderSubgroupRotateFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderingInfo(std::ostream &out, const VkRenderingInfo* structInfo, Decoded_VkRenderingInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVertexAttributeDivisorFeatures(std::ostream &out, const VkPhysicalDeviceVertexAttributeDivisorFeatures* structInfo, Decoded_VkPhysicalDeviceVertexAttributeDivisorFeatures* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string render_area_info_var = GenerateStruct_VkRect2D(out, - &structInfo->renderArea, - metaInfo->renderArea, - consumer); - std::string pcolor_attachments_array = "NULL"; - if (structInfo->pColorAttachments != NULL) { - pcolor_attachments_array = "pColorAttachments_" + std::to_string(consumer.GetNextId()); - std::string pcolor_attachments_names; - for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pColorAttachments + idx != NULL) { - variable_name = GenerateStruct_VkRenderingAttachmentInfo(out, - structInfo->pColorAttachments + idx, - metaInfo->pColorAttachments->GetMetaStructPointer() + idx, - consumer); - } - pcolor_attachments_names += variable_name + ", "; - } - out << "\t\t" << "VkRenderingAttachmentInfo " << pcolor_attachments_array << "[] = {" << pcolor_attachments_names << "};" << std::endl; - } - std::string pdepth_attachment_struct = "NULL"; - if (structInfo->pDepthAttachment != NULL) { - pdepth_attachment_struct = GenerateStruct_VkRenderingAttachmentInfo(out, - structInfo->pDepthAttachment, - metaInfo->pDepthAttachment->GetMetaStructPointer(), - consumer); - pdepth_attachment_struct.insert(0, "&"); - } - std::string pstencil_attachment_struct = "NULL"; - if (structInfo->pStencilAttachment != NULL) { - pstencil_attachment_struct = GenerateStruct_VkRenderingAttachmentInfo(out, - structInfo->pStencilAttachment, - metaInfo->pStencilAttachment->GetMetaStructPointer(), - consumer); - pstencil_attachment_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkRenderingFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << render_area_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->layerCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pcolor_attachments_array << "," << std::endl; - struct_body << "\t\t\t" << pdepth_attachment_struct << "," << std::endl; - struct_body << "\t\t\t" << pstencil_attachment_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderingInfo"); - out << "\t\t" << "VkRenderingInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->vertexAttributeInstanceRateDivisor << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexAttributeInstanceRateZeroDivisor << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVertexAttributeDivisorFeatures"); + out << "\t\t" << "VkPhysicalDeviceVertexAttributeDivisorFeatures " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkResolveImageInfo2(std::ostream &out, const VkResolveImageInfo2* structInfo, Decoded_VkResolveImageInfo2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVertexAttributeDivisorProperties(std::ostream &out, const VkPhysicalDeviceVertexAttributeDivisorProperties* structInfo, Decoded_VkPhysicalDeviceVertexAttributeDivisorProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pregions_array = "NULL"; - if (structInfo->pRegions != NULL) { - pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); - std::string pregions_names; - for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pRegions + idx != NULL) { - variable_name = GenerateStruct_VkImageResolve2(out, - structInfo->pRegions + idx, - metaInfo->pRegions->GetMetaStructPointer() + idx, - consumer); - } - pregions_names += variable_name + ", "; - } - out << "\t\t" << "VkImageResolve2 " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcImage) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->srcImageLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstImage) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->dstImageLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; - struct_body << "\t\t\t" << pregions_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "resolveImageInfo2"); - out << "\t\t" << "VkResolveImageInfo2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxVertexAttribDivisor << "," << std::endl; + struct_body << "\t\t\t" << structInfo->supportsNonZeroFirstInstance << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVertexAttributeDivisorProperties"); + out << "\t\t" << "VkPhysicalDeviceVertexAttributeDivisorProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSemaphoreSubmitInfo(std::ostream &out, const VkSemaphoreSubmitInfo* structInfo, Decoded_VkSemaphoreSubmitInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVulkan14Features(std::ostream &out, const VkPhysicalDeviceVulkan14Features* structInfo, Decoded_VkPhysicalDeviceVulkan14Features* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->value << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->stageMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "semaphoreSubmitInfo"); - out << "\t\t" << "VkSemaphoreSubmitInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->globalPriorityQuery << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSubgroupRotate << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSubgroupRotateClustered << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderFloatControls2 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderExpectAssume << "," << std::endl; + struct_body << "\t\t\t" << structInfo->rectangularLines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bresenhamLines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->smoothLines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stippledRectangularLines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stippledBresenhamLines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stippledSmoothLines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexAttributeInstanceRateDivisor << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexAttributeInstanceRateZeroDivisor << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indexTypeUint8 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dynamicRenderingLocalRead << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maintenance5 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maintenance6 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineProtectedAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineRobustness << "," << std::endl; + struct_body << "\t\t\t" << structInfo->hostImageCopy << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pushDescriptor << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan14Features"); + out << "\t\t" << "VkPhysicalDeviceVulkan14Features " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkWriteDescriptorSetInlineUniformBlock(std::ostream &out, const VkWriteDescriptorSetInlineUniformBlock* structInfo, Decoded_VkWriteDescriptorSetInlineUniformBlock* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVulkan14Properties(std::ostream &out, const VkPhysicalDeviceVulkan14Properties* structInfo, Decoded_VkPhysicalDeviceVulkan14Properties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdata_array = "NULL"; - if (structInfo->pData != NULL) { - std::string pdata_values; - for (uint32_t idx0 = 0; idx0 < structInfo->dataSize; ++idx0) { - pdata_values += std::to_string(reinterpret_cast(structInfo->pData)[idx0]) + ", "; + std::string pcopy_src_layouts_array = "NULL"; + if (structInfo->pCopySrcLayouts != NULL) { + std::string pcopy_src_layouts_values; + for (uint32_t idx = 0; idx < structInfo->copySrcLayoutCount; idx++) { + pcopy_src_layouts_values += util::ToString(structInfo->pCopySrcLayouts[idx]) + ", "; } - pdata_array = "pData_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint8_t " << pdata_array << "[] = {" << pdata_values << "};" << std::endl; + pcopy_src_layouts_array = "pCopySrcLayouts_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkImageLayout " << pcopy_src_layouts_array << "[] = {" << pcopy_src_layouts_values << "};" << std::endl; + } + std::string pcopy_dst_layouts_array = "NULL"; + if (structInfo->pCopyDstLayouts != NULL) { + std::string pcopy_dst_layouts_values; + for (uint32_t idx = 0; idx < structInfo->copyDstLayoutCount; idx++) { + pcopy_dst_layouts_values += util::ToString(structInfo->pCopyDstLayouts[idx]) + ", "; + } + pcopy_dst_layouts_array = "pCopyDstLayouts_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkImageLayout " << pcopy_dst_layouts_array << "[] = {" << pcopy_dst_layouts_values << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dataSize << "," << std::endl; - struct_body << "\t\t\t" << pdata_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "writeDescriptorSetInlineUniformBlock"); - out << "\t\t" << "VkWriteDescriptorSetInlineUniformBlock " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->lineSubPixelPrecisionBits << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxVertexAttribDivisor << "," << std::endl; + struct_body << "\t\t\t" << structInfo->supportsNonZeroFirstInstance << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPushDescriptors << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dynamicRenderingLocalReadDepthStencilAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dynamicRenderingLocalReadMultisampledAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->earlyFragmentMultisampleCoverageAfterSampleCounting << "," << std::endl; + struct_body << "\t\t\t" << structInfo->earlyFragmentSampleMaskTestBeforeSampleCounting << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthStencilSwizzleOneSupport << "," << std::endl; + struct_body << "\t\t\t" << structInfo->polygonModePointSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->nonStrictSinglePixelWideLinesUseParallelogram << "," << std::endl; + struct_body << "\t\t\t" << structInfo->nonStrictWideLinesUseParallelogram << "," << std::endl; + struct_body << "\t\t\t" << structInfo->blockTexelViewCompatibleMultipleLayers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxCombinedImageSamplerDescriptorCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShadingRateClampCombinerInputs << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->defaultRobustnessStorageBuffers << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->defaultRobustnessUniformBuffers << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->defaultRobustnessVertexInputs << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineRobustnessImageBehavior(" << structInfo->defaultRobustnessImages << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->copySrcLayoutCount << "," << std::endl; + struct_body << "\t\t\t" << pcopy_src_layouts_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->copyDstLayoutCount << "," << std::endl; + struct_body << "\t\t\t" << pcopy_dst_layouts_array << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->optimalTilingLayoutUUID[0]), VK_UUID_SIZE) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->identicalMemoryTypeRequirements << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan14Properties"); + out << "\t\t" << "VkPhysicalDeviceVulkan14Properties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBindDescriptorSetsInfo(std::ostream &out, const VkBindDescriptorSetsInfo* structInfo, Decoded_VkBindDescriptorSetsInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineCreateFlags2CreateInfo(std::ostream &out, const VkPipelineCreateFlags2CreateInfo* structInfo, Decoded_VkPipelineCreateFlags2CreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdescriptor_sets_array = "NULL"; - if (metaInfo->pDescriptorSets.GetPointer() != NULL && structInfo->descriptorSetCount > 0) { - pdescriptor_sets_array = "pdescriptor_sets_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DESCRIPTOR_SET)); - std::string pdescriptor_sets_values = toStringJoin(metaInfo->pDescriptorSets.GetPointer(), - metaInfo->pDescriptorSets.GetPointer() + structInfo->descriptorSetCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->descriptorSetCount == 1) { - pdescriptor_sets_array = "&" + pdescriptor_sets_values; - } else if (structInfo->descriptorSetCount > 1) { - out << "\t\t" << "VkDescriptorSet " << pdescriptor_sets_array << "[] = {" << pdescriptor_sets_values << "};" << std::endl; - } - } - std::string pdynamic_offsets_array = "NULL"; - if (structInfo->pDynamicOffsets != NULL) { - pdynamic_offsets_array = "pDynamicOffsets_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pdynamic_offsets_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDynamicOffsets, structInfo->dynamicOffsetCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->stageFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->firstSet << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorSetCount << "," << std::endl; - struct_body << "\t\t\t" << pdescriptor_sets_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dynamicOffsetCount << "," << std::endl; - struct_body << "\t\t\t" << pdynamic_offsets_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bindDescriptorSetsInfo"); - out << "\t\t" << "VkBindDescriptorSetsInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineCreateFlags2(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineCreateFlags2CreateInfo"); + out << "\t\t" << "VkPipelineCreateFlags2CreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBindMemoryStatus(std::ostream &out, const VkBindMemoryStatus* structInfo, Decoded_VkBindMemoryStatus* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineRasterizationLineStateCreateInfo(std::ostream &out, const VkPipelineRasterizationLineStateCreateInfo* structInfo, Decoded_VkPipelineRasterizationLineStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - out << "\t\t" << "// TODO: Support pResult (non-struct output) argument." << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "bindMemoryStatus"); - out << "\t\t" << "VkBindMemoryStatus " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkLineRasterizationMode(" << structInfo->lineRasterizationMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stippledLineEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->lineStippleFactor << "," << std::endl; + struct_body << "\t\t\t" << structInfo->lineStipplePattern << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineRasterizationLineStateCreateInfo"); + out << "\t\t" << "VkPipelineRasterizationLineStateCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBufferUsageFlags2CreateInfo(std::ostream &out, const VkBufferUsageFlags2CreateInfo* structInfo, Decoded_VkBufferUsageFlags2CreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineRobustnessCreateInfo(std::ostream &out, const VkPipelineRobustnessCreateInfo* structInfo, Decoded_VkPipelineRobustnessCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkBufferUsageFlags2(" << structInfo->usage << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bufferUsageFlags2CreateInfo"); - out << "\t\t" << "VkBufferUsageFlags2CreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->storageBuffers << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->uniformBuffers << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->vertexInputs << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineRobustnessImageBehavior(" << structInfo->images << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineRobustnessCreateInfo"); + out << "\t\t" << "VkPipelineRobustnessCreateInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCopyImageToImageInfo(std::ostream &out, const VkCopyImageToImageInfo* structInfo, Decoded_VkCopyImageToImageInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineVertexInputDivisorStateCreateInfo(std::ostream &out, const VkPipelineVertexInputDivisorStateCreateInfo* structInfo, Decoded_VkPipelineVertexInputDivisorStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pregions_array = "NULL"; - if (structInfo->pRegions != NULL) { - pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); - std::string pregions_names; - for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { + std::string pvertex_binding_divisors_array = "NULL"; + if (structInfo->pVertexBindingDivisors != NULL) { + pvertex_binding_divisors_array = "pVertexBindingDivisors_" + std::to_string(consumer.GetNextId()); + std::string pvertex_binding_divisors_names; + for (uint32_t idx = 0; idx < structInfo->vertexBindingDivisorCount; idx++) { std::string variable_name = "NULL"; - if (structInfo->pRegions + idx != NULL) { - variable_name = GenerateStruct_VkImageCopy2(out, - structInfo->pRegions + idx, - metaInfo->pRegions->GetMetaStructPointer() + idx, - consumer); + if (structInfo->pVertexBindingDivisors + idx != NULL) { + variable_name = GenerateStruct_VkVertexInputBindingDivisorDescription(out, + structInfo->pVertexBindingDivisors + idx, + metaInfo->pVertexBindingDivisors->GetMetaStructPointer() + idx, + consumer); } - pregions_names += variable_name + ", "; + pvertex_binding_divisors_names += variable_name + ", "; + } + out << "\t\t" << "VkVertexInputBindingDivisorDescription " << pvertex_binding_divisors_array << "[] = {" << pvertex_binding_divisors_names << "};" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexBindingDivisorCount << "," << std::endl; + struct_body << "\t\t\t" << pvertex_binding_divisors_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineVertexInputDivisorStateCreateInfo"); + out << "\t\t" << "VkPipelineVertexInputDivisorStateCreateInfo " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPushConstantsInfo(std::ostream &out, const VkPushConstantsInfo* structInfo, Decoded_VkPushConstantsInfo* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pvalues_array = "NULL"; + if (structInfo->pValues != NULL) { + std::string pvalues_values; + for (uint32_t idx0 = 0; idx0 < structInfo->size; ++idx0) { + pvalues_values += std::to_string(reinterpret_cast(structInfo->pValues)[idx0]) + ", "; } - out << "\t\t" << "VkImageCopy2 " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; + pvalues_array = "pValues_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint8_t " << pvalues_array << "[] = {" << pvalues_values << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkHostImageCopyFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcImage) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->srcImageLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstImage) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->dstImageLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; - struct_body << "\t\t\t" << pregions_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "copyImageToImageInfo"); - out << "\t\t" << "VkCopyImageToImageInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->stageFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "," << std::endl; + struct_body << "\t\t\t" << pvalues_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pushConstantsInfo"); + out << "\t\t" << "VkPushConstantsInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceImageSubresourceInfo(std::ostream &out, const VkDeviceImageSubresourceInfo* structInfo, Decoded_VkDeviceImageSubresourceInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPushDescriptorSetInfo(std::ostream &out, const VkPushDescriptorSetInfo* structInfo, Decoded_VkPushDescriptorSetInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcreate_info_struct = "NULL"; - if (structInfo->pCreateInfo != NULL) { - pcreate_info_struct = GenerateStruct_VkImageCreateInfo(out, - structInfo->pCreateInfo, - metaInfo->pCreateInfo->GetMetaStructPointer(), - consumer); - pcreate_info_struct.insert(0, "&"); - } - std::string psubresource_struct = "NULL"; - if (structInfo->pSubresource != NULL) { - psubresource_struct = GenerateStruct_VkImageSubresource2(out, - structInfo->pSubresource, - metaInfo->pSubresource->GetMetaStructPointer(), - consumer); - psubresource_struct.insert(0, "&"); + std::string pdescriptor_writes_array = "NULL"; + if (structInfo->pDescriptorWrites != NULL) { + pdescriptor_writes_array = "pDescriptorWrites_" + std::to_string(consumer.GetNextId()); + std::string pdescriptor_writes_names; + for (uint32_t idx = 0; idx < structInfo->descriptorWriteCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pDescriptorWrites + idx != NULL) { + variable_name = GenerateStruct_VkWriteDescriptorSet(out, + structInfo->pDescriptorWrites + idx, + metaInfo->pDescriptorWrites->GetMetaStructPointer() + idx, + consumer); + } + pdescriptor_writes_names += variable_name + ", "; + } + out << "\t\t" << "VkWriteDescriptorSet " << pdescriptor_writes_array << "[] = {" << pdescriptor_writes_names << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pcreate_info_struct << "," << std::endl; - struct_body << "\t\t\t" << psubresource_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceImageSubresourceInfo"); - out << "\t\t" << "VkDeviceImageSubresourceInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->stageFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->set << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorWriteCount << "," << std::endl; + struct_body << "\t\t\t" << pdescriptor_writes_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pushDescriptorSetInfo"); + out << "\t\t" << "VkPushDescriptorSetInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceQueueGlobalPriorityCreateInfo(std::ostream &out, const VkDeviceQueueGlobalPriorityCreateInfo* structInfo, Decoded_VkDeviceQueueGlobalPriorityCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkQueueFamilyGlobalPriorityProperties(std::ostream &out, const VkQueueFamilyGlobalPriorityProperties* structInfo, Decoded_VkQueueFamilyGlobalPriorityProperties* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkQueueGlobalPriority(" << structInfo->globalPriority << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceQueueGlobalPriorityCreateInfo"); - out << "\t\t" << "VkDeviceQueueGlobalPriorityCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->priorityCount << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->priorities[0]), VK_MAX_GLOBAL_PRIORITY_SIZE) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyGlobalPriorityProperties"); + out << "\t\t" << "VkQueueFamilyGlobalPriorityProperties " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkHostImageCopyDevicePerformanceQuery(std::ostream &out, const VkHostImageCopyDevicePerformanceQuery* structInfo, Decoded_VkHostImageCopyDevicePerformanceQuery* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderingAreaInfo(std::ostream &out, const VkRenderingAreaInfo* structInfo, Decoded_VkRenderingAreaInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pcolor_attachment_formats_values; + std::string pcolor_attachment_formats_array = "NULL"; + if (structInfo->pColorAttachmentFormats != NULL) { + for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { + pcolor_attachment_formats_values += util::ToString(structInfo->pColorAttachmentFormats[idx]) + ", "; + } + pcolor_attachment_formats_array = "pColorAttachmentFormats_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkFormat " << pcolor_attachment_formats_array << "[] = {" << pcolor_attachment_formats_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->optimalDeviceAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->identicalMemoryLayout << ","; - std::string variable_name = consumer.AddStruct(struct_body, "hostImageCopyDevicePerformanceQuery"); - out << "\t\t" << "VkHostImageCopyDevicePerformanceQuery " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->viewMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pcolor_attachment_formats_array << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->depthAttachmentFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->stencilAttachmentFormat << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderingAreaInfo"); + out << "\t\t" << "VkRenderingAreaInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkHostImageLayoutTransitionInfo(std::ostream &out, const VkHostImageLayoutTransitionInfo* structInfo, Decoded_VkHostImageLayoutTransitionInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderingAttachmentLocationInfo(std::ostream &out, const VkRenderingAttachmentLocationInfo* structInfo, Decoded_VkRenderingAttachmentLocationInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string subresource_range_info_var = GenerateStruct_VkImageSubresourceRange(out, - &structInfo->subresourceRange, - metaInfo->subresourceRange, - consumer); + std::string pcolor_attachment_locations_array = "NULL"; + if (structInfo->pColorAttachmentLocations != NULL) { + pcolor_attachment_locations_array = "pColorAttachmentLocations_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pcolor_attachment_locations_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pColorAttachmentLocations, structInfo->colorAttachmentCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->oldLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->newLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << subresource_range_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "hostImageLayoutTransitionInfo"); - out << "\t\t" << "VkHostImageLayoutTransitionInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pcolor_attachment_locations_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderingAttachmentLocationInfo"); + out << "\t\t" << "VkRenderingAttachmentLocationInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageSubresource2(std::ostream &out, const VkImageSubresource2* structInfo, Decoded_VkImageSubresource2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderingInputAttachmentIndexInfo(std::ostream &out, const VkRenderingInputAttachmentIndexInfo* structInfo, Decoded_VkRenderingInputAttachmentIndexInfo* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string image_subresource_info_var = GenerateStruct_VkImageSubresource(out, - &structInfo->imageSubresource, - metaInfo->imageSubresource, - consumer); + std::string pcolor_attachment_input_indices_array = "NULL"; + if (structInfo->pColorAttachmentInputIndices != NULL) { + pcolor_attachment_input_indices_array = "pColorAttachmentInputIndices_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pcolor_attachment_input_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pColorAttachmentInputIndices, structInfo->colorAttachmentCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << image_subresource_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageSubresource2"); - out << "\t\t" << "VkImageSubresource2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pcolor_attachment_input_indices_array << "," << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "renderingInputAttachmentIndexInfo"); + out << "\t\t" << "VkRenderingInputAttachmentIndexInfo " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryMapInfo(std::ostream &out, const VkMemoryMapInfo* structInfo, Decoded_VkMemoryMapInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSubresourceHostMemcpySize(std::ostream &out, const VkSubresourceHostMemcpySize* structInfo, Decoded_VkSubresourceHostMemcpySize* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkMemoryMapFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; struct_body << "\t\t\t" << structInfo->size << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryMapInfo"); - out << "\t\t" << "VkMemoryMapInfo " << variable_name << " {" << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "subresourceHostMemcpySize"); + out << "\t\t" << "VkSubresourceHostMemcpySize " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryUnmapInfo(std::ostream &out, const VkMemoryUnmapInfo* structInfo, Decoded_VkMemoryUnmapInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSubresourceLayout2(std::ostream &out, const VkSubresourceLayout2* structInfo, Decoded_VkSubresourceLayout2* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string subresource_layout_info_var = GenerateStruct_VkSubresourceLayout(out, + &structInfo->subresourceLayout, + metaInfo->subresourceLayout, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkMemoryUnmapFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryUnmapInfo"); - out << "\t\t" << "VkMemoryUnmapInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << subresource_layout_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "subresourceLayout2"); + out << "\t\t" << "VkSubresourceLayout2 " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDynamicRenderingLocalReadFeatures(std::ostream &out, const VkPhysicalDeviceDynamicRenderingLocalReadFeatures* structInfo, Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVertexInputBindingDivisorDescription(std::ostream &out, const VkVertexInputBindingDivisorDescription* structInfo, Decoded_VkVertexInputBindingDivisorDescription* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dynamicRenderingLocalRead << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDynamicRenderingLocalReadFeatures"); - out << "\t\t" << "VkPhysicalDeviceDynamicRenderingLocalReadFeatures " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->binding << "," << std::endl; + struct_body << "\t\t\t" << structInfo->divisor << ","; + std::string variable_name = consumer.AddStruct(struct_body, "vertexInputBindingDivisorDescription"); + out << "\t\t" << "VkVertexInputBindingDivisorDescription " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceGlobalPriorityQueryFeatures(std::ostream &out, const VkPhysicalDeviceGlobalPriorityQueryFeatures* structInfo, Decoded_VkPhysicalDeviceGlobalPriorityQueryFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfaceCapabilitiesKHR(std::ostream &out, const VkSurfaceCapabilitiesKHR* structInfo, Decoded_VkSurfaceCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->globalPriorityQuery << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceGlobalPriorityQueryFeatures"); - out << "\t\t" << "VkPhysicalDeviceGlobalPriorityQueryFeatures " << variable_name << " {" << std::endl; + std::string current_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->currentExtent, + metaInfo->currentExtent, + consumer); + std::string min_image_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->minImageExtent, + metaInfo->minImageExtent, + consumer); + std::string max_image_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxImageExtent, + metaInfo->maxImageExtent, + consumer); + struct_body << "\t" << structInfo->minImageCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxImageCount << "," << std::endl; + struct_body << "\t\t\t" << current_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << min_image_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_image_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxImageArrayLayers << "," << std::endl; + struct_body << "\t\t\t" << "VkSurfaceTransformFlagsKHR(" << structInfo->supportedTransforms << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSurfaceTransformFlagBitsKHR(" << structInfo->currentTransform << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkCompositeAlphaFlagsKHR(" << structInfo->supportedCompositeAlpha << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->supportedUsageFlags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfaceCapabilitiesKHR"); + out << "\t\t" << "VkSurfaceCapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceHostImageCopyFeatures(std::ostream &out, const VkPhysicalDeviceHostImageCopyFeatures* structInfo, Decoded_VkPhysicalDeviceHostImageCopyFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfaceFormatKHR(std::ostream &out, const VkSurfaceFormatKHR* structInfo, Decoded_VkSurfaceFormatKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hostImageCopy << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceHostImageCopyFeatures"); - out << "\t\t" << "VkPhysicalDeviceHostImageCopyFeatures " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkColorSpaceKHR(" << structInfo->colorSpace << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfaceFormatKHR"); + out << "\t\t" << "VkSurfaceFormatKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceHostImageCopyProperties(std::ostream &out, const VkPhysicalDeviceHostImageCopyProperties* structInfo, Decoded_VkPhysicalDeviceHostImageCopyProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAcquireNextImageInfoKHR(std::ostream &out, const VkAcquireNextImageInfoKHR* structInfo, Decoded_VkAcquireNextImageInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcopy_src_layouts_array = "NULL"; - if (structInfo->pCopySrcLayouts != NULL) { - std::string pcopy_src_layouts_values; - for (uint32_t idx = 0; idx < structInfo->copySrcLayoutCount; idx++) { - pcopy_src_layouts_values += util::ToString(structInfo->pCopySrcLayouts[idx]) + ", "; - } - pcopy_src_layouts_array = "pCopySrcLayouts_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkImageLayout " << pcopy_src_layouts_array << "[] = {" << pcopy_src_layouts_values << "};" << std::endl; - } - std::string pcopy_dst_layouts_array = "NULL"; - if (structInfo->pCopyDstLayouts != NULL) { - std::string pcopy_dst_layouts_values; - for (uint32_t idx = 0; idx < structInfo->copyDstLayoutCount; idx++) { - pcopy_dst_layouts_values += util::ToString(structInfo->pCopyDstLayouts[idx]) + ", "; - } - pcopy_dst_layouts_array = "pCopyDstLayouts_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkImageLayout " << pcopy_dst_layouts_array << "[] = {" << pcopy_dst_layouts_values << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->copySrcLayoutCount << "," << std::endl; - struct_body << "\t\t\t" << pcopy_src_layouts_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->copyDstLayoutCount << "," << std::endl; - struct_body << "\t\t\t" << pcopy_dst_layouts_array << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->optimalTilingLayoutUUID[0]), VK_UUID_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->identicalMemoryTypeRequirements << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceHostImageCopyProperties"); - out << "\t\t" << "VkPhysicalDeviceHostImageCopyProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->swapchain) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->timeout << "UL" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->fence) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceMask << ","; + std::string variable_name = consumer.AddStruct(struct_body, "acquireNextImageInfoKHR"); + out << "\t\t" << "VkAcquireNextImageInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceIndexTypeUint8Features(std::ostream &out, const VkPhysicalDeviceIndexTypeUint8Features* structInfo, Decoded_VkPhysicalDeviceIndexTypeUint8Features* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindImageMemorySwapchainInfoKHR(std::ostream &out, const VkBindImageMemorySwapchainInfoKHR* structInfo, Decoded_VkBindImageMemorySwapchainInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indexTypeUint8 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceIndexTypeUint8Features"); - out << "\t\t" << "VkPhysicalDeviceIndexTypeUint8Features " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->swapchain) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imageIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindImageMemorySwapchainInfoKHR"); + out << "\t\t" << "VkBindImageMemorySwapchainInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceLineRasterizationFeatures(std::ostream &out, const VkPhysicalDeviceLineRasterizationFeatures* structInfo, Decoded_VkPhysicalDeviceLineRasterizationFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceGroupPresentCapabilitiesKHR(std::ostream &out, const VkDeviceGroupPresentCapabilitiesKHR* structInfo, Decoded_VkDeviceGroupPresentCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->rectangularLines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bresenhamLines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->smoothLines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stippledRectangularLines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stippledBresenhamLines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stippledSmoothLines << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLineRasterizationFeatures"); - out << "\t\t" << "VkPhysicalDeviceLineRasterizationFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->presentMask[0]), VK_MAX_DEVICE_GROUP_SIZE) << "," << std::endl; + struct_body << "\t\t\t" << "VkDeviceGroupPresentModeFlagsKHR(" << structInfo->modes << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupPresentCapabilitiesKHR"); + out << "\t\t" << "VkDeviceGroupPresentCapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceLineRasterizationProperties(std::ostream &out, const VkPhysicalDeviceLineRasterizationProperties* structInfo, Decoded_VkPhysicalDeviceLineRasterizationProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceGroupPresentInfoKHR(std::ostream &out, const VkDeviceGroupPresentInfoKHR* structInfo, Decoded_VkDeviceGroupPresentInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pdevice_masks_array = "NULL"; + if (structInfo->pDeviceMasks != NULL) { + pdevice_masks_array = "pDeviceMasks_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pdevice_masks_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDeviceMasks, structInfo->swapchainCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->lineSubPixelPrecisionBits << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLineRasterizationProperties"); - out << "\t\t" << "VkPhysicalDeviceLineRasterizationProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; + struct_body << "\t\t\t" << pdevice_masks_array << "," << std::endl; + struct_body << "\t\t\t" << "VkDeviceGroupPresentModeFlagBitsKHR(" << structInfo->mode << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupPresentInfoKHR"); + out << "\t\t" << "VkDeviceGroupPresentInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMaintenance5Features(std::ostream &out, const VkPhysicalDeviceMaintenance5Features* structInfo, Decoded_VkPhysicalDeviceMaintenance5Features* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceGroupSwapchainCreateInfoKHR(std::ostream &out, const VkDeviceGroupSwapchainCreateInfoKHR* structInfo, Decoded_VkDeviceGroupSwapchainCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maintenance5 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance5Features"); - out << "\t\t" << "VkPhysicalDeviceMaintenance5Features " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDeviceGroupPresentModeFlagsKHR(" << structInfo->modes << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupSwapchainCreateInfoKHR"); + out << "\t\t" << "VkDeviceGroupSwapchainCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMaintenance5Properties(std::ostream &out, const VkPhysicalDeviceMaintenance5Properties* structInfo, Decoded_VkPhysicalDeviceMaintenance5Properties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageSwapchainCreateInfoKHR(std::ostream &out, const VkImageSwapchainCreateInfoKHR* structInfo, Decoded_VkImageSwapchainCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->earlyFragmentMultisampleCoverageAfterSampleCounting << "," << std::endl; - struct_body << "\t\t\t" << structInfo->earlyFragmentSampleMaskTestBeforeSampleCounting << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthStencilSwizzleOneSupport << "," << std::endl; - struct_body << "\t\t\t" << structInfo->polygonModePointSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->nonStrictSinglePixelWideLinesUseParallelogram << "," << std::endl; - struct_body << "\t\t\t" << structInfo->nonStrictWideLinesUseParallelogram << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance5Properties"); - out << "\t\t" << "VkPhysicalDeviceMaintenance5Properties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->swapchain) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageSwapchainCreateInfoKHR"); + out << "\t\t" << "VkImageSwapchainCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMaintenance6Features(std::ostream &out, const VkPhysicalDeviceMaintenance6Features* structInfo, Decoded_VkPhysicalDeviceMaintenance6Features* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDisplayModeCreateInfoKHR(std::ostream &out, const VkDisplayModeCreateInfoKHR* structInfo, Decoded_VkDisplayModeCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string parameters_info_var = GenerateStruct_VkDisplayModeParametersKHR(out, + &structInfo->parameters, + metaInfo->parameters, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maintenance6 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance6Features"); - out << "\t\t" << "VkPhysicalDeviceMaintenance6Features " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDisplayModeCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << parameters_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayModeCreateInfoKHR"); + out << "\t\t" << "VkDisplayModeCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMaintenance6Properties(std::ostream &out, const VkPhysicalDeviceMaintenance6Properties* structInfo, Decoded_VkPhysicalDeviceMaintenance6Properties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDisplayModeParametersKHR(std::ostream &out, const VkDisplayModeParametersKHR* structInfo, Decoded_VkDisplayModeParametersKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->blockTexelViewCompatibleMultipleLayers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxCombinedImageSamplerDescriptorCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShadingRateClampCombinerInputs << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance6Properties"); - out << "\t\t" << "VkPhysicalDeviceMaintenance6Properties " << variable_name << " {" << std::endl; + std::string visible_region_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->visibleRegion, + metaInfo->visibleRegion, + consumer); + struct_body << "\t" << visible_region_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->refreshRate << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayModeParametersKHR"); + out << "\t\t" << "VkDisplayModeParametersKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePipelineProtectedAccessFeatures(std::ostream &out, const VkPhysicalDevicePipelineProtectedAccessFeatures* structInfo, Decoded_VkPhysicalDevicePipelineProtectedAccessFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDisplayModePropertiesKHR(std::ostream &out, const VkDisplayModePropertiesKHR* structInfo, Decoded_VkDisplayModePropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string parameters_info_var = GenerateStruct_VkDisplayModeParametersKHR(out, + &structInfo->parameters, + metaInfo->parameters, + consumer); + struct_body << "\t" << consumer.GetHandle(metaInfo->displayMode) << "," << std::endl; + struct_body << "\t\t\t" << parameters_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayModePropertiesKHR"); + out << "\t\t" << "VkDisplayModePropertiesKHR " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkDisplayPlaneCapabilitiesKHR(std::ostream &out, const VkDisplayPlaneCapabilitiesKHR* structInfo, Decoded_VkDisplayPlaneCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string min_src_position_info_var = GenerateStruct_VkOffset2D(out, + &structInfo->minSrcPosition, + metaInfo->minSrcPosition, + consumer); + std::string max_src_position_info_var = GenerateStruct_VkOffset2D(out, + &structInfo->maxSrcPosition, + metaInfo->maxSrcPosition, + consumer); + std::string min_src_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->minSrcExtent, + metaInfo->minSrcExtent, + consumer); + std::string max_src_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxSrcExtent, + metaInfo->maxSrcExtent, + consumer); + std::string min_dst_position_info_var = GenerateStruct_VkOffset2D(out, + &structInfo->minDstPosition, + metaInfo->minDstPosition, + consumer); + std::string max_dst_position_info_var = GenerateStruct_VkOffset2D(out, + &structInfo->maxDstPosition, + metaInfo->maxDstPosition, + consumer); + std::string min_dst_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->minDstExtent, + metaInfo->minDstExtent, + consumer); + std::string max_dst_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxDstExtent, + metaInfo->maxDstExtent, + consumer); + struct_body << "\t" << "VkDisplayPlaneAlphaFlagsKHR(" << structInfo->supportedAlpha << ")" << "," << std::endl; + struct_body << "\t\t\t" << min_src_position_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_src_position_info_var << "," << std::endl; + struct_body << "\t\t\t" << min_src_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_src_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << min_dst_position_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_dst_position_info_var << "," << std::endl; + struct_body << "\t\t\t" << min_dst_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_dst_extent_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayPlaneCapabilitiesKHR"); + out << "\t\t" << "VkDisplayPlaneCapabilitiesKHR " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkDisplayPlanePropertiesKHR(std::ostream &out, const VkDisplayPlanePropertiesKHR* structInfo, Decoded_VkDisplayPlanePropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + struct_body << "\t" << consumer.GetHandle(metaInfo->currentDisplay) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->currentStackIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayPlanePropertiesKHR"); + out << "\t\t" << "VkDisplayPlanePropertiesKHR " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkDisplayPropertiesKHR(std::ostream &out, const VkDisplayPropertiesKHR* structInfo, Decoded_VkDisplayPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string physical_dimensions_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->physicalDimensions, + metaInfo->physicalDimensions, + consumer); + std::string physical_resolution_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->physicalResolution, + metaInfo->physicalResolution, + consumer); + struct_body << "\t" << consumer.GetHandle(metaInfo->display) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->displayName) << "," << std::endl; + struct_body << "\t\t\t" << physical_dimensions_info_var << "," << std::endl; + struct_body << "\t\t\t" << physical_resolution_info_var << "," << std::endl; + struct_body << "\t\t\t" << "VkSurfaceTransformFlagsKHR(" << structInfo->supportedTransforms << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->planeReorderPossible << "," << std::endl; + struct_body << "\t\t\t" << structInfo->persistentContent << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayPropertiesKHR"); + out << "\t\t" << "VkDisplayPropertiesKHR " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkDisplaySurfaceCreateInfoKHR(std::ostream &out, const VkDisplaySurfaceCreateInfoKHR* structInfo, Decoded_VkDisplaySurfaceCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string image_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->imageExtent, + metaInfo->imageExtent, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineProtectedAccess << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineProtectedAccessFeatures"); - out << "\t\t" << "VkPhysicalDevicePipelineProtectedAccessFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDisplaySurfaceCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->displayMode) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->planeIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->planeStackIndex << "," << std::endl; + struct_body << "\t\t\t" << "VkSurfaceTransformFlagBitsKHR(" << structInfo->transform << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->globalAlpha << "," << std::endl; + struct_body << "\t\t\t" << "VkDisplayPlaneAlphaFlagBitsKHR(" << structInfo->alphaMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << image_extent_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displaySurfaceCreateInfoKHR"); + out << "\t\t" << "VkDisplaySurfaceCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePipelineRobustnessFeatures(std::ostream &out, const VkPhysicalDevicePipelineRobustnessFeatures* structInfo, Decoded_VkPhysicalDevicePipelineRobustnessFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDisplayPresentInfoKHR(std::ostream &out, const VkDisplayPresentInfoKHR* structInfo, Decoded_VkDisplayPresentInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string src_rect_info_var = GenerateStruct_VkRect2D(out, + &structInfo->srcRect, + metaInfo->srcRect, + consumer); + std::string dst_rect_info_var = GenerateStruct_VkRect2D(out, + &structInfo->dstRect, + metaInfo->dstRect, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineRobustness << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineRobustnessFeatures"); - out << "\t\t" << "VkPhysicalDevicePipelineRobustnessFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << src_rect_info_var << "," << std::endl; + struct_body << "\t\t\t" << dst_rect_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->persistent << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayPresentInfoKHR"); + out << "\t\t" << "VkDisplayPresentInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePipelineRobustnessProperties(std::ostream &out, const VkPhysicalDevicePipelineRobustnessProperties* structInfo, Decoded_VkPhysicalDevicePipelineRobustnessProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkXlibSurfaceCreateInfoKHR(std::ostream &out, const VkXlibSurfaceCreateInfoKHR* structInfo, Decoded_VkXlibSurfaceCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->defaultRobustnessStorageBuffers << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->defaultRobustnessUniformBuffers << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->defaultRobustnessVertexInputs << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRobustnessImageBehavior(" << structInfo->defaultRobustnessImages << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineRobustnessProperties"); - out << "\t\t" << "VkPhysicalDevicePipelineRobustnessProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkXlibSurfaceCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->dpy << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->window << ","; + std::string variable_name = consumer.AddStruct(struct_body, "xlibSurfaceCreateInfoKHR"); + out << "\t\t" << "VkXlibSurfaceCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; + out << "\t\t" << "OverrideVkXlibSurfaceCreateInfoKHR(&" << variable_name << ", " << "appdata" << ");" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePushDescriptorProperties(std::ostream &out, const VkPhysicalDevicePushDescriptorProperties* structInfo, Decoded_VkPhysicalDevicePushDescriptorProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkXcbSurfaceCreateInfoKHR(std::ostream &out, const VkXcbSurfaceCreateInfoKHR* structInfo, Decoded_VkXcbSurfaceCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPushDescriptors << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePushDescriptorProperties"); - out << "\t\t" << "VkPhysicalDevicePushDescriptorProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkXcbSurfaceCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->connection << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->window << ","; + std::string variable_name = consumer.AddStruct(struct_body, "xcbSurfaceCreateInfoKHR"); + out << "\t\t" << "VkXcbSurfaceCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; + out << "\t\t" << "OverrideVkXcbSurfaceCreateInfoKHR(&" << variable_name << ", " << "appdata" << ");" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderExpectAssumeFeatures(std::ostream &out, const VkPhysicalDeviceShaderExpectAssumeFeatures* structInfo, Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkWaylandSurfaceCreateInfoKHR(std::ostream &out, const VkWaylandSurfaceCreateInfoKHR* structInfo, Decoded_VkWaylandSurfaceCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderExpectAssume << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderExpectAssumeFeatures"); - out << "\t\t" << "VkPhysicalDeviceShaderExpectAssumeFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkWaylandSurfaceCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->display << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->surface << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "waylandSurfaceCreateInfoKHR"); + out << "\t\t" << "VkWaylandSurfaceCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; + out << "\t\t" << "OverrideVkWaylandSurfaceCreateInfoKHR(&" << variable_name << ", " << "appdata" << ");" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderFloatControls2Features(std::ostream &out, const VkPhysicalDeviceShaderFloatControls2Features* structInfo, Decoded_VkPhysicalDeviceShaderFloatControls2Features* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAndroidSurfaceCreateInfoKHR(std::ostream &out, const VkAndroidSurfaceCreateInfoKHR* structInfo, Decoded_VkAndroidSurfaceCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderFloatControls2 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderFloatControls2Features"); - out << "\t\t" << "VkPhysicalDeviceShaderFloatControls2Features " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkAndroidSurfaceCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->window << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "androidSurfaceCreateInfoKHR"); + out << "\t\t" << "VkAndroidSurfaceCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; + out << "\t\t" << "OverrideVkAndroidSurfaceCreateInfoKHR(&" << variable_name << ", " << "appdata" << ");" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderSubgroupRotateFeatures(std::ostream &out, const VkPhysicalDeviceShaderSubgroupRotateFeatures* structInfo, Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkWin32SurfaceCreateInfoKHR(std::ostream &out, const VkWin32SurfaceCreateInfoKHR* structInfo, Decoded_VkWin32SurfaceCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSubgroupRotate << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSubgroupRotateClustered << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderSubgroupRotateFeatures"); - out << "\t\t" << "VkPhysicalDeviceShaderSubgroupRotateFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkWin32SurfaceCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->hinstance << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->hwnd << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "win32SurfaceCreateInfoKHR"); + out << "\t\t" << "VkWin32SurfaceCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; + out << "\t\t" << "OverrideVkWin32SurfaceCreateInfoKHR(&" << variable_name << ", " << "appdata" << ");" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVertexAttributeDivisorFeatures(std::ostream &out, const VkPhysicalDeviceVertexAttributeDivisorFeatures* structInfo, Decoded_VkPhysicalDeviceVertexAttributeDivisorFeatures* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindVideoSessionMemoryInfoKHR(std::ostream &out, const VkBindVideoSessionMemoryInfoKHR* structInfo, Decoded_VkBindVideoSessionMemoryInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexAttributeInstanceRateDivisor << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexAttributeInstanceRateZeroDivisor << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVertexAttributeDivisorFeatures"); - out << "\t\t" << "VkPhysicalDeviceVertexAttributeDivisorFeatures " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->memoryBindIndex << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memorySize << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindVideoSessionMemoryInfoKHR"); + out << "\t\t" << "VkBindVideoSessionMemoryInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVertexAttributeDivisorProperties(std::ostream &out, const VkPhysicalDeviceVertexAttributeDivisorProperties* structInfo, Decoded_VkPhysicalDeviceVertexAttributeDivisorProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVideoFormatInfoKHR(std::ostream &out, const VkPhysicalDeviceVideoFormatInfoKHR* structInfo, Decoded_VkPhysicalDeviceVideoFormatInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxVertexAttribDivisor << "," << std::endl; - struct_body << "\t\t\t" << structInfo->supportsNonZeroFirstInstance << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVertexAttributeDivisorProperties"); - out << "\t\t" << "VkPhysicalDeviceVertexAttributeDivisorProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->imageUsage << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoFormatInfoKHR"); + out << "\t\t" << "VkPhysicalDeviceVideoFormatInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVulkan14Features(std::ostream &out, const VkPhysicalDeviceVulkan14Features* structInfo, Decoded_VkPhysicalDeviceVulkan14Features* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkQueueFamilyQueryResultStatusPropertiesKHR(std::ostream &out, const VkQueueFamilyQueryResultStatusPropertiesKHR* structInfo, Decoded_VkQueueFamilyQueryResultStatusPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->globalPriorityQuery << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSubgroupRotate << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSubgroupRotateClustered << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderFloatControls2 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderExpectAssume << "," << std::endl; - struct_body << "\t\t\t" << structInfo->rectangularLines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bresenhamLines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->smoothLines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stippledRectangularLines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stippledBresenhamLines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stippledSmoothLines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexAttributeInstanceRateDivisor << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexAttributeInstanceRateZeroDivisor << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indexTypeUint8 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dynamicRenderingLocalRead << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maintenance5 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maintenance6 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineProtectedAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineRobustness << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hostImageCopy << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pushDescriptor << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan14Features"); - out << "\t\t" << "VkPhysicalDeviceVulkan14Features " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->queryResultStatusSupport << ","; + std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyQueryResultStatusPropertiesKHR"); + out << "\t\t" << "VkQueueFamilyQueryResultStatusPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVulkan14Properties(std::ostream &out, const VkPhysicalDeviceVulkan14Properties* structInfo, Decoded_VkPhysicalDeviceVulkan14Properties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkQueueFamilyVideoPropertiesKHR(std::ostream &out, const VkQueueFamilyVideoPropertiesKHR* structInfo, Decoded_VkQueueFamilyVideoPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcopy_src_layouts_array = "NULL"; - if (structInfo->pCopySrcLayouts != NULL) { - std::string pcopy_src_layouts_values; - for (uint32_t idx = 0; idx < structInfo->copySrcLayoutCount; idx++) { - pcopy_src_layouts_values += util::ToString(structInfo->pCopySrcLayouts[idx]) + ", "; - } - pcopy_src_layouts_array = "pCopySrcLayouts_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkImageLayout " << pcopy_src_layouts_array << "[] = {" << pcopy_src_layouts_values << "};" << std::endl; - } - std::string pcopy_dst_layouts_array = "NULL"; - if (structInfo->pCopyDstLayouts != NULL) { - std::string pcopy_dst_layouts_values; - for (uint32_t idx = 0; idx < structInfo->copyDstLayoutCount; idx++) { - pcopy_dst_layouts_values += util::ToString(structInfo->pCopyDstLayouts[idx]) + ", "; - } - pcopy_dst_layouts_array = "pCopyDstLayouts_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkImageLayout " << pcopy_dst_layouts_array << "[] = {" << pcopy_dst_layouts_values << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->lineSubPixelPrecisionBits << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxVertexAttribDivisor << "," << std::endl; - struct_body << "\t\t\t" << structInfo->supportsNonZeroFirstInstance << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPushDescriptors << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dynamicRenderingLocalReadDepthStencilAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dynamicRenderingLocalReadMultisampledAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->earlyFragmentMultisampleCoverageAfterSampleCounting << "," << std::endl; - struct_body << "\t\t\t" << structInfo->earlyFragmentSampleMaskTestBeforeSampleCounting << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthStencilSwizzleOneSupport << "," << std::endl; - struct_body << "\t\t\t" << structInfo->polygonModePointSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->nonStrictSinglePixelWideLinesUseParallelogram << "," << std::endl; - struct_body << "\t\t\t" << structInfo->nonStrictWideLinesUseParallelogram << "," << std::endl; - struct_body << "\t\t\t" << structInfo->blockTexelViewCompatibleMultipleLayers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxCombinedImageSamplerDescriptorCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShadingRateClampCombinerInputs << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->defaultRobustnessStorageBuffers << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->defaultRobustnessUniformBuffers << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->defaultRobustnessVertexInputs << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRobustnessImageBehavior(" << structInfo->defaultRobustnessImages << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->copySrcLayoutCount << "," << std::endl; - struct_body << "\t\t\t" << pcopy_src_layouts_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->copyDstLayoutCount << "," << std::endl; - struct_body << "\t\t\t" << pcopy_dst_layouts_array << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->optimalTilingLayoutUUID[0]), VK_UUID_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->identicalMemoryTypeRequirements << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVulkan14Properties"); - out << "\t\t" << "VkPhysicalDeviceVulkan14Properties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoCodecOperationFlagsKHR(" << structInfo->videoCodecOperations << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyVideoPropertiesKHR"); + out << "\t\t" << "VkQueueFamilyVideoPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineCreateFlags2CreateInfo(std::ostream &out, const VkPipelineCreateFlags2CreateInfo* structInfo, Decoded_VkPipelineCreateFlags2CreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoBeginCodingInfoKHR(std::ostream &out, const VkVideoBeginCodingInfoKHR* structInfo, Decoded_VkVideoBeginCodingInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string preference_slots_array = "NULL"; + if (structInfo->pReferenceSlots != NULL) { + preference_slots_array = "pReferenceSlots_" + std::to_string(consumer.GetNextId()); + std::string preference_slots_names; + for (uint32_t idx = 0; idx < structInfo->referenceSlotCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pReferenceSlots + idx != NULL) { + variable_name = GenerateStruct_VkVideoReferenceSlotInfoKHR(out, + structInfo->pReferenceSlots + idx, + metaInfo->pReferenceSlots->GetMetaStructPointer() + idx, + consumer); + } + preference_slots_names += variable_name + ", "; + } + out << "\t\t" << "VkVideoReferenceSlotInfoKHR " << preference_slots_array << "[] = {" << preference_slots_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineCreateFlags2(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineCreateFlags2CreateInfo"); - out << "\t\t" << "VkPipelineCreateFlags2CreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoBeginCodingFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->videoSession) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->videoSessionParameters) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->referenceSlotCount << "," << std::endl; + struct_body << "\t\t\t" << preference_slots_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoBeginCodingInfoKHR"); + out << "\t\t" << "VkVideoBeginCodingInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineRasterizationLineStateCreateInfo(std::ostream &out, const VkPipelineRasterizationLineStateCreateInfo* structInfo, Decoded_VkPipelineRasterizationLineStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoCapabilitiesKHR(std::ostream &out, const VkVideoCapabilitiesKHR* structInfo, Decoded_VkVideoCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string picture_access_granularity_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->pictureAccessGranularity, + metaInfo->pictureAccessGranularity, + consumer); + std::string min_coded_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->minCodedExtent, + metaInfo->minCodedExtent, + consumer); + std::string max_coded_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxCodedExtent, + metaInfo->maxCodedExtent, + consumer); + std::string std_header_version_info_var = GenerateStruct_VkExtensionProperties(out, + &structInfo->stdHeaderVersion, + metaInfo->stdHeaderVersion, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkLineRasterizationMode(" << structInfo->lineRasterizationMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stippledLineEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->lineStippleFactor << "," << std::endl; - struct_body << "\t\t\t" << structInfo->lineStipplePattern << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineRasterizationLineStateCreateInfo"); - out << "\t\t" << "VkPipelineRasterizationLineStateCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoCapabilityFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minBitstreamBufferOffsetAlignment << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minBitstreamBufferSizeAlignment << "UL" << "," << std::endl; + struct_body << "\t\t\t" << picture_access_granularity_info_var << "," << std::endl; + struct_body << "\t\t\t" << min_coded_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_coded_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDpbSlots << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxActiveReferencePictures << "," << std::endl; + struct_body << "\t\t\t" << std_header_version_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoCapabilitiesKHR"); + out << "\t\t" << "VkVideoCapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineRobustnessCreateInfo(std::ostream &out, const VkPipelineRobustnessCreateInfo* structInfo, Decoded_VkPipelineRobustnessCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoCodingControlInfoKHR(std::ostream &out, const VkVideoCodingControlInfoKHR* structInfo, Decoded_VkVideoCodingControlInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->storageBuffers << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->uniformBuffers << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRobustnessBufferBehavior(" << structInfo->vertexInputs << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRobustnessImageBehavior(" << structInfo->images << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineRobustnessCreateInfo"); - out << "\t\t" << "VkPipelineRobustnessCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoCodingControlFlagsKHR(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoCodingControlInfoKHR"); + out << "\t\t" << "VkVideoCodingControlInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineVertexInputDivisorStateCreateInfo(std::ostream &out, const VkPipelineVertexInputDivisorStateCreateInfo* structInfo, Decoded_VkPipelineVertexInputDivisorStateCreateInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEndCodingInfoKHR(std::ostream &out, const VkVideoEndCodingInfoKHR* structInfo, Decoded_VkVideoEndCodingInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pvertex_binding_divisors_array = "NULL"; - if (structInfo->pVertexBindingDivisors != NULL) { - pvertex_binding_divisors_array = "pVertexBindingDivisors_" + std::to_string(consumer.GetNextId()); - std::string pvertex_binding_divisors_names; - for (uint32_t idx = 0; idx < structInfo->vertexBindingDivisorCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pVertexBindingDivisors + idx != NULL) { - variable_name = GenerateStruct_VkVertexInputBindingDivisorDescription(out, - structInfo->pVertexBindingDivisors + idx, - metaInfo->pVertexBindingDivisors->GetMetaStructPointer() + idx, - consumer); - } - pvertex_binding_divisors_names += variable_name + ", "; - } - out << "\t\t" << "VkVertexInputBindingDivisorDescription " << pvertex_binding_divisors_array << "[] = {" << pvertex_binding_divisors_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexBindingDivisorCount << "," << std::endl; - struct_body << "\t\t\t" << pvertex_binding_divisors_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineVertexInputDivisorStateCreateInfo"); - out << "\t\t" << "VkPipelineVertexInputDivisorStateCreateInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEndCodingFlagsKHR(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEndCodingInfoKHR"); + out << "\t\t" << "VkVideoEndCodingInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPushConstantsInfo(std::ostream &out, const VkPushConstantsInfo* structInfo, Decoded_VkPushConstantsInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoFormatPropertiesKHR(std::ostream &out, const VkVideoFormatPropertiesKHR* structInfo, Decoded_VkVideoFormatPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pvalues_array = "NULL"; - if (structInfo->pValues != NULL) { - std::string pvalues_values; - for (uint32_t idx0 = 0; idx0 < structInfo->size; ++idx0) { - pvalues_values += std::to_string(reinterpret_cast(structInfo->pValues)[idx0]) + ", "; - } - pvalues_array = "pValues_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint8_t " << pvalues_array << "[] = {" << pvalues_values << "};" << std::endl; - } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->stageFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "," << std::endl; - struct_body << "\t\t\t" << pvalues_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pushConstantsInfo"); - out << "\t\t" << "VkPushConstantsInfo " << variable_name << " {" << std::endl; + std::string component_mapping_info_var = GenerateStruct_VkComponentMapping(out, + &structInfo->componentMapping, + metaInfo->componentMapping, + consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << component_mapping_info_var << "," << std::endl; + struct_body << "\t\t\t" << "VkImageCreateFlags(" << structInfo->imageCreateFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageType(" << structInfo->imageType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageTiling(" << structInfo->imageTiling << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->imageUsageFlags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoFormatPropertiesKHR"); + out << "\t\t" << "VkVideoFormatPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPushDescriptorSetInfo(std::ostream &out, const VkPushDescriptorSetInfo* structInfo, Decoded_VkPushDescriptorSetInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoPictureResourceInfoKHR(std::ostream &out, const VkVideoPictureResourceInfoKHR* structInfo, Decoded_VkVideoPictureResourceInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdescriptor_writes_array = "NULL"; - if (structInfo->pDescriptorWrites != NULL) { - pdescriptor_writes_array = "pDescriptorWrites_" + std::to_string(consumer.GetNextId()); - std::string pdescriptor_writes_names; - for (uint32_t idx = 0; idx < structInfo->descriptorWriteCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pDescriptorWrites + idx != NULL) { - variable_name = GenerateStruct_VkWriteDescriptorSet(out, - structInfo->pDescriptorWrites + idx, - metaInfo->pDescriptorWrites->GetMetaStructPointer() + idx, - consumer); - } - pdescriptor_writes_names += variable_name + ", "; - } - out << "\t\t" << "VkWriteDescriptorSet " << pdescriptor_writes_array << "[] = {" << pdescriptor_writes_names << "};" << std::endl; - } + std::string coded_offset_info_var = GenerateStruct_VkOffset2D(out, + &structInfo->codedOffset, + metaInfo->codedOffset, + consumer); + std::string coded_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->codedExtent, + metaInfo->codedExtent, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->stageFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->set << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorWriteCount << "," << std::endl; - struct_body << "\t\t\t" << pdescriptor_writes_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pushDescriptorSetInfo"); - out << "\t\t" << "VkPushDescriptorSetInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << coded_offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << coded_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->baseArrayLayer << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->imageViewBinding) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoPictureResourceInfoKHR"); + out << "\t\t" << "VkVideoPictureResourceInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkQueueFamilyGlobalPriorityProperties(std::ostream &out, const VkQueueFamilyGlobalPriorityProperties* structInfo, Decoded_VkQueueFamilyGlobalPriorityProperties* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoProfileInfoKHR(std::ostream &out, const VkVideoProfileInfoKHR* structInfo, Decoded_VkVideoProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->priorityCount << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->priorities[0]), VK_MAX_GLOBAL_PRIORITY_SIZE) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyGlobalPriorityProperties"); - out << "\t\t" << "VkQueueFamilyGlobalPriorityProperties " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoCodecOperationFlagBitsKHR(" << structInfo->videoCodecOperation << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoChromaSubsamplingFlagsKHR(" << structInfo->chromaSubsampling << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoComponentBitDepthFlagsKHR(" << structInfo->lumaBitDepth << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoComponentBitDepthFlagsKHR(" << structInfo->chromaBitDepth << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoProfileInfoKHR"); + out << "\t\t" << "VkVideoProfileInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderingAreaInfo(std::ostream &out, const VkRenderingAreaInfo* structInfo, Decoded_VkRenderingAreaInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoProfileListInfoKHR(std::ostream &out, const VkVideoProfileListInfoKHR* structInfo, Decoded_VkVideoProfileListInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcolor_attachment_formats_values; - std::string pcolor_attachment_formats_array = "NULL"; - if (structInfo->pColorAttachmentFormats != NULL) { - for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { - pcolor_attachment_formats_values += util::ToString(structInfo->pColorAttachmentFormats[idx]) + ", "; + std::string pprofiles_array = "NULL"; + if (structInfo->pProfiles != NULL) { + pprofiles_array = "pProfiles_" + std::to_string(consumer.GetNextId()); + std::string pprofiles_names; + for (uint32_t idx = 0; idx < structInfo->profileCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pProfiles + idx != NULL) { + variable_name = GenerateStruct_VkVideoProfileInfoKHR(out, + structInfo->pProfiles + idx, + metaInfo->pProfiles->GetMetaStructPointer() + idx, + consumer); + } + pprofiles_names += variable_name + ", "; } - pcolor_attachment_formats_array = "pColorAttachmentFormats_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkFormat " << pcolor_attachment_formats_array << "[] = {" << pcolor_attachment_formats_values << "};" << std::endl; + out << "\t\t" << "VkVideoProfileInfoKHR " << pprofiles_array << "[] = {" << pprofiles_names << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pcolor_attachment_formats_array << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->depthAttachmentFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->stencilAttachmentFormat << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderingAreaInfo"); - out << "\t\t" << "VkRenderingAreaInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->profileCount << "," << std::endl; + struct_body << "\t\t\t" << pprofiles_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoProfileListInfoKHR"); + out << "\t\t" << "VkVideoProfileListInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderingAttachmentLocationInfo(std::ostream &out, const VkRenderingAttachmentLocationInfo* structInfo, Decoded_VkRenderingAttachmentLocationInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoReferenceSlotInfoKHR(std::ostream &out, const VkVideoReferenceSlotInfoKHR* structInfo, Decoded_VkVideoReferenceSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcolor_attachment_locations_array = "NULL"; - if (structInfo->pColorAttachmentLocations != NULL) { - pcolor_attachment_locations_array = "pColorAttachmentLocations_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pcolor_attachment_locations_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pColorAttachmentLocations, structInfo->colorAttachmentCount) << ";" << std::endl; + std::string ppicture_resource_struct = "NULL"; + if (structInfo->pPictureResource != NULL) { + ppicture_resource_struct = GenerateStruct_VkVideoPictureResourceInfoKHR(out, + structInfo->pPictureResource, + metaInfo->pPictureResource->GetMetaStructPointer(), + consumer); + ppicture_resource_struct.insert(0, "&"); } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pcolor_attachment_locations_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderingAttachmentLocationInfo"); - out << "\t\t" << "VkRenderingAttachmentLocationInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->slotIndex << "," << std::endl; + struct_body << "\t\t\t" << ppicture_resource_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoReferenceSlotInfoKHR"); + out << "\t\t" << "VkVideoReferenceSlotInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderingInputAttachmentIndexInfo(std::ostream &out, const VkRenderingInputAttachmentIndexInfo* structInfo, Decoded_VkRenderingInputAttachmentIndexInfo* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoSessionCreateInfoKHR(std::ostream &out, const VkVideoSessionCreateInfoKHR* structInfo, Decoded_VkVideoSessionCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcolor_attachment_input_indices_array = "NULL"; - if (structInfo->pColorAttachmentInputIndices != NULL) { - pcolor_attachment_input_indices_array = "pColorAttachmentInputIndices_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pcolor_attachment_input_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pColorAttachmentInputIndices, structInfo->colorAttachmentCount) << ";" << std::endl; + std::string pvideo_profile_struct = "NULL"; + if (structInfo->pVideoProfile != NULL) { + pvideo_profile_struct = GenerateStruct_VkVideoProfileInfoKHR(out, + structInfo->pVideoProfile, + metaInfo->pVideoProfile->GetMetaStructPointer(), + consumer); + pvideo_profile_struct.insert(0, "&"); + } + std::string max_coded_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxCodedExtent, + metaInfo->maxCodedExtent, + consumer); + std::string pstd_header_version_struct = "NULL"; + if (structInfo->pStdHeaderVersion != NULL) { + pstd_header_version_struct = GenerateStruct_VkExtensionProperties(out, + structInfo->pStdHeaderVersion, + metaInfo->pStdHeaderVersion->GetMetaStructPointer(), + consumer); + pstd_header_version_struct.insert(0, "&"); } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pcolor_attachment_input_indices_array << "," << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "renderingInputAttachmentIndexInfo"); - out << "\t\t" << "VkRenderingInputAttachmentIndexInfo " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->queueFamilyIndex << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoSessionCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << pvideo_profile_struct << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->pictureFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << max_coded_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->referencePictureFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDpbSlots << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxActiveReferencePictures << "," << std::endl; + struct_body << "\t\t\t" << pstd_header_version_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoSessionCreateInfoKHR"); + out << "\t\t" << "VkVideoSessionCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSubresourceHostMemcpySize(std::ostream &out, const VkSubresourceHostMemcpySize* structInfo, Decoded_VkSubresourceHostMemcpySize* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoSessionMemoryRequirementsKHR(std::ostream &out, const VkVideoSessionMemoryRequirementsKHR* structInfo, Decoded_VkVideoSessionMemoryRequirementsKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string memory_requirements_info_var = GenerateStruct_VkMemoryRequirements(out, + &structInfo->memoryRequirements, + metaInfo->memoryRequirements, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "subresourceHostMemcpySize"); - out << "\t\t" << "VkSubresourceHostMemcpySize " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->memoryBindIndex << "," << std::endl; + struct_body << "\t\t\t" << memory_requirements_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoSessionMemoryRequirementsKHR"); + out << "\t\t" << "VkVideoSessionMemoryRequirementsKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSubresourceLayout2(std::ostream &out, const VkSubresourceLayout2* structInfo, Decoded_VkSubresourceLayout2* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoSessionParametersCreateInfoKHR(std::ostream &out, const VkVideoSessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoSessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string subresource_layout_info_var = GenerateStruct_VkSubresourceLayout(out, - &structInfo->subresourceLayout, - metaInfo->subresourceLayout, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << subresource_layout_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "subresourceLayout2"); - out << "\t\t" << "VkSubresourceLayout2 " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoSessionParametersCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->videoSessionParametersTemplate) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->videoSession) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoSessionParametersCreateInfoKHR"); + out << "\t\t" << "VkVideoSessionParametersCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVertexInputBindingDivisorDescription(std::ostream &out, const VkVertexInputBindingDivisorDescription* structInfo, Decoded_VkVertexInputBindingDivisorDescription* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoSessionParametersUpdateInfoKHR(std::ostream &out, const VkVideoSessionParametersUpdateInfoKHR* structInfo, Decoded_VkVideoSessionParametersUpdateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->binding << "," << std::endl; - struct_body << "\t\t\t" << structInfo->divisor << ","; - std::string variable_name = consumer.AddStruct(struct_body, "vertexInputBindingDivisorDescription"); - out << "\t\t" << "VkVertexInputBindingDivisorDescription " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->updateSequenceCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoSessionParametersUpdateInfoKHR"); + out << "\t\t" << "VkVideoSessionParametersUpdateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfaceCapabilitiesKHR(std::ostream &out, const VkSurfaceCapabilitiesKHR* structInfo, Decoded_VkSurfaceCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeCapabilitiesKHR(std::ostream &out, const VkVideoDecodeCapabilitiesKHR* structInfo, Decoded_VkVideoDecodeCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string current_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->currentExtent, - metaInfo->currentExtent, - consumer); - std::string min_image_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->minImageExtent, - metaInfo->minImageExtent, - consumer); - std::string max_image_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxImageExtent, - metaInfo->maxImageExtent, - consumer); - struct_body << "\t" << structInfo->minImageCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxImageCount << "," << std::endl; - struct_body << "\t\t\t" << current_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << min_image_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_image_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxImageArrayLayers << "," << std::endl; - struct_body << "\t\t\t" << "VkSurfaceTransformFlagsKHR(" << structInfo->supportedTransforms << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSurfaceTransformFlagBitsKHR(" << structInfo->currentTransform << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkCompositeAlphaFlagsKHR(" << structInfo->supportedCompositeAlpha << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->supportedUsageFlags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfaceCapabilitiesKHR"); - out << "\t\t" << "VkSurfaceCapabilitiesKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoDecodeCapabilityFlagsKHR(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeCapabilitiesKHR"); + out << "\t\t" << "VkVideoDecodeCapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfaceFormatKHR(std::ostream &out, const VkSurfaceFormatKHR* structInfo, Decoded_VkSurfaceFormatKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeInfoKHR(std::ostream &out, const VkVideoDecodeInfoKHR* structInfo, Decoded_VkVideoDecodeInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkColorSpaceKHR(" << structInfo->colorSpace << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfaceFormatKHR"); - out << "\t\t" << "VkSurfaceFormatKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string dst_picture_resource_info_var = GenerateStruct_VkVideoPictureResourceInfoKHR(out, + &structInfo->dstPictureResource, + metaInfo->dstPictureResource, + consumer); + std::string psetup_reference_slot_struct = "NULL"; + if (structInfo->pSetupReferenceSlot != NULL) { + psetup_reference_slot_struct = GenerateStruct_VkVideoReferenceSlotInfoKHR(out, + structInfo->pSetupReferenceSlot, + metaInfo->pSetupReferenceSlot->GetMetaStructPointer(), + consumer); + psetup_reference_slot_struct.insert(0, "&"); + } + std::string preference_slots_array = "NULL"; + if (structInfo->pReferenceSlots != NULL) { + preference_slots_array = "pReferenceSlots_" + std::to_string(consumer.GetNextId()); + std::string preference_slots_names; + for (uint32_t idx = 0; idx < structInfo->referenceSlotCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pReferenceSlots + idx != NULL) { + variable_name = GenerateStruct_VkVideoReferenceSlotInfoKHR(out, + structInfo->pReferenceSlots + idx, + metaInfo->pReferenceSlots->GetMetaStructPointer() + idx, + consumer); + } + preference_slots_names += variable_name + ", "; + } + out << "\t\t" << "VkVideoReferenceSlotInfoKHR " << preference_slots_array << "[] = {" << preference_slots_names << "};" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoDecodeFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcBuffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->srcBufferOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->srcBufferRange << "UL" << "," << std::endl; + struct_body << "\t\t\t" << dst_picture_resource_info_var << "," << std::endl; + struct_body << "\t\t\t" << psetup_reference_slot_struct << "," << std::endl; + struct_body << "\t\t\t" << structInfo->referenceSlotCount << "," << std::endl; + struct_body << "\t\t\t" << preference_slots_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeInfoKHR"); + out << "\t\t" << "VkVideoDecodeInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAcquireNextImageInfoKHR(std::ostream &out, const VkAcquireNextImageInfoKHR* structInfo, Decoded_VkAcquireNextImageInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeUsageInfoKHR(std::ostream &out, const VkVideoDecodeUsageInfoKHR* structInfo, Decoded_VkVideoDecodeUsageInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->swapchain) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->timeout << "UL" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->fence) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceMask << ","; - std::string variable_name = consumer.AddStruct(struct_body, "acquireNextImageInfoKHR"); - out << "\t\t" << "VkAcquireNextImageInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoDecodeUsageFlagsKHR(" << structInfo->videoUsageHints << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeUsageInfoKHR"); + out << "\t\t" << "VkVideoDecodeUsageInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBindImageMemorySwapchainInfoKHR(std::ostream &out, const VkBindImageMemorySwapchainInfoKHR* structInfo, Decoded_VkBindImageMemorySwapchainInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264CapabilitiesKHR(std::ostream &out, const VkVideoEncodeH264CapabilitiesKHR* structInfo, Decoded_VkVideoEncodeH264CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->swapchain) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bindImageMemorySwapchainInfoKHR"); - out << "\t\t" << "VkBindImageMemorySwapchainInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeH264CapabilityFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "StdVideoH264LevelIdc(" << structInfo->maxLevelIdc << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSliceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPPictureL0ReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxBPictureL0ReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxL1ReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTemporalLayerCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->expectDyadicTemporalLayerPattern << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minQp << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxQp << "," << std::endl; + struct_body << "\t\t\t" << structInfo->prefersGopRemainingFrames << "," << std::endl; + struct_body << "\t\t\t" << structInfo->requiresGopRemainingFrames << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeH264StdFlagsKHR(" << structInfo->stdSyntaxFlags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264CapabilitiesKHR"); + out << "\t\t" << "VkVideoEncodeH264CapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceGroupPresentCapabilitiesKHR(std::ostream &out, const VkDeviceGroupPresentCapabilitiesKHR* structInfo, Decoded_VkDeviceGroupPresentCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264DpbSlotInfoKHR(std::ostream &out, const VkVideoEncodeH264DpbSlotInfoKHR* structInfo, Decoded_VkVideoEncodeH264DpbSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pstd_reference_info_struct = "NULL"; + if (structInfo->pStdReferenceInfo != NULL) { + pstd_reference_info_struct = GenerateStruct_StdVideoEncodeH264ReferenceInfo(out, + structInfo->pStdReferenceInfo, + metaInfo->pStdReferenceInfo->GetMetaStructPointer(), + consumer); + pstd_reference_info_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->presentMask[0]), VK_MAX_DEVICE_GROUP_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << "VkDeviceGroupPresentModeFlagsKHR(" << structInfo->modes << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupPresentCapabilitiesKHR"); - out << "\t\t" << "VkDeviceGroupPresentCapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pstd_reference_info_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264DpbSlotInfoKHR"); + out << "\t\t" << "VkVideoEncodeH264DpbSlotInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceGroupPresentInfoKHR(std::ostream &out, const VkDeviceGroupPresentInfoKHR* structInfo, Decoded_VkDeviceGroupPresentInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264FrameSizeKHR(std::ostream &out, const VkVideoEncodeH264FrameSizeKHR* structInfo, Decoded_VkVideoEncodeH264FrameSizeKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdevice_masks_array = "NULL"; - if (structInfo->pDeviceMasks != NULL) { - pdevice_masks_array = "pDeviceMasks_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pdevice_masks_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDeviceMasks, structInfo->swapchainCount) << ";" << std::endl; - } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; - struct_body << "\t\t\t" << pdevice_masks_array << "," << std::endl; - struct_body << "\t\t\t" << "VkDeviceGroupPresentModeFlagBitsKHR(" << structInfo->mode << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupPresentInfoKHR"); - out << "\t\t" << "VkDeviceGroupPresentInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->frameISize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->framePSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->frameBSize << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264FrameSizeKHR"); + out << "\t\t" << "VkVideoEncodeH264FrameSizeKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceGroupSwapchainCreateInfoKHR(std::ostream &out, const VkDeviceGroupSwapchainCreateInfoKHR* structInfo, Decoded_VkDeviceGroupSwapchainCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264GopRemainingFrameInfoKHR(std::ostream &out, const VkVideoEncodeH264GopRemainingFrameInfoKHR* structInfo, Decoded_VkVideoEncodeH264GopRemainingFrameInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDeviceGroupPresentModeFlagsKHR(" << structInfo->modes << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceGroupSwapchainCreateInfoKHR"); - out << "\t\t" << "VkDeviceGroupSwapchainCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->useGopRemainingFrames << "," << std::endl; + struct_body << "\t\t\t" << structInfo->gopRemainingI << "," << std::endl; + struct_body << "\t\t\t" << structInfo->gopRemainingP << "," << std::endl; + struct_body << "\t\t\t" << structInfo->gopRemainingB << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264GopRemainingFrameInfoKHR"); + out << "\t\t" << "VkVideoEncodeH264GopRemainingFrameInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageSwapchainCreateInfoKHR(std::ostream &out, const VkImageSwapchainCreateInfoKHR* structInfo, Decoded_VkImageSwapchainCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264NaluSliceInfoKHR(std::ostream &out, const VkVideoEncodeH264NaluSliceInfoKHR* structInfo, Decoded_VkVideoEncodeH264NaluSliceInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pstd_slice_header_struct = "NULL"; + if (structInfo->pStdSliceHeader != NULL) { + pstd_slice_header_struct = GenerateStruct_StdVideoEncodeH264SliceHeader(out, + structInfo->pStdSliceHeader, + metaInfo->pStdSliceHeader->GetMetaStructPointer(), + consumer); + pstd_slice_header_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->swapchain) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageSwapchainCreateInfoKHR"); - out << "\t\t" << "VkImageSwapchainCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->constantQp << "," << std::endl; + struct_body << "\t\t\t" << pstd_slice_header_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264NaluSliceInfoKHR"); + out << "\t\t" << "VkVideoEncodeH264NaluSliceInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayModeCreateInfoKHR(std::ostream &out, const VkDisplayModeCreateInfoKHR* structInfo, Decoded_VkDisplayModeCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264PictureInfoKHR(std::ostream &out, const VkVideoEncodeH264PictureInfoKHR* structInfo, Decoded_VkVideoEncodeH264PictureInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string parameters_info_var = GenerateStruct_VkDisplayModeParametersKHR(out, - &structInfo->parameters, - metaInfo->parameters, + std::string pnalu_slice_entries_array = "NULL"; + if (structInfo->pNaluSliceEntries != NULL) { + pnalu_slice_entries_array = "pNaluSliceEntries_" + std::to_string(consumer.GetNextId()); + std::string pnalu_slice_entries_names; + for (uint32_t idx = 0; idx < structInfo->naluSliceEntryCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pNaluSliceEntries + idx != NULL) { + variable_name = GenerateStruct_VkVideoEncodeH264NaluSliceInfoKHR(out, + structInfo->pNaluSliceEntries + idx, + metaInfo->pNaluSliceEntries->GetMetaStructPointer() + idx, + consumer); + } + pnalu_slice_entries_names += variable_name + ", "; + } + out << "\t\t" << "VkVideoEncodeH264NaluSliceInfoKHR " << pnalu_slice_entries_array << "[] = {" << pnalu_slice_entries_names << "};" << std::endl; + } + std::string pstd_picture_info_struct = "NULL"; + if (structInfo->pStdPictureInfo != NULL) { + pstd_picture_info_struct = GenerateStruct_StdVideoEncodeH264PictureInfo(out, + structInfo->pStdPictureInfo, + metaInfo->pStdPictureInfo->GetMetaStructPointer(), consumer); + pstd_picture_info_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDisplayModeCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << parameters_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayModeCreateInfoKHR"); - out << "\t\t" << "VkDisplayModeCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->naluSliceEntryCount << "," << std::endl; + struct_body << "\t\t\t" << pnalu_slice_entries_array << "," << std::endl; + struct_body << "\t\t\t" << pstd_picture_info_struct << "," << std::endl; + struct_body << "\t\t\t" << structInfo->generatePrefixNalu << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264PictureInfoKHR"); + out << "\t\t" << "VkVideoEncodeH264PictureInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayModeParametersKHR(std::ostream &out, const VkDisplayModeParametersKHR* structInfo, Decoded_VkDisplayModeParametersKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264ProfileInfoKHR(std::ostream &out, const VkVideoEncodeH264ProfileInfoKHR* structInfo, Decoded_VkVideoEncodeH264ProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string visible_region_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->visibleRegion, - metaInfo->visibleRegion, - consumer); - struct_body << "\t" << visible_region_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->refreshRate << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayModeParametersKHR"); - out << "\t\t" << "VkDisplayModeParametersKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "StdVideoH264ProfileIdc(" << structInfo->stdProfileIdc << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264ProfileInfoKHR"); + out << "\t\t" << "VkVideoEncodeH264ProfileInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayModePropertiesKHR(std::ostream &out, const VkDisplayModePropertiesKHR* structInfo, Decoded_VkDisplayModePropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264QpKHR(std::ostream &out, const VkVideoEncodeH264QpKHR* structInfo, Decoded_VkVideoEncodeH264QpKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string parameters_info_var = GenerateStruct_VkDisplayModeParametersKHR(out, - &structInfo->parameters, - metaInfo->parameters, - consumer); - struct_body << "\t" << consumer.GetHandle(metaInfo->displayMode) << "," << std::endl; - struct_body << "\t\t\t" << parameters_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayModePropertiesKHR"); - out << "\t\t" << "VkDisplayModePropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->qpI << "," << std::endl; + struct_body << "\t\t\t" << structInfo->qpP << "," << std::endl; + struct_body << "\t\t\t" << structInfo->qpB << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264QpKHR"); + out << "\t\t" << "VkVideoEncodeH264QpKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayPlaneCapabilitiesKHR(std::ostream &out, const VkDisplayPlaneCapabilitiesKHR* structInfo, Decoded_VkDisplayPlaneCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264QualityLevelPropertiesKHR(std::ostream &out, const VkVideoEncodeH264QualityLevelPropertiesKHR* structInfo, Decoded_VkVideoEncodeH264QualityLevelPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string min_src_position_info_var = GenerateStruct_VkOffset2D(out, - &structInfo->minSrcPosition, - metaInfo->minSrcPosition, - consumer); - std::string max_src_position_info_var = GenerateStruct_VkOffset2D(out, - &structInfo->maxSrcPosition, - metaInfo->maxSrcPosition, - consumer); - std::string min_src_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->minSrcExtent, - metaInfo->minSrcExtent, - consumer); - std::string max_src_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxSrcExtent, - metaInfo->maxSrcExtent, - consumer); - std::string min_dst_position_info_var = GenerateStruct_VkOffset2D(out, - &structInfo->minDstPosition, - metaInfo->minDstPosition, - consumer); - std::string max_dst_position_info_var = GenerateStruct_VkOffset2D(out, - &structInfo->maxDstPosition, - metaInfo->maxDstPosition, - consumer); - std::string min_dst_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->minDstExtent, - metaInfo->minDstExtent, - consumer); - std::string max_dst_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxDstExtent, - metaInfo->maxDstExtent, - consumer); - struct_body << "\t" << "VkDisplayPlaneAlphaFlagsKHR(" << structInfo->supportedAlpha << ")" << "," << std::endl; - struct_body << "\t\t\t" << min_src_position_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_src_position_info_var << "," << std::endl; - struct_body << "\t\t\t" << min_src_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_src_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << min_dst_position_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_dst_position_info_var << "," << std::endl; - struct_body << "\t\t\t" << min_dst_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_dst_extent_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayPlaneCapabilitiesKHR"); - out << "\t\t" << "VkDisplayPlaneCapabilitiesKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string preferred_constant_qp_info_var = GenerateStruct_VkVideoEncodeH264QpKHR(out, + &structInfo->preferredConstantQp, + metaInfo->preferredConstantQp, + consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeH264RateControlFlagsKHR(" << structInfo->preferredRateControlFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredGopFrameCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredIdrPeriod << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredConsecutiveBFrameCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredTemporalLayerCount << "," << std::endl; + struct_body << "\t\t\t" << preferred_constant_qp_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredMaxL0ReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredMaxL1ReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredStdEntropyCodingModeFlag << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264QualityLevelPropertiesKHR"); + out << "\t\t" << "VkVideoEncodeH264QualityLevelPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayPlanePropertiesKHR(std::ostream &out, const VkDisplayPlanePropertiesKHR* structInfo, Decoded_VkDisplayPlanePropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264RateControlInfoKHR(std::ostream &out, const VkVideoEncodeH264RateControlInfoKHR* structInfo, Decoded_VkVideoEncodeH264RateControlInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << consumer.GetHandle(metaInfo->currentDisplay) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->currentStackIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayPlanePropertiesKHR"); - out << "\t\t" << "VkDisplayPlanePropertiesKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeH264RateControlFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->gopFrameCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->idrPeriod << "," << std::endl; + struct_body << "\t\t\t" << structInfo->consecutiveBFrameCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->temporalLayerCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264RateControlInfoKHR"); + out << "\t\t" << "VkVideoEncodeH264RateControlInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayPropertiesKHR(std::ostream &out, const VkDisplayPropertiesKHR* structInfo, Decoded_VkDisplayPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264RateControlLayerInfoKHR(std::ostream &out, const VkVideoEncodeH264RateControlLayerInfoKHR* structInfo, Decoded_VkVideoEncodeH264RateControlLayerInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string physical_dimensions_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->physicalDimensions, - metaInfo->physicalDimensions, - consumer); - std::string physical_resolution_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->physicalResolution, - metaInfo->physicalResolution, - consumer); - struct_body << "\t" << consumer.GetHandle(metaInfo->display) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->displayName) << "," << std::endl; - struct_body << "\t\t\t" << physical_dimensions_info_var << "," << std::endl; - struct_body << "\t\t\t" << physical_resolution_info_var << "," << std::endl; - struct_body << "\t\t\t" << "VkSurfaceTransformFlagsKHR(" << structInfo->supportedTransforms << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->planeReorderPossible << "," << std::endl; - struct_body << "\t\t\t" << structInfo->persistentContent << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayPropertiesKHR"); - out << "\t\t" << "VkDisplayPropertiesKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string min_qp_info_var = GenerateStruct_VkVideoEncodeH264QpKHR(out, + &structInfo->minQp, + metaInfo->minQp, + consumer); + std::string max_qp_info_var = GenerateStruct_VkVideoEncodeH264QpKHR(out, + &structInfo->maxQp, + metaInfo->maxQp, + consumer); + std::string max_frame_size_info_var = GenerateStruct_VkVideoEncodeH264FrameSizeKHR(out, + &structInfo->maxFrameSize, + metaInfo->maxFrameSize, + consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->useMinQp << "," << std::endl; + struct_body << "\t\t\t" << min_qp_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->useMaxQp << "," << std::endl; + struct_body << "\t\t\t" << max_qp_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->useMaxFrameSize << "," << std::endl; + struct_body << "\t\t\t" << max_frame_size_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264RateControlLayerInfoKHR"); + out << "\t\t" << "VkVideoEncodeH264RateControlLayerInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplaySurfaceCreateInfoKHR(std::ostream &out, const VkDisplaySurfaceCreateInfoKHR* structInfo, Decoded_VkDisplaySurfaceCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264SessionCreateInfoKHR(std::ostream &out, const VkVideoEncodeH264SessionCreateInfoKHR* structInfo, Decoded_VkVideoEncodeH264SessionCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string image_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->imageExtent, - metaInfo->imageExtent, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDisplaySurfaceCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->displayMode) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->planeIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->planeStackIndex << "," << std::endl; - struct_body << "\t\t\t" << "VkSurfaceTransformFlagBitsKHR(" << structInfo->transform << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->globalAlpha << "," << std::endl; - struct_body << "\t\t\t" << "VkDisplayPlaneAlphaFlagBitsKHR(" << structInfo->alphaMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << image_extent_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displaySurfaceCreateInfoKHR"); - out << "\t\t" << "VkDisplaySurfaceCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->useMaxLevelIdc << "," << std::endl; + struct_body << "\t\t\t" << "StdVideoH264LevelIdc(" << structInfo->maxLevelIdc << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264SessionCreateInfoKHR"); + out << "\t\t" << "VkVideoEncodeH264SessionCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayPresentInfoKHR(std::ostream &out, const VkDisplayPresentInfoKHR* structInfo, Decoded_VkDisplayPresentInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264SessionParametersAddInfoKHR(std::ostream &out, const VkVideoEncodeH264SessionParametersAddInfoKHR* structInfo, Decoded_VkVideoEncodeH264SessionParametersAddInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string src_rect_info_var = GenerateStruct_VkRect2D(out, - &structInfo->srcRect, - metaInfo->srcRect, - consumer); - std::string dst_rect_info_var = GenerateStruct_VkRect2D(out, - &structInfo->dstRect, - metaInfo->dstRect, - consumer); + std::string pstd_s_pss_array = "NULL"; + if (structInfo->pStdSPSs != NULL) { + pstd_s_pss_array = "pStdSPSs_" + std::to_string(consumer.GetNextId()); + std::string pstd_s_pss_names; + for (uint32_t idx = 0; idx < structInfo->stdSPSCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pStdSPSs + idx != NULL) { + variable_name = GenerateStruct_StdVideoH264SequenceParameterSet(out, + structInfo->pStdSPSs + idx, + metaInfo->pStdSPSs->GetMetaStructPointer() + idx, + consumer); + } + pstd_s_pss_names += variable_name + ", "; + } + out << "\t\t" << "StdVideoH264SequenceParameterSet " << pstd_s_pss_array << "[] = {" << pstd_s_pss_names << "};" << std::endl; + } + std::string pstd_pp_ss_array = "NULL"; + if (structInfo->pStdPPSs != NULL) { + pstd_pp_ss_array = "pStdPPSs_" + std::to_string(consumer.GetNextId()); + std::string pstd_pp_ss_names; + for (uint32_t idx = 0; idx < structInfo->stdPPSCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pStdPPSs + idx != NULL) { + variable_name = GenerateStruct_StdVideoH264PictureParameterSet(out, + structInfo->pStdPPSs + idx, + metaInfo->pStdPPSs->GetMetaStructPointer() + idx, + consumer); + } + pstd_pp_ss_names += variable_name + ", "; + } + out << "\t\t" << "StdVideoH264PictureParameterSet " << pstd_pp_ss_array << "[] = {" << pstd_pp_ss_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << src_rect_info_var << "," << std::endl; - struct_body << "\t\t\t" << dst_rect_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->persistent << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayPresentInfoKHR"); - out << "\t\t" << "VkDisplayPresentInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->stdSPSCount << "," << std::endl; + struct_body << "\t\t\t" << pstd_s_pss_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stdPPSCount << "," << std::endl; + struct_body << "\t\t\t" << pstd_pp_ss_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264SessionParametersAddInfoKHR"); + out << "\t\t" << "VkVideoEncodeH264SessionParametersAddInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkXlibSurfaceCreateInfoKHR(std::ostream &out, const VkXlibSurfaceCreateInfoKHR* structInfo, Decoded_VkXlibSurfaceCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264SessionParametersCreateInfoKHR(std::ostream &out, const VkVideoEncodeH264SessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoEncodeH264SessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pparameters_add_info_struct = "NULL"; + if (structInfo->pParametersAddInfo != NULL) { + pparameters_add_info_struct = GenerateStruct_VkVideoEncodeH264SessionParametersAddInfoKHR(out, + structInfo->pParametersAddInfo, + metaInfo->pParametersAddInfo->GetMetaStructPointer(), + consumer); + pparameters_add_info_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkXlibSurfaceCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->dpy << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->window << ","; - std::string variable_name = consumer.AddStruct(struct_body, "xlibSurfaceCreateInfoKHR"); - out << "\t\t" << "VkXlibSurfaceCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxStdSPSCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxStdPPSCount << "," << std::endl; + struct_body << "\t\t\t" << pparameters_add_info_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264SessionParametersCreateInfoKHR"); + out << "\t\t" << "VkVideoEncodeH264SessionParametersCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; - out << "\t\t" << "OverrideVkXlibSurfaceCreateInfoKHR(&" << variable_name << ", " << "appdata" << ");" << std::endl; return variable_name; } -std::string GenerateStruct_VkXcbSurfaceCreateInfoKHR(std::ostream &out, const VkXcbSurfaceCreateInfoKHR* structInfo, Decoded_VkXcbSurfaceCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264SessionParametersFeedbackInfoKHR(std::ostream &out, const VkVideoEncodeH264SessionParametersFeedbackInfoKHR* structInfo, Decoded_VkVideoEncodeH264SessionParametersFeedbackInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkXcbSurfaceCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->connection << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->window << ","; - std::string variable_name = consumer.AddStruct(struct_body, "xcbSurfaceCreateInfoKHR"); - out << "\t\t" << "VkXcbSurfaceCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->hasStdSPSOverrides << "," << std::endl; + struct_body << "\t\t\t" << structInfo->hasStdPPSOverrides << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264SessionParametersFeedbackInfoKHR"); + out << "\t\t" << "VkVideoEncodeH264SessionParametersFeedbackInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; - out << "\t\t" << "OverrideVkXcbSurfaceCreateInfoKHR(&" << variable_name << ", " << "appdata" << ");" << std::endl; return variable_name; } -std::string GenerateStruct_VkWaylandSurfaceCreateInfoKHR(std::ostream &out, const VkWaylandSurfaceCreateInfoKHR* structInfo, Decoded_VkWaylandSurfaceCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264SessionParametersGetInfoKHR(std::ostream &out, const VkVideoEncodeH264SessionParametersGetInfoKHR* structInfo, Decoded_VkVideoEncodeH264SessionParametersGetInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkWaylandSurfaceCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->display << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->surface << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "waylandSurfaceCreateInfoKHR"); - out << "\t\t" << "VkWaylandSurfaceCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->writeStdSPS << "," << std::endl; + struct_body << "\t\t\t" << structInfo->writeStdPPS << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stdSPSId << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stdPPSId << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264SessionParametersGetInfoKHR"); + out << "\t\t" << "VkVideoEncodeH264SessionParametersGetInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; - out << "\t\t" << "OverrideVkWaylandSurfaceCreateInfoKHR(&" << variable_name << ", " << "appdata" << ");" << std::endl; return variable_name; } -std::string GenerateStruct_VkAndroidSurfaceCreateInfoKHR(std::ostream &out, const VkAndroidSurfaceCreateInfoKHR* structInfo, Decoded_VkAndroidSurfaceCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeH264CapabilitiesKHR(std::ostream &out, const VkVideoDecodeH264CapabilitiesKHR* structInfo, Decoded_VkVideoDecodeH264CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string field_offset_granularity_info_var = GenerateStruct_VkOffset2D(out, + &structInfo->fieldOffsetGranularity, + metaInfo->fieldOffsetGranularity, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkAndroidSurfaceCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->window << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "androidSurfaceCreateInfoKHR"); - out << "\t\t" << "VkAndroidSurfaceCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "StdVideoH264LevelIdc(" << structInfo->maxLevelIdc << ")" << "," << std::endl; + struct_body << "\t\t\t" << field_offset_granularity_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH264CapabilitiesKHR"); + out << "\t\t" << "VkVideoDecodeH264CapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; - out << "\t\t" << "OverrideVkAndroidSurfaceCreateInfoKHR(&" << variable_name << ", " << "appdata" << ");" << std::endl; return variable_name; } -std::string GenerateStruct_VkWin32SurfaceCreateInfoKHR(std::ostream &out, const VkWin32SurfaceCreateInfoKHR* structInfo, Decoded_VkWin32SurfaceCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeH264DpbSlotInfoKHR(std::ostream &out, const VkVideoDecodeH264DpbSlotInfoKHR* structInfo, Decoded_VkVideoDecodeH264DpbSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pstd_reference_info_struct = "NULL"; + if (structInfo->pStdReferenceInfo != NULL) { + pstd_reference_info_struct = GenerateStruct_StdVideoDecodeH264ReferenceInfo(out, + structInfo->pStdReferenceInfo, + metaInfo->pStdReferenceInfo->GetMetaStructPointer(), + consumer); + pstd_reference_info_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkWin32SurfaceCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->hinstance << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->hwnd << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "win32SurfaceCreateInfoKHR"); - out << "\t\t" << "VkWin32SurfaceCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pstd_reference_info_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH264DpbSlotInfoKHR"); + out << "\t\t" << "VkVideoDecodeH264DpbSlotInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; - out << "\t\t" << "OverrideVkWin32SurfaceCreateInfoKHR(&" << variable_name << ", " << "appdata" << ");" << std::endl; return variable_name; } -std::string GenerateStruct_VkBindVideoSessionMemoryInfoKHR(std::ostream &out, const VkBindVideoSessionMemoryInfoKHR* structInfo, Decoded_VkBindVideoSessionMemoryInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeH264PictureInfoKHR(std::ostream &out, const VkVideoDecodeH264PictureInfoKHR* structInfo, Decoded_VkVideoDecodeH264PictureInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pstd_picture_info_struct = "NULL"; + if (structInfo->pStdPictureInfo != NULL) { + pstd_picture_info_struct = GenerateStruct_StdVideoDecodeH264PictureInfo(out, + structInfo->pStdPictureInfo, + metaInfo->pStdPictureInfo->GetMetaStructPointer(), + consumer); + pstd_picture_info_struct.insert(0, "&"); + } + std::string pslice_offsets_array = "NULL"; + if (structInfo->pSliceOffsets != NULL) { + pslice_offsets_array = "pSliceOffsets_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pslice_offsets_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pSliceOffsets, structInfo->sliceCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryBindIndex << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memorySize << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bindVideoSessionMemoryInfoKHR"); - out << "\t\t" << "VkBindVideoSessionMemoryInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pstd_picture_info_struct << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sliceCount << "," << std::endl; + struct_body << "\t\t\t" << pslice_offsets_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH264PictureInfoKHR"); + out << "\t\t" << "VkVideoDecodeH264PictureInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVideoFormatInfoKHR(std::ostream &out, const VkPhysicalDeviceVideoFormatInfoKHR* structInfo, Decoded_VkPhysicalDeviceVideoFormatInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeH264ProfileInfoKHR(std::ostream &out, const VkVideoDecodeH264ProfileInfoKHR* structInfo, Decoded_VkVideoDecodeH264ProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->imageUsage << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoFormatInfoKHR"); - out << "\t\t" << "VkPhysicalDeviceVideoFormatInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "StdVideoH264ProfileIdc(" << structInfo->stdProfileIdc << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoDecodeH264PictureLayoutFlagBitsKHR(" << structInfo->pictureLayout << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH264ProfileInfoKHR"); + out << "\t\t" << "VkVideoDecodeH264ProfileInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkQueueFamilyQueryResultStatusPropertiesKHR(std::ostream &out, const VkQueueFamilyQueryResultStatusPropertiesKHR* structInfo, Decoded_VkQueueFamilyQueryResultStatusPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeH264SessionParametersAddInfoKHR(std::ostream &out, const VkVideoDecodeH264SessionParametersAddInfoKHR* structInfo, Decoded_VkVideoDecodeH264SessionParametersAddInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pstd_s_pss_array = "NULL"; + if (structInfo->pStdSPSs != NULL) { + pstd_s_pss_array = "pStdSPSs_" + std::to_string(consumer.GetNextId()); + std::string pstd_s_pss_names; + for (uint32_t idx = 0; idx < structInfo->stdSPSCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pStdSPSs + idx != NULL) { + variable_name = GenerateStruct_StdVideoH264SequenceParameterSet(out, + structInfo->pStdSPSs + idx, + metaInfo->pStdSPSs->GetMetaStructPointer() + idx, + consumer); + } + pstd_s_pss_names += variable_name + ", "; + } + out << "\t\t" << "StdVideoH264SequenceParameterSet " << pstd_s_pss_array << "[] = {" << pstd_s_pss_names << "};" << std::endl; + } + std::string pstd_pp_ss_array = "NULL"; + if (structInfo->pStdPPSs != NULL) { + pstd_pp_ss_array = "pStdPPSs_" + std::to_string(consumer.GetNextId()); + std::string pstd_pp_ss_names; + for (uint32_t idx = 0; idx < structInfo->stdPPSCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pStdPPSs + idx != NULL) { + variable_name = GenerateStruct_StdVideoH264PictureParameterSet(out, + structInfo->pStdPPSs + idx, + metaInfo->pStdPPSs->GetMetaStructPointer() + idx, + consumer); + } + pstd_pp_ss_names += variable_name + ", "; + } + out << "\t\t" << "StdVideoH264PictureParameterSet " << pstd_pp_ss_array << "[] = {" << pstd_pp_ss_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queryResultStatusSupport << ","; - std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyQueryResultStatusPropertiesKHR"); - out << "\t\t" << "VkQueueFamilyQueryResultStatusPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->stdSPSCount << "," << std::endl; + struct_body << "\t\t\t" << pstd_s_pss_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stdPPSCount << "," << std::endl; + struct_body << "\t\t\t" << pstd_pp_ss_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH264SessionParametersAddInfoKHR"); + out << "\t\t" << "VkVideoDecodeH264SessionParametersAddInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkQueueFamilyVideoPropertiesKHR(std::ostream &out, const VkQueueFamilyVideoPropertiesKHR* structInfo, Decoded_VkQueueFamilyVideoPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeH264SessionParametersCreateInfoKHR(std::ostream &out, const VkVideoDecodeH264SessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoDecodeH264SessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pparameters_add_info_struct = "NULL"; + if (structInfo->pParametersAddInfo != NULL) { + pparameters_add_info_struct = GenerateStruct_VkVideoDecodeH264SessionParametersAddInfoKHR(out, + structInfo->pParametersAddInfo, + metaInfo->pParametersAddInfo->GetMetaStructPointer(), + consumer); + pparameters_add_info_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoCodecOperationFlagsKHR(" << structInfo->videoCodecOperations << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyVideoPropertiesKHR"); - out << "\t\t" << "VkQueueFamilyVideoPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxStdSPSCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxStdPPSCount << "," << std::endl; + struct_body << "\t\t\t" << pparameters_add_info_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH264SessionParametersCreateInfoKHR"); + out << "\t\t" << "VkVideoDecodeH264SessionParametersCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoBeginCodingInfoKHR(std::ostream &out, const VkVideoBeginCodingInfoKHR* structInfo, Decoded_VkVideoBeginCodingInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExportMemoryWin32HandleInfoKHR(std::ostream &out, const VkExportMemoryWin32HandleInfoKHR* structInfo, Decoded_VkExportMemoryWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string preference_slots_array = "NULL"; - if (structInfo->pReferenceSlots != NULL) { - preference_slots_array = "pReferenceSlots_" + std::to_string(consumer.GetNextId()); - std::string preference_slots_names; - for (uint32_t idx = 0; idx < structInfo->referenceSlotCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pReferenceSlots + idx != NULL) { - variable_name = GenerateStruct_VkVideoReferenceSlotInfoKHR(out, - structInfo->pReferenceSlots + idx, - metaInfo->pReferenceSlots->GetMetaStructPointer() + idx, - consumer); - } - preference_slots_names += variable_name + ", "; - } - out << "\t\t" << "VkVideoReferenceSlotInfoKHR " << preference_slots_array << "[] = {" << preference_slots_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoBeginCodingFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->videoSession) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->videoSessionParameters) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->referenceSlotCount << "," << std::endl; - struct_body << "\t\t\t" << preference_slots_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoBeginCodingInfoKHR"); - out << "\t\t" << "VkVideoBeginCodingInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->pAttributes << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dwAccess << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << util::strings::convert_wstring_to_utf8(structInfo->name) << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "exportMemoryWin32HandleInfoKHR"); + out << "\t\t" << "VkExportMemoryWin32HandleInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoCapabilitiesKHR(std::ostream &out, const VkVideoCapabilitiesKHR* structInfo, Decoded_VkVideoCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImportMemoryWin32HandleInfoKHR(std::ostream &out, const VkImportMemoryWin32HandleInfoKHR* structInfo, Decoded_VkImportMemoryWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string picture_access_granularity_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->pictureAccessGranularity, - metaInfo->pictureAccessGranularity, - consumer); - std::string min_coded_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->minCodedExtent, - metaInfo->minCodedExtent, - consumer); - std::string max_coded_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxCodedExtent, - metaInfo->maxCodedExtent, - consumer); - std::string std_header_version_info_var = GenerateStruct_VkExtensionProperties(out, - &structInfo->stdHeaderVersion, - metaInfo->stdHeaderVersion, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoCapabilityFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minBitstreamBufferOffsetAlignment << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minBitstreamBufferSizeAlignment << "UL" << "," << std::endl; - struct_body << "\t\t\t" << picture_access_granularity_info_var << "," << std::endl; - struct_body << "\t\t\t" << min_coded_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_coded_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDpbSlots << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxActiveReferencePictures << "," << std::endl; - struct_body << "\t\t\t" << std_header_version_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoCapabilitiesKHR"); - out << "\t\t" << "VkVideoCapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->handle << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << util::strings::convert_wstring_to_utf8(structInfo->name) << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "importMemoryWin32HandleInfoKHR"); + out << "\t\t" << "VkImportMemoryWin32HandleInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoCodingControlInfoKHR(std::ostream &out, const VkVideoCodingControlInfoKHR* structInfo, Decoded_VkVideoCodingControlInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryGetWin32HandleInfoKHR(std::ostream &out, const VkMemoryGetWin32HandleInfoKHR* structInfo, Decoded_VkMemoryGetWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoCodingControlFlagsKHR(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoCodingControlInfoKHR"); - out << "\t\t" << "VkVideoCodingControlInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryGetWin32HandleInfoKHR"); + out << "\t\t" << "VkMemoryGetWin32HandleInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEndCodingInfoKHR(std::ostream &out, const VkVideoEndCodingInfoKHR* structInfo, Decoded_VkVideoEndCodingInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryWin32HandlePropertiesKHR(std::ostream &out, const VkMemoryWin32HandlePropertiesKHR* structInfo, Decoded_VkMemoryWin32HandlePropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEndCodingFlagsKHR(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEndCodingInfoKHR"); - out << "\t\t" << "VkVideoEndCodingInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->memoryTypeBits << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryWin32HandlePropertiesKHR"); + out << "\t\t" << "VkMemoryWin32HandlePropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoFormatPropertiesKHR(std::ostream &out, const VkVideoFormatPropertiesKHR* structInfo, Decoded_VkVideoFormatPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImportMemoryFdInfoKHR(std::ostream &out, const VkImportMemoryFdInfoKHR* structInfo, Decoded_VkImportMemoryFdInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string component_mapping_info_var = GenerateStruct_VkComponentMapping(out, - &structInfo->componentMapping, - metaInfo->componentMapping, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << component_mapping_info_var << "," << std::endl; - struct_body << "\t\t\t" << "VkImageCreateFlags(" << structInfo->imageCreateFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageType(" << structInfo->imageType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageTiling(" << structInfo->imageTiling << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->imageUsageFlags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoFormatPropertiesKHR"); - out << "\t\t" << "VkVideoFormatPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fd << ","; + std::string variable_name = consumer.AddStruct(struct_body, "importMemoryFdInfoKHR"); + out << "\t\t" << "VkImportMemoryFdInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoPictureResourceInfoKHR(std::ostream &out, const VkVideoPictureResourceInfoKHR* structInfo, Decoded_VkVideoPictureResourceInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryFdPropertiesKHR(std::ostream &out, const VkMemoryFdPropertiesKHR* structInfo, Decoded_VkMemoryFdPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string coded_offset_info_var = GenerateStruct_VkOffset2D(out, - &structInfo->codedOffset, - metaInfo->codedOffset, - consumer); - std::string coded_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->codedExtent, - metaInfo->codedExtent, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << coded_offset_info_var << "," << std::endl; - struct_body << "\t\t\t" << coded_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->baseArrayLayer << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->imageViewBinding) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoPictureResourceInfoKHR"); - out << "\t\t" << "VkVideoPictureResourceInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->memoryTypeBits << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryFdPropertiesKHR"); + out << "\t\t" << "VkMemoryFdPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoProfileInfoKHR(std::ostream &out, const VkVideoProfileInfoKHR* structInfo, Decoded_VkVideoProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryGetFdInfoKHR(std::ostream &out, const VkMemoryGetFdInfoKHR* structInfo, Decoded_VkMemoryGetFdInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoCodecOperationFlagBitsKHR(" << structInfo->videoCodecOperation << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoChromaSubsamplingFlagsKHR(" << structInfo->chromaSubsampling << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoComponentBitDepthFlagsKHR(" << structInfo->lumaBitDepth << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoComponentBitDepthFlagsKHR(" << structInfo->chromaBitDepth << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoProfileInfoKHR"); - out << "\t\t" << "VkVideoProfileInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryGetFdInfoKHR"); + out << "\t\t" << "VkMemoryGetFdInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoProfileListInfoKHR(std::ostream &out, const VkVideoProfileListInfoKHR* structInfo, Decoded_VkVideoProfileListInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkWin32KeyedMutexAcquireReleaseInfoKHR(std::ostream &out, const VkWin32KeyedMutexAcquireReleaseInfoKHR* structInfo, Decoded_VkWin32KeyedMutexAcquireReleaseInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pprofiles_array = "NULL"; - if (structInfo->pProfiles != NULL) { - pprofiles_array = "pProfiles_" + std::to_string(consumer.GetNextId()); - std::string pprofiles_names; - for (uint32_t idx = 0; idx < structInfo->profileCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pProfiles + idx != NULL) { - variable_name = GenerateStruct_VkVideoProfileInfoKHR(out, - structInfo->pProfiles + idx, - metaInfo->pProfiles->GetMetaStructPointer() + idx, - consumer); - } - pprofiles_names += variable_name + ", "; + std::string pacquire_syncs_array = "NULL"; + if (metaInfo->pAcquireSyncs.GetPointer() != NULL && structInfo->acquireCount > 0) { + pacquire_syncs_array = "pacquire_syncs_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DEVICE_MEMORY)); + std::string pacquire_syncs_values = toStringJoin(metaInfo->pAcquireSyncs.GetPointer(), + metaInfo->pAcquireSyncs.GetPointer() + structInfo->acquireCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->acquireCount == 1) { + pacquire_syncs_array = "&" + pacquire_syncs_values; + } else if (structInfo->acquireCount > 1) { + out << "\t\t" << "VkDeviceMemory " << pacquire_syncs_array << "[] = {" << pacquire_syncs_values << "};" << std::endl; } - out << "\t\t" << "VkVideoProfileInfoKHR " << pprofiles_array << "[] = {" << pprofiles_names << "};" << std::endl; } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->profileCount << "," << std::endl; - struct_body << "\t\t\t" << pprofiles_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoProfileListInfoKHR"); - out << "\t\t" << "VkVideoProfileListInfoKHR " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkVideoReferenceSlotInfoKHR(std::ostream &out, const VkVideoReferenceSlotInfoKHR* structInfo, Decoded_VkVideoReferenceSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ppicture_resource_struct = "NULL"; - if (structInfo->pPictureResource != NULL) { - ppicture_resource_struct = GenerateStruct_VkVideoPictureResourceInfoKHR(out, - structInfo->pPictureResource, - metaInfo->pPictureResource->GetMetaStructPointer(), - consumer); - ppicture_resource_struct.insert(0, "&"); + std::string pacquire_keys_array = "pacquire_keys_array_" + std::to_string(consumer.GetNextId()); + if (structInfo->acquireCount > 0) { + std::string pacquire_keys_values = toStringJoin(structInfo->pAcquireKeys, + structInfo->pAcquireKeys + structInfo->acquireCount, + [](uint64_t current) { return std::to_string(current); }, + ", "); + if (structInfo->acquireCount == 1) { + pacquire_keys_array = "&" + pacquire_keys_values; + } else if (structInfo->acquireCount > 1) { + out << "\t\t" << "uint64_t " << pacquire_keys_array << "[] = {" << pacquire_keys_values << "};" << std::endl; + } + } + std::string pacquire_timeouts_array = "NULL"; + if (structInfo->pAcquireTimeouts != NULL) { + pacquire_timeouts_array = "pAcquireTimeouts_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pacquire_timeouts_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pAcquireTimeouts, structInfo->acquireCount) << ";" << std::endl; + } + std::string prelease_syncs_array = "NULL"; + if (metaInfo->pReleaseSyncs.GetPointer() != NULL && structInfo->releaseCount > 0) { + prelease_syncs_array = "prelease_syncs_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DEVICE_MEMORY)); + std::string prelease_syncs_values = toStringJoin(metaInfo->pReleaseSyncs.GetPointer(), + metaInfo->pReleaseSyncs.GetPointer() + structInfo->releaseCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->releaseCount == 1) { + prelease_syncs_array = "&" + prelease_syncs_values; + } else if (structInfo->releaseCount > 1) { + out << "\t\t" << "VkDeviceMemory " << prelease_syncs_array << "[] = {" << prelease_syncs_values << "};" << std::endl; + } + } + std::string prelease_keys_array = "prelease_keys_array_" + std::to_string(consumer.GetNextId()); + if (structInfo->releaseCount > 0) { + std::string prelease_keys_values = toStringJoin(structInfo->pReleaseKeys, + structInfo->pReleaseKeys + structInfo->releaseCount, + [](uint64_t current) { return std::to_string(current); }, + ", "); + if (structInfo->releaseCount == 1) { + prelease_keys_array = "&" + prelease_keys_values; + } else if (structInfo->releaseCount > 1) { + out << "\t\t" << "uint64_t " << prelease_keys_array << "[] = {" << prelease_keys_values << "};" << std::endl; + } } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->slotIndex << "," << std::endl; - struct_body << "\t\t\t" << ppicture_resource_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoReferenceSlotInfoKHR"); - out << "\t\t" << "VkVideoReferenceSlotInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->acquireCount << "," << std::endl; + struct_body << "\t\t\t" << pacquire_syncs_array << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << pacquire_keys_array << " }" << "," << std::endl; + struct_body << "\t\t\t" << pacquire_timeouts_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->releaseCount << "," << std::endl; + struct_body << "\t\t\t" << prelease_syncs_array << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << prelease_keys_array << " }" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "win32KeyedMutexAcquireReleaseInfoKHR"); + out << "\t\t" << "VkWin32KeyedMutexAcquireReleaseInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoSessionCreateInfoKHR(std::ostream &out, const VkVideoSessionCreateInfoKHR* structInfo, Decoded_VkVideoSessionCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkD3D12FenceSubmitInfoKHR(std::ostream &out, const VkD3D12FenceSubmitInfoKHR* structInfo, Decoded_VkD3D12FenceSubmitInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pvideo_profile_struct = "NULL"; - if (structInfo->pVideoProfile != NULL) { - pvideo_profile_struct = GenerateStruct_VkVideoProfileInfoKHR(out, - structInfo->pVideoProfile, - metaInfo->pVideoProfile->GetMetaStructPointer(), - consumer); - pvideo_profile_struct.insert(0, "&"); + std::string pwait_semaphore_values_array = "pwait_semaphore_values_array_" + std::to_string(consumer.GetNextId()); + if (structInfo->waitSemaphoreValuesCount > 0) { + std::string pwait_semaphore_values_values = toStringJoin(structInfo->pWaitSemaphoreValues, + structInfo->pWaitSemaphoreValues + structInfo->waitSemaphoreValuesCount, + [](uint64_t current) { return std::to_string(current); }, + ", "); + if (structInfo->waitSemaphoreValuesCount == 1) { + pwait_semaphore_values_array = "&" + pwait_semaphore_values_values; + } else if (structInfo->waitSemaphoreValuesCount > 1) { + out << "\t\t" << "uint64_t " << pwait_semaphore_values_array << "[] = {" << pwait_semaphore_values_values << "};" << std::endl; + } } - std::string max_coded_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxCodedExtent, - metaInfo->maxCodedExtent, - consumer); - std::string pstd_header_version_struct = "NULL"; - if (structInfo->pStdHeaderVersion != NULL) { - pstd_header_version_struct = GenerateStruct_VkExtensionProperties(out, - structInfo->pStdHeaderVersion, - metaInfo->pStdHeaderVersion->GetMetaStructPointer(), - consumer); - pstd_header_version_struct.insert(0, "&"); + std::string psignal_semaphore_values_array = "psignal_semaphore_values_array_" + std::to_string(consumer.GetNextId()); + if (structInfo->signalSemaphoreValuesCount > 0) { + std::string psignal_semaphore_values_values = toStringJoin(structInfo->pSignalSemaphoreValues, + structInfo->pSignalSemaphoreValues + structInfo->signalSemaphoreValuesCount, + [](uint64_t current) { return std::to_string(current); }, + ", "); + if (structInfo->signalSemaphoreValuesCount == 1) { + psignal_semaphore_values_array = "&" + psignal_semaphore_values_values; + } else if (structInfo->signalSemaphoreValuesCount > 1) { + out << "\t\t" << "uint64_t " << psignal_semaphore_values_array << "[] = {" << psignal_semaphore_values_values << "};" << std::endl; + } } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queueFamilyIndex << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoSessionCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << pvideo_profile_struct << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->pictureFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << max_coded_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->referencePictureFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDpbSlots << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxActiveReferencePictures << "," << std::endl; - struct_body << "\t\t\t" << pstd_header_version_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoSessionCreateInfoKHR"); - out << "\t\t" << "VkVideoSessionCreateInfoKHR " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkVideoSessionMemoryRequirementsKHR(std::ostream &out, const VkVideoSessionMemoryRequirementsKHR* structInfo, Decoded_VkVideoSessionMemoryRequirementsKHR* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string memory_requirements_info_var = GenerateStruct_VkMemoryRequirements(out, - &structInfo->memoryRequirements, - metaInfo->memoryRequirements, - consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryBindIndex << "," << std::endl; - struct_body << "\t\t\t" << memory_requirements_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoSessionMemoryRequirementsKHR"); - out << "\t\t" << "VkVideoSessionMemoryRequirementsKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->waitSemaphoreValuesCount << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << pwait_semaphore_values_array << " }" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->signalSemaphoreValuesCount << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << psignal_semaphore_values_array << " }" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "d3D12FenceSubmitInfoKHR"); + out << "\t\t" << "VkD3D12FenceSubmitInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoSessionParametersCreateInfoKHR(std::ostream &out, const VkVideoSessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoSessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExportSemaphoreWin32HandleInfoKHR(std::ostream &out, const VkExportSemaphoreWin32HandleInfoKHR* structInfo, Decoded_VkExportSemaphoreWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoSessionParametersCreateFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->videoSessionParametersTemplate) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->videoSession) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoSessionParametersCreateInfoKHR"); - out << "\t\t" << "VkVideoSessionParametersCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->pAttributes << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dwAccess << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << util::strings::convert_wstring_to_utf8(structInfo->name) << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "exportSemaphoreWin32HandleInfoKHR"); + out << "\t\t" << "VkExportSemaphoreWin32HandleInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoSessionParametersUpdateInfoKHR(std::ostream &out, const VkVideoSessionParametersUpdateInfoKHR* structInfo, Decoded_VkVideoSessionParametersUpdateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImportSemaphoreWin32HandleInfoKHR(std::ostream &out, const VkImportSemaphoreWin32HandleInfoKHR* structInfo, Decoded_VkImportSemaphoreWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->updateSequenceCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoSessionParametersUpdateInfoKHR"); - out << "\t\t" << "VkVideoSessionParametersUpdateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; + struct_body << "\t\t\t" << "VkSemaphoreImportFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->handle << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << util::strings::convert_wstring_to_utf8(structInfo->name) << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "importSemaphoreWin32HandleInfoKHR"); + out << "\t\t" << "VkImportSemaphoreWin32HandleInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeCapabilitiesKHR(std::ostream &out, const VkVideoDecodeCapabilitiesKHR* structInfo, Decoded_VkVideoDecodeCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSemaphoreGetWin32HandleInfoKHR(std::ostream &out, const VkSemaphoreGetWin32HandleInfoKHR* structInfo, Decoded_VkSemaphoreGetWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoDecodeCapabilityFlagsKHR(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeCapabilitiesKHR"); - out << "\t\t" << "VkVideoDecodeCapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "semaphoreGetWin32HandleInfoKHR"); + out << "\t\t" << "VkSemaphoreGetWin32HandleInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeInfoKHR(std::ostream &out, const VkVideoDecodeInfoKHR* structInfo, Decoded_VkVideoDecodeInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImportSemaphoreFdInfoKHR(std::ostream &out, const VkImportSemaphoreFdInfoKHR* structInfo, Decoded_VkImportSemaphoreFdInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string dst_picture_resource_info_var = GenerateStruct_VkVideoPictureResourceInfoKHR(out, - &structInfo->dstPictureResource, - metaInfo->dstPictureResource, - consumer); - std::string psetup_reference_slot_struct = "NULL"; - if (structInfo->pSetupReferenceSlot != NULL) { - psetup_reference_slot_struct = GenerateStruct_VkVideoReferenceSlotInfoKHR(out, - structInfo->pSetupReferenceSlot, - metaInfo->pSetupReferenceSlot->GetMetaStructPointer(), - consumer); - psetup_reference_slot_struct.insert(0, "&"); - } - std::string preference_slots_array = "NULL"; - if (structInfo->pReferenceSlots != NULL) { - preference_slots_array = "pReferenceSlots_" + std::to_string(consumer.GetNextId()); - std::string preference_slots_names; - for (uint32_t idx = 0; idx < structInfo->referenceSlotCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pReferenceSlots + idx != NULL) { - variable_name = GenerateStruct_VkVideoReferenceSlotInfoKHR(out, - structInfo->pReferenceSlots + idx, - metaInfo->pReferenceSlots->GetMetaStructPointer() + idx, - consumer); - } - preference_slots_names += variable_name + ", "; - } - out << "\t\t" << "VkVideoReferenceSlotInfoKHR " << preference_slots_array << "[] = {" << preference_slots_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoDecodeFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->srcBuffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcBufferOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcBufferRange << "UL" << "," << std::endl; - struct_body << "\t\t\t" << dst_picture_resource_info_var << "," << std::endl; - struct_body << "\t\t\t" << psetup_reference_slot_struct << "," << std::endl; - struct_body << "\t\t\t" << structInfo->referenceSlotCount << "," << std::endl; - struct_body << "\t\t\t" << preference_slots_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeInfoKHR"); - out << "\t\t" << "VkVideoDecodeInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; + struct_body << "\t\t\t" << "VkSemaphoreImportFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fd << ","; + std::string variable_name = consumer.AddStruct(struct_body, "importSemaphoreFdInfoKHR"); + out << "\t\t" << "VkImportSemaphoreFdInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeUsageInfoKHR(std::ostream &out, const VkVideoDecodeUsageInfoKHR* structInfo, Decoded_VkVideoDecodeUsageInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSemaphoreGetFdInfoKHR(std::ostream &out, const VkSemaphoreGetFdInfoKHR* structInfo, Decoded_VkSemaphoreGetFdInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoDecodeUsageFlagsKHR(" << structInfo->videoUsageHints << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeUsageInfoKHR"); - out << "\t\t" << "VkVideoDecodeUsageInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "semaphoreGetFdInfoKHR"); + out << "\t\t" << "VkSemaphoreGetFdInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264CapabilitiesKHR(std::ostream &out, const VkVideoEncodeH264CapabilitiesKHR* structInfo, Decoded_VkVideoEncodeH264CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPresentRegionKHR(std::ostream &out, const VkPresentRegionKHR* structInfo, Decoded_VkPresentRegionKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeH264CapabilityFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH264LevelIdc(" << structInfo->maxLevelIdc << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSliceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPPictureL0ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxBPictureL0ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxL1ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTemporalLayerCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->expectDyadicTemporalLayerPattern << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minQp << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxQp << "," << std::endl; - struct_body << "\t\t\t" << structInfo->prefersGopRemainingFrames << "," << std::endl; - struct_body << "\t\t\t" << structInfo->requiresGopRemainingFrames << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeH264StdFlagsKHR(" << structInfo->stdSyntaxFlags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264CapabilitiesKHR"); - out << "\t\t" << "VkVideoEncodeH264CapabilitiesKHR " << variable_name << " {" << std::endl; + std::string prectangles_array = "NULL"; + if (structInfo->pRectangles != NULL) { + prectangles_array = "pRectangles_" + std::to_string(consumer.GetNextId()); + std::string prectangles_names; + for (uint32_t idx = 0; idx < structInfo->rectangleCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pRectangles + idx != NULL) { + variable_name = GenerateStruct_VkRectLayerKHR(out, + structInfo->pRectangles + idx, + metaInfo->pRectangles->GetMetaStructPointer() + idx, + consumer); + } + prectangles_names += variable_name + ", "; + } + out << "\t\t" << "VkRectLayerKHR " << prectangles_array << "[] = {" << prectangles_names << "};" << std::endl; + } + struct_body << "\t" << structInfo->rectangleCount << "," << std::endl; + struct_body << "\t\t\t" << prectangles_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "presentRegionKHR"); + out << "\t\t" << "VkPresentRegionKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264DpbSlotInfoKHR(std::ostream &out, const VkVideoEncodeH264DpbSlotInfoKHR* structInfo, Decoded_VkVideoEncodeH264DpbSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPresentRegionsKHR(std::ostream &out, const VkPresentRegionsKHR* structInfo, Decoded_VkPresentRegionsKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_reference_info_struct = "NULL"; - if (structInfo->pStdReferenceInfo != NULL) { - pstd_reference_info_struct = GenerateStruct_StdVideoEncodeH264ReferenceInfo(out, - structInfo->pStdReferenceInfo, - metaInfo->pStdReferenceInfo->GetMetaStructPointer(), - consumer); - pstd_reference_info_struct.insert(0, "&"); + std::string pregions_array = "NULL"; + if (structInfo->pRegions != NULL) { + pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); + std::string pregions_names; + for (uint32_t idx = 0; idx < structInfo->swapchainCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pRegions + idx != NULL) { + variable_name = GenerateStruct_VkPresentRegionKHR(out, + structInfo->pRegions + idx, + metaInfo->pRegions->GetMetaStructPointer() + idx, + consumer); + } + pregions_names += variable_name + ", "; + } + out << "\t\t" << "VkPresentRegionKHR " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_reference_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264DpbSlotInfoKHR"); - out << "\t\t" << "VkVideoEncodeH264DpbSlotInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; + struct_body << "\t\t\t" << pregions_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "presentRegionsKHR"); + out << "\t\t" << "VkPresentRegionsKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264FrameSizeKHR(std::ostream &out, const VkVideoEncodeH264FrameSizeKHR* structInfo, Decoded_VkVideoEncodeH264FrameSizeKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRectLayerKHR(std::ostream &out, const VkRectLayerKHR* structInfo, Decoded_VkRectLayerKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->frameISize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->framePSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->frameBSize << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264FrameSizeKHR"); - out << "\t\t" << "VkVideoEncodeH264FrameSizeKHR " << variable_name << " {" << std::endl; + std::string offset_info_var = GenerateStruct_VkOffset2D(out, + &structInfo->offset, + metaInfo->offset, + consumer); + std::string extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->extent, + metaInfo->extent, + consumer); + struct_body << "\t" << offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->layer << ","; + std::string variable_name = consumer.AddStruct(struct_body, "rectLayerKHR"); + out << "\t\t" << "VkRectLayerKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264GopRemainingFrameInfoKHR(std::ostream &out, const VkVideoEncodeH264GopRemainingFrameInfoKHR* structInfo, Decoded_VkVideoEncodeH264GopRemainingFrameInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSharedPresentSurfaceCapabilitiesKHR(std::ostream &out, const VkSharedPresentSurfaceCapabilitiesKHR* structInfo, Decoded_VkSharedPresentSurfaceCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useGopRemainingFrames << "," << std::endl; - struct_body << "\t\t\t" << structInfo->gopRemainingI << "," << std::endl; - struct_body << "\t\t\t" << structInfo->gopRemainingP << "," << std::endl; - struct_body << "\t\t\t" << structInfo->gopRemainingB << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264GopRemainingFrameInfoKHR"); - out << "\t\t" << "VkVideoEncodeH264GopRemainingFrameInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->sharedPresentSupportedUsageFlags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "sharedPresentSurfaceCapabilitiesKHR"); + out << "\t\t" << "VkSharedPresentSurfaceCapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264NaluSliceInfoKHR(std::ostream &out, const VkVideoEncodeH264NaluSliceInfoKHR* structInfo, Decoded_VkVideoEncodeH264NaluSliceInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExportFenceWin32HandleInfoKHR(std::ostream &out, const VkExportFenceWin32HandleInfoKHR* structInfo, Decoded_VkExportFenceWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_slice_header_struct = "NULL"; - if (structInfo->pStdSliceHeader != NULL) { - pstd_slice_header_struct = GenerateStruct_StdVideoEncodeH264SliceHeader(out, - structInfo->pStdSliceHeader, - metaInfo->pStdSliceHeader->GetMetaStructPointer(), - consumer); - pstd_slice_header_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->constantQp << "," << std::endl; - struct_body << "\t\t\t" << pstd_slice_header_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264NaluSliceInfoKHR"); - out << "\t\t" << "VkVideoEncodeH264NaluSliceInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->pAttributes << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dwAccess << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << util::strings::convert_wstring_to_utf8(structInfo->name) << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "exportFenceWin32HandleInfoKHR"); + out << "\t\t" << "VkExportFenceWin32HandleInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264PictureInfoKHR(std::ostream &out, const VkVideoEncodeH264PictureInfoKHR* structInfo, Decoded_VkVideoEncodeH264PictureInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkFenceGetWin32HandleInfoKHR(std::ostream &out, const VkFenceGetWin32HandleInfoKHR* structInfo, Decoded_VkFenceGetWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pnalu_slice_entries_array = "NULL"; - if (structInfo->pNaluSliceEntries != NULL) { - pnalu_slice_entries_array = "pNaluSliceEntries_" + std::to_string(consumer.GetNextId()); - std::string pnalu_slice_entries_names; - for (uint32_t idx = 0; idx < structInfo->naluSliceEntryCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pNaluSliceEntries + idx != NULL) { - variable_name = GenerateStruct_VkVideoEncodeH264NaluSliceInfoKHR(out, - structInfo->pNaluSliceEntries + idx, - metaInfo->pNaluSliceEntries->GetMetaStructPointer() + idx, - consumer); - } - pnalu_slice_entries_names += variable_name + ", "; - } - out << "\t\t" << "VkVideoEncodeH264NaluSliceInfoKHR " << pnalu_slice_entries_array << "[] = {" << pnalu_slice_entries_names << "};" << std::endl; - } - std::string pstd_picture_info_struct = "NULL"; - if (structInfo->pStdPictureInfo != NULL) { - pstd_picture_info_struct = GenerateStruct_StdVideoEncodeH264PictureInfo(out, - structInfo->pStdPictureInfo, - metaInfo->pStdPictureInfo->GetMetaStructPointer(), - consumer); - pstd_picture_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->naluSliceEntryCount << "," << std::endl; - struct_body << "\t\t\t" << pnalu_slice_entries_array << "," << std::endl; - struct_body << "\t\t\t" << pstd_picture_info_struct << "," << std::endl; - struct_body << "\t\t\t" << structInfo->generatePrefixNalu << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264PictureInfoKHR"); - out << "\t\t" << "VkVideoEncodeH264PictureInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->fence) << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "fenceGetWin32HandleInfoKHR"); + out << "\t\t" << "VkFenceGetWin32HandleInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264ProfileInfoKHR(std::ostream &out, const VkVideoEncodeH264ProfileInfoKHR* structInfo, Decoded_VkVideoEncodeH264ProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImportFenceWin32HandleInfoKHR(std::ostream &out, const VkImportFenceWin32HandleInfoKHR* structInfo, Decoded_VkImportFenceWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH264ProfileIdc(" << structInfo->stdProfileIdc << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264ProfileInfoKHR"); - out << "\t\t" << "VkVideoEncodeH264ProfileInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->fence) << "," << std::endl; + struct_body << "\t\t\t" << "VkFenceImportFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->handle << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << util::strings::convert_wstring_to_utf8(structInfo->name) << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "importFenceWin32HandleInfoKHR"); + out << "\t\t" << "VkImportFenceWin32HandleInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264QpKHR(std::ostream &out, const VkVideoEncodeH264QpKHR* structInfo, Decoded_VkVideoEncodeH264QpKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkFenceGetFdInfoKHR(std::ostream &out, const VkFenceGetFdInfoKHR* structInfo, Decoded_VkFenceGetFdInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->qpI << "," << std::endl; - struct_body << "\t\t\t" << structInfo->qpP << "," << std::endl; - struct_body << "\t\t\t" << structInfo->qpB << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264QpKHR"); - out << "\t\t" << "VkVideoEncodeH264QpKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->fence) << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "fenceGetFdInfoKHR"); + out << "\t\t" << "VkFenceGetFdInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264QualityLevelPropertiesKHR(std::ostream &out, const VkVideoEncodeH264QualityLevelPropertiesKHR* structInfo, Decoded_VkVideoEncodeH264QualityLevelPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImportFenceFdInfoKHR(std::ostream &out, const VkImportFenceFdInfoKHR* structInfo, Decoded_VkImportFenceFdInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string preferred_constant_qp_info_var = GenerateStruct_VkVideoEncodeH264QpKHR(out, - &structInfo->preferredConstantQp, - metaInfo->preferredConstantQp, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeH264RateControlFlagsKHR(" << structInfo->preferredRateControlFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredGopFrameCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredIdrPeriod << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredConsecutiveBFrameCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredTemporalLayerCount << "," << std::endl; - struct_body << "\t\t\t" << preferred_constant_qp_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredMaxL0ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredMaxL1ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredStdEntropyCodingModeFlag << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264QualityLevelPropertiesKHR"); - out << "\t\t" << "VkVideoEncodeH264QualityLevelPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->fence) << "," << std::endl; + struct_body << "\t\t\t" << "VkFenceImportFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fd << ","; + std::string variable_name = consumer.AddStruct(struct_body, "importFenceFdInfoKHR"); + out << "\t\t" << "VkImportFenceFdInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264RateControlInfoKHR(std::ostream &out, const VkVideoEncodeH264RateControlInfoKHR* structInfo, Decoded_VkVideoEncodeH264RateControlInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAcquireProfilingLockInfoKHR(std::ostream &out, const VkAcquireProfilingLockInfoKHR* structInfo, Decoded_VkAcquireProfilingLockInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeH264RateControlFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->gopFrameCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->idrPeriod << "," << std::endl; - struct_body << "\t\t\t" << structInfo->consecutiveBFrameCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->temporalLayerCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264RateControlInfoKHR"); - out << "\t\t" << "VkVideoEncodeH264RateControlInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkAcquireProfilingLockFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->timeout << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "acquireProfilingLockInfoKHR"); + out << "\t\t" << "VkAcquireProfilingLockInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264RateControlLayerInfoKHR(std::ostream &out, const VkVideoEncodeH264RateControlLayerInfoKHR* structInfo, Decoded_VkVideoEncodeH264RateControlLayerInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPerformanceCounterDescriptionKHR(std::ostream &out, const VkPerformanceCounterDescriptionKHR* structInfo, Decoded_VkPerformanceCounterDescriptionKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string min_qp_info_var = GenerateStruct_VkVideoEncodeH264QpKHR(out, - &structInfo->minQp, - metaInfo->minQp, - consumer); - std::string max_qp_info_var = GenerateStruct_VkVideoEncodeH264QpKHR(out, - &structInfo->maxQp, - metaInfo->maxQp, - consumer); - std::string max_frame_size_info_var = GenerateStruct_VkVideoEncodeH264FrameSizeKHR(out, - &structInfo->maxFrameSize, - metaInfo->maxFrameSize, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useMinQp << "," << std::endl; - struct_body << "\t\t\t" << min_qp_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useMaxQp << "," << std::endl; - struct_body << "\t\t\t" << max_qp_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useMaxFrameSize << "," << std::endl; - struct_body << "\t\t\t" << max_frame_size_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264RateControlLayerInfoKHR"); - out << "\t\t" << "VkVideoEncodeH264RateControlLayerInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPerformanceCounterDescriptionFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->name) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->category) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "performanceCounterDescriptionKHR"); + out << "\t\t" << "VkPerformanceCounterDescriptionKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264SessionCreateInfoKHR(std::ostream &out, const VkVideoEncodeH264SessionCreateInfoKHR* structInfo, Decoded_VkVideoEncodeH264SessionCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPerformanceCounterKHR(std::ostream &out, const VkPerformanceCounterKHR* structInfo, Decoded_VkPerformanceCounterKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useMaxLevelIdc << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH264LevelIdc(" << structInfo->maxLevelIdc << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264SessionCreateInfoKHR"); - out << "\t\t" << "VkVideoEncodeH264SessionCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPerformanceCounterUnitKHR(" << structInfo->unit << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPerformanceCounterScopeKHR(" << structInfo->scope << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPerformanceCounterStorageKHR(" << structInfo->storage << ")" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->uuid[0]), VK_UUID_SIZE) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "performanceCounterKHR"); + out << "\t\t" << "VkPerformanceCounterKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264SessionParametersAddInfoKHR(std::ostream &out, const VkVideoEncodeH264SessionParametersAddInfoKHR* structInfo, Decoded_VkVideoEncodeH264SessionParametersAddInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPerformanceQuerySubmitInfoKHR(std::ostream &out, const VkPerformanceQuerySubmitInfoKHR* structInfo, Decoded_VkPerformanceQuerySubmitInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_s_pss_array = "NULL"; - if (structInfo->pStdSPSs != NULL) { - pstd_s_pss_array = "pStdSPSs_" + std::to_string(consumer.GetNextId()); - std::string pstd_s_pss_names; - for (uint32_t idx = 0; idx < structInfo->stdSPSCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStdSPSs + idx != NULL) { - variable_name = GenerateStruct_StdVideoH264SequenceParameterSet(out, - structInfo->pStdSPSs + idx, - metaInfo->pStdSPSs->GetMetaStructPointer() + idx, - consumer); - } - pstd_s_pss_names += variable_name + ", "; - } - out << "\t\t" << "StdVideoH264SequenceParameterSet " << pstd_s_pss_array << "[] = {" << pstd_s_pss_names << "};" << std::endl; - } - std::string pstd_pp_ss_array = "NULL"; - if (structInfo->pStdPPSs != NULL) { - pstd_pp_ss_array = "pStdPPSs_" + std::to_string(consumer.GetNextId()); - std::string pstd_pp_ss_names; - for (uint32_t idx = 0; idx < structInfo->stdPPSCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStdPPSs + idx != NULL) { - variable_name = GenerateStruct_StdVideoH264PictureParameterSet(out, - structInfo->pStdPPSs + idx, - metaInfo->pStdPPSs->GetMetaStructPointer() + idx, - consumer); - } - pstd_pp_ss_names += variable_name + ", "; - } - out << "\t\t" << "StdVideoH264PictureParameterSet " << pstd_pp_ss_array << "[] = {" << pstd_pp_ss_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdSPSCount << "," << std::endl; - struct_body << "\t\t\t" << pstd_s_pss_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdPPSCount << "," << std::endl; - struct_body << "\t\t\t" << pstd_pp_ss_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264SessionParametersAddInfoKHR"); - out << "\t\t" << "VkVideoEncodeH264SessionParametersAddInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->counterPassIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "performanceQuerySubmitInfoKHR"); + out << "\t\t" << "VkPerformanceQuerySubmitInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264SessionParametersCreateInfoKHR(std::ostream &out, const VkVideoEncodeH264SessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoEncodeH264SessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePerformanceQueryFeaturesKHR(std::ostream &out, const VkPhysicalDevicePerformanceQueryFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePerformanceQueryFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pparameters_add_info_struct = "NULL"; - if (structInfo->pParametersAddInfo != NULL) { - pparameters_add_info_struct = GenerateStruct_VkVideoEncodeH264SessionParametersAddInfoKHR(out, - structInfo->pParametersAddInfo, - metaInfo->pParametersAddInfo->GetMetaStructPointer(), - consumer); - pparameters_add_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxStdSPSCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxStdPPSCount << "," << std::endl; - struct_body << "\t\t\t" << pparameters_add_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264SessionParametersCreateInfoKHR"); - out << "\t\t" << "VkVideoEncodeH264SessionParametersCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->performanceCounterQueryPools << "," << std::endl; + struct_body << "\t\t\t" << structInfo->performanceCounterMultipleQueryPools << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePerformanceQueryFeaturesKHR"); + out << "\t\t" << "VkPhysicalDevicePerformanceQueryFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264SessionParametersFeedbackInfoKHR(std::ostream &out, const VkVideoEncodeH264SessionParametersFeedbackInfoKHR* structInfo, Decoded_VkVideoEncodeH264SessionParametersFeedbackInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePerformanceQueryPropertiesKHR(std::ostream &out, const VkPhysicalDevicePerformanceQueryPropertiesKHR* structInfo, Decoded_VkPhysicalDevicePerformanceQueryPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hasStdSPSOverrides << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hasStdPPSOverrides << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264SessionParametersFeedbackInfoKHR"); - out << "\t\t" << "VkVideoEncodeH264SessionParametersFeedbackInfoKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->allowCommandBufferQueryCopies << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePerformanceQueryPropertiesKHR"); + out << "\t\t" << "VkPhysicalDevicePerformanceQueryPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264SessionParametersGetInfoKHR(std::ostream &out, const VkVideoEncodeH264SessionParametersGetInfoKHR* structInfo, Decoded_VkVideoEncodeH264SessionParametersGetInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkQueryPoolPerformanceCreateInfoKHR(std::ostream &out, const VkQueryPoolPerformanceCreateInfoKHR* structInfo, Decoded_VkQueryPoolPerformanceCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pcounter_indices_array = "NULL"; + if (structInfo->pCounterIndices != NULL) { + pcounter_indices_array = "pCounterIndices_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pcounter_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pCounterIndices, structInfo->counterIndexCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->writeStdSPS << "," << std::endl; - struct_body << "\t\t\t" << structInfo->writeStdPPS << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdSPSId << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdPPSId << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264SessionParametersGetInfoKHR"); - out << "\t\t" << "VkVideoEncodeH264SessionParametersGetInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->queueFamilyIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->counterIndexCount << "," << std::endl; + struct_body << "\t\t\t" << pcounter_indices_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "queryPoolPerformanceCreateInfoKHR"); + out << "\t\t" << "VkQueryPoolPerformanceCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265CapabilitiesKHR(std::ostream &out, const VkVideoEncodeH265CapabilitiesKHR* structInfo, Decoded_VkVideoEncodeH265CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceSurfaceInfo2KHR(std::ostream &out, const VkPhysicalDeviceSurfaceInfo2KHR* structInfo, Decoded_VkPhysicalDeviceSurfaceInfo2KHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string max_tiles_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxTiles, - metaInfo->maxTiles, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeH265CapabilityFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH265LevelIdc(" << structInfo->maxLevelIdc << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSliceSegmentCount << "," << std::endl; - struct_body << "\t\t\t" << max_tiles_info_var << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeH265CtbSizeFlagsKHR(" << structInfo->ctbSizes << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeH265TransformBlockSizeFlagsKHR(" << structInfo->transformBlockSizes << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxPPictureL0ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxBPictureL0ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxL1ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSubLayerCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->expectDyadicTemporalSubLayerPattern << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minQp << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxQp << "," << std::endl; - struct_body << "\t\t\t" << structInfo->prefersGopRemainingFrames << "," << std::endl; - struct_body << "\t\t\t" << structInfo->requiresGopRemainingFrames << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeH265StdFlagsKHR(" << structInfo->stdSyntaxFlags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265CapabilitiesKHR"); - out << "\t\t" << "VkVideoEncodeH265CapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->surface) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSurfaceInfo2KHR"); + out << "\t\t" << "VkPhysicalDeviceSurfaceInfo2KHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265DpbSlotInfoKHR(std::ostream &out, const VkVideoEncodeH265DpbSlotInfoKHR* structInfo, Decoded_VkVideoEncodeH265DpbSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfaceCapabilities2KHR(std::ostream &out, const VkSurfaceCapabilities2KHR* structInfo, Decoded_VkSurfaceCapabilities2KHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_reference_info_struct = "NULL"; - if (structInfo->pStdReferenceInfo != NULL) { - pstd_reference_info_struct = GenerateStruct_StdVideoEncodeH265ReferenceInfo(out, - structInfo->pStdReferenceInfo, - metaInfo->pStdReferenceInfo->GetMetaStructPointer(), - consumer); - pstd_reference_info_struct.insert(0, "&"); - } + std::string surface_capabilities_info_var = GenerateStruct_VkSurfaceCapabilitiesKHR(out, + &structInfo->surfaceCapabilities, + metaInfo->surfaceCapabilities, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_reference_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265DpbSlotInfoKHR"); - out << "\t\t" << "VkVideoEncodeH265DpbSlotInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << surface_capabilities_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfaceCapabilities2KHR"); + out << "\t\t" << "VkSurfaceCapabilities2KHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265FrameSizeKHR(std::ostream &out, const VkVideoEncodeH265FrameSizeKHR* structInfo, Decoded_VkVideoEncodeH265FrameSizeKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfaceFormat2KHR(std::ostream &out, const VkSurfaceFormat2KHR* structInfo, Decoded_VkSurfaceFormat2KHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->frameISize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->framePSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->frameBSize << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265FrameSizeKHR"); - out << "\t\t" << "VkVideoEncodeH265FrameSizeKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string surface_format_info_var = GenerateStruct_VkSurfaceFormatKHR(out, + &structInfo->surfaceFormat, + metaInfo->surfaceFormat, + consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << surface_format_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfaceFormat2KHR"); + out << "\t\t" << "VkSurfaceFormat2KHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265GopRemainingFrameInfoKHR(std::ostream &out, const VkVideoEncodeH265GopRemainingFrameInfoKHR* structInfo, Decoded_VkVideoEncodeH265GopRemainingFrameInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDisplayModeProperties2KHR(std::ostream &out, const VkDisplayModeProperties2KHR* structInfo, Decoded_VkDisplayModeProperties2KHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string display_mode_properties_info_var = GenerateStruct_VkDisplayModePropertiesKHR(out, + &structInfo->displayModeProperties, + metaInfo->displayModeProperties, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useGopRemainingFrames << "," << std::endl; - struct_body << "\t\t\t" << structInfo->gopRemainingI << "," << std::endl; - struct_body << "\t\t\t" << structInfo->gopRemainingP << "," << std::endl; - struct_body << "\t\t\t" << structInfo->gopRemainingB << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265GopRemainingFrameInfoKHR"); - out << "\t\t" << "VkVideoEncodeH265GopRemainingFrameInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << display_mode_properties_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayModeProperties2KHR"); + out << "\t\t" << "VkDisplayModeProperties2KHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265NaluSliceSegmentInfoKHR(std::ostream &out, const VkVideoEncodeH265NaluSliceSegmentInfoKHR* structInfo, Decoded_VkVideoEncodeH265NaluSliceSegmentInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDisplayPlaneCapabilities2KHR(std::ostream &out, const VkDisplayPlaneCapabilities2KHR* structInfo, Decoded_VkDisplayPlaneCapabilities2KHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_slice_segment_header_struct = "NULL"; - if (structInfo->pStdSliceSegmentHeader != NULL) { - pstd_slice_segment_header_struct = GenerateStruct_StdVideoEncodeH265SliceSegmentHeader(out, - structInfo->pStdSliceSegmentHeader, - metaInfo->pStdSliceSegmentHeader->GetMetaStructPointer(), - consumer); - pstd_slice_segment_header_struct.insert(0, "&"); - } + std::string capabilities_info_var = GenerateStruct_VkDisplayPlaneCapabilitiesKHR(out, + &structInfo->capabilities, + metaInfo->capabilities, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->constantQp << "," << std::endl; - struct_body << "\t\t\t" << pstd_slice_segment_header_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265NaluSliceSegmentInfoKHR"); - out << "\t\t" << "VkVideoEncodeH265NaluSliceSegmentInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << capabilities_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayPlaneCapabilities2KHR"); + out << "\t\t" << "VkDisplayPlaneCapabilities2KHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265PictureInfoKHR(std::ostream &out, const VkVideoEncodeH265PictureInfoKHR* structInfo, Decoded_VkVideoEncodeH265PictureInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDisplayPlaneInfo2KHR(std::ostream &out, const VkDisplayPlaneInfo2KHR* structInfo, Decoded_VkDisplayPlaneInfo2KHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pnalu_slice_segment_entries_array = "NULL"; - if (structInfo->pNaluSliceSegmentEntries != NULL) { - pnalu_slice_segment_entries_array = "pNaluSliceSegmentEntries_" + std::to_string(consumer.GetNextId()); - std::string pnalu_slice_segment_entries_names; - for (uint32_t idx = 0; idx < structInfo->naluSliceSegmentEntryCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pNaluSliceSegmentEntries + idx != NULL) { - variable_name = GenerateStruct_VkVideoEncodeH265NaluSliceSegmentInfoKHR(out, - structInfo->pNaluSliceSegmentEntries + idx, - metaInfo->pNaluSliceSegmentEntries->GetMetaStructPointer() + idx, - consumer); - } - pnalu_slice_segment_entries_names += variable_name + ", "; - } - out << "\t\t" << "VkVideoEncodeH265NaluSliceSegmentInfoKHR " << pnalu_slice_segment_entries_array << "[] = {" << pnalu_slice_segment_entries_names << "};" << std::endl; - } - std::string pstd_picture_info_struct = "NULL"; - if (structInfo->pStdPictureInfo != NULL) { - pstd_picture_info_struct = GenerateStruct_StdVideoEncodeH265PictureInfo(out, - structInfo->pStdPictureInfo, - metaInfo->pStdPictureInfo->GetMetaStructPointer(), - consumer); - pstd_picture_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->naluSliceSegmentEntryCount << "," << std::endl; - struct_body << "\t\t\t" << pnalu_slice_segment_entries_array << "," << std::endl; - struct_body << "\t\t\t" << pstd_picture_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265PictureInfoKHR"); - out << "\t\t" << "VkVideoEncodeH265PictureInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->mode) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->planeIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayPlaneInfo2KHR"); + out << "\t\t" << "VkDisplayPlaneInfo2KHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265ProfileInfoKHR(std::ostream &out, const VkVideoEncodeH265ProfileInfoKHR* structInfo, Decoded_VkVideoEncodeH265ProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDisplayPlaneProperties2KHR(std::ostream &out, const VkDisplayPlaneProperties2KHR* structInfo, Decoded_VkDisplayPlaneProperties2KHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string display_plane_properties_info_var = GenerateStruct_VkDisplayPlanePropertiesKHR(out, + &structInfo->displayPlaneProperties, + metaInfo->displayPlaneProperties, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH265ProfileIdc(" << structInfo->stdProfileIdc << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265ProfileInfoKHR"); - out << "\t\t" << "VkVideoEncodeH265ProfileInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << display_plane_properties_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayPlaneProperties2KHR"); + out << "\t\t" << "VkDisplayPlaneProperties2KHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265QpKHR(std::ostream &out, const VkVideoEncodeH265QpKHR* structInfo, Decoded_VkVideoEncodeH265QpKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDisplayProperties2KHR(std::ostream &out, const VkDisplayProperties2KHR* structInfo, Decoded_VkDisplayProperties2KHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->qpI << "," << std::endl; - struct_body << "\t\t\t" << structInfo->qpP << "," << std::endl; - struct_body << "\t\t\t" << structInfo->qpB << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265QpKHR"); - out << "\t\t" << "VkVideoEncodeH265QpKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string display_properties_info_var = GenerateStruct_VkDisplayPropertiesKHR(out, + &structInfo->displayProperties, + metaInfo->displayProperties, + consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << display_properties_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayProperties2KHR"); + out << "\t\t" << "VkDisplayProperties2KHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265QualityLevelPropertiesKHR(std::ostream &out, const VkVideoEncodeH265QualityLevelPropertiesKHR* structInfo, Decoded_VkVideoEncodeH265QualityLevelPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderBfloat16FeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderBfloat16FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderBfloat16FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string preferred_constant_qp_info_var = GenerateStruct_VkVideoEncodeH265QpKHR(out, - &structInfo->preferredConstantQp, - metaInfo->preferredConstantQp, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeH265RateControlFlagsKHR(" << structInfo->preferredRateControlFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredGopFrameCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredIdrPeriod << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredConsecutiveBFrameCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredSubLayerCount << "," << std::endl; - struct_body << "\t\t\t" << preferred_constant_qp_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredMaxL0ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredMaxL1ReferenceCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265QualityLevelPropertiesKHR"); - out << "\t\t" << "VkVideoEncodeH265QualityLevelPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBFloat16Type << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBFloat16DotProduct << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBFloat16CooperativeMatrix << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderBfloat16FeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceShaderBfloat16FeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265RateControlInfoKHR(std::ostream &out, const VkVideoEncodeH265RateControlInfoKHR* structInfo, Decoded_VkVideoEncodeH265RateControlInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePortabilitySubsetFeaturesKHR(std::ostream &out, const VkPhysicalDevicePortabilitySubsetFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePortabilitySubsetFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeH265RateControlFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->gopFrameCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->idrPeriod << "," << std::endl; - struct_body << "\t\t\t" << structInfo->consecutiveBFrameCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subLayerCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265RateControlInfoKHR"); - out << "\t\t" << "VkVideoEncodeH265RateControlInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->constantAlphaColorBlendFactors << "," << std::endl; + struct_body << "\t\t\t" << structInfo->events << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imageViewFormatReinterpretation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imageViewFormatSwizzle << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imageView2DOn3DImage << "," << std::endl; + struct_body << "\t\t\t" << structInfo->multisampleArrayImage << "," << std::endl; + struct_body << "\t\t\t" << structInfo->mutableComparisonSamplers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pointPolygons << "," << std::endl; + struct_body << "\t\t\t" << structInfo->samplerMipLodBias << "," << std::endl; + struct_body << "\t\t\t" << structInfo->separateStencilMaskRef << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSampleRateInterpolationFunctions << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tessellationIsolines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tessellationPointMode << "," << std::endl; + struct_body << "\t\t\t" << structInfo->triangleFans << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexAttributeAccessBeyondStride << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePortabilitySubsetFeaturesKHR"); + out << "\t\t" << "VkPhysicalDevicePortabilitySubsetFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265RateControlLayerInfoKHR(std::ostream &out, const VkVideoEncodeH265RateControlLayerInfoKHR* structInfo, Decoded_VkVideoEncodeH265RateControlLayerInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePortabilitySubsetPropertiesKHR(std::ostream &out, const VkPhysicalDevicePortabilitySubsetPropertiesKHR* structInfo, Decoded_VkPhysicalDevicePortabilitySubsetPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string min_qp_info_var = GenerateStruct_VkVideoEncodeH265QpKHR(out, - &structInfo->minQp, - metaInfo->minQp, - consumer); - std::string max_qp_info_var = GenerateStruct_VkVideoEncodeH265QpKHR(out, - &structInfo->maxQp, - metaInfo->maxQp, - consumer); - std::string max_frame_size_info_var = GenerateStruct_VkVideoEncodeH265FrameSizeKHR(out, - &structInfo->maxFrameSize, - metaInfo->maxFrameSize, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useMinQp << "," << std::endl; - struct_body << "\t\t\t" << min_qp_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useMaxQp << "," << std::endl; - struct_body << "\t\t\t" << max_qp_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useMaxFrameSize << "," << std::endl; - struct_body << "\t\t\t" << max_frame_size_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265RateControlLayerInfoKHR"); - out << "\t\t" << "VkVideoEncodeH265RateControlLayerInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->minVertexInputBindingStrideAlignment << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePortabilitySubsetPropertiesKHR"); + out << "\t\t" << "VkPhysicalDevicePortabilitySubsetPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265SessionCreateInfoKHR(std::ostream &out, const VkVideoEncodeH265SessionCreateInfoKHR* structInfo, Decoded_VkVideoEncodeH265SessionCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderClockFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderClockFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderClockFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useMaxLevelIdc << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH265LevelIdc(" << structInfo->maxLevelIdc << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265SessionCreateInfoKHR"); - out << "\t\t" << "VkVideoEncodeH265SessionCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSubgroupClock << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderDeviceClock << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderClockFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceShaderClockFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265SessionParametersAddInfoKHR(std::ostream &out, const VkVideoEncodeH265SessionParametersAddInfoKHR* structInfo, Decoded_VkVideoEncodeH265SessionParametersAddInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkFragmentShadingRateAttachmentInfoKHR(std::ostream &out, const VkFragmentShadingRateAttachmentInfoKHR* structInfo, Decoded_VkFragmentShadingRateAttachmentInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_v_pss_array = "NULL"; - if (structInfo->pStdVPSs != NULL) { - pstd_v_pss_array = "pStdVPSs_" + std::to_string(consumer.GetNextId()); - std::string pstd_v_pss_names; - for (uint32_t idx = 0; idx < structInfo->stdVPSCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStdVPSs + idx != NULL) { - variable_name = GenerateStruct_StdVideoH265VideoParameterSet(out, - structInfo->pStdVPSs + idx, - metaInfo->pStdVPSs->GetMetaStructPointer() + idx, - consumer); - } - pstd_v_pss_names += variable_name + ", "; - } - out << "\t\t" << "StdVideoH265VideoParameterSet " << pstd_v_pss_array << "[] = {" << pstd_v_pss_names << "};" << std::endl; - } - std::string pstd_s_pss_array = "NULL"; - if (structInfo->pStdSPSs != NULL) { - pstd_s_pss_array = "pStdSPSs_" + std::to_string(consumer.GetNextId()); - std::string pstd_s_pss_names; - for (uint32_t idx = 0; idx < structInfo->stdSPSCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStdSPSs + idx != NULL) { - variable_name = GenerateStruct_StdVideoH265SequenceParameterSet(out, - structInfo->pStdSPSs + idx, - metaInfo->pStdSPSs->GetMetaStructPointer() + idx, - consumer); - } - pstd_s_pss_names += variable_name + ", "; - } - out << "\t\t" << "StdVideoH265SequenceParameterSet " << pstd_s_pss_array << "[] = {" << pstd_s_pss_names << "};" << std::endl; - } - std::string pstd_pp_ss_array = "NULL"; - if (structInfo->pStdPPSs != NULL) { - pstd_pp_ss_array = "pStdPPSs_" + std::to_string(consumer.GetNextId()); - std::string pstd_pp_ss_names; - for (uint32_t idx = 0; idx < structInfo->stdPPSCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStdPPSs + idx != NULL) { - variable_name = GenerateStruct_StdVideoH265PictureParameterSet(out, - structInfo->pStdPPSs + idx, - metaInfo->pStdPPSs->GetMetaStructPointer() + idx, - consumer); - } - pstd_pp_ss_names += variable_name + ", "; - } - out << "\t\t" << "StdVideoH265PictureParameterSet " << pstd_pp_ss_array << "[] = {" << pstd_pp_ss_names << "};" << std::endl; + std::string pfragment_shading_rate_attachment_struct = "NULL"; + if (structInfo->pFragmentShadingRateAttachment != NULL) { + pfragment_shading_rate_attachment_struct = GenerateStruct_VkAttachmentReference2(out, + structInfo->pFragmentShadingRateAttachment, + metaInfo->pFragmentShadingRateAttachment->GetMetaStructPointer(), + consumer); + pfragment_shading_rate_attachment_struct.insert(0, "&"); } + std::string shading_rate_attachment_texel_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->shadingRateAttachmentTexelSize, + metaInfo->shadingRateAttachmentTexelSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdVPSCount << "," << std::endl; - struct_body << "\t\t\t" << pstd_v_pss_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdSPSCount << "," << std::endl; - struct_body << "\t\t\t" << pstd_s_pss_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdPPSCount << "," << std::endl; - struct_body << "\t\t\t" << pstd_pp_ss_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265SessionParametersAddInfoKHR"); - out << "\t\t" << "VkVideoEncodeH265SessionParametersAddInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pfragment_shading_rate_attachment_struct << "," << std::endl; + struct_body << "\t\t\t" << shading_rate_attachment_texel_size_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "fragmentShadingRateAttachmentInfoKHR"); + out << "\t\t" << "VkFragmentShadingRateAttachmentInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265SessionParametersCreateInfoKHR(std::ostream &out, const VkVideoEncodeH265SessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoEncodeH265SessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(std::ostream &out, const VkPhysicalDeviceFragmentShadingRateFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceFragmentShadingRateFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pparameters_add_info_struct = "NULL"; - if (structInfo->pParametersAddInfo != NULL) { - pparameters_add_info_struct = GenerateStruct_VkVideoEncodeH265SessionParametersAddInfoKHR(out, - structInfo->pParametersAddInfo, - metaInfo->pParametersAddInfo->GetMetaStructPointer(), - consumer); - pparameters_add_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxStdVPSCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxStdSPSCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxStdPPSCount << "," << std::endl; - struct_body << "\t\t\t" << pparameters_add_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265SessionParametersCreateInfoKHR"); - out << "\t\t" << "VkVideoEncodeH265SessionParametersCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineFragmentShadingRate << "," << std::endl; + struct_body << "\t\t\t" << structInfo->primitiveFragmentShadingRate << "," << std::endl; + struct_body << "\t\t\t" << structInfo->attachmentFragmentShadingRate << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShadingRateFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceFragmentShadingRateFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265SessionParametersFeedbackInfoKHR(std::ostream &out, const VkVideoEncodeH265SessionParametersFeedbackInfoKHR* structInfo, Decoded_VkVideoEncodeH265SessionParametersFeedbackInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFragmentShadingRateKHR(std::ostream &out, const VkPhysicalDeviceFragmentShadingRateKHR* structInfo, Decoded_VkPhysicalDeviceFragmentShadingRateKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string fragment_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->fragmentSize, + metaInfo->fragmentSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hasStdVPSOverrides << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hasStdSPSOverrides << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hasStdPPSOverrides << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265SessionParametersFeedbackInfoKHR"); - out << "\t\t" << "VkVideoEncodeH265SessionParametersFeedbackInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->sampleCounts << ")" << "," << std::endl; + struct_body << "\t\t\t" << fragment_size_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShadingRateKHR"); + out << "\t\t" << "VkPhysicalDeviceFragmentShadingRateKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265SessionParametersGetInfoKHR(std::ostream &out, const VkVideoEncodeH265SessionParametersGetInfoKHR* structInfo, Decoded_VkVideoEncodeH265SessionParametersGetInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(std::ostream &out, const VkPhysicalDeviceFragmentShadingRatePropertiesKHR* structInfo, Decoded_VkPhysicalDeviceFragmentShadingRatePropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string min_fragment_shading_rate_attachment_texel_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->minFragmentShadingRateAttachmentTexelSize, + metaInfo->minFragmentShadingRateAttachmentTexelSize, + consumer); + std::string max_fragment_shading_rate_attachment_texel_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxFragmentShadingRateAttachmentTexelSize, + metaInfo->maxFragmentShadingRateAttachmentTexelSize, + consumer); + std::string max_fragment_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxFragmentSize, + metaInfo->maxFragmentSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->writeStdVPS << "," << std::endl; - struct_body << "\t\t\t" << structInfo->writeStdSPS << "," << std::endl; - struct_body << "\t\t\t" << structInfo->writeStdPPS << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdVPSId << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdSPSId << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdPPSId << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265SessionParametersGetInfoKHR"); - out << "\t\t" << "VkVideoEncodeH265SessionParametersGetInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << min_fragment_shading_rate_attachment_texel_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_fragment_shading_rate_attachment_texel_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxFragmentShadingRateAttachmentTexelSizeAspectRatio << "," << std::endl; + struct_body << "\t\t\t" << structInfo->primitiveFragmentShadingRateWithMultipleViewports << "," << std::endl; + struct_body << "\t\t\t" << structInfo->layeredShadingRateAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShadingRateNonTrivialCombinerOps << "," << std::endl; + struct_body << "\t\t\t" << max_fragment_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxFragmentSizeAspectRatio << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxFragmentShadingRateCoverageSamples << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->maxFragmentShadingRateRasterizationSamples << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShadingRateWithShaderDepthStencilWrites << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShadingRateWithSampleMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShadingRateWithShaderSampleMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShadingRateWithConservativeRasterization << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShadingRateWithFragmentShaderInterlock << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShadingRateWithCustomSampleLocations << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShadingRateStrictMultiplyCombiner << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShadingRatePropertiesKHR"); + out << "\t\t" << "VkPhysicalDeviceFragmentShadingRatePropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeH264CapabilitiesKHR(std::ostream &out, const VkVideoDecodeH264CapabilitiesKHR* structInfo, Decoded_VkVideoDecodeH264CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineFragmentShadingRateStateCreateInfoKHR(std::ostream &out, const VkPipelineFragmentShadingRateStateCreateInfoKHR* structInfo, Decoded_VkPipelineFragmentShadingRateStateCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string field_offset_granularity_info_var = GenerateStruct_VkOffset2D(out, - &structInfo->fieldOffsetGranularity, - metaInfo->fieldOffsetGranularity, - consumer); + std::string fragment_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->fragmentSize, + metaInfo->fragmentSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH264LevelIdc(" << structInfo->maxLevelIdc << ")" << "," << std::endl; - struct_body << "\t\t\t" << field_offset_granularity_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH264CapabilitiesKHR"); - out << "\t\t" << "VkVideoDecodeH264CapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << fragment_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->combinerOps[0]), 2) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineFragmentShadingRateStateCreateInfoKHR"); + out << "\t\t" << "VkPipelineFragmentShadingRateStateCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeH264DpbSlotInfoKHR(std::ostream &out, const VkVideoDecodeH264DpbSlotInfoKHR* structInfo, Decoded_VkVideoDecodeH264DpbSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderingFragmentShadingRateAttachmentInfoKHR(std::ostream &out, const VkRenderingFragmentShadingRateAttachmentInfoKHR* structInfo, Decoded_VkRenderingFragmentShadingRateAttachmentInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_reference_info_struct = "NULL"; - if (structInfo->pStdReferenceInfo != NULL) { - pstd_reference_info_struct = GenerateStruct_StdVideoDecodeH264ReferenceInfo(out, - structInfo->pStdReferenceInfo, - metaInfo->pStdReferenceInfo->GetMetaStructPointer(), - consumer); - pstd_reference_info_struct.insert(0, "&"); - } + std::string shading_rate_attachment_texel_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->shadingRateAttachmentTexelSize, + metaInfo->shadingRateAttachmentTexelSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_reference_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH264DpbSlotInfoKHR"); - out << "\t\t" << "VkVideoDecodeH264DpbSlotInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->imageView) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->imageLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << shading_rate_attachment_texel_size_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderingFragmentShadingRateAttachmentInfoKHR"); + out << "\t\t" << "VkRenderingFragmentShadingRateAttachmentInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeH264PictureInfoKHR(std::ostream &out, const VkVideoDecodeH264PictureInfoKHR* structInfo, Decoded_VkVideoDecodeH264PictureInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderQuadControlFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderQuadControlFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderQuadControlFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_picture_info_struct = "NULL"; - if (structInfo->pStdPictureInfo != NULL) { - pstd_picture_info_struct = GenerateStruct_StdVideoDecodeH264PictureInfo(out, - structInfo->pStdPictureInfo, - metaInfo->pStdPictureInfo->GetMetaStructPointer(), - consumer); - pstd_picture_info_struct.insert(0, "&"); - } - std::string pslice_offsets_array = "NULL"; - if (structInfo->pSliceOffsets != NULL) { - pslice_offsets_array = "pSliceOffsets_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pslice_offsets_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pSliceOffsets, structInfo->sliceCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_picture_info_struct << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sliceCount << "," << std::endl; - struct_body << "\t\t\t" << pslice_offsets_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH264PictureInfoKHR"); - out << "\t\t" << "VkVideoDecodeH264PictureInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderQuadControl << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderQuadControlFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceShaderQuadControlFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeH264ProfileInfoKHR(std::ostream &out, const VkVideoDecodeH264ProfileInfoKHR* structInfo, Decoded_VkVideoDecodeH264ProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfaceProtectedCapabilitiesKHR(std::ostream &out, const VkSurfaceProtectedCapabilitiesKHR* structInfo, Decoded_VkSurfaceProtectedCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH264ProfileIdc(" << structInfo->stdProfileIdc << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoDecodeH264PictureLayoutFlagBitsKHR(" << structInfo->pictureLayout << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH264ProfileInfoKHR"); - out << "\t\t" << "VkVideoDecodeH264ProfileInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->supportsProtected << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfaceProtectedCapabilitiesKHR"); + out << "\t\t" << "VkSurfaceProtectedCapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeH264SessionParametersAddInfoKHR(std::ostream &out, const VkVideoDecodeH264SessionParametersAddInfoKHR* structInfo, Decoded_VkVideoDecodeH264SessionParametersAddInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePresentWaitFeaturesKHR(std::ostream &out, const VkPhysicalDevicePresentWaitFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePresentWaitFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_s_pss_array = "NULL"; - if (structInfo->pStdSPSs != NULL) { - pstd_s_pss_array = "pStdSPSs_" + std::to_string(consumer.GetNextId()); - std::string pstd_s_pss_names; - for (uint32_t idx = 0; idx < structInfo->stdSPSCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStdSPSs + idx != NULL) { - variable_name = GenerateStruct_StdVideoH264SequenceParameterSet(out, - structInfo->pStdSPSs + idx, - metaInfo->pStdSPSs->GetMetaStructPointer() + idx, - consumer); - } - pstd_s_pss_names += variable_name + ", "; - } - out << "\t\t" << "StdVideoH264SequenceParameterSet " << pstd_s_pss_array << "[] = {" << pstd_s_pss_names << "};" << std::endl; - } - std::string pstd_pp_ss_array = "NULL"; - if (structInfo->pStdPPSs != NULL) { - pstd_pp_ss_array = "pStdPPSs_" + std::to_string(consumer.GetNextId()); - std::string pstd_pp_ss_names; - for (uint32_t idx = 0; idx < structInfo->stdPPSCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStdPPSs + idx != NULL) { - variable_name = GenerateStruct_StdVideoH264PictureParameterSet(out, - structInfo->pStdPPSs + idx, - metaInfo->pStdPPSs->GetMetaStructPointer() + idx, - consumer); - } - pstd_pp_ss_names += variable_name + ", "; - } - out << "\t\t" << "StdVideoH264PictureParameterSet " << pstd_pp_ss_array << "[] = {" << pstd_pp_ss_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdSPSCount << "," << std::endl; - struct_body << "\t\t\t" << pstd_s_pss_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdPPSCount << "," << std::endl; - struct_body << "\t\t\t" << pstd_pp_ss_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH264SessionParametersAddInfoKHR"); - out << "\t\t" << "VkVideoDecodeH264SessionParametersAddInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentWait << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePresentWaitFeaturesKHR"); + out << "\t\t" << "VkPhysicalDevicePresentWaitFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeH264SessionParametersCreateInfoKHR(std::ostream &out, const VkVideoDecodeH264SessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoDecodeH264SessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(std::ostream &out, const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pparameters_add_info_struct = "NULL"; - if (structInfo->pParametersAddInfo != NULL) { - pparameters_add_info_struct = GenerateStruct_VkVideoDecodeH264SessionParametersAddInfoKHR(out, - structInfo->pParametersAddInfo, - metaInfo->pParametersAddInfo->GetMetaStructPointer(), - consumer); - pparameters_add_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxStdSPSCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxStdPPSCount << "," << std::endl; - struct_body << "\t\t\t" << pparameters_add_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH264SessionParametersCreateInfoKHR"); - out << "\t\t" << "VkVideoDecodeH264SessionParametersCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineExecutableInfo << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineExecutablePropertiesFeaturesKHR"); + out << "\t\t" << "VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExportMemoryWin32HandleInfoKHR(std::ostream &out, const VkExportMemoryWin32HandleInfoKHR* structInfo, Decoded_VkExportMemoryWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineExecutableInfoKHR(std::ostream &out, const VkPipelineExecutableInfoKHR* structInfo, Decoded_VkPipelineExecutableInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pAttributes << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dwAccess << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->name << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "exportMemoryWin32HandleInfoKHR"); - out << "\t\t" << "VkExportMemoryWin32HandleInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipeline) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->executableIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineExecutableInfoKHR"); + out << "\t\t" << "VkPipelineExecutableInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImportMemoryWin32HandleInfoKHR(std::ostream &out, const VkImportMemoryWin32HandleInfoKHR* structInfo, Decoded_VkImportMemoryWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineExecutableInternalRepresentationKHR(std::ostream &out, const VkPipelineExecutableInternalRepresentationKHR* structInfo, Decoded_VkPipelineExecutableInternalRepresentationKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->handle << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->name << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "importMemoryWin32HandleInfoKHR"); - out << "\t\t" << "VkImportMemoryWin32HandleInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->name) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->isText << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dataSize << "," << std::endl; + out << "\t\t" << "// TODO: Support pData (output with array length value?) argument." << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineExecutableInternalRepresentationKHR"); + out << "\t\t" << "VkPipelineExecutableInternalRepresentationKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryGetWin32HandleInfoKHR(std::ostream &out, const VkMemoryGetWin32HandleInfoKHR* structInfo, Decoded_VkMemoryGetWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineExecutablePropertiesKHR(std::ostream &out, const VkPipelineExecutablePropertiesKHR* structInfo, Decoded_VkPipelineExecutablePropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryGetWin32HandleInfoKHR"); - out << "\t\t" << "VkMemoryGetWin32HandleInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->stages << ")" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->name) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subgroupSize << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineExecutablePropertiesKHR"); + out << "\t\t" << "VkPipelineExecutablePropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryWin32HandlePropertiesKHR(std::ostream &out, const VkMemoryWin32HandlePropertiesKHR* structInfo, Decoded_VkMemoryWin32HandlePropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineExecutableStatisticKHR(std::ostream &out, const VkPipelineExecutableStatisticKHR* structInfo, Decoded_VkPipelineExecutableStatisticKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryTypeBits << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryWin32HandlePropertiesKHR"); - out << "\t\t" << "VkMemoryWin32HandlePropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->name) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineExecutableStatisticFormatKHR(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->value.b32 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineExecutableStatisticKHR"); + out << "\t\t" << "VkPipelineExecutableStatisticKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImportMemoryFdInfoKHR(std::ostream &out, const VkImportMemoryFdInfoKHR* structInfo, Decoded_VkImportMemoryFdInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineInfoKHR(std::ostream &out, const VkPipelineInfoKHR* structInfo, Decoded_VkPipelineInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fd << ","; - std::string variable_name = consumer.AddStruct(struct_body, "importMemoryFdInfoKHR"); - out << "\t\t" << "VkImportMemoryFdInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipeline) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineInfoKHR"); + out << "\t\t" << "VkPipelineInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryFdPropertiesKHR(std::ostream &out, const VkMemoryFdPropertiesKHR* structInfo, Decoded_VkMemoryFdPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineLibraryCreateInfoKHR(std::ostream &out, const VkPipelineLibraryCreateInfoKHR* structInfo, Decoded_VkPipelineLibraryCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string plibraries_array = "NULL"; + if (metaInfo->pLibraries.GetPointer() != NULL && structInfo->libraryCount > 0) { + plibraries_array = "plibraries_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_PIPELINE)); + std::string plibraries_values = toStringJoin(metaInfo->pLibraries.GetPointer(), + metaInfo->pLibraries.GetPointer() + structInfo->libraryCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->libraryCount == 1) { + plibraries_array = "&" + plibraries_values; + } else if (structInfo->libraryCount > 1) { + out << "\t\t" << "VkPipeline " << plibraries_array << "[] = {" << plibraries_values << "};" << std::endl; + } + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryTypeBits << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryFdPropertiesKHR"); - out << "\t\t" << "VkMemoryFdPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->libraryCount << "," << std::endl; + struct_body << "\t\t\t" << plibraries_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineLibraryCreateInfoKHR"); + out << "\t\t" << "VkPipelineLibraryCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryGetFdInfoKHR(std::ostream &out, const VkMemoryGetFdInfoKHR* structInfo, Decoded_VkMemoryGetFdInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePresentIdFeaturesKHR(std::ostream &out, const VkPhysicalDevicePresentIdFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePresentIdFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryGetFdInfoKHR"); - out << "\t\t" << "VkMemoryGetFdInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentId << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePresentIdFeaturesKHR"); + out << "\t\t" << "VkPhysicalDevicePresentIdFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkWin32KeyedMutexAcquireReleaseInfoKHR(std::ostream &out, const VkWin32KeyedMutexAcquireReleaseInfoKHR* structInfo, Decoded_VkWin32KeyedMutexAcquireReleaseInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPresentIdKHR(std::ostream &out, const VkPresentIdKHR* structInfo, Decoded_VkPresentIdKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pacquire_syncs_array = "NULL"; - if (metaInfo->pAcquireSyncs.GetPointer() != NULL && structInfo->acquireCount > 0) { - pacquire_syncs_array = "pacquire_syncs_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DEVICE_MEMORY)); - std::string pacquire_syncs_values = toStringJoin(metaInfo->pAcquireSyncs.GetPointer(), - metaInfo->pAcquireSyncs.GetPointer() + structInfo->acquireCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->acquireCount == 1) { - pacquire_syncs_array = "&" + pacquire_syncs_values; - } else if (structInfo->acquireCount > 1) { - out << "\t\t" << "VkDeviceMemory " << pacquire_syncs_array << "[] = {" << pacquire_syncs_values << "};" << std::endl; - } - } - std::string pacquire_keys_array = "pacquire_keys_array_" + std::to_string(consumer.GetNextId()); - if (structInfo->acquireCount > 0) { - std::string pacquire_keys_values = toStringJoin(structInfo->pAcquireKeys, - structInfo->pAcquireKeys + structInfo->acquireCount, - [](uint64_t current) { return std::to_string(current); }, - ", "); - if (structInfo->acquireCount == 1) { - pacquire_keys_array = "&" + pacquire_keys_values; - } else if (structInfo->acquireCount > 1) { - out << "\t\t" << "uint64_t " << pacquire_keys_array << "[] = {" << pacquire_keys_values << "};" << std::endl; - } - } - std::string pacquire_timeouts_array = "NULL"; - if (structInfo->pAcquireTimeouts != NULL) { - pacquire_timeouts_array = "pAcquireTimeouts_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pacquire_timeouts_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pAcquireTimeouts, structInfo->acquireCount) << ";" << std::endl; - } - std::string prelease_syncs_array = "NULL"; - if (metaInfo->pReleaseSyncs.GetPointer() != NULL && structInfo->releaseCount > 0) { - prelease_syncs_array = "prelease_syncs_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DEVICE_MEMORY)); - std::string prelease_syncs_values = toStringJoin(metaInfo->pReleaseSyncs.GetPointer(), - metaInfo->pReleaseSyncs.GetPointer() + structInfo->releaseCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->releaseCount == 1) { - prelease_syncs_array = "&" + prelease_syncs_values; - } else if (structInfo->releaseCount > 1) { - out << "\t\t" << "VkDeviceMemory " << prelease_syncs_array << "[] = {" << prelease_syncs_values << "};" << std::endl; - } - } - std::string prelease_keys_array = "prelease_keys_array_" + std::to_string(consumer.GetNextId()); - if (structInfo->releaseCount > 0) { - std::string prelease_keys_values = toStringJoin(structInfo->pReleaseKeys, - structInfo->pReleaseKeys + structInfo->releaseCount, - [](uint64_t current) { return std::to_string(current); }, - ", "); - if (structInfo->releaseCount == 1) { - prelease_keys_array = "&" + prelease_keys_values; - } else if (structInfo->releaseCount > 1) { - out << "\t\t" << "uint64_t " << prelease_keys_array << "[] = {" << prelease_keys_values << "};" << std::endl; + std::string ppresent_ids_array = "ppresent_ids_array_" + std::to_string(consumer.GetNextId()); + if (structInfo->swapchainCount > 0) { + std::string ppresent_ids_values = toStringJoin(structInfo->pPresentIds, + structInfo->pPresentIds + structInfo->swapchainCount, + [](uint64_t current) { return std::to_string(current); }, + ", "); + if (structInfo->swapchainCount == 1) { + ppresent_ids_array = "&" + ppresent_ids_values; + } else if (structInfo->swapchainCount > 1) { + out << "\t\t" << "uint64_t " << ppresent_ids_array << "[] = {" << ppresent_ids_values << "};" << std::endl; } } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->acquireCount << "," << std::endl; - struct_body << "\t\t\t" << pacquire_syncs_array << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << pacquire_keys_array << " }" << "," << std::endl; - struct_body << "\t\t\t" << pacquire_timeouts_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->releaseCount << "," << std::endl; - struct_body << "\t\t\t" << prelease_syncs_array << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << prelease_keys_array << " }" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "win32KeyedMutexAcquireReleaseInfoKHR"); - out << "\t\t" << "VkWin32KeyedMutexAcquireReleaseInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << ppresent_ids_array << " }" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "presentIdKHR"); + out << "\t\t" << "VkPresentIdKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkD3D12FenceSubmitInfoKHR(std::ostream &out, const VkD3D12FenceSubmitInfoKHR* structInfo, Decoded_VkD3D12FenceSubmitInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR(std::ostream &out, const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* structInfo, Decoded_VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pwait_semaphore_values_array = "pwait_semaphore_values_array_" + std::to_string(consumer.GetNextId()); - if (structInfo->waitSemaphoreValuesCount > 0) { - std::string pwait_semaphore_values_values = toStringJoin(structInfo->pWaitSemaphoreValues, - structInfo->pWaitSemaphoreValues + structInfo->waitSemaphoreValuesCount, - [](uint64_t current) { return std::to_string(current); }, - ", "); - if (structInfo->waitSemaphoreValuesCount == 1) { - pwait_semaphore_values_array = "&" + pwait_semaphore_values_values; - } else if (structInfo->waitSemaphoreValuesCount > 1) { - out << "\t\t" << "uint64_t " << pwait_semaphore_values_array << "[] = {" << pwait_semaphore_values_values << "};" << std::endl; - } - } - std::string psignal_semaphore_values_array = "psignal_semaphore_values_array_" + std::to_string(consumer.GetNextId()); - if (structInfo->signalSemaphoreValuesCount > 0) { - std::string psignal_semaphore_values_values = toStringJoin(structInfo->pSignalSemaphoreValues, - structInfo->pSignalSemaphoreValues + structInfo->signalSemaphoreValuesCount, - [](uint64_t current) { return std::to_string(current); }, - ", "); - if (structInfo->signalSemaphoreValuesCount == 1) { - psignal_semaphore_values_array = "&" + psignal_semaphore_values_values; - } else if (structInfo->signalSemaphoreValuesCount > 1) { - out << "\t\t" << "uint64_t " << psignal_semaphore_values_array << "[] = {" << psignal_semaphore_values_values << "};" << std::endl; - } + std::string pvideo_profile_struct = "NULL"; + if (structInfo->pVideoProfile != NULL) { + pvideo_profile_struct = GenerateStruct_VkVideoProfileInfoKHR(out, + structInfo->pVideoProfile, + metaInfo->pVideoProfile->GetMetaStructPointer(), + consumer); + pvideo_profile_struct.insert(0, "&"); } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->waitSemaphoreValuesCount << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << pwait_semaphore_values_array << " }" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->signalSemaphoreValuesCount << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << psignal_semaphore_values_array << " }" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "d3D12FenceSubmitInfoKHR"); - out << "\t\t" << "VkD3D12FenceSubmitInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pvideo_profile_struct << "," << std::endl; + struct_body << "\t\t\t" << structInfo->qualityLevel << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoEncodeQualityLevelInfoKHR"); + out << "\t\t" << "VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExportSemaphoreWin32HandleInfoKHR(std::ostream &out, const VkExportSemaphoreWin32HandleInfoKHR* structInfo, Decoded_VkExportSemaphoreWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkQueryPoolVideoEncodeFeedbackCreateInfoKHR(std::ostream &out, const VkQueryPoolVideoEncodeFeedbackCreateInfoKHR* structInfo, Decoded_VkQueryPoolVideoEncodeFeedbackCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pAttributes << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dwAccess << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->name << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "exportSemaphoreWin32HandleInfoKHR"); - out << "\t\t" << "VkExportSemaphoreWin32HandleInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeFeedbackFlagsKHR(" << structInfo->encodeFeedbackFlags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "queryPoolVideoEncodeFeedbackCreateInfoKHR"); + out << "\t\t" << "VkQueryPoolVideoEncodeFeedbackCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImportSemaphoreWin32HandleInfoKHR(std::ostream &out, const VkImportSemaphoreWin32HandleInfoKHR* structInfo, Decoded_VkImportSemaphoreWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeCapabilitiesKHR(std::ostream &out, const VkVideoEncodeCapabilitiesKHR* structInfo, Decoded_VkVideoEncodeCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string encode_input_picture_granularity_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->encodeInputPictureGranularity, + metaInfo->encodeInputPictureGranularity, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; - struct_body << "\t\t\t" << "VkSemaphoreImportFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->handle << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->name << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "importSemaphoreWin32HandleInfoKHR"); - out << "\t\t" << "VkImportSemaphoreWin32HandleInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeCapabilityFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeRateControlModeFlagsKHR(" << structInfo->rateControlModes << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxRateControlLayers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxBitrate << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxQualityLevels << "," << std::endl; + struct_body << "\t\t\t" << encode_input_picture_granularity_info_var << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeFeedbackFlagsKHR(" << structInfo->supportedEncodeFeedbackFlags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeCapabilitiesKHR"); + out << "\t\t" << "VkVideoEncodeCapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSemaphoreGetWin32HandleInfoKHR(std::ostream &out, const VkSemaphoreGetWin32HandleInfoKHR* structInfo, Decoded_VkSemaphoreGetWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeInfoKHR(std::ostream &out, const VkVideoEncodeInfoKHR* structInfo, Decoded_VkVideoEncodeInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string src_picture_resource_info_var = GenerateStruct_VkVideoPictureResourceInfoKHR(out, + &structInfo->srcPictureResource, + metaInfo->srcPictureResource, + consumer); + std::string psetup_reference_slot_struct = "NULL"; + if (structInfo->pSetupReferenceSlot != NULL) { + psetup_reference_slot_struct = GenerateStruct_VkVideoReferenceSlotInfoKHR(out, + structInfo->pSetupReferenceSlot, + metaInfo->pSetupReferenceSlot->GetMetaStructPointer(), + consumer); + psetup_reference_slot_struct.insert(0, "&"); + } + std::string preference_slots_array = "NULL"; + if (structInfo->pReferenceSlots != NULL) { + preference_slots_array = "pReferenceSlots_" + std::to_string(consumer.GetNextId()); + std::string preference_slots_names; + for (uint32_t idx = 0; idx < structInfo->referenceSlotCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pReferenceSlots + idx != NULL) { + variable_name = GenerateStruct_VkVideoReferenceSlotInfoKHR(out, + structInfo->pReferenceSlots + idx, + metaInfo->pReferenceSlots->GetMetaStructPointer() + idx, + consumer); + } + preference_slots_names += variable_name + ", "; + } + out << "\t\t" << "VkVideoReferenceSlotInfoKHR " << preference_slots_array << "[] = {" << preference_slots_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "semaphoreGetWin32HandleInfoKHR"); - out << "\t\t" << "VkSemaphoreGetWin32HandleInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstBuffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstBufferOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstBufferRange << "UL" << "," << std::endl; + struct_body << "\t\t\t" << src_picture_resource_info_var << "," << std::endl; + struct_body << "\t\t\t" << psetup_reference_slot_struct << "," << std::endl; + struct_body << "\t\t\t" << structInfo->referenceSlotCount << "," << std::endl; + struct_body << "\t\t\t" << preference_slots_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->precedingExternallyEncodedBytes << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeInfoKHR"); + out << "\t\t" << "VkVideoEncodeInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImportSemaphoreFdInfoKHR(std::ostream &out, const VkImportSemaphoreFdInfoKHR* structInfo, Decoded_VkImportSemaphoreFdInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeQualityLevelInfoKHR(std::ostream &out, const VkVideoEncodeQualityLevelInfoKHR* structInfo, Decoded_VkVideoEncodeQualityLevelInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; - struct_body << "\t\t\t" << "VkSemaphoreImportFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fd << ","; - std::string variable_name = consumer.AddStruct(struct_body, "importSemaphoreFdInfoKHR"); - out << "\t\t" << "VkImportSemaphoreFdInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->qualityLevel << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeQualityLevelInfoKHR"); + out << "\t\t" << "VkVideoEncodeQualityLevelInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSemaphoreGetFdInfoKHR(std::ostream &out, const VkSemaphoreGetFdInfoKHR* structInfo, Decoded_VkSemaphoreGetFdInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeQualityLevelPropertiesKHR(std::ostream &out, const VkVideoEncodeQualityLevelPropertiesKHR* structInfo, Decoded_VkVideoEncodeQualityLevelPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "semaphoreGetFdInfoKHR"); - out << "\t\t" << "VkSemaphoreGetFdInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeRateControlModeFlagBitsKHR(" << structInfo->preferredRateControlMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredRateControlLayerCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeQualityLevelPropertiesKHR"); + out << "\t\t" << "VkVideoEncodeQualityLevelPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPresentRegionKHR(std::ostream &out, const VkPresentRegionKHR* structInfo, Decoded_VkPresentRegionKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeRateControlInfoKHR(std::ostream &out, const VkVideoEncodeRateControlInfoKHR* structInfo, Decoded_VkVideoEncodeRateControlInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string prectangles_array = "NULL"; - if (structInfo->pRectangles != NULL) { - prectangles_array = "pRectangles_" + std::to_string(consumer.GetNextId()); - std::string prectangles_names; - for (uint32_t idx = 0; idx < structInfo->rectangleCount; idx++) { + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string players_array = "NULL"; + if (structInfo->pLayers != NULL) { + players_array = "pLayers_" + std::to_string(consumer.GetNextId()); + std::string players_names; + for (uint32_t idx = 0; idx < structInfo->layerCount; idx++) { std::string variable_name = "NULL"; - if (structInfo->pRectangles + idx != NULL) { - variable_name = GenerateStruct_VkRectLayerKHR(out, - structInfo->pRectangles + idx, - metaInfo->pRectangles->GetMetaStructPointer() + idx, - consumer); + if (structInfo->pLayers + idx != NULL) { + variable_name = GenerateStruct_VkVideoEncodeRateControlLayerInfoKHR(out, + structInfo->pLayers + idx, + metaInfo->pLayers->GetMetaStructPointer() + idx, + consumer); } - prectangles_names += variable_name + ", "; + players_names += variable_name + ", "; } - out << "\t\t" << "VkRectLayerKHR " << prectangles_array << "[] = {" << prectangles_names << "};" << std::endl; + out << "\t\t" << "VkVideoEncodeRateControlLayerInfoKHR " << players_array << "[] = {" << players_names << "};" << std::endl; } - struct_body << "\t" << structInfo->rectangleCount << "," << std::endl; - struct_body << "\t\t\t" << prectangles_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "presentRegionKHR"); - out << "\t\t" << "VkPresentRegionKHR " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeRateControlFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeRateControlModeFlagBitsKHR(" << structInfo->rateControlMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->layerCount << "," << std::endl; + struct_body << "\t\t\t" << players_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->virtualBufferSizeInMs << "," << std::endl; + struct_body << "\t\t\t" << structInfo->initialVirtualBufferSizeInMs << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeRateControlInfoKHR"); + out << "\t\t" << "VkVideoEncodeRateControlInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPresentRegionsKHR(std::ostream &out, const VkPresentRegionsKHR* structInfo, Decoded_VkPresentRegionsKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeRateControlLayerInfoKHR(std::ostream &out, const VkVideoEncodeRateControlLayerInfoKHR* structInfo, Decoded_VkVideoEncodeRateControlLayerInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pregions_array = "NULL"; - if (structInfo->pRegions != NULL) { - pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); - std::string pregions_names; - for (uint32_t idx = 0; idx < structInfo->swapchainCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pRegions + idx != NULL) { - variable_name = GenerateStruct_VkPresentRegionKHR(out, - structInfo->pRegions + idx, - metaInfo->pRegions->GetMetaStructPointer() + idx, - consumer); - } - pregions_names += variable_name + ", "; - } - out << "\t\t" << "VkPresentRegionKHR " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; - struct_body << "\t\t\t" << pregions_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "presentRegionsKHR"); - out << "\t\t" << "VkPresentRegionsKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->averageBitrate << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxBitrate << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->frameRateNumerator << "," << std::endl; + struct_body << "\t\t\t" << structInfo->frameRateDenominator << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeRateControlLayerInfoKHR"); + out << "\t\t" << "VkVideoEncodeRateControlLayerInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRectLayerKHR(std::ostream &out, const VkRectLayerKHR* structInfo, Decoded_VkRectLayerKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeSessionParametersFeedbackInfoKHR(std::ostream &out, const VkVideoEncodeSessionParametersFeedbackInfoKHR* structInfo, Decoded_VkVideoEncodeSessionParametersFeedbackInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string offset_info_var = GenerateStruct_VkOffset2D(out, - &structInfo->offset, - metaInfo->offset, - consumer); - std::string extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->extent, - metaInfo->extent, - consumer); - struct_body << "\t" << offset_info_var << "," << std::endl; - struct_body << "\t\t\t" << extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->layer << ","; - std::string variable_name = consumer.AddStruct(struct_body, "rectLayerKHR"); - out << "\t\t" << "VkRectLayerKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->hasOverrides << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeSessionParametersFeedbackInfoKHR"); + out << "\t\t" << "VkVideoEncodeSessionParametersFeedbackInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSharedPresentSurfaceCapabilitiesKHR(std::ostream &out, const VkSharedPresentSurfaceCapabilitiesKHR* structInfo, Decoded_VkSharedPresentSurfaceCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeSessionParametersGetInfoKHR(std::ostream &out, const VkVideoEncodeSessionParametersGetInfoKHR* structInfo, Decoded_VkVideoEncodeSessionParametersGetInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->sharedPresentSupportedUsageFlags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "sharedPresentSurfaceCapabilitiesKHR"); - out << "\t\t" << "VkSharedPresentSurfaceCapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->videoSessionParameters) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeSessionParametersGetInfoKHR"); + out << "\t\t" << "VkVideoEncodeSessionParametersGetInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExportFenceWin32HandleInfoKHR(std::ostream &out, const VkExportFenceWin32HandleInfoKHR* structInfo, Decoded_VkExportFenceWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeUsageInfoKHR(std::ostream &out, const VkVideoEncodeUsageInfoKHR* structInfo, Decoded_VkVideoEncodeUsageInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pAttributes << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dwAccess << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->name << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "exportFenceWin32HandleInfoKHR"); - out << "\t\t" << "VkExportFenceWin32HandleInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeUsageFlagsKHR(" << structInfo->videoUsageHints << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeContentFlagsKHR(" << structInfo->videoContentHints << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeTuningModeKHR(" << structInfo->tuningMode << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeUsageInfoKHR"); + out << "\t\t" << "VkVideoEncodeUsageInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkFenceGetWin32HandleInfoKHR(std::ostream &out, const VkFenceGetWin32HandleInfoKHR* structInfo, Decoded_VkFenceGetWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR(std::ostream &out, const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->fence) << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "fenceGetWin32HandleInfoKHR"); - out << "\t\t" << "VkFenceGetWin32HandleInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShaderBarycentric << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShaderBarycentricFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImportFenceWin32HandleInfoKHR(std::ostream &out, const VkImportFenceWin32HandleInfoKHR* structInfo, Decoded_VkImportFenceWin32HandleInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR(std::ostream &out, const VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR* structInfo, Decoded_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->fence) << "," << std::endl; - struct_body << "\t\t\t" << "VkFenceImportFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->handle << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->name << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "importFenceWin32HandleInfoKHR"); - out << "\t\t" << "VkImportFenceWin32HandleInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->triStripVertexOrderIndependentOfProvokingVertex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShaderBarycentricPropertiesKHR"); + out << "\t\t" << "VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkFenceGetFdInfoKHR(std::ostream &out, const VkFenceGetFdInfoKHR* structInfo, Decoded_VkFenceGetFdInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->fence) << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "fenceGetFdInfoKHR"); - out << "\t\t" << "VkFenceGetFdInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSubgroupUniformControlFlow << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImportFenceFdInfoKHR(std::ostream &out, const VkImportFenceFdInfoKHR* structInfo, Decoded_VkImportFenceFdInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(std::ostream &out, const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->fence) << "," << std::endl; - struct_body << "\t\t\t" << "VkFenceImportFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalFenceHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fd << ","; - std::string variable_name = consumer.AddStruct(struct_body, "importFenceFdInfoKHR"); - out << "\t\t" << "VkImportFenceFdInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->workgroupMemoryExplicitLayout << "," << std::endl; + struct_body << "\t\t\t" << structInfo->workgroupMemoryExplicitLayoutScalarBlockLayout << "," << std::endl; + struct_body << "\t\t\t" << structInfo->workgroupMemoryExplicitLayout8BitAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->workgroupMemoryExplicitLayout16BitAccess << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAcquireProfilingLockInfoKHR(std::ostream &out, const VkAcquireProfilingLockInfoKHR* structInfo, Decoded_VkAcquireProfilingLockInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR(std::ostream &out, const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkAcquireProfilingLockFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->timeout << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "acquireProfilingLockInfoKHR"); - out << "\t\t" << "VkAcquireProfilingLockInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->rayTracingMaintenance1 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->rayTracingPipelineTraceRaysIndirect2 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingMaintenance1FeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPerformanceCounterDescriptionKHR(std::ostream &out, const VkPerformanceCounterDescriptionKHR* structInfo, Decoded_VkPerformanceCounterDescriptionKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkTraceRaysIndirectCommand2KHR(std::ostream &out, const VkTraceRaysIndirectCommand2KHR* structInfo, Decoded_VkTraceRaysIndirectCommand2KHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPerformanceCounterDescriptionFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->name) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->category) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "performanceCounterDescriptionKHR"); - out << "\t\t" << "VkPerformanceCounterDescriptionKHR " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->raygenShaderRecordAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->raygenShaderRecordSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->missShaderBindingTableAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->missShaderBindingTableSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->missShaderBindingTableStride << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->hitShaderBindingTableAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->hitShaderBindingTableSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->hitShaderBindingTableStride << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->callableShaderBindingTableAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->callableShaderBindingTableSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->callableShaderBindingTableStride << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->width << "," << std::endl; + struct_body << "\t\t\t" << structInfo->height << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depth << ","; + std::string variable_name = consumer.AddStruct(struct_body, "traceRaysIndirectCommand2KHR"); + out << "\t\t" << "VkTraceRaysIndirectCommand2KHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPerformanceCounterKHR(std::ostream &out, const VkPerformanceCounterKHR* structInfo, Decoded_VkPerformanceCounterKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderUntypedPointersFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPerformanceCounterUnitKHR(" << structInfo->unit << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPerformanceCounterScopeKHR(" << structInfo->scope << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPerformanceCounterStorageKHR(" << structInfo->storage << ")" << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->uuid[0]), VK_UUID_SIZE) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "performanceCounterKHR"); - out << "\t\t" << "VkPerformanceCounterKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderUntypedPointers << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderUntypedPointersFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceShaderUntypedPointersFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPerformanceQuerySubmitInfoKHR(std::ostream &out, const VkPerformanceQuerySubmitInfoKHR* structInfo, Decoded_VkPerformanceQuerySubmitInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->counterPassIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "performanceQuerySubmitInfoKHR"); - out << "\t\t" << "VkPerformanceQuerySubmitInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderMaximalReconvergence << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderMaximalReconvergenceFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePerformanceQueryFeaturesKHR(std::ostream &out, const VkPhysicalDevicePerformanceQueryFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePerformanceQueryFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePresentId2FeaturesKHR(std::ostream &out, const VkPhysicalDevicePresentId2FeaturesKHR* structInfo, Decoded_VkPhysicalDevicePresentId2FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->performanceCounterQueryPools << "," << std::endl; - struct_body << "\t\t\t" << structInfo->performanceCounterMultipleQueryPools << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePerformanceQueryFeaturesKHR"); - out << "\t\t" << "VkPhysicalDevicePerformanceQueryFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentId2 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePresentId2FeaturesKHR"); + out << "\t\t" << "VkPhysicalDevicePresentId2FeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePerformanceQueryPropertiesKHR(std::ostream &out, const VkPhysicalDevicePerformanceQueryPropertiesKHR* structInfo, Decoded_VkPhysicalDevicePerformanceQueryPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPresentId2KHR(std::ostream &out, const VkPresentId2KHR* structInfo, Decoded_VkPresentId2KHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string ppresent_ids_array = "ppresent_ids_array_" + std::to_string(consumer.GetNextId()); + if (structInfo->swapchainCount > 0) { + std::string ppresent_ids_values = toStringJoin(structInfo->pPresentIds, + structInfo->pPresentIds + structInfo->swapchainCount, + [](uint64_t current) { return std::to_string(current); }, + ", "); + if (structInfo->swapchainCount == 1) { + ppresent_ids_array = "&" + ppresent_ids_values; + } else if (structInfo->swapchainCount > 1) { + out << "\t\t" << "uint64_t " << ppresent_ids_array << "[] = {" << ppresent_ids_values << "};" << std::endl; + } + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->allowCommandBufferQueryCopies << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePerformanceQueryPropertiesKHR"); - out << "\t\t" << "VkPhysicalDevicePerformanceQueryPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << ppresent_ids_array << " }" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "presentId2KHR"); + out << "\t\t" << "VkPresentId2KHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkQueryPoolPerformanceCreateInfoKHR(std::ostream &out, const VkQueryPoolPerformanceCreateInfoKHR* structInfo, Decoded_VkQueryPoolPerformanceCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfaceCapabilitiesPresentId2KHR(std::ostream &out, const VkSurfaceCapabilitiesPresentId2KHR* structInfo, Decoded_VkSurfaceCapabilitiesPresentId2KHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcounter_indices_array = "NULL"; - if (structInfo->pCounterIndices != NULL) { - pcounter_indices_array = "pCounterIndices_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pcounter_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pCounterIndices, structInfo->counterIndexCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queueFamilyIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->counterIndexCount << "," << std::endl; - struct_body << "\t\t\t" << pcounter_indices_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "queryPoolPerformanceCreateInfoKHR"); - out << "\t\t" << "VkQueryPoolPerformanceCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentId2Supported << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfaceCapabilitiesPresentId2KHR"); + out << "\t\t" << "VkSurfaceCapabilitiesPresentId2KHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSurfaceInfo2KHR(std::ostream &out, const VkPhysicalDeviceSurfaceInfo2KHR* structInfo, Decoded_VkPhysicalDeviceSurfaceInfo2KHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePresentWait2FeaturesKHR(std::ostream &out, const VkPhysicalDevicePresentWait2FeaturesKHR* structInfo, Decoded_VkPhysicalDevicePresentWait2FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->surface) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSurfaceInfo2KHR"); - out << "\t\t" << "VkPhysicalDeviceSurfaceInfo2KHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentWait2 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePresentWait2FeaturesKHR"); + out << "\t\t" << "VkPhysicalDevicePresentWait2FeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfaceCapabilities2KHR(std::ostream &out, const VkSurfaceCapabilities2KHR* structInfo, Decoded_VkSurfaceCapabilities2KHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPresentWait2InfoKHR(std::ostream &out, const VkPresentWait2InfoKHR* structInfo, Decoded_VkPresentWait2InfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string surface_capabilities_info_var = GenerateStruct_VkSurfaceCapabilitiesKHR(out, - &structInfo->surfaceCapabilities, - metaInfo->surfaceCapabilities, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << surface_capabilities_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfaceCapabilities2KHR"); - out << "\t\t" << "VkSurfaceCapabilities2KHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentId << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->timeout << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "presentWait2InfoKHR"); + out << "\t\t" << "VkPresentWait2InfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfaceFormat2KHR(std::ostream &out, const VkSurfaceFormat2KHR* structInfo, Decoded_VkSurfaceFormat2KHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfaceCapabilitiesPresentWait2KHR(std::ostream &out, const VkSurfaceCapabilitiesPresentWait2KHR* structInfo, Decoded_VkSurfaceCapabilitiesPresentWait2KHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string surface_format_info_var = GenerateStruct_VkSurfaceFormatKHR(out, - &structInfo->surfaceFormat, - metaInfo->surfaceFormat, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << surface_format_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfaceFormat2KHR"); - out << "\t\t" << "VkSurfaceFormat2KHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->presentWait2Supported << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfaceCapabilitiesPresentWait2KHR"); + out << "\t\t" << "VkSurfaceCapabilitiesPresentWait2KHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayModeProperties2KHR(std::ostream &out, const VkDisplayModeProperties2KHR* structInfo, Decoded_VkDisplayModeProperties2KHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR(std::ostream &out, const VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string display_mode_properties_info_var = GenerateStruct_VkDisplayModePropertiesKHR(out, - &structInfo->displayModeProperties, - metaInfo->displayModeProperties, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << display_mode_properties_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayModeProperties2KHR"); - out << "\t\t" << "VkDisplayModeProperties2KHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->rayTracingPositionFetch << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingPositionFetchFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayPlaneCapabilities2KHR(std::ostream &out, const VkDisplayPlaneCapabilities2KHR* structInfo, Decoded_VkDisplayPlaneCapabilities2KHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDevicePipelineBinaryInternalCacheControlKHR(std::ostream &out, const VkDevicePipelineBinaryInternalCacheControlKHR* structInfo, Decoded_VkDevicePipelineBinaryInternalCacheControlKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string capabilities_info_var = GenerateStruct_VkDisplayPlaneCapabilitiesKHR(out, - &structInfo->capabilities, - metaInfo->capabilities, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << capabilities_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayPlaneCapabilities2KHR"); - out << "\t\t" << "VkDisplayPlaneCapabilities2KHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->disableInternalCache << ","; + std::string variable_name = consumer.AddStruct(struct_body, "devicePipelineBinaryInternalCacheControlKHR"); + out << "\t\t" << "VkDevicePipelineBinaryInternalCacheControlKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayPlaneInfo2KHR(std::ostream &out, const VkDisplayPlaneInfo2KHR* structInfo, Decoded_VkDisplayPlaneInfo2KHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePipelineBinaryFeaturesKHR(std::ostream &out, const VkPhysicalDevicePipelineBinaryFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePipelineBinaryFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->mode) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->planeIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayPlaneInfo2KHR"); - out << "\t\t" << "VkDisplayPlaneInfo2KHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineBinaries << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineBinaryFeaturesKHR"); + out << "\t\t" << "VkPhysicalDevicePipelineBinaryFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayPlaneProperties2KHR(std::ostream &out, const VkDisplayPlaneProperties2KHR* structInfo, Decoded_VkDisplayPlaneProperties2KHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePipelineBinaryPropertiesKHR(std::ostream &out, const VkPhysicalDevicePipelineBinaryPropertiesKHR* structInfo, Decoded_VkPhysicalDevicePipelineBinaryPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string display_plane_properties_info_var = GenerateStruct_VkDisplayPlanePropertiesKHR(out, - &structInfo->displayPlaneProperties, - metaInfo->displayPlaneProperties, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << display_plane_properties_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayPlaneProperties2KHR"); - out << "\t\t" << "VkDisplayPlaneProperties2KHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineBinaryInternalCache << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineBinaryInternalCacheControl << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineBinaryPrefersInternalCache << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineBinaryPrecompiledInternalCache << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineBinaryCompressedData << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineBinaryPropertiesKHR"); + out << "\t\t" << "VkPhysicalDevicePipelineBinaryPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayProperties2KHR(std::ostream &out, const VkDisplayProperties2KHR* structInfo, Decoded_VkDisplayProperties2KHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineBinaryCreateInfoKHR(std::ostream &out, const VkPipelineBinaryCreateInfoKHR* structInfo, Decoded_VkPipelineBinaryCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string display_properties_info_var = GenerateStruct_VkDisplayPropertiesKHR(out, - &structInfo->displayProperties, - metaInfo->displayProperties, - consumer); + std::string pkeys_and_data_info_struct = "NULL"; + if (structInfo->pKeysAndDataInfo != NULL) { + pkeys_and_data_info_struct = GenerateStruct_VkPipelineBinaryKeysAndDataKHR(out, + structInfo->pKeysAndDataInfo, + metaInfo->pKeysAndDataInfo->GetMetaStructPointer(), + consumer); + pkeys_and_data_info_struct.insert(0, "&"); + } + std::string ppipeline_create_info_struct = "NULL"; + if (structInfo->pPipelineCreateInfo != NULL) { + ppipeline_create_info_struct = GenerateStruct_VkPipelineCreateInfoKHR(out, + structInfo->pPipelineCreateInfo, + metaInfo->pPipelineCreateInfo->GetMetaStructPointer(), + consumer); + ppipeline_create_info_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << display_properties_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayProperties2KHR"); - out << "\t\t" << "VkDisplayProperties2KHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pkeys_and_data_info_struct << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipeline) << "," << std::endl; + struct_body << "\t\t\t" << ppipeline_create_info_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineBinaryCreateInfoKHR"); + out << "\t\t" << "VkPipelineBinaryCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderBfloat16FeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderBfloat16FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderBfloat16FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineBinaryDataInfoKHR(std::ostream &out, const VkPipelineBinaryDataInfoKHR* structInfo, Decoded_VkPipelineBinaryDataInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBFloat16Type << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBFloat16DotProduct << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBFloat16CooperativeMatrix << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderBfloat16FeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceShaderBfloat16FeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipelineBinary) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineBinaryDataInfoKHR"); + out << "\t\t" << "VkPipelineBinaryDataInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePortabilitySubsetFeaturesKHR(std::ostream &out, const VkPhysicalDevicePortabilitySubsetFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePortabilitySubsetFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineBinaryDataKHR(std::ostream &out, const VkPipelineBinaryDataKHR* structInfo, Decoded_VkPipelineBinaryDataKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->constantAlphaColorBlendFactors << "," << std::endl; - struct_body << "\t\t\t" << structInfo->events << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageViewFormatReinterpretation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageViewFormatSwizzle << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageView2DOn3DImage << "," << std::endl; - struct_body << "\t\t\t" << structInfo->multisampleArrayImage << "," << std::endl; - struct_body << "\t\t\t" << structInfo->mutableComparisonSamplers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pointPolygons << "," << std::endl; - struct_body << "\t\t\t" << structInfo->samplerMipLodBias << "," << std::endl; - struct_body << "\t\t\t" << structInfo->separateStencilMaskRef << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSampleRateInterpolationFunctions << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tessellationIsolines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tessellationPointMode << "," << std::endl; - struct_body << "\t\t\t" << structInfo->triangleFans << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexAttributeAccessBeyondStride << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePortabilitySubsetFeaturesKHR"); - out << "\t\t" << "VkPhysicalDevicePortabilitySubsetFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->dataSize << "," << std::endl; + out << "\t\t" << "// TODO: Support pData (output with array length value?) argument." << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineBinaryDataKHR"); + out << "\t\t" << "VkPipelineBinaryDataKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePortabilitySubsetPropertiesKHR(std::ostream &out, const VkPhysicalDevicePortabilitySubsetPropertiesKHR* structInfo, Decoded_VkPhysicalDevicePortabilitySubsetPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineBinaryHandlesInfoKHR(std::ostream &out, const VkPipelineBinaryHandlesInfoKHR* structInfo, Decoded_VkPipelineBinaryHandlesInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minVertexInputBindingStrideAlignment << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePortabilitySubsetPropertiesKHR"); - out << "\t\t" << "VkPhysicalDevicePortabilitySubsetPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineBinaryCount << "," << std::endl; + out << "\t\t" << "// TODO: Support pPipelineBinaries (output with array length value?) argument." << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineBinaryHandlesInfoKHR"); + out << "\t\t" << "VkPipelineBinaryHandlesInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderClockFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderClockFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderClockFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineBinaryInfoKHR(std::ostream &out, const VkPipelineBinaryInfoKHR* structInfo, Decoded_VkPipelineBinaryInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string ppipeline_binaries_array = "NULL"; + if (metaInfo->pPipelineBinaries.GetPointer() != NULL && structInfo->binaryCount > 0) { + ppipeline_binaries_array = "ppipeline_binaries_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_PIPELINE_BINARY_KHR)); + std::string ppipeline_binaries_values = toStringJoin(metaInfo->pPipelineBinaries.GetPointer(), + metaInfo->pPipelineBinaries.GetPointer() + structInfo->binaryCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->binaryCount == 1) { + ppipeline_binaries_array = "&" + ppipeline_binaries_values; + } else if (structInfo->binaryCount > 1) { + out << "\t\t" << "VkPipelineBinaryKHR " << ppipeline_binaries_array << "[] = {" << ppipeline_binaries_values << "};" << std::endl; + } + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSubgroupClock << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderDeviceClock << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderClockFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceShaderClockFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->binaryCount << "," << std::endl; + struct_body << "\t\t\t" << ppipeline_binaries_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineBinaryInfoKHR"); + out << "\t\t" << "VkPipelineBinaryInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeH265CapabilitiesKHR(std::ostream &out, const VkVideoDecodeH265CapabilitiesKHR* structInfo, Decoded_VkVideoDecodeH265CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineBinaryKeyKHR(std::ostream &out, const VkPipelineBinaryKeyKHR* structInfo, Decoded_VkPipelineBinaryKeyKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH265LevelIdc(" << structInfo->maxLevelIdc << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH265CapabilitiesKHR"); - out << "\t\t" << "VkVideoDecodeH265CapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->keySize << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->key[0]), VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineBinaryKeyKHR"); + out << "\t\t" << "VkPipelineBinaryKeyKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeH265DpbSlotInfoKHR(std::ostream &out, const VkVideoDecodeH265DpbSlotInfoKHR* structInfo, Decoded_VkVideoDecodeH265DpbSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineBinaryKeysAndDataKHR(std::ostream &out, const VkPipelineBinaryKeysAndDataKHR* structInfo, Decoded_VkPipelineBinaryKeysAndDataKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_reference_info_struct = "NULL"; - if (structInfo->pStdReferenceInfo != NULL) { - pstd_reference_info_struct = GenerateStruct_StdVideoDecodeH265ReferenceInfo(out, - structInfo->pStdReferenceInfo, - metaInfo->pStdReferenceInfo->GetMetaStructPointer(), - consumer); - pstd_reference_info_struct.insert(0, "&"); + std::string ppipeline_binary_keys_array = "NULL"; + if (structInfo->pPipelineBinaryKeys != NULL) { + ppipeline_binary_keys_array = "pPipelineBinaryKeys_" + std::to_string(consumer.GetNextId()); + std::string ppipeline_binary_keys_names; + for (uint32_t idx = 0; idx < structInfo->binaryCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pPipelineBinaryKeys + idx != NULL) { + variable_name = GenerateStruct_VkPipelineBinaryKeyKHR(out, + structInfo->pPipelineBinaryKeys + idx, + metaInfo->pPipelineBinaryKeys->GetMetaStructPointer() + idx, + consumer); + } + ppipeline_binary_keys_names += variable_name + ", "; + } + out << "\t\t" << "VkPipelineBinaryKeyKHR " << ppipeline_binary_keys_array << "[] = {" << ppipeline_binary_keys_names << "};" << std::endl; } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_reference_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH265DpbSlotInfoKHR"); - out << "\t\t" << "VkVideoDecodeH265DpbSlotInfoKHR " << variable_name << " {" << std::endl; + std::string ppipeline_binary_data_array = "NULL"; + if (structInfo->pPipelineBinaryData != NULL) { + ppipeline_binary_data_array = "pPipelineBinaryData_" + std::to_string(consumer.GetNextId()); + std::string ppipeline_binary_data_names; + for (uint32_t idx = 0; idx < structInfo->binaryCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pPipelineBinaryData + idx != NULL) { + variable_name = GenerateStruct_VkPipelineBinaryDataKHR(out, + structInfo->pPipelineBinaryData + idx, + metaInfo->pPipelineBinaryData->GetMetaStructPointer() + idx, + consumer); + } + ppipeline_binary_data_names += variable_name + ", "; + } + out << "\t\t" << "VkPipelineBinaryDataKHR " << ppipeline_binary_data_array << "[] = {" << ppipeline_binary_data_names << "};" << std::endl; + } + struct_body << "\t" << structInfo->binaryCount << "," << std::endl; + struct_body << "\t\t\t" << ppipeline_binary_keys_array << "," << std::endl; + struct_body << "\t\t\t" << ppipeline_binary_data_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineBinaryKeysAndDataKHR"); + out << "\t\t" << "VkPipelineBinaryKeysAndDataKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeH265PictureInfoKHR(std::ostream &out, const VkVideoDecodeH265PictureInfoKHR* structInfo, Decoded_VkVideoDecodeH265PictureInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineCreateInfoKHR(std::ostream &out, const VkPipelineCreateInfoKHR* structInfo, Decoded_VkPipelineCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_picture_info_struct = "NULL"; - if (structInfo->pStdPictureInfo != NULL) { - pstd_picture_info_struct = GenerateStruct_StdVideoDecodeH265PictureInfo(out, - structInfo->pStdPictureInfo, - metaInfo->pStdPictureInfo->GetMetaStructPointer(), - consumer); - pstd_picture_info_struct.insert(0, "&"); - } - std::string pslice_segment_offsets_array = "NULL"; - if (structInfo->pSliceSegmentOffsets != NULL) { - pslice_segment_offsets_array = "pSliceSegmentOffsets_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pslice_segment_offsets_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pSliceSegmentOffsets, structInfo->sliceSegmentCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_picture_info_struct << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sliceSegmentCount << "," << std::endl; - struct_body << "\t\t\t" << pslice_segment_offsets_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH265PictureInfoKHR"); - out << "\t\t" << "VkVideoDecodeH265PictureInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pnext_name << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineCreateInfoKHR"); + out << "\t\t" << "VkPipelineCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeH265ProfileInfoKHR(std::ostream &out, const VkVideoDecodeH265ProfileInfoKHR* structInfo, Decoded_VkVideoDecodeH265ProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkReleaseCapturedPipelineDataInfoKHR(std::ostream &out, const VkReleaseCapturedPipelineDataInfoKHR* structInfo, Decoded_VkReleaseCapturedPipelineDataInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoH265ProfileIdc(" << structInfo->stdProfileIdc << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH265ProfileInfoKHR"); - out << "\t\t" << "VkVideoDecodeH265ProfileInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipeline) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "releaseCapturedPipelineDataInfoKHR"); + out << "\t\t" << "VkReleaseCapturedPipelineDataInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeH265SessionParametersAddInfoKHR(std::ostream &out, const VkVideoDecodeH265SessionParametersAddInfoKHR* structInfo, Decoded_VkVideoDecodeH265SessionParametersAddInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfacePresentModeCompatibilityKHR(std::ostream &out, const VkSurfacePresentModeCompatibilityKHR* structInfo, Decoded_VkSurfacePresentModeCompatibilityKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_v_pss_array = "NULL"; - if (structInfo->pStdVPSs != NULL) { - pstd_v_pss_array = "pStdVPSs_" + std::to_string(consumer.GetNextId()); - std::string pstd_v_pss_names; - for (uint32_t idx = 0; idx < structInfo->stdVPSCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStdVPSs + idx != NULL) { - variable_name = GenerateStruct_StdVideoH265VideoParameterSet(out, - structInfo->pStdVPSs + idx, - metaInfo->pStdVPSs->GetMetaStructPointer() + idx, - consumer); - } - pstd_v_pss_names += variable_name + ", "; - } - out << "\t\t" << "StdVideoH265VideoParameterSet " << pstd_v_pss_array << "[] = {" << pstd_v_pss_names << "};" << std::endl; - } - std::string pstd_s_pss_array = "NULL"; - if (structInfo->pStdSPSs != NULL) { - pstd_s_pss_array = "pStdSPSs_" + std::to_string(consumer.GetNextId()); - std::string pstd_s_pss_names; - for (uint32_t idx = 0; idx < structInfo->stdSPSCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStdSPSs + idx != NULL) { - variable_name = GenerateStruct_StdVideoH265SequenceParameterSet(out, - structInfo->pStdSPSs + idx, - metaInfo->pStdSPSs->GetMetaStructPointer() + idx, - consumer); - } - pstd_s_pss_names += variable_name + ", "; - } - out << "\t\t" << "StdVideoH265SequenceParameterSet " << pstd_s_pss_array << "[] = {" << pstd_s_pss_names << "};" << std::endl; - } - std::string pstd_pp_ss_array = "NULL"; - if (structInfo->pStdPPSs != NULL) { - pstd_pp_ss_array = "pStdPPSs_" + std::to_string(consumer.GetNextId()); - std::string pstd_pp_ss_names; - for (uint32_t idx = 0; idx < structInfo->stdPPSCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStdPPSs + idx != NULL) { - variable_name = GenerateStruct_StdVideoH265PictureParameterSet(out, - structInfo->pStdPPSs + idx, - metaInfo->pStdPPSs->GetMetaStructPointer() + idx, - consumer); - } - pstd_pp_ss_names += variable_name + ", "; + std::string ppresent_modes_array = "NULL"; + if (structInfo->pPresentModes != NULL) { + std::string ppresent_modes_values; + for (uint32_t idx = 0; idx < structInfo->presentModeCount; idx++) { + ppresent_modes_values += util::ToString(structInfo->pPresentModes[idx]) + ", "; } - out << "\t\t" << "StdVideoH265PictureParameterSet " << pstd_pp_ss_array << "[] = {" << pstd_pp_ss_names << "};" << std::endl; + ppresent_modes_array = "pPresentModes_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkPresentModeKHR " << ppresent_modes_array << "[] = {" << ppresent_modes_values << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdVPSCount << "," << std::endl; - struct_body << "\t\t\t" << pstd_v_pss_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdSPSCount << "," << std::endl; - struct_body << "\t\t\t" << pstd_s_pss_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdPPSCount << "," << std::endl; - struct_body << "\t\t\t" << pstd_pp_ss_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH265SessionParametersAddInfoKHR"); - out << "\t\t" << "VkVideoDecodeH265SessionParametersAddInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentModeCount << "," << std::endl; + struct_body << "\t\t\t" << ppresent_modes_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfacePresentModeCompatibilityKHR"); + out << "\t\t" << "VkSurfacePresentModeCompatibilityKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeH265SessionParametersCreateInfoKHR(std::ostream &out, const VkVideoDecodeH265SessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoDecodeH265SessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfacePresentModeKHR(std::ostream &out, const VkSurfacePresentModeKHR* structInfo, Decoded_VkSurfacePresentModeKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pparameters_add_info_struct = "NULL"; - if (structInfo->pParametersAddInfo != NULL) { - pparameters_add_info_struct = GenerateStruct_VkVideoDecodeH265SessionParametersAddInfoKHR(out, - structInfo->pParametersAddInfo, - metaInfo->pParametersAddInfo->GetMetaStructPointer(), - consumer); - pparameters_add_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxStdVPSCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxStdSPSCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxStdPPSCount << "," << std::endl; - struct_body << "\t\t\t" << pparameters_add_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH265SessionParametersCreateInfoKHR"); - out << "\t\t" << "VkVideoDecodeH265SessionParametersCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPresentModeKHR(" << structInfo->presentMode << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfacePresentModeKHR"); + out << "\t\t" << "VkSurfacePresentModeKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkFragmentShadingRateAttachmentInfoKHR(std::ostream &out, const VkFragmentShadingRateAttachmentInfoKHR* structInfo, Decoded_VkFragmentShadingRateAttachmentInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfacePresentScalingCapabilitiesKHR(std::ostream &out, const VkSurfacePresentScalingCapabilitiesKHR* structInfo, Decoded_VkSurfacePresentScalingCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pfragment_shading_rate_attachment_struct = "NULL"; - if (structInfo->pFragmentShadingRateAttachment != NULL) { - pfragment_shading_rate_attachment_struct = GenerateStruct_VkAttachmentReference2(out, - structInfo->pFragmentShadingRateAttachment, - metaInfo->pFragmentShadingRateAttachment->GetMetaStructPointer(), - consumer); - pfragment_shading_rate_attachment_struct.insert(0, "&"); - } - std::string shading_rate_attachment_texel_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->shadingRateAttachmentTexelSize, - metaInfo->shadingRateAttachmentTexelSize, - consumer); + std::string min_scaled_image_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->minScaledImageExtent, + metaInfo->minScaledImageExtent, + consumer); + std::string max_scaled_image_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxScaledImageExtent, + metaInfo->maxScaledImageExtent, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pfragment_shading_rate_attachment_struct << "," << std::endl; - struct_body << "\t\t\t" << shading_rate_attachment_texel_size_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "fragmentShadingRateAttachmentInfoKHR"); - out << "\t\t" << "VkFragmentShadingRateAttachmentInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPresentScalingFlagsKHR(" << structInfo->supportedPresentScaling << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPresentGravityFlagsKHR(" << structInfo->supportedPresentGravityX << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPresentGravityFlagsKHR(" << structInfo->supportedPresentGravityY << ")" << "," << std::endl; + struct_body << "\t\t\t" << min_scaled_image_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_scaled_image_extent_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfacePresentScalingCapabilitiesKHR"); + out << "\t\t" << "VkSurfacePresentScalingCapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(std::ostream &out, const VkPhysicalDeviceFragmentShadingRateFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceFragmentShadingRateFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR(std::ostream &out, const VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineFragmentShadingRate << "," << std::endl; - struct_body << "\t\t\t" << structInfo->primitiveFragmentShadingRate << "," << std::endl; - struct_body << "\t\t\t" << structInfo->attachmentFragmentShadingRate << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShadingRateFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceFragmentShadingRateFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->swapchainMaintenance1 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSwapchainMaintenance1FeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFragmentShadingRateKHR(std::ostream &out, const VkPhysicalDeviceFragmentShadingRateKHR* structInfo, Decoded_VkPhysicalDeviceFragmentShadingRateKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkReleaseSwapchainImagesInfoKHR(std::ostream &out, const VkReleaseSwapchainImagesInfoKHR* structInfo, Decoded_VkReleaseSwapchainImagesInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string fragment_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->fragmentSize, - metaInfo->fragmentSize, - consumer); + std::string pimage_indices_array = "NULL"; + if (structInfo->pImageIndices != NULL) { + pimage_indices_array = "pImageIndices_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pimage_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pImageIndices, structInfo->imageIndexCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->sampleCounts << ")" << "," << std::endl; - struct_body << "\t\t\t" << fragment_size_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShadingRateKHR"); - out << "\t\t" << "VkPhysicalDeviceFragmentShadingRateKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->swapchain) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imageIndexCount << "," << std::endl; + struct_body << "\t\t\t" << pimage_indices_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "releaseSwapchainImagesInfoKHR"); + out << "\t\t" << "VkReleaseSwapchainImagesInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(std::ostream &out, const VkPhysicalDeviceFragmentShadingRatePropertiesKHR* structInfo, Decoded_VkPhysicalDeviceFragmentShadingRatePropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSwapchainPresentFenceInfoKHR(std::ostream &out, const VkSwapchainPresentFenceInfoKHR* structInfo, Decoded_VkSwapchainPresentFenceInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string min_fragment_shading_rate_attachment_texel_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->minFragmentShadingRateAttachmentTexelSize, - metaInfo->minFragmentShadingRateAttachmentTexelSize, - consumer); - std::string max_fragment_shading_rate_attachment_texel_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxFragmentShadingRateAttachmentTexelSize, - metaInfo->maxFragmentShadingRateAttachmentTexelSize, - consumer); - std::string max_fragment_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxFragmentSize, - metaInfo->maxFragmentSize, - consumer); + std::string pfences_array = "NULL"; + if (metaInfo->pFences.GetPointer() != NULL && structInfo->swapchainCount > 0) { + pfences_array = "pfences_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_FENCE)); + std::string pfences_values = toStringJoin(metaInfo->pFences.GetPointer(), + metaInfo->pFences.GetPointer() + structInfo->swapchainCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->swapchainCount == 1) { + pfences_array = "&" + pfences_values; + } else if (structInfo->swapchainCount > 1) { + out << "\t\t" << "VkFence " << pfences_array << "[] = {" << pfences_values << "};" << std::endl; + } + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << min_fragment_shading_rate_attachment_texel_size_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_fragment_shading_rate_attachment_texel_size_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxFragmentShadingRateAttachmentTexelSizeAspectRatio << "," << std::endl; - struct_body << "\t\t\t" << structInfo->primitiveFragmentShadingRateWithMultipleViewports << "," << std::endl; - struct_body << "\t\t\t" << structInfo->layeredShadingRateAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShadingRateNonTrivialCombinerOps << "," << std::endl; - struct_body << "\t\t\t" << max_fragment_size_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxFragmentSizeAspectRatio << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxFragmentShadingRateCoverageSamples << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->maxFragmentShadingRateRasterizationSamples << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShadingRateWithShaderDepthStencilWrites << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShadingRateWithSampleMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShadingRateWithShaderSampleMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShadingRateWithConservativeRasterization << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShadingRateWithFragmentShaderInterlock << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShadingRateWithCustomSampleLocations << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShadingRateStrictMultiplyCombiner << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShadingRatePropertiesKHR"); - out << "\t\t" << "VkPhysicalDeviceFragmentShadingRatePropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; + struct_body << "\t\t\t" << pfences_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "swapchainPresentFenceInfoKHR"); + out << "\t\t" << "VkSwapchainPresentFenceInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineFragmentShadingRateStateCreateInfoKHR(std::ostream &out, const VkPipelineFragmentShadingRateStateCreateInfoKHR* structInfo, Decoded_VkPipelineFragmentShadingRateStateCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSwapchainPresentModeInfoKHR(std::ostream &out, const VkSwapchainPresentModeInfoKHR* structInfo, Decoded_VkSwapchainPresentModeInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string fragment_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->fragmentSize, - metaInfo->fragmentSize, - consumer); + std::string ppresent_modes_values; + std::string ppresent_modes_array = "NULL"; + if (structInfo->pPresentModes != NULL) { + for (uint32_t idx = 0; idx < structInfo->swapchainCount; idx++) { + ppresent_modes_values += util::ToString(structInfo->pPresentModes[idx]) + ", "; + } + ppresent_modes_array = "pPresentModes_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkPresentModeKHR " << ppresent_modes_array << "[] = {" << ppresent_modes_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << fragment_size_info_var << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->combinerOps[0]), 2) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineFragmentShadingRateStateCreateInfoKHR"); - out << "\t\t" << "VkPipelineFragmentShadingRateStateCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; + struct_body << "\t\t\t" << ppresent_modes_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "swapchainPresentModeInfoKHR"); + out << "\t\t" << "VkSwapchainPresentModeInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderingFragmentShadingRateAttachmentInfoKHR(std::ostream &out, const VkRenderingFragmentShadingRateAttachmentInfoKHR* structInfo, Decoded_VkRenderingFragmentShadingRateAttachmentInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSwapchainPresentModesCreateInfoKHR(std::ostream &out, const VkSwapchainPresentModesCreateInfoKHR* structInfo, Decoded_VkSwapchainPresentModesCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string shading_rate_attachment_texel_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->shadingRateAttachmentTexelSize, - metaInfo->shadingRateAttachmentTexelSize, - consumer); + std::string ppresent_modes_values; + std::string ppresent_modes_array = "NULL"; + if (structInfo->pPresentModes != NULL) { + for (uint32_t idx = 0; idx < structInfo->presentModeCount; idx++) { + ppresent_modes_values += util::ToString(structInfo->pPresentModes[idx]) + ", "; + } + ppresent_modes_array = "pPresentModes_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkPresentModeKHR " << ppresent_modes_array << "[] = {" << ppresent_modes_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->imageView) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->imageLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << shading_rate_attachment_texel_size_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderingFragmentShadingRateAttachmentInfoKHR"); - out << "\t\t" << "VkRenderingFragmentShadingRateAttachmentInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentModeCount << "," << std::endl; + struct_body << "\t\t\t" << ppresent_modes_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "swapchainPresentModesCreateInfoKHR"); + out << "\t\t" << "VkSwapchainPresentModesCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderQuadControlFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderQuadControlFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderQuadControlFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSwapchainPresentScalingCreateInfoKHR(std::ostream &out, const VkSwapchainPresentScalingCreateInfoKHR* structInfo, Decoded_VkSwapchainPresentScalingCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderQuadControl << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderQuadControlFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceShaderQuadControlFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPresentScalingFlagsKHR(" << structInfo->scalingBehavior << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPresentGravityFlagsKHR(" << structInfo->presentGravityX << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPresentGravityFlagsKHR(" << structInfo->presentGravityY << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "swapchainPresentScalingCreateInfoKHR"); + out << "\t\t" << "VkSwapchainPresentScalingCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfaceProtectedCapabilitiesKHR(std::ostream &out, const VkSurfaceProtectedCapabilitiesKHR* structInfo, Decoded_VkSurfaceProtectedCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCooperativeMatrixPropertiesKHR(std::ostream &out, const VkCooperativeMatrixPropertiesKHR* structInfo, Decoded_VkCooperativeMatrixPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->supportsProtected << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfaceProtectedCapabilitiesKHR"); - out << "\t\t" << "VkSurfaceProtectedCapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->MSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->NSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->KSize << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->AType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->BType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->CType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->ResultType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->saturatingAccumulation << "," << std::endl; + struct_body << "\t\t\t" << "VkScopeKHR(" << structInfo->scope << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "cooperativeMatrixPropertiesKHR"); + out << "\t\t" << "VkCooperativeMatrixPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePresentWaitFeaturesKHR(std::ostream &out, const VkPhysicalDevicePresentWaitFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePresentWaitFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceCooperativeMatrixFeaturesKHR(std::ostream &out, const VkPhysicalDeviceCooperativeMatrixFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentWait << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePresentWaitFeaturesKHR"); - out << "\t\t" << "VkPhysicalDevicePresentWaitFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->cooperativeMatrix << "," << std::endl; + struct_body << "\t\t\t" << structInfo->cooperativeMatrixRobustBufferAccess << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCooperativeMatrixFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceCooperativeMatrixFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(std::ostream &out, const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceCooperativeMatrixPropertiesKHR(std::ostream &out, const VkPhysicalDeviceCooperativeMatrixPropertiesKHR* structInfo, Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineExecutableInfo << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineExecutablePropertiesFeaturesKHR"); - out << "\t\t" << "VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->cooperativeMatrixSupportedStages << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCooperativeMatrixPropertiesKHR"); + out << "\t\t" << "VkPhysicalDeviceCooperativeMatrixPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineExecutableInfoKHR(std::ostream &out, const VkPipelineExecutableInfoKHR* structInfo, Decoded_VkPipelineExecutableInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR(std::ostream &out, const VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipeline) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->executableIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineExecutableInfoKHR"); - out << "\t\t" << "VkPipelineExecutableInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->computeDerivativeGroupQuads << "," << std::endl; + struct_body << "\t\t\t" << structInfo->computeDerivativeGroupLinear << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceComputeShaderDerivativesFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineExecutableInternalRepresentationKHR(std::ostream &out, const VkPipelineExecutableInternalRepresentationKHR* structInfo, Decoded_VkPipelineExecutableInternalRepresentationKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR(std::ostream &out, const VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR* structInfo, Decoded_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->name) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->isText << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dataSize << "," << std::endl; - out << "\t\t" << "// TODO: Support pData (output with array length value?) argument." << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineExecutableInternalRepresentationKHR"); - out << "\t\t" << "VkPipelineExecutableInternalRepresentationKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->meshAndTaskShaderDerivatives << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceComputeShaderDerivativesPropertiesKHR"); + out << "\t\t" << "VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkVideoDecodeAV1CapabilitiesKHR(std::ostream &out, const VkVideoDecodeAV1CapabilitiesKHR* structInfo, Decoded_VkVideoDecodeAV1CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "StdVideoAV1Level(" << structInfo->maxLevel << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeAV1CapabilitiesKHR"); + out << "\t\t" << "VkVideoDecodeAV1CapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineExecutablePropertiesKHR(std::ostream &out, const VkPipelineExecutablePropertiesKHR* structInfo, Decoded_VkPipelineExecutablePropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeAV1DpbSlotInfoKHR(std::ostream &out, const VkVideoDecodeAV1DpbSlotInfoKHR* structInfo, Decoded_VkVideoDecodeAV1DpbSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pstd_reference_info_struct = "NULL"; + if (structInfo->pStdReferenceInfo != NULL) { + pstd_reference_info_struct = GenerateStruct_StdVideoDecodeAV1ReferenceInfo(out, + structInfo->pStdReferenceInfo, + metaInfo->pStdReferenceInfo->GetMetaStructPointer(), + consumer); + pstd_reference_info_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->stages << ")" << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->name) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subgroupSize << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineExecutablePropertiesKHR"); - out << "\t\t" << "VkPipelineExecutablePropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pstd_reference_info_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeAV1DpbSlotInfoKHR"); + out << "\t\t" << "VkVideoDecodeAV1DpbSlotInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineExecutableStatisticKHR(std::ostream &out, const VkPipelineExecutableStatisticKHR* structInfo, Decoded_VkPipelineExecutableStatisticKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeAV1PictureInfoKHR(std::ostream &out, const VkVideoDecodeAV1PictureInfoKHR* structInfo, Decoded_VkVideoDecodeAV1PictureInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pstd_picture_info_struct = "NULL"; + if (structInfo->pStdPictureInfo != NULL) { + pstd_picture_info_struct = GenerateStruct_StdVideoDecodeAV1PictureInfo(out, + structInfo->pStdPictureInfo, + metaInfo->pStdPictureInfo->GetMetaStructPointer(), + consumer); + pstd_picture_info_struct.insert(0, "&"); + } + std::string ptile_offsets_array = "NULL"; + if (structInfo->pTileOffsets != NULL) { + ptile_offsets_array = "pTileOffsets_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << ptile_offsets_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pTileOffsets, structInfo->tileCount) << ";" << std::endl; + } + std::string ptile_sizes_array = "NULL"; + if (structInfo->pTileSizes != NULL) { + ptile_sizes_array = "pTileSizes_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << ptile_sizes_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pTileSizes, structInfo->tileCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->name) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineExecutableStatisticFormatKHR(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->value.b32 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineExecutableStatisticKHR"); - out << "\t\t" << "VkPipelineExecutableStatisticKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pstd_picture_info_struct << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->referenceNameSlotIndices[0]), VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->frameHeaderOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tileCount << "," << std::endl; + struct_body << "\t\t\t" << ptile_offsets_array << "," << std::endl; + struct_body << "\t\t\t" << ptile_sizes_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeAV1PictureInfoKHR"); + out << "\t\t" << "VkVideoDecodeAV1PictureInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineInfoKHR(std::ostream &out, const VkPipelineInfoKHR* structInfo, Decoded_VkPipelineInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeAV1ProfileInfoKHR(std::ostream &out, const VkVideoDecodeAV1ProfileInfoKHR* structInfo, Decoded_VkVideoDecodeAV1ProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipeline) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineInfoKHR"); - out << "\t\t" << "VkPipelineInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "StdVideoAV1Profile(" << structInfo->stdProfile << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->filmGrainSupport << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeAV1ProfileInfoKHR"); + out << "\t\t" << "VkVideoDecodeAV1ProfileInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineLibraryCreateInfoKHR(std::ostream &out, const VkPipelineLibraryCreateInfoKHR* structInfo, Decoded_VkPipelineLibraryCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeAV1SessionParametersCreateInfoKHR(std::ostream &out, const VkVideoDecodeAV1SessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoDecodeAV1SessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string plibraries_array = "NULL"; - if (metaInfo->pLibraries.GetPointer() != NULL && structInfo->libraryCount > 0) { - plibraries_array = "plibraries_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_PIPELINE)); - std::string plibraries_values = toStringJoin(metaInfo->pLibraries.GetPointer(), - metaInfo->pLibraries.GetPointer() + structInfo->libraryCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->libraryCount == 1) { - plibraries_array = "&" + plibraries_values; - } else if (structInfo->libraryCount > 1) { - out << "\t\t" << "VkPipeline " << plibraries_array << "[] = {" << plibraries_values << "};" << std::endl; - } + std::string pstd_sequence_header_struct = "NULL"; + if (structInfo->pStdSequenceHeader != NULL) { + pstd_sequence_header_struct = GenerateStruct_StdVideoAV1SequenceHeader(out, + structInfo->pStdSequenceHeader, + metaInfo->pStdSequenceHeader->GetMetaStructPointer(), + consumer); + pstd_sequence_header_struct.insert(0, "&"); } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->libraryCount << "," << std::endl; - struct_body << "\t\t\t" << plibraries_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineLibraryCreateInfoKHR"); - out << "\t\t" << "VkPipelineLibraryCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pstd_sequence_header_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeAV1SessionParametersCreateInfoKHR"); + out << "\t\t" << "VkVideoDecodeAV1SessionParametersCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePresentIdFeaturesKHR(std::ostream &out, const VkPhysicalDevicePresentIdFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePresentIdFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVideoEncodeAV1FeaturesKHR(std::ostream &out, const VkPhysicalDeviceVideoEncodeAV1FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceVideoEncodeAV1FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentId << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePresentIdFeaturesKHR"); - out << "\t\t" << "VkPhysicalDevicePresentIdFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->videoEncodeAV1 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoEncodeAV1FeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceVideoEncodeAV1FeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPresentIdKHR(std::ostream &out, const VkPresentIdKHR* structInfo, Decoded_VkPresentIdKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeAV1CapabilitiesKHR(std::ostream &out, const VkVideoEncodeAV1CapabilitiesKHR* structInfo, Decoded_VkVideoEncodeAV1CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ppresent_ids_array = "ppresent_ids_array_" + std::to_string(consumer.GetNextId()); - if (structInfo->swapchainCount > 0) { - std::string ppresent_ids_values = toStringJoin(structInfo->pPresentIds, - structInfo->pPresentIds + structInfo->swapchainCount, - [](uint64_t current) { return std::to_string(current); }, - ", "); - if (structInfo->swapchainCount == 1) { - ppresent_ids_array = "&" + ppresent_ids_values; - } else if (structInfo->swapchainCount > 1) { - out << "\t\t" << "uint64_t " << ppresent_ids_array << "[] = {" << ppresent_ids_values << "};" << std::endl; - } - } + std::string coded_picture_alignment_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->codedPictureAlignment, + metaInfo->codedPictureAlignment, + consumer); + std::string max_tiles_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxTiles, + metaInfo->maxTiles, + consumer); + std::string min_tile_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->minTileSize, + metaInfo->minTileSize, + consumer); + std::string max_tile_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxTileSize, + metaInfo->maxTileSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << ppresent_ids_array << " }" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "presentIdKHR"); - out << "\t\t" << "VkPresentIdKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeAV1CapabilityFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "StdVideoAV1Level(" << structInfo->maxLevel << ")" << "," << std::endl; + struct_body << "\t\t\t" << coded_picture_alignment_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_tiles_info_var << "," << std::endl; + struct_body << "\t\t\t" << min_tile_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_tile_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeAV1SuperblockSizeFlagsKHR(" << structInfo->superblockSizes << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSingleReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->singleReferenceNameMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxUnidirectionalCompoundReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxUnidirectionalCompoundGroup1ReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->unidirectionalCompoundReferenceNameMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxBidirectionalCompoundReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxBidirectionalCompoundGroup1ReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxBidirectionalCompoundGroup2ReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bidirectionalCompoundReferenceNameMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTemporalLayerCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSpatialLayerCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxOperatingPoints << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minQIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxQIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->prefersGopRemainingFrames << "," << std::endl; + struct_body << "\t\t\t" << structInfo->requiresGopRemainingFrames << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeAV1StdFlagsKHR(" << structInfo->stdSyntaxFlags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1CapabilitiesKHR"); + out << "\t\t" << "VkVideoEncodeAV1CapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR(std::ostream &out, const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* structInfo, Decoded_VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeAV1DpbSlotInfoKHR(std::ostream &out, const VkVideoEncodeAV1DpbSlotInfoKHR* structInfo, Decoded_VkVideoEncodeAV1DpbSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pvideo_profile_struct = "NULL"; - if (structInfo->pVideoProfile != NULL) { - pvideo_profile_struct = GenerateStruct_VkVideoProfileInfoKHR(out, - structInfo->pVideoProfile, - metaInfo->pVideoProfile->GetMetaStructPointer(), - consumer); - pvideo_profile_struct.insert(0, "&"); + std::string pstd_reference_info_struct = "NULL"; + if (structInfo->pStdReferenceInfo != NULL) { + pstd_reference_info_struct = GenerateStruct_StdVideoEncodeAV1ReferenceInfo(out, + structInfo->pStdReferenceInfo, + metaInfo->pStdReferenceInfo->GetMetaStructPointer(), + consumer); + pstd_reference_info_struct.insert(0, "&"); } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pvideo_profile_struct << "," << std::endl; - struct_body << "\t\t\t" << structInfo->qualityLevel << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoEncodeQualityLevelInfoKHR"); - out << "\t\t" << "VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pstd_reference_info_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1DpbSlotInfoKHR"); + out << "\t\t" << "VkVideoEncodeAV1DpbSlotInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkQueryPoolVideoEncodeFeedbackCreateInfoKHR(std::ostream &out, const VkQueryPoolVideoEncodeFeedbackCreateInfoKHR* structInfo, Decoded_VkQueryPoolVideoEncodeFeedbackCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeAV1FrameSizeKHR(std::ostream &out, const VkVideoEncodeAV1FrameSizeKHR* structInfo, Decoded_VkVideoEncodeAV1FrameSizeKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeFeedbackFlagsKHR(" << structInfo->encodeFeedbackFlags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "queryPoolVideoEncodeFeedbackCreateInfoKHR"); - out << "\t\t" << "VkQueryPoolVideoEncodeFeedbackCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->intraFrameSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->predictiveFrameSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bipredictiveFrameSize << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1FrameSizeKHR"); + out << "\t\t" << "VkVideoEncodeAV1FrameSizeKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeCapabilitiesKHR(std::ostream &out, const VkVideoEncodeCapabilitiesKHR* structInfo, Decoded_VkVideoEncodeCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeAV1GopRemainingFrameInfoKHR(std::ostream &out, const VkVideoEncodeAV1GopRemainingFrameInfoKHR* structInfo, Decoded_VkVideoEncodeAV1GopRemainingFrameInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string encode_input_picture_granularity_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->encodeInputPictureGranularity, - metaInfo->encodeInputPictureGranularity, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeCapabilityFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeRateControlModeFlagsKHR(" << structInfo->rateControlModes << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxRateControlLayers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxBitrate << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxQualityLevels << "," << std::endl; - struct_body << "\t\t\t" << encode_input_picture_granularity_info_var << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeFeedbackFlagsKHR(" << structInfo->supportedEncodeFeedbackFlags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeCapabilitiesKHR"); - out << "\t\t" << "VkVideoEncodeCapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->useGopRemainingFrames << "," << std::endl; + struct_body << "\t\t\t" << structInfo->gopRemainingIntra << "," << std::endl; + struct_body << "\t\t\t" << structInfo->gopRemainingPredictive << "," << std::endl; + struct_body << "\t\t\t" << structInfo->gopRemainingBipredictive << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1GopRemainingFrameInfoKHR"); + out << "\t\t" << "VkVideoEncodeAV1GopRemainingFrameInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } - - -std::string GenerateStruct_VkVideoEncodeInfoKHR(std::ostream &out, const VkVideoEncodeInfoKHR* structInfo, Decoded_VkVideoEncodeInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string src_picture_resource_info_var = GenerateStruct_VkVideoPictureResourceInfoKHR(out, - &structInfo->srcPictureResource, - metaInfo->srcPictureResource, - consumer); - std::string psetup_reference_slot_struct = "NULL"; - if (structInfo->pSetupReferenceSlot != NULL) { - psetup_reference_slot_struct = GenerateStruct_VkVideoReferenceSlotInfoKHR(out, - structInfo->pSetupReferenceSlot, - metaInfo->pSetupReferenceSlot->GetMetaStructPointer(), - consumer); - psetup_reference_slot_struct.insert(0, "&"); - } - std::string preference_slots_array = "NULL"; - if (structInfo->pReferenceSlots != NULL) { - preference_slots_array = "pReferenceSlots_" + std::to_string(consumer.GetNextId()); - std::string preference_slots_names; - for (uint32_t idx = 0; idx < structInfo->referenceSlotCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pReferenceSlots + idx != NULL) { - variable_name = GenerateStruct_VkVideoReferenceSlotInfoKHR(out, - structInfo->pReferenceSlots + idx, - metaInfo->pReferenceSlots->GetMetaStructPointer() + idx, - consumer); - } - preference_slots_names += variable_name + ", "; - } - out << "\t\t" << "VkVideoReferenceSlotInfoKHR " << preference_slots_array << "[] = {" << preference_slots_names << "};" << std::endl; + + +std::string GenerateStruct_VkVideoEncodeAV1PictureInfoKHR(std::ostream &out, const VkVideoEncodeAV1PictureInfoKHR* structInfo, Decoded_VkVideoEncodeAV1PictureInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pstd_picture_info_struct = "NULL"; + if (structInfo->pStdPictureInfo != NULL) { + pstd_picture_info_struct = GenerateStruct_StdVideoEncodeAV1PictureInfo(out, + structInfo->pStdPictureInfo, + metaInfo->pStdPictureInfo->GetMetaStructPointer(), + consumer); + pstd_picture_info_struct.insert(0, "&"); } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstBuffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstBufferOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstBufferRange << "UL" << "," << std::endl; - struct_body << "\t\t\t" << src_picture_resource_info_var << "," << std::endl; - struct_body << "\t\t\t" << psetup_reference_slot_struct << "," << std::endl; - struct_body << "\t\t\t" << structInfo->referenceSlotCount << "," << std::endl; - struct_body << "\t\t\t" << preference_slots_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->precedingExternallyEncodedBytes << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeInfoKHR"); - out << "\t\t" << "VkVideoEncodeInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeAV1PredictionModeKHR(" << structInfo->predictionMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeAV1RateControlGroupKHR(" << structInfo->rateControlGroup << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->constantQIndex << "," << std::endl; + struct_body << "\t\t\t" << pstd_picture_info_struct << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->referenceNameSlotIndices[0]), VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->primaryReferenceCdfOnly << "," << std::endl; + struct_body << "\t\t\t" << structInfo->generateObuExtensionHeader << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1PictureInfoKHR"); + out << "\t\t" << "VkVideoEncodeAV1PictureInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeQualityLevelInfoKHR(std::ostream &out, const VkVideoEncodeQualityLevelInfoKHR* structInfo, Decoded_VkVideoEncodeQualityLevelInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeAV1ProfileInfoKHR(std::ostream &out, const VkVideoEncodeAV1ProfileInfoKHR* structInfo, Decoded_VkVideoEncodeAV1ProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->qualityLevel << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeQualityLevelInfoKHR"); - out << "\t\t" << "VkVideoEncodeQualityLevelInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "StdVideoAV1Profile(" << structInfo->stdProfile << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1ProfileInfoKHR"); + out << "\t\t" << "VkVideoEncodeAV1ProfileInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeQualityLevelPropertiesKHR(std::ostream &out, const VkVideoEncodeQualityLevelPropertiesKHR* structInfo, Decoded_VkVideoEncodeQualityLevelPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeAV1QIndexKHR(std::ostream &out, const VkVideoEncodeAV1QIndexKHR* structInfo, Decoded_VkVideoEncodeAV1QIndexKHR* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + struct_body << "\t" << structInfo->intraQIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->predictiveQIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bipredictiveQIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1QIndexKHR"); + out << "\t\t" << "VkVideoEncodeAV1QIndexKHR " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkVideoEncodeAV1QualityLevelPropertiesKHR(std::ostream &out, const VkVideoEncodeAV1QualityLevelPropertiesKHR* structInfo, Decoded_VkVideoEncodeAV1QualityLevelPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string preferred_constant_q_index_info_var = GenerateStruct_VkVideoEncodeAV1QIndexKHR(out, + &structInfo->preferredConstantQIndex, + metaInfo->preferredConstantQIndex, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeRateControlModeFlagBitsKHR(" << structInfo->preferredRateControlMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredRateControlLayerCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeQualityLevelPropertiesKHR"); - out << "\t\t" << "VkVideoEncodeQualityLevelPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeAV1RateControlFlagsKHR(" << structInfo->preferredRateControlFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredGopFrameCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredKeyFramePeriod << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredConsecutiveBipredictiveFrameCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredTemporalLayerCount << "," << std::endl; + struct_body << "\t\t\t" << preferred_constant_q_index_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredMaxSingleReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredSingleReferenceNameMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredMaxUnidirectionalCompoundReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredMaxUnidirectionalCompoundGroup1ReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredUnidirectionalCompoundReferenceNameMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredMaxBidirectionalCompoundReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredMaxBidirectionalCompoundGroup1ReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredMaxBidirectionalCompoundGroup2ReferenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferredBidirectionalCompoundReferenceNameMask << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1QualityLevelPropertiesKHR"); + out << "\t\t" << "VkVideoEncodeAV1QualityLevelPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeRateControlInfoKHR(std::ostream &out, const VkVideoEncodeRateControlInfoKHR* structInfo, Decoded_VkVideoEncodeRateControlInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeAV1RateControlInfoKHR(std::ostream &out, const VkVideoEncodeAV1RateControlInfoKHR* structInfo, Decoded_VkVideoEncodeAV1RateControlInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string players_array = "NULL"; - if (structInfo->pLayers != NULL) { - players_array = "pLayers_" + std::to_string(consumer.GetNextId()); - std::string players_names; - for (uint32_t idx = 0; idx < structInfo->layerCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pLayers + idx != NULL) { - variable_name = GenerateStruct_VkVideoEncodeRateControlLayerInfoKHR(out, - structInfo->pLayers + idx, - metaInfo->pLayers->GetMetaStructPointer() + idx, - consumer); - } - players_names += variable_name + ", "; - } - out << "\t\t" << "VkVideoEncodeRateControlLayerInfoKHR " << players_array << "[] = {" << players_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeRateControlFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeRateControlModeFlagBitsKHR(" << structInfo->rateControlMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->layerCount << "," << std::endl; - struct_body << "\t\t\t" << players_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->virtualBufferSizeInMs << "," << std::endl; - struct_body << "\t\t\t" << structInfo->initialVirtualBufferSizeInMs << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeRateControlInfoKHR"); - out << "\t\t" << "VkVideoEncodeRateControlInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeAV1RateControlFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->gopFrameCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->keyFramePeriod << "," << std::endl; + struct_body << "\t\t\t" << structInfo->consecutiveBipredictiveFrameCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->temporalLayerCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1RateControlInfoKHR"); + out << "\t\t" << "VkVideoEncodeAV1RateControlInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeRateControlLayerInfoKHR(std::ostream &out, const VkVideoEncodeRateControlLayerInfoKHR* structInfo, Decoded_VkVideoEncodeRateControlLayerInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeAV1RateControlLayerInfoKHR(std::ostream &out, const VkVideoEncodeAV1RateControlLayerInfoKHR* structInfo, Decoded_VkVideoEncodeAV1RateControlLayerInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string min_q_index_info_var = GenerateStruct_VkVideoEncodeAV1QIndexKHR(out, + &structInfo->minQIndex, + metaInfo->minQIndex, + consumer); + std::string max_q_index_info_var = GenerateStruct_VkVideoEncodeAV1QIndexKHR(out, + &structInfo->maxQIndex, + metaInfo->maxQIndex, + consumer); + std::string max_frame_size_info_var = GenerateStruct_VkVideoEncodeAV1FrameSizeKHR(out, + &structInfo->maxFrameSize, + metaInfo->maxFrameSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->averageBitrate << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxBitrate << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->frameRateNumerator << "," << std::endl; - struct_body << "\t\t\t" << structInfo->frameRateDenominator << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeRateControlLayerInfoKHR"); - out << "\t\t" << "VkVideoEncodeRateControlLayerInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->useMinQIndex << "," << std::endl; + struct_body << "\t\t\t" << min_q_index_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->useMaxQIndex << "," << std::endl; + struct_body << "\t\t\t" << max_q_index_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->useMaxFrameSize << "," << std::endl; + struct_body << "\t\t\t" << max_frame_size_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1RateControlLayerInfoKHR"); + out << "\t\t" << "VkVideoEncodeAV1RateControlLayerInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeSessionParametersFeedbackInfoKHR(std::ostream &out, const VkVideoEncodeSessionParametersFeedbackInfoKHR* structInfo, Decoded_VkVideoEncodeSessionParametersFeedbackInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeAV1SessionCreateInfoKHR(std::ostream &out, const VkVideoEncodeAV1SessionCreateInfoKHR* structInfo, Decoded_VkVideoEncodeAV1SessionCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hasOverrides << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeSessionParametersFeedbackInfoKHR"); - out << "\t\t" << "VkVideoEncodeSessionParametersFeedbackInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->useMaxLevel << "," << std::endl; + struct_body << "\t\t\t" << "StdVideoAV1Level(" << structInfo->maxLevel << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1SessionCreateInfoKHR"); + out << "\t\t" << "VkVideoEncodeAV1SessionCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeSessionParametersGetInfoKHR(std::ostream &out, const VkVideoEncodeSessionParametersGetInfoKHR* structInfo, Decoded_VkVideoEncodeSessionParametersGetInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeAV1SessionParametersCreateInfoKHR(std::ostream &out, const VkVideoEncodeAV1SessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoEncodeAV1SessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pstd_sequence_header_struct = "NULL"; + if (structInfo->pStdSequenceHeader != NULL) { + pstd_sequence_header_struct = GenerateStruct_StdVideoAV1SequenceHeader(out, + structInfo->pStdSequenceHeader, + metaInfo->pStdSequenceHeader->GetMetaStructPointer(), + consumer); + pstd_sequence_header_struct.insert(0, "&"); + } + std::string pstd_decoder_model_info_struct = "NULL"; + if (structInfo->pStdDecoderModelInfo != NULL) { + pstd_decoder_model_info_struct = GenerateStruct_StdVideoEncodeAV1DecoderModelInfo(out, + structInfo->pStdDecoderModelInfo, + metaInfo->pStdDecoderModelInfo->GetMetaStructPointer(), + consumer); + pstd_decoder_model_info_struct.insert(0, "&"); + } + std::string pstd_operating_points_array = "NULL"; + if (structInfo->pStdOperatingPoints != NULL) { + pstd_operating_points_array = "pStdOperatingPoints_" + std::to_string(consumer.GetNextId()); + std::string pstd_operating_points_names; + for (uint32_t idx = 0; idx < structInfo->stdOperatingPointCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pStdOperatingPoints + idx != NULL) { + variable_name = GenerateStruct_StdVideoEncodeAV1OperatingPointInfo(out, + structInfo->pStdOperatingPoints + idx, + metaInfo->pStdOperatingPoints->GetMetaStructPointer() + idx, + consumer); + } + pstd_operating_points_names += variable_name + ", "; + } + out << "\t\t" << "StdVideoEncodeAV1OperatingPointInfo " << pstd_operating_points_array << "[] = {" << pstd_operating_points_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->videoSessionParameters) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeSessionParametersGetInfoKHR"); - out << "\t\t" << "VkVideoEncodeSessionParametersGetInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pstd_sequence_header_struct << "," << std::endl; + struct_body << "\t\t\t" << pstd_decoder_model_info_struct << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stdOperatingPointCount << "," << std::endl; + struct_body << "\t\t\t" << pstd_operating_points_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1SessionParametersCreateInfoKHR"); + out << "\t\t" << "VkVideoEncodeAV1SessionParametersCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeUsageInfoKHR(std::ostream &out, const VkVideoEncodeUsageInfoKHR* structInfo, Decoded_VkVideoEncodeUsageInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVideoDecodeVP9FeaturesKHR(std::ostream &out, const VkPhysicalDeviceVideoDecodeVP9FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceVideoDecodeVP9FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeUsageFlagsKHR(" << structInfo->videoUsageHints << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeContentFlagsKHR(" << structInfo->videoContentHints << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeTuningModeKHR(" << structInfo->tuningMode << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeUsageInfoKHR"); - out << "\t\t" << "VkVideoEncodeUsageInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->videoDecodeVP9 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoDecodeVP9FeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceVideoDecodeVP9FeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR(std::ostream &out, const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeVP9CapabilitiesKHR(std::ostream &out, const VkVideoDecodeVP9CapabilitiesKHR* structInfo, Decoded_VkVideoDecodeVP9CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShaderBarycentric << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShaderBarycentricFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "StdVideoVP9Level(" << structInfo->maxLevel << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeVP9CapabilitiesKHR"); + out << "\t\t" << "VkVideoDecodeVP9CapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR(std::ostream &out, const VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR* structInfo, Decoded_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeVP9PictureInfoKHR(std::ostream &out, const VkVideoDecodeVP9PictureInfoKHR* structInfo, Decoded_VkVideoDecodeVP9PictureInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pstd_picture_info_struct = "NULL"; + if (structInfo->pStdPictureInfo != NULL) { + pstd_picture_info_struct = GenerateStruct_StdVideoDecodeVP9PictureInfo(out, + structInfo->pStdPictureInfo, + metaInfo->pStdPictureInfo->GetMetaStructPointer(), + consumer); + pstd_picture_info_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->triStripVertexOrderIndependentOfProvokingVertex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShaderBarycentricPropertiesKHR"); - out << "\t\t" << "VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pstd_picture_info_struct << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->referenceNameSlotIndices[0]), VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->uncompressedHeaderOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->compressedHeaderOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tilesOffset << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeVP9PictureInfoKHR"); + out << "\t\t" << "VkVideoDecodeVP9PictureInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoDecodeVP9ProfileInfoKHR(std::ostream &out, const VkVideoDecodeVP9ProfileInfoKHR* structInfo, Decoded_VkVideoDecodeVP9ProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSubgroupUniformControlFlow << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "StdVideoVP9Profile(" << structInfo->stdProfile << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeVP9ProfileInfoKHR"); + out << "\t\t" << "VkVideoDecodeVP9ProfileInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR(std::ostream &out, const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVideoMaintenance1FeaturesKHR(std::ostream &out, const VkPhysicalDeviceVideoMaintenance1FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceVideoMaintenance1FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->workgroupMemoryExplicitLayout << "," << std::endl; - struct_body << "\t\t\t" << structInfo->workgroupMemoryExplicitLayoutScalarBlockLayout << "," << std::endl; - struct_body << "\t\t\t" << structInfo->workgroupMemoryExplicitLayout8BitAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->workgroupMemoryExplicitLayout16BitAccess << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->videoMaintenance1 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoMaintenance1FeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceVideoMaintenance1FeaturesKHR " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkVideoInlineQueryInfoKHR(std::ostream &out, const VkVideoInlineQueryInfoKHR* structInfo, Decoded_VkVideoInlineQueryInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->queryPool) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->firstQuery << "," << std::endl; + struct_body << "\t\t\t" << structInfo->queryCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoInlineQueryInfoKHR"); + out << "\t\t" << "VkVideoInlineQueryInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR(std::ostream &out, const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAttachmentFeedbackLoopInfoEXT(std::ostream &out, const VkAttachmentFeedbackLoopInfoEXT* structInfo, Decoded_VkAttachmentFeedbackLoopInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->rayTracingMaintenance1 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->rayTracingPipelineTraceRaysIndirect2 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingMaintenance1FeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->feedbackLoopEnable << ","; + std::string variable_name = consumer.AddStruct(struct_body, "attachmentFeedbackLoopInfoEXT"); + out << "\t\t" << "VkAttachmentFeedbackLoopInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkTraceRaysIndirectCommand2KHR(std::ostream &out, const VkTraceRaysIndirectCommand2KHR* structInfo, Decoded_VkTraceRaysIndirectCommand2KHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR(std::ostream &out, const VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->raygenShaderRecordAddress << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->raygenShaderRecordSize << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->missShaderBindingTableAddress << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->missShaderBindingTableSize << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->missShaderBindingTableStride << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hitShaderBindingTableAddress << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hitShaderBindingTableSize << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hitShaderBindingTableStride << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->callableShaderBindingTableAddress << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->callableShaderBindingTableSize << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->callableShaderBindingTableStride << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->width << "," << std::endl; - struct_body << "\t\t\t" << structInfo->height << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depth << ","; - std::string variable_name = consumer.AddStruct(struct_body, "traceRaysIndirectCommand2KHR"); - out << "\t\t" << "VkTraceRaysIndirectCommand2KHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->unifiedImageLayouts << "," << std::endl; + struct_body << "\t\t\t" << structInfo->unifiedImageLayoutsVideo << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceUnifiedImageLayoutsFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCalibratedTimestampInfoKHR(std::ostream &out, const VkCalibratedTimestampInfoKHR* structInfo, Decoded_VkCalibratedTimestampInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderMaximalReconvergence << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderMaximalReconvergenceFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkTimeDomainKHR(" << structInfo->timeDomain << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "calibratedTimestampInfoKHR"); + out << "\t\t" << "VkCalibratedTimestampInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePresentId2FeaturesKHR(std::ostream &out, const VkPhysicalDevicePresentId2FeaturesKHR* structInfo, Decoded_VkPhysicalDevicePresentId2FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindDescriptorBufferEmbeddedSamplersInfoEXT(std::ostream &out, const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* structInfo, Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentId2 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePresentId2FeaturesKHR"); - out << "\t\t" << "VkPhysicalDevicePresentId2FeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->stageFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->set << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindDescriptorBufferEmbeddedSamplersInfoEXT"); + out << "\t\t" << "VkBindDescriptorBufferEmbeddedSamplersInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPresentId2KHR(std::ostream &out, const VkPresentId2KHR* structInfo, Decoded_VkPresentId2KHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSetDescriptorBufferOffsetsInfoEXT(std::ostream &out, const VkSetDescriptorBufferOffsetsInfoEXT* structInfo, Decoded_VkSetDescriptorBufferOffsetsInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ppresent_ids_array = "ppresent_ids_array_" + std::to_string(consumer.GetNextId()); - if (structInfo->swapchainCount > 0) { - std::string ppresent_ids_values = toStringJoin(structInfo->pPresentIds, - structInfo->pPresentIds + structInfo->swapchainCount, - [](uint64_t current) { return std::to_string(current); }, - ", "); - if (structInfo->swapchainCount == 1) { - ppresent_ids_array = "&" + ppresent_ids_values; - } else if (structInfo->swapchainCount > 1) { - out << "\t\t" << "uint64_t " << ppresent_ids_array << "[] = {" << ppresent_ids_values << "};" << std::endl; + std::string pbuffer_indices_array = "NULL"; + if (structInfo->pBufferIndices != NULL) { + pbuffer_indices_array = "pBufferIndices_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pbuffer_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pBufferIndices, structInfo->setCount) << ";" << std::endl; + } + std::string poffsets_array = "poffsets_array_" + std::to_string(consumer.GetNextId()); + if (structInfo->setCount > 0) { + std::string poffsets_values = toStringJoin(structInfo->pOffsets, + structInfo->pOffsets + structInfo->setCount, + [](VkDeviceSize current) { return std::to_string(current); }, + ", "); + if (structInfo->setCount == 1) { + poffsets_array = "&" + poffsets_values; + } else if (structInfo->setCount > 1) { + out << "\t\t" << "VkDeviceSize " << poffsets_array << "[] = {" << poffsets_values << "};" << std::endl; } } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << ppresent_ids_array << " }" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "presentId2KHR"); - out << "\t\t" << "VkPresentId2KHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->stageFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->firstSet << "," << std::endl; + struct_body << "\t\t\t" << structInfo->setCount << "," << std::endl; + struct_body << "\t\t\t" << pbuffer_indices_array << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << poffsets_array << " }" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "setDescriptorBufferOffsetsInfoEXT"); + out << "\t\t" << "VkSetDescriptorBufferOffsetsInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfaceCapabilitiesPresentId2KHR(std::ostream &out, const VkSurfaceCapabilitiesPresentId2KHR* structInfo, Decoded_VkSurfaceCapabilitiesPresentId2KHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCopyMemoryIndirectCommandKHR(std::ostream &out, const VkCopyMemoryIndirectCommandKHR* structInfo, Decoded_VkCopyMemoryIndirectCommandKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentId2Supported << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfaceCapabilitiesPresentId2KHR"); - out << "\t\t" << "VkSurfaceCapabilitiesPresentId2KHR " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->srcAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "copyMemoryIndirectCommandKHR"); + out << "\t\t" << "VkCopyMemoryIndirectCommandKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePresentWait2FeaturesKHR(std::ostream &out, const VkPhysicalDevicePresentWait2FeaturesKHR* structInfo, Decoded_VkPhysicalDevicePresentWait2FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCopyMemoryIndirectInfoKHR(std::ostream &out, const VkCopyMemoryIndirectInfoKHR* structInfo, Decoded_VkCopyMemoryIndirectInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string copy_address_range_info_var = GenerateStruct_VkStridedDeviceAddressRangeKHR(out, + &structInfo->copyAddressRange, + metaInfo->copyAddressRange, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentWait2 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePresentWait2FeaturesKHR"); - out << "\t\t" << "VkPhysicalDevicePresentWait2FeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkAddressCopyFlagsKHR(" << structInfo->srcCopyFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAddressCopyFlagsKHR(" << structInfo->dstCopyFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->copyCount << "," << std::endl; + struct_body << "\t\t\t" << copy_address_range_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "copyMemoryIndirectInfoKHR"); + out << "\t\t" << "VkCopyMemoryIndirectInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPresentWait2InfoKHR(std::ostream &out, const VkPresentWait2InfoKHR* structInfo, Decoded_VkPresentWait2InfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCopyMemoryToImageIndirectCommandKHR(std::ostream &out, const VkCopyMemoryToImageIndirectCommandKHR* structInfo, Decoded_VkCopyMemoryToImageIndirectCommandKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentId << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->timeout << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "presentWait2InfoKHR"); - out << "\t\t" << "VkPresentWait2InfoKHR " << variable_name << " {" << std::endl; + std::string image_subresource_info_var = GenerateStruct_VkImageSubresourceLayers(out, + &structInfo->imageSubresource, + metaInfo->imageSubresource, + consumer); + std::string image_offset_info_var = GenerateStruct_VkOffset3D(out, + &structInfo->imageOffset, + metaInfo->imageOffset, + consumer); + std::string image_extent_info_var = GenerateStruct_VkExtent3D(out, + &structInfo->imageExtent, + metaInfo->imageExtent, + consumer); + struct_body << "\t" << structInfo->srcAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferRowLength << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferImageHeight << "," << std::endl; + struct_body << "\t\t\t" << image_subresource_info_var << "," << std::endl; + struct_body << "\t\t\t" << image_offset_info_var << "," << std::endl; + struct_body << "\t\t\t" << image_extent_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "copyMemoryToImageIndirectCommandKHR"); + out << "\t\t" << "VkCopyMemoryToImageIndirectCommandKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfaceCapabilitiesPresentWait2KHR(std::ostream &out, const VkSurfaceCapabilitiesPresentWait2KHR* structInfo, Decoded_VkSurfaceCapabilitiesPresentWait2KHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCopyMemoryToImageIndirectInfoKHR(std::ostream &out, const VkCopyMemoryToImageIndirectInfoKHR* structInfo, Decoded_VkCopyMemoryToImageIndirectInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string copy_address_range_info_var = GenerateStruct_VkStridedDeviceAddressRangeKHR(out, + &structInfo->copyAddressRange, + metaInfo->copyAddressRange, + consumer); + std::string pimage_subresources_array = "NULL"; + if (structInfo->pImageSubresources != NULL) { + pimage_subresources_array = "pImageSubresources_" + std::to_string(consumer.GetNextId()); + std::string pimage_subresources_names; + for (uint32_t idx = 0; idx < structInfo->copyCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pImageSubresources + idx != NULL) { + variable_name = GenerateStruct_VkImageSubresourceLayers(out, + structInfo->pImageSubresources + idx, + metaInfo->pImageSubresources->GetMetaStructPointer() + idx, + consumer); + } + pimage_subresources_names += variable_name + ", "; + } + out << "\t\t" << "VkImageSubresourceLayers " << pimage_subresources_array << "[] = {" << pimage_subresources_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentWait2Supported << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfaceCapabilitiesPresentWait2KHR"); - out << "\t\t" << "VkSurfaceCapabilitiesPresentWait2KHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkAddressCopyFlagsKHR(" << structInfo->srcCopyFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->copyCount << "," << std::endl; + struct_body << "\t\t\t" << copy_address_range_info_var << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstImage) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->dstImageLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << pimage_subresources_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "copyMemoryToImageIndirectInfoKHR"); + out << "\t\t" << "VkCopyMemoryToImageIndirectInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR(std::ostream &out, const VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR(std::ostream &out, const VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->rayTracingPositionFetch << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingPositionFetchFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->indirectMemoryCopy << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indirectMemoryToImageCopy << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCopyMemoryIndirectFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDevicePipelineBinaryInternalCacheControlKHR(std::ostream &out, const VkDevicePipelineBinaryInternalCacheControlKHR* structInfo, Decoded_VkDevicePipelineBinaryInternalCacheControlKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR(std::ostream &out, const VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR* structInfo, Decoded_VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->disableInternalCache << ","; - std::string variable_name = consumer.AddStruct(struct_body, "devicePipelineBinaryInternalCacheControlKHR"); - out << "\t\t" << "VkDevicePipelineBinaryInternalCacheControlKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkQueueFlags(" << structInfo->supportedQueues << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCopyMemoryIndirectPropertiesKHR"); + out << "\t\t" << "VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePipelineBinaryFeaturesKHR(std::ostream &out, const VkPhysicalDevicePipelineBinaryFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePipelineBinaryFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkStridedDeviceAddressRangeKHR(std::ostream &out, const VkStridedDeviceAddressRangeKHR* structInfo, Decoded_VkStridedDeviceAddressRangeKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineBinaries << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineBinaryFeaturesKHR"); - out << "\t\t" << "VkPhysicalDevicePipelineBinaryFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->address << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stride << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "stridedDeviceAddressRangeKHR"); + out << "\t\t" << "VkStridedDeviceAddressRangeKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePipelineBinaryPropertiesKHR(std::ostream &out, const VkPhysicalDevicePipelineBinaryPropertiesKHR* structInfo, Decoded_VkPhysicalDevicePipelineBinaryPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR(std::ostream &out, const VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineBinaryInternalCache << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineBinaryInternalCacheControl << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineBinaryPrefersInternalCache << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineBinaryPrecompiledInternalCache << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineBinaryCompressedData << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineBinaryPropertiesKHR"); - out << "\t\t" << "VkPhysicalDevicePipelineBinaryPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->videoEncodeIntraRefresh << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoEncodeIntraRefreshFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineBinaryCreateInfoKHR(std::ostream &out, const VkPipelineBinaryCreateInfoKHR* structInfo, Decoded_VkPipelineBinaryCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeIntraRefreshCapabilitiesKHR(std::ostream &out, const VkVideoEncodeIntraRefreshCapabilitiesKHR* structInfo, Decoded_VkVideoEncodeIntraRefreshCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pkeys_and_data_info_struct = "NULL"; - if (structInfo->pKeysAndDataInfo != NULL) { - pkeys_and_data_info_struct = GenerateStruct_VkPipelineBinaryKeysAndDataKHR(out, - structInfo->pKeysAndDataInfo, - metaInfo->pKeysAndDataInfo->GetMetaStructPointer(), - consumer); - pkeys_and_data_info_struct.insert(0, "&"); - } - std::string ppipeline_create_info_struct = "NULL"; - if (structInfo->pPipelineCreateInfo != NULL) { - ppipeline_create_info_struct = GenerateStruct_VkPipelineCreateInfoKHR(out, - structInfo->pPipelineCreateInfo, - metaInfo->pPipelineCreateInfo->GetMetaStructPointer(), - consumer); - ppipeline_create_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pkeys_and_data_info_struct << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipeline) << "," << std::endl; - struct_body << "\t\t\t" << ppipeline_create_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineBinaryCreateInfoKHR"); - out << "\t\t" << "VkPipelineBinaryCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeIntraRefreshModeFlagsKHR(" << structInfo->intraRefreshModes << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxIntraRefreshCycleDuration << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxIntraRefreshActiveReferencePictures << "," << std::endl; + struct_body << "\t\t\t" << structInfo->partitionIndependentIntraRefreshRegions << "," << std::endl; + struct_body << "\t\t\t" << structInfo->nonRectangularIntraRefreshRegions << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeIntraRefreshCapabilitiesKHR"); + out << "\t\t" << "VkVideoEncodeIntraRefreshCapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineBinaryDataInfoKHR(std::ostream &out, const VkPipelineBinaryDataInfoKHR* structInfo, Decoded_VkPipelineBinaryDataInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeIntraRefreshInfoKHR(std::ostream &out, const VkVideoEncodeIntraRefreshInfoKHR* structInfo, Decoded_VkVideoEncodeIntraRefreshInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipelineBinary) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineBinaryDataInfoKHR"); - out << "\t\t" << "VkPipelineBinaryDataInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->intraRefreshCycleDuration << "," << std::endl; + struct_body << "\t\t\t" << structInfo->intraRefreshIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeIntraRefreshInfoKHR"); + out << "\t\t" << "VkVideoEncodeIntraRefreshInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineBinaryDataKHR(std::ostream &out, const VkPipelineBinaryDataKHR* structInfo, Decoded_VkPipelineBinaryDataKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeSessionIntraRefreshCreateInfoKHR(std::ostream &out, const VkVideoEncodeSessionIntraRefreshCreateInfoKHR* structInfo, Decoded_VkVideoEncodeSessionIntraRefreshCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->dataSize << "," << std::endl; - out << "\t\t" << "// TODO: Support pData (output with array length value?) argument." << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineBinaryDataKHR"); - out << "\t\t" << "VkPipelineBinaryDataKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeIntraRefreshModeFlagBitsKHR(" << structInfo->intraRefreshMode << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeSessionIntraRefreshCreateInfoKHR"); + out << "\t\t" << "VkVideoEncodeSessionIntraRefreshCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineBinaryHandlesInfoKHR(std::ostream &out, const VkPipelineBinaryHandlesInfoKHR* structInfo, Decoded_VkPipelineBinaryHandlesInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoReferenceIntraRefreshInfoKHR(std::ostream &out, const VkVideoReferenceIntraRefreshInfoKHR* structInfo, Decoded_VkVideoReferenceIntraRefreshInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineBinaryCount << "," << std::endl; - out << "\t\t" << "// TODO: Support pPipelineBinaries (output with array length value?) argument." << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineBinaryHandlesInfoKHR"); - out << "\t\t" << "VkPipelineBinaryHandlesInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->dirtyIntraRefreshRegions << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoReferenceIntraRefreshInfoKHR"); + out << "\t\t" << "VkVideoReferenceIntraRefreshInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineBinaryInfoKHR(std::ostream &out, const VkPipelineBinaryInfoKHR* structInfo, Decoded_VkPipelineBinaryInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ppipeline_binaries_array = "NULL"; - if (metaInfo->pPipelineBinaries.GetPointer() != NULL && structInfo->binaryCount > 0) { - ppipeline_binaries_array = "ppipeline_binaries_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_PIPELINE_BINARY_KHR)); - std::string ppipeline_binaries_values = toStringJoin(metaInfo->pPipelineBinaries.GetPointer(), - metaInfo->pPipelineBinaries.GetPointer() + structInfo->binaryCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->binaryCount == 1) { - ppipeline_binaries_array = "&" + ppipeline_binaries_values; - } else if (structInfo->binaryCount > 1) { - out << "\t\t" << "VkPipelineBinaryKHR " << ppipeline_binaries_array << "[] = {" << ppipeline_binaries_values << "};" << std::endl; - } - } +std::string GenerateStruct_VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR(std::ostream &out, const VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->binaryCount << "," << std::endl; - struct_body << "\t\t\t" << ppipeline_binaries_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineBinaryInfoKHR"); - out << "\t\t" << "VkPipelineBinaryInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->videoEncodeQuantizationMap << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoEncodeQuantizationMapFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineBinaryKeyKHR(std::ostream &out, const VkPipelineBinaryKeyKHR* structInfo, Decoded_VkPipelineBinaryKeyKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeAV1QuantizationMapCapabilitiesKHR(std::ostream &out, const VkVideoEncodeAV1QuantizationMapCapabilitiesKHR* structInfo, Decoded_VkVideoEncodeAV1QuantizationMapCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->keySize << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->key[0]), VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineBinaryKeyKHR"); - out << "\t\t" << "VkPipelineBinaryKeyKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->minQIndexDelta << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxQIndexDelta << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1QuantizationMapCapabilitiesKHR"); + out << "\t\t" << "VkVideoEncodeAV1QuantizationMapCapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineBinaryKeysAndDataKHR(std::ostream &out, const VkPipelineBinaryKeysAndDataKHR* structInfo, Decoded_VkPipelineBinaryKeysAndDataKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH264QuantizationMapCapabilitiesKHR(std::ostream &out, const VkVideoEncodeH264QuantizationMapCapabilitiesKHR* structInfo, Decoded_VkVideoEncodeH264QuantizationMapCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string ppipeline_binary_keys_array = "NULL"; - if (structInfo->pPipelineBinaryKeys != NULL) { - ppipeline_binary_keys_array = "pPipelineBinaryKeys_" + std::to_string(consumer.GetNextId()); - std::string ppipeline_binary_keys_names; - for (uint32_t idx = 0; idx < structInfo->binaryCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pPipelineBinaryKeys + idx != NULL) { - variable_name = GenerateStruct_VkPipelineBinaryKeyKHR(out, - structInfo->pPipelineBinaryKeys + idx, - metaInfo->pPipelineBinaryKeys->GetMetaStructPointer() + idx, - consumer); - } - ppipeline_binary_keys_names += variable_name + ", "; - } - out << "\t\t" << "VkPipelineBinaryKeyKHR " << ppipeline_binary_keys_array << "[] = {" << ppipeline_binary_keys_names << "};" << std::endl; - } - std::string ppipeline_binary_data_array = "NULL"; - if (structInfo->pPipelineBinaryData != NULL) { - ppipeline_binary_data_array = "pPipelineBinaryData_" + std::to_string(consumer.GetNextId()); - std::string ppipeline_binary_data_names; - for (uint32_t idx = 0; idx < structInfo->binaryCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pPipelineBinaryData + idx != NULL) { - variable_name = GenerateStruct_VkPipelineBinaryDataKHR(out, - structInfo->pPipelineBinaryData + idx, - metaInfo->pPipelineBinaryData->GetMetaStructPointer() + idx, - consumer); - } - ppipeline_binary_data_names += variable_name + ", "; - } - out << "\t\t" << "VkPipelineBinaryDataKHR " << ppipeline_binary_data_array << "[] = {" << ppipeline_binary_data_names << "};" << std::endl; - } - struct_body << "\t" << structInfo->binaryCount << "," << std::endl; - struct_body << "\t\t\t" << ppipeline_binary_keys_array << "," << std::endl; - struct_body << "\t\t\t" << ppipeline_binary_data_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineBinaryKeysAndDataKHR"); - out << "\t\t" << "VkPipelineBinaryKeysAndDataKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minQpDelta << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxQpDelta << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264QuantizationMapCapabilitiesKHR"); + out << "\t\t" << "VkVideoEncodeH264QuantizationMapCapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineCreateInfoKHR(std::ostream &out, const VkPipelineCreateInfoKHR* structInfo, Decoded_VkPipelineCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeH265QuantizationMapCapabilitiesKHR(std::ostream &out, const VkVideoEncodeH265QuantizationMapCapabilitiesKHR* structInfo, Decoded_VkVideoEncodeH265QuantizationMapCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineCreateInfoKHR"); - out << "\t\t" << "VkPipelineCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minQpDelta << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxQpDelta << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265QuantizationMapCapabilitiesKHR"); + out << "\t\t" << "VkVideoEncodeH265QuantizationMapCapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkReleaseCapturedPipelineDataInfoKHR(std::ostream &out, const VkReleaseCapturedPipelineDataInfoKHR* structInfo, Decoded_VkReleaseCapturedPipelineDataInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeQuantizationMapCapabilitiesKHR(std::ostream &out, const VkVideoEncodeQuantizationMapCapabilitiesKHR* structInfo, Decoded_VkVideoEncodeQuantizationMapCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string max_quantization_map_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxQuantizationMapExtent, + metaInfo->maxQuantizationMapExtent, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipeline) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "releaseCapturedPipelineDataInfoKHR"); - out << "\t\t" << "VkReleaseCapturedPipelineDataInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << max_quantization_map_extent_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeQuantizationMapCapabilitiesKHR"); + out << "\t\t" << "VkVideoEncodeQuantizationMapCapabilitiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfacePresentModeCompatibilityKHR(std::ostream &out, const VkSurfacePresentModeCompatibilityKHR* structInfo, Decoded_VkSurfacePresentModeCompatibilityKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeQuantizationMapInfoKHR(std::ostream &out, const VkVideoEncodeQuantizationMapInfoKHR* structInfo, Decoded_VkVideoEncodeQuantizationMapInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ppresent_modes_array = "NULL"; - if (structInfo->pPresentModes != NULL) { - std::string ppresent_modes_values; - for (uint32_t idx = 0; idx < structInfo->presentModeCount; idx++) { - ppresent_modes_values += util::ToString(structInfo->pPresentModes[idx]) + ", "; - } - ppresent_modes_array = "pPresentModes_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkPresentModeKHR " << ppresent_modes_array << "[] = {" << ppresent_modes_values << "};" << std::endl; - } + std::string quantization_map_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->quantizationMapExtent, + metaInfo->quantizationMapExtent, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentModeCount << "," << std::endl; - struct_body << "\t\t\t" << ppresent_modes_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfacePresentModeCompatibilityKHR"); - out << "\t\t" << "VkSurfacePresentModeCompatibilityKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->quantizationMap) << "," << std::endl; + struct_body << "\t\t\t" << quantization_map_extent_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeQuantizationMapInfoKHR"); + out << "\t\t" << "VkVideoEncodeQuantizationMapInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfacePresentModeKHR(std::ostream &out, const VkSurfacePresentModeKHR* structInfo, Decoded_VkSurfacePresentModeKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR(std::ostream &out, const VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string quantization_map_texel_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->quantizationMapTexelSize, + metaInfo->quantizationMapTexelSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPresentModeKHR(" << structInfo->presentMode << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfacePresentModeKHR"); - out << "\t\t" << "VkSurfacePresentModeKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << quantization_map_texel_size_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeQuantizationMapSessionParametersCreateInfoKHR"); + out << "\t\t" << "VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfacePresentScalingCapabilitiesKHR(std::ostream &out, const VkSurfacePresentScalingCapabilitiesKHR* structInfo, Decoded_VkSurfacePresentScalingCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoFormatAV1QuantizationMapPropertiesKHR(std::ostream &out, const VkVideoFormatAV1QuantizationMapPropertiesKHR* structInfo, Decoded_VkVideoFormatAV1QuantizationMapPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string min_scaled_image_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->minScaledImageExtent, - metaInfo->minScaledImageExtent, - consumer); - std::string max_scaled_image_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxScaledImageExtent, - metaInfo->maxScaledImageExtent, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPresentScalingFlagsKHR(" << structInfo->supportedPresentScaling << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPresentGravityFlagsKHR(" << structInfo->supportedPresentGravityX << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPresentGravityFlagsKHR(" << structInfo->supportedPresentGravityY << ")" << "," << std::endl; - struct_body << "\t\t\t" << min_scaled_image_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_scaled_image_extent_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfacePresentScalingCapabilitiesKHR"); - out << "\t\t" << "VkSurfacePresentScalingCapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeAV1SuperblockSizeFlagsKHR(" << structInfo->compatibleSuperblockSizes << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoFormatAV1QuantizationMapPropertiesKHR"); + out << "\t\t" << "VkVideoFormatAV1QuantizationMapPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR(std::ostream &out, const VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoFormatH265QuantizationMapPropertiesKHR(std::ostream &out, const VkVideoFormatH265QuantizationMapPropertiesKHR* structInfo, Decoded_VkVideoFormatH265QuantizationMapPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->swapchainMaintenance1 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSwapchainMaintenance1FeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeH265CtbSizeFlagsKHR(" << structInfo->compatibleCtbSizes << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoFormatH265QuantizationMapPropertiesKHR"); + out << "\t\t" << "VkVideoFormatH265QuantizationMapPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkReleaseSwapchainImagesInfoKHR(std::ostream &out, const VkReleaseSwapchainImagesInfoKHR* structInfo, Decoded_VkReleaseSwapchainImagesInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoFormatQuantizationMapPropertiesKHR(std::ostream &out, const VkVideoFormatQuantizationMapPropertiesKHR* structInfo, Decoded_VkVideoFormatQuantizationMapPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pimage_indices_array = "NULL"; - if (structInfo->pImageIndices != NULL) { - pimage_indices_array = "pImageIndices_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pimage_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pImageIndices, structInfo->imageIndexCount) << ";" << std::endl; - } + std::string quantization_map_texel_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->quantizationMapTexelSize, + metaInfo->quantizationMapTexelSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->swapchain) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageIndexCount << "," << std::endl; - struct_body << "\t\t\t" << pimage_indices_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "releaseSwapchainImagesInfoKHR"); - out << "\t\t" << "VkReleaseSwapchainImagesInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << quantization_map_texel_size_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoFormatQuantizationMapPropertiesKHR"); + out << "\t\t" << "VkVideoFormatQuantizationMapPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSwapchainPresentFenceInfoKHR(std::ostream &out, const VkSwapchainPresentFenceInfoKHR* structInfo, Decoded_VkSwapchainPresentFenceInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pfences_array = "NULL"; - if (metaInfo->pFences.GetPointer() != NULL && structInfo->swapchainCount > 0) { - pfences_array = "pfences_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_FENCE)); - std::string pfences_values = toStringJoin(metaInfo->pFences.GetPointer(), - metaInfo->pFences.GetPointer() + structInfo->swapchainCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->swapchainCount == 1) { - pfences_array = "&" + pfences_values; - } else if (structInfo->swapchainCount > 1) { - out << "\t\t" << "VkFence " << pfences_array << "[] = {" << pfences_values << "};" << std::endl; - } - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; - struct_body << "\t\t\t" << pfences_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "swapchainPresentFenceInfoKHR"); - out << "\t\t" << "VkSwapchainPresentFenceInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderRelaxedExtendedInstruction << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSwapchainPresentModeInfoKHR(std::ostream &out, const VkSwapchainPresentModeInfoKHR* structInfo, Decoded_VkSwapchainPresentModeInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceLayeredApiPropertiesKHR(std::ostream &out, const VkPhysicalDeviceLayeredApiPropertiesKHR* structInfo, Decoded_VkPhysicalDeviceLayeredApiPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ppresent_modes_values; - std::string ppresent_modes_array = "NULL"; - if (structInfo->pPresentModes != NULL) { - for (uint32_t idx = 0; idx < structInfo->swapchainCount; idx++) { - ppresent_modes_values += util::ToString(structInfo->pPresentModes[idx]) + ", "; - } - ppresent_modes_array = "pPresentModes_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkPresentModeKHR " << ppresent_modes_array << "[] = {" << ppresent_modes_values << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; - struct_body << "\t\t\t" << ppresent_modes_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "swapchainPresentModeInfoKHR"); - out << "\t\t" << "VkSwapchainPresentModeInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->vendorID << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceID << "," << std::endl; + struct_body << "\t\t\t" << "VkPhysicalDeviceLayeredApiKHR(" << structInfo->layeredAPI << ")" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->deviceName) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLayeredApiPropertiesKHR"); + out << "\t\t" << "VkPhysicalDeviceLayeredApiPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSwapchainPresentModesCreateInfoKHR(std::ostream &out, const VkSwapchainPresentModesCreateInfoKHR* structInfo, Decoded_VkSwapchainPresentModesCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceLayeredApiPropertiesListKHR(std::ostream &out, const VkPhysicalDeviceLayeredApiPropertiesListKHR* structInfo, Decoded_VkPhysicalDeviceLayeredApiPropertiesListKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ppresent_modes_values; - std::string ppresent_modes_array = "NULL"; - if (structInfo->pPresentModes != NULL) { - for (uint32_t idx = 0; idx < structInfo->presentModeCount; idx++) { - ppresent_modes_values += util::ToString(structInfo->pPresentModes[idx]) + ", "; + std::string playered_apis_array = "NULL"; + if (structInfo->pLayeredApis != NULL) { + playered_apis_array = "pLayeredApis_" + std::to_string(consumer.GetNextId()); + std::string playered_apis_names; + for (uint32_t idx = 0; idx < structInfo->layeredApiCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pLayeredApis + idx != NULL) { + variable_name = GenerateStruct_VkPhysicalDeviceLayeredApiPropertiesKHR(out, + structInfo->pLayeredApis + idx, + metaInfo->pLayeredApis->GetMetaStructPointer() + idx, + consumer); + } + playered_apis_names += variable_name + ", "; } - ppresent_modes_array = "pPresentModes_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkPresentModeKHR " << ppresent_modes_array << "[] = {" << ppresent_modes_values << "};" << std::endl; + out << "\t\t" << "VkPhysicalDeviceLayeredApiPropertiesKHR " << playered_apis_array << "[] = {" << playered_apis_names << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentModeCount << "," << std::endl; - struct_body << "\t\t\t" << ppresent_modes_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "swapchainPresentModesCreateInfoKHR"); - out << "\t\t" << "VkSwapchainPresentModesCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->layeredApiCount << "," << std::endl; + struct_body << "\t\t\t" << playered_apis_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLayeredApiPropertiesListKHR"); + out << "\t\t" << "VkPhysicalDeviceLayeredApiPropertiesListKHR " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR(std::ostream &out, const VkPhysicalDeviceLayeredApiVulkanPropertiesKHR* structInfo, Decoded_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string properties_info_var = GenerateStruct_VkPhysicalDeviceProperties2(out, + &structInfo->properties, + metaInfo->properties, + consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << properties_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLayeredApiVulkanPropertiesKHR"); + out << "\t\t" << "VkPhysicalDeviceLayeredApiVulkanPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSwapchainPresentScalingCreateInfoKHR(std::ostream &out, const VkSwapchainPresentScalingCreateInfoKHR* structInfo, Decoded_VkSwapchainPresentScalingCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMaintenance7FeaturesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance7FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance7FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPresentScalingFlagsKHR(" << structInfo->scalingBehavior << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPresentGravityFlagsKHR(" << structInfo->presentGravityX << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPresentGravityFlagsKHR(" << structInfo->presentGravityY << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "swapchainPresentScalingCreateInfoKHR"); - out << "\t\t" << "VkSwapchainPresentScalingCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maintenance7 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance7FeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceMaintenance7FeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCooperativeMatrixPropertiesKHR(std::ostream &out, const VkCooperativeMatrixPropertiesKHR* structInfo, Decoded_VkCooperativeMatrixPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMaintenance7PropertiesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance7PropertiesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance7PropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->MSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->NSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->KSize << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->AType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->BType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->CType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->ResultType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->saturatingAccumulation << "," << std::endl; - struct_body << "\t\t\t" << "VkScopeKHR(" << structInfo->scope << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "cooperativeMatrixPropertiesKHR"); - out << "\t\t" << "VkCooperativeMatrixPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->robustFragmentShadingRateAttachmentAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->separateDepthStencilAttachmentAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetTotalUniformBuffersDynamic << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetTotalStorageBuffersDynamic << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetTotalBuffersDynamic << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindTotalBuffersDynamic << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance7PropertiesKHR"); + out << "\t\t" << "VkPhysicalDeviceMaintenance7PropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceCooperativeMatrixFeaturesKHR(std::ostream &out, const VkPhysicalDeviceCooperativeMatrixFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryBarrierAccessFlags3KHR(std::ostream &out, const VkMemoryBarrierAccessFlags3KHR* structInfo, Decoded_VkMemoryBarrierAccessFlags3KHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cooperativeMatrix << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cooperativeMatrixRobustBufferAccess << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCooperativeMatrixFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceCooperativeMatrixFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags3KHR(" << structInfo->srcAccessMask3 << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkAccessFlags3KHR(" << structInfo->dstAccessMask3 << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryBarrierAccessFlags3KHR"); + out << "\t\t" << "VkMemoryBarrierAccessFlags3KHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceCooperativeMatrixPropertiesKHR(std::ostream &out, const VkPhysicalDeviceCooperativeMatrixPropertiesKHR* structInfo, Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMaintenance8FeaturesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance8FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->cooperativeMatrixSupportedStages << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCooperativeMatrixPropertiesKHR"); - out << "\t\t" << "VkPhysicalDeviceCooperativeMatrixPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maintenance8 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance8FeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceMaintenance8FeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR(std::ostream &out, const VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderFmaFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderFmaFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderFmaFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->computeDerivativeGroupQuads << "," << std::endl; - struct_body << "\t\t\t" << structInfo->computeDerivativeGroupLinear << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceComputeShaderDerivativesFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderFmaFloat16 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderFmaFloat32 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderFmaFloat64 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderFmaFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceShaderFmaFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR(std::ostream &out, const VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR* structInfo, Decoded_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMaintenance9FeaturesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance9FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance9FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->meshAndTaskShaderDerivatives << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceComputeShaderDerivativesPropertiesKHR"); - out << "\t\t" << "VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maintenance9 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance9FeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceMaintenance9FeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeAV1CapabilitiesKHR(std::ostream &out, const VkVideoDecodeAV1CapabilitiesKHR* structInfo, Decoded_VkVideoDecodeAV1CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMaintenance9PropertiesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance9PropertiesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance9PropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoAV1Level(" << structInfo->maxLevel << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeAV1CapabilitiesKHR"); - out << "\t\t" << "VkVideoDecodeAV1CapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->image2DViewOf3DSparse << "," << std::endl; + struct_body << "\t\t\t" << "VkDefaultVertexAttributeValueKHR(" << structInfo->defaultVertexAttributeValue << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance9PropertiesKHR"); + out << "\t\t" << "VkPhysicalDeviceMaintenance9PropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeAV1DpbSlotInfoKHR(std::ostream &out, const VkVideoDecodeAV1DpbSlotInfoKHR* structInfo, Decoded_VkVideoDecodeAV1DpbSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkQueueFamilyOwnershipTransferPropertiesKHR(std::ostream &out, const VkQueueFamilyOwnershipTransferPropertiesKHR* structInfo, Decoded_VkQueueFamilyOwnershipTransferPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_reference_info_struct = "NULL"; - if (structInfo->pStdReferenceInfo != NULL) { - pstd_reference_info_struct = GenerateStruct_StdVideoDecodeAV1ReferenceInfo(out, - structInfo->pStdReferenceInfo, - metaInfo->pStdReferenceInfo->GetMetaStructPointer(), - consumer); - pstd_reference_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_reference_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeAV1DpbSlotInfoKHR"); - out << "\t\t" << "VkVideoDecodeAV1DpbSlotInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->optimalImageTransferToQueueFamilies << ","; + std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyOwnershipTransferPropertiesKHR"); + out << "\t\t" << "VkQueueFamilyOwnershipTransferPropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeAV1PictureInfoKHR(std::ostream &out, const VkVideoDecodeAV1PictureInfoKHR* structInfo, Decoded_VkVideoDecodeAV1PictureInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(std::ostream &out, const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_picture_info_struct = "NULL"; - if (structInfo->pStdPictureInfo != NULL) { - pstd_picture_info_struct = GenerateStruct_StdVideoDecodeAV1PictureInfo(out, - structInfo->pStdPictureInfo, - metaInfo->pStdPictureInfo->GetMetaStructPointer(), - consumer); - pstd_picture_info_struct.insert(0, "&"); - } - std::string ptile_offsets_array = "NULL"; - if (structInfo->pTileOffsets != NULL) { - ptile_offsets_array = "pTileOffsets_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << ptile_offsets_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pTileOffsets, structInfo->tileCount) << ";" << std::endl; - } - std::string ptile_sizes_array = "NULL"; - if (structInfo->pTileSizes != NULL) { - ptile_sizes_array = "pTileSizes_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << ptile_sizes_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pTileSizes, structInfo->tileCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_picture_info_struct << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->referenceNameSlotIndices[0]), VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->frameHeaderOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileCount << "," << std::endl; - struct_body << "\t\t\t" << ptile_offsets_array << "," << std::endl; - struct_body << "\t\t\t" << ptile_sizes_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeAV1PictureInfoKHR"); - out << "\t\t" << "VkVideoDecodeAV1PictureInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->depthClampZeroOne << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDepthClampZeroOneFeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceDepthClampZeroOneFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeAV1ProfileInfoKHR(std::ostream &out, const VkVideoDecodeAV1ProfileInfoKHR* structInfo, Decoded_VkVideoDecodeAV1ProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRobustness2FeaturesKHR(std::ostream &out, const VkPhysicalDeviceRobustness2FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceRobustness2FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoAV1Profile(" << structInfo->stdProfile << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->filmGrainSupport << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeAV1ProfileInfoKHR"); - out << "\t\t" << "VkVideoDecodeAV1ProfileInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->robustBufferAccess2 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->robustImageAccess2 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->nullDescriptor << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRobustness2FeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceRobustness2FeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeAV1SessionParametersCreateInfoKHR(std::ostream &out, const VkVideoDecodeAV1SessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoDecodeAV1SessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRobustness2PropertiesKHR(std::ostream &out, const VkPhysicalDeviceRobustness2PropertiesKHR* structInfo, Decoded_VkPhysicalDeviceRobustness2PropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_sequence_header_struct = "NULL"; - if (structInfo->pStdSequenceHeader != NULL) { - pstd_sequence_header_struct = GenerateStruct_StdVideoAV1SequenceHeader(out, - structInfo->pStdSequenceHeader, - metaInfo->pStdSequenceHeader->GetMetaStructPointer(), - consumer); - pstd_sequence_header_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_sequence_header_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeAV1SessionParametersCreateInfoKHR"); - out << "\t\t" << "VkVideoDecodeAV1SessionParametersCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->robustStorageBufferAccessSizeAlignment << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->robustUniformBufferAccessSizeAlignment << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRobustness2PropertiesKHR"); + out << "\t\t" << "VkPhysicalDeviceRobustness2PropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVideoEncodeAV1FeaturesKHR(std::ostream &out, const VkPhysicalDeviceVideoEncodeAV1FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceVideoEncodeAV1FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(std::ostream &out, const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->videoEncodeAV1 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoEncodeAV1FeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceVideoEncodeAV1FeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentModeFifoLatestReady << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePresentModeFifoLatestReadyFeaturesKHR"); + out << "\t\t" << "VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeAV1CapabilitiesKHR(std::ostream &out, const VkVideoEncodeAV1CapabilitiesKHR* structInfo, Decoded_VkVideoEncodeAV1CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMaintenance10FeaturesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance10FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance10FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string coded_picture_alignment_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->codedPictureAlignment, - metaInfo->codedPictureAlignment, - consumer); - std::string max_tiles_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxTiles, - metaInfo->maxTiles, - consumer); - std::string min_tile_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->minTileSize, - metaInfo->minTileSize, - consumer); - std::string max_tile_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxTileSize, - metaInfo->maxTileSize, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeAV1CapabilityFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoAV1Level(" << structInfo->maxLevel << ")" << "," << std::endl; - struct_body << "\t\t\t" << coded_picture_alignment_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_tiles_info_var << "," << std::endl; - struct_body << "\t\t\t" << min_tile_size_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_tile_size_info_var << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeAV1SuperblockSizeFlagsKHR(" << structInfo->superblockSizes << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSingleReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->singleReferenceNameMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxUnidirectionalCompoundReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxUnidirectionalCompoundGroup1ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->unidirectionalCompoundReferenceNameMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxBidirectionalCompoundReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxBidirectionalCompoundGroup1ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxBidirectionalCompoundGroup2ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bidirectionalCompoundReferenceNameMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTemporalLayerCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSpatialLayerCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxOperatingPoints << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minQIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxQIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->prefersGopRemainingFrames << "," << std::endl; - struct_body << "\t\t\t" << structInfo->requiresGopRemainingFrames << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeAV1StdFlagsKHR(" << structInfo->stdSyntaxFlags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1CapabilitiesKHR"); - out << "\t\t" << "VkVideoEncodeAV1CapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maintenance10 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance10FeaturesKHR"); + out << "\t\t" << "VkPhysicalDeviceMaintenance10FeaturesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeAV1DpbSlotInfoKHR(std::ostream &out, const VkVideoEncodeAV1DpbSlotInfoKHR* structInfo, Decoded_VkVideoEncodeAV1DpbSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMaintenance10PropertiesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance10PropertiesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance10PropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_reference_info_struct = "NULL"; - if (structInfo->pStdReferenceInfo != NULL) { - pstd_reference_info_struct = GenerateStruct_StdVideoEncodeAV1ReferenceInfo(out, - structInfo->pStdReferenceInfo, - metaInfo->pStdReferenceInfo->GetMetaStructPointer(), - consumer); - pstd_reference_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_reference_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1DpbSlotInfoKHR"); - out << "\t\t" << "VkVideoEncodeAV1DpbSlotInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->rgba4OpaqueBlackSwizzled << "," << std::endl; + struct_body << "\t\t\t" << structInfo->resolveSrgbFormatAppliesTransferFunction << "," << std::endl; + struct_body << "\t\t\t" << structInfo->resolveSrgbFormatSupportsTransferFunctionControl << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance10PropertiesKHR"); + out << "\t\t" << "VkPhysicalDeviceMaintenance10PropertiesKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeAV1FrameSizeKHR(std::ostream &out, const VkVideoEncodeAV1FrameSizeKHR* structInfo, Decoded_VkVideoEncodeAV1FrameSizeKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderingAttachmentFlagsInfoKHR(std::ostream &out, const VkRenderingAttachmentFlagsInfoKHR* structInfo, Decoded_VkRenderingAttachmentFlagsInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->intraFrameSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->predictiveFrameSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bipredictiveFrameSize << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1FrameSizeKHR"); - out << "\t\t" << "VkVideoEncodeAV1FrameSizeKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkRenderingAttachmentFlagsKHR(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderingAttachmentFlagsInfoKHR"); + out << "\t\t" << "VkRenderingAttachmentFlagsInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeAV1GopRemainingFrameInfoKHR(std::ostream &out, const VkVideoEncodeAV1GopRemainingFrameInfoKHR* structInfo, Decoded_VkVideoEncodeAV1GopRemainingFrameInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderingEndInfoKHR(std::ostream &out, const VkRenderingEndInfoKHR* structInfo, Decoded_VkRenderingEndInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useGopRemainingFrames << "," << std::endl; - struct_body << "\t\t\t" << structInfo->gopRemainingIntra << "," << std::endl; - struct_body << "\t\t\t" << structInfo->gopRemainingPredictive << "," << std::endl; - struct_body << "\t\t\t" << structInfo->gopRemainingBipredictive << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1GopRemainingFrameInfoKHR"); - out << "\t\t" << "VkVideoEncodeAV1GopRemainingFrameInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pnext_name << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderingEndInfoKHR"); + out << "\t\t" << "VkRenderingEndInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeAV1PictureInfoKHR(std::ostream &out, const VkVideoEncodeAV1PictureInfoKHR* structInfo, Decoded_VkVideoEncodeAV1PictureInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkResolveImageModeInfoKHR(std::ostream &out, const VkResolveImageModeInfoKHR* structInfo, Decoded_VkResolveImageModeInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_picture_info_struct = "NULL"; - if (structInfo->pStdPictureInfo != NULL) { - pstd_picture_info_struct = GenerateStruct_StdVideoEncodeAV1PictureInfo(out, - structInfo->pStdPictureInfo, - metaInfo->pStdPictureInfo->GetMetaStructPointer(), - consumer); - pstd_picture_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeAV1PredictionModeKHR(" << structInfo->predictionMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeAV1RateControlGroupKHR(" << structInfo->rateControlGroup << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->constantQIndex << "," << std::endl; - struct_body << "\t\t\t" << pstd_picture_info_struct << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->referenceNameSlotIndices[0]), VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->primaryReferenceCdfOnly << "," << std::endl; - struct_body << "\t\t\t" << structInfo->generateObuExtensionHeader << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1PictureInfoKHR"); - out << "\t\t" << "VkVideoEncodeAV1PictureInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkResolveImageFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkResolveModeFlagBits(" << structInfo->resolveMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkResolveModeFlagBits(" << structInfo->stencilResolveMode << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "resolveImageModeInfoKHR"); + out << "\t\t" << "VkResolveImageModeInfoKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeAV1ProfileInfoKHR(std::ostream &out, const VkVideoEncodeAV1ProfileInfoKHR* structInfo, Decoded_VkVideoEncodeAV1ProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDebugReportCallbackCreateInfoEXT(std::ostream &out, const VkDebugReportCallbackCreateInfoEXT* structInfo, Decoded_VkDebugReportCallbackCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoAV1Profile(" << structInfo->stdProfile << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1ProfileInfoKHR"); - out << "\t\t" << "VkVideoEncodeAV1ProfileInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDebugReportFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pfnCallback << "," << std::endl; + out << "\t\t" << "// TODO: Support pUserData (non-struct output) argument." << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "debugReportCallbackCreateInfoEXT"); + out << "\t\t" << "VkDebugReportCallbackCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeAV1QIndexKHR(std::ostream &out, const VkVideoEncodeAV1QIndexKHR* structInfo, Decoded_VkVideoEncodeAV1QIndexKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineRasterizationStateRasterizationOrderAMD(std::ostream &out, const VkPipelineRasterizationStateRasterizationOrderAMD* structInfo, Decoded_VkPipelineRasterizationStateRasterizationOrderAMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->intraQIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->predictiveQIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bipredictiveQIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1QIndexKHR"); - out << "\t\t" << "VkVideoEncodeAV1QIndexKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkRasterizationOrderAMD(" << structInfo->rasterizationOrder << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineRasterizationStateRasterizationOrderAMD"); + out << "\t\t" << "VkPipelineRasterizationStateRasterizationOrderAMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeAV1QualityLevelPropertiesKHR(std::ostream &out, const VkVideoEncodeAV1QualityLevelPropertiesKHR* structInfo, Decoded_VkVideoEncodeAV1QualityLevelPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDebugMarkerMarkerInfoEXT(std::ostream &out, const VkDebugMarkerMarkerInfoEXT* structInfo, Decoded_VkDebugMarkerMarkerInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string preferred_constant_q_index_info_var = GenerateStruct_VkVideoEncodeAV1QIndexKHR(out, - &structInfo->preferredConstantQIndex, - metaInfo->preferredConstantQIndex, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeAV1RateControlFlagsKHR(" << structInfo->preferredRateControlFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredGopFrameCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredKeyFramePeriod << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredConsecutiveBipredictiveFrameCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredTemporalLayerCount << "," << std::endl; - struct_body << "\t\t\t" << preferred_constant_q_index_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredMaxSingleReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredSingleReferenceNameMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredMaxUnidirectionalCompoundReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredMaxUnidirectionalCompoundGroup1ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredUnidirectionalCompoundReferenceNameMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredMaxBidirectionalCompoundReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredMaxBidirectionalCompoundGroup1ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredMaxBidirectionalCompoundGroup2ReferenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferredBidirectionalCompoundReferenceNameMask << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1QualityLevelPropertiesKHR"); - out << "\t\t" << "VkVideoEncodeAV1QualityLevelPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pMarkerName) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->color[0]), 4) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "debugMarkerMarkerInfoEXT"); + out << "\t\t" << "VkDebugMarkerMarkerInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeAV1RateControlInfoKHR(std::ostream &out, const VkVideoEncodeAV1RateControlInfoKHR* structInfo, Decoded_VkVideoEncodeAV1RateControlInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDebugMarkerObjectNameInfoEXT(std::ostream &out, const VkDebugMarkerObjectNameInfoEXT* structInfo, Decoded_VkDebugMarkerObjectNameInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeAV1RateControlFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->gopFrameCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->keyFramePeriod << "," << std::endl; - struct_body << "\t\t\t" << structInfo->consecutiveBipredictiveFrameCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->temporalLayerCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1RateControlInfoKHR"); - out << "\t\t" << "VkVideoEncodeAV1RateControlInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDebugReportObjectTypeEXT(" << structInfo->objectType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->object << "UL" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pObjectName) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "debugMarkerObjectNameInfoEXT"); + out << "\t\t" << "VkDebugMarkerObjectNameInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeAV1RateControlLayerInfoKHR(std::ostream &out, const VkVideoEncodeAV1RateControlLayerInfoKHR* structInfo, Decoded_VkVideoEncodeAV1RateControlLayerInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDebugMarkerObjectTagInfoEXT(std::ostream &out, const VkDebugMarkerObjectTagInfoEXT* structInfo, Decoded_VkDebugMarkerObjectTagInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string min_q_index_info_var = GenerateStruct_VkVideoEncodeAV1QIndexKHR(out, - &structInfo->minQIndex, - metaInfo->minQIndex, - consumer); - std::string max_q_index_info_var = GenerateStruct_VkVideoEncodeAV1QIndexKHR(out, - &structInfo->maxQIndex, - metaInfo->maxQIndex, - consumer); - std::string max_frame_size_info_var = GenerateStruct_VkVideoEncodeAV1FrameSizeKHR(out, - &structInfo->maxFrameSize, - metaInfo->maxFrameSize, - consumer); + std::string ptag_array = "NULL"; + if (structInfo->pTag != NULL) { + std::string ptag_values; + for (uint32_t idx0 = 0; idx0 < structInfo->tagSize; ++idx0) { + ptag_values += std::to_string(reinterpret_cast(structInfo->pTag)[idx0]) + ", "; + } + ptag_array = "pTag_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint8_t " << ptag_array << "[] = {" << ptag_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useMinQIndex << "," << std::endl; - struct_body << "\t\t\t" << min_q_index_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useMaxQIndex << "," << std::endl; - struct_body << "\t\t\t" << max_q_index_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useMaxFrameSize << "," << std::endl; - struct_body << "\t\t\t" << max_frame_size_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1RateControlLayerInfoKHR"); - out << "\t\t" << "VkVideoEncodeAV1RateControlLayerInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDebugReportObjectTypeEXT(" << structInfo->objectType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->object << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tagName << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tagSize << "," << std::endl; + struct_body << "\t\t\t" << ptag_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "debugMarkerObjectTagInfoEXT"); + out << "\t\t" << "VkDebugMarkerObjectTagInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeAV1SessionCreateInfoKHR(std::ostream &out, const VkVideoEncodeAV1SessionCreateInfoKHR* structInfo, Decoded_VkVideoEncodeAV1SessionCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDedicatedAllocationBufferCreateInfoNV(std::ostream &out, const VkDedicatedAllocationBufferCreateInfoNV* structInfo, Decoded_VkDedicatedAllocationBufferCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->useMaxLevel << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoAV1Level(" << structInfo->maxLevel << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1SessionCreateInfoKHR"); - out << "\t\t" << "VkVideoEncodeAV1SessionCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->dedicatedAllocation << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dedicatedAllocationBufferCreateInfoNV"); + out << "\t\t" << "VkDedicatedAllocationBufferCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeAV1SessionParametersCreateInfoKHR(std::ostream &out, const VkVideoEncodeAV1SessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoEncodeAV1SessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDedicatedAllocationImageCreateInfoNV(std::ostream &out, const VkDedicatedAllocationImageCreateInfoNV* structInfo, Decoded_VkDedicatedAllocationImageCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_sequence_header_struct = "NULL"; - if (structInfo->pStdSequenceHeader != NULL) { - pstd_sequence_header_struct = GenerateStruct_StdVideoAV1SequenceHeader(out, - structInfo->pStdSequenceHeader, - metaInfo->pStdSequenceHeader->GetMetaStructPointer(), - consumer); - pstd_sequence_header_struct.insert(0, "&"); - } - std::string pstd_decoder_model_info_struct = "NULL"; - if (structInfo->pStdDecoderModelInfo != NULL) { - pstd_decoder_model_info_struct = GenerateStruct_StdVideoEncodeAV1DecoderModelInfo(out, - structInfo->pStdDecoderModelInfo, - metaInfo->pStdDecoderModelInfo->GetMetaStructPointer(), - consumer); - pstd_decoder_model_info_struct.insert(0, "&"); - } - std::string pstd_operating_points_array = "NULL"; - if (structInfo->pStdOperatingPoints != NULL) { - pstd_operating_points_array = "pStdOperatingPoints_" + std::to_string(consumer.GetNextId()); - std::string pstd_operating_points_names; - for (uint32_t idx = 0; idx < structInfo->stdOperatingPointCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStdOperatingPoints + idx != NULL) { - variable_name = GenerateStruct_StdVideoEncodeAV1OperatingPointInfo(out, - structInfo->pStdOperatingPoints + idx, - metaInfo->pStdOperatingPoints->GetMetaStructPointer() + idx, - consumer); - } - pstd_operating_points_names += variable_name + ", "; - } - out << "\t\t" << "StdVideoEncodeAV1OperatingPointInfo " << pstd_operating_points_array << "[] = {" << pstd_operating_points_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_sequence_header_struct << "," << std::endl; - struct_body << "\t\t\t" << pstd_decoder_model_info_struct << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stdOperatingPointCount << "," << std::endl; - struct_body << "\t\t\t" << pstd_operating_points_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1SessionParametersCreateInfoKHR"); - out << "\t\t" << "VkVideoEncodeAV1SessionParametersCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->dedicatedAllocation << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dedicatedAllocationImageCreateInfoNV"); + out << "\t\t" << "VkDedicatedAllocationImageCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVideoDecodeVP9FeaturesKHR(std::ostream &out, const VkPhysicalDeviceVideoDecodeVP9FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceVideoDecodeVP9FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDedicatedAllocationMemoryAllocateInfoNV(std::ostream &out, const VkDedicatedAllocationMemoryAllocateInfoNV* structInfo, Decoded_VkDedicatedAllocationMemoryAllocateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->videoDecodeVP9 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoDecodeVP9FeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceVideoDecodeVP9FeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dedicatedAllocationMemoryAllocateInfoNV"); + out << "\t\t" << "VkDedicatedAllocationMemoryAllocateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeVP9CapabilitiesKHR(std::ostream &out, const VkVideoDecodeVP9CapabilitiesKHR* structInfo, Decoded_VkVideoDecodeVP9CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceTransformFeedbackFeaturesEXT(std::ostream &out, const VkPhysicalDeviceTransformFeedbackFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceTransformFeedbackFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoVP9Level(" << structInfo->maxLevel << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeVP9CapabilitiesKHR"); - out << "\t\t" << "VkVideoDecodeVP9CapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->transformFeedback << "," << std::endl; + struct_body << "\t\t\t" << structInfo->geometryStreams << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTransformFeedbackFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceTransformFeedbackFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeVP9PictureInfoKHR(std::ostream &out, const VkVideoDecodeVP9PictureInfoKHR* structInfo, Decoded_VkVideoDecodeVP9PictureInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceTransformFeedbackPropertiesEXT(std::ostream &out, const VkPhysicalDeviceTransformFeedbackPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceTransformFeedbackPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_picture_info_struct = "NULL"; - if (structInfo->pStdPictureInfo != NULL) { - pstd_picture_info_struct = GenerateStruct_StdVideoDecodeVP9PictureInfo(out, - structInfo->pStdPictureInfo, - metaInfo->pStdPictureInfo->GetMetaStructPointer(), - consumer); - pstd_picture_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_picture_info_struct << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->referenceNameSlotIndices[0]), VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->uncompressedHeaderOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->compressedHeaderOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tilesOffset << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeVP9PictureInfoKHR"); - out << "\t\t" << "VkVideoDecodeVP9PictureInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxTransformFeedbackStreams << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTransformFeedbackBuffers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTransformFeedbackBufferSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTransformFeedbackStreamDataSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTransformFeedbackBufferDataSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTransformFeedbackBufferDataStride << "," << std::endl; + struct_body << "\t\t\t" << structInfo->transformFeedbackQueries << "," << std::endl; + struct_body << "\t\t\t" << structInfo->transformFeedbackStreamsLinesTriangles << "," << std::endl; + struct_body << "\t\t\t" << structInfo->transformFeedbackRasterizationStreamSelect << "," << std::endl; + struct_body << "\t\t\t" << structInfo->transformFeedbackDraw << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTransformFeedbackPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceTransformFeedbackPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeVP9ProfileInfoKHR(std::ostream &out, const VkVideoDecodeVP9ProfileInfoKHR* structInfo, Decoded_VkVideoDecodeVP9ProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineRasterizationStateStreamCreateInfoEXT(std::ostream &out, const VkPipelineRasterizationStateStreamCreateInfoEXT* structInfo, Decoded_VkPipelineRasterizationStateStreamCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "StdVideoVP9Profile(" << structInfo->stdProfile << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeVP9ProfileInfoKHR"); - out << "\t\t" << "VkVideoDecodeVP9ProfileInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineRasterizationStateStreamCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->rasterizationStream << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineRasterizationStateStreamCreateInfoEXT"); + out << "\t\t" << "VkPipelineRasterizationStateStreamCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVideoMaintenance1FeaturesKHR(std::ostream &out, const VkPhysicalDeviceVideoMaintenance1FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceVideoMaintenance1FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageViewAddressPropertiesNVX(std::ostream &out, const VkImageViewAddressPropertiesNVX* structInfo, Decoded_VkImageViewAddressPropertiesNVX* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->videoMaintenance1 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoMaintenance1FeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceVideoMaintenance1FeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->deviceAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageViewAddressPropertiesNVX"); + out << "\t\t" << "VkImageViewAddressPropertiesNVX " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoInlineQueryInfoKHR(std::ostream &out, const VkVideoInlineQueryInfoKHR* structInfo, Decoded_VkVideoInlineQueryInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageViewHandleInfoNVX(std::ostream &out, const VkImageViewHandleInfoNVX* structInfo, Decoded_VkImageViewHandleInfoNVX* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->queryPool) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->firstQuery << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queryCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoInlineQueryInfoKHR"); - out << "\t\t" << "VkVideoInlineQueryInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->imageView) << "," << std::endl; + struct_body << "\t\t\t" << "VkDescriptorType(" << structInfo->descriptorType << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->sampler) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageViewHandleInfoNVX"); + out << "\t\t" << "VkImageViewHandleInfoNVX " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAttachmentFeedbackLoopInfoEXT(std::ostream &out, const VkAttachmentFeedbackLoopInfoEXT* structInfo, Decoded_VkAttachmentFeedbackLoopInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkTextureLODGatherFormatPropertiesAMD(std::ostream &out, const VkTextureLODGatherFormatPropertiesAMD* structInfo, Decoded_VkTextureLODGatherFormatPropertiesAMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->feedbackLoopEnable << ","; - std::string variable_name = consumer.AddStruct(struct_body, "attachmentFeedbackLoopInfoEXT"); - out << "\t\t" << "VkAttachmentFeedbackLoopInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->supportsTextureGatherLODBiasAMD << ","; + std::string variable_name = consumer.AddStruct(struct_body, "textureLODGatherFormatPropertiesAMD"); + out << "\t\t" << "VkTextureLODGatherFormatPropertiesAMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR(std::ostream &out, const VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkShaderResourceUsageAMD(std::ostream &out, const VkShaderResourceUsageAMD* structInfo, Decoded_VkShaderResourceUsageAMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->unifiedImageLayouts << "," << std::endl; - struct_body << "\t\t\t" << structInfo->unifiedImageLayoutsVideo << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceUnifiedImageLayoutsFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->numUsedVgprs << "," << std::endl; + struct_body << "\t\t\t" << structInfo->numUsedSgprs << "," << std::endl; + struct_body << "\t\t\t" << structInfo->ldsSizePerLocalWorkGroup << "," << std::endl; + struct_body << "\t\t\t" << structInfo->ldsUsageSizeInBytes << "," << std::endl; + struct_body << "\t\t\t" << structInfo->scratchMemUsageInBytes << ","; + std::string variable_name = consumer.AddStruct(struct_body, "shaderResourceUsageAMD"); + out << "\t\t" << "VkShaderResourceUsageAMD " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkShaderStatisticsInfoAMD(std::ostream &out, const VkShaderStatisticsInfoAMD* structInfo, Decoded_VkShaderStatisticsInfoAMD* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string resource_usage_info_var = GenerateStruct_VkShaderResourceUsageAMD(out, + &structInfo->resourceUsage, + metaInfo->resourceUsage, + consumer); + struct_body << "\t" << "VkShaderStageFlags(" << structInfo->shaderStageMask << ")" << "," << std::endl; + struct_body << "\t\t\t" << resource_usage_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->numPhysicalVgprs << "," << std::endl; + struct_body << "\t\t\t" << structInfo->numPhysicalSgprs << "," << std::endl; + struct_body << "\t\t\t" << structInfo->numAvailableVgprs << "," << std::endl; + struct_body << "\t\t\t" << structInfo->numAvailableSgprs << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->computeWorkGroupSize[0]), 3) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "shaderStatisticsInfoAMD"); + out << "\t\t" << "VkShaderStatisticsInfoAMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCalibratedTimestampInfoKHR(std::ostream &out, const VkCalibratedTimestampInfoKHR* structInfo, Decoded_VkCalibratedTimestampInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkStreamDescriptorSurfaceCreateInfoGGP(std::ostream &out, const VkStreamDescriptorSurfaceCreateInfoGGP* structInfo, Decoded_VkStreamDescriptorSurfaceCreateInfoGGP* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkTimeDomainKHR(" << structInfo->timeDomain << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "calibratedTimestampInfoKHR"); - out << "\t\t" << "VkCalibratedTimestampInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkStreamDescriptorSurfaceCreateFlagsGGP(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->streamDescriptor << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "streamDescriptorSurfaceCreateInfoGGP"); + out << "\t\t" << "VkStreamDescriptorSurfaceCreateInfoGGP " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBindDescriptorBufferEmbeddedSamplersInfoEXT(std::ostream &out, const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* structInfo, Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceCornerSampledImageFeaturesNV(std::ostream &out, const VkPhysicalDeviceCornerSampledImageFeaturesNV* structInfo, Decoded_VkPhysicalDeviceCornerSampledImageFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->stageFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->set << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bindDescriptorBufferEmbeddedSamplersInfoEXT"); - out << "\t\t" << "VkBindDescriptorBufferEmbeddedSamplersInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->cornerSampledImage << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCornerSampledImageFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceCornerSampledImageFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSetDescriptorBufferOffsetsInfoEXT(std::ostream &out, const VkSetDescriptorBufferOffsetsInfoEXT* structInfo, Decoded_VkSetDescriptorBufferOffsetsInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExternalImageFormatPropertiesNV(std::ostream &out, const VkExternalImageFormatPropertiesNV* structInfo, Decoded_VkExternalImageFormatPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pbuffer_indices_array = "NULL"; - if (structInfo->pBufferIndices != NULL) { - pbuffer_indices_array = "pBufferIndices_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pbuffer_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pBufferIndices, structInfo->setCount) << ";" << std::endl; - } - std::string poffsets_array = "poffsets_array_" + std::to_string(consumer.GetNextId()); - if (structInfo->setCount > 0) { - std::string poffsets_values = toStringJoin(structInfo->pOffsets, - structInfo->pOffsets + structInfo->setCount, - [](VkDeviceSize current) { return std::to_string(current); }, - ", "); - if (structInfo->setCount == 1) { - poffsets_array = "&" + poffsets_values; - } else if (structInfo->setCount > 1) { - out << "\t\t" << "VkDeviceSize " << poffsets_array << "[] = {" << poffsets_values << "};" << std::endl; - } - } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->stageFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->firstSet << "," << std::endl; - struct_body << "\t\t\t" << structInfo->setCount << "," << std::endl; - struct_body << "\t\t\t" << pbuffer_indices_array << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << poffsets_array << " }" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "setDescriptorBufferOffsetsInfoEXT"); - out << "\t\t" << "VkSetDescriptorBufferOffsetsInfoEXT " << variable_name << " {" << std::endl; + std::string image_format_properties_info_var = GenerateStruct_VkImageFormatProperties(out, + &structInfo->imageFormatProperties, + metaInfo->imageFormatProperties, + consumer); + struct_body << "\t" << image_format_properties_info_var << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryFeatureFlagsNV(" << structInfo->externalMemoryFeatures << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagsNV(" << structInfo->exportFromImportedHandleTypes << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagsNV(" << structInfo->compatibleHandleTypes << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "externalImageFormatPropertiesNV"); + out << "\t\t" << "VkExternalImageFormatPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR(std::ostream &out, const VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExportMemoryAllocateInfoNV(std::ostream &out, const VkExportMemoryAllocateInfoNV* structInfo, Decoded_VkExportMemoryAllocateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->videoEncodeIntraRefresh << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoEncodeIntraRefreshFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagsNV(" << structInfo->handleTypes << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "exportMemoryAllocateInfoNV"); + out << "\t\t" << "VkExportMemoryAllocateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeIntraRefreshCapabilitiesKHR(std::ostream &out, const VkVideoEncodeIntraRefreshCapabilitiesKHR* structInfo, Decoded_VkVideoEncodeIntraRefreshCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExternalMemoryImageCreateInfoNV(std::ostream &out, const VkExternalMemoryImageCreateInfoNV* structInfo, Decoded_VkExternalMemoryImageCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeIntraRefreshModeFlagsKHR(" << structInfo->intraRefreshModes << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxIntraRefreshCycleDuration << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxIntraRefreshActiveReferencePictures << "," << std::endl; - struct_body << "\t\t\t" << structInfo->partitionIndependentIntraRefreshRegions << "," << std::endl; - struct_body << "\t\t\t" << structInfo->nonRectangularIntraRefreshRegions << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeIntraRefreshCapabilitiesKHR"); - out << "\t\t" << "VkVideoEncodeIntraRefreshCapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagsNV(" << structInfo->handleTypes << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "externalMemoryImageCreateInfoNV"); + out << "\t\t" << "VkExternalMemoryImageCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeIntraRefreshInfoKHR(std::ostream &out, const VkVideoEncodeIntraRefreshInfoKHR* structInfo, Decoded_VkVideoEncodeIntraRefreshInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExportMemoryWin32HandleInfoNV(std::ostream &out, const VkExportMemoryWin32HandleInfoNV* structInfo, Decoded_VkExportMemoryWin32HandleInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->intraRefreshCycleDuration << "," << std::endl; - struct_body << "\t\t\t" << structInfo->intraRefreshIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeIntraRefreshInfoKHR"); - out << "\t\t" << "VkVideoEncodeIntraRefreshInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->pAttributes << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dwAccess << ","; + std::string variable_name = consumer.AddStruct(struct_body, "exportMemoryWin32HandleInfoNV"); + out << "\t\t" << "VkExportMemoryWin32HandleInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeSessionIntraRefreshCreateInfoKHR(std::ostream &out, const VkVideoEncodeSessionIntraRefreshCreateInfoKHR* structInfo, Decoded_VkVideoEncodeSessionIntraRefreshCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImportMemoryWin32HandleInfoNV(std::ostream &out, const VkImportMemoryWin32HandleInfoNV* structInfo, Decoded_VkImportMemoryWin32HandleInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeIntraRefreshModeFlagBitsKHR(" << structInfo->intraRefreshMode << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeSessionIntraRefreshCreateInfoKHR"); - out << "\t\t" << "VkVideoEncodeSessionIntraRefreshCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagsNV(" << structInfo->handleType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->handle << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "importMemoryWin32HandleInfoNV"); + out << "\t\t" << "VkImportMemoryWin32HandleInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoReferenceIntraRefreshInfoKHR(std::ostream &out, const VkVideoReferenceIntraRefreshInfoKHR* structInfo, Decoded_VkVideoReferenceIntraRefreshInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkWin32KeyedMutexAcquireReleaseInfoNV(std::ostream &out, const VkWin32KeyedMutexAcquireReleaseInfoNV* structInfo, Decoded_VkWin32KeyedMutexAcquireReleaseInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pacquire_syncs_array = "NULL"; + if (metaInfo->pAcquireSyncs.GetPointer() != NULL && structInfo->acquireCount > 0) { + pacquire_syncs_array = "pacquire_syncs_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DEVICE_MEMORY)); + std::string pacquire_syncs_values = toStringJoin(metaInfo->pAcquireSyncs.GetPointer(), + metaInfo->pAcquireSyncs.GetPointer() + structInfo->acquireCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->acquireCount == 1) { + pacquire_syncs_array = "&" + pacquire_syncs_values; + } else if (structInfo->acquireCount > 1) { + out << "\t\t" << "VkDeviceMemory " << pacquire_syncs_array << "[] = {" << pacquire_syncs_values << "};" << std::endl; + } + } + std::string pacquire_keys_array = "pacquire_keys_array_" + std::to_string(consumer.GetNextId()); + if (structInfo->acquireCount > 0) { + std::string pacquire_keys_values = toStringJoin(structInfo->pAcquireKeys, + structInfo->pAcquireKeys + structInfo->acquireCount, + [](uint64_t current) { return std::to_string(current); }, + ", "); + if (structInfo->acquireCount == 1) { + pacquire_keys_array = "&" + pacquire_keys_values; + } else if (structInfo->acquireCount > 1) { + out << "\t\t" << "uint64_t " << pacquire_keys_array << "[] = {" << pacquire_keys_values << "};" << std::endl; + } + } + std::string pacquire_timeout_milliseconds_array = "NULL"; + if (structInfo->pAcquireTimeoutMilliseconds != NULL) { + pacquire_timeout_milliseconds_array = "pAcquireTimeoutMilliseconds_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pacquire_timeout_milliseconds_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pAcquireTimeoutMilliseconds, structInfo->acquireCount) << ";" << std::endl; + } + std::string prelease_syncs_array = "NULL"; + if (metaInfo->pReleaseSyncs.GetPointer() != NULL && structInfo->releaseCount > 0) { + prelease_syncs_array = "prelease_syncs_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DEVICE_MEMORY)); + std::string prelease_syncs_values = toStringJoin(metaInfo->pReleaseSyncs.GetPointer(), + metaInfo->pReleaseSyncs.GetPointer() + structInfo->releaseCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->releaseCount == 1) { + prelease_syncs_array = "&" + prelease_syncs_values; + } else if (structInfo->releaseCount > 1) { + out << "\t\t" << "VkDeviceMemory " << prelease_syncs_array << "[] = {" << prelease_syncs_values << "};" << std::endl; + } + } + std::string prelease_keys_array = "prelease_keys_array_" + std::to_string(consumer.GetNextId()); + if (structInfo->releaseCount > 0) { + std::string prelease_keys_values = toStringJoin(structInfo->pReleaseKeys, + structInfo->pReleaseKeys + structInfo->releaseCount, + [](uint64_t current) { return std::to_string(current); }, + ", "); + if (structInfo->releaseCount == 1) { + prelease_keys_array = "&" + prelease_keys_values; + } else if (structInfo->releaseCount > 1) { + out << "\t\t" << "uint64_t " << prelease_keys_array << "[] = {" << prelease_keys_values << "};" << std::endl; + } + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dirtyIntraRefreshRegions << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoReferenceIntraRefreshInfoKHR"); - out << "\t\t" << "VkVideoReferenceIntraRefreshInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->acquireCount << "," << std::endl; + struct_body << "\t\t\t" << pacquire_syncs_array << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << pacquire_keys_array << " }" << "," << std::endl; + struct_body << "\t\t\t" << pacquire_timeout_milliseconds_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->releaseCount << "," << std::endl; + struct_body << "\t\t\t" << prelease_syncs_array << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << prelease_keys_array << " }" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "win32KeyedMutexAcquireReleaseInfoNV"); + out << "\t\t" << "VkWin32KeyedMutexAcquireReleaseInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR(std::ostream &out, const VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkValidationFlagsEXT(std::ostream &out, const VkValidationFlagsEXT* structInfo, Decoded_VkValidationFlagsEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pdisabled_validation_checks_values; + std::string pdisabled_validation_checks_array = "NULL"; + if (structInfo->pDisabledValidationChecks != NULL) { + for (uint32_t idx = 0; idx < structInfo->disabledValidationCheckCount; idx++) { + pdisabled_validation_checks_values += util::ToString(structInfo->pDisabledValidationChecks[idx]) + ", "; + } + pdisabled_validation_checks_array = "pDisabledValidationChecks_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkValidationCheckEXT " << pdisabled_validation_checks_array << "[] = {" << pdisabled_validation_checks_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->videoEncodeQuantizationMap << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoEncodeQuantizationMapFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->disabledValidationCheckCount << "," << std::endl; + struct_body << "\t\t\t" << pdisabled_validation_checks_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "validationFlagsEXT"); + out << "\t\t" << "VkValidationFlagsEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeAV1QuantizationMapCapabilitiesKHR(std::ostream &out, const VkVideoEncodeAV1QuantizationMapCapabilitiesKHR* structInfo, Decoded_VkVideoEncodeAV1QuantizationMapCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkViSurfaceCreateInfoNN(std::ostream &out, const VkViSurfaceCreateInfoNN* structInfo, Decoded_VkViSurfaceCreateInfoNN* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minQIndexDelta << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxQIndexDelta << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeAV1QuantizationMapCapabilitiesKHR"); - out << "\t\t" << "VkVideoEncodeAV1QuantizationMapCapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkViSurfaceCreateFlagsNN(" << structInfo->flags << ")" << "," << std::endl; + out << "\t\t" << "// TODO: Support window (non-struct output) argument." << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "viSurfaceCreateInfoNN"); + out << "\t\t" << "VkViSurfaceCreateInfoNN " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH264QuantizationMapCapabilitiesKHR(std::ostream &out, const VkVideoEncodeH264QuantizationMapCapabilitiesKHR* structInfo, Decoded_VkVideoEncodeH264QuantizationMapCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageViewASTCDecodeModeEXT(std::ostream &out, const VkImageViewASTCDecodeModeEXT* structInfo, Decoded_VkImageViewASTCDecodeModeEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minQpDelta << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxQpDelta << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH264QuantizationMapCapabilitiesKHR"); - out << "\t\t" << "VkVideoEncodeH264QuantizationMapCapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->decodeMode << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageViewASTCDecodeModeEXT"); + out << "\t\t" << "VkImageViewASTCDecodeModeEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeH265QuantizationMapCapabilitiesKHR(std::ostream &out, const VkVideoEncodeH265QuantizationMapCapabilitiesKHR* structInfo, Decoded_VkVideoEncodeH265QuantizationMapCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceASTCDecodeFeaturesEXT(std::ostream &out, const VkPhysicalDeviceASTCDecodeFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceASTCDecodeFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minQpDelta << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxQpDelta << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeH265QuantizationMapCapabilitiesKHR"); - out << "\t\t" << "VkVideoEncodeH265QuantizationMapCapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->decodeModeSharedExponent << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceASTCDecodeFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceASTCDecodeFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeQuantizationMapCapabilitiesKHR(std::ostream &out, const VkVideoEncodeQuantizationMapCapabilitiesKHR* structInfo, Decoded_VkVideoEncodeQuantizationMapCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCommandBufferInheritanceConditionalRenderingInfoEXT(std::ostream &out, const VkCommandBufferInheritanceConditionalRenderingInfoEXT* structInfo, Decoded_VkCommandBufferInheritanceConditionalRenderingInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string max_quantization_map_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxQuantizationMapExtent, - metaInfo->maxQuantizationMapExtent, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << max_quantization_map_extent_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeQuantizationMapCapabilitiesKHR"); - out << "\t\t" << "VkVideoEncodeQuantizationMapCapabilitiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->conditionalRenderingEnable << ","; + std::string variable_name = consumer.AddStruct(struct_body, "commandBufferInheritanceConditionalRenderingInfoEXT"); + out << "\t\t" << "VkCommandBufferInheritanceConditionalRenderingInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeQuantizationMapInfoKHR(std::ostream &out, const VkVideoEncodeQuantizationMapInfoKHR* structInfo, Decoded_VkVideoEncodeQuantizationMapInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkConditionalRenderingBeginInfoEXT(std::ostream &out, const VkConditionalRenderingBeginInfoEXT* structInfo, Decoded_VkConditionalRenderingBeginInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string quantization_map_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->quantizationMapExtent, - metaInfo->quantizationMapExtent, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->quantizationMap) << "," << std::endl; - struct_body << "\t\t\t" << quantization_map_extent_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeQuantizationMapInfoKHR"); - out << "\t\t" << "VkVideoEncodeQuantizationMapInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkConditionalRenderingFlagsEXT(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "conditionalRenderingBeginInfoEXT"); + out << "\t\t" << "VkConditionalRenderingBeginInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR(std::ostream &out, const VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceConditionalRenderingFeaturesEXT(std::ostream &out, const VkPhysicalDeviceConditionalRenderingFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceConditionalRenderingFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string quantization_map_texel_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->quantizationMapTexelSize, - metaInfo->quantizationMapTexelSize, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << quantization_map_texel_size_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeQuantizationMapSessionParametersCreateInfoKHR"); - out << "\t\t" << "VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->conditionalRendering << "," << std::endl; + struct_body << "\t\t\t" << structInfo->inheritedConditionalRendering << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceConditionalRenderingFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceConditionalRenderingFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoFormatAV1QuantizationMapPropertiesKHR(std::ostream &out, const VkVideoFormatAV1QuantizationMapPropertiesKHR* structInfo, Decoded_VkVideoFormatAV1QuantizationMapPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineViewportWScalingStateCreateInfoNV(std::ostream &out, const VkPipelineViewportWScalingStateCreateInfoNV* structInfo, Decoded_VkPipelineViewportWScalingStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pviewport_w_scalings_array = "NULL"; + if (structInfo->pViewportWScalings != NULL) { + pviewport_w_scalings_array = "pViewportWScalings_" + std::to_string(consumer.GetNextId()); + std::string pviewport_w_scalings_names; + for (uint32_t idx = 0; idx < structInfo->viewportCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pViewportWScalings + idx != NULL) { + variable_name = GenerateStruct_VkViewportWScalingNV(out, + structInfo->pViewportWScalings + idx, + metaInfo->pViewportWScalings->GetMetaStructPointer() + idx, + consumer); + } + pviewport_w_scalings_names += variable_name + ", "; + } + out << "\t\t" << "VkViewportWScalingNV " << pviewport_w_scalings_array << "[] = {" << pviewport_w_scalings_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeAV1SuperblockSizeFlagsKHR(" << structInfo->compatibleSuperblockSizes << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoFormatAV1QuantizationMapPropertiesKHR"); - out << "\t\t" << "VkVideoFormatAV1QuantizationMapPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->viewportWScalingEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->viewportCount << "," << std::endl; + struct_body << "\t\t\t" << pviewport_w_scalings_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineViewportWScalingStateCreateInfoNV"); + out << "\t\t" << "VkPipelineViewportWScalingStateCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoFormatH265QuantizationMapPropertiesKHR(std::ostream &out, const VkVideoFormatH265QuantizationMapPropertiesKHR* structInfo, Decoded_VkVideoFormatH265QuantizationMapPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkViewportWScalingNV(std::ostream &out, const VkViewportWScalingNV* structInfo, Decoded_VkViewportWScalingNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkVideoEncodeH265CtbSizeFlagsKHR(" << structInfo->compatibleCtbSizes << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoFormatH265QuantizationMapPropertiesKHR"); - out << "\t\t" << "VkVideoFormatH265QuantizationMapPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->xcoeff << "," << std::endl; + struct_body << "\t\t\t" << structInfo->ycoeff << ","; + std::string variable_name = consumer.AddStruct(struct_body, "viewportWScalingNV"); + out << "\t\t" << "VkViewportWScalingNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoFormatQuantizationMapPropertiesKHR(std::ostream &out, const VkVideoFormatQuantizationMapPropertiesKHR* structInfo, Decoded_VkVideoFormatQuantizationMapPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfaceCapabilities2EXT(std::ostream &out, const VkSurfaceCapabilities2EXT* structInfo, Decoded_VkSurfaceCapabilities2EXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string quantization_map_texel_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->quantizationMapTexelSize, - metaInfo->quantizationMapTexelSize, - consumer); + std::string current_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->currentExtent, + metaInfo->currentExtent, + consumer); + std::string min_image_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->minImageExtent, + metaInfo->minImageExtent, + consumer); + std::string max_image_extent_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxImageExtent, + metaInfo->maxImageExtent, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << quantization_map_texel_size_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoFormatQuantizationMapPropertiesKHR"); - out << "\t\t" << "VkVideoFormatQuantizationMapPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->minImageCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxImageCount << "," << std::endl; + struct_body << "\t\t\t" << current_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << min_image_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_image_extent_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxImageArrayLayers << "," << std::endl; + struct_body << "\t\t\t" << "VkSurfaceTransformFlagsKHR(" << structInfo->supportedTransforms << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSurfaceTransformFlagBitsKHR(" << structInfo->currentTransform << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkCompositeAlphaFlagsKHR(" << structInfo->supportedCompositeAlpha << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->supportedUsageFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSurfaceCounterFlagsEXT(" << structInfo->supportedSurfaceCounters << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfaceCapabilities2EXT"); + out << "\t\t" << "VkSurfaceCapabilities2EXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceEventInfoEXT(std::ostream &out, const VkDeviceEventInfoEXT* structInfo, Decoded_VkDeviceEventInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderRelaxedExtendedInstruction << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDeviceEventTypeEXT(" << structInfo->deviceEvent << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceEventInfoEXT"); + out << "\t\t" << "VkDeviceEventInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceLayeredApiPropertiesKHR(std::ostream &out, const VkPhysicalDeviceLayeredApiPropertiesKHR* structInfo, Decoded_VkPhysicalDeviceLayeredApiPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDisplayEventInfoEXT(std::ostream &out, const VkDisplayEventInfoEXT* structInfo, Decoded_VkDisplayEventInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vendorID << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceID << "," << std::endl; - struct_body << "\t\t\t" << "VkPhysicalDeviceLayeredApiKHR(" << structInfo->layeredAPI << ")" << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->deviceName) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLayeredApiPropertiesKHR"); - out << "\t\t" << "VkPhysicalDeviceLayeredApiPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDisplayEventTypeEXT(" << structInfo->displayEvent << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayEventInfoEXT"); + out << "\t\t" << "VkDisplayEventInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceLayeredApiPropertiesListKHR(std::ostream &out, const VkPhysicalDeviceLayeredApiPropertiesListKHR* structInfo, Decoded_VkPhysicalDeviceLayeredApiPropertiesListKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDisplayPowerInfoEXT(std::ostream &out, const VkDisplayPowerInfoEXT* structInfo, Decoded_VkDisplayPowerInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string playered_apis_array = "NULL"; - if (structInfo->pLayeredApis != NULL) { - playered_apis_array = "pLayeredApis_" + std::to_string(consumer.GetNextId()); - std::string playered_apis_names; - for (uint32_t idx = 0; idx < structInfo->layeredApiCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pLayeredApis + idx != NULL) { - variable_name = GenerateStruct_VkPhysicalDeviceLayeredApiPropertiesKHR(out, - structInfo->pLayeredApis + idx, - metaInfo->pLayeredApis->GetMetaStructPointer() + idx, - consumer); - } - playered_apis_names += variable_name + ", "; - } - out << "\t\t" << "VkPhysicalDeviceLayeredApiPropertiesKHR " << playered_apis_array << "[] = {" << playered_apis_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->layeredApiCount << "," << std::endl; - struct_body << "\t\t\t" << playered_apis_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLayeredApiPropertiesListKHR"); - out << "\t\t" << "VkPhysicalDeviceLayeredApiPropertiesListKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDisplayPowerStateEXT(" << structInfo->powerState << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayPowerInfoEXT"); + out << "\t\t" << "VkDisplayPowerInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR(std::ostream &out, const VkPhysicalDeviceLayeredApiVulkanPropertiesKHR* structInfo, Decoded_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSwapchainCounterCreateInfoEXT(std::ostream &out, const VkSwapchainCounterCreateInfoEXT* structInfo, Decoded_VkSwapchainCounterCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string properties_info_var = GenerateStruct_VkPhysicalDeviceProperties2(out, - &structInfo->properties, - metaInfo->properties, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << properties_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLayeredApiVulkanPropertiesKHR"); - out << "\t\t" << "VkPhysicalDeviceLayeredApiVulkanPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkSurfaceCounterFlagsEXT(" << structInfo->surfaceCounters << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "swapchainCounterCreateInfoEXT"); + out << "\t\t" << "VkSwapchainCounterCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMaintenance7FeaturesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance7FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance7FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPastPresentationTimingGOOGLE(std::ostream &out, const VkPastPresentationTimingGOOGLE* structInfo, Decoded_VkPastPresentationTimingGOOGLE* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maintenance7 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance7FeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceMaintenance7FeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->presentID << "," << std::endl; + struct_body << "\t\t\t" << structInfo->desiredPresentTime << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->actualPresentTime << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->earliestPresentTime << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->presentMargin << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pastPresentationTimingGOOGLE"); + out << "\t\t" << "VkPastPresentationTimingGOOGLE " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMaintenance7PropertiesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance7PropertiesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance7PropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPresentTimeGOOGLE(std::ostream &out, const VkPresentTimeGOOGLE* structInfo, Decoded_VkPresentTimeGOOGLE* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->robustFragmentShadingRateAttachmentAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->separateDepthStencilAttachmentAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetTotalUniformBuffersDynamic << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetTotalStorageBuffersDynamic << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetTotalBuffersDynamic << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetUpdateAfterBindTotalBuffersDynamic << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance7PropertiesKHR"); - out << "\t\t" << "VkPhysicalDeviceMaintenance7PropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->presentID << "," << std::endl; + struct_body << "\t\t\t" << structInfo->desiredPresentTime << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "presentTimeGOOGLE"); + out << "\t\t" << "VkPresentTimeGOOGLE " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryBarrierAccessFlags3KHR(std::ostream &out, const VkMemoryBarrierAccessFlags3KHR* structInfo, Decoded_VkMemoryBarrierAccessFlags3KHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPresentTimesInfoGOOGLE(std::ostream &out, const VkPresentTimesInfoGOOGLE* structInfo, Decoded_VkPresentTimesInfoGOOGLE* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string ptimes_array = "NULL"; + if (structInfo->pTimes != NULL) { + ptimes_array = "pTimes_" + std::to_string(consumer.GetNextId()); + std::string ptimes_names; + for (uint32_t idx = 0; idx < structInfo->swapchainCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pTimes + idx != NULL) { + variable_name = GenerateStruct_VkPresentTimeGOOGLE(out, + structInfo->pTimes + idx, + metaInfo->pTimes->GetMetaStructPointer() + idx, + consumer); + } + ptimes_names += variable_name + ", "; + } + out << "\t\t" << "VkPresentTimeGOOGLE " << ptimes_array << "[] = {" << ptimes_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags3KHR(" << structInfo->srcAccessMask3 << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkAccessFlags3KHR(" << structInfo->dstAccessMask3 << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryBarrierAccessFlags3KHR"); - out << "\t\t" << "VkMemoryBarrierAccessFlags3KHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; + struct_body << "\t\t\t" << ptimes_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "presentTimesInfoGOOGLE"); + out << "\t\t" << "VkPresentTimesInfoGOOGLE " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMaintenance8FeaturesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance8FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRefreshCycleDurationGOOGLE(std::ostream &out, const VkRefreshCycleDurationGOOGLE* structInfo, Decoded_VkRefreshCycleDurationGOOGLE* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maintenance8 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance8FeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceMaintenance8FeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->refreshDuration << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "refreshCycleDurationGOOGLE"); + out << "\t\t" << "VkRefreshCycleDurationGOOGLE " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMaintenance9FeaturesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance9FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance9FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMultiviewPerViewAttributesInfoNVX(std::ostream &out, const VkMultiviewPerViewAttributesInfoNVX* structInfo, Decoded_VkMultiviewPerViewAttributesInfoNVX* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maintenance9 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance9FeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceMaintenance9FeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->perViewAttributes << "," << std::endl; + struct_body << "\t\t\t" << structInfo->perViewAttributesPositionXOnly << ","; + std::string variable_name = consumer.AddStruct(struct_body, "multiviewPerViewAttributesInfoNVX"); + out << "\t\t" << "VkMultiviewPerViewAttributesInfoNVX " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMaintenance9PropertiesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance9PropertiesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance9PropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(std::ostream &out, const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* structInfo, Decoded_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->image2DViewOf3DSparse << "," << std::endl; - struct_body << "\t\t\t" << "VkDefaultVertexAttributeValueKHR(" << structInfo->defaultVertexAttributeValue << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMaintenance9PropertiesKHR"); - out << "\t\t" << "VkPhysicalDeviceMaintenance9PropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->perViewPositionAllComponents << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMultiviewPerViewAttributesPropertiesNVX"); + out << "\t\t" << "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkQueueFamilyOwnershipTransferPropertiesKHR(std::ostream &out, const VkQueueFamilyOwnershipTransferPropertiesKHR* structInfo, Decoded_VkQueueFamilyOwnershipTransferPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineViewportSwizzleStateCreateInfoNV(std::ostream &out, const VkPipelineViewportSwizzleStateCreateInfoNV* structInfo, Decoded_VkPipelineViewportSwizzleStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pviewport_swizzles_array = "NULL"; + if (structInfo->pViewportSwizzles != NULL) { + pviewport_swizzles_array = "pViewportSwizzles_" + std::to_string(consumer.GetNextId()); + std::string pviewport_swizzles_names; + for (uint32_t idx = 0; idx < structInfo->viewportCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pViewportSwizzles + idx != NULL) { + variable_name = GenerateStruct_VkViewportSwizzleNV(out, + structInfo->pViewportSwizzles + idx, + metaInfo->pViewportSwizzles->GetMetaStructPointer() + idx, + consumer); + } + pviewport_swizzles_names += variable_name + ", "; + } + out << "\t\t" << "VkViewportSwizzleNV " << pviewport_swizzles_array << "[] = {" << pviewport_swizzles_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->optimalImageTransferToQueueFamilies << ","; - std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyOwnershipTransferPropertiesKHR"); - out << "\t\t" << "VkQueueFamilyOwnershipTransferPropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineViewportSwizzleStateCreateFlagsNV(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->viewportCount << "," << std::endl; + struct_body << "\t\t\t" << pviewport_swizzles_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineViewportSwizzleStateCreateInfoNV"); + out << "\t\t" << "VkPipelineViewportSwizzleStateCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVideoMaintenance2FeaturesKHR(std::ostream &out, const VkPhysicalDeviceVideoMaintenance2FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceVideoMaintenance2FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkViewportSwizzleNV(std::ostream &out, const VkViewportSwizzleNV* structInfo, Decoded_VkViewportSwizzleNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->videoMaintenance2 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoMaintenance2FeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceVideoMaintenance2FeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkViewportCoordinateSwizzleNV(" << structInfo->x << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkViewportCoordinateSwizzleNV(" << structInfo->y << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkViewportCoordinateSwizzleNV(" << structInfo->z << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkViewportCoordinateSwizzleNV(" << structInfo->w << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "viewportSwizzleNV"); + out << "\t\t" << "VkViewportSwizzleNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeAV1InlineSessionParametersInfoKHR(std::ostream &out, const VkVideoDecodeAV1InlineSessionParametersInfoKHR* structInfo, Decoded_VkVideoDecodeAV1InlineSessionParametersInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDiscardRectanglePropertiesEXT(std::ostream &out, const VkPhysicalDeviceDiscardRectanglePropertiesEXT* structInfo, Decoded_VkPhysicalDeviceDiscardRectanglePropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_sequence_header_struct = "NULL"; - if (structInfo->pStdSequenceHeader != NULL) { - pstd_sequence_header_struct = GenerateStruct_StdVideoAV1SequenceHeader(out, - structInfo->pStdSequenceHeader, - metaInfo->pStdSequenceHeader->GetMetaStructPointer(), - consumer); - pstd_sequence_header_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_sequence_header_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeAV1InlineSessionParametersInfoKHR"); - out << "\t\t" << "VkVideoDecodeAV1InlineSessionParametersInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxDiscardRectangles << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDiscardRectanglePropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceDiscardRectanglePropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeH264InlineSessionParametersInfoKHR(std::ostream &out, const VkVideoDecodeH264InlineSessionParametersInfoKHR* structInfo, Decoded_VkVideoDecodeH264InlineSessionParametersInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineDiscardRectangleStateCreateInfoEXT(std::ostream &out, const VkPipelineDiscardRectangleStateCreateInfoEXT* structInfo, Decoded_VkPipelineDiscardRectangleStateCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_s_ps_struct = "NULL"; - if (structInfo->pStdSPS != NULL) { - pstd_s_ps_struct = GenerateStruct_StdVideoH264SequenceParameterSet(out, - structInfo->pStdSPS, - metaInfo->pStdSPS->GetMetaStructPointer(), - consumer); - pstd_s_ps_struct.insert(0, "&"); - } - std::string pstd_pp_s_struct = "NULL"; - if (structInfo->pStdPPS != NULL) { - pstd_pp_s_struct = GenerateStruct_StdVideoH264PictureParameterSet(out, - structInfo->pStdPPS, - metaInfo->pStdPPS->GetMetaStructPointer(), - consumer); - pstd_pp_s_struct.insert(0, "&"); + std::string pdiscard_rectangles_array = "NULL"; + if (structInfo->pDiscardRectangles != NULL) { + pdiscard_rectangles_array = "pDiscardRectangles_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkRect2D " << pdiscard_rectangles_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDiscardRectangles, structInfo->discardRectangleCount) << ";" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_s_ps_struct << "," << std::endl; - struct_body << "\t\t\t" << pstd_pp_s_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH264InlineSessionParametersInfoKHR"); - out << "\t\t" << "VkVideoDecodeH264InlineSessionParametersInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineDiscardRectangleStateCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkDiscardRectangleModeEXT(" << structInfo->discardRectangleMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->discardRectangleCount << "," << std::endl; + struct_body << "\t\t\t" << pdiscard_rectangles_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineDiscardRectangleStateCreateInfoEXT"); + out << "\t\t" << "VkPipelineDiscardRectangleStateCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVideoDecodeH265InlineSessionParametersInfoKHR(std::ostream &out, const VkVideoDecodeH265InlineSessionParametersInfoKHR* structInfo, Decoded_VkVideoDecodeH265InlineSessionParametersInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(std::ostream &out, const VkPhysicalDeviceConservativeRasterizationPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceConservativeRasterizationPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstd_v_ps_struct = "NULL"; - if (structInfo->pStdVPS != NULL) { - pstd_v_ps_struct = GenerateStruct_StdVideoH265VideoParameterSet(out, - structInfo->pStdVPS, - metaInfo->pStdVPS->GetMetaStructPointer(), - consumer); - pstd_v_ps_struct.insert(0, "&"); - } - std::string pstd_s_ps_struct = "NULL"; - if (structInfo->pStdSPS != NULL) { - pstd_s_ps_struct = GenerateStruct_StdVideoH265SequenceParameterSet(out, - structInfo->pStdSPS, - metaInfo->pStdSPS->GetMetaStructPointer(), - consumer); - pstd_s_ps_struct.insert(0, "&"); - } - std::string pstd_pp_s_struct = "NULL"; - if (structInfo->pStdPPS != NULL) { - pstd_pp_s_struct = GenerateStruct_StdVideoH265PictureParameterSet(out, - structInfo->pStdPPS, - metaInfo->pStdPPS->GetMetaStructPointer(), - consumer); - pstd_pp_s_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pstd_v_ps_struct << "," << std::endl; - struct_body << "\t\t\t" << pstd_s_ps_struct << "," << std::endl; - struct_body << "\t\t\t" << pstd_pp_s_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "videoDecodeH265InlineSessionParametersInfoKHR"); - out << "\t\t" << "VkVideoDecodeH265InlineSessionParametersInfoKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->primitiveOverestimationSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxExtraPrimitiveOverestimationSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extraPrimitiveOverestimationSizeGranularity << "," << std::endl; + struct_body << "\t\t\t" << structInfo->primitiveUnderestimation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->conservativePointAndLineRasterization << "," << std::endl; + struct_body << "\t\t\t" << structInfo->degenerateTrianglesRasterized << "," << std::endl; + struct_body << "\t\t\t" << structInfo->degenerateLinesRasterized << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fullyCoveredFragmentShaderInputVariable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->conservativeRasterizationPostDepthCoverage << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceConservativeRasterizationPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceConservativeRasterizationPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(std::ostream &out, const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineRasterizationConservativeStateCreateInfoEXT(std::ostream &out, const VkPipelineRasterizationConservativeStateCreateInfoEXT* structInfo, Decoded_VkPipelineRasterizationConservativeStateCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthClampZeroOne << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDepthClampZeroOneFeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceDepthClampZeroOneFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineRasterizationConservativeStateCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkConservativeRasterizationModeEXT(" << structInfo->conservativeRasterizationMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extraPrimitiveOverestimationSize << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineRasterizationConservativeStateCreateInfoEXT"); + out << "\t\t" << "VkPipelineRasterizationConservativeStateCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRobustness2FeaturesKHR(std::ostream &out, const VkPhysicalDeviceRobustness2FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceRobustness2FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDepthClipEnableFeaturesEXT(std::ostream &out, const VkPhysicalDeviceDepthClipEnableFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceDepthClipEnableFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->robustBufferAccess2 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->robustImageAccess2 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->nullDescriptor << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRobustness2FeaturesKHR"); - out << "\t\t" << "VkPhysicalDeviceRobustness2FeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->depthClipEnable << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDepthClipEnableFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceDepthClipEnableFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRobustness2PropertiesKHR(std::ostream &out, const VkPhysicalDeviceRobustness2PropertiesKHR* structInfo, Decoded_VkPhysicalDeviceRobustness2PropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineRasterizationDepthClipStateCreateInfoEXT(std::ostream &out, const VkPipelineRasterizationDepthClipStateCreateInfoEXT* structInfo, Decoded_VkPipelineRasterizationDepthClipStateCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->robustStorageBufferAccessSizeAlignment << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->robustUniformBufferAccessSizeAlignment << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRobustness2PropertiesKHR"); - out << "\t\t" << "VkPhysicalDeviceRobustness2PropertiesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineRasterizationDepthClipStateCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthClipEnable << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineRasterizationDepthClipStateCreateInfoEXT"); + out << "\t\t" << "VkPipelineRasterizationDepthClipStateCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(std::ostream &out, const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkHdrMetadataEXT(std::ostream &out, const VkHdrMetadataEXT* structInfo, Decoded_VkHdrMetadataEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string display_primary_red_info_var = GenerateStruct_VkXYColorEXT(out, + &structInfo->displayPrimaryRed, + metaInfo->displayPrimaryRed, + consumer); + std::string display_primary_green_info_var = GenerateStruct_VkXYColorEXT(out, + &structInfo->displayPrimaryGreen, + metaInfo->displayPrimaryGreen, + consumer); + std::string display_primary_blue_info_var = GenerateStruct_VkXYColorEXT(out, + &structInfo->displayPrimaryBlue, + metaInfo->displayPrimaryBlue, + consumer); + std::string white_point_info_var = GenerateStruct_VkXYColorEXT(out, + &structInfo->whitePoint, + metaInfo->whitePoint, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentModeFifoLatestReady << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePresentModeFifoLatestReadyFeaturesKHR"); - out << "\t\t" << "VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << display_primary_red_info_var << "," << std::endl; + struct_body << "\t\t\t" << display_primary_green_info_var << "," << std::endl; + struct_body << "\t\t\t" << display_primary_blue_info_var << "," << std::endl; + struct_body << "\t\t\t" << white_point_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxLuminance << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minLuminance << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxContentLightLevel << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxFrameAverageLightLevel << ","; + std::string variable_name = consumer.AddStruct(struct_body, "hdrMetadataEXT"); + out << "\t\t" << "VkHdrMetadataEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDebugReportCallbackCreateInfoEXT(std::ostream &out, const VkDebugReportCallbackCreateInfoEXT* structInfo, Decoded_VkDebugReportCallbackCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkXYColorEXT(std::ostream &out, const VkXYColorEXT* structInfo, Decoded_VkXYColorEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDebugReportFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pfnCallback << "," << std::endl; - out << "\t\t" << "// TODO: Support pUserData (non-struct output) argument." << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "debugReportCallbackCreateInfoEXT"); - out << "\t\t" << "VkDebugReportCallbackCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->x << "," << std::endl; + struct_body << "\t\t\t" << structInfo->y << ","; + std::string variable_name = consumer.AddStruct(struct_body, "xYColorEXT"); + out << "\t\t" << "VkXYColorEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineRasterizationStateRasterizationOrderAMD(std::ostream &out, const VkPipelineRasterizationStateRasterizationOrderAMD* structInfo, Decoded_VkPipelineRasterizationStateRasterizationOrderAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG(std::ostream &out, const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* structInfo, Decoded_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkRasterizationOrderAMD(" << structInfo->rasterizationOrder << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineRasterizationStateRasterizationOrderAMD"); - out << "\t\t" << "VkPipelineRasterizationStateRasterizationOrderAMD " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->relaxedLineRasterization << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRelaxedLineRasterizationFeaturesIMG"); + out << "\t\t" << "VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDebugMarkerMarkerInfoEXT(std::ostream &out, const VkDebugMarkerMarkerInfoEXT* structInfo, Decoded_VkDebugMarkerMarkerInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkIOSSurfaceCreateInfoMVK(std::ostream &out, const VkIOSSurfaceCreateInfoMVK* structInfo, Decoded_VkIOSSurfaceCreateInfoMVK* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pMarkerName) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->color[0]), 4) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "debugMarkerMarkerInfoEXT"); - out << "\t\t" << "VkDebugMarkerMarkerInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkIOSSurfaceCreateFlagsMVK(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pView << ","; + std::string variable_name = consumer.AddStruct(struct_body, "iOSSurfaceCreateInfoMVK"); + out << "\t\t" << "VkIOSSurfaceCreateInfoMVK " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDebugMarkerObjectNameInfoEXT(std::ostream &out, const VkDebugMarkerObjectNameInfoEXT* structInfo, Decoded_VkDebugMarkerObjectNameInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMacOSSurfaceCreateInfoMVK(std::ostream &out, const VkMacOSSurfaceCreateInfoMVK* structInfo, Decoded_VkMacOSSurfaceCreateInfoMVK* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDebugReportObjectTypeEXT(" << structInfo->objectType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->object << "UL" << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pObjectName) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "debugMarkerObjectNameInfoEXT"); - out << "\t\t" << "VkDebugMarkerObjectNameInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkMacOSSurfaceCreateFlagsMVK(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pView << ","; + std::string variable_name = consumer.AddStruct(struct_body, "macOSSurfaceCreateInfoMVK"); + out << "\t\t" << "VkMacOSSurfaceCreateInfoMVK " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDebugMarkerObjectTagInfoEXT(std::ostream &out, const VkDebugMarkerObjectTagInfoEXT* structInfo, Decoded_VkDebugMarkerObjectTagInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDebugUtilsLabelEXT(std::ostream &out, const VkDebugUtilsLabelEXT* structInfo, Decoded_VkDebugUtilsLabelEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ptag_array = "NULL"; - if (structInfo->pTag != NULL) { - std::string ptag_values; - for (uint32_t idx0 = 0; idx0 < structInfo->tagSize; ++idx0) { - ptag_values += std::to_string(reinterpret_cast(structInfo->pTag)[idx0]) + ", "; - } - ptag_array = "pTag_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint8_t " << ptag_array << "[] = {" << ptag_values << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDebugReportObjectTypeEXT(" << structInfo->objectType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->object << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tagName << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tagSize << "," << std::endl; - struct_body << "\t\t\t" << ptag_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "debugMarkerObjectTagInfoEXT"); - out << "\t\t" << "VkDebugMarkerObjectTagInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pLabelName) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->color[0]), 4) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "debugUtilsLabelEXT"); + out << "\t\t" << "VkDebugUtilsLabelEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDedicatedAllocationBufferCreateInfoNV(std::ostream &out, const VkDedicatedAllocationBufferCreateInfoNV* structInfo, Decoded_VkDedicatedAllocationBufferCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDebugUtilsMessengerCallbackDataEXT(std::ostream &out, const VkDebugUtilsMessengerCallbackDataEXT* structInfo, Decoded_VkDebugUtilsMessengerCallbackDataEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pqueue_labels_array = "NULL"; + if (structInfo->pQueueLabels != NULL) { + pqueue_labels_array = "pQueueLabels_" + std::to_string(consumer.GetNextId()); + std::string pqueue_labels_names; + for (uint32_t idx = 0; idx < structInfo->queueLabelCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pQueueLabels + idx != NULL) { + variable_name = GenerateStruct_VkDebugUtilsLabelEXT(out, + structInfo->pQueueLabels + idx, + metaInfo->pQueueLabels->GetMetaStructPointer() + idx, + consumer); + } + pqueue_labels_names += variable_name + ", "; + } + out << "\t\t" << "VkDebugUtilsLabelEXT " << pqueue_labels_array << "[] = {" << pqueue_labels_names << "};" << std::endl; + } + std::string pcmd_buf_labels_array = "NULL"; + if (structInfo->pCmdBufLabels != NULL) { + pcmd_buf_labels_array = "pCmdBufLabels_" + std::to_string(consumer.GetNextId()); + std::string pcmd_buf_labels_names; + for (uint32_t idx = 0; idx < structInfo->cmdBufLabelCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pCmdBufLabels + idx != NULL) { + variable_name = GenerateStruct_VkDebugUtilsLabelEXT(out, + structInfo->pCmdBufLabels + idx, + metaInfo->pCmdBufLabels->GetMetaStructPointer() + idx, + consumer); + } + pcmd_buf_labels_names += variable_name + ", "; + } + out << "\t\t" << "VkDebugUtilsLabelEXT " << pcmd_buf_labels_array << "[] = {" << pcmd_buf_labels_names << "};" << std::endl; + } + std::string pobjects_array = "NULL"; + if (structInfo->pObjects != NULL) { + pobjects_array = "pObjects_" + std::to_string(consumer.GetNextId()); + std::string pobjects_names; + for (uint32_t idx = 0; idx < structInfo->objectCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pObjects + idx != NULL) { + variable_name = GenerateStruct_VkDebugUtilsObjectNameInfoEXT(out, + structInfo->pObjects + idx, + metaInfo->pObjects->GetMetaStructPointer() + idx, + consumer); + } + pobjects_names += variable_name + ", "; + } + out << "\t\t" << "VkDebugUtilsObjectNameInfoEXT " << pobjects_array << "[] = {" << pobjects_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dedicatedAllocation << ","; - std::string variable_name = consumer.AddStruct(struct_body, "dedicatedAllocationBufferCreateInfoNV"); - out << "\t\t" << "VkDedicatedAllocationBufferCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDebugUtilsMessengerCallbackDataFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pMessageIdName) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->messageIdNumber << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pMessage) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->queueLabelCount << "," << std::endl; + struct_body << "\t\t\t" << pqueue_labels_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->cmdBufLabelCount << "," << std::endl; + struct_body << "\t\t\t" << pcmd_buf_labels_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->objectCount << "," << std::endl; + struct_body << "\t\t\t" << pobjects_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "debugUtilsMessengerCallbackDataEXT"); + out << "\t\t" << "VkDebugUtilsMessengerCallbackDataEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDedicatedAllocationImageCreateInfoNV(std::ostream &out, const VkDedicatedAllocationImageCreateInfoNV* structInfo, Decoded_VkDedicatedAllocationImageCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDebugUtilsObjectNameInfoEXT(std::ostream &out, const VkDebugUtilsObjectNameInfoEXT* structInfo, Decoded_VkDebugUtilsObjectNameInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dedicatedAllocation << ","; - std::string variable_name = consumer.AddStruct(struct_body, "dedicatedAllocationImageCreateInfoNV"); - out << "\t\t" << "VkDedicatedAllocationImageCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkObjectType(" << structInfo->objectType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->objectHandle << "UL" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pObjectName) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "debugUtilsObjectNameInfoEXT"); + out << "\t\t" << "VkDebugUtilsObjectNameInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDedicatedAllocationMemoryAllocateInfoNV(std::ostream &out, const VkDedicatedAllocationMemoryAllocateInfoNV* structInfo, Decoded_VkDedicatedAllocationMemoryAllocateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDebugUtilsObjectTagInfoEXT(std::ostream &out, const VkDebugUtilsObjectTagInfoEXT* structInfo, Decoded_VkDebugUtilsObjectTagInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string ptag_array = "NULL"; + if (structInfo->pTag != NULL) { + std::string ptag_values; + for (uint32_t idx0 = 0; idx0 < structInfo->tagSize; ++idx0) { + ptag_values += std::to_string(reinterpret_cast(structInfo->pTag)[idx0]) + ", "; + } + ptag_array = "pTag_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint8_t " << ptag_array << "[] = {" << ptag_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "dedicatedAllocationMemoryAllocateInfoNV"); - out << "\t\t" << "VkDedicatedAllocationMemoryAllocateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkObjectType(" << structInfo->objectType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->objectHandle << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tagName << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tagSize << "," << std::endl; + struct_body << "\t\t\t" << ptag_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "debugUtilsObjectTagInfoEXT"); + out << "\t\t" << "VkDebugUtilsObjectTagInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceTransformFeedbackFeaturesEXT(std::ostream &out, const VkPhysicalDeviceTransformFeedbackFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceTransformFeedbackFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAndroidHardwareBufferFormatProperties2ANDROID(std::ostream &out, const VkAndroidHardwareBufferFormatProperties2ANDROID* structInfo, Decoded_VkAndroidHardwareBufferFormatProperties2ANDROID* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string sampler_ycbcr_conversion_components_info_var = GenerateStruct_VkComponentMapping(out, + &structInfo->samplerYcbcrConversionComponents, + metaInfo->samplerYcbcrConversionComponents, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->transformFeedback << "," << std::endl; - struct_body << "\t\t\t" << structInfo->geometryStreams << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTransformFeedbackFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceTransformFeedbackFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->externalFormat << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormatFeatureFlags2(" << structInfo->formatFeatures << ")" << "," << std::endl; + struct_body << "\t\t\t" << sampler_ycbcr_conversion_components_info_var << "," << std::endl; + struct_body << "\t\t\t" << "VkSamplerYcbcrModelConversion(" << structInfo->suggestedYcbcrModel << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSamplerYcbcrRange(" << structInfo->suggestedYcbcrRange << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->suggestedXChromaOffset << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->suggestedYChromaOffset << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "androidHardwareBufferFormatProperties2ANDROID"); + out << "\t\t" << "VkAndroidHardwareBufferFormatProperties2ANDROID " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceTransformFeedbackPropertiesEXT(std::ostream &out, const VkPhysicalDeviceTransformFeedbackPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceTransformFeedbackPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAndroidHardwareBufferFormatPropertiesANDROID(std::ostream &out, const VkAndroidHardwareBufferFormatPropertiesANDROID* structInfo, Decoded_VkAndroidHardwareBufferFormatPropertiesANDROID* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string sampler_ycbcr_conversion_components_info_var = GenerateStruct_VkComponentMapping(out, + &structInfo->samplerYcbcrConversionComponents, + metaInfo->samplerYcbcrConversionComponents, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTransformFeedbackStreams << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTransformFeedbackBuffers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTransformFeedbackBufferSize << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTransformFeedbackStreamDataSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTransformFeedbackBufferDataSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTransformFeedbackBufferDataStride << "," << std::endl; - struct_body << "\t\t\t" << structInfo->transformFeedbackQueries << "," << std::endl; - struct_body << "\t\t\t" << structInfo->transformFeedbackStreamsLinesTriangles << "," << std::endl; - struct_body << "\t\t\t" << structInfo->transformFeedbackRasterizationStreamSelect << "," << std::endl; - struct_body << "\t\t\t" << structInfo->transformFeedbackDraw << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTransformFeedbackPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceTransformFeedbackPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->externalFormat << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormatFeatureFlags(" << structInfo->formatFeatures << ")" << "," << std::endl; + struct_body << "\t\t\t" << sampler_ycbcr_conversion_components_info_var << "," << std::endl; + struct_body << "\t\t\t" << "VkSamplerYcbcrModelConversion(" << structInfo->suggestedYcbcrModel << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSamplerYcbcrRange(" << structInfo->suggestedYcbcrRange << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->suggestedXChromaOffset << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->suggestedYChromaOffset << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "androidHardwareBufferFormatPropertiesANDROID"); + out << "\t\t" << "VkAndroidHardwareBufferFormatPropertiesANDROID " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineRasterizationStateStreamCreateInfoEXT(std::ostream &out, const VkPipelineRasterizationStateStreamCreateInfoEXT* structInfo, Decoded_VkPipelineRasterizationStateStreamCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAndroidHardwareBufferPropertiesANDROID(std::ostream &out, const VkAndroidHardwareBufferPropertiesANDROID* structInfo, Decoded_VkAndroidHardwareBufferPropertiesANDROID* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRasterizationStateStreamCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->rasterizationStream << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineRasterizationStateStreamCreateInfoEXT"); - out << "\t\t" << "VkPipelineRasterizationStateStreamCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->allocationSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryTypeBits << ","; + std::string variable_name = consumer.AddStruct(struct_body, "androidHardwareBufferPropertiesANDROID"); + out << "\t\t" << "VkAndroidHardwareBufferPropertiesANDROID " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageViewAddressPropertiesNVX(std::ostream &out, const VkImageViewAddressPropertiesNVX* structInfo, Decoded_VkImageViewAddressPropertiesNVX* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAndroidHardwareBufferUsageANDROID(std::ostream &out, const VkAndroidHardwareBufferUsageANDROID* structInfo, Decoded_VkAndroidHardwareBufferUsageANDROID* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceAddress << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageViewAddressPropertiesNVX"); - out << "\t\t" << "VkImageViewAddressPropertiesNVX " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->androidHardwareBufferUsage << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "androidHardwareBufferUsageANDROID"); + out << "\t\t" << "VkAndroidHardwareBufferUsageANDROID " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageViewHandleInfoNVX(std::ostream &out, const VkImageViewHandleInfoNVX* structInfo, Decoded_VkImageViewHandleInfoNVX* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExternalFormatANDROID(std::ostream &out, const VkExternalFormatANDROID* structInfo, Decoded_VkExternalFormatANDROID* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->imageView) << "," << std::endl; - struct_body << "\t\t\t" << "VkDescriptorType(" << structInfo->descriptorType << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->sampler) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageViewHandleInfoNVX"); - out << "\t\t" << "VkImageViewHandleInfoNVX " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->externalFormat << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "externalFormatANDROID"); + out << "\t\t" << "VkExternalFormatANDROID " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkTextureLODGatherFormatPropertiesAMD(std::ostream &out, const VkTextureLODGatherFormatPropertiesAMD* structInfo, Decoded_VkTextureLODGatherFormatPropertiesAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryGetAndroidHardwareBufferInfoANDROID(std::ostream &out, const VkMemoryGetAndroidHardwareBufferInfoANDROID* structInfo, Decoded_VkMemoryGetAndroidHardwareBufferInfoANDROID* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->supportsTextureGatherLODBiasAMD << ","; - std::string variable_name = consumer.AddStruct(struct_body, "textureLODGatherFormatPropertiesAMD"); - out << "\t\t" << "VkTextureLODGatherFormatPropertiesAMD " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryGetAndroidHardwareBufferInfoANDROID"); + out << "\t\t" << "VkMemoryGetAndroidHardwareBufferInfoANDROID " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkShaderResourceUsageAMD(std::ostream &out, const VkShaderResourceUsageAMD* structInfo, Decoded_VkShaderResourceUsageAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAttachmentSampleCountInfoAMD(std::ostream &out, const VkAttachmentSampleCountInfoAMD* structInfo, Decoded_VkAttachmentSampleCountInfoAMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->numUsedVgprs << "," << std::endl; - struct_body << "\t\t\t" << structInfo->numUsedSgprs << "," << std::endl; - struct_body << "\t\t\t" << structInfo->ldsSizePerLocalWorkGroup << "," << std::endl; - struct_body << "\t\t\t" << structInfo->ldsUsageSizeInBytes << "," << std::endl; - struct_body << "\t\t\t" << structInfo->scratchMemUsageInBytes << ","; - std::string variable_name = consumer.AddStruct(struct_body, "shaderResourceUsageAMD"); - out << "\t\t" << "VkShaderResourceUsageAMD " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pcolor_attachment_samples_values; + std::string pcolor_attachment_samples_array = "NULL"; + if (structInfo->pColorAttachmentSamples != NULL) { + for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { + pcolor_attachment_samples_values += util::ToString(structInfo->pColorAttachmentSamples[idx]) + ", "; + } + pcolor_attachment_samples_array = "pColorAttachmentSamples_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkSampleCountFlagBits " << pcolor_attachment_samples_array << "[] = {" << pcolor_attachment_samples_values << "};" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pcolor_attachment_samples_array << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->depthStencilAttachmentSamples << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "attachmentSampleCountInfoAMD"); + out << "\t\t" << "VkAttachmentSampleCountInfoAMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkShaderStatisticsInfoAMD(std::ostream &out, const VkShaderStatisticsInfoAMD* structInfo, Decoded_VkShaderStatisticsInfoAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAttachmentSampleLocationsEXT(std::ostream &out, const VkAttachmentSampleLocationsEXT* structInfo, Decoded_VkAttachmentSampleLocationsEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string resource_usage_info_var = GenerateStruct_VkShaderResourceUsageAMD(out, - &structInfo->resourceUsage, - metaInfo->resourceUsage, - consumer); - struct_body << "\t" << "VkShaderStageFlags(" << structInfo->shaderStageMask << ")" << "," << std::endl; - struct_body << "\t\t\t" << resource_usage_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->numPhysicalVgprs << "," << std::endl; - struct_body << "\t\t\t" << structInfo->numPhysicalSgprs << "," << std::endl; - struct_body << "\t\t\t" << structInfo->numAvailableVgprs << "," << std::endl; - struct_body << "\t\t\t" << structInfo->numAvailableSgprs << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->computeWorkGroupSize[0]), 3) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "shaderStatisticsInfoAMD"); - out << "\t\t" << "VkShaderStatisticsInfoAMD " << variable_name << " {" << std::endl; + std::string sample_locations_info_info_var = GenerateStruct_VkSampleLocationsInfoEXT(out, + &structInfo->sampleLocationsInfo, + metaInfo->sampleLocationsInfo, + consumer); + struct_body << "\t" << structInfo->attachmentIndex << "," << std::endl; + struct_body << "\t\t\t" << sample_locations_info_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "attachmentSampleLocationsEXT"); + out << "\t\t" << "VkAttachmentSampleLocationsEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkStreamDescriptorSurfaceCreateInfoGGP(std::ostream &out, const VkStreamDescriptorSurfaceCreateInfoGGP* structInfo, Decoded_VkStreamDescriptorSurfaceCreateInfoGGP* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMultisamplePropertiesEXT(std::ostream &out, const VkMultisamplePropertiesEXT* structInfo, Decoded_VkMultisamplePropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string max_sample_location_grid_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxSampleLocationGridSize, + metaInfo->maxSampleLocationGridSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkStreamDescriptorSurfaceCreateFlagsGGP(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->streamDescriptor << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "streamDescriptorSurfaceCreateInfoGGP"); - out << "\t\t" << "VkStreamDescriptorSurfaceCreateInfoGGP " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << max_sample_location_grid_size_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "multisamplePropertiesEXT"); + out << "\t\t" << "VkMultisamplePropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceCornerSampledImageFeaturesNV(std::ostream &out, const VkPhysicalDeviceCornerSampledImageFeaturesNV* structInfo, Decoded_VkPhysicalDeviceCornerSampledImageFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceSampleLocationsPropertiesEXT(std::ostream &out, const VkPhysicalDeviceSampleLocationsPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceSampleLocationsPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string max_sample_location_grid_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxSampleLocationGridSize, + metaInfo->maxSampleLocationGridSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cornerSampledImage << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCornerSampledImageFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceCornerSampledImageFeaturesNV " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkExternalImageFormatPropertiesNV(std::ostream &out, const VkExternalImageFormatPropertiesNV* structInfo, Decoded_VkExternalImageFormatPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string image_format_properties_info_var = GenerateStruct_VkImageFormatProperties(out, - &structInfo->imageFormatProperties, - metaInfo->imageFormatProperties, - consumer); - struct_body << "\t" << image_format_properties_info_var << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryFeatureFlagsNV(" << structInfo->externalMemoryFeatures << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagsNV(" << structInfo->exportFromImportedHandleTypes << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagsNV(" << structInfo->compatibleHandleTypes << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "externalImageFormatPropertiesNV"); - out << "\t\t" << "VkExternalImageFormatPropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->sampleLocationSampleCounts << ")" << "," << std::endl; + struct_body << "\t\t\t" << max_sample_location_grid_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->sampleLocationCoordinateRange[0]), 2) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sampleLocationSubPixelBits << "," << std::endl; + struct_body << "\t\t\t" << structInfo->variableSampleLocations << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSampleLocationsPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceSampleLocationsPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExportMemoryAllocateInfoNV(std::ostream &out, const VkExportMemoryAllocateInfoNV* structInfo, Decoded_VkExportMemoryAllocateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineSampleLocationsStateCreateInfoEXT(std::ostream &out, const VkPipelineSampleLocationsStateCreateInfoEXT* structInfo, Decoded_VkPipelineSampleLocationsStateCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string sample_locations_info_info_var = GenerateStruct_VkSampleLocationsInfoEXT(out, + &structInfo->sampleLocationsInfo, + metaInfo->sampleLocationsInfo, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagsNV(" << structInfo->handleTypes << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "exportMemoryAllocateInfoNV"); - out << "\t\t" << "VkExportMemoryAllocateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->sampleLocationsEnable << "," << std::endl; + struct_body << "\t\t\t" << sample_locations_info_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineSampleLocationsStateCreateInfoEXT"); + out << "\t\t" << "VkPipelineSampleLocationsStateCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExternalMemoryImageCreateInfoNV(std::ostream &out, const VkExternalMemoryImageCreateInfoNV* structInfo, Decoded_VkExternalMemoryImageCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassSampleLocationsBeginInfoEXT(std::ostream &out, const VkRenderPassSampleLocationsBeginInfoEXT* structInfo, Decoded_VkRenderPassSampleLocationsBeginInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pattachment_initial_sample_locations_array = "NULL"; + if (structInfo->pAttachmentInitialSampleLocations != NULL) { + pattachment_initial_sample_locations_array = "pAttachmentInitialSampleLocations_" + std::to_string(consumer.GetNextId()); + std::string pattachment_initial_sample_locations_names; + for (uint32_t idx = 0; idx < structInfo->attachmentInitialSampleLocationsCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pAttachmentInitialSampleLocations + idx != NULL) { + variable_name = GenerateStruct_VkAttachmentSampleLocationsEXT(out, + structInfo->pAttachmentInitialSampleLocations + idx, + metaInfo->pAttachmentInitialSampleLocations->GetMetaStructPointer() + idx, + consumer); + } + pattachment_initial_sample_locations_names += variable_name + ", "; + } + out << "\t\t" << "VkAttachmentSampleLocationsEXT " << pattachment_initial_sample_locations_array << "[] = {" << pattachment_initial_sample_locations_names << "};" << std::endl; + } + std::string ppost_subpass_sample_locations_array = "NULL"; + if (structInfo->pPostSubpassSampleLocations != NULL) { + ppost_subpass_sample_locations_array = "pPostSubpassSampleLocations_" + std::to_string(consumer.GetNextId()); + std::string ppost_subpass_sample_locations_names; + for (uint32_t idx = 0; idx < structInfo->postSubpassSampleLocationsCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pPostSubpassSampleLocations + idx != NULL) { + variable_name = GenerateStruct_VkSubpassSampleLocationsEXT(out, + structInfo->pPostSubpassSampleLocations + idx, + metaInfo->pPostSubpassSampleLocations->GetMetaStructPointer() + idx, + consumer); + } + ppost_subpass_sample_locations_names += variable_name + ", "; + } + out << "\t\t" << "VkSubpassSampleLocationsEXT " << ppost_subpass_sample_locations_array << "[] = {" << ppost_subpass_sample_locations_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagsNV(" << structInfo->handleTypes << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "externalMemoryImageCreateInfoNV"); - out << "\t\t" << "VkExternalMemoryImageCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->attachmentInitialSampleLocationsCount << "," << std::endl; + struct_body << "\t\t\t" << pattachment_initial_sample_locations_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->postSubpassSampleLocationsCount << "," << std::endl; + struct_body << "\t\t\t" << ppost_subpass_sample_locations_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassSampleLocationsBeginInfoEXT"); + out << "\t\t" << "VkRenderPassSampleLocationsBeginInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExportMemoryWin32HandleInfoNV(std::ostream &out, const VkExportMemoryWin32HandleInfoNV* structInfo, Decoded_VkExportMemoryWin32HandleInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSampleLocationEXT(std::ostream &out, const VkSampleLocationEXT* structInfo, Decoded_VkSampleLocationEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pAttributes << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dwAccess << ","; - std::string variable_name = consumer.AddStruct(struct_body, "exportMemoryWin32HandleInfoNV"); - out << "\t\t" << "VkExportMemoryWin32HandleInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->x << "," << std::endl; + struct_body << "\t\t\t" << structInfo->y << ","; + std::string variable_name = consumer.AddStruct(struct_body, "sampleLocationEXT"); + out << "\t\t" << "VkSampleLocationEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImportMemoryWin32HandleInfoNV(std::ostream &out, const VkImportMemoryWin32HandleInfoNV* structInfo, Decoded_VkImportMemoryWin32HandleInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSampleLocationsInfoEXT(std::ostream &out, const VkSampleLocationsInfoEXT* structInfo, Decoded_VkSampleLocationsInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string sample_location_grid_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->sampleLocationGridSize, + metaInfo->sampleLocationGridSize, + consumer); + std::string psample_locations_array = "NULL"; + if (structInfo->pSampleLocations != NULL) { + psample_locations_array = "pSampleLocations_" + std::to_string(consumer.GetNextId()); + std::string psample_locations_names; + for (uint32_t idx = 0; idx < structInfo->sampleLocationsCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pSampleLocations + idx != NULL) { + variable_name = GenerateStruct_VkSampleLocationEXT(out, + structInfo->pSampleLocations + idx, + metaInfo->pSampleLocations->GetMetaStructPointer() + idx, + consumer); + } + psample_locations_names += variable_name + ", "; + } + out << "\t\t" << "VkSampleLocationEXT " << psample_locations_array << "[] = {" << psample_locations_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagsNV(" << structInfo->handleType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->handle << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "importMemoryWin32HandleInfoNV"); - out << "\t\t" << "VkImportMemoryWin32HandleInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->sampleLocationsPerPixel << ")" << "," << std::endl; + struct_body << "\t\t\t" << sample_location_grid_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sampleLocationsCount << "," << std::endl; + struct_body << "\t\t\t" << psample_locations_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "sampleLocationsInfoEXT"); + out << "\t\t" << "VkSampleLocationsInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkWin32KeyedMutexAcquireReleaseInfoNV(std::ostream &out, const VkWin32KeyedMutexAcquireReleaseInfoNV* structInfo, Decoded_VkWin32KeyedMutexAcquireReleaseInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSubpassSampleLocationsEXT(std::ostream &out, const VkSubpassSampleLocationsEXT* structInfo, Decoded_VkSubpassSampleLocationsEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pacquire_syncs_array = "NULL"; - if (metaInfo->pAcquireSyncs.GetPointer() != NULL && structInfo->acquireCount > 0) { - pacquire_syncs_array = "pacquire_syncs_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DEVICE_MEMORY)); - std::string pacquire_syncs_values = toStringJoin(metaInfo->pAcquireSyncs.GetPointer(), - metaInfo->pAcquireSyncs.GetPointer() + structInfo->acquireCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->acquireCount == 1) { - pacquire_syncs_array = "&" + pacquire_syncs_values; - } else if (structInfo->acquireCount > 1) { - out << "\t\t" << "VkDeviceMemory " << pacquire_syncs_array << "[] = {" << pacquire_syncs_values << "};" << std::endl; - } - } - std::string pacquire_keys_array = "pacquire_keys_array_" + std::to_string(consumer.GetNextId()); - if (structInfo->acquireCount > 0) { - std::string pacquire_keys_values = toStringJoin(structInfo->pAcquireKeys, - structInfo->pAcquireKeys + structInfo->acquireCount, - [](uint64_t current) { return std::to_string(current); }, - ", "); - if (structInfo->acquireCount == 1) { - pacquire_keys_array = "&" + pacquire_keys_values; - } else if (structInfo->acquireCount > 1) { - out << "\t\t" << "uint64_t " << pacquire_keys_array << "[] = {" << pacquire_keys_values << "};" << std::endl; - } - } - std::string pacquire_timeout_milliseconds_array = "NULL"; - if (structInfo->pAcquireTimeoutMilliseconds != NULL) { - pacquire_timeout_milliseconds_array = "pAcquireTimeoutMilliseconds_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pacquire_timeout_milliseconds_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pAcquireTimeoutMilliseconds, structInfo->acquireCount) << ";" << std::endl; - } - std::string prelease_syncs_array = "NULL"; - if (metaInfo->pReleaseSyncs.GetPointer() != NULL && structInfo->releaseCount > 0) { - prelease_syncs_array = "prelease_syncs_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DEVICE_MEMORY)); - std::string prelease_syncs_values = toStringJoin(metaInfo->pReleaseSyncs.GetPointer(), - metaInfo->pReleaseSyncs.GetPointer() + structInfo->releaseCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->releaseCount == 1) { - prelease_syncs_array = "&" + prelease_syncs_values; - } else if (structInfo->releaseCount > 1) { - out << "\t\t" << "VkDeviceMemory " << prelease_syncs_array << "[] = {" << prelease_syncs_values << "};" << std::endl; - } - } - std::string prelease_keys_array = "prelease_keys_array_" + std::to_string(consumer.GetNextId()); - if (structInfo->releaseCount > 0) { - std::string prelease_keys_values = toStringJoin(structInfo->pReleaseKeys, - structInfo->pReleaseKeys + structInfo->releaseCount, - [](uint64_t current) { return std::to_string(current); }, - ", "); - if (structInfo->releaseCount == 1) { - prelease_keys_array = "&" + prelease_keys_values; - } else if (structInfo->releaseCount > 1) { - out << "\t\t" << "uint64_t " << prelease_keys_array << "[] = {" << prelease_keys_values << "};" << std::endl; - } - } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->acquireCount << "," << std::endl; - struct_body << "\t\t\t" << pacquire_syncs_array << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << pacquire_keys_array << " }" << "," << std::endl; - struct_body << "\t\t\t" << pacquire_timeout_milliseconds_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->releaseCount << "," << std::endl; - struct_body << "\t\t\t" << prelease_syncs_array << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << prelease_keys_array << " }" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "win32KeyedMutexAcquireReleaseInfoNV"); - out << "\t\t" << "VkWin32KeyedMutexAcquireReleaseInfoNV " << variable_name << " {" << std::endl; + std::string sample_locations_info_info_var = GenerateStruct_VkSampleLocationsInfoEXT(out, + &structInfo->sampleLocationsInfo, + metaInfo->sampleLocationsInfo, + consumer); + struct_body << "\t" << structInfo->subpassIndex << "," << std::endl; + struct_body << "\t\t\t" << sample_locations_info_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "subpassSampleLocationsEXT"); + out << "\t\t" << "VkSubpassSampleLocationsEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkValidationFlagsEXT(std::ostream &out, const VkValidationFlagsEXT* structInfo, Decoded_VkValidationFlagsEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(std::ostream &out, const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdisabled_validation_checks_values; - std::string pdisabled_validation_checks_array = "NULL"; - if (structInfo->pDisabledValidationChecks != NULL) { - for (uint32_t idx = 0; idx < structInfo->disabledValidationCheckCount; idx++) { - pdisabled_validation_checks_values += util::ToString(structInfo->pDisabledValidationChecks[idx]) + ", "; - } - pdisabled_validation_checks_array = "pDisabledValidationChecks_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkValidationCheckEXT " << pdisabled_validation_checks_array << "[] = {" << pdisabled_validation_checks_values << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->disabledValidationCheckCount << "," << std::endl; - struct_body << "\t\t\t" << pdisabled_validation_checks_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "validationFlagsEXT"); - out << "\t\t" << "VkValidationFlagsEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->advancedBlendCoherentOperations << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceBlendOperationAdvancedFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkViSurfaceCreateInfoNN(std::ostream &out, const VkViSurfaceCreateInfoNN* structInfo, Decoded_VkViSurfaceCreateInfoNN* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(std::ostream &out, const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkViSurfaceCreateFlagsNN(" << structInfo->flags << ")" << "," << std::endl; - out << "\t\t" << "// TODO: Support window (non-struct output) argument." << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "viSurfaceCreateInfoNN"); - out << "\t\t" << "VkViSurfaceCreateInfoNN " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->advancedBlendMaxColorAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->advancedBlendIndependentBlend << "," << std::endl; + struct_body << "\t\t\t" << structInfo->advancedBlendNonPremultipliedSrcColor << "," << std::endl; + struct_body << "\t\t\t" << structInfo->advancedBlendNonPremultipliedDstColor << "," << std::endl; + struct_body << "\t\t\t" << structInfo->advancedBlendCorrelatedOverlap << "," << std::endl; + struct_body << "\t\t\t" << structInfo->advancedBlendAllOperations << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceBlendOperationAdvancedPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageViewASTCDecodeModeEXT(std::ostream &out, const VkImageViewASTCDecodeModeEXT* structInfo, Decoded_VkImageViewASTCDecodeModeEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineColorBlendAdvancedStateCreateInfoEXT(std::ostream &out, const VkPipelineColorBlendAdvancedStateCreateInfoEXT* structInfo, Decoded_VkPipelineColorBlendAdvancedStateCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->decodeMode << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageViewASTCDecodeModeEXT"); - out << "\t\t" << "VkImageViewASTCDecodeModeEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->srcPremultiplied << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstPremultiplied << "," << std::endl; + struct_body << "\t\t\t" << "VkBlendOverlapEXT(" << structInfo->blendOverlap << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineColorBlendAdvancedStateCreateInfoEXT"); + out << "\t\t" << "VkPipelineColorBlendAdvancedStateCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceASTCDecodeFeaturesEXT(std::ostream &out, const VkPhysicalDeviceASTCDecodeFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceASTCDecodeFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineCoverageToColorStateCreateInfoNV(std::ostream &out, const VkPipelineCoverageToColorStateCreateInfoNV* structInfo, Decoded_VkPipelineCoverageToColorStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->decodeModeSharedExponent << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceASTCDecodeFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceASTCDecodeFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineCoverageToColorStateCreateFlagsNV(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->coverageToColorEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->coverageToColorLocation << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineCoverageToColorStateCreateInfoNV"); + out << "\t\t" << "VkPipelineCoverageToColorStateCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCommandBufferInheritanceConditionalRenderingInfoEXT(std::ostream &out, const VkCommandBufferInheritanceConditionalRenderingInfoEXT* structInfo, Decoded_VkCommandBufferInheritanceConditionalRenderingInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineCoverageModulationStateCreateInfoNV(std::ostream &out, const VkPipelineCoverageModulationStateCreateInfoNV* structInfo, Decoded_VkPipelineCoverageModulationStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pcoverage_modulation_table_array = "NULL"; + if (structInfo->pCoverageModulationTable != NULL) { + pcoverage_modulation_table_array = "pCoverageModulationTable_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "float " << pcoverage_modulation_table_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pCoverageModulationTable, structInfo->coverageModulationTableCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->conditionalRenderingEnable << ","; - std::string variable_name = consumer.AddStruct(struct_body, "commandBufferInheritanceConditionalRenderingInfoEXT"); - out << "\t\t" << "VkCommandBufferInheritanceConditionalRenderingInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineCoverageModulationStateCreateFlagsNV(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkCoverageModulationModeNV(" << structInfo->coverageModulationMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->coverageModulationTableEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->coverageModulationTableCount << "," << std::endl; + struct_body << "\t\t\t" << pcoverage_modulation_table_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineCoverageModulationStateCreateInfoNV"); + out << "\t\t" << "VkPipelineCoverageModulationStateCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkConditionalRenderingBeginInfoEXT(std::ostream &out, const VkConditionalRenderingBeginInfoEXT* structInfo, Decoded_VkConditionalRenderingBeginInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(std::ostream &out, const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* structInfo, Decoded_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkConditionalRenderingFlagsEXT(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "conditionalRenderingBeginInfoEXT"); - out << "\t\t" << "VkConditionalRenderingBeginInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSMBuiltins << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderSMBuiltinsFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceShaderSMBuiltinsFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceConditionalRenderingFeaturesEXT(std::ostream &out, const VkPhysicalDeviceConditionalRenderingFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceConditionalRenderingFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(std::ostream &out, const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* structInfo, Decoded_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->conditionalRendering << "," << std::endl; - struct_body << "\t\t\t" << structInfo->inheritedConditionalRendering << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceConditionalRenderingFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceConditionalRenderingFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSMCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderWarpsPerSM << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderSMBuiltinsPropertiesNV"); + out << "\t\t" << "VkPhysicalDeviceShaderSMBuiltinsPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineViewportWScalingStateCreateInfoNV(std::ostream &out, const VkPipelineViewportWScalingStateCreateInfoNV* structInfo, Decoded_VkPipelineViewportWScalingStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDrmFormatModifierProperties2EXT(std::ostream &out, const VkDrmFormatModifierProperties2EXT* structInfo, Decoded_VkDrmFormatModifierProperties2EXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pviewport_w_scalings_array = "NULL"; - if (structInfo->pViewportWScalings != NULL) { - pviewport_w_scalings_array = "pViewportWScalings_" + std::to_string(consumer.GetNextId()); - std::string pviewport_w_scalings_names; - for (uint32_t idx = 0; idx < structInfo->viewportCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pViewportWScalings + idx != NULL) { - variable_name = GenerateStruct_VkViewportWScalingNV(out, - structInfo->pViewportWScalings + idx, - metaInfo->pViewportWScalings->GetMetaStructPointer() + idx, - consumer); - } - pviewport_w_scalings_names += variable_name + ", "; - } - out << "\t\t" << "VkViewportWScalingNV " << pviewport_w_scalings_array << "[] = {" << pviewport_w_scalings_names << "};" << std::endl; - } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewportWScalingEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewportCount << "," << std::endl; - struct_body << "\t\t\t" << pviewport_w_scalings_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineViewportWScalingStateCreateInfoNV"); - out << "\t\t" << "VkPipelineViewportWScalingStateCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->drmFormatModifier << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->drmFormatModifierPlaneCount << "," << std::endl; + struct_body << "\t\t\t" << "VkFormatFeatureFlags2(" << structInfo->drmFormatModifierTilingFeatures << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "drmFormatModifierProperties2EXT"); + out << "\t\t" << "VkDrmFormatModifierProperties2EXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } - -std::string GenerateStruct_VkViewportWScalingNV(std::ostream &out, const VkViewportWScalingNV* structInfo, Decoded_VkViewportWScalingNV* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->xcoeff << "," << std::endl; - struct_body << "\t\t\t" << structInfo->ycoeff << ","; - std::string variable_name = consumer.AddStruct(struct_body, "viewportWScalingNV"); - out << "\t\t" << "VkViewportWScalingNV " << variable_name << " {" << std::endl; + +std::string GenerateStruct_VkDrmFormatModifierPropertiesEXT(std::ostream &out, const VkDrmFormatModifierPropertiesEXT* structInfo, Decoded_VkDrmFormatModifierPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + struct_body << "\t" << structInfo->drmFormatModifier << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->drmFormatModifierPlaneCount << "," << std::endl; + struct_body << "\t\t\t" << "VkFormatFeatureFlags(" << structInfo->drmFormatModifierTilingFeatures << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "drmFormatModifierPropertiesEXT"); + out << "\t\t" << "VkDrmFormatModifierPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfaceCapabilities2EXT(std::ostream &out, const VkSurfaceCapabilities2EXT* structInfo, Decoded_VkSurfaceCapabilities2EXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDrmFormatModifierPropertiesList2EXT(std::ostream &out, const VkDrmFormatModifierPropertiesList2EXT* structInfo, Decoded_VkDrmFormatModifierPropertiesList2EXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string current_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->currentExtent, - metaInfo->currentExtent, - consumer); - std::string min_image_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->minImageExtent, - metaInfo->minImageExtent, - consumer); - std::string max_image_extent_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxImageExtent, - metaInfo->maxImageExtent, - consumer); + std::string pdrm_format_modifier_properties_array = "NULL"; + if (structInfo->pDrmFormatModifierProperties != NULL) { + pdrm_format_modifier_properties_array = "pDrmFormatModifierProperties_" + std::to_string(consumer.GetNextId()); + std::string pdrm_format_modifier_properties_names; + for (uint32_t idx = 0; idx < structInfo->drmFormatModifierCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pDrmFormatModifierProperties + idx != NULL) { + variable_name = GenerateStruct_VkDrmFormatModifierProperties2EXT(out, + structInfo->pDrmFormatModifierProperties + idx, + metaInfo->pDrmFormatModifierProperties->GetMetaStructPointer() + idx, + consumer); + } + pdrm_format_modifier_properties_names += variable_name + ", "; + } + out << "\t\t" << "VkDrmFormatModifierProperties2EXT " << pdrm_format_modifier_properties_array << "[] = {" << pdrm_format_modifier_properties_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minImageCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxImageCount << "," << std::endl; - struct_body << "\t\t\t" << current_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << min_image_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_image_extent_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxImageArrayLayers << "," << std::endl; - struct_body << "\t\t\t" << "VkSurfaceTransformFlagsKHR(" << structInfo->supportedTransforms << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSurfaceTransformFlagBitsKHR(" << structInfo->currentTransform << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkCompositeAlphaFlagsKHR(" << structInfo->supportedCompositeAlpha << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->supportedUsageFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSurfaceCounterFlagsEXT(" << structInfo->supportedSurfaceCounters << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfaceCapabilities2EXT"); - out << "\t\t" << "VkSurfaceCapabilities2EXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->drmFormatModifierCount << "," << std::endl; + struct_body << "\t\t\t" << pdrm_format_modifier_properties_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "drmFormatModifierPropertiesList2EXT"); + out << "\t\t" << "VkDrmFormatModifierPropertiesList2EXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceEventInfoEXT(std::ostream &out, const VkDeviceEventInfoEXT* structInfo, Decoded_VkDeviceEventInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDrmFormatModifierPropertiesListEXT(std::ostream &out, const VkDrmFormatModifierPropertiesListEXT* structInfo, Decoded_VkDrmFormatModifierPropertiesListEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pdrm_format_modifier_properties_array = "NULL"; + if (structInfo->pDrmFormatModifierProperties != NULL) { + pdrm_format_modifier_properties_array = "pDrmFormatModifierProperties_" + std::to_string(consumer.GetNextId()); + std::string pdrm_format_modifier_properties_names; + for (uint32_t idx = 0; idx < structInfo->drmFormatModifierCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pDrmFormatModifierProperties + idx != NULL) { + variable_name = GenerateStruct_VkDrmFormatModifierPropertiesEXT(out, + structInfo->pDrmFormatModifierProperties + idx, + metaInfo->pDrmFormatModifierProperties->GetMetaStructPointer() + idx, + consumer); + } + pdrm_format_modifier_properties_names += variable_name + ", "; + } + out << "\t\t" << "VkDrmFormatModifierPropertiesEXT " << pdrm_format_modifier_properties_array << "[] = {" << pdrm_format_modifier_properties_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDeviceEventTypeEXT(" << structInfo->deviceEvent << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceEventInfoEXT"); - out << "\t\t" << "VkDeviceEventInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->drmFormatModifierCount << "," << std::endl; + struct_body << "\t\t\t" << pdrm_format_modifier_properties_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "drmFormatModifierPropertiesListEXT"); + out << "\t\t" << "VkDrmFormatModifierPropertiesListEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayEventInfoEXT(std::ostream &out, const VkDisplayEventInfoEXT* structInfo, Decoded_VkDisplayEventInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageDrmFormatModifierExplicitCreateInfoEXT(std::ostream &out, const VkImageDrmFormatModifierExplicitCreateInfoEXT* structInfo, Decoded_VkImageDrmFormatModifierExplicitCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pplane_layouts_array = "NULL"; + if (structInfo->pPlaneLayouts != NULL) { + pplane_layouts_array = "pPlaneLayouts_" + std::to_string(consumer.GetNextId()); + std::string pplane_layouts_names; + for (uint32_t idx = 0; idx < structInfo->drmFormatModifierPlaneCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pPlaneLayouts + idx != NULL) { + variable_name = GenerateStruct_VkSubresourceLayout(out, + structInfo->pPlaneLayouts + idx, + metaInfo->pPlaneLayouts->GetMetaStructPointer() + idx, + consumer); + } + pplane_layouts_names += variable_name + ", "; + } + out << "\t\t" << "VkSubresourceLayout " << pplane_layouts_array << "[] = {" << pplane_layouts_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDisplayEventTypeEXT(" << structInfo->displayEvent << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayEventInfoEXT"); - out << "\t\t" << "VkDisplayEventInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->drmFormatModifier << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->drmFormatModifierPlaneCount << "," << std::endl; + struct_body << "\t\t\t" << pplane_layouts_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageDrmFormatModifierExplicitCreateInfoEXT"); + out << "\t\t" << "VkImageDrmFormatModifierExplicitCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayPowerInfoEXT(std::ostream &out, const VkDisplayPowerInfoEXT* structInfo, Decoded_VkDisplayPowerInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageDrmFormatModifierListCreateInfoEXT(std::ostream &out, const VkImageDrmFormatModifierListCreateInfoEXT* structInfo, Decoded_VkImageDrmFormatModifierListCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pdrm_format_modifiers_array = "pdrm_format_modifiers_array_" + std::to_string(consumer.GetNextId()); + if (structInfo->drmFormatModifierCount > 0) { + std::string pdrm_format_modifiers_values = toStringJoin(structInfo->pDrmFormatModifiers, + structInfo->pDrmFormatModifiers + structInfo->drmFormatModifierCount, + [](uint64_t current) { return std::to_string(current); }, + ", "); + if (structInfo->drmFormatModifierCount == 1) { + pdrm_format_modifiers_array = "&" + pdrm_format_modifiers_values; + } else if (structInfo->drmFormatModifierCount > 1) { + out << "\t\t" << "uint64_t " << pdrm_format_modifiers_array << "[] = {" << pdrm_format_modifiers_values << "};" << std::endl; + } + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDisplayPowerStateEXT(" << structInfo->powerState << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayPowerInfoEXT"); - out << "\t\t" << "VkDisplayPowerInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->drmFormatModifierCount << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << pdrm_format_modifiers_array << " }" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageDrmFormatModifierListCreateInfoEXT"); + out << "\t\t" << "VkImageDrmFormatModifierListCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSwapchainCounterCreateInfoEXT(std::ostream &out, const VkSwapchainCounterCreateInfoEXT* structInfo, Decoded_VkSwapchainCounterCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageDrmFormatModifierPropertiesEXT(std::ostream &out, const VkImageDrmFormatModifierPropertiesEXT* structInfo, Decoded_VkImageDrmFormatModifierPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSurfaceCounterFlagsEXT(" << structInfo->surfaceCounters << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "swapchainCounterCreateInfoEXT"); - out << "\t\t" << "VkSwapchainCounterCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->drmFormatModifier << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageDrmFormatModifierPropertiesEXT"); + out << "\t\t" << "VkImageDrmFormatModifierPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPastPresentationTimingGOOGLE(std::ostream &out, const VkPastPresentationTimingGOOGLE* structInfo, Decoded_VkPastPresentationTimingGOOGLE* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(std::ostream &out, const VkPhysicalDeviceImageDrmFormatModifierInfoEXT* structInfo, Decoded_VkPhysicalDeviceImageDrmFormatModifierInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->presentID << "," << std::endl; - struct_body << "\t\t\t" << structInfo->desiredPresentTime << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->actualPresentTime << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->earliestPresentTime << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentMargin << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pastPresentationTimingGOOGLE"); - out << "\t\t" << "VkPastPresentationTimingGOOGLE " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pqueue_family_indices_array = "NULL"; + if (structInfo->pQueueFamilyIndices != NULL) { + pqueue_family_indices_array = "pQueueFamilyIndices_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pqueue_family_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pQueueFamilyIndices, structInfo->queueFamilyIndexCount) << ";" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->drmFormatModifier << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkSharingMode(" << structInfo->sharingMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->queueFamilyIndexCount << "," << std::endl; + struct_body << "\t\t\t" << pqueue_family_indices_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageDrmFormatModifierInfoEXT"); + out << "\t\t" << "VkPhysicalDeviceImageDrmFormatModifierInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPresentTimeGOOGLE(std::ostream &out, const VkPresentTimeGOOGLE* structInfo, Decoded_VkPresentTimeGOOGLE* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkShaderModuleValidationCacheCreateInfoEXT(std::ostream &out, const VkShaderModuleValidationCacheCreateInfoEXT* structInfo, Decoded_VkShaderModuleValidationCacheCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->presentID << "," << std::endl; - struct_body << "\t\t\t" << structInfo->desiredPresentTime << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "presentTimeGOOGLE"); - out << "\t\t" << "VkPresentTimeGOOGLE " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->validationCache) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "shaderModuleValidationCacheCreateInfoEXT"); + out << "\t\t" << "VkShaderModuleValidationCacheCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPresentTimesInfoGOOGLE(std::ostream &out, const VkPresentTimesInfoGOOGLE* structInfo, Decoded_VkPresentTimesInfoGOOGLE* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkValidationCacheCreateInfoEXT(std::ostream &out, const VkValidationCacheCreateInfoEXT* structInfo, Decoded_VkValidationCacheCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ptimes_array = "NULL"; - if (structInfo->pTimes != NULL) { - ptimes_array = "pTimes_" + std::to_string(consumer.GetNextId()); - std::string ptimes_names; - for (uint32_t idx = 0; idx < structInfo->swapchainCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pTimes + idx != NULL) { - variable_name = GenerateStruct_VkPresentTimeGOOGLE(out, - structInfo->pTimes + idx, - metaInfo->pTimes->GetMetaStructPointer() + idx, - consumer); - } - ptimes_names += variable_name + ", "; + std::string pinitial_data_array = "NULL"; + if (structInfo->pInitialData != NULL) { + std::string pinitial_data_values; + for (uint32_t idx0 = 0; idx0 < structInfo->initialDataSize; ++idx0) { + pinitial_data_values += std::to_string(reinterpret_cast(structInfo->pInitialData)[idx0]) + ", "; } - out << "\t\t" << "VkPresentTimeGOOGLE " << ptimes_array << "[] = {" << ptimes_names << "};" << std::endl; + pinitial_data_array = "pInitialData_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint8_t " << pinitial_data_array << "[] = {" << pinitial_data_values << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; - struct_body << "\t\t\t" << ptimes_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "presentTimesInfoGOOGLE"); - out << "\t\t" << "VkPresentTimesInfoGOOGLE " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkRefreshCycleDurationGOOGLE(std::ostream &out, const VkRefreshCycleDurationGOOGLE* structInfo, Decoded_VkRefreshCycleDurationGOOGLE* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->refreshDuration << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "refreshCycleDurationGOOGLE"); - out << "\t\t" << "VkRefreshCycleDurationGOOGLE " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkValidationCacheCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->initialDataSize << "," << std::endl; + struct_body << "\t\t\t" << pinitial_data_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "validationCacheCreateInfoEXT"); + out << "\t\t" << "VkValidationCacheCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMultiviewPerViewAttributesInfoNVX(std::ostream &out, const VkMultiviewPerViewAttributesInfoNVX* structInfo, Decoded_VkMultiviewPerViewAttributesInfoNVX* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCoarseSampleLocationNV(std::ostream &out, const VkCoarseSampleLocationNV* structInfo, Decoded_VkCoarseSampleLocationNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->perViewAttributes << "," << std::endl; - struct_body << "\t\t\t" << structInfo->perViewAttributesPositionXOnly << ","; - std::string variable_name = consumer.AddStruct(struct_body, "multiviewPerViewAttributesInfoNVX"); - out << "\t\t" << "VkMultiviewPerViewAttributesInfoNVX " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->pixelX << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pixelY << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sample << ","; + std::string variable_name = consumer.AddStruct(struct_body, "coarseSampleLocationNV"); + out << "\t\t" << "VkCoarseSampleLocationNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(std::ostream &out, const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* structInfo, Decoded_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCoarseSampleOrderCustomNV(std::ostream &out, const VkCoarseSampleOrderCustomNV* structInfo, Decoded_VkCoarseSampleOrderCustomNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->perViewPositionAllComponents << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMultiviewPerViewAttributesPropertiesNVX"); - out << "\t\t" << "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX " << variable_name << " {" << std::endl; + std::string psample_locations_array = "NULL"; + if (structInfo->pSampleLocations != NULL) { + psample_locations_array = "pSampleLocations_" + std::to_string(consumer.GetNextId()); + std::string psample_locations_names; + for (uint32_t idx = 0; idx < structInfo->sampleLocationCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pSampleLocations + idx != NULL) { + variable_name = GenerateStruct_VkCoarseSampleLocationNV(out, + structInfo->pSampleLocations + idx, + metaInfo->pSampleLocations->GetMetaStructPointer() + idx, + consumer); + } + psample_locations_names += variable_name + ", "; + } + out << "\t\t" << "VkCoarseSampleLocationNV " << psample_locations_array << "[] = {" << psample_locations_names << "};" << std::endl; + } + struct_body << "\t" << "VkShadingRatePaletteEntryNV(" << structInfo->shadingRate << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sampleCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sampleLocationCount << "," << std::endl; + struct_body << "\t\t\t" << psample_locations_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "coarseSampleOrderCustomNV"); + out << "\t\t" << "VkCoarseSampleOrderCustomNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineViewportSwizzleStateCreateInfoNV(std::ostream &out, const VkPipelineViewportSwizzleStateCreateInfoNV* structInfo, Decoded_VkPipelineViewportSwizzleStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShadingRateImageFeaturesNV(std::ostream &out, const VkPhysicalDeviceShadingRateImageFeaturesNV* structInfo, Decoded_VkPhysicalDeviceShadingRateImageFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pviewport_swizzles_array = "NULL"; - if (structInfo->pViewportSwizzles != NULL) { - pviewport_swizzles_array = "pViewportSwizzles_" + std::to_string(consumer.GetNextId()); - std::string pviewport_swizzles_names; - for (uint32_t idx = 0; idx < structInfo->viewportCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pViewportSwizzles + idx != NULL) { - variable_name = GenerateStruct_VkViewportSwizzleNV(out, - structInfo->pViewportSwizzles + idx, - metaInfo->pViewportSwizzles->GetMetaStructPointer() + idx, - consumer); - } - pviewport_swizzles_names += variable_name + ", "; - } - out << "\t\t" << "VkViewportSwizzleNV " << pviewport_swizzles_array << "[] = {" << pviewport_swizzles_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineViewportSwizzleStateCreateFlagsNV(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewportCount << "," << std::endl; - struct_body << "\t\t\t" << pviewport_swizzles_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineViewportSwizzleStateCreateInfoNV"); - out << "\t\t" << "VkPipelineViewportSwizzleStateCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shadingRateImage << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shadingRateCoarseSampleOrder << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShadingRateImageFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceShadingRateImageFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkViewportSwizzleNV(std::ostream &out, const VkViewportSwizzleNV* structInfo, Decoded_VkViewportSwizzleNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShadingRateImagePropertiesNV(std::ostream &out, const VkPhysicalDeviceShadingRateImagePropertiesNV* structInfo, Decoded_VkPhysicalDeviceShadingRateImagePropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkViewportCoordinateSwizzleNV(" << structInfo->x << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkViewportCoordinateSwizzleNV(" << structInfo->y << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkViewportCoordinateSwizzleNV(" << structInfo->z << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkViewportCoordinateSwizzleNV(" << structInfo->w << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "viewportSwizzleNV"); - out << "\t\t" << "VkViewportSwizzleNV " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string shading_rate_texel_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->shadingRateTexelSize, + metaInfo->shadingRateTexelSize, + consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << shading_rate_texel_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shadingRatePaletteSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shadingRateMaxCoarseSamples << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShadingRateImagePropertiesNV"); + out << "\t\t" << "VkPhysicalDeviceShadingRateImagePropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDiscardRectanglePropertiesEXT(std::ostream &out, const VkPhysicalDeviceDiscardRectanglePropertiesEXT* structInfo, Decoded_VkPhysicalDeviceDiscardRectanglePropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(std::ostream &out, const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* structInfo, Decoded_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pcustom_sample_orders_array = "NULL"; + if (structInfo->pCustomSampleOrders != NULL) { + pcustom_sample_orders_array = "pCustomSampleOrders_" + std::to_string(consumer.GetNextId()); + std::string pcustom_sample_orders_names; + for (uint32_t idx = 0; idx < structInfo->customSampleOrderCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pCustomSampleOrders + idx != NULL) { + variable_name = GenerateStruct_VkCoarseSampleOrderCustomNV(out, + structInfo->pCustomSampleOrders + idx, + metaInfo->pCustomSampleOrders->GetMetaStructPointer() + idx, + consumer); + } + pcustom_sample_orders_names += variable_name + ", "; + } + out << "\t\t" << "VkCoarseSampleOrderCustomNV " << pcustom_sample_orders_array << "[] = {" << pcustom_sample_orders_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDiscardRectangles << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDiscardRectanglePropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceDiscardRectanglePropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkCoarseSampleOrderTypeNV(" << structInfo->sampleOrderType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->customSampleOrderCount << "," << std::endl; + struct_body << "\t\t\t" << pcustom_sample_orders_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineViewportCoarseSampleOrderStateCreateInfoNV"); + out << "\t\t" << "VkPipelineViewportCoarseSampleOrderStateCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineDiscardRectangleStateCreateInfoEXT(std::ostream &out, const VkPipelineDiscardRectangleStateCreateInfoEXT* structInfo, Decoded_VkPipelineDiscardRectangleStateCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineViewportShadingRateImageStateCreateInfoNV(std::ostream &out, const VkPipelineViewportShadingRateImageStateCreateInfoNV* structInfo, Decoded_VkPipelineViewportShadingRateImageStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdiscard_rectangles_array = "NULL"; - if (structInfo->pDiscardRectangles != NULL) { - pdiscard_rectangles_array = "pDiscardRectangles_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkRect2D " << pdiscard_rectangles_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDiscardRectangles, structInfo->discardRectangleCount) << ";" << std::endl; + std::string pshading_rate_palettes_array = "NULL"; + if (structInfo->pShadingRatePalettes != NULL) { + pshading_rate_palettes_array = "pShadingRatePalettes_" + std::to_string(consumer.GetNextId()); + std::string pshading_rate_palettes_names; + for (uint32_t idx = 0; idx < structInfo->viewportCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pShadingRatePalettes + idx != NULL) { + variable_name = GenerateStruct_VkShadingRatePaletteNV(out, + structInfo->pShadingRatePalettes + idx, + metaInfo->pShadingRatePalettes->GetMetaStructPointer() + idx, + consumer); + } + pshading_rate_palettes_names += variable_name + ", "; + } + out << "\t\t" << "VkShadingRatePaletteNV " << pshading_rate_palettes_array << "[] = {" << pshading_rate_palettes_names << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineDiscardRectangleStateCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkDiscardRectangleModeEXT(" << structInfo->discardRectangleMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->discardRectangleCount << "," << std::endl; - struct_body << "\t\t\t" << pdiscard_rectangles_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineDiscardRectangleStateCreateInfoEXT"); - out << "\t\t" << "VkPipelineDiscardRectangleStateCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shadingRateImageEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->viewportCount << "," << std::endl; + struct_body << "\t\t\t" << pshading_rate_palettes_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineViewportShadingRateImageStateCreateInfoNV"); + out << "\t\t" << "VkPipelineViewportShadingRateImageStateCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(std::ostream &out, const VkPhysicalDeviceConservativeRasterizationPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceConservativeRasterizationPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkShadingRatePaletteNV(std::ostream &out, const VkShadingRatePaletteNV* structInfo, Decoded_VkShadingRatePaletteNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->primitiveOverestimationSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxExtraPrimitiveOverestimationSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extraPrimitiveOverestimationSizeGranularity << "," << std::endl; - struct_body << "\t\t\t" << structInfo->primitiveUnderestimation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->conservativePointAndLineRasterization << "," << std::endl; - struct_body << "\t\t\t" << structInfo->degenerateTrianglesRasterized << "," << std::endl; - struct_body << "\t\t\t" << structInfo->degenerateLinesRasterized << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fullyCoveredFragmentShaderInputVariable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->conservativeRasterizationPostDepthCoverage << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceConservativeRasterizationPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceConservativeRasterizationPropertiesEXT " << variable_name << " {" << std::endl; + std::string pshading_rate_palette_entries_values; + std::string pshading_rate_palette_entries_array = "NULL"; + if (structInfo->pShadingRatePaletteEntries != NULL) { + for (uint32_t idx = 0; idx < structInfo->shadingRatePaletteEntryCount; idx++) { + pshading_rate_palette_entries_values += util::ToString(structInfo->pShadingRatePaletteEntries[idx]) + ", "; + } + pshading_rate_palette_entries_array = "pShadingRatePaletteEntries_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkShadingRatePaletteEntryNV " << pshading_rate_palette_entries_array << "[] = {" << pshading_rate_palette_entries_values << "};" << std::endl; + } + struct_body << "\t" << structInfo->shadingRatePaletteEntryCount << "," << std::endl; + struct_body << "\t\t\t" << pshading_rate_palette_entries_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "shadingRatePaletteNV"); + out << "\t\t" << "VkShadingRatePaletteNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineRasterizationConservativeStateCreateInfoEXT(std::ostream &out, const VkPipelineRasterizationConservativeStateCreateInfoEXT* structInfo, Decoded_VkPipelineRasterizationConservativeStateCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAabbPositionsKHR(std::ostream &out, const VkAabbPositionsKHR* structInfo, Decoded_VkAabbPositionsKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRasterizationConservativeStateCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkConservativeRasterizationModeEXT(" << structInfo->conservativeRasterizationMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extraPrimitiveOverestimationSize << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineRasterizationConservativeStateCreateInfoEXT"); - out << "\t\t" << "VkPipelineRasterizationConservativeStateCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->minX << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minY << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minZ << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxX << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxY << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxZ << ","; + std::string variable_name = consumer.AddStruct(struct_body, "aabbPositionsKHR"); + out << "\t\t" << "VkAabbPositionsKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDepthClipEnableFeaturesEXT(std::ostream &out, const VkPhysicalDeviceDepthClipEnableFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceDepthClipEnableFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAccelerationStructureCreateInfoNV(std::ostream &out, const VkAccelerationStructureCreateInfoNV* structInfo, Decoded_VkAccelerationStructureCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string info_info_var = GenerateStruct_VkAccelerationStructureInfoNV(out, + &structInfo->info, + metaInfo->info, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthClipEnable << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDepthClipEnableFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceDepthClipEnableFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->compactedSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << info_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureCreateInfoNV"); + out << "\t\t" << "VkAccelerationStructureCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineRasterizationDepthClipStateCreateInfoEXT(std::ostream &out, const VkPipelineRasterizationDepthClipStateCreateInfoEXT* structInfo, Decoded_VkPipelineRasterizationDepthClipStateCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAccelerationStructureInfoNV(std::ostream &out, const VkAccelerationStructureInfoNV* structInfo, Decoded_VkAccelerationStructureInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pgeometries_array = "NULL"; + if (structInfo->pGeometries != NULL) { + pgeometries_array = "pGeometries_" + std::to_string(consumer.GetNextId()); + std::string pgeometries_names; + for (uint32_t idx = 0; idx < structInfo->geometryCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pGeometries + idx != NULL) { + variable_name = GenerateStruct_VkGeometryNV(out, + structInfo->pGeometries + idx, + metaInfo->pGeometries->GetMetaStructPointer() + idx, + consumer); + } + pgeometries_names += variable_name + ", "; + } + out << "\t\t" << "VkGeometryNV " << pgeometries_array << "[] = {" << pgeometries_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineRasterizationDepthClipStateCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthClipEnable << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineRasterizationDepthClipStateCreateInfoEXT"); - out << "\t\t" << "VkPipelineRasterizationDepthClipStateCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkAccelerationStructureTypeNV(" << structInfo->type << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBuildAccelerationStructureFlagsNV(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->instanceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->geometryCount << "," << std::endl; + struct_body << "\t\t\t" << pgeometries_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureInfoNV"); + out << "\t\t" << "VkAccelerationStructureInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkHdrMetadataEXT(std::ostream &out, const VkHdrMetadataEXT* structInfo, Decoded_VkHdrMetadataEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAccelerationStructureInstanceKHR(std::ostream &out, const VkAccelerationStructureInstanceKHR* structInfo, Decoded_VkAccelerationStructureInstanceKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string display_primary_red_info_var = GenerateStruct_VkXYColorEXT(out, - &structInfo->displayPrimaryRed, - metaInfo->displayPrimaryRed, - consumer); - std::string display_primary_green_info_var = GenerateStruct_VkXYColorEXT(out, - &structInfo->displayPrimaryGreen, - metaInfo->displayPrimaryGreen, - consumer); - std::string display_primary_blue_info_var = GenerateStruct_VkXYColorEXT(out, - &structInfo->displayPrimaryBlue, - metaInfo->displayPrimaryBlue, - consumer); - std::string white_point_info_var = GenerateStruct_VkXYColorEXT(out, - &structInfo->whitePoint, - metaInfo->whitePoint, - consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << display_primary_red_info_var << "," << std::endl; - struct_body << "\t\t\t" << display_primary_green_info_var << "," << std::endl; - struct_body << "\t\t\t" << display_primary_blue_info_var << "," << std::endl; - struct_body << "\t\t\t" << white_point_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxLuminance << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minLuminance << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxContentLightLevel << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxFrameAverageLightLevel << ","; - std::string variable_name = consumer.AddStruct(struct_body, "hdrMetadataEXT"); - out << "\t\t" << "VkHdrMetadataEXT " << variable_name << " {" << std::endl; + std::string transform_info_var = GenerateStruct_VkTransformMatrixKHR(out, + &structInfo->transform, + metaInfo->transform, + consumer); + struct_body << "\t" << transform_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->instanceCustomIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->mask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->instanceShaderBindingTableRecordOffset << "," << std::endl; + struct_body << "\t\t\t" << "VkGeometryInstanceFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->accelerationStructureReference << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureInstanceKHR"); + out << "\t\t" << "VkAccelerationStructureInstanceKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkXYColorEXT(std::ostream &out, const VkXYColorEXT* structInfo, Decoded_VkXYColorEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAccelerationStructureMemoryRequirementsInfoNV(std::ostream &out, const VkAccelerationStructureMemoryRequirementsInfoNV* structInfo, Decoded_VkAccelerationStructureMemoryRequirementsInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->x << "," << std::endl; - struct_body << "\t\t\t" << structInfo->y << ","; - std::string variable_name = consumer.AddStruct(struct_body, "xYColorEXT"); - out << "\t\t" << "VkXYColorEXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkAccelerationStructureMemoryRequirementsTypeNV(" << structInfo->type << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->accelerationStructure) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureMemoryRequirementsInfoNV"); + out << "\t\t" << "VkAccelerationStructureMemoryRequirementsInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG(std::ostream &out, const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* structInfo, Decoded_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindAccelerationStructureMemoryInfoNV(std::ostream &out, const VkBindAccelerationStructureMemoryInfoNV* structInfo, Decoded_VkBindAccelerationStructureMemoryInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pdevice_indices_array = "NULL"; + if (structInfo->pDeviceIndices != NULL) { + pdevice_indices_array = "pDeviceIndices_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pdevice_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDeviceIndices, structInfo->deviceIndexCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->relaxedLineRasterization << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRelaxedLineRasterizationFeaturesIMG"); - out << "\t\t" << "VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->accelerationStructure) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceIndexCount << "," << std::endl; + struct_body << "\t\t\t" << pdevice_indices_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindAccelerationStructureMemoryInfoNV"); + out << "\t\t" << "VkBindAccelerationStructureMemoryInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkIOSSurfaceCreateInfoMVK(std::ostream &out, const VkIOSSurfaceCreateInfoMVK* structInfo, Decoded_VkIOSSurfaceCreateInfoMVK* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkGeometryAABBNV(std::ostream &out, const VkGeometryAABBNV* structInfo, Decoded_VkGeometryAABBNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkIOSSurfaceCreateFlagsMVK(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pView << ","; - std::string variable_name = consumer.AddStruct(struct_body, "iOSSurfaceCreateInfoMVK"); - out << "\t\t" << "VkIOSSurfaceCreateInfoMVK " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->aabbData) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->numAABBs << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stride << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "geometryAABBNV"); + out << "\t\t" << "VkGeometryAABBNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMacOSSurfaceCreateInfoMVK(std::ostream &out, const VkMacOSSurfaceCreateInfoMVK* structInfo, Decoded_VkMacOSSurfaceCreateInfoMVK* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkGeometryDataNV(std::ostream &out, const VkGeometryDataNV* structInfo, Decoded_VkGeometryDataNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkMacOSSurfaceCreateFlagsMVK(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pView << ","; - std::string variable_name = consumer.AddStruct(struct_body, "macOSSurfaceCreateInfoMVK"); - out << "\t\t" << "VkMacOSSurfaceCreateInfoMVK " << variable_name << " {" << std::endl; + std::string triangles_info_var = GenerateStruct_VkGeometryTrianglesNV(out, + &structInfo->triangles, + metaInfo->triangles, + consumer); + std::string aabbs_info_var = GenerateStruct_VkGeometryAABBNV(out, + &structInfo->aabbs, + metaInfo->aabbs, + consumer); + struct_body << "\t" << triangles_info_var << "," << std::endl; + struct_body << "\t\t\t" << aabbs_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "geometryDataNV"); + out << "\t\t" << "VkGeometryDataNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDebugUtilsLabelEXT(std::ostream &out, const VkDebugUtilsLabelEXT* structInfo, Decoded_VkDebugUtilsLabelEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkGeometryNV(std::ostream &out, const VkGeometryNV* structInfo, Decoded_VkGeometryNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string geometry_info_var = GenerateStruct_VkGeometryDataNV(out, + &structInfo->geometry, + metaInfo->geometry, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pLabelName) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->color[0]), 4) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "debugUtilsLabelEXT"); - out << "\t\t" << "VkDebugUtilsLabelEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkGeometryTypeKHR(" << structInfo->geometryType << ")" << "," << std::endl; + struct_body << "\t\t\t" << geometry_info_var << "," << std::endl; + struct_body << "\t\t\t" << "VkGeometryFlagsKHR(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "geometryNV"); + out << "\t\t" << "VkGeometryNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDebugUtilsMessengerCallbackDataEXT(std::ostream &out, const VkDebugUtilsMessengerCallbackDataEXT* structInfo, Decoded_VkDebugUtilsMessengerCallbackDataEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkGeometryTrianglesNV(std::ostream &out, const VkGeometryTrianglesNV* structInfo, Decoded_VkGeometryTrianglesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pqueue_labels_array = "NULL"; - if (structInfo->pQueueLabels != NULL) { - pqueue_labels_array = "pQueueLabels_" + std::to_string(consumer.GetNextId()); - std::string pqueue_labels_names; - for (uint32_t idx = 0; idx < structInfo->queueLabelCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pQueueLabels + idx != NULL) { - variable_name = GenerateStruct_VkDebugUtilsLabelEXT(out, - structInfo->pQueueLabels + idx, - metaInfo->pQueueLabels->GetMetaStructPointer() + idx, - consumer); - } - pqueue_labels_names += variable_name + ", "; - } - out << "\t\t" << "VkDebugUtilsLabelEXT " << pqueue_labels_array << "[] = {" << pqueue_labels_names << "};" << std::endl; - } - std::string pcmd_buf_labels_array = "NULL"; - if (structInfo->pCmdBufLabels != NULL) { - pcmd_buf_labels_array = "pCmdBufLabels_" + std::to_string(consumer.GetNextId()); - std::string pcmd_buf_labels_names; - for (uint32_t idx = 0; idx < structInfo->cmdBufLabelCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pCmdBufLabels + idx != NULL) { - variable_name = GenerateStruct_VkDebugUtilsLabelEXT(out, - structInfo->pCmdBufLabels + idx, - metaInfo->pCmdBufLabels->GetMetaStructPointer() + idx, - consumer); - } - pcmd_buf_labels_names += variable_name + ", "; - } - out << "\t\t" << "VkDebugUtilsLabelEXT " << pcmd_buf_labels_array << "[] = {" << pcmd_buf_labels_names << "};" << std::endl; - } - std::string pobjects_array = "NULL"; - if (structInfo->pObjects != NULL) { - pobjects_array = "pObjects_" + std::to_string(consumer.GetNextId()); - std::string pobjects_names; - for (uint32_t idx = 0; idx < structInfo->objectCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pObjects + idx != NULL) { - variable_name = GenerateStruct_VkDebugUtilsObjectNameInfoEXT(out, - structInfo->pObjects + idx, - metaInfo->pObjects->GetMetaStructPointer() + idx, - consumer); - } - pobjects_names += variable_name + ", "; - } - out << "\t\t" << "VkDebugUtilsObjectNameInfoEXT " << pobjects_array << "[] = {" << pobjects_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDebugUtilsMessengerCallbackDataFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pMessageIdName) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->messageIdNumber << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pMessage) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queueLabelCount << "," << std::endl; - struct_body << "\t\t\t" << pqueue_labels_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cmdBufLabelCount << "," << std::endl; - struct_body << "\t\t\t" << pcmd_buf_labels_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->objectCount << "," << std::endl; - struct_body << "\t\t\t" << pobjects_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "debugUtilsMessengerCallbackDataEXT"); - out << "\t\t" << "VkDebugUtilsMessengerCallbackDataEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->vertexData) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexStride << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->vertexFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->indexData) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indexOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indexCount << "," << std::endl; + struct_body << "\t\t\t" << "VkIndexType(" << structInfo->indexType << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->transformData) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->transformOffset << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "geometryTrianglesNV"); + out << "\t\t" << "VkGeometryTrianglesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDebugUtilsObjectNameInfoEXT(std::ostream &out, const VkDebugUtilsObjectNameInfoEXT* structInfo, Decoded_VkDebugUtilsObjectNameInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRayTracingPropertiesNV(std::ostream &out, const VkPhysicalDeviceRayTracingPropertiesNV* structInfo, Decoded_VkPhysicalDeviceRayTracingPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkObjectType(" << structInfo->objectType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->objectHandle << "UL" << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pObjectName) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "debugUtilsObjectNameInfoEXT"); - out << "\t\t" << "VkDebugUtilsObjectNameInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderGroupHandleSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxRecursionDepth << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxShaderGroupStride << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderGroupBaseAlignment << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxGeometryCount << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxInstanceCount << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTriangleCount << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetAccelerationStructures << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingPropertiesNV"); + out << "\t\t" << "VkPhysicalDeviceRayTracingPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDebugUtilsObjectTagInfoEXT(std::ostream &out, const VkDebugUtilsObjectTagInfoEXT* structInfo, Decoded_VkDebugUtilsObjectTagInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRayTracingPipelineCreateInfoNV(std::ostream &out, const VkRayTracingPipelineCreateInfoNV* structInfo, Decoded_VkRayTracingPipelineCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ptag_array = "NULL"; - if (structInfo->pTag != NULL) { - std::string ptag_values; - for (uint32_t idx0 = 0; idx0 < structInfo->tagSize; ++idx0) { - ptag_values += std::to_string(reinterpret_cast(structInfo->pTag)[idx0]) + ", "; + std::string pstages_array = "NULL"; + if (structInfo->pStages != NULL) { + pstages_array = "pStages_" + std::to_string(consumer.GetNextId()); + std::string pstages_names; + for (uint32_t idx = 0; idx < structInfo->stageCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pStages + idx != NULL) { + variable_name = GenerateStruct_VkPipelineShaderStageCreateInfo(out, + structInfo->pStages + idx, + metaInfo->pStages->GetMetaStructPointer() + idx, + consumer); + } + pstages_names += variable_name + ", "; } - ptag_array = "pTag_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint8_t " << ptag_array << "[] = {" << ptag_values << "};" << std::endl; + out << "\t\t" << "VkPipelineShaderStageCreateInfo " << pstages_array << "[] = {" << pstages_names << "};" << std::endl; + } + std::string pgroups_array = "NULL"; + if (structInfo->pGroups != NULL) { + pgroups_array = "pGroups_" + std::to_string(consumer.GetNextId()); + std::string pgroups_names; + for (uint32_t idx = 0; idx < structInfo->groupCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pGroups + idx != NULL) { + variable_name = GenerateStruct_VkRayTracingShaderGroupCreateInfoNV(out, + structInfo->pGroups + idx, + metaInfo->pGroups->GetMetaStructPointer() + idx, + consumer); + } + pgroups_names += variable_name + ", "; + } + out << "\t\t" << "VkRayTracingShaderGroupCreateInfoNV " << pgroups_array << "[] = {" << pgroups_names << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkObjectType(" << structInfo->objectType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->objectHandle << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tagName << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tagSize << "," << std::endl; - struct_body << "\t\t\t" << ptag_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "debugUtilsObjectTagInfoEXT"); - out << "\t\t" << "VkDebugUtilsObjectTagInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineCreateFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stageCount << "," << std::endl; + struct_body << "\t\t\t" << pstages_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->groupCount << "," << std::endl; + struct_body << "\t\t\t" << pgroups_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxRecursionDepth << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->basePipelineHandle) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->basePipelineIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "rayTracingPipelineCreateInfoNV"); + out << "\t\t" << "VkRayTracingPipelineCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAndroidHardwareBufferFormatProperties2ANDROID(std::ostream &out, const VkAndroidHardwareBufferFormatProperties2ANDROID* structInfo, Decoded_VkAndroidHardwareBufferFormatProperties2ANDROID* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRayTracingShaderGroupCreateInfoNV(std::ostream &out, const VkRayTracingShaderGroupCreateInfoNV* structInfo, Decoded_VkRayTracingShaderGroupCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string sampler_ycbcr_conversion_components_info_var = GenerateStruct_VkComponentMapping(out, - &structInfo->samplerYcbcrConversionComponents, - metaInfo->samplerYcbcrConversionComponents, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->externalFormat << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormatFeatureFlags2(" << structInfo->formatFeatures << ")" << "," << std::endl; - struct_body << "\t\t\t" << sampler_ycbcr_conversion_components_info_var << "," << std::endl; - struct_body << "\t\t\t" << "VkSamplerYcbcrModelConversion(" << structInfo->suggestedYcbcrModel << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSamplerYcbcrRange(" << structInfo->suggestedYcbcrRange << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->suggestedXChromaOffset << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->suggestedYChromaOffset << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "androidHardwareBufferFormatProperties2ANDROID"); - out << "\t\t" << "VkAndroidHardwareBufferFormatProperties2ANDROID " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkRayTracingShaderGroupTypeKHR(" << structInfo->type << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->generalShader << "," << std::endl; + struct_body << "\t\t\t" << structInfo->closestHitShader << "," << std::endl; + struct_body << "\t\t\t" << structInfo->anyHitShader << "," << std::endl; + struct_body << "\t\t\t" << structInfo->intersectionShader << ","; + std::string variable_name = consumer.AddStruct(struct_body, "rayTracingShaderGroupCreateInfoNV"); + out << "\t\t" << "VkRayTracingShaderGroupCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAndroidHardwareBufferFormatPropertiesANDROID(std::ostream &out, const VkAndroidHardwareBufferFormatPropertiesANDROID* structInfo, Decoded_VkAndroidHardwareBufferFormatPropertiesANDROID* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkTransformMatrixKHR(std::ostream &out, const VkTransformMatrixKHR* structInfo, Decoded_VkTransformMatrixKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string sampler_ycbcr_conversion_components_info_var = GenerateStruct_VkComponentMapping(out, - &structInfo->samplerYcbcrConversionComponents, - metaInfo->samplerYcbcrConversionComponents, - consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->externalFormat << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormatFeatureFlags(" << structInfo->formatFeatures << ")" << "," << std::endl; - struct_body << "\t\t\t" << sampler_ycbcr_conversion_components_info_var << "," << std::endl; - struct_body << "\t\t\t" << "VkSamplerYcbcrModelConversion(" << structInfo->suggestedYcbcrModel << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSamplerYcbcrRange(" << structInfo->suggestedYcbcrRange << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->suggestedXChromaOffset << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->suggestedYChromaOffset << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "androidHardwareBufferFormatPropertiesANDROID"); - out << "\t\t" << "VkAndroidHardwareBufferFormatPropertiesANDROID " << variable_name << " {" << std::endl; + struct_body << "\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->matrix[0][0]), 3) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "transformMatrixKHR"); + out << "\t\t" << "VkTransformMatrixKHR " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAndroidHardwareBufferPropertiesANDROID(std::ostream &out, const VkAndroidHardwareBufferPropertiesANDROID* structInfo, Decoded_VkAndroidHardwareBufferPropertiesANDROID* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkWriteDescriptorSetAccelerationStructureNV(std::ostream &out, const VkWriteDescriptorSetAccelerationStructureNV* structInfo, Decoded_VkWriteDescriptorSetAccelerationStructureNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pacceleration_structures_array = "NULL"; + if (metaInfo->pAccelerationStructures.GetPointer() != NULL && structInfo->accelerationStructureCount > 0) { + pacceleration_structures_array = "pacceleration_structures_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV)); + std::string pacceleration_structures_values = toStringJoin(metaInfo->pAccelerationStructures.GetPointer(), + metaInfo->pAccelerationStructures.GetPointer() + structInfo->accelerationStructureCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->accelerationStructureCount == 1) { + pacceleration_structures_array = "&" + pacceleration_structures_values; + } else if (structInfo->accelerationStructureCount > 1) { + out << "\t\t" << "VkAccelerationStructureNV " << pacceleration_structures_array << "[] = {" << pacceleration_structures_values << "};" << std::endl; + } + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->allocationSize << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryTypeBits << ","; - std::string variable_name = consumer.AddStruct(struct_body, "androidHardwareBufferPropertiesANDROID"); - out << "\t\t" << "VkAndroidHardwareBufferPropertiesANDROID " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->accelerationStructureCount << "," << std::endl; + struct_body << "\t\t\t" << pacceleration_structures_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "writeDescriptorSetAccelerationStructureNV"); + out << "\t\t" << "VkWriteDescriptorSetAccelerationStructureNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAndroidHardwareBufferUsageANDROID(std::ostream &out, const VkAndroidHardwareBufferUsageANDROID* structInfo, Decoded_VkAndroidHardwareBufferUsageANDROID* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(std::ostream &out, const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* structInfo, Decoded_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->androidHardwareBufferUsage << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "androidHardwareBufferUsageANDROID"); - out << "\t\t" << "VkAndroidHardwareBufferUsageANDROID " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->representativeFragmentTest << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRepresentativeFragmentTestFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExternalFormatANDROID(std::ostream &out, const VkExternalFormatANDROID* structInfo, Decoded_VkExternalFormatANDROID* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(std::ostream &out, const VkPipelineRepresentativeFragmentTestStateCreateInfoNV* structInfo, Decoded_VkPipelineRepresentativeFragmentTestStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->externalFormat << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "externalFormatANDROID"); - out << "\t\t" << "VkExternalFormatANDROID " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->representativeFragmentTestEnable << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineRepresentativeFragmentTestStateCreateInfoNV"); + out << "\t\t" << "VkPipelineRepresentativeFragmentTestStateCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryGetAndroidHardwareBufferInfoANDROID(std::ostream &out, const VkMemoryGetAndroidHardwareBufferInfoANDROID* structInfo, Decoded_VkMemoryGetAndroidHardwareBufferInfoANDROID* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkFilterCubicImageViewImageFormatPropertiesEXT(std::ostream &out, const VkFilterCubicImageViewImageFormatPropertiesEXT* structInfo, Decoded_VkFilterCubicImageViewImageFormatPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryGetAndroidHardwareBufferInfoANDROID"); - out << "\t\t" << "VkMemoryGetAndroidHardwareBufferInfoANDROID " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->filterCubic << "," << std::endl; + struct_body << "\t\t\t" << structInfo->filterCubicMinmax << ","; + std::string variable_name = consumer.AddStruct(struct_body, "filterCubicImageViewImageFormatPropertiesEXT"); + out << "\t\t" << "VkFilterCubicImageViewImageFormatPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAttachmentSampleCountInfoAMD(std::ostream &out, const VkAttachmentSampleCountInfoAMD* structInfo, Decoded_VkAttachmentSampleCountInfoAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceImageViewImageFormatInfoEXT(std::ostream &out, const VkPhysicalDeviceImageViewImageFormatInfoEXT* structInfo, Decoded_VkPhysicalDeviceImageViewImageFormatInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcolor_attachment_samples_values; - std::string pcolor_attachment_samples_array = "NULL"; - if (structInfo->pColorAttachmentSamples != NULL) { - for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { - pcolor_attachment_samples_values += util::ToString(structInfo->pColorAttachmentSamples[idx]) + ", "; - } - pcolor_attachment_samples_array = "pColorAttachmentSamples_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkSampleCountFlagBits " << pcolor_attachment_samples_array << "[] = {" << pcolor_attachment_samples_values << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pcolor_attachment_samples_array << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->depthStencilAttachmentSamples << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "attachmentSampleCountInfoAMD"); - out << "\t\t" << "VkAttachmentSampleCountInfoAMD " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkImageViewType(" << structInfo->imageViewType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageViewImageFormatInfoEXT"); + out << "\t\t" << "VkPhysicalDeviceImageViewImageFormatInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAttachmentSampleLocationsEXT(std::ostream &out, const VkAttachmentSampleLocationsEXT* structInfo, Decoded_VkAttachmentSampleLocationsEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryHostPointerPropertiesEXT(std::ostream &out, const VkMemoryHostPointerPropertiesEXT* structInfo, Decoded_VkMemoryHostPointerPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string sample_locations_info_info_var = GenerateStruct_VkSampleLocationsInfoEXT(out, - &structInfo->sampleLocationsInfo, - metaInfo->sampleLocationsInfo, - consumer); - struct_body << "\t" << structInfo->attachmentIndex << "," << std::endl; - struct_body << "\t\t\t" << sample_locations_info_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "attachmentSampleLocationsEXT"); - out << "\t\t" << "VkAttachmentSampleLocationsEXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryTypeBits << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryHostPointerPropertiesEXT"); + out << "\t\t" << "VkMemoryHostPointerPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMultisamplePropertiesEXT(std::ostream &out, const VkMultisamplePropertiesEXT* structInfo, Decoded_VkMultisamplePropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(std::ostream &out, const VkPhysicalDeviceExternalMemoryHostPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceExternalMemoryHostPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string max_sample_location_grid_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxSampleLocationGridSize, - metaInfo->maxSampleLocationGridSize, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << max_sample_location_grid_size_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "multisamplePropertiesEXT"); - out << "\t\t" << "VkMultisamplePropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->minImportedHostPointerAlignment << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalMemoryHostPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceExternalMemoryHostPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSampleLocationsPropertiesEXT(std::ostream &out, const VkPhysicalDeviceSampleLocationsPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceSampleLocationsPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineCompilerControlCreateInfoAMD(std::ostream &out, const VkPipelineCompilerControlCreateInfoAMD* structInfo, Decoded_VkPipelineCompilerControlCreateInfoAMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string max_sample_location_grid_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxSampleLocationGridSize, - metaInfo->maxSampleLocationGridSize, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->sampleLocationSampleCounts << ")" << "," << std::endl; - struct_body << "\t\t\t" << max_sample_location_grid_size_info_var << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->sampleLocationCoordinateRange[0]), 2) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sampleLocationSubPixelBits << "," << std::endl; - struct_body << "\t\t\t" << structInfo->variableSampleLocations << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSampleLocationsPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceSampleLocationsPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineCompilerControlFlagsAMD(" << structInfo->compilerControlFlags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineCompilerControlCreateInfoAMD"); + out << "\t\t" << "VkPipelineCompilerControlCreateInfoAMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineSampleLocationsStateCreateInfoEXT(std::ostream &out, const VkPipelineSampleLocationsStateCreateInfoEXT* structInfo, Decoded_VkPipelineSampleLocationsStateCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderCorePropertiesAMD(std::ostream &out, const VkPhysicalDeviceShaderCorePropertiesAMD* structInfo, Decoded_VkPhysicalDeviceShaderCorePropertiesAMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string sample_locations_info_info_var = GenerateStruct_VkSampleLocationsInfoEXT(out, - &structInfo->sampleLocationsInfo, - metaInfo->sampleLocationsInfo, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sampleLocationsEnable << "," << std::endl; - struct_body << "\t\t\t" << sample_locations_info_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineSampleLocationsStateCreateInfoEXT"); - out << "\t\t" << "VkPipelineSampleLocationsStateCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderEngineCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderArraysPerEngineCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->computeUnitsPerShaderArray << "," << std::endl; + struct_body << "\t\t\t" << structInfo->simdPerComputeUnit << "," << std::endl; + struct_body << "\t\t\t" << structInfo->wavefrontsPerSimd << "," << std::endl; + struct_body << "\t\t\t" << structInfo->wavefrontSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sgprsPerSimd << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minSgprAllocation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSgprAllocation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sgprAllocationGranularity << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vgprsPerSimd << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minVgprAllocation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxVgprAllocation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vgprAllocationGranularity << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderCorePropertiesAMD"); + out << "\t\t" << "VkPhysicalDeviceShaderCorePropertiesAMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassSampleLocationsBeginInfoEXT(std::ostream &out, const VkRenderPassSampleLocationsBeginInfoEXT* structInfo, Decoded_VkRenderPassSampleLocationsBeginInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceMemoryOverallocationCreateInfoAMD(std::ostream &out, const VkDeviceMemoryOverallocationCreateInfoAMD* structInfo, Decoded_VkDeviceMemoryOverallocationCreateInfoAMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pattachment_initial_sample_locations_array = "NULL"; - if (structInfo->pAttachmentInitialSampleLocations != NULL) { - pattachment_initial_sample_locations_array = "pAttachmentInitialSampleLocations_" + std::to_string(consumer.GetNextId()); - std::string pattachment_initial_sample_locations_names; - for (uint32_t idx = 0; idx < structInfo->attachmentInitialSampleLocationsCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pAttachmentInitialSampleLocations + idx != NULL) { - variable_name = GenerateStruct_VkAttachmentSampleLocationsEXT(out, - structInfo->pAttachmentInitialSampleLocations + idx, - metaInfo->pAttachmentInitialSampleLocations->GetMetaStructPointer() + idx, - consumer); - } - pattachment_initial_sample_locations_names += variable_name + ", "; - } - out << "\t\t" << "VkAttachmentSampleLocationsEXT " << pattachment_initial_sample_locations_array << "[] = {" << pattachment_initial_sample_locations_names << "};" << std::endl; - } - std::string ppost_subpass_sample_locations_array = "NULL"; - if (structInfo->pPostSubpassSampleLocations != NULL) { - ppost_subpass_sample_locations_array = "pPostSubpassSampleLocations_" + std::to_string(consumer.GetNextId()); - std::string ppost_subpass_sample_locations_names; - for (uint32_t idx = 0; idx < structInfo->postSubpassSampleLocationsCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pPostSubpassSampleLocations + idx != NULL) { - variable_name = GenerateStruct_VkSubpassSampleLocationsEXT(out, - structInfo->pPostSubpassSampleLocations + idx, - metaInfo->pPostSubpassSampleLocations->GetMetaStructPointer() + idx, - consumer); - } - ppost_subpass_sample_locations_names += variable_name + ", "; - } - out << "\t\t" << "VkSubpassSampleLocationsEXT " << ppost_subpass_sample_locations_array << "[] = {" << ppost_subpass_sample_locations_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->attachmentInitialSampleLocationsCount << "," << std::endl; - struct_body << "\t\t\t" << pattachment_initial_sample_locations_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->postSubpassSampleLocationsCount << "," << std::endl; - struct_body << "\t\t\t" << ppost_subpass_sample_locations_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassSampleLocationsBeginInfoEXT"); - out << "\t\t" << "VkRenderPassSampleLocationsBeginInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkMemoryOverallocationBehaviorAMD(" << structInfo->overallocationBehavior << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceMemoryOverallocationCreateInfoAMD"); + out << "\t\t" << "VkDeviceMemoryOverallocationCreateInfoAMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSampleLocationEXT(std::ostream &out, const VkSampleLocationEXT* structInfo, Decoded_VkSampleLocationEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(std::ostream &out, const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->x << "," << std::endl; - struct_body << "\t\t\t" << structInfo->y << ","; - std::string variable_name = consumer.AddStruct(struct_body, "sampleLocationEXT"); - out << "\t\t" << "VkSampleLocationEXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxVertexAttribDivisor << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVertexAttributeDivisorPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSampleLocationsInfoEXT(std::ostream &out, const VkSampleLocationsInfoEXT* structInfo, Decoded_VkSampleLocationsInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPresentFrameTokenGGP(std::ostream &out, const VkPresentFrameTokenGGP* structInfo, Decoded_VkPresentFrameTokenGGP* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string sample_location_grid_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->sampleLocationGridSize, - metaInfo->sampleLocationGridSize, - consumer); - std::string psample_locations_array = "NULL"; - if (structInfo->pSampleLocations != NULL) { - psample_locations_array = "pSampleLocations_" + std::to_string(consumer.GetNextId()); - std::string psample_locations_names; - for (uint32_t idx = 0; idx < structInfo->sampleLocationsCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pSampleLocations + idx != NULL) { - variable_name = GenerateStruct_VkSampleLocationEXT(out, - structInfo->pSampleLocations + idx, - metaInfo->pSampleLocations->GetMetaStructPointer() + idx, - consumer); - } - psample_locations_names += variable_name + ", "; - } - out << "\t\t" << "VkSampleLocationEXT " << psample_locations_array << "[] = {" << psample_locations_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->sampleLocationsPerPixel << ")" << "," << std::endl; - struct_body << "\t\t\t" << sample_location_grid_size_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sampleLocationsCount << "," << std::endl; - struct_body << "\t\t\t" << psample_locations_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "sampleLocationsInfoEXT"); - out << "\t\t" << "VkSampleLocationsInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->frameToken << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "presentFrameTokenGGP"); + out << "\t\t" << "VkPresentFrameTokenGGP " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSubpassSampleLocationsEXT(std::ostream &out, const VkSubpassSampleLocationsEXT* structInfo, Decoded_VkSubpassSampleLocationsEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDrawMeshTasksIndirectCommandNV(std::ostream &out, const VkDrawMeshTasksIndirectCommandNV* structInfo, Decoded_VkDrawMeshTasksIndirectCommandNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string sample_locations_info_info_var = GenerateStruct_VkSampleLocationsInfoEXT(out, - &structInfo->sampleLocationsInfo, - metaInfo->sampleLocationsInfo, - consumer); - struct_body << "\t" << structInfo->subpassIndex << "," << std::endl; - struct_body << "\t\t\t" << sample_locations_info_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "subpassSampleLocationsEXT"); - out << "\t\t" << "VkSubpassSampleLocationsEXT " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->taskCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->firstTask << ","; + std::string variable_name = consumer.AddStruct(struct_body, "drawMeshTasksIndirectCommandNV"); + out << "\t\t" << "VkDrawMeshTasksIndirectCommandNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(std::ostream &out, const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMeshShaderFeaturesNV(std::ostream &out, const VkPhysicalDeviceMeshShaderFeaturesNV* structInfo, Decoded_VkPhysicalDeviceMeshShaderFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->advancedBlendCoherentOperations << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceBlendOperationAdvancedFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->taskShader << "," << std::endl; + struct_body << "\t\t\t" << structInfo->meshShader << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMeshShaderFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceMeshShaderFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(std::ostream &out, const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMeshShaderPropertiesNV(std::ostream &out, const VkPhysicalDeviceMeshShaderPropertiesNV* structInfo, Decoded_VkPhysicalDeviceMeshShaderPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->advancedBlendMaxColorAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->advancedBlendIndependentBlend << "," << std::endl; - struct_body << "\t\t\t" << structInfo->advancedBlendNonPremultipliedSrcColor << "," << std::endl; - struct_body << "\t\t\t" << structInfo->advancedBlendNonPremultipliedDstColor << "," << std::endl; - struct_body << "\t\t\t" << structInfo->advancedBlendCorrelatedOverlap << "," << std::endl; - struct_body << "\t\t\t" << structInfo->advancedBlendAllOperations << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceBlendOperationAdvancedPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxDrawMeshTasksCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTaskWorkGroupInvocations << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->maxTaskWorkGroupSize[0]), 3) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTaskTotalMemorySize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxTaskOutputCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxMeshWorkGroupInvocations << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->maxMeshWorkGroupSize[0]), 3) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxMeshTotalMemorySize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxMeshOutputVertices << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxMeshOutputPrimitives << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxMeshMultiviewViewCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->meshOutputPerVertexGranularity << "," << std::endl; + struct_body << "\t\t\t" << structInfo->meshOutputPerPrimitiveGranularity << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMeshShaderPropertiesNV"); + out << "\t\t" << "VkPhysicalDeviceMeshShaderPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineColorBlendAdvancedStateCreateInfoEXT(std::ostream &out, const VkPipelineColorBlendAdvancedStateCreateInfoEXT* structInfo, Decoded_VkPipelineColorBlendAdvancedStateCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderImageFootprintFeaturesNV(std::ostream &out, const VkPhysicalDeviceShaderImageFootprintFeaturesNV* structInfo, Decoded_VkPhysicalDeviceShaderImageFootprintFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcPremultiplied << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstPremultiplied << "," << std::endl; - struct_body << "\t\t\t" << "VkBlendOverlapEXT(" << structInfo->blendOverlap << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineColorBlendAdvancedStateCreateInfoEXT"); - out << "\t\t" << "VkPipelineColorBlendAdvancedStateCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->imageFootprint << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderImageFootprintFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceShaderImageFootprintFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineCoverageToColorStateCreateInfoNV(std::ostream &out, const VkPipelineCoverageToColorStateCreateInfoNV* structInfo, Decoded_VkPipelineCoverageToColorStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExclusiveScissorFeaturesNV(std::ostream &out, const VkPhysicalDeviceExclusiveScissorFeaturesNV* structInfo, Decoded_VkPhysicalDeviceExclusiveScissorFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineCoverageToColorStateCreateFlagsNV(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->coverageToColorEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->coverageToColorLocation << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineCoverageToColorStateCreateInfoNV"); - out << "\t\t" << "VkPipelineCoverageToColorStateCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->exclusiveScissor << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExclusiveScissorFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceExclusiveScissorFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineCoverageModulationStateCreateInfoNV(std::ostream &out, const VkPipelineCoverageModulationStateCreateInfoNV* structInfo, Decoded_VkPipelineCoverageModulationStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineViewportExclusiveScissorStateCreateInfoNV(std::ostream &out, const VkPipelineViewportExclusiveScissorStateCreateInfoNV* structInfo, Decoded_VkPipelineViewportExclusiveScissorStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcoverage_modulation_table_array = "NULL"; - if (structInfo->pCoverageModulationTable != NULL) { - pcoverage_modulation_table_array = "pCoverageModulationTable_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "float " << pcoverage_modulation_table_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pCoverageModulationTable, structInfo->coverageModulationTableCount) << ";" << std::endl; + std::string pexclusive_scissors_array = "NULL"; + if (structInfo->pExclusiveScissors != NULL) { + pexclusive_scissors_array = "pExclusiveScissors_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkRect2D " << pexclusive_scissors_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pExclusiveScissors, structInfo->exclusiveScissorCount) << ";" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineCoverageModulationStateCreateFlagsNV(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkCoverageModulationModeNV(" << structInfo->coverageModulationMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->coverageModulationTableEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->coverageModulationTableCount << "," << std::endl; - struct_body << "\t\t\t" << pcoverage_modulation_table_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineCoverageModulationStateCreateInfoNV"); - out << "\t\t" << "VkPipelineCoverageModulationStateCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->exclusiveScissorCount << "," << std::endl; + struct_body << "\t\t\t" << pexclusive_scissors_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineViewportExclusiveScissorStateCreateInfoNV"); + out << "\t\t" << "VkPipelineViewportExclusiveScissorStateCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(std::ostream &out, const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* structInfo, Decoded_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCheckpointData2NV(std::ostream &out, const VkCheckpointData2NV* structInfo, Decoded_VkCheckpointData2NV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSMBuiltins << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderSMBuiltinsFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceShaderSMBuiltinsFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->stage << ")" << "," << std::endl; + out << "\t\t" << "// TODO: Support pCheckpointMarker (non-struct output) argument." << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "checkpointData2NV"); + out << "\t\t" << "VkCheckpointData2NV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(std::ostream &out, const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* structInfo, Decoded_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCheckpointDataNV(std::ostream &out, const VkCheckpointDataNV* structInfo, Decoded_VkCheckpointDataNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSMCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderWarpsPerSM << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderSMBuiltinsPropertiesNV"); - out << "\t\t" << "VkPhysicalDeviceShaderSMBuiltinsPropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlagBits(" << structInfo->stage << ")" << "," << std::endl; + out << "\t\t" << "// TODO: Support pCheckpointMarker (non-struct output) argument." << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "checkpointDataNV"); + out << "\t\t" << "VkCheckpointDataNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDrmFormatModifierProperties2EXT(std::ostream &out, const VkDrmFormatModifierProperties2EXT* structInfo, Decoded_VkDrmFormatModifierProperties2EXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkQueueFamilyCheckpointProperties2NV(std::ostream &out, const VkQueueFamilyCheckpointProperties2NV* structInfo, Decoded_VkQueueFamilyCheckpointProperties2NV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->drmFormatModifier << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->drmFormatModifierPlaneCount << "," << std::endl; - struct_body << "\t\t\t" << "VkFormatFeatureFlags2(" << structInfo->drmFormatModifierTilingFeatures << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "drmFormatModifierProperties2EXT"); - out << "\t\t" << "VkDrmFormatModifierProperties2EXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->checkpointExecutionStageMask << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyCheckpointProperties2NV"); + out << "\t\t" << "VkQueueFamilyCheckpointProperties2NV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDrmFormatModifierPropertiesEXT(std::ostream &out, const VkDrmFormatModifierPropertiesEXT* structInfo, Decoded_VkDrmFormatModifierPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkQueueFamilyCheckpointPropertiesNV(std::ostream &out, const VkQueueFamilyCheckpointPropertiesNV* structInfo, Decoded_VkQueueFamilyCheckpointPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->drmFormatModifier << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->drmFormatModifierPlaneCount << "," << std::endl; - struct_body << "\t\t\t" << "VkFormatFeatureFlags(" << structInfo->drmFormatModifierTilingFeatures << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "drmFormatModifierPropertiesEXT"); - out << "\t\t" << "VkDrmFormatModifierPropertiesEXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineStageFlags(" << structInfo->checkpointExecutionStageMask << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyCheckpointPropertiesNV"); + out << "\t\t" << "VkQueueFamilyCheckpointPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDrmFormatModifierPropertiesList2EXT(std::ostream &out, const VkDrmFormatModifierPropertiesList2EXT* structInfo, Decoded_VkDrmFormatModifierPropertiesList2EXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPastPresentationTimingEXT(std::ostream &out, const VkPastPresentationTimingEXT* structInfo, Decoded_VkPastPresentationTimingEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdrm_format_modifier_properties_array = "NULL"; - if (structInfo->pDrmFormatModifierProperties != NULL) { - pdrm_format_modifier_properties_array = "pDrmFormatModifierProperties_" + std::to_string(consumer.GetNextId()); - std::string pdrm_format_modifier_properties_names; - for (uint32_t idx = 0; idx < structInfo->drmFormatModifierCount; idx++) { + std::string ppresent_stages_array = "NULL"; + if (structInfo->pPresentStages != NULL) { + ppresent_stages_array = "pPresentStages_" + std::to_string(consumer.GetNextId()); + std::string ppresent_stages_names; + for (uint32_t idx = 0; idx < structInfo->presentStageCount; idx++) { std::string variable_name = "NULL"; - if (structInfo->pDrmFormatModifierProperties + idx != NULL) { - variable_name = GenerateStruct_VkDrmFormatModifierProperties2EXT(out, - structInfo->pDrmFormatModifierProperties + idx, - metaInfo->pDrmFormatModifierProperties->GetMetaStructPointer() + idx, - consumer); + if (structInfo->pPresentStages + idx != NULL) { + variable_name = GenerateStruct_VkPresentStageTimeEXT(out, + structInfo->pPresentStages + idx, + metaInfo->pPresentStages->GetMetaStructPointer() + idx, + consumer); } - pdrm_format_modifier_properties_names += variable_name + ", "; + ppresent_stages_names += variable_name + ", "; } - out << "\t\t" << "VkDrmFormatModifierProperties2EXT " << pdrm_format_modifier_properties_array << "[] = {" << pdrm_format_modifier_properties_names << "};" << std::endl; + out << "\t\t" << "VkPresentStageTimeEXT " << ppresent_stages_array << "[] = {" << ppresent_stages_names << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->drmFormatModifierCount << "," << std::endl; - struct_body << "\t\t\t" << pdrm_format_modifier_properties_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "drmFormatModifierPropertiesList2EXT"); - out << "\t\t" << "VkDrmFormatModifierPropertiesList2EXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentId << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->targetTime << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->presentStageCount << "," << std::endl; + struct_body << "\t\t\t" << ppresent_stages_array << "," << std::endl; + struct_body << "\t\t\t" << "VkTimeDomainKHR(" << structInfo->timeDomain << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->timeDomainId << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->reportComplete << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pastPresentationTimingEXT"); + out << "\t\t" << "VkPastPresentationTimingEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDrmFormatModifierPropertiesListEXT(std::ostream &out, const VkDrmFormatModifierPropertiesListEXT* structInfo, Decoded_VkDrmFormatModifierPropertiesListEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPastPresentationTimingInfoEXT(std::ostream &out, const VkPastPresentationTimingInfoEXT* structInfo, Decoded_VkPastPresentationTimingInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdrm_format_modifier_properties_array = "NULL"; - if (structInfo->pDrmFormatModifierProperties != NULL) { - pdrm_format_modifier_properties_array = "pDrmFormatModifierProperties_" + std::to_string(consumer.GetNextId()); - std::string pdrm_format_modifier_properties_names; - for (uint32_t idx = 0; idx < structInfo->drmFormatModifierCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pDrmFormatModifierProperties + idx != NULL) { - variable_name = GenerateStruct_VkDrmFormatModifierPropertiesEXT(out, - structInfo->pDrmFormatModifierProperties + idx, - metaInfo->pDrmFormatModifierProperties->GetMetaStructPointer() + idx, - consumer); - } - pdrm_format_modifier_properties_names += variable_name + ", "; - } - out << "\t\t" << "VkDrmFormatModifierPropertiesEXT " << pdrm_format_modifier_properties_array << "[] = {" << pdrm_format_modifier_properties_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->drmFormatModifierCount << "," << std::endl; - struct_body << "\t\t\t" << pdrm_format_modifier_properties_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "drmFormatModifierPropertiesListEXT"); - out << "\t\t" << "VkDrmFormatModifierPropertiesListEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPastPresentationTimingFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->swapchain) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pastPresentationTimingInfoEXT"); + out << "\t\t" << "VkPastPresentationTimingInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageDrmFormatModifierExplicitCreateInfoEXT(std::ostream &out, const VkImageDrmFormatModifierExplicitCreateInfoEXT* structInfo, Decoded_VkImageDrmFormatModifierExplicitCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPastPresentationTimingPropertiesEXT(std::ostream &out, const VkPastPresentationTimingPropertiesEXT* structInfo, Decoded_VkPastPresentationTimingPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pplane_layouts_array = "NULL"; - if (structInfo->pPlaneLayouts != NULL) { - pplane_layouts_array = "pPlaneLayouts_" + std::to_string(consumer.GetNextId()); - std::string pplane_layouts_names; - for (uint32_t idx = 0; idx < structInfo->drmFormatModifierPlaneCount; idx++) { + std::string ppresentation_timings_array = "NULL"; + if (structInfo->pPresentationTimings != NULL) { + ppresentation_timings_array = "pPresentationTimings_" + std::to_string(consumer.GetNextId()); + std::string ppresentation_timings_names; + for (uint32_t idx = 0; idx < structInfo->presentationTimingCount; idx++) { std::string variable_name = "NULL"; - if (structInfo->pPlaneLayouts + idx != NULL) { - variable_name = GenerateStruct_VkSubresourceLayout(out, - structInfo->pPlaneLayouts + idx, - metaInfo->pPlaneLayouts->GetMetaStructPointer() + idx, - consumer); + if (structInfo->pPresentationTimings + idx != NULL) { + variable_name = GenerateStruct_VkPastPresentationTimingEXT(out, + structInfo->pPresentationTimings + idx, + metaInfo->pPresentationTimings->GetMetaStructPointer() + idx, + consumer); } - pplane_layouts_names += variable_name + ", "; + ppresentation_timings_names += variable_name + ", "; } - out << "\t\t" << "VkSubresourceLayout " << pplane_layouts_array << "[] = {" << pplane_layouts_names << "};" << std::endl; + out << "\t\t" << "VkPastPresentationTimingEXT " << ppresentation_timings_array << "[] = {" << ppresentation_timings_names << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->drmFormatModifier << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->drmFormatModifierPlaneCount << "," << std::endl; - struct_body << "\t\t\t" << pplane_layouts_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageDrmFormatModifierExplicitCreateInfoEXT"); - out << "\t\t" << "VkImageDrmFormatModifierExplicitCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->timingPropertiesCounter << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->timeDomainsCounter << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->presentationTimingCount << "," << std::endl; + struct_body << "\t\t\t" << ppresentation_timings_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pastPresentationTimingPropertiesEXT"); + out << "\t\t" << "VkPastPresentationTimingPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageDrmFormatModifierListCreateInfoEXT(std::ostream &out, const VkImageDrmFormatModifierListCreateInfoEXT* structInfo, Decoded_VkImageDrmFormatModifierListCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePresentTimingFeaturesEXT(std::ostream &out, const VkPhysicalDevicePresentTimingFeaturesEXT* structInfo, Decoded_VkPhysicalDevicePresentTimingFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdrm_format_modifiers_array = "pdrm_format_modifiers_array_" + std::to_string(consumer.GetNextId()); - if (structInfo->drmFormatModifierCount > 0) { - std::string pdrm_format_modifiers_values = toStringJoin(structInfo->pDrmFormatModifiers, - structInfo->pDrmFormatModifiers + structInfo->drmFormatModifierCount, - [](uint64_t current) { return std::to_string(current); }, - ", "); - if (structInfo->drmFormatModifierCount == 1) { - pdrm_format_modifiers_array = "&" + pdrm_format_modifiers_values; - } else if (structInfo->drmFormatModifierCount > 1) { - out << "\t\t" << "uint64_t " << pdrm_format_modifiers_array << "[] = {" << pdrm_format_modifiers_values << "};" << std::endl; - } - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->drmFormatModifierCount << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << pdrm_format_modifiers_array << " }" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageDrmFormatModifierListCreateInfoEXT"); - out << "\t\t" << "VkImageDrmFormatModifierListCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentTiming << "," << std::endl; + struct_body << "\t\t\t" << structInfo->presentAtAbsoluteTime << "," << std::endl; + struct_body << "\t\t\t" << structInfo->presentAtRelativeTime << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePresentTimingFeaturesEXT"); + out << "\t\t" << "VkPhysicalDevicePresentTimingFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageDrmFormatModifierPropertiesEXT(std::ostream &out, const VkImageDrmFormatModifierPropertiesEXT* structInfo, Decoded_VkImageDrmFormatModifierPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPresentStageTimeEXT(std::ostream &out, const VkPresentStageTimeEXT* structInfo, Decoded_VkPresentStageTimeEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->drmFormatModifier << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageDrmFormatModifierPropertiesEXT"); - out << "\t\t" << "VkImageDrmFormatModifierPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkPresentStageFlagsEXT(" << structInfo->stage << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->time << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "presentStageTimeEXT"); + out << "\t\t" << "VkPresentStageTimeEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(std::ostream &out, const VkPhysicalDeviceImageDrmFormatModifierInfoEXT* structInfo, Decoded_VkPhysicalDeviceImageDrmFormatModifierInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPresentTimingInfoEXT(std::ostream &out, const VkPresentTimingInfoEXT* structInfo, Decoded_VkPresentTimingInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pqueue_family_indices_array = "NULL"; - if (structInfo->pQueueFamilyIndices != NULL) { - pqueue_family_indices_array = "pQueueFamilyIndices_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pqueue_family_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pQueueFamilyIndices, structInfo->queueFamilyIndexCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->drmFormatModifier << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkSharingMode(" << structInfo->sharingMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->queueFamilyIndexCount << "," << std::endl; - struct_body << "\t\t\t" << pqueue_family_indices_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageDrmFormatModifierInfoEXT"); - out << "\t\t" << "VkPhysicalDeviceImageDrmFormatModifierInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPresentTimingInfoFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->targetTime << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->timeDomainId << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkPresentStageFlagsEXT(" << structInfo->presentStageQueries << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPresentStageFlagsEXT(" << structInfo->targetTimeDomainPresentStage << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "presentTimingInfoEXT"); + out << "\t\t" << "VkPresentTimingInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkShaderModuleValidationCacheCreateInfoEXT(std::ostream &out, const VkShaderModuleValidationCacheCreateInfoEXT* structInfo, Decoded_VkShaderModuleValidationCacheCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPresentTimingSurfaceCapabilitiesEXT(std::ostream &out, const VkPresentTimingSurfaceCapabilitiesEXT* structInfo, Decoded_VkPresentTimingSurfaceCapabilitiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->validationCache) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "shaderModuleValidationCacheCreateInfoEXT"); - out << "\t\t" << "VkShaderModuleValidationCacheCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentTimingSupported << "," << std::endl; + struct_body << "\t\t\t" << structInfo->presentAtAbsoluteTimeSupported << "," << std::endl; + struct_body << "\t\t\t" << structInfo->presentAtRelativeTimeSupported << "," << std::endl; + struct_body << "\t\t\t" << "VkPresentStageFlagsEXT(" << structInfo->presentStageQueries << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "presentTimingSurfaceCapabilitiesEXT"); + out << "\t\t" << "VkPresentTimingSurfaceCapabilitiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkValidationCacheCreateInfoEXT(std::ostream &out, const VkValidationCacheCreateInfoEXT* structInfo, Decoded_VkValidationCacheCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPresentTimingsInfoEXT(std::ostream &out, const VkPresentTimingsInfoEXT* structInfo, Decoded_VkPresentTimingsInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pinitial_data_array = "NULL"; - if (structInfo->pInitialData != NULL) { - std::string pinitial_data_values; - for (uint32_t idx0 = 0; idx0 < structInfo->initialDataSize; ++idx0) { - pinitial_data_values += std::to_string(reinterpret_cast(structInfo->pInitialData)[idx0]) + ", "; + std::string ptiming_infos_array = "NULL"; + if (structInfo->pTimingInfos != NULL) { + ptiming_infos_array = "pTimingInfos_" + std::to_string(consumer.GetNextId()); + std::string ptiming_infos_names; + for (uint32_t idx = 0; idx < structInfo->swapchainCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pTimingInfos + idx != NULL) { + variable_name = GenerateStruct_VkPresentTimingInfoEXT(out, + structInfo->pTimingInfos + idx, + metaInfo->pTimingInfos->GetMetaStructPointer() + idx, + consumer); + } + ptiming_infos_names += variable_name + ", "; } - pinitial_data_array = "pInitialData_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint8_t " << pinitial_data_array << "[] = {" << pinitial_data_values << "};" << std::endl; + out << "\t\t" << "VkPresentTimingInfoEXT " << ptiming_infos_array << "[] = {" << ptiming_infos_names << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkValidationCacheCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->initialDataSize << "," << std::endl; - struct_body << "\t\t\t" << pinitial_data_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "validationCacheCreateInfoEXT"); - out << "\t\t" << "VkValidationCacheCreateInfoEXT " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkCoarseSampleLocationNV(std::ostream &out, const VkCoarseSampleLocationNV* structInfo, Decoded_VkCoarseSampleLocationNV* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->pixelX << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pixelY << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sample << ","; - std::string variable_name = consumer.AddStruct(struct_body, "coarseSampleLocationNV"); - out << "\t\t" << "VkCoarseSampleLocationNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->swapchainCount << "," << std::endl; + struct_body << "\t\t\t" << ptiming_infos_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "presentTimingsInfoEXT"); + out << "\t\t" << "VkPresentTimingsInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCoarseSampleOrderCustomNV(std::ostream &out, const VkCoarseSampleOrderCustomNV* structInfo, Decoded_VkCoarseSampleOrderCustomNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSwapchainCalibratedTimestampInfoEXT(std::ostream &out, const VkSwapchainCalibratedTimestampInfoEXT* structInfo, Decoded_VkSwapchainCalibratedTimestampInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string psample_locations_array = "NULL"; - if (structInfo->pSampleLocations != NULL) { - psample_locations_array = "pSampleLocations_" + std::to_string(consumer.GetNextId()); - std::string psample_locations_names; - for (uint32_t idx = 0; idx < structInfo->sampleLocationCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pSampleLocations + idx != NULL) { - variable_name = GenerateStruct_VkCoarseSampleLocationNV(out, - structInfo->pSampleLocations + idx, - metaInfo->pSampleLocations->GetMetaStructPointer() + idx, - consumer); - } - psample_locations_names += variable_name + ", "; - } - out << "\t\t" << "VkCoarseSampleLocationNV " << psample_locations_array << "[] = {" << psample_locations_names << "};" << std::endl; - } - struct_body << "\t" << "VkShadingRatePaletteEntryNV(" << structInfo->shadingRate << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sampleCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sampleLocationCount << "," << std::endl; - struct_body << "\t\t\t" << psample_locations_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "coarseSampleOrderCustomNV"); - out << "\t\t" << "VkCoarseSampleOrderCustomNV " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->swapchain) << "," << std::endl; + struct_body << "\t\t\t" << "VkPresentStageFlagsEXT(" << structInfo->presentStage << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->timeDomainId << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "swapchainCalibratedTimestampInfoEXT"); + out << "\t\t" << "VkSwapchainCalibratedTimestampInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShadingRateImageFeaturesNV(std::ostream &out, const VkPhysicalDeviceShadingRateImageFeaturesNV* structInfo, Decoded_VkPhysicalDeviceShadingRateImageFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSwapchainTimeDomainPropertiesEXT(std::ostream &out, const VkSwapchainTimeDomainPropertiesEXT* structInfo, Decoded_VkSwapchainTimeDomainPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string ptime_domains_array = "NULL"; + if (structInfo->pTimeDomains != NULL) { + std::string ptime_domains_values; + for (uint32_t idx = 0; idx < structInfo->timeDomainCount; idx++) { + ptime_domains_values += util::ToString(structInfo->pTimeDomains[idx]) + ", "; + } + ptime_domains_array = "pTimeDomains_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkTimeDomainKHR " << ptime_domains_array << "[] = {" << ptime_domains_values << "};" << std::endl; + } + std::string ptime_domain_ids_array = "ptime_domain_ids_array_" + std::to_string(consumer.GetNextId()); + if (structInfo->timeDomainCount > 0) { + std::string ptime_domain_ids_values = toStringJoin(structInfo->pTimeDomainIds, + structInfo->pTimeDomainIds + structInfo->timeDomainCount, + [](uint64_t current) { return std::to_string(current); }, + ", "); + if (structInfo->timeDomainCount == 1) { + ptime_domain_ids_array = "&" + ptime_domain_ids_values; + } else if (structInfo->timeDomainCount > 1) { + out << "\t\t" << "uint64_t " << ptime_domain_ids_array << "[] = {" << ptime_domain_ids_values << "};" << std::endl; + } + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shadingRateImage << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shadingRateCoarseSampleOrder << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShadingRateImageFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceShadingRateImageFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->timeDomainCount << "," << std::endl; + struct_body << "\t\t\t" << ptime_domains_array << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << ptime_domain_ids_array << " }" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "swapchainTimeDomainPropertiesEXT"); + out << "\t\t" << "VkSwapchainTimeDomainPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShadingRateImagePropertiesNV(std::ostream &out, const VkPhysicalDeviceShadingRateImagePropertiesNV* structInfo, Decoded_VkPhysicalDeviceShadingRateImagePropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSwapchainTimingPropertiesEXT(std::ostream &out, const VkSwapchainTimingPropertiesEXT* structInfo, Decoded_VkSwapchainTimingPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string shading_rate_texel_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->shadingRateTexelSize, - metaInfo->shadingRateTexelSize, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << shading_rate_texel_size_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shadingRatePaletteSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shadingRateMaxCoarseSamples << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShadingRateImagePropertiesNV"); - out << "\t\t" << "VkPhysicalDeviceShadingRateImagePropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->refreshDuration << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->refreshInterval << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "swapchainTimingPropertiesEXT"); + out << "\t\t" << "VkSwapchainTimingPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(std::ostream &out, const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* structInfo, Decoded_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(std::ostream &out, const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* structInfo, Decoded_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcustom_sample_orders_array = "NULL"; - if (structInfo->pCustomSampleOrders != NULL) { - pcustom_sample_orders_array = "pCustomSampleOrders_" + std::to_string(consumer.GetNextId()); - std::string pcustom_sample_orders_names; - for (uint32_t idx = 0; idx < structInfo->customSampleOrderCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pCustomSampleOrders + idx != NULL) { - variable_name = GenerateStruct_VkCoarseSampleOrderCustomNV(out, - structInfo->pCustomSampleOrders + idx, - metaInfo->pCustomSampleOrders->GetMetaStructPointer() + idx, - consumer); - } - pcustom_sample_orders_names += variable_name + ", "; - } - out << "\t\t" << "VkCoarseSampleOrderCustomNV " << pcustom_sample_orders_array << "[] = {" << pcustom_sample_orders_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkCoarseSampleOrderTypeNV(" << structInfo->sampleOrderType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->customSampleOrderCount << "," << std::endl; - struct_body << "\t\t\t" << pcustom_sample_orders_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineViewportCoarseSampleOrderStateCreateInfoNV"); - out << "\t\t" << "VkPipelineViewportCoarseSampleOrderStateCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderIntegerFunctions2 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderIntegerFunctions2FeaturesINTEL"); + out << "\t\t" << "VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineViewportShadingRateImageStateCreateInfoNV(std::ostream &out, const VkPipelineViewportShadingRateImageStateCreateInfoNV* structInfo, Decoded_VkPipelineViewportShadingRateImageStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkInitializePerformanceApiInfoINTEL(std::ostream &out, const VkInitializePerformanceApiInfoINTEL* structInfo, Decoded_VkInitializePerformanceApiInfoINTEL* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pshading_rate_palettes_array = "NULL"; - if (structInfo->pShadingRatePalettes != NULL) { - pshading_rate_palettes_array = "pShadingRatePalettes_" + std::to_string(consumer.GetNextId()); - std::string pshading_rate_palettes_names; - for (uint32_t idx = 0; idx < structInfo->viewportCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pShadingRatePalettes + idx != NULL) { - variable_name = GenerateStruct_VkShadingRatePaletteNV(out, - structInfo->pShadingRatePalettes + idx, - metaInfo->pShadingRatePalettes->GetMetaStructPointer() + idx, - consumer); - } - pshading_rate_palettes_names += variable_name + ", "; - } - out << "\t\t" << "VkShadingRatePaletteNV " << pshading_rate_palettes_array << "[] = {" << pshading_rate_palettes_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shadingRateImageEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewportCount << "," << std::endl; - struct_body << "\t\t\t" << pshading_rate_palettes_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineViewportShadingRateImageStateCreateInfoNV"); - out << "\t\t" << "VkPipelineViewportShadingRateImageStateCreateInfoNV " << variable_name << " {" << std::endl; + out << "\t\t" << "// TODO: Support pUserData (non-struct output) argument." << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "initializePerformanceApiInfoINTEL"); + out << "\t\t" << "VkInitializePerformanceApiInfoINTEL " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkShadingRatePaletteNV(std::ostream &out, const VkShadingRatePaletteNV* structInfo, Decoded_VkShadingRatePaletteNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPerformanceConfigurationAcquireInfoINTEL(std::ostream &out, const VkPerformanceConfigurationAcquireInfoINTEL* structInfo, Decoded_VkPerformanceConfigurationAcquireInfoINTEL* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pshading_rate_palette_entries_values; - std::string pshading_rate_palette_entries_array = "NULL"; - if (structInfo->pShadingRatePaletteEntries != NULL) { - for (uint32_t idx = 0; idx < structInfo->shadingRatePaletteEntryCount; idx++) { - pshading_rate_palette_entries_values += util::ToString(structInfo->pShadingRatePaletteEntries[idx]) + ", "; - } - pshading_rate_palette_entries_array = "pShadingRatePaletteEntries_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkShadingRatePaletteEntryNV " << pshading_rate_palette_entries_array << "[] = {" << pshading_rate_palette_entries_values << "};" << std::endl; - } - struct_body << "\t" << structInfo->shadingRatePaletteEntryCount << "," << std::endl; - struct_body << "\t\t\t" << pshading_rate_palette_entries_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "shadingRatePaletteNV"); - out << "\t\t" << "VkShadingRatePaletteNV " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPerformanceConfigurationTypeINTEL(" << structInfo->type << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "performanceConfigurationAcquireInfoINTEL"); + out << "\t\t" << "VkPerformanceConfigurationAcquireInfoINTEL " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAabbPositionsKHR(std::ostream &out, const VkAabbPositionsKHR* structInfo, Decoded_VkAabbPositionsKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPerformanceMarkerInfoINTEL(std::ostream &out, const VkPerformanceMarkerInfoINTEL* structInfo, Decoded_VkPerformanceMarkerInfoINTEL* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->minX << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minY << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minZ << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxX << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxY << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxZ << ","; - std::string variable_name = consumer.AddStruct(struct_body, "aabbPositionsKHR"); - out << "\t\t" << "VkAabbPositionsKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->marker << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "performanceMarkerInfoINTEL"); + out << "\t\t" << "VkPerformanceMarkerInfoINTEL " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAccelerationStructureCreateInfoNV(std::ostream &out, const VkAccelerationStructureCreateInfoNV* structInfo, Decoded_VkAccelerationStructureCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPerformanceOverrideInfoINTEL(std::ostream &out, const VkPerformanceOverrideInfoINTEL* structInfo, Decoded_VkPerformanceOverrideInfoINTEL* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string info_info_var = GenerateStruct_VkAccelerationStructureInfoNV(out, - &structInfo->info, - metaInfo->info, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->compactedSize << "UL" << "," << std::endl; - struct_body << "\t\t\t" << info_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureCreateInfoNV"); - out << "\t\t" << "VkAccelerationStructureCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPerformanceOverrideTypeINTEL(" << structInfo->type << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->enable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->parameter << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "performanceOverrideInfoINTEL"); + out << "\t\t" << "VkPerformanceOverrideInfoINTEL " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAccelerationStructureInfoNV(std::ostream &out, const VkAccelerationStructureInfoNV* structInfo, Decoded_VkAccelerationStructureInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPerformanceStreamMarkerInfoINTEL(std::ostream &out, const VkPerformanceStreamMarkerInfoINTEL* structInfo, Decoded_VkPerformanceStreamMarkerInfoINTEL* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pgeometries_array = "NULL"; - if (structInfo->pGeometries != NULL) { - pgeometries_array = "pGeometries_" + std::to_string(consumer.GetNextId()); - std::string pgeometries_names; - for (uint32_t idx = 0; idx < structInfo->geometryCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pGeometries + idx != NULL) { - variable_name = GenerateStruct_VkGeometryNV(out, - structInfo->pGeometries + idx, - metaInfo->pGeometries->GetMetaStructPointer() + idx, - consumer); - } - pgeometries_names += variable_name + ", "; - } - out << "\t\t" << "VkGeometryNV " << pgeometries_array << "[] = {" << pgeometries_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkAccelerationStructureTypeNV(" << structInfo->type << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBuildAccelerationStructureFlagsNV(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->instanceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->geometryCount << "," << std::endl; - struct_body << "\t\t\t" << pgeometries_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureInfoNV"); - out << "\t\t" << "VkAccelerationStructureInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->marker << ","; + std::string variable_name = consumer.AddStruct(struct_body, "performanceStreamMarkerInfoINTEL"); + out << "\t\t" << "VkPerformanceStreamMarkerInfoINTEL " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAccelerationStructureInstanceKHR(std::ostream &out, const VkAccelerationStructureInstanceKHR* structInfo, Decoded_VkAccelerationStructureInstanceKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkQueryPoolPerformanceQueryCreateInfoINTEL(std::ostream &out, const VkQueryPoolPerformanceQueryCreateInfoINTEL* structInfo, Decoded_VkQueryPoolPerformanceQueryCreateInfoINTEL* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string transform_info_var = GenerateStruct_VkTransformMatrixKHR(out, - &structInfo->transform, - metaInfo->transform, - consumer); - struct_body << "\t" << transform_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->instanceCustomIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->mask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->instanceShaderBindingTableRecordOffset << "," << std::endl; - struct_body << "\t\t\t" << "VkGeometryInstanceFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->accelerationStructureReference << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureInstanceKHR"); - out << "\t\t" << "VkAccelerationStructureInstanceKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkQueryPoolSamplingModeINTEL(" << structInfo->performanceCountersSampling << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "queryPoolPerformanceQueryCreateInfoINTEL"); + out << "\t\t" << "VkQueryPoolPerformanceQueryCreateInfoINTEL " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAccelerationStructureMemoryRequirementsInfoNV(std::ostream &out, const VkAccelerationStructureMemoryRequirementsInfoNV* structInfo, Decoded_VkAccelerationStructureMemoryRequirementsInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePCIBusInfoPropertiesEXT(std::ostream &out, const VkPhysicalDevicePCIBusInfoPropertiesEXT* structInfo, Decoded_VkPhysicalDevicePCIBusInfoPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkAccelerationStructureMemoryRequirementsTypeNV(" << structInfo->type << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->accelerationStructure) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureMemoryRequirementsInfoNV"); - out << "\t\t" << "VkAccelerationStructureMemoryRequirementsInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->pciDomain << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pciBus << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pciDevice << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pciFunction << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePCIBusInfoPropertiesEXT"); + out << "\t\t" << "VkPhysicalDevicePCIBusInfoPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBindAccelerationStructureMemoryInfoNV(std::ostream &out, const VkBindAccelerationStructureMemoryInfoNV* structInfo, Decoded_VkBindAccelerationStructureMemoryInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDisplayNativeHdrSurfaceCapabilitiesAMD(std::ostream &out, const VkDisplayNativeHdrSurfaceCapabilitiesAMD* structInfo, Decoded_VkDisplayNativeHdrSurfaceCapabilitiesAMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdevice_indices_array = "NULL"; - if (structInfo->pDeviceIndices != NULL) { - pdevice_indices_array = "pDeviceIndices_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pdevice_indices_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pDeviceIndices, structInfo->deviceIndexCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->accelerationStructure) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceIndexCount << "," << std::endl; - struct_body << "\t\t\t" << pdevice_indices_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bindAccelerationStructureMemoryInfoNV"); - out << "\t\t" << "VkBindAccelerationStructureMemoryInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->localDimmingSupport << ","; + std::string variable_name = consumer.AddStruct(struct_body, "displayNativeHdrSurfaceCapabilitiesAMD"); + out << "\t\t" << "VkDisplayNativeHdrSurfaceCapabilitiesAMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkGeometryAABBNV(std::ostream &out, const VkGeometryAABBNV* structInfo, Decoded_VkGeometryAABBNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSwapchainDisplayNativeHdrCreateInfoAMD(std::ostream &out, const VkSwapchainDisplayNativeHdrCreateInfoAMD* structInfo, Decoded_VkSwapchainDisplayNativeHdrCreateInfoAMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->aabbData) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->numAABBs << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stride << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "geometryAABBNV"); - out << "\t\t" << "VkGeometryAABBNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->localDimmingEnable << ","; + std::string variable_name = consumer.AddStruct(struct_body, "swapchainDisplayNativeHdrCreateInfoAMD"); + out << "\t\t" << "VkSwapchainDisplayNativeHdrCreateInfoAMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkGeometryDataNV(std::ostream &out, const VkGeometryDataNV* structInfo, Decoded_VkGeometryDataNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImagePipeSurfaceCreateInfoFUCHSIA(std::ostream &out, const VkImagePipeSurfaceCreateInfoFUCHSIA* structInfo, Decoded_VkImagePipeSurfaceCreateInfoFUCHSIA* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string triangles_info_var = GenerateStruct_VkGeometryTrianglesNV(out, - &structInfo->triangles, - metaInfo->triangles, - consumer); - std::string aabbs_info_var = GenerateStruct_VkGeometryAABBNV(out, - &structInfo->aabbs, - metaInfo->aabbs, - consumer); - struct_body << "\t" << triangles_info_var << "," << std::endl; - struct_body << "\t\t\t" << aabbs_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "geometryDataNV"); - out << "\t\t" << "VkGeometryDataNV " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkImagePipeSurfaceCreateFlagsFUCHSIA(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imagePipeHandle << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imagePipeSurfaceCreateInfoFUCHSIA"); + out << "\t\t" << "VkImagePipeSurfaceCreateInfoFUCHSIA " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkGeometryNV(std::ostream &out, const VkGeometryNV* structInfo, Decoded_VkGeometryNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMetalSurfaceCreateInfoEXT(std::ostream &out, const VkMetalSurfaceCreateInfoEXT* structInfo, Decoded_VkMetalSurfaceCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string geometry_info_var = GenerateStruct_VkGeometryDataNV(out, - &structInfo->geometry, - metaInfo->geometry, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkGeometryTypeKHR(" << structInfo->geometryType << ")" << "," << std::endl; - struct_body << "\t\t\t" << geometry_info_var << "," << std::endl; - struct_body << "\t\t\t" << "VkGeometryFlagsKHR(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "geometryNV"); - out << "\t\t" << "VkGeometryNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkMetalSurfaceCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->pLayer << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "metalSurfaceCreateInfoEXT"); + out << "\t\t" << "VkMetalSurfaceCreateInfoEXT " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + out << "\t\t" << "OverrideVkMetalSurfaceCreateInfoEXT(&" << variable_name << ", " << "appdata" << ");" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(std::ostream &out, const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceFragmentDensityMapFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentDensityMap << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentDensityMapDynamic << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentDensityMapNonSubsampledImages << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentDensityMapFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceFragmentDensityMapFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkGeometryTrianglesNV(std::ostream &out, const VkGeometryTrianglesNV* structInfo, Decoded_VkGeometryTrianglesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(std::ostream &out, const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceFragmentDensityMapPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string min_fragment_density_texel_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->minFragmentDensityTexelSize, + metaInfo->minFragmentDensityTexelSize, + consumer); + std::string max_fragment_density_texel_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxFragmentDensityTexelSize, + metaInfo->maxFragmentDensityTexelSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->vertexData) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexStride << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->vertexFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->indexData) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indexOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indexCount << "," << std::endl; - struct_body << "\t\t\t" << "VkIndexType(" << structInfo->indexType << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->transformData) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->transformOffset << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "geometryTrianglesNV"); - out << "\t\t" << "VkGeometryTrianglesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << min_fragment_density_texel_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_fragment_density_texel_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentDensityInvocations << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentDensityMapPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceFragmentDensityMapPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRayTracingPropertiesNV(std::ostream &out, const VkPhysicalDeviceRayTracingPropertiesNV* structInfo, Decoded_VkPhysicalDeviceRayTracingPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassFragmentDensityMapCreateInfoEXT(std::ostream &out, const VkRenderPassFragmentDensityMapCreateInfoEXT* structInfo, Decoded_VkRenderPassFragmentDensityMapCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string fragment_density_map_attachment_info_var = GenerateStruct_VkAttachmentReference(out, + &structInfo->fragmentDensityMapAttachment, + metaInfo->fragmentDensityMapAttachment, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderGroupHandleSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxRecursionDepth << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxShaderGroupStride << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderGroupBaseAlignment << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxGeometryCount << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxInstanceCount << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTriangleCount << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetAccelerationStructures << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingPropertiesNV"); - out << "\t\t" << "VkPhysicalDeviceRayTracingPropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << fragment_density_map_attachment_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassFragmentDensityMapCreateInfoEXT"); + out << "\t\t" << "VkRenderPassFragmentDensityMapCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRayTracingPipelineCreateInfoNV(std::ostream &out, const VkRayTracingPipelineCreateInfoNV* structInfo, Decoded_VkRayTracingPipelineCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderingFragmentDensityMapAttachmentInfoEXT(std::ostream &out, const VkRenderingFragmentDensityMapAttachmentInfoEXT* structInfo, Decoded_VkRenderingFragmentDensityMapAttachmentInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstages_array = "NULL"; - if (structInfo->pStages != NULL) { - pstages_array = "pStages_" + std::to_string(consumer.GetNextId()); - std::string pstages_names; - for (uint32_t idx = 0; idx < structInfo->stageCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStages + idx != NULL) { - variable_name = GenerateStruct_VkPipelineShaderStageCreateInfo(out, - structInfo->pStages + idx, - metaInfo->pStages->GetMetaStructPointer() + idx, - consumer); - } - pstages_names += variable_name + ", "; - } - out << "\t\t" << "VkPipelineShaderStageCreateInfo " << pstages_array << "[] = {" << pstages_names << "};" << std::endl; - } - std::string pgroups_array = "NULL"; - if (structInfo->pGroups != NULL) { - pgroups_array = "pGroups_" + std::to_string(consumer.GetNextId()); - std::string pgroups_names; - for (uint32_t idx = 0; idx < structInfo->groupCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pGroups + idx != NULL) { - variable_name = GenerateStruct_VkRayTracingShaderGroupCreateInfoNV(out, - structInfo->pGroups + idx, - metaInfo->pGroups->GetMetaStructPointer() + idx, - consumer); - } - pgroups_names += variable_name + ", "; - } - out << "\t\t" << "VkRayTracingShaderGroupCreateInfoNV " << pgroups_array << "[] = {" << pgroups_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineCreateFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stageCount << "," << std::endl; - struct_body << "\t\t\t" << pstages_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->groupCount << "," << std::endl; - struct_body << "\t\t\t" << pgroups_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxRecursionDepth << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->basePipelineHandle) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->basePipelineIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "rayTracingPipelineCreateInfoNV"); - out << "\t\t" << "VkRayTracingPipelineCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->imageView) << "," << std::endl; + struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->imageLayout << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderingFragmentDensityMapAttachmentInfoEXT"); + out << "\t\t" << "VkRenderingFragmentDensityMapAttachmentInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRayTracingShaderGroupCreateInfoNV(std::ostream &out, const VkRayTracingShaderGroupCreateInfoNV* structInfo, Decoded_VkRayTracingShaderGroupCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderCoreProperties2AMD(std::ostream &out, const VkPhysicalDeviceShaderCoreProperties2AMD* structInfo, Decoded_VkPhysicalDeviceShaderCoreProperties2AMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkRayTracingShaderGroupTypeKHR(" << structInfo->type << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->generalShader << "," << std::endl; - struct_body << "\t\t\t" << structInfo->closestHitShader << "," << std::endl; - struct_body << "\t\t\t" << structInfo->anyHitShader << "," << std::endl; - struct_body << "\t\t\t" << structInfo->intersectionShader << ","; - std::string variable_name = consumer.AddStruct(struct_body, "rayTracingShaderGroupCreateInfoNV"); - out << "\t\t" << "VkRayTracingShaderGroupCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkShaderCorePropertiesFlagsAMD(" << structInfo->shaderCoreFeatures << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->activeComputeUnitCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderCoreProperties2AMD"); + out << "\t\t" << "VkPhysicalDeviceShaderCoreProperties2AMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkTransformMatrixKHR(std::ostream &out, const VkTransformMatrixKHR* structInfo, Decoded_VkTransformMatrixKHR* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceCoherentMemoryFeaturesAMD(std::ostream &out, const VkPhysicalDeviceCoherentMemoryFeaturesAMD* structInfo, Decoded_VkPhysicalDeviceCoherentMemoryFeaturesAMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->matrix[0][0]), 3) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "transformMatrixKHR"); - out << "\t\t" << "VkTransformMatrixKHR " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceCoherentMemory << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCoherentMemoryFeaturesAMD"); + out << "\t\t" << "VkPhysicalDeviceCoherentMemoryFeaturesAMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkWriteDescriptorSetAccelerationStructureNV(std::ostream &out, const VkWriteDescriptorSetAccelerationStructureNV* structInfo, Decoded_VkWriteDescriptorSetAccelerationStructureNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pacceleration_structures_array = "NULL"; - if (metaInfo->pAccelerationStructures.GetPointer() != NULL && structInfo->accelerationStructureCount > 0) { - pacceleration_structures_array = "pacceleration_structures_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV)); - std::string pacceleration_structures_values = toStringJoin(metaInfo->pAccelerationStructures.GetPointer(), - metaInfo->pAccelerationStructures.GetPointer() + structInfo->accelerationStructureCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->accelerationStructureCount == 1) { - pacceleration_structures_array = "&" + pacceleration_structures_values; - } else if (structInfo->accelerationStructureCount > 1) { - out << "\t\t" << "VkAccelerationStructureNV " << pacceleration_structures_array << "[] = {" << pacceleration_structures_values << "};" << std::endl; - } - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->accelerationStructureCount << "," << std::endl; - struct_body << "\t\t\t" << pacceleration_structures_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "writeDescriptorSetAccelerationStructureNV"); - out << "\t\t" << "VkWriteDescriptorSetAccelerationStructureNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderImageInt64Atomics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sparseImageInt64Atomics << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderImageAtomicInt64FeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(std::ostream &out, const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* structInfo, Decoded_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMemoryBudgetPropertiesEXT(std::ostream &out, const VkPhysicalDeviceMemoryBudgetPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceMemoryBudgetPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string heap_budget_array = "heap_budget_array_" + std::to_string(consumer.GetNextId()); + if (VK_MAX_MEMORY_HEAPS > 0) { + std::string heap_budget_values = toStringJoin(structInfo->heapBudget, + structInfo->heapBudget + VK_MAX_MEMORY_HEAPS, + [](VkDeviceSize current) { return std::to_string(current); }, + ", "); + if (VK_MAX_MEMORY_HEAPS == 1) { + heap_budget_array = "&" + heap_budget_values; + } else if (VK_MAX_MEMORY_HEAPS > 1) { + out << "\t\t" << "VkDeviceSize " << heap_budget_array << "[] = {" << heap_budget_values << "};" << std::endl; + } + } + std::string heap_usage_array = "heap_usage_array_" + std::to_string(consumer.GetNextId()); + if (VK_MAX_MEMORY_HEAPS > 0) { + std::string heap_usage_values = toStringJoin(structInfo->heapUsage, + structInfo->heapUsage + VK_MAX_MEMORY_HEAPS, + [](VkDeviceSize current) { return std::to_string(current); }, + ", "); + if (VK_MAX_MEMORY_HEAPS == 1) { + heap_usage_array = "&" + heap_usage_values; + } else if (VK_MAX_MEMORY_HEAPS > 1) { + out << "\t\t" << "VkDeviceSize " << heap_usage_array << "[] = {" << heap_usage_values << "};" << std::endl; + } + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->representativeFragmentTest << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRepresentativeFragmentTestFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "{ *" << heap_budget_array << " }" << "," << std::endl; + struct_body << "\t\t\t" << "{ *" << heap_usage_array << " }" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMemoryBudgetPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceMemoryBudgetPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(std::ostream &out, const VkPipelineRepresentativeFragmentTestStateCreateInfoNV* structInfo, Decoded_VkPipelineRepresentativeFragmentTestStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryPriorityAllocateInfoEXT(std::ostream &out, const VkMemoryPriorityAllocateInfoEXT* structInfo, Decoded_VkMemoryPriorityAllocateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->representativeFragmentTestEnable << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineRepresentativeFragmentTestStateCreateInfoNV"); - out << "\t\t" << "VkPipelineRepresentativeFragmentTestStateCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->priority << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryPriorityAllocateInfoEXT"); + out << "\t\t" << "VkMemoryPriorityAllocateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkFilterCubicImageViewImageFormatPropertiesEXT(std::ostream &out, const VkFilterCubicImageViewImageFormatPropertiesEXT* structInfo, Decoded_VkFilterCubicImageViewImageFormatPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMemoryPriorityFeaturesEXT(std::ostream &out, const VkPhysicalDeviceMemoryPriorityFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceMemoryPriorityFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->filterCubic << "," << std::endl; - struct_body << "\t\t\t" << structInfo->filterCubicMinmax << ","; - std::string variable_name = consumer.AddStruct(struct_body, "filterCubicImageViewImageFormatPropertiesEXT"); - out << "\t\t" << "VkFilterCubicImageViewImageFormatPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->memoryPriority << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMemoryPriorityFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceMemoryPriorityFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceImageViewImageFormatInfoEXT(std::ostream &out, const VkPhysicalDeviceImageViewImageFormatInfoEXT* structInfo, Decoded_VkPhysicalDeviceImageViewImageFormatInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(std::ostream &out, const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* structInfo, Decoded_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImageViewType(" << structInfo->imageViewType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageViewImageFormatInfoEXT"); - out << "\t\t" << "VkPhysicalDeviceImageViewImageFormatInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->dedicatedAllocationImageAliasing << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDedicatedAllocationImageAliasingFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryHostPointerPropertiesEXT(std::ostream &out, const VkMemoryHostPointerPropertiesEXT* structInfo, Decoded_VkMemoryHostPointerPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBufferDeviceAddressCreateInfoEXT(std::ostream &out, const VkBufferDeviceAddressCreateInfoEXT* structInfo, Decoded_VkBufferDeviceAddressCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryTypeBits << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryHostPointerPropertiesEXT"); - out << "\t\t" << "VkMemoryHostPointerPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->deviceAddress << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bufferDeviceAddressCreateInfoEXT"); + out << "\t\t" << "VkBufferDeviceAddressCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(std::ostream &out, const VkPhysicalDeviceExternalMemoryHostPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceExternalMemoryHostPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(std::ostream &out, const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minImportedHostPointerAlignment << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalMemoryHostPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceExternalMemoryHostPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->bufferDeviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferDeviceAddressCaptureReplay << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferDeviceAddressMultiDevice << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceBufferDeviceAddressFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceBufferDeviceAddressFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineCompilerControlCreateInfoAMD(std::ostream &out, const VkPipelineCompilerControlCreateInfoAMD* structInfo, Decoded_VkPipelineCompilerControlCreateInfoAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkValidationFeaturesEXT(std::ostream &out, const VkValidationFeaturesEXT* structInfo, Decoded_VkValidationFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string penabled_validation_features_values; + std::string penabled_validation_features_array = "NULL"; + if (structInfo->pEnabledValidationFeatures != NULL) { + for (uint32_t idx = 0; idx < structInfo->enabledValidationFeatureCount; idx++) { + penabled_validation_features_values += util::ToString(structInfo->pEnabledValidationFeatures[idx]) + ", "; + } + penabled_validation_features_array = "pEnabledValidationFeatures_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkValidationFeatureEnableEXT " << penabled_validation_features_array << "[] = {" << penabled_validation_features_values << "};" << std::endl; + } + std::string pdisabled_validation_features_values; + std::string pdisabled_validation_features_array = "NULL"; + if (structInfo->pDisabledValidationFeatures != NULL) { + for (uint32_t idx = 0; idx < structInfo->disabledValidationFeatureCount; idx++) { + pdisabled_validation_features_values += util::ToString(structInfo->pDisabledValidationFeatures[idx]) + ", "; + } + pdisabled_validation_features_array = "pDisabledValidationFeatures_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkValidationFeatureDisableEXT " << pdisabled_validation_features_array << "[] = {" << pdisabled_validation_features_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineCompilerControlFlagsAMD(" << structInfo->compilerControlFlags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineCompilerControlCreateInfoAMD"); - out << "\t\t" << "VkPipelineCompilerControlCreateInfoAMD " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->enabledValidationFeatureCount << "," << std::endl; + struct_body << "\t\t\t" << penabled_validation_features_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->disabledValidationFeatureCount << "," << std::endl; + struct_body << "\t\t\t" << pdisabled_validation_features_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "validationFeaturesEXT"); + out << "\t\t" << "VkValidationFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderCorePropertiesAMD(std::ostream &out, const VkPhysicalDeviceShaderCorePropertiesAMD* structInfo, Decoded_VkPhysicalDeviceShaderCorePropertiesAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCooperativeMatrixPropertiesNV(std::ostream &out, const VkCooperativeMatrixPropertiesNV* structInfo, Decoded_VkCooperativeMatrixPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderEngineCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderArraysPerEngineCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->computeUnitsPerShaderArray << "," << std::endl; - struct_body << "\t\t\t" << structInfo->simdPerComputeUnit << "," << std::endl; - struct_body << "\t\t\t" << structInfo->wavefrontsPerSimd << "," << std::endl; - struct_body << "\t\t\t" << structInfo->wavefrontSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sgprsPerSimd << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minSgprAllocation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSgprAllocation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sgprAllocationGranularity << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vgprsPerSimd << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minVgprAllocation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxVgprAllocation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vgprAllocationGranularity << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderCorePropertiesAMD"); - out << "\t\t" << "VkPhysicalDeviceShaderCorePropertiesAMD " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->MSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->NSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->KSize << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeNV(" << structInfo->AType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeNV(" << structInfo->BType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeNV(" << structInfo->CType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeNV(" << structInfo->DType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkScopeNV(" << structInfo->scope << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "cooperativeMatrixPropertiesNV"); + out << "\t\t" << "VkCooperativeMatrixPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceMemoryOverallocationCreateInfoAMD(std::ostream &out, const VkDeviceMemoryOverallocationCreateInfoAMD* structInfo, Decoded_VkDeviceMemoryOverallocationCreateInfoAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceCooperativeMatrixFeaturesNV(std::ostream &out, const VkPhysicalDeviceCooperativeMatrixFeaturesNV* structInfo, Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkMemoryOverallocationBehaviorAMD(" << structInfo->overallocationBehavior << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceMemoryOverallocationCreateInfoAMD"); - out << "\t\t" << "VkDeviceMemoryOverallocationCreateInfoAMD " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->cooperativeMatrix << "," << std::endl; + struct_body << "\t\t\t" << structInfo->cooperativeMatrixRobustBufferAccess << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCooperativeMatrixFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceCooperativeMatrixFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(std::ostream &out, const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceCooperativeMatrixPropertiesNV(std::ostream &out, const VkPhysicalDeviceCooperativeMatrixPropertiesNV* structInfo, Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxVertexAttribDivisor << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVertexAttributeDivisorPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->cooperativeMatrixSupportedStages << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCooperativeMatrixPropertiesNV"); + out << "\t\t" << "VkPhysicalDeviceCooperativeMatrixPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPresentFrameTokenGGP(std::ostream &out, const VkPresentFrameTokenGGP* structInfo, Decoded_VkPresentFrameTokenGGP* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkFramebufferMixedSamplesCombinationNV(std::ostream &out, const VkFramebufferMixedSamplesCombinationNV* structInfo, Decoded_VkFramebufferMixedSamplesCombinationNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->frameToken << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "presentFrameTokenGGP"); - out << "\t\t" << "VkPresentFrameTokenGGP " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkDrawMeshTasksIndirectCommandNV(std::ostream &out, const VkDrawMeshTasksIndirectCommandNV* structInfo, Decoded_VkDrawMeshTasksIndirectCommandNV* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->taskCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->firstTask << ","; - std::string variable_name = consumer.AddStruct(struct_body, "drawMeshTasksIndirectCommandNV"); - out << "\t\t" << "VkDrawMeshTasksIndirectCommandNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkCoverageReductionModeNV(" << structInfo->coverageReductionMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->rasterizationSamples << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->depthStencilSamples << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->colorSamples << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "framebufferMixedSamplesCombinationNV"); + out << "\t\t" << "VkFramebufferMixedSamplesCombinationNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMeshShaderFeaturesNV(std::ostream &out, const VkPhysicalDeviceMeshShaderFeaturesNV* structInfo, Decoded_VkPhysicalDeviceMeshShaderFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceCoverageReductionModeFeaturesNV(std::ostream &out, const VkPhysicalDeviceCoverageReductionModeFeaturesNV* structInfo, Decoded_VkPhysicalDeviceCoverageReductionModeFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->taskShader << "," << std::endl; - struct_body << "\t\t\t" << structInfo->meshShader << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMeshShaderFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceMeshShaderFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->coverageReductionMode << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCoverageReductionModeFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceCoverageReductionModeFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMeshShaderPropertiesNV(std::ostream &out, const VkPhysicalDeviceMeshShaderPropertiesNV* structInfo, Decoded_VkPhysicalDeviceMeshShaderPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineCoverageReductionStateCreateInfoNV(std::ostream &out, const VkPipelineCoverageReductionStateCreateInfoNV* structInfo, Decoded_VkPipelineCoverageReductionStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDrawMeshTasksCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTaskWorkGroupInvocations << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->maxTaskWorkGroupSize[0]), 3) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTaskTotalMemorySize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxTaskOutputCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxMeshWorkGroupInvocations << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->maxMeshWorkGroupSize[0]), 3) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxMeshTotalMemorySize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxMeshOutputVertices << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxMeshOutputPrimitives << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxMeshMultiviewViewCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->meshOutputPerVertexGranularity << "," << std::endl; - struct_body << "\t\t\t" << structInfo->meshOutputPerPrimitiveGranularity << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMeshShaderPropertiesNV"); - out << "\t\t" << "VkPhysicalDeviceMeshShaderPropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineCoverageReductionStateCreateFlagsNV(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkCoverageReductionModeNV(" << structInfo->coverageReductionMode << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineCoverageReductionStateCreateInfoNV"); + out << "\t\t" << "VkPipelineCoverageReductionStateCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderImageFootprintFeaturesNV(std::ostream &out, const VkPhysicalDeviceShaderImageFootprintFeaturesNV* structInfo, Decoded_VkPhysicalDeviceShaderImageFootprintFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(std::ostream &out, const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageFootprint << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderImageFootprintFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceShaderImageFootprintFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShaderSampleInterlock << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShaderPixelInterlock << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShaderShadingRateInterlock << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShaderInterlockFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExclusiveScissorFeaturesNV(std::ostream &out, const VkPhysicalDeviceExclusiveScissorFeaturesNV* structInfo, Decoded_VkPhysicalDeviceExclusiveScissorFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(std::ostream &out, const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->exclusiveScissor << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExclusiveScissorFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceExclusiveScissorFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->ycbcrImageArrays << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceYcbcrImageArraysFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceYcbcrImageArraysFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineViewportExclusiveScissorStateCreateInfoNV(std::ostream &out, const VkPipelineViewportExclusiveScissorStateCreateInfoNV* structInfo, Decoded_VkPipelineViewportExclusiveScissorStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceProvokingVertexFeaturesEXT(std::ostream &out, const VkPhysicalDeviceProvokingVertexFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceProvokingVertexFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pexclusive_scissors_array = "NULL"; - if (structInfo->pExclusiveScissors != NULL) { - pexclusive_scissors_array = "pExclusiveScissors_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkRect2D " << pexclusive_scissors_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pExclusiveScissors, structInfo->exclusiveScissorCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->exclusiveScissorCount << "," << std::endl; - struct_body << "\t\t\t" << pexclusive_scissors_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineViewportExclusiveScissorStateCreateInfoNV"); - out << "\t\t" << "VkPipelineViewportExclusiveScissorStateCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->provokingVertexLast << "," << std::endl; + struct_body << "\t\t\t" << structInfo->transformFeedbackPreservesProvokingVertex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceProvokingVertexFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceProvokingVertexFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCheckpointData2NV(std::ostream &out, const VkCheckpointData2NV* structInfo, Decoded_VkCheckpointData2NV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceProvokingVertexPropertiesEXT(std::ostream &out, const VkPhysicalDeviceProvokingVertexPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceProvokingVertexPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->stage << ")" << "," << std::endl; - out << "\t\t" << "// TODO: Support pCheckpointMarker (non-struct output) argument." << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "checkpointData2NV"); - out << "\t\t" << "VkCheckpointData2NV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->provokingVertexModePerPipeline << "," << std::endl; + struct_body << "\t\t\t" << structInfo->transformFeedbackPreservesTriangleFanProvokingVertex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceProvokingVertexPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceProvokingVertexPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCheckpointDataNV(std::ostream &out, const VkCheckpointDataNV* structInfo, Decoded_VkCheckpointDataNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(std::ostream &out, const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT* structInfo, Decoded_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlagBits(" << structInfo->stage << ")" << "," << std::endl; - out << "\t\t" << "// TODO: Support pCheckpointMarker (non-struct output) argument." << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "checkpointDataNV"); - out << "\t\t" << "VkCheckpointDataNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkProvokingVertexModeEXT(" << structInfo->provokingVertexMode << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineRasterizationProvokingVertexStateCreateInfoEXT"); + out << "\t\t" << "VkPipelineRasterizationProvokingVertexStateCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkQueueFamilyCheckpointProperties2NV(std::ostream &out, const VkQueueFamilyCheckpointProperties2NV* structInfo, Decoded_VkQueueFamilyCheckpointProperties2NV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfaceCapabilitiesFullScreenExclusiveEXT(std::ostream &out, const VkSurfaceCapabilitiesFullScreenExclusiveEXT* structInfo, Decoded_VkSurfaceCapabilitiesFullScreenExclusiveEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlags2(" << structInfo->checkpointExecutionStageMask << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyCheckpointProperties2NV"); - out << "\t\t" << "VkQueueFamilyCheckpointProperties2NV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->fullScreenExclusiveSupported << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfaceCapabilitiesFullScreenExclusiveEXT"); + out << "\t\t" << "VkSurfaceCapabilitiesFullScreenExclusiveEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkQueueFamilyCheckpointPropertiesNV(std::ostream &out, const VkQueueFamilyCheckpointPropertiesNV* structInfo, Decoded_VkQueueFamilyCheckpointPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfaceFullScreenExclusiveInfoEXT(std::ostream &out, const VkSurfaceFullScreenExclusiveInfoEXT* structInfo, Decoded_VkSurfaceFullScreenExclusiveInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineStageFlags(" << structInfo->checkpointExecutionStageMask << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyCheckpointPropertiesNV"); - out << "\t\t" << "VkQueueFamilyCheckpointPropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFullScreenExclusiveEXT(" << structInfo->fullScreenExclusive << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfaceFullScreenExclusiveInfoEXT"); + out << "\t\t" << "VkSurfaceFullScreenExclusiveInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(std::ostream &out, const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* structInfo, Decoded_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfaceFullScreenExclusiveWin32InfoEXT(std::ostream &out, const VkSurfaceFullScreenExclusiveWin32InfoEXT* structInfo, Decoded_VkSurfaceFullScreenExclusiveWin32InfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderIntegerFunctions2 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderIntegerFunctions2FeaturesINTEL"); - out << "\t\t" << "VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->hmonitor << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfaceFullScreenExclusiveWin32InfoEXT"); + out << "\t\t" << "VkSurfaceFullScreenExclusiveWin32InfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkInitializePerformanceApiInfoINTEL(std::ostream &out, const VkInitializePerformanceApiInfoINTEL* structInfo, Decoded_VkInitializePerformanceApiInfoINTEL* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkHeadlessSurfaceCreateInfoEXT(std::ostream &out, const VkHeadlessSurfaceCreateInfoEXT* structInfo, Decoded_VkHeadlessSurfaceCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - out << "\t\t" << "// TODO: Support pUserData (non-struct output) argument." << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "initializePerformanceApiInfoINTEL"); - out << "\t\t" << "VkInitializePerformanceApiInfoINTEL " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkHeadlessSurfaceCreateFlagsEXT(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "headlessSurfaceCreateInfoEXT"); + out << "\t\t" << "VkHeadlessSurfaceCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPerformanceConfigurationAcquireInfoINTEL(std::ostream &out, const VkPerformanceConfigurationAcquireInfoINTEL* structInfo, Decoded_VkPerformanceConfigurationAcquireInfoINTEL* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPerformanceConfigurationTypeINTEL(" << structInfo->type << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "performanceConfigurationAcquireInfoINTEL"); - out << "\t\t" << "VkPerformanceConfigurationAcquireInfoINTEL " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBufferFloat32Atomics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBufferFloat32AtomicAdd << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBufferFloat64Atomics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBufferFloat64AtomicAdd << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSharedFloat32Atomics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSharedFloat32AtomicAdd << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSharedFloat64Atomics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSharedFloat64AtomicAdd << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderImageFloat32Atomics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderImageFloat32AtomicAdd << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sparseImageFloat32Atomics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sparseImageFloat32AtomicAdd << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderAtomicFloatFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPerformanceMarkerInfoINTEL(std::ostream &out, const VkPerformanceMarkerInfoINTEL* structInfo, Decoded_VkPerformanceMarkerInfoINTEL* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(std::ostream &out, const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->marker << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "performanceMarkerInfoINTEL"); - out << "\t\t" << "VkPerformanceMarkerInfoINTEL " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExtendedDynamicStateFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceExtendedDynamicStateFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPerformanceOverrideInfoINTEL(std::ostream &out, const VkPerformanceOverrideInfoINTEL* structInfo, Decoded_VkPerformanceOverrideInfoINTEL* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryMapPlacedInfoEXT(std::ostream &out, const VkMemoryMapPlacedInfoEXT* structInfo, Decoded_VkMemoryMapPlacedInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPerformanceOverrideTypeINTEL(" << structInfo->type << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->enable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->parameter << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "performanceOverrideInfoINTEL"); - out << "\t\t" << "VkPerformanceOverrideInfoINTEL " << variable_name << " {" << std::endl; + out << "\t\t" << "// TODO: Support pPlacedAddress (non-struct output) argument." << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "memoryMapPlacedInfoEXT"); + out << "\t\t" << "VkMemoryMapPlacedInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPerformanceStreamMarkerInfoINTEL(std::ostream &out, const VkPerformanceStreamMarkerInfoINTEL* structInfo, Decoded_VkPerformanceStreamMarkerInfoINTEL* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT(std::ostream &out, const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->marker << ","; - std::string variable_name = consumer.AddStruct(struct_body, "performanceStreamMarkerInfoINTEL"); - out << "\t\t" << "VkPerformanceStreamMarkerInfoINTEL " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->memoryMapPlaced << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryMapRangePlaced << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryUnmapReserve << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMapMemoryPlacedFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceMapMemoryPlacedFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkQueryPoolPerformanceQueryCreateInfoINTEL(std::ostream &out, const VkQueryPoolPerformanceQueryCreateInfoINTEL* structInfo, Decoded_VkQueryPoolPerformanceQueryCreateInfoINTEL* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT(std::ostream &out, const VkPhysicalDeviceMapMemoryPlacedPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkQueryPoolSamplingModeINTEL(" << structInfo->performanceCountersSampling << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "queryPoolPerformanceQueryCreateInfoINTEL"); - out << "\t\t" << "VkQueryPoolPerformanceQueryCreateInfoINTEL " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->minPlacedMemoryMapAlignment << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMapMemoryPlacedPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceMapMemoryPlacedPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePCIBusInfoPropertiesEXT(std::ostream &out, const VkPhysicalDevicePCIBusInfoPropertiesEXT* structInfo, Decoded_VkPhysicalDevicePCIBusInfoPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pciDomain << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pciBus << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pciDevice << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pciFunction << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePCIBusInfoPropertiesEXT"); - out << "\t\t" << "VkPhysicalDevicePCIBusInfoPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBufferFloat16Atomics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBufferFloat16AtomicAdd << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBufferFloat16AtomicMinMax << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBufferFloat32AtomicMinMax << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBufferFloat64AtomicMinMax << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSharedFloat16Atomics << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSharedFloat16AtomicAdd << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSharedFloat16AtomicMinMax << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSharedFloat32AtomicMinMax << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderSharedFloat64AtomicMinMax << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderImageFloat32AtomicMinMax << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sparseImageFloat32AtomicMinMax << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderAtomicFloat2FeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDisplayNativeHdrSurfaceCapabilitiesAMD(std::ostream &out, const VkDisplayNativeHdrSurfaceCapabilitiesAMD* structInfo, Decoded_VkDisplayNativeHdrSurfaceCapabilitiesAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindIndexBufferIndirectCommandNV(std::ostream &out, const VkBindIndexBufferIndirectCommandNV* structInfo, Decoded_VkBindIndexBufferIndirectCommandNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->localDimmingSupport << ","; - std::string variable_name = consumer.AddStruct(struct_body, "displayNativeHdrSurfaceCapabilitiesAMD"); - out << "\t\t" << "VkDisplayNativeHdrSurfaceCapabilitiesAMD " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->bufferAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "," << std::endl; + struct_body << "\t\t\t" << "VkIndexType(" << structInfo->indexType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindIndexBufferIndirectCommandNV"); + out << "\t\t" << "VkBindIndexBufferIndirectCommandNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSwapchainDisplayNativeHdrCreateInfoAMD(std::ostream &out, const VkSwapchainDisplayNativeHdrCreateInfoAMD* structInfo, Decoded_VkSwapchainDisplayNativeHdrCreateInfoAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindShaderGroupIndirectCommandNV(std::ostream &out, const VkBindShaderGroupIndirectCommandNV* structInfo, Decoded_VkBindShaderGroupIndirectCommandNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->localDimmingEnable << ","; - std::string variable_name = consumer.AddStruct(struct_body, "swapchainDisplayNativeHdrCreateInfoAMD"); - out << "\t\t" << "VkSwapchainDisplayNativeHdrCreateInfoAMD " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->groupIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindShaderGroupIndirectCommandNV"); + out << "\t\t" << "VkBindShaderGroupIndirectCommandNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImagePipeSurfaceCreateInfoFUCHSIA(std::ostream &out, const VkImagePipeSurfaceCreateInfoFUCHSIA* structInfo, Decoded_VkImagePipeSurfaceCreateInfoFUCHSIA* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindVertexBufferIndirectCommandNV(std::ostream &out, const VkBindVertexBufferIndirectCommandNV* structInfo, Decoded_VkBindVertexBufferIndirectCommandNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImagePipeSurfaceCreateFlagsFUCHSIA(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imagePipeHandle << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imagePipeSurfaceCreateInfoFUCHSIA"); - out << "\t\t" << "VkImagePipeSurfaceCreateInfoFUCHSIA " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->bufferAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stride << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindVertexBufferIndirectCommandNV"); + out << "\t\t" << "VkBindVertexBufferIndirectCommandNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMetalSurfaceCreateInfoEXT(std::ostream &out, const VkMetalSurfaceCreateInfoEXT* structInfo, Decoded_VkMetalSurfaceCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkGeneratedCommandsInfoNV(std::ostream &out, const VkGeneratedCommandsInfoNV* structInfo, Decoded_VkGeneratedCommandsInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pstreams_array = "NULL"; + if (structInfo->pStreams != NULL) { + pstreams_array = "pStreams_" + std::to_string(consumer.GetNextId()); + std::string pstreams_names; + for (uint32_t idx = 0; idx < structInfo->streamCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pStreams + idx != NULL) { + variable_name = GenerateStruct_VkIndirectCommandsStreamNV(out, + structInfo->pStreams + idx, + metaInfo->pStreams->GetMetaStructPointer() + idx, + consumer); + } + pstreams_names += variable_name + ", "; + } + out << "\t\t" << "VkIndirectCommandsStreamNV " << pstreams_array << "[] = {" << pstreams_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkMetalSurfaceCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->pLayer << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "metalSurfaceCreateInfoEXT"); - out << "\t\t" << "VkMetalSurfaceCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineBindPoint(" << structInfo->pipelineBindPoint << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipeline) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->indirectCommandsLayout) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->streamCount << "," << std::endl; + struct_body << "\t\t\t" << pstreams_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sequencesCount << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->preprocessBuffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preprocessOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preprocessSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->sequencesCountBuffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sequencesCountOffset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->sequencesIndexBuffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sequencesIndexOffset << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "generatedCommandsInfoNV"); + out << "\t\t" << "VkGeneratedCommandsInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; - out << "\t\t" << "OverrideVkMetalSurfaceCreateInfoEXT(&" << variable_name << ", " << "appdata" << ");" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(std::ostream &out, const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceFragmentDensityMapFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkGeneratedCommandsMemoryRequirementsInfoNV(std::ostream &out, const VkGeneratedCommandsMemoryRequirementsInfoNV* structInfo, Decoded_VkGeneratedCommandsMemoryRequirementsInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentDensityMap << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentDensityMapDynamic << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentDensityMapNonSubsampledImages << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentDensityMapFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceFragmentDensityMapFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineBindPoint(" << structInfo->pipelineBindPoint << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipeline) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->indirectCommandsLayout) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSequencesCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "generatedCommandsMemoryRequirementsInfoNV"); + out << "\t\t" << "VkGeneratedCommandsMemoryRequirementsInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(std::ostream &out, const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceFragmentDensityMapPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkGraphicsPipelineShaderGroupsCreateInfoNV(std::ostream &out, const VkGraphicsPipelineShaderGroupsCreateInfoNV* structInfo, Decoded_VkGraphicsPipelineShaderGroupsCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string min_fragment_density_texel_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->minFragmentDensityTexelSize, - metaInfo->minFragmentDensityTexelSize, - consumer); - std::string max_fragment_density_texel_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxFragmentDensityTexelSize, - metaInfo->maxFragmentDensityTexelSize, - consumer); + std::string pgroups_array = "NULL"; + if (structInfo->pGroups != NULL) { + pgroups_array = "pGroups_" + std::to_string(consumer.GetNextId()); + std::string pgroups_names; + for (uint32_t idx = 0; idx < structInfo->groupCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pGroups + idx != NULL) { + variable_name = GenerateStruct_VkGraphicsShaderGroupCreateInfoNV(out, + structInfo->pGroups + idx, + metaInfo->pGroups->GetMetaStructPointer() + idx, + consumer); + } + pgroups_names += variable_name + ", "; + } + out << "\t\t" << "VkGraphicsShaderGroupCreateInfoNV " << pgroups_array << "[] = {" << pgroups_names << "};" << std::endl; + } + std::string ppipelines_array = "NULL"; + if (metaInfo->pPipelines.GetPointer() != NULL && structInfo->pipelineCount > 0) { + ppipelines_array = "ppipelines_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_PIPELINE)); + std::string ppipelines_values = toStringJoin(metaInfo->pPipelines.GetPointer(), + metaInfo->pPipelines.GetPointer() + structInfo->pipelineCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->pipelineCount == 1) { + ppipelines_array = "&" + ppipelines_values; + } else if (structInfo->pipelineCount > 1) { + out << "\t\t" << "VkPipeline " << ppipelines_array << "[] = {" << ppipelines_values << "};" << std::endl; + } + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << min_fragment_density_texel_size_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_fragment_density_texel_size_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentDensityInvocations << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentDensityMapPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceFragmentDensityMapPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->groupCount << "," << std::endl; + struct_body << "\t\t\t" << pgroups_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineCount << "," << std::endl; + struct_body << "\t\t\t" << ppipelines_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "graphicsPipelineShaderGroupsCreateInfoNV"); + out << "\t\t" << "VkGraphicsPipelineShaderGroupsCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassFragmentDensityMapCreateInfoEXT(std::ostream &out, const VkRenderPassFragmentDensityMapCreateInfoEXT* structInfo, Decoded_VkRenderPassFragmentDensityMapCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkGraphicsShaderGroupCreateInfoNV(std::ostream &out, const VkGraphicsShaderGroupCreateInfoNV* structInfo, Decoded_VkGraphicsShaderGroupCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string fragment_density_map_attachment_info_var = GenerateStruct_VkAttachmentReference(out, - &structInfo->fragmentDensityMapAttachment, - metaInfo->fragmentDensityMapAttachment, - consumer); + std::string pstages_array = "NULL"; + if (structInfo->pStages != NULL) { + pstages_array = "pStages_" + std::to_string(consumer.GetNextId()); + std::string pstages_names; + for (uint32_t idx = 0; idx < structInfo->stageCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pStages + idx != NULL) { + variable_name = GenerateStruct_VkPipelineShaderStageCreateInfo(out, + structInfo->pStages + idx, + metaInfo->pStages->GetMetaStructPointer() + idx, + consumer); + } + pstages_names += variable_name + ", "; + } + out << "\t\t" << "VkPipelineShaderStageCreateInfo " << pstages_array << "[] = {" << pstages_names << "};" << std::endl; + } + std::string pvertex_input_state_struct = "NULL"; + if (structInfo->pVertexInputState != NULL) { + pvertex_input_state_struct = GenerateStruct_VkPipelineVertexInputStateCreateInfo(out, + structInfo->pVertexInputState, + metaInfo->pVertexInputState->GetMetaStructPointer(), + consumer); + pvertex_input_state_struct.insert(0, "&"); + } + std::string ptessellation_state_struct = "NULL"; + if (structInfo->pTessellationState != NULL) { + ptessellation_state_struct = GenerateStruct_VkPipelineTessellationStateCreateInfo(out, + structInfo->pTessellationState, + metaInfo->pTessellationState->GetMetaStructPointer(), + consumer); + ptessellation_state_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << fragment_density_map_attachment_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassFragmentDensityMapCreateInfoEXT"); - out << "\t\t" << "VkRenderPassFragmentDensityMapCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->stageCount << "," << std::endl; + struct_body << "\t\t\t" << pstages_array << "," << std::endl; + struct_body << "\t\t\t" << pvertex_input_state_struct << "," << std::endl; + struct_body << "\t\t\t" << ptessellation_state_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "graphicsShaderGroupCreateInfoNV"); + out << "\t\t" << "VkGraphicsShaderGroupCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderingFragmentDensityMapAttachmentInfoEXT(std::ostream &out, const VkRenderingFragmentDensityMapAttachmentInfoEXT* structInfo, Decoded_VkRenderingFragmentDensityMapAttachmentInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkIndirectCommandsLayoutCreateInfoNV(std::ostream &out, const VkIndirectCommandsLayoutCreateInfoNV* structInfo, Decoded_VkIndirectCommandsLayoutCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string ptokens_array = "NULL"; + if (structInfo->pTokens != NULL) { + ptokens_array = "pTokens_" + std::to_string(consumer.GetNextId()); + std::string ptokens_names; + for (uint32_t idx = 0; idx < structInfo->tokenCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pTokens + idx != NULL) { + variable_name = GenerateStruct_VkIndirectCommandsLayoutTokenNV(out, + structInfo->pTokens + idx, + metaInfo->pTokens->GetMetaStructPointer() + idx, + consumer); + } + ptokens_names += variable_name + ", "; + } + out << "\t\t" << "VkIndirectCommandsLayoutTokenNV " << ptokens_array << "[] = {" << ptokens_names << "};" << std::endl; + } + std::string pstream_strides_array = "NULL"; + if (structInfo->pStreamStrides != NULL) { + pstream_strides_array = "pStreamStrides_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pstream_strides_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pStreamStrides, structInfo->streamCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->imageView) << "," << std::endl; - struct_body << "\t\t\t" << "VkImageLayout(" << structInfo->imageLayout << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderingFragmentDensityMapAttachmentInfoEXT"); - out << "\t\t" << "VkRenderingFragmentDensityMapAttachmentInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkIndirectCommandsLayoutUsageFlagsNV(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineBindPoint(" << structInfo->pipelineBindPoint << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tokenCount << "," << std::endl; + struct_body << "\t\t\t" << ptokens_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->streamCount << "," << std::endl; + struct_body << "\t\t\t" << pstream_strides_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "indirectCommandsLayoutCreateInfoNV"); + out << "\t\t" << "VkIndirectCommandsLayoutCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderCoreProperties2AMD(std::ostream &out, const VkPhysicalDeviceShaderCoreProperties2AMD* structInfo, Decoded_VkPhysicalDeviceShaderCoreProperties2AMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkIndirectCommandsLayoutTokenNV(std::ostream &out, const VkIndirectCommandsLayoutTokenNV* structInfo, Decoded_VkIndirectCommandsLayoutTokenNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pindex_types_values; + std::string pindex_types_array = "NULL"; + if (structInfo->pIndexTypes != NULL) { + for (uint32_t idx = 0; idx < structInfo->indexTypeCount; idx++) { + pindex_types_values += util::ToString(structInfo->pIndexTypes[idx]) + ", "; + } + pindex_types_array = "pIndexTypes_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkIndexType " << pindex_types_array << "[] = {" << pindex_types_values << "};" << std::endl; + } + std::string pindex_type_values_array = "NULL"; + if (structInfo->pIndexTypeValues != NULL) { + pindex_type_values_array = "pIndexTypeValues_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint32_t " << pindex_type_values_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pIndexTypeValues, structInfo->indexTypeCount) << ";" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderCorePropertiesFlagsAMD(" << structInfo->shaderCoreFeatures << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->activeComputeUnitCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderCoreProperties2AMD"); - out << "\t\t" << "VkPhysicalDeviceShaderCoreProperties2AMD " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkIndirectCommandsTokenTypeNV(" << structInfo->tokenType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stream << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexBindingUnit << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexDynamicStride << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pushconstantPipelineLayout) << "," << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->pushconstantShaderStageFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pushconstantOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pushconstantSize << "," << std::endl; + struct_body << "\t\t\t" << "VkIndirectStateFlagsNV(" << structInfo->indirectStateFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indexTypeCount << "," << std::endl; + struct_body << "\t\t\t" << pindex_types_array << "," << std::endl; + struct_body << "\t\t\t" << pindex_type_values_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "indirectCommandsLayoutTokenNV"); + out << "\t\t" << "VkIndirectCommandsLayoutTokenNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceCoherentMemoryFeaturesAMD(std::ostream &out, const VkPhysicalDeviceCoherentMemoryFeaturesAMD* structInfo, Decoded_VkPhysicalDeviceCoherentMemoryFeaturesAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkIndirectCommandsStreamNV(std::ostream &out, const VkIndirectCommandsStreamNV* structInfo, Decoded_VkIndirectCommandsStreamNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceCoherentMemory << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCoherentMemoryFeaturesAMD"); - out << "\t\t" << "VkPhysicalDeviceCoherentMemoryFeaturesAMD " << variable_name << " {" << std::endl; + struct_body << "\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "indirectCommandsStreamNV"); + out << "\t\t" << "VkIndirectCommandsStreamNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(std::ostream &out, const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* structInfo, Decoded_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderImageInt64Atomics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sparseImageInt64Atomics << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderImageAtomicInt64FeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->deviceGeneratedCommands << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDeviceGeneratedCommandsFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMemoryBudgetPropertiesEXT(std::ostream &out, const VkPhysicalDeviceMemoryBudgetPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceMemoryBudgetPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(std::ostream &out, const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* structInfo, Decoded_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string heap_budget_array = "heap_budget_array_" + std::to_string(consumer.GetNextId()); - if (VK_MAX_MEMORY_HEAPS > 0) { - std::string heap_budget_values = toStringJoin(structInfo->heapBudget, - structInfo->heapBudget + VK_MAX_MEMORY_HEAPS, - [](VkDeviceSize current) { return std::to_string(current); }, - ", "); - if (VK_MAX_MEMORY_HEAPS == 1) { - heap_budget_array = "&" + heap_budget_values; - } else if (VK_MAX_MEMORY_HEAPS > 1) { - out << "\t\t" << "VkDeviceSize " << heap_budget_array << "[] = {" << heap_budget_values << "};" << std::endl; - } - } - std::string heap_usage_array = "heap_usage_array_" + std::to_string(consumer.GetNextId()); - if (VK_MAX_MEMORY_HEAPS > 0) { - std::string heap_usage_values = toStringJoin(structInfo->heapUsage, - structInfo->heapUsage + VK_MAX_MEMORY_HEAPS, - [](VkDeviceSize current) { return std::to_string(current); }, - ", "); - if (VK_MAX_MEMORY_HEAPS == 1) { - heap_usage_array = "&" + heap_usage_values; - } else if (VK_MAX_MEMORY_HEAPS > 1) { - out << "\t\t" << "VkDeviceSize " << heap_usage_array << "[] = {" << heap_usage_values << "};" << std::endl; - } - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << heap_budget_array << " }" << "," << std::endl; - struct_body << "\t\t\t" << "{ *" << heap_usage_array << " }" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMemoryBudgetPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceMemoryBudgetPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxGraphicsShaderGroupCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxIndirectSequenceCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxIndirectCommandsTokenCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxIndirectCommandsStreamCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxIndirectCommandsTokenOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxIndirectCommandsStreamStride << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minSequencesCountBufferOffsetAlignment << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minSequencesIndexBufferOffsetAlignment << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minIndirectCommandsBufferOffsetAlignment << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDeviceGeneratedCommandsPropertiesNV"); + out << "\t\t" << "VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryPriorityAllocateInfoEXT(std::ostream &out, const VkMemoryPriorityAllocateInfoEXT* structInfo, Decoded_VkMemoryPriorityAllocateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSetStateFlagsIndirectCommandNV(std::ostream &out, const VkSetStateFlagsIndirectCommandNV* structInfo, Decoded_VkSetStateFlagsIndirectCommandNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->priority << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryPriorityAllocateInfoEXT"); - out << "\t\t" << "VkMemoryPriorityAllocateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->data << ","; + std::string variable_name = consumer.AddStruct(struct_body, "setStateFlagsIndirectCommandNV"); + out << "\t\t" << "VkSetStateFlagsIndirectCommandNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMemoryPriorityFeaturesEXT(std::ostream &out, const VkPhysicalDeviceMemoryPriorityFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceMemoryPriorityFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCommandBufferInheritanceViewportScissorInfoNV(std::ostream &out, const VkCommandBufferInheritanceViewportScissorInfoNV* structInfo, Decoded_VkCommandBufferInheritanceViewportScissorInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pviewport_depths_struct = "NULL"; + if (structInfo->pViewportDepths != NULL) { + pviewport_depths_struct = GenerateStruct_VkViewport(out, + structInfo->pViewportDepths, + metaInfo->pViewportDepths->GetMetaStructPointer(), + consumer); + pviewport_depths_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryPriority << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMemoryPriorityFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceMemoryPriorityFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->viewportScissor2D << "," << std::endl; + struct_body << "\t\t\t" << structInfo->viewportDepthCount << "," << std::endl; + struct_body << "\t\t\t" << pviewport_depths_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "commandBufferInheritanceViewportScissorInfoNV"); + out << "\t\t" << "VkCommandBufferInheritanceViewportScissorInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(std::ostream &out, const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* structInfo, Decoded_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceInheritedViewportScissorFeaturesNV(std::ostream &out, const VkPhysicalDeviceInheritedViewportScissorFeaturesNV* structInfo, Decoded_VkPhysicalDeviceInheritedViewportScissorFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dedicatedAllocationImageAliasing << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDedicatedAllocationImageAliasingFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->inheritedViewportScissor2D << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceInheritedViewportScissorFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceInheritedViewportScissorFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBufferDeviceAddressCreateInfoEXT(std::ostream &out, const VkBufferDeviceAddressCreateInfoEXT* structInfo, Decoded_VkBufferDeviceAddressCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(std::ostream &out, const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceAddress << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bufferDeviceAddressCreateInfoEXT"); - out << "\t\t" << "VkBufferDeviceAddressCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->texelBufferAlignment << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTexelBufferAlignmentFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(std::ostream &out, const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(std::ostream &out, const VkCommandBufferInheritanceRenderPassTransformInfoQCOM* structInfo, Decoded_VkCommandBufferInheritanceRenderPassTransformInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string render_area_info_var = GenerateStruct_VkRect2D(out, + &structInfo->renderArea, + metaInfo->renderArea, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferDeviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferDeviceAddressCaptureReplay << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferDeviceAddressMultiDevice << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceBufferDeviceAddressFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceBufferDeviceAddressFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkSurfaceTransformFlagBitsKHR(" << structInfo->transform << ")" << "," << std::endl; + struct_body << "\t\t\t" << render_area_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "commandBufferInheritanceRenderPassTransformInfoQCOM"); + out << "\t\t" << "VkCommandBufferInheritanceRenderPassTransformInfoQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkValidationFeaturesEXT(std::ostream &out, const VkValidationFeaturesEXT* structInfo, Decoded_VkValidationFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassTransformBeginInfoQCOM(std::ostream &out, const VkRenderPassTransformBeginInfoQCOM* structInfo, Decoded_VkRenderPassTransformBeginInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string penabled_validation_features_values; - std::string penabled_validation_features_array = "NULL"; - if (structInfo->pEnabledValidationFeatures != NULL) { - for (uint32_t idx = 0; idx < structInfo->enabledValidationFeatureCount; idx++) { - penabled_validation_features_values += util::ToString(structInfo->pEnabledValidationFeatures[idx]) + ", "; - } - penabled_validation_features_array = "pEnabledValidationFeatures_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkValidationFeatureEnableEXT " << penabled_validation_features_array << "[] = {" << penabled_validation_features_values << "};" << std::endl; - } - std::string pdisabled_validation_features_values; - std::string pdisabled_validation_features_array = "NULL"; - if (structInfo->pDisabledValidationFeatures != NULL) { - for (uint32_t idx = 0; idx < structInfo->disabledValidationFeatureCount; idx++) { - pdisabled_validation_features_values += util::ToString(structInfo->pDisabledValidationFeatures[idx]) + ", "; - } - pdisabled_validation_features_array = "pDisabledValidationFeatures_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkValidationFeatureDisableEXT " << pdisabled_validation_features_array << "[] = {" << pdisabled_validation_features_values << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->enabledValidationFeatureCount << "," << std::endl; - struct_body << "\t\t\t" << penabled_validation_features_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->disabledValidationFeatureCount << "," << std::endl; - struct_body << "\t\t\t" << pdisabled_validation_features_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "validationFeaturesEXT"); - out << "\t\t" << "VkValidationFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkSurfaceTransformFlagBitsKHR(" << structInfo->transform << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassTransformBeginInfoQCOM"); + out << "\t\t" << "VkRenderPassTransformBeginInfoQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCooperativeMatrixPropertiesNV(std::ostream &out, const VkCooperativeMatrixPropertiesNV* structInfo, Decoded_VkCooperativeMatrixPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDepthBiasInfoEXT(std::ostream &out, const VkDepthBiasInfoEXT* structInfo, Decoded_VkDepthBiasInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->MSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->NSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->KSize << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeNV(" << structInfo->AType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeNV(" << structInfo->BType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeNV(" << structInfo->CType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeNV(" << structInfo->DType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkScopeNV(" << structInfo->scope << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "cooperativeMatrixPropertiesNV"); - out << "\t\t" << "VkCooperativeMatrixPropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->depthBiasConstantFactor << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthBiasClamp << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthBiasSlopeFactor << ","; + std::string variable_name = consumer.AddStruct(struct_body, "depthBiasInfoEXT"); + out << "\t\t" << "VkDepthBiasInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceCooperativeMatrixFeaturesNV(std::ostream &out, const VkPhysicalDeviceCooperativeMatrixFeaturesNV* structInfo, Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDepthBiasRepresentationInfoEXT(std::ostream &out, const VkDepthBiasRepresentationInfoEXT* structInfo, Decoded_VkDepthBiasRepresentationInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cooperativeMatrix << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cooperativeMatrixRobustBufferAccess << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCooperativeMatrixFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceCooperativeMatrixFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDepthBiasRepresentationEXT(" << structInfo->depthBiasRepresentation << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthBiasExact << ","; + std::string variable_name = consumer.AddStruct(struct_body, "depthBiasRepresentationInfoEXT"); + out << "\t\t" << "VkDepthBiasRepresentationInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceCooperativeMatrixPropertiesNV(std::ostream &out, const VkPhysicalDeviceCooperativeMatrixPropertiesNV* structInfo, Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDepthBiasControlFeaturesEXT(std::ostream &out, const VkPhysicalDeviceDepthBiasControlFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceDepthBiasControlFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->cooperativeMatrixSupportedStages << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCooperativeMatrixPropertiesNV"); - out << "\t\t" << "VkPhysicalDeviceCooperativeMatrixPropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->depthBiasControl << "," << std::endl; + struct_body << "\t\t\t" << structInfo->leastRepresentableValueForceUnormRepresentation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->floatRepresentation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->depthBiasExact << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDepthBiasControlFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceDepthBiasControlFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkFramebufferMixedSamplesCombinationNV(std::ostream &out, const VkFramebufferMixedSamplesCombinationNV* structInfo, Decoded_VkFramebufferMixedSamplesCombinationNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceDeviceMemoryReportCreateInfoEXT(std::ostream &out, const VkDeviceDeviceMemoryReportCreateInfoEXT* structInfo, Decoded_VkDeviceDeviceMemoryReportCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkCoverageReductionModeNV(" << structInfo->coverageReductionMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->rasterizationSamples << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->depthStencilSamples << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlags(" << structInfo->colorSamples << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "framebufferMixedSamplesCombinationNV"); - out << "\t\t" << "VkFramebufferMixedSamplesCombinationNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDeviceMemoryReportFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pfnUserCallback << "," << std::endl; + out << "\t\t" << "// TODO: Support pUserData (non-struct output) argument." << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "deviceDeviceMemoryReportCreateInfoEXT"); + out << "\t\t" << "VkDeviceDeviceMemoryReportCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceCoverageReductionModeFeaturesNV(std::ostream &out, const VkPhysicalDeviceCoverageReductionModeFeaturesNV* structInfo, Decoded_VkPhysicalDeviceCoverageReductionModeFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceMemoryReportCallbackDataEXT(std::ostream &out, const VkDeviceMemoryReportCallbackDataEXT* structInfo, Decoded_VkDeviceMemoryReportCallbackDataEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->coverageReductionMode << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCoverageReductionModeFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceCoverageReductionModeFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDeviceMemoryReportFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkDeviceMemoryReportEventTypeEXT(" << structInfo->type << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryObjectId << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkObjectType(" << structInfo->objectType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->objectHandle << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->heapIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceMemoryReportCallbackDataEXT"); + out << "\t\t" << "VkDeviceMemoryReportCallbackDataEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineCoverageReductionStateCreateInfoNV(std::ostream &out, const VkPipelineCoverageReductionStateCreateInfoNV* structInfo, Decoded_VkPipelineCoverageReductionStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(std::ostream &out, const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineCoverageReductionStateCreateFlagsNV(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkCoverageReductionModeNV(" << structInfo->coverageReductionMode << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineCoverageReductionStateCreateInfoNV"); - out << "\t\t" << "VkPipelineCoverageReductionStateCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->deviceMemoryReport << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDeviceMemoryReportFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceDeviceMemoryReportFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(std::ostream &out, const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceCustomBorderColorFeaturesEXT(std::ostream &out, const VkPhysicalDeviceCustomBorderColorFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceCustomBorderColorFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShaderSampleInterlock << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShaderPixelInterlock << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShaderShadingRateInterlock << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShaderInterlockFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->customBorderColors << "," << std::endl; + struct_body << "\t\t\t" << structInfo->customBorderColorWithoutFormat << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCustomBorderColorFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceCustomBorderColorFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(std::ostream &out, const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceCustomBorderColorPropertiesEXT(std::ostream &out, const VkPhysicalDeviceCustomBorderColorPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceCustomBorderColorPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->ycbcrImageArrays << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceYcbcrImageArraysFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceYcbcrImageArraysFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxCustomBorderColorSamplers << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCustomBorderColorPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceCustomBorderColorPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceProvokingVertexFeaturesEXT(std::ostream &out, const VkPhysicalDeviceProvokingVertexFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceProvokingVertexFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSamplerCustomBorderColorCreateInfoEXT(std::ostream &out, const VkSamplerCustomBorderColorCreateInfoEXT* structInfo, Decoded_VkSamplerCustomBorderColorCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->provokingVertexLast << "," << std::endl; - struct_body << "\t\t\t" << structInfo->transformFeedbackPreservesProvokingVertex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceProvokingVertexFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceProvokingVertexFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(structInfo->customBorderColor) << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "samplerCustomBorderColorCreateInfoEXT"); + out << "\t\t" << "VkSamplerCustomBorderColorCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceProvokingVertexPropertiesEXT(std::ostream &out, const VkPhysicalDeviceProvokingVertexPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceProvokingVertexPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(std::ostream &out, const VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->provokingVertexModePerPipeline << "," << std::endl; - struct_body << "\t\t\t" << structInfo->transformFeedbackPreservesTriangleFanProvokingVertex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceProvokingVertexPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceProvokingVertexPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->textureCompressionASTC_3D << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTextureCompressionASTC3DFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT(std::ostream &out, const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT* structInfo, Decoded_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePresentBarrierFeaturesNV(std::ostream &out, const VkPhysicalDevicePresentBarrierFeaturesNV* structInfo, Decoded_VkPhysicalDevicePresentBarrierFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkProvokingVertexModeEXT(" << structInfo->provokingVertexMode << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineRasterizationProvokingVertexStateCreateInfoEXT"); - out << "\t\t" << "VkPipelineRasterizationProvokingVertexStateCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentBarrier << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePresentBarrierFeaturesNV"); + out << "\t\t" << "VkPhysicalDevicePresentBarrierFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfaceCapabilitiesFullScreenExclusiveEXT(std::ostream &out, const VkSurfaceCapabilitiesFullScreenExclusiveEXT* structInfo, Decoded_VkSurfaceCapabilitiesFullScreenExclusiveEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSurfaceCapabilitiesPresentBarrierNV(std::ostream &out, const VkSurfaceCapabilitiesPresentBarrierNV* structInfo, Decoded_VkSurfaceCapabilitiesPresentBarrierNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fullScreenExclusiveSupported << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfaceCapabilitiesFullScreenExclusiveEXT"); - out << "\t\t" << "VkSurfaceCapabilitiesFullScreenExclusiveEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentBarrierSupported << ","; + std::string variable_name = consumer.AddStruct(struct_body, "surfaceCapabilitiesPresentBarrierNV"); + out << "\t\t" << "VkSurfaceCapabilitiesPresentBarrierNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfaceFullScreenExclusiveInfoEXT(std::ostream &out, const VkSurfaceFullScreenExclusiveInfoEXT* structInfo, Decoded_VkSurfaceFullScreenExclusiveInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSwapchainPresentBarrierCreateInfoNV(std::ostream &out, const VkSwapchainPresentBarrierCreateInfoNV* structInfo, Decoded_VkSwapchainPresentBarrierCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFullScreenExclusiveEXT(" << structInfo->fullScreenExclusive << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfaceFullScreenExclusiveInfoEXT"); - out << "\t\t" << "VkSurfaceFullScreenExclusiveInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentBarrierEnable << ","; + std::string variable_name = consumer.AddStruct(struct_body, "swapchainPresentBarrierCreateInfoNV"); + out << "\t\t" << "VkSwapchainPresentBarrierCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfaceFullScreenExclusiveWin32InfoEXT(std::ostream &out, const VkSurfaceFullScreenExclusiveWin32InfoEXT* structInfo, Decoded_VkSurfaceFullScreenExclusiveWin32InfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceDiagnosticsConfigCreateInfoNV(std::ostream &out, const VkDeviceDiagnosticsConfigCreateInfoNV* structInfo, Decoded_VkDeviceDiagnosticsConfigCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->hmonitor << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfaceFullScreenExclusiveWin32InfoEXT"); - out << "\t\t" << "VkSurfaceFullScreenExclusiveWin32InfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDeviceDiagnosticsConfigFlagsNV(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceDiagnosticsConfigCreateInfoNV"); + out << "\t\t" << "VkDeviceDiagnosticsConfigCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkHeadlessSurfaceCreateInfoEXT(std::ostream &out, const VkHeadlessSurfaceCreateInfoEXT* structInfo, Decoded_VkHeadlessSurfaceCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(std::ostream &out, const VkPhysicalDeviceDiagnosticsConfigFeaturesNV* structInfo, Decoded_VkPhysicalDeviceDiagnosticsConfigFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkHeadlessSurfaceCreateFlagsEXT(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "headlessSurfaceCreateInfoEXT"); - out << "\t\t" << "VkHeadlessSurfaceCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->diagnosticsConfig << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDiagnosticsConfigFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceDiagnosticsConfigFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDispatchTileInfoQCOM(std::ostream &out, const VkDispatchTileInfoQCOM* structInfo, Decoded_VkDispatchTileInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBufferFloat32Atomics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBufferFloat32AtomicAdd << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBufferFloat64Atomics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBufferFloat64AtomicAdd << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSharedFloat32Atomics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSharedFloat32AtomicAdd << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSharedFloat64Atomics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSharedFloat64AtomicAdd << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderImageFloat32Atomics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderImageFloat32AtomicAdd << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sparseImageFloat32Atomics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sparseImageFloat32AtomicAdd << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderAtomicFloatFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pnext_name << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dispatchTileInfoQCOM"); + out << "\t\t" << "VkDispatchTileInfoQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(std::ostream &out, const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPerTileBeginInfoQCOM(std::ostream &out, const VkPerTileBeginInfoQCOM* structInfo, Decoded_VkPerTileBeginInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExtendedDynamicStateFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceExtendedDynamicStateFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pnext_name << ","; + std::string variable_name = consumer.AddStruct(struct_body, "perTileBeginInfoQCOM"); + out << "\t\t" << "VkPerTileBeginInfoQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryMapPlacedInfoEXT(std::ostream &out, const VkMemoryMapPlacedInfoEXT* structInfo, Decoded_VkMemoryMapPlacedInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPerTileEndInfoQCOM(std::ostream &out, const VkPerTileEndInfoQCOM* structInfo, Decoded_VkPerTileEndInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - out << "\t\t" << "// TODO: Support pPlacedAddress (non-struct output) argument." << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "memoryMapPlacedInfoEXT"); - out << "\t\t" << "VkMemoryMapPlacedInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pnext_name << ","; + std::string variable_name = consumer.AddStruct(struct_body, "perTileEndInfoQCOM"); + out << "\t\t" << "VkPerTileEndInfoQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT(std::ostream &out, const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceTileShadingFeaturesQCOM(std::ostream &out, const VkPhysicalDeviceTileShadingFeaturesQCOM* structInfo, Decoded_VkPhysicalDeviceTileShadingFeaturesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryMapPlaced << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryMapRangePlaced << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryUnmapReserve << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMapMemoryPlacedFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceMapMemoryPlacedFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->tileShading << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tileShadingFragmentStage << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tileShadingColorAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tileShadingDepthAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tileShadingStencilAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tileShadingInputAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tileShadingSampledAttachments << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tileShadingPerTileDraw << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tileShadingPerTileDispatch << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tileShadingDispatchTile << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tileShadingApron << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tileShadingAnisotropicApron << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tileShadingAtomicOps << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tileShadingImageProcessing << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTileShadingFeaturesQCOM"); + out << "\t\t" << "VkPhysicalDeviceTileShadingFeaturesQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT(std::ostream &out, const VkPhysicalDeviceMapMemoryPlacedPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceTileShadingPropertiesQCOM(std::ostream &out, const VkPhysicalDeviceTileShadingPropertiesQCOM* structInfo, Decoded_VkPhysicalDeviceTileShadingPropertiesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string tile_granularity_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->tileGranularity, + metaInfo->tileGranularity, + consumer); + std::string max_tile_shading_rate_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxTileShadingRate, + metaInfo->maxTileShadingRate, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minPlacedMemoryMapAlignment << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMapMemoryPlacedPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceMapMemoryPlacedPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxApronSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->preferNonCoherent << "," << std::endl; + struct_body << "\t\t\t" << tile_granularity_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_tile_shading_rate_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTileShadingPropertiesQCOM"); + out << "\t\t" << "VkPhysicalDeviceTileShadingPropertiesQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassTileShadingCreateInfoQCOM(std::ostream &out, const VkRenderPassTileShadingCreateInfoQCOM* structInfo, Decoded_VkRenderPassTileShadingCreateInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string tile_apron_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->tileApronSize, + metaInfo->tileApronSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBufferFloat16Atomics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBufferFloat16AtomicAdd << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBufferFloat16AtomicMinMax << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBufferFloat32AtomicMinMax << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBufferFloat64AtomicMinMax << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSharedFloat16Atomics << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSharedFloat16AtomicAdd << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSharedFloat16AtomicMinMax << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSharedFloat32AtomicMinMax << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderSharedFloat64AtomicMinMax << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderImageFloat32AtomicMinMax << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sparseImageFloat32AtomicMinMax << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderAtomicFloat2FeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkTileShadingRenderPassFlagsQCOM(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << tile_apron_size_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassTileShadingCreateInfoQCOM"); + out << "\t\t" << "VkRenderPassTileShadingCreateInfoQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBindIndexBufferIndirectCommandNV(std::ostream &out, const VkBindIndexBufferIndirectCommandNV* structInfo, Decoded_VkBindIndexBufferIndirectCommandNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkQueryLowLatencySupportNV(std::ostream &out, const VkQueryLowLatencySupportNV* structInfo, Decoded_VkQueryLowLatencySupportNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->bufferAddress << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "," << std::endl; - struct_body << "\t\t\t" << "VkIndexType(" << structInfo->indexType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bindIndexBufferIndirectCommandNV"); - out << "\t\t" << "VkBindIndexBufferIndirectCommandNV " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + out << "\t\t" << "// TODO: Support pQueriedLowLatencyData (non-struct output) argument." << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "queryLowLatencySupportNV"); + out << "\t\t" << "VkQueryLowLatencySupportNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBindShaderGroupIndirectCommandNV(std::ostream &out, const VkBindShaderGroupIndirectCommandNV* structInfo, Decoded_VkBindShaderGroupIndirectCommandNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAccelerationStructureCaptureDescriptorDataInfoEXT(std::ostream &out, const VkAccelerationStructureCaptureDescriptorDataInfoEXT* structInfo, Decoded_VkAccelerationStructureCaptureDescriptorDataInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->groupIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bindShaderGroupIndirectCommandNV"); - out << "\t\t" << "VkBindShaderGroupIndirectCommandNV " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->accelerationStructure) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->accelerationStructureNV) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureCaptureDescriptorDataInfoEXT"); + out << "\t\t" << "VkAccelerationStructureCaptureDescriptorDataInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkBindVertexBufferIndirectCommandNV(std::ostream &out, const VkBindVertexBufferIndirectCommandNV* structInfo, Decoded_VkBindVertexBufferIndirectCommandNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBufferCaptureDescriptorDataInfoEXT(std::ostream &out, const VkBufferCaptureDescriptorDataInfoEXT* structInfo, Decoded_VkBufferCaptureDescriptorDataInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->bufferAddress << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stride << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bindVertexBufferIndirectCommandNV"); - out << "\t\t" << "VkBindVertexBufferIndirectCommandNV " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bufferCaptureDescriptorDataInfoEXT"); + out << "\t\t" << "VkBufferCaptureDescriptorDataInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkGeneratedCommandsInfoNV(std::ostream &out, const VkGeneratedCommandsInfoNV* structInfo, Decoded_VkGeneratedCommandsInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorAddressInfoEXT(std::ostream &out, const VkDescriptorAddressInfoEXT* structInfo, Decoded_VkDescriptorAddressInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstreams_array = "NULL"; - if (structInfo->pStreams != NULL) { - pstreams_array = "pStreams_" + std::to_string(consumer.GetNextId()); - std::string pstreams_names; - for (uint32_t idx = 0; idx < structInfo->streamCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStreams + idx != NULL) { - variable_name = GenerateStruct_VkIndirectCommandsStreamNV(out, - structInfo->pStreams + idx, - metaInfo->pStreams->GetMetaStructPointer() + idx, - consumer); - } - pstreams_names += variable_name + ", "; - } - out << "\t\t" << "VkIndirectCommandsStreamNV " << pstreams_array << "[] = {" << pstreams_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineBindPoint(" << structInfo->pipelineBindPoint << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipeline) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->indirectCommandsLayout) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->streamCount << "," << std::endl; - struct_body << "\t\t\t" << pstreams_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sequencesCount << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->preprocessBuffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preprocessOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preprocessSize << "UL" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->sequencesCountBuffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sequencesCountOffset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->sequencesIndexBuffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sequencesIndexOffset << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "generatedCommandsInfoNV"); - out << "\t\t" << "VkGeneratedCommandsInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->address << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->range << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorAddressInfoEXT"); + out << "\t\t" << "VkDescriptorAddressInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkGeneratedCommandsMemoryRequirementsInfoNV(std::ostream &out, const VkGeneratedCommandsMemoryRequirementsInfoNV* structInfo, Decoded_VkGeneratedCommandsMemoryRequirementsInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorBufferBindingInfoEXT(std::ostream &out, const VkDescriptorBufferBindingInfoEXT* structInfo, Decoded_VkDescriptorBufferBindingInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineBindPoint(" << structInfo->pipelineBindPoint << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipeline) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->indirectCommandsLayout) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSequencesCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "generatedCommandsMemoryRequirementsInfoNV"); - out << "\t\t" << "VkGeneratedCommandsMemoryRequirementsInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->address << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkBufferUsageFlags(" << structInfo->usage << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorBufferBindingInfoEXT"); + out << "\t\t" << "VkDescriptorBufferBindingInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } - - -std::string GenerateStruct_VkGraphicsPipelineShaderGroupsCreateInfoNV(std::ostream &out, const VkGraphicsPipelineShaderGroupsCreateInfoNV* structInfo, Decoded_VkGraphicsPipelineShaderGroupsCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pgroups_array = "NULL"; - if (structInfo->pGroups != NULL) { - pgroups_array = "pGroups_" + std::to_string(consumer.GetNextId()); - std::string pgroups_names; - for (uint32_t idx = 0; idx < structInfo->groupCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pGroups + idx != NULL) { - variable_name = GenerateStruct_VkGraphicsShaderGroupCreateInfoNV(out, - structInfo->pGroups + idx, - metaInfo->pGroups->GetMetaStructPointer() + idx, - consumer); - } - pgroups_names += variable_name + ", "; - } - out << "\t\t" << "VkGraphicsShaderGroupCreateInfoNV " << pgroups_array << "[] = {" << pgroups_names << "};" << std::endl; - } - std::string ppipelines_array = "NULL"; - if (metaInfo->pPipelines.GetPointer() != NULL && structInfo->pipelineCount > 0) { - ppipelines_array = "ppipelines_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_PIPELINE)); - std::string ppipelines_values = toStringJoin(metaInfo->pPipelines.GetPointer(), - metaInfo->pPipelines.GetPointer() + structInfo->pipelineCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->pipelineCount == 1) { - ppipelines_array = "&" + ppipelines_values; - } else if (structInfo->pipelineCount > 1) { - out << "\t\t" << "VkPipeline " << ppipelines_array << "[] = {" << ppipelines_values << "};" << std::endl; - } - } + + +std::string GenerateStruct_VkDescriptorBufferBindingPushDescriptorBufferHandleEXT(std::ostream &out, const VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* structInfo, Decoded_VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->groupCount << "," << std::endl; - struct_body << "\t\t\t" << pgroups_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineCount << "," << std::endl; - struct_body << "\t\t\t" << ppipelines_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "graphicsPipelineShaderGroupsCreateInfoNV"); - out << "\t\t" << "VkGraphicsPipelineShaderGroupsCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorBufferBindingPushDescriptorBufferHandleEXT"); + out << "\t\t" << "VkDescriptorBufferBindingPushDescriptorBufferHandleEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkGraphicsShaderGroupCreateInfoNV(std::ostream &out, const VkGraphicsShaderGroupCreateInfoNV* structInfo, Decoded_VkGraphicsShaderGroupCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageCaptureDescriptorDataInfoEXT(std::ostream &out, const VkImageCaptureDescriptorDataInfoEXT* structInfo, Decoded_VkImageCaptureDescriptorDataInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstages_array = "NULL"; - if (structInfo->pStages != NULL) { - pstages_array = "pStages_" + std::to_string(consumer.GetNextId()); - std::string pstages_names; - for (uint32_t idx = 0; idx < structInfo->stageCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStages + idx != NULL) { - variable_name = GenerateStruct_VkPipelineShaderStageCreateInfo(out, - structInfo->pStages + idx, - metaInfo->pStages->GetMetaStructPointer() + idx, - consumer); - } - pstages_names += variable_name + ", "; - } - out << "\t\t" << "VkPipelineShaderStageCreateInfo " << pstages_array << "[] = {" << pstages_names << "};" << std::endl; - } - std::string pvertex_input_state_struct = "NULL"; - if (structInfo->pVertexInputState != NULL) { - pvertex_input_state_struct = GenerateStruct_VkPipelineVertexInputStateCreateInfo(out, - structInfo->pVertexInputState, - metaInfo->pVertexInputState->GetMetaStructPointer(), - consumer); - pvertex_input_state_struct.insert(0, "&"); - } - std::string ptessellation_state_struct = "NULL"; - if (structInfo->pTessellationState != NULL) { - ptessellation_state_struct = GenerateStruct_VkPipelineTessellationStateCreateInfo(out, - structInfo->pTessellationState, - metaInfo->pTessellationState->GetMetaStructPointer(), - consumer); - ptessellation_state_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stageCount << "," << std::endl; - struct_body << "\t\t\t" << pstages_array << "," << std::endl; - struct_body << "\t\t\t" << pvertex_input_state_struct << "," << std::endl; - struct_body << "\t\t\t" << ptessellation_state_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "graphicsShaderGroupCreateInfoNV"); - out << "\t\t" << "VkGraphicsShaderGroupCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->image) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageCaptureDescriptorDataInfoEXT"); + out << "\t\t" << "VkImageCaptureDescriptorDataInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkIndirectCommandsLayoutCreateInfoNV(std::ostream &out, const VkIndirectCommandsLayoutCreateInfoNV* structInfo, Decoded_VkIndirectCommandsLayoutCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageViewCaptureDescriptorDataInfoEXT(std::ostream &out, const VkImageViewCaptureDescriptorDataInfoEXT* structInfo, Decoded_VkImageViewCaptureDescriptorDataInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ptokens_array = "NULL"; - if (structInfo->pTokens != NULL) { - ptokens_array = "pTokens_" + std::to_string(consumer.GetNextId()); - std::string ptokens_names; - for (uint32_t idx = 0; idx < structInfo->tokenCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pTokens + idx != NULL) { - variable_name = GenerateStruct_VkIndirectCommandsLayoutTokenNV(out, - structInfo->pTokens + idx, - metaInfo->pTokens->GetMetaStructPointer() + idx, - consumer); - } - ptokens_names += variable_name + ", "; - } - out << "\t\t" << "VkIndirectCommandsLayoutTokenNV " << ptokens_array << "[] = {" << ptokens_names << "};" << std::endl; - } - std::string pstream_strides_array = "NULL"; - if (structInfo->pStreamStrides != NULL) { - pstream_strides_array = "pStreamStrides_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pstream_strides_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pStreamStrides, structInfo->streamCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkIndirectCommandsLayoutUsageFlagsNV(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineBindPoint(" << structInfo->pipelineBindPoint << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tokenCount << "," << std::endl; - struct_body << "\t\t\t" << ptokens_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->streamCount << "," << std::endl; - struct_body << "\t\t\t" << pstream_strides_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "indirectCommandsLayoutCreateInfoNV"); - out << "\t\t" << "VkIndirectCommandsLayoutCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->imageView) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageViewCaptureDescriptorDataInfoEXT"); + out << "\t\t" << "VkImageViewCaptureDescriptorDataInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkIndirectCommandsLayoutTokenNV(std::ostream &out, const VkIndirectCommandsLayoutTokenNV* structInfo, Decoded_VkIndirectCommandsLayoutTokenNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkOpaqueCaptureDescriptorDataCreateInfoEXT(std::ostream &out, const VkOpaqueCaptureDescriptorDataCreateInfoEXT* structInfo, Decoded_VkOpaqueCaptureDescriptorDataCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pindex_types_values; - std::string pindex_types_array = "NULL"; - if (structInfo->pIndexTypes != NULL) { - for (uint32_t idx = 0; idx < structInfo->indexTypeCount; idx++) { - pindex_types_values += util::ToString(structInfo->pIndexTypes[idx]) + ", "; - } - pindex_types_array = "pIndexTypes_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkIndexType " << pindex_types_array << "[] = {" << pindex_types_values << "};" << std::endl; - } - std::string pindex_type_values_array = "NULL"; - if (structInfo->pIndexTypeValues != NULL) { - pindex_type_values_array = "pIndexTypeValues_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint32_t " << pindex_type_values_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pIndexTypeValues, structInfo->indexTypeCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkIndirectCommandsTokenTypeNV(" << structInfo->tokenType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stream << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexBindingUnit << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexDynamicStride << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pushconstantPipelineLayout) << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->pushconstantShaderStageFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pushconstantOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pushconstantSize << "," << std::endl; - struct_body << "\t\t\t" << "VkIndirectStateFlagsNV(" << structInfo->indirectStateFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indexTypeCount << "," << std::endl; - struct_body << "\t\t\t" << pindex_types_array << "," << std::endl; - struct_body << "\t\t\t" << pindex_type_values_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "indirectCommandsLayoutTokenNV"); - out << "\t\t" << "VkIndirectCommandsLayoutTokenNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->opaqueCaptureDescriptorData << ","; + std::string variable_name = consumer.AddStruct(struct_body, "opaqueCaptureDescriptorDataCreateInfoEXT"); + out << "\t\t" << "VkOpaqueCaptureDescriptorDataCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkIndirectCommandsStreamNV(std::ostream &out, const VkIndirectCommandsStreamNV* structInfo, Decoded_VkIndirectCommandsStreamNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT(std::ostream &out, const VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "indirectCommandsStreamNV"); - out << "\t\t" << "VkIndirectCommandsStreamNV " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->combinedImageSamplerDensityMapDescriptorSize << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDescriptorBufferDensityMapPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(std::ostream &out, const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* structInfo, Decoded_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDescriptorBufferFeaturesEXT(std::ostream &out, const VkPhysicalDeviceDescriptorBufferFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceDescriptorBufferFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceGeneratedCommands << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDeviceGeneratedCommandsFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBuffer << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBufferCaptureReplay << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBufferImageLayoutIgnored << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBufferPushDescriptors << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDescriptorBufferFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceDescriptorBufferFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(std::ostream &out, const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* structInfo, Decoded_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDescriptorBufferPropertiesEXT(std::ostream &out, const VkPhysicalDeviceDescriptorBufferPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceDescriptorBufferPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxGraphicsShaderGroupCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxIndirectSequenceCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxIndirectCommandsTokenCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxIndirectCommandsStreamCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxIndirectCommandsTokenOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxIndirectCommandsStreamStride << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minSequencesCountBufferOffsetAlignment << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minSequencesIndexBufferOffsetAlignment << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minIndirectCommandsBufferOffsetAlignment << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDeviceGeneratedCommandsPropertiesNV"); - out << "\t\t" << "VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->combinedImageSamplerDescriptorSingleArray << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferlessPushDescriptors << "," << std::endl; + struct_body << "\t\t\t" << structInfo->allowSamplerImageViewPostSubmitCreation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBufferOffsetAlignment << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorBufferBindings << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxResourceDescriptorBufferBindings << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSamplerDescriptorBufferBindings << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxEmbeddedImmutableSamplerBindings << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxEmbeddedImmutableSamplers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferCaptureReplayDescriptorDataSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imageCaptureReplayDescriptorDataSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imageViewCaptureReplayDescriptorDataSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->samplerCaptureReplayDescriptorDataSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->accelerationStructureCaptureReplayDescriptorDataSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->samplerDescriptorSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->combinedImageSamplerDescriptorSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sampledImageDescriptorSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->storageImageDescriptorSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->uniformTexelBufferDescriptorSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->robustUniformTexelBufferDescriptorSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->storageTexelBufferDescriptorSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->robustStorageTexelBufferDescriptorSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->uniformBufferDescriptorSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->robustUniformBufferDescriptorSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->storageBufferDescriptorSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->robustStorageBufferDescriptorSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->inputAttachmentDescriptorSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->accelerationStructureDescriptorSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSamplerDescriptorBufferRange << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxResourceDescriptorBufferRange << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->samplerDescriptorBufferAddressSpaceSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->resourceDescriptorBufferAddressSpaceSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorBufferAddressSpaceSize << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDescriptorBufferPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceDescriptorBufferPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSetStateFlagsIndirectCommandNV(std::ostream &out, const VkSetStateFlagsIndirectCommandNV* structInfo, Decoded_VkSetStateFlagsIndirectCommandNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSamplerCaptureDescriptorDataInfoEXT(std::ostream &out, const VkSamplerCaptureDescriptorDataInfoEXT* structInfo, Decoded_VkSamplerCaptureDescriptorDataInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->data << ","; - std::string variable_name = consumer.AddStruct(struct_body, "setStateFlagsIndirectCommandNV"); - out << "\t\t" << "VkSetStateFlagsIndirectCommandNV " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->sampler) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "samplerCaptureDescriptorDataInfoEXT"); + out << "\t\t" << "VkSamplerCaptureDescriptorDataInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCommandBufferInheritanceViewportScissorInfoNV(std::ostream &out, const VkCommandBufferInheritanceViewportScissorInfoNV* structInfo, Decoded_VkCommandBufferInheritanceViewportScissorInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkGraphicsPipelineLibraryCreateInfoEXT(std::ostream &out, const VkGraphicsPipelineLibraryCreateInfoEXT* structInfo, Decoded_VkGraphicsPipelineLibraryCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pviewport_depths_struct = "NULL"; - if (structInfo->pViewportDepths != NULL) { - pviewport_depths_struct = GenerateStruct_VkViewport(out, - structInfo->pViewportDepths, - metaInfo->pViewportDepths->GetMetaStructPointer(), - consumer); - pviewport_depths_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewportScissor2D << "," << std::endl; - struct_body << "\t\t\t" << structInfo->viewportDepthCount << "," << std::endl; - struct_body << "\t\t\t" << pviewport_depths_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "commandBufferInheritanceViewportScissorInfoNV"); - out << "\t\t" << "VkCommandBufferInheritanceViewportScissorInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkGraphicsPipelineLibraryFlagsEXT(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "graphicsPipelineLibraryCreateInfoEXT"); + out << "\t\t" << "VkGraphicsPipelineLibraryCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceInheritedViewportScissorFeaturesNV(std::ostream &out, const VkPhysicalDeviceInheritedViewportScissorFeaturesNV* structInfo, Decoded_VkPhysicalDeviceInheritedViewportScissorFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(std::ostream &out, const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->inheritedViewportScissor2D << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceInheritedViewportScissorFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceInheritedViewportScissorFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->graphicsPipelineLibrary << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceGraphicsPipelineLibraryFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(std::ostream &out, const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(std::ostream &out, const VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->texelBufferAlignment << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTexelBufferAlignmentFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->graphicsPipelineLibraryFastLinking << "," << std::endl; + struct_body << "\t\t\t" << structInfo->graphicsPipelineLibraryIndependentInterpolationDecoration << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceGraphicsPipelineLibraryPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(std::ostream &out, const VkCommandBufferInheritanceRenderPassTransformInfoQCOM* structInfo, Decoded_VkCommandBufferInheritanceRenderPassTransformInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD(std::ostream &out, const VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD* structInfo, Decoded_VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string render_area_info_var = GenerateStruct_VkRect2D(out, - &structInfo->renderArea, - metaInfo->renderArea, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSurfaceTransformFlagBitsKHR(" << structInfo->transform << ")" << "," << std::endl; - struct_body << "\t\t\t" << render_area_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "commandBufferInheritanceRenderPassTransformInfoQCOM"); - out << "\t\t" << "VkCommandBufferInheritanceRenderPassTransformInfoQCOM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderEarlyAndLateFragmentTests << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD"); + out << "\t\t" << "VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassTransformBeginInfoQCOM(std::ostream &out, const VkRenderPassTransformBeginInfoQCOM* structInfo, Decoded_VkRenderPassTransformBeginInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(std::ostream &out, const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* structInfo, Decoded_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSurfaceTransformFlagBitsKHR(" << structInfo->transform << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassTransformBeginInfoQCOM"); - out << "\t\t" << "VkRenderPassTransformBeginInfoQCOM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentShadingRateEnums << "," << std::endl; + struct_body << "\t\t\t" << structInfo->supersampleFragmentShadingRates << "," << std::endl; + struct_body << "\t\t\t" << structInfo->noInvocationFragmentShadingRates << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShadingRateEnumsFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDepthBiasInfoEXT(std::ostream &out, const VkDepthBiasInfoEXT* structInfo, Decoded_VkDepthBiasInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(std::ostream &out, const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* structInfo, Decoded_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthBiasConstantFactor << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthBiasClamp << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthBiasSlopeFactor << ","; - std::string variable_name = consumer.AddStruct(struct_body, "depthBiasInfoEXT"); - out << "\t\t" << "VkDepthBiasInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->maxFragmentShadingRateInvocationCount << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShadingRateEnumsPropertiesNV"); + out << "\t\t" << "VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDepthBiasRepresentationInfoEXT(std::ostream &out, const VkDepthBiasRepresentationInfoEXT* structInfo, Decoded_VkDepthBiasRepresentationInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(std::ostream &out, const VkPipelineFragmentShadingRateEnumStateCreateInfoNV* structInfo, Decoded_VkPipelineFragmentShadingRateEnumStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDepthBiasRepresentationEXT(" << structInfo->depthBiasRepresentation << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthBiasExact << ","; - std::string variable_name = consumer.AddStruct(struct_body, "depthBiasRepresentationInfoEXT"); - out << "\t\t" << "VkDepthBiasRepresentationInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFragmentShadingRateTypeNV(" << structInfo->shadingRateType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFragmentShadingRateNV(" << structInfo->shadingRate << ")" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->combinerOps[0]), 2) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineFragmentShadingRateEnumStateCreateInfoNV"); + out << "\t\t" << "VkPipelineFragmentShadingRateEnumStateCreateInfoNV " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkAccelerationStructureGeometryMotionTrianglesDataNV(std::ostream &out, const VkAccelerationStructureGeometryMotionTrianglesDataNV* structInfo, Decoded_VkAccelerationStructureGeometryMotionTrianglesDataNV* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexData.deviceAddress << ","; + std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureGeometryMotionTrianglesDataNV"); + out << "\t\t" << "VkAccelerationStructureGeometryMotionTrianglesDataNV " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkAccelerationStructureMatrixMotionInstanceNV(std::ostream &out, const VkAccelerationStructureMatrixMotionInstanceNV* structInfo, Decoded_VkAccelerationStructureMatrixMotionInstanceNV* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string transform_t0_info_var = GenerateStruct_VkTransformMatrixKHR(out, + &structInfo->transformT0, + metaInfo->transformT0, + consumer); + std::string transform_t1_info_var = GenerateStruct_VkTransformMatrixKHR(out, + &structInfo->transformT1, + metaInfo->transformT1, + consumer); + struct_body << "\t" << transform_t0_info_var << "," << std::endl; + struct_body << "\t\t\t" << transform_t1_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->instanceCustomIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->mask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->instanceShaderBindingTableRecordOffset << "," << std::endl; + struct_body << "\t\t\t" << "VkGeometryInstanceFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->accelerationStructureReference << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureMatrixMotionInstanceNV"); + out << "\t\t" << "VkAccelerationStructureMatrixMotionInstanceNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDepthBiasControlFeaturesEXT(std::ostream &out, const VkPhysicalDeviceDepthBiasControlFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceDepthBiasControlFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAccelerationStructureMotionInfoNV(std::ostream &out, const VkAccelerationStructureMotionInfoNV* structInfo, Decoded_VkAccelerationStructureMotionInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthBiasControl << "," << std::endl; - struct_body << "\t\t\t" << structInfo->leastRepresentableValueForceUnormRepresentation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->floatRepresentation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthBiasExact << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDepthBiasControlFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceDepthBiasControlFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxInstances << "," << std::endl; + struct_body << "\t\t\t" << "VkAccelerationStructureMotionInfoFlagsNV(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureMotionInfoNV"); + out << "\t\t" << "VkAccelerationStructureMotionInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceDeviceMemoryReportCreateInfoEXT(std::ostream &out, const VkDeviceDeviceMemoryReportCreateInfoEXT* structInfo, Decoded_VkDeviceDeviceMemoryReportCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAccelerationStructureSRTMotionInstanceNV(std::ostream &out, const VkAccelerationStructureSRTMotionInstanceNV* structInfo, Decoded_VkAccelerationStructureSRTMotionInstanceNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDeviceMemoryReportFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pfnUserCallback << "," << std::endl; - out << "\t\t" << "// TODO: Support pUserData (non-struct output) argument." << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "deviceDeviceMemoryReportCreateInfoEXT"); - out << "\t\t" << "VkDeviceDeviceMemoryReportCreateInfoEXT " << variable_name << " {" << std::endl; + std::string transform_t0_info_var = GenerateStruct_VkSRTDataNV(out, + &structInfo->transformT0, + metaInfo->transformT0, + consumer); + std::string transform_t1_info_var = GenerateStruct_VkSRTDataNV(out, + &structInfo->transformT1, + metaInfo->transformT1, + consumer); + struct_body << "\t" << transform_t0_info_var << "," << std::endl; + struct_body << "\t\t\t" << transform_t1_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->instanceCustomIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->mask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->instanceShaderBindingTableRecordOffset << "," << std::endl; + struct_body << "\t\t\t" << "VkGeometryInstanceFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->accelerationStructureReference << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureSRTMotionInstanceNV"); + out << "\t\t" << "VkAccelerationStructureSRTMotionInstanceNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceMemoryReportCallbackDataEXT(std::ostream &out, const VkDeviceMemoryReportCallbackDataEXT* structInfo, Decoded_VkDeviceMemoryReportCallbackDataEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRayTracingMotionBlurFeaturesNV(std::ostream &out, const VkPhysicalDeviceRayTracingMotionBlurFeaturesNV* structInfo, Decoded_VkPhysicalDeviceRayTracingMotionBlurFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDeviceMemoryReportFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkDeviceMemoryReportEventTypeEXT(" << structInfo->type << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryObjectId << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkObjectType(" << structInfo->objectType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->objectHandle << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->heapIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceMemoryReportCallbackDataEXT"); - out << "\t\t" << "VkDeviceMemoryReportCallbackDataEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->rayTracingMotionBlur << "," << std::endl; + struct_body << "\t\t\t" << structInfo->rayTracingMotionBlurPipelineTraceRaysIndirect << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingMotionBlurFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceRayTracingMotionBlurFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(std::ostream &out, const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSRTDataNV(std::ostream &out, const VkSRTDataNV* structInfo, Decoded_VkSRTDataNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceMemoryReport << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDeviceMemoryReportFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceDeviceMemoryReportFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->sx << "," << std::endl; + struct_body << "\t\t\t" << structInfo->a << "," << std::endl; + struct_body << "\t\t\t" << structInfo->b << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pvx << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sy << "," << std::endl; + struct_body << "\t\t\t" << structInfo->c << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pvy << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sz << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pvz << "," << std::endl; + struct_body << "\t\t\t" << structInfo->qx << "," << std::endl; + struct_body << "\t\t\t" << structInfo->qy << "," << std::endl; + struct_body << "\t\t\t" << structInfo->qz << "," << std::endl; + struct_body << "\t\t\t" << structInfo->qw << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tx << "," << std::endl; + struct_body << "\t\t\t" << structInfo->ty << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tz << ","; + std::string variable_name = consumer.AddStruct(struct_body, "sRTDataNV"); + out << "\t\t" << "VkSRTDataNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceCustomBorderColorFeaturesEXT(std::ostream &out, const VkPhysicalDeviceCustomBorderColorFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceCustomBorderColorFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT(std::ostream &out, const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->customBorderColors << "," << std::endl; - struct_body << "\t\t\t" << structInfo->customBorderColorWithoutFormat << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCustomBorderColorFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceCustomBorderColorFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->ycbcr2plane444Formats << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceYcbcr2Plane444FormatsFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceCustomBorderColorPropertiesEXT(std::ostream &out, const VkPhysicalDeviceCustomBorderColorPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceCustomBorderColorPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(std::ostream &out, const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* structInfo, Decoded_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxCustomBorderColorSamplers << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCustomBorderColorPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceCustomBorderColorPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentDensityMapDeferred << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentDensityMap2FeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceFragmentDensityMap2FeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSamplerCustomBorderColorCreateInfoEXT(std::ostream &out, const VkSamplerCustomBorderColorCreateInfoEXT* structInfo, Decoded_VkSamplerCustomBorderColorCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(std::ostream &out, const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* structInfo, Decoded_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(structInfo->customBorderColor) << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "samplerCustomBorderColorCreateInfoEXT"); - out << "\t\t" << "VkSamplerCustomBorderColorCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->subsampledLoads << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subsampledCoarseReconstructionEarlyAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxSubsampledArrayLayers << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDescriptorSetSubsampledSamplers << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentDensityMap2PropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceFragmentDensityMap2PropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePresentBarrierFeaturesNV(std::ostream &out, const VkPhysicalDevicePresentBarrierFeaturesNV* structInfo, Decoded_VkPhysicalDevicePresentBarrierFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCopyCommandTransformInfoQCOM(std::ostream &out, const VkCopyCommandTransformInfoQCOM* structInfo, Decoded_VkCopyCommandTransformInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentBarrier << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePresentBarrierFeaturesNV"); - out << "\t\t" << "VkPhysicalDevicePresentBarrierFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkSurfaceTransformFlagBitsKHR(" << structInfo->transform << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "copyCommandTransformInfoQCOM"); + out << "\t\t" << "VkCopyCommandTransformInfoQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSurfaceCapabilitiesPresentBarrierNV(std::ostream &out, const VkSurfaceCapabilitiesPresentBarrierNV* structInfo, Decoded_VkSurfaceCapabilitiesPresentBarrierNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageCompressionControlEXT(std::ostream &out, const VkImageCompressionControlEXT* structInfo, Decoded_VkImageCompressionControlEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pfixed_rate_flags_array = "NULL"; + if (structInfo->pFixedRateFlags != NULL) { + std::string pfixed_rate_flags_values; + for (uint32_t idx = 0; idx < structInfo->compressionControlPlaneCount; idx++) { + pfixed_rate_flags_values += util::ToString(structInfo->pFixedRateFlags[idx]) + ", "; + } + pfixed_rate_flags_array = "pFixedRateFlags_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkImageCompressionFixedRateFlagsEXT " << pfixed_rate_flags_array << "[] = {" << pfixed_rate_flags_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentBarrierSupported << ","; - std::string variable_name = consumer.AddStruct(struct_body, "surfaceCapabilitiesPresentBarrierNV"); - out << "\t\t" << "VkSurfaceCapabilitiesPresentBarrierNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkImageCompressionFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->compressionControlPlaneCount << "," << std::endl; + struct_body << "\t\t\t" << pfixed_rate_flags_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageCompressionControlEXT"); + out << "\t\t" << "VkImageCompressionControlEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSwapchainPresentBarrierCreateInfoNV(std::ostream &out, const VkSwapchainPresentBarrierCreateInfoNV* structInfo, Decoded_VkSwapchainPresentBarrierCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageCompressionPropertiesEXT(std::ostream &out, const VkImageCompressionPropertiesEXT* structInfo, Decoded_VkImageCompressionPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentBarrierEnable << ","; - std::string variable_name = consumer.AddStruct(struct_body, "swapchainPresentBarrierCreateInfoNV"); - out << "\t\t" << "VkSwapchainPresentBarrierCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkImageCompressionFlagsEXT(" << structInfo->imageCompressionFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageCompressionFixedRateFlagsEXT(" << structInfo->imageCompressionFixedRateFlags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageCompressionPropertiesEXT"); + out << "\t\t" << "VkImageCompressionPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceDiagnosticsConfigCreateInfoNV(std::ostream &out, const VkDeviceDiagnosticsConfigCreateInfoNV* structInfo, Decoded_VkDeviceDiagnosticsConfigCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceImageCompressionControlFeaturesEXT(std::ostream &out, const VkPhysicalDeviceImageCompressionControlFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceImageCompressionControlFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDeviceDiagnosticsConfigFlagsNV(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceDiagnosticsConfigCreateInfoNV"); - out << "\t\t" << "VkDeviceDiagnosticsConfigCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->imageCompressionControl << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageCompressionControlFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceImageCompressionControlFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(std::ostream &out, const VkPhysicalDeviceDiagnosticsConfigFeaturesNV* structInfo, Decoded_VkPhysicalDeviceDiagnosticsConfigFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT(std::ostream &out, const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->diagnosticsConfig << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDiagnosticsConfigFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceDiagnosticsConfigFeaturesNV " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkDispatchTileInfoQCOM(std::ostream &out, const VkDispatchTileInfoQCOM* structInfo, Decoded_VkDispatchTileInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << ","; - std::string variable_name = consumer.AddStruct(struct_body, "dispatchTileInfoQCOM"); - out << "\t\t" << "VkDispatchTileInfoQCOM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->attachmentFeedbackLoopLayout << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPerTileBeginInfoQCOM(std::ostream &out, const VkPerTileBeginInfoQCOM* structInfo, Decoded_VkPerTileBeginInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevice4444FormatsFeaturesEXT(std::ostream &out, const VkPhysicalDevice4444FormatsFeaturesEXT* structInfo, Decoded_VkPhysicalDevice4444FormatsFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << ","; - std::string variable_name = consumer.AddStruct(struct_body, "perTileBeginInfoQCOM"); - out << "\t\t" << "VkPerTileBeginInfoQCOM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->formatA4R4G4B4 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->formatA4B4G4R4 << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevice4444FormatsFeaturesEXT"); + out << "\t\t" << "VkPhysicalDevice4444FormatsFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPerTileEndInfoQCOM(std::ostream &out, const VkPerTileEndInfoQCOM* structInfo, Decoded_VkPerTileEndInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceFaultAddressInfoEXT(std::ostream &out, const VkDeviceFaultAddressInfoEXT* structInfo, Decoded_VkDeviceFaultAddressInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << ","; - std::string variable_name = consumer.AddStruct(struct_body, "perTileEndInfoQCOM"); - out << "\t\t" << "VkPerTileEndInfoQCOM " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkDeviceFaultAddressTypeEXT(" << structInfo->addressType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->reportedAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->addressPrecision << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceFaultAddressInfoEXT"); + out << "\t\t" << "VkDeviceFaultAddressInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceTileShadingFeaturesQCOM(std::ostream &out, const VkPhysicalDeviceTileShadingFeaturesQCOM* structInfo, Decoded_VkPhysicalDeviceTileShadingFeaturesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceFaultCountsEXT(std::ostream &out, const VkDeviceFaultCountsEXT* structInfo, Decoded_VkDeviceFaultCountsEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileShading << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileShadingFragmentStage << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileShadingColorAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileShadingDepthAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileShadingStencilAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileShadingInputAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileShadingSampledAttachments << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileShadingPerTileDraw << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileShadingPerTileDispatch << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileShadingDispatchTile << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileShadingApron << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileShadingAnisotropicApron << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileShadingAtomicOps << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileShadingImageProcessing << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTileShadingFeaturesQCOM"); - out << "\t\t" << "VkPhysicalDeviceTileShadingFeaturesQCOM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->addressInfoCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vendorInfoCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vendorBinarySize << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceFaultCountsEXT"); + out << "\t\t" << "VkDeviceFaultCountsEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceTileShadingPropertiesQCOM(std::ostream &out, const VkPhysicalDeviceTileShadingPropertiesQCOM* structInfo, Decoded_VkPhysicalDeviceTileShadingPropertiesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceFaultInfoEXT(std::ostream &out, const VkDeviceFaultInfoEXT* structInfo, Decoded_VkDeviceFaultInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string tile_granularity_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->tileGranularity, - metaInfo->tileGranularity, - consumer); - std::string max_tile_shading_rate_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxTileShadingRate, - metaInfo->maxTileShadingRate, - consumer); + std::string paddress_infos_name = "NULL"; + if (structInfo->pAddressInfos != NULL) { + paddress_infos_name = GenerateStruct_VkDeviceFaultAddressInfoEXT(out, + structInfo->pAddressInfos, + metaInfo->pAddressInfos->GetMetaStructPointer(), + consumer); + paddress_infos_name.insert(0, "&"); + } + std::string pvendor_infos_name = "NULL"; + if (structInfo->pVendorInfos != NULL) { + pvendor_infos_name = GenerateStruct_VkDeviceFaultVendorInfoEXT(out, + structInfo->pVendorInfos, + metaInfo->pVendorInfos->GetMetaStructPointer(), + consumer); + pvendor_infos_name.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxApronSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->preferNonCoherent << "," << std::endl; - struct_body << "\t\t\t" << tile_granularity_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_tile_shading_rate_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTileShadingPropertiesQCOM"); - out << "\t\t" << "VkPhysicalDeviceTileShadingPropertiesQCOM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << "," << std::endl; + struct_body << "\t\t\t" << paddress_infos_name << "," << std::endl; + struct_body << "\t\t\t" << pvendor_infos_name << "," << std::endl; + out << "\t\t" << "// TODO: Support pVendorBinaryData (non-struct output) argument." << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "deviceFaultInfoEXT"); + out << "\t\t" << "VkDeviceFaultInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassTileShadingCreateInfoQCOM(std::ostream &out, const VkRenderPassTileShadingCreateInfoQCOM* structInfo, Decoded_VkRenderPassTileShadingCreateInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceFaultVendorBinaryHeaderVersionOneEXT(std::ostream &out, const VkDeviceFaultVendorBinaryHeaderVersionOneEXT* structInfo, Decoded_VkDeviceFaultVendorBinaryHeaderVersionOneEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string tile_apron_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->tileApronSize, - metaInfo->tileApronSize, - consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkTileShadingRenderPassFlagsQCOM(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << tile_apron_size_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassTileShadingCreateInfoQCOM"); - out << "\t\t" << "VkRenderPassTileShadingCreateInfoQCOM " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->headerSize << "," << std::endl; + struct_body << "\t\t\t" << "VkDeviceFaultVendorBinaryHeaderVersionEXT(" << structInfo->headerVersion << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vendorID << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceID << "," << std::endl; + struct_body << "\t\t\t" << structInfo->driverVersion << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->pipelineCacheUUID[0]), VK_UUID_SIZE) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->applicationNameOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->applicationVersion << "," << std::endl; + struct_body << "\t\t\t" << structInfo->engineNameOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->engineVersion << "," << std::endl; + struct_body << "\t\t\t" << structInfo->apiVersion << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceFaultVendorBinaryHeaderVersionOneEXT"); + out << "\t\t" << "VkDeviceFaultVendorBinaryHeaderVersionOneEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkQueryLowLatencySupportNV(std::ostream &out, const VkQueryLowLatencySupportNV* structInfo, Decoded_VkQueryLowLatencySupportNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceFaultVendorInfoEXT(std::ostream &out, const VkDeviceFaultVendorInfoEXT* structInfo, Decoded_VkDeviceFaultVendorInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - out << "\t\t" << "// TODO: Support pQueriedLowLatencyData (non-struct output) argument." << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "queryLowLatencySupportNV"); - out << "\t\t" << "VkQueryLowLatencySupportNV " << variable_name << " {" << std::endl; + struct_body << "\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vendorFaultCode << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vendorFaultData << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceFaultVendorInfoEXT"); + out << "\t\t" << "VkDeviceFaultVendorInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkGraphicsPipelineLibraryCreateInfoEXT(std::ostream &out, const VkGraphicsPipelineLibraryCreateInfoEXT* structInfo, Decoded_VkGraphicsPipelineLibraryCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFaultFeaturesEXT(std::ostream &out, const VkPhysicalDeviceFaultFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceFaultFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkGraphicsPipelineLibraryFlagsEXT(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "graphicsPipelineLibraryCreateInfoEXT"); - out << "\t\t" << "VkGraphicsPipelineLibraryCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->deviceFault << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceFaultVendorBinary << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFaultFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceFaultFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(std::ostream &out, const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT(std::ostream &out, const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->graphicsPipelineLibrary << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceGraphicsPipelineLibraryFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->rasterizationOrderColorAttachmentAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->rasterizationOrderDepthAttachmentAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->rasterizationOrderStencilAttachmentAccess << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT(std::ostream &out, const VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT(std::ostream &out, const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->graphicsPipelineLibraryFastLinking << "," << std::endl; - struct_body << "\t\t\t" << structInfo->graphicsPipelineLibraryIndependentInterpolationDecoration << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceGraphicsPipelineLibraryPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->formatRgba10x6WithoutYCbCrSampler << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRGBA10X6FormatsFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD(std::ostream &out, const VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD* structInfo, Decoded_VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDirectFBSurfaceCreateInfoEXT(std::ostream &out, const VkDirectFBSurfaceCreateInfoEXT* structInfo, Decoded_VkDirectFBSurfaceCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderEarlyAndLateFragmentTests << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD"); - out << "\t\t" << "VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDirectFBSurfaceCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->dfb << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->surface << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "directFBSurfaceCreateInfoEXT"); + out << "\t\t" << "VkDirectFBSurfaceCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(std::ostream &out, const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* structInfo, Decoded_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMutableDescriptorTypeCreateInfoEXT(std::ostream &out, const VkMutableDescriptorTypeCreateInfoEXT* structInfo, Decoded_VkMutableDescriptorTypeCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pmutable_descriptor_type_lists_array = "NULL"; + if (structInfo->pMutableDescriptorTypeLists != NULL) { + pmutable_descriptor_type_lists_array = "pMutableDescriptorTypeLists_" + std::to_string(consumer.GetNextId()); + std::string pmutable_descriptor_type_lists_names; + for (uint32_t idx = 0; idx < structInfo->mutableDescriptorTypeListCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pMutableDescriptorTypeLists + idx != NULL) { + variable_name = GenerateStruct_VkMutableDescriptorTypeListEXT(out, + structInfo->pMutableDescriptorTypeLists + idx, + metaInfo->pMutableDescriptorTypeLists->GetMetaStructPointer() + idx, + consumer); + } + pmutable_descriptor_type_lists_names += variable_name + ", "; + } + out << "\t\t" << "VkMutableDescriptorTypeListEXT " << pmutable_descriptor_type_lists_array << "[] = {" << pmutable_descriptor_type_lists_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentShadingRateEnums << "," << std::endl; - struct_body << "\t\t\t" << structInfo->supersampleFragmentShadingRates << "," << std::endl; - struct_body << "\t\t\t" << structInfo->noInvocationFragmentShadingRates << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShadingRateEnumsFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->mutableDescriptorTypeListCount << "," << std::endl; + struct_body << "\t\t\t" << pmutable_descriptor_type_lists_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "mutableDescriptorTypeCreateInfoEXT"); + out << "\t\t" << "VkMutableDescriptorTypeCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(std::ostream &out, const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* structInfo, Decoded_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMutableDescriptorTypeListEXT(std::ostream &out, const VkMutableDescriptorTypeListEXT* structInfo, Decoded_VkMutableDescriptorTypeListEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->maxFragmentShadingRateInvocationCount << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentShadingRateEnumsPropertiesNV"); - out << "\t\t" << "VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV " << variable_name << " {" << std::endl; + std::string pdescriptor_types_values; + std::string pdescriptor_types_array = "NULL"; + if (structInfo->pDescriptorTypes != NULL) { + for (uint32_t idx = 0; idx < structInfo->descriptorTypeCount; idx++) { + pdescriptor_types_values += util::ToString(structInfo->pDescriptorTypes[idx]) + ", "; + } + pdescriptor_types_array = "pDescriptorTypes_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkDescriptorType " << pdescriptor_types_array << "[] = {" << pdescriptor_types_values << "};" << std::endl; + } + struct_body << "\t" << structInfo->descriptorTypeCount << "," << std::endl; + struct_body << "\t\t\t" << pdescriptor_types_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "mutableDescriptorTypeListEXT"); + out << "\t\t" << "VkMutableDescriptorTypeListEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(std::ostream &out, const VkPipelineFragmentShadingRateEnumStateCreateInfoNV* structInfo, Decoded_VkPipelineFragmentShadingRateEnumStateCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT(std::ostream &out, const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFragmentShadingRateTypeNV(" << structInfo->shadingRateType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFragmentShadingRateNV(" << structInfo->shadingRate << ")" << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->combinerOps[0]), 2) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineFragmentShadingRateEnumStateCreateInfoNV"); - out << "\t\t" << "VkPipelineFragmentShadingRateEnumStateCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->mutableDescriptorType << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMutableDescriptorTypeFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAccelerationStructureGeometryMotionTrianglesDataNV(std::ostream &out, const VkAccelerationStructureGeometryMotionTrianglesDataNV* structInfo, Decoded_VkAccelerationStructureGeometryMotionTrianglesDataNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT(std::ostream &out, const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexData.deviceAddress << ","; - std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureGeometryMotionTrianglesDataNV"); - out << "\t\t" << "VkAccelerationStructureGeometryMotionTrianglesDataNV " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkAccelerationStructureMatrixMotionInstanceNV(std::ostream &out, const VkAccelerationStructureMatrixMotionInstanceNV* structInfo, Decoded_VkAccelerationStructureMatrixMotionInstanceNV* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - std::string transform_t0_info_var = GenerateStruct_VkTransformMatrixKHR(out, - &structInfo->transformT0, - metaInfo->transformT0, - consumer); - std::string transform_t1_info_var = GenerateStruct_VkTransformMatrixKHR(out, - &structInfo->transformT1, - metaInfo->transformT1, - consumer); - struct_body << "\t" << transform_t0_info_var << "," << std::endl; - struct_body << "\t\t\t" << transform_t1_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->instanceCustomIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->mask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->instanceShaderBindingTableRecordOffset << "," << std::endl; - struct_body << "\t\t\t" << "VkGeometryInstanceFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->accelerationStructureReference << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureMatrixMotionInstanceNV"); - out << "\t\t" << "VkAccelerationStructureMatrixMotionInstanceNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->vertexInputDynamicState << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVertexInputDynamicStateFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAccelerationStructureMotionInfoNV(std::ostream &out, const VkAccelerationStructureMotionInfoNV* structInfo, Decoded_VkAccelerationStructureMotionInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVertexInputAttributeDescription2EXT(std::ostream &out, const VkVertexInputAttributeDescription2EXT* structInfo, Decoded_VkVertexInputAttributeDescription2EXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxInstances << "," << std::endl; - struct_body << "\t\t\t" << "VkAccelerationStructureMotionInfoFlagsNV(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureMotionInfoNV"); - out << "\t\t" << "VkAccelerationStructureMotionInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->location << "," << std::endl; + struct_body << "\t\t\t" << structInfo->binding << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << ","; + std::string variable_name = consumer.AddStruct(struct_body, "vertexInputAttributeDescription2EXT"); + out << "\t\t" << "VkVertexInputAttributeDescription2EXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAccelerationStructureSRTMotionInstanceNV(std::ostream &out, const VkAccelerationStructureSRTMotionInstanceNV* structInfo, Decoded_VkAccelerationStructureSRTMotionInstanceNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVertexInputBindingDescription2EXT(std::ostream &out, const VkVertexInputBindingDescription2EXT* structInfo, Decoded_VkVertexInputBindingDescription2EXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string transform_t0_info_var = GenerateStruct_VkSRTDataNV(out, - &structInfo->transformT0, - metaInfo->transformT0, - consumer); - std::string transform_t1_info_var = GenerateStruct_VkSRTDataNV(out, - &structInfo->transformT1, - metaInfo->transformT1, - consumer); - struct_body << "\t" << transform_t0_info_var << "," << std::endl; - struct_body << "\t\t\t" << transform_t1_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->instanceCustomIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->mask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->instanceShaderBindingTableRecordOffset << "," << std::endl; - struct_body << "\t\t\t" << "VkGeometryInstanceFlagsKHR(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->accelerationStructureReference << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureSRTMotionInstanceNV"); - out << "\t\t" << "VkAccelerationStructureSRTMotionInstanceNV " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->binding << "," << std::endl; + struct_body << "\t\t\t" << structInfo->stride << "," << std::endl; + struct_body << "\t\t\t" << "VkVertexInputRate(" << structInfo->inputRate << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->divisor << ","; + std::string variable_name = consumer.AddStruct(struct_body, "vertexInputBindingDescription2EXT"); + out << "\t\t" << "VkVertexInputBindingDescription2EXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRayTracingMotionBlurFeaturesNV(std::ostream &out, const VkPhysicalDeviceRayTracingMotionBlurFeaturesNV* structInfo, Decoded_VkPhysicalDeviceRayTracingMotionBlurFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDrmPropertiesEXT(std::ostream &out, const VkPhysicalDeviceDrmPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceDrmPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->rayTracingMotionBlur << "," << std::endl; - struct_body << "\t\t\t" << structInfo->rayTracingMotionBlurPipelineTraceRaysIndirect << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingMotionBlurFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceRayTracingMotionBlurFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->hasPrimary << "," << std::endl; + struct_body << "\t\t\t" << structInfo->hasRender << "," << std::endl; + struct_body << "\t\t\t" << structInfo->primaryMajor << "," << std::endl; + struct_body << "\t\t\t" << structInfo->primaryMinor << "," << std::endl; + struct_body << "\t\t\t" << structInfo->renderMajor << "," << std::endl; + struct_body << "\t\t\t" << structInfo->renderMinor << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDrmPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceDrmPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSRTDataNV(std::ostream &out, const VkSRTDataNV* structInfo, Decoded_VkSRTDataNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceAddressBindingCallbackDataEXT(std::ostream &out, const VkDeviceAddressBindingCallbackDataEXT* structInfo, Decoded_VkDeviceAddressBindingCallbackDataEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->sx << "," << std::endl; - struct_body << "\t\t\t" << structInfo->a << "," << std::endl; - struct_body << "\t\t\t" << structInfo->b << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pvx << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sy << "," << std::endl; - struct_body << "\t\t\t" << structInfo->c << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pvy << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sz << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pvz << "," << std::endl; - struct_body << "\t\t\t" << structInfo->qx << "," << std::endl; - struct_body << "\t\t\t" << structInfo->qy << "," << std::endl; - struct_body << "\t\t\t" << structInfo->qz << "," << std::endl; - struct_body << "\t\t\t" << structInfo->qw << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tx << "," << std::endl; - struct_body << "\t\t\t" << structInfo->ty << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tz << ","; - std::string variable_name = consumer.AddStruct(struct_body, "sRTDataNV"); - out << "\t\t" << "VkSRTDataNV " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkDeviceAddressBindingFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->baseAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkDeviceAddressBindingTypeEXT(" << structInfo->bindingType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceAddressBindingCallbackDataEXT"); + out << "\t\t" << "VkDeviceAddressBindingCallbackDataEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT(std::ostream &out, const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceAddressBindingReportFeaturesEXT(std::ostream &out, const VkPhysicalDeviceAddressBindingReportFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceAddressBindingReportFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->ycbcr2plane444Formats << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceYcbcr2Plane444FormatsFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->reportAddressBinding << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceAddressBindingReportFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceAddressBindingReportFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(std::ostream &out, const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* structInfo, Decoded_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDepthClipControlFeaturesEXT(std::ostream &out, const VkPhysicalDeviceDepthClipControlFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceDepthClipControlFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentDensityMapDeferred << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentDensityMap2FeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceFragmentDensityMap2FeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->depthClipControl << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDepthClipControlFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceDepthClipControlFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(std::ostream &out, const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* structInfo, Decoded_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineViewportDepthClipControlCreateInfoEXT(std::ostream &out, const VkPipelineViewportDepthClipControlCreateInfoEXT* structInfo, Decoded_VkPipelineViewportDepthClipControlCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subsampledLoads << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subsampledCoarseReconstructionEarlyAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxSubsampledArrayLayers << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDescriptorSetSubsampledSamplers << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentDensityMap2PropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceFragmentDensityMap2PropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->negativeOneToOne << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineViewportDepthClipControlCreateInfoEXT"); + out << "\t\t" << "VkPipelineViewportDepthClipControlCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCopyCommandTransformInfoQCOM(std::ostream &out, const VkCopyCommandTransformInfoQCOM* structInfo, Decoded_VkCopyCommandTransformInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT(std::ostream &out, const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* structInfo, Decoded_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkSurfaceTransformFlagBitsKHR(" << structInfo->transform << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "copyCommandTransformInfoQCOM"); - out << "\t\t" << "VkCopyCommandTransformInfoQCOM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->primitiveTopologyListRestart << "," << std::endl; + struct_body << "\t\t\t" << structInfo->primitiveTopologyPatchListRestart << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePrimitiveTopologyListRestartFeaturesEXT"); + out << "\t\t" << "VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageCompressionControlEXT(std::ostream &out, const VkImageCompressionControlEXT* structInfo, Decoded_VkImageCompressionControlEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImportMemoryZirconHandleInfoFUCHSIA(std::ostream &out, const VkImportMemoryZirconHandleInfoFUCHSIA* structInfo, Decoded_VkImportMemoryZirconHandleInfoFUCHSIA* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pfixed_rate_flags_array = "NULL"; - if (structInfo->pFixedRateFlags != NULL) { - std::string pfixed_rate_flags_values; - for (uint32_t idx = 0; idx < structInfo->compressionControlPlaneCount; idx++) { - pfixed_rate_flags_values += util::ToString(structInfo->pFixedRateFlags[idx]) + ", "; - } - pfixed_rate_flags_array = "pFixedRateFlags_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkImageCompressionFixedRateFlagsEXT " << pfixed_rate_flags_array << "[] = {" << pfixed_rate_flags_values << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImageCompressionFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->compressionControlPlaneCount << "," << std::endl; - struct_body << "\t\t\t" << pfixed_rate_flags_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageCompressionControlEXT"); - out << "\t\t" << "VkImageCompressionControlEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->handle << ","; + std::string variable_name = consumer.AddStruct(struct_body, "importMemoryZirconHandleInfoFUCHSIA"); + out << "\t\t" << "VkImportMemoryZirconHandleInfoFUCHSIA " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageCompressionPropertiesEXT(std::ostream &out, const VkImageCompressionPropertiesEXT* structInfo, Decoded_VkImageCompressionPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryGetZirconHandleInfoFUCHSIA(std::ostream &out, const VkMemoryGetZirconHandleInfoFUCHSIA* structInfo, Decoded_VkMemoryGetZirconHandleInfoFUCHSIA* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkImageCompressionFlagsEXT(" << structInfo->imageCompressionFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageCompressionFixedRateFlagsEXT(" << structInfo->imageCompressionFixedRateFlags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageCompressionPropertiesEXT"); - out << "\t\t" << "VkImageCompressionPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryGetZirconHandleInfoFUCHSIA"); + out << "\t\t" << "VkMemoryGetZirconHandleInfoFUCHSIA " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceImageCompressionControlFeaturesEXT(std::ostream &out, const VkPhysicalDeviceImageCompressionControlFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceImageCompressionControlFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryZirconHandlePropertiesFUCHSIA(std::ostream &out, const VkMemoryZirconHandlePropertiesFUCHSIA* structInfo, Decoded_VkMemoryZirconHandlePropertiesFUCHSIA* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageCompressionControl << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageCompressionControlFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceImageCompressionControlFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->memoryTypeBits << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryZirconHandlePropertiesFUCHSIA"); + out << "\t\t" << "VkMemoryZirconHandlePropertiesFUCHSIA " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT(std::ostream &out, const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImportSemaphoreZirconHandleInfoFUCHSIA(std::ostream &out, const VkImportSemaphoreZirconHandleInfoFUCHSIA* structInfo, Decoded_VkImportSemaphoreZirconHandleInfoFUCHSIA* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->attachmentFeedbackLoopLayout << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; + struct_body << "\t\t\t" << "VkSemaphoreImportFlags(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->zirconHandle << ","; + std::string variable_name = consumer.AddStruct(struct_body, "importSemaphoreZirconHandleInfoFUCHSIA"); + out << "\t\t" << "VkImportSemaphoreZirconHandleInfoFUCHSIA " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevice4444FormatsFeaturesEXT(std::ostream &out, const VkPhysicalDevice4444FormatsFeaturesEXT* structInfo, Decoded_VkPhysicalDevice4444FormatsFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSemaphoreGetZirconHandleInfoFUCHSIA(std::ostream &out, const VkSemaphoreGetZirconHandleInfoFUCHSIA* structInfo, Decoded_VkSemaphoreGetZirconHandleInfoFUCHSIA* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->formatA4R4G4B4 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->formatA4B4G4R4 << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevice4444FormatsFeaturesEXT"); - out << "\t\t" << "VkPhysicalDevice4444FormatsFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "semaphoreGetZirconHandleInfoFUCHSIA"); + out << "\t\t" << "VkSemaphoreGetZirconHandleInfoFUCHSIA " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceFaultAddressInfoEXT(std::ostream &out, const VkDeviceFaultAddressInfoEXT* structInfo, Decoded_VkDeviceFaultAddressInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceInvocationMaskFeaturesHUAWEI(std::ostream &out, const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI* structInfo, Decoded_VkPhysicalDeviceInvocationMaskFeaturesHUAWEI* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkDeviceFaultAddressTypeEXT(" << structInfo->addressType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reportedAddress << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->addressPrecision << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceFaultAddressInfoEXT"); - out << "\t\t" << "VkDeviceFaultAddressInfoEXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->invocationMask << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceInvocationMaskFeaturesHUAWEI"); + out << "\t\t" << "VkPhysicalDeviceInvocationMaskFeaturesHUAWEI " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceFaultCountsEXT(std::ostream &out, const VkDeviceFaultCountsEXT* structInfo, Decoded_VkDeviceFaultCountsEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMemoryGetRemoteAddressInfoNV(std::ostream &out, const VkMemoryGetRemoteAddressInfoNV* structInfo, Decoded_VkMemoryGetRemoteAddressInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->addressInfoCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vendorInfoCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vendorBinarySize << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceFaultCountsEXT"); - out << "\t\t" << "VkDeviceFaultCountsEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "memoryGetRemoteAddressInfoNV"); + out << "\t\t" << "VkMemoryGetRemoteAddressInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceFaultInfoEXT(std::ostream &out, const VkDeviceFaultInfoEXT* structInfo, Decoded_VkDeviceFaultInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExternalMemoryRDMAFeaturesNV(std::ostream &out, const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV* structInfo, Decoded_VkPhysicalDeviceExternalMemoryRDMAFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string paddress_infos_name = "NULL"; - if (structInfo->pAddressInfos != NULL) { - paddress_infos_name = GenerateStruct_VkDeviceFaultAddressInfoEXT(out, - structInfo->pAddressInfos, - metaInfo->pAddressInfos->GetMetaStructPointer(), - consumer); - paddress_infos_name.insert(0, "&"); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->externalMemoryRDMA << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalMemoryRDMAFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceExternalMemoryRDMAFeaturesNV " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkFrameBoundaryEXT(std::ostream &out, const VkFrameBoundaryEXT* structInfo, Decoded_VkFrameBoundaryEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pimages_array = "NULL"; + if (metaInfo->pImages.GetPointer() != NULL && structInfo->imageCount > 0) { + pimages_array = "pimages_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_IMAGE)); + std::string pimages_values = toStringJoin(metaInfo->pImages.GetPointer(), + metaInfo->pImages.GetPointer() + structInfo->imageCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->imageCount == 1) { + pimages_array = "&" + pimages_values; + } else if (structInfo->imageCount > 1) { + out << "\t\t" << "VkImage " << pimages_array << "[] = {" << pimages_values << "};" << std::endl; + } } - std::string pvendor_infos_name = "NULL"; - if (structInfo->pVendorInfos != NULL) { - pvendor_infos_name = GenerateStruct_VkDeviceFaultVendorInfoEXT(out, - structInfo->pVendorInfos, - metaInfo->pVendorInfos->GetMetaStructPointer(), - consumer); - pvendor_infos_name.insert(0, "&"); + std::string pbuffers_array = "NULL"; + if (metaInfo->pBuffers.GetPointer() != NULL && structInfo->bufferCount > 0) { + pbuffers_array = "pbuffers_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_BUFFER)); + std::string pbuffers_values = toStringJoin(metaInfo->pBuffers.GetPointer(), + metaInfo->pBuffers.GetPointer() + structInfo->bufferCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->bufferCount == 1) { + pbuffers_array = "&" + pbuffers_values; + } else if (structInfo->bufferCount > 1) { + out << "\t\t" << "VkBuffer " << pbuffers_array << "[] = {" << pbuffers_values << "};" << std::endl; + } + } + std::string ptag_array = "NULL"; + if (structInfo->pTag != NULL) { + std::string ptag_values; + for (uint32_t idx0 = 0; idx0 < structInfo->tagSize; ++idx0) { + ptag_values += std::to_string(reinterpret_cast(structInfo->pTag)[idx0]) + ", "; + } + ptag_array = "pTag_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint8_t " << ptag_array << "[] = {" << ptag_values << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << "," << std::endl; - struct_body << "\t\t\t" << paddress_infos_name << "," << std::endl; - struct_body << "\t\t\t" << pvendor_infos_name << "," << std::endl; - out << "\t\t" << "// TODO: Support pVendorBinaryData (non-struct output) argument." << std::endl; - std::string variable_name = consumer.AddStruct(struct_body, "deviceFaultInfoEXT"); - out << "\t\t" << "VkDeviceFaultInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFrameBoundaryFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->frameID << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->imageCount << "," << std::endl; + struct_body << "\t\t\t" << pimages_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bufferCount << "," << std::endl; + struct_body << "\t\t\t" << pbuffers_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tagName << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->tagSize << "," << std::endl; + struct_body << "\t\t\t" << ptag_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "frameBoundaryEXT"); + out << "\t\t" << "VkFrameBoundaryEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceFaultVendorBinaryHeaderVersionOneEXT(std::ostream &out, const VkDeviceFaultVendorBinaryHeaderVersionOneEXT* structInfo, Decoded_VkDeviceFaultVendorBinaryHeaderVersionOneEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFrameBoundaryFeaturesEXT(std::ostream &out, const VkPhysicalDeviceFrameBoundaryFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceFrameBoundaryFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->headerSize << "," << std::endl; - struct_body << "\t\t\t" << "VkDeviceFaultVendorBinaryHeaderVersionEXT(" << structInfo->headerVersion << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vendorID << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceID << "," << std::endl; - struct_body << "\t\t\t" << structInfo->driverVersion << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->pipelineCacheUUID[0]), VK_UUID_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->applicationNameOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->applicationVersion << "," << std::endl; - struct_body << "\t\t\t" << structInfo->engineNameOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->engineVersion << "," << std::endl; - struct_body << "\t\t\t" << structInfo->apiVersion << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceFaultVendorBinaryHeaderVersionOneEXT"); - out << "\t\t" << "VkDeviceFaultVendorBinaryHeaderVersionOneEXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->frameBoundary << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFrameBoundaryFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceFrameBoundaryFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceFaultVendorInfoEXT(std::ostream &out, const VkDeviceFaultVendorInfoEXT* structInfo, Decoded_VkDeviceFaultVendorInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMultisampledRenderToSingleSampledInfoEXT(std::ostream &out, const VkMultisampledRenderToSingleSampledInfoEXT* structInfo, Decoded_VkMultisampledRenderToSingleSampledInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vendorFaultCode << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vendorFaultData << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceFaultVendorInfoEXT"); - out << "\t\t" << "VkDeviceFaultVendorInfoEXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->multisampledRenderToSingleSampledEnable << "," << std::endl; + struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->rasterizationSamples << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "multisampledRenderToSingleSampledInfoEXT"); + out << "\t\t" << "VkMultisampledRenderToSingleSampledInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFaultFeaturesEXT(std::ostream &out, const VkPhysicalDeviceFaultFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceFaultFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT(std::ostream &out, const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceFault << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceFaultVendorBinary << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFaultFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceFaultFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->multisampledRenderToSingleSampled << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT(std::ostream &out, const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSubpassResolvePerformanceQueryEXT(std::ostream &out, const VkSubpassResolvePerformanceQueryEXT* structInfo, Decoded_VkSubpassResolvePerformanceQueryEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->rasterizationOrderColorAttachmentAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->rasterizationOrderDepthAttachmentAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->rasterizationOrderStencilAttachmentAccess << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->optimal << ","; + std::string variable_name = consumer.AddStruct(struct_body, "subpassResolvePerformanceQueryEXT"); + out << "\t\t" << "VkSubpassResolvePerformanceQueryEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT(std::ostream &out, const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT(std::ostream &out, const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* structInfo, Decoded_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->formatRgba10x6WithoutYCbCrSampler << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRGBA10X6FormatsFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState2 << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState2LogicOp << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState2PatchControlPoints << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExtendedDynamicState2FeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceExtendedDynamicState2FeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDirectFBSurfaceCreateInfoEXT(std::ostream &out, const VkDirectFBSurfaceCreateInfoEXT* structInfo, Decoded_VkDirectFBSurfaceCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkScreenSurfaceCreateInfoQNX(std::ostream &out, const VkScreenSurfaceCreateInfoQNX* structInfo, Decoded_VkScreenSurfaceCreateInfoQNX* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDirectFBSurfaceCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->dfb << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->surface << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "directFBSurfaceCreateInfoEXT"); - out << "\t\t" << "VkDirectFBSurfaceCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkScreenSurfaceCreateFlagsQNX(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->context << ")" << "," << std::endl; + struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->window << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "screenSurfaceCreateInfoQNX"); + out << "\t\t" << "VkScreenSurfaceCreateInfoQNX " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMutableDescriptorTypeCreateInfoEXT(std::ostream &out, const VkMutableDescriptorTypeCreateInfoEXT* structInfo, Decoded_VkMutableDescriptorTypeCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceColorWriteEnableFeaturesEXT(std::ostream &out, const VkPhysicalDeviceColorWriteEnableFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceColorWriteEnableFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pmutable_descriptor_type_lists_array = "NULL"; - if (structInfo->pMutableDescriptorTypeLists != NULL) { - pmutable_descriptor_type_lists_array = "pMutableDescriptorTypeLists_" + std::to_string(consumer.GetNextId()); - std::string pmutable_descriptor_type_lists_names; - for (uint32_t idx = 0; idx < structInfo->mutableDescriptorTypeListCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pMutableDescriptorTypeLists + idx != NULL) { - variable_name = GenerateStruct_VkMutableDescriptorTypeListEXT(out, - structInfo->pMutableDescriptorTypeLists + idx, - metaInfo->pMutableDescriptorTypeLists->GetMetaStructPointer() + idx, - consumer); - } - pmutable_descriptor_type_lists_names += variable_name + ", "; - } - out << "\t\t" << "VkMutableDescriptorTypeListEXT " << pmutable_descriptor_type_lists_array << "[] = {" << pmutable_descriptor_type_lists_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->mutableDescriptorTypeListCount << "," << std::endl; - struct_body << "\t\t\t" << pmutable_descriptor_type_lists_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "mutableDescriptorTypeCreateInfoEXT"); - out << "\t\t" << "VkMutableDescriptorTypeCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->colorWriteEnable << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceColorWriteEnableFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceColorWriteEnableFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMutableDescriptorTypeListEXT(std::ostream &out, const VkMutableDescriptorTypeListEXT* structInfo, Decoded_VkMutableDescriptorTypeListEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineColorWriteCreateInfoEXT(std::ostream &out, const VkPipelineColorWriteCreateInfoEXT* structInfo, Decoded_VkPipelineColorWriteCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pdescriptor_types_values; - std::string pdescriptor_types_array = "NULL"; - if (structInfo->pDescriptorTypes != NULL) { - for (uint32_t idx = 0; idx < structInfo->descriptorTypeCount; idx++) { - pdescriptor_types_values += util::ToString(structInfo->pDescriptorTypes[idx]) + ", "; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pcolor_write_enables_array = "NULL"; + if (structInfo->pColorWriteEnables != NULL) { + std::string pcolor_write_enables_values; + for (uint32_t idx0 = 0; idx0 < structInfo->attachmentCount; ++idx0) { + pcolor_write_enables_values += std::to_string(structInfo->pColorWriteEnables[idx0]) + ", "; } - pdescriptor_types_array = "pDescriptorTypes_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkDescriptorType " << pdescriptor_types_array << "[] = {" << pdescriptor_types_values << "};" << std::endl; + pcolor_write_enables_array = "pColorWriteEnables_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkBool32 " << pcolor_write_enables_array << "[] = {" << pcolor_write_enables_values << "};" << std::endl; } - struct_body << "\t" << structInfo->descriptorTypeCount << "," << std::endl; - struct_body << "\t\t\t" << pdescriptor_types_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "mutableDescriptorTypeListEXT"); - out << "\t\t" << "VkMutableDescriptorTypeListEXT " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->attachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pcolor_write_enables_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineColorWriteCreateInfoEXT"); + out << "\t\t" << "VkPipelineColorWriteCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT(std::ostream &out, const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(std::ostream &out, const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* structInfo, Decoded_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->mutableDescriptorType << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMutableDescriptorTypeFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->primitivesGeneratedQuery << "," << std::endl; + struct_body << "\t\t\t" << structInfo->primitivesGeneratedQueryWithRasterizerDiscard << "," << std::endl; + struct_body << "\t\t\t" << structInfo->primitivesGeneratedQueryWithNonZeroStreams << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePrimitivesGeneratedQueryFeaturesEXT"); + out << "\t\t" << "VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT(std::ostream &out, const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE(std::ostream &out, const VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE* structInfo, Decoded_VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexInputDynamicState << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVertexInputDynamicStateFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->videoEncodeRgbConversion << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceVideoEncodeRgbConversionFeaturesVALVE"); + out << "\t\t" << "VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVertexInputAttributeDescription2EXT(std::ostream &out, const VkVertexInputAttributeDescription2EXT* structInfo, Decoded_VkVertexInputAttributeDescription2EXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeProfileRgbConversionInfoVALVE(std::ostream &out, const VkVideoEncodeProfileRgbConversionInfoVALVE* structInfo, Decoded_VkVideoEncodeProfileRgbConversionInfoVALVE* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->location << "," << std::endl; - struct_body << "\t\t\t" << structInfo->binding << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << ","; - std::string variable_name = consumer.AddStruct(struct_body, "vertexInputAttributeDescription2EXT"); - out << "\t\t" << "VkVertexInputAttributeDescription2EXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->performEncodeRgbConversion << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeProfileRgbConversionInfoVALVE"); + out << "\t\t" << "VkVideoEncodeProfileRgbConversionInfoVALVE " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkVertexInputBindingDescription2EXT(std::ostream &out, const VkVertexInputBindingDescription2EXT* structInfo, Decoded_VkVertexInputBindingDescription2EXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeRgbConversionCapabilitiesVALVE(std::ostream &out, const VkVideoEncodeRgbConversionCapabilitiesVALVE* structInfo, Decoded_VkVideoEncodeRgbConversionCapabilitiesVALVE* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->binding << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stride << "," << std::endl; - struct_body << "\t\t\t" << "VkVertexInputRate(" << structInfo->inputRate << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->divisor << ","; - std::string variable_name = consumer.AddStruct(struct_body, "vertexInputBindingDescription2EXT"); - out << "\t\t" << "VkVertexInputBindingDescription2EXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeRgbModelConversionFlagsVALVE(" << structInfo->rgbModels << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeRgbRangeCompressionFlagsVALVE(" << structInfo->rgbRanges << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeRgbChromaOffsetFlagsVALVE(" << structInfo->xChromaOffsets << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeRgbChromaOffsetFlagsVALVE(" << structInfo->yChromaOffsets << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeRgbConversionCapabilitiesVALVE"); + out << "\t\t" << "VkVideoEncodeRgbConversionCapabilitiesVALVE " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDrmPropertiesEXT(std::ostream &out, const VkPhysicalDeviceDrmPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceDrmPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkVideoEncodeSessionRgbConversionCreateInfoVALVE(std::ostream &out, const VkVideoEncodeSessionRgbConversionCreateInfoVALVE* structInfo, Decoded_VkVideoEncodeSessionRgbConversionCreateInfoVALVE* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hasPrimary << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hasRender << "," << std::endl; - struct_body << "\t\t\t" << structInfo->primaryMajor << "," << std::endl; - struct_body << "\t\t\t" << structInfo->primaryMinor << "," << std::endl; - struct_body << "\t\t\t" << structInfo->renderMajor << "," << std::endl; - struct_body << "\t\t\t" << structInfo->renderMinor << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDrmPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceDrmPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeRgbModelConversionFlagBitsVALVE(" << structInfo->rgbModel << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeRgbRangeCompressionFlagBitsVALVE(" << structInfo->rgbRange << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeRgbChromaOffsetFlagBitsVALVE(" << structInfo->xChromaOffset << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkVideoEncodeRgbChromaOffsetFlagBitsVALVE(" << structInfo->yChromaOffset << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "videoEncodeSessionRgbConversionCreateInfoVALVE"); + out << "\t\t" << "VkVideoEncodeSessionRgbConversionCreateInfoVALVE " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceAddressBindingCallbackDataEXT(std::ostream &out, const VkDeviceAddressBindingCallbackDataEXT* structInfo, Decoded_VkDeviceAddressBindingCallbackDataEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageViewMinLodCreateInfoEXT(std::ostream &out, const VkImageViewMinLodCreateInfoEXT* structInfo, Decoded_VkImageViewMinLodCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDeviceAddressBindingFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->baseAddress << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkDeviceAddressBindingTypeEXT(" << structInfo->bindingType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceAddressBindingCallbackDataEXT"); - out << "\t\t" << "VkDeviceAddressBindingCallbackDataEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->minLod << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageViewMinLodCreateInfoEXT"); + out << "\t\t" << "VkImageViewMinLodCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceAddressBindingReportFeaturesEXT(std::ostream &out, const VkPhysicalDeviceAddressBindingReportFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceAddressBindingReportFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceImageViewMinLodFeaturesEXT(std::ostream &out, const VkPhysicalDeviceImageViewMinLodFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceImageViewMinLodFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->reportAddressBinding << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceAddressBindingReportFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceAddressBindingReportFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->minLod << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageViewMinLodFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceImageViewMinLodFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDepthClipControlFeaturesEXT(std::ostream &out, const VkPhysicalDeviceDepthClipControlFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceDepthClipControlFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMultiDrawIndexedInfoEXT(std::ostream &out, const VkMultiDrawIndexedInfoEXT* structInfo, Decoded_VkMultiDrawIndexedInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->depthClipControl << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDepthClipControlFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceDepthClipControlFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->firstIndex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indexCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexOffset << ","; + std::string variable_name = consumer.AddStruct(struct_body, "multiDrawIndexedInfoEXT"); + out << "\t\t" << "VkMultiDrawIndexedInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineViewportDepthClipControlCreateInfoEXT(std::ostream &out, const VkPipelineViewportDepthClipControlCreateInfoEXT* structInfo, Decoded_VkPipelineViewportDepthClipControlCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMultiDrawInfoEXT(std::ostream &out, const VkMultiDrawInfoEXT* structInfo, Decoded_VkMultiDrawInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->negativeOneToOne << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineViewportDepthClipControlCreateInfoEXT"); - out << "\t\t" << "VkPipelineViewportDepthClipControlCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->firstVertex << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "multiDrawInfoEXT"); + out << "\t\t" << "VkMultiDrawInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT(std::ostream &out, const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* structInfo, Decoded_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMultiDrawFeaturesEXT(std::ostream &out, const VkPhysicalDeviceMultiDrawFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceMultiDrawFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->primitiveTopologyListRestart << "," << std::endl; - struct_body << "\t\t\t" << structInfo->primitiveTopologyPatchListRestart << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePrimitiveTopologyListRestartFeaturesEXT"); - out << "\t\t" << "VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->multiDraw << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMultiDrawFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceMultiDrawFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImportMemoryZirconHandleInfoFUCHSIA(std::ostream &out, const VkImportMemoryZirconHandleInfoFUCHSIA* structInfo, Decoded_VkImportMemoryZirconHandleInfoFUCHSIA* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMultiDrawPropertiesEXT(std::ostream &out, const VkPhysicalDeviceMultiDrawPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceMultiDrawPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->handle << ","; - std::string variable_name = consumer.AddStruct(struct_body, "importMemoryZirconHandleInfoFUCHSIA"); - out << "\t\t" << "VkImportMemoryZirconHandleInfoFUCHSIA " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxMultiDrawCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMultiDrawPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceMultiDrawPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryGetZirconHandleInfoFUCHSIA(std::ostream &out, const VkMemoryGetZirconHandleInfoFUCHSIA* structInfo, Decoded_VkMemoryGetZirconHandleInfoFUCHSIA* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT(std::ostream &out, const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryGetZirconHandleInfoFUCHSIA"); - out << "\t\t" << "VkMemoryGetZirconHandleInfoFUCHSIA " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->image2DViewOf3D << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sampler2DViewOf3D << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImage2DViewOf3DFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceImage2DViewOf3DFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryZirconHandlePropertiesFUCHSIA(std::ostream &out, const VkMemoryZirconHandlePropertiesFUCHSIA* structInfo, Decoded_VkMemoryZirconHandlePropertiesFUCHSIA* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderTileImageFeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderTileImageFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderTileImageFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->memoryTypeBits << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryZirconHandlePropertiesFUCHSIA"); - out << "\t\t" << "VkMemoryZirconHandlePropertiesFUCHSIA " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderTileImageColorReadAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderTileImageDepthReadAccess << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderTileImageStencilReadAccess << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderTileImageFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceShaderTileImageFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImportSemaphoreZirconHandleInfoFUCHSIA(std::ostream &out, const VkImportSemaphoreZirconHandleInfoFUCHSIA* structInfo, Decoded_VkImportSemaphoreZirconHandleInfoFUCHSIA* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderTileImagePropertiesEXT(std::ostream &out, const VkPhysicalDeviceShaderTileImagePropertiesEXT* structInfo, Decoded_VkPhysicalDeviceShaderTileImagePropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; - struct_body << "\t\t\t" << "VkSemaphoreImportFlags(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlagBits(" << structInfo->handleType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->zirconHandle << ","; - std::string variable_name = consumer.AddStruct(struct_body, "importSemaphoreZirconHandleInfoFUCHSIA"); - out << "\t\t" << "VkImportSemaphoreZirconHandleInfoFUCHSIA " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderTileImageCoherentReadAccelerated << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderTileImageReadSampleFromPixelRateInvocation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderTileImageReadFromHelperInvocation << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderTileImagePropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceShaderTileImagePropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSemaphoreGetZirconHandleInfoFUCHSIA(std::ostream &out, const VkSemaphoreGetZirconHandleInfoFUCHSIA* structInfo, Decoded_VkSemaphoreGetZirconHandleInfoFUCHSIA* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAccelerationStructureTrianglesOpacityMicromapEXT(std::ostream &out, const VkAccelerationStructureTrianglesOpacityMicromapEXT* structInfo, Decoded_VkAccelerationStructureTrianglesOpacityMicromapEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pusage_counts_array = "NULL"; + if (structInfo->pUsageCounts != NULL) { + pusage_counts_array = "pUsageCounts_" + std::to_string(consumer.GetNextId()); + std::string pusage_counts_names; + for (uint32_t idx = 0; idx < structInfo->usageCountsCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pUsageCounts + idx != NULL) { + variable_name = GenerateStruct_VkMicromapUsageEXT(out, + structInfo->pUsageCounts + idx, + metaInfo->pUsageCounts->GetMetaStructPointer() + idx, + consumer); + } + pusage_counts_names += variable_name + ", "; + } + out << "\t\t" << "VkMicromapUsageEXT " << pusage_counts_array << "[] = {" << pusage_counts_names << "};" << std::endl; + } + std::string pp_usage_counts_array = "NULL"; + if (structInfo->ppUsageCounts != NULL) { + pp_usage_counts_array = "ppUsageCounts_" + std::to_string(consumer.GetNextId()); + std::string pp_usage_counts_names; + for (uint32_t idx0 = 0; idx0 < structInfo->usageCountsCount; ++idx0) { + for (uint32_t idx1 = 0; idx1 < 1; ++idx1) { + std::string variable_name = "NULL"; + variable_name = GenerateStruct_VkMicromapUsageEXT(out, + &(structInfo->ppUsageCounts[idx0][idx1]), + &(metaInfo->ppUsageCounts->GetMetaStructPointer()[idx0][idx1]), + consumer); + pp_usage_counts_names += variable_name + ", "; + } + } + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->semaphore) << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "semaphoreGetZirconHandleInfoFUCHSIA"); - out << "\t\t" << "VkSemaphoreGetZirconHandleInfoFUCHSIA " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkIndexType(" << structInfo->indexType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indexBuffer.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indexStride << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->baseTriangle << "," << std::endl; + struct_body << "\t\t\t" << structInfo->usageCountsCount << "," << std::endl; + struct_body << "\t\t\t" << pusage_counts_array << "," << std::endl; + struct_body << "\t\t\t" << pp_usage_counts_array << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->micromap) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureTrianglesOpacityMicromapEXT"); + out << "\t\t" << "VkAccelerationStructureTrianglesOpacityMicromapEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceInvocationMaskFeaturesHUAWEI(std::ostream &out, const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI* structInfo, Decoded_VkPhysicalDeviceInvocationMaskFeaturesHUAWEI* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCopyMemoryToMicromapInfoEXT(std::ostream &out, const VkCopyMemoryToMicromapInfoEXT* structInfo, Decoded_VkCopyMemoryToMicromapInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->invocationMask << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceInvocationMaskFeaturesHUAWEI"); - out << "\t\t" << "VkPhysicalDeviceInvocationMaskFeaturesHUAWEI " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->src.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dst) << "," << std::endl; + struct_body << "\t\t\t" << "VkCopyMicromapModeEXT(" << structInfo->mode << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "copyMemoryToMicromapInfoEXT"); + out << "\t\t" << "VkCopyMemoryToMicromapInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMemoryGetRemoteAddressInfoNV(std::ostream &out, const VkMemoryGetRemoteAddressInfoNV* structInfo, Decoded_VkMemoryGetRemoteAddressInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCopyMicromapInfoEXT(std::ostream &out, const VkCopyMicromapInfoEXT* structInfo, Decoded_VkCopyMicromapInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; - struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlagBits(" << structInfo->handleType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "memoryGetRemoteAddressInfoNV"); - out << "\t\t" << "VkMemoryGetRemoteAddressInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->src) << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dst) << "," << std::endl; + struct_body << "\t\t\t" << "VkCopyMicromapModeEXT(" << structInfo->mode << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "copyMicromapInfoEXT"); + out << "\t\t" << "VkCopyMicromapInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExternalMemoryRDMAFeaturesNV(std::ostream &out, const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV* structInfo, Decoded_VkPhysicalDeviceExternalMemoryRDMAFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCopyMicromapToMemoryInfoEXT(std::ostream &out, const VkCopyMicromapToMemoryInfoEXT* structInfo, Decoded_VkCopyMicromapToMemoryInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->externalMemoryRDMA << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalMemoryRDMAFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceExternalMemoryRDMAFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->src) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dst.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << "VkCopyMicromapModeEXT(" << structInfo->mode << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "copyMicromapToMemoryInfoEXT"); + out << "\t\t" << "VkCopyMicromapToMemoryInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkFrameBoundaryEXT(std::ostream &out, const VkFrameBoundaryEXT* structInfo, Decoded_VkFrameBoundaryEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMicromapBuildInfoEXT(std::ostream &out, const VkMicromapBuildInfoEXT* structInfo, Decoded_VkMicromapBuildInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pimages_array = "NULL"; - if (metaInfo->pImages.GetPointer() != NULL && structInfo->imageCount > 0) { - pimages_array = "pimages_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_IMAGE)); - std::string pimages_values = toStringJoin(metaInfo->pImages.GetPointer(), - metaInfo->pImages.GetPointer() + structInfo->imageCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->imageCount == 1) { - pimages_array = "&" + pimages_values; - } else if (structInfo->imageCount > 1) { - out << "\t\t" << "VkImage " << pimages_array << "[] = {" << pimages_values << "};" << std::endl; - } - } - std::string pbuffers_array = "NULL"; - if (metaInfo->pBuffers.GetPointer() != NULL && structInfo->bufferCount > 0) { - pbuffers_array = "pbuffers_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_BUFFER)); - std::string pbuffers_values = toStringJoin(metaInfo->pBuffers.GetPointer(), - metaInfo->pBuffers.GetPointer() + structInfo->bufferCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->bufferCount == 1) { - pbuffers_array = "&" + pbuffers_values; - } else if (structInfo->bufferCount > 1) { - out << "\t\t" << "VkBuffer " << pbuffers_array << "[] = {" << pbuffers_values << "};" << std::endl; + std::string pusage_counts_array = "NULL"; + if (structInfo->pUsageCounts != NULL) { + pusage_counts_array = "pUsageCounts_" + std::to_string(consumer.GetNextId()); + std::string pusage_counts_names; + for (uint32_t idx = 0; idx < structInfo->usageCountsCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pUsageCounts + idx != NULL) { + variable_name = GenerateStruct_VkMicromapUsageEXT(out, + structInfo->pUsageCounts + idx, + metaInfo->pUsageCounts->GetMetaStructPointer() + idx, + consumer); + } + pusage_counts_names += variable_name + ", "; } + out << "\t\t" << "VkMicromapUsageEXT " << pusage_counts_array << "[] = {" << pusage_counts_names << "};" << std::endl; } - std::string ptag_array = "NULL"; - if (structInfo->pTag != NULL) { - std::string ptag_values; - for (uint32_t idx0 = 0; idx0 < structInfo->tagSize; ++idx0) { - ptag_values += std::to_string(reinterpret_cast(structInfo->pTag)[idx0]) + ", "; + std::string pp_usage_counts_array = "NULL"; + if (structInfo->ppUsageCounts != NULL) { + pp_usage_counts_array = "ppUsageCounts_" + std::to_string(consumer.GetNextId()); + std::string pp_usage_counts_names; + for (uint32_t idx0 = 0; idx0 < structInfo->usageCountsCount; ++idx0) { + for (uint32_t idx1 = 0; idx1 < 1; ++idx1) { + std::string variable_name = "NULL"; + variable_name = GenerateStruct_VkMicromapUsageEXT(out, + &(structInfo->ppUsageCounts[idx0][idx1]), + &(metaInfo->ppUsageCounts->GetMetaStructPointer()[idx0][idx1]), + consumer); + pp_usage_counts_names += variable_name + ", "; + } } - ptag_array = "pTag_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint8_t " << ptag_array << "[] = {" << ptag_values << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFrameBoundaryFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->frameID << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageCount << "," << std::endl; - struct_body << "\t\t\t" << pimages_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bufferCount << "," << std::endl; - struct_body << "\t\t\t" << pbuffers_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tagName << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tagSize << "," << std::endl; - struct_body << "\t\t\t" << ptag_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "frameBoundaryEXT"); - out << "\t\t" << "VkFrameBoundaryEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkMicromapTypeEXT(" << structInfo->type << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBuildMicromapFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBuildMicromapModeEXT(" << structInfo->mode << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstMicromap) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->usageCountsCount << "," << std::endl; + struct_body << "\t\t\t" << pusage_counts_array << "," << std::endl; + struct_body << "\t\t\t" << pp_usage_counts_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->data.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->scratchData.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->triangleArray.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->triangleArrayStride << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "micromapBuildInfoEXT"); + out << "\t\t" << "VkMicromapBuildInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFrameBoundaryFeaturesEXT(std::ostream &out, const VkPhysicalDeviceFrameBoundaryFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceFrameBoundaryFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMicromapBuildSizesInfoEXT(std::ostream &out, const VkMicromapBuildSizesInfoEXT* structInfo, Decoded_VkMicromapBuildSizesInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->frameBoundary << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFrameBoundaryFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceFrameBoundaryFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->micromapSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->buildScratchSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->discardable << ","; + std::string variable_name = consumer.AddStruct(struct_body, "micromapBuildSizesInfoEXT"); + out << "\t\t" << "VkMicromapBuildSizesInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMultisampledRenderToSingleSampledInfoEXT(std::ostream &out, const VkMultisampledRenderToSingleSampledInfoEXT* structInfo, Decoded_VkMultisampledRenderToSingleSampledInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMicromapCreateInfoEXT(std::ostream &out, const VkMicromapCreateInfoEXT* structInfo, Decoded_VkMicromapCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->multisampledRenderToSingleSampledEnable << "," << std::endl; - struct_body << "\t\t\t" << "VkSampleCountFlagBits(" << structInfo->rasterizationSamples << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "multisampledRenderToSingleSampledInfoEXT"); - out << "\t\t" << "VkMultisampledRenderToSingleSampledInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkMicromapCreateFlagsEXT(" << structInfo->createFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkMicromapTypeEXT(" << structInfo->type << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceAddress << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "micromapCreateInfoEXT"); + out << "\t\t" << "VkMicromapCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT(std::ostream &out, const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMicromapTriangleEXT(std::ostream &out, const VkMicromapTriangleEXT* structInfo, Decoded_VkMicromapTriangleEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->multisampledRenderToSingleSampled << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->dataOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subdivisionLevel << "," << std::endl; + struct_body << "\t\t\t" << structInfo->format << ","; + std::string variable_name = consumer.AddStruct(struct_body, "micromapTriangleEXT"); + out << "\t\t" << "VkMicromapTriangleEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSubpassResolvePerformanceQueryEXT(std::ostream &out, const VkSubpassResolvePerformanceQueryEXT* structInfo, Decoded_VkSubpassResolvePerformanceQueryEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMicromapUsageEXT(std::ostream &out, const VkMicromapUsageEXT* structInfo, Decoded_VkMicromapUsageEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->optimal << ","; - std::string variable_name = consumer.AddStruct(struct_body, "subpassResolvePerformanceQueryEXT"); - out << "\t\t" << "VkSubpassResolvePerformanceQueryEXT " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->count << "," << std::endl; + struct_body << "\t\t\t" << structInfo->subdivisionLevel << "," << std::endl; + struct_body << "\t\t\t" << structInfo->format << ","; + std::string variable_name = consumer.AddStruct(struct_body, "micromapUsageEXT"); + out << "\t\t" << "VkMicromapUsageEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT(std::ostream &out, const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* structInfo, Decoded_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkMicromapVersionInfoEXT(std::ostream &out, const VkMicromapVersionInfoEXT* structInfo, Decoded_VkMicromapVersionInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pversion_data_array = "NULL"; + std::string pversion_data_values; + for (uint32_t idx0 = 0; idx0 < 2*VK_UUID_SIZE; ++idx0) { + pversion_data_values += std::to_string(structInfo->pVersionData[idx0]) + ", "; + } + pversion_data_array = "pVersionData_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint8_t " << pversion_data_array << "[] = {" << pversion_data_values << "};" << std::endl; struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState2 << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState2LogicOp << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState2PatchControlPoints << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExtendedDynamicState2FeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceExtendedDynamicState2FeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << pversion_data_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "micromapVersionInfoEXT"); + out << "\t\t" << "VkMicromapVersionInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkScreenSurfaceCreateInfoQNX(std::ostream &out, const VkScreenSurfaceCreateInfoQNX* structInfo, Decoded_VkScreenSurfaceCreateInfoQNX* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceOpacityMicromapFeaturesEXT(std::ostream &out, const VkPhysicalDeviceOpacityMicromapFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceOpacityMicromapFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkScreenSurfaceCreateFlagsQNX(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->context << ")" << "," << std::endl; - struct_body << "\t\t\t" << "reinterpret_cast(" << structInfo->window << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "screenSurfaceCreateInfoQNX"); - out << "\t\t" << "VkScreenSurfaceCreateInfoQNX " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->micromap << "," << std::endl; + struct_body << "\t\t\t" << structInfo->micromapCaptureReplay << "," << std::endl; + struct_body << "\t\t\t" << structInfo->micromapHostCommands << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceOpacityMicromapFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceOpacityMicromapFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceColorWriteEnableFeaturesEXT(std::ostream &out, const VkPhysicalDeviceColorWriteEnableFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceColorWriteEnableFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceOpacityMicromapPropertiesEXT(std::ostream &out, const VkPhysicalDeviceOpacityMicromapPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceOpacityMicromapPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->colorWriteEnable << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceColorWriteEnableFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceColorWriteEnableFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxOpacity2StateSubdivisionLevel << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxOpacity4StateSubdivisionLevel << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceOpacityMicromapPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceOpacityMicromapPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineColorWriteCreateInfoEXT(std::ostream &out, const VkPipelineColorWriteCreateInfoEXT* structInfo, Decoded_VkPipelineColorWriteCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAccelerationStructureTrianglesDisplacementMicromapNV(std::ostream &out, const VkAccelerationStructureTrianglesDisplacementMicromapNV* structInfo, Decoded_VkAccelerationStructureTrianglesDisplacementMicromapNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcolor_write_enables_array = "NULL"; - if (structInfo->pColorWriteEnables != NULL) { - std::string pcolor_write_enables_values; - for (uint32_t idx0 = 0; idx0 < structInfo->attachmentCount; ++idx0) { - pcolor_write_enables_values += std::to_string(structInfo->pColorWriteEnables[idx0]) + ", "; + std::string pusage_counts_array = "NULL"; + if (structInfo->pUsageCounts != NULL) { + pusage_counts_array = "pUsageCounts_" + std::to_string(consumer.GetNextId()); + std::string pusage_counts_names; + for (uint32_t idx = 0; idx < structInfo->usageCountsCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pUsageCounts + idx != NULL) { + variable_name = GenerateStruct_VkMicromapUsageEXT(out, + structInfo->pUsageCounts + idx, + metaInfo->pUsageCounts->GetMetaStructPointer() + idx, + consumer); + } + pusage_counts_names += variable_name + ", "; + } + out << "\t\t" << "VkMicromapUsageEXT " << pusage_counts_array << "[] = {" << pusage_counts_names << "};" << std::endl; + } + std::string pp_usage_counts_array = "NULL"; + if (structInfo->ppUsageCounts != NULL) { + pp_usage_counts_array = "ppUsageCounts_" + std::to_string(consumer.GetNextId()); + std::string pp_usage_counts_names; + for (uint32_t idx0 = 0; idx0 < structInfo->usageCountsCount; ++idx0) { + for (uint32_t idx1 = 0; idx1 < 1; ++idx1) { + std::string variable_name = "NULL"; + variable_name = GenerateStruct_VkMicromapUsageEXT(out, + &(structInfo->ppUsageCounts[idx0][idx1]), + &(metaInfo->ppUsageCounts->GetMetaStructPointer()[idx0][idx1]), + consumer); + pp_usage_counts_names += variable_name + ", "; + } } - pcolor_write_enables_array = "pColorWriteEnables_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkBool32 " << pcolor_write_enables_array << "[] = {" << pcolor_write_enables_values << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->attachmentCount << "," << std::endl; - struct_body << "\t\t\t" << pcolor_write_enables_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineColorWriteCreateInfoEXT"); - out << "\t\t" << "VkPipelineColorWriteCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->displacementBiasAndScaleFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->displacementVectorFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->displacementBiasAndScaleBuffer.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->displacementBiasAndScaleStride << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->displacementVectorBuffer.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->displacementVectorStride << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->displacedMicromapPrimitiveFlags.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->displacedMicromapPrimitiveFlagsStride << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkIndexType(" << structInfo->indexType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indexBuffer.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indexStride << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->baseTriangle << "," << std::endl; + struct_body << "\t\t\t" << structInfo->usageCountsCount << "," << std::endl; + struct_body << "\t\t\t" << pusage_counts_array << "," << std::endl; + struct_body << "\t\t\t" << pp_usage_counts_array << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->micromap) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureTrianglesDisplacementMicromapNV"); + out << "\t\t" << "VkAccelerationStructureTrianglesDisplacementMicromapNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(std::ostream &out, const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* structInfo, Decoded_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDisplacementMicromapFeaturesNV(std::ostream &out, const VkPhysicalDeviceDisplacementMicromapFeaturesNV* structInfo, Decoded_VkPhysicalDeviceDisplacementMicromapFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->primitivesGeneratedQuery << "," << std::endl; - struct_body << "\t\t\t" << structInfo->primitivesGeneratedQueryWithRasterizerDiscard << "," << std::endl; - struct_body << "\t\t\t" << structInfo->primitivesGeneratedQueryWithNonZeroStreams << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePrimitivesGeneratedQueryFeaturesEXT"); - out << "\t\t" << "VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->displacementMicromap << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDisplacementMicromapFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceDisplacementMicromapFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageViewMinLodCreateInfoEXT(std::ostream &out, const VkImageViewMinLodCreateInfoEXT* structInfo, Decoded_VkImageViewMinLodCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDisplacementMicromapPropertiesNV(std::ostream &out, const VkPhysicalDeviceDisplacementMicromapPropertiesNV* structInfo, Decoded_VkPhysicalDeviceDisplacementMicromapPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minLod << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageViewMinLodCreateInfoEXT"); - out << "\t\t" << "VkImageViewMinLodCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxDisplacementMicromapSubdivisionLevel << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDisplacementMicromapPropertiesNV"); + out << "\t\t" << "VkPhysicalDeviceDisplacementMicromapPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceImageViewMinLodFeaturesEXT(std::ostream &out, const VkPhysicalDeviceImageViewMinLodFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceImageViewMinLodFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI(std::ostream &out, const VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI* structInfo, Decoded_VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minLod << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageViewMinLodFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceImageViewMinLodFeaturesEXT " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkMultiDrawIndexedInfoEXT(std::ostream &out, const VkMultiDrawIndexedInfoEXT* structInfo, Decoded_VkMultiDrawIndexedInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->firstIndex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indexCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexOffset << ","; - std::string variable_name = consumer.AddStruct(struct_body, "multiDrawIndexedInfoEXT"); - out << "\t\t" << "VkMultiDrawIndexedInfoEXT " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkMultiDrawInfoEXT(std::ostream &out, const VkMultiDrawInfoEXT* structInfo, Decoded_VkMultiDrawInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->firstVertex << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "multiDrawInfoEXT"); - out << "\t\t" << "VkMultiDrawInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->clustercullingShader << "," << std::endl; + struct_body << "\t\t\t" << structInfo->multiviewClusterCullingShader << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceClusterCullingShaderFeaturesHUAWEI"); + out << "\t\t" << "VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMultiDrawFeaturesEXT(std::ostream &out, const VkPhysicalDeviceMultiDrawFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceMultiDrawFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI(std::ostream &out, const VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI* structInfo, Decoded_VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->multiDraw << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMultiDrawFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceMultiDrawFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->maxWorkGroupCount[0]), 3) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->maxWorkGroupSize[0]), 3) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxOutputClusterCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indirectBufferOffsetAlignment << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceClusterCullingShaderPropertiesHUAWEI"); + out << "\t\t" << "VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMultiDrawPropertiesEXT(std::ostream &out, const VkPhysicalDeviceMultiDrawPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceMultiDrawPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI(std::ostream &out, const VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI* structInfo, Decoded_VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxMultiDrawCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMultiDrawPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceMultiDrawPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->clusterShadingRate << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceClusterCullingShaderVrsFeaturesHUAWEI"); + out << "\t\t" << "VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT(std::ostream &out, const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT(std::ostream &out, const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->image2DViewOf3D << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sampler2DViewOf3D << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImage2DViewOf3DFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceImage2DViewOf3DFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->borderColorSwizzle << "," << std::endl; + struct_body << "\t\t\t" << structInfo->borderColorSwizzleFromImage << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceBorderColorSwizzleFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceBorderColorSwizzleFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderTileImageFeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderTileImageFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderTileImageFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSamplerBorderColorComponentMappingCreateInfoEXT(std::ostream &out, const VkSamplerBorderColorComponentMappingCreateInfoEXT* structInfo, Decoded_VkSamplerBorderColorComponentMappingCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string components_info_var = GenerateStruct_VkComponentMapping(out, + &structInfo->components, + metaInfo->components, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderTileImageColorReadAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderTileImageDepthReadAccess << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderTileImageStencilReadAccess << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderTileImageFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceShaderTileImageFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << components_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->srgb << ","; + std::string variable_name = consumer.AddStruct(struct_body, "samplerBorderColorComponentMappingCreateInfoEXT"); + out << "\t\t" << "VkSamplerBorderColorComponentMappingCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderTileImagePropertiesEXT(std::ostream &out, const VkPhysicalDeviceShaderTileImagePropertiesEXT* structInfo, Decoded_VkPhysicalDeviceShaderTileImagePropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(std::ostream &out, const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT* structInfo, Decoded_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderTileImageCoherentReadAccelerated << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderTileImageReadSampleFromPixelRateInvocation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderTileImageReadFromHelperInvocation << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderTileImagePropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceShaderTileImagePropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->pageableDeviceLocalMemory << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePageableDeviceLocalMemoryFeaturesEXT"); + out << "\t\t" << "VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAccelerationStructureTrianglesOpacityMicromapEXT(std::ostream &out, const VkAccelerationStructureTrianglesOpacityMicromapEXT* structInfo, Decoded_VkAccelerationStructureTrianglesOpacityMicromapEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderCorePropertiesARM(std::ostream &out, const VkPhysicalDeviceShaderCorePropertiesARM* structInfo, Decoded_VkPhysicalDeviceShaderCorePropertiesARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pusage_counts_array = "NULL"; - if (structInfo->pUsageCounts != NULL) { - pusage_counts_array = "pUsageCounts_" + std::to_string(consumer.GetNextId()); - std::string pusage_counts_names; - for (uint32_t idx = 0; idx < structInfo->usageCountsCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pUsageCounts + idx != NULL) { - variable_name = GenerateStruct_VkMicromapUsageEXT(out, - structInfo->pUsageCounts + idx, - metaInfo->pUsageCounts->GetMetaStructPointer() + idx, - consumer); - } - pusage_counts_names += variable_name + ", "; - } - out << "\t\t" << "VkMicromapUsageEXT " << pusage_counts_array << "[] = {" << pusage_counts_names << "};" << std::endl; - } - std::string pp_usage_counts_array = "NULL"; - if (structInfo->ppUsageCounts != NULL) { - pp_usage_counts_array = "ppUsageCounts_" + std::to_string(consumer.GetNextId()); - std::string pp_usage_counts_names; - for (uint32_t idx0 = 0; idx0 < structInfo->usageCountsCount; ++idx0) { - for (uint32_t idx1 = 0; idx1 < 1; ++idx1) { - std::string variable_name = "NULL"; - variable_name = GenerateStruct_VkMicromapUsageEXT(out, - &(structInfo->ppUsageCounts[idx0][idx1]), - &(metaInfo->ppUsageCounts->GetMetaStructPointer()[idx0][idx1]), - consumer); - pp_usage_counts_names += variable_name + ", "; - } - } - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkIndexType(" << structInfo->indexType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indexBuffer.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indexStride << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->baseTriangle << "," << std::endl; - struct_body << "\t\t\t" << structInfo->usageCountsCount << "," << std::endl; - struct_body << "\t\t\t" << pusage_counts_array << "," << std::endl; - struct_body << "\t\t\t" << pp_usage_counts_array << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->micromap) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureTrianglesOpacityMicromapEXT"); - out << "\t\t" << "VkAccelerationStructureTrianglesOpacityMicromapEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->pixelRate << "," << std::endl; + struct_body << "\t\t\t" << structInfo->texelRate << "," << std::endl; + struct_body << "\t\t\t" << structInfo->fmaRate << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderCorePropertiesARM"); + out << "\t\t" << "VkPhysicalDeviceShaderCorePropertiesARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCopyMemoryToMicromapInfoEXT(std::ostream &out, const VkCopyMemoryToMicromapInfoEXT* structInfo, Decoded_VkCopyMemoryToMicromapInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDeviceQueueShaderCoreControlCreateInfoARM(std::ostream &out, const VkDeviceQueueShaderCoreControlCreateInfoARM* structInfo, Decoded_VkDeviceQueueShaderCoreControlCreateInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->src.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dst) << "," << std::endl; - struct_body << "\t\t\t" << "VkCopyMicromapModeEXT(" << structInfo->mode << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "copyMemoryToMicromapInfoEXT"); - out << "\t\t" << "VkCopyMemoryToMicromapInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderCoreCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "deviceQueueShaderCoreControlCreateInfoARM"); + out << "\t\t" << "VkDeviceQueueShaderCoreControlCreateInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCopyMicromapInfoEXT(std::ostream &out, const VkCopyMicromapInfoEXT* structInfo, Decoded_VkCopyMicromapInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceSchedulingControlsFeaturesARM(std::ostream &out, const VkPhysicalDeviceSchedulingControlsFeaturesARM* structInfo, Decoded_VkPhysicalDeviceSchedulingControlsFeaturesARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->src) << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dst) << "," << std::endl; - struct_body << "\t\t\t" << "VkCopyMicromapModeEXT(" << structInfo->mode << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "copyMicromapInfoEXT"); - out << "\t\t" << "VkCopyMicromapInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->schedulingControls << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSchedulingControlsFeaturesARM"); + out << "\t\t" << "VkPhysicalDeviceSchedulingControlsFeaturesARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCopyMicromapToMemoryInfoEXT(std::ostream &out, const VkCopyMicromapToMemoryInfoEXT* structInfo, Decoded_VkCopyMicromapToMemoryInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceSchedulingControlsPropertiesARM(std::ostream &out, const VkPhysicalDeviceSchedulingControlsPropertiesARM* structInfo, Decoded_VkPhysicalDeviceSchedulingControlsPropertiesARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->src) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dst.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << "VkCopyMicromapModeEXT(" << structInfo->mode << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "copyMicromapToMemoryInfoEXT"); - out << "\t\t" << "VkCopyMicromapToMemoryInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPhysicalDeviceSchedulingControlsFlagsARM(" << structInfo->schedulingControlsFlags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSchedulingControlsPropertiesARM"); + out << "\t\t" << "VkPhysicalDeviceSchedulingControlsPropertiesARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMicromapBuildInfoEXT(std::ostream &out, const VkMicromapBuildInfoEXT* structInfo, Decoded_VkMicromapBuildInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageViewSlicedCreateInfoEXT(std::ostream &out, const VkImageViewSlicedCreateInfoEXT* structInfo, Decoded_VkImageViewSlicedCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pusage_counts_array = "NULL"; - if (structInfo->pUsageCounts != NULL) { - pusage_counts_array = "pUsageCounts_" + std::to_string(consumer.GetNextId()); - std::string pusage_counts_names; - for (uint32_t idx = 0; idx < structInfo->usageCountsCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pUsageCounts + idx != NULL) { - variable_name = GenerateStruct_VkMicromapUsageEXT(out, - structInfo->pUsageCounts + idx, - metaInfo->pUsageCounts->GetMetaStructPointer() + idx, - consumer); - } - pusage_counts_names += variable_name + ", "; - } - out << "\t\t" << "VkMicromapUsageEXT " << pusage_counts_array << "[] = {" << pusage_counts_names << "};" << std::endl; - } - std::string pp_usage_counts_array = "NULL"; - if (structInfo->ppUsageCounts != NULL) { - pp_usage_counts_array = "ppUsageCounts_" + std::to_string(consumer.GetNextId()); - std::string pp_usage_counts_names; - for (uint32_t idx0 = 0; idx0 < structInfo->usageCountsCount; ++idx0) { - for (uint32_t idx1 = 0; idx1 < 1; ++idx1) { - std::string variable_name = "NULL"; - variable_name = GenerateStruct_VkMicromapUsageEXT(out, - &(structInfo->ppUsageCounts[idx0][idx1]), - &(metaInfo->ppUsageCounts->GetMetaStructPointer()[idx0][idx1]), - consumer); - pp_usage_counts_names += variable_name + ", "; - } - } - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkMicromapTypeEXT(" << structInfo->type << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBuildMicromapFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBuildMicromapModeEXT(" << structInfo->mode << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dstMicromap) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->usageCountsCount << "," << std::endl; - struct_body << "\t\t\t" << pusage_counts_array << "," << std::endl; - struct_body << "\t\t\t" << pp_usage_counts_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->data.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->scratchData.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->triangleArray.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->triangleArrayStride << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "micromapBuildInfoEXT"); - out << "\t\t" << "VkMicromapBuildInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->sliceOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->sliceCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageViewSlicedCreateInfoEXT"); + out << "\t\t" << "VkImageViewSlicedCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMicromapBuildSizesInfoEXT(std::ostream &out, const VkMicromapBuildSizesInfoEXT* structInfo, Decoded_VkMicromapBuildSizesInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT(std::ostream &out, const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->micromapSize << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->buildScratchSize << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->discardable << ","; - std::string variable_name = consumer.AddStruct(struct_body, "micromapBuildSizesInfoEXT"); - out << "\t\t" << "VkMicromapBuildSizesInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->imageSlicedViewOf3D << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageSlicedViewOf3DFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMicromapCreateInfoEXT(std::ostream &out, const VkMicromapCreateInfoEXT* structInfo, Decoded_VkMicromapCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorSetBindingReferenceVALVE(std::ostream &out, const VkDescriptorSetBindingReferenceVALVE* structInfo, Decoded_VkDescriptorSetBindingReferenceVALVE* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkMicromapCreateFlagsEXT(" << structInfo->createFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->buffer) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->offset << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkMicromapTypeEXT(" << structInfo->type << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceAddress << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "micromapCreateInfoEXT"); - out << "\t\t" << "VkMicromapCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->descriptorSetLayout) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->binding << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetBindingReferenceVALVE"); + out << "\t\t" << "VkDescriptorSetBindingReferenceVALVE " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMicromapTriangleEXT(std::ostream &out, const VkMicromapTriangleEXT* structInfo, Decoded_VkMicromapTriangleEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDescriptorSetLayoutHostMappingInfoVALVE(std::ostream &out, const VkDescriptorSetLayoutHostMappingInfoVALVE* structInfo, Decoded_VkDescriptorSetLayoutHostMappingInfoVALVE* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->dataOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subdivisionLevel << "," << std::endl; - struct_body << "\t\t\t" << structInfo->format << ","; - std::string variable_name = consumer.AddStruct(struct_body, "micromapTriangleEXT"); - out << "\t\t" << "VkMicromapTriangleEXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorOffset << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorSize << ","; + std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetLayoutHostMappingInfoVALVE"); + out << "\t\t" << "VkDescriptorSetLayoutHostMappingInfoVALVE " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMicromapUsageEXT(std::ostream &out, const VkMicromapUsageEXT* structInfo, Decoded_VkMicromapUsageEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE(std::ostream &out, const VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE* structInfo, Decoded_VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->count << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subdivisionLevel << "," << std::endl; - struct_body << "\t\t\t" << structInfo->format << ","; - std::string variable_name = consumer.AddStruct(struct_body, "micromapUsageEXT"); - out << "\t\t" << "VkMicromapUsageEXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorSetHostMapping << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDescriptorSetHostMappingFeaturesVALVE"); + out << "\t\t" << "VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkMicromapVersionInfoEXT(std::ostream &out, const VkMicromapVersionInfoEXT* structInfo, Decoded_VkMicromapVersionInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT(std::ostream &out, const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pversion_data_array = "NULL"; - std::string pversion_data_values; - for (uint32_t idx0 = 0; idx0 < 2*VK_UUID_SIZE; ++idx0) { - pversion_data_values += std::to_string(structInfo->pVersionData[idx0]) + ", "; - } - pversion_data_array = "pVersionData_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint8_t " << pversion_data_array << "[] = {" << pversion_data_values << "};" << std::endl; struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << pversion_data_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "micromapVersionInfoEXT"); - out << "\t\t" << "VkMicromapVersionInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->nonSeamlessCubeMap << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceNonSeamlessCubeMapFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceOpacityMicromapFeaturesEXT(std::ostream &out, const VkPhysicalDeviceOpacityMicromapFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceOpacityMicromapFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRenderPassStripedFeaturesARM(std::ostream &out, const VkPhysicalDeviceRenderPassStripedFeaturesARM* structInfo, Decoded_VkPhysicalDeviceRenderPassStripedFeaturesARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->micromap << "," << std::endl; - struct_body << "\t\t\t" << structInfo->micromapCaptureReplay << "," << std::endl; - struct_body << "\t\t\t" << structInfo->micromapHostCommands << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceOpacityMicromapFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceOpacityMicromapFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->renderPassStriped << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRenderPassStripedFeaturesARM"); + out << "\t\t" << "VkPhysicalDeviceRenderPassStripedFeaturesARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceOpacityMicromapPropertiesEXT(std::ostream &out, const VkPhysicalDeviceOpacityMicromapPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceOpacityMicromapPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRenderPassStripedPropertiesARM(std::ostream &out, const VkPhysicalDeviceRenderPassStripedPropertiesARM* structInfo, Decoded_VkPhysicalDeviceRenderPassStripedPropertiesARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string render_pass_stripe_granularity_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->renderPassStripeGranularity, + metaInfo->renderPassStripeGranularity, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxOpacity2StateSubdivisionLevel << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxOpacity4StateSubdivisionLevel << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceOpacityMicromapPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceOpacityMicromapPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << render_pass_stripe_granularity_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxRenderPassStripes << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRenderPassStripedPropertiesARM"); + out << "\t\t" << "VkPhysicalDeviceRenderPassStripedPropertiesARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAccelerationStructureTrianglesDisplacementMicromapNV(std::ostream &out, const VkAccelerationStructureTrianglesDisplacementMicromapNV* structInfo, Decoded_VkAccelerationStructureTrianglesDisplacementMicromapNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassStripeBeginInfoARM(std::ostream &out, const VkRenderPassStripeBeginInfoARM* structInfo, Decoded_VkRenderPassStripeBeginInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pusage_counts_array = "NULL"; - if (structInfo->pUsageCounts != NULL) { - pusage_counts_array = "pUsageCounts_" + std::to_string(consumer.GetNextId()); - std::string pusage_counts_names; - for (uint32_t idx = 0; idx < structInfo->usageCountsCount; idx++) { + std::string pstripe_infos_array = "NULL"; + if (structInfo->pStripeInfos != NULL) { + pstripe_infos_array = "pStripeInfos_" + std::to_string(consumer.GetNextId()); + std::string pstripe_infos_names; + for (uint32_t idx = 0; idx < structInfo->stripeInfoCount; idx++) { std::string variable_name = "NULL"; - if (structInfo->pUsageCounts + idx != NULL) { - variable_name = GenerateStruct_VkMicromapUsageEXT(out, - structInfo->pUsageCounts + idx, - metaInfo->pUsageCounts->GetMetaStructPointer() + idx, - consumer); - } - pusage_counts_names += variable_name + ", "; - } - out << "\t\t" << "VkMicromapUsageEXT " << pusage_counts_array << "[] = {" << pusage_counts_names << "};" << std::endl; - } - std::string pp_usage_counts_array = "NULL"; - if (structInfo->ppUsageCounts != NULL) { - pp_usage_counts_array = "ppUsageCounts_" + std::to_string(consumer.GetNextId()); - std::string pp_usage_counts_names; - for (uint32_t idx0 = 0; idx0 < structInfo->usageCountsCount; ++idx0) { - for (uint32_t idx1 = 0; idx1 < 1; ++idx1) { - std::string variable_name = "NULL"; - variable_name = GenerateStruct_VkMicromapUsageEXT(out, - &(structInfo->ppUsageCounts[idx0][idx1]), - &(metaInfo->ppUsageCounts->GetMetaStructPointer()[idx0][idx1]), - consumer); - pp_usage_counts_names += variable_name + ", "; + if (structInfo->pStripeInfos + idx != NULL) { + variable_name = GenerateStruct_VkRenderPassStripeInfoARM(out, + structInfo->pStripeInfos + idx, + metaInfo->pStripeInfos->GetMetaStructPointer() + idx, + consumer); } + pstripe_infos_names += variable_name + ", "; } + out << "\t\t" << "VkRenderPassStripeInfoARM " << pstripe_infos_array << "[] = {" << pstripe_infos_names << "};" << std::endl; } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->displacementBiasAndScaleFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->displacementVectorFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->displacementBiasAndScaleBuffer.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->displacementBiasAndScaleStride << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->displacementVectorBuffer.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->displacementVectorStride << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->displacedMicromapPrimitiveFlags.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->displacedMicromapPrimitiveFlagsStride << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkIndexType(" << structInfo->indexType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indexBuffer.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indexStride << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->baseTriangle << "," << std::endl; - struct_body << "\t\t\t" << structInfo->usageCountsCount << "," << std::endl; - struct_body << "\t\t\t" << pusage_counts_array << "," << std::endl; - struct_body << "\t\t\t" << pp_usage_counts_array << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->micromap) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureTrianglesDisplacementMicromapNV"); - out << "\t\t" << "VkAccelerationStructureTrianglesDisplacementMicromapNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->stripeInfoCount << "," << std::endl; + struct_body << "\t\t\t" << pstripe_infos_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassStripeBeginInfoARM"); + out << "\t\t" << "VkRenderPassStripeBeginInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDisplacementMicromapFeaturesNV(std::ostream &out, const VkPhysicalDeviceDisplacementMicromapFeaturesNV* structInfo, Decoded_VkPhysicalDeviceDisplacementMicromapFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassStripeInfoARM(std::ostream &out, const VkRenderPassStripeInfoARM* structInfo, Decoded_VkRenderPassStripeInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string stripe_area_info_var = GenerateStruct_VkRect2D(out, + &structInfo->stripeArea, + metaInfo->stripeArea, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->displacementMicromap << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDisplacementMicromapFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceDisplacementMicromapFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << stripe_area_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassStripeInfoARM"); + out << "\t\t" << "VkRenderPassStripeInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDisplacementMicromapPropertiesNV(std::ostream &out, const VkPhysicalDeviceDisplacementMicromapPropertiesNV* structInfo, Decoded_VkPhysicalDeviceDisplacementMicromapPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassStripeSubmitInfoARM(std::ostream &out, const VkRenderPassStripeSubmitInfoARM* structInfo, Decoded_VkRenderPassStripeSubmitInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pstripe_semaphore_infos_array = "NULL"; + if (structInfo->pStripeSemaphoreInfos != NULL) { + pstripe_semaphore_infos_array = "pStripeSemaphoreInfos_" + std::to_string(consumer.GetNextId()); + std::string pstripe_semaphore_infos_names; + for (uint32_t idx = 0; idx < structInfo->stripeSemaphoreInfoCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pStripeSemaphoreInfos + idx != NULL) { + variable_name = GenerateStruct_VkSemaphoreSubmitInfo(out, + structInfo->pStripeSemaphoreInfos + idx, + metaInfo->pStripeSemaphoreInfos->GetMetaStructPointer() + idx, + consumer); + } + pstripe_semaphore_infos_names += variable_name + ", "; + } + out << "\t\t" << "VkSemaphoreSubmitInfo " << pstripe_semaphore_infos_array << "[] = {" << pstripe_semaphore_infos_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDisplacementMicromapSubdivisionLevel << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDisplacementMicromapPropertiesNV"); - out << "\t\t" << "VkPhysicalDeviceDisplacementMicromapPropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->stripeSemaphoreInfoCount << "," << std::endl; + struct_body << "\t\t\t" << pstripe_semaphore_infos_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassStripeSubmitInfoARM"); + out << "\t\t" << "VkRenderPassStripeSubmitInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI(std::ostream &out, const VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI* structInfo, Decoded_VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT(std::ostream &out, const VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->clustercullingShader << "," << std::endl; - struct_body << "\t\t\t" << structInfo->multiviewClusterCullingShader << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceClusterCullingShaderFeaturesHUAWEI"); - out << "\t\t" << "VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentDensityMapOffset << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentDensityMapOffsetFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI(std::ostream &out, const VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI* structInfo, Decoded_VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT(std::ostream &out, const VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string fragment_density_offset_granularity_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->fragmentDensityOffsetGranularity, + metaInfo->fragmentDensityOffsetGranularity, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->maxWorkGroupCount[0]), 3) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->maxWorkGroupSize[0]), 3) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxOutputClusterCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indirectBufferOffsetAlignment << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceClusterCullingShaderPropertiesHUAWEI"); - out << "\t\t" << "VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << fragment_density_offset_granularity_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentDensityMapOffsetPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI(std::ostream &out, const VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI* structInfo, Decoded_VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassFragmentDensityMapOffsetEndInfoEXT(std::ostream &out, const VkRenderPassFragmentDensityMapOffsetEndInfoEXT* structInfo, Decoded_VkRenderPassFragmentDensityMapOffsetEndInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pfragment_density_offsets_array = "NULL"; + if (structInfo->pFragmentDensityOffsets != NULL) { + pfragment_density_offsets_array = "pFragmentDensityOffsets_" + std::to_string(consumer.GetNextId()); + std::string pfragment_density_offsets_names; + for (uint32_t idx = 0; idx < structInfo->fragmentDensityOffsetCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pFragmentDensityOffsets + idx != NULL) { + variable_name = GenerateStruct_VkOffset2D(out, + structInfo->pFragmentDensityOffsets + idx, + metaInfo->pFragmentDensityOffsets->GetMetaStructPointer() + idx, + consumer); + } + pfragment_density_offsets_names += variable_name + ", "; + } + out << "\t\t" << "VkOffset2D " << pfragment_density_offsets_array << "[] = {" << pfragment_density_offsets_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->clusterShadingRate << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceClusterCullingShaderVrsFeaturesHUAWEI"); - out << "\t\t" << "VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->fragmentDensityOffsetCount << "," << std::endl; + struct_body << "\t\t\t" << pfragment_density_offsets_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassFragmentDensityMapOffsetEndInfoEXT"); + out << "\t\t" << "VkRenderPassFragmentDensityMapOffsetEndInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT(std::ostream &out, const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindPipelineIndirectCommandNV(std::ostream &out, const VkBindPipelineIndirectCommandNV* structInfo, Decoded_VkBindPipelineIndirectCommandNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->borderColorSwizzle << "," << std::endl; - struct_body << "\t\t\t" << structInfo->borderColorSwizzleFromImage << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceBorderColorSwizzleFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceBorderColorSwizzleFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->pipelineAddress << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindPipelineIndirectCommandNV"); + out << "\t\t" << "VkBindPipelineIndirectCommandNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSamplerBorderColorComponentMappingCreateInfoEXT(std::ostream &out, const VkSamplerBorderColorComponentMappingCreateInfoEXT* structInfo, Decoded_VkSamplerBorderColorComponentMappingCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkComputePipelineIndirectBufferInfoNV(std::ostream &out, const VkComputePipelineIndirectBufferInfoNV* structInfo, Decoded_VkComputePipelineIndirectBufferInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string components_info_var = GenerateStruct_VkComponentMapping(out, - &structInfo->components, - metaInfo->components, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << components_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srgb << ","; - std::string variable_name = consumer.AddStruct(struct_body, "samplerBorderColorComponentMappingCreateInfoEXT"); - out << "\t\t" << "VkSamplerBorderColorComponentMappingCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->deviceAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineDeviceAddressCaptureReplay << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "computePipelineIndirectBufferInfoNV"); + out << "\t\t" << "VkComputePipelineIndirectBufferInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(std::ostream &out, const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT* structInfo, Decoded_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV(std::ostream &out, const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV* structInfo, Decoded_VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pageableDeviceLocalMemory << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePageableDeviceLocalMemoryFeaturesEXT"); - out << "\t\t" << "VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->deviceGeneratedCompute << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceGeneratedComputePipelines << "," << std::endl; + struct_body << "\t\t\t" << structInfo->deviceGeneratedComputeCaptureReplay << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDeviceGeneratedCommandsComputeFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderCorePropertiesARM(std::ostream &out, const VkPhysicalDeviceShaderCorePropertiesARM* structInfo, Decoded_VkPhysicalDeviceShaderCorePropertiesARM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineIndirectDeviceAddressInfoNV(std::ostream &out, const VkPipelineIndirectDeviceAddressInfoNV* structInfo, Decoded_VkPipelineIndirectDeviceAddressInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pixelRate << "," << std::endl; - struct_body << "\t\t\t" << structInfo->texelRate << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fmaRate << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderCorePropertiesARM"); - out << "\t\t" << "VkPhysicalDeviceShaderCorePropertiesARM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineBindPoint(" << structInfo->pipelineBindPoint << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipeline) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineIndirectDeviceAddressInfoNV"); + out << "\t\t" << "VkPipelineIndirectDeviceAddressInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDeviceQueueShaderCoreControlCreateInfoARM(std::ostream &out, const VkDeviceQueueShaderCoreControlCreateInfoARM* structInfo, Decoded_VkDeviceQueueShaderCoreControlCreateInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAccelerationStructureGeometryLinearSweptSpheresDataNV(std::ostream &out, const VkAccelerationStructureGeometryLinearSweptSpheresDataNV* structInfo, Decoded_VkAccelerationStructureGeometryLinearSweptSpheresDataNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderCoreCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "deviceQueueShaderCoreControlCreateInfoARM"); - out << "\t\t" << "VkDeviceQueueShaderCoreControlCreateInfoARM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->vertexFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexData.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexStride << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->radiusFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->radiusData.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->radiusStride << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkIndexType(" << structInfo->indexType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indexData.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indexStride << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkRayTracingLssIndexingModeNV(" << structInfo->indexingMode << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkRayTracingLssPrimitiveEndCapsModeNV(" << structInfo->endCapsMode << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureGeometryLinearSweptSpheresDataNV"); + out << "\t\t" << "VkAccelerationStructureGeometryLinearSweptSpheresDataNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSchedulingControlsFeaturesARM(std::ostream &out, const VkPhysicalDeviceSchedulingControlsFeaturesARM* structInfo, Decoded_VkPhysicalDeviceSchedulingControlsFeaturesARM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAccelerationStructureGeometrySpheresDataNV(std::ostream &out, const VkAccelerationStructureGeometrySpheresDataNV* structInfo, Decoded_VkAccelerationStructureGeometrySpheresDataNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->schedulingControls << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSchedulingControlsFeaturesARM"); - out << "\t\t" << "VkPhysicalDeviceSchedulingControlsFeaturesARM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->vertexFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexData.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->vertexStride << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->radiusFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->radiusData.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->radiusStride << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkIndexType(" << structInfo->indexType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indexData.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << structInfo->indexStride << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureGeometrySpheresDataNV"); + out << "\t\t" << "VkAccelerationStructureGeometrySpheresDataNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSchedulingControlsPropertiesARM(std::ostream &out, const VkPhysicalDeviceSchedulingControlsPropertiesARM* structInfo, Decoded_VkPhysicalDeviceSchedulingControlsPropertiesARM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV(std::ostream &out, const VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV* structInfo, Decoded_VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPhysicalDeviceSchedulingControlsFlagsARM(" << structInfo->schedulingControlsFlags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSchedulingControlsPropertiesARM"); - out << "\t\t" << "VkPhysicalDeviceSchedulingControlsPropertiesARM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->spheres << "," << std::endl; + struct_body << "\t\t\t" << structInfo->linearSweptSpheres << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingLinearSweptSpheresFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageViewSlicedCreateInfoEXT(std::ostream &out, const VkImageViewSlicedCreateInfoEXT* structInfo, Decoded_VkImageViewSlicedCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceLinearColorAttachmentFeaturesNV(std::ostream &out, const VkPhysicalDeviceLinearColorAttachmentFeaturesNV* structInfo, Decoded_VkPhysicalDeviceLinearColorAttachmentFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sliceOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->sliceCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageViewSlicedCreateInfoEXT"); - out << "\t\t" << "VkImageViewSlicedCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->linearColorAttachment << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLinearColorAttachmentFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceLinearColorAttachmentFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT(std::ostream &out, const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT(std::ostream &out, const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageSlicedViewOf3D << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageSlicedViewOf3DFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->imageCompressionControlSwapchain << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageCompressionControlSwapchainFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDescriptorSetBindingReferenceVALVE(std::ostream &out, const VkDescriptorSetBindingReferenceVALVE* structInfo, Decoded_VkDescriptorSetBindingReferenceVALVE* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkImageViewSampleWeightCreateInfoQCOM(std::ostream &out, const VkImageViewSampleWeightCreateInfoQCOM* structInfo, Decoded_VkImageViewSampleWeightCreateInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string filter_center_info_var = GenerateStruct_VkOffset2D(out, + &structInfo->filterCenter, + metaInfo->filterCenter, + consumer); + std::string filter_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->filterSize, + metaInfo->filterSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->descriptorSetLayout) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->binding << ","; - std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetBindingReferenceVALVE"); - out << "\t\t" << "VkDescriptorSetBindingReferenceVALVE " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << filter_center_info_var << "," << std::endl; + struct_body << "\t\t\t" << filter_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->numPhases << ","; + std::string variable_name = consumer.AddStruct(struct_body, "imageViewSampleWeightCreateInfoQCOM"); + out << "\t\t" << "VkImageViewSampleWeightCreateInfoQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDescriptorSetLayoutHostMappingInfoVALVE(std::ostream &out, const VkDescriptorSetLayoutHostMappingInfoVALVE* structInfo, Decoded_VkDescriptorSetLayoutHostMappingInfoVALVE* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceImageProcessingFeaturesQCOM(std::ostream &out, const VkPhysicalDeviceImageProcessingFeaturesQCOM* structInfo, Decoded_VkPhysicalDeviceImageProcessingFeaturesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorOffset << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorSize << ","; - std::string variable_name = consumer.AddStruct(struct_body, "descriptorSetLayoutHostMappingInfoVALVE"); - out << "\t\t" << "VkDescriptorSetLayoutHostMappingInfoVALVE " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->textureSampleWeighted << "," << std::endl; + struct_body << "\t\t\t" << structInfo->textureBoxFilter << "," << std::endl; + struct_body << "\t\t\t" << structInfo->textureBlockMatch << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageProcessingFeaturesQCOM"); + out << "\t\t" << "VkPhysicalDeviceImageProcessingFeaturesQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE(std::ostream &out, const VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE* structInfo, Decoded_VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceImageProcessingPropertiesQCOM(std::ostream &out, const VkPhysicalDeviceImageProcessingPropertiesQCOM* structInfo, Decoded_VkPhysicalDeviceImageProcessingPropertiesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string max_weight_filter_dimension_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxWeightFilterDimension, + metaInfo->maxWeightFilterDimension, + consumer); + std::string max_block_match_region_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxBlockMatchRegion, + metaInfo->maxBlockMatchRegion, + consumer); + std::string max_box_filter_block_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->maxBoxFilterBlockSize, + metaInfo->maxBoxFilterBlockSize, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->descriptorSetHostMapping << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDescriptorSetHostMappingFeaturesVALVE"); - out << "\t\t" << "VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxWeightFilterPhases << "," << std::endl; + struct_body << "\t\t\t" << max_weight_filter_dimension_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_block_match_region_info_var << "," << std::endl; + struct_body << "\t\t\t" << max_box_filter_block_size_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageProcessingPropertiesQCOM"); + out << "\t\t" << "VkPhysicalDeviceImageProcessingPropertiesQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT(std::ostream &out, const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceNestedCommandBufferFeaturesEXT(std::ostream &out, const VkPhysicalDeviceNestedCommandBufferFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceNestedCommandBufferFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->nonSeamlessCubeMap << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceNonSeamlessCubeMapFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->nestedCommandBuffer << "," << std::endl; + struct_body << "\t\t\t" << structInfo->nestedCommandBufferRendering << "," << std::endl; + struct_body << "\t\t\t" << structInfo->nestedCommandBufferSimultaneousUse << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceNestedCommandBufferFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceNestedCommandBufferFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRenderPassStripedFeaturesARM(std::ostream &out, const VkPhysicalDeviceRenderPassStripedFeaturesARM* structInfo, Decoded_VkPhysicalDeviceRenderPassStripedFeaturesARM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceNestedCommandBufferPropertiesEXT(std::ostream &out, const VkPhysicalDeviceNestedCommandBufferPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceNestedCommandBufferPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->renderPassStriped << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRenderPassStripedFeaturesARM"); - out << "\t\t" << "VkPhysicalDeviceRenderPassStripedFeaturesARM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->maxCommandBufferNestingLevel << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceNestedCommandBufferPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceNestedCommandBufferPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRenderPassStripedPropertiesARM(std::ostream &out, const VkPhysicalDeviceRenderPassStripedPropertiesARM* structInfo, Decoded_VkPhysicalDeviceRenderPassStripedPropertiesARM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkExternalMemoryAcquireUnmodifiedEXT(std::ostream &out, const VkExternalMemoryAcquireUnmodifiedEXT* structInfo, Decoded_VkExternalMemoryAcquireUnmodifiedEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string render_pass_stripe_granularity_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->renderPassStripeGranularity, - metaInfo->renderPassStripeGranularity, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << render_pass_stripe_granularity_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxRenderPassStripes << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRenderPassStripedPropertiesARM"); - out << "\t\t" << "VkPhysicalDeviceRenderPassStripedPropertiesARM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->acquireUnmodifiedMemory << ","; + std::string variable_name = consumer.AddStruct(struct_body, "externalMemoryAcquireUnmodifiedEXT"); + out << "\t\t" << "VkExternalMemoryAcquireUnmodifiedEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassStripeBeginInfoARM(std::ostream &out, const VkRenderPassStripeBeginInfoARM* structInfo, Decoded_VkRenderPassStripeBeginInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkColorBlendAdvancedEXT(std::ostream &out, const VkColorBlendAdvancedEXT* structInfo, Decoded_VkColorBlendAdvancedEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstripe_infos_array = "NULL"; - if (structInfo->pStripeInfos != NULL) { - pstripe_infos_array = "pStripeInfos_" + std::to_string(consumer.GetNextId()); - std::string pstripe_infos_names; - for (uint32_t idx = 0; idx < structInfo->stripeInfoCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStripeInfos + idx != NULL) { - variable_name = GenerateStruct_VkRenderPassStripeInfoARM(out, - structInfo->pStripeInfos + idx, - metaInfo->pStripeInfos->GetMetaStructPointer() + idx, - consumer); - } - pstripe_infos_names += variable_name + ", "; - } - out << "\t\t" << "VkRenderPassStripeInfoARM " << pstripe_infos_array << "[] = {" << pstripe_infos_names << "};" << std::endl; - } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stripeInfoCount << "," << std::endl; - struct_body << "\t\t\t" << pstripe_infos_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassStripeBeginInfoARM"); - out << "\t\t" << "VkRenderPassStripeBeginInfoARM " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkBlendOp(" << structInfo->advancedBlendOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->srcPremultiplied << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstPremultiplied << "," << std::endl; + struct_body << "\t\t\t" << "VkBlendOverlapEXT(" << structInfo->blendOverlap << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->clampResults << ","; + std::string variable_name = consumer.AddStruct(struct_body, "colorBlendAdvancedEXT"); + out << "\t\t" << "VkColorBlendAdvancedEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassStripeInfoARM(std::ostream &out, const VkRenderPassStripeInfoARM* structInfo, Decoded_VkRenderPassStripeInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkColorBlendEquationEXT(std::ostream &out, const VkColorBlendEquationEXT* structInfo, Decoded_VkColorBlendEquationEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string stripe_area_info_var = GenerateStruct_VkRect2D(out, - &structInfo->stripeArea, - metaInfo->stripeArea, - consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << stripe_area_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassStripeInfoARM"); - out << "\t\t" << "VkRenderPassStripeInfoARM " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkBlendFactor(" << structInfo->srcColorBlendFactor << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBlendFactor(" << structInfo->dstColorBlendFactor << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBlendOp(" << structInfo->colorBlendOp << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBlendFactor(" << structInfo->srcAlphaBlendFactor << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBlendFactor(" << structInfo->dstAlphaBlendFactor << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBlendOp(" << structInfo->alphaBlendOp << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "colorBlendEquationEXT"); + out << "\t\t" << "VkColorBlendEquationEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassStripeSubmitInfoARM(std::ostream &out, const VkRenderPassStripeSubmitInfoARM* structInfo, Decoded_VkRenderPassStripeSubmitInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT(std::ostream &out, const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT* structInfo, Decoded_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pstripe_semaphore_infos_array = "NULL"; - if (structInfo->pStripeSemaphoreInfos != NULL) { - pstripe_semaphore_infos_array = "pStripeSemaphoreInfos_" + std::to_string(consumer.GetNextId()); - std::string pstripe_semaphore_infos_names; - for (uint32_t idx = 0; idx < structInfo->stripeSemaphoreInfoCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pStripeSemaphoreInfos + idx != NULL) { - variable_name = GenerateStruct_VkSemaphoreSubmitInfo(out, - structInfo->pStripeSemaphoreInfos + idx, - metaInfo->pStripeSemaphoreInfos->GetMetaStructPointer() + idx, - consumer); - } - pstripe_semaphore_infos_names += variable_name + ", "; - } - out << "\t\t" << "VkSemaphoreSubmitInfo " << pstripe_semaphore_infos_array << "[] = {" << pstripe_semaphore_infos_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->stripeSemaphoreInfoCount << "," << std::endl; - struct_body << "\t\t\t" << pstripe_semaphore_infos_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassStripeSubmitInfoARM"); - out << "\t\t" << "VkRenderPassStripeSubmitInfoARM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3TessellationDomainOrigin << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3DepthClampEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3PolygonMode << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3RasterizationSamples << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3SampleMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3AlphaToCoverageEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3AlphaToOneEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3LogicOpEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3ColorBlendEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3ColorBlendEquation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3ColorWriteMask << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3RasterizationStream << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3ConservativeRasterizationMode << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3ExtraPrimitiveOverestimationSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3DepthClipEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3SampleLocationsEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3ColorBlendAdvanced << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3ProvokingVertexMode << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3LineRasterizationMode << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3LineStippleEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3DepthClipNegativeOneToOne << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3ViewportWScalingEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3ViewportSwizzle << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3CoverageToColorEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3CoverageToColorLocation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3CoverageModulationMode << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3CoverageModulationTableEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3CoverageModulationTable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3CoverageReductionMode << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3RepresentativeFragmentTestEnable << "," << std::endl; + struct_body << "\t\t\t" << structInfo->extendedDynamicState3ShadingRateImageEnable << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExtendedDynamicState3FeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT(std::ostream &out, const VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT(std::ostream &out, const VkPhysicalDeviceExtendedDynamicState3PropertiesEXT* structInfo, Decoded_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentDensityMapOffset << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentDensityMapOffsetFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->dynamicPrimitiveTopologyUnrestricted << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExtendedDynamicState3PropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceExtendedDynamicState3PropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT(std::ostream &out, const VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT(std::ostream &out, const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string fragment_density_offset_granularity_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->fragmentDensityOffsetGranularity, - metaInfo->fragmentDensityOffsetGranularity, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << fragment_density_offset_granularity_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceFragmentDensityMapOffsetPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->subpassMergeFeedback << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSubpassMergeFeedbackFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassFragmentDensityMapOffsetEndInfoEXT(std::ostream &out, const VkRenderPassFragmentDensityMapOffsetEndInfoEXT* structInfo, Decoded_VkRenderPassFragmentDensityMapOffsetEndInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassCreationControlEXT(std::ostream &out, const VkRenderPassCreationControlEXT* structInfo, Decoded_VkRenderPassCreationControlEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pfragment_density_offsets_array = "NULL"; - if (structInfo->pFragmentDensityOffsets != NULL) { - pfragment_density_offsets_array = "pFragmentDensityOffsets_" + std::to_string(consumer.GetNextId()); - std::string pfragment_density_offsets_names; - for (uint32_t idx = 0; idx < structInfo->fragmentDensityOffsetCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pFragmentDensityOffsets + idx != NULL) { - variable_name = GenerateStruct_VkOffset2D(out, - structInfo->pFragmentDensityOffsets + idx, - metaInfo->pFragmentDensityOffsets->GetMetaStructPointer() + idx, - consumer); - } - pfragment_density_offsets_names += variable_name + ", "; - } - out << "\t\t" << "VkOffset2D " << pfragment_density_offsets_array << "[] = {" << pfragment_density_offsets_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->fragmentDensityOffsetCount << "," << std::endl; - struct_body << "\t\t\t" << pfragment_density_offsets_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassFragmentDensityMapOffsetEndInfoEXT"); - out << "\t\t" << "VkRenderPassFragmentDensityMapOffsetEndInfoEXT " << variable_name << " {" << std::endl; - out << "\t\t" << struct_body.str() << std::endl; - out << "\t\t" << "};" << std::endl; - return variable_name; -} - - -std::string GenerateStruct_VkBindPipelineIndirectCommandNV(std::ostream &out, const VkBindPipelineIndirectCommandNV* structInfo, Decoded_VkBindPipelineIndirectCommandNV* metaInfo, VulkanCppConsumerBase &consumer){ - std::stringstream struct_body; - struct_body << "\t" << structInfo->pipelineAddress << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "bindPipelineIndirectCommandNV"); - out << "\t\t" << "VkBindPipelineIndirectCommandNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->disallowMerging << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassCreationControlEXT"); + out << "\t\t" << "VkRenderPassCreationControlEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkComputePipelineIndirectBufferInfoNV(std::ostream &out, const VkComputePipelineIndirectBufferInfoNV* structInfo, Decoded_VkComputePipelineIndirectBufferInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassCreationFeedbackCreateInfoEXT(std::ostream &out, const VkRenderPassCreationFeedbackCreateInfoEXT* structInfo, Decoded_VkRenderPassCreationFeedbackCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string prender_pass_feedback_name = "NULL"; + if (structInfo->pRenderPassFeedback != NULL) { + prender_pass_feedback_name = GenerateStruct_VkRenderPassCreationFeedbackInfoEXT(out, + structInfo->pRenderPassFeedback, + metaInfo->pRenderPassFeedback->GetMetaStructPointer(), + consumer); + prender_pass_feedback_name.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceAddress << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineDeviceAddressCaptureReplay << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "computePipelineIndirectBufferInfoNV"); - out << "\t\t" << "VkComputePipelineIndirectBufferInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << prender_pass_feedback_name << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassCreationFeedbackCreateInfoEXT"); + out << "\t\t" << "VkRenderPassCreationFeedbackCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV(std::ostream &out, const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV* structInfo, Decoded_VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassCreationFeedbackInfoEXT(std::ostream &out, const VkRenderPassCreationFeedbackInfoEXT* structInfo, Decoded_VkRenderPassCreationFeedbackInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceGeneratedCompute << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceGeneratedComputePipelines << "," << std::endl; - struct_body << "\t\t\t" << structInfo->deviceGeneratedComputeCaptureReplay << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDeviceGeneratedCommandsComputeFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->postMergeSubpassCount << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassCreationFeedbackInfoEXT"); + out << "\t\t" << "VkRenderPassCreationFeedbackInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineIndirectDeviceAddressInfoNV(std::ostream &out, const VkPipelineIndirectDeviceAddressInfoNV* structInfo, Decoded_VkPipelineIndirectDeviceAddressInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassSubpassFeedbackCreateInfoEXT(std::ostream &out, const VkRenderPassSubpassFeedbackCreateInfoEXT* structInfo, Decoded_VkRenderPassSubpassFeedbackCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string psubpass_feedback_name = "NULL"; + if (structInfo->pSubpassFeedback != NULL) { + psubpass_feedback_name = GenerateStruct_VkRenderPassSubpassFeedbackInfoEXT(out, + structInfo->pSubpassFeedback, + metaInfo->pSubpassFeedback->GetMetaStructPointer(), + consumer); + psubpass_feedback_name.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkPipelineBindPoint(" << structInfo->pipelineBindPoint << ")" << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->pipeline) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineIndirectDeviceAddressInfoNV"); - out << "\t\t" << "VkPipelineIndirectDeviceAddressInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << psubpass_feedback_name << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassSubpassFeedbackCreateInfoEXT"); + out << "\t\t" << "VkRenderPassSubpassFeedbackCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAccelerationStructureGeometryLinearSweptSpheresDataNV(std::ostream &out, const VkAccelerationStructureGeometryLinearSweptSpheresDataNV* structInfo, Decoded_VkAccelerationStructureGeometryLinearSweptSpheresDataNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkRenderPassSubpassFeedbackInfoEXT(std::ostream &out, const VkRenderPassSubpassFeedbackInfoEXT* structInfo, Decoded_VkRenderPassSubpassFeedbackInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->vertexFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexData.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexStride << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->radiusFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->radiusData.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->radiusStride << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkIndexType(" << structInfo->indexType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indexData.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indexStride << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkRayTracingLssIndexingModeNV(" << structInfo->indexingMode << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkRayTracingLssPrimitiveEndCapsModeNV(" << structInfo->endCapsMode << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureGeometryLinearSweptSpheresDataNV"); - out << "\t\t" << "VkAccelerationStructureGeometryLinearSweptSpheresDataNV " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkSubpassMergeStatusEXT(" << structInfo->subpassMergeStatus << ")" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->postMergeIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassSubpassFeedbackInfoEXT"); + out << "\t\t" << "VkRenderPassSubpassFeedbackInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAccelerationStructureGeometrySpheresDataNV(std::ostream &out, const VkAccelerationStructureGeometrySpheresDataNV* structInfo, Decoded_VkAccelerationStructureGeometrySpheresDataNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDirectDriverLoadingInfoLUNARG(std::ostream &out, const VkDirectDriverLoadingInfoLUNARG* structInfo, Decoded_VkDirectDriverLoadingInfoLUNARG* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->vertexFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexData.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->vertexStride << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->radiusFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->radiusData.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->radiusStride << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkIndexType(" << structInfo->indexType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indexData.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << structInfo->indexStride << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "accelerationStructureGeometrySpheresDataNV"); - out << "\t\t" << "VkAccelerationStructureGeometrySpheresDataNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDirectDriverLoadingFlagsLUNARG(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pfnGetInstanceProcAddr << ","; + std::string variable_name = consumer.AddStruct(struct_body, "directDriverLoadingInfoLUNARG"); + out << "\t\t" << "VkDirectDriverLoadingInfoLUNARG " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV(std::ostream &out, const VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV* structInfo, Decoded_VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDirectDriverLoadingListLUNARG(std::ostream &out, const VkDirectDriverLoadingListLUNARG* structInfo, Decoded_VkDirectDriverLoadingListLUNARG* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pdrivers_array = "NULL"; + if (structInfo->pDrivers != NULL) { + pdrivers_array = "pDrivers_" + std::to_string(consumer.GetNextId()); + std::string pdrivers_names; + for (uint32_t idx = 0; idx < structInfo->driverCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pDrivers + idx != NULL) { + variable_name = GenerateStruct_VkDirectDriverLoadingInfoLUNARG(out, + structInfo->pDrivers + idx, + metaInfo->pDrivers->GetMetaStructPointer() + idx, + consumer); + } + pdrivers_names += variable_name + ", "; + } + out << "\t\t" << "VkDirectDriverLoadingInfoLUNARG " << pdrivers_array << "[] = {" << pdrivers_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->spheres << "," << std::endl; - struct_body << "\t\t\t" << structInfo->linearSweptSpheres << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingLinearSweptSpheresFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDirectDriverLoadingModeLUNARG(" << structInfo->mode << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->driverCount << "," << std::endl; + struct_body << "\t\t\t" << pdrivers_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "directDriverLoadingListLUNARG"); + out << "\t\t" << "VkDirectDriverLoadingListLUNARG " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceLinearColorAttachmentFeaturesNV(std::ostream &out, const VkPhysicalDeviceLinearColorAttachmentFeaturesNV* structInfo, Decoded_VkPhysicalDeviceLinearColorAttachmentFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->linearColorAttachment << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLinearColorAttachmentFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceLinearColorAttachmentFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderModuleIdentifier << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderModuleIdentifierFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT(std::ostream &out, const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(std::ostream &out, const VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->imageCompressionControlSwapchain << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageCompressionControlSwapchainFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->shaderModuleIdentifierAlgorithmUUID[0]), VK_UUID_SIZE) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderModuleIdentifierPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkImageViewSampleWeightCreateInfoQCOM(std::ostream &out, const VkImageViewSampleWeightCreateInfoQCOM* structInfo, Decoded_VkImageViewSampleWeightCreateInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPipelineShaderStageModuleIdentifierCreateInfoEXT(std::ostream &out, const VkPipelineShaderStageModuleIdentifierCreateInfoEXT* structInfo, Decoded_VkPipelineShaderStageModuleIdentifierCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string filter_center_info_var = GenerateStruct_VkOffset2D(out, - &structInfo->filterCenter, - metaInfo->filterCenter, - consumer); - std::string filter_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->filterSize, - metaInfo->filterSize, - consumer); + std::string pidentifier_array = "NULL"; + if (structInfo->pIdentifier != NULL) { + std::string pidentifier_values; + for (uint32_t idx0 = 0; idx0 < structInfo->identifierSize; ++idx0) { + pidentifier_values += std::to_string(structInfo->pIdentifier[idx0]) + ", "; + } + pidentifier_array = "pIdentifier_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint8_t " << pidentifier_array << "[] = {" << pidentifier_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << filter_center_info_var << "," << std::endl; - struct_body << "\t\t\t" << filter_size_info_var << "," << std::endl; - struct_body << "\t\t\t" << structInfo->numPhases << ","; - std::string variable_name = consumer.AddStruct(struct_body, "imageViewSampleWeightCreateInfoQCOM"); - out << "\t\t" << "VkImageViewSampleWeightCreateInfoQCOM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->identifierSize << "," << std::endl; + struct_body << "\t\t\t" << pidentifier_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineShaderStageModuleIdentifierCreateInfoEXT"); + out << "\t\t" << "VkPipelineShaderStageModuleIdentifierCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceImageProcessingFeaturesQCOM(std::ostream &out, const VkPhysicalDeviceImageProcessingFeaturesQCOM* structInfo, Decoded_VkPhysicalDeviceImageProcessingFeaturesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkShaderModuleIdentifierEXT(std::ostream &out, const VkShaderModuleIdentifierEXT* structInfo, Decoded_VkShaderModuleIdentifierEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->textureSampleWeighted << "," << std::endl; - struct_body << "\t\t\t" << structInfo->textureBoxFilter << "," << std::endl; - struct_body << "\t\t\t" << structInfo->textureBlockMatch << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageProcessingFeaturesQCOM"); - out << "\t\t" << "VkPhysicalDeviceImageProcessingFeaturesQCOM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->identifierSize << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->identifier[0]), VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "shaderModuleIdentifierEXT"); + out << "\t\t" << "VkShaderModuleIdentifierEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceImageProcessingPropertiesQCOM(std::ostream &out, const VkPhysicalDeviceImageProcessingPropertiesQCOM* structInfo, Decoded_VkPhysicalDeviceImageProcessingPropertiesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkOpticalFlowExecuteInfoNV(std::ostream &out, const VkOpticalFlowExecuteInfoNV* structInfo, Decoded_VkOpticalFlowExecuteInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string max_weight_filter_dimension_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxWeightFilterDimension, - metaInfo->maxWeightFilterDimension, - consumer); - std::string max_block_match_region_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxBlockMatchRegion, - metaInfo->maxBlockMatchRegion, - consumer); - std::string max_box_filter_block_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->maxBoxFilterBlockSize, - metaInfo->maxBoxFilterBlockSize, - consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxWeightFilterPhases << "," << std::endl; - struct_body << "\t\t\t" << max_weight_filter_dimension_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_block_match_region_info_var << "," << std::endl; - struct_body << "\t\t\t" << max_box_filter_block_size_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceImageProcessingPropertiesQCOM"); - out << "\t\t" << "VkPhysicalDeviceImageProcessingPropertiesQCOM " << variable_name << " {" << std::endl; + std::string pregions_array = "NULL"; + if (structInfo->pRegions != NULL) { + pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkRect2D " << pregions_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pRegions, structInfo->regionCount) << ";" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkOpticalFlowExecuteFlagsNV(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; + struct_body << "\t\t\t" << pregions_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "opticalFlowExecuteInfoNV"); + out << "\t\t" << "VkOpticalFlowExecuteInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceNestedCommandBufferFeaturesEXT(std::ostream &out, const VkPhysicalDeviceNestedCommandBufferFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceNestedCommandBufferFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkOpticalFlowImageFormatInfoNV(std::ostream &out, const VkOpticalFlowImageFormatInfoNV* structInfo, Decoded_VkOpticalFlowImageFormatInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->nestedCommandBuffer << "," << std::endl; - struct_body << "\t\t\t" << structInfo->nestedCommandBufferRendering << "," << std::endl; - struct_body << "\t\t\t" << structInfo->nestedCommandBufferSimultaneousUse << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceNestedCommandBufferFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceNestedCommandBufferFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkOpticalFlowUsageFlagsNV(" << structInfo->usage << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "opticalFlowImageFormatInfoNV"); + out << "\t\t" << "VkOpticalFlowImageFormatInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceNestedCommandBufferPropertiesEXT(std::ostream &out, const VkPhysicalDeviceNestedCommandBufferPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceNestedCommandBufferPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkOpticalFlowImageFormatPropertiesNV(std::ostream &out, const VkOpticalFlowImageFormatPropertiesNV* structInfo, Decoded_VkOpticalFlowImageFormatPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxCommandBufferNestingLevel << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceNestedCommandBufferPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceNestedCommandBufferPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "opticalFlowImageFormatPropertiesNV"); + out << "\t\t" << "VkOpticalFlowImageFormatPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkExternalMemoryAcquireUnmodifiedEXT(std::ostream &out, const VkExternalMemoryAcquireUnmodifiedEXT* structInfo, Decoded_VkExternalMemoryAcquireUnmodifiedEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkOpticalFlowSessionCreateInfoNV(std::ostream &out, const VkOpticalFlowSessionCreateInfoNV* structInfo, Decoded_VkOpticalFlowSessionCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->acquireUnmodifiedMemory << ","; - std::string variable_name = consumer.AddStruct(struct_body, "externalMemoryAcquireUnmodifiedEXT"); - out << "\t\t" << "VkExternalMemoryAcquireUnmodifiedEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->width << "," << std::endl; + struct_body << "\t\t\t" << structInfo->height << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->imageFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->flowVectorFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->costFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkOpticalFlowGridSizeFlagsNV(" << structInfo->outputGridSize << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkOpticalFlowGridSizeFlagsNV(" << structInfo->hintGridSize << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkOpticalFlowPerformanceLevelNV(" << structInfo->performanceLevel << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkOpticalFlowSessionCreateFlagsNV(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "opticalFlowSessionCreateInfoNV"); + out << "\t\t" << "VkOpticalFlowSessionCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkColorBlendAdvancedEXT(std::ostream &out, const VkColorBlendAdvancedEXT* structInfo, Decoded_VkColorBlendAdvancedEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkOpticalFlowSessionCreatePrivateDataInfoNV(std::ostream &out, const VkOpticalFlowSessionCreatePrivateDataInfoNV* structInfo, Decoded_VkOpticalFlowSessionCreatePrivateDataInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkBlendOp(" << structInfo->advancedBlendOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcPremultiplied << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstPremultiplied << "," << std::endl; - struct_body << "\t\t\t" << "VkBlendOverlapEXT(" << structInfo->blendOverlap << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->clampResults << ","; - std::string variable_name = consumer.AddStruct(struct_body, "colorBlendAdvancedEXT"); - out << "\t\t" << "VkColorBlendAdvancedEXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->id << "," << std::endl; + struct_body << "\t\t\t" << structInfo->size << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pPrivateData << ","; + std::string variable_name = consumer.AddStruct(struct_body, "opticalFlowSessionCreatePrivateDataInfoNV"); + out << "\t\t" << "VkOpticalFlowSessionCreatePrivateDataInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkColorBlendEquationEXT(std::ostream &out, const VkColorBlendEquationEXT* structInfo, Decoded_VkColorBlendEquationEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceOpticalFlowFeaturesNV(std::ostream &out, const VkPhysicalDeviceOpticalFlowFeaturesNV* structInfo, Decoded_VkPhysicalDeviceOpticalFlowFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkBlendFactor(" << structInfo->srcColorBlendFactor << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBlendFactor(" << structInfo->dstColorBlendFactor << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBlendOp(" << structInfo->colorBlendOp << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBlendFactor(" << structInfo->srcAlphaBlendFactor << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBlendFactor(" << structInfo->dstAlphaBlendFactor << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBlendOp(" << structInfo->alphaBlendOp << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "colorBlendEquationEXT"); - out << "\t\t" << "VkColorBlendEquationEXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->opticalFlow << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceOpticalFlowFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceOpticalFlowFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT(std::ostream &out, const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT* structInfo, Decoded_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceOpticalFlowPropertiesNV(std::ostream &out, const VkPhysicalDeviceOpticalFlowPropertiesNV* structInfo, Decoded_VkPhysicalDeviceOpticalFlowPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3TessellationDomainOrigin << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3DepthClampEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3PolygonMode << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3RasterizationSamples << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3SampleMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3AlphaToCoverageEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3AlphaToOneEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3LogicOpEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3ColorBlendEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3ColorBlendEquation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3ColorWriteMask << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3RasterizationStream << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3ConservativeRasterizationMode << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3ExtraPrimitiveOverestimationSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3DepthClipEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3SampleLocationsEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3ColorBlendAdvanced << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3ProvokingVertexMode << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3LineRasterizationMode << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3LineStippleEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3DepthClipNegativeOneToOne << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3ViewportWScalingEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3ViewportSwizzle << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3CoverageToColorEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3CoverageToColorLocation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3CoverageModulationMode << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3CoverageModulationTableEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3CoverageModulationTable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3CoverageReductionMode << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3RepresentativeFragmentTestEnable << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedDynamicState3ShadingRateImageEnable << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExtendedDynamicState3FeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkOpticalFlowGridSizeFlagsNV(" << structInfo->supportedOutputGridSizes << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkOpticalFlowGridSizeFlagsNV(" << structInfo->supportedHintGridSizes << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->hintSupported << "," << std::endl; + struct_body << "\t\t\t" << structInfo->costSupported << "," << std::endl; + struct_body << "\t\t\t" << structInfo->bidirectionalFlowSupported << "," << std::endl; + struct_body << "\t\t\t" << structInfo->globalFlowSupported << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minWidth << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minHeight << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxWidth << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxHeight << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxNumRegionsOfInterest << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceOpticalFlowPropertiesNV"); + out << "\t\t" << "VkPhysicalDeviceOpticalFlowPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT(std::ostream &out, const VkPhysicalDeviceExtendedDynamicState3PropertiesEXT* structInfo, Decoded_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceLegacyDitheringFeaturesEXT(std::ostream &out, const VkPhysicalDeviceLegacyDitheringFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceLegacyDitheringFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dynamicPrimitiveTopologyUnrestricted << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExtendedDynamicState3PropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceExtendedDynamicState3PropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->legacyDithering << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLegacyDitheringFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceLegacyDitheringFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT(std::ostream &out, const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAndroidHardwareBufferFormatResolvePropertiesANDROID(std::ostream &out, const VkAndroidHardwareBufferFormatResolvePropertiesANDROID* structInfo, Decoded_VkAndroidHardwareBufferFormatResolvePropertiesANDROID* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->subpassMergeFeedback << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceSubpassMergeFeedbackFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->colorAttachmentFormat << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "androidHardwareBufferFormatResolvePropertiesANDROID"); + out << "\t\t" << "VkAndroidHardwareBufferFormatResolvePropertiesANDROID " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassCreationControlEXT(std::ostream &out, const VkRenderPassCreationControlEXT* structInfo, Decoded_VkRenderPassCreationControlEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExternalFormatResolveFeaturesANDROID(std::ostream &out, const VkPhysicalDeviceExternalFormatResolveFeaturesANDROID* structInfo, Decoded_VkPhysicalDeviceExternalFormatResolveFeaturesANDROID* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->disallowMerging << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassCreationControlEXT"); - out << "\t\t" << "VkRenderPassCreationControlEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->externalFormatResolve << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalFormatResolveFeaturesANDROID"); + out << "\t\t" << "VkPhysicalDeviceExternalFormatResolveFeaturesANDROID " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassCreationFeedbackCreateInfoEXT(std::ostream &out, const VkRenderPassCreationFeedbackCreateInfoEXT* structInfo, Decoded_VkRenderPassCreationFeedbackCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExternalFormatResolvePropertiesANDROID(std::ostream &out, const VkPhysicalDeviceExternalFormatResolvePropertiesANDROID* structInfo, Decoded_VkPhysicalDeviceExternalFormatResolvePropertiesANDROID* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string prender_pass_feedback_name = "NULL"; - if (structInfo->pRenderPassFeedback != NULL) { - prender_pass_feedback_name = GenerateStruct_VkRenderPassCreationFeedbackInfoEXT(out, - structInfo->pRenderPassFeedback, - metaInfo->pRenderPassFeedback->GetMetaStructPointer(), - consumer); - prender_pass_feedback_name.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << prender_pass_feedback_name << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassCreationFeedbackCreateInfoEXT"); - out << "\t\t" << "VkRenderPassCreationFeedbackCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->nullColorAttachmentWithExternalFormatResolve << "," << std::endl; + struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->externalFormatResolveChromaOffsetX << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->externalFormatResolveChromaOffsetY << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalFormatResolvePropertiesANDROID"); + out << "\t\t" << "VkPhysicalDeviceExternalFormatResolvePropertiesANDROID " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassCreationFeedbackInfoEXT(std::ostream &out, const VkRenderPassCreationFeedbackInfoEXT* structInfo, Decoded_VkRenderPassCreationFeedbackInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAntiLagDataAMD(std::ostream &out, const VkAntiLagDataAMD* structInfo, Decoded_VkAntiLagDataAMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->postMergeSubpassCount << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassCreationFeedbackInfoEXT"); - out << "\t\t" << "VkRenderPassCreationFeedbackInfoEXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string ppresentation_info_struct = "NULL"; + if (structInfo->pPresentationInfo != NULL) { + ppresentation_info_struct = GenerateStruct_VkAntiLagPresentationInfoAMD(out, + structInfo->pPresentationInfo, + metaInfo->pPresentationInfo->GetMetaStructPointer(), + consumer); + ppresentation_info_struct.insert(0, "&"); + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkAntiLagModeAMD(" << structInfo->mode << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxFPS << "," << std::endl; + struct_body << "\t\t\t" << ppresentation_info_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "antiLagDataAMD"); + out << "\t\t" << "VkAntiLagDataAMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassSubpassFeedbackCreateInfoEXT(std::ostream &out, const VkRenderPassSubpassFeedbackCreateInfoEXT* structInfo, Decoded_VkRenderPassSubpassFeedbackCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAntiLagPresentationInfoAMD(std::ostream &out, const VkAntiLagPresentationInfoAMD* structInfo, Decoded_VkAntiLagPresentationInfoAMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string psubpass_feedback_name = "NULL"; - if (structInfo->pSubpassFeedback != NULL) { - psubpass_feedback_name = GenerateStruct_VkRenderPassSubpassFeedbackInfoEXT(out, - structInfo->pSubpassFeedback, - metaInfo->pSubpassFeedback->GetMetaStructPointer(), - consumer); - psubpass_feedback_name.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << psubpass_feedback_name << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassSubpassFeedbackCreateInfoEXT"); - out << "\t\t" << "VkRenderPassSubpassFeedbackCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkAntiLagStageAMD(" << structInfo->stage << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->frameIndex << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "antiLagPresentationInfoAMD"); + out << "\t\t" << "VkAntiLagPresentationInfoAMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkRenderPassSubpassFeedbackInfoEXT(std::ostream &out, const VkRenderPassSubpassFeedbackInfoEXT* structInfo, Decoded_VkRenderPassSubpassFeedbackInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceAntiLagFeaturesAMD(std::ostream &out, const VkPhysicalDeviceAntiLagFeaturesAMD* structInfo, Decoded_VkPhysicalDeviceAntiLagFeaturesAMD* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << "VkSubpassMergeStatusEXT(" << structInfo->subpassMergeStatus << ")" << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->description) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->postMergeIndex << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderPassSubpassFeedbackInfoEXT"); - out << "\t\t" << "VkRenderPassSubpassFeedbackInfoEXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->antiLag << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceAntiLagFeaturesAMD"); + out << "\t\t" << "VkPhysicalDeviceAntiLagFeaturesAMD " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDirectDriverLoadingInfoLUNARG(std::ostream &out, const VkDirectDriverLoadingInfoLUNARG* structInfo, Decoded_VkDirectDriverLoadingInfoLUNARG* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDepthClampRangeEXT(std::ostream &out, const VkDepthClampRangeEXT* structInfo, Decoded_VkDepthClampRangeEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDirectDriverLoadingFlagsLUNARG(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pfnGetInstanceProcAddr << ","; - std::string variable_name = consumer.AddStruct(struct_body, "directDriverLoadingInfoLUNARG"); - out << "\t\t" << "VkDirectDriverLoadingInfoLUNARG " << variable_name << " {" << std::endl; + struct_body << "\t" << structInfo->minDepthClamp << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDepthClamp << ","; + std::string variable_name = consumer.AddStruct(struct_body, "depthClampRangeEXT"); + out << "\t\t" << "VkDepthClampRangeEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDirectDriverLoadingListLUNARG(std::ostream &out, const VkDirectDriverLoadingListLUNARG* structInfo, Decoded_VkDirectDriverLoadingListLUNARG* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderObjectFeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderObjectFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderObjectFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pdrivers_array = "NULL"; - if (structInfo->pDrivers != NULL) { - pdrivers_array = "pDrivers_" + std::to_string(consumer.GetNextId()); - std::string pdrivers_names; - for (uint32_t idx = 0; idx < structInfo->driverCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pDrivers + idx != NULL) { - variable_name = GenerateStruct_VkDirectDriverLoadingInfoLUNARG(out, - structInfo->pDrivers + idx, - metaInfo->pDrivers->GetMetaStructPointer() + idx, - consumer); - } - pdrivers_names += variable_name + ", "; - } - out << "\t\t" << "VkDirectDriverLoadingInfoLUNARG " << pdrivers_array << "[] = {" << pdrivers_names << "};" << std::endl; - } - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkDirectDriverLoadingModeLUNARG(" << structInfo->mode << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->driverCount << "," << std::endl; - struct_body << "\t\t\t" << pdrivers_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "directDriverLoadingListLUNARG"); - out << "\t\t" << "VkDirectDriverLoadingListLUNARG " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderObject << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderObjectFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceShaderObjectFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderObjectPropertiesEXT(std::ostream &out, const VkPhysicalDeviceShaderObjectPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceShaderObjectPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderModuleIdentifier << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderModuleIdentifierFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->shaderBinaryUUID[0]), VK_UUID_SIZE) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderBinaryVersion << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderObjectPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceShaderObjectPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(std::ostream &out, const VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkShaderCreateInfoEXT(std::ostream &out, const VkShaderCreateInfoEXT* structInfo, Decoded_VkShaderCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pcode_array = "NULL"; + if (structInfo->pCode != NULL) { + std::string pcode_values; + for (uint32_t idx0 = 0; idx0 < structInfo->codeSize; ++idx0) { + pcode_values += std::to_string(reinterpret_cast(structInfo->pCode)[idx0]) + ", "; + } + pcode_array = "pCode_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint8_t " << pcode_array << "[] = {" << pcode_values << "};" << std::endl; + } + std::string pset_layouts_array = "NULL"; + if (metaInfo->pSetLayouts.GetPointer() != NULL && structInfo->setLayoutCount > 0) { + pset_layouts_array = "pset_layouts_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)); + std::string pset_layouts_values = toStringJoin(metaInfo->pSetLayouts.GetPointer(), + metaInfo->pSetLayouts.GetPointer() + structInfo->setLayoutCount, + [&](const format::HandleId current) { return consumer.GetHandle(current); }, + ", "); + if (structInfo->setLayoutCount == 1) { + pset_layouts_array = "&" + pset_layouts_values; + } else if (structInfo->setLayoutCount > 1) { + out << "\t\t" << "VkDescriptorSetLayout " << pset_layouts_array << "[] = {" << pset_layouts_values << "};" << std::endl; + } + } + std::string ppush_constant_ranges_array = "NULL"; + if (structInfo->pPushConstantRanges != NULL) { + ppush_constant_ranges_array = "pPushConstantRanges_" + std::to_string(consumer.GetNextId()); + std::string ppush_constant_ranges_names; + for (uint32_t idx = 0; idx < structInfo->pushConstantRangeCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pPushConstantRanges + idx != NULL) { + variable_name = GenerateStruct_VkPushConstantRange(out, + structInfo->pPushConstantRanges + idx, + metaInfo->pPushConstantRanges->GetMetaStructPointer() + idx, + consumer); + } + ppush_constant_ranges_names += variable_name + ", "; + } + out << "\t\t" << "VkPushConstantRange " << ppush_constant_ranges_array << "[] = {" << ppush_constant_ranges_names << "};" << std::endl; + } + std::string pspecialization_info_struct = "NULL"; + if (structInfo->pSpecializationInfo != NULL) { + pspecialization_info_struct = GenerateStruct_VkSpecializationInfo(out, + structInfo->pSpecializationInfo, + metaInfo->pSpecializationInfo->GetMetaStructPointer(), + consumer); + pspecialization_info_struct.insert(0, "&"); + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->shaderModuleIdentifierAlgorithmUUID[0]), VK_UUID_SIZE) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderModuleIdentifierPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkShaderCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlagBits(" << structInfo->stage << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->nextStage << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkShaderCodeTypeEXT(" << structInfo->codeType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->codeSize << "," << std::endl; + struct_body << "\t\t\t" << pcode_array << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pName) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->setLayoutCount << "," << std::endl; + struct_body << "\t\t\t" << pset_layouts_array << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pushConstantRangeCount << "," << std::endl; + struct_body << "\t\t\t" << ppush_constant_ranges_array << "," << std::endl; + struct_body << "\t\t\t" << pspecialization_info_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "shaderCreateInfoEXT"); + out << "\t\t" << "VkShaderCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPipelineShaderStageModuleIdentifierCreateInfoEXT(std::ostream &out, const VkPipelineShaderStageModuleIdentifierCreateInfoEXT* structInfo, Decoded_VkPipelineShaderStageModuleIdentifierCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceTilePropertiesFeaturesQCOM(std::ostream &out, const VkPhysicalDeviceTilePropertiesFeaturesQCOM* structInfo, Decoded_VkPhysicalDeviceTilePropertiesFeaturesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pidentifier_array = "NULL"; - if (structInfo->pIdentifier != NULL) { - std::string pidentifier_values; - for (uint32_t idx0 = 0; idx0 < structInfo->identifierSize; ++idx0) { - pidentifier_values += std::to_string(structInfo->pIdentifier[idx0]) + ", "; - } - pidentifier_array = "pIdentifier_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint8_t " << pidentifier_array << "[] = {" << pidentifier_values << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->identifierSize << "," << std::endl; - struct_body << "\t\t\t" << pidentifier_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "pipelineShaderStageModuleIdentifierCreateInfoEXT"); - out << "\t\t" << "VkPipelineShaderStageModuleIdentifierCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->tileProperties << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTilePropertiesFeaturesQCOM"); + out << "\t\t" << "VkPhysicalDeviceTilePropertiesFeaturesQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkShaderModuleIdentifierEXT(std::ostream &out, const VkShaderModuleIdentifierEXT* structInfo, Decoded_VkShaderModuleIdentifierEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkTilePropertiesQCOM(std::ostream &out, const VkTilePropertiesQCOM* structInfo, Decoded_VkTilePropertiesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string tile_size_info_var = GenerateStruct_VkExtent3D(out, + &structInfo->tileSize, + metaInfo->tileSize, + consumer); + std::string apron_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->apronSize, + metaInfo->apronSize, + consumer); + std::string origin_info_var = GenerateStruct_VkOffset2D(out, + &structInfo->origin, + metaInfo->origin, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->identifierSize << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->identifier[0]), VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT) << ","; - std::string variable_name = consumer.AddStruct(struct_body, "shaderModuleIdentifierEXT"); - out << "\t\t" << "VkShaderModuleIdentifierEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << tile_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << apron_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << origin_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "tilePropertiesQCOM"); + out << "\t\t" << "VkTilePropertiesQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkOpticalFlowExecuteInfoNV(std::ostream &out, const VkOpticalFlowExecuteInfoNV* structInfo, Decoded_VkOpticalFlowExecuteInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkAmigoProfilingSubmitInfoSEC(std::ostream &out, const VkAmigoProfilingSubmitInfoSEC* structInfo, Decoded_VkAmigoProfilingSubmitInfoSEC* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pregions_array = "NULL"; - if (structInfo->pRegions != NULL) { - pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkRect2D " << pregions_array << "[] = " << VulkanCppConsumerBase::BuildValue(structInfo->pRegions, structInfo->regionCount) << ";" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkOpticalFlowExecuteFlagsNV(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; - struct_body << "\t\t\t" << pregions_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "opticalFlowExecuteInfoNV"); - out << "\t\t" << "VkOpticalFlowExecuteInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->firstDrawTimestamp << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->swapBufferTimestamp << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "amigoProfilingSubmitInfoSEC"); + out << "\t\t" << "VkAmigoProfilingSubmitInfoSEC " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkOpticalFlowImageFormatInfoNV(std::ostream &out, const VkOpticalFlowImageFormatInfoNV* structInfo, Decoded_VkOpticalFlowImageFormatInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceAmigoProfilingFeaturesSEC(std::ostream &out, const VkPhysicalDeviceAmigoProfilingFeaturesSEC* structInfo, Decoded_VkPhysicalDeviceAmigoProfilingFeaturesSEC* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkOpticalFlowUsageFlagsNV(" << structInfo->usage << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "opticalFlowImageFormatInfoNV"); - out << "\t\t" << "VkOpticalFlowImageFormatInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->amigoProfiling << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceAmigoProfilingFeaturesSEC"); + out << "\t\t" << "VkPhysicalDeviceAmigoProfilingFeaturesSEC " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkOpticalFlowImageFormatPropertiesNV(std::ostream &out, const VkOpticalFlowImageFormatPropertiesNV* structInfo, Decoded_VkOpticalFlowImageFormatPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM(std::ostream &out, const VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* structInfo, Decoded_VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->format << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "opticalFlowImageFormatPropertiesNV"); - out << "\t\t" << "VkOpticalFlowImageFormatPropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->multiviewPerViewViewports << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMultiviewPerViewViewportsFeaturesQCOM"); + out << "\t\t" << "VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkOpticalFlowSessionCreateInfoNV(std::ostream &out, const VkOpticalFlowSessionCreateInfoNV* structInfo, Decoded_VkOpticalFlowSessionCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV(std::ostream &out, const VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* structInfo, Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->width << "," << std::endl; - struct_body << "\t\t\t" << structInfo->height << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->imageFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->flowVectorFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->costFormat << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkOpticalFlowGridSizeFlagsNV(" << structInfo->outputGridSize << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkOpticalFlowGridSizeFlagsNV(" << structInfo->hintGridSize << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkOpticalFlowPerformanceLevelNV(" << structInfo->performanceLevel << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkOpticalFlowSessionCreateFlagsNV(" << structInfo->flags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "opticalFlowSessionCreateInfoNV"); - out << "\t\t" << "VkOpticalFlowSessionCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->rayTracingInvocationReorder << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingInvocationReorderFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkOpticalFlowSessionCreatePrivateDataInfoNV(std::ostream &out, const VkOpticalFlowSessionCreatePrivateDataInfoNV* structInfo, Decoded_VkOpticalFlowSessionCreatePrivateDataInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV(std::ostream &out, const VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* structInfo, Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->id << "," << std::endl; - struct_body << "\t\t\t" << structInfo->size << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pPrivateData << ","; - std::string variable_name = consumer.AddStruct(struct_body, "opticalFlowSessionCreatePrivateDataInfoNV"); - out << "\t\t" << "VkOpticalFlowSessionCreatePrivateDataInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkRayTracingInvocationReorderModeEXT(" << structInfo->rayTracingInvocationReorderReorderingHint << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingInvocationReorderPropertiesNV"); + out << "\t\t" << "VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceOpticalFlowFeaturesNV(std::ostream &out, const VkPhysicalDeviceOpticalFlowFeaturesNV* structInfo, Decoded_VkPhysicalDeviceOpticalFlowFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkConvertCooperativeVectorMatrixInfoNV(std::ostream &out, const VkConvertCooperativeVectorMatrixInfoNV* structInfo, Decoded_VkConvertCooperativeVectorMatrixInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->opticalFlow << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceOpticalFlowFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceOpticalFlowFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->srcSize << "," << std::endl; + struct_body << "\t\t\t" << structInfo->srcData.deviceAddress << "," << std::endl; + out << "\t\t" << "// TODO: Support pDstSize (non-struct output) argument." << std::endl; + struct_body << "\t\t\t" << structInfo->dstData.deviceAddress << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->srcComponentType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->dstComponentType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->numRows << "," << std::endl; + struct_body << "\t\t\t" << structInfo->numColumns << "," << std::endl; + struct_body << "\t\t\t" << "VkCooperativeVectorMatrixLayoutNV(" << structInfo->srcLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->srcStride << "," << std::endl; + struct_body << "\t\t\t" << "VkCooperativeVectorMatrixLayoutNV(" << structInfo->dstLayout << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstStride << ","; + std::string variable_name = consumer.AddStruct(struct_body, "convertCooperativeVectorMatrixInfoNV"); + out << "\t\t" << "VkConvertCooperativeVectorMatrixInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceOpticalFlowPropertiesNV(std::ostream &out, const VkPhysicalDeviceOpticalFlowPropertiesNV* structInfo, Decoded_VkPhysicalDeviceOpticalFlowPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCooperativeVectorPropertiesNV(std::ostream &out, const VkCooperativeVectorPropertiesNV* structInfo, Decoded_VkCooperativeVectorPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkOpticalFlowGridSizeFlagsNV(" << structInfo->supportedOutputGridSizes << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkOpticalFlowGridSizeFlagsNV(" << structInfo->supportedHintGridSizes << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->hintSupported << "," << std::endl; - struct_body << "\t\t\t" << structInfo->costSupported << "," << std::endl; - struct_body << "\t\t\t" << structInfo->bidirectionalFlowSupported << "," << std::endl; - struct_body << "\t\t\t" << structInfo->globalFlowSupported << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minWidth << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minHeight << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxWidth << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxHeight << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxNumRegionsOfInterest << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceOpticalFlowPropertiesNV"); - out << "\t\t" << "VkPhysicalDeviceOpticalFlowPropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->inputType << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->inputInterpretation << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->matrixInterpretation << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->biasInterpretation << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->resultType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->transpose << ","; + std::string variable_name = consumer.AddStruct(struct_body, "cooperativeVectorPropertiesNV"); + out << "\t\t" << "VkCooperativeVectorPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceLegacyDitheringFeaturesEXT(std::ostream &out, const VkPhysicalDeviceLegacyDitheringFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceLegacyDitheringFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceCooperativeVectorFeaturesNV(std::ostream &out, const VkPhysicalDeviceCooperativeVectorFeaturesNV* structInfo, Decoded_VkPhysicalDeviceCooperativeVectorFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->legacyDithering << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLegacyDitheringFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceLegacyDitheringFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->cooperativeVector << "," << std::endl; + struct_body << "\t\t\t" << structInfo->cooperativeVectorTraining << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCooperativeVectorFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceCooperativeVectorFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAndroidHardwareBufferFormatResolvePropertiesANDROID(std::ostream &out, const VkAndroidHardwareBufferFormatResolvePropertiesANDROID* structInfo, Decoded_VkAndroidHardwareBufferFormatResolvePropertiesANDROID* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceCooperativeVectorPropertiesNV(std::ostream &out, const VkPhysicalDeviceCooperativeVectorPropertiesNV* structInfo, Decoded_VkPhysicalDeviceCooperativeVectorPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkFormat(" << structInfo->colorAttachmentFormat << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "androidHardwareBufferFormatResolvePropertiesANDROID"); - out << "\t\t" << "VkAndroidHardwareBufferFormatResolvePropertiesANDROID " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->cooperativeVectorSupportedStages << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->cooperativeVectorTrainingFloat16Accumulation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->cooperativeVectorTrainingFloat32Accumulation << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxCooperativeVectorComponents << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCooperativeVectorPropertiesNV"); + out << "\t\t" << "VkPhysicalDeviceCooperativeVectorPropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExternalFormatResolveFeaturesANDROID(std::ostream &out, const VkPhysicalDeviceExternalFormatResolveFeaturesANDROID* structInfo, Decoded_VkPhysicalDeviceExternalFormatResolveFeaturesANDROID* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV(std::ostream &out, const VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* structInfo, Decoded_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->externalFormatResolve << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalFormatResolveFeaturesANDROID"); - out << "\t\t" << "VkPhysicalDeviceExternalFormatResolveFeaturesANDROID " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->extendedSparseAddressSpace << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExtendedSparseAddressSpaceFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExternalFormatResolvePropertiesANDROID(std::ostream &out, const VkPhysicalDeviceExternalFormatResolvePropertiesANDROID* structInfo, Decoded_VkPhysicalDeviceExternalFormatResolvePropertiesANDROID* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV(std::ostream &out, const VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* structInfo, Decoded_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->nullColorAttachmentWithExternalFormatResolve << "," << std::endl; - struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->externalFormatResolveChromaOffsetX << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkChromaLocation(" << structInfo->externalFormatResolveChromaOffsetY << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExternalFormatResolvePropertiesANDROID"); - out << "\t\t" << "VkPhysicalDeviceExternalFormatResolvePropertiesANDROID " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->extendedSparseAddressSpaceSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->extendedSparseImageUsageFlags << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkBufferUsageFlags(" << structInfo->extendedSparseBufferUsageFlags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExtendedSparseAddressSpacePropertiesNV"); + out << "\t\t" << "VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAntiLagDataAMD(std::ostream &out, const VkAntiLagDataAMD* structInfo, Decoded_VkAntiLagDataAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(std::ostream &out, const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ppresentation_info_struct = "NULL"; - if (structInfo->pPresentationInfo != NULL) { - ppresentation_info_struct = GenerateStruct_VkAntiLagPresentationInfoAMD(out, - structInfo->pPresentationInfo, - metaInfo->pPresentationInfo->GetMetaStructPointer(), - consumer); - ppresentation_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkAntiLagModeAMD(" << structInfo->mode << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxFPS << "," << std::endl; - struct_body << "\t\t\t" << ppresentation_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "antiLagDataAMD"); - out << "\t\t" << "VkAntiLagDataAMD " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->legacyVertexAttributes << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLegacyVertexAttributesFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAntiLagPresentationInfoAMD(std::ostream &out, const VkAntiLagPresentationInfoAMD* structInfo, Decoded_VkAntiLagPresentationInfoAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(std::ostream &out, const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkAntiLagStageAMD(" << structInfo->stage << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->frameIndex << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "antiLagPresentationInfoAMD"); - out << "\t\t" << "VkAntiLagPresentationInfoAMD " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->nativeUnalignedPerformance << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLegacyVertexAttributesPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceAntiLagFeaturesAMD(std::ostream &out, const VkPhysicalDeviceAntiLagFeaturesAMD* structInfo, Decoded_VkPhysicalDeviceAntiLagFeaturesAMD* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkLayerSettingsCreateInfoEXT(std::ostream &out, const VkLayerSettingsCreateInfoEXT* structInfo, Decoded_VkLayerSettingsCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string psettings_array = "NULL"; + if (structInfo->pSettings != NULL) { + psettings_array = "pSettings_" + std::to_string(consumer.GetNextId()); + std::string psettings_names; + for (uint32_t idx = 0; idx < structInfo->settingCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pSettings + idx != NULL) { + variable_name = GenerateStruct_VkLayerSettingEXT(out, + structInfo->pSettings + idx, + metaInfo->pSettings->GetMetaStructPointer() + idx, + consumer); + } + psettings_names += variable_name + ", "; + } + out << "\t\t" << "VkLayerSettingEXT " << psettings_array << "[] = {" << psettings_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->antiLag << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceAntiLagFeaturesAMD"); - out << "\t\t" << "VkPhysicalDeviceAntiLagFeaturesAMD " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->settingCount << "," << std::endl; + struct_body << "\t\t\t" << psettings_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "layerSettingsCreateInfoEXT"); + out << "\t\t" << "VkLayerSettingsCreateInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkDepthClampRangeEXT(std::ostream &out, const VkDepthClampRangeEXT* structInfo, Decoded_VkDepthClampRangeEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(std::ostream &out, const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* structInfo, Decoded_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - struct_body << "\t" << structInfo->minDepthClamp << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxDepthClamp << ","; - std::string variable_name = consumer.AddStruct(struct_body, "depthClampRangeEXT"); - out << "\t\t" << "VkDepthClampRangeEXT " << variable_name << " {" << std::endl; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderCoreBuiltins << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderCoreBuiltinsFeaturesARM"); + out << "\t\t" << "VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderObjectFeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderObjectFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderObjectFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM(std::ostream &out, const VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* structInfo, Decoded_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderObject << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderObjectFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceShaderObjectFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->shaderCoreMask << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderCoreCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderWarpsPerCore << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderCoreBuiltinsPropertiesARM"); + out << "\t\t" << "VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderObjectPropertiesEXT(std::ostream &out, const VkPhysicalDeviceShaderObjectPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceShaderObjectPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT(std::ostream &out, const VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* structInfo, Decoded_VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->shaderBinaryUUID[0]), VK_UUID_SIZE) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderBinaryVersion << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderObjectPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceShaderObjectPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->pipelineLibraryGroupHandles << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineLibraryGroupHandlesFeaturesEXT"); + out << "\t\t" << "VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkShaderCreateInfoEXT(std::ostream &out, const VkShaderCreateInfoEXT* structInfo, Decoded_VkShaderCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT(std::ostream &out, const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string pcode_array = "NULL"; - if (structInfo->pCode != NULL) { - std::string pcode_values; - for (uint32_t idx0 = 0; idx0 < structInfo->codeSize; ++idx0) { - pcode_values += std::to_string(reinterpret_cast(structInfo->pCode)[idx0]) + ", "; - } - pcode_array = "pCode_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint8_t " << pcode_array << "[] = {" << pcode_values << "};" << std::endl; - } - std::string pset_layouts_array = "NULL"; - if (metaInfo->pSetLayouts.GetPointer() != NULL && structInfo->setLayoutCount > 0) { - pset_layouts_array = "pset_layouts_array_" + std::to_string(consumer.GetNextId(VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)); - std::string pset_layouts_values = toStringJoin(metaInfo->pSetLayouts.GetPointer(), - metaInfo->pSetLayouts.GetPointer() + structInfo->setLayoutCount, - [&](const format::HandleId current) { return consumer.GetHandle(current); }, - ", "); - if (structInfo->setLayoutCount == 1) { - pset_layouts_array = "&" + pset_layouts_values; - } else if (structInfo->setLayoutCount > 1) { - out << "\t\t" << "VkDescriptorSetLayout " << pset_layouts_array << "[] = {" << pset_layouts_values << "};" << std::endl; - } - } - std::string ppush_constant_ranges_array = "NULL"; - if (structInfo->pPushConstantRanges != NULL) { - ppush_constant_ranges_array = "pPushConstantRanges_" + std::to_string(consumer.GetNextId()); - std::string ppush_constant_ranges_names; - for (uint32_t idx = 0; idx < structInfo->pushConstantRangeCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pPushConstantRanges + idx != NULL) { - variable_name = GenerateStruct_VkPushConstantRange(out, - structInfo->pPushConstantRanges + idx, - metaInfo->pPushConstantRanges->GetMetaStructPointer() + idx, - consumer); - } - ppush_constant_ranges_names += variable_name + ", "; - } - out << "\t\t" << "VkPushConstantRange " << ppush_constant_ranges_array << "[] = {" << ppush_constant_ranges_names << "};" << std::endl; - } - std::string pspecialization_info_struct = "NULL"; - if (structInfo->pSpecializationInfo != NULL) { - pspecialization_info_struct = GenerateStruct_VkSpecializationInfo(out, - structInfo->pSpecializationInfo, - metaInfo->pSpecializationInfo->GetMetaStructPointer(), - consumer); - pspecialization_info_struct.insert(0, "&"); - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderCreateFlagsEXT(" << structInfo->flags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlagBits(" << structInfo->stage << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->nextStage << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderCodeTypeEXT(" << structInfo->codeType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->codeSize << "," << std::endl; - struct_body << "\t\t\t" << pcode_array << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pName) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->setLayoutCount << "," << std::endl; - struct_body << "\t\t\t" << pset_layouts_array << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pushConstantRangeCount << "," << std::endl; - struct_body << "\t\t\t" << ppush_constant_ranges_array << "," << std::endl; - struct_body << "\t\t\t" << pspecialization_info_struct << ","; - std::string variable_name = consumer.AddStruct(struct_body, "shaderCreateInfoEXT"); - out << "\t\t" << "VkShaderCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->dynamicRenderingUnusedAttachments << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceTilePropertiesFeaturesQCOM(std::ostream &out, const VkPhysicalDeviceTilePropertiesFeaturesQCOM* structInfo, Decoded_VkPhysicalDeviceTilePropertiesFeaturesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkGetLatencyMarkerInfoNV(std::ostream &out, const VkGetLatencyMarkerInfoNV* structInfo, Decoded_VkGetLatencyMarkerInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string ptimings_array = "NULL"; + if (structInfo->pTimings != NULL) { + ptimings_array = "pTimings_" + std::to_string(consumer.GetNextId()); + std::string ptimings_names; + for (uint32_t idx = 0; idx < structInfo->timingCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pTimings + idx != NULL) { + variable_name = GenerateStruct_VkLatencyTimingsFrameReportNV(out, + structInfo->pTimings + idx, + metaInfo->pTimings->GetMetaStructPointer() + idx, + consumer); + } + ptimings_names += variable_name + ", "; + } + out << "\t\t" << "VkLatencyTimingsFrameReportNV " << ptimings_array << "[] = {" << ptimings_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->tileProperties << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceTilePropertiesFeaturesQCOM"); - out << "\t\t" << "VkPhysicalDeviceTilePropertiesFeaturesQCOM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->timingCount << "," << std::endl; + struct_body << "\t\t\t" << ptimings_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "getLatencyMarkerInfoNV"); + out << "\t\t" << "VkGetLatencyMarkerInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkTilePropertiesQCOM(std::ostream &out, const VkTilePropertiesQCOM* structInfo, Decoded_VkTilePropertiesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkLatencySleepInfoNV(std::ostream &out, const VkLatencySleepInfoNV* structInfo, Decoded_VkLatencySleepInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string tile_size_info_var = GenerateStruct_VkExtent3D(out, - &structInfo->tileSize, - metaInfo->tileSize, - consumer); - std::string apron_size_info_var = GenerateStruct_VkExtent2D(out, - &structInfo->apronSize, - metaInfo->apronSize, - consumer); - std::string origin_info_var = GenerateStruct_VkOffset2D(out, - &structInfo->origin, - metaInfo->origin, - consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << tile_size_info_var << "," << std::endl; - struct_body << "\t\t\t" << apron_size_info_var << "," << std::endl; - struct_body << "\t\t\t" << origin_info_var << ","; - std::string variable_name = consumer.AddStruct(struct_body, "tilePropertiesQCOM"); - out << "\t\t" << "VkTilePropertiesQCOM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->signalSemaphore) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->value << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "latencySleepInfoNV"); + out << "\t\t" << "VkLatencySleepInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkAmigoProfilingSubmitInfoSEC(std::ostream &out, const VkAmigoProfilingSubmitInfoSEC* structInfo, Decoded_VkAmigoProfilingSubmitInfoSEC* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkLatencySleepModeInfoNV(std::ostream &out, const VkLatencySleepModeInfoNV* structInfo, Decoded_VkLatencySleepModeInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->firstDrawTimestamp << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->swapBufferTimestamp << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "amigoProfilingSubmitInfoSEC"); - out << "\t\t" << "VkAmigoProfilingSubmitInfoSEC " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->lowLatencyMode << "," << std::endl; + struct_body << "\t\t\t" << structInfo->lowLatencyBoost << "," << std::endl; + struct_body << "\t\t\t" << structInfo->minimumIntervalUs << ","; + std::string variable_name = consumer.AddStruct(struct_body, "latencySleepModeInfoNV"); + out << "\t\t" << "VkLatencySleepModeInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceAmigoProfilingFeaturesSEC(std::ostream &out, const VkPhysicalDeviceAmigoProfilingFeaturesSEC* structInfo, Decoded_VkPhysicalDeviceAmigoProfilingFeaturesSEC* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkLatencySubmissionPresentIdNV(std::ostream &out, const VkLatencySubmissionPresentIdNV* structInfo, Decoded_VkLatencySubmissionPresentIdNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->amigoProfiling << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceAmigoProfilingFeaturesSEC"); - out << "\t\t" << "VkPhysicalDeviceAmigoProfilingFeaturesSEC " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentID << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "latencySubmissionPresentIdNV"); + out << "\t\t" << "VkLatencySubmissionPresentIdNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM(std::ostream &out, const VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* structInfo, Decoded_VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkLatencySurfaceCapabilitiesNV(std::ostream &out, const VkLatencySurfaceCapabilitiesNV* structInfo, Decoded_VkLatencySurfaceCapabilitiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string ppresent_modes_array = "NULL"; + if (structInfo->pPresentModes != NULL) { + std::string ppresent_modes_values; + for (uint32_t idx = 0; idx < structInfo->presentModeCount; idx++) { + ppresent_modes_values += util::ToString(structInfo->pPresentModes[idx]) + ", "; + } + ppresent_modes_array = "pPresentModes_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkPresentModeKHR " << ppresent_modes_array << "[] = {" << ppresent_modes_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->multiviewPerViewViewports << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMultiviewPerViewViewportsFeaturesQCOM"); - out << "\t\t" << "VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentModeCount << "," << std::endl; + struct_body << "\t\t\t" << ppresent_modes_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "latencySurfaceCapabilitiesNV"); + out << "\t\t" << "VkLatencySurfaceCapabilitiesNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV(std::ostream &out, const VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* structInfo, Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkLatencyTimingsFrameReportNV(std::ostream &out, const VkLatencyTimingsFrameReportNV* structInfo, Decoded_VkLatencyTimingsFrameReportNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->rayTracingInvocationReorder << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingInvocationReorderFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentID << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->inputSampleTimeUs << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->simStartTimeUs << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->simEndTimeUs << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->renderSubmitStartTimeUs << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->renderSubmitEndTimeUs << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->presentStartTimeUs << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->presentEndTimeUs << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->driverStartTimeUs << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->driverEndTimeUs << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->osRenderQueueStartTimeUs << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->osRenderQueueEndTimeUs << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->gpuRenderStartTimeUs << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->gpuRenderEndTimeUs << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "latencyTimingsFrameReportNV"); + out << "\t\t" << "VkLatencyTimingsFrameReportNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV(std::ostream &out, const VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* structInfo, Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkOutOfBandQueueTypeInfoNV(std::ostream &out, const VkOutOfBandQueueTypeInfoNV* structInfo, Decoded_VkOutOfBandQueueTypeInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkRayTracingInvocationReorderModeNV(" << structInfo->rayTracingInvocationReorderReorderingHint << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingInvocationReorderPropertiesNV"); - out << "\t\t" << "VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkOutOfBandQueueTypeNV(" << structInfo->queueType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "outOfBandQueueTypeInfoNV"); + out << "\t\t" << "VkOutOfBandQueueTypeInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkConvertCooperativeVectorMatrixInfoNV(std::ostream &out, const VkConvertCooperativeVectorMatrixInfoNV* structInfo, Decoded_VkConvertCooperativeVectorMatrixInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSetLatencyMarkerInfoNV(std::ostream &out, const VkSetLatencyMarkerInfoNV* structInfo, Decoded_VkSetLatencyMarkerInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcSize << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcData.deviceAddress << "," << std::endl; - out << "\t\t" << "// TODO: Support pDstSize (non-struct output) argument." << std::endl; - struct_body << "\t\t\t" << structInfo->dstData.deviceAddress << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->srcComponentType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->dstComponentType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->numRows << "," << std::endl; - struct_body << "\t\t\t" << structInfo->numColumns << "," << std::endl; - struct_body << "\t\t\t" << "VkCooperativeVectorMatrixLayoutNV(" << structInfo->srcLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->srcStride << "," << std::endl; - struct_body << "\t\t\t" << "VkCooperativeVectorMatrixLayoutNV(" << structInfo->dstLayout << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dstStride << ","; - std::string variable_name = consumer.AddStruct(struct_body, "convertCooperativeVectorMatrixInfoNV"); - out << "\t\t" << "VkConvertCooperativeVectorMatrixInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->presentID << "UL" << "," << std::endl; + struct_body << "\t\t\t" << "VkLatencyMarkerNV(" << structInfo->marker << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "setLatencyMarkerInfoNV"); + out << "\t\t" << "VkSetLatencyMarkerInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkCooperativeVectorPropertiesNV(std::ostream &out, const VkCooperativeVectorPropertiesNV* structInfo, Decoded_VkCooperativeVectorPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkSwapchainLatencyCreateInfoNV(std::ostream &out, const VkSwapchainLatencyCreateInfoNV* structInfo, Decoded_VkSwapchainLatencyCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->inputType << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->inputInterpretation << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->matrixInterpretation << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->biasInterpretation << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkComponentTypeKHR(" << structInfo->resultType << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->transpose << ","; - std::string variable_name = consumer.AddStruct(struct_body, "cooperativeVectorPropertiesNV"); - out << "\t\t" << "VkCooperativeVectorPropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->latencyModeEnable << ","; + std::string variable_name = consumer.AddStruct(struct_body, "swapchainLatencyCreateInfoNV"); + out << "\t\t" << "VkSwapchainLatencyCreateInfoNV " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceCooperativeVectorFeaturesNV(std::ostream &out, const VkPhysicalDeviceCooperativeVectorFeaturesNV* structInfo, Decoded_VkPhysicalDeviceCooperativeVectorFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkBindDataGraphPipelineSessionMemoryInfoARM(std::ostream &out, const VkBindDataGraphPipelineSessionMemoryInfoARM* structInfo, Decoded_VkBindDataGraphPipelineSessionMemoryInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cooperativeVector << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cooperativeVectorTraining << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCooperativeVectorFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceCooperativeVectorFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->session) << "," << std::endl; + struct_body << "\t\t\t" << "VkDataGraphPipelineSessionBindPointARM(" << structInfo->bindPoint << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->objectIndex << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->memory) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryOffset << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "bindDataGraphPipelineSessionMemoryInfoARM"); + out << "\t\t" << "VkBindDataGraphPipelineSessionMemoryInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceCooperativeVectorPropertiesNV(std::ostream &out, const VkPhysicalDeviceCooperativeVectorPropertiesNV* structInfo, Decoded_VkPhysicalDeviceCooperativeVectorPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphPipelineCompilerControlCreateInfoARM(std::ostream &out, const VkDataGraphPipelineCompilerControlCreateInfoARM* structInfo, Decoded_VkDataGraphPipelineCompilerControlCreateInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkShaderStageFlags(" << structInfo->cooperativeVectorSupportedStages << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cooperativeVectorTrainingFloat16Accumulation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->cooperativeVectorTrainingFloat32Accumulation << "," << std::endl; - struct_body << "\t\t\t" << structInfo->maxCooperativeVectorComponents << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCooperativeVectorPropertiesNV"); - out << "\t\t" << "VkPhysicalDeviceCooperativeVectorPropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pVendorOptions) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelineCompilerControlCreateInfoARM"); + out << "\t\t" << "VkDataGraphPipelineCompilerControlCreateInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV(std::ostream &out, const VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* structInfo, Decoded_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphPipelineConstantARM(std::ostream &out, const VkDataGraphPipelineConstantARM* structInfo, Decoded_VkDataGraphPipelineConstantARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedSparseAddressSpace << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExtendedSparseAddressSpaceFeaturesNV"); - out << "\t\t" << "VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->id << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pConstantData << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelineConstantARM"); + out << "\t\t" << "VkDataGraphPipelineConstantARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV(std::ostream &out, const VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* structInfo, Decoded_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM(std::ostream &out, const VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM* structInfo, Decoded_VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->extendedSparseAddressSpaceSize << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkImageUsageFlags(" << structInfo->extendedSparseImageUsageFlags << ")" << "," << std::endl; - struct_body << "\t\t\t" << "VkBufferUsageFlags(" << structInfo->extendedSparseBufferUsageFlags << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceExtendedSparseAddressSpacePropertiesNV"); - out << "\t\t" << "VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->dimension << "," << std::endl; + struct_body << "\t\t\t" << structInfo->zeroCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->groupSize << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM"); + out << "\t\t" << "VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(std::ostream &out, const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphPipelineCreateInfoARM(std::ostream &out, const VkDataGraphPipelineCreateInfoARM* structInfo, Decoded_VkDataGraphPipelineCreateInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string presource_infos_array = "NULL"; + if (structInfo->pResourceInfos != NULL) { + presource_infos_array = "pResourceInfos_" + std::to_string(consumer.GetNextId()); + std::string presource_infos_names; + for (uint32_t idx = 0; idx < structInfo->resourceInfoCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pResourceInfos + idx != NULL) { + variable_name = GenerateStruct_VkDataGraphPipelineResourceInfoARM(out, + structInfo->pResourceInfos + idx, + metaInfo->pResourceInfos->GetMetaStructPointer() + idx, + consumer); + } + presource_infos_names += variable_name + ", "; + } + out << "\t\t" << "VkDataGraphPipelineResourceInfoARM " << presource_infos_array << "[] = {" << presource_infos_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->legacyVertexAttributes << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLegacyVertexAttributesFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkPipelineCreateFlags2KHR(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->layout) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->resourceInfoCount << "," << std::endl; + struct_body << "\t\t\t" << presource_infos_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelineCreateInfoARM"); + out << "\t\t" << "VkDataGraphPipelineCreateInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(std::ostream &out, const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphPipelineDispatchInfoARM(std::ostream &out, const VkDataGraphPipelineDispatchInfoARM* structInfo, Decoded_VkDataGraphPipelineDispatchInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->nativeUnalignedPerformance << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceLegacyVertexAttributesPropertiesEXT"); - out << "\t\t" << "VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDataGraphPipelineDispatchFlagsARM(" << structInfo->flags << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelineDispatchInfoARM"); + out << "\t\t" << "VkDataGraphPipelineDispatchInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkLayerSettingEXT(std::ostream &out, const VkLayerSettingEXT* structInfo, Decoded_VkLayerSettingEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphPipelineIdentifierCreateInfoARM(std::ostream &out, const VkDataGraphPipelineIdentifierCreateInfoARM* structInfo, Decoded_VkDataGraphPipelineIdentifierCreateInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pvalues_array = "NULL"; - if (structInfo->pValues != NULL) { - std::string pvalues_values; - for (uint32_t idx0 = 0; idx0 < structInfo->valueCount; ++idx0) { - pvalues_values += std::to_string(reinterpret_cast(structInfo->pValues)[idx0]) + ", "; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pidentifier_array = "NULL"; + if (structInfo->pIdentifier != NULL) { + std::string pidentifier_values; + for (uint32_t idx0 = 0; idx0 < structInfo->identifierSize; ++idx0) { + pidentifier_values += std::to_string(structInfo->pIdentifier[idx0]) + ", "; } - pvalues_array = "pValues_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "uint8_t " << pvalues_array << "[] = {" << pvalues_values << "};" << std::endl; + pidentifier_array = "pIdentifier_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "uint8_t " << pidentifier_array << "[] = {" << pidentifier_values << "};" << std::endl; } - struct_body << "\t" << VulkanCppConsumerBase::ToEscape(structInfo->pLayerName) << "," << std::endl; - struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pSettingName) << "," << std::endl; - struct_body << "\t\t\t" << "VkLayerSettingTypeEXT(" << structInfo->type << ")" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->valueCount << "," << std::endl; - struct_body << "\t\t\t" << pvalues_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "layerSettingEXT"); - out << "\t\t" << "VkLayerSettingEXT " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->identifierSize << "," << std::endl; + struct_body << "\t\t\t" << pidentifier_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelineIdentifierCreateInfoARM"); + out << "\t\t" << "VkDataGraphPipelineIdentifierCreateInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkLayerSettingsCreateInfoEXT(std::ostream &out, const VkLayerSettingsCreateInfoEXT* structInfo, Decoded_VkLayerSettingsCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphPipelineInfoARM(std::ostream &out, const VkDataGraphPipelineInfoARM* structInfo, Decoded_VkDataGraphPipelineInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string psettings_array = "NULL"; - if (structInfo->pSettings != NULL) { - psettings_array = "pSettings_" + std::to_string(consumer.GetNextId()); - std::string psettings_names; - for (uint32_t idx = 0; idx < structInfo->settingCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pSettings + idx != NULL) { - variable_name = GenerateStruct_VkLayerSettingEXT(out, - structInfo->pSettings + idx, - metaInfo->pSettings->GetMetaStructPointer() + idx, - consumer); - } - psettings_names += variable_name + ", "; - } - out << "\t\t" << "VkLayerSettingEXT " << psettings_array << "[] = {" << psettings_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->settingCount << "," << std::endl; - struct_body << "\t\t\t" << psettings_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "layerSettingsCreateInfoEXT"); - out << "\t\t" << "VkLayerSettingsCreateInfoEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dataGraphPipeline) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelineInfoARM"); + out << "\t\t" << "VkDataGraphPipelineInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(std::ostream &out, const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* structInfo, Decoded_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphPipelinePropertyQueryResultARM(std::ostream &out, const VkDataGraphPipelinePropertyQueryResultARM* structInfo, Decoded_VkDataGraphPipelinePropertyQueryResultARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderCoreBuiltins << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderCoreBuiltinsFeaturesARM"); - out << "\t\t" << "VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDataGraphPipelinePropertyARM(" << structInfo->property << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->isText << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dataSize << "," << std::endl; + out << "\t\t" << "// TODO: Support pData (output with array length value?) argument." << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelinePropertyQueryResultARM"); + out << "\t\t" << "VkDataGraphPipelinePropertyQueryResultARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM(std::ostream &out, const VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* structInfo, Decoded_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphPipelineResourceInfoARM(std::ostream &out, const VkDataGraphPipelineResourceInfoARM* structInfo, Decoded_VkDataGraphPipelineResourceInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderCoreMask << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderCoreCount << "," << std::endl; - struct_body << "\t\t\t" << structInfo->shaderWarpsPerCore << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderCoreBuiltinsPropertiesARM"); - out << "\t\t" << "VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->descriptorSet << "," << std::endl; + struct_body << "\t\t\t" << structInfo->binding << "," << std::endl; + struct_body << "\t\t\t" << structInfo->arrayElement << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelineResourceInfoARM"); + out << "\t\t" << "VkDataGraphPipelineResourceInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT(std::ostream &out, const VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* structInfo, Decoded_VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphPipelineSessionBindPointRequirementARM(std::ostream &out, const VkDataGraphPipelineSessionBindPointRequirementARM* structInfo, Decoded_VkDataGraphPipelineSessionBindPointRequirementARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->pipelineLibraryGroupHandles << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePipelineLibraryGroupHandlesFeaturesEXT"); - out << "\t\t" << "VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDataGraphPipelineSessionBindPointARM(" << structInfo->bindPoint << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkDataGraphPipelineSessionBindPointTypeARM(" << structInfo->bindPointType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->numObjects << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelineSessionBindPointRequirementARM"); + out << "\t\t" << "VkDataGraphPipelineSessionBindPointRequirementARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT(std::ostream &out, const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphPipelineSessionBindPointRequirementsInfoARM(std::ostream &out, const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* structInfo, Decoded_VkDataGraphPipelineSessionBindPointRequirementsInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->dynamicRenderingUnusedAttachments << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->session) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelineSessionBindPointRequirementsInfoARM"); + out << "\t\t" << "VkDataGraphPipelineSessionBindPointRequirementsInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkGetLatencyMarkerInfoNV(std::ostream &out, const VkGetLatencyMarkerInfoNV* structInfo, Decoded_VkGetLatencyMarkerInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphPipelineSessionCreateInfoARM(std::ostream &out, const VkDataGraphPipelineSessionCreateInfoARM* structInfo, Decoded_VkDataGraphPipelineSessionCreateInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ptimings_array = "NULL"; - if (structInfo->pTimings != NULL) { - ptimings_array = "pTimings_" + std::to_string(consumer.GetNextId()); - std::string ptimings_names; - for (uint32_t idx = 0; idx < structInfo->timingCount; idx++) { - std::string variable_name = "NULL"; - if (structInfo->pTimings + idx != NULL) { - variable_name = GenerateStruct_VkLatencyTimingsFrameReportNV(out, - structInfo->pTimings + idx, - metaInfo->pTimings->GetMetaStructPointer() + idx, - consumer); - } - ptimings_names += variable_name + ", "; - } - out << "\t\t" << "VkLatencyTimingsFrameReportNV " << ptimings_array << "[] = {" << ptimings_names << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->timingCount << "," << std::endl; - struct_body << "\t\t\t" << ptimings_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "getLatencyMarkerInfoNV"); - out << "\t\t" << "VkGetLatencyMarkerInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkDataGraphPipelineSessionCreateFlagsARM(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->dataGraphPipeline) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelineSessionCreateInfoARM"); + out << "\t\t" << "VkDataGraphPipelineSessionCreateInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkLatencySleepInfoNV(std::ostream &out, const VkLatencySleepInfoNV* structInfo, Decoded_VkLatencySleepInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphPipelineSessionMemoryRequirementsInfoARM(std::ostream &out, const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* structInfo, Decoded_VkDataGraphPipelineSessionMemoryRequirementsInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->signalSemaphore) << "," << std::endl; - struct_body << "\t\t\t" << structInfo->value << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "latencySleepInfoNV"); - out << "\t\t" << "VkLatencySleepInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->session) << "," << std::endl; + struct_body << "\t\t\t" << "VkDataGraphPipelineSessionBindPointARM(" << structInfo->bindPoint << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->objectIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelineSessionMemoryRequirementsInfoARM"); + out << "\t\t" << "VkDataGraphPipelineSessionMemoryRequirementsInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkLatencySleepModeInfoNV(std::ostream &out, const VkLatencySleepModeInfoNV* structInfo, Decoded_VkLatencySleepModeInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphPipelineShaderModuleCreateInfoARM(std::ostream &out, const VkDataGraphPipelineShaderModuleCreateInfoARM* structInfo, Decoded_VkDataGraphPipelineShaderModuleCreateInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pspecialization_info_struct = "NULL"; + if (structInfo->pSpecializationInfo != NULL) { + pspecialization_info_struct = GenerateStruct_VkSpecializationInfo(out, + structInfo->pSpecializationInfo, + metaInfo->pSpecializationInfo->GetMetaStructPointer(), + consumer); + pspecialization_info_struct.insert(0, "&"); + } + std::string pconstants_array = "NULL"; + if (structInfo->pConstants != NULL) { + pconstants_array = "pConstants_" + std::to_string(consumer.GetNextId()); + std::string pconstants_names; + for (uint32_t idx = 0; idx < structInfo->constantCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pConstants + idx != NULL) { + variable_name = GenerateStruct_VkDataGraphPipelineConstantARM(out, + structInfo->pConstants + idx, + metaInfo->pConstants->GetMetaStructPointer() + idx, + consumer); + } + pconstants_names += variable_name + ", "; + } + out << "\t\t" << "VkDataGraphPipelineConstantARM " << pconstants_array << "[] = {" << pconstants_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->lowLatencyMode << "," << std::endl; - struct_body << "\t\t\t" << structInfo->lowLatencyBoost << "," << std::endl; - struct_body << "\t\t\t" << structInfo->minimumIntervalUs << ","; - std::string variable_name = consumer.AddStruct(struct_body, "latencySleepModeInfoNV"); - out << "\t\t" << "VkLatencySleepModeInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << consumer.GetHandle(metaInfo->module) << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->pName) << "," << std::endl; + struct_body << "\t\t\t" << pspecialization_info_struct << "," << std::endl; + struct_body << "\t\t\t" << structInfo->constantCount << "," << std::endl; + struct_body << "\t\t\t" << pconstants_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelineShaderModuleCreateInfoARM"); + out << "\t\t" << "VkDataGraphPipelineShaderModuleCreateInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkLatencySubmissionPresentIdNV(std::ostream &out, const VkLatencySubmissionPresentIdNV* structInfo, Decoded_VkLatencySubmissionPresentIdNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkDataGraphProcessingEngineCreateInfoARM(std::ostream &out, const VkDataGraphProcessingEngineCreateInfoARM* structInfo, Decoded_VkDataGraphProcessingEngineCreateInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pprocessing_engines_array = "NULL"; + if (structInfo->pProcessingEngines != NULL) { + pprocessing_engines_array = "pProcessingEngines_" + std::to_string(consumer.GetNextId()); + std::string pprocessing_engines_names; + for (uint32_t idx = 0; idx < structInfo->processingEngineCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pProcessingEngines + idx != NULL) { + variable_name = GenerateStruct_VkPhysicalDeviceDataGraphProcessingEngineARM(out, + structInfo->pProcessingEngines + idx, + metaInfo->pProcessingEngines->GetMetaStructPointer() + idx, + consumer); + } + pprocessing_engines_names += variable_name + ", "; + } + out << "\t\t" << "VkPhysicalDeviceDataGraphProcessingEngineARM " << pprocessing_engines_array << "[] = {" << pprocessing_engines_names << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentID << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "latencySubmissionPresentIdNV"); - out << "\t\t" << "VkLatencySubmissionPresentIdNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->processingEngineCount << "," << std::endl; + struct_body << "\t\t\t" << pprocessing_engines_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphProcessingEngineCreateInfoARM"); + out << "\t\t" << "VkDataGraphProcessingEngineCreateInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkLatencySurfaceCapabilitiesNV(std::ostream &out, const VkLatencySurfaceCapabilitiesNV* structInfo, Decoded_VkLatencySurfaceCapabilitiesNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDataGraphFeaturesARM(std::ostream &out, const VkPhysicalDeviceDataGraphFeaturesARM* structInfo, Decoded_VkPhysicalDeviceDataGraphFeaturesARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - std::string ppresent_modes_array = "NULL"; - if (structInfo->pPresentModes != NULL) { - std::string ppresent_modes_values; - for (uint32_t idx = 0; idx < structInfo->presentModeCount; idx++) { - ppresent_modes_values += util::ToString(structInfo->pPresentModes[idx]) + ", "; - } - ppresent_modes_array = "pPresentModes_" + std::to_string(consumer.GetNextId()); - out << "\t\t" << "VkPresentModeKHR " << ppresent_modes_array << "[] = {" << ppresent_modes_values << "};" << std::endl; - } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentModeCount << "," << std::endl; - struct_body << "\t\t\t" << ppresent_modes_array << ","; - std::string variable_name = consumer.AddStruct(struct_body, "latencySurfaceCapabilitiesNV"); - out << "\t\t" << "VkLatencySurfaceCapabilitiesNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->dataGraph << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dataGraphUpdateAfterBind << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dataGraphSpecializationConstants << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dataGraphDescriptorBuffer << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dataGraphShaderModule << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDataGraphFeaturesARM"); + out << "\t\t" << "VkPhysicalDeviceDataGraphFeaturesARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkLatencyTimingsFrameReportNV(std::ostream &out, const VkLatencyTimingsFrameReportNV* structInfo, Decoded_VkLatencyTimingsFrameReportNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDataGraphOperationSupportARM(std::ostream &out, const VkPhysicalDeviceDataGraphOperationSupportARM* structInfo, Decoded_VkPhysicalDeviceDataGraphOperationSupportARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; - std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); - struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; - struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentID << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->inputSampleTimeUs << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->simStartTimeUs << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->simEndTimeUs << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->renderSubmitStartTimeUs << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->renderSubmitEndTimeUs << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentStartTimeUs << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentEndTimeUs << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->driverStartTimeUs << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->driverEndTimeUs << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->osRenderQueueStartTimeUs << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->osRenderQueueEndTimeUs << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->gpuRenderStartTimeUs << "UL" << "," << std::endl; - struct_body << "\t\t\t" << structInfo->gpuRenderEndTimeUs << "UL" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "latencyTimingsFrameReportNV"); - out << "\t\t" << "VkLatencyTimingsFrameReportNV " << variable_name << " {" << std::endl; + struct_body << "\t" << "VkPhysicalDeviceDataGraphOperationTypeARM(" << structInfo->operationType << ")" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->name) << "," << std::endl; + struct_body << "\t\t\t" << structInfo->version << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDataGraphOperationSupportARM"); + out << "\t\t" << "VkPhysicalDeviceDataGraphOperationSupportARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkOutOfBandQueueTypeInfoNV(std::ostream &out, const VkOutOfBandQueueTypeInfoNV* structInfo, Decoded_VkOutOfBandQueueTypeInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceDataGraphProcessingEngineARM(std::ostream &out, const VkPhysicalDeviceDataGraphProcessingEngineARM* structInfo, Decoded_VkPhysicalDeviceDataGraphProcessingEngineARM* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + struct_body << "\t" << "VkPhysicalDeviceDataGraphProcessingEngineTypeARM(" << structInfo->type << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->isForeign << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDataGraphProcessingEngineARM"); + out << "\t\t" << "VkPhysicalDeviceDataGraphProcessingEngineARM " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM(std::ostream &out, const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* structInfo, Decoded_VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << "VkOutOfBandQueueTypeNV(" << structInfo->queueType << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "outOfBandQueueTypeInfoNV"); - out << "\t\t" << "VkOutOfBandQueueTypeInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->queueFamilyIndex << "," << std::endl; + struct_body << "\t\t\t" << "VkPhysicalDeviceDataGraphProcessingEngineTypeARM(" << structInfo->engineType << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM"); + out << "\t\t" << "VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSetLatencyMarkerInfoNV(std::ostream &out, const VkSetLatencyMarkerInfoNV* structInfo, Decoded_VkSetLatencyMarkerInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkQueueFamilyDataGraphProcessingEnginePropertiesARM(std::ostream &out, const VkQueueFamilyDataGraphProcessingEnginePropertiesARM* structInfo, Decoded_VkQueueFamilyDataGraphProcessingEnginePropertiesARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->presentID << "UL" << "," << std::endl; - struct_body << "\t\t\t" << "VkLatencyMarkerNV(" << structInfo->marker << ")" << ","; - std::string variable_name = consumer.AddStruct(struct_body, "setLatencyMarkerInfoNV"); - out << "\t\t" << "VkSetLatencyMarkerInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << "VkExternalSemaphoreHandleTypeFlags(" << structInfo->foreignSemaphoreHandleTypes << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkExternalMemoryHandleTypeFlags(" << structInfo->foreignMemoryHandleTypes << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyDataGraphProcessingEnginePropertiesARM"); + out << "\t\t" << "VkQueueFamilyDataGraphProcessingEnginePropertiesARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkSwapchainLatencyCreateInfoNV(std::ostream &out, const VkSwapchainLatencyCreateInfoNV* structInfo, Decoded_VkSwapchainLatencyCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkQueueFamilyDataGraphPropertiesARM(std::ostream &out, const VkQueueFamilyDataGraphPropertiesARM* structInfo, Decoded_VkQueueFamilyDataGraphPropertiesARM* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string engine_info_var = GenerateStruct_VkPhysicalDeviceDataGraphProcessingEngineARM(out, + &structInfo->engine, + metaInfo->engine, + consumer); + std::string operation_info_var = GenerateStruct_VkPhysicalDeviceDataGraphOperationSupportARM(out, + &structInfo->operation, + metaInfo->operation, + consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->latencyModeEnable << ","; - std::string variable_name = consumer.AddStruct(struct_body, "swapchainLatencyCreateInfoNV"); - out << "\t\t" << "VkSwapchainLatencyCreateInfoNV " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << engine_info_var << "," << std::endl; + struct_body << "\t\t\t" << operation_info_var << ","; + std::string variable_name = consumer.AddStruct(struct_body, "queueFamilyDataGraphPropertiesARM"); + out << "\t\t" << "VkQueueFamilyDataGraphPropertiesARM " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; @@ -22507,6 +22151,81 @@ std::string GenerateStruct_VkTileMemorySizeInfoQCOM(std::ostream &out, const VkT } +std::string GenerateStruct_VkDecompressMemoryInfoEXT(std::ostream &out, const VkDecompressMemoryInfoEXT* structInfo, Decoded_VkDecompressMemoryInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pregions_array = "NULL"; + if (structInfo->pRegions != NULL) { + pregions_array = "pRegions_" + std::to_string(consumer.GetNextId()); + std::string pregions_names; + for (uint32_t idx = 0; idx < structInfo->regionCount; idx++) { + std::string variable_name = "NULL"; + if (structInfo->pRegions + idx != NULL) { + variable_name = GenerateStruct_VkDecompressMemoryRegionEXT(out, + structInfo->pRegions + idx, + metaInfo->pRegions->GetMetaStructPointer() + idx, + consumer); + } + pregions_names += variable_name + ", "; + } + out << "\t\t" << "VkDecompressMemoryRegionEXT " << pregions_array << "[] = {" << pregions_names << "};" << std::endl; + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkMemoryDecompressionMethodFlagsEXT(" << structInfo->decompressionMethod << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->regionCount << "," << std::endl; + struct_body << "\t\t\t" << pregions_array << ","; + std::string variable_name = consumer.AddStruct(struct_body, "decompressMemoryInfoEXT"); + out << "\t\t" << "VkDecompressMemoryInfoEXT " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkDecompressMemoryRegionEXT(std::ostream &out, const VkDecompressMemoryRegionEXT* structInfo, Decoded_VkDecompressMemoryRegionEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + struct_body << "\t" << structInfo->srcAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dstAddress << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->compressedSize << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->decompressedSize << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "decompressMemoryRegionEXT"); + out << "\t\t" << "VkDecompressMemoryRegionEXT " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceMemoryDecompressionFeaturesEXT(std::ostream &out, const VkPhysicalDeviceMemoryDecompressionFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceMemoryDecompressionFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->memoryDecompression << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMemoryDecompressionFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceMemoryDecompressionFeaturesEXT " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceMemoryDecompressionPropertiesEXT(std::ostream &out, const VkPhysicalDeviceMemoryDecompressionPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceMemoryDecompressionPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkMemoryDecompressionMethodFlagsEXT(" << structInfo->decompressionMethods << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxDecompressionIndirectCount << "UL" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceMemoryDecompressionPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceMemoryDecompressionPropertiesEXT " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + std::string GenerateStruct_VkDisplayModeStereoPropertiesNV(std::ostream &out, const VkDisplayModeStereoPropertiesNV* structInfo, Decoded_VkDisplayModeStereoPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); @@ -23247,6 +22966,35 @@ std::string GenerateStruct_VkPhysicalDeviceImageAlignmentControlPropertiesMESA(s } +std::string GenerateStruct_VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT(std::ostream &out, const VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->rayTracingInvocationReorder << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingInvocationReorderFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT(std::ostream &out, const VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkRayTracingInvocationReorderModeEXT(" << structInfo->rayTracingInvocationReorderReorderingHint << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxShaderBindingTableRecordIndex << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceRayTracingInvocationReorderPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + std::string GenerateStruct_VkPhysicalDeviceDepthClampControlFeaturesEXT(std::ostream &out, const VkPhysicalDeviceDepthClampControlFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceDepthClampControlFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); @@ -23439,6 +23187,88 @@ std::string GenerateStruct_VkMemoryMetalHandlePropertiesEXT(std::ostream &out, c } +std::string GenerateStruct_VkPerformanceCounterARM(std::ostream &out, const VkPerformanceCounterARM* structInfo, Decoded_VkPerformanceCounterARM* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->counterID << ","; + std::string variable_name = consumer.AddStruct(struct_body, "performanceCounterARM"); + out << "\t\t" << "VkPerformanceCounterARM " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPerformanceCounterDescriptionARM(std::ostream &out, const VkPerformanceCounterDescriptionARM* structInfo, Decoded_VkPerformanceCounterDescriptionARM* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << "VkPerformanceCounterDescriptionFlagsARM(" << structInfo->flags << ")" << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::ToEscape(structInfo->name) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "performanceCounterDescriptionARM"); + out << "\t\t" << "VkPerformanceCounterDescriptionARM " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(std::ostream &out, const VkPhysicalDevicePerformanceCountersByRegionFeaturesARM* structInfo, Decoded_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->performanceCountersByRegion << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePerformanceCountersByRegionFeaturesARM"); + out << "\t\t" << "VkPhysicalDevicePerformanceCountersByRegionFeaturesARM " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(std::ostream &out, const VkPhysicalDevicePerformanceCountersByRegionPropertiesARM* structInfo, Decoded_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string performance_counter_region_size_info_var = GenerateStruct_VkExtent2D(out, + &structInfo->performanceCounterRegionSize, + metaInfo->performanceCounterRegionSize, + consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxPerRegionPerformanceCounters << "," << std::endl; + struct_body << "\t\t\t" << performance_counter_region_size_info_var << "," << std::endl; + struct_body << "\t\t\t" << structInfo->rowStrideAlignment << "," << std::endl; + struct_body << "\t\t\t" << structInfo->regionAlignment << "," << std::endl; + struct_body << "\t\t\t" << structInfo->identityTransformOrder << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDevicePerformanceCountersByRegionPropertiesARM"); + out << "\t\t" << "VkPhysicalDevicePerformanceCountersByRegionPropertiesARM " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkRenderPassPerformanceCountersByRegionBeginInfoARM(std::ostream &out, const VkRenderPassPerformanceCountersByRegionBeginInfoARM* structInfo, Decoded_VkRenderPassPerformanceCountersByRegionBeginInfoARM* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->counterAddressCount << "," << std::endl; + struct_body << "\t\t\t" << structInfo->pCounterAddresses << "UL" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->serializeRegions << "," << std::endl; + struct_body << "\t\t\t" << structInfo->counterIndexCount << "," << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "renderPassPerformanceCountersByRegionBeginInfoARM"); + out << "\t\t" << "VkRenderPassPerformanceCountersByRegionBeginInfoARM " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + std::string GenerateStruct_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT(std::ostream &out, const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); @@ -23538,27 +23368,161 @@ std::string GenerateStruct_VkSetPresentConfigNV(std::ostream &out, const VkSetPr } -std::string GenerateStruct_VkRenderingEndInfoEXT(std::ostream &out, const VkRenderingEndInfoEXT* structInfo, Decoded_VkRenderingEndInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(std::ostream &out, const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->zeroInitializeDeviceMemory << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceZeroInitializeDeviceMemoryFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(std::ostream &out, const VkPhysicalDeviceShader64BitIndexingFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShader64BitIndexingFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shader64BitIndexing << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShader64BitIndexingFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceShader64BitIndexingFeaturesEXT " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkBeginCustomResolveInfoEXT(std::ostream &out, const VkBeginCustomResolveInfoEXT* structInfo, Decoded_VkBeginCustomResolveInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << ","; - std::string variable_name = consumer.AddStruct(struct_body, "renderingEndInfoEXT"); - out << "\t\t" << "VkRenderingEndInfoEXT " << variable_name << " {" << std::endl; + std::string variable_name = consumer.AddStruct(struct_body, "beginCustomResolveInfoEXT"); + out << "\t\t" << "VkBeginCustomResolveInfoEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; } -std::string GenerateStruct_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(std::ostream &out, const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ +std::string GenerateStruct_VkCustomResolveCreateInfoEXT(std::ostream &out, const VkCustomResolveCreateInfoEXT* structInfo, Decoded_VkCustomResolveCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string pcolor_attachment_formats_values; + std::string pcolor_attachment_formats_array = "NULL"; + if (structInfo->pColorAttachmentFormats != NULL) { + for (uint32_t idx = 0; idx < structInfo->colorAttachmentCount; idx++) { + pcolor_attachment_formats_values += util::ToString(structInfo->pColorAttachmentFormats[idx]) + ", "; + } + pcolor_attachment_formats_array = "pColorAttachmentFormats_" + std::to_string(consumer.GetNextId()); + out << "\t\t" << "VkFormat " << pcolor_attachment_formats_array << "[] = {" << pcolor_attachment_formats_values << "};" << std::endl; + } struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; struct_body << "\t\t\t" << pnext_name << "," << std::endl; - struct_body << "\t\t\t" << structInfo->zeroInitializeDeviceMemory << ","; - std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceZeroInitializeDeviceMemoryFeaturesEXT"); - out << "\t\t" << "VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT " << variable_name << " {" << std::endl; + struct_body << "\t\t\t" << structInfo->customResolve << "," << std::endl; + struct_body << "\t\t\t" << structInfo->colorAttachmentCount << "," << std::endl; + struct_body << "\t\t\t" << pcolor_attachment_formats_array << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->depthAttachmentFormat << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkFormat(" << structInfo->stencilAttachmentFormat << ")" << ","; + std::string variable_name = consumer.AddStruct(struct_body, "customResolveCreateInfoEXT"); + out << "\t\t" << "VkCustomResolveCreateInfoEXT " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceCustomResolveFeaturesEXT(std::ostream &out, const VkPhysicalDeviceCustomResolveFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceCustomResolveFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->customResolve << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceCustomResolveFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceCustomResolveFeaturesEXT " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkDataGraphPipelineBuiltinModelCreateInfoQCOM(std::ostream &out, const VkDataGraphPipelineBuiltinModelCreateInfoQCOM* structInfo, Decoded_VkDataGraphPipelineBuiltinModelCreateInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + std::string poperation_struct = "NULL"; + if (structInfo->pOperation != NULL) { + poperation_struct = GenerateStruct_VkPhysicalDeviceDataGraphOperationSupportARM(out, + structInfo->pOperation, + metaInfo->pOperation->GetMetaStructPointer(), + consumer); + poperation_struct.insert(0, "&"); + } + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << poperation_struct << ","; + std::string variable_name = consumer.AddStruct(struct_body, "dataGraphPipelineBuiltinModelCreateInfoQCOM"); + out << "\t\t" << "VkDataGraphPipelineBuiltinModelCreateInfoQCOM " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceDataGraphModelFeaturesQCOM(std::ostream &out, const VkPhysicalDeviceDataGraphModelFeaturesQCOM* structInfo, Decoded_VkPhysicalDeviceDataGraphModelFeaturesQCOM* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->dataGraphModel << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceDataGraphModelFeaturesQCOM"); + out << "\t\t" << "VkPhysicalDeviceDataGraphModelFeaturesQCOM " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPipelineCacheHeaderVersionDataGraphQCOM(std::ostream &out, const VkPipelineCacheHeaderVersionDataGraphQCOM* structInfo, Decoded_VkPipelineCacheHeaderVersionDataGraphQCOM* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + struct_body << "\t" << structInfo->headerSize << "," << std::endl; + struct_body << "\t\t\t" << "VkPipelineCacheHeaderVersion(" << structInfo->headerVersion << ")" << "," << std::endl; + struct_body << "\t\t\t" << "VkDataGraphModelCacheTypeQCOM(" << structInfo->cacheType << ")" << "," << std::endl; + struct_body << "\t\t\t" << structInfo->cacheVersion << "," << std::endl; + struct_body << "\t\t\t" << VulkanCppConsumerBase::BuildValue(reinterpret_cast(&structInfo->toolchainVersion[0]), VK_DATA_GRAPH_MODEL_TOOLCHAIN_VERSION_LENGTH_QCOM) << ","; + std::string variable_name = consumer.AddStruct(struct_body, "pipelineCacheHeaderVersionDataGraphQCOM"); + out << "\t\t" << "VkPipelineCacheHeaderVersionDataGraphQCOM " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceShaderLongVectorFeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderLongVectorFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderLongVectorFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->longVector << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderLongVectorFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceShaderLongVectorFeaturesEXT " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceShaderLongVectorPropertiesEXT(std::ostream &out, const VkPhysicalDeviceShaderLongVectorPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceShaderLongVectorPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->maxVectorComponents << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderLongVectorPropertiesEXT"); + out << "\t\t" << "VkPhysicalDeviceShaderLongVectorPropertiesEXT " << variable_name << " {" << std::endl; out << "\t\t" << struct_body.str() << std::endl; out << "\t\t" << "};" << std::endl; return variable_name; @@ -23579,6 +23543,49 @@ std::string GenerateStruct_VkPhysicalDevicePipelineCacheIncrementalModeFeaturesS } +std::string GenerateStruct_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->shaderUniformBufferUnsizedArray << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT"); + out << "\t\t" << "VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkComputeOccupancyPriorityParametersNV(std::ostream &out, const VkComputeOccupancyPriorityParametersNV* structInfo, Decoded_VkComputeOccupancyPriorityParametersNV* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->occupancyPriority << "," << std::endl; + struct_body << "\t\t\t" << structInfo->occupancyThrottling << ","; + std::string variable_name = consumer.AddStruct(struct_body, "computeOccupancyPriorityParametersNV"); + out << "\t\t" << "VkComputeOccupancyPriorityParametersNV " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + +std::string GenerateStruct_VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV(std::ostream &out, const VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV* structInfo, Decoded_VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer){ + std::stringstream struct_body; + std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); + struct_body << "\t" << "VkStructureType(" << structInfo->sType << ")" << "," << std::endl; + struct_body << "\t\t\t" << pnext_name << "," << std::endl; + struct_body << "\t\t\t" << structInfo->computeOccupancyPriority << ","; + std::string variable_name = consumer.AddStruct(struct_body, "physicalDeviceComputeOccupancyPriorityFeaturesNV"); + out << "\t\t" << "VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV " << variable_name << " {" << std::endl; + out << "\t\t" << struct_body.str() << std::endl; + out << "\t\t" << "};" << std::endl; + return variable_name; +} + + std::string GenerateStruct_VkAccelerationStructureBuildGeometryInfoKHR(std::ostream &out, const VkAccelerationStructureBuildGeometryInfoKHR* structInfo, Decoded_VkAccelerationStructureBuildGeometryInfoKHR* metaInfo, VulkanCppConsumerBase &consumer){ std::stringstream struct_body; std::string pnext_name = GenerateExtension(out, structInfo->pNext, metaInfo->pNext, consumer); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_structs.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_structs.h index c086e52db..d05812d99 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_structs.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_cpp_structs.h @@ -96,14 +96,6 @@ std::string GenerateStruct_StdVideoDecodeH264ReferenceInfo(std::ostream &out, co std::string GenerateStruct_StdVideoDecodeH264ReferenceInfoFlags(std::ostream &out, const StdVideoDecodeH264ReferenceInfoFlags* structInfo, Decoded_StdVideoDecodeH264ReferenceInfoFlags* metaInfo, VulkanCppConsumerBase &consumer); -std::string GenerateStruct_StdVideoDecodeH265PictureInfo(std::ostream &out, const StdVideoDecodeH265PictureInfo* structInfo, Decoded_StdVideoDecodeH265PictureInfo* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoDecodeH265PictureInfoFlags(std::ostream &out, const StdVideoDecodeH265PictureInfoFlags* structInfo, Decoded_StdVideoDecodeH265PictureInfoFlags* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoDecodeH265ReferenceInfo(std::ostream &out, const StdVideoDecodeH265ReferenceInfo* structInfo, Decoded_StdVideoDecodeH265ReferenceInfo* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoDecodeH265ReferenceInfoFlags(std::ostream &out, const StdVideoDecodeH265ReferenceInfoFlags* structInfo, Decoded_StdVideoDecodeH265ReferenceInfoFlags* metaInfo, VulkanCppConsumerBase &consumer); - std::string GenerateStruct_StdVideoDecodeVP9PictureInfo(std::ostream &out, const StdVideoDecodeVP9PictureInfo* structInfo, Decoded_StdVideoDecodeVP9PictureInfo* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_StdVideoDecodeVP9PictureInfoFlags(std::ostream &out, const StdVideoDecodeVP9PictureInfoFlags* structInfo, Decoded_StdVideoDecodeVP9PictureInfoFlags* metaInfo, VulkanCppConsumerBase &consumer); @@ -148,28 +140,6 @@ std::string GenerateStruct_StdVideoEncodeH264WeightTable(std::ostream &out, cons std::string GenerateStruct_StdVideoEncodeH264WeightTableFlags(std::ostream &out, const StdVideoEncodeH264WeightTableFlags* structInfo, Decoded_StdVideoEncodeH264WeightTableFlags* metaInfo, VulkanCppConsumerBase &consumer); -std::string GenerateStruct_StdVideoEncodeH265LongTermRefPics(std::ostream &out, const StdVideoEncodeH265LongTermRefPics* structInfo, Decoded_StdVideoEncodeH265LongTermRefPics* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoEncodeH265PictureInfo(std::ostream &out, const StdVideoEncodeH265PictureInfo* structInfo, Decoded_StdVideoEncodeH265PictureInfo* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoEncodeH265PictureInfoFlags(std::ostream &out, const StdVideoEncodeH265PictureInfoFlags* structInfo, Decoded_StdVideoEncodeH265PictureInfoFlags* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoEncodeH265ReferenceInfo(std::ostream &out, const StdVideoEncodeH265ReferenceInfo* structInfo, Decoded_StdVideoEncodeH265ReferenceInfo* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoEncodeH265ReferenceInfoFlags(std::ostream &out, const StdVideoEncodeH265ReferenceInfoFlags* structInfo, Decoded_StdVideoEncodeH265ReferenceInfoFlags* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoEncodeH265ReferenceListsInfo(std::ostream &out, const StdVideoEncodeH265ReferenceListsInfo* structInfo, Decoded_StdVideoEncodeH265ReferenceListsInfo* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoEncodeH265ReferenceListsInfoFlags(std::ostream &out, const StdVideoEncodeH265ReferenceListsInfoFlags* structInfo, Decoded_StdVideoEncodeH265ReferenceListsInfoFlags* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoEncodeH265SliceSegmentHeader(std::ostream &out, const StdVideoEncodeH265SliceSegmentHeader* structInfo, Decoded_StdVideoEncodeH265SliceSegmentHeader* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoEncodeH265SliceSegmentHeaderFlags(std::ostream &out, const StdVideoEncodeH265SliceSegmentHeaderFlags* structInfo, Decoded_StdVideoEncodeH265SliceSegmentHeaderFlags* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoEncodeH265WeightTable(std::ostream &out, const StdVideoEncodeH265WeightTable* structInfo, Decoded_StdVideoEncodeH265WeightTable* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoEncodeH265WeightTableFlags(std::ostream &out, const StdVideoEncodeH265WeightTableFlags* structInfo, Decoded_StdVideoEncodeH265WeightTableFlags* metaInfo, VulkanCppConsumerBase &consumer); - std::string GenerateStruct_StdVideoH264HrdParameters(std::ostream &out, const StdVideoH264HrdParameters* structInfo, Decoded_StdVideoH264HrdParameters* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_StdVideoH264PictureParameterSet(std::ostream &out, const StdVideoH264PictureParameterSet* structInfo, Decoded_StdVideoH264PictureParameterSet* metaInfo, VulkanCppConsumerBase &consumer); @@ -186,44 +156,6 @@ std::string GenerateStruct_StdVideoH264SpsFlags(std::ostream &out, const StdVide std::string GenerateStruct_StdVideoH264SpsVuiFlags(std::ostream &out, const StdVideoH264SpsVuiFlags* structInfo, Decoded_StdVideoH264SpsVuiFlags* metaInfo, VulkanCppConsumerBase &consumer); -std::string GenerateStruct_StdVideoH265DecPicBufMgr(std::ostream &out, const StdVideoH265DecPicBufMgr* structInfo, Decoded_StdVideoH265DecPicBufMgr* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265HrdFlags(std::ostream &out, const StdVideoH265HrdFlags* structInfo, Decoded_StdVideoH265HrdFlags* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265HrdParameters(std::ostream &out, const StdVideoH265HrdParameters* structInfo, Decoded_StdVideoH265HrdParameters* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265LongTermRefPicsSps(std::ostream &out, const StdVideoH265LongTermRefPicsSps* structInfo, Decoded_StdVideoH265LongTermRefPicsSps* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265PictureParameterSet(std::ostream &out, const StdVideoH265PictureParameterSet* structInfo, Decoded_StdVideoH265PictureParameterSet* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265PpsFlags(std::ostream &out, const StdVideoH265PpsFlags* structInfo, Decoded_StdVideoH265PpsFlags* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265PredictorPaletteEntries(std::ostream &out, const StdVideoH265PredictorPaletteEntries* structInfo, Decoded_StdVideoH265PredictorPaletteEntries* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265ProfileTierLevel(std::ostream &out, const StdVideoH265ProfileTierLevel* structInfo, Decoded_StdVideoH265ProfileTierLevel* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265ProfileTierLevelFlags(std::ostream &out, const StdVideoH265ProfileTierLevelFlags* structInfo, Decoded_StdVideoH265ProfileTierLevelFlags* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265ScalingLists(std::ostream &out, const StdVideoH265ScalingLists* structInfo, Decoded_StdVideoH265ScalingLists* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265SequenceParameterSet(std::ostream &out, const StdVideoH265SequenceParameterSet* structInfo, Decoded_StdVideoH265SequenceParameterSet* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265SequenceParameterSetVui(std::ostream &out, const StdVideoH265SequenceParameterSetVui* structInfo, Decoded_StdVideoH265SequenceParameterSetVui* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265ShortTermRefPicSet(std::ostream &out, const StdVideoH265ShortTermRefPicSet* structInfo, Decoded_StdVideoH265ShortTermRefPicSet* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265ShortTermRefPicSetFlags(std::ostream &out, const StdVideoH265ShortTermRefPicSetFlags* structInfo, Decoded_StdVideoH265ShortTermRefPicSetFlags* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265SpsFlags(std::ostream &out, const StdVideoH265SpsFlags* structInfo, Decoded_StdVideoH265SpsFlags* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265SpsVuiFlags(std::ostream &out, const StdVideoH265SpsVuiFlags* structInfo, Decoded_StdVideoH265SpsVuiFlags* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265SubLayerHrdParameters(std::ostream &out, const StdVideoH265SubLayerHrdParameters* structInfo, Decoded_StdVideoH265SubLayerHrdParameters* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265VideoParameterSet(std::ostream &out, const StdVideoH265VideoParameterSet* structInfo, Decoded_StdVideoH265VideoParameterSet* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_StdVideoH265VpsFlags(std::ostream &out, const StdVideoH265VpsFlags* structInfo, Decoded_StdVideoH265VpsFlags* metaInfo, VulkanCppConsumerBase &consumer); - std::string GenerateStruct_StdVideoVP9ColorConfig(std::ostream &out, const StdVideoVP9ColorConfig* structInfo, Decoded_StdVideoVP9ColorConfig* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_StdVideoVP9ColorConfigFlags(std::ostream &out, const StdVideoVP9ColorConfigFlags* structInfo, Decoded_StdVideoVP9ColorConfigFlags* metaInfo, VulkanCppConsumerBase &consumer); @@ -980,38 +912,6 @@ std::string GenerateStruct_VkVideoEncodeH264SessionParametersFeedbackInfoKHR(std std::string GenerateStruct_VkVideoEncodeH264SessionParametersGetInfoKHR(std::ostream &out, const VkVideoEncodeH264SessionParametersGetInfoKHR* structInfo, Decoded_VkVideoEncodeH264SessionParametersGetInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); -std::string GenerateStruct_VkVideoEncodeH265CapabilitiesKHR(std::ostream &out, const VkVideoEncodeH265CapabilitiesKHR* structInfo, Decoded_VkVideoEncodeH265CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265DpbSlotInfoKHR(std::ostream &out, const VkVideoEncodeH265DpbSlotInfoKHR* structInfo, Decoded_VkVideoEncodeH265DpbSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265FrameSizeKHR(std::ostream &out, const VkVideoEncodeH265FrameSizeKHR* structInfo, Decoded_VkVideoEncodeH265FrameSizeKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265GopRemainingFrameInfoKHR(std::ostream &out, const VkVideoEncodeH265GopRemainingFrameInfoKHR* structInfo, Decoded_VkVideoEncodeH265GopRemainingFrameInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265NaluSliceSegmentInfoKHR(std::ostream &out, const VkVideoEncodeH265NaluSliceSegmentInfoKHR* structInfo, Decoded_VkVideoEncodeH265NaluSliceSegmentInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265PictureInfoKHR(std::ostream &out, const VkVideoEncodeH265PictureInfoKHR* structInfo, Decoded_VkVideoEncodeH265PictureInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265ProfileInfoKHR(std::ostream &out, const VkVideoEncodeH265ProfileInfoKHR* structInfo, Decoded_VkVideoEncodeH265ProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265QpKHR(std::ostream &out, const VkVideoEncodeH265QpKHR* structInfo, Decoded_VkVideoEncodeH265QpKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265QualityLevelPropertiesKHR(std::ostream &out, const VkVideoEncodeH265QualityLevelPropertiesKHR* structInfo, Decoded_VkVideoEncodeH265QualityLevelPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265RateControlInfoKHR(std::ostream &out, const VkVideoEncodeH265RateControlInfoKHR* structInfo, Decoded_VkVideoEncodeH265RateControlInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265RateControlLayerInfoKHR(std::ostream &out, const VkVideoEncodeH265RateControlLayerInfoKHR* structInfo, Decoded_VkVideoEncodeH265RateControlLayerInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265SessionCreateInfoKHR(std::ostream &out, const VkVideoEncodeH265SessionCreateInfoKHR* structInfo, Decoded_VkVideoEncodeH265SessionCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265SessionParametersAddInfoKHR(std::ostream &out, const VkVideoEncodeH265SessionParametersAddInfoKHR* structInfo, Decoded_VkVideoEncodeH265SessionParametersAddInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265SessionParametersCreateInfoKHR(std::ostream &out, const VkVideoEncodeH265SessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoEncodeH265SessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265SessionParametersFeedbackInfoKHR(std::ostream &out, const VkVideoEncodeH265SessionParametersFeedbackInfoKHR* structInfo, Decoded_VkVideoEncodeH265SessionParametersFeedbackInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoEncodeH265SessionParametersGetInfoKHR(std::ostream &out, const VkVideoEncodeH265SessionParametersGetInfoKHR* structInfo, Decoded_VkVideoEncodeH265SessionParametersGetInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - std::string GenerateStruct_VkVideoDecodeH264CapabilitiesKHR(std::ostream &out, const VkVideoDecodeH264CapabilitiesKHR* structInfo, Decoded_VkVideoDecodeH264CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkVideoDecodeH264DpbSlotInfoKHR(std::ostream &out, const VkVideoDecodeH264DpbSlotInfoKHR* structInfo, Decoded_VkVideoDecodeH264DpbSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); @@ -1108,18 +1008,6 @@ std::string GenerateStruct_VkPhysicalDevicePortabilitySubsetPropertiesKHR(std::o std::string GenerateStruct_VkPhysicalDeviceShaderClockFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderClockFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderClockFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); -std::string GenerateStruct_VkVideoDecodeH265CapabilitiesKHR(std::ostream &out, const VkVideoDecodeH265CapabilitiesKHR* structInfo, Decoded_VkVideoDecodeH265CapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoDecodeH265DpbSlotInfoKHR(std::ostream &out, const VkVideoDecodeH265DpbSlotInfoKHR* structInfo, Decoded_VkVideoDecodeH265DpbSlotInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoDecodeH265PictureInfoKHR(std::ostream &out, const VkVideoDecodeH265PictureInfoKHR* structInfo, Decoded_VkVideoDecodeH265PictureInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoDecodeH265ProfileInfoKHR(std::ostream &out, const VkVideoDecodeH265ProfileInfoKHR* structInfo, Decoded_VkVideoDecodeH265ProfileInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoDecodeH265SessionParametersAddInfoKHR(std::ostream &out, const VkVideoDecodeH265SessionParametersAddInfoKHR* structInfo, Decoded_VkVideoDecodeH265SessionParametersAddInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoDecodeH265SessionParametersCreateInfoKHR(std::ostream &out, const VkVideoDecodeH265SessionParametersCreateInfoKHR* structInfo, Decoded_VkVideoDecodeH265SessionParametersCreateInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - std::string GenerateStruct_VkFragmentShadingRateAttachmentInfoKHR(std::ostream &out, const VkFragmentShadingRateAttachmentInfoKHR* structInfo, Decoded_VkFragmentShadingRateAttachmentInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(std::ostream &out, const VkPhysicalDeviceFragmentShadingRateFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceFragmentShadingRateFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); @@ -1190,6 +1078,8 @@ std::string GenerateStruct_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR(std std::string GenerateStruct_VkTraceRaysIndirectCommand2KHR(std::ostream &out, const VkTraceRaysIndirectCommand2KHR* structInfo, Decoded_VkTraceRaysIndirectCommand2KHR* metaInfo, VulkanCppConsumerBase &consumer); +std::string GenerateStruct_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderUntypedPointersFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); + std::string GenerateStruct_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkPhysicalDevicePresentId2FeaturesKHR(std::ostream &out, const VkPhysicalDevicePresentId2FeaturesKHR* structInfo, Decoded_VkPhysicalDevicePresentId2FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); @@ -1316,6 +1206,20 @@ std::string GenerateStruct_VkBindDescriptorBufferEmbeddedSamplersInfoEXT(std::os std::string GenerateStruct_VkSetDescriptorBufferOffsetsInfoEXT(std::ostream &out, const VkSetDescriptorBufferOffsetsInfoEXT* structInfo, Decoded_VkSetDescriptorBufferOffsetsInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); +std::string GenerateStruct_VkCopyMemoryIndirectCommandKHR(std::ostream &out, const VkCopyMemoryIndirectCommandKHR* structInfo, Decoded_VkCopyMemoryIndirectCommandKHR* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkCopyMemoryIndirectInfoKHR(std::ostream &out, const VkCopyMemoryIndirectInfoKHR* structInfo, Decoded_VkCopyMemoryIndirectInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkCopyMemoryToImageIndirectCommandKHR(std::ostream &out, const VkCopyMemoryToImageIndirectCommandKHR* structInfo, Decoded_VkCopyMemoryToImageIndirectCommandKHR* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkCopyMemoryToImageIndirectInfoKHR(std::ostream &out, const VkCopyMemoryToImageIndirectInfoKHR* structInfo, Decoded_VkCopyMemoryToImageIndirectInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR(std::ostream &out, const VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR(std::ostream &out, const VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR* structInfo, Decoded_VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkStridedDeviceAddressRangeKHR(std::ostream &out, const VkStridedDeviceAddressRangeKHR* structInfo, Decoded_VkStridedDeviceAddressRangeKHR* metaInfo, VulkanCppConsumerBase &consumer); + std::string GenerateStruct_VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR(std::ostream &out, const VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkVideoEncodeIntraRefreshCapabilitiesKHR(std::ostream &out, const VkVideoEncodeIntraRefreshCapabilitiesKHR* structInfo, Decoded_VkVideoEncodeIntraRefreshCapabilitiesKHR* metaInfo, VulkanCppConsumerBase &consumer); @@ -1362,20 +1266,14 @@ std::string GenerateStruct_VkMemoryBarrierAccessFlags3KHR(std::ostream &out, con std::string GenerateStruct_VkPhysicalDeviceMaintenance8FeaturesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance8FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); +std::string GenerateStruct_VkPhysicalDeviceShaderFmaFeaturesKHR(std::ostream &out, const VkPhysicalDeviceShaderFmaFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceShaderFmaFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); + std::string GenerateStruct_VkPhysicalDeviceMaintenance9FeaturesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance9FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance9FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkPhysicalDeviceMaintenance9PropertiesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance9PropertiesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance9PropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkQueueFamilyOwnershipTransferPropertiesKHR(std::ostream &out, const VkQueueFamilyOwnershipTransferPropertiesKHR* structInfo, Decoded_VkQueueFamilyOwnershipTransferPropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer); -std::string GenerateStruct_VkPhysicalDeviceVideoMaintenance2FeaturesKHR(std::ostream &out, const VkPhysicalDeviceVideoMaintenance2FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceVideoMaintenance2FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoDecodeAV1InlineSessionParametersInfoKHR(std::ostream &out, const VkVideoDecodeAV1InlineSessionParametersInfoKHR* structInfo, Decoded_VkVideoDecodeAV1InlineSessionParametersInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoDecodeH264InlineSessionParametersInfoKHR(std::ostream &out, const VkVideoDecodeH264InlineSessionParametersInfoKHR* structInfo, Decoded_VkVideoDecodeH264InlineSessionParametersInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - -std::string GenerateStruct_VkVideoDecodeH265InlineSessionParametersInfoKHR(std::ostream &out, const VkVideoDecodeH265InlineSessionParametersInfoKHR* structInfo, Decoded_VkVideoDecodeH265InlineSessionParametersInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); - std::string GenerateStruct_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR(std::ostream &out, const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* structInfo, Decoded_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkPhysicalDeviceRobustness2FeaturesKHR(std::ostream &out, const VkPhysicalDeviceRobustness2FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceRobustness2FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); @@ -1384,6 +1282,16 @@ std::string GenerateStruct_VkPhysicalDeviceRobustness2PropertiesKHR(std::ostream std::string GenerateStruct_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR(std::ostream &out, const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* structInfo, Decoded_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); +std::string GenerateStruct_VkPhysicalDeviceMaintenance10FeaturesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance10FeaturesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance10FeaturesKHR* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceMaintenance10PropertiesKHR(std::ostream &out, const VkPhysicalDeviceMaintenance10PropertiesKHR* structInfo, Decoded_VkPhysicalDeviceMaintenance10PropertiesKHR* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkRenderingAttachmentFlagsInfoKHR(std::ostream &out, const VkRenderingAttachmentFlagsInfoKHR* structInfo, Decoded_VkRenderingAttachmentFlagsInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkRenderingEndInfoKHR(std::ostream &out, const VkRenderingEndInfoKHR* structInfo, Decoded_VkRenderingEndInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkResolveImageModeInfoKHR(std::ostream &out, const VkResolveImageModeInfoKHR* structInfo, Decoded_VkResolveImageModeInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); + std::string GenerateStruct_VkDebugReportCallbackCreateInfoEXT(std::ostream &out, const VkDebugReportCallbackCreateInfoEXT* structInfo, Decoded_VkDebugReportCallbackCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkPipelineRasterizationStateRasterizationOrderAMD(std::ostream &out, const VkPipelineRasterizationStateRasterizationOrderAMD* structInfo, Decoded_VkPipelineRasterizationStateRasterizationOrderAMD* metaInfo, VulkanCppConsumerBase &consumer); @@ -1656,6 +1564,28 @@ std::string GenerateStruct_VkQueueFamilyCheckpointProperties2NV(std::ostream &ou std::string GenerateStruct_VkQueueFamilyCheckpointPropertiesNV(std::ostream &out, const VkQueueFamilyCheckpointPropertiesNV* structInfo, Decoded_VkQueueFamilyCheckpointPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer); +std::string GenerateStruct_VkPastPresentationTimingEXT(std::ostream &out, const VkPastPresentationTimingEXT* structInfo, Decoded_VkPastPresentationTimingEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPastPresentationTimingInfoEXT(std::ostream &out, const VkPastPresentationTimingInfoEXT* structInfo, Decoded_VkPastPresentationTimingInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPastPresentationTimingPropertiesEXT(std::ostream &out, const VkPastPresentationTimingPropertiesEXT* structInfo, Decoded_VkPastPresentationTimingPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDevicePresentTimingFeaturesEXT(std::ostream &out, const VkPhysicalDevicePresentTimingFeaturesEXT* structInfo, Decoded_VkPhysicalDevicePresentTimingFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPresentStageTimeEXT(std::ostream &out, const VkPresentStageTimeEXT* structInfo, Decoded_VkPresentStageTimeEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPresentTimingInfoEXT(std::ostream &out, const VkPresentTimingInfoEXT* structInfo, Decoded_VkPresentTimingInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPresentTimingSurfaceCapabilitiesEXT(std::ostream &out, const VkPresentTimingSurfaceCapabilitiesEXT* structInfo, Decoded_VkPresentTimingSurfaceCapabilitiesEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPresentTimingsInfoEXT(std::ostream &out, const VkPresentTimingsInfoEXT* structInfo, Decoded_VkPresentTimingsInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkSwapchainCalibratedTimestampInfoEXT(std::ostream &out, const VkSwapchainCalibratedTimestampInfoEXT* structInfo, Decoded_VkSwapchainCalibratedTimestampInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkSwapchainTimeDomainPropertiesEXT(std::ostream &out, const VkSwapchainTimeDomainPropertiesEXT* structInfo, Decoded_VkSwapchainTimeDomainPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkSwapchainTimingPropertiesEXT(std::ostream &out, const VkSwapchainTimingPropertiesEXT* structInfo, Decoded_VkSwapchainTimingPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer); + std::string GenerateStruct_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(std::ostream &out, const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* structInfo, Decoded_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkInitializePerformanceApiInfoINTEL(std::ostream &out, const VkInitializePerformanceApiInfoINTEL* structInfo, Decoded_VkInitializePerformanceApiInfoINTEL* metaInfo, VulkanCppConsumerBase &consumer); @@ -1804,6 +1734,8 @@ std::string GenerateStruct_VkPhysicalDeviceCustomBorderColorPropertiesEXT(std::o std::string GenerateStruct_VkSamplerCustomBorderColorCreateInfoEXT(std::ostream &out, const VkSamplerCustomBorderColorCreateInfoEXT* structInfo, Decoded_VkSamplerCustomBorderColorCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); +std::string GenerateStruct_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT(std::ostream &out, const VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); + std::string GenerateStruct_VkPhysicalDevicePresentBarrierFeaturesNV(std::ostream &out, const VkPhysicalDevicePresentBarrierFeaturesNV* structInfo, Decoded_VkPhysicalDevicePresentBarrierFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkSurfaceCapabilitiesPresentBarrierNV(std::ostream &out, const VkSurfaceCapabilitiesPresentBarrierNV* structInfo, Decoded_VkSurfaceCapabilitiesPresentBarrierNV* metaInfo, VulkanCppConsumerBase &consumer); @@ -1828,6 +1760,30 @@ std::string GenerateStruct_VkRenderPassTileShadingCreateInfoQCOM(std::ostream &o std::string GenerateStruct_VkQueryLowLatencySupportNV(std::ostream &out, const VkQueryLowLatencySupportNV* structInfo, Decoded_VkQueryLowLatencySupportNV* metaInfo, VulkanCppConsumerBase &consumer); +std::string GenerateStruct_VkAccelerationStructureCaptureDescriptorDataInfoEXT(std::ostream &out, const VkAccelerationStructureCaptureDescriptorDataInfoEXT* structInfo, Decoded_VkAccelerationStructureCaptureDescriptorDataInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkBufferCaptureDescriptorDataInfoEXT(std::ostream &out, const VkBufferCaptureDescriptorDataInfoEXT* structInfo, Decoded_VkBufferCaptureDescriptorDataInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDescriptorAddressInfoEXT(std::ostream &out, const VkDescriptorAddressInfoEXT* structInfo, Decoded_VkDescriptorAddressInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDescriptorBufferBindingInfoEXT(std::ostream &out, const VkDescriptorBufferBindingInfoEXT* structInfo, Decoded_VkDescriptorBufferBindingInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDescriptorBufferBindingPushDescriptorBufferHandleEXT(std::ostream &out, const VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* structInfo, Decoded_VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkImageCaptureDescriptorDataInfoEXT(std::ostream &out, const VkImageCaptureDescriptorDataInfoEXT* structInfo, Decoded_VkImageCaptureDescriptorDataInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkImageViewCaptureDescriptorDataInfoEXT(std::ostream &out, const VkImageViewCaptureDescriptorDataInfoEXT* structInfo, Decoded_VkImageViewCaptureDescriptorDataInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkOpaqueCaptureDescriptorDataCreateInfoEXT(std::ostream &out, const VkOpaqueCaptureDescriptorDataCreateInfoEXT* structInfo, Decoded_VkOpaqueCaptureDescriptorDataCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT(std::ostream &out, const VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceDescriptorBufferFeaturesEXT(std::ostream &out, const VkPhysicalDeviceDescriptorBufferFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceDescriptorBufferFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceDescriptorBufferPropertiesEXT(std::ostream &out, const VkPhysicalDeviceDescriptorBufferPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceDescriptorBufferPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkSamplerCaptureDescriptorDataInfoEXT(std::ostream &out, const VkSamplerCaptureDescriptorDataInfoEXT* structInfo, Decoded_VkSamplerCaptureDescriptorDataInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + std::string GenerateStruct_VkGraphicsPipelineLibraryCreateInfoEXT(std::ostream &out, const VkGraphicsPipelineLibraryCreateInfoEXT* structInfo, Decoded_VkGraphicsPipelineLibraryCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT(std::ostream &out, const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); @@ -1950,6 +1906,14 @@ std::string GenerateStruct_VkPipelineColorWriteCreateInfoEXT(std::ostream &out, std::string GenerateStruct_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT(std::ostream &out, const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* structInfo, Decoded_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); +std::string GenerateStruct_VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE(std::ostream &out, const VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE* structInfo, Decoded_VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkVideoEncodeProfileRgbConversionInfoVALVE(std::ostream &out, const VkVideoEncodeProfileRgbConversionInfoVALVE* structInfo, Decoded_VkVideoEncodeProfileRgbConversionInfoVALVE* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkVideoEncodeRgbConversionCapabilitiesVALVE(std::ostream &out, const VkVideoEncodeRgbConversionCapabilitiesVALVE* structInfo, Decoded_VkVideoEncodeRgbConversionCapabilitiesVALVE* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkVideoEncodeSessionRgbConversionCreateInfoVALVE(std::ostream &out, const VkVideoEncodeSessionRgbConversionCreateInfoVALVE* structInfo, Decoded_VkVideoEncodeSessionRgbConversionCreateInfoVALVE* metaInfo, VulkanCppConsumerBase &consumer); + std::string GenerateStruct_VkImageViewMinLodCreateInfoEXT(std::ostream &out, const VkImageViewMinLodCreateInfoEXT* structInfo, Decoded_VkImageViewMinLodCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkPhysicalDeviceImageViewMinLodFeaturesEXT(std::ostream &out, const VkPhysicalDeviceImageViewMinLodFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceImageViewMinLodFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); @@ -2174,8 +2138,6 @@ std::string GenerateStruct_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT(std std::string GenerateStruct_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT(std::ostream &out, const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer); -std::string GenerateStruct_VkLayerSettingEXT(std::ostream &out, const VkLayerSettingEXT* structInfo, Decoded_VkLayerSettingEXT* metaInfo, VulkanCppConsumerBase &consumer); - std::string GenerateStruct_VkLayerSettingsCreateInfoEXT(std::ostream &out, const VkLayerSettingsCreateInfoEXT* structInfo, Decoded_VkLayerSettingsCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM(std::ostream &out, const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* structInfo, Decoded_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* metaInfo, VulkanCppConsumerBase &consumer); @@ -2204,6 +2166,50 @@ std::string GenerateStruct_VkSetLatencyMarkerInfoNV(std::ostream &out, const VkS std::string GenerateStruct_VkSwapchainLatencyCreateInfoNV(std::ostream &out, const VkSwapchainLatencyCreateInfoNV* structInfo, Decoded_VkSwapchainLatencyCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer); +std::string GenerateStruct_VkBindDataGraphPipelineSessionMemoryInfoARM(std::ostream &out, const VkBindDataGraphPipelineSessionMemoryInfoARM* structInfo, Decoded_VkBindDataGraphPipelineSessionMemoryInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelineCompilerControlCreateInfoARM(std::ostream &out, const VkDataGraphPipelineCompilerControlCreateInfoARM* structInfo, Decoded_VkDataGraphPipelineCompilerControlCreateInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelineConstantARM(std::ostream &out, const VkDataGraphPipelineConstantARM* structInfo, Decoded_VkDataGraphPipelineConstantARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM(std::ostream &out, const VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM* structInfo, Decoded_VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelineCreateInfoARM(std::ostream &out, const VkDataGraphPipelineCreateInfoARM* structInfo, Decoded_VkDataGraphPipelineCreateInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelineDispatchInfoARM(std::ostream &out, const VkDataGraphPipelineDispatchInfoARM* structInfo, Decoded_VkDataGraphPipelineDispatchInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelineIdentifierCreateInfoARM(std::ostream &out, const VkDataGraphPipelineIdentifierCreateInfoARM* structInfo, Decoded_VkDataGraphPipelineIdentifierCreateInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelineInfoARM(std::ostream &out, const VkDataGraphPipelineInfoARM* structInfo, Decoded_VkDataGraphPipelineInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelinePropertyQueryResultARM(std::ostream &out, const VkDataGraphPipelinePropertyQueryResultARM* structInfo, Decoded_VkDataGraphPipelinePropertyQueryResultARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelineResourceInfoARM(std::ostream &out, const VkDataGraphPipelineResourceInfoARM* structInfo, Decoded_VkDataGraphPipelineResourceInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelineSessionBindPointRequirementARM(std::ostream &out, const VkDataGraphPipelineSessionBindPointRequirementARM* structInfo, Decoded_VkDataGraphPipelineSessionBindPointRequirementARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelineSessionBindPointRequirementsInfoARM(std::ostream &out, const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* structInfo, Decoded_VkDataGraphPipelineSessionBindPointRequirementsInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelineSessionCreateInfoARM(std::ostream &out, const VkDataGraphPipelineSessionCreateInfoARM* structInfo, Decoded_VkDataGraphPipelineSessionCreateInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelineSessionMemoryRequirementsInfoARM(std::ostream &out, const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* structInfo, Decoded_VkDataGraphPipelineSessionMemoryRequirementsInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelineShaderModuleCreateInfoARM(std::ostream &out, const VkDataGraphPipelineShaderModuleCreateInfoARM* structInfo, Decoded_VkDataGraphPipelineShaderModuleCreateInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphProcessingEngineCreateInfoARM(std::ostream &out, const VkDataGraphProcessingEngineCreateInfoARM* structInfo, Decoded_VkDataGraphProcessingEngineCreateInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceDataGraphFeaturesARM(std::ostream &out, const VkPhysicalDeviceDataGraphFeaturesARM* structInfo, Decoded_VkPhysicalDeviceDataGraphFeaturesARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceDataGraphOperationSupportARM(std::ostream &out, const VkPhysicalDeviceDataGraphOperationSupportARM* structInfo, Decoded_VkPhysicalDeviceDataGraphOperationSupportARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceDataGraphProcessingEngineARM(std::ostream &out, const VkPhysicalDeviceDataGraphProcessingEngineARM* structInfo, Decoded_VkPhysicalDeviceDataGraphProcessingEngineARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM(std::ostream &out, const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* structInfo, Decoded_VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkQueueFamilyDataGraphProcessingEnginePropertiesARM(std::ostream &out, const VkQueueFamilyDataGraphProcessingEnginePropertiesARM* structInfo, Decoded_VkQueueFamilyDataGraphProcessingEnginePropertiesARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkQueueFamilyDataGraphPropertiesARM(std::ostream &out, const VkQueueFamilyDataGraphPropertiesARM* structInfo, Decoded_VkQueueFamilyDataGraphPropertiesARM* metaInfo, VulkanCppConsumerBase &consumer); + std::string GenerateStruct_VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM(std::ostream &out, const VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM* structInfo, Decoded_VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM(std::ostream &out, const VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM* structInfo, Decoded_VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM* metaInfo, VulkanCppConsumerBase &consumer); @@ -2244,6 +2250,14 @@ std::string GenerateStruct_VkTileMemoryRequirementsQCOM(std::ostream &out, const std::string GenerateStruct_VkTileMemorySizeInfoQCOM(std::ostream &out, const VkTileMemorySizeInfoQCOM* structInfo, Decoded_VkTileMemorySizeInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer); +std::string GenerateStruct_VkDecompressMemoryInfoEXT(std::ostream &out, const VkDecompressMemoryInfoEXT* structInfo, Decoded_VkDecompressMemoryInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDecompressMemoryRegionEXT(std::ostream &out, const VkDecompressMemoryRegionEXT* structInfo, Decoded_VkDecompressMemoryRegionEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceMemoryDecompressionFeaturesEXT(std::ostream &out, const VkPhysicalDeviceMemoryDecompressionFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceMemoryDecompressionFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceMemoryDecompressionPropertiesEXT(std::ostream &out, const VkPhysicalDeviceMemoryDecompressionPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceMemoryDecompressionPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer); + std::string GenerateStruct_VkDisplayModeStereoPropertiesNV(std::ostream &out, const VkDisplayModeStereoPropertiesNV* structInfo, Decoded_VkDisplayModeStereoPropertiesNV* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkDisplaySurfaceStereoCreateInfoNV(std::ostream &out, const VkDisplaySurfaceStereoCreateInfoNV* structInfo, Decoded_VkDisplaySurfaceStereoCreateInfoNV* metaInfo, VulkanCppConsumerBase &consumer); @@ -2328,6 +2342,10 @@ std::string GenerateStruct_VkPhysicalDeviceImageAlignmentControlFeaturesMESA(std std::string GenerateStruct_VkPhysicalDeviceImageAlignmentControlPropertiesMESA(std::ostream &out, const VkPhysicalDeviceImageAlignmentControlPropertiesMESA* structInfo, Decoded_VkPhysicalDeviceImageAlignmentControlPropertiesMESA* metaInfo, VulkanCppConsumerBase &consumer); +std::string GenerateStruct_VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT(std::ostream &out, const VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT(std::ostream &out, const VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer); + std::string GenerateStruct_VkPhysicalDeviceDepthClampControlFeaturesEXT(std::ostream &out, const VkPhysicalDeviceDepthClampControlFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceDepthClampControlFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkPipelineViewportDepthClampControlCreateInfoEXT(std::ostream &out, const VkPipelineViewportDepthClampControlCreateInfoEXT* structInfo, Decoded_VkPipelineViewportDepthClampControlCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); @@ -2350,6 +2368,16 @@ std::string GenerateStruct_VkMemoryGetMetalHandleInfoEXT(std::ostream &out, cons std::string GenerateStruct_VkMemoryMetalHandlePropertiesEXT(std::ostream &out, const VkMemoryMetalHandlePropertiesEXT* structInfo, Decoded_VkMemoryMetalHandlePropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer); +std::string GenerateStruct_VkPerformanceCounterARM(std::ostream &out, const VkPerformanceCounterARM* structInfo, Decoded_VkPerformanceCounterARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPerformanceCounterDescriptionARM(std::ostream &out, const VkPerformanceCounterDescriptionARM* structInfo, Decoded_VkPerformanceCounterDescriptionARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM(std::ostream &out, const VkPhysicalDevicePerformanceCountersByRegionFeaturesARM* structInfo, Decoded_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM(std::ostream &out, const VkPhysicalDevicePerformanceCountersByRegionPropertiesARM* structInfo, Decoded_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkRenderPassPerformanceCountersByRegionBeginInfoARM(std::ostream &out, const VkRenderPassPerformanceCountersByRegionBeginInfoARM* structInfo, Decoded_VkRenderPassPerformanceCountersByRegionBeginInfoARM* metaInfo, VulkanCppConsumerBase &consumer); + std::string GenerateStruct_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT(std::ostream &out, const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkPhysicalDeviceFormatPackFeaturesARM(std::ostream &out, const VkPhysicalDeviceFormatPackFeaturesARM* structInfo, Decoded_VkPhysicalDeviceFormatPackFeaturesARM* metaInfo, VulkanCppConsumerBase &consumer); @@ -2364,12 +2392,34 @@ std::string GenerateStruct_VkPhysicalDevicePresentMeteringFeaturesNV(std::ostrea std::string GenerateStruct_VkSetPresentConfigNV(std::ostream &out, const VkSetPresentConfigNV* structInfo, Decoded_VkSetPresentConfigNV* metaInfo, VulkanCppConsumerBase &consumer); -std::string GenerateStruct_VkRenderingEndInfoEXT(std::ostream &out, const VkRenderingEndInfoEXT* structInfo, Decoded_VkRenderingEndInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); - std::string GenerateStruct_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT(std::ostream &out, const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); +std::string GenerateStruct_VkPhysicalDeviceShader64BitIndexingFeaturesEXT(std::ostream &out, const VkPhysicalDeviceShader64BitIndexingFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShader64BitIndexingFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkBeginCustomResolveInfoEXT(std::ostream &out, const VkBeginCustomResolveInfoEXT* structInfo, Decoded_VkBeginCustomResolveInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkCustomResolveCreateInfoEXT(std::ostream &out, const VkCustomResolveCreateInfoEXT* structInfo, Decoded_VkCustomResolveCreateInfoEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceCustomResolveFeaturesEXT(std::ostream &out, const VkPhysicalDeviceCustomResolveFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceCustomResolveFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkDataGraphPipelineBuiltinModelCreateInfoQCOM(std::ostream &out, const VkDataGraphPipelineBuiltinModelCreateInfoQCOM* structInfo, Decoded_VkDataGraphPipelineBuiltinModelCreateInfoQCOM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceDataGraphModelFeaturesQCOM(std::ostream &out, const VkPhysicalDeviceDataGraphModelFeaturesQCOM* structInfo, Decoded_VkPhysicalDeviceDataGraphModelFeaturesQCOM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPipelineCacheHeaderVersionDataGraphQCOM(std::ostream &out, const VkPipelineCacheHeaderVersionDataGraphQCOM* structInfo, Decoded_VkPipelineCacheHeaderVersionDataGraphQCOM* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceShaderLongVectorFeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderLongVectorFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderLongVectorFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceShaderLongVectorPropertiesEXT(std::ostream &out, const VkPhysicalDeviceShaderLongVectorPropertiesEXT* structInfo, Decoded_VkPhysicalDeviceShaderLongVectorPropertiesEXT* metaInfo, VulkanCppConsumerBase &consumer); + std::string GenerateStruct_VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC(std::ostream &out, const VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC* structInfo, Decoded_VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC* metaInfo, VulkanCppConsumerBase &consumer); +std::string GenerateStruct_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT(std::ostream &out, const VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT* structInfo, Decoded_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkComputeOccupancyPriorityParametersNV(std::ostream &out, const VkComputeOccupancyPriorityParametersNV* structInfo, Decoded_VkComputeOccupancyPriorityParametersNV* metaInfo, VulkanCppConsumerBase &consumer); + +std::string GenerateStruct_VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV(std::ostream &out, const VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV* structInfo, Decoded_VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV* metaInfo, VulkanCppConsumerBase &consumer); + std::string GenerateStruct_VkAccelerationStructureBuildGeometryInfoKHR(std::ostream &out, const VkAccelerationStructureBuildGeometryInfoKHR* structInfo, Decoded_VkAccelerationStructureBuildGeometryInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); std::string GenerateStruct_VkAccelerationStructureBuildRangeInfoKHR(std::ostream &out, const VkAccelerationStructureBuildRangeInfoKHR* structInfo, Decoded_VkAccelerationStructureBuildRangeInfoKHR* metaInfo, VulkanCppConsumerBase &consumer); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_decoder.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_decoder.cpp index 70074e2fd..16ff370d0 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_decoder.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_decoder.cpp @@ -836,110 +836,6 @@ size_t VulkanDecoder::Decode_vkDestroySemaphore(const ApiCallInfo& call_info, co return bytes_read; } -size_t VulkanDecoder::Decode_vkCreateEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) -{ - size_t bytes_read = 0; - - format::HandleId device; - StructPointerDecoder pCreateInfo; - StructPointerDecoder pAllocator; - HandlePointerDecoder pEvent; - VkResult return_value; - - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pEvent.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); - - for (auto consumer : GetConsumers()) - { - consumer->Process_vkCreateEvent(call_info, return_value, device, &pCreateInfo, &pAllocator, &pEvent); - } - - return bytes_read; -} - -size_t VulkanDecoder::Decode_vkDestroyEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) -{ - size_t bytes_read = 0; - - format::HandleId device; - format::HandleId event; - StructPointerDecoder pAllocator; - - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - - for (auto consumer : GetConsumers()) - { - consumer->Process_vkDestroyEvent(call_info, device, event, &pAllocator); - } - - return bytes_read; -} - -size_t VulkanDecoder::Decode_vkGetEventStatus(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) -{ - size_t bytes_read = 0; - - format::HandleId device; - format::HandleId event; - VkResult return_value; - - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); - - for (auto consumer : GetConsumers()) - { - consumer->Process_vkGetEventStatus(call_info, return_value, device, event); - } - - return bytes_read; -} - -size_t VulkanDecoder::Decode_vkSetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) -{ - size_t bytes_read = 0; - - format::HandleId device; - format::HandleId event; - VkResult return_value; - - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); - - for (auto consumer : GetConsumers()) - { - consumer->Process_vkSetEvent(call_info, return_value, device, event); - } - - return bytes_read; -} - -size_t VulkanDecoder::Decode_vkResetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) -{ - size_t bytes_read = 0; - - format::HandleId device; - format::HandleId event; - VkResult return_value; - - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); - - for (auto consumer : GetConsumers()) - { - consumer->Process_vkResetEvent(call_info, return_value, device, event); - } - - return bytes_read; -} - size_t VulkanDecoder::Decode_vkCreateQueryPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; @@ -1060,50 +956,6 @@ size_t VulkanDecoder::Decode_vkDestroyBuffer(const ApiCallInfo& call_info, const return bytes_read; } -size_t VulkanDecoder::Decode_vkCreateBufferView(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) -{ - size_t bytes_read = 0; - - format::HandleId device; - StructPointerDecoder pCreateInfo; - StructPointerDecoder pAllocator; - HandlePointerDecoder pView; - VkResult return_value; - - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pView.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); - - for (auto consumer : GetConsumers()) - { - consumer->Process_vkCreateBufferView(call_info, return_value, device, &pCreateInfo, &pAllocator, &pView); - } - - return bytes_read; -} - -size_t VulkanDecoder::Decode_vkDestroyBufferView(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) -{ - size_t bytes_read = 0; - - format::HandleId device; - format::HandleId bufferView; - StructPointerDecoder pAllocator; - - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &bufferView); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - - for (auto consumer : GetConsumers()) - { - consumer->Process_vkDestroyBufferView(call_info, device, bufferView, &pAllocator); - } - - return bytes_read; -} - size_t VulkanDecoder::Decode_vkCreateImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; @@ -1214,959 +1066,1111 @@ size_t VulkanDecoder::Decode_vkDestroyImageView(const ApiCallInfo& call_info, co return bytes_read; } -size_t VulkanDecoder::Decode_vkCreateShaderModule(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCreateCommandPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pCreateInfo; + StructPointerDecoder pCreateInfo; StructPointerDecoder pAllocator; - HandlePointerDecoder pShaderModule; + HandlePointerDecoder pCommandPool; VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pShaderModule.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pCommandPool.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCreateShaderModule(call_info, return_value, device, &pCreateInfo, &pAllocator, &pShaderModule); + consumer->Process_vkCreateCommandPool(call_info, return_value, device, &pCreateInfo, &pAllocator, &pCommandPool); } return bytes_read; } -size_t VulkanDecoder::Decode_vkDestroyShaderModule(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkDestroyCommandPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - format::HandleId shaderModule; + format::HandleId commandPool; StructPointerDecoder pAllocator; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &shaderModule); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandPool); bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkDestroyShaderModule(call_info, device, shaderModule, &pAllocator); + consumer->Process_vkDestroyCommandPool(call_info, device, commandPool, &pAllocator); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCreatePipelineCache(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkResetCommandPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pCreateInfo; - StructPointerDecoder pAllocator; - HandlePointerDecoder pPipelineCache; + format::HandleId commandPool; + VkCommandPoolResetFlags flags; VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pPipelineCache.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandPool); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &flags); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCreatePipelineCache(call_info, return_value, device, &pCreateInfo, &pAllocator, &pPipelineCache); + consumer->Process_vkResetCommandPool(call_info, return_value, device, commandPool, flags); } return bytes_read; } -size_t VulkanDecoder::Decode_vkDestroyPipelineCache(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkAllocateCommandBuffers(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - format::HandleId pipelineCache; - StructPointerDecoder pAllocator; + StructPointerDecoder pAllocateInfo; + HandlePointerDecoder pCommandBuffers; + VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineCache); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pAllocateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pCommandBuffers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkDestroyPipelineCache(call_info, device, pipelineCache, &pAllocator); + consumer->Process_vkAllocateCommandBuffers(call_info, return_value, device, &pAllocateInfo, &pCommandBuffers); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetPipelineCacheData(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkFreeCommandBuffers(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - format::HandleId pipelineCache; - PointerDecoder pDataSize; - PointerDecoder pData; - VkResult return_value; + format::HandleId commandPool; + uint32_t commandBufferCount; + HandlePointerDecoder pCommandBuffers; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineCache); - bytes_read += pDataSize.DecodeSizeT((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pData.DecodeVoid((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandPool); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBufferCount); + bytes_read += pCommandBuffers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetPipelineCacheData(call_info, return_value, device, pipelineCache, &pDataSize, &pData); + consumer->Process_vkFreeCommandBuffers(call_info, device, commandPool, commandBufferCount, &pCommandBuffers); } return bytes_read; } -size_t VulkanDecoder::Decode_vkMergePipelineCaches(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkBeginCommandBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - format::HandleId dstCache; - uint32_t srcCacheCount; - HandlePointerDecoder pSrcCaches; + format::HandleId commandBuffer; + StructPointerDecoder pBeginInfo; VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstCache); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcCacheCount); - bytes_read += pSrcCaches.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += pBeginInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkMergePipelineCaches(call_info, return_value, device, dstCache, srcCacheCount, &pSrcCaches); + consumer->Process_vkBeginCommandBuffer(call_info, return_value, commandBuffer, &pBeginInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCreateGraphicsPipelines(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkEndCommandBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - format::HandleId pipelineCache; - uint32_t createInfoCount; - StructPointerDecoder pCreateInfos; - StructPointerDecoder pAllocator; - HandlePointerDecoder pPipelines; + format::HandleId commandBuffer; VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineCache); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &createInfoCount); - bytes_read += pCreateInfos.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pPipelines.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCreateGraphicsPipelines(call_info, return_value, device, pipelineCache, createInfoCount, &pCreateInfos, &pAllocator, &pPipelines); + consumer->Process_vkEndCommandBuffer(call_info, return_value, commandBuffer); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCreateComputePipelines(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkResetCommandBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - format::HandleId pipelineCache; - uint32_t createInfoCount; - StructPointerDecoder pCreateInfos; - StructPointerDecoder pAllocator; - HandlePointerDecoder pPipelines; + format::HandleId commandBuffer; + VkCommandBufferResetFlags flags; VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineCache); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &createInfoCount); - bytes_read += pCreateInfos.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pPipelines.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &flags); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCreateComputePipelines(call_info, return_value, device, pipelineCache, createInfoCount, &pCreateInfos, &pAllocator, &pPipelines); + consumer->Process_vkResetCommandBuffer(call_info, return_value, commandBuffer, flags); } return bytes_read; } -size_t VulkanDecoder::Decode_vkDestroyPipeline(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdCopyBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - format::HandleId pipeline; - StructPointerDecoder pAllocator; + format::HandleId commandBuffer; + format::HandleId srcBuffer; + format::HandleId dstBuffer; + uint32_t regionCount; + StructPointerDecoder pRegions; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipeline); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstBuffer); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), ®ionCount); + bytes_read += pRegions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkDestroyPipeline(call_info, device, pipeline, &pAllocator); + consumer->Process_vkCmdCopyBuffer(call_info, commandBuffer, srcBuffer, dstBuffer, regionCount, &pRegions); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCreatePipelineLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdCopyImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - StructPointerDecoder pCreateInfo; - StructPointerDecoder pAllocator; - HandlePointerDecoder pPipelineLayout; - VkResult return_value; + format::HandleId commandBuffer; + format::HandleId srcImage; + VkImageLayout srcImageLayout; + format::HandleId dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + StructPointerDecoder pRegions; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pPipelineLayout.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImage); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImageLayout); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImage); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImageLayout); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), ®ionCount); + bytes_read += pRegions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCreatePipelineLayout(call_info, return_value, device, &pCreateInfo, &pAllocator, &pPipelineLayout); + consumer->Process_vkCmdCopyImage(call_info, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, &pRegions); } return bytes_read; } -size_t VulkanDecoder::Decode_vkDestroyPipelineLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdCopyBufferToImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - format::HandleId pipelineLayout; - StructPointerDecoder pAllocator; + format::HandleId commandBuffer; + format::HandleId srcBuffer; + format::HandleId dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + StructPointerDecoder pRegions; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineLayout); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImage); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImageLayout); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), ®ionCount); + bytes_read += pRegions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkDestroyPipelineLayout(call_info, device, pipelineLayout, &pAllocator); + consumer->Process_vkCmdCopyBufferToImage(call_info, commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, &pRegions); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCreateSampler(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdCopyImageToBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - StructPointerDecoder pCreateInfo; - StructPointerDecoder pAllocator; - HandlePointerDecoder pSampler; - VkResult return_value; + format::HandleId commandBuffer; + format::HandleId srcImage; + VkImageLayout srcImageLayout; + format::HandleId dstBuffer; + uint32_t regionCount; + StructPointerDecoder pRegions; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pSampler.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImage); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImageLayout); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstBuffer); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), ®ionCount); + bytes_read += pRegions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCreateSampler(call_info, return_value, device, &pCreateInfo, &pAllocator, &pSampler); + consumer->Process_vkCmdCopyImageToBuffer(call_info, commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, &pRegions); } return bytes_read; } -size_t VulkanDecoder::Decode_vkDestroySampler(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdUpdateBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - format::HandleId sampler; - StructPointerDecoder pAllocator; + format::HandleId commandBuffer; + format::HandleId dstBuffer; + VkDeviceSize dstOffset; + VkDeviceSize dataSize; + PointerDecoder pData; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &sampler); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstBuffer); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstOffset); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dataSize); + bytes_read += pData.DecodeVoid((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkDestroySampler(call_info, device, sampler, &pAllocator); + consumer->Process_vkCmdUpdateBuffer(call_info, commandBuffer, dstBuffer, dstOffset, dataSize, &pData); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCreateDescriptorSetLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdFillBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - StructPointerDecoder pCreateInfo; - StructPointerDecoder pAllocator; - HandlePointerDecoder pSetLayout; - VkResult return_value; + format::HandleId commandBuffer; + format::HandleId dstBuffer; + VkDeviceSize dstOffset; + VkDeviceSize size; + uint32_t data; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pSetLayout.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstBuffer); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstOffset); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &size); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &data); for (auto consumer : GetConsumers()) { - consumer->Process_vkCreateDescriptorSetLayout(call_info, return_value, device, &pCreateInfo, &pAllocator, &pSetLayout); + consumer->Process_vkCmdFillBuffer(call_info, commandBuffer, dstBuffer, dstOffset, size, data); } return bytes_read; } -size_t VulkanDecoder::Decode_vkDestroyDescriptorSetLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdPipelineBarrier(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - format::HandleId descriptorSetLayout; - StructPointerDecoder pAllocator; + format::HandleId commandBuffer; + VkPipelineStageFlags srcStageMask; + VkPipelineStageFlags dstStageMask; + VkDependencyFlags dependencyFlags; + uint32_t memoryBarrierCount; + StructPointerDecoder pMemoryBarriers; + uint32_t bufferMemoryBarrierCount; + StructPointerDecoder pBufferMemoryBarriers; + uint32_t imageMemoryBarrierCount; + StructPointerDecoder pImageMemoryBarriers; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &descriptorSetLayout); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcStageMask); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstStageMask); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dependencyFlags); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &memoryBarrierCount); + bytes_read += pMemoryBarriers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &bufferMemoryBarrierCount); + bytes_read += pBufferMemoryBarriers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &imageMemoryBarrierCount); + bytes_read += pImageMemoryBarriers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkDestroyDescriptorSetLayout(call_info, device, descriptorSetLayout, &pAllocator); + consumer->Process_vkCmdPipelineBarrier(call_info, commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, &pMemoryBarriers, bufferMemoryBarrierCount, &pBufferMemoryBarriers, imageMemoryBarrierCount, &pImageMemoryBarriers); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCreateDescriptorPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdBeginQuery(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - StructPointerDecoder pCreateInfo; - StructPointerDecoder pAllocator; - HandlePointerDecoder pDescriptorPool; - VkResult return_value; + format::HandleId commandBuffer; + format::HandleId queryPool; + uint32_t query; + VkQueryControlFlags flags; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pDescriptorPool.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryPool); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &query); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &flags); for (auto consumer : GetConsumers()) { - consumer->Process_vkCreateDescriptorPool(call_info, return_value, device, &pCreateInfo, &pAllocator, &pDescriptorPool); + consumer->Process_vkCmdBeginQuery(call_info, commandBuffer, queryPool, query, flags); } return bytes_read; } -size_t VulkanDecoder::Decode_vkDestroyDescriptorPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdEndQuery(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId commandBuffer; + format::HandleId queryPool; + uint32_t query; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryPool); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &query); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdEndQuery(call_info, commandBuffer, queryPool, query); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCmdResetQueryPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId commandBuffer; + format::HandleId queryPool; + uint32_t firstQuery; + uint32_t queryCount; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryPool); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstQuery); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryCount); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdResetQueryPool(call_info, commandBuffer, queryPool, firstQuery, queryCount); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCmdWriteTimestamp(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId commandBuffer; + VkPipelineStageFlagBits pipelineStage; + format::HandleId queryPool; + uint32_t query; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineStage); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryPool); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &query); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdWriteTimestamp(call_info, commandBuffer, pipelineStage, queryPool, query); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCmdCopyQueryPoolResults(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId commandBuffer; + format::HandleId queryPool; + uint32_t firstQuery; + uint32_t queryCount; + format::HandleId dstBuffer; + VkDeviceSize dstOffset; + VkDeviceSize stride; + VkQueryResultFlags flags; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryPool); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstQuery); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryCount); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstBuffer); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstOffset); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stride); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &flags); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdCopyQueryPoolResults(call_info, commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCmdExecuteCommands(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId commandBuffer; + uint32_t commandBufferCount; + HandlePointerDecoder pCommandBuffers; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBufferCount); + bytes_read += pCommandBuffers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdExecuteCommands(call_info, commandBuffer, commandBufferCount, &pCommandBuffers); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCreateEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - format::HandleId descriptorPool; + StructPointerDecoder pCreateInfo; StructPointerDecoder pAllocator; + HandlePointerDecoder pEvent; + VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &descriptorPool); + bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pEvent.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkDestroyDescriptorPool(call_info, device, descriptorPool, &pAllocator); + consumer->Process_vkCreateEvent(call_info, return_value, device, &pCreateInfo, &pAllocator, &pEvent); } return bytes_read; } -size_t VulkanDecoder::Decode_vkResetDescriptorPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkDestroyEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - format::HandleId descriptorPool; - VkDescriptorPoolResetFlags flags; - VkResult return_value; + format::HandleId event; + StructPointerDecoder pAllocator; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &descriptorPool); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &flags); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkResetDescriptorPool(call_info, return_value, device, descriptorPool, flags); + consumer->Process_vkDestroyEvent(call_info, device, event, &pAllocator); } return bytes_read; } -size_t VulkanDecoder::Decode_vkAllocateDescriptorSets(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetEventStatus(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pAllocateInfo; - HandlePointerDecoder pDescriptorSets; + format::HandleId event; VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pAllocateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pDescriptorSets.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkAllocateDescriptorSets(call_info, return_value, device, &pAllocateInfo, &pDescriptorSets); + consumer->Process_vkGetEventStatus(call_info, return_value, device, event); } return bytes_read; } -size_t VulkanDecoder::Decode_vkFreeDescriptorSets(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkSetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - format::HandleId descriptorPool; - uint32_t descriptorSetCount; - HandlePointerDecoder pDescriptorSets; + format::HandleId event; VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &descriptorPool); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &descriptorSetCount); - bytes_read += pDescriptorSets.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkFreeDescriptorSets(call_info, return_value, device, descriptorPool, descriptorSetCount, &pDescriptorSets); + consumer->Process_vkSetEvent(call_info, return_value, device, event); } return bytes_read; } -size_t VulkanDecoder::Decode_vkUpdateDescriptorSets(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkResetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - uint32_t descriptorWriteCount; - StructPointerDecoder pDescriptorWrites; - uint32_t descriptorCopyCount; - StructPointerDecoder pDescriptorCopies; + format::HandleId event; + VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &descriptorWriteCount); - bytes_read += pDescriptorWrites.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &descriptorCopyCount); - bytes_read += pDescriptorCopies.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkUpdateDescriptorSets(call_info, device, descriptorWriteCount, &pDescriptorWrites, descriptorCopyCount, &pDescriptorCopies); + consumer->Process_vkResetEvent(call_info, return_value, device, event); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCreateFramebuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCreateBufferView(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pCreateInfo; + StructPointerDecoder pCreateInfo; StructPointerDecoder pAllocator; - HandlePointerDecoder pFramebuffer; + HandlePointerDecoder pView; VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pFramebuffer.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pView.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCreateFramebuffer(call_info, return_value, device, &pCreateInfo, &pAllocator, &pFramebuffer); + consumer->Process_vkCreateBufferView(call_info, return_value, device, &pCreateInfo, &pAllocator, &pView); } return bytes_read; } -size_t VulkanDecoder::Decode_vkDestroyFramebuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkDestroyBufferView(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - format::HandleId framebuffer; + format::HandleId bufferView; StructPointerDecoder pAllocator; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &framebuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &bufferView); bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkDestroyFramebuffer(call_info, device, framebuffer, &pAllocator); + consumer->Process_vkDestroyBufferView(call_info, device, bufferView, &pAllocator); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCreateRenderPass(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCreateShaderModule(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pCreateInfo; + StructPointerDecoder pCreateInfo; StructPointerDecoder pAllocator; - HandlePointerDecoder pRenderPass; + HandlePointerDecoder pShaderModule; VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pRenderPass.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pShaderModule.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCreateRenderPass(call_info, return_value, device, &pCreateInfo, &pAllocator, &pRenderPass); + consumer->Process_vkCreateShaderModule(call_info, return_value, device, &pCreateInfo, &pAllocator, &pShaderModule); } return bytes_read; } -size_t VulkanDecoder::Decode_vkDestroyRenderPass(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkDestroyShaderModule(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - format::HandleId renderPass; + format::HandleId shaderModule; StructPointerDecoder pAllocator; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &renderPass); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &shaderModule); bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkDestroyRenderPass(call_info, device, renderPass, &pAllocator); + consumer->Process_vkDestroyShaderModule(call_info, device, shaderModule, &pAllocator); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetRenderAreaGranularity(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCreatePipelineCache(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - format::HandleId renderPass; - StructPointerDecoder pGranularity; + StructPointerDecoder pCreateInfo; + StructPointerDecoder pAllocator; + HandlePointerDecoder pPipelineCache; + VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &renderPass); - bytes_read += pGranularity.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pPipelineCache.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetRenderAreaGranularity(call_info, device, renderPass, &pGranularity); + consumer->Process_vkCreatePipelineCache(call_info, return_value, device, &pCreateInfo, &pAllocator, &pPipelineCache); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCreateCommandPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkDestroyPipelineCache(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pCreateInfo; + format::HandleId pipelineCache; StructPointerDecoder pAllocator; - HandlePointerDecoder pCommandPool; - VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineCache); bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pCommandPool.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCreateCommandPool(call_info, return_value, device, &pCreateInfo, &pAllocator, &pCommandPool); + consumer->Process_vkDestroyPipelineCache(call_info, device, pipelineCache, &pAllocator); } return bytes_read; } -size_t VulkanDecoder::Decode_vkDestroyCommandPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetPipelineCacheData(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - format::HandleId commandPool; - StructPointerDecoder pAllocator; + format::HandleId pipelineCache; + PointerDecoder pDataSize; + PointerDecoder pData; + VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandPool); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineCache); + bytes_read += pDataSize.DecodeSizeT((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pData.DecodeVoid((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkDestroyCommandPool(call_info, device, commandPool, &pAllocator); + consumer->Process_vkGetPipelineCacheData(call_info, return_value, device, pipelineCache, &pDataSize, &pData); } return bytes_read; } -size_t VulkanDecoder::Decode_vkResetCommandPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkMergePipelineCaches(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - format::HandleId commandPool; - VkCommandPoolResetFlags flags; + format::HandleId dstCache; + uint32_t srcCacheCount; + HandlePointerDecoder pSrcCaches; VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandPool); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &flags); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstCache); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcCacheCount); + bytes_read += pSrcCaches.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkResetCommandPool(call_info, return_value, device, commandPool, flags); + consumer->Process_vkMergePipelineCaches(call_info, return_value, device, dstCache, srcCacheCount, &pSrcCaches); } return bytes_read; } -size_t VulkanDecoder::Decode_vkAllocateCommandBuffers(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCreateComputePipelines(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pAllocateInfo; - HandlePointerDecoder pCommandBuffers; + format::HandleId pipelineCache; + uint32_t createInfoCount; + StructPointerDecoder pCreateInfos; + StructPointerDecoder pAllocator; + HandlePointerDecoder pPipelines; VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pAllocateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pCommandBuffers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineCache); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &createInfoCount); + bytes_read += pCreateInfos.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pPipelines.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkAllocateCommandBuffers(call_info, return_value, device, &pAllocateInfo, &pCommandBuffers); + consumer->Process_vkCreateComputePipelines(call_info, return_value, device, pipelineCache, createInfoCount, &pCreateInfos, &pAllocator, &pPipelines); } return bytes_read; } -size_t VulkanDecoder::Decode_vkFreeCommandBuffers(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkDestroyPipeline(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - format::HandleId commandPool; - uint32_t commandBufferCount; - HandlePointerDecoder pCommandBuffers; + format::HandleId pipeline; + StructPointerDecoder pAllocator; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandPool); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBufferCount); - bytes_read += pCommandBuffers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipeline); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkFreeCommandBuffers(call_info, device, commandPool, commandBufferCount, &pCommandBuffers); + consumer->Process_vkDestroyPipeline(call_info, device, pipeline, &pAllocator); } return bytes_read; } -size_t VulkanDecoder::Decode_vkBeginCommandBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCreatePipelineLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - StructPointerDecoder pBeginInfo; + format::HandleId device; + StructPointerDecoder pCreateInfo; + StructPointerDecoder pAllocator; + HandlePointerDecoder pPipelineLayout; VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pBeginInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pPipelineLayout.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkBeginCommandBuffer(call_info, return_value, commandBuffer, &pBeginInfo); + consumer->Process_vkCreatePipelineLayout(call_info, return_value, device, &pCreateInfo, &pAllocator, &pPipelineLayout); } return bytes_read; } -size_t VulkanDecoder::Decode_vkEndCommandBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkDestroyPipelineLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - VkResult return_value; + format::HandleId device; + format::HandleId pipelineLayout; + StructPointerDecoder pAllocator; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineLayout); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkEndCommandBuffer(call_info, return_value, commandBuffer); + consumer->Process_vkDestroyPipelineLayout(call_info, device, pipelineLayout, &pAllocator); } return bytes_read; } -size_t VulkanDecoder::Decode_vkResetCommandBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCreateSampler(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - VkCommandBufferResetFlags flags; + format::HandleId device; + StructPointerDecoder pCreateInfo; + StructPointerDecoder pAllocator; + HandlePointerDecoder pSampler; VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &flags); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pSampler.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkResetCommandBuffer(call_info, return_value, commandBuffer, flags); + consumer->Process_vkCreateSampler(call_info, return_value, device, &pCreateInfo, &pAllocator, &pSampler); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdBindPipeline(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkDestroySampler(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - VkPipelineBindPoint pipelineBindPoint; - format::HandleId pipeline; + format::HandleId device; + format::HandleId sampler; + StructPointerDecoder pAllocator; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineBindPoint); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipeline); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &sampler); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdBindPipeline(call_info, commandBuffer, pipelineBindPoint, pipeline); + consumer->Process_vkDestroySampler(call_info, device, sampler, &pAllocator); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdSetViewport(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCreateDescriptorSetLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - uint32_t firstViewport; - uint32_t viewportCount; - StructPointerDecoder pViewports; + format::HandleId device; + StructPointerDecoder pCreateInfo; + StructPointerDecoder pAllocator; + HandlePointerDecoder pSetLayout; + VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstViewport); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &viewportCount); - bytes_read += pViewports.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pSetLayout.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetViewport(call_info, commandBuffer, firstViewport, viewportCount, &pViewports); + consumer->Process_vkCreateDescriptorSetLayout(call_info, return_value, device, &pCreateInfo, &pAllocator, &pSetLayout); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdSetScissor(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkDestroyDescriptorSetLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - uint32_t firstScissor; - uint32_t scissorCount; - StructPointerDecoder pScissors; + format::HandleId device; + format::HandleId descriptorSetLayout; + StructPointerDecoder pAllocator; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstScissor); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &scissorCount); - bytes_read += pScissors.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &descriptorSetLayout); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetScissor(call_info, commandBuffer, firstScissor, scissorCount, &pScissors); + consumer->Process_vkDestroyDescriptorSetLayout(call_info, device, descriptorSetLayout, &pAllocator); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdSetLineWidth(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCreateDescriptorPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - float lineWidth; + format::HandleId device; + StructPointerDecoder pCreateInfo; + StructPointerDecoder pAllocator; + HandlePointerDecoder pDescriptorPool; + VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeFloatValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &lineWidth); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pDescriptorPool.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetLineWidth(call_info, commandBuffer, lineWidth); + consumer->Process_vkCreateDescriptorPool(call_info, return_value, device, &pCreateInfo, &pAllocator, &pDescriptorPool); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdSetDepthBias(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkDestroyDescriptorPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - float depthBiasConstantFactor; - float depthBiasClamp; - float depthBiasSlopeFactor; + format::HandleId device; + format::HandleId descriptorPool; + StructPointerDecoder pAllocator; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeFloatValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &depthBiasConstantFactor); - bytes_read += ValueDecoder::DecodeFloatValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &depthBiasClamp); - bytes_read += ValueDecoder::DecodeFloatValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &depthBiasSlopeFactor); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &descriptorPool); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetDepthBias(call_info, commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); + consumer->Process_vkDestroyDescriptorPool(call_info, device, descriptorPool, &pAllocator); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdSetBlendConstants(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkResetDescriptorPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - PointerDecoder blendConstants; + format::HandleId device; + format::HandleId descriptorPool; + VkDescriptorPoolResetFlags flags; + VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += blendConstants.DecodeFloat((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &descriptorPool); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &flags); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetBlendConstants(call_info, commandBuffer, &blendConstants); + consumer->Process_vkResetDescriptorPool(call_info, return_value, device, descriptorPool, flags); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdSetDepthBounds(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkAllocateDescriptorSets(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - float minDepthBounds; - float maxDepthBounds; + format::HandleId device; + StructPointerDecoder pAllocateInfo; + HandlePointerDecoder pDescriptorSets; + VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeFloatValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &minDepthBounds); - bytes_read += ValueDecoder::DecodeFloatValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &maxDepthBounds); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pAllocateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pDescriptorSets.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetDepthBounds(call_info, commandBuffer, minDepthBounds, maxDepthBounds); + consumer->Process_vkAllocateDescriptorSets(call_info, return_value, device, &pAllocateInfo, &pDescriptorSets); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdSetStencilCompareMask(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkFreeDescriptorSets(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - VkStencilFaceFlags faceMask; - uint32_t compareMask; + format::HandleId device; + format::HandleId descriptorPool; + uint32_t descriptorSetCount; + HandlePointerDecoder pDescriptorSets; + VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &faceMask); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &compareMask); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &descriptorPool); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &descriptorSetCount); + bytes_read += pDescriptorSets.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetStencilCompareMask(call_info, commandBuffer, faceMask, compareMask); + consumer->Process_vkFreeDescriptorSets(call_info, return_value, device, descriptorPool, descriptorSetCount, &pDescriptorSets); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdSetStencilWriteMask(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkUpdateDescriptorSets(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - VkStencilFaceFlags faceMask; - uint32_t writeMask; + format::HandleId device; + uint32_t descriptorWriteCount; + StructPointerDecoder pDescriptorWrites; + uint32_t descriptorCopyCount; + StructPointerDecoder pDescriptorCopies; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &faceMask); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &writeMask); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &descriptorWriteCount); + bytes_read += pDescriptorWrites.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &descriptorCopyCount); + bytes_read += pDescriptorCopies.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetStencilWriteMask(call_info, commandBuffer, faceMask, writeMask); + consumer->Process_vkUpdateDescriptorSets(call_info, device, descriptorWriteCount, &pDescriptorWrites, descriptorCopyCount, &pDescriptorCopies); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdSetStencilReference(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdBindPipeline(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - VkStencilFaceFlags faceMask; - uint32_t reference; + VkPipelineBindPoint pipelineBindPoint; + format::HandleId pipeline; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &faceMask); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &reference); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineBindPoint); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipeline); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetStencilReference(call_info, commandBuffer, faceMask, reference); + consumer->Process_vkCmdBindPipeline(call_info, commandBuffer, pipelineBindPoint, pipeline); } return bytes_read; @@ -2202,725 +2206,741 @@ size_t VulkanDecoder::Decode_vkCmdBindDescriptorSets(const ApiCallInfo& call_inf return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdBindIndexBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdClearColorImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId buffer; - VkDeviceSize offset; - VkIndexType indexType; + format::HandleId image; + VkImageLayout imageLayout; + StructPointerDecoder pColor; + uint32_t rangeCount; + StructPointerDecoder pRanges; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &buffer); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &indexType); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &image); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &imageLayout); + bytes_read += pColor.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &rangeCount); + bytes_read += pRanges.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdBindIndexBuffer(call_info, commandBuffer, buffer, offset, indexType); + consumer->Process_vkCmdClearColorImage(call_info, commandBuffer, image, imageLayout, &pColor, rangeCount, &pRanges); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdBindVertexBuffers(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdDispatch(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - uint32_t firstBinding; - uint32_t bindingCount; - HandlePointerDecoder pBuffers; - PointerDecoder pOffsets; + uint32_t groupCountX; + uint32_t groupCountY; + uint32_t groupCountZ; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstBinding); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &bindingCount); - bytes_read += pBuffers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pOffsets.DecodeUInt64((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &groupCountX); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &groupCountY); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &groupCountZ); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdBindVertexBuffers(call_info, commandBuffer, firstBinding, bindingCount, &pBuffers, &pOffsets); + consumer->Process_vkCmdDispatch(call_info, commandBuffer, groupCountX, groupCountY, groupCountZ); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdDraw(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdDispatchIndirect(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - uint32_t vertexCount; - uint32_t instanceCount; - uint32_t firstVertex; - uint32_t firstInstance; + format::HandleId buffer; + VkDeviceSize offset; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &vertexCount); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &instanceCount); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstVertex); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstInstance); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &buffer); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdDraw(call_info, commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); + consumer->Process_vkCmdDispatchIndirect(call_info, commandBuffer, buffer, offset); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdDrawIndexed(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - uint32_t indexCount; - uint32_t instanceCount; - uint32_t firstIndex; - int32_t vertexOffset; - uint32_t firstInstance; + format::HandleId event; + VkPipelineStageFlags stageMask; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &indexCount); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &instanceCount); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstIndex); - bytes_read += ValueDecoder::DecodeInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &vertexOffset); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstInstance); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stageMask); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdDrawIndexed(call_info, commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); + consumer->Process_vkCmdSetEvent(call_info, commandBuffer, event, stageMask); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdDrawIndirect(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdResetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId buffer; - VkDeviceSize offset; - uint32_t drawCount; - uint32_t stride; + format::HandleId event; + VkPipelineStageFlags stageMask; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &buffer); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &drawCount); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stride); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stageMask); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdDrawIndirect(call_info, commandBuffer, buffer, offset, drawCount, stride); + consumer->Process_vkCmdResetEvent(call_info, commandBuffer, event, stageMask); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdDrawIndexedIndirect(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdWaitEvents(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId buffer; - VkDeviceSize offset; - uint32_t drawCount; - uint32_t stride; + uint32_t eventCount; + HandlePointerDecoder pEvents; + VkPipelineStageFlags srcStageMask; + VkPipelineStageFlags dstStageMask; + uint32_t memoryBarrierCount; + StructPointerDecoder pMemoryBarriers; + uint32_t bufferMemoryBarrierCount; + StructPointerDecoder pBufferMemoryBarriers; + uint32_t imageMemoryBarrierCount; + StructPointerDecoder pImageMemoryBarriers; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &buffer); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &drawCount); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stride); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &eventCount); + bytes_read += pEvents.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcStageMask); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstStageMask); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &memoryBarrierCount); + bytes_read += pMemoryBarriers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &bufferMemoryBarrierCount); + bytes_read += pBufferMemoryBarriers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &imageMemoryBarrierCount); + bytes_read += pImageMemoryBarriers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdDrawIndexedIndirect(call_info, commandBuffer, buffer, offset, drawCount, stride); + consumer->Process_vkCmdWaitEvents(call_info, commandBuffer, eventCount, &pEvents, srcStageMask, dstStageMask, memoryBarrierCount, &pMemoryBarriers, bufferMemoryBarrierCount, &pBufferMemoryBarriers, imageMemoryBarrierCount, &pImageMemoryBarriers); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdDispatch(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdPushConstants(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - uint32_t groupCountX; - uint32_t groupCountY; - uint32_t groupCountZ; + format::HandleId layout; + VkShaderStageFlags stageFlags; + uint32_t offset; + uint32_t size; + PointerDecoder pValues; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &groupCountX); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &groupCountY); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &groupCountZ); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &layout); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stageFlags); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &size); + bytes_read += pValues.DecodeVoid((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdDispatch(call_info, commandBuffer, groupCountX, groupCountY, groupCountZ); + consumer->Process_vkCmdPushConstants(call_info, commandBuffer, layout, stageFlags, offset, size, &pValues); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdDispatchIndirect(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCreateGraphicsPipelines(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - format::HandleId buffer; - VkDeviceSize offset; + format::HandleId device; + format::HandleId pipelineCache; + uint32_t createInfoCount; + StructPointerDecoder pCreateInfos; + StructPointerDecoder pAllocator; + HandlePointerDecoder pPipelines; + VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &buffer); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineCache); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &createInfoCount); + bytes_read += pCreateInfos.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pPipelines.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdDispatchIndirect(call_info, commandBuffer, buffer, offset); + consumer->Process_vkCreateGraphicsPipelines(call_info, return_value, device, pipelineCache, createInfoCount, &pCreateInfos, &pAllocator, &pPipelines); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdCopyBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCreateFramebuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - format::HandleId srcBuffer; - format::HandleId dstBuffer; - uint32_t regionCount; - StructPointerDecoder pRegions; + format::HandleId device; + StructPointerDecoder pCreateInfo; + StructPointerDecoder pAllocator; + HandlePointerDecoder pFramebuffer; + VkResult return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pFramebuffer.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCreateFramebuffer(call_info, return_value, device, &pCreateInfo, &pAllocator, &pFramebuffer); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkDestroyFramebuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + format::HandleId framebuffer; + StructPointerDecoder pAllocator; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &framebuffer); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkDestroyFramebuffer(call_info, device, framebuffer, &pAllocator); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCreateRenderPass(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + StructPointerDecoder pCreateInfo; + StructPointerDecoder pAllocator; + HandlePointerDecoder pRenderPass; + VkResult return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pRenderPass.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCreateRenderPass(call_info, return_value, device, &pCreateInfo, &pAllocator, &pRenderPass); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkDestroyRenderPass(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + format::HandleId renderPass; + StructPointerDecoder pAllocator; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstBuffer); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), ®ionCount); - bytes_read += pRegions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &renderPass); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdCopyBuffer(call_info, commandBuffer, srcBuffer, dstBuffer, regionCount, &pRegions); + consumer->Process_vkDestroyRenderPass(call_info, device, renderPass, &pAllocator); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdCopyImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetRenderAreaGranularity(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - format::HandleId srcImage; - VkImageLayout srcImageLayout; - format::HandleId dstImage; - VkImageLayout dstImageLayout; - uint32_t regionCount; - StructPointerDecoder pRegions; + format::HandleId device; + format::HandleId renderPass; + StructPointerDecoder pGranularity; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImage); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImageLayout); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImage); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImageLayout); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), ®ionCount); - bytes_read += pRegions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &renderPass); + bytes_read += pGranularity.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdCopyImage(call_info, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, &pRegions); + consumer->Process_vkGetRenderAreaGranularity(call_info, device, renderPass, &pGranularity); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdBlitImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetViewport(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId srcImage; - VkImageLayout srcImageLayout; - format::HandleId dstImage; - VkImageLayout dstImageLayout; - uint32_t regionCount; - StructPointerDecoder pRegions; - VkFilter filter; + uint32_t firstViewport; + uint32_t viewportCount; + StructPointerDecoder pViewports; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImage); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImageLayout); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImage); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImageLayout); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), ®ionCount); - bytes_read += pRegions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &filter); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstViewport); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &viewportCount); + bytes_read += pViewports.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdBlitImage(call_info, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, &pRegions, filter); + consumer->Process_vkCmdSetViewport(call_info, commandBuffer, firstViewport, viewportCount, &pViewports); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdCopyBufferToImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetScissor(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId srcBuffer; - format::HandleId dstImage; - VkImageLayout dstImageLayout; - uint32_t regionCount; - StructPointerDecoder pRegions; + uint32_t firstScissor; + uint32_t scissorCount; + StructPointerDecoder pScissors; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImage); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImageLayout); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), ®ionCount); - bytes_read += pRegions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstScissor); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &scissorCount); + bytes_read += pScissors.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdCopyBufferToImage(call_info, commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, &pRegions); + consumer->Process_vkCmdSetScissor(call_info, commandBuffer, firstScissor, scissorCount, &pScissors); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdCopyImageToBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetLineWidth(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId srcImage; - VkImageLayout srcImageLayout; - format::HandleId dstBuffer; - uint32_t regionCount; - StructPointerDecoder pRegions; + float lineWidth; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImage); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImageLayout); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstBuffer); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), ®ionCount); - bytes_read += pRegions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFloatValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &lineWidth); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdCopyImageToBuffer(call_info, commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, &pRegions); + consumer->Process_vkCmdSetLineWidth(call_info, commandBuffer, lineWidth); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdUpdateBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetDepthBias(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId dstBuffer; - VkDeviceSize dstOffset; - VkDeviceSize dataSize; - PointerDecoder pData; + float depthBiasConstantFactor; + float depthBiasClamp; + float depthBiasSlopeFactor; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstBuffer); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstOffset); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dataSize); - bytes_read += pData.DecodeVoid((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFloatValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &depthBiasConstantFactor); + bytes_read += ValueDecoder::DecodeFloatValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &depthBiasClamp); + bytes_read += ValueDecoder::DecodeFloatValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &depthBiasSlopeFactor); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdUpdateBuffer(call_info, commandBuffer, dstBuffer, dstOffset, dataSize, &pData); + consumer->Process_vkCmdSetDepthBias(call_info, commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdFillBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetBlendConstants(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId dstBuffer; - VkDeviceSize dstOffset; - VkDeviceSize size; - uint32_t data; + PointerDecoder blendConstants; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstBuffer); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstOffset); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &size); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &data); + bytes_read += blendConstants.DecodeFloat((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdFillBuffer(call_info, commandBuffer, dstBuffer, dstOffset, size, data); + consumer->Process_vkCmdSetBlendConstants(call_info, commandBuffer, &blendConstants); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdClearColorImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetDepthBounds(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId image; - VkImageLayout imageLayout; - StructPointerDecoder pColor; - uint32_t rangeCount; - StructPointerDecoder pRanges; + float minDepthBounds; + float maxDepthBounds; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &image); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &imageLayout); - bytes_read += pColor.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &rangeCount); - bytes_read += pRanges.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFloatValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &minDepthBounds); + bytes_read += ValueDecoder::DecodeFloatValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &maxDepthBounds); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdClearColorImage(call_info, commandBuffer, image, imageLayout, &pColor, rangeCount, &pRanges); + consumer->Process_vkCmdSetDepthBounds(call_info, commandBuffer, minDepthBounds, maxDepthBounds); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdClearDepthStencilImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetStencilCompareMask(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId image; - VkImageLayout imageLayout; - StructPointerDecoder pDepthStencil; - uint32_t rangeCount; - StructPointerDecoder pRanges; + VkStencilFaceFlags faceMask; + uint32_t compareMask; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &image); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &imageLayout); - bytes_read += pDepthStencil.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &rangeCount); - bytes_read += pRanges.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &faceMask); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &compareMask); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdClearDepthStencilImage(call_info, commandBuffer, image, imageLayout, &pDepthStencil, rangeCount, &pRanges); + consumer->Process_vkCmdSetStencilCompareMask(call_info, commandBuffer, faceMask, compareMask); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdClearAttachments(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetStencilWriteMask(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - uint32_t attachmentCount; - StructPointerDecoder pAttachments; - uint32_t rectCount; - StructPointerDecoder pRects; + VkStencilFaceFlags faceMask; + uint32_t writeMask; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &attachmentCount); - bytes_read += pAttachments.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &rectCount); - bytes_read += pRects.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &faceMask); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &writeMask); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdClearAttachments(call_info, commandBuffer, attachmentCount, &pAttachments, rectCount, &pRects); + consumer->Process_vkCmdSetStencilWriteMask(call_info, commandBuffer, faceMask, writeMask); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdResolveImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetStencilReference(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId srcImage; - VkImageLayout srcImageLayout; - format::HandleId dstImage; - VkImageLayout dstImageLayout; - uint32_t regionCount; - StructPointerDecoder pRegions; + VkStencilFaceFlags faceMask; + uint32_t reference; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImage); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImageLayout); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImage); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImageLayout); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), ®ionCount); - bytes_read += pRegions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &faceMask); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &reference); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdResolveImage(call_info, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, &pRegions); + consumer->Process_vkCmdSetStencilReference(call_info, commandBuffer, faceMask, reference); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdSetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdBindIndexBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId event; - VkPipelineStageFlags stageMask; + format::HandleId buffer; + VkDeviceSize offset; + VkIndexType indexType; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stageMask); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &buffer); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &indexType); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetEvent(call_info, commandBuffer, event, stageMask); + consumer->Process_vkCmdBindIndexBuffer(call_info, commandBuffer, buffer, offset, indexType); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdResetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdBindVertexBuffers(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId event; - VkPipelineStageFlags stageMask; + uint32_t firstBinding; + uint32_t bindingCount; + HandlePointerDecoder pBuffers; + PointerDecoder pOffsets; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stageMask); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstBinding); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &bindingCount); + bytes_read += pBuffers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pOffsets.DecodeUInt64((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdResetEvent(call_info, commandBuffer, event, stageMask); + consumer->Process_vkCmdBindVertexBuffers(call_info, commandBuffer, firstBinding, bindingCount, &pBuffers, &pOffsets); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdWaitEvents(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdDraw(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - uint32_t eventCount; - HandlePointerDecoder pEvents; - VkPipelineStageFlags srcStageMask; - VkPipelineStageFlags dstStageMask; - uint32_t memoryBarrierCount; - StructPointerDecoder pMemoryBarriers; - uint32_t bufferMemoryBarrierCount; - StructPointerDecoder pBufferMemoryBarriers; - uint32_t imageMemoryBarrierCount; - StructPointerDecoder pImageMemoryBarriers; - - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &eventCount); - bytes_read += pEvents.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcStageMask); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstStageMask); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &memoryBarrierCount); - bytes_read += pMemoryBarriers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &bufferMemoryBarrierCount); - bytes_read += pBufferMemoryBarriers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &imageMemoryBarrierCount); - bytes_read += pImageMemoryBarriers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + uint32_t vertexCount; + uint32_t instanceCount; + uint32_t firstVertex; + uint32_t firstInstance; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &vertexCount); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &instanceCount); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstVertex); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstInstance); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdWaitEvents(call_info, commandBuffer, eventCount, &pEvents, srcStageMask, dstStageMask, memoryBarrierCount, &pMemoryBarriers, bufferMemoryBarrierCount, &pBufferMemoryBarriers, imageMemoryBarrierCount, &pImageMemoryBarriers); + consumer->Process_vkCmdDraw(call_info, commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdPipelineBarrier(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdDrawIndexed(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - VkPipelineStageFlags srcStageMask; - VkPipelineStageFlags dstStageMask; - VkDependencyFlags dependencyFlags; - uint32_t memoryBarrierCount; - StructPointerDecoder pMemoryBarriers; - uint32_t bufferMemoryBarrierCount; - StructPointerDecoder pBufferMemoryBarriers; - uint32_t imageMemoryBarrierCount; - StructPointerDecoder pImageMemoryBarriers; + uint32_t indexCount; + uint32_t instanceCount; + uint32_t firstIndex; + int32_t vertexOffset; + uint32_t firstInstance; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcStageMask); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstStageMask); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dependencyFlags); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &memoryBarrierCount); - bytes_read += pMemoryBarriers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &bufferMemoryBarrierCount); - bytes_read += pBufferMemoryBarriers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &imageMemoryBarrierCount); - bytes_read += pImageMemoryBarriers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &indexCount); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &instanceCount); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstIndex); + bytes_read += ValueDecoder::DecodeInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &vertexOffset); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstInstance); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdPipelineBarrier(call_info, commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, &pMemoryBarriers, bufferMemoryBarrierCount, &pBufferMemoryBarriers, imageMemoryBarrierCount, &pImageMemoryBarriers); + consumer->Process_vkCmdDrawIndexed(call_info, commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdBeginQuery(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdDrawIndirect(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId queryPool; - uint32_t query; - VkQueryControlFlags flags; + format::HandleId buffer; + VkDeviceSize offset; + uint32_t drawCount; + uint32_t stride; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryPool); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &query); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &flags); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &buffer); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &drawCount); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stride); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdBeginQuery(call_info, commandBuffer, queryPool, query, flags); + consumer->Process_vkCmdDrawIndirect(call_info, commandBuffer, buffer, offset, drawCount, stride); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdEndQuery(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdDrawIndexedIndirect(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId queryPool; - uint32_t query; + format::HandleId buffer; + VkDeviceSize offset; + uint32_t drawCount; + uint32_t stride; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryPool); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &query); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &buffer); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &drawCount); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stride); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdEndQuery(call_info, commandBuffer, queryPool, query); + consumer->Process_vkCmdDrawIndexedIndirect(call_info, commandBuffer, buffer, offset, drawCount, stride); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdResetQueryPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdBlitImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId queryPool; - uint32_t firstQuery; - uint32_t queryCount; + format::HandleId srcImage; + VkImageLayout srcImageLayout; + format::HandleId dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + StructPointerDecoder pRegions; + VkFilter filter; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryPool); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstQuery); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryCount); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImage); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImageLayout); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImage); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImageLayout); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), ®ionCount); + bytes_read += pRegions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &filter); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdResetQueryPool(call_info, commandBuffer, queryPool, firstQuery, queryCount); + consumer->Process_vkCmdBlitImage(call_info, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, &pRegions, filter); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdWriteTimestamp(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdClearDepthStencilImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - VkPipelineStageFlagBits pipelineStage; - format::HandleId queryPool; - uint32_t query; + format::HandleId image; + VkImageLayout imageLayout; + StructPointerDecoder pDepthStencil; + uint32_t rangeCount; + StructPointerDecoder pRanges; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineStage); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryPool); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &query); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &image); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &imageLayout); + bytes_read += pDepthStencil.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &rangeCount); + bytes_read += pRanges.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdWriteTimestamp(call_info, commandBuffer, pipelineStage, queryPool, query); + consumer->Process_vkCmdClearDepthStencilImage(call_info, commandBuffer, image, imageLayout, &pDepthStencil, rangeCount, &pRanges); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdCopyQueryPoolResults(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdClearAttachments(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId queryPool; - uint32_t firstQuery; - uint32_t queryCount; - format::HandleId dstBuffer; - VkDeviceSize dstOffset; - VkDeviceSize stride; - VkQueryResultFlags flags; + uint32_t attachmentCount; + StructPointerDecoder pAttachments; + uint32_t rectCount; + StructPointerDecoder pRects; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryPool); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstQuery); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryCount); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstBuffer); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstOffset); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stride); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &flags); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &attachmentCount); + bytes_read += pAttachments.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &rectCount); + bytes_read += pRects.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdCopyQueryPoolResults(call_info, commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); + consumer->Process_vkCmdClearAttachments(call_info, commandBuffer, attachmentCount, &pAttachments, rectCount, &pRects); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdPushConstants(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdResolveImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId layout; - VkShaderStageFlags stageFlags; - uint32_t offset; - uint32_t size; - PointerDecoder pValues; + format::HandleId srcImage; + VkImageLayout srcImageLayout; + format::HandleId dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + StructPointerDecoder pRegions; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &layout); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stageFlags); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &size); - bytes_read += pValues.DecodeVoid((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImage); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &srcImageLayout); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImage); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dstImageLayout); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), ®ionCount); + bytes_read += pRegions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdPushConstants(call_info, commandBuffer, layout, stageFlags, offset, size, &pValues); + consumer->Process_vkCmdResolveImage(call_info, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, &pRegions); } return bytes_read; @@ -2980,26 +3000,6 @@ size_t VulkanDecoder::Decode_vkCmdEndRenderPass(const ApiCallInfo& call_info, co return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdExecuteCommands(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) -{ - size_t bytes_read = 0; - - format::HandleId commandBuffer; - uint32_t commandBufferCount; - HandlePointerDecoder pCommandBuffers; - - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBufferCount); - bytes_read += pCommandBuffers.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - - for (auto consumer : GetConsumers()) - { - consumer->Process_vkCmdExecuteCommands(call_info, commandBuffer, commandBufferCount, &pCommandBuffers); - } - - return bytes_read; -} - size_t VulkanDecoder::Decode_vkBindBufferMemory2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; @@ -3086,34 +3086,6 @@ size_t VulkanDecoder::Decode_vkCmdSetDeviceMask(const ApiCallInfo& call_info, co return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdDispatchBase(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) -{ - size_t bytes_read = 0; - - format::HandleId commandBuffer; - uint32_t baseGroupX; - uint32_t baseGroupY; - uint32_t baseGroupZ; - uint32_t groupCountX; - uint32_t groupCountY; - uint32_t groupCountZ; - - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &baseGroupX); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &baseGroupY); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &baseGroupZ); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &groupCountX); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &groupCountY); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &groupCountZ); - - for (auto consumer : GetConsumers()) - { - consumer->Process_vkCmdDispatchBase(call_info, commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); - } - - return bytes_read; -} - size_t VulkanDecoder::Decode_vkEnumeratePhysicalDeviceGroups(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; @@ -3350,71 +3322,115 @@ size_t VulkanDecoder::Decode_vkTrimCommandPool(const ApiCallInfo& call_info, con for (auto consumer : GetConsumers()) { - consumer->Process_vkTrimCommandPool(call_info, device, commandPool, flags); + consumer->Process_vkTrimCommandPool(call_info, device, commandPool, flags); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetDeviceQueue2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + StructPointerDecoder pQueueInfo; + HandlePointerDecoder pQueue; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pQueueInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pQueue.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetDeviceQueue2(call_info, device, &pQueueInfo, &pQueue); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetPhysicalDeviceExternalBufferProperties(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId physicalDevice; + StructPointerDecoder pExternalBufferInfo; + StructPointerDecoder pExternalBufferProperties; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &physicalDevice); + bytes_read += pExternalBufferInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pExternalBufferProperties.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetPhysicalDeviceExternalBufferProperties(call_info, physicalDevice, &pExternalBufferInfo, &pExternalBufferProperties); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetDeviceQueue2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetPhysicalDeviceExternalFenceProperties(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - StructPointerDecoder pQueueInfo; - HandlePointerDecoder pQueue; + format::HandleId physicalDevice; + StructPointerDecoder pExternalFenceInfo; + StructPointerDecoder pExternalFenceProperties; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pQueueInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pQueue.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &physicalDevice); + bytes_read += pExternalFenceInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pExternalFenceProperties.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetDeviceQueue2(call_info, device, &pQueueInfo, &pQueue); + consumer->Process_vkGetPhysicalDeviceExternalFenceProperties(call_info, physicalDevice, &pExternalFenceInfo, &pExternalFenceProperties); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCreateSamplerYcbcrConversion(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetPhysicalDeviceExternalSemaphoreProperties(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - StructPointerDecoder pCreateInfo; - StructPointerDecoder pAllocator; - HandlePointerDecoder pYcbcrConversion; - VkResult return_value; + format::HandleId physicalDevice; + StructPointerDecoder pExternalSemaphoreInfo; + StructPointerDecoder pExternalSemaphoreProperties; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pYcbcrConversion.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &physicalDevice); + bytes_read += pExternalSemaphoreInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pExternalSemaphoreProperties.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCreateSamplerYcbcrConversion(call_info, return_value, device, &pCreateInfo, &pAllocator, &pYcbcrConversion); + consumer->Process_vkGetPhysicalDeviceExternalSemaphoreProperties(call_info, physicalDevice, &pExternalSemaphoreInfo, &pExternalSemaphoreProperties); } return bytes_read; } -size_t VulkanDecoder::Decode_vkDestroySamplerYcbcrConversion(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdDispatchBase(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - format::HandleId ycbcrConversion; - StructPointerDecoder pAllocator; + format::HandleId commandBuffer; + uint32_t baseGroupX; + uint32_t baseGroupY; + uint32_t baseGroupZ; + uint32_t groupCountX; + uint32_t groupCountY; + uint32_t groupCountZ; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &ycbcrConversion); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &baseGroupX); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &baseGroupY); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &baseGroupZ); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &groupCountX); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &groupCountY); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &groupCountZ); for (auto consumer : GetConsumers()) { - consumer->Process_vkDestroySamplerYcbcrConversion(call_info, device, ycbcrConversion, &pAllocator); + consumer->Process_vkCmdDispatchBase(call_info, commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); } return bytes_read; @@ -3464,365 +3480,349 @@ size_t VulkanDecoder::Decode_vkDestroyDescriptorUpdateTemplate(const ApiCallInfo return bytes_read; } -size_t VulkanDecoder::Decode_vkGetPhysicalDeviceExternalBufferProperties(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) -{ - size_t bytes_read = 0; - - format::HandleId physicalDevice; - StructPointerDecoder pExternalBufferInfo; - StructPointerDecoder pExternalBufferProperties; - - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &physicalDevice); - bytes_read += pExternalBufferInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pExternalBufferProperties.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - - for (auto consumer : GetConsumers()) - { - consumer->Process_vkGetPhysicalDeviceExternalBufferProperties(call_info, physicalDevice, &pExternalBufferInfo, &pExternalBufferProperties); - } - - return bytes_read; -} - -size_t VulkanDecoder::Decode_vkGetPhysicalDeviceExternalFenceProperties(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetDescriptorSetLayoutSupport(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId physicalDevice; - StructPointerDecoder pExternalFenceInfo; - StructPointerDecoder pExternalFenceProperties; + format::HandleId device; + StructPointerDecoder pCreateInfo; + StructPointerDecoder pSupport; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &physicalDevice); - bytes_read += pExternalFenceInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pExternalFenceProperties.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pSupport.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetPhysicalDeviceExternalFenceProperties(call_info, physicalDevice, &pExternalFenceInfo, &pExternalFenceProperties); + consumer->Process_vkGetDescriptorSetLayoutSupport(call_info, device, &pCreateInfo, &pSupport); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetPhysicalDeviceExternalSemaphoreProperties(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCreateSamplerYcbcrConversion(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId physicalDevice; - StructPointerDecoder pExternalSemaphoreInfo; - StructPointerDecoder pExternalSemaphoreProperties; + format::HandleId device; + StructPointerDecoder pCreateInfo; + StructPointerDecoder pAllocator; + HandlePointerDecoder pYcbcrConversion; + VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &physicalDevice); - bytes_read += pExternalSemaphoreInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pExternalSemaphoreProperties.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pYcbcrConversion.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetPhysicalDeviceExternalSemaphoreProperties(call_info, physicalDevice, &pExternalSemaphoreInfo, &pExternalSemaphoreProperties); + consumer->Process_vkCreateSamplerYcbcrConversion(call_info, return_value, device, &pCreateInfo, &pAllocator, &pYcbcrConversion); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetDescriptorSetLayoutSupport(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkDestroySamplerYcbcrConversion(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pCreateInfo; - StructPointerDecoder pSupport; + format::HandleId ycbcrConversion; + StructPointerDecoder pAllocator; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pSupport.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &ycbcrConversion); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetDescriptorSetLayoutSupport(call_info, device, &pCreateInfo, &pSupport); + consumer->Process_vkDestroySamplerYcbcrConversion(call_info, device, ycbcrConversion, &pAllocator); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdDrawIndirectCount(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkResetQueryPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - format::HandleId buffer; - VkDeviceSize offset; - format::HandleId countBuffer; - VkDeviceSize countBufferOffset; - uint32_t maxDrawCount; - uint32_t stride; + format::HandleId device; + format::HandleId queryPool; + uint32_t firstQuery; + uint32_t queryCount; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &buffer); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &countBuffer); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &countBufferOffset); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &maxDrawCount); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stride); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryPool); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstQuery); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryCount); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdDrawIndirectCount(call_info, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + consumer->Process_vkResetQueryPool(call_info, device, queryPool, firstQuery, queryCount); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdDrawIndexedIndirectCount(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetSemaphoreCounterValue(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - format::HandleId buffer; - VkDeviceSize offset; - format::HandleId countBuffer; - VkDeviceSize countBufferOffset; - uint32_t maxDrawCount; - uint32_t stride; + format::HandleId device; + format::HandleId semaphore; + PointerDecoder pValue; + VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &buffer); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &countBuffer); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &countBufferOffset); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &maxDrawCount); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stride); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &semaphore); + bytes_read += pValue.DecodeUInt64((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdDrawIndexedIndirectCount(call_info, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + consumer->Process_vkGetSemaphoreCounterValue(call_info, return_value, device, semaphore, &pValue); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCreateRenderPass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkWaitSemaphores(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pCreateInfo; - StructPointerDecoder pAllocator; - HandlePointerDecoder pRenderPass; + StructPointerDecoder pWaitInfo; + uint64_t timeout; VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pRenderPass.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pWaitInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &timeout); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCreateRenderPass2(call_info, return_value, device, &pCreateInfo, &pAllocator, &pRenderPass); + consumer->Process_vkWaitSemaphores(call_info, return_value, device, &pWaitInfo, timeout); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdBeginRenderPass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkSignalSemaphore(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - StructPointerDecoder pRenderPassBegin; - StructPointerDecoder pSubpassBeginInfo; + format::HandleId device; + StructPointerDecoder pSignalInfo; + VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pRenderPassBegin.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pSubpassBeginInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pSignalInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdBeginRenderPass2(call_info, commandBuffer, &pRenderPassBegin, &pSubpassBeginInfo); + consumer->Process_vkSignalSemaphore(call_info, return_value, device, &pSignalInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdNextSubpass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetBufferDeviceAddress(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - StructPointerDecoder pSubpassBeginInfo; - StructPointerDecoder pSubpassEndInfo; + format::HandleId device; + StructPointerDecoder pInfo; + VkDeviceAddress return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pSubpassBeginInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pSubpassEndInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdNextSubpass2(call_info, commandBuffer, &pSubpassBeginInfo, &pSubpassEndInfo); + consumer->Process_vkGetBufferDeviceAddress(call_info, return_value, device, &pInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdEndRenderPass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetBufferOpaqueCaptureAddress(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - StructPointerDecoder pSubpassEndInfo; + format::HandleId device; + StructPointerDecoder pInfo; + uint64_t return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pSubpassEndInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdEndRenderPass2(call_info, commandBuffer, &pSubpassEndInfo); + consumer->Process_vkGetBufferOpaqueCaptureAddress(call_info, return_value, device, &pInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkResetQueryPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetDeviceMemoryOpaqueCaptureAddress(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - format::HandleId queryPool; - uint32_t firstQuery; - uint32_t queryCount; + StructPointerDecoder pInfo; + uint64_t return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryPool); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstQuery); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryCount); + bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkResetQueryPool(call_info, device, queryPool, firstQuery, queryCount); + consumer->Process_vkGetDeviceMemoryOpaqueCaptureAddress(call_info, return_value, device, &pInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetSemaphoreCounterValue(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdDrawIndirectCount(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - format::HandleId semaphore; - PointerDecoder pValue; - VkResult return_value; + format::HandleId commandBuffer; + format::HandleId buffer; + VkDeviceSize offset; + format::HandleId countBuffer; + VkDeviceSize countBufferOffset; + uint32_t maxDrawCount; + uint32_t stride; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &semaphore); - bytes_read += pValue.DecodeUInt64((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &buffer); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &countBuffer); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &countBufferOffset); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &maxDrawCount); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stride); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetSemaphoreCounterValue(call_info, return_value, device, semaphore, &pValue); + consumer->Process_vkCmdDrawIndirectCount(call_info, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } return bytes_read; } -size_t VulkanDecoder::Decode_vkWaitSemaphores(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdDrawIndexedIndirectCount(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - StructPointerDecoder pWaitInfo; - uint64_t timeout; - VkResult return_value; + format::HandleId commandBuffer; + format::HandleId buffer; + VkDeviceSize offset; + format::HandleId countBuffer; + VkDeviceSize countBufferOffset; + uint32_t maxDrawCount; + uint32_t stride; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pWaitInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &timeout); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &buffer); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &countBuffer); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &countBufferOffset); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &maxDrawCount); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stride); for (auto consumer : GetConsumers()) { - consumer->Process_vkWaitSemaphores(call_info, return_value, device, &pWaitInfo, timeout); + consumer->Process_vkCmdDrawIndexedIndirectCount(call_info, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } return bytes_read; } -size_t VulkanDecoder::Decode_vkSignalSemaphore(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCreateRenderPass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pSignalInfo; + StructPointerDecoder pCreateInfo; + StructPointerDecoder pAllocator; + HandlePointerDecoder pRenderPass; VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pSignalInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pRenderPass.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkSignalSemaphore(call_info, return_value, device, &pSignalInfo); + consumer->Process_vkCreateRenderPass2(call_info, return_value, device, &pCreateInfo, &pAllocator, &pRenderPass); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetBufferDeviceAddress(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdBeginRenderPass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - StructPointerDecoder pInfo; - VkDeviceAddress return_value; + format::HandleId commandBuffer; + StructPointerDecoder pRenderPassBegin; + StructPointerDecoder pSubpassBeginInfo; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += pRenderPassBegin.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pSubpassBeginInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetBufferDeviceAddress(call_info, return_value, device, &pInfo); + consumer->Process_vkCmdBeginRenderPass2(call_info, commandBuffer, &pRenderPassBegin, &pSubpassBeginInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetBufferOpaqueCaptureAddress(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdNextSubpass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - StructPointerDecoder pInfo; - uint64_t return_value; + format::HandleId commandBuffer; + StructPointerDecoder pSubpassBeginInfo; + StructPointerDecoder pSubpassEndInfo; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += pSubpassBeginInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pSubpassEndInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetBufferOpaqueCaptureAddress(call_info, return_value, device, &pInfo); + consumer->Process_vkCmdNextSubpass2(call_info, commandBuffer, &pSubpassBeginInfo, &pSubpassEndInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetDeviceMemoryOpaqueCaptureAddress(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdEndRenderPass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - StructPointerDecoder pInfo; - uint64_t return_value; + format::HandleId commandBuffer; + StructPointerDecoder pSubpassEndInfo; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += pSubpassEndInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetDeviceMemoryOpaqueCaptureAddress(call_info, return_value, device, &pInfo); + consumer->Process_vkCmdEndRenderPass2(call_info, commandBuffer, &pSubpassEndInfo); } return bytes_read; @@ -3944,199 +3944,261 @@ size_t VulkanDecoder::Decode_vkGetPrivateData(const ApiCallInfo& call_info, cons return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdSetEvent2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdPipelineBarrier2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId event; StructPointerDecoder pDependencyInfo; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); bytes_read += pDependencyInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetEvent2(call_info, commandBuffer, event, &pDependencyInfo); + consumer->Process_vkCmdPipelineBarrier2(call_info, commandBuffer, &pDependencyInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdResetEvent2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdWriteTimestamp2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - format::HandleId event; - VkPipelineStageFlags2 stageMask; + VkPipelineStageFlags2 stage; + format::HandleId queryPool; + uint32_t query; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); - bytes_read += ValueDecoder::DecodeFlags64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stageMask); + bytes_read += ValueDecoder::DecodeFlags64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stage); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryPool); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &query); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdResetEvent2(call_info, commandBuffer, event, stageMask); + consumer->Process_vkCmdWriteTimestamp2(call_info, commandBuffer, stage, queryPool, query); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdWaitEvents2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkQueueSubmit2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId commandBuffer; - uint32_t eventCount; - HandlePointerDecoder pEvents; - StructPointerDecoder pDependencyInfos; + format::HandleId queue; + uint32_t submitCount; + StructPointerDecoder pSubmits; + format::HandleId fence; + VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &eventCount); - bytes_read += pEvents.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pDependencyInfos.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queue); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &submitCount); + bytes_read += pSubmits.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &fence); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdWaitEvents2(call_info, commandBuffer, eventCount, &pEvents, &pDependencyInfos); + consumer->Process_vkQueueSubmit2(call_info, return_value, queue, submitCount, &pSubmits, fence); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdPipelineBarrier2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdCopyBuffer2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - StructPointerDecoder pDependencyInfo; + StructPointerDecoder pCopyBufferInfo; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pDependencyInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pCopyBufferInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdPipelineBarrier2(call_info, commandBuffer, &pDependencyInfo); + consumer->Process_vkCmdCopyBuffer2(call_info, commandBuffer, &pCopyBufferInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdWriteTimestamp2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdCopyImage2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - VkPipelineStageFlags2 stage; - format::HandleId queryPool; - uint32_t query; + StructPointerDecoder pCopyImageInfo; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeFlags64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stage); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queryPool); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &query); + bytes_read += pCopyImageInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdWriteTimestamp2(call_info, commandBuffer, stage, queryPool, query); + consumer->Process_vkCmdCopyImage2(call_info, commandBuffer, &pCopyImageInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkQueueSubmit2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdCopyBufferToImage2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId queue; - uint32_t submitCount; - StructPointerDecoder pSubmits; - format::HandleId fence; - VkResult return_value; + format::HandleId commandBuffer; + StructPointerDecoder pCopyBufferToImageInfo; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queue); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &submitCount); - bytes_read += pSubmits.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &fence); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += pCopyBufferToImageInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkQueueSubmit2(call_info, return_value, queue, submitCount, &pSubmits, fence); + consumer->Process_vkCmdCopyBufferToImage2(call_info, commandBuffer, &pCopyBufferToImageInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdCopyBuffer2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdCopyImageToBuffer2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - StructPointerDecoder pCopyBufferInfo; + StructPointerDecoder pCopyImageToBufferInfo; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pCopyBufferInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pCopyImageToBufferInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdCopyImageToBuffer2(call_info, commandBuffer, &pCopyImageToBufferInfo); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetDeviceBufferMemoryRequirements(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + StructPointerDecoder pInfo; + StructPointerDecoder pMemoryRequirements; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pMemoryRequirements.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetDeviceBufferMemoryRequirements(call_info, device, &pInfo, &pMemoryRequirements); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetDeviceImageMemoryRequirements(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + StructPointerDecoder pInfo; + StructPointerDecoder pMemoryRequirements; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pMemoryRequirements.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetDeviceImageMemoryRequirements(call_info, device, &pInfo, &pMemoryRequirements); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetDeviceImageSparseMemoryRequirements(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + StructPointerDecoder pInfo; + PointerDecoder pSparseMemoryRequirementCount; + StructPointerDecoder pSparseMemoryRequirements; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pSparseMemoryRequirementCount.DecodeUInt32((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pSparseMemoryRequirements.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdCopyBuffer2(call_info, commandBuffer, &pCopyBufferInfo); + consumer->Process_vkGetDeviceImageSparseMemoryRequirements(call_info, device, &pInfo, &pSparseMemoryRequirementCount, &pSparseMemoryRequirements); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdCopyImage2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetEvent2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - StructPointerDecoder pCopyImageInfo; + format::HandleId event; + StructPointerDecoder pDependencyInfo; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pCopyImageInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); + bytes_read += pDependencyInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdCopyImage2(call_info, commandBuffer, &pCopyImageInfo); + consumer->Process_vkCmdSetEvent2(call_info, commandBuffer, event, &pDependencyInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdCopyBufferToImage2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdResetEvent2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - StructPointerDecoder pCopyBufferToImageInfo; + format::HandleId event; + VkPipelineStageFlags2 stageMask; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pCopyBufferToImageInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &event); + bytes_read += ValueDecoder::DecodeFlags64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stageMask); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdCopyBufferToImage2(call_info, commandBuffer, &pCopyBufferToImageInfo); + consumer->Process_vkCmdResetEvent2(call_info, commandBuffer, event, stageMask); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdCopyImageToBuffer2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdWaitEvents2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - StructPointerDecoder pCopyImageToBufferInfo; + uint32_t eventCount; + HandlePointerDecoder pEvents; + StructPointerDecoder pDependencyInfos; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pCopyImageToBufferInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &eventCount); + bytes_read += pEvents.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pDependencyInfos.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdCopyImageToBuffer2(call_info, commandBuffer, &pCopyImageToBufferInfo); + consumer->Process_vkCmdWaitEvents2(call_info, commandBuffer, eventCount, &pEvents, &pDependencyInfos); } return bytes_read; @@ -4504,211 +4566,167 @@ size_t VulkanDecoder::Decode_vkCmdSetPrimitiveRestartEnable(const ApiCallInfo& c return bytes_read; } -size_t VulkanDecoder::Decode_vkGetDeviceBufferMemoryRequirements(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkMapMemory2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pInfo; - StructPointerDecoder pMemoryRequirements; + StructPointerDecoder pMemoryMapInfo; + PointerDecoder ppData; + VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pMemoryRequirements.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pMemoryMapInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ppData.DecodeVoidPtr((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetDeviceBufferMemoryRequirements(call_info, device, &pInfo, &pMemoryRequirements); + consumer->Process_vkMapMemory2(call_info, return_value, device, &pMemoryMapInfo, &ppData); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetDeviceImageMemoryRequirements(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkUnmapMemory2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pInfo; - StructPointerDecoder pMemoryRequirements; + StructPointerDecoder pMemoryUnmapInfo; + VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pMemoryRequirements.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pMemoryUnmapInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetDeviceImageMemoryRequirements(call_info, device, &pInfo, &pMemoryRequirements); + consumer->Process_vkUnmapMemory2(call_info, return_value, device, &pMemoryUnmapInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetDeviceImageSparseMemoryRequirements(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetDeviceImageSubresourceLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pInfo; - PointerDecoder pSparseMemoryRequirementCount; - StructPointerDecoder pSparseMemoryRequirements; + StructPointerDecoder pInfo; + StructPointerDecoder pLayout; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pSparseMemoryRequirementCount.DecodeUInt32((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pSparseMemoryRequirements.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - - for (auto consumer : GetConsumers()) - { - consumer->Process_vkGetDeviceImageSparseMemoryRequirements(call_info, device, &pInfo, &pSparseMemoryRequirementCount, &pSparseMemoryRequirements); - } - - return bytes_read; -} - -size_t VulkanDecoder::Decode_vkCmdSetLineStipple(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) -{ - size_t bytes_read = 0; - - format::HandleId commandBuffer; - uint32_t lineStippleFactor; - uint16_t lineStipplePattern; - - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &lineStippleFactor); - bytes_read += ValueDecoder::DecodeUInt16Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &lineStipplePattern); + bytes_read += pLayout.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetLineStipple(call_info, commandBuffer, lineStippleFactor, lineStipplePattern); + consumer->Process_vkGetDeviceImageSubresourceLayout(call_info, device, &pInfo, &pLayout); } return bytes_read; } -size_t VulkanDecoder::Decode_vkMapMemory2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetImageSubresourceLayout2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pMemoryMapInfo; - PointerDecoder ppData; - VkResult return_value; + format::HandleId image; + StructPointerDecoder pSubresource; + StructPointerDecoder pLayout; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pMemoryMapInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ppData.DecodeVoidPtr((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &image); + bytes_read += pSubresource.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pLayout.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkMapMemory2(call_info, return_value, device, &pMemoryMapInfo, &ppData); + consumer->Process_vkGetImageSubresourceLayout2(call_info, device, image, &pSubresource, &pLayout); } return bytes_read; } -size_t VulkanDecoder::Decode_vkUnmapMemory2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCopyMemoryToImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pMemoryUnmapInfo; + StructPointerDecoder pCopyMemoryToImageInfo; VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pMemoryUnmapInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pCopyMemoryToImageInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkUnmapMemory2(call_info, return_value, device, &pMemoryUnmapInfo); - } - - return bytes_read; -} - -size_t VulkanDecoder::Decode_vkCmdBindIndexBuffer2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) -{ - size_t bytes_read = 0; - - format::HandleId commandBuffer; - format::HandleId buffer; - VkDeviceSize offset; - VkDeviceSize size; - VkIndexType indexType; - - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &buffer); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); - bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &size); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &indexType); - - for (auto consumer : GetConsumers()) - { - consumer->Process_vkCmdBindIndexBuffer2(call_info, commandBuffer, buffer, offset, size, indexType); + consumer->Process_vkCopyMemoryToImage(call_info, return_value, device, &pCopyMemoryToImageInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetRenderingAreaGranularity(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCopyImageToMemory(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pRenderingAreaInfo; - StructPointerDecoder pGranularity; + StructPointerDecoder pCopyImageToMemoryInfo; + VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pRenderingAreaInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pGranularity.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pCopyImageToMemoryInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetRenderingAreaGranularity(call_info, device, &pRenderingAreaInfo, &pGranularity); + consumer->Process_vkCopyImageToMemory(call_info, return_value, device, &pCopyImageToMemoryInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetDeviceImageSubresourceLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCopyImageToImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pInfo; - StructPointerDecoder pLayout; + StructPointerDecoder pCopyImageToImageInfo; + VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pLayout.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pCopyImageToImageInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetDeviceImageSubresourceLayout(call_info, device, &pInfo, &pLayout); + consumer->Process_vkCopyImageToImage(call_info, return_value, device, &pCopyImageToImageInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetImageSubresourceLayout2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkTransitionImageLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - format::HandleId image; - StructPointerDecoder pSubresource; - StructPointerDecoder pLayout; + uint32_t transitionCount; + StructPointerDecoder pTransitions; + VkResult return_value; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &image); - bytes_read += pSubresource.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += pLayout.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &transitionCount); + bytes_read += pTransitions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetImageSubresourceLayout2(call_info, device, image, &pSubresource, &pLayout); + consumer->Process_vkTransitionImageLayout(call_info, return_value, device, transitionCount, &pTransitions); } return bytes_read; @@ -4740,173 +4758,155 @@ size_t VulkanDecoder::Decode_vkCmdPushDescriptorSet(const ApiCallInfo& call_info return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdSetRenderingAttachmentLocations(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdBindDescriptorSets2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - StructPointerDecoder pLocationInfo; + StructPointerDecoder pBindDescriptorSetsInfo; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pLocationInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pBindDescriptorSetsInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetRenderingAttachmentLocations(call_info, commandBuffer, &pLocationInfo); + consumer->Process_vkCmdBindDescriptorSets2(call_info, commandBuffer, &pBindDescriptorSetsInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdSetRenderingInputAttachmentIndices(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdPushConstants2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - StructPointerDecoder pInputAttachmentIndexInfo; + StructPointerDecoder pPushConstantsInfo; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pInputAttachmentIndexInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pPushConstantsInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetRenderingInputAttachmentIndices(call_info, commandBuffer, &pInputAttachmentIndexInfo); + consumer->Process_vkCmdPushConstants2(call_info, commandBuffer, &pPushConstantsInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdBindDescriptorSets2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdPushDescriptorSet2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - StructPointerDecoder pBindDescriptorSetsInfo; + StructPointerDecoder pPushDescriptorSetInfo; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pBindDescriptorSetsInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pPushDescriptorSetInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdBindDescriptorSets2(call_info, commandBuffer, &pBindDescriptorSetsInfo); + consumer->Process_vkCmdPushDescriptorSet2(call_info, commandBuffer, &pPushDescriptorSetInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdPushConstants2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetLineStipple(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - StructPointerDecoder pPushConstantsInfo; + uint32_t lineStippleFactor; + uint16_t lineStipplePattern; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pPushConstantsInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &lineStippleFactor); + bytes_read += ValueDecoder::DecodeUInt16Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &lineStipplePattern); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdPushConstants2(call_info, commandBuffer, &pPushConstantsInfo); + consumer->Process_vkCmdSetLineStipple(call_info, commandBuffer, lineStippleFactor, lineStipplePattern); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdPushDescriptorSet2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdBindIndexBuffer2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - StructPointerDecoder pPushDescriptorSetInfo; + format::HandleId buffer; + VkDeviceSize offset; + VkDeviceSize size; + VkIndexType indexType; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pPushDescriptorSetInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - - for (auto consumer : GetConsumers()) - { - consumer->Process_vkCmdPushDescriptorSet2(call_info, commandBuffer, &pPushDescriptorSetInfo); - } - - return bytes_read; -} - -size_t VulkanDecoder::Decode_vkCopyMemoryToImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) -{ - size_t bytes_read = 0; - - format::HandleId device; - StructPointerDecoder pCopyMemoryToImageInfo; - VkResult return_value; - - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pCopyMemoryToImageInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &buffer); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &offset); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &size); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &indexType); for (auto consumer : GetConsumers()) { - consumer->Process_vkCopyMemoryToImage(call_info, return_value, device, &pCopyMemoryToImageInfo); + consumer->Process_vkCmdBindIndexBuffer2(call_info, commandBuffer, buffer, offset, size, indexType); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCopyImageToMemory(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetRenderingAreaGranularity(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId device; - StructPointerDecoder pCopyImageToMemoryInfo; - VkResult return_value; + StructPointerDecoder pRenderingAreaInfo; + StructPointerDecoder pGranularity; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pCopyImageToMemoryInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += pRenderingAreaInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pGranularity.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCopyImageToMemory(call_info, return_value, device, &pCopyImageToMemoryInfo); + consumer->Process_vkGetRenderingAreaGranularity(call_info, device, &pRenderingAreaInfo, &pGranularity); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCopyImageToImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetRenderingAttachmentLocations(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - StructPointerDecoder pCopyImageToImageInfo; - VkResult return_value; + format::HandleId commandBuffer; + StructPointerDecoder pLocationInfo; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += pCopyImageToImageInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += pLocationInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCopyImageToImage(call_info, return_value, device, &pCopyImageToImageInfo); + consumer->Process_vkCmdSetRenderingAttachmentLocations(call_info, commandBuffer, &pLocationInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkTransitionImageLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetRenderingInputAttachmentIndices(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - uint32_t transitionCount; - StructPointerDecoder pTransitions; - VkResult return_value; + format::HandleId commandBuffer; + StructPointerDecoder pInputAttachmentIndexInfo; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &transitionCount); - bytes_read += pTransitions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += pInputAttachmentIndexInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkTransitionImageLayout(call_info, return_value, device, transitionCount, &pTransitions); + consumer->Process_vkCmdSetRenderingInputAttachmentIndices(call_info, commandBuffer, &pInputAttachmentIndexInfo); } return bytes_read; @@ -8352,6 +8352,60 @@ size_t VulkanDecoder::Decode_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT(const return bytes_read; } +size_t VulkanDecoder::Decode_vkCmdCopyMemoryIndirectKHR(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId commandBuffer; + StructPointerDecoder pCopyMemoryIndirectInfo; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += pCopyMemoryIndirectInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdCopyMemoryIndirectKHR(call_info, commandBuffer, &pCopyMemoryIndirectInfo); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCmdCopyMemoryToImageIndirectKHR(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId commandBuffer; + StructPointerDecoder pCopyMemoryToImageIndirectInfo; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += pCopyMemoryToImageIndirectInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdCopyMemoryToImageIndirectKHR(call_info, commandBuffer, &pCopyMemoryToImageIndirectInfo); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCmdEndRendering2KHR(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId commandBuffer; + StructPointerDecoder pRenderingEndInfo; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += pRenderingEndInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdEndRendering2KHR(call_info, commandBuffer, &pRenderingEndInfo); + } + + return bytes_read; +} + size_t VulkanDecoder::Decode_vkFrameBoundaryANDROID(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; @@ -10454,6 +10508,98 @@ size_t VulkanDecoder::Decode_vkGetQueueCheckpointData2NV(const ApiCallInfo& call return bytes_read; } +size_t VulkanDecoder::Decode_vkSetSwapchainPresentTimingQueueSizeEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + format::HandleId swapchain; + uint32_t size; + VkResult return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &swapchain); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &size); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkSetSwapchainPresentTimingQueueSizeEXT(call_info, return_value, device, swapchain, size); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetSwapchainTimingPropertiesEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + format::HandleId swapchain; + StructPointerDecoder pSwapchainTimingProperties; + PointerDecoder pSwapchainTimingPropertiesCounter; + VkResult return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &swapchain); + bytes_read += pSwapchainTimingProperties.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pSwapchainTimingPropertiesCounter.DecodeUInt64((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetSwapchainTimingPropertiesEXT(call_info, return_value, device, swapchain, &pSwapchainTimingProperties, &pSwapchainTimingPropertiesCounter); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetSwapchainTimeDomainPropertiesEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + format::HandleId swapchain; + StructPointerDecoder pSwapchainTimeDomainProperties; + PointerDecoder pTimeDomainsCounter; + VkResult return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &swapchain); + bytes_read += pSwapchainTimeDomainProperties.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pTimeDomainsCounter.DecodeUInt64((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetSwapchainTimeDomainPropertiesEXT(call_info, return_value, device, swapchain, &pSwapchainTimeDomainProperties, &pTimeDomainsCounter); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetPastPresentationTimingEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + StructPointerDecoder pPastPresentationTimingInfo; + StructPointerDecoder pPastPresentationTimingProperties; + VkResult return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pPastPresentationTimingInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pPastPresentationTimingProperties.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetPastPresentationTimingEXT(call_info, return_value, device, &pPastPresentationTimingInfo, &pPastPresentationTimingProperties); + } + + return bytes_read; +} + size_t VulkanDecoder::Decode_vkInitializePerformanceApiINTEL(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; @@ -11628,11 +11774,145 @@ size_t VulkanDecoder::Decode_vkCmdEndPerTileExecutionQCOM(const ApiCallInfo& cal StructPointerDecoder pPerTileEndInfo; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pPerTileEndInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pPerTileEndInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdEndPerTileExecutionQCOM(call_info, commandBuffer, &pPerTileEndInfo); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetDescriptorSetLayoutSizeEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + format::HandleId layout; + PointerDecoder pLayoutSizeInBytes; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &layout); + bytes_read += pLayoutSizeInBytes.DecodeUInt64((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetDescriptorSetLayoutSizeEXT(call_info, device, layout, &pLayoutSizeInBytes); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetDescriptorSetLayoutBindingOffsetEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + format::HandleId layout; + uint32_t binding; + PointerDecoder pOffset; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &layout); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &binding); + bytes_read += pOffset.DecodeUInt64((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetDescriptorSetLayoutBindingOffsetEXT(call_info, device, layout, binding, &pOffset); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetDescriptorEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + StructPointerDecoder pDescriptorInfo; + size_t dataSize; + PointerDecoder pDescriptor; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pDescriptorInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeSizeTValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &dataSize); + bytes_read += pDescriptor.DecodeVoid((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetDescriptorEXT(call_info, device, &pDescriptorInfo, dataSize, &pDescriptor); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCmdBindDescriptorBuffersEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId commandBuffer; + uint32_t bufferCount; + StructPointerDecoder pBindingInfos; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &bufferCount); + bytes_read += pBindingInfos.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdBindDescriptorBuffersEXT(call_info, commandBuffer, bufferCount, &pBindingInfos); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCmdSetDescriptorBufferOffsetsEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId commandBuffer; + VkPipelineBindPoint pipelineBindPoint; + format::HandleId layout; + uint32_t firstSet; + uint32_t setCount; + PointerDecoder pBufferIndices; + PointerDecoder pOffsets; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineBindPoint); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &layout); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &firstSet); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &setCount); + bytes_read += pBufferIndices.DecodeUInt32((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pOffsets.DecodeUInt64((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdSetDescriptorBufferOffsetsEXT(call_info, commandBuffer, pipelineBindPoint, layout, firstSet, setCount, &pBufferIndices, &pOffsets); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCmdBindDescriptorBufferEmbeddedSamplersEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId commandBuffer; + VkPipelineBindPoint pipelineBindPoint; + format::HandleId layout; + uint32_t set; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineBindPoint); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &layout); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &set); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdEndPerTileExecutionQCOM(call_info, commandBuffer, &pPerTileEndInfo); + consumer->Process_vkCmdBindDescriptorBufferEmbeddedSamplersEXT(call_info, commandBuffer, pipelineBindPoint, layout, set); } return bytes_read; @@ -13590,123 +13870,419 @@ size_t VulkanDecoder::Decode_vkSetLatencySleepModeNV(const ApiCallInfo& call_inf for (auto consumer : GetConsumers()) { - consumer->Process_vkSetLatencySleepModeNV(call_info, return_value, device, swapchain, &pSleepModeInfo); + consumer->Process_vkSetLatencySleepModeNV(call_info, return_value, device, swapchain, &pSleepModeInfo); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkLatencySleepNV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + format::HandleId swapchain; + StructPointerDecoder pSleepInfo; + VkResult return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &swapchain); + bytes_read += pSleepInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkLatencySleepNV(call_info, return_value, device, swapchain, &pSleepInfo); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkSetLatencyMarkerNV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + format::HandleId swapchain; + StructPointerDecoder pLatencyMarkerInfo; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &swapchain); + bytes_read += pLatencyMarkerInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkSetLatencyMarkerNV(call_info, device, swapchain, &pLatencyMarkerInfo); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetLatencyTimingsNV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + format::HandleId swapchain; + StructPointerDecoder pLatencyMarkerInfo; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &swapchain); + bytes_read += pLatencyMarkerInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetLatencyTimingsNV(call_info, device, swapchain, &pLatencyMarkerInfo); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkQueueNotifyOutOfBandNV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId queue; + StructPointerDecoder pQueueTypeInfo; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queue); + bytes_read += pQueueTypeInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkQueueNotifyOutOfBandNV(call_info, queue, &pQueueTypeInfo); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCreateDataGraphPipelinesARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + format::HandleId deferredOperation; + format::HandleId pipelineCache; + uint32_t createInfoCount; + StructPointerDecoder pCreateInfos; + StructPointerDecoder pAllocator; + HandlePointerDecoder pPipelines; + VkResult return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &deferredOperation); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &pipelineCache); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &createInfoCount); + bytes_read += pCreateInfos.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pPipelines.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCreateDataGraphPipelinesARM(call_info, return_value, device, deferredOperation, pipelineCache, createInfoCount, &pCreateInfos, &pAllocator, &pPipelines); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCreateDataGraphPipelineSessionARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + StructPointerDecoder pCreateInfo; + StructPointerDecoder pAllocator; + HandlePointerDecoder pSession; + VkResult return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pCreateInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pSession.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCreateDataGraphPipelineSessionARM(call_info, return_value, device, &pCreateInfo, &pAllocator, &pSession); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetDataGraphPipelineSessionBindPointRequirementsARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + StructPointerDecoder pInfo; + PointerDecoder pBindPointRequirementCount; + StructPointerDecoder pBindPointRequirements; + VkResult return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pBindPointRequirementCount.DecodeUInt32((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pBindPointRequirements.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetDataGraphPipelineSessionBindPointRequirementsARM(call_info, return_value, device, &pInfo, &pBindPointRequirementCount, &pBindPointRequirements); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetDataGraphPipelineSessionMemoryRequirementsARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + StructPointerDecoder pInfo; + StructPointerDecoder pMemoryRequirements; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pMemoryRequirements.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetDataGraphPipelineSessionMemoryRequirementsARM(call_info, device, &pInfo, &pMemoryRequirements); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkBindDataGraphPipelineSessionMemoryARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + uint32_t bindInfoCount; + StructPointerDecoder pBindInfos; + VkResult return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &bindInfoCount); + bytes_read += pBindInfos.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkBindDataGraphPipelineSessionMemoryARM(call_info, return_value, device, bindInfoCount, &pBindInfos); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkDestroyDataGraphPipelineSessionARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + format::HandleId session; + StructPointerDecoder pAllocator; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &session); + bytes_read += pAllocator.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkDestroyDataGraphPipelineSessionARM(call_info, device, session, &pAllocator); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCmdDispatchDataGraphARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId commandBuffer; + format::HandleId session; + StructPointerDecoder pInfo; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &session); + bytes_read += pInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdDispatchDataGraphARM(call_info, commandBuffer, session, &pInfo); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetDataGraphPipelineAvailablePropertiesARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + StructPointerDecoder pPipelineInfo; + PointerDecoder pPropertiesCount; + PointerDecoder pProperties; + VkResult return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pPipelineInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pPropertiesCount.DecodeUInt32((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pProperties.DecodeEnum((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetDataGraphPipelineAvailablePropertiesARM(call_info, return_value, device, &pPipelineInfo, &pPropertiesCount, &pProperties); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkGetDataGraphPipelinePropertiesARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId device; + StructPointerDecoder pPipelineInfo; + uint32_t propertiesCount; + StructPointerDecoder pProperties; + VkResult return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); + bytes_read += pPipelineInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &propertiesCount); + bytes_read += pProperties.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkGetDataGraphPipelinePropertiesARM(call_info, return_value, device, &pPipelineInfo, propertiesCount, &pProperties); } return bytes_read; } -size_t VulkanDecoder::Decode_vkLatencySleepNV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - format::HandleId swapchain; - StructPointerDecoder pSleepInfo; + format::HandleId physicalDevice; + uint32_t queueFamilyIndex; + PointerDecoder pQueueFamilyDataGraphPropertyCount; + StructPointerDecoder pQueueFamilyDataGraphProperties; VkResult return_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &swapchain); - bytes_read += pSleepInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &physicalDevice); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queueFamilyIndex); + bytes_read += pQueueFamilyDataGraphPropertyCount.DecodeUInt32((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pQueueFamilyDataGraphProperties.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); for (auto consumer : GetConsumers()) { - consumer->Process_vkLatencySleepNV(call_info, return_value, device, swapchain, &pSleepInfo); + consumer->Process_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM(call_info, return_value, physicalDevice, queueFamilyIndex, &pQueueFamilyDataGraphPropertyCount, &pQueueFamilyDataGraphProperties); } return bytes_read; } -size_t VulkanDecoder::Decode_vkSetLatencyMarkerNV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - format::HandleId swapchain; - StructPointerDecoder pLatencyMarkerInfo; + format::HandleId physicalDevice; + StructPointerDecoder pQueueFamilyDataGraphProcessingEngineInfo; + StructPointerDecoder pQueueFamilyDataGraphProcessingEngineProperties; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &swapchain); - bytes_read += pLatencyMarkerInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &physicalDevice); + bytes_read += pQueueFamilyDataGraphProcessingEngineInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pQueueFamilyDataGraphProcessingEngineProperties.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkSetLatencyMarkerNV(call_info, device, swapchain, &pLatencyMarkerInfo); + consumer->Process_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM(call_info, physicalDevice, &pQueueFamilyDataGraphProcessingEngineInfo, &pQueueFamilyDataGraphProcessingEngineProperties); } return bytes_read; } -size_t VulkanDecoder::Decode_vkGetLatencyTimingsNV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdSetAttachmentFeedbackLoopEnableEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId device; - format::HandleId swapchain; - StructPointerDecoder pLatencyMarkerInfo; + format::HandleId commandBuffer; + VkImageAspectFlags aspectMask; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &device); - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &swapchain); - bytes_read += pLatencyMarkerInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &aspectMask); for (auto consumer : GetConsumers()) { - consumer->Process_vkGetLatencyTimingsNV(call_info, device, swapchain, &pLatencyMarkerInfo); + consumer->Process_vkCmdSetAttachmentFeedbackLoopEnableEXT(call_info, commandBuffer, aspectMask); } return bytes_read; } -size_t VulkanDecoder::Decode_vkQueueNotifyOutOfBandNV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdBindTileMemoryQCOM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; - format::HandleId queue; - StructPointerDecoder pQueueTypeInfo; + format::HandleId commandBuffer; + StructPointerDecoder pTileMemoryBindInfo; - bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queue); - bytes_read += pQueueTypeInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += pTileMemoryBindInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkQueueNotifyOutOfBandNV(call_info, queue, &pQueueTypeInfo); + consumer->Process_vkCmdBindTileMemoryQCOM(call_info, commandBuffer, &pTileMemoryBindInfo); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdSetAttachmentFeedbackLoopEnableEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdDecompressMemoryEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - VkImageAspectFlags aspectMask; + StructPointerDecoder pDecompressMemoryInfoEXT; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += ValueDecoder::DecodeFlagsValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &aspectMask); + bytes_read += pDecompressMemoryInfoEXT.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdSetAttachmentFeedbackLoopEnableEXT(call_info, commandBuffer, aspectMask); + consumer->Process_vkCmdDecompressMemoryEXT(call_info, commandBuffer, &pDecompressMemoryInfoEXT); } return bytes_read; } -size_t VulkanDecoder::Decode_vkCmdBindTileMemoryQCOM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +size_t VulkanDecoder::Decode_vkCmdDecompressMemoryIndirectCountEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - StructPointerDecoder pTileMemoryBindInfo; + VkMemoryDecompressionMethodFlagsEXT decompressionMethod; + VkDeviceAddress indirectCommandsAddress; + VkDeviceAddress indirectCommandsCountAddress; + uint32_t maxDecompressionCount; + uint32_t stride; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); - bytes_read += pTileMemoryBindInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFlags64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &decompressionMethod); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &indirectCommandsAddress); + bytes_read += ValueDecoder::DecodeUInt64Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &indirectCommandsCountAddress); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &maxDecompressionCount); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &stride); for (auto consumer : GetConsumers()) { - consumer->Process_vkCmdBindTileMemoryQCOM(call_info, commandBuffer, &pTileMemoryBindInfo); + consumer->Process_vkCmdDecompressMemoryIndirectCountEXT(call_info, commandBuffer, decompressionMethod, indirectCommandsAddress, indirectCommandsCountAddress, maxDecompressionCount, stride); } return bytes_read; @@ -14010,12 +14586,38 @@ size_t VulkanDecoder::Decode_vkGetMemoryMetalHandlePropertiesEXT(const ApiCallIn return bytes_read; } +size_t VulkanDecoder::Decode_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId physicalDevice; + uint32_t queueFamilyIndex; + PointerDecoder pCounterCount; + StructPointerDecoder pCounters; + StructPointerDecoder pCounterDescriptions; + VkResult return_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &physicalDevice); + bytes_read += ValueDecoder::DecodeUInt32Value((parameter_buffer + bytes_read), (buffer_size - bytes_read), &queueFamilyIndex); + bytes_read += pCounterCount.DecodeUInt32((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pCounters.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += pCounterDescriptions.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &return_value); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(call_info, return_value, physicalDevice, queueFamilyIndex, &pCounterCount, &pCounters, &pCounterDescriptions); + } + + return bytes_read; +} + size_t VulkanDecoder::Decode_vkCmdEndRendering2EXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; format::HandleId commandBuffer; - StructPointerDecoder pRenderingEndInfo; + StructPointerDecoder pRenderingEndInfo; bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); bytes_read += pRenderingEndInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); @@ -14028,6 +14630,42 @@ size_t VulkanDecoder::Decode_vkCmdEndRendering2EXT(const ApiCallInfo& call_info, return bytes_read; } +size_t VulkanDecoder::Decode_vkCmdBeginCustomResolveEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId commandBuffer; + StructPointerDecoder pBeginCustomResolveInfo; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += pBeginCustomResolveInfo.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdBeginCustomResolveEXT(call_info, commandBuffer, &pBeginCustomResolveInfo); + } + + return bytes_read; +} + +size_t VulkanDecoder::Decode_vkCmdSetComputeOccupancyPriorityNV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) +{ + size_t bytes_read = 0; + + format::HandleId commandBuffer; + StructPointerDecoder pParameters; + + bytes_read += ValueDecoder::DecodeHandleIdValue((parameter_buffer + bytes_read), (buffer_size - bytes_read), &commandBuffer); + bytes_read += pParameters.Decode((parameter_buffer + bytes_read), (buffer_size - bytes_read)); + + for (auto consumer : GetConsumers()) + { + consumer->Process_vkCmdSetComputeOccupancyPriorityNV(call_info, commandBuffer, &pParameters); + } + + return bytes_read; +} + size_t VulkanDecoder::Decode_vkCreateAccelerationStructureKHR(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size) { size_t bytes_read = 0; @@ -14657,21 +15295,6 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkDestroySemaphore: Decode_vkDestroySemaphore(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCreateEvent: - Decode_vkCreateEvent(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkDestroyEvent: - Decode_vkDestroyEvent(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkGetEventStatus: - Decode_vkGetEventStatus(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkSetEvent: - Decode_vkSetEvent(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkResetEvent: - Decode_vkResetEvent(call_info, parameter_buffer, buffer_size); - break; case format::ApiCallId::ApiCall_vkCreateQueryPool: Decode_vkCreateQueryPool(call_info, parameter_buffer, buffer_size); break; @@ -14687,12 +15310,6 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkDestroyBuffer: Decode_vkDestroyBuffer(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCreateBufferView: - Decode_vkCreateBufferView(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkDestroyBufferView: - Decode_vkDestroyBufferView(call_info, parameter_buffer, buffer_size); - break; case format::ApiCallId::ApiCall_vkCreateImage: Decode_vkCreateImage(call_info, parameter_buffer, buffer_size); break; @@ -14708,6 +15325,90 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkDestroyImageView: Decode_vkDestroyImageView(call_info, parameter_buffer, buffer_size); break; + case format::ApiCallId::ApiCall_vkCreateCommandPool: + Decode_vkCreateCommandPool(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkDestroyCommandPool: + Decode_vkDestroyCommandPool(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkResetCommandPool: + Decode_vkResetCommandPool(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkAllocateCommandBuffers: + Decode_vkAllocateCommandBuffers(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkFreeCommandBuffers: + Decode_vkFreeCommandBuffers(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkBeginCommandBuffer: + Decode_vkBeginCommandBuffer(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkEndCommandBuffer: + Decode_vkEndCommandBuffer(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkResetCommandBuffer: + Decode_vkResetCommandBuffer(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdCopyBuffer: + Decode_vkCmdCopyBuffer(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdCopyImage: + Decode_vkCmdCopyImage(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdCopyBufferToImage: + Decode_vkCmdCopyBufferToImage(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdCopyImageToBuffer: + Decode_vkCmdCopyImageToBuffer(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdUpdateBuffer: + Decode_vkCmdUpdateBuffer(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdFillBuffer: + Decode_vkCmdFillBuffer(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdPipelineBarrier: + Decode_vkCmdPipelineBarrier(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdBeginQuery: + Decode_vkCmdBeginQuery(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdEndQuery: + Decode_vkCmdEndQuery(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdResetQueryPool: + Decode_vkCmdResetQueryPool(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdWriteTimestamp: + Decode_vkCmdWriteTimestamp(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdCopyQueryPoolResults: + Decode_vkCmdCopyQueryPoolResults(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdExecuteCommands: + Decode_vkCmdExecuteCommands(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCreateEvent: + Decode_vkCreateEvent(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkDestroyEvent: + Decode_vkDestroyEvent(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkGetEventStatus: + Decode_vkGetEventStatus(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkSetEvent: + Decode_vkSetEvent(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkResetEvent: + Decode_vkResetEvent(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCreateBufferView: + Decode_vkCreateBufferView(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkDestroyBufferView: + Decode_vkDestroyBufferView(call_info, parameter_buffer, buffer_size); + break; case format::ApiCallId::ApiCall_vkCreateShaderModule: Decode_vkCreateShaderModule(call_info, parameter_buffer, buffer_size); break; @@ -14726,9 +15427,6 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkMergePipelineCaches: Decode_vkMergePipelineCaches(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCreateGraphicsPipelines: - Decode_vkCreateGraphicsPipelines(call_info, parameter_buffer, buffer_size); - break; case format::ApiCallId::ApiCall_vkCreateComputePipelines: Decode_vkCreateComputePipelines(call_info, parameter_buffer, buffer_size); break; @@ -14771,47 +15469,50 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkUpdateDescriptorSets: Decode_vkUpdateDescriptorSets(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCreateFramebuffer: - Decode_vkCreateFramebuffer(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCmdBindPipeline: + Decode_vkCmdBindPipeline(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkDestroyFramebuffer: - Decode_vkDestroyFramebuffer(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCmdBindDescriptorSets: + Decode_vkCmdBindDescriptorSets(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCreateRenderPass: - Decode_vkCreateRenderPass(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCmdClearColorImage: + Decode_vkCmdClearColorImage(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkDestroyRenderPass: - Decode_vkDestroyRenderPass(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCmdDispatch: + Decode_vkCmdDispatch(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkGetRenderAreaGranularity: - Decode_vkGetRenderAreaGranularity(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCmdDispatchIndirect: + Decode_vkCmdDispatchIndirect(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCreateCommandPool: - Decode_vkCreateCommandPool(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCmdSetEvent: + Decode_vkCmdSetEvent(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkDestroyCommandPool: - Decode_vkDestroyCommandPool(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCmdResetEvent: + Decode_vkCmdResetEvent(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkResetCommandPool: - Decode_vkResetCommandPool(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCmdWaitEvents: + Decode_vkCmdWaitEvents(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkAllocateCommandBuffers: - Decode_vkAllocateCommandBuffers(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCmdPushConstants: + Decode_vkCmdPushConstants(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCreateGraphicsPipelines: + Decode_vkCreateGraphicsPipelines(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkFreeCommandBuffers: - Decode_vkFreeCommandBuffers(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCreateFramebuffer: + Decode_vkCreateFramebuffer(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkBeginCommandBuffer: - Decode_vkBeginCommandBuffer(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkDestroyFramebuffer: + Decode_vkDestroyFramebuffer(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkEndCommandBuffer: - Decode_vkEndCommandBuffer(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCreateRenderPass: + Decode_vkCreateRenderPass(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkResetCommandBuffer: - Decode_vkResetCommandBuffer(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkDestroyRenderPass: + Decode_vkDestroyRenderPass(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdBindPipeline: - Decode_vkCmdBindPipeline(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkGetRenderAreaGranularity: + Decode_vkGetRenderAreaGranularity(call_info, parameter_buffer, buffer_size); break; case format::ApiCallId::ApiCall_vkCmdSetViewport: Decode_vkCmdSetViewport(call_info, parameter_buffer, buffer_size); @@ -14840,9 +15541,6 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkCmdSetStencilReference: Decode_vkCmdSetStencilReference(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdBindDescriptorSets: - Decode_vkCmdBindDescriptorSets(call_info, parameter_buffer, buffer_size); - break; case format::ApiCallId::ApiCall_vkCmdBindIndexBuffer: Decode_vkCmdBindIndexBuffer(call_info, parameter_buffer, buffer_size); break; @@ -14861,36 +15559,9 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkCmdDrawIndexedIndirect: Decode_vkCmdDrawIndexedIndirect(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdDispatch: - Decode_vkCmdDispatch(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdDispatchIndirect: - Decode_vkCmdDispatchIndirect(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdCopyBuffer: - Decode_vkCmdCopyBuffer(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdCopyImage: - Decode_vkCmdCopyImage(call_info, parameter_buffer, buffer_size); - break; case format::ApiCallId::ApiCall_vkCmdBlitImage: Decode_vkCmdBlitImage(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdCopyBufferToImage: - Decode_vkCmdCopyBufferToImage(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdCopyImageToBuffer: - Decode_vkCmdCopyImageToBuffer(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdUpdateBuffer: - Decode_vkCmdUpdateBuffer(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdFillBuffer: - Decode_vkCmdFillBuffer(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdClearColorImage: - Decode_vkCmdClearColorImage(call_info, parameter_buffer, buffer_size); - break; case format::ApiCallId::ApiCall_vkCmdClearDepthStencilImage: Decode_vkCmdClearDepthStencilImage(call_info, parameter_buffer, buffer_size); break; @@ -14900,36 +15571,6 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkCmdResolveImage: Decode_vkCmdResolveImage(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdSetEvent: - Decode_vkCmdSetEvent(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdResetEvent: - Decode_vkCmdResetEvent(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdWaitEvents: - Decode_vkCmdWaitEvents(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdPipelineBarrier: - Decode_vkCmdPipelineBarrier(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdBeginQuery: - Decode_vkCmdBeginQuery(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdEndQuery: - Decode_vkCmdEndQuery(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdResetQueryPool: - Decode_vkCmdResetQueryPool(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdWriteTimestamp: - Decode_vkCmdWriteTimestamp(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdCopyQueryPoolResults: - Decode_vkCmdCopyQueryPoolResults(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdPushConstants: - Decode_vkCmdPushConstants(call_info, parameter_buffer, buffer_size); - break; case format::ApiCallId::ApiCall_vkCmdBeginRenderPass: Decode_vkCmdBeginRenderPass(call_info, parameter_buffer, buffer_size); break; @@ -14939,9 +15580,6 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkCmdEndRenderPass: Decode_vkCmdEndRenderPass(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdExecuteCommands: - Decode_vkCmdExecuteCommands(call_info, parameter_buffer, buffer_size); - break; case format::ApiCallId::ApiCall_vkBindBufferMemory2: Decode_vkBindBufferMemory2(call_info, parameter_buffer, buffer_size); break; @@ -14954,9 +15592,6 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkCmdSetDeviceMask: Decode_vkCmdSetDeviceMask(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdDispatchBase: - Decode_vkCmdDispatchBase(call_info, parameter_buffer, buffer_size); - break; case format::ApiCallId::ApiCall_vkEnumeratePhysicalDeviceGroups: Decode_vkEnumeratePhysicalDeviceGroups(call_info, parameter_buffer, buffer_size); break; @@ -14996,18 +15631,6 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkGetDeviceQueue2: Decode_vkGetDeviceQueue2(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCreateSamplerYcbcrConversion: - Decode_vkCreateSamplerYcbcrConversion(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkDestroySamplerYcbcrConversion: - Decode_vkDestroySamplerYcbcrConversion(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCreateDescriptorUpdateTemplate: - Decode_vkCreateDescriptorUpdateTemplate(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkDestroyDescriptorUpdateTemplate: - Decode_vkDestroyDescriptorUpdateTemplate(call_info, parameter_buffer, buffer_size); - break; case format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalBufferProperties: Decode_vkGetPhysicalDeviceExternalBufferProperties(call_info, parameter_buffer, buffer_size); break; @@ -15017,26 +15640,23 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkGetPhysicalDeviceExternalSemaphoreProperties: Decode_vkGetPhysicalDeviceExternalSemaphoreProperties(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkGetDescriptorSetLayoutSupport: - Decode_vkGetDescriptorSetLayoutSupport(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdDrawIndirectCount: - Decode_vkCmdDrawIndirectCount(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCmdDispatchBase: + Decode_vkCmdDispatchBase(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdDrawIndexedIndirectCount: - Decode_vkCmdDrawIndexedIndirectCount(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCreateDescriptorUpdateTemplate: + Decode_vkCreateDescriptorUpdateTemplate(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCreateRenderPass2: - Decode_vkCreateRenderPass2(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkDestroyDescriptorUpdateTemplate: + Decode_vkDestroyDescriptorUpdateTemplate(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdBeginRenderPass2: - Decode_vkCmdBeginRenderPass2(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkGetDescriptorSetLayoutSupport: + Decode_vkGetDescriptorSetLayoutSupport(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdNextSubpass2: - Decode_vkCmdNextSubpass2(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCreateSamplerYcbcrConversion: + Decode_vkCreateSamplerYcbcrConversion(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdEndRenderPass2: - Decode_vkCmdEndRenderPass2(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkDestroySamplerYcbcrConversion: + Decode_vkDestroySamplerYcbcrConversion(call_info, parameter_buffer, buffer_size); break; case format::ApiCallId::ApiCall_vkResetQueryPool: Decode_vkResetQueryPool(call_info, parameter_buffer, buffer_size); @@ -15059,6 +15679,24 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkGetDeviceMemoryOpaqueCaptureAddress: Decode_vkGetDeviceMemoryOpaqueCaptureAddress(call_info, parameter_buffer, buffer_size); break; + case format::ApiCallId::ApiCall_vkCmdDrawIndirectCount: + Decode_vkCmdDrawIndirectCount(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdDrawIndexedIndirectCount: + Decode_vkCmdDrawIndexedIndirectCount(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCreateRenderPass2: + Decode_vkCreateRenderPass2(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdBeginRenderPass2: + Decode_vkCmdBeginRenderPass2(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdNextSubpass2: + Decode_vkCmdNextSubpass2(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdEndRenderPass2: + Decode_vkCmdEndRenderPass2(call_info, parameter_buffer, buffer_size); + break; case format::ApiCallId::ApiCall_vkGetPhysicalDeviceToolProperties: Decode_vkGetPhysicalDeviceToolProperties(call_info, parameter_buffer, buffer_size); break; @@ -15074,15 +15712,6 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkGetPrivateData: Decode_vkGetPrivateData(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdSetEvent2: - Decode_vkCmdSetEvent2(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdResetEvent2: - Decode_vkCmdResetEvent2(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdWaitEvents2: - Decode_vkCmdWaitEvents2(call_info, parameter_buffer, buffer_size); - break; case format::ApiCallId::ApiCall_vkCmdPipelineBarrier2: Decode_vkCmdPipelineBarrier2(call_info, parameter_buffer, buffer_size); break; @@ -15104,6 +15733,24 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkCmdCopyImageToBuffer2: Decode_vkCmdCopyImageToBuffer2(call_info, parameter_buffer, buffer_size); break; + case format::ApiCallId::ApiCall_vkGetDeviceBufferMemoryRequirements: + Decode_vkGetDeviceBufferMemoryRequirements(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkGetDeviceImageMemoryRequirements: + Decode_vkGetDeviceImageMemoryRequirements(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkGetDeviceImageSparseMemoryRequirements: + Decode_vkGetDeviceImageSparseMemoryRequirements(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdSetEvent2: + Decode_vkCmdSetEvent2(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdResetEvent2: + Decode_vkCmdResetEvent2(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdWaitEvents2: + Decode_vkCmdWaitEvents2(call_info, parameter_buffer, buffer_size); + break; case format::ApiCallId::ApiCall_vkCmdBlitImage2: Decode_vkCmdBlitImage2(call_info, parameter_buffer, buffer_size); break; @@ -15161,44 +15808,32 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkCmdSetPrimitiveRestartEnable: Decode_vkCmdSetPrimitiveRestartEnable(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkGetDeviceBufferMemoryRequirements: - Decode_vkGetDeviceBufferMemoryRequirements(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkGetDeviceImageMemoryRequirements: - Decode_vkGetDeviceImageMemoryRequirements(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkGetDeviceImageSparseMemoryRequirements: - Decode_vkGetDeviceImageSparseMemoryRequirements(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkCmdSetLineStipple: - Decode_vkCmdSetLineStipple(call_info, parameter_buffer, buffer_size); - break; case format::ApiCallId::ApiCall_vkMapMemory2: Decode_vkMapMemory2(call_info, parameter_buffer, buffer_size); break; case format::ApiCallId::ApiCall_vkUnmapMemory2: Decode_vkUnmapMemory2(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdBindIndexBuffer2: - Decode_vkCmdBindIndexBuffer2(call_info, parameter_buffer, buffer_size); - break; - case format::ApiCallId::ApiCall_vkGetRenderingAreaGranularity: - Decode_vkGetRenderingAreaGranularity(call_info, parameter_buffer, buffer_size); - break; case format::ApiCallId::ApiCall_vkGetDeviceImageSubresourceLayout: Decode_vkGetDeviceImageSubresourceLayout(call_info, parameter_buffer, buffer_size); break; case format::ApiCallId::ApiCall_vkGetImageSubresourceLayout2: Decode_vkGetImageSubresourceLayout2(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdPushDescriptorSet: - Decode_vkCmdPushDescriptorSet(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCopyMemoryToImage: + Decode_vkCopyMemoryToImage(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdSetRenderingAttachmentLocations: - Decode_vkCmdSetRenderingAttachmentLocations(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCopyImageToMemory: + Decode_vkCopyImageToMemory(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCmdSetRenderingInputAttachmentIndices: - Decode_vkCmdSetRenderingInputAttachmentIndices(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCopyImageToImage: + Decode_vkCopyImageToImage(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkTransitionImageLayout: + Decode_vkTransitionImageLayout(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdPushDescriptorSet: + Decode_vkCmdPushDescriptorSet(call_info, parameter_buffer, buffer_size); break; case format::ApiCallId::ApiCall_vkCmdBindDescriptorSets2: Decode_vkCmdBindDescriptorSets2(call_info, parameter_buffer, buffer_size); @@ -15209,17 +15844,20 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkCmdPushDescriptorSet2: Decode_vkCmdPushDescriptorSet2(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCopyMemoryToImage: - Decode_vkCopyMemoryToImage(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCmdSetLineStipple: + Decode_vkCmdSetLineStipple(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCopyImageToMemory: - Decode_vkCopyImageToMemory(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCmdBindIndexBuffer2: + Decode_vkCmdBindIndexBuffer2(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkCopyImageToImage: - Decode_vkCopyImageToImage(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkGetRenderingAreaGranularity: + Decode_vkGetRenderingAreaGranularity(call_info, parameter_buffer, buffer_size); break; - case format::ApiCallId::ApiCall_vkTransitionImageLayout: - Decode_vkTransitionImageLayout(call_info, parameter_buffer, buffer_size); + case format::ApiCallId::ApiCall_vkCmdSetRenderingAttachmentLocations: + Decode_vkCmdSetRenderingAttachmentLocations(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdSetRenderingInputAttachmentIndices: + Decode_vkCmdSetRenderingInputAttachmentIndices(call_info, parameter_buffer, buffer_size); break; case format::ApiCallId::ApiCall_vkDestroySurfaceKHR: Decode_vkDestroySurfaceKHR(call_info, parameter_buffer, buffer_size); @@ -15701,6 +16339,15 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT: Decode_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT(call_info, parameter_buffer, buffer_size); break; + case format::ApiCallId::ApiCall_vkCmdCopyMemoryIndirectKHR: + Decode_vkCmdCopyMemoryIndirectKHR(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdCopyMemoryToImageIndirectKHR: + Decode_vkCmdCopyMemoryToImageIndirectKHR(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdEndRendering2KHR: + Decode_vkCmdEndRendering2KHR(call_info, parameter_buffer, buffer_size); + break; case format::ApiCallId::ApiCall_vkFrameBoundaryANDROID: Decode_vkFrameBoundaryANDROID(call_info, parameter_buffer, buffer_size); break; @@ -15980,6 +16627,18 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkGetQueueCheckpointData2NV: Decode_vkGetQueueCheckpointData2NV(call_info, parameter_buffer, buffer_size); break; + case format::ApiCallId::ApiCall_vkSetSwapchainPresentTimingQueueSizeEXT: + Decode_vkSetSwapchainPresentTimingQueueSizeEXT(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkGetSwapchainTimingPropertiesEXT: + Decode_vkGetSwapchainTimingPropertiesEXT(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkGetSwapchainTimeDomainPropertiesEXT: + Decode_vkGetSwapchainTimeDomainPropertiesEXT(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkGetPastPresentationTimingEXT: + Decode_vkGetPastPresentationTimingEXT(call_info, parameter_buffer, buffer_size); + break; case format::ApiCallId::ApiCall_vkInitializePerformanceApiINTEL: Decode_vkInitializePerformanceApiINTEL(call_info, parameter_buffer, buffer_size); break; @@ -16151,6 +16810,24 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkCmdEndPerTileExecutionQCOM: Decode_vkCmdEndPerTileExecutionQCOM(call_info, parameter_buffer, buffer_size); break; + case format::ApiCallId::ApiCall_vkGetDescriptorSetLayoutSizeEXT: + Decode_vkGetDescriptorSetLayoutSizeEXT(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkGetDescriptorSetLayoutBindingOffsetEXT: + Decode_vkGetDescriptorSetLayoutBindingOffsetEXT(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkGetDescriptorEXT: + Decode_vkGetDescriptorEXT(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdBindDescriptorBuffersEXT: + Decode_vkCmdBindDescriptorBuffersEXT(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdSetDescriptorBufferOffsetsEXT: + Decode_vkCmdSetDescriptorBufferOffsetsEXT(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdBindDescriptorBufferEmbeddedSamplersEXT: + Decode_vkCmdBindDescriptorBufferEmbeddedSamplersEXT(call_info, parameter_buffer, buffer_size); + break; case format::ApiCallId::ApiCall_vkCmdSetFragmentShadingRateEnumNV: Decode_vkCmdSetFragmentShadingRateEnumNV(call_info, parameter_buffer, buffer_size); break; @@ -16448,12 +17125,51 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkQueueNotifyOutOfBandNV: Decode_vkQueueNotifyOutOfBandNV(call_info, parameter_buffer, buffer_size); break; + case format::ApiCallId::ApiCall_vkCreateDataGraphPipelinesARM: + Decode_vkCreateDataGraphPipelinesARM(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCreateDataGraphPipelineSessionARM: + Decode_vkCreateDataGraphPipelineSessionARM(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkGetDataGraphPipelineSessionBindPointRequirementsARM: + Decode_vkGetDataGraphPipelineSessionBindPointRequirementsARM(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkGetDataGraphPipelineSessionMemoryRequirementsARM: + Decode_vkGetDataGraphPipelineSessionMemoryRequirementsARM(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkBindDataGraphPipelineSessionMemoryARM: + Decode_vkBindDataGraphPipelineSessionMemoryARM(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkDestroyDataGraphPipelineSessionARM: + Decode_vkDestroyDataGraphPipelineSessionARM(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdDispatchDataGraphARM: + Decode_vkCmdDispatchDataGraphARM(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkGetDataGraphPipelineAvailablePropertiesARM: + Decode_vkGetDataGraphPipelineAvailablePropertiesARM(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkGetDataGraphPipelinePropertiesARM: + Decode_vkGetDataGraphPipelinePropertiesARM(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM: + Decode_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM: + Decode_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM(call_info, parameter_buffer, buffer_size); + break; case format::ApiCallId::ApiCall_vkCmdSetAttachmentFeedbackLoopEnableEXT: Decode_vkCmdSetAttachmentFeedbackLoopEnableEXT(call_info, parameter_buffer, buffer_size); break; case format::ApiCallId::ApiCall_vkCmdBindTileMemoryQCOM: Decode_vkCmdBindTileMemoryQCOM(call_info, parameter_buffer, buffer_size); break; + case format::ApiCallId::ApiCall_vkCmdDecompressMemoryEXT: + Decode_vkCmdDecompressMemoryEXT(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdDecompressMemoryIndirectCountEXT: + Decode_vkCmdDecompressMemoryIndirectCountEXT(call_info, parameter_buffer, buffer_size); + break; case format::ApiCallId::ApiCall_vkGetPartitionedAccelerationStructuresBuildSizesNV: Decode_vkGetPartitionedAccelerationStructuresBuildSizesNV(call_info, parameter_buffer, buffer_size); break; @@ -16496,9 +17212,18 @@ void VulkanDecoder::DecodeFunctionCall(format::ApiCallId call_id, case format::ApiCallId::ApiCall_vkGetMemoryMetalHandlePropertiesEXT: Decode_vkGetMemoryMetalHandlePropertiesEXT(call_info, parameter_buffer, buffer_size); break; + case format::ApiCallId::ApiCall_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM: + Decode_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(call_info, parameter_buffer, buffer_size); + break; case format::ApiCallId::ApiCall_vkCmdEndRendering2EXT: Decode_vkCmdEndRendering2EXT(call_info, parameter_buffer, buffer_size); break; + case format::ApiCallId::ApiCall_vkCmdBeginCustomResolveEXT: + Decode_vkCmdBeginCustomResolveEXT(call_info, parameter_buffer, buffer_size); + break; + case format::ApiCallId::ApiCall_vkCmdSetComputeOccupancyPriorityNV: + Decode_vkCmdSetComputeOccupancyPriorityNV(call_info, parameter_buffer, buffer_size); + break; case format::ApiCallId::ApiCall_vkCreateAccelerationStructureKHR: Decode_vkCreateAccelerationStructureKHR(call_info, parameter_buffer, buffer_size); break; diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_decoder.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_decoder.h index 4d29a3828..69f95919c 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_decoder.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_decoder.h @@ -129,16 +129,6 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkDestroySemaphore(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCreateEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkDestroyEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkGetEventStatus(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkSetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkResetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCreateQueryPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkDestroyQueryPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -149,10 +139,6 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkDestroyBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCreateBufferView(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkDestroyBufferView(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCreateImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkDestroyImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -163,6 +149,62 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkDestroyImageView(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCreateCommandPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkDestroyCommandPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkResetCommandPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkAllocateCommandBuffers(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkFreeCommandBuffers(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkBeginCommandBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkEndCommandBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkResetCommandBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdCopyBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdCopyImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdCopyBufferToImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdCopyImageToBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdUpdateBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdFillBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdPipelineBarrier(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdBeginQuery(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdEndQuery(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdResetQueryPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdWriteTimestamp(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdCopyQueryPoolResults(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdExecuteCommands(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCreateEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkDestroyEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetEventStatus(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkSetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkResetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCreateBufferView(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkDestroyBufferView(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCreateShaderModule(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkDestroyShaderModule(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -175,8 +217,6 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkMergePipelineCaches(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCreateGraphicsPipelines(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCreateComputePipelines(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkDestroyPipeline(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -205,33 +245,35 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkUpdateDescriptorSets(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCreateFramebuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdBindPipeline(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkDestroyFramebuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdBindDescriptorSets(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCreateRenderPass(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdClearColorImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkDestroyRenderPass(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdDispatch(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkGetRenderAreaGranularity(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdDispatchIndirect(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCreateCommandPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdSetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkDestroyCommandPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdResetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkResetCommandPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdWaitEvents(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkAllocateCommandBuffers(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdPushConstants(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkFreeCommandBuffers(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCreateGraphicsPipelines(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkBeginCommandBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCreateFramebuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkEndCommandBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkDestroyFramebuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkResetCommandBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCreateRenderPass(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdBindPipeline(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkDestroyRenderPass(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetRenderAreaGranularity(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkCmdSetViewport(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -251,8 +293,6 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkCmdSetStencilReference(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdBindDescriptorSets(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdBindIndexBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkCmdBindVertexBuffers(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -265,60 +305,20 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkCmdDrawIndexedIndirect(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdDispatch(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdDispatchIndirect(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdCopyBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdCopyImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdBlitImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdCopyBufferToImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdCopyImageToBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdUpdateBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdFillBuffer(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdClearColorImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdClearDepthStencilImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkCmdClearAttachments(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkCmdResolveImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdSetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdResetEvent(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdWaitEvents(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdPipelineBarrier(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdBeginQuery(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdEndQuery(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdResetQueryPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdWriteTimestamp(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdCopyQueryPoolResults(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdPushConstants(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdBeginRenderPass(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkCmdNextSubpass(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkCmdEndRenderPass(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdExecuteCommands(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkBindBufferMemory2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkBindImageMemory2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -327,8 +327,6 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkCmdSetDeviceMask(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdDispatchBase(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkEnumeratePhysicalDeviceGroups(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkGetImageMemoryRequirements2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -355,33 +353,23 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkGetDeviceQueue2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCreateSamplerYcbcrConversion(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkDestroySamplerYcbcrConversion(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCreateDescriptorUpdateTemplate(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkDestroyDescriptorUpdateTemplate(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkGetPhysicalDeviceExternalBufferProperties(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkGetPhysicalDeviceExternalFenceProperties(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkGetPhysicalDeviceExternalSemaphoreProperties(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkGetDescriptorSetLayoutSupport(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdDrawIndirectCount(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdDispatchBase(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdDrawIndexedIndirectCount(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCreateDescriptorUpdateTemplate(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCreateRenderPass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkDestroyDescriptorUpdateTemplate(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdBeginRenderPass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkGetDescriptorSetLayoutSupport(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdNextSubpass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCreateSamplerYcbcrConversion(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdEndRenderPass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkDestroySamplerYcbcrConversion(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkResetQueryPool(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -397,6 +385,18 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkGetDeviceMemoryOpaqueCaptureAddress(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdDrawIndirectCount(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdDrawIndexedIndirectCount(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCreateRenderPass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdBeginRenderPass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdNextSubpass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdEndRenderPass2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkGetPhysicalDeviceToolProperties(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkCreatePrivateDataSlot(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -407,12 +407,6 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkGetPrivateData(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdSetEvent2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdResetEvent2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdWaitEvents2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdPipelineBarrier2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkCmdWriteTimestamp2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -427,6 +421,18 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkCmdCopyImageToBuffer2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkGetDeviceBufferMemoryRequirements(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetDeviceImageMemoryRequirements(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetDeviceImageSparseMemoryRequirements(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdSetEvent2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdResetEvent2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdWaitEvents2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdBlitImage2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkCmdResolveImage2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -465,31 +471,23 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkCmdSetPrimitiveRestartEnable(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkGetDeviceBufferMemoryRequirements(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkGetDeviceImageMemoryRequirements(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkGetDeviceImageSparseMemoryRequirements(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkCmdSetLineStipple(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkMapMemory2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkUnmapMemory2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdBindIndexBuffer2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - - size_t Decode_vkGetRenderingAreaGranularity(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkGetDeviceImageSubresourceLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkGetImageSubresourceLayout2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdPushDescriptorSet(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCopyMemoryToImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdSetRenderingAttachmentLocations(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCopyImageToMemory(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCmdSetRenderingInputAttachmentIndices(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCopyImageToImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkTransitionImageLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdPushDescriptorSet(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkCmdBindDescriptorSets2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -497,13 +495,15 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkCmdPushDescriptorSet2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCopyMemoryToImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdSetLineStipple(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCopyImageToMemory(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdBindIndexBuffer2(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkCopyImageToImage(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkGetRenderingAreaGranularity(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); - size_t Decode_vkTransitionImageLayout(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdSetRenderingAttachmentLocations(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdSetRenderingInputAttachmentIndices(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkDestroySurfaceKHR(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -825,6 +825,12 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdCopyMemoryIndirectKHR(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdCopyMemoryToImageIndirectKHR(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdEndRendering2KHR(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkFrameBoundaryANDROID(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkCreateDebugReportCallbackEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -1011,6 +1017,14 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkGetQueueCheckpointData2NV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkSetSwapchainPresentTimingQueueSizeEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetSwapchainTimingPropertiesEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetSwapchainTimeDomainPropertiesEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetPastPresentationTimingEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkInitializePerformanceApiINTEL(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkUninitializePerformanceApiINTEL(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -1125,6 +1139,18 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkCmdEndPerTileExecutionQCOM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkGetDescriptorSetLayoutSizeEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetDescriptorSetLayoutBindingOffsetEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetDescriptorEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdBindDescriptorBuffersEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdSetDescriptorBufferOffsetsEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdBindDescriptorBufferEmbeddedSamplersEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdSetFragmentShadingRateEnumNV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkGetDeviceFaultInfoEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -1323,10 +1349,36 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkQueueNotifyOutOfBandNV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCreateDataGraphPipelinesARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCreateDataGraphPipelineSessionARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetDataGraphPipelineSessionBindPointRequirementsARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetDataGraphPipelineSessionMemoryRequirementsARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkBindDataGraphPipelineSessionMemoryARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkDestroyDataGraphPipelineSessionARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdDispatchDataGraphARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetDataGraphPipelineAvailablePropertiesARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetDataGraphPipelinePropertiesARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdSetAttachmentFeedbackLoopEnableEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkCmdBindTileMemoryQCOM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdDecompressMemoryEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdDecompressMemoryIndirectCountEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkGetPartitionedAccelerationStructuresBuildSizesNV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkCmdBuildPartitionedAccelerationStructuresNV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); @@ -1355,8 +1407,14 @@ class VulkanDecoder : public VulkanDecoderBase size_t Decode_vkGetMemoryMetalHandlePropertiesEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdEndRendering2EXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCmdBeginCustomResolveEXT(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + + size_t Decode_vkCmdSetComputeOccupancyPriorityNV(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); + size_t Decode_vkCreateAccelerationStructureKHR(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); size_t Decode_vkDestroyAccelerationStructureKHR(const ApiCallInfo& call_info, const uint8_t* parameter_buffer, size_t buffer_size); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_dispatch_table.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_dispatch_table.h index d6b2b1576..e1d8cc340 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_dispatch_table.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_dispatch_table.h @@ -45,6 +45,8 @@ #include "vk_video/vulkan_video_codec_h265std_encode.h" #include "vk_video/vulkan_video_codecs_common.h" +#include + #ifdef WIN32 #ifdef CreateEvent #undef CreateEvent @@ -175,7 +177,10 @@ inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateScreenSurfaceQNX(VkInstance, const inline VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceScreenPresentationSupportQNX(VkPhysicalDevice, uint32_t, struct _screen_window*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetPhysicalDeviceScreenPresentationSupportQNX was called, resulting in no-op behavior."); return VK_TRUE; } inline VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceOpticalFlowImageFormatsNV(VkPhysicalDevice, const VkOpticalFlowImageFormatInfoNV*, uint32_t*, VkOpticalFlowImageFormatPropertiesNV*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetPhysicalDeviceOpticalFlowImageFormatsNV was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeVectorPropertiesNV(VkPhysicalDevice, uint32_t*, VkCooperativeVectorPropertiesNV*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetPhysicalDeviceCooperativeVectorPropertiesNV was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM(VkPhysicalDevice, uint32_t, uint32_t*, VkQueueFamilyDataGraphPropertiesARM*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM(VkPhysicalDevice, const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM*, VkQueueFamilyDataGraphProcessingEnginePropertiesARM*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV(VkPhysicalDevice, uint32_t*, VkCooperativeMatrixFlexibleDimensionsPropertiesNV*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(VkPhysicalDevice, uint32_t, uint32_t*, VkPerformanceCounterARM*, VkPerformanceCounterDescriptionARM*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice, const char*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDeviceProcAddr was called, resulting in no-op behavior."); return nullptr; } inline VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(VkDevice, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyDevice was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(VkDevice, uint32_t, uint32_t, VkQueue*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDeviceQueue was called, resulting in no-op behavior."); } @@ -202,30 +207,50 @@ inline VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(VkDevice, VkFence) { GFXR inline VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(VkDevice, uint32_t, const VkFence*, VkBool32, uint64_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkWaitForFences was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(VkDevice, const VkSemaphoreCreateInfo*, const VkAllocationCallbacks*, VkSemaphore*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateSemaphore was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(VkDevice, VkSemaphore, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroySemaphore was called, resulting in no-op behavior."); } -inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(VkDevice, const VkEventCreateInfo*, const VkAllocationCallbacks*, VkEvent*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateEvent was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(VkDevice, VkEvent, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyEvent was called, resulting in no-op behavior."); } -inline VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(VkDevice, VkEvent) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetEventStatus was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(VkDevice, VkEvent) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkSetEvent was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(VkDevice, VkEvent) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkResetEvent was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(VkDevice, const VkQueryPoolCreateInfo*, const VkAllocationCallbacks*, VkQueryPool*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateQueryPool was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool(VkDevice, VkQueryPool, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyQueryPool was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(VkDevice, VkQueryPool, uint32_t, uint32_t, size_t, void*, VkDeviceSize, VkQueryResultFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetQueryPoolResults was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(VkDevice, const VkBufferCreateInfo*, const VkAllocationCallbacks*, VkBuffer*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateBuffer was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(VkDevice, VkBuffer, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyBuffer was called, resulting in no-op behavior."); } -inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(VkDevice, const VkBufferViewCreateInfo*, const VkAllocationCallbacks*, VkBufferView*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateBufferView was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(VkDevice, VkBufferView, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyBufferView was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(VkDevice, const VkImageCreateInfo*, const VkAllocationCallbacks*, VkImage*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateImage was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkDestroyImage(VkDevice, VkImage, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyImage was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(VkDevice, VkImage, const VkImageSubresource*, VkSubresourceLayout*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetImageSubresourceLayout was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(VkDevice, const VkImageViewCreateInfo*, const VkAllocationCallbacks*, VkImageView*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateImageView was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(VkDevice, VkImageView, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyImageView was called, resulting in no-op behavior."); } +inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(VkDevice, const VkCommandPoolCreateInfo*, const VkAllocationCallbacks*, VkCommandPool*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateCommandPool was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool(VkDevice, VkCommandPool, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyCommandPool was called, resulting in no-op behavior."); } +inline VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(VkDevice, VkCommandPool, VkCommandPoolResetFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkResetCommandPool was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(VkDevice, const VkCommandBufferAllocateInfo*, VkCommandBuffer*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkAllocateCommandBuffers was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(VkDevice, VkCommandPool, uint32_t, const VkCommandBuffer*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkFreeCommandBuffers was called, resulting in no-op behavior."); } +inline VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(VkCommandBuffer, const VkCommandBufferBeginInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkBeginCommandBuffer was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(VkCommandBuffer) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkEndCommandBuffer was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(VkCommandBuffer, VkCommandBufferResetFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkResetCommandBuffer was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(VkCommandBuffer, VkBuffer, VkBuffer, uint32_t, const VkBufferCopy*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyBuffer was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(VkCommandBuffer, VkImage, VkImageLayout, VkImage, VkImageLayout, uint32_t, const VkImageCopy*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyImage was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(VkCommandBuffer, VkBuffer, VkImage, VkImageLayout, uint32_t, const VkBufferImageCopy*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyBufferToImage was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(VkCommandBuffer, VkImage, VkImageLayout, VkBuffer, uint32_t, const VkBufferImageCopy*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyImageToBuffer was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(VkCommandBuffer, VkBuffer, VkDeviceSize, VkDeviceSize, const void*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdUpdateBuffer was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(VkCommandBuffer, VkBuffer, VkDeviceSize, VkDeviceSize, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdFillBuffer was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(VkCommandBuffer, VkPipelineStageFlags, VkPipelineStageFlags, VkDependencyFlags, uint32_t, const VkMemoryBarrier*, uint32_t, const VkBufferMemoryBarrier*, uint32_t, const VkImageMemoryBarrier*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdPipelineBarrier was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(VkCommandBuffer, VkQueryPool, uint32_t, VkQueryControlFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBeginQuery was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(VkCommandBuffer, VkQueryPool, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdEndQuery was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(VkCommandBuffer, VkQueryPool, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdResetQueryPool was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(VkCommandBuffer, VkPipelineStageFlagBits, VkQueryPool, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdWriteTimestamp was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(VkCommandBuffer, VkQueryPool, uint32_t, uint32_t, VkBuffer, VkDeviceSize, VkDeviceSize, VkQueryResultFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyQueryPoolResults was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(VkCommandBuffer, uint32_t, const VkCommandBuffer*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdExecuteCommands was called, resulting in no-op behavior."); } +inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(VkDevice, const VkEventCreateInfo*, const VkAllocationCallbacks*, VkEvent*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateEvent was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(VkDevice, VkEvent, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyEvent was called, resulting in no-op behavior."); } +inline VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(VkDevice, VkEvent) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetEventStatus was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(VkDevice, VkEvent) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkSetEvent was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(VkDevice, VkEvent) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkResetEvent was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(VkDevice, const VkBufferViewCreateInfo*, const VkAllocationCallbacks*, VkBufferView*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateBufferView was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(VkDevice, VkBufferView, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyBufferView was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(VkDevice, const VkShaderModuleCreateInfo*, const VkAllocationCallbacks*, VkShaderModule*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateShaderModule was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule(VkDevice, VkShaderModule, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyShaderModule was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(VkDevice, const VkPipelineCacheCreateInfo*, const VkAllocationCallbacks*, VkPipelineCache*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreatePipelineCache was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(VkDevice, VkPipelineCache, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyPipelineCache was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(VkDevice, VkPipelineCache, size_t*, void*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetPipelineCacheData was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(VkDevice, VkPipelineCache, uint32_t, const VkPipelineCache*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkMergePipelineCaches was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(VkDevice, VkPipelineCache, uint32_t, const VkGraphicsPipelineCreateInfo*, const VkAllocationCallbacks*, VkPipeline*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateGraphicsPipelines was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(VkDevice, VkPipelineCache, uint32_t, const VkComputePipelineCreateInfo*, const VkAllocationCallbacks*, VkPipeline*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateComputePipelines was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(VkDevice, VkPipeline, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyPipeline was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(VkDevice, const VkPipelineLayoutCreateInfo*, const VkAllocationCallbacks*, VkPipelineLayout*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreatePipelineLayout was called, resulting in no-op behavior."); return VK_SUCCESS; } @@ -240,20 +265,21 @@ inline VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(VkDevice, VkDescript inline VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(VkDevice, const VkDescriptorSetAllocateInfo*, VkDescriptorSet*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkAllocateDescriptorSets was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(VkDevice, VkDescriptorPool, uint32_t, const VkDescriptorSet*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkFreeDescriptorSets was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(VkDevice, uint32_t, const VkWriteDescriptorSet*, uint32_t, const VkCopyDescriptorSet*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkUpdateDescriptorSets was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(VkCommandBuffer, VkPipelineBindPoint, VkPipeline) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBindPipeline was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(VkCommandBuffer, VkPipelineBindPoint, VkPipelineLayout, uint32_t, uint32_t, const VkDescriptorSet*, uint32_t, const uint32_t*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBindDescriptorSets was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(VkCommandBuffer, VkImage, VkImageLayout, const VkClearColorValue*, uint32_t, const VkImageSubresourceRange*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdClearColorImage was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(VkCommandBuffer, uint32_t, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDispatch was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(VkCommandBuffer, VkBuffer, VkDeviceSize) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDispatchIndirect was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(VkCommandBuffer, VkEvent, VkPipelineStageFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetEvent was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(VkCommandBuffer, VkEvent, VkPipelineStageFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdResetEvent was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(VkCommandBuffer, uint32_t, const VkEvent*, VkPipelineStageFlags, VkPipelineStageFlags, uint32_t, const VkMemoryBarrier*, uint32_t, const VkBufferMemoryBarrier*, uint32_t, const VkImageMemoryBarrier*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdWaitEvents was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(VkCommandBuffer, VkPipelineLayout, VkShaderStageFlags, uint32_t, uint32_t, const void*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdPushConstants was called, resulting in no-op behavior."); } +inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(VkDevice, VkPipelineCache, uint32_t, const VkGraphicsPipelineCreateInfo*, const VkAllocationCallbacks*, VkPipeline*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateGraphicsPipelines was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(VkDevice, const VkFramebufferCreateInfo*, const VkAllocationCallbacks*, VkFramebuffer*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateFramebuffer was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(VkDevice, VkFramebuffer, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyFramebuffer was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(VkDevice, const VkRenderPassCreateInfo*, const VkAllocationCallbacks*, VkRenderPass*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateRenderPass was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(VkDevice, VkRenderPass, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyRenderPass was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(VkDevice, VkRenderPass, VkExtent2D*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetRenderAreaGranularity was called, resulting in no-op behavior."); } -inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(VkDevice, const VkCommandPoolCreateInfo*, const VkAllocationCallbacks*, VkCommandPool*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateCommandPool was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool(VkDevice, VkCommandPool, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyCommandPool was called, resulting in no-op behavior."); } -inline VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(VkDevice, VkCommandPool, VkCommandPoolResetFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkResetCommandPool was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(VkDevice, const VkCommandBufferAllocateInfo*, VkCommandBuffer*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkAllocateCommandBuffers was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(VkDevice, VkCommandPool, uint32_t, const VkCommandBuffer*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkFreeCommandBuffers was called, resulting in no-op behavior."); } -inline VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(VkCommandBuffer, const VkCommandBufferBeginInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkBeginCommandBuffer was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(VkCommandBuffer) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkEndCommandBuffer was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(VkCommandBuffer, VkCommandBufferResetFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkResetCommandBuffer was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(VkCommandBuffer, VkPipelineBindPoint, VkPipeline) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBindPipeline was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(VkCommandBuffer, uint32_t, uint32_t, const VkViewport*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetViewport was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(VkCommandBuffer, uint32_t, uint32_t, const VkRect2D*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetScissor was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer, float) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetLineWidth was called, resulting in no-op behavior."); } @@ -263,62 +289,35 @@ inline VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer, float, fl inline VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer, VkStencilFaceFlags, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetStencilCompareMask was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer, VkStencilFaceFlags, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetStencilWriteMask was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer, VkStencilFaceFlags, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetStencilReference was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(VkCommandBuffer, VkPipelineBindPoint, VkPipelineLayout, uint32_t, uint32_t, const VkDescriptorSet*, uint32_t, const uint32_t*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBindDescriptorSets was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(VkCommandBuffer, VkBuffer, VkDeviceSize, VkIndexType) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBindIndexBuffer was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(VkCommandBuffer, uint32_t, uint32_t, const VkBuffer*, const VkDeviceSize*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBindVertexBuffers was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdDraw(VkCommandBuffer, uint32_t, uint32_t, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDraw was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(VkCommandBuffer, uint32_t, uint32_t, uint32_t, int32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDrawIndexed was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(VkCommandBuffer, VkBuffer, VkDeviceSize, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDrawIndirect was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(VkCommandBuffer, VkBuffer, VkDeviceSize, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDrawIndexedIndirect was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(VkCommandBuffer, uint32_t, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDispatch was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(VkCommandBuffer, VkBuffer, VkDeviceSize) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDispatchIndirect was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(VkCommandBuffer, VkBuffer, VkBuffer, uint32_t, const VkBufferCopy*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyBuffer was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(VkCommandBuffer, VkImage, VkImageLayout, VkImage, VkImageLayout, uint32_t, const VkImageCopy*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyImage was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(VkCommandBuffer, VkImage, VkImageLayout, VkImage, VkImageLayout, uint32_t, const VkImageBlit*, VkFilter) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBlitImage was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(VkCommandBuffer, VkBuffer, VkImage, VkImageLayout, uint32_t, const VkBufferImageCopy*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyBufferToImage was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(VkCommandBuffer, VkImage, VkImageLayout, VkBuffer, uint32_t, const VkBufferImageCopy*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyImageToBuffer was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(VkCommandBuffer, VkBuffer, VkDeviceSize, VkDeviceSize, const void*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdUpdateBuffer was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(VkCommandBuffer, VkBuffer, VkDeviceSize, VkDeviceSize, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdFillBuffer was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(VkCommandBuffer, VkImage, VkImageLayout, const VkClearColorValue*, uint32_t, const VkImageSubresourceRange*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdClearColorImage was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(VkCommandBuffer, VkImage, VkImageLayout, const VkClearDepthStencilValue*, uint32_t, const VkImageSubresourceRange*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdClearDepthStencilImage was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(VkCommandBuffer, uint32_t, const VkClearAttachment*, uint32_t, const VkClearRect*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdClearAttachments was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(VkCommandBuffer, VkImage, VkImageLayout, VkImage, VkImageLayout, uint32_t, const VkImageResolve*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdResolveImage was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(VkCommandBuffer, VkEvent, VkPipelineStageFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetEvent was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(VkCommandBuffer, VkEvent, VkPipelineStageFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdResetEvent was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(VkCommandBuffer, uint32_t, const VkEvent*, VkPipelineStageFlags, VkPipelineStageFlags, uint32_t, const VkMemoryBarrier*, uint32_t, const VkBufferMemoryBarrier*, uint32_t, const VkImageMemoryBarrier*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdWaitEvents was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(VkCommandBuffer, VkPipelineStageFlags, VkPipelineStageFlags, VkDependencyFlags, uint32_t, const VkMemoryBarrier*, uint32_t, const VkBufferMemoryBarrier*, uint32_t, const VkImageMemoryBarrier*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdPipelineBarrier was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(VkCommandBuffer, VkQueryPool, uint32_t, VkQueryControlFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBeginQuery was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(VkCommandBuffer, VkQueryPool, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdEndQuery was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(VkCommandBuffer, VkQueryPool, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdResetQueryPool was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(VkCommandBuffer, VkPipelineStageFlagBits, VkQueryPool, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdWriteTimestamp was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(VkCommandBuffer, VkQueryPool, uint32_t, uint32_t, VkBuffer, VkDeviceSize, VkDeviceSize, VkQueryResultFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyQueryPoolResults was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(VkCommandBuffer, VkPipelineLayout, VkShaderStageFlags, uint32_t, uint32_t, const void*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdPushConstants was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(VkCommandBuffer, const VkRenderPassBeginInfo*, VkSubpassContents) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBeginRenderPass was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(VkCommandBuffer, VkSubpassContents) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdNextSubpass was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(VkCommandBuffer) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdEndRenderPass was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(VkCommandBuffer, uint32_t, const VkCommandBuffer*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdExecuteCommands was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2(VkDevice, uint32_t, const VkBindBufferMemoryInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkBindBufferMemory2 was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2(VkDevice, uint32_t, const VkBindImageMemoryInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkBindImageMemory2 was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures(VkDevice, uint32_t, uint32_t, uint32_t, VkPeerMemoryFeatureFlags*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDeviceGroupPeerMemoryFeatures was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask(VkCommandBuffer, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetDeviceMask was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase(VkCommandBuffer, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDispatchBase was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2(VkDevice, const VkImageMemoryRequirementsInfo2*, VkMemoryRequirements2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetImageMemoryRequirements2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2(VkDevice, const VkBufferMemoryRequirementsInfo2*, VkMemoryRequirements2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetBufferMemoryRequirements2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2(VkDevice, const VkImageSparseMemoryRequirementsInfo2*, uint32_t*, VkSparseImageMemoryRequirements2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetImageSparseMemoryRequirements2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkTrimCommandPool(VkDevice, VkCommandPool, VkCommandPoolTrimFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkTrimCommandPool was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2(VkDevice, const VkDeviceQueueInfo2*, VkQueue*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDeviceQueue2 was called, resulting in no-op behavior."); } -inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion(VkDevice, const VkSamplerYcbcrConversionCreateInfo*, const VkAllocationCallbacks*, VkSamplerYcbcrConversion*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateSamplerYcbcrConversion was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion(VkDevice, VkSamplerYcbcrConversion, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroySamplerYcbcrConversion was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase(VkCommandBuffer, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDispatchBase was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplate(VkDevice, const VkDescriptorUpdateTemplateCreateInfo*, const VkAllocationCallbacks*, VkDescriptorUpdateTemplate*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateDescriptorUpdateTemplate was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate(VkDevice, VkDescriptorUpdateTemplate, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyDescriptorUpdateTemplate was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplate(VkDevice, VkDescriptorSet, VkDescriptorUpdateTemplate, const void*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkUpdateDescriptorSetWithTemplate was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport(VkDevice, const VkDescriptorSetLayoutCreateInfo*, VkDescriptorSetLayoutSupport*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDescriptorSetLayoutSupport was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount(VkCommandBuffer, VkBuffer, VkDeviceSize, VkBuffer, VkDeviceSize, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDrawIndirectCount was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount(VkCommandBuffer, VkBuffer, VkDeviceSize, VkBuffer, VkDeviceSize, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDrawIndexedIndirectCount was called, resulting in no-op behavior."); } -inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2(VkDevice, const VkRenderPassCreateInfo2*, const VkAllocationCallbacks*, VkRenderPass*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateRenderPass2 was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2(VkCommandBuffer, const VkRenderPassBeginInfo*, const VkSubpassBeginInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBeginRenderPass2 was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2(VkCommandBuffer, const VkSubpassBeginInfo*, const VkSubpassEndInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdNextSubpass2 was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2(VkCommandBuffer, const VkSubpassEndInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdEndRenderPass2 was called, resulting in no-op behavior."); } +inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion(VkDevice, const VkSamplerYcbcrConversionCreateInfo*, const VkAllocationCallbacks*, VkSamplerYcbcrConversion*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateSamplerYcbcrConversion was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion(VkDevice, VkSamplerYcbcrConversion, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroySamplerYcbcrConversion was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkResetQueryPool(VkDevice, VkQueryPool, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkResetQueryPool was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue(VkDevice, VkSemaphore, uint64_t*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetSemaphoreCounterValue was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores(VkDevice, const VkSemaphoreWaitInfo*, uint64_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkWaitSemaphores was called, resulting in no-op behavior."); return VK_SUCCESS; } @@ -326,13 +325,16 @@ inline VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore(VkDevice, const VkSemaph inline VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddress(VkDevice, const VkBufferDeviceAddressInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetBufferDeviceAddress was called, resulting in no-op behavior."); return 0; } inline VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress(VkDevice, const VkBufferDeviceAddressInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetBufferOpaqueCaptureAddress was called, resulting in no-op behavior."); return 0; } inline VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress(VkDevice, const VkDeviceMemoryOpaqueCaptureAddressInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDeviceMemoryOpaqueCaptureAddress was called, resulting in no-op behavior."); return 0; } +inline VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount(VkCommandBuffer, VkBuffer, VkDeviceSize, VkBuffer, VkDeviceSize, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDrawIndirectCount was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount(VkCommandBuffer, VkBuffer, VkDeviceSize, VkBuffer, VkDeviceSize, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDrawIndexedIndirectCount was called, resulting in no-op behavior."); } +inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2(VkDevice, const VkRenderPassCreateInfo2*, const VkAllocationCallbacks*, VkRenderPass*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateRenderPass2 was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2(VkCommandBuffer, const VkRenderPassBeginInfo*, const VkSubpassBeginInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBeginRenderPass2 was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2(VkCommandBuffer, const VkSubpassBeginInfo*, const VkSubpassEndInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdNextSubpass2 was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2(VkCommandBuffer, const VkSubpassEndInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdEndRenderPass2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlot(VkDevice, const VkPrivateDataSlotCreateInfo*, const VkAllocationCallbacks*, VkPrivateDataSlot*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreatePrivateDataSlot was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlot(VkDevice, VkPrivateDataSlot, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyPrivateDataSlot was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateData(VkDevice, VkObjectType, uint64_t, VkPrivateDataSlot, uint64_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkSetPrivateData was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkGetPrivateData(VkDevice, VkObjectType, uint64_t, VkPrivateDataSlot, uint64_t*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetPrivateData was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2(VkCommandBuffer, VkEvent, const VkDependencyInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetEvent2 was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2(VkCommandBuffer, VkEvent, VkPipelineStageFlags2) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdResetEvent2 was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2(VkCommandBuffer, uint32_t, const VkEvent*, const VkDependencyInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdWaitEvents2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2(VkCommandBuffer, const VkDependencyInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdPipelineBarrier2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2(VkCommandBuffer, VkPipelineStageFlags2, VkQueryPool, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdWriteTimestamp2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2(VkQueue, uint32_t, const VkSubmitInfo2*, VkFence) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkQueueSubmit2 was called, resulting in no-op behavior."); return VK_SUCCESS; } @@ -340,6 +342,12 @@ inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2(VkCommandBuffer, const VkCopy inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2(VkCommandBuffer, const VkCopyImageInfo2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyImage2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2(VkCommandBuffer, const VkCopyBufferToImageInfo2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyBufferToImage2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2(VkCommandBuffer, const VkCopyImageToBufferInfo2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyImageToBuffer2 was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirements(VkDevice, const VkDeviceBufferMemoryRequirements*, VkMemoryRequirements2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDeviceBufferMemoryRequirements was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirements(VkDevice, const VkDeviceImageMemoryRequirements*, VkMemoryRequirements2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDeviceImageMemoryRequirements was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements(VkDevice, const VkDeviceImageMemoryRequirements*, uint32_t*, VkSparseImageMemoryRequirements2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDeviceImageSparseMemoryRequirements was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2(VkCommandBuffer, VkEvent, const VkDependencyInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetEvent2 was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2(VkCommandBuffer, VkEvent, VkPipelineStageFlags2) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdResetEvent2 was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2(VkCommandBuffer, uint32_t, const VkEvent*, const VkDependencyInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdWaitEvents2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2(VkCommandBuffer, const VkBlitImageInfo2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBlitImage2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2(VkCommandBuffer, const VkResolveImageInfo2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdResolveImage2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdBeginRendering(VkCommandBuffer, const VkRenderingInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBeginRendering was called, resulting in no-op behavior."); } @@ -359,28 +367,25 @@ inline VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOp(VkCommandBuffer, VkStencilFa inline VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnable(VkCommandBuffer, VkBool32) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetRasterizerDiscardEnable was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnable(VkCommandBuffer, VkBool32) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetDepthBiasEnable was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnable(VkCommandBuffer, VkBool32) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetPrimitiveRestartEnable was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirements(VkDevice, const VkDeviceBufferMemoryRequirements*, VkMemoryRequirements2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDeviceBufferMemoryRequirements was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirements(VkDevice, const VkDeviceImageMemoryRequirements*, VkMemoryRequirements2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDeviceImageMemoryRequirements was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements(VkDevice, const VkDeviceImageMemoryRequirements*, uint32_t*, VkSparseImageMemoryRequirements2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDeviceImageSparseMemoryRequirements was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStipple(VkCommandBuffer, uint32_t, uint16_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetLineStipple was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2(VkDevice, const VkMemoryMapInfo*, void**) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkMapMemory2 was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2(VkDevice, const VkMemoryUnmapInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkUnmapMemory2 was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2(VkCommandBuffer, VkBuffer, VkDeviceSize, VkDeviceSize, VkIndexType) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBindIndexBuffer2 was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularity(VkDevice, const VkRenderingAreaInfo*, VkExtent2D*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetRenderingAreaGranularity was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayout(VkDevice, const VkDeviceImageSubresourceInfo*, VkSubresourceLayout2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDeviceImageSubresourceLayout was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2(VkDevice, VkImage, const VkImageSubresource2*, VkSubresourceLayout2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetImageSubresourceLayout2 was called, resulting in no-op behavior."); } +inline VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImage(VkDevice, const VkCopyMemoryToImageInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCopyMemoryToImage was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemory(VkDevice, const VkCopyImageToMemoryInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCopyImageToMemory was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImage(VkDevice, const VkCopyImageToImageInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCopyImageToImage was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayout(VkDevice, uint32_t, const VkHostImageLayoutTransitionInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkTransitionImageLayout was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet(VkCommandBuffer, VkPipelineBindPoint, VkPipelineLayout, uint32_t, uint32_t, const VkWriteDescriptorSet*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdPushDescriptorSet was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate(VkCommandBuffer, VkDescriptorUpdateTemplate, VkPipelineLayout, uint32_t, const void*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdPushDescriptorSetWithTemplate was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocations(VkCommandBuffer, const VkRenderingAttachmentLocationInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetRenderingAttachmentLocations was called, resulting in no-op behavior."); } -inline VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndices(VkCommandBuffer, const VkRenderingInputAttachmentIndexInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetRenderingInputAttachmentIndices was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2(VkCommandBuffer, const VkBindDescriptorSetsInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBindDescriptorSets2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2(VkCommandBuffer, const VkPushConstantsInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdPushConstants2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2(VkCommandBuffer, const VkPushDescriptorSetInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdPushDescriptorSet2 was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate2(VkCommandBuffer, const VkPushDescriptorSetWithTemplateInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdPushDescriptorSetWithTemplate2 was called, resulting in no-op behavior."); } -inline VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImage(VkDevice, const VkCopyMemoryToImageInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCopyMemoryToImage was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemory(VkDevice, const VkCopyImageToMemoryInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCopyImageToMemory was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImage(VkDevice, const VkCopyImageToImageInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCopyImageToImage was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayout(VkDevice, uint32_t, const VkHostImageLayoutTransitionInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkTransitionImageLayout was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStipple(VkCommandBuffer, uint32_t, uint16_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetLineStipple was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2(VkCommandBuffer, VkBuffer, VkDeviceSize, VkDeviceSize, VkIndexType) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBindIndexBuffer2 was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularity(VkDevice, const VkRenderingAreaInfo*, VkExtent2D*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetRenderingAreaGranularity was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocations(VkCommandBuffer, const VkRenderingAttachmentLocationInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetRenderingAttachmentLocations was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndices(VkCommandBuffer, const VkRenderingInputAttachmentIndexInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetRenderingInputAttachmentIndices was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(VkDevice, const VkSwapchainCreateInfoKHR*, const VkAllocationCallbacks*, VkSwapchainKHR*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateSwapchainKHR was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroySwapchainKHR was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(VkDevice, VkSwapchainKHR, uint32_t*, VkImage*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetSwapchainImagesKHR was called, resulting in no-op behavior."); return VK_SUCCESS; } @@ -498,6 +503,9 @@ inline VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2KHR(VkCommandBuffer, co inline VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate2KHR(VkCommandBuffer, const VkPushDescriptorSetWithTemplateInfo*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdPushDescriptorSetWithTemplate2KHR was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdSetDescriptorBufferOffsets2EXT(VkCommandBuffer, const VkSetDescriptorBufferOffsetsInfoEXT*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetDescriptorBufferOffsets2EXT was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBufferEmbeddedSamplers2EXT(VkCommandBuffer, const VkBindDescriptorBufferEmbeddedSamplersInfoEXT*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBindDescriptorBufferEmbeddedSamplers2EXT was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryIndirectKHR(VkCommandBuffer, const VkCopyMemoryIndirectInfoKHR*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyMemoryIndirectKHR was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToImageIndirectKHR(VkCommandBuffer, const VkCopyMemoryToImageIndirectInfoKHR*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdCopyMemoryToImageIndirectKHR was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering2KHR(VkCommandBuffer, const VkRenderingEndInfoKHR*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdEndRendering2KHR was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkFrameBoundaryANDROID(VkDevice, VkSemaphore, VkImage) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkFrameBoundaryANDROID was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT(VkDevice, const VkDebugMarkerObjectTagInfoEXT*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDebugMarkerSetObjectTagEXT was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT(VkDevice, const VkDebugMarkerObjectNameInfoEXT*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDebugMarkerSetObjectNameEXT was called, resulting in no-op behavior."); return VK_SUCCESS; } @@ -572,6 +580,10 @@ inline VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorNV(VkCommandBuffer, ui inline VKAPI_ATTR void VKAPI_CALL vkCmdSetCheckpointNV(VkCommandBuffer, const void*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetCheckpointNV was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointDataNV(VkQueue, uint32_t*, VkCheckpointDataNV*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetQueueCheckpointDataNV was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointData2NV(VkQueue, uint32_t*, VkCheckpointData2NV*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetQueueCheckpointData2NV was called, resulting in no-op behavior."); } +inline VKAPI_ATTR VkResult VKAPI_CALL vkSetSwapchainPresentTimingQueueSizeEXT(VkDevice, VkSwapchainKHR, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkSetSwapchainPresentTimingQueueSizeEXT was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainTimingPropertiesEXT(VkDevice, VkSwapchainKHR, VkSwapchainTimingPropertiesEXT*, uint64_t*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetSwapchainTimingPropertiesEXT was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainTimeDomainPropertiesEXT(VkDevice, VkSwapchainKHR, VkSwapchainTimeDomainPropertiesEXT*, uint64_t*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetSwapchainTimeDomainPropertiesEXT was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingEXT(VkDevice, const VkPastPresentationTimingInfoEXT*, VkPastPresentationTimingPropertiesEXT*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetPastPresentationTimingEXT was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR VkResult VKAPI_CALL vkInitializePerformanceApiINTEL(VkDevice, const VkInitializePerformanceApiInfoINTEL*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkInitializePerformanceApiINTEL was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkUninitializePerformanceApiINTEL(VkDevice) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkUninitializePerformanceApiINTEL was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceMarkerINTEL(VkCommandBuffer, const VkPerformanceMarkerInfoINTEL*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetPerformanceMarkerINTEL was called, resulting in no-op behavior."); return VK_SUCCESS; } @@ -620,6 +632,17 @@ inline VKAPI_ATTR void VKAPI_CALL vkGetPrivateDataEXT(VkDevice, VkObjectType, ui inline VKAPI_ATTR void VKAPI_CALL vkCmdDispatchTileQCOM(VkCommandBuffer, const VkDispatchTileInfoQCOM*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDispatchTileQCOM was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdBeginPerTileExecutionQCOM(VkCommandBuffer, const VkPerTileBeginInfoQCOM*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBeginPerTileExecutionQCOM was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdEndPerTileExecutionQCOM(VkCommandBuffer, const VkPerTileEndInfoQCOM*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdEndPerTileExecutionQCOM was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSizeEXT(VkDevice, VkDescriptorSetLayout, VkDeviceSize*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDescriptorSetLayoutSizeEXT was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutBindingOffsetEXT(VkDevice, VkDescriptorSetLayout, uint32_t, VkDeviceSize*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDescriptorSetLayoutBindingOffsetEXT was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkGetDescriptorEXT(VkDevice, const VkDescriptorGetInfoEXT*, size_t, void*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDescriptorEXT was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBuffersEXT(VkCommandBuffer, uint32_t, const VkDescriptorBufferBindingInfoEXT*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBindDescriptorBuffersEXT was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdSetDescriptorBufferOffsetsEXT(VkCommandBuffer, VkPipelineBindPoint, VkPipelineLayout, uint32_t, uint32_t, const uint32_t*, const VkDeviceSize*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetDescriptorBufferOffsetsEXT was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBufferEmbeddedSamplersEXT(VkCommandBuffer, VkPipelineBindPoint, VkPipelineLayout, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBindDescriptorBufferEmbeddedSamplersEXT was called, resulting in no-op behavior."); } +inline VKAPI_ATTR VkResult VKAPI_CALL vkGetBufferOpaqueCaptureDescriptorDataEXT(VkDevice, const VkBufferCaptureDescriptorDataInfoEXT*, void*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetBufferOpaqueCaptureDescriptorDataEXT was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkGetImageOpaqueCaptureDescriptorDataEXT(VkDevice, const VkImageCaptureDescriptorDataInfoEXT*, void*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetImageOpaqueCaptureDescriptorDataEXT was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkGetImageViewOpaqueCaptureDescriptorDataEXT(VkDevice, const VkImageViewCaptureDescriptorDataInfoEXT*, void*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetImageViewOpaqueCaptureDescriptorDataEXT was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkGetSamplerOpaqueCaptureDescriptorDataEXT(VkDevice, const VkSamplerCaptureDescriptorDataInfoEXT*, void*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetSamplerOpaqueCaptureDescriptorDataEXT was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT(VkDevice, const VkAccelerationStructureCaptureDescriptorDataInfoEXT*, void*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateEnumNV(VkCommandBuffer, VkFragmentShadingRateNV, const VkFragmentShadingRateCombinerOpKHR[2]) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetFragmentShadingRateEnumNV was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceFaultInfoEXT(VkDevice, VkDeviceFaultCountsEXT*, VkDeviceFaultInfoEXT*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDeviceFaultInfoEXT was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkCmdSetVertexInputEXT(VkCommandBuffer, uint32_t, const VkVertexInputBindingDescription2EXT*, uint32_t, const VkVertexInputAttributeDescription2EXT*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetVertexInputEXT was called, resulting in no-op behavior."); } @@ -711,8 +734,19 @@ inline VKAPI_ATTR VkResult VKAPI_CALL vkLatencySleepNV(VkDevice, VkSwapchainKHR, inline VKAPI_ATTR void VKAPI_CALL vkSetLatencyMarkerNV(VkDevice, VkSwapchainKHR, const VkSetLatencyMarkerInfoNV*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkSetLatencyMarkerNV was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetLatencyTimingsNV(VkDevice, VkSwapchainKHR, VkGetLatencyMarkerInfoNV*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetLatencyTimingsNV was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkQueueNotifyOutOfBandNV(VkQueue, const VkOutOfBandQueueTypeInfoNV*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkQueueNotifyOutOfBandNV was called, resulting in no-op behavior."); } +inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateDataGraphPipelinesARM(VkDevice, VkDeferredOperationKHR, VkPipelineCache, uint32_t, const VkDataGraphPipelineCreateInfoARM*, const VkAllocationCallbacks*, VkPipeline*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateDataGraphPipelinesARM was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateDataGraphPipelineSessionARM(VkDevice, const VkDataGraphPipelineSessionCreateInfoARM*, const VkAllocationCallbacks*, VkDataGraphPipelineSessionARM*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateDataGraphPipelineSessionARM was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelineSessionBindPointRequirementsARM(VkDevice, const VkDataGraphPipelineSessionBindPointRequirementsInfoARM*, uint32_t*, VkDataGraphPipelineSessionBindPointRequirementARM*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDataGraphPipelineSessionBindPointRequirementsARM was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR void VKAPI_CALL vkGetDataGraphPipelineSessionMemoryRequirementsARM(VkDevice, const VkDataGraphPipelineSessionMemoryRequirementsInfoARM*, VkMemoryRequirements2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDataGraphPipelineSessionMemoryRequirementsARM was called, resulting in no-op behavior."); } +inline VKAPI_ATTR VkResult VKAPI_CALL vkBindDataGraphPipelineSessionMemoryARM(VkDevice, uint32_t, const VkBindDataGraphPipelineSessionMemoryInfoARM*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkBindDataGraphPipelineSessionMemoryARM was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR void VKAPI_CALL vkDestroyDataGraphPipelineSessionARM(VkDevice, VkDataGraphPipelineSessionARM, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyDataGraphPipelineSessionARM was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdDispatchDataGraphARM(VkCommandBuffer, VkDataGraphPipelineSessionARM, const VkDataGraphPipelineDispatchInfoARM*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDispatchDataGraphARM was called, resulting in no-op behavior."); } +inline VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelineAvailablePropertiesARM(VkDevice, const VkDataGraphPipelineInfoARM*, uint32_t*, VkDataGraphPipelinePropertyARM*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDataGraphPipelineAvailablePropertiesARM was called, resulting in no-op behavior."); return VK_SUCCESS; } +inline VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelinePropertiesARM(VkDevice, const VkDataGraphPipelineInfoARM*, uint32_t, VkDataGraphPipelinePropertyQueryResultARM*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetDataGraphPipelinePropertiesARM was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkCmdSetAttachmentFeedbackLoopEnableEXT(VkCommandBuffer, VkImageAspectFlags) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetAttachmentFeedbackLoopEnableEXT was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdBindTileMemoryQCOM(VkCommandBuffer, const VkTileMemoryBindInfoQCOM*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBindTileMemoryQCOM was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdDecompressMemoryEXT(VkCommandBuffer, const VkDecompressMemoryInfoEXT*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDecompressMemoryEXT was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdDecompressMemoryIndirectCountEXT(VkCommandBuffer, VkMemoryDecompressionMethodFlagsEXT, VkDeviceAddress, VkDeviceAddress, uint32_t, uint32_t) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdDecompressMemoryIndirectCountEXT was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetPartitionedAccelerationStructuresBuildSizesNV(VkDevice, const VkPartitionedAccelerationStructureInstancesInputNV*, VkAccelerationStructureBuildSizesInfoKHR*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetPartitionedAccelerationStructuresBuildSizesNV was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdBuildPartitionedAccelerationStructuresNV(VkCommandBuffer, const VkBuildPartitionedAccelerationStructureInfoNV*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBuildPartitionedAccelerationStructuresNV was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkGetGeneratedCommandsMemoryRequirementsEXT(VkDevice, const VkGeneratedCommandsMemoryRequirementsInfoEXT*, VkMemoryRequirements2*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetGeneratedCommandsMemoryRequirementsEXT was called, resulting in no-op behavior."); } @@ -726,7 +760,9 @@ inline VKAPI_ATTR void VKAPI_CALL vkUpdateIndirectExecutionSetPipelineEXT(VkDevi inline VKAPI_ATTR void VKAPI_CALL vkUpdateIndirectExecutionSetShaderEXT(VkDevice, VkIndirectExecutionSetEXT, uint32_t, const VkWriteIndirectExecutionSetShaderEXT*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkUpdateIndirectExecutionSetShaderEXT was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryMetalHandleEXT(VkDevice, const VkMemoryGetMetalHandleInfoEXT*, void**) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetMemoryMetalHandleEXT was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryMetalHandlePropertiesEXT(VkDevice, VkExternalMemoryHandleTypeFlagBits, const void*, VkMemoryMetalHandlePropertiesEXT*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkGetMemoryMetalHandlePropertiesEXT was called, resulting in no-op behavior."); return VK_SUCCESS; } -inline VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering2EXT(VkCommandBuffer, const VkRenderingEndInfoEXT*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdEndRendering2EXT was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering2EXT(VkCommandBuffer, const VkRenderingEndInfoKHR*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdEndRendering2EXT was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdBeginCustomResolveEXT(VkCommandBuffer, const VkBeginCustomResolveInfoEXT*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBeginCustomResolveEXT was called, resulting in no-op behavior."); } +inline VKAPI_ATTR void VKAPI_CALL vkCmdSetComputeOccupancyPriorityNV(VkCommandBuffer, const VkComputeOccupancyPriorityParametersNV*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdSetComputeOccupancyPriorityNV was called, resulting in no-op behavior."); } inline VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureKHR(VkDevice, const VkAccelerationStructureCreateInfoKHR*, const VkAllocationCallbacks*, VkAccelerationStructureKHR*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCreateAccelerationStructureKHR was called, resulting in no-op behavior."); return VK_SUCCESS; } inline VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureKHR(VkDevice, VkAccelerationStructureKHR, const VkAllocationCallbacks*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkDestroyAccelerationStructureKHR was called, resulting in no-op behavior."); } inline VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructuresKHR(VkCommandBuffer, uint32_t, const VkAccelerationStructureBuildGeometryInfoKHR*, const VkAccelerationStructureBuildRangeInfoKHR* const*) { GFXRECON_LOG_WARNING_ONCE("Unsupported function vkCmdBuildAccelerationStructuresKHR was called, resulting in no-op behavior."); } @@ -870,7 +906,10 @@ struct VulkanInstanceTable PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX GetPhysicalDeviceScreenPresentationSupportQNX{ noop::vkGetPhysicalDeviceScreenPresentationSupportQNX }; PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV GetPhysicalDeviceOpticalFlowImageFormatsNV{ noop::vkGetPhysicalDeviceOpticalFlowImageFormatsNV }; PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV GetPhysicalDeviceCooperativeVectorPropertiesNV{ noop::vkGetPhysicalDeviceCooperativeVectorPropertiesNV }; + PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM{ noop::vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM }; + PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM{ noop::vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM }; PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV{ noop::vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV }; + PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM EnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM{ noop::vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM }; }; struct VulkanDeviceTable @@ -901,30 +940,50 @@ struct VulkanDeviceTable PFN_vkWaitForFences WaitForFences{ noop::vkWaitForFences }; PFN_vkCreateSemaphore CreateSemaphore{ noop::vkCreateSemaphore }; PFN_vkDestroySemaphore DestroySemaphore{ noop::vkDestroySemaphore }; - PFN_vkCreateEvent CreateEvent{ noop::vkCreateEvent }; - PFN_vkDestroyEvent DestroyEvent{ noop::vkDestroyEvent }; - PFN_vkGetEventStatus GetEventStatus{ noop::vkGetEventStatus }; - PFN_vkSetEvent SetEvent{ noop::vkSetEvent }; - PFN_vkResetEvent ResetEvent{ noop::vkResetEvent }; PFN_vkCreateQueryPool CreateQueryPool{ noop::vkCreateQueryPool }; PFN_vkDestroyQueryPool DestroyQueryPool{ noop::vkDestroyQueryPool }; PFN_vkGetQueryPoolResults GetQueryPoolResults{ noop::vkGetQueryPoolResults }; PFN_vkCreateBuffer CreateBuffer{ noop::vkCreateBuffer }; PFN_vkDestroyBuffer DestroyBuffer{ noop::vkDestroyBuffer }; - PFN_vkCreateBufferView CreateBufferView{ noop::vkCreateBufferView }; - PFN_vkDestroyBufferView DestroyBufferView{ noop::vkDestroyBufferView }; PFN_vkCreateImage CreateImage{ noop::vkCreateImage }; PFN_vkDestroyImage DestroyImage{ noop::vkDestroyImage }; PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout{ noop::vkGetImageSubresourceLayout }; PFN_vkCreateImageView CreateImageView{ noop::vkCreateImageView }; PFN_vkDestroyImageView DestroyImageView{ noop::vkDestroyImageView }; + PFN_vkCreateCommandPool CreateCommandPool{ noop::vkCreateCommandPool }; + PFN_vkDestroyCommandPool DestroyCommandPool{ noop::vkDestroyCommandPool }; + PFN_vkResetCommandPool ResetCommandPool{ noop::vkResetCommandPool }; + PFN_vkAllocateCommandBuffers AllocateCommandBuffers{ noop::vkAllocateCommandBuffers }; + PFN_vkFreeCommandBuffers FreeCommandBuffers{ noop::vkFreeCommandBuffers }; + PFN_vkBeginCommandBuffer BeginCommandBuffer{ noop::vkBeginCommandBuffer }; + PFN_vkEndCommandBuffer EndCommandBuffer{ noop::vkEndCommandBuffer }; + PFN_vkResetCommandBuffer ResetCommandBuffer{ noop::vkResetCommandBuffer }; + PFN_vkCmdCopyBuffer CmdCopyBuffer{ noop::vkCmdCopyBuffer }; + PFN_vkCmdCopyImage CmdCopyImage{ noop::vkCmdCopyImage }; + PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage{ noop::vkCmdCopyBufferToImage }; + PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer{ noop::vkCmdCopyImageToBuffer }; + PFN_vkCmdUpdateBuffer CmdUpdateBuffer{ noop::vkCmdUpdateBuffer }; + PFN_vkCmdFillBuffer CmdFillBuffer{ noop::vkCmdFillBuffer }; + PFN_vkCmdPipelineBarrier CmdPipelineBarrier{ noop::vkCmdPipelineBarrier }; + PFN_vkCmdBeginQuery CmdBeginQuery{ noop::vkCmdBeginQuery }; + PFN_vkCmdEndQuery CmdEndQuery{ noop::vkCmdEndQuery }; + PFN_vkCmdResetQueryPool CmdResetQueryPool{ noop::vkCmdResetQueryPool }; + PFN_vkCmdWriteTimestamp CmdWriteTimestamp{ noop::vkCmdWriteTimestamp }; + PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults{ noop::vkCmdCopyQueryPoolResults }; + PFN_vkCmdExecuteCommands CmdExecuteCommands{ noop::vkCmdExecuteCommands }; + PFN_vkCreateEvent CreateEvent{ noop::vkCreateEvent }; + PFN_vkDestroyEvent DestroyEvent{ noop::vkDestroyEvent }; + PFN_vkGetEventStatus GetEventStatus{ noop::vkGetEventStatus }; + PFN_vkSetEvent SetEvent{ noop::vkSetEvent }; + PFN_vkResetEvent ResetEvent{ noop::vkResetEvent }; + PFN_vkCreateBufferView CreateBufferView{ noop::vkCreateBufferView }; + PFN_vkDestroyBufferView DestroyBufferView{ noop::vkDestroyBufferView }; PFN_vkCreateShaderModule CreateShaderModule{ noop::vkCreateShaderModule }; PFN_vkDestroyShaderModule DestroyShaderModule{ noop::vkDestroyShaderModule }; PFN_vkCreatePipelineCache CreatePipelineCache{ noop::vkCreatePipelineCache }; PFN_vkDestroyPipelineCache DestroyPipelineCache{ noop::vkDestroyPipelineCache }; PFN_vkGetPipelineCacheData GetPipelineCacheData{ noop::vkGetPipelineCacheData }; PFN_vkMergePipelineCaches MergePipelineCaches{ noop::vkMergePipelineCaches }; - PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines{ noop::vkCreateGraphicsPipelines }; PFN_vkCreateComputePipelines CreateComputePipelines{ noop::vkCreateComputePipelines }; PFN_vkDestroyPipeline DestroyPipeline{ noop::vkDestroyPipeline }; PFN_vkCreatePipelineLayout CreatePipelineLayout{ noop::vkCreatePipelineLayout }; @@ -939,20 +998,21 @@ struct VulkanDeviceTable PFN_vkAllocateDescriptorSets AllocateDescriptorSets{ noop::vkAllocateDescriptorSets }; PFN_vkFreeDescriptorSets FreeDescriptorSets{ noop::vkFreeDescriptorSets }; PFN_vkUpdateDescriptorSets UpdateDescriptorSets{ noop::vkUpdateDescriptorSets }; + PFN_vkCmdBindPipeline CmdBindPipeline{ noop::vkCmdBindPipeline }; + PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets{ noop::vkCmdBindDescriptorSets }; + PFN_vkCmdClearColorImage CmdClearColorImage{ noop::vkCmdClearColorImage }; + PFN_vkCmdDispatch CmdDispatch{ noop::vkCmdDispatch }; + PFN_vkCmdDispatchIndirect CmdDispatchIndirect{ noop::vkCmdDispatchIndirect }; + PFN_vkCmdSetEvent CmdSetEvent{ noop::vkCmdSetEvent }; + PFN_vkCmdResetEvent CmdResetEvent{ noop::vkCmdResetEvent }; + PFN_vkCmdWaitEvents CmdWaitEvents{ noop::vkCmdWaitEvents }; + PFN_vkCmdPushConstants CmdPushConstants{ noop::vkCmdPushConstants }; + PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines{ noop::vkCreateGraphicsPipelines }; PFN_vkCreateFramebuffer CreateFramebuffer{ noop::vkCreateFramebuffer }; PFN_vkDestroyFramebuffer DestroyFramebuffer{ noop::vkDestroyFramebuffer }; PFN_vkCreateRenderPass CreateRenderPass{ noop::vkCreateRenderPass }; PFN_vkDestroyRenderPass DestroyRenderPass{ noop::vkDestroyRenderPass }; PFN_vkGetRenderAreaGranularity GetRenderAreaGranularity{ noop::vkGetRenderAreaGranularity }; - PFN_vkCreateCommandPool CreateCommandPool{ noop::vkCreateCommandPool }; - PFN_vkDestroyCommandPool DestroyCommandPool{ noop::vkDestroyCommandPool }; - PFN_vkResetCommandPool ResetCommandPool{ noop::vkResetCommandPool }; - PFN_vkAllocateCommandBuffers AllocateCommandBuffers{ noop::vkAllocateCommandBuffers }; - PFN_vkFreeCommandBuffers FreeCommandBuffers{ noop::vkFreeCommandBuffers }; - PFN_vkBeginCommandBuffer BeginCommandBuffer{ noop::vkBeginCommandBuffer }; - PFN_vkEndCommandBuffer EndCommandBuffer{ noop::vkEndCommandBuffer }; - PFN_vkResetCommandBuffer ResetCommandBuffer{ noop::vkResetCommandBuffer }; - PFN_vkCmdBindPipeline CmdBindPipeline{ noop::vkCmdBindPipeline }; PFN_vkCmdSetViewport CmdSetViewport{ noop::vkCmdSetViewport }; PFN_vkCmdSetScissor CmdSetScissor{ noop::vkCmdSetScissor }; PFN_vkCmdSetLineWidth CmdSetLineWidth{ noop::vkCmdSetLineWidth }; @@ -962,62 +1022,35 @@ struct VulkanDeviceTable PFN_vkCmdSetStencilCompareMask CmdSetStencilCompareMask{ noop::vkCmdSetStencilCompareMask }; PFN_vkCmdSetStencilWriteMask CmdSetStencilWriteMask{ noop::vkCmdSetStencilWriteMask }; PFN_vkCmdSetStencilReference CmdSetStencilReference{ noop::vkCmdSetStencilReference }; - PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets{ noop::vkCmdBindDescriptorSets }; PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer{ noop::vkCmdBindIndexBuffer }; PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers{ noop::vkCmdBindVertexBuffers }; PFN_vkCmdDraw CmdDraw{ noop::vkCmdDraw }; PFN_vkCmdDrawIndexed CmdDrawIndexed{ noop::vkCmdDrawIndexed }; PFN_vkCmdDrawIndirect CmdDrawIndirect{ noop::vkCmdDrawIndirect }; PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect{ noop::vkCmdDrawIndexedIndirect }; - PFN_vkCmdDispatch CmdDispatch{ noop::vkCmdDispatch }; - PFN_vkCmdDispatchIndirect CmdDispatchIndirect{ noop::vkCmdDispatchIndirect }; - PFN_vkCmdCopyBuffer CmdCopyBuffer{ noop::vkCmdCopyBuffer }; - PFN_vkCmdCopyImage CmdCopyImage{ noop::vkCmdCopyImage }; PFN_vkCmdBlitImage CmdBlitImage{ noop::vkCmdBlitImage }; - PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage{ noop::vkCmdCopyBufferToImage }; - PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer{ noop::vkCmdCopyImageToBuffer }; - PFN_vkCmdUpdateBuffer CmdUpdateBuffer{ noop::vkCmdUpdateBuffer }; - PFN_vkCmdFillBuffer CmdFillBuffer{ noop::vkCmdFillBuffer }; - PFN_vkCmdClearColorImage CmdClearColorImage{ noop::vkCmdClearColorImage }; PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage{ noop::vkCmdClearDepthStencilImage }; PFN_vkCmdClearAttachments CmdClearAttachments{ noop::vkCmdClearAttachments }; PFN_vkCmdResolveImage CmdResolveImage{ noop::vkCmdResolveImage }; - PFN_vkCmdSetEvent CmdSetEvent{ noop::vkCmdSetEvent }; - PFN_vkCmdResetEvent CmdResetEvent{ noop::vkCmdResetEvent }; - PFN_vkCmdWaitEvents CmdWaitEvents{ noop::vkCmdWaitEvents }; - PFN_vkCmdPipelineBarrier CmdPipelineBarrier{ noop::vkCmdPipelineBarrier }; - PFN_vkCmdBeginQuery CmdBeginQuery{ noop::vkCmdBeginQuery }; - PFN_vkCmdEndQuery CmdEndQuery{ noop::vkCmdEndQuery }; - PFN_vkCmdResetQueryPool CmdResetQueryPool{ noop::vkCmdResetQueryPool }; - PFN_vkCmdWriteTimestamp CmdWriteTimestamp{ noop::vkCmdWriteTimestamp }; - PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults{ noop::vkCmdCopyQueryPoolResults }; - PFN_vkCmdPushConstants CmdPushConstants{ noop::vkCmdPushConstants }; PFN_vkCmdBeginRenderPass CmdBeginRenderPass{ noop::vkCmdBeginRenderPass }; PFN_vkCmdNextSubpass CmdNextSubpass{ noop::vkCmdNextSubpass }; PFN_vkCmdEndRenderPass CmdEndRenderPass{ noop::vkCmdEndRenderPass }; - PFN_vkCmdExecuteCommands CmdExecuteCommands{ noop::vkCmdExecuteCommands }; PFN_vkBindBufferMemory2 BindBufferMemory2{ noop::vkBindBufferMemory2 }; PFN_vkBindImageMemory2 BindImageMemory2{ noop::vkBindImageMemory2 }; PFN_vkGetDeviceGroupPeerMemoryFeatures GetDeviceGroupPeerMemoryFeatures{ noop::vkGetDeviceGroupPeerMemoryFeatures }; PFN_vkCmdSetDeviceMask CmdSetDeviceMask{ noop::vkCmdSetDeviceMask }; - PFN_vkCmdDispatchBase CmdDispatchBase{ noop::vkCmdDispatchBase }; PFN_vkGetImageMemoryRequirements2 GetImageMemoryRequirements2{ noop::vkGetImageMemoryRequirements2 }; PFN_vkGetBufferMemoryRequirements2 GetBufferMemoryRequirements2{ noop::vkGetBufferMemoryRequirements2 }; PFN_vkGetImageSparseMemoryRequirements2 GetImageSparseMemoryRequirements2{ noop::vkGetImageSparseMemoryRequirements2 }; PFN_vkTrimCommandPool TrimCommandPool{ noop::vkTrimCommandPool }; PFN_vkGetDeviceQueue2 GetDeviceQueue2{ noop::vkGetDeviceQueue2 }; - PFN_vkCreateSamplerYcbcrConversion CreateSamplerYcbcrConversion{ noop::vkCreateSamplerYcbcrConversion }; - PFN_vkDestroySamplerYcbcrConversion DestroySamplerYcbcrConversion{ noop::vkDestroySamplerYcbcrConversion }; + PFN_vkCmdDispatchBase CmdDispatchBase{ noop::vkCmdDispatchBase }; PFN_vkCreateDescriptorUpdateTemplate CreateDescriptorUpdateTemplate{ noop::vkCreateDescriptorUpdateTemplate }; PFN_vkDestroyDescriptorUpdateTemplate DestroyDescriptorUpdateTemplate{ noop::vkDestroyDescriptorUpdateTemplate }; PFN_vkUpdateDescriptorSetWithTemplate UpdateDescriptorSetWithTemplate{ noop::vkUpdateDescriptorSetWithTemplate }; PFN_vkGetDescriptorSetLayoutSupport GetDescriptorSetLayoutSupport{ noop::vkGetDescriptorSetLayoutSupport }; - PFN_vkCmdDrawIndirectCount CmdDrawIndirectCount{ noop::vkCmdDrawIndirectCount }; - PFN_vkCmdDrawIndexedIndirectCount CmdDrawIndexedIndirectCount{ noop::vkCmdDrawIndexedIndirectCount }; - PFN_vkCreateRenderPass2 CreateRenderPass2{ noop::vkCreateRenderPass2 }; - PFN_vkCmdBeginRenderPass2 CmdBeginRenderPass2{ noop::vkCmdBeginRenderPass2 }; - PFN_vkCmdNextSubpass2 CmdNextSubpass2{ noop::vkCmdNextSubpass2 }; - PFN_vkCmdEndRenderPass2 CmdEndRenderPass2{ noop::vkCmdEndRenderPass2 }; + PFN_vkCreateSamplerYcbcrConversion CreateSamplerYcbcrConversion{ noop::vkCreateSamplerYcbcrConversion }; + PFN_vkDestroySamplerYcbcrConversion DestroySamplerYcbcrConversion{ noop::vkDestroySamplerYcbcrConversion }; PFN_vkResetQueryPool ResetQueryPool{ noop::vkResetQueryPool }; PFN_vkGetSemaphoreCounterValue GetSemaphoreCounterValue{ noop::vkGetSemaphoreCounterValue }; PFN_vkWaitSemaphores WaitSemaphores{ noop::vkWaitSemaphores }; @@ -1025,13 +1058,16 @@ struct VulkanDeviceTable PFN_vkGetBufferDeviceAddress GetBufferDeviceAddress{ noop::vkGetBufferDeviceAddress }; PFN_vkGetBufferOpaqueCaptureAddress GetBufferOpaqueCaptureAddress{ noop::vkGetBufferOpaqueCaptureAddress }; PFN_vkGetDeviceMemoryOpaqueCaptureAddress GetDeviceMemoryOpaqueCaptureAddress{ noop::vkGetDeviceMemoryOpaqueCaptureAddress }; + PFN_vkCmdDrawIndirectCount CmdDrawIndirectCount{ noop::vkCmdDrawIndirectCount }; + PFN_vkCmdDrawIndexedIndirectCount CmdDrawIndexedIndirectCount{ noop::vkCmdDrawIndexedIndirectCount }; + PFN_vkCreateRenderPass2 CreateRenderPass2{ noop::vkCreateRenderPass2 }; + PFN_vkCmdBeginRenderPass2 CmdBeginRenderPass2{ noop::vkCmdBeginRenderPass2 }; + PFN_vkCmdNextSubpass2 CmdNextSubpass2{ noop::vkCmdNextSubpass2 }; + PFN_vkCmdEndRenderPass2 CmdEndRenderPass2{ noop::vkCmdEndRenderPass2 }; PFN_vkCreatePrivateDataSlot CreatePrivateDataSlot{ noop::vkCreatePrivateDataSlot }; PFN_vkDestroyPrivateDataSlot DestroyPrivateDataSlot{ noop::vkDestroyPrivateDataSlot }; PFN_vkSetPrivateData SetPrivateData{ noop::vkSetPrivateData }; PFN_vkGetPrivateData GetPrivateData{ noop::vkGetPrivateData }; - PFN_vkCmdSetEvent2 CmdSetEvent2{ noop::vkCmdSetEvent2 }; - PFN_vkCmdResetEvent2 CmdResetEvent2{ noop::vkCmdResetEvent2 }; - PFN_vkCmdWaitEvents2 CmdWaitEvents2{ noop::vkCmdWaitEvents2 }; PFN_vkCmdPipelineBarrier2 CmdPipelineBarrier2{ noop::vkCmdPipelineBarrier2 }; PFN_vkCmdWriteTimestamp2 CmdWriteTimestamp2{ noop::vkCmdWriteTimestamp2 }; PFN_vkQueueSubmit2 QueueSubmit2{ noop::vkQueueSubmit2 }; @@ -1039,6 +1075,12 @@ struct VulkanDeviceTable PFN_vkCmdCopyImage2 CmdCopyImage2{ noop::vkCmdCopyImage2 }; PFN_vkCmdCopyBufferToImage2 CmdCopyBufferToImage2{ noop::vkCmdCopyBufferToImage2 }; PFN_vkCmdCopyImageToBuffer2 CmdCopyImageToBuffer2{ noop::vkCmdCopyImageToBuffer2 }; + PFN_vkGetDeviceBufferMemoryRequirements GetDeviceBufferMemoryRequirements{ noop::vkGetDeviceBufferMemoryRequirements }; + PFN_vkGetDeviceImageMemoryRequirements GetDeviceImageMemoryRequirements{ noop::vkGetDeviceImageMemoryRequirements }; + PFN_vkGetDeviceImageSparseMemoryRequirements GetDeviceImageSparseMemoryRequirements{ noop::vkGetDeviceImageSparseMemoryRequirements }; + PFN_vkCmdSetEvent2 CmdSetEvent2{ noop::vkCmdSetEvent2 }; + PFN_vkCmdResetEvent2 CmdResetEvent2{ noop::vkCmdResetEvent2 }; + PFN_vkCmdWaitEvents2 CmdWaitEvents2{ noop::vkCmdWaitEvents2 }; PFN_vkCmdBlitImage2 CmdBlitImage2{ noop::vkCmdBlitImage2 }; PFN_vkCmdResolveImage2 CmdResolveImage2{ noop::vkCmdResolveImage2 }; PFN_vkCmdBeginRendering CmdBeginRendering{ noop::vkCmdBeginRendering }; @@ -1058,28 +1100,25 @@ struct VulkanDeviceTable PFN_vkCmdSetRasterizerDiscardEnable CmdSetRasterizerDiscardEnable{ noop::vkCmdSetRasterizerDiscardEnable }; PFN_vkCmdSetDepthBiasEnable CmdSetDepthBiasEnable{ noop::vkCmdSetDepthBiasEnable }; PFN_vkCmdSetPrimitiveRestartEnable CmdSetPrimitiveRestartEnable{ noop::vkCmdSetPrimitiveRestartEnable }; - PFN_vkGetDeviceBufferMemoryRequirements GetDeviceBufferMemoryRequirements{ noop::vkGetDeviceBufferMemoryRequirements }; - PFN_vkGetDeviceImageMemoryRequirements GetDeviceImageMemoryRequirements{ noop::vkGetDeviceImageMemoryRequirements }; - PFN_vkGetDeviceImageSparseMemoryRequirements GetDeviceImageSparseMemoryRequirements{ noop::vkGetDeviceImageSparseMemoryRequirements }; - PFN_vkCmdSetLineStipple CmdSetLineStipple{ noop::vkCmdSetLineStipple }; PFN_vkMapMemory2 MapMemory2{ noop::vkMapMemory2 }; PFN_vkUnmapMemory2 UnmapMemory2{ noop::vkUnmapMemory2 }; - PFN_vkCmdBindIndexBuffer2 CmdBindIndexBuffer2{ noop::vkCmdBindIndexBuffer2 }; - PFN_vkGetRenderingAreaGranularity GetRenderingAreaGranularity{ noop::vkGetRenderingAreaGranularity }; PFN_vkGetDeviceImageSubresourceLayout GetDeviceImageSubresourceLayout{ noop::vkGetDeviceImageSubresourceLayout }; PFN_vkGetImageSubresourceLayout2 GetImageSubresourceLayout2{ noop::vkGetImageSubresourceLayout2 }; + PFN_vkCopyMemoryToImage CopyMemoryToImage{ noop::vkCopyMemoryToImage }; + PFN_vkCopyImageToMemory CopyImageToMemory{ noop::vkCopyImageToMemory }; + PFN_vkCopyImageToImage CopyImageToImage{ noop::vkCopyImageToImage }; + PFN_vkTransitionImageLayout TransitionImageLayout{ noop::vkTransitionImageLayout }; PFN_vkCmdPushDescriptorSet CmdPushDescriptorSet{ noop::vkCmdPushDescriptorSet }; PFN_vkCmdPushDescriptorSetWithTemplate CmdPushDescriptorSetWithTemplate{ noop::vkCmdPushDescriptorSetWithTemplate }; - PFN_vkCmdSetRenderingAttachmentLocations CmdSetRenderingAttachmentLocations{ noop::vkCmdSetRenderingAttachmentLocations }; - PFN_vkCmdSetRenderingInputAttachmentIndices CmdSetRenderingInputAttachmentIndices{ noop::vkCmdSetRenderingInputAttachmentIndices }; PFN_vkCmdBindDescriptorSets2 CmdBindDescriptorSets2{ noop::vkCmdBindDescriptorSets2 }; PFN_vkCmdPushConstants2 CmdPushConstants2{ noop::vkCmdPushConstants2 }; PFN_vkCmdPushDescriptorSet2 CmdPushDescriptorSet2{ noop::vkCmdPushDescriptorSet2 }; PFN_vkCmdPushDescriptorSetWithTemplate2 CmdPushDescriptorSetWithTemplate2{ noop::vkCmdPushDescriptorSetWithTemplate2 }; - PFN_vkCopyMemoryToImage CopyMemoryToImage{ noop::vkCopyMemoryToImage }; - PFN_vkCopyImageToMemory CopyImageToMemory{ noop::vkCopyImageToMemory }; - PFN_vkCopyImageToImage CopyImageToImage{ noop::vkCopyImageToImage }; - PFN_vkTransitionImageLayout TransitionImageLayout{ noop::vkTransitionImageLayout }; + PFN_vkCmdSetLineStipple CmdSetLineStipple{ noop::vkCmdSetLineStipple }; + PFN_vkCmdBindIndexBuffer2 CmdBindIndexBuffer2{ noop::vkCmdBindIndexBuffer2 }; + PFN_vkGetRenderingAreaGranularity GetRenderingAreaGranularity{ noop::vkGetRenderingAreaGranularity }; + PFN_vkCmdSetRenderingAttachmentLocations CmdSetRenderingAttachmentLocations{ noop::vkCmdSetRenderingAttachmentLocations }; + PFN_vkCmdSetRenderingInputAttachmentIndices CmdSetRenderingInputAttachmentIndices{ noop::vkCmdSetRenderingInputAttachmentIndices }; PFN_vkCreateSwapchainKHR CreateSwapchainKHR{ noop::vkCreateSwapchainKHR }; PFN_vkDestroySwapchainKHR DestroySwapchainKHR{ noop::vkDestroySwapchainKHR }; PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR{ noop::vkGetSwapchainImagesKHR }; @@ -1197,6 +1236,9 @@ struct VulkanDeviceTable PFN_vkCmdPushDescriptorSetWithTemplate2KHR CmdPushDescriptorSetWithTemplate2KHR{ noop::vkCmdPushDescriptorSetWithTemplate2KHR }; PFN_vkCmdSetDescriptorBufferOffsets2EXT CmdSetDescriptorBufferOffsets2EXT{ noop::vkCmdSetDescriptorBufferOffsets2EXT }; PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT CmdBindDescriptorBufferEmbeddedSamplers2EXT{ noop::vkCmdBindDescriptorBufferEmbeddedSamplers2EXT }; + PFN_vkCmdCopyMemoryIndirectKHR CmdCopyMemoryIndirectKHR{ noop::vkCmdCopyMemoryIndirectKHR }; + PFN_vkCmdCopyMemoryToImageIndirectKHR CmdCopyMemoryToImageIndirectKHR{ noop::vkCmdCopyMemoryToImageIndirectKHR }; + PFN_vkCmdEndRendering2KHR CmdEndRendering2KHR{ noop::vkCmdEndRendering2KHR }; PFN_vkFrameBoundaryANDROID FrameBoundaryANDROID{ noop::vkFrameBoundaryANDROID }; PFN_vkDebugMarkerSetObjectTagEXT DebugMarkerSetObjectTagEXT{ noop::vkDebugMarkerSetObjectTagEXT }; PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT{ noop::vkDebugMarkerSetObjectNameEXT }; @@ -1271,6 +1313,10 @@ struct VulkanDeviceTable PFN_vkCmdSetCheckpointNV CmdSetCheckpointNV{ noop::vkCmdSetCheckpointNV }; PFN_vkGetQueueCheckpointDataNV GetQueueCheckpointDataNV{ noop::vkGetQueueCheckpointDataNV }; PFN_vkGetQueueCheckpointData2NV GetQueueCheckpointData2NV{ noop::vkGetQueueCheckpointData2NV }; + PFN_vkSetSwapchainPresentTimingQueueSizeEXT SetSwapchainPresentTimingQueueSizeEXT{ noop::vkSetSwapchainPresentTimingQueueSizeEXT }; + PFN_vkGetSwapchainTimingPropertiesEXT GetSwapchainTimingPropertiesEXT{ noop::vkGetSwapchainTimingPropertiesEXT }; + PFN_vkGetSwapchainTimeDomainPropertiesEXT GetSwapchainTimeDomainPropertiesEXT{ noop::vkGetSwapchainTimeDomainPropertiesEXT }; + PFN_vkGetPastPresentationTimingEXT GetPastPresentationTimingEXT{ noop::vkGetPastPresentationTimingEXT }; PFN_vkInitializePerformanceApiINTEL InitializePerformanceApiINTEL{ noop::vkInitializePerformanceApiINTEL }; PFN_vkUninitializePerformanceApiINTEL UninitializePerformanceApiINTEL{ noop::vkUninitializePerformanceApiINTEL }; PFN_vkCmdSetPerformanceMarkerINTEL CmdSetPerformanceMarkerINTEL{ noop::vkCmdSetPerformanceMarkerINTEL }; @@ -1319,6 +1365,17 @@ struct VulkanDeviceTable PFN_vkCmdDispatchTileQCOM CmdDispatchTileQCOM{ noop::vkCmdDispatchTileQCOM }; PFN_vkCmdBeginPerTileExecutionQCOM CmdBeginPerTileExecutionQCOM{ noop::vkCmdBeginPerTileExecutionQCOM }; PFN_vkCmdEndPerTileExecutionQCOM CmdEndPerTileExecutionQCOM{ noop::vkCmdEndPerTileExecutionQCOM }; + PFN_vkGetDescriptorSetLayoutSizeEXT GetDescriptorSetLayoutSizeEXT{ noop::vkGetDescriptorSetLayoutSizeEXT }; + PFN_vkGetDescriptorSetLayoutBindingOffsetEXT GetDescriptorSetLayoutBindingOffsetEXT{ noop::vkGetDescriptorSetLayoutBindingOffsetEXT }; + PFN_vkGetDescriptorEXT GetDescriptorEXT{ noop::vkGetDescriptorEXT }; + PFN_vkCmdBindDescriptorBuffersEXT CmdBindDescriptorBuffersEXT{ noop::vkCmdBindDescriptorBuffersEXT }; + PFN_vkCmdSetDescriptorBufferOffsetsEXT CmdSetDescriptorBufferOffsetsEXT{ noop::vkCmdSetDescriptorBufferOffsetsEXT }; + PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT CmdBindDescriptorBufferEmbeddedSamplersEXT{ noop::vkCmdBindDescriptorBufferEmbeddedSamplersEXT }; + PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT GetBufferOpaqueCaptureDescriptorDataEXT{ noop::vkGetBufferOpaqueCaptureDescriptorDataEXT }; + PFN_vkGetImageOpaqueCaptureDescriptorDataEXT GetImageOpaqueCaptureDescriptorDataEXT{ noop::vkGetImageOpaqueCaptureDescriptorDataEXT }; + PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT GetImageViewOpaqueCaptureDescriptorDataEXT{ noop::vkGetImageViewOpaqueCaptureDescriptorDataEXT }; + PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT GetSamplerOpaqueCaptureDescriptorDataEXT{ noop::vkGetSamplerOpaqueCaptureDescriptorDataEXT }; + PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT GetAccelerationStructureOpaqueCaptureDescriptorDataEXT{ noop::vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT }; PFN_vkCmdSetFragmentShadingRateEnumNV CmdSetFragmentShadingRateEnumNV{ noop::vkCmdSetFragmentShadingRateEnumNV }; PFN_vkGetDeviceFaultInfoEXT GetDeviceFaultInfoEXT{ noop::vkGetDeviceFaultInfoEXT }; PFN_vkCmdSetVertexInputEXT CmdSetVertexInputEXT{ noop::vkCmdSetVertexInputEXT }; @@ -1410,8 +1467,19 @@ struct VulkanDeviceTable PFN_vkSetLatencyMarkerNV SetLatencyMarkerNV{ noop::vkSetLatencyMarkerNV }; PFN_vkGetLatencyTimingsNV GetLatencyTimingsNV{ noop::vkGetLatencyTimingsNV }; PFN_vkQueueNotifyOutOfBandNV QueueNotifyOutOfBandNV{ noop::vkQueueNotifyOutOfBandNV }; + PFN_vkCreateDataGraphPipelinesARM CreateDataGraphPipelinesARM{ noop::vkCreateDataGraphPipelinesARM }; + PFN_vkCreateDataGraphPipelineSessionARM CreateDataGraphPipelineSessionARM{ noop::vkCreateDataGraphPipelineSessionARM }; + PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM GetDataGraphPipelineSessionBindPointRequirementsARM{ noop::vkGetDataGraphPipelineSessionBindPointRequirementsARM }; + PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM GetDataGraphPipelineSessionMemoryRequirementsARM{ noop::vkGetDataGraphPipelineSessionMemoryRequirementsARM }; + PFN_vkBindDataGraphPipelineSessionMemoryARM BindDataGraphPipelineSessionMemoryARM{ noop::vkBindDataGraphPipelineSessionMemoryARM }; + PFN_vkDestroyDataGraphPipelineSessionARM DestroyDataGraphPipelineSessionARM{ noop::vkDestroyDataGraphPipelineSessionARM }; + PFN_vkCmdDispatchDataGraphARM CmdDispatchDataGraphARM{ noop::vkCmdDispatchDataGraphARM }; + PFN_vkGetDataGraphPipelineAvailablePropertiesARM GetDataGraphPipelineAvailablePropertiesARM{ noop::vkGetDataGraphPipelineAvailablePropertiesARM }; + PFN_vkGetDataGraphPipelinePropertiesARM GetDataGraphPipelinePropertiesARM{ noop::vkGetDataGraphPipelinePropertiesARM }; PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT CmdSetAttachmentFeedbackLoopEnableEXT{ noop::vkCmdSetAttachmentFeedbackLoopEnableEXT }; PFN_vkCmdBindTileMemoryQCOM CmdBindTileMemoryQCOM{ noop::vkCmdBindTileMemoryQCOM }; + PFN_vkCmdDecompressMemoryEXT CmdDecompressMemoryEXT{ noop::vkCmdDecompressMemoryEXT }; + PFN_vkCmdDecompressMemoryIndirectCountEXT CmdDecompressMemoryIndirectCountEXT{ noop::vkCmdDecompressMemoryIndirectCountEXT }; PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV GetPartitionedAccelerationStructuresBuildSizesNV{ noop::vkGetPartitionedAccelerationStructuresBuildSizesNV }; PFN_vkCmdBuildPartitionedAccelerationStructuresNV CmdBuildPartitionedAccelerationStructuresNV{ noop::vkCmdBuildPartitionedAccelerationStructuresNV }; PFN_vkGetGeneratedCommandsMemoryRequirementsEXT GetGeneratedCommandsMemoryRequirementsEXT{ noop::vkGetGeneratedCommandsMemoryRequirementsEXT }; @@ -1426,6 +1494,8 @@ struct VulkanDeviceTable PFN_vkGetMemoryMetalHandleEXT GetMemoryMetalHandleEXT{ noop::vkGetMemoryMetalHandleEXT }; PFN_vkGetMemoryMetalHandlePropertiesEXT GetMemoryMetalHandlePropertiesEXT{ noop::vkGetMemoryMetalHandlePropertiesEXT }; PFN_vkCmdEndRendering2EXT CmdEndRendering2EXT{ noop::vkCmdEndRendering2EXT }; + PFN_vkCmdBeginCustomResolveEXT CmdBeginCustomResolveEXT{ noop::vkCmdBeginCustomResolveEXT }; + PFN_vkCmdSetComputeOccupancyPriorityNV CmdSetComputeOccupancyPriorityNV{ noop::vkCmdSetComputeOccupancyPriorityNV }; PFN_vkCreateAccelerationStructureKHR CreateAccelerationStructureKHR{ noop::vkCreateAccelerationStructureKHR }; PFN_vkDestroyAccelerationStructureKHR DestroyAccelerationStructureKHR{ noop::vkDestroyAccelerationStructureKHR }; PFN_vkCmdBuildAccelerationStructuresKHR CmdBuildAccelerationStructuresKHR{ noop::vkCmdBuildAccelerationStructuresKHR }; @@ -1574,7 +1644,10 @@ template LoadVulkanFunction(gpa, instance, "vkGetPhysicalDeviceScreenPresentationSupportQNX", &table->GetPhysicalDeviceScreenPresentationSupportQNX); LoadVulkanFunction(gpa, instance, "vkGetPhysicalDeviceOpticalFlowImageFormatsNV", &table->GetPhysicalDeviceOpticalFlowImageFormatsNV); LoadVulkanFunction(gpa, instance, "vkGetPhysicalDeviceCooperativeVectorPropertiesNV", &table->GetPhysicalDeviceCooperativeVectorPropertiesNV); + LoadVulkanFunction(gpa, instance, "vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM", &table->GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM); + LoadVulkanFunction(gpa, instance, "vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM", &table->GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM); LoadVulkanFunction(gpa, instance, "vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV", &table->GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV); + LoadVulkanFunction(gpa, instance, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM", &table->EnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM); } [[maybe_unused]] static void LoadVulkanDeviceTable(PFN_vkGetDeviceProcAddr gpa, VkDevice device, VulkanDeviceTable* table) @@ -1607,30 +1680,50 @@ template LoadVulkanFunction(gpa, device, "vkWaitForFences", &table->WaitForFences); LoadVulkanFunction(gpa, device, "vkCreateSemaphore", &table->CreateSemaphore); LoadVulkanFunction(gpa, device, "vkDestroySemaphore", &table->DestroySemaphore); - LoadVulkanFunction(gpa, device, "vkCreateEvent", &table->CreateEvent); - LoadVulkanFunction(gpa, device, "vkDestroyEvent", &table->DestroyEvent); - LoadVulkanFunction(gpa, device, "vkGetEventStatus", &table->GetEventStatus); - LoadVulkanFunction(gpa, device, "vkSetEvent", &table->SetEvent); - LoadVulkanFunction(gpa, device, "vkResetEvent", &table->ResetEvent); LoadVulkanFunction(gpa, device, "vkCreateQueryPool", &table->CreateQueryPool); LoadVulkanFunction(gpa, device, "vkDestroyQueryPool", &table->DestroyQueryPool); LoadVulkanFunction(gpa, device, "vkGetQueryPoolResults", &table->GetQueryPoolResults); LoadVulkanFunction(gpa, device, "vkCreateBuffer", &table->CreateBuffer); LoadVulkanFunction(gpa, device, "vkDestroyBuffer", &table->DestroyBuffer); - LoadVulkanFunction(gpa, device, "vkCreateBufferView", &table->CreateBufferView); - LoadVulkanFunction(gpa, device, "vkDestroyBufferView", &table->DestroyBufferView); LoadVulkanFunction(gpa, device, "vkCreateImage", &table->CreateImage); LoadVulkanFunction(gpa, device, "vkDestroyImage", &table->DestroyImage); LoadVulkanFunction(gpa, device, "vkGetImageSubresourceLayout", &table->GetImageSubresourceLayout); LoadVulkanFunction(gpa, device, "vkCreateImageView", &table->CreateImageView); LoadVulkanFunction(gpa, device, "vkDestroyImageView", &table->DestroyImageView); + LoadVulkanFunction(gpa, device, "vkCreateCommandPool", &table->CreateCommandPool); + LoadVulkanFunction(gpa, device, "vkDestroyCommandPool", &table->DestroyCommandPool); + LoadVulkanFunction(gpa, device, "vkResetCommandPool", &table->ResetCommandPool); + LoadVulkanFunction(gpa, device, "vkAllocateCommandBuffers", &table->AllocateCommandBuffers); + LoadVulkanFunction(gpa, device, "vkFreeCommandBuffers", &table->FreeCommandBuffers); + LoadVulkanFunction(gpa, device, "vkBeginCommandBuffer", &table->BeginCommandBuffer); + LoadVulkanFunction(gpa, device, "vkEndCommandBuffer", &table->EndCommandBuffer); + LoadVulkanFunction(gpa, device, "vkResetCommandBuffer", &table->ResetCommandBuffer); + LoadVulkanFunction(gpa, device, "vkCmdCopyBuffer", &table->CmdCopyBuffer); + LoadVulkanFunction(gpa, device, "vkCmdCopyImage", &table->CmdCopyImage); + LoadVulkanFunction(gpa, device, "vkCmdCopyBufferToImage", &table->CmdCopyBufferToImage); + LoadVulkanFunction(gpa, device, "vkCmdCopyImageToBuffer", &table->CmdCopyImageToBuffer); + LoadVulkanFunction(gpa, device, "vkCmdUpdateBuffer", &table->CmdUpdateBuffer); + LoadVulkanFunction(gpa, device, "vkCmdFillBuffer", &table->CmdFillBuffer); + LoadVulkanFunction(gpa, device, "vkCmdPipelineBarrier", &table->CmdPipelineBarrier); + LoadVulkanFunction(gpa, device, "vkCmdBeginQuery", &table->CmdBeginQuery); + LoadVulkanFunction(gpa, device, "vkCmdEndQuery", &table->CmdEndQuery); + LoadVulkanFunction(gpa, device, "vkCmdResetQueryPool", &table->CmdResetQueryPool); + LoadVulkanFunction(gpa, device, "vkCmdWriteTimestamp", &table->CmdWriteTimestamp); + LoadVulkanFunction(gpa, device, "vkCmdCopyQueryPoolResults", &table->CmdCopyQueryPoolResults); + LoadVulkanFunction(gpa, device, "vkCmdExecuteCommands", &table->CmdExecuteCommands); + LoadVulkanFunction(gpa, device, "vkCreateEvent", &table->CreateEvent); + LoadVulkanFunction(gpa, device, "vkDestroyEvent", &table->DestroyEvent); + LoadVulkanFunction(gpa, device, "vkGetEventStatus", &table->GetEventStatus); + LoadVulkanFunction(gpa, device, "vkSetEvent", &table->SetEvent); + LoadVulkanFunction(gpa, device, "vkResetEvent", &table->ResetEvent); + LoadVulkanFunction(gpa, device, "vkCreateBufferView", &table->CreateBufferView); + LoadVulkanFunction(gpa, device, "vkDestroyBufferView", &table->DestroyBufferView); LoadVulkanFunction(gpa, device, "vkCreateShaderModule", &table->CreateShaderModule); LoadVulkanFunction(gpa, device, "vkDestroyShaderModule", &table->DestroyShaderModule); LoadVulkanFunction(gpa, device, "vkCreatePipelineCache", &table->CreatePipelineCache); LoadVulkanFunction(gpa, device, "vkDestroyPipelineCache", &table->DestroyPipelineCache); LoadVulkanFunction(gpa, device, "vkGetPipelineCacheData", &table->GetPipelineCacheData); LoadVulkanFunction(gpa, device, "vkMergePipelineCaches", &table->MergePipelineCaches); - LoadVulkanFunction(gpa, device, "vkCreateGraphicsPipelines", &table->CreateGraphicsPipelines); LoadVulkanFunction(gpa, device, "vkCreateComputePipelines", &table->CreateComputePipelines); LoadVulkanFunction(gpa, device, "vkDestroyPipeline", &table->DestroyPipeline); LoadVulkanFunction(gpa, device, "vkCreatePipelineLayout", &table->CreatePipelineLayout); @@ -1645,20 +1738,21 @@ template LoadVulkanFunction(gpa, device, "vkAllocateDescriptorSets", &table->AllocateDescriptorSets); LoadVulkanFunction(gpa, device, "vkFreeDescriptorSets", &table->FreeDescriptorSets); LoadVulkanFunction(gpa, device, "vkUpdateDescriptorSets", &table->UpdateDescriptorSets); + LoadVulkanFunction(gpa, device, "vkCmdBindPipeline", &table->CmdBindPipeline); + LoadVulkanFunction(gpa, device, "vkCmdBindDescriptorSets", &table->CmdBindDescriptorSets); + LoadVulkanFunction(gpa, device, "vkCmdClearColorImage", &table->CmdClearColorImage); + LoadVulkanFunction(gpa, device, "vkCmdDispatch", &table->CmdDispatch); + LoadVulkanFunction(gpa, device, "vkCmdDispatchIndirect", &table->CmdDispatchIndirect); + LoadVulkanFunction(gpa, device, "vkCmdSetEvent", &table->CmdSetEvent); + LoadVulkanFunction(gpa, device, "vkCmdResetEvent", &table->CmdResetEvent); + LoadVulkanFunction(gpa, device, "vkCmdWaitEvents", &table->CmdWaitEvents); + LoadVulkanFunction(gpa, device, "vkCmdPushConstants", &table->CmdPushConstants); + LoadVulkanFunction(gpa, device, "vkCreateGraphicsPipelines", &table->CreateGraphicsPipelines); LoadVulkanFunction(gpa, device, "vkCreateFramebuffer", &table->CreateFramebuffer); LoadVulkanFunction(gpa, device, "vkDestroyFramebuffer", &table->DestroyFramebuffer); LoadVulkanFunction(gpa, device, "vkCreateRenderPass", &table->CreateRenderPass); LoadVulkanFunction(gpa, device, "vkDestroyRenderPass", &table->DestroyRenderPass); LoadVulkanFunction(gpa, device, "vkGetRenderAreaGranularity", &table->GetRenderAreaGranularity); - LoadVulkanFunction(gpa, device, "vkCreateCommandPool", &table->CreateCommandPool); - LoadVulkanFunction(gpa, device, "vkDestroyCommandPool", &table->DestroyCommandPool); - LoadVulkanFunction(gpa, device, "vkResetCommandPool", &table->ResetCommandPool); - LoadVulkanFunction(gpa, device, "vkAllocateCommandBuffers", &table->AllocateCommandBuffers); - LoadVulkanFunction(gpa, device, "vkFreeCommandBuffers", &table->FreeCommandBuffers); - LoadVulkanFunction(gpa, device, "vkBeginCommandBuffer", &table->BeginCommandBuffer); - LoadVulkanFunction(gpa, device, "vkEndCommandBuffer", &table->EndCommandBuffer); - LoadVulkanFunction(gpa, device, "vkResetCommandBuffer", &table->ResetCommandBuffer); - LoadVulkanFunction(gpa, device, "vkCmdBindPipeline", &table->CmdBindPipeline); LoadVulkanFunction(gpa, device, "vkCmdSetViewport", &table->CmdSetViewport); LoadVulkanFunction(gpa, device, "vkCmdSetScissor", &table->CmdSetScissor); LoadVulkanFunction(gpa, device, "vkCmdSetLineWidth", &table->CmdSetLineWidth); @@ -1668,62 +1762,35 @@ template LoadVulkanFunction(gpa, device, "vkCmdSetStencilCompareMask", &table->CmdSetStencilCompareMask); LoadVulkanFunction(gpa, device, "vkCmdSetStencilWriteMask", &table->CmdSetStencilWriteMask); LoadVulkanFunction(gpa, device, "vkCmdSetStencilReference", &table->CmdSetStencilReference); - LoadVulkanFunction(gpa, device, "vkCmdBindDescriptorSets", &table->CmdBindDescriptorSets); LoadVulkanFunction(gpa, device, "vkCmdBindIndexBuffer", &table->CmdBindIndexBuffer); LoadVulkanFunction(gpa, device, "vkCmdBindVertexBuffers", &table->CmdBindVertexBuffers); LoadVulkanFunction(gpa, device, "vkCmdDraw", &table->CmdDraw); LoadVulkanFunction(gpa, device, "vkCmdDrawIndexed", &table->CmdDrawIndexed); LoadVulkanFunction(gpa, device, "vkCmdDrawIndirect", &table->CmdDrawIndirect); LoadVulkanFunction(gpa, device, "vkCmdDrawIndexedIndirect", &table->CmdDrawIndexedIndirect); - LoadVulkanFunction(gpa, device, "vkCmdDispatch", &table->CmdDispatch); - LoadVulkanFunction(gpa, device, "vkCmdDispatchIndirect", &table->CmdDispatchIndirect); - LoadVulkanFunction(gpa, device, "vkCmdCopyBuffer", &table->CmdCopyBuffer); - LoadVulkanFunction(gpa, device, "vkCmdCopyImage", &table->CmdCopyImage); LoadVulkanFunction(gpa, device, "vkCmdBlitImage", &table->CmdBlitImage); - LoadVulkanFunction(gpa, device, "vkCmdCopyBufferToImage", &table->CmdCopyBufferToImage); - LoadVulkanFunction(gpa, device, "vkCmdCopyImageToBuffer", &table->CmdCopyImageToBuffer); - LoadVulkanFunction(gpa, device, "vkCmdUpdateBuffer", &table->CmdUpdateBuffer); - LoadVulkanFunction(gpa, device, "vkCmdFillBuffer", &table->CmdFillBuffer); - LoadVulkanFunction(gpa, device, "vkCmdClearColorImage", &table->CmdClearColorImage); LoadVulkanFunction(gpa, device, "vkCmdClearDepthStencilImage", &table->CmdClearDepthStencilImage); LoadVulkanFunction(gpa, device, "vkCmdClearAttachments", &table->CmdClearAttachments); LoadVulkanFunction(gpa, device, "vkCmdResolveImage", &table->CmdResolveImage); - LoadVulkanFunction(gpa, device, "vkCmdSetEvent", &table->CmdSetEvent); - LoadVulkanFunction(gpa, device, "vkCmdResetEvent", &table->CmdResetEvent); - LoadVulkanFunction(gpa, device, "vkCmdWaitEvents", &table->CmdWaitEvents); - LoadVulkanFunction(gpa, device, "vkCmdPipelineBarrier", &table->CmdPipelineBarrier); - LoadVulkanFunction(gpa, device, "vkCmdBeginQuery", &table->CmdBeginQuery); - LoadVulkanFunction(gpa, device, "vkCmdEndQuery", &table->CmdEndQuery); - LoadVulkanFunction(gpa, device, "vkCmdResetQueryPool", &table->CmdResetQueryPool); - LoadVulkanFunction(gpa, device, "vkCmdWriteTimestamp", &table->CmdWriteTimestamp); - LoadVulkanFunction(gpa, device, "vkCmdCopyQueryPoolResults", &table->CmdCopyQueryPoolResults); - LoadVulkanFunction(gpa, device, "vkCmdPushConstants", &table->CmdPushConstants); LoadVulkanFunction(gpa, device, "vkCmdBeginRenderPass", &table->CmdBeginRenderPass); LoadVulkanFunction(gpa, device, "vkCmdNextSubpass", &table->CmdNextSubpass); LoadVulkanFunction(gpa, device, "vkCmdEndRenderPass", &table->CmdEndRenderPass); - LoadVulkanFunction(gpa, device, "vkCmdExecuteCommands", &table->CmdExecuteCommands); LoadVulkanFunction(gpa, device, "vkBindBufferMemory2", &table->BindBufferMemory2); LoadVulkanFunction(gpa, device, "vkBindImageMemory2", &table->BindImageMemory2); LoadVulkanFunction(gpa, device, "vkGetDeviceGroupPeerMemoryFeatures", &table->GetDeviceGroupPeerMemoryFeatures); LoadVulkanFunction(gpa, device, "vkCmdSetDeviceMask", &table->CmdSetDeviceMask); - LoadVulkanFunction(gpa, device, "vkCmdDispatchBase", &table->CmdDispatchBase); LoadVulkanFunction(gpa, device, "vkGetImageMemoryRequirements2", &table->GetImageMemoryRequirements2); LoadVulkanFunction(gpa, device, "vkGetBufferMemoryRequirements2", &table->GetBufferMemoryRequirements2); LoadVulkanFunction(gpa, device, "vkGetImageSparseMemoryRequirements2", &table->GetImageSparseMemoryRequirements2); LoadVulkanFunction(gpa, device, "vkTrimCommandPool", &table->TrimCommandPool); LoadVulkanFunction(gpa, device, "vkGetDeviceQueue2", &table->GetDeviceQueue2); - LoadVulkanFunction(gpa, device, "vkCreateSamplerYcbcrConversion", &table->CreateSamplerYcbcrConversion); - LoadVulkanFunction(gpa, device, "vkDestroySamplerYcbcrConversion", &table->DestroySamplerYcbcrConversion); + LoadVulkanFunction(gpa, device, "vkCmdDispatchBase", &table->CmdDispatchBase); LoadVulkanFunction(gpa, device, "vkCreateDescriptorUpdateTemplate", &table->CreateDescriptorUpdateTemplate); LoadVulkanFunction(gpa, device, "vkDestroyDescriptorUpdateTemplate", &table->DestroyDescriptorUpdateTemplate); LoadVulkanFunction(gpa, device, "vkUpdateDescriptorSetWithTemplate", &table->UpdateDescriptorSetWithTemplate); LoadVulkanFunction(gpa, device, "vkGetDescriptorSetLayoutSupport", &table->GetDescriptorSetLayoutSupport); - LoadVulkanFunction(gpa, device, "vkCmdDrawIndirectCount", &table->CmdDrawIndirectCount); - LoadVulkanFunction(gpa, device, "vkCmdDrawIndexedIndirectCount", &table->CmdDrawIndexedIndirectCount); - LoadVulkanFunction(gpa, device, "vkCreateRenderPass2", &table->CreateRenderPass2); - LoadVulkanFunction(gpa, device, "vkCmdBeginRenderPass2", &table->CmdBeginRenderPass2); - LoadVulkanFunction(gpa, device, "vkCmdNextSubpass2", &table->CmdNextSubpass2); - LoadVulkanFunction(gpa, device, "vkCmdEndRenderPass2", &table->CmdEndRenderPass2); + LoadVulkanFunction(gpa, device, "vkCreateSamplerYcbcrConversion", &table->CreateSamplerYcbcrConversion); + LoadVulkanFunction(gpa, device, "vkDestroySamplerYcbcrConversion", &table->DestroySamplerYcbcrConversion); LoadVulkanFunction(gpa, device, "vkResetQueryPool", &table->ResetQueryPool); LoadVulkanFunction(gpa, device, "vkGetSemaphoreCounterValue", &table->GetSemaphoreCounterValue); LoadVulkanFunction(gpa, device, "vkWaitSemaphores", &table->WaitSemaphores); @@ -1731,13 +1798,16 @@ template LoadVulkanFunction(gpa, device, "vkGetBufferDeviceAddress", &table->GetBufferDeviceAddress); LoadVulkanFunction(gpa, device, "vkGetBufferOpaqueCaptureAddress", &table->GetBufferOpaqueCaptureAddress); LoadVulkanFunction(gpa, device, "vkGetDeviceMemoryOpaqueCaptureAddress", &table->GetDeviceMemoryOpaqueCaptureAddress); + LoadVulkanFunction(gpa, device, "vkCmdDrawIndirectCount", &table->CmdDrawIndirectCount); + LoadVulkanFunction(gpa, device, "vkCmdDrawIndexedIndirectCount", &table->CmdDrawIndexedIndirectCount); + LoadVulkanFunction(gpa, device, "vkCreateRenderPass2", &table->CreateRenderPass2); + LoadVulkanFunction(gpa, device, "vkCmdBeginRenderPass2", &table->CmdBeginRenderPass2); + LoadVulkanFunction(gpa, device, "vkCmdNextSubpass2", &table->CmdNextSubpass2); + LoadVulkanFunction(gpa, device, "vkCmdEndRenderPass2", &table->CmdEndRenderPass2); LoadVulkanFunction(gpa, device, "vkCreatePrivateDataSlot", &table->CreatePrivateDataSlot); LoadVulkanFunction(gpa, device, "vkDestroyPrivateDataSlot", &table->DestroyPrivateDataSlot); LoadVulkanFunction(gpa, device, "vkSetPrivateData", &table->SetPrivateData); LoadVulkanFunction(gpa, device, "vkGetPrivateData", &table->GetPrivateData); - LoadVulkanFunction(gpa, device, "vkCmdSetEvent2", &table->CmdSetEvent2); - LoadVulkanFunction(gpa, device, "vkCmdResetEvent2", &table->CmdResetEvent2); - LoadVulkanFunction(gpa, device, "vkCmdWaitEvents2", &table->CmdWaitEvents2); LoadVulkanFunction(gpa, device, "vkCmdPipelineBarrier2", &table->CmdPipelineBarrier2); LoadVulkanFunction(gpa, device, "vkCmdWriteTimestamp2", &table->CmdWriteTimestamp2); LoadVulkanFunction(gpa, device, "vkQueueSubmit2", &table->QueueSubmit2); @@ -1745,6 +1815,12 @@ template LoadVulkanFunction(gpa, device, "vkCmdCopyImage2", &table->CmdCopyImage2); LoadVulkanFunction(gpa, device, "vkCmdCopyBufferToImage2", &table->CmdCopyBufferToImage2); LoadVulkanFunction(gpa, device, "vkCmdCopyImageToBuffer2", &table->CmdCopyImageToBuffer2); + LoadVulkanFunction(gpa, device, "vkGetDeviceBufferMemoryRequirements", &table->GetDeviceBufferMemoryRequirements); + LoadVulkanFunction(gpa, device, "vkGetDeviceImageMemoryRequirements", &table->GetDeviceImageMemoryRequirements); + LoadVulkanFunction(gpa, device, "vkGetDeviceImageSparseMemoryRequirements", &table->GetDeviceImageSparseMemoryRequirements); + LoadVulkanFunction(gpa, device, "vkCmdSetEvent2", &table->CmdSetEvent2); + LoadVulkanFunction(gpa, device, "vkCmdResetEvent2", &table->CmdResetEvent2); + LoadVulkanFunction(gpa, device, "vkCmdWaitEvents2", &table->CmdWaitEvents2); LoadVulkanFunction(gpa, device, "vkCmdBlitImage2", &table->CmdBlitImage2); LoadVulkanFunction(gpa, device, "vkCmdResolveImage2", &table->CmdResolveImage2); LoadVulkanFunction(gpa, device, "vkCmdBeginRendering", &table->CmdBeginRendering); @@ -1764,28 +1840,25 @@ template LoadVulkanFunction(gpa, device, "vkCmdSetRasterizerDiscardEnable", &table->CmdSetRasterizerDiscardEnable); LoadVulkanFunction(gpa, device, "vkCmdSetDepthBiasEnable", &table->CmdSetDepthBiasEnable); LoadVulkanFunction(gpa, device, "vkCmdSetPrimitiveRestartEnable", &table->CmdSetPrimitiveRestartEnable); - LoadVulkanFunction(gpa, device, "vkGetDeviceBufferMemoryRequirements", &table->GetDeviceBufferMemoryRequirements); - LoadVulkanFunction(gpa, device, "vkGetDeviceImageMemoryRequirements", &table->GetDeviceImageMemoryRequirements); - LoadVulkanFunction(gpa, device, "vkGetDeviceImageSparseMemoryRequirements", &table->GetDeviceImageSparseMemoryRequirements); - LoadVulkanFunction(gpa, device, "vkCmdSetLineStipple", &table->CmdSetLineStipple); LoadVulkanFunction(gpa, device, "vkMapMemory2", &table->MapMemory2); LoadVulkanFunction(gpa, device, "vkUnmapMemory2", &table->UnmapMemory2); - LoadVulkanFunction(gpa, device, "vkCmdBindIndexBuffer2", &table->CmdBindIndexBuffer2); - LoadVulkanFunction(gpa, device, "vkGetRenderingAreaGranularity", &table->GetRenderingAreaGranularity); LoadVulkanFunction(gpa, device, "vkGetDeviceImageSubresourceLayout", &table->GetDeviceImageSubresourceLayout); LoadVulkanFunction(gpa, device, "vkGetImageSubresourceLayout2", &table->GetImageSubresourceLayout2); + LoadVulkanFunction(gpa, device, "vkCopyMemoryToImage", &table->CopyMemoryToImage); + LoadVulkanFunction(gpa, device, "vkCopyImageToMemory", &table->CopyImageToMemory); + LoadVulkanFunction(gpa, device, "vkCopyImageToImage", &table->CopyImageToImage); + LoadVulkanFunction(gpa, device, "vkTransitionImageLayout", &table->TransitionImageLayout); LoadVulkanFunction(gpa, device, "vkCmdPushDescriptorSet", &table->CmdPushDescriptorSet); LoadVulkanFunction(gpa, device, "vkCmdPushDescriptorSetWithTemplate", &table->CmdPushDescriptorSetWithTemplate); - LoadVulkanFunction(gpa, device, "vkCmdSetRenderingAttachmentLocations", &table->CmdSetRenderingAttachmentLocations); - LoadVulkanFunction(gpa, device, "vkCmdSetRenderingInputAttachmentIndices", &table->CmdSetRenderingInputAttachmentIndices); LoadVulkanFunction(gpa, device, "vkCmdBindDescriptorSets2", &table->CmdBindDescriptorSets2); LoadVulkanFunction(gpa, device, "vkCmdPushConstants2", &table->CmdPushConstants2); LoadVulkanFunction(gpa, device, "vkCmdPushDescriptorSet2", &table->CmdPushDescriptorSet2); LoadVulkanFunction(gpa, device, "vkCmdPushDescriptorSetWithTemplate2", &table->CmdPushDescriptorSetWithTemplate2); - LoadVulkanFunction(gpa, device, "vkCopyMemoryToImage", &table->CopyMemoryToImage); - LoadVulkanFunction(gpa, device, "vkCopyImageToMemory", &table->CopyImageToMemory); - LoadVulkanFunction(gpa, device, "vkCopyImageToImage", &table->CopyImageToImage); - LoadVulkanFunction(gpa, device, "vkTransitionImageLayout", &table->TransitionImageLayout); + LoadVulkanFunction(gpa, device, "vkCmdSetLineStipple", &table->CmdSetLineStipple); + LoadVulkanFunction(gpa, device, "vkCmdBindIndexBuffer2", &table->CmdBindIndexBuffer2); + LoadVulkanFunction(gpa, device, "vkGetRenderingAreaGranularity", &table->GetRenderingAreaGranularity); + LoadVulkanFunction(gpa, device, "vkCmdSetRenderingAttachmentLocations", &table->CmdSetRenderingAttachmentLocations); + LoadVulkanFunction(gpa, device, "vkCmdSetRenderingInputAttachmentIndices", &table->CmdSetRenderingInputAttachmentIndices); LoadVulkanFunction(gpa, device, "vkCreateSwapchainKHR", &table->CreateSwapchainKHR); LoadVulkanFunction(gpa, device, "vkDestroySwapchainKHR", &table->DestroySwapchainKHR); LoadVulkanFunction(gpa, device, "vkGetSwapchainImagesKHR", &table->GetSwapchainImagesKHR); @@ -1903,6 +1976,9 @@ template LoadVulkanFunction(gpa, device, "vkCmdPushDescriptorSetWithTemplate2KHR", &table->CmdPushDescriptorSetWithTemplate2KHR); LoadVulkanFunction(gpa, device, "vkCmdSetDescriptorBufferOffsets2EXT", &table->CmdSetDescriptorBufferOffsets2EXT); LoadVulkanFunction(gpa, device, "vkCmdBindDescriptorBufferEmbeddedSamplers2EXT", &table->CmdBindDescriptorBufferEmbeddedSamplers2EXT); + LoadVulkanFunction(gpa, device, "vkCmdCopyMemoryIndirectKHR", &table->CmdCopyMemoryIndirectKHR); + LoadVulkanFunction(gpa, device, "vkCmdCopyMemoryToImageIndirectKHR", &table->CmdCopyMemoryToImageIndirectKHR); + LoadVulkanFunction(gpa, device, "vkCmdEndRendering2KHR", &table->CmdEndRendering2KHR); LoadVulkanFunction(gpa, device, "vkFrameBoundaryANDROID", &table->FrameBoundaryANDROID); LoadVulkanFunction(gpa, device, "vkDebugMarkerSetObjectTagEXT", &table->DebugMarkerSetObjectTagEXT); LoadVulkanFunction(gpa, device, "vkDebugMarkerSetObjectNameEXT", &table->DebugMarkerSetObjectNameEXT); @@ -1977,6 +2053,10 @@ template LoadVulkanFunction(gpa, device, "vkCmdSetCheckpointNV", &table->CmdSetCheckpointNV); LoadVulkanFunction(gpa, device, "vkGetQueueCheckpointDataNV", &table->GetQueueCheckpointDataNV); LoadVulkanFunction(gpa, device, "vkGetQueueCheckpointData2NV", &table->GetQueueCheckpointData2NV); + LoadVulkanFunction(gpa, device, "vkSetSwapchainPresentTimingQueueSizeEXT", &table->SetSwapchainPresentTimingQueueSizeEXT); + LoadVulkanFunction(gpa, device, "vkGetSwapchainTimingPropertiesEXT", &table->GetSwapchainTimingPropertiesEXT); + LoadVulkanFunction(gpa, device, "vkGetSwapchainTimeDomainPropertiesEXT", &table->GetSwapchainTimeDomainPropertiesEXT); + LoadVulkanFunction(gpa, device, "vkGetPastPresentationTimingEXT", &table->GetPastPresentationTimingEXT); LoadVulkanFunction(gpa, device, "vkInitializePerformanceApiINTEL", &table->InitializePerformanceApiINTEL); LoadVulkanFunction(gpa, device, "vkUninitializePerformanceApiINTEL", &table->UninitializePerformanceApiINTEL); LoadVulkanFunction(gpa, device, "vkCmdSetPerformanceMarkerINTEL", &table->CmdSetPerformanceMarkerINTEL); @@ -2025,6 +2105,17 @@ template LoadVulkanFunction(gpa, device, "vkCmdDispatchTileQCOM", &table->CmdDispatchTileQCOM); LoadVulkanFunction(gpa, device, "vkCmdBeginPerTileExecutionQCOM", &table->CmdBeginPerTileExecutionQCOM); LoadVulkanFunction(gpa, device, "vkCmdEndPerTileExecutionQCOM", &table->CmdEndPerTileExecutionQCOM); + LoadVulkanFunction(gpa, device, "vkGetDescriptorSetLayoutSizeEXT", &table->GetDescriptorSetLayoutSizeEXT); + LoadVulkanFunction(gpa, device, "vkGetDescriptorSetLayoutBindingOffsetEXT", &table->GetDescriptorSetLayoutBindingOffsetEXT); + LoadVulkanFunction(gpa, device, "vkGetDescriptorEXT", &table->GetDescriptorEXT); + LoadVulkanFunction(gpa, device, "vkCmdBindDescriptorBuffersEXT", &table->CmdBindDescriptorBuffersEXT); + LoadVulkanFunction(gpa, device, "vkCmdSetDescriptorBufferOffsetsEXT", &table->CmdSetDescriptorBufferOffsetsEXT); + LoadVulkanFunction(gpa, device, "vkCmdBindDescriptorBufferEmbeddedSamplersEXT", &table->CmdBindDescriptorBufferEmbeddedSamplersEXT); + LoadVulkanFunction(gpa, device, "vkGetBufferOpaqueCaptureDescriptorDataEXT", &table->GetBufferOpaqueCaptureDescriptorDataEXT); + LoadVulkanFunction(gpa, device, "vkGetImageOpaqueCaptureDescriptorDataEXT", &table->GetImageOpaqueCaptureDescriptorDataEXT); + LoadVulkanFunction(gpa, device, "vkGetImageViewOpaqueCaptureDescriptorDataEXT", &table->GetImageViewOpaqueCaptureDescriptorDataEXT); + LoadVulkanFunction(gpa, device, "vkGetSamplerOpaqueCaptureDescriptorDataEXT", &table->GetSamplerOpaqueCaptureDescriptorDataEXT); + LoadVulkanFunction(gpa, device, "vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT", &table->GetAccelerationStructureOpaqueCaptureDescriptorDataEXT); LoadVulkanFunction(gpa, device, "vkCmdSetFragmentShadingRateEnumNV", &table->CmdSetFragmentShadingRateEnumNV); LoadVulkanFunction(gpa, device, "vkGetDeviceFaultInfoEXT", &table->GetDeviceFaultInfoEXT); LoadVulkanFunction(gpa, device, "vkCmdSetVertexInputEXT", &table->CmdSetVertexInputEXT); @@ -2116,8 +2207,19 @@ template LoadVulkanFunction(gpa, device, "vkSetLatencyMarkerNV", &table->SetLatencyMarkerNV); LoadVulkanFunction(gpa, device, "vkGetLatencyTimingsNV", &table->GetLatencyTimingsNV); LoadVulkanFunction(gpa, device, "vkQueueNotifyOutOfBandNV", &table->QueueNotifyOutOfBandNV); + LoadVulkanFunction(gpa, device, "vkCreateDataGraphPipelinesARM", &table->CreateDataGraphPipelinesARM); + LoadVulkanFunction(gpa, device, "vkCreateDataGraphPipelineSessionARM", &table->CreateDataGraphPipelineSessionARM); + LoadVulkanFunction(gpa, device, "vkGetDataGraphPipelineSessionBindPointRequirementsARM", &table->GetDataGraphPipelineSessionBindPointRequirementsARM); + LoadVulkanFunction(gpa, device, "vkGetDataGraphPipelineSessionMemoryRequirementsARM", &table->GetDataGraphPipelineSessionMemoryRequirementsARM); + LoadVulkanFunction(gpa, device, "vkBindDataGraphPipelineSessionMemoryARM", &table->BindDataGraphPipelineSessionMemoryARM); + LoadVulkanFunction(gpa, device, "vkDestroyDataGraphPipelineSessionARM", &table->DestroyDataGraphPipelineSessionARM); + LoadVulkanFunction(gpa, device, "vkCmdDispatchDataGraphARM", &table->CmdDispatchDataGraphARM); + LoadVulkanFunction(gpa, device, "vkGetDataGraphPipelineAvailablePropertiesARM", &table->GetDataGraphPipelineAvailablePropertiesARM); + LoadVulkanFunction(gpa, device, "vkGetDataGraphPipelinePropertiesARM", &table->GetDataGraphPipelinePropertiesARM); LoadVulkanFunction(gpa, device, "vkCmdSetAttachmentFeedbackLoopEnableEXT", &table->CmdSetAttachmentFeedbackLoopEnableEXT); LoadVulkanFunction(gpa, device, "vkCmdBindTileMemoryQCOM", &table->CmdBindTileMemoryQCOM); + LoadVulkanFunction(gpa, device, "vkCmdDecompressMemoryEXT", &table->CmdDecompressMemoryEXT); + LoadVulkanFunction(gpa, device, "vkCmdDecompressMemoryIndirectCountEXT", &table->CmdDecompressMemoryIndirectCountEXT); LoadVulkanFunction(gpa, device, "vkGetPartitionedAccelerationStructuresBuildSizesNV", &table->GetPartitionedAccelerationStructuresBuildSizesNV); LoadVulkanFunction(gpa, device, "vkCmdBuildPartitionedAccelerationStructuresNV", &table->CmdBuildPartitionedAccelerationStructuresNV); LoadVulkanFunction(gpa, device, "vkGetGeneratedCommandsMemoryRequirementsEXT", &table->GetGeneratedCommandsMemoryRequirementsEXT); @@ -2132,6 +2234,8 @@ template LoadVulkanFunction(gpa, device, "vkGetMemoryMetalHandleEXT", &table->GetMemoryMetalHandleEXT); LoadVulkanFunction(gpa, device, "vkGetMemoryMetalHandlePropertiesEXT", &table->GetMemoryMetalHandlePropertiesEXT); LoadVulkanFunction(gpa, device, "vkCmdEndRendering2EXT", &table->CmdEndRendering2EXT); + LoadVulkanFunction(gpa, device, "vkCmdBeginCustomResolveEXT", &table->CmdBeginCustomResolveEXT); + LoadVulkanFunction(gpa, device, "vkCmdSetComputeOccupancyPriorityNV", &table->CmdSetComputeOccupancyPriorityNV); LoadVulkanFunction(gpa, device, "vkCreateAccelerationStructureKHR", &table->CreateAccelerationStructureKHR); LoadVulkanFunction(gpa, device, "vkDestroyAccelerationStructureKHR", &table->DestroyAccelerationStructureKHR); LoadVulkanFunction(gpa, device, "vkCmdBuildAccelerationStructuresKHR", &table->CmdBuildAccelerationStructuresKHR); @@ -2159,6 +2263,9 @@ template LoadVulkanFunction(gpa, device, "vkCmdDrawMeshTasksIndirectCountEXT", &table->CmdDrawMeshTasksIndirectCountEXT); } +using DeviceDispatchTablesMap = std::unordered_map; +using InstanceDispatchTablesMap = std::unordered_map; + GFXRECON_END_NAMESPACE(graphics) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_dive_consumer.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_dive_consumer.cpp index a7e73cdc4..ed617f3e9 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_dive_consumer.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_dive_consumer.cpp @@ -374,48 +374,6 @@ void VulkanExportDiveConsumer::Process_vkDestroySemaphore( { } -void VulkanExportDiveConsumer::Process_vkCreateEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pEvent) -{ -} - -void VulkanExportDiveConsumer::Process_vkDestroyEvent( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId event, - StructPointerDecoder* pAllocator) -{ -} - -void VulkanExportDiveConsumer::Process_vkGetEventStatus( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) -{ -} - -void VulkanExportDiveConsumer::Process_vkSetEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) -{ -} - -void VulkanExportDiveConsumer::Process_vkResetEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) -{ -} - void VulkanExportDiveConsumer::Process_vkCreateQueryPool( const ApiCallInfo& call_info, VkResult returnValue, @@ -466,24 +424,6 @@ void VulkanExportDiveConsumer::Process_vkDestroyBuffer( { } -void VulkanExportDiveConsumer::Process_vkCreateBufferView( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pView) -{ -} - -void VulkanExportDiveConsumer::Process_vkDestroyBufferView( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId bufferView, - StructPointerDecoder* pAllocator) -{ -} - void VulkanExportDiveConsumer::Process_vkCreateImage( const ApiCallInfo& call_info, VkResult returnValue, @@ -529,458 +469,586 @@ void VulkanExportDiveConsumer::Process_vkDestroyImageView( { } -void VulkanExportDiveConsumer::Process_vkDestroyShaderModule( +void VulkanExportDiveConsumer::Process_vkCreateCommandPool( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId shaderModule, - StructPointerDecoder* pAllocator) + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pCommandPool) { } -void VulkanExportDiveConsumer::Process_vkDestroyPipelineCache( +void VulkanExportDiveConsumer::Process_vkDestroyCommandPool( const ApiCallInfo& call_info, format::HandleId device, - format::HandleId pipelineCache, + format::HandleId commandPool, StructPointerDecoder* pAllocator) { } -void VulkanExportDiveConsumer::Process_vkMergePipelineCaches( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId dstCache, - uint32_t srcCacheCount, - HandlePointerDecoder* pSrcCaches) -{ -} - -void VulkanExportDiveConsumer::Process_vkCreateGraphicsPipelines( +void VulkanExportDiveConsumer::Process_vkResetCommandPool( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - format::HandleId pipelineCache, - uint32_t createInfoCount, - StructPointerDecoder* pCreateInfos, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelines) + format::HandleId commandPool, + VkCommandPoolResetFlags flags) { } -void VulkanExportDiveConsumer::Process_vkCreateComputePipelines( +void VulkanExportDiveConsumer::Process_vkAllocateCommandBuffers( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - format::HandleId pipelineCache, - uint32_t createInfoCount, - StructPointerDecoder* pCreateInfos, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelines) + StructPointerDecoder* pAllocateInfo, + HandlePointerDecoder* pCommandBuffers) { } -void VulkanExportDiveConsumer::Process_vkDestroyPipeline( +void VulkanExportDiveConsumer::Process_vkFreeCommandBuffers( const ApiCallInfo& call_info, format::HandleId device, - format::HandleId pipeline, - StructPointerDecoder* pAllocator) + format::HandleId commandPool, + uint32_t commandBufferCount, + HandlePointerDecoder* pCommandBuffers) { } -void VulkanExportDiveConsumer::Process_vkCreatePipelineLayout( +void VulkanExportDiveConsumer::Process_vkBeginCommandBuffer( const ApiCallInfo& call_info, VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelineLayout) + format::HandleId commandBuffer, + StructPointerDecoder* pBeginInfo) { + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pBeginInfo"], pBeginInfo, json_options); + util::DiveFunctionData function_data("vkBeginCommandBuffer", 0, call_info.index, args); + WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkDestroyPipelineLayout( +void VulkanExportDiveConsumer::Process_vkEndCommandBuffer( const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId pipelineLayout, - StructPointerDecoder* pAllocator) + VkResult returnValue, + format::HandleId commandBuffer) { + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + util::DiveFunctionData function_data("vkEndCommandBuffer", 0, call_info.index, args); + WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCreateSampler( +void VulkanExportDiveConsumer::Process_vkResetCommandBuffer( const ApiCallInfo& call_info, VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pSampler) + format::HandleId commandBuffer, + VkCommandBufferResetFlags flags) { } -void VulkanExportDiveConsumer::Process_vkDestroySampler( +void VulkanExportDiveConsumer::Process_vkCmdCopyBuffer( const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId sampler, - StructPointerDecoder* pAllocator) + format::HandleId commandBuffer, + format::HandleId srcBuffer, + format::HandleId dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions) { + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["srcBuffer"], srcBuffer, json_options); + HandleToJson(args["dstBuffer"], dstBuffer, json_options); + FieldToJson(args["regionCount"], regionCount, json_options); + FieldToJson(args["pRegions"], pRegions, json_options); + util::DiveFunctionData function_data("vkCmdCopyBuffer", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCreateDescriptorSetLayout( +void VulkanExportDiveConsumer::Process_vkCmdCopyImage( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pSetLayout) + format::HandleId commandBuffer, + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) { + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["srcImage"], srcImage, json_options); + FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); + HandleToJson(args["dstImage"], dstImage, json_options); + FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); + FieldToJson(args["regionCount"], regionCount, json_options); + FieldToJson(args["pRegions"], pRegions, json_options); + util::DiveFunctionData function_data("vkCmdCopyImage", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkDestroyDescriptorSetLayout( +void VulkanExportDiveConsumer::Process_vkCmdCopyBufferToImage( const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId descriptorSetLayout, - StructPointerDecoder* pAllocator) + format::HandleId commandBuffer, + format::HandleId srcBuffer, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) { + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["srcBuffer"], srcBuffer, json_options); + HandleToJson(args["dstImage"], dstImage, json_options); + FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); + FieldToJson(args["regionCount"], regionCount, json_options); + FieldToJson(args["pRegions"], pRegions, json_options); + util::DiveFunctionData function_data("vkCmdCopyBufferToImage", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCreateDescriptorPool( +void VulkanExportDiveConsumer::Process_vkCmdCopyImageToBuffer( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pDescriptorPool) + format::HandleId commandBuffer, + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions) { + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["srcImage"], srcImage, json_options); + FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); + HandleToJson(args["dstBuffer"], dstBuffer, json_options); + FieldToJson(args["regionCount"], regionCount, json_options); + FieldToJson(args["pRegions"], pRegions, json_options); + util::DiveFunctionData function_data("vkCmdCopyImageToBuffer", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkDestroyDescriptorPool( +void VulkanExportDiveConsumer::Process_vkCmdUpdateBuffer( const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId descriptorPool, - StructPointerDecoder* pAllocator) + format::HandleId commandBuffer, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize dataSize, + PointerDecoder* pData) { + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["dstBuffer"], dstBuffer, json_options); + FieldToJson(args["dstOffset"], dstOffset, json_options); + FieldToJson(args["dataSize"], dataSize, json_options); + FieldToJson(args["pData"], pData, json_options); + util::DiveFunctionData function_data("vkCmdUpdateBuffer", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkResetDescriptorPool( +void VulkanExportDiveConsumer::Process_vkCmdFillBuffer( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId descriptorPool, - VkDescriptorPoolResetFlags flags) + format::HandleId commandBuffer, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize size, + uint32_t data) { + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["dstBuffer"], dstBuffer, json_options); + FieldToJson(args["dstOffset"], dstOffset, json_options); + FieldToJson(args["size"], size, json_options); + FieldToJson(args["data"], data, json_options); + util::DiveFunctionData function_data("vkCmdFillBuffer", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkAllocateDescriptorSets( +void VulkanExportDiveConsumer::Process_vkCmdPipelineBarrier( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pAllocateInfo, - HandlePointerDecoder* pDescriptorSets) + format::HandleId commandBuffer, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkDependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + StructPointerDecoder* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + StructPointerDecoder* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + StructPointerDecoder* pImageMemoryBarriers) { + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(VkPipelineStageFlags_t(), args["srcStageMask"], srcStageMask, json_options); + FieldToJson(VkPipelineStageFlags_t(), args["dstStageMask"], dstStageMask, json_options); + FieldToJson(VkDependencyFlags_t(), args["dependencyFlags"], dependencyFlags, json_options); + FieldToJson(args["memoryBarrierCount"], memoryBarrierCount, json_options); + FieldToJson(args["pMemoryBarriers"], pMemoryBarriers, json_options); + FieldToJson(args["bufferMemoryBarrierCount"], bufferMemoryBarrierCount, json_options); + FieldToJson(args["pBufferMemoryBarriers"], pBufferMemoryBarriers, json_options); + FieldToJson(args["imageMemoryBarrierCount"], imageMemoryBarrierCount, json_options); + FieldToJson(args["pImageMemoryBarriers"], pImageMemoryBarriers, json_options); + util::DiveFunctionData function_data("vkCmdPipelineBarrier", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkFreeDescriptorSets( +void VulkanExportDiveConsumer::Process_vkCmdBeginQuery( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId descriptorPool, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets) + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t query, + VkQueryControlFlags flags) { + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["queryPool"], queryPool, json_options); + FieldToJson(args["query"], query, json_options); + FieldToJson(VkQueryControlFlags_t(), args["flags"], flags, json_options); + util::DiveFunctionData function_data("vkCmdBeginQuery", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkUpdateDescriptorSets( +void VulkanExportDiveConsumer::Process_vkCmdEndQuery( const ApiCallInfo& call_info, - format::HandleId device, - uint32_t descriptorWriteCount, - StructPointerDecoder* pDescriptorWrites, - uint32_t descriptorCopyCount, - StructPointerDecoder* pDescriptorCopies) + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t query) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["queryPool"], queryPool, json_options); + FieldToJson(args["query"], query, json_options); + util::DiveFunctionData function_data("vkCmdEndQuery", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkCmdResetQueryPool( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount) { + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["queryPool"], queryPool, json_options); + FieldToJson(args["firstQuery"], firstQuery, json_options); + FieldToJson(args["queryCount"], queryCount, json_options); + util::DiveFunctionData function_data("vkCmdResetQueryPool", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCreateFramebuffer( +void VulkanExportDiveConsumer::Process_vkCmdWriteTimestamp( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineStageFlagBits pipelineStage, + format::HandleId queryPool, + uint32_t query) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pipelineStage"], pipelineStage, json_options); + HandleToJson(args["queryPool"], queryPool, json_options); + FieldToJson(args["query"], query, json_options); + util::DiveFunctionData function_data("vkCmdWriteTimestamp", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkCmdCopyQueryPoolResults( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["queryPool"], queryPool, json_options); + FieldToJson(args["firstQuery"], firstQuery, json_options); + FieldToJson(args["queryCount"], queryCount, json_options); + HandleToJson(args["dstBuffer"], dstBuffer, json_options); + FieldToJson(args["dstOffset"], dstOffset, json_options); + FieldToJson(args["stride"], stride, json_options); + FieldToJson(VkQueryResultFlags_t(), args["flags"], flags, json_options); + util::DiveFunctionData function_data("vkCmdCopyQueryPoolResults", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkCmdExecuteCommands( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t commandBufferCount, + HandlePointerDecoder* pCommandBuffers) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["commandBufferCount"], commandBufferCount, json_options); + HandleToJson(args["pCommandBuffers"], pCommandBuffers, json_options); + util::DiveFunctionData function_data("vkCmdExecuteCommands", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkCreateEvent( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pCreateInfo, StructPointerDecoder* pAllocator, - HandlePointerDecoder* pFramebuffer) + HandlePointerDecoder* pEvent) { } -void VulkanExportDiveConsumer::Process_vkDestroyFramebuffer( +void VulkanExportDiveConsumer::Process_vkDestroyEvent( const ApiCallInfo& call_info, format::HandleId device, - format::HandleId framebuffer, + format::HandleId event, StructPointerDecoder* pAllocator) { } -void VulkanExportDiveConsumer::Process_vkCreateRenderPass( +void VulkanExportDiveConsumer::Process_vkGetEventStatus( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pRenderPass) + format::HandleId event) { } -void VulkanExportDiveConsumer::Process_vkDestroyRenderPass( +void VulkanExportDiveConsumer::Process_vkSetEvent( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId renderPass, - StructPointerDecoder* pAllocator) + format::HandleId event) { } -void VulkanExportDiveConsumer::Process_vkGetRenderAreaGranularity( +void VulkanExportDiveConsumer::Process_vkResetEvent( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId renderPass, - StructPointerDecoder* pGranularity) + format::HandleId event) { } -void VulkanExportDiveConsumer::Process_vkCreateCommandPool( +void VulkanExportDiveConsumer::Process_vkCreateBufferView( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pCreateInfo, StructPointerDecoder* pAllocator, - HandlePointerDecoder* pCommandPool) + HandlePointerDecoder* pView) { } -void VulkanExportDiveConsumer::Process_vkDestroyCommandPool( +void VulkanExportDiveConsumer::Process_vkDestroyBufferView( const ApiCallInfo& call_info, format::HandleId device, - format::HandleId commandPool, + format::HandleId bufferView, StructPointerDecoder* pAllocator) { } -void VulkanExportDiveConsumer::Process_vkResetCommandPool( +void VulkanExportDiveConsumer::Process_vkDestroyShaderModule( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - format::HandleId commandPool, - VkCommandPoolResetFlags flags) + format::HandleId shaderModule, + StructPointerDecoder* pAllocator) { } -void VulkanExportDiveConsumer::Process_vkAllocateCommandBuffers( +void VulkanExportDiveConsumer::Process_vkDestroyPipelineCache( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - StructPointerDecoder* pAllocateInfo, - HandlePointerDecoder* pCommandBuffers) + format::HandleId pipelineCache, + StructPointerDecoder* pAllocator) { } -void VulkanExportDiveConsumer::Process_vkFreeCommandBuffers( +void VulkanExportDiveConsumer::Process_vkMergePipelineCaches( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId commandPool, - uint32_t commandBufferCount, - HandlePointerDecoder* pCommandBuffers) + format::HandleId dstCache, + uint32_t srcCacheCount, + HandlePointerDecoder* pSrcCaches) { } -void VulkanExportDiveConsumer::Process_vkBeginCommandBuffer( +void VulkanExportDiveConsumer::Process_vkCreateComputePipelines( const ApiCallInfo& call_info, VkResult returnValue, - format::HandleId commandBuffer, - StructPointerDecoder* pBeginInfo) + format::HandleId device, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pBeginInfo"], pBeginInfo, json_options); - util::DiveFunctionData function_data("vkBeginCommandBuffer", 0, call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkEndCommandBuffer( +void VulkanExportDiveConsumer::Process_vkDestroyPipeline( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId commandBuffer) + format::HandleId device, + format::HandleId pipeline, + StructPointerDecoder* pAllocator) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - util::DiveFunctionData function_data("vkEndCommandBuffer", 0, call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkResetCommandBuffer( +void VulkanExportDiveConsumer::Process_vkCreatePipelineLayout( const ApiCallInfo& call_info, VkResult returnValue, - format::HandleId commandBuffer, - VkCommandBufferResetFlags flags) + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelineLayout) { } -void VulkanExportDiveConsumer::Process_vkCmdBindPipeline( +void VulkanExportDiveConsumer::Process_vkDestroyPipelineLayout( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - format::HandleId pipeline) + format::HandleId device, + format::HandleId pipelineLayout, + StructPointerDecoder* pAllocator) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pipelineBindPoint"], pipelineBindPoint, json_options); - HandleToJson(args["pipeline"], pipeline, json_options); - util::DiveFunctionData function_data("vkCmdBindPipeline", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdSetViewport( +void VulkanExportDiveConsumer::Process_vkCreateSampler( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t firstViewport, - uint32_t viewportCount, - StructPointerDecoder* pViewports) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSampler) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["firstViewport"], firstViewport, json_options); - FieldToJson(args["viewportCount"], viewportCount, json_options); - FieldToJson(args["pViewports"], pViewports, json_options); - util::DiveFunctionData function_data("vkCmdSetViewport", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdSetScissor( +void VulkanExportDiveConsumer::Process_vkDestroySampler( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t firstScissor, - uint32_t scissorCount, - StructPointerDecoder* pScissors) + format::HandleId device, + format::HandleId sampler, + StructPointerDecoder* pAllocator) +{ +} + +void VulkanExportDiveConsumer::Process_vkCreateDescriptorSetLayout( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSetLayout) +{ +} + +void VulkanExportDiveConsumer::Process_vkDestroyDescriptorSetLayout( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId descriptorSetLayout, + StructPointerDecoder* pAllocator) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["firstScissor"], firstScissor, json_options); - FieldToJson(args["scissorCount"], scissorCount, json_options); - FieldToJson(args["pScissors"], pScissors, json_options); - util::DiveFunctionData function_data("vkCmdSetScissor", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdSetLineWidth( +void VulkanExportDiveConsumer::Process_vkCreateDescriptorPool( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - float lineWidth) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pDescriptorPool) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["lineWidth"], lineWidth, json_options); - util::DiveFunctionData function_data("vkCmdSetLineWidth", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdSetDepthBias( +void VulkanExportDiveConsumer::Process_vkDestroyDescriptorPool( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - float depthBiasConstantFactor, - float depthBiasClamp, - float depthBiasSlopeFactor) + format::HandleId device, + format::HandleId descriptorPool, + StructPointerDecoder* pAllocator) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["depthBiasConstantFactor"], depthBiasConstantFactor, json_options); - FieldToJson(args["depthBiasClamp"], depthBiasClamp, json_options); - FieldToJson(args["depthBiasSlopeFactor"], depthBiasSlopeFactor, json_options); - util::DiveFunctionData function_data("vkCmdSetDepthBias", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdSetBlendConstants( +void VulkanExportDiveConsumer::Process_vkResetDescriptorPool( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - PointerDecoder* blendConstants) + VkResult returnValue, + format::HandleId device, + format::HandleId descriptorPool, + VkDescriptorPoolResetFlags flags) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["blendConstants"], blendConstants, json_options); - util::DiveFunctionData function_data("vkCmdSetBlendConstants", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdSetDepthBounds( +void VulkanExportDiveConsumer::Process_vkAllocateDescriptorSets( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - float minDepthBounds, - float maxDepthBounds) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pAllocateInfo, + HandlePointerDecoder* pDescriptorSets) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["minDepthBounds"], minDepthBounds, json_options); - FieldToJson(args["maxDepthBounds"], maxDepthBounds, json_options); - util::DiveFunctionData function_data("vkCmdSetDepthBounds", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdSetStencilCompareMask( +void VulkanExportDiveConsumer::Process_vkFreeDescriptorSets( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t compareMask) + VkResult returnValue, + format::HandleId device, + format::HandleId descriptorPool, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(VkStencilFaceFlags_t(), args["faceMask"], faceMask, json_options); - FieldToJson(args["compareMask"], compareMask, json_options); - util::DiveFunctionData function_data("vkCmdSetStencilCompareMask", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdSetStencilWriteMask( +void VulkanExportDiveConsumer::Process_vkUpdateDescriptorSets( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t writeMask) + format::HandleId device, + uint32_t descriptorWriteCount, + StructPointerDecoder* pDescriptorWrites, + uint32_t descriptorCopyCount, + StructPointerDecoder* pDescriptorCopies) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(VkStencilFaceFlags_t(), args["faceMask"], faceMask, json_options); - FieldToJson(args["writeMask"], writeMask, json_options); - util::DiveFunctionData function_data("vkCmdSetStencilWriteMask", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdSetStencilReference( +void VulkanExportDiveConsumer::Process_vkCmdBindPipeline( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t reference) + VkPipelineBindPoint pipelineBindPoint, + format::HandleId pipeline) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(VkStencilFaceFlags_t(), args["faceMask"], faceMask, json_options); - FieldToJson(args["reference"], reference, json_options); - util::DiveFunctionData function_data("vkCmdSetStencilReference", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["pipelineBindPoint"], pipelineBindPoint, json_options); + HandleToJson(args["pipeline"], pipeline, json_options); + util::DiveFunctionData function_data("vkCmdBindPipeline", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } @@ -1010,589 +1078,537 @@ void VulkanExportDiveConsumer::Process_vkCmdBindDescriptorSets( WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdBindIndexBuffer( +void VulkanExportDiveConsumer::Process_vkCmdClearColorImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkIndexType indexType) + format::HandleId image, + VkImageLayout imageLayout, + StructPointerDecoder* pColor, + uint32_t rangeCount, + StructPointerDecoder* pRanges) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["buffer"], buffer, json_options); - FieldToJson(args["offset"], offset, json_options); - FieldToJson(args["indexType"], indexType, json_options); - util::DiveFunctionData function_data("vkCmdBindIndexBuffer", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + HandleToJson(args["image"], image, json_options); + FieldToJson(args["imageLayout"], imageLayout, json_options); + FieldToJson(args["pColor"], pColor, json_options); + FieldToJson(args["rangeCount"], rangeCount, json_options); + FieldToJson(args["pRanges"], pRanges, json_options); + util::DiveFunctionData function_data("vkCmdClearColorImage", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdBindVertexBuffers( +void VulkanExportDiveConsumer::Process_vkCmdDispatch( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - HandlePointerDecoder* pBuffers, - PointerDecoder* pOffsets) + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["firstBinding"], firstBinding, json_options); - FieldToJson(args["bindingCount"], bindingCount, json_options); - HandleToJson(args["pBuffers"], pBuffers, json_options); - FieldToJson(args["pOffsets"], pOffsets, json_options); - util::DiveFunctionData function_data("vkCmdBindVertexBuffers", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["groupCountX"], groupCountX, json_options); + FieldToJson(args["groupCountY"], groupCountY, json_options); + FieldToJson(args["groupCountZ"], groupCountZ, json_options); + util::DiveFunctionData function_data("vkCmdDispatch", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdDraw( +void VulkanExportDiveConsumer::Process_vkCmdDispatchIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t vertexCount, - uint32_t instanceCount, - uint32_t firstVertex, - uint32_t firstInstance) + format::HandleId buffer, + VkDeviceSize offset) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["vertexCount"], vertexCount, json_options); - FieldToJson(args["instanceCount"], instanceCount, json_options); - FieldToJson(args["firstVertex"], firstVertex, json_options); - FieldToJson(args["firstInstance"], firstInstance, json_options); - util::DiveFunctionData function_data("vkCmdDraw", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + HandleToJson(args["buffer"], buffer, json_options); + FieldToJson(args["offset"], offset, json_options); + util::DiveFunctionData function_data("vkCmdDispatchIndirect", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdDrawIndexed( +void VulkanExportDiveConsumer::Process_vkCmdSetEvent( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t indexCount, - uint32_t instanceCount, - uint32_t firstIndex, - int32_t vertexOffset, - uint32_t firstInstance) + format::HandleId event, + VkPipelineStageFlags stageMask) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["indexCount"], indexCount, json_options); - FieldToJson(args["instanceCount"], instanceCount, json_options); - FieldToJson(args["firstIndex"], firstIndex, json_options); - FieldToJson(args["vertexOffset"], vertexOffset, json_options); - FieldToJson(args["firstInstance"], firstInstance, json_options); - util::DiveFunctionData function_data("vkCmdDrawIndexed", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + HandleToJson(args["event"], event, json_options); + FieldToJson(VkPipelineStageFlags_t(), args["stageMask"], stageMask, json_options); + util::DiveFunctionData function_data("vkCmdSetEvent", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdDrawIndirect( +void VulkanExportDiveConsumer::Process_vkCmdResetEvent( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) + format::HandleId event, + VkPipelineStageFlags stageMask) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["buffer"], buffer, json_options); - FieldToJson(args["offset"], offset, json_options); - FieldToJson(args["drawCount"], drawCount, json_options); - FieldToJson(args["stride"], stride, json_options); - util::DiveFunctionData function_data("vkCmdDrawIndirect", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + HandleToJson(args["event"], event, json_options); + FieldToJson(VkPipelineStageFlags_t(), args["stageMask"], stageMask, json_options); + util::DiveFunctionData function_data("vkCmdResetEvent", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkCmdWaitEvents( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t eventCount, + HandlePointerDecoder* pEvents, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + uint32_t memoryBarrierCount, + StructPointerDecoder* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + StructPointerDecoder* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + StructPointerDecoder* pImageMemoryBarriers) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["eventCount"], eventCount, json_options); + HandleToJson(args["pEvents"], pEvents, json_options); + FieldToJson(VkPipelineStageFlags_t(), args["srcStageMask"], srcStageMask, json_options); + FieldToJson(VkPipelineStageFlags_t(), args["dstStageMask"], dstStageMask, json_options); + FieldToJson(args["memoryBarrierCount"], memoryBarrierCount, json_options); + FieldToJson(args["pMemoryBarriers"], pMemoryBarriers, json_options); + FieldToJson(args["bufferMemoryBarrierCount"], bufferMemoryBarrierCount, json_options); + FieldToJson(args["pBufferMemoryBarriers"], pBufferMemoryBarriers, json_options); + FieldToJson(args["imageMemoryBarrierCount"], imageMemoryBarrierCount, json_options); + FieldToJson(args["pImageMemoryBarriers"], pImageMemoryBarriers, json_options); + util::DiveFunctionData function_data("vkCmdWaitEvents", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdDrawIndexedIndirect( +void VulkanExportDiveConsumer::Process_vkCreateGraphicsPipelines( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) +{ +} + +void VulkanExportDiveConsumer::Process_vkCreateFramebuffer( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pFramebuffer) +{ +} + +void VulkanExportDiveConsumer::Process_vkDestroyFramebuffer( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) + format::HandleId device, + format::HandleId framebuffer, + StructPointerDecoder* pAllocator) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["buffer"], buffer, json_options); - FieldToJson(args["offset"], offset, json_options); - FieldToJson(args["drawCount"], drawCount, json_options); - FieldToJson(args["stride"], stride, json_options); - util::DiveFunctionData function_data("vkCmdDrawIndexedIndirect", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdDispatch( +void VulkanExportDiveConsumer::Process_vkCreateRenderPass( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pRenderPass) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["groupCountX"], groupCountX, json_options); - FieldToJson(args["groupCountY"], groupCountY, json_options); - FieldToJson(args["groupCountZ"], groupCountZ, json_options); - util::DiveFunctionData function_data("vkCmdDispatch", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdDispatchIndirect( +void VulkanExportDiveConsumer::Process_vkDestroyRenderPass( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset) + format::HandleId device, + format::HandleId renderPass, + StructPointerDecoder* pAllocator) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["buffer"], buffer, json_options); - FieldToJson(args["offset"], offset, json_options); - util::DiveFunctionData function_data("vkCmdDispatchIndirect", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdCopyBuffer( +void VulkanExportDiveConsumer::Process_vkGetRenderAreaGranularity( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcBuffer, - format::HandleId dstBuffer, - uint32_t regionCount, - StructPointerDecoder* pRegions) + format::HandleId device, + format::HandleId renderPass, + StructPointerDecoder* pGranularity) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["srcBuffer"], srcBuffer, json_options); - HandleToJson(args["dstBuffer"], dstBuffer, json_options); - FieldToJson(args["regionCount"], regionCount, json_options); - FieldToJson(args["pRegions"], pRegions, json_options); - util::DiveFunctionData function_data("vkCmdCopyBuffer", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdCopyImage( +void VulkanExportDiveConsumer::Process_vkCmdSetViewport( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) + uint32_t firstViewport, + uint32_t viewportCount, + StructPointerDecoder* pViewports) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["srcImage"], srcImage, json_options); - FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); - HandleToJson(args["dstImage"], dstImage, json_options); - FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); - FieldToJson(args["regionCount"], regionCount, json_options); - FieldToJson(args["pRegions"], pRegions, json_options); - util::DiveFunctionData function_data("vkCmdCopyImage", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["firstViewport"], firstViewport, json_options); + FieldToJson(args["viewportCount"], viewportCount, json_options); + FieldToJson(args["pViewports"], pViewports, json_options); + util::DiveFunctionData function_data("vkCmdSetViewport", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdBlitImage( +void VulkanExportDiveConsumer::Process_vkCmdSetScissor( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions, - VkFilter filter) + uint32_t firstScissor, + uint32_t scissorCount, + StructPointerDecoder* pScissors) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["srcImage"], srcImage, json_options); - FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); - HandleToJson(args["dstImage"], dstImage, json_options); - FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); - FieldToJson(args["regionCount"], regionCount, json_options); - FieldToJson(args["pRegions"], pRegions, json_options); - FieldToJson(args["filter"], filter, json_options); - util::DiveFunctionData function_data("vkCmdBlitImage", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["firstScissor"], firstScissor, json_options); + FieldToJson(args["scissorCount"], scissorCount, json_options); + FieldToJson(args["pScissors"], pScissors, json_options); + util::DiveFunctionData function_data("vkCmdSetScissor", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdCopyBufferToImage( +void VulkanExportDiveConsumer::Process_vkCmdSetLineWidth( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcBuffer, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) + float lineWidth) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["srcBuffer"], srcBuffer, json_options); - HandleToJson(args["dstImage"], dstImage, json_options); - FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); - FieldToJson(args["regionCount"], regionCount, json_options); - FieldToJson(args["pRegions"], pRegions, json_options); - util::DiveFunctionData function_data("vkCmdCopyBufferToImage", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["lineWidth"], lineWidth, json_options); + util::DiveFunctionData function_data("vkCmdSetLineWidth", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdCopyImageToBuffer( +void VulkanExportDiveConsumer::Process_vkCmdSetDepthBias( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstBuffer, - uint32_t regionCount, - StructPointerDecoder* pRegions) + float depthBiasConstantFactor, + float depthBiasClamp, + float depthBiasSlopeFactor) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["srcImage"], srcImage, json_options); - FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); - HandleToJson(args["dstBuffer"], dstBuffer, json_options); - FieldToJson(args["regionCount"], regionCount, json_options); - FieldToJson(args["pRegions"], pRegions, json_options); - util::DiveFunctionData function_data("vkCmdCopyImageToBuffer", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["depthBiasConstantFactor"], depthBiasConstantFactor, json_options); + FieldToJson(args["depthBiasClamp"], depthBiasClamp, json_options); + FieldToJson(args["depthBiasSlopeFactor"], depthBiasSlopeFactor, json_options); + util::DiveFunctionData function_data("vkCmdSetDepthBias", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdUpdateBuffer( +void VulkanExportDiveConsumer::Process_vkCmdSetBlendConstants( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize dataSize, - PointerDecoder* pData) + PointerDecoder* blendConstants) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["dstBuffer"], dstBuffer, json_options); - FieldToJson(args["dstOffset"], dstOffset, json_options); - FieldToJson(args["dataSize"], dataSize, json_options); - FieldToJson(args["pData"], pData, json_options); - util::DiveFunctionData function_data("vkCmdUpdateBuffer", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["blendConstants"], blendConstants, json_options); + util::DiveFunctionData function_data("vkCmdSetBlendConstants", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdFillBuffer( +void VulkanExportDiveConsumer::Process_vkCmdSetDepthBounds( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize size, - uint32_t data) + float minDepthBounds, + float maxDepthBounds) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["dstBuffer"], dstBuffer, json_options); - FieldToJson(args["dstOffset"], dstOffset, json_options); - FieldToJson(args["size"], size, json_options); - FieldToJson(args["data"], data, json_options); - util::DiveFunctionData function_data("vkCmdFillBuffer", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["minDepthBounds"], minDepthBounds, json_options); + FieldToJson(args["maxDepthBounds"], maxDepthBounds, json_options); + util::DiveFunctionData function_data("vkCmdSetDepthBounds", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdClearColorImage( +void VulkanExportDiveConsumer::Process_vkCmdSetStencilCompareMask( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId image, - VkImageLayout imageLayout, - StructPointerDecoder* pColor, - uint32_t rangeCount, - StructPointerDecoder* pRanges) + VkStencilFaceFlags faceMask, + uint32_t compareMask) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["image"], image, json_options); - FieldToJson(args["imageLayout"], imageLayout, json_options); - FieldToJson(args["pColor"], pColor, json_options); - FieldToJson(args["rangeCount"], rangeCount, json_options); - FieldToJson(args["pRanges"], pRanges, json_options); - util::DiveFunctionData function_data("vkCmdClearColorImage", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(VkStencilFaceFlags_t(), args["faceMask"], faceMask, json_options); + FieldToJson(args["compareMask"], compareMask, json_options); + util::DiveFunctionData function_data("vkCmdSetStencilCompareMask", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdClearDepthStencilImage( +void VulkanExportDiveConsumer::Process_vkCmdSetStencilWriteMask( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId image, - VkImageLayout imageLayout, - StructPointerDecoder* pDepthStencil, - uint32_t rangeCount, - StructPointerDecoder* pRanges) + VkStencilFaceFlags faceMask, + uint32_t writeMask) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["image"], image, json_options); - FieldToJson(args["imageLayout"], imageLayout, json_options); - FieldToJson(args["pDepthStencil"], pDepthStencil, json_options); - FieldToJson(args["rangeCount"], rangeCount, json_options); - FieldToJson(args["pRanges"], pRanges, json_options); - util::DiveFunctionData function_data("vkCmdClearDepthStencilImage", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(VkStencilFaceFlags_t(), args["faceMask"], faceMask, json_options); + FieldToJson(args["writeMask"], writeMask, json_options); + util::DiveFunctionData function_data("vkCmdSetStencilWriteMask", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdClearAttachments( +void VulkanExportDiveConsumer::Process_vkCmdSetStencilReference( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t attachmentCount, - StructPointerDecoder* pAttachments, - uint32_t rectCount, - StructPointerDecoder* pRects) + VkStencilFaceFlags faceMask, + uint32_t reference) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["attachmentCount"], attachmentCount, json_options); - FieldToJson(args["pAttachments"], pAttachments, json_options); - FieldToJson(args["rectCount"], rectCount, json_options); - FieldToJson(args["pRects"], pRects, json_options); - util::DiveFunctionData function_data("vkCmdClearAttachments", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(VkStencilFaceFlags_t(), args["faceMask"], faceMask, json_options); + FieldToJson(args["reference"], reference, json_options); + util::DiveFunctionData function_data("vkCmdSetStencilReference", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdResolveImage( +void VulkanExportDiveConsumer::Process_vkCmdBindIndexBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) + format::HandleId buffer, + VkDeviceSize offset, + VkIndexType indexType) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["srcImage"], srcImage, json_options); - FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); - HandleToJson(args["dstImage"], dstImage, json_options); - FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); - FieldToJson(args["regionCount"], regionCount, json_options); - FieldToJson(args["pRegions"], pRegions, json_options); - util::DiveFunctionData function_data("vkCmdResolveImage", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + HandleToJson(args["buffer"], buffer, json_options); + FieldToJson(args["offset"], offset, json_options); + FieldToJson(args["indexType"], indexType, json_options); + util::DiveFunctionData function_data("vkCmdBindIndexBuffer", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdSetEvent( +void VulkanExportDiveConsumer::Process_vkCmdBindVertexBuffers( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags stageMask) + uint32_t firstBinding, + uint32_t bindingCount, + HandlePointerDecoder* pBuffers, + PointerDecoder* pOffsets) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["event"], event, json_options); - FieldToJson(VkPipelineStageFlags_t(), args["stageMask"], stageMask, json_options); - util::DiveFunctionData function_data("vkCmdSetEvent", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["firstBinding"], firstBinding, json_options); + FieldToJson(args["bindingCount"], bindingCount, json_options); + HandleToJson(args["pBuffers"], pBuffers, json_options); + FieldToJson(args["pOffsets"], pOffsets, json_options); + util::DiveFunctionData function_data("vkCmdBindVertexBuffers", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdResetEvent( +void VulkanExportDiveConsumer::Process_vkCmdDraw( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags stageMask) + uint32_t vertexCount, + uint32_t instanceCount, + uint32_t firstVertex, + uint32_t firstInstance) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["event"], event, json_options); - FieldToJson(VkPipelineStageFlags_t(), args["stageMask"], stageMask, json_options); - util::DiveFunctionData function_data("vkCmdResetEvent", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["vertexCount"], vertexCount, json_options); + FieldToJson(args["instanceCount"], instanceCount, json_options); + FieldToJson(args["firstVertex"], firstVertex, json_options); + FieldToJson(args["firstInstance"], firstInstance, json_options); + util::DiveFunctionData function_data("vkCmdDraw", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdWaitEvents( +void VulkanExportDiveConsumer::Process_vkCmdDrawIndexed( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t eventCount, - HandlePointerDecoder* pEvents, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - uint32_t memoryBarrierCount, - StructPointerDecoder* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - StructPointerDecoder* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - StructPointerDecoder* pImageMemoryBarriers) + uint32_t indexCount, + uint32_t instanceCount, + uint32_t firstIndex, + int32_t vertexOffset, + uint32_t firstInstance) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["eventCount"], eventCount, json_options); - HandleToJson(args["pEvents"], pEvents, json_options); - FieldToJson(VkPipelineStageFlags_t(), args["srcStageMask"], srcStageMask, json_options); - FieldToJson(VkPipelineStageFlags_t(), args["dstStageMask"], dstStageMask, json_options); - FieldToJson(args["memoryBarrierCount"], memoryBarrierCount, json_options); - FieldToJson(args["pMemoryBarriers"], pMemoryBarriers, json_options); - FieldToJson(args["bufferMemoryBarrierCount"], bufferMemoryBarrierCount, json_options); - FieldToJson(args["pBufferMemoryBarriers"], pBufferMemoryBarriers, json_options); - FieldToJson(args["imageMemoryBarrierCount"], imageMemoryBarrierCount, json_options); - FieldToJson(args["pImageMemoryBarriers"], pImageMemoryBarriers, json_options); - util::DiveFunctionData function_data("vkCmdWaitEvents", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["indexCount"], indexCount, json_options); + FieldToJson(args["instanceCount"], instanceCount, json_options); + FieldToJson(args["firstIndex"], firstIndex, json_options); + FieldToJson(args["vertexOffset"], vertexOffset, json_options); + FieldToJson(args["firstInstance"], firstInstance, json_options); + util::DiveFunctionData function_data("vkCmdDrawIndexed", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdPipelineBarrier( +void VulkanExportDiveConsumer::Process_vkCmdDrawIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - StructPointerDecoder* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - StructPointerDecoder* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - StructPointerDecoder* pImageMemoryBarriers) + format::HandleId buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(VkPipelineStageFlags_t(), args["srcStageMask"], srcStageMask, json_options); - FieldToJson(VkPipelineStageFlags_t(), args["dstStageMask"], dstStageMask, json_options); - FieldToJson(VkDependencyFlags_t(), args["dependencyFlags"], dependencyFlags, json_options); - FieldToJson(args["memoryBarrierCount"], memoryBarrierCount, json_options); - FieldToJson(args["pMemoryBarriers"], pMemoryBarriers, json_options); - FieldToJson(args["bufferMemoryBarrierCount"], bufferMemoryBarrierCount, json_options); - FieldToJson(args["pBufferMemoryBarriers"], pBufferMemoryBarriers, json_options); - FieldToJson(args["imageMemoryBarrierCount"], imageMemoryBarrierCount, json_options); - FieldToJson(args["pImageMemoryBarriers"], pImageMemoryBarriers, json_options); - util::DiveFunctionData function_data("vkCmdPipelineBarrier", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + HandleToJson(args["buffer"], buffer, json_options); + FieldToJson(args["offset"], offset, json_options); + FieldToJson(args["drawCount"], drawCount, json_options); + FieldToJson(args["stride"], stride, json_options); + util::DiveFunctionData function_data("vkCmdDrawIndirect", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdBeginQuery( +void VulkanExportDiveConsumer::Process_vkCmdDrawIndexedIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t query, - VkQueryControlFlags flags) + format::HandleId buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["queryPool"], queryPool, json_options); - FieldToJson(args["query"], query, json_options); - FieldToJson(VkQueryControlFlags_t(), args["flags"], flags, json_options); - util::DiveFunctionData function_data("vkCmdBeginQuery", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + HandleToJson(args["buffer"], buffer, json_options); + FieldToJson(args["offset"], offset, json_options); + FieldToJson(args["drawCount"], drawCount, json_options); + FieldToJson(args["stride"], stride, json_options); + util::DiveFunctionData function_data("vkCmdDrawIndexedIndirect", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdEndQuery( +void VulkanExportDiveConsumer::Process_vkCmdBlitImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t query) + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + VkFilter filter) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["queryPool"], queryPool, json_options); - FieldToJson(args["query"], query, json_options); - util::DiveFunctionData function_data("vkCmdEndQuery", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + HandleToJson(args["srcImage"], srcImage, json_options); + FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); + HandleToJson(args["dstImage"], dstImage, json_options); + FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); + FieldToJson(args["regionCount"], regionCount, json_options); + FieldToJson(args["pRegions"], pRegions, json_options); + FieldToJson(args["filter"], filter, json_options); + util::DiveFunctionData function_data("vkCmdBlitImage", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdResetQueryPool( +void VulkanExportDiveConsumer::Process_vkCmdClearDepthStencilImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount) + format::HandleId image, + VkImageLayout imageLayout, + StructPointerDecoder* pDepthStencil, + uint32_t rangeCount, + StructPointerDecoder* pRanges) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["queryPool"], queryPool, json_options); - FieldToJson(args["firstQuery"], firstQuery, json_options); - FieldToJson(args["queryCount"], queryCount, json_options); - util::DiveFunctionData function_data("vkCmdResetQueryPool", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + HandleToJson(args["image"], image, json_options); + FieldToJson(args["imageLayout"], imageLayout, json_options); + FieldToJson(args["pDepthStencil"], pDepthStencil, json_options); + FieldToJson(args["rangeCount"], rangeCount, json_options); + FieldToJson(args["pRanges"], pRanges, json_options); + util::DiveFunctionData function_data("vkCmdClearDepthStencilImage", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdWriteTimestamp( +void VulkanExportDiveConsumer::Process_vkCmdClearAttachments( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlagBits pipelineStage, - format::HandleId queryPool, - uint32_t query) + uint32_t attachmentCount, + StructPointerDecoder* pAttachments, + uint32_t rectCount, + StructPointerDecoder* pRects) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pipelineStage"], pipelineStage, json_options); - HandleToJson(args["queryPool"], queryPool, json_options); - FieldToJson(args["query"], query, json_options); - util::DiveFunctionData function_data("vkCmdWriteTimestamp", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["attachmentCount"], attachmentCount, json_options); + FieldToJson(args["pAttachments"], pAttachments, json_options); + FieldToJson(args["rectCount"], rectCount, json_options); + FieldToJson(args["pRects"], pRects, json_options); + util::DiveFunctionData function_data("vkCmdClearAttachments", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdCopyQueryPoolResults( +void VulkanExportDiveConsumer::Process_vkCmdResolveImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags) + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["queryPool"], queryPool, json_options); - FieldToJson(args["firstQuery"], firstQuery, json_options); - FieldToJson(args["queryCount"], queryCount, json_options); - HandleToJson(args["dstBuffer"], dstBuffer, json_options); - FieldToJson(args["dstOffset"], dstOffset, json_options); - FieldToJson(args["stride"], stride, json_options); - FieldToJson(VkQueryResultFlags_t(), args["flags"], flags, json_options); - util::DiveFunctionData function_data("vkCmdCopyQueryPoolResults", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + HandleToJson(args["srcImage"], srcImage, json_options); + FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); + HandleToJson(args["dstImage"], dstImage, json_options); + FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); + FieldToJson(args["regionCount"], regionCount, json_options); + FieldToJson(args["pRegions"], pRegions, json_options); + util::DiveFunctionData function_data("vkCmdResolveImage", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } @@ -1638,22 +1654,6 @@ void VulkanExportDiveConsumer::Process_vkCmdEndRenderPass( WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdExecuteCommands( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t commandBufferCount, - HandlePointerDecoder* pCommandBuffers) -{ - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["commandBufferCount"], commandBufferCount, json_options); - HandleToJson(args["pCommandBuffers"], pCommandBuffers, json_options); - util::DiveFunctionData function_data("vkCmdExecuteCommands", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); -} - void VulkanExportDiveConsumer::Process_vkBindBufferMemory2( const ApiCallInfo& call_info, VkResult returnValue, @@ -1682,41 +1682,17 @@ void VulkanExportDiveConsumer::Process_vkGetDeviceGroupPeerMemoryFeatures( { } -void VulkanExportDiveConsumer::Process_vkCmdSetDeviceMask( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t deviceMask) -{ - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["deviceMask"], deviceMask, json_options); - util::DiveFunctionData function_data("vkCmdSetDeviceMask", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); -} - -void VulkanExportDiveConsumer::Process_vkCmdDispatchBase( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) +void VulkanExportDiveConsumer::Process_vkCmdSetDeviceMask( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t deviceMask) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["baseGroupX"], baseGroupX, json_options); - FieldToJson(args["baseGroupY"], baseGroupY, json_options); - FieldToJson(args["baseGroupZ"], baseGroupZ, json_options); - FieldToJson(args["groupCountX"], groupCountX, json_options); - FieldToJson(args["groupCountY"], groupCountY, json_options); - FieldToJson(args["groupCountZ"], groupCountZ, json_options); - util::DiveFunctionData function_data("vkCmdDispatchBase", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["deviceMask"], deviceMask, json_options); + util::DiveFunctionData function_data("vkCmdSetDeviceMask", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } @@ -1825,6 +1801,80 @@ void VulkanExportDiveConsumer::Process_vkGetDeviceQueue2( { } +void VulkanExportDiveConsumer::Process_vkGetPhysicalDeviceExternalBufferProperties( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pExternalBufferInfo, + StructPointerDecoder* pExternalBufferProperties) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetPhysicalDeviceExternalFenceProperties( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pExternalFenceInfo, + StructPointerDecoder* pExternalFenceProperties) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetPhysicalDeviceExternalSemaphoreProperties( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pExternalSemaphoreInfo, + StructPointerDecoder* pExternalSemaphoreProperties) +{ +} + +void VulkanExportDiveConsumer::Process_vkCmdDispatchBase( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["baseGroupX"], baseGroupX, json_options); + FieldToJson(args["baseGroupY"], baseGroupY, json_options); + FieldToJson(args["baseGroupZ"], baseGroupZ, json_options); + FieldToJson(args["groupCountX"], groupCountX, json_options); + FieldToJson(args["groupCountY"], groupCountY, json_options); + FieldToJson(args["groupCountZ"], groupCountZ, json_options); + util::DiveFunctionData function_data("vkCmdDispatchBase", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkCreateDescriptorUpdateTemplate( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pDescriptorUpdateTemplate) +{ +} + +void VulkanExportDiveConsumer::Process_vkDestroyDescriptorUpdateTemplate( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId descriptorUpdateTemplate, + StructPointerDecoder* pAllocator) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetDescriptorSetLayoutSupport( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pSupport) +{ +} + void VulkanExportDiveConsumer::Process_vkCreateSamplerYcbcrConversion( const ApiCallInfo& call_info, VkResult returnValue, @@ -1843,53 +1893,62 @@ void VulkanExportDiveConsumer::Process_vkDestroySamplerYcbcrConversion( { } -void VulkanExportDiveConsumer::Process_vkCreateDescriptorUpdateTemplate( +void VulkanExportDiveConsumer::Process_vkResetQueryPool( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetSemaphoreCounterValue( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pDescriptorUpdateTemplate) + format::HandleId semaphore, + PointerDecoder* pValue) { } -void VulkanExportDiveConsumer::Process_vkDestroyDescriptorUpdateTemplate( +void VulkanExportDiveConsumer::Process_vkWaitSemaphores( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId descriptorUpdateTemplate, - StructPointerDecoder* pAllocator) + StructPointerDecoder* pWaitInfo, + uint64_t timeout) { } -void VulkanExportDiveConsumer::Process_vkGetPhysicalDeviceExternalBufferProperties( +void VulkanExportDiveConsumer::Process_vkSignalSemaphore( const ApiCallInfo& call_info, - format::HandleId physicalDevice, - StructPointerDecoder* pExternalBufferInfo, - StructPointerDecoder* pExternalBufferProperties) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pSignalInfo) { } -void VulkanExportDiveConsumer::Process_vkGetPhysicalDeviceExternalFenceProperties( +void VulkanExportDiveConsumer::Process_vkGetBufferDeviceAddress( const ApiCallInfo& call_info, - format::HandleId physicalDevice, - StructPointerDecoder* pExternalFenceInfo, - StructPointerDecoder* pExternalFenceProperties) + VkDeviceAddress returnValue, + format::HandleId device, + StructPointerDecoder* pInfo) { } -void VulkanExportDiveConsumer::Process_vkGetPhysicalDeviceExternalSemaphoreProperties( +void VulkanExportDiveConsumer::Process_vkGetBufferOpaqueCaptureAddress( const ApiCallInfo& call_info, - format::HandleId physicalDevice, - StructPointerDecoder* pExternalSemaphoreInfo, - StructPointerDecoder* pExternalSemaphoreProperties) + uint64_t returnValue, + format::HandleId device, + StructPointerDecoder* pInfo) { } -void VulkanExportDiveConsumer::Process_vkGetDescriptorSetLayoutSupport( +void VulkanExportDiveConsumer::Process_vkGetDeviceMemoryOpaqueCaptureAddress( const ApiCallInfo& call_info, + uint64_t returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pSupport) + StructPointerDecoder* pInfo) { } @@ -1997,65 +2056,6 @@ void VulkanExportDiveConsumer::Process_vkCmdEndRenderPass2( WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkResetQueryPool( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount) -{ -} - -void VulkanExportDiveConsumer::Process_vkGetSemaphoreCounterValue( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId semaphore, - PointerDecoder* pValue) -{ -} - -void VulkanExportDiveConsumer::Process_vkWaitSemaphores( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pWaitInfo, - uint64_t timeout) -{ -} - -void VulkanExportDiveConsumer::Process_vkSignalSemaphore( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pSignalInfo) -{ -} - -void VulkanExportDiveConsumer::Process_vkGetBufferDeviceAddress( - const ApiCallInfo& call_info, - VkDeviceAddress returnValue, - format::HandleId device, - StructPointerDecoder* pInfo) -{ -} - -void VulkanExportDiveConsumer::Process_vkGetBufferOpaqueCaptureAddress( - const ApiCallInfo& call_info, - uint64_t returnValue, - format::HandleId device, - StructPointerDecoder* pInfo) -{ -} - -void VulkanExportDiveConsumer::Process_vkGetDeviceMemoryOpaqueCaptureAddress( - const ApiCallInfo& call_info, - uint64_t returnValue, - format::HandleId device, - StructPointerDecoder* pInfo) -{ -} - void VulkanExportDiveConsumer::Process_vkGetPhysicalDeviceToolProperties( const ApiCallInfo& call_info, VkResult returnValue, @@ -2095,63 +2095,13 @@ void VulkanExportDiveConsumer::Process_vkSetPrivateData( } void VulkanExportDiveConsumer::Process_vkGetPrivateData( - const ApiCallInfo& call_info, - format::HandleId device, - VkObjectType objectType, - uint64_t objectHandle, - format::HandleId privateDataSlot, - PointerDecoder* pData) -{ -} - -void VulkanExportDiveConsumer::Process_vkCmdSetEvent2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - StructPointerDecoder* pDependencyInfo) -{ - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["event"], event, json_options); - FieldToJson(args["pDependencyInfo"], pDependencyInfo, json_options); - util::DiveFunctionData function_data("vkCmdSetEvent2", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); -} - -void VulkanExportDiveConsumer::Process_vkCmdResetEvent2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags2 stageMask) -{ - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["event"], event, json_options); - FieldToJson(VkPipelineStageFlags2_t(), args["stageMask"], stageMask, json_options); - util::DiveFunctionData function_data("vkCmdResetEvent2", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); -} - -void VulkanExportDiveConsumer::Process_vkCmdWaitEvents2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t eventCount, - HandlePointerDecoder* pEvents, - StructPointerDecoder* pDependencyInfos) -{ - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["eventCount"], eventCount, json_options); - HandleToJson(args["pEvents"], pEvents, json_options); - FieldToJson(args["pDependencyInfos"], pDependencyInfos, json_options); - util::DiveFunctionData function_data("vkCmdWaitEvents2", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); + const ApiCallInfo& call_info, + format::HandleId device, + VkObjectType objectType, + uint64_t objectHandle, + format::HandleId privateDataSlot, + PointerDecoder* pData) +{ } void VulkanExportDiveConsumer::Process_vkCmdPipelineBarrier2( @@ -2261,6 +2211,81 @@ void VulkanExportDiveConsumer::Process_vkCmdCopyImageToBuffer2( WriteBlockEnd(function_data); } +void VulkanExportDiveConsumer::Process_vkGetDeviceBufferMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetDeviceImageMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetDeviceImageSparseMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pSparseMemoryRequirementCount, + StructPointerDecoder* pSparseMemoryRequirements) +{ +} + +void VulkanExportDiveConsumer::Process_vkCmdSetEvent2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId event, + StructPointerDecoder* pDependencyInfo) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["event"], event, json_options); + FieldToJson(args["pDependencyInfo"], pDependencyInfo, json_options); + util::DiveFunctionData function_data("vkCmdSetEvent2", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkCmdResetEvent2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId event, + VkPipelineStageFlags2 stageMask) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["event"], event, json_options); + FieldToJson(VkPipelineStageFlags2_t(), args["stageMask"], stageMask, json_options); + util::DiveFunctionData function_data("vkCmdResetEvent2", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkCmdWaitEvents2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t eventCount, + HandlePointerDecoder* pEvents, + StructPointerDecoder* pDependencyInfos) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["eventCount"], eventCount, json_options); + HandleToJson(args["pEvents"], pEvents, json_options); + FieldToJson(args["pDependencyInfos"], pDependencyInfos, json_options); + util::DiveFunctionData function_data("vkCmdWaitEvents2", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + void VulkanExportDiveConsumer::Process_vkCmdBlitImage2( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -2547,106 +2572,70 @@ void VulkanExportDiveConsumer::Process_vkCmdSetPrimitiveRestartEnable( WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkGetDeviceBufferMemoryRequirements( +void VulkanExportDiveConsumer::Process_vkMapMemory2( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pMemoryRequirements) + StructPointerDecoder* pMemoryMapInfo, + PointerDecoder* ppData) { } -void VulkanExportDiveConsumer::Process_vkGetDeviceImageMemoryRequirements( +void VulkanExportDiveConsumer::Process_vkUnmapMemory2( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pMemoryRequirements) + StructPointerDecoder* pMemoryUnmapInfo) { } -void VulkanExportDiveConsumer::Process_vkGetDeviceImageSparseMemoryRequirements( +void VulkanExportDiveConsumer::Process_vkGetDeviceImageSubresourceLayout( const ApiCallInfo& call_info, format::HandleId device, - StructPointerDecoder* pInfo, - PointerDecoder* pSparseMemoryRequirementCount, - StructPointerDecoder* pSparseMemoryRequirements) -{ -} - -void VulkanExportDiveConsumer::Process_vkCmdSetLineStipple( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t lineStippleFactor, - uint16_t lineStipplePattern) + StructPointerDecoder* pInfo, + StructPointerDecoder* pLayout) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["lineStippleFactor"], lineStippleFactor, json_options); - FieldToJson(args["lineStipplePattern"], lineStipplePattern, json_options); - util::DiveFunctionData function_data("vkCmdSetLineStipple", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkMapMemory2( +void VulkanExportDiveConsumer::Process_vkGetImageSubresourceLayout2( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - StructPointerDecoder* pMemoryMapInfo, - PointerDecoder* ppData) + format::HandleId image, + StructPointerDecoder* pSubresource, + StructPointerDecoder* pLayout) { } -void VulkanExportDiveConsumer::Process_vkUnmapMemory2( +void VulkanExportDiveConsumer::Process_vkCopyMemoryToImage( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pMemoryUnmapInfo) -{ -} - -void VulkanExportDiveConsumer::Process_vkCmdBindIndexBuffer2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkDeviceSize size, - VkIndexType indexType) + StructPointerDecoder* pCopyMemoryToImageInfo) { - nlohmann::ordered_json dive_data; - const JsonOptions json_options; - auto& args = dive_data["args"]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["buffer"], buffer, json_options); - FieldToJson(args["offset"], offset, json_options); - FieldToJson(args["size"], size, json_options); - FieldToJson(args["indexType"], indexType, json_options); - util::DiveFunctionData function_data("vkCmdBindIndexBuffer2", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); - WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkGetRenderingAreaGranularity( +void VulkanExportDiveConsumer::Process_vkCopyImageToMemory( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - StructPointerDecoder* pRenderingAreaInfo, - StructPointerDecoder* pGranularity) + StructPointerDecoder* pCopyImageToMemoryInfo) { } -void VulkanExportDiveConsumer::Process_vkGetDeviceImageSubresourceLayout( +void VulkanExportDiveConsumer::Process_vkCopyImageToImage( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pLayout) + StructPointerDecoder* pCopyImageToImageInfo) { } -void VulkanExportDiveConsumer::Process_vkGetImageSubresourceLayout2( +void VulkanExportDiveConsumer::Process_vkTransitionImageLayout( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId image, - StructPointerDecoder* pSubresource, - StructPointerDecoder* pLayout) + uint32_t transitionCount, + StructPointerDecoder* pTransitions) { } @@ -2672,107 +2661,118 @@ void VulkanExportDiveConsumer::Process_vkCmdPushDescriptorSet( WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdSetRenderingAttachmentLocations( +void VulkanExportDiveConsumer::Process_vkCmdBindDescriptorSets2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pLocationInfo) + StructPointerDecoder* pBindDescriptorSetsInfo) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pLocationInfo"], pLocationInfo, json_options); - util::DiveFunctionData function_data("vkCmdSetRenderingAttachmentLocations", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["pBindDescriptorSetsInfo"], pBindDescriptorSetsInfo, json_options); + util::DiveFunctionData function_data("vkCmdBindDescriptorSets2", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdSetRenderingInputAttachmentIndices( +void VulkanExportDiveConsumer::Process_vkCmdPushConstants2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pInputAttachmentIndexInfo) + StructPointerDecoder* pPushConstantsInfo) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pInputAttachmentIndexInfo"], pInputAttachmentIndexInfo, json_options); - util::DiveFunctionData function_data("vkCmdSetRenderingInputAttachmentIndices", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["pPushConstantsInfo"], pPushConstantsInfo, json_options); + util::DiveFunctionData function_data("vkCmdPushConstants2", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdBindDescriptorSets2( +void VulkanExportDiveConsumer::Process_vkCmdPushDescriptorSet2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pBindDescriptorSetsInfo) + StructPointerDecoder* pPushDescriptorSetInfo) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pBindDescriptorSetsInfo"], pBindDescriptorSetsInfo, json_options); - util::DiveFunctionData function_data("vkCmdBindDescriptorSets2", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["pPushDescriptorSetInfo"], pPushDescriptorSetInfo, json_options); + util::DiveFunctionData function_data("vkCmdPushDescriptorSet2", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdPushConstants2( +void VulkanExportDiveConsumer::Process_vkCmdSetLineStipple( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pPushConstantsInfo) + uint32_t lineStippleFactor, + uint16_t lineStipplePattern) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pPushConstantsInfo"], pPushConstantsInfo, json_options); - util::DiveFunctionData function_data("vkCmdPushConstants2", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + FieldToJson(args["lineStippleFactor"], lineStippleFactor, json_options); + FieldToJson(args["lineStipplePattern"], lineStipplePattern, json_options); + util::DiveFunctionData function_data("vkCmdSetLineStipple", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCmdPushDescriptorSet2( +void VulkanExportDiveConsumer::Process_vkCmdBindIndexBuffer2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pPushDescriptorSetInfo) + format::HandleId buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType) { nlohmann::ordered_json dive_data; const JsonOptions json_options; auto& args = dive_data["args"]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pPushDescriptorSetInfo"], pPushDescriptorSetInfo, json_options); - util::DiveFunctionData function_data("vkCmdPushDescriptorSet2", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + HandleToJson(args["buffer"], buffer, json_options); + FieldToJson(args["offset"], offset, json_options); + FieldToJson(args["size"], size, json_options); + FieldToJson(args["indexType"], indexType, json_options); + util::DiveFunctionData function_data("vkCmdBindIndexBuffer2", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkCopyMemoryToImage( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCopyMemoryToImageInfo) -{ -} - -void VulkanExportDiveConsumer::Process_vkCopyImageToMemory( +void VulkanExportDiveConsumer::Process_vkGetRenderingAreaGranularity( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCopyImageToMemoryInfo) + StructPointerDecoder* pRenderingAreaInfo, + StructPointerDecoder* pGranularity) { } -void VulkanExportDiveConsumer::Process_vkCopyImageToImage( +void VulkanExportDiveConsumer::Process_vkCmdSetRenderingAttachmentLocations( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCopyImageToImageInfo) + format::HandleId commandBuffer, + StructPointerDecoder* pLocationInfo) { + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pLocationInfo"], pLocationInfo, json_options); + util::DiveFunctionData function_data("vkCmdSetRenderingAttachmentLocations", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); } -void VulkanExportDiveConsumer::Process_vkTransitionImageLayout( +void VulkanExportDiveConsumer::Process_vkCmdSetRenderingInputAttachmentIndices( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - uint32_t transitionCount, - StructPointerDecoder* pTransitions) + format::HandleId commandBuffer, + StructPointerDecoder* pInputAttachmentIndexInfo) { + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pInputAttachmentIndexInfo"], pInputAttachmentIndexInfo, json_options); + util::DiveFunctionData function_data("vkCmdSetRenderingInputAttachmentIndices", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); } void VulkanExportDiveConsumer::Process_vkDestroySurfaceKHR( @@ -4482,6 +4482,48 @@ void VulkanExportDiveConsumer::Process_vkCmdBindDescriptorBufferEmbeddedSamplers WriteBlockEnd(function_data); } +void VulkanExportDiveConsumer::Process_vkCmdCopyMemoryIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryIndirectInfo) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pCopyMemoryIndirectInfo"], pCopyMemoryIndirectInfo, json_options); + util::DiveFunctionData function_data("vkCmdCopyMemoryIndirectKHR", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkCmdCopyMemoryToImageIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryToImageIndirectInfo) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pCopyMemoryToImageIndirectInfo"], pCopyMemoryToImageIndirectInfo, json_options); + util::DiveFunctionData function_data("vkCmdCopyMemoryToImageIndirectKHR", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkCmdEndRendering2KHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pRenderingEndInfo) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pRenderingEndInfo"], pRenderingEndInfo, json_options); + util::DiveFunctionData function_data("vkCmdEndRendering2KHR", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + void VulkanExportDiveConsumer::Process_vkFrameBoundaryANDROID( const ApiCallInfo& call_info, format::HandleId device, @@ -5680,6 +5722,44 @@ void VulkanExportDiveConsumer::Process_vkGetQueueCheckpointData2NV( { } +void VulkanExportDiveConsumer::Process_vkSetSwapchainPresentTimingQueueSizeEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + uint32_t size) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetSwapchainTimingPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimingProperties, + PointerDecoder* pSwapchainTimingPropertiesCounter) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetSwapchainTimeDomainPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimeDomainProperties, + PointerDecoder* pTimeDomainsCounter) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetPastPresentationTimingEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPastPresentationTimingInfo, + StructPointerDecoder* pPastPresentationTimingProperties) +{ +} + void VulkanExportDiveConsumer::Process_vkInitializePerformanceApiINTEL( const ApiCallInfo& call_info, VkResult returnValue, @@ -6334,6 +6414,90 @@ void VulkanExportDiveConsumer::Process_vkCmdEndPerTileExecutionQCOM( WriteBlockEnd(function_data); } +void VulkanExportDiveConsumer::Process_vkGetDescriptorSetLayoutSizeEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + PointerDecoder* pLayoutSizeInBytes) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetDescriptorSetLayoutBindingOffsetEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + uint32_t binding, + PointerDecoder* pOffset) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetDescriptorEXT( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pDescriptorInfo, + size_t dataSize, + PointerDecoder* pDescriptor) +{ +} + +void VulkanExportDiveConsumer::Process_vkCmdBindDescriptorBuffersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t bufferCount, + StructPointerDecoder* pBindingInfos) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["bufferCount"], bufferCount, json_options); + FieldToJson(args["pBindingInfos"], pBindingInfos, json_options); + util::DiveFunctionData function_data("vkCmdBindDescriptorBuffersEXT", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkCmdSetDescriptorBufferOffsetsEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t setCount, + PointerDecoder* pBufferIndices, + PointerDecoder* pOffsets) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pipelineBindPoint"], pipelineBindPoint, json_options); + HandleToJson(args["layout"], layout, json_options); + FieldToJson(args["firstSet"], firstSet, json_options); + FieldToJson(args["setCount"], setCount, json_options); + FieldToJson(args["pBufferIndices"], pBufferIndices, json_options); + FieldToJson(args["pOffsets"], pOffsets, json_options); + util::DiveFunctionData function_data("vkCmdSetDescriptorBufferOffsetsEXT", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkCmdBindDescriptorBufferEmbeddedSamplersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t set) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pipelineBindPoint"], pipelineBindPoint, json_options); + HandleToJson(args["layout"], layout, json_options); + FieldToJson(args["set"], set, json_options); + util::DiveFunctionData function_data("vkCmdBindDescriptorBufferEmbeddedSamplersEXT", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + void VulkanExportDiveConsumer::Process_vkCmdSetFragmentShadingRateEnumNV( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -7574,6 +7738,118 @@ void VulkanExportDiveConsumer::Process_vkQueueNotifyOutOfBandNV( { } +void VulkanExportDiveConsumer::Process_vkCreateDataGraphPipelinesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId deferredOperation, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) +{ +} + +void VulkanExportDiveConsumer::Process_vkCreateDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSession) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetDataGraphPipelineSessionBindPointRequirementsARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pBindPointRequirementCount, + StructPointerDecoder* pBindPointRequirements) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetDataGraphPipelineSessionMemoryRequirementsARM( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) +{ +} + +void VulkanExportDiveConsumer::Process_vkBindDataGraphPipelineSessionMemoryARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + uint32_t bindInfoCount, + StructPointerDecoder* pBindInfos) +{ +} + +void VulkanExportDiveConsumer::Process_vkDestroyDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId session, + StructPointerDecoder* pAllocator) +{ +} + +void VulkanExportDiveConsumer::Process_vkCmdDispatchDataGraphARM( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId session, + StructPointerDecoder* pInfo) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["session"], session, json_options); + FieldToJson(args["pInfo"], pInfo, json_options); + util::DiveFunctionData function_data("vkCmdDispatchDataGraphARM", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkGetDataGraphPipelineAvailablePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + PointerDecoder* pPropertiesCount, + PointerDecoder* pProperties) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetDataGraphPipelinePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + uint32_t propertiesCount, + StructPointerDecoder* pProperties) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pQueueFamilyDataGraphPropertyCount, + StructPointerDecoder* pQueueFamilyDataGraphProperties) +{ +} + +void VulkanExportDiveConsumer::Process_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineInfo, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineProperties) +{ +} + void VulkanExportDiveConsumer::Process_vkCmdSetAttachmentFeedbackLoopEnableEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -7602,6 +7878,42 @@ void VulkanExportDiveConsumer::Process_vkCmdBindTileMemoryQCOM( WriteBlockEnd(function_data); } +void VulkanExportDiveConsumer::Process_vkCmdDecompressMemoryEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pDecompressMemoryInfoEXT) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pDecompressMemoryInfoEXT"], pDecompressMemoryInfoEXT, json_options); + util::DiveFunctionData function_data("vkCmdDecompressMemoryEXT", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkCmdDecompressMemoryIndirectCountEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkMemoryDecompressionMethodFlagsEXT decompressionMethod, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t maxDecompressionCount, + uint32_t stride) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(VkMemoryDecompressionMethodFlagsEXT_t(), args["decompressionMethod"], decompressionMethod, json_options); + FieldToJsonAsHex(args["indirectCommandsAddress"], indirectCommandsAddress, json_options); + FieldToJsonAsHex(args["indirectCommandsCountAddress"], indirectCommandsCountAddress, json_options); + FieldToJson(args["maxDecompressionCount"], maxDecompressionCount, json_options); + FieldToJson(args["stride"], stride, json_options); + util::DiveFunctionData function_data("vkCmdDecompressMemoryIndirectCountEXT", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + void VulkanExportDiveConsumer::Process_vkGetPartitionedAccelerationStructuresBuildSizesNV( const ApiCallInfo& call_info, format::HandleId device, @@ -7746,10 +8058,21 @@ void VulkanExportDiveConsumer::Process_vkGetMemoryMetalHandlePropertiesEXT( { } +void VulkanExportDiveConsumer::Process_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pCounterCount, + StructPointerDecoder* pCounters, + StructPointerDecoder* pCounterDescriptions) +{ +} + void VulkanExportDiveConsumer::Process_vkCmdEndRendering2EXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pRenderingEndInfo) + StructPointerDecoder* pRenderingEndInfo) { nlohmann::ordered_json dive_data; const JsonOptions json_options; @@ -7760,6 +8083,34 @@ void VulkanExportDiveConsumer::Process_vkCmdEndRendering2EXT( WriteBlockEnd(function_data); } +void VulkanExportDiveConsumer::Process_vkCmdBeginCustomResolveEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pBeginCustomResolveInfo) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pBeginCustomResolveInfo"], pBeginCustomResolveInfo, json_options); + util::DiveFunctionData function_data("vkCmdBeginCustomResolveEXT", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + +void VulkanExportDiveConsumer::Process_vkCmdSetComputeOccupancyPriorityNV( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pParameters) +{ + nlohmann::ordered_json dive_data; + const JsonOptions json_options; + auto& args = dive_data["args"]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pParameters"], pParameters, json_options); + util::DiveFunctionData function_data("vkCmdSetComputeOccupancyPriorityNV", UpdateAndGetCommandBufferRecordIndex(commandBuffer), call_info.index, args); + WriteBlockEnd(function_data); +} + void VulkanExportDiveConsumer::Process_vkCreateAccelerationStructureKHR( const ApiCallInfo& call_info, VkResult returnValue, diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_dive_consumer.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_dive_consumer.h index 663be8926..cdec03f01 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_dive_consumer.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_dive_consumer.h @@ -299,38 +299,6 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId semaphore, StructPointerDecoder* pAllocator) override; - virtual void Process_vkCreateEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pEvent) override; - - virtual void Process_vkDestroyEvent( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId event, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkGetEventStatus( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) override; - - virtual void Process_vkSetEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) override; - - virtual void Process_vkResetEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) override; - virtual void Process_vkCreateQueryPool( const ApiCallInfo& call_info, VkResult returnValue, @@ -371,20 +339,6 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId buffer, StructPointerDecoder* pAllocator) override; - virtual void Process_vkCreateBufferView( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pView) override; - - virtual void Process_vkDestroyBufferView( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId bufferView, - StructPointerDecoder* pAllocator) override; - virtual void Process_vkCreateImage( const ApiCallInfo& call_info, VkResult returnValue, @@ -420,172 +374,6 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId imageView, StructPointerDecoder* pAllocator) override; - virtual void Process_vkDestroyShaderModule( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId shaderModule, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkDestroyPipelineCache( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId pipelineCache, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkMergePipelineCaches( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId dstCache, - uint32_t srcCacheCount, - HandlePointerDecoder* pSrcCaches) override; - - virtual void Process_vkCreateGraphicsPipelines( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId pipelineCache, - uint32_t createInfoCount, - StructPointerDecoder* pCreateInfos, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelines) override; - - virtual void Process_vkCreateComputePipelines( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId pipelineCache, - uint32_t createInfoCount, - StructPointerDecoder* pCreateInfos, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelines) override; - - virtual void Process_vkDestroyPipeline( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId pipeline, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkCreatePipelineLayout( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelineLayout) override; - - virtual void Process_vkDestroyPipelineLayout( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId pipelineLayout, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkCreateSampler( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pSampler) override; - - virtual void Process_vkDestroySampler( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId sampler, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkCreateDescriptorSetLayout( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pSetLayout) override; - - virtual void Process_vkDestroyDescriptorSetLayout( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId descriptorSetLayout, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkCreateDescriptorPool( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pDescriptorPool) override; - - virtual void Process_vkDestroyDescriptorPool( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId descriptorPool, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkResetDescriptorPool( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId descriptorPool, - VkDescriptorPoolResetFlags flags) override; - - virtual void Process_vkAllocateDescriptorSets( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pAllocateInfo, - HandlePointerDecoder* pDescriptorSets) override; - - virtual void Process_vkFreeDescriptorSets( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId descriptorPool, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets) override; - - virtual void Process_vkUpdateDescriptorSets( - const ApiCallInfo& call_info, - format::HandleId device, - uint32_t descriptorWriteCount, - StructPointerDecoder* pDescriptorWrites, - uint32_t descriptorCopyCount, - StructPointerDecoder* pDescriptorCopies) override; - - virtual void Process_vkCreateFramebuffer( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pFramebuffer) override; - - virtual void Process_vkDestroyFramebuffer( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId framebuffer, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkCreateRenderPass( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pRenderPass) override; - - virtual void Process_vkDestroyRenderPass( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId renderPass, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkGetRenderAreaGranularity( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId renderPass, - StructPointerDecoder* pGranularity) override; - virtual void Process_vkCreateCommandPool( const ApiCallInfo& call_info, VkResult returnValue, @@ -638,237 +426,321 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId commandBuffer, VkCommandBufferResetFlags flags) override; - virtual void Process_vkCmdBindPipeline( + virtual void Process_vkCmdCopyBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - format::HandleId pipeline) override; + format::HandleId srcBuffer, + format::HandleId dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; - virtual void Process_vkCmdSetViewport( + virtual void Process_vkCmdCopyImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t firstViewport, - uint32_t viewportCount, - StructPointerDecoder* pViewports) override; + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; - virtual void Process_vkCmdSetScissor( + virtual void Process_vkCmdCopyBufferToImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t firstScissor, - uint32_t scissorCount, - StructPointerDecoder* pScissors) override; + format::HandleId srcBuffer, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; - virtual void Process_vkCmdSetLineWidth( + virtual void Process_vkCmdCopyImageToBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, - float lineWidth) override; + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; - virtual void Process_vkCmdSetDepthBias( + virtual void Process_vkCmdUpdateBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, - float depthBiasConstantFactor, - float depthBiasClamp, - float depthBiasSlopeFactor) override; - - virtual void Process_vkCmdSetBlendConstants( + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize dataSize, + PointerDecoder* pData) override; + + virtual void Process_vkCmdFillBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, - PointerDecoder* blendConstants) override; + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize size, + uint32_t data) override; - virtual void Process_vkCmdSetDepthBounds( + virtual void Process_vkCmdPipelineBarrier( const ApiCallInfo& call_info, format::HandleId commandBuffer, - float minDepthBounds, - float maxDepthBounds) override; + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkDependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + StructPointerDecoder* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + StructPointerDecoder* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + StructPointerDecoder* pImageMemoryBarriers) override; - virtual void Process_vkCmdSetStencilCompareMask( + virtual void Process_vkCmdBeginQuery( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t compareMask) override; + format::HandleId queryPool, + uint32_t query, + VkQueryControlFlags flags) override; - virtual void Process_vkCmdSetStencilWriteMask( + virtual void Process_vkCmdEndQuery( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t writeMask) override; + format::HandleId queryPool, + uint32_t query) override; - virtual void Process_vkCmdSetStencilReference( + virtual void Process_vkCmdResetQueryPool( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t reference) override; + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount) override; - virtual void Process_vkCmdBindDescriptorSets( + virtual void Process_vkCmdWriteTimestamp( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - format::HandleId layout, - uint32_t firstSet, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets, - uint32_t dynamicOffsetCount, - PointerDecoder* pDynamicOffsets) override; + VkPipelineStageFlagBits pipelineStage, + format::HandleId queryPool, + uint32_t query) override; - virtual void Process_vkCmdBindIndexBuffer( + virtual void Process_vkCmdCopyQueryPoolResults( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkIndexType indexType) override; + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags) override; - virtual void Process_vkCmdBindVertexBuffers( + virtual void Process_vkCmdExecuteCommands( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - HandlePointerDecoder* pBuffers, - PointerDecoder* pOffsets) override; + uint32_t commandBufferCount, + HandlePointerDecoder* pCommandBuffers) override; - virtual void Process_vkCmdDraw( + virtual void Process_vkCreateEvent( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t vertexCount, - uint32_t instanceCount, - uint32_t firstVertex, - uint32_t firstInstance) override; + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pEvent) override; - virtual void Process_vkCmdDrawIndexed( + virtual void Process_vkDestroyEvent( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t indexCount, - uint32_t instanceCount, - uint32_t firstIndex, - int32_t vertexOffset, - uint32_t firstInstance) override; + format::HandleId device, + format::HandleId event, + StructPointerDecoder* pAllocator) override; - virtual void Process_vkCmdDrawIndirect( + virtual void Process_vkGetEventStatus( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) override; + VkResult returnValue, + format::HandleId device, + format::HandleId event) override; - virtual void Process_vkCmdDrawIndexedIndirect( + virtual void Process_vkSetEvent( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) override; + VkResult returnValue, + format::HandleId device, + format::HandleId event) override; - virtual void Process_vkCmdDispatch( + virtual void Process_vkResetEvent( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) override; + VkResult returnValue, + format::HandleId device, + format::HandleId event) override; - virtual void Process_vkCmdDispatchIndirect( + virtual void Process_vkCreateBufferView( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset) override; + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pView) override; - virtual void Process_vkCmdCopyBuffer( + virtual void Process_vkDestroyBufferView( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcBuffer, - format::HandleId dstBuffer, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; + format::HandleId device, + format::HandleId bufferView, + StructPointerDecoder* pAllocator) override; - virtual void Process_vkCmdCopyImage( + virtual void Process_vkDestroyShaderModule( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; + format::HandleId device, + format::HandleId shaderModule, + StructPointerDecoder* pAllocator) override; - virtual void Process_vkCmdBlitImage( + virtual void Process_vkDestroyPipelineCache( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions, - VkFilter filter) override; + format::HandleId device, + format::HandleId pipelineCache, + StructPointerDecoder* pAllocator) override; - virtual void Process_vkCmdCopyBufferToImage( + virtual void Process_vkMergePipelineCaches( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcBuffer, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; + VkResult returnValue, + format::HandleId device, + format::HandleId dstCache, + uint32_t srcCacheCount, + HandlePointerDecoder* pSrcCaches) override; - virtual void Process_vkCmdCopyImageToBuffer( + virtual void Process_vkCreateComputePipelines( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstBuffer, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; + VkResult returnValue, + format::HandleId device, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) override; - virtual void Process_vkCmdUpdateBuffer( + virtual void Process_vkDestroyPipeline( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize dataSize, - PointerDecoder* pData) override; + format::HandleId device, + format::HandleId pipeline, + StructPointerDecoder* pAllocator) override; - virtual void Process_vkCmdFillBuffer( + virtual void Process_vkCreatePipelineLayout( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelineLayout) override; + + virtual void Process_vkDestroyPipelineLayout( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId pipelineLayout, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkCreateSampler( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSampler) override; + + virtual void Process_vkDestroySampler( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId sampler, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkCreateDescriptorSetLayout( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSetLayout) override; + + virtual void Process_vkDestroyDescriptorSetLayout( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId descriptorSetLayout, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkCreateDescriptorPool( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pDescriptorPool) override; + + virtual void Process_vkDestroyDescriptorPool( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId descriptorPool, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkResetDescriptorPool( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId descriptorPool, + VkDescriptorPoolResetFlags flags) override; + + virtual void Process_vkAllocateDescriptorSets( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pAllocateInfo, + HandlePointerDecoder* pDescriptorSets) override; + + virtual void Process_vkFreeDescriptorSets( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId descriptorPool, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets) override; + + virtual void Process_vkUpdateDescriptorSets( + const ApiCallInfo& call_info, + format::HandleId device, + uint32_t descriptorWriteCount, + StructPointerDecoder* pDescriptorWrites, + uint32_t descriptorCopyCount, + StructPointerDecoder* pDescriptorCopies) override; + + virtual void Process_vkCmdBindPipeline( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize size, - uint32_t data) override; + VkPipelineBindPoint pipelineBindPoint, + format::HandleId pipeline) override; - virtual void Process_vkCmdClearColorImage( + virtual void Process_vkCmdBindDescriptorSets( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId image, - VkImageLayout imageLayout, - StructPointerDecoder* pColor, - uint32_t rangeCount, - StructPointerDecoder* pRanges) override; + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets, + uint32_t dynamicOffsetCount, + PointerDecoder* pDynamicOffsets) override; - virtual void Process_vkCmdClearDepthStencilImage( + virtual void Process_vkCmdClearColorImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, format::HandleId image, VkImageLayout imageLayout, - StructPointerDecoder* pDepthStencil, + StructPointerDecoder* pColor, uint32_t rangeCount, StructPointerDecoder* pRanges) override; - virtual void Process_vkCmdClearAttachments( + virtual void Process_vkCmdDispatch( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t attachmentCount, - StructPointerDecoder* pAttachments, - uint32_t rectCount, - StructPointerDecoder* pRects) override; + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) override; - virtual void Process_vkCmdResolveImage( + virtual void Process_vkCmdDispatchIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; + format::HandleId buffer, + VkDeviceSize offset) override; virtual void Process_vkCmdSetEvent( const ApiCallInfo& call_info, @@ -896,56 +768,190 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase uint32_t imageMemoryBarrierCount, StructPointerDecoder* pImageMemoryBarriers) override; - virtual void Process_vkCmdPipelineBarrier( + virtual void Process_vkCreateGraphicsPipelines( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) override; + + virtual void Process_vkCreateFramebuffer( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pFramebuffer) override; + + virtual void Process_vkDestroyFramebuffer( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId framebuffer, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkCreateRenderPass( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pRenderPass) override; + + virtual void Process_vkDestroyRenderPass( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId renderPass, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkGetRenderAreaGranularity( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId renderPass, + StructPointerDecoder* pGranularity) override; + + virtual void Process_vkCmdSetViewport( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - StructPointerDecoder* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - StructPointerDecoder* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - StructPointerDecoder* pImageMemoryBarriers) override; + uint32_t firstViewport, + uint32_t viewportCount, + StructPointerDecoder* pViewports) override; - virtual void Process_vkCmdBeginQuery( + virtual void Process_vkCmdSetScissor( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t query, - VkQueryControlFlags flags) override; + uint32_t firstScissor, + uint32_t scissorCount, + StructPointerDecoder* pScissors) override; + + virtual void Process_vkCmdSetLineWidth( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + float lineWidth) override; + + virtual void Process_vkCmdSetDepthBias( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + float depthBiasConstantFactor, + float depthBiasClamp, + float depthBiasSlopeFactor) override; + + virtual void Process_vkCmdSetBlendConstants( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + PointerDecoder* blendConstants) override; + + virtual void Process_vkCmdSetDepthBounds( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + float minDepthBounds, + float maxDepthBounds) override; + + virtual void Process_vkCmdSetStencilCompareMask( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkStencilFaceFlags faceMask, + uint32_t compareMask) override; + + virtual void Process_vkCmdSetStencilWriteMask( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkStencilFaceFlags faceMask, + uint32_t writeMask) override; + + virtual void Process_vkCmdSetStencilReference( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkStencilFaceFlags faceMask, + uint32_t reference) override; + + virtual void Process_vkCmdBindIndexBuffer( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + VkIndexType indexType) override; + + virtual void Process_vkCmdBindVertexBuffers( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + HandlePointerDecoder* pBuffers, + PointerDecoder* pOffsets) override; + + virtual void Process_vkCmdDraw( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t vertexCount, + uint32_t instanceCount, + uint32_t firstVertex, + uint32_t firstInstance) override; + + virtual void Process_vkCmdDrawIndexed( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t indexCount, + uint32_t instanceCount, + uint32_t firstIndex, + int32_t vertexOffset, + uint32_t firstInstance) override; + + virtual void Process_vkCmdDrawIndirect( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) override; + + virtual void Process_vkCmdDrawIndexedIndirect( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) override; - virtual void Process_vkCmdEndQuery( + virtual void Process_vkCmdBlitImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t query) override; + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + VkFilter filter) override; - virtual void Process_vkCmdResetQueryPool( + virtual void Process_vkCmdClearDepthStencilImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount) override; + format::HandleId image, + VkImageLayout imageLayout, + StructPointerDecoder* pDepthStencil, + uint32_t rangeCount, + StructPointerDecoder* pRanges) override; - virtual void Process_vkCmdWriteTimestamp( + virtual void Process_vkCmdClearAttachments( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlagBits pipelineStage, - format::HandleId queryPool, - uint32_t query) override; + uint32_t attachmentCount, + StructPointerDecoder* pAttachments, + uint32_t rectCount, + StructPointerDecoder* pRects) override; - virtual void Process_vkCmdCopyQueryPoolResults( + virtual void Process_vkCmdResolveImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags) override; + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; virtual void Process_vkCmdBeginRenderPass( const ApiCallInfo& call_info, @@ -962,12 +968,6 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase const ApiCallInfo& call_info, format::HandleId commandBuffer) override; - virtual void Process_vkCmdExecuteCommands( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t commandBufferCount, - HandlePointerDecoder* pCommandBuffers) override; - virtual void Process_vkBindBufferMemory2( const ApiCallInfo& call_info, VkResult returnValue, @@ -995,16 +995,6 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId commandBuffer, uint32_t deviceMask) override; - virtual void Process_vkCmdDispatchBase( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) override; - virtual void Process_vkEnumeratePhysicalDeviceGroups( const ApiCallInfo& call_info, VkResult returnValue, @@ -1084,34 +1074,6 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase StructPointerDecoder* pQueueInfo, HandlePointerDecoder* pQueue) override; - virtual void Process_vkCreateSamplerYcbcrConversion( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pYcbcrConversion) override; - - virtual void Process_vkDestroySamplerYcbcrConversion( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId ycbcrConversion, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkCreateDescriptorUpdateTemplate( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pDescriptorUpdateTemplate) override; - - virtual void Process_vkDestroyDescriptorUpdateTemplate( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId descriptorUpdateTemplate, - StructPointerDecoder* pAllocator) override; - virtual void Process_vkGetPhysicalDeviceExternalBufferProperties( const ApiCallInfo& call_info, format::HandleId physicalDevice, @@ -1130,56 +1092,49 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase StructPointerDecoder* pExternalSemaphoreInfo, StructPointerDecoder* pExternalSemaphoreProperties) override; - virtual void Process_vkGetDescriptorSetLayoutSupport( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pSupport) override; - - virtual void Process_vkCmdDrawIndirectCount( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - format::HandleId countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) override; - - virtual void Process_vkCmdDrawIndexedIndirectCount( + virtual void Process_vkCmdDispatchBase( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - format::HandleId countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) override; + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) override; - virtual void Process_vkCreateRenderPass2( + virtual void Process_vkCreateDescriptorUpdateTemplate( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pCreateInfo, StructPointerDecoder* pAllocator, - HandlePointerDecoder* pRenderPass) override; + HandlePointerDecoder* pDescriptorUpdateTemplate) override; - virtual void Process_vkCmdBeginRenderPass2( + virtual void Process_vkDestroyDescriptorUpdateTemplate( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pRenderPassBegin, - StructPointerDecoder* pSubpassBeginInfo) override; + format::HandleId device, + format::HandleId descriptorUpdateTemplate, + StructPointerDecoder* pAllocator) override; - virtual void Process_vkCmdNextSubpass2( + virtual void Process_vkGetDescriptorSetLayoutSupport( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pSubpassBeginInfo, - StructPointerDecoder* pSubpassEndInfo) override; + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pSupport) override; - virtual void Process_vkCmdEndRenderPass2( + virtual void Process_vkCreateSamplerYcbcrConversion( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pSubpassEndInfo) override; + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pYcbcrConversion) override; + + virtual void Process_vkDestroySamplerYcbcrConversion( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId ycbcrConversion, + StructPointerDecoder* pAllocator) override; virtual void Process_vkResetQueryPool( const ApiCallInfo& call_info, @@ -1226,6 +1181,51 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId device, StructPointerDecoder* pInfo) override; + virtual void Process_vkCmdDrawIndirectCount( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + format::HandleId countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) override; + + virtual void Process_vkCmdDrawIndexedIndirectCount( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + format::HandleId countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) override; + + virtual void Process_vkCreateRenderPass2( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pRenderPass) override; + + virtual void Process_vkCmdBeginRenderPass2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pRenderPassBegin, + StructPointerDecoder* pSubpassBeginInfo) override; + + virtual void Process_vkCmdNextSubpass2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pSubpassBeginInfo, + StructPointerDecoder* pSubpassEndInfo) override; + + virtual void Process_vkCmdEndRenderPass2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pSubpassEndInfo) override; + virtual void Process_vkGetPhysicalDeviceToolProperties( const ApiCallInfo& call_info, VkResult returnValue, @@ -1264,25 +1264,6 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId privateDataSlot, PointerDecoder* pData) override; - virtual void Process_vkCmdSetEvent2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - StructPointerDecoder* pDependencyInfo) override; - - virtual void Process_vkCmdResetEvent2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags2 stageMask) override; - - virtual void Process_vkCmdWaitEvents2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t eventCount, - HandlePointerDecoder* pEvents, - StructPointerDecoder* pDependencyInfos) override; - virtual void Process_vkCmdPipelineBarrier2( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -1308,20 +1289,58 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pCopyBufferInfo) override; - virtual void Process_vkCmdCopyImage2( + virtual void Process_vkCmdCopyImage2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyImageInfo) override; + + virtual void Process_vkCmdCopyBufferToImage2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyBufferToImageInfo) override; + + virtual void Process_vkCmdCopyImageToBuffer2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyImageToBufferInfo) override; + + virtual void Process_vkGetDeviceBufferMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) override; + + virtual void Process_vkGetDeviceImageMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) override; + + virtual void Process_vkGetDeviceImageSparseMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pSparseMemoryRequirementCount, + StructPointerDecoder* pSparseMemoryRequirements) override; + + virtual void Process_vkCmdSetEvent2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyImageInfo) override; + format::HandleId event, + StructPointerDecoder* pDependencyInfo) override; - virtual void Process_vkCmdCopyBufferToImage2( + virtual void Process_vkCmdResetEvent2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyBufferToImageInfo) override; + format::HandleId event, + VkPipelineStageFlags2 stageMask) override; - virtual void Process_vkCmdCopyImageToBuffer2( + virtual void Process_vkCmdWaitEvents2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyImageToBufferInfo) override; + uint32_t eventCount, + HandlePointerDecoder* pEvents, + StructPointerDecoder* pDependencyInfos) override; virtual void Process_vkCmdBlitImage2( const ApiCallInfo& call_info, @@ -1428,31 +1447,6 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId commandBuffer, VkBool32 primitiveRestartEnable) override; - virtual void Process_vkGetDeviceBufferMemoryRequirements( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pMemoryRequirements) override; - - virtual void Process_vkGetDeviceImageMemoryRequirements( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pMemoryRequirements) override; - - virtual void Process_vkGetDeviceImageSparseMemoryRequirements( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - PointerDecoder* pSparseMemoryRequirementCount, - StructPointerDecoder* pSparseMemoryRequirements) override; - - virtual void Process_vkCmdSetLineStipple( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t lineStippleFactor, - uint16_t lineStipplePattern) override; - virtual void Process_vkMapMemory2( const ApiCallInfo& call_info, VkResult returnValue, @@ -1466,20 +1460,6 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId device, StructPointerDecoder* pMemoryUnmapInfo) override; - virtual void Process_vkCmdBindIndexBuffer2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkDeviceSize size, - VkIndexType indexType) override; - - virtual void Process_vkGetRenderingAreaGranularity( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pRenderingAreaInfo, - StructPointerDecoder* pGranularity) override; - virtual void Process_vkGetDeviceImageSubresourceLayout( const ApiCallInfo& call_info, format::HandleId device, @@ -1493,6 +1473,31 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase StructPointerDecoder* pSubresource, StructPointerDecoder* pLayout) override; + virtual void Process_vkCopyMemoryToImage( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyMemoryToImageInfo) override; + + virtual void Process_vkCopyImageToMemory( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyImageToMemoryInfo) override; + + virtual void Process_vkCopyImageToImage( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyImageToImageInfo) override; + + virtual void Process_vkTransitionImageLayout( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + uint32_t transitionCount, + StructPointerDecoder* pTransitions) override; + virtual void Process_vkCmdPushDescriptorSet( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -1502,16 +1507,6 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase uint32_t descriptorWriteCount, StructPointerDecoder* pDescriptorWrites) override; - virtual void Process_vkCmdSetRenderingAttachmentLocations( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pLocationInfo) override; - - virtual void Process_vkCmdSetRenderingInputAttachmentIndices( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pInputAttachmentIndexInfo) override; - virtual void Process_vkCmdBindDescriptorSets2( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -1527,30 +1522,35 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pPushDescriptorSetInfo) override; - virtual void Process_vkCopyMemoryToImage( + virtual void Process_vkCmdSetLineStipple( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCopyMemoryToImageInfo) override; + format::HandleId commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern) override; - virtual void Process_vkCopyImageToMemory( + virtual void Process_vkCmdBindIndexBuffer2( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCopyImageToMemoryInfo) override; + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType) override; - virtual void Process_vkCopyImageToImage( + virtual void Process_vkGetRenderingAreaGranularity( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCopyImageToImageInfo) override; + StructPointerDecoder* pRenderingAreaInfo, + StructPointerDecoder* pGranularity) override; - virtual void Process_vkTransitionImageLayout( + virtual void Process_vkCmdSetRenderingAttachmentLocations( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - uint32_t transitionCount, - StructPointerDecoder* pTransitions) override; + format::HandleId commandBuffer, + StructPointerDecoder* pLocationInfo) override; + + virtual void Process_vkCmdSetRenderingInputAttachmentIndices( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pInputAttachmentIndexInfo) override; virtual void Process_vkDestroySurfaceKHR( const ApiCallInfo& call_info, @@ -2638,6 +2638,21 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pBindDescriptorBufferEmbeddedSamplersInfo) override; + virtual void Process_vkCmdCopyMemoryIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryIndirectInfo) override; + + virtual void Process_vkCmdCopyMemoryToImageIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryToImageIndirectInfo) override; + + virtual void Process_vkCmdEndRendering2KHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pRenderingEndInfo) override; + virtual void Process_vkFrameBoundaryANDROID( const ApiCallInfo& call_info, format::HandleId device, @@ -3317,6 +3332,36 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase PointerDecoder* pCheckpointDataCount, StructPointerDecoder* pCheckpointData) override; + virtual void Process_vkSetSwapchainPresentTimingQueueSizeEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + uint32_t size) override; + + virtual void Process_vkGetSwapchainTimingPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimingProperties, + PointerDecoder* pSwapchainTimingPropertiesCounter) override; + + virtual void Process_vkGetSwapchainTimeDomainPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimeDomainProperties, + PointerDecoder* pTimeDomainsCounter) override; + + virtual void Process_vkGetPastPresentationTimingEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPastPresentationTimingInfo, + StructPointerDecoder* pPastPresentationTimingProperties) override; + virtual void Process_vkInitializePerformanceApiINTEL( const ApiCallInfo& call_info, VkResult returnValue, @@ -3681,6 +3726,49 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pPerTileEndInfo) override; + virtual void Process_vkGetDescriptorSetLayoutSizeEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + PointerDecoder* pLayoutSizeInBytes) override; + + virtual void Process_vkGetDescriptorSetLayoutBindingOffsetEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + uint32_t binding, + PointerDecoder* pOffset) override; + + virtual void Process_vkGetDescriptorEXT( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pDescriptorInfo, + size_t dataSize, + PointerDecoder* pDescriptor) override; + + virtual void Process_vkCmdBindDescriptorBuffersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t bufferCount, + StructPointerDecoder* pBindingInfos) override; + + virtual void Process_vkCmdSetDescriptorBufferOffsetsEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t setCount, + PointerDecoder* pBufferIndices, + PointerDecoder* pOffsets) override; + + virtual void Process_vkCmdBindDescriptorBufferEmbeddedSamplersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t set) override; + virtual void Process_vkCmdSetFragmentShadingRateEnumNV( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -4304,6 +4392,88 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId queue, StructPointerDecoder* pQueueTypeInfo) override; + virtual void Process_vkCreateDataGraphPipelinesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId deferredOperation, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) override; + + virtual void Process_vkCreateDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSession) override; + + virtual void Process_vkGetDataGraphPipelineSessionBindPointRequirementsARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pBindPointRequirementCount, + StructPointerDecoder* pBindPointRequirements) override; + + virtual void Process_vkGetDataGraphPipelineSessionMemoryRequirementsARM( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) override; + + virtual void Process_vkBindDataGraphPipelineSessionMemoryARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + uint32_t bindInfoCount, + StructPointerDecoder* pBindInfos) override; + + virtual void Process_vkDestroyDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId session, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkCmdDispatchDataGraphARM( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId session, + StructPointerDecoder* pInfo) override; + + virtual void Process_vkGetDataGraphPipelineAvailablePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + PointerDecoder* pPropertiesCount, + PointerDecoder* pProperties) override; + + virtual void Process_vkGetDataGraphPipelinePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + uint32_t propertiesCount, + StructPointerDecoder* pProperties) override; + + virtual void Process_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pQueueFamilyDataGraphPropertyCount, + StructPointerDecoder* pQueueFamilyDataGraphProperties) override; + + virtual void Process_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineInfo, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineProperties) override; + virtual void Process_vkCmdSetAttachmentFeedbackLoopEnableEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -4314,6 +4484,20 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pTileMemoryBindInfo) override; + virtual void Process_vkCmdDecompressMemoryEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pDecompressMemoryInfoEXT) override; + + virtual void Process_vkCmdDecompressMemoryIndirectCountEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkMemoryDecompressionMethodFlagsEXT decompressionMethod, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t maxDecompressionCount, + uint32_t stride) override; + virtual void Process_vkGetPartitionedAccelerationStructuresBuildSizesNV( const ApiCallInfo& call_info, format::HandleId device, @@ -4407,10 +4591,29 @@ class VulkanExportDiveConsumer : public VulkanExportDiveConsumerBase uint64_t pHandle, StructPointerDecoder* pMemoryMetalHandleProperties) override; + virtual void Process_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pCounterCount, + StructPointerDecoder* pCounters, + StructPointerDecoder* pCounterDescriptions) override; + virtual void Process_vkCmdEndRendering2EXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pRenderingEndInfo) override; + StructPointerDecoder* pRenderingEndInfo) override; + + virtual void Process_vkCmdBeginCustomResolveEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pBeginCustomResolveInfo) override; + + virtual void Process_vkCmdSetComputeOccupancyPriorityNV( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pParameters) override; virtual void Process_vkCreateAccelerationStructureKHR( const ApiCallInfo& call_info, diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_json.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_json.cpp index f5864c17f..872bd07aa 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_json.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_json.cpp @@ -915,219 +915,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH264WeightedBipred } } -void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH265AspectRatioIdc& value, const JsonOptions& options) -{ - switch (value) { - case STD_VIDEO_H265_ASPECT_RATIO_IDC_UNSPECIFIED: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_UNSPECIFIED"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_SQUARE: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_SQUARE"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_12_11: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_12_11"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_10_11: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_10_11"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_16_11: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_16_11"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_40_33: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_40_33"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_24_11: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_24_11"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_20_11: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_20_11"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_32_11: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_32_11"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_80_33: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_80_33"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_18_11: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_18_11"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_15_11: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_15_11"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_64_33: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_64_33"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_160_99: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_160_99"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_4_3: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_4_3"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_3_2: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_3_2"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_2_1: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_2_1"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_EXTENDED_SAR: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_EXTENDED_SAR"; - break; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_INVALID: - jdata = "STD_VIDEO_H265_ASPECT_RATIO_IDC_INVALID"; - break; - default: - jdata = to_hex_fixed_width(value); - break; - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH265ChromaFormatIdc& value, const JsonOptions& options) -{ - switch (value) { - case STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME: - jdata = "STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME"; - break; - case STD_VIDEO_H265_CHROMA_FORMAT_IDC_420: - jdata = "STD_VIDEO_H265_CHROMA_FORMAT_IDC_420"; - break; - case STD_VIDEO_H265_CHROMA_FORMAT_IDC_422: - jdata = "STD_VIDEO_H265_CHROMA_FORMAT_IDC_422"; - break; - case STD_VIDEO_H265_CHROMA_FORMAT_IDC_444: - jdata = "STD_VIDEO_H265_CHROMA_FORMAT_IDC_444"; - break; - case STD_VIDEO_H265_CHROMA_FORMAT_IDC_INVALID: - jdata = "STD_VIDEO_H265_CHROMA_FORMAT_IDC_INVALID"; - break; - default: - jdata = to_hex_fixed_width(value); - break; - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH265LevelIdc& value, const JsonOptions& options) -{ - switch (value) { - case STD_VIDEO_H265_LEVEL_IDC_1_0: - jdata = "STD_VIDEO_H265_LEVEL_IDC_1_0"; - break; - case STD_VIDEO_H265_LEVEL_IDC_2_0: - jdata = "STD_VIDEO_H265_LEVEL_IDC_2_0"; - break; - case STD_VIDEO_H265_LEVEL_IDC_2_1: - jdata = "STD_VIDEO_H265_LEVEL_IDC_2_1"; - break; - case STD_VIDEO_H265_LEVEL_IDC_3_0: - jdata = "STD_VIDEO_H265_LEVEL_IDC_3_0"; - break; - case STD_VIDEO_H265_LEVEL_IDC_3_1: - jdata = "STD_VIDEO_H265_LEVEL_IDC_3_1"; - break; - case STD_VIDEO_H265_LEVEL_IDC_4_0: - jdata = "STD_VIDEO_H265_LEVEL_IDC_4_0"; - break; - case STD_VIDEO_H265_LEVEL_IDC_4_1: - jdata = "STD_VIDEO_H265_LEVEL_IDC_4_1"; - break; - case STD_VIDEO_H265_LEVEL_IDC_5_0: - jdata = "STD_VIDEO_H265_LEVEL_IDC_5_0"; - break; - case STD_VIDEO_H265_LEVEL_IDC_5_1: - jdata = "STD_VIDEO_H265_LEVEL_IDC_5_1"; - break; - case STD_VIDEO_H265_LEVEL_IDC_5_2: - jdata = "STD_VIDEO_H265_LEVEL_IDC_5_2"; - break; - case STD_VIDEO_H265_LEVEL_IDC_6_0: - jdata = "STD_VIDEO_H265_LEVEL_IDC_6_0"; - break; - case STD_VIDEO_H265_LEVEL_IDC_6_1: - jdata = "STD_VIDEO_H265_LEVEL_IDC_6_1"; - break; - case STD_VIDEO_H265_LEVEL_IDC_6_2: - jdata = "STD_VIDEO_H265_LEVEL_IDC_6_2"; - break; - case STD_VIDEO_H265_LEVEL_IDC_INVALID: - jdata = "STD_VIDEO_H265_LEVEL_IDC_INVALID"; - break; - default: - jdata = to_hex_fixed_width(value); - break; - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH265PictureType& value, const JsonOptions& options) -{ - switch (value) { - case STD_VIDEO_H265_PICTURE_TYPE_P: - jdata = "STD_VIDEO_H265_PICTURE_TYPE_P"; - break; - case STD_VIDEO_H265_PICTURE_TYPE_B: - jdata = "STD_VIDEO_H265_PICTURE_TYPE_B"; - break; - case STD_VIDEO_H265_PICTURE_TYPE_I: - jdata = "STD_VIDEO_H265_PICTURE_TYPE_I"; - break; - case STD_VIDEO_H265_PICTURE_TYPE_IDR: - jdata = "STD_VIDEO_H265_PICTURE_TYPE_IDR"; - break; - case STD_VIDEO_H265_PICTURE_TYPE_INVALID: - jdata = "STD_VIDEO_H265_PICTURE_TYPE_INVALID"; - break; - default: - jdata = to_hex_fixed_width(value); - break; - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH265ProfileIdc& value, const JsonOptions& options) -{ - switch (value) { - case STD_VIDEO_H265_PROFILE_IDC_MAIN: - jdata = "STD_VIDEO_H265_PROFILE_IDC_MAIN"; - break; - case STD_VIDEO_H265_PROFILE_IDC_MAIN_10: - jdata = "STD_VIDEO_H265_PROFILE_IDC_MAIN_10"; - break; - case STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE: - jdata = "STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE"; - break; - case STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS: - jdata = "STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS"; - break; - case STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS: - jdata = "STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS"; - break; - case STD_VIDEO_H265_PROFILE_IDC_INVALID: - jdata = "STD_VIDEO_H265_PROFILE_IDC_INVALID"; - break; - default: - jdata = to_hex_fixed_width(value); - break; - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH265SliceType& value, const JsonOptions& options) -{ - switch (value) { - case STD_VIDEO_H265_SLICE_TYPE_B: - jdata = "STD_VIDEO_H265_SLICE_TYPE_B"; - break; - case STD_VIDEO_H265_SLICE_TYPE_P: - jdata = "STD_VIDEO_H265_SLICE_TYPE_P"; - break; - case STD_VIDEO_H265_SLICE_TYPE_I: - jdata = "STD_VIDEO_H265_SLICE_TYPE_I"; - break; - case STD_VIDEO_H265_SLICE_TYPE_INVALID: - jdata = "STD_VIDEO_H265_SLICE_TYPE_INVALID"; - break; - default: - jdata = to_hex_fixed_width(value); - break; - } -} - void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoVP9ColorSpace& value, const JsonOptions& options) { switch (value) { @@ -1656,6 +1443,12 @@ void FieldToJson(VkAccessFlagBits2_t, nlohmann::ordered_json& jdata, const VkAcc case VK_ACCESS_2_DATA_GRAPH_WRITE_BIT_ARM: jdata = "VK_ACCESS_2_DATA_GRAPH_WRITE_BIT_ARM"; break; + case VK_ACCESS_2_MEMORY_DECOMPRESSION_READ_BIT_EXT: + jdata = "VK_ACCESS_2_MEMORY_DECOMPRESSION_READ_BIT_EXT"; + break; + case VK_ACCESS_2_MEMORY_DECOMPRESSION_WRITE_BIT_EXT: + jdata = "VK_ACCESS_2_MEMORY_DECOMPRESSION_WRITE_BIT_EXT"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -1679,6 +1472,24 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkAcquireProfilingLockFlag jdata = to_hex_fixed_width(value); } +void FieldToJson(nlohmann::ordered_json& jdata, const VkAddressCopyFlagBitsKHR& value, const JsonOptions& options) +{ + switch (value) { + case VK_ADDRESS_COPY_DEVICE_LOCAL_BIT_KHR: + jdata = "VK_ADDRESS_COPY_DEVICE_LOCAL_BIT_KHR"; + break; + case VK_ADDRESS_COPY_SPARSE_BIT_KHR: + jdata = "VK_ADDRESS_COPY_SPARSE_BIT_KHR"; + break; + case VK_ADDRESS_COPY_PROTECTED_BIT_KHR: + jdata = "VK_ADDRESS_COPY_PROTECTED_BIT_KHR"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const VkAntiLagModeAMD& value, const JsonOptions& options) { switch (value) { @@ -1718,6 +1529,12 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkAttachmentDescriptionFla case VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT: jdata = "VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT"; break; + case VK_ATTACHMENT_DESCRIPTION_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR: + jdata = "VK_ATTACHMENT_DESCRIPTION_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR"; + break; + case VK_ATTACHMENT_DESCRIPTION_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR: + jdata = "VK_ATTACHMENT_DESCRIPTION_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -2258,12 +2075,18 @@ void FieldToJson(VkBufferUsageFlagBits2_t, nlohmann::ordered_json& jdata, const case VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT: jdata = "VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT"; break; + case VK_BUFFER_USAGE_2_COMPRESSED_DATA_DGF1_BIT_AMDX: + jdata = "VK_BUFFER_USAGE_2_COMPRESSED_DATA_DGF1_BIT_AMDX"; + break; case VK_BUFFER_USAGE_2_DATA_GRAPH_FOREIGN_DESCRIPTOR_BIT_ARM: jdata = "VK_BUFFER_USAGE_2_DATA_GRAPH_FOREIGN_DESCRIPTOR_BIT_ARM"; break; case VK_BUFFER_USAGE_2_TILE_MEMORY_BIT_QCOM: jdata = "VK_BUFFER_USAGE_2_TILE_MEMORY_BIT_QCOM"; break; + case VK_BUFFER_USAGE_2_MEMORY_DECOMPRESSION_BIT_EXT: + jdata = "VK_BUFFER_USAGE_2_MEMORY_DECOMPRESSION_BIT_EXT"; + break; case VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT: jdata = "VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT"; break; @@ -2309,6 +2132,9 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkBuildAccelerationStructu case VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR: jdata = "VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR"; break; + case VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_CLUSTER_OPACITY_MICROMAPS_BIT_NV: + jdata = "VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_CLUSTER_OPACITY_MICROMAPS_BIT_NV"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -2861,6 +2687,74 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkCullModeFlagBits& value, } } +void FieldToJson(nlohmann::ordered_json& jdata, const VkDataGraphModelCacheTypeQCOM& value, const JsonOptions& options) +{ + switch (value) { + case VK_DATA_GRAPH_MODEL_CACHE_TYPE_GENERIC_BINARY_QCOM: + jdata = "VK_DATA_GRAPH_MODEL_CACHE_TYPE_GENERIC_BINARY_QCOM"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + +void FieldToJson(VkDataGraphPipelineDispatchFlagBitsARM_t, nlohmann::ordered_json& jdata, const VkDataGraphPipelineDispatchFlagBitsARM& value, const JsonOptions& options) +{ + jdata = to_hex_fixed_width(value); +} + +void FieldToJson(nlohmann::ordered_json& jdata, const VkDataGraphPipelinePropertyARM& value, const JsonOptions& options) +{ + switch (value) { + case VK_DATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM: + jdata = "VK_DATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM"; + break; + case VK_DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM: + jdata = "VK_DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const VkDataGraphPipelineSessionBindPointARM& value, const JsonOptions& options) +{ + switch (value) { + case VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM: + jdata = "VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const VkDataGraphPipelineSessionBindPointTypeARM& value, const JsonOptions& options) +{ + switch (value) { + case VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM: + jdata = "VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + +void FieldToJson(VkDataGraphPipelineSessionCreateFlagBitsARM_t, nlohmann::ordered_json& jdata, const VkDataGraphPipelineSessionCreateFlagBitsARM& value, const JsonOptions& options) +{ + switch (value) { + case VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM: + jdata = "VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const VkDebugReportFlagBitsEXT& value, const JsonOptions& options) { switch (value) { @@ -3653,6 +3547,9 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkDriverId& value, const J case VK_DRIVER_ID_VULKAN_SC_EMULATION_ON_VULKAN: jdata = "VK_DRIVER_ID_VULKAN_SC_EMULATION_ON_VULKAN"; break; + case VK_DRIVER_ID_MESA_KOSMICKRISP: + jdata = "VK_DRIVER_ID_MESA_KOSMICKRISP"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -4013,6 +3910,9 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkExternalMemoryHandleType case VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV: jdata = "VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV"; break; + case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OH_NATIVE_BUFFER_BIT_OHOS: + jdata = "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OH_NATIVE_BUFFER_BIT_OHOS"; + break; case VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX: jdata = "VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX"; break; @@ -4886,6 +4786,96 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkFormat& value, const Jso case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: jdata = "VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG"; break; + case VK_FORMAT_ASTC_3x3x3_UNORM_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_3x3x3_UNORM_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_3x3x3_SRGB_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_3x3x3_SRGB_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_3x3x3_SFLOAT_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_3x3x3_SFLOAT_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_4x3x3_UNORM_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_4x3x3_UNORM_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_4x3x3_SRGB_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_4x3x3_SRGB_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_4x3x3_SFLOAT_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_4x3x3_SFLOAT_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_4x4x3_UNORM_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_4x4x3_UNORM_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_4x4x3_SRGB_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_4x4x3_SRGB_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_4x4x3_SFLOAT_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_4x4x3_SFLOAT_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_4x4x4_UNORM_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_4x4x4_UNORM_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_4x4x4_SRGB_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_4x4x4_SRGB_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_4x4x4_SFLOAT_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_4x4x4_SFLOAT_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_5x4x4_UNORM_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_5x4x4_UNORM_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_5x4x4_SRGB_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_5x4x4_SRGB_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_5x4x4_SFLOAT_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_5x4x4_SFLOAT_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_5x5x4_UNORM_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_5x5x4_UNORM_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_5x5x4_SRGB_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_5x5x4_SRGB_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_5x5x4_SFLOAT_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_5x5x4_SFLOAT_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_5x5x5_UNORM_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_5x5x5_UNORM_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_5x5x5_SRGB_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_5x5x5_SRGB_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_5x5x5_SFLOAT_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_5x5x5_SFLOAT_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_6x5x5_UNORM_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_6x5x5_UNORM_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_6x5x5_SRGB_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_6x5x5_SRGB_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_6x5x5_SFLOAT_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_6x5x5_SFLOAT_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_6x6x5_UNORM_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_6x6x5_UNORM_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_6x6x5_SRGB_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_6x6x5_SRGB_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_6x6x5_SFLOAT_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_6x6x5_SFLOAT_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_6x6x6_UNORM_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_6x6x6_UNORM_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_6x6x6_SRGB_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_6x6x6_SRGB_BLOCK_EXT"; + break; + case VK_FORMAT_ASTC_6x6x6_SFLOAT_BLOCK_EXT: + jdata = "VK_FORMAT_ASTC_6x6x6_SFLOAT_BLOCK_EXT"; + break; case VK_FORMAT_R8_BOOL_ARM: jdata = "VK_FORMAT_R8_BOOL_ARM"; break; @@ -5186,12 +5176,27 @@ void FieldToJson(VkFormatFeatureFlagBits2_t, nlohmann::ordered_json& jdata, cons case VK_FORMAT_FEATURE_2_TENSOR_DATA_GRAPH_BIT_ARM: jdata = "VK_FORMAT_FEATURE_2_TENSOR_DATA_GRAPH_BIT_ARM"; break; + case VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR: + jdata = "VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR"; + break; case VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR: jdata = "VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR"; break; case VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR: jdata = "VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR"; break; + case VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_COMPUTE_QUEUE_BIT_KHR: + jdata = "VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_COMPUTE_QUEUE_BIT_KHR"; + break; + case VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_TRANSFER_QUEUE_BIT_KHR: + jdata = "VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_TRANSFER_QUEUE_BIT_KHR"; + break; + case VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_COMPUTE_QUEUE_BIT_KHR: + jdata = "VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_COMPUTE_QUEUE_BIT_KHR"; + break; + case VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_TRANSFER_QUEUE_BIT_KHR: + jdata = "VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_TRANSFER_QUEUE_BIT_KHR"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -5402,6 +5407,9 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkGeometryTypeKHR& value, case VK_GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV: jdata = "VK_GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV"; break; + case VK_GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX: + jdata = "VK_GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -6341,6 +6349,18 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkMemoryAllocateFlagBits& } } +void FieldToJson(VkMemoryDecompressionMethodFlagBitsEXT_t, nlohmann::ordered_json& jdata, const VkMemoryDecompressionMethodFlagBitsEXT& value, const JsonOptions& options) +{ + switch (value) { + case VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_EXT: + jdata = "VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_EXT"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const VkMemoryHeapFlagBits& value, const JsonOptions& options) { switch (value) { @@ -6545,12 +6565,12 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkObjectType& value, const case VK_OBJECT_TYPE_COMMAND_POOL: jdata = "VK_OBJECT_TYPE_COMMAND_POOL"; break; - case VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION: - jdata = "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"; - break; case VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE: jdata = "VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE"; break; + case VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION: + jdata = "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"; + break; case VK_OBJECT_TYPE_PRIVATE_DATA_SLOT: jdata = "VK_OBJECT_TYPE_PRIVATE_DATA_SLOT"; break; @@ -6887,6 +6907,21 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkPartitionedAccelerationS } } +void FieldToJson(nlohmann::ordered_json& jdata, const VkPastPresentationTimingFlagBitsEXT& value, const JsonOptions& options) +{ + switch (value) { + case VK_PAST_PRESENTATION_TIMING_ALLOW_PARTIAL_RESULTS_BIT_EXT: + jdata = "VK_PAST_PRESENTATION_TIMING_ALLOW_PARTIAL_RESULTS_BIT_EXT"; + break; + case VK_PAST_PRESENTATION_TIMING_ALLOW_OUT_OF_ORDER_RESULTS_BIT_EXT: + jdata = "VK_PAST_PRESENTATION_TIMING_ALLOW_OUT_OF_ORDER_RESULTS_BIT_EXT"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const VkPeerMemoryFeatureFlagBits& value, const JsonOptions& options) { switch (value) { @@ -7076,6 +7111,42 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkPerformanceValueTypeINTE } } +void FieldToJson(nlohmann::ordered_json& jdata, const VkPhysicalDeviceDataGraphOperationTypeARM& value, const JsonOptions& options) +{ + switch (value) { + case VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM: + jdata = "VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM"; + break; + case VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_NEURAL_MODEL_QCOM: + jdata = "VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_NEURAL_MODEL_QCOM"; + break; + case VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_BUILTIN_MODEL_QCOM: + jdata = "VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_BUILTIN_MODEL_QCOM"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const VkPhysicalDeviceDataGraphProcessingEngineTypeARM& value, const JsonOptions& options) +{ + switch (value) { + case VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM: + jdata = "VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM"; + break; + case VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM: + jdata = "VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM"; + break; + case VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM: + jdata = "VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const VkPhysicalDeviceLayeredApiKHR& value, const JsonOptions& options) { switch (value) { @@ -7184,6 +7255,9 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkPipelineCacheHeaderVersi case VK_PIPELINE_CACHE_HEADER_VERSION_ONE: jdata = "VK_PIPELINE_CACHE_HEADER_VERSION_ONE"; break; + case VK_PIPELINE_CACHE_HEADER_VERSION_DATA_GRAPH_QCOM: + jdata = "VK_PIPELINE_CACHE_HEADER_VERSION_DATA_GRAPH_QCOM"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -7219,12 +7293,12 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkPipelineCreateFlagBits& case VK_PIPELINE_CREATE_DERIVATIVE_BIT: jdata = "VK_PIPELINE_CREATE_DERIVATIVE_BIT"; break; - case VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT: - jdata = "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"; - break; case VK_PIPELINE_CREATE_DISPATCH_BASE_BIT: jdata = "VK_PIPELINE_CREATE_DISPATCH_BASE_BIT"; break; + case VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT: + jdata = "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"; + break; case VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT: jdata = "VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT"; break; @@ -7426,6 +7500,9 @@ void FieldToJson(VkPipelineCreateFlagBits2_t, nlohmann::ordered_json& jdata, con case VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE: jdata = "VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE"; break; + case VK_PIPELINE_CREATE_2_64_BIT_INDEXING_BIT_EXT: + jdata = "VK_PIPELINE_CREATE_2_64_BIT_INDEXING_BIT_EXT"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -7780,6 +7857,12 @@ void FieldToJson(VkPipelineStageFlagBits2_t, nlohmann::ordered_json& jdata, cons case VK_PIPELINE_STAGE_2_DATA_GRAPH_BIT_ARM: jdata = "VK_PIPELINE_STAGE_2_DATA_GRAPH_BIT_ARM"; break; + case VK_PIPELINE_STAGE_2_COPY_INDIRECT_BIT_KHR: + jdata = "VK_PIPELINE_STAGE_2_COPY_INDIRECT_BIT_KHR"; + break; + case VK_PIPELINE_STAGE_2_MEMORY_DECOMPRESSION_BIT_EXT: + jdata = "VK_PIPELINE_STAGE_2_MEMORY_DECOMPRESSION_BIT_EXT"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -7888,6 +7971,42 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkPresentScalingFlagBitsKH } } +void FieldToJson(nlohmann::ordered_json& jdata, const VkPresentStageFlagBitsEXT& value, const JsonOptions& options) +{ + switch (value) { + case VK_PRESENT_STAGE_QUEUE_OPERATIONS_END_BIT_EXT: + jdata = "VK_PRESENT_STAGE_QUEUE_OPERATIONS_END_BIT_EXT"; + break; + case VK_PRESENT_STAGE_REQUEST_DEQUEUED_BIT_EXT: + jdata = "VK_PRESENT_STAGE_REQUEST_DEQUEUED_BIT_EXT"; + break; + case VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_OUT_BIT_EXT: + jdata = "VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_OUT_BIT_EXT"; + break; + case VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_VISIBLE_BIT_EXT: + jdata = "VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_VISIBLE_BIT_EXT"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const VkPresentTimingInfoFlagBitsEXT& value, const JsonOptions& options) +{ + switch (value) { + case VK_PRESENT_TIMING_INFO_PRESENT_AT_RELATIVE_TIME_BIT_EXT: + jdata = "VK_PRESENT_TIMING_INFO_PRESENT_AT_RELATIVE_TIME_BIT_EXT"; + break; + case VK_PRESENT_TIMING_INFO_PRESENT_AT_NEAREST_REFRESH_CYCLE_BIT_EXT: + jdata = "VK_PRESENT_TIMING_INFO_PRESENT_AT_NEAREST_REFRESH_CYCLE_BIT_EXT"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const VkPrimitiveTopology& value, const JsonOptions& options) { switch (value) { @@ -8209,14 +8328,14 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkRasterizationOrderAMD& v } } -void FieldToJson(nlohmann::ordered_json& jdata, const VkRayTracingInvocationReorderModeNV& value, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const VkRayTracingInvocationReorderModeEXT& value, const JsonOptions& options) { switch (value) { - case VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV: - jdata = "VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV"; + case VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_EXT: + jdata = "VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_EXT"; break; - case VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV: - jdata = "VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV"; + case VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_EXT: + jdata = "VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_EXT"; break; default: jdata = to_hex_fixed_width(value); @@ -8287,6 +8406,24 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkRenderPassCreateFlagBits } } +void FieldToJson(nlohmann::ordered_json& jdata, const VkRenderingAttachmentFlagBitsKHR& value, const JsonOptions& options) +{ + switch (value) { + case VK_RENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR: + jdata = "VK_RENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR"; + break; + case VK_RENDERING_ATTACHMENT_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR: + jdata = "VK_RENDERING_ATTACHMENT_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR"; + break; + case VK_RENDERING_ATTACHMENT_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR: + jdata = "VK_RENDERING_ATTACHMENT_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const VkRenderingFlagBits& value, const JsonOptions& options) { switch (value) { @@ -8308,6 +8445,30 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkRenderingFlagBits& value case VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE: jdata = "VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE"; break; + case VK_RENDERING_FRAGMENT_REGION_BIT_EXT: + jdata = "VK_RENDERING_FRAGMENT_REGION_BIT_EXT"; + break; + case VK_RENDERING_CUSTOM_RESOLVE_BIT_EXT: + jdata = "VK_RENDERING_CUSTOM_RESOLVE_BIT_EXT"; + break; + case VK_RENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHR: + jdata = "VK_RENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHR"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const VkResolveImageFlagBitsKHR& value, const JsonOptions& options) +{ + switch (value) { + case VK_RESOLVE_IMAGE_SKIP_TRANSFER_FUNCTION_BIT_KHR: + jdata = "VK_RESOLVE_IMAGE_SKIP_TRANSFER_FUNCTION_BIT_KHR"; + break; + case VK_RESOLVE_IMAGE_ENABLE_TRANSFER_FUNCTION_BIT_KHR: + jdata = "VK_RESOLVE_IMAGE_ENABLE_TRANSFER_FUNCTION_BIT_KHR"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -8335,6 +8496,9 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkResolveModeFlagBits& val case VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID: jdata = "VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID"; break; + case VK_RESOLVE_MODE_CUSTOM_BIT_EXT: + jdata = "VK_RESOLVE_MODE_CUSTOM_BIT_EXT"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -8401,18 +8565,21 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkResult& value, const Jso case VK_ERROR_UNKNOWN: jdata = "VK_ERROR_UNKNOWN"; break; + case VK_ERROR_VALIDATION_FAILED: + jdata = "VK_ERROR_VALIDATION_FAILED"; + break; case VK_ERROR_OUT_OF_POOL_MEMORY: jdata = "VK_ERROR_OUT_OF_POOL_MEMORY"; break; case VK_ERROR_INVALID_EXTERNAL_HANDLE: jdata = "VK_ERROR_INVALID_EXTERNAL_HANDLE"; break; - case VK_ERROR_FRAGMENTATION: - jdata = "VK_ERROR_FRAGMENTATION"; - break; case VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS: jdata = "VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS"; break; + case VK_ERROR_FRAGMENTATION: + jdata = "VK_ERROR_FRAGMENTATION"; + break; case VK_PIPELINE_COMPILE_REQUIRED: jdata = "VK_PIPELINE_COMPILE_REQUIRED"; break; @@ -8434,9 +8601,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkResult& value, const Jso case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR: jdata = "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR"; break; - case VK_ERROR_VALIDATION_FAILED_EXT: - jdata = "VK_ERROR_VALIDATION_FAILED_EXT"; - break; case VK_ERROR_INVALID_SHADER_NV: jdata = "VK_ERROR_INVALID_SHADER_NV"; break; @@ -8461,6 +8625,9 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkResult& value, const Jso case VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT: jdata = "VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT"; break; + case VK_ERROR_PRESENT_TIMING_QUEUE_FULL_EXT: + jdata = "VK_ERROR_PRESENT_TIMING_QUEUE_FULL_EXT"; + break; case VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT: jdata = "VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT"; break; @@ -8757,6 +8924,9 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkShaderCreateFlagBitsEXT& case VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT: jdata = "VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT"; break; + case VK_SHADER_CREATE_64_BIT_INDEXING_BIT_EXT: + jdata = "VK_SHADER_CREATE_64_BIT_INDEXING_BIT_EXT"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -9174,18 +9344,12 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO: jdata = "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES"; - break; case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO: jdata = "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO"; break; case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO: jdata = "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"; - break; case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: jdata = "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS"; break; @@ -9195,9 +9359,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO: jdata = "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO"; break; - case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO: - jdata = "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"; - break; case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO: jdata = "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO"; break; @@ -9261,30 +9422,9 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"; - break; - case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO: - jdata = "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"; - break; case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO: jdata = "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO"; break; - case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO: - jdata = "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"; - break; - case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO: - jdata = "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"; - break; case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO: jdata = "VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO"; break; @@ -9297,27 +9437,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2: jdata = "VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2"; break; - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO: - jdata = "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"; - break; - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO: - jdata = "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"; - break; - case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO: - jdata = "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"; - break; - case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO: - jdata = "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"; - break; - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"; - break; - case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO: - jdata = "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"; - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO"; break; @@ -9360,12 +9479,63 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES: jdata = "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES"; break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"; + break; + case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO: + jdata = "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"; + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES"; break; case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT: jdata = "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT"; break; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO: + jdata = "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"; + break; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO: + jdata = "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"; + break; + case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO: + jdata = "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"; + break; + case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO: + jdata = "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"; + break; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"; + break; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO: + jdata = "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"; + break; + case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO: + jdata = "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"; + break; + case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO: + jdata = "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"; + break; + case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO: + jdata = "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES"; + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES"; break; @@ -9384,33 +9554,51 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO: jdata = "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO"; break; - case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2: - jdata = "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES"; break; - case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2: - jdata = "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES"; break; - case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2: - jdata = "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES"; break; - case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2: - jdata = "VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES"; break; - case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: - jdata = "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES"; break; - case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO: - jdata = "VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO"; + case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO: + jdata = "VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO"; break; - case VK_STRUCTURE_TYPE_SUBPASS_END_INFO: - jdata = "VK_STRUCTURE_TYPE_SUBPASS_END_INFO"; + case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: + jdata = "VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO"; + break; + case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO: + jdata = "VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO"; + break; + case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO: + jdata = "VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES"; + break; + case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO: + jdata = "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO"; + break; + case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO: + jdata = "VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO"; + break; + case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO: + jdata = "VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO"; + break; + case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO: + jdata = "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO"; break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES"; - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES"; break; @@ -9435,26 +9623,50 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT: jdata = "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES"; - break; - case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE: - jdata = "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE"; - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES"; break; - case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO: - jdata = "VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO"; - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES"; break; case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO: jdata = "VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES"; + break; + case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2: + jdata = "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2"; + break; + case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2: + jdata = "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2"; + break; + case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2: + jdata = "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2"; + break; + case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2: + jdata = "VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2"; + break; + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: + jdata = "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2"; + break; + case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO: + jdata = "VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO"; + break; + case VK_STRUCTURE_TYPE_SUBPASS_END_INFO: + jdata = "VK_STRUCTURE_TYPE_SUBPASS_END_INFO"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES"; + break; + case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE: + jdata = "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE"; + break; + case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO: + jdata = "VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO"; break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES"; @@ -9468,12 +9680,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO: jdata = "VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES"; - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES"; break; @@ -9483,60 +9689,15 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT: jdata = "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES"; - break; - case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO: - jdata = "VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO"; - break; - case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: - jdata = "VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO"; - break; - case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO: - jdata = "VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO"; - break; - case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO: - jdata = "VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES"; - break; - case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO: - jdata = "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO"; - break; - case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO: - jdata = "VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO"; - break; - case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO: - jdata = "VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO"; - break; - case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO: - jdata = "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO"; - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES"; break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES"; break; - case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO: - jdata = "VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES"; - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES"; - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES"; break; @@ -9546,9 +9707,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO: jdata = "VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES"; - break; case VK_STRUCTURE_TYPE_MEMORY_BARRIER_2: jdata = "VK_STRUCTURE_TYPE_MEMORY_BARRIER_2"; break; @@ -9573,12 +9731,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES"; - break; case VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2: jdata = "VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2"; break; @@ -9591,26 +9743,50 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2: jdata = "VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2"; break; - case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2: - jdata = "VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2"; - break; - case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2: - jdata = "VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2"; - break; case VK_STRUCTURE_TYPE_BUFFER_COPY_2: jdata = "VK_STRUCTURE_TYPE_BUFFER_COPY_2"; break; case VK_STRUCTURE_TYPE_IMAGE_COPY_2: jdata = "VK_STRUCTURE_TYPE_IMAGE_COPY_2"; break; - case VK_STRUCTURE_TYPE_IMAGE_BLIT_2: - jdata = "VK_STRUCTURE_TYPE_IMAGE_BLIT_2"; - break; case VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2: jdata = "VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2"; break; - case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2: - jdata = "VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES"; + break; + case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3: + jdata = "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES"; + break; + case VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS: + jdata = "VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS"; + break; + case VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS: + jdata = "VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS"; + break; + case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO: + jdata = "VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES"; break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES"; @@ -9633,8 +9809,26 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO: jdata = "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES"; + break; + case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2: + jdata = "VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2"; + break; + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2: + jdata = "VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2"; + break; + case VK_STRUCTURE_TYPE_IMAGE_BLIT_2: + jdata = "VK_STRUCTURE_TYPE_IMAGE_BLIT_2"; + break; + case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2: + jdata = "VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2"; break; case VK_STRUCTURE_TYPE_RENDERING_INFO: jdata = "VK_STRUCTURE_TYPE_RENDERING_INFO"; @@ -9651,30 +9845,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO: jdata = "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES"; - break; - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3: - jdata = "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES"; - break; - case VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS: - jdata = "VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS"; - break; - case VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS: - jdata = "VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS"; - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES"; break; @@ -9690,33 +9860,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES: jdata = "VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES"; - break; - case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO: - jdata = "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES"; - break; - case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO: - jdata = "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES"; - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES"; break; @@ -9732,44 +9875,71 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES"; break; - case VK_STRUCTURE_TYPE_RENDERING_AREA_INFO: - jdata = "VK_STRUCTURE_TYPE_RENDERING_AREA_INFO"; + case VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO: + jdata = "VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO"; + break; + case VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2: + jdata = "VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2"; + break; + case VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2: + jdata = "VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2"; + break; + case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO: + jdata = "VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES"; + break; + case VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS: + jdata = "VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES"; + break; + case VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY: + jdata = "VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY"; break; - case VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO: - jdata = "VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO"; + case VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY: + jdata = "VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY"; break; - case VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2: - jdata = "VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2"; + case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO: + jdata = "VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO"; break; - case VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2: - jdata = "VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2"; + case VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO: + jdata = "VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO"; break; - case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO: - jdata = "VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO"; + case VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO: + jdata = "VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO"; break; - case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO: - jdata = "VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO"; + case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO: + jdata = "VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES"; + case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE: + jdata = "VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES"; + case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY: + jdata = "VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY"; break; - case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: - jdata = "VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES"; break; - case VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO: - jdata = "VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES"; + case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO: + jdata = "VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO"; break; - case VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS: - jdata = "VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES"; break; case VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO: jdata = "VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO"; @@ -9795,35 +9965,35 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES"; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO: + jdata = "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO"; break; - case VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY: - jdata = "VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES"; break; - case VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY: - jdata = "VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES"; break; - case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO: - jdata = "VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO"; + case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO: + jdata = "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO"; break; - case VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO: - jdata = "VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES"; break; - case VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO: - jdata = "VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO"; + case VK_STRUCTURE_TYPE_RENDERING_AREA_INFO: + jdata = "VK_STRUCTURE_TYPE_RENDERING_AREA_INFO"; break; - case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO: - jdata = "VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES"; break; - case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE: - jdata = "VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE"; + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: + jdata = "VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO"; break; - case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY: - jdata = "VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY"; + case VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO: + jdata = "VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO"; break; case VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR: jdata = "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR"; @@ -10614,6 +10784,36 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV: jdata = "VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV"; break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT"; + break; + case VK_STRUCTURE_TYPE_SWAPCHAIN_TIMING_PROPERTIES_EXT: + jdata = "VK_STRUCTURE_TYPE_SWAPCHAIN_TIMING_PROPERTIES_EXT"; + break; + case VK_STRUCTURE_TYPE_SWAPCHAIN_TIME_DOMAIN_PROPERTIES_EXT: + jdata = "VK_STRUCTURE_TYPE_SWAPCHAIN_TIME_DOMAIN_PROPERTIES_EXT"; + break; + case VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT: + jdata = "VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT"; + break; + case VK_STRUCTURE_TYPE_PRESENT_TIMING_INFO_EXT: + jdata = "VK_STRUCTURE_TYPE_PRESENT_TIMING_INFO_EXT"; + break; + case VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_INFO_EXT: + jdata = "VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_INFO_EXT"; + break; + case VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_PROPERTIES_EXT: + jdata = "VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_PROPERTIES_EXT"; + break; + case VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_EXT: + jdata = "VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_EXT"; + break; + case VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT: + jdata = "VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT"; + break; + case VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT: + jdata = "VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT"; + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL"; break; @@ -10866,6 +11066,9 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT"; break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT"; + break; case VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR: jdata = "VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR"; break; @@ -11253,6 +11456,21 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR"; break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE"; + break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RGB_CONVERSION_CAPABILITIES_VALVE: + jdata = "VK_STRUCTURE_TYPE_VIDEO_ENCODE_RGB_CONVERSION_CAPABILITIES_VALVE"; + break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_PROFILE_RGB_CONVERSION_INFO_VALVE: + jdata = "VK_STRUCTURE_TYPE_VIDEO_ENCODE_PROFILE_RGB_CONVERSION_INFO_VALVE"; + break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_RGB_CONVERSION_CREATE_INFO_VALVE: + jdata = "VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_RGB_CONVERSION_CREATE_INFO_VALVE"; + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT"; break; @@ -11379,15 +11597,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV"; break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_NV: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_NV"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV"; - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV: - jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV"; - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV"; break; @@ -11430,6 +11639,24 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT"; break; + case VK_STRUCTURE_TYPE_NATIVE_BUFFER_USAGE_OHOS: + jdata = "VK_STRUCTURE_TYPE_NATIVE_BUFFER_USAGE_OHOS"; + break; + case VK_STRUCTURE_TYPE_NATIVE_BUFFER_PROPERTIES_OHOS: + jdata = "VK_STRUCTURE_TYPE_NATIVE_BUFFER_PROPERTIES_OHOS"; + break; + case VK_STRUCTURE_TYPE_NATIVE_BUFFER_FORMAT_PROPERTIES_OHOS: + jdata = "VK_STRUCTURE_TYPE_NATIVE_BUFFER_FORMAT_PROPERTIES_OHOS"; + break; + case VK_STRUCTURE_TYPE_IMPORT_NATIVE_BUFFER_INFO_OHOS: + jdata = "VK_STRUCTURE_TYPE_IMPORT_NATIVE_BUFFER_INFO_OHOS"; + break; + case VK_STRUCTURE_TYPE_MEMORY_GET_NATIVE_BUFFER_INFO_OHOS: + jdata = "VK_STRUCTURE_TYPE_MEMORY_GET_NATIVE_BUFFER_INFO_OHOS"; + break; + case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_OHOS: + jdata = "VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_OHOS"; + break; case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT: jdata = "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT"; break; @@ -11586,6 +11813,12 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_ANTI_LAG_PRESENTATION_INFO_AMD: jdata = "VK_STRUCTURE_TYPE_ANTI_LAG_PRESENTATION_INFO_AMD"; break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DENSE_GEOMETRY_FORMAT_FEATURES_AMDX: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DENSE_GEOMETRY_FORMAT_FEATURES_AMDX"; + break; + case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DENSE_GEOMETRY_FORMAT_TRIANGLES_DATA_AMDX: + jdata = "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DENSE_GEOMETRY_FORMAT_TRIANGLES_DATA_AMDX"; + break; case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR: jdata = "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR"; break; @@ -11997,6 +12230,27 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_TILE_MEMORY_SIZE_INFO_QCOM: jdata = "VK_STRUCTURE_TYPE_TILE_MEMORY_SIZE_INFO_QCOM"; break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR"; + break; + case VK_STRUCTURE_TYPE_COPY_MEMORY_INDIRECT_INFO_KHR: + jdata = "VK_STRUCTURE_TYPE_COPY_MEMORY_INDIRECT_INFO_KHR"; + break; + case VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INDIRECT_INFO_KHR: + jdata = "VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INDIRECT_INFO_KHR"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_EXT: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_EXT"; + break; + case VK_STRUCTURE_TYPE_DECOMPRESS_MEMORY_INFO_EXT: + jdata = "VK_STRUCTURE_TYPE_DECOMPRESS_MEMORY_INFO_EXT"; + break; case VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV: jdata = "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV"; break; @@ -12195,6 +12449,15 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA: jdata = "VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA"; break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT"; + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT"; break; @@ -12222,8 +12485,8 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR: jdata = "VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR"; break; - case VK_STRUCTURE_TYPE_OH_SURFACE_CREATE_INFO_OHOS: - jdata = "VK_STRUCTURE_TYPE_OH_SURFACE_CREATE_INFO_OHOS"; + case VK_STRUCTURE_TYPE_SURFACE_CREATE_INFO_OHOS: + jdata = "VK_STRUCTURE_TYPE_SURFACE_CREATE_INFO_OHOS"; break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HDR_VIVID_FEATURES_HUAWEI: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HDR_VIVID_FEATURES_HUAWEI"; @@ -12255,6 +12518,21 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR"; break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM"; + break; + case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_ARM: + jdata = "VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_ARM"; + break; + case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_ARM: + jdata = "VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_ARM"; + break; + case VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM: + jdata = "VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM"; + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT"; break; @@ -12291,18 +12569,63 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkStructureType& value, co case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_EXT: jdata = "VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_EXT"; break; - case VK_STRUCTURE_TYPE_RENDERING_END_INFO_EXT: - jdata = "VK_STRUCTURE_TYPE_RENDERING_END_INFO_EXT"; - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT"; break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR"; break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT"; + break; + case VK_STRUCTURE_TYPE_BEGIN_CUSTOM_RESOLVE_INFO_EXT: + jdata = "VK_STRUCTURE_TYPE_BEGIN_CUSTOM_RESOLVE_INFO_EXT"; + break; + case VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT: + jdata = "VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM"; + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_BUILTIN_MODEL_CREATE_INFO_QCOM: + jdata = "VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_BUILTIN_MODEL_CREATE_INFO_QCOM"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR"; + break; + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR: + jdata = "VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR"; + break; + case VK_STRUCTURE_TYPE_RENDERING_END_INFO_KHR: + jdata = "VK_STRUCTURE_TYPE_RENDERING_END_INFO_KHR"; + break; + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR: + jdata = "VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT"; + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC: jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC"; break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT"; + break; + case VK_STRUCTURE_TYPE_COMPUTE_OCCUPANCY_PRIORITY_PARAMETERS_NV: + jdata = "VK_STRUCTURE_TYPE_COMPUTE_OCCUPANCY_PRIORITY_PARAMETERS_NV"; + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV: + jdata = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -12390,12 +12713,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkSubpassDescriptionFlagBi case VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX: jdata = "VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX"; break; - case VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM: - jdata = "VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM"; - break; - case VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM: - jdata = "VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM"; - break; case VK_SUBPASS_DESCRIPTION_TILE_SHADING_APRON_BIT_QCOM: jdata = "VK_SUBPASS_DESCRIPTION_TILE_SHADING_APRON_BIT_QCOM"; break; @@ -12411,6 +12728,12 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkSubpassDescriptionFlagBi case VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT: jdata = "VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT"; break; + case VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_EXT: + jdata = "VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_EXT"; + break; + case VK_SUBPASS_DESCRIPTION_CUSTOM_RESOLVE_BIT_EXT: + jdata = "VK_SUBPASS_DESCRIPTION_CUSTOM_RESOLVE_BIT_EXT"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -12528,6 +12851,9 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkSwapchainCreateFlagBitsK case VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR: jdata = "VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR"; break; + case VK_SWAPCHAIN_CREATE_PRESENT_TIMING_BIT_EXT: + jdata = "VK_SWAPCHAIN_CREATE_PRESENT_TIMING_BIT_EXT"; + break; case VK_SWAPCHAIN_CREATE_PRESENT_ID_2_BIT_KHR: jdata = "VK_SWAPCHAIN_CREATE_PRESENT_ID_2_BIT_KHR"; break; @@ -12612,6 +12938,12 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkTimeDomainKHR& value, co case VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_KHR: jdata = "VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_KHR"; break; + case VK_TIME_DOMAIN_PRESENT_STAGE_LOCAL_EXT: + jdata = "VK_TIME_DOMAIN_PRESENT_STAGE_LOCAL_EXT"; + break; + case VK_TIME_DOMAIN_SWAPCHAIN_LOCAL_EXT: + jdata = "VK_TIME_DOMAIN_SWAPCHAIN_LOCAL_EXT"; + break; default: jdata = to_hex_fixed_width(value); break; @@ -13248,191 +13580,32 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH264StdFlagBi case VK_VIDEO_ENCODE_H264_STD_DIRECT_SPATIAL_MV_PRED_FLAG_UNSET_BIT_KHR: jdata = "VK_VIDEO_ENCODE_H264_STD_DIRECT_SPATIAL_MV_PRED_FLAG_UNSET_BIT_KHR"; break; - case VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_UNSET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_UNSET_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_SET_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H264_STD_DIRECT_8X8_INFERENCE_FLAG_UNSET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H264_STD_DIRECT_8X8_INFERENCE_FLAG_UNSET_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H264_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H264_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_DISABLED_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_DISABLED_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_ENABLED_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_ENABLED_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_PARTIAL_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_PARTIAL_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H264_STD_SLICE_QP_DELTA_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H264_STD_SLICE_QP_DELTA_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H264_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H264_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR"; - break; - default: - jdata = to_hex_fixed_width(value); - break; - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH265CapabilityFlagBitsKHR& value, const JsonOptions& options) -{ - switch (value) { - case VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_CAPABILITY_CU_QP_DIFF_WRAPAROUND_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CAPABILITY_CU_QP_DIFF_WRAPAROUND_BIT_KHR"; - break; - default: - jdata = to_hex_fixed_width(value); - break; - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH265CtbSizeFlagBitsKHR& value, const JsonOptions& options) -{ - switch (value) { - case VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_KHR"; - break; - default: - jdata = to_hex_fixed_width(value); - break; - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH265RateControlFlagBitsKHR& value, const JsonOptions& options) -{ - switch (value) { - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_KHR"; - break; - default: - jdata = to_hex_fixed_width(value); - break; - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH265StdFlagBitsKHR& value, const JsonOptions& options) -{ - switch (value) { - case VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_KHR"; + case VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_UNSET_BIT_KHR: + jdata = "VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_UNSET_BIT_KHR"; break; - case VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_KHR"; + case VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_SET_BIT_KHR: + jdata = "VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_SET_BIT_KHR"; break; - case VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR"; + case VK_VIDEO_ENCODE_H264_STD_DIRECT_8X8_INFERENCE_FLAG_UNSET_BIT_KHR: + jdata = "VK_VIDEO_ENCODE_H264_STD_DIRECT_8X8_INFERENCE_FLAG_UNSET_BIT_KHR"; break; - case VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_KHR"; + case VK_VIDEO_ENCODE_H264_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR: + jdata = "VK_VIDEO_ENCODE_H264_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR"; break; - case VK_VIDEO_ENCODE_H265_STD_DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG_SET_BIT_KHR"; + case VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_DISABLED_BIT_KHR: + jdata = "VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_DISABLED_BIT_KHR"; break; - case VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_KHR"; + case VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_ENABLED_BIT_KHR: + jdata = "VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_ENABLED_BIT_KHR"; break; - case VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_KHR"; + case VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_PARTIAL_BIT_KHR: + jdata = "VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_PARTIAL_BIT_KHR"; break; - case VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_KHR"; + case VK_VIDEO_ENCODE_H264_STD_SLICE_QP_DELTA_BIT_KHR: + jdata = "VK_VIDEO_ENCODE_H264_STD_SLICE_QP_DELTA_BIT_KHR"; break; - case VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR"; + case VK_VIDEO_ENCODE_H264_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR: + jdata = "VK_VIDEO_ENCODE_H264_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR"; break; default: jdata = to_hex_fixed_width(value); @@ -13440,20 +13613,17 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH265StdFlagBi } } -void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH265TransformBlockSizeFlagBitsKHR& value, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH265CtbSizeFlagBitsKHR& value, const JsonOptions& options) { switch (value) { - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR"; - break; - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR"; + case VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_KHR: + jdata = "VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_KHR"; break; - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR"; + case VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_KHR: + jdata = "VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_KHR"; break; - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR: - jdata = "VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR"; + case VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_KHR: + jdata = "VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_KHR"; break; default: jdata = to_hex_fixed_width(value); @@ -13506,6 +13676,60 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeRateControlMo } } +void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeRgbChromaOffsetFlagBitsVALVE& value, const JsonOptions& options) +{ + switch (value) { + case VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_COSITED_EVEN_BIT_VALVE: + jdata = "VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_COSITED_EVEN_BIT_VALVE"; + break; + case VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_MIDPOINT_BIT_VALVE: + jdata = "VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_MIDPOINT_BIT_VALVE"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeRgbModelConversionFlagBitsVALVE& value, const JsonOptions& options) +{ + switch (value) { + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_RGB_IDENTITY_BIT_VALVE: + jdata = "VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_RGB_IDENTITY_BIT_VALVE"; + break; + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_IDENTITY_BIT_VALVE: + jdata = "VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_IDENTITY_BIT_VALVE"; + break; + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_709_BIT_VALVE: + jdata = "VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_709_BIT_VALVE"; + break; + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_601_BIT_VALVE: + jdata = "VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_601_BIT_VALVE"; + break; + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_2020_BIT_VALVE: + jdata = "VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_2020_BIT_VALVE"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeRgbRangeCompressionFlagBitsVALVE& value, const JsonOptions& options) +{ + switch (value) { + case VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_FULL_RANGE_BIT_VALVE: + jdata = "VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_FULL_RANGE_BIT_VALVE"; + break; + case VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_NARROW_RANGE_BIT_VALVE: + jdata = "VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_NARROW_RANGE_BIT_VALVE"; + break; + default: + jdata = to_hex_fixed_width(value); + break; + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeTuningModeKHR& value, const JsonOptions& options) { switch (value) { @@ -13837,6 +14061,10 @@ void FieldToJson(VkAccessFlags2_t, nlohmann::ordered_json& jdata, const VkFlags6 return std::string("VK_ACCESS_2_DATA_GRAPH_READ_BIT_ARM"); case VK_ACCESS_2_DATA_GRAPH_WRITE_BIT_ARM: return std::string("VK_ACCESS_2_DATA_GRAPH_WRITE_BIT_ARM"); + case VK_ACCESS_2_MEMORY_DECOMPRESSION_READ_BIT_EXT: + return std::string("VK_ACCESS_2_MEMORY_DECOMPRESSION_READ_BIT_EXT"); + case VK_ACCESS_2_MEMORY_DECOMPRESSION_WRITE_BIT_EXT: + return std::string("VK_ACCESS_2_MEMORY_DECOMPRESSION_WRITE_BIT_EXT"); } return to_hex_fixed_width(flags); }); @@ -13865,6 +14093,28 @@ void FieldToJson(VkAcquireProfilingLockFlagsKHR_t, nlohmann::ordered_json& jdata jdata = to_hex_fixed_width(flags); } +void FieldToJson(VkAddressCopyFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) +{ + if (!options.expand_flags) + { + jdata = to_hex_fixed_width(flags); + return; + } + jdata = ExpandFlags(flags, [](VkFlags flags) + { + switch (flags) + { + case VK_ADDRESS_COPY_DEVICE_LOCAL_BIT_KHR: + return std::string("VK_ADDRESS_COPY_DEVICE_LOCAL_BIT_KHR"); + case VK_ADDRESS_COPY_SPARSE_BIT_KHR: + return std::string("VK_ADDRESS_COPY_SPARSE_BIT_KHR"); + case VK_ADDRESS_COPY_PROTECTED_BIT_KHR: + return std::string("VK_ADDRESS_COPY_PROTECTED_BIT_KHR"); + } + return to_hex_fixed_width(flags); + }); +} + void FieldToJson(VkAndroidSurfaceCreateFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) { jdata = to_hex_fixed_width(flags); @@ -13883,6 +14133,10 @@ void FieldToJson(VkAttachmentDescriptionFlags_t, nlohmann::ordered_json& jdata, { case VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT: return std::string("VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT"); + case VK_ATTACHMENT_DESCRIPTION_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR: + return std::string("VK_ATTACHMENT_DESCRIPTION_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR"); + case VK_ATTACHMENT_DESCRIPTION_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR: + return std::string("VK_ATTACHMENT_DESCRIPTION_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR"); } return to_hex_fixed_width(flags); }); @@ -14051,10 +14305,14 @@ void FieldToJson(VkBufferUsageFlags2_t, nlohmann::ordered_json& jdata, const VkF return std::string("VK_BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT"); case VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT: return std::string("VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT"); + case VK_BUFFER_USAGE_2_COMPRESSED_DATA_DGF1_BIT_AMDX: + return std::string("VK_BUFFER_USAGE_2_COMPRESSED_DATA_DGF1_BIT_AMDX"); case VK_BUFFER_USAGE_2_DATA_GRAPH_FOREIGN_DESCRIPTOR_BIT_ARM: return std::string("VK_BUFFER_USAGE_2_DATA_GRAPH_FOREIGN_DESCRIPTOR_BIT_ARM"); case VK_BUFFER_USAGE_2_TILE_MEMORY_BIT_QCOM: return std::string("VK_BUFFER_USAGE_2_TILE_MEMORY_BIT_QCOM"); + case VK_BUFFER_USAGE_2_MEMORY_DECOMPRESSION_BIT_EXT: + return std::string("VK_BUFFER_USAGE_2_MEMORY_DECOMPRESSION_BIT_EXT"); case VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT: return std::string("VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT"); } @@ -14100,6 +14358,8 @@ void FieldToJson(VkBuildAccelerationStructureFlagsKHR_t, nlohmann::ordered_json& return std::string("VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_BIT_NV"); case VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR: return std::string("VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR"); + case VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_CLUSTER_OPACITY_MICROMAPS_BIT_NV: + return std::string("VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_CLUSTER_OPACITY_MICROMAPS_BIT_NV"); } return to_hex_fixed_width(flags); }); @@ -14302,6 +14562,29 @@ void FieldToJson(VkCullModeFlags_t, nlohmann::ordered_json& jdata, const VkFlags }); } +void FieldToJson(VkDataGraphPipelineDispatchFlagsARM_t, nlohmann::ordered_json& jdata, const VkFlags64 flags, const JsonOptions& options) +{ + jdata = to_hex_fixed_width(flags); +} + +void FieldToJson(VkDataGraphPipelineSessionCreateFlagsARM_t, nlohmann::ordered_json& jdata, const VkFlags64 flags, const JsonOptions& options) +{ + if (!options.expand_flags) + { + jdata = to_hex_fixed_width(flags); + return; + } + jdata = ExpandFlags(flags, [](VkFlags64 flags) + { + switch (flags) + { + case VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM: + return std::string("VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM"); + } + return to_hex_fixed_width(flags); + }); +} + void FieldToJson(VkDebugReportFlagsEXT_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) { if (!options.expand_flags) @@ -14785,6 +15068,8 @@ void FieldToJson(VkExternalMemoryHandleTypeFlags_t, nlohmann::ordered_json& jdat return std::string("VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA"); case VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV: return std::string("VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV"); + case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OH_NATIVE_BUFFER_BIT_OHOS: + return std::string("VK_EXTERNAL_MEMORY_HANDLE_TYPE_OH_NATIVE_BUFFER_BIT_OHOS"); case VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX: return std::string("VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX"); case VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLBUFFER_BIT_EXT: @@ -15089,10 +15374,20 @@ void FieldToJson(VkFormatFeatureFlags2_t, nlohmann::ordered_json& jdata, const V return std::string("VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV"); case VK_FORMAT_FEATURE_2_TENSOR_DATA_GRAPH_BIT_ARM: return std::string("VK_FORMAT_FEATURE_2_TENSOR_DATA_GRAPH_BIT_ARM"); + case VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR: + return std::string("VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR"); case VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR: return std::string("VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR"); case VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR: return std::string("VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR"); + case VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_COMPUTE_QUEUE_BIT_KHR: + return std::string("VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_COMPUTE_QUEUE_BIT_KHR"); + case VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_TRANSFER_QUEUE_BIT_KHR: + return std::string("VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_TRANSFER_QUEUE_BIT_KHR"); + case VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_COMPUTE_QUEUE_BIT_KHR: + return std::string("VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_COMPUTE_QUEUE_BIT_KHR"); + case VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_TRANSFER_QUEUE_BIT_KHR: + return std::string("VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_TRANSFER_QUEUE_BIT_KHR"); } return to_hex_fixed_width(flags); }); @@ -15640,6 +15935,24 @@ void FieldToJson(VkMemoryAllocateFlags_t, nlohmann::ordered_json& jdata, const V }); } +void FieldToJson(VkMemoryDecompressionMethodFlagsEXT_t, nlohmann::ordered_json& jdata, const VkFlags64 flags, const JsonOptions& options) +{ + if (!options.expand_flags) + { + jdata = to_hex_fixed_width(flags); + return; + } + jdata = ExpandFlags(flags, [](VkFlags64 flags) + { + switch (flags) + { + case VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_EXT: + return std::string("VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_EXT"); + } + return to_hex_fixed_width(flags); + }); +} + void FieldToJson(VkMemoryHeapFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) { if (!options.expand_flags) @@ -15879,6 +16192,26 @@ void FieldToJson(VkPartitionedAccelerationStructureInstanceFlagsNV_t, nlohmann:: }); } +void FieldToJson(VkPastPresentationTimingFlagsEXT_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) +{ + if (!options.expand_flags) + { + jdata = to_hex_fixed_width(flags); + return; + } + jdata = ExpandFlags(flags, [](VkFlags flags) + { + switch (flags) + { + case VK_PAST_PRESENTATION_TIMING_ALLOW_PARTIAL_RESULTS_BIT_EXT: + return std::string("VK_PAST_PRESENTATION_TIMING_ALLOW_PARTIAL_RESULTS_BIT_EXT"); + case VK_PAST_PRESENTATION_TIMING_ALLOW_OUT_OF_ORDER_RESULTS_BIT_EXT: + return std::string("VK_PAST_PRESENTATION_TIMING_ALLOW_OUT_OF_ORDER_RESULTS_BIT_EXT"); + } + return to_hex_fixed_width(flags); + }); +} + void FieldToJson(VkPeerMemoryFeatureFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) { if (!options.expand_flags) @@ -15903,6 +16236,11 @@ void FieldToJson(VkPeerMemoryFeatureFlags_t, nlohmann::ordered_json& jdata, cons }); } +void FieldToJson(VkPerformanceCounterDescriptionFlagsARM_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) +{ + jdata = to_hex_fixed_width(flags); +} + void FieldToJson(VkPerformanceCounterDescriptionFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) { if (!options.expand_flags) @@ -16016,10 +16354,10 @@ void FieldToJson(VkPipelineCreateFlags_t, nlohmann::ordered_json& jdata, const V return std::string("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"); case VK_PIPELINE_CREATE_DERIVATIVE_BIT: return std::string("VK_PIPELINE_CREATE_DERIVATIVE_BIT"); - case VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT: - return std::string("VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"); case VK_PIPELINE_CREATE_DISPATCH_BASE_BIT: return std::string("VK_PIPELINE_CREATE_DISPATCH_BASE_BIT"); + case VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT: + return std::string("VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"); case VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT: return std::string("VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT"); case VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT: @@ -16164,6 +16502,8 @@ void FieldToJson(VkPipelineCreateFlags2_t, nlohmann::ordered_json& jdata, const return std::string("VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT"); case VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE: return std::string("VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE"); + case VK_PIPELINE_CREATE_2_64_BIT_INDEXING_BIT_EXT: + return std::string("VK_PIPELINE_CREATE_2_64_BIT_INDEXING_BIT_EXT"); } return to_hex_fixed_width(flags); }); @@ -16458,6 +16798,10 @@ void FieldToJson(VkPipelineStageFlags2_t, nlohmann::ordered_json& jdata, const V return std::string("VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV"); case VK_PIPELINE_STAGE_2_DATA_GRAPH_BIT_ARM: return std::string("VK_PIPELINE_STAGE_2_DATA_GRAPH_BIT_ARM"); + case VK_PIPELINE_STAGE_2_COPY_INDIRECT_BIT_KHR: + return std::string("VK_PIPELINE_STAGE_2_COPY_INDIRECT_BIT_KHR"); + case VK_PIPELINE_STAGE_2_MEMORY_DECOMPRESSION_BIT_EXT: + return std::string("VK_PIPELINE_STAGE_2_MEMORY_DECOMPRESSION_BIT_EXT"); } return to_hex_fixed_width(flags); }); @@ -16527,6 +16871,50 @@ void FieldToJson(VkPresentScalingFlagsKHR_t, nlohmann::ordered_json& jdata, cons }); } +void FieldToJson(VkPresentStageFlagsEXT_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) +{ + if (!options.expand_flags) + { + jdata = to_hex_fixed_width(flags); + return; + } + jdata = ExpandFlags(flags, [](VkFlags flags) + { + switch (flags) + { + case VK_PRESENT_STAGE_QUEUE_OPERATIONS_END_BIT_EXT: + return std::string("VK_PRESENT_STAGE_QUEUE_OPERATIONS_END_BIT_EXT"); + case VK_PRESENT_STAGE_REQUEST_DEQUEUED_BIT_EXT: + return std::string("VK_PRESENT_STAGE_REQUEST_DEQUEUED_BIT_EXT"); + case VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_OUT_BIT_EXT: + return std::string("VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_OUT_BIT_EXT"); + case VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_VISIBLE_BIT_EXT: + return std::string("VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_VISIBLE_BIT_EXT"); + } + return to_hex_fixed_width(flags); + }); +} + +void FieldToJson(VkPresentTimingInfoFlagsEXT_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) +{ + if (!options.expand_flags) + { + jdata = to_hex_fixed_width(flags); + return; + } + jdata = ExpandFlags(flags, [](VkFlags flags) + { + switch (flags) + { + case VK_PRESENT_TIMING_INFO_PRESENT_AT_RELATIVE_TIME_BIT_EXT: + return std::string("VK_PRESENT_TIMING_INFO_PRESENT_AT_RELATIVE_TIME_BIT_EXT"); + case VK_PRESENT_TIMING_INFO_PRESENT_AT_NEAREST_REFRESH_CYCLE_BIT_EXT: + return std::string("VK_PRESENT_TIMING_INFO_PRESENT_AT_NEAREST_REFRESH_CYCLE_BIT_EXT"); + } + return to_hex_fixed_width(flags); + }); +} + void FieldToJson(VkPrivateDataSlotCreateFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) { jdata = to_hex_fixed_width(flags); @@ -16692,6 +17080,28 @@ void FieldToJson(VkRenderPassCreateFlags_t, nlohmann::ordered_json& jdata, const }); } +void FieldToJson(VkRenderingAttachmentFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) +{ + if (!options.expand_flags) + { + jdata = to_hex_fixed_width(flags); + return; + } + jdata = ExpandFlags(flags, [](VkFlags flags) + { + switch (flags) + { + case VK_RENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR: + return std::string("VK_RENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR"); + case VK_RENDERING_ATTACHMENT_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR: + return std::string("VK_RENDERING_ATTACHMENT_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR"); + case VK_RENDERING_ATTACHMENT_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR: + return std::string("VK_RENDERING_ATTACHMENT_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR"); + } + return to_hex_fixed_width(flags); + }); +} + void FieldToJson(VkRenderingFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) { if (!options.expand_flags) @@ -16715,6 +17125,32 @@ void FieldToJson(VkRenderingFlags_t, nlohmann::ordered_json& jdata, const VkFlag return std::string("VK_RENDERING_CONTENTS_INLINE_BIT_KHR"); case VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE: return std::string("VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE"); + case VK_RENDERING_FRAGMENT_REGION_BIT_EXT: + return std::string("VK_RENDERING_FRAGMENT_REGION_BIT_EXT"); + case VK_RENDERING_CUSTOM_RESOLVE_BIT_EXT: + return std::string("VK_RENDERING_CUSTOM_RESOLVE_BIT_EXT"); + case VK_RENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHR: + return std::string("VK_RENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHR"); + } + return to_hex_fixed_width(flags); + }); +} + +void FieldToJson(VkResolveImageFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) +{ + if (!options.expand_flags) + { + jdata = to_hex_fixed_width(flags); + return; + } + jdata = ExpandFlags(flags, [](VkFlags flags) + { + switch (flags) + { + case VK_RESOLVE_IMAGE_SKIP_TRANSFER_FUNCTION_BIT_KHR: + return std::string("VK_RESOLVE_IMAGE_SKIP_TRANSFER_FUNCTION_BIT_KHR"); + case VK_RESOLVE_IMAGE_ENABLE_TRANSFER_FUNCTION_BIT_KHR: + return std::string("VK_RESOLVE_IMAGE_ENABLE_TRANSFER_FUNCTION_BIT_KHR"); } return to_hex_fixed_width(flags); }); @@ -16743,6 +17179,8 @@ void FieldToJson(VkResolveModeFlags_t, nlohmann::ordered_json& jdata, const VkFl return std::string("VK_RESOLVE_MODE_MAX_BIT"); case VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID: return std::string("VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID"); + case VK_RESOLVE_MODE_CUSTOM_BIT_EXT: + return std::string("VK_RESOLVE_MODE_CUSTOM_BIT_EXT"); } return to_hex_fixed_width(flags); }); @@ -16882,6 +17320,8 @@ void FieldToJson(VkShaderCreateFlagsEXT_t, nlohmann::ordered_json& jdata, const return std::string("VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT"); case VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT: return std::string("VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT"); + case VK_SHADER_CREATE_64_BIT_INDEXING_BIT_EXT: + return std::string("VK_SHADER_CREATE_64_BIT_INDEXING_BIT_EXT"); } return to_hex_fixed_width(flags); }); @@ -17082,10 +17522,6 @@ void FieldToJson(VkSubpassDescriptionFlags_t, nlohmann::ordered_json& jdata, con return std::string("VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX"); case VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX: return std::string("VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX"); - case VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM: - return std::string("VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM"); - case VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM: - return std::string("VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM"); case VK_SUBPASS_DESCRIPTION_TILE_SHADING_APRON_BIT_QCOM: return std::string("VK_SUBPASS_DESCRIPTION_TILE_SHADING_APRON_BIT_QCOM"); case VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT: @@ -17096,6 +17532,10 @@ void FieldToJson(VkSubpassDescriptionFlags_t, nlohmann::ordered_json& jdata, con return std::string("VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT"); case VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT: return std::string("VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT"); + case VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_EXT: + return std::string("VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_EXT"); + case VK_SUBPASS_DESCRIPTION_CUSTOM_RESOLVE_BIT_EXT: + return std::string("VK_SUBPASS_DESCRIPTION_CUSTOM_RESOLVE_BIT_EXT"); } return to_hex_fixed_width(flags); }); @@ -17170,6 +17610,8 @@ void FieldToJson(VkSwapchainCreateFlagsKHR_t, nlohmann::ordered_json& jdata, con return std::string("VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR"); case VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR: return std::string("VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR"); + case VK_SWAPCHAIN_CREATE_PRESENT_TIMING_BIT_EXT: + return std::string("VK_SWAPCHAIN_CREATE_PRESENT_TIMING_BIT_EXT"); case VK_SWAPCHAIN_CREATE_PRESENT_ID_2_BIT_KHR: return std::string("VK_SWAPCHAIN_CREATE_PRESENT_ID_2_BIT_KHR"); case VK_SWAPCHAIN_CREATE_PRESENT_WAIT_2_BIT_KHR: @@ -17749,46 +18191,6 @@ void FieldToJson(VkVideoEncodeH264StdFlagsKHR_t, nlohmann::ordered_json& jdata, }); } -void FieldToJson(VkVideoEncodeH265CapabilityFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) -{ - if (!options.expand_flags) - { - jdata = to_hex_fixed_width(flags); - return; - } - jdata = ExpandFlags(flags, [](VkFlags flags) - { - switch (flags) - { - case VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_CAPABILITY_CU_QP_DIFF_WRAPAROUND_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_CAPABILITY_CU_QP_DIFF_WRAPAROUND_BIT_KHR"); - } - return to_hex_fixed_width(flags); - }); -} - void FieldToJson(VkVideoEncodeH265CtbSizeFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) { if (!options.expand_flags) @@ -17811,7 +18213,7 @@ void FieldToJson(VkVideoEncodeH265CtbSizeFlagsKHR_t, nlohmann::ordered_json& jda }); } -void FieldToJson(VkVideoEncodeH265RateControlFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) +void FieldToJson(VkVideoEncodeIntraRefreshModeFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) { if (!options.expand_flags) { @@ -17822,22 +18224,27 @@ void FieldToJson(VkVideoEncodeH265RateControlFlagsKHR_t, nlohmann::ordered_json& { switch (flags) { - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_KHR"); + case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR: + return std::string("VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR"); + case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR: + return std::string("VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR"); + case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_BASED_BIT_KHR: + return std::string("VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_BASED_BIT_KHR"); + case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_ROW_BASED_BIT_KHR: + return std::string("VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_ROW_BASED_BIT_KHR"); + case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_COLUMN_BASED_BIT_KHR: + return std::string("VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_COLUMN_BASED_BIT_KHR"); } return to_hex_fixed_width(flags); }); } -void FieldToJson(VkVideoEncodeH265StdFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) +void FieldToJson(VkVideoEncodeRateControlFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) +{ + jdata = to_hex_fixed_width(flags); +} + +void FieldToJson(VkVideoEncodeRateControlModeFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) { if (!options.expand_flags) { @@ -17848,54 +18255,20 @@ void FieldToJson(VkVideoEncodeH265StdFlagsKHR_t, nlohmann::ordered_json& jdata, { switch (flags) { - case VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR"); + case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR: + return std::string("VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR"); + case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR: + return std::string("VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR"); + case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR: + return std::string("VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR"); + case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR: + return std::string("VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR"); } return to_hex_fixed_width(flags); }); } -void FieldToJson(VkVideoEncodeH265TransformBlockSizeFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) +void FieldToJson(VkVideoEncodeRgbChromaOffsetFlagsVALVE_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) { if (!options.expand_flags) { @@ -17906,20 +18279,16 @@ void FieldToJson(VkVideoEncodeH265TransformBlockSizeFlagsKHR_t, nlohmann::ordere { switch (flags) { - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR"); - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR"); + case VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_COSITED_EVEN_BIT_VALVE: + return std::string("VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_COSITED_EVEN_BIT_VALVE"); + case VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_MIDPOINT_BIT_VALVE: + return std::string("VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_MIDPOINT_BIT_VALVE"); } return to_hex_fixed_width(flags); }); } -void FieldToJson(VkVideoEncodeIntraRefreshModeFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) +void FieldToJson(VkVideoEncodeRgbModelConversionFlagsVALVE_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) { if (!options.expand_flags) { @@ -17930,27 +18299,22 @@ void FieldToJson(VkVideoEncodeIntraRefreshModeFlagsKHR_t, nlohmann::ordered_json { switch (flags) { - case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR: - return std::string("VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR"); - case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR"); - case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_BASED_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_BASED_BIT_KHR"); - case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_ROW_BASED_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_ROW_BASED_BIT_KHR"); - case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_COLUMN_BASED_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_COLUMN_BASED_BIT_KHR"); + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_RGB_IDENTITY_BIT_VALVE: + return std::string("VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_RGB_IDENTITY_BIT_VALVE"); + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_IDENTITY_BIT_VALVE: + return std::string("VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_IDENTITY_BIT_VALVE"); + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_709_BIT_VALVE: + return std::string("VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_709_BIT_VALVE"); + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_601_BIT_VALVE: + return std::string("VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_601_BIT_VALVE"); + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_2020_BIT_VALVE: + return std::string("VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_2020_BIT_VALVE"); } return to_hex_fixed_width(flags); }); } -void FieldToJson(VkVideoEncodeRateControlFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) -{ - jdata = to_hex_fixed_width(flags); -} - -void FieldToJson(VkVideoEncodeRateControlModeFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) +void FieldToJson(VkVideoEncodeRgbRangeCompressionFlagsVALVE_t, nlohmann::ordered_json& jdata, const VkFlags flags, const JsonOptions& options) { if (!options.expand_flags) { @@ -17961,14 +18325,10 @@ void FieldToJson(VkVideoEncodeRateControlModeFlagsKHR_t, nlohmann::ordered_json& { switch (flags) { - case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR: - return std::string("VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR"); - case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR"); - case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR"); - case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR: - return std::string("VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR"); + case VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_FULL_RANGE_BIT_VALVE: + return std::string("VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_FULL_RANGE_BIT_VALVE"); + case VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_NARROW_RANGE_BIT_VALVE: + return std::string("VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_NARROW_RANGE_BIT_VALVE"); } return to_hex_fixed_width(flags); }); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_json.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_json.h index 6f34e86fc..1b87ddec3 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_json.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_json.h @@ -52,6 +52,7 @@ struct VkAccessFlags_t { }; struct VkAccessFlags2_t { }; struct VkAccessFlags3KHR_t { }; struct VkAcquireProfilingLockFlagsKHR_t { }; +struct VkAddressCopyFlagsKHR_t { }; struct VkAndroidSurfaceCreateFlagsKHR_t { }; struct VkAttachmentDescriptionFlags_t { }; struct VkBufferCreateFlags_t { }; @@ -69,6 +70,8 @@ struct VkCommandPoolTrimFlags_t { }; struct VkCompositeAlphaFlagsKHR_t { }; struct VkConditionalRenderingFlagsEXT_t { }; struct VkCullModeFlags_t { }; +struct VkDataGraphPipelineDispatchFlagsARM_t { }; +struct VkDataGraphPipelineSessionCreateFlagsARM_t { }; struct VkDebugReportFlagsEXT_t { }; struct VkDebugUtilsMessageSeverityFlagsEXT_t { }; struct VkDebugUtilsMessageTypeFlagsEXT_t { }; @@ -126,6 +129,7 @@ struct VkIndirectStateFlagsNV_t { }; struct VkInstanceCreateFlags_t { }; struct VkMacOSSurfaceCreateFlagsMVK_t { }; struct VkMemoryAllocateFlags_t { }; +struct VkMemoryDecompressionMethodFlagsEXT_t { }; struct VkMemoryHeapFlags_t { }; struct VkMemoryMapFlags_t { }; struct VkMemoryPropertyFlags_t { }; @@ -137,7 +141,9 @@ struct VkOpticalFlowGridSizeFlagsNV_t { }; struct VkOpticalFlowSessionCreateFlagsNV_t { }; struct VkOpticalFlowUsageFlagsNV_t { }; struct VkPartitionedAccelerationStructureInstanceFlagsNV_t { }; +struct VkPastPresentationTimingFlagsEXT_t { }; struct VkPeerMemoryFeatureFlags_t { }; +struct VkPerformanceCounterDescriptionFlagsARM_t { }; struct VkPerformanceCounterDescriptionFlagsKHR_t { }; struct VkPhysicalDeviceSchedulingControlsFlagsARM_t { }; struct VkPipelineCacheCreateFlags_t { }; @@ -168,6 +174,8 @@ struct VkPipelineViewportStateCreateFlags_t { }; struct VkPipelineViewportSwizzleStateCreateFlagsNV_t { }; struct VkPresentGravityFlagsKHR_t { }; struct VkPresentScalingFlagsKHR_t { }; +struct VkPresentStageFlagsEXT_t { }; +struct VkPresentTimingInfoFlagsEXT_t { }; struct VkPrivateDataSlotCreateFlags_t { }; struct VkQueryControlFlags_t { }; struct VkQueryPipelineStatisticFlags_t { }; @@ -175,7 +183,9 @@ struct VkQueryPoolCreateFlags_t { }; struct VkQueryResultFlags_t { }; struct VkQueueFlags_t { }; struct VkRenderPassCreateFlags_t { }; +struct VkRenderingAttachmentFlagsKHR_t { }; struct VkRenderingFlags_t { }; +struct VkResolveImageFlagsKHR_t { }; struct VkResolveModeFlags_t { }; struct VkSampleCountFlags_t { }; struct VkSamplerCreateFlags_t { }; @@ -222,14 +232,13 @@ struct VkVideoEncodeFlagsKHR_t { }; struct VkVideoEncodeH264CapabilityFlagsKHR_t { }; struct VkVideoEncodeH264RateControlFlagsKHR_t { }; struct VkVideoEncodeH264StdFlagsKHR_t { }; -struct VkVideoEncodeH265CapabilityFlagsKHR_t { }; struct VkVideoEncodeH265CtbSizeFlagsKHR_t { }; -struct VkVideoEncodeH265RateControlFlagsKHR_t { }; -struct VkVideoEncodeH265StdFlagsKHR_t { }; -struct VkVideoEncodeH265TransformBlockSizeFlagsKHR_t { }; struct VkVideoEncodeIntraRefreshModeFlagsKHR_t { }; struct VkVideoEncodeRateControlFlagsKHR_t { }; struct VkVideoEncodeRateControlModeFlagsKHR_t { }; +struct VkVideoEncodeRgbChromaOffsetFlagsVALVE_t { }; +struct VkVideoEncodeRgbModelConversionFlagsVALVE_t { }; +struct VkVideoEncodeRgbRangeCompressionFlagsVALVE_t { }; struct VkVideoEncodeUsageFlagsKHR_t { }; struct VkVideoEndCodingFlagsKHR_t { }; struct VkVideoSessionCreateFlagsKHR_t { }; @@ -241,7 +250,10 @@ struct VkXlibSurfaceCreateFlagsKHR_t { }; struct VkAccessFlagBits2_t { }; struct VkAccessFlagBits3KHR_t { }; struct VkBufferUsageFlagBits2_t { }; +struct VkDataGraphPipelineDispatchFlagBitsARM_t { }; +struct VkDataGraphPipelineSessionCreateFlagBitsARM_t { }; struct VkFormatFeatureFlagBits2_t { }; +struct VkMemoryDecompressionMethodFlagBitsEXT_t { }; struct VkPhysicalDeviceSchedulingControlsFlagBitsARM_t { }; struct VkPipelineCreateFlagBits2_t { }; struct VkPipelineStageFlagBits2_t { }; @@ -271,12 +283,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH264PocType& value void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH264ProfileIdc& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH264SliceType& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH264WeightedBipredIdc& value, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH265AspectRatioIdc& value, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH265ChromaFormatIdc& value, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH265LevelIdc& value, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH265PictureType& value, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH265ProfileIdc& value, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoH265SliceType& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoVP9ColorSpace& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoVP9FrameType& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const StdVideoVP9InterpolationFilter& value, const util::JsonOptions& options = util::JsonOptions()); @@ -293,6 +299,7 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkAccessFlagBits& value, c void FieldToJson(VkAccessFlagBits2_t, nlohmann::ordered_json& jdata, const VkAccessFlagBits2& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkAccessFlagBits3KHR_t, nlohmann::ordered_json& jdata, const VkAccessFlagBits3KHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkAcquireProfilingLockFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkAddressCopyFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkAntiLagModeAMD& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkAntiLagStageAMD& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkAttachmentDescriptionFlagBits& value, const util::JsonOptions& options = util::JsonOptions()); @@ -332,6 +339,12 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkCoverageModulationModeNV void FieldToJson(nlohmann::ordered_json& jdata, const VkCoverageReductionModeNV& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkCubicFilterWeightsQCOM& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkCullModeFlagBits& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkDataGraphModelCacheTypeQCOM& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkDataGraphPipelineDispatchFlagBitsARM_t, nlohmann::ordered_json& jdata, const VkDataGraphPipelineDispatchFlagBitsARM& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkDataGraphPipelinePropertyARM& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkDataGraphPipelineSessionBindPointARM& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkDataGraphPipelineSessionBindPointTypeARM& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkDataGraphPipelineSessionCreateFlagBitsARM_t, nlohmann::ordered_json& jdata, const VkDataGraphPipelineSessionCreateFlagBitsARM& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkDebugReportFlagBitsEXT& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkDebugReportObjectTypeEXT& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkDebugUtilsMessageSeverityFlagBitsEXT& value, const util::JsonOptions& options = util::JsonOptions()); @@ -416,6 +429,7 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkLayeredDriverUnderlyingA void FieldToJson(nlohmann::ordered_json& jdata, const VkLineRasterizationMode& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkLogicOp& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkMemoryAllocateFlagBits& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkMemoryDecompressionMethodFlagBitsEXT_t, nlohmann::ordered_json& jdata, const VkMemoryDecompressionMethodFlagBitsEXT& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkMemoryHeapFlagBits& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkMemoryMapFlagBits& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkMemoryOverallocationBehaviorAMD& value, const util::JsonOptions& options = util::JsonOptions()); @@ -435,6 +449,7 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkOpticalFlowUsageFlagBits void FieldToJson(nlohmann::ordered_json& jdata, const VkOutOfBandQueueTypeNV& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkPartitionedAccelerationStructureInstanceFlagBitsNV& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkPartitionedAccelerationStructureOpTypeNV& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkPastPresentationTimingFlagBitsEXT& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkPeerMemoryFeatureFlagBits& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkPerformanceConfigurationTypeINTEL& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkPerformanceCounterDescriptionFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); @@ -444,6 +459,8 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkPerformanceCounterUnitKH void FieldToJson(nlohmann::ordered_json& jdata, const VkPerformanceOverrideTypeINTEL& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkPerformanceParameterTypeINTEL& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkPerformanceValueTypeINTEL& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkPhysicalDeviceDataGraphOperationTypeARM& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkPhysicalDeviceDataGraphProcessingEngineTypeARM& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkPhysicalDeviceLayeredApiKHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkPhysicalDeviceSchedulingControlsFlagBitsARM_t, nlohmann::ordered_json& jdata, const VkPhysicalDeviceSchedulingControlsFlagBitsARM& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkPhysicalDeviceType& value, const util::JsonOptions& options = util::JsonOptions()); @@ -468,6 +485,8 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkPolygonMode& value, cons void FieldToJson(nlohmann::ordered_json& jdata, const VkPresentGravityFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkPresentModeKHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkPresentScalingFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkPresentStageFlagBitsEXT& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkPresentTimingInfoFlagBitsEXT& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkPrimitiveTopology& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkProvokingVertexModeEXT& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkQueryControlFlagBits& value, const util::JsonOptions& options = util::JsonOptions()); @@ -480,12 +499,14 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkQueryType& value, const void FieldToJson(nlohmann::ordered_json& jdata, const VkQueueFlagBits& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkQueueGlobalPriority& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkRasterizationOrderAMD& value, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const VkRayTracingInvocationReorderModeNV& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkRayTracingInvocationReorderModeEXT& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkRayTracingLssIndexingModeNV& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkRayTracingLssPrimitiveEndCapsModeNV& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkRayTracingShaderGroupTypeKHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkRenderPassCreateFlagBits& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkRenderingAttachmentFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkRenderingFlagBits& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkResolveImageFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkResolveModeFlagBits& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkResult& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkSampleCountFlagBits& value, const util::JsonOptions& options = util::JsonOptions()); @@ -553,13 +574,12 @@ void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeFlagBitsKHR& void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH264CapabilityFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH264RateControlFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH264StdFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH265CapabilityFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH265CtbSizeFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH265RateControlFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH265StdFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeH265TransformBlockSizeFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeIntraRefreshModeFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeRateControlModeFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeRgbChromaOffsetFlagBitsVALVE& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeRgbModelConversionFlagBitsVALVE& value, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeRgbRangeCompressionFlagBitsVALVE& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeTuningModeKHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoEncodeUsageFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const VkVideoSessionCreateFlagBitsKHR& value, const util::JsonOptions& options = util::JsonOptions()); @@ -572,6 +592,7 @@ void FieldToJson(VkAccessFlags_t, nlohmann::ordered_json& jdata, const VkFlags f void FieldToJson(VkAccessFlags2_t, nlohmann::ordered_json& jdata, const VkFlags64 flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkAccessFlags3KHR_t, nlohmann::ordered_json& jdata, const VkFlags64 flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkAcquireProfilingLockFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkAddressCopyFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkAndroidSurfaceCreateFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkAttachmentDescriptionFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkBufferCreateFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); @@ -589,6 +610,8 @@ void FieldToJson(VkCommandPoolTrimFlags_t, nlohmann::ordered_json& jdata, const void FieldToJson(VkCompositeAlphaFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkConditionalRenderingFlagsEXT_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkCullModeFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkDataGraphPipelineDispatchFlagsARM_t, nlohmann::ordered_json& jdata, const VkFlags64 flags, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkDataGraphPipelineSessionCreateFlagsARM_t, nlohmann::ordered_json& jdata, const VkFlags64 flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkDebugReportFlagsEXT_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkDebugUtilsMessageSeverityFlagsEXT_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkDebugUtilsMessageTypeFlagsEXT_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); @@ -646,6 +669,7 @@ void FieldToJson(VkIndirectStateFlagsNV_t, nlohmann::ordered_json& jdata, const void FieldToJson(VkInstanceCreateFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkMacOSSurfaceCreateFlagsMVK_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkMemoryAllocateFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkMemoryDecompressionMethodFlagsEXT_t, nlohmann::ordered_json& jdata, const VkFlags64 flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkMemoryHeapFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkMemoryMapFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkMemoryPropertyFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); @@ -657,7 +681,9 @@ void FieldToJson(VkOpticalFlowGridSizeFlagsNV_t, nlohmann::ordered_json& jdata, void FieldToJson(VkOpticalFlowSessionCreateFlagsNV_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkOpticalFlowUsageFlagsNV_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkPartitionedAccelerationStructureInstanceFlagsNV_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkPastPresentationTimingFlagsEXT_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkPeerMemoryFeatureFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkPerformanceCounterDescriptionFlagsARM_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkPerformanceCounterDescriptionFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkPhysicalDeviceSchedulingControlsFlagsARM_t, nlohmann::ordered_json& jdata, const VkFlags64 flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkPipelineCacheCreateFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); @@ -688,6 +714,8 @@ void FieldToJson(VkPipelineViewportStateCreateFlags_t, nlohmann::ordered_json& j void FieldToJson(VkPipelineViewportSwizzleStateCreateFlagsNV_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkPresentGravityFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkPresentScalingFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkPresentStageFlagsEXT_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkPresentTimingInfoFlagsEXT_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkPrivateDataSlotCreateFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkQueryControlFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkQueryPipelineStatisticFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); @@ -695,7 +723,9 @@ void FieldToJson(VkQueryPoolCreateFlags_t, nlohmann::ordered_json& jdata, const void FieldToJson(VkQueryResultFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkQueueFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkRenderPassCreateFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkRenderingAttachmentFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkRenderingFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkResolveImageFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkResolveModeFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkSampleCountFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkSamplerCreateFlags_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); @@ -742,14 +772,13 @@ void FieldToJson(VkVideoEncodeFlagsKHR_t, nlohmann::ordered_json& jdata, const V void FieldToJson(VkVideoEncodeH264CapabilityFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkVideoEncodeH264RateControlFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkVideoEncodeH264StdFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(VkVideoEncodeH265CapabilityFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkVideoEncodeH265CtbSizeFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(VkVideoEncodeH265RateControlFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(VkVideoEncodeH265StdFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(VkVideoEncodeH265TransformBlockSizeFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkVideoEncodeIntraRefreshModeFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkVideoEncodeRateControlFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkVideoEncodeRateControlModeFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkVideoEncodeRgbChromaOffsetFlagsVALVE_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkVideoEncodeRgbModelConversionFlagsVALVE_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(VkVideoEncodeRgbRangeCompressionFlagsVALVE_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkVideoEncodeUsageFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkVideoEndCodingFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(VkVideoSessionCreateFlagsKHR_t, nlohmann::ordered_json& jdata, const VkFlags flags, const util::JsonOptions& options = util::JsonOptions()); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_string.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_string.cpp index 0a4870dd3..eac20fc45 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_string.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_string.cpp @@ -441,107 +441,6 @@ template <> std::string ToString(const StdVideoH2 return "Unhandled StdVideoH264WeightedBipredIdc"; } -template <> std::string ToString(const StdVideoH265AspectRatioIdc& value, ToStringFlags, uint32_t, uint32_t) -{ - switch (value) { - case STD_VIDEO_H265_ASPECT_RATIO_IDC_UNSPECIFIED: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_UNSPECIFIED"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_SQUARE: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_SQUARE"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_12_11: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_12_11"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_10_11: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_10_11"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_16_11: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_16_11"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_40_33: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_40_33"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_24_11: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_24_11"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_20_11: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_20_11"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_32_11: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_32_11"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_80_33: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_80_33"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_18_11: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_18_11"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_15_11: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_15_11"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_64_33: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_64_33"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_160_99: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_160_99"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_4_3: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_4_3"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_3_2: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_3_2"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_2_1: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_2_1"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_EXTENDED_SAR: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_EXTENDED_SAR"; - case STD_VIDEO_H265_ASPECT_RATIO_IDC_INVALID: return "STD_VIDEO_H265_ASPECT_RATIO_IDC_INVALID"; - default: break; - } - return "Unhandled StdVideoH265AspectRatioIdc"; -} - -template <> std::string ToString(const StdVideoH265ChromaFormatIdc& value, ToStringFlags, uint32_t, uint32_t) -{ - switch (value) { - case STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME: return "STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME"; - case STD_VIDEO_H265_CHROMA_FORMAT_IDC_420: return "STD_VIDEO_H265_CHROMA_FORMAT_IDC_420"; - case STD_VIDEO_H265_CHROMA_FORMAT_IDC_422: return "STD_VIDEO_H265_CHROMA_FORMAT_IDC_422"; - case STD_VIDEO_H265_CHROMA_FORMAT_IDC_444: return "STD_VIDEO_H265_CHROMA_FORMAT_IDC_444"; - case STD_VIDEO_H265_CHROMA_FORMAT_IDC_INVALID: return "STD_VIDEO_H265_CHROMA_FORMAT_IDC_INVALID"; - default: break; - } - return "Unhandled StdVideoH265ChromaFormatIdc"; -} - -template <> std::string ToString(const StdVideoH265LevelIdc& value, ToStringFlags, uint32_t, uint32_t) -{ - switch (value) { - case STD_VIDEO_H265_LEVEL_IDC_1_0: return "STD_VIDEO_H265_LEVEL_IDC_1_0"; - case STD_VIDEO_H265_LEVEL_IDC_2_0: return "STD_VIDEO_H265_LEVEL_IDC_2_0"; - case STD_VIDEO_H265_LEVEL_IDC_2_1: return "STD_VIDEO_H265_LEVEL_IDC_2_1"; - case STD_VIDEO_H265_LEVEL_IDC_3_0: return "STD_VIDEO_H265_LEVEL_IDC_3_0"; - case STD_VIDEO_H265_LEVEL_IDC_3_1: return "STD_VIDEO_H265_LEVEL_IDC_3_1"; - case STD_VIDEO_H265_LEVEL_IDC_4_0: return "STD_VIDEO_H265_LEVEL_IDC_4_0"; - case STD_VIDEO_H265_LEVEL_IDC_4_1: return "STD_VIDEO_H265_LEVEL_IDC_4_1"; - case STD_VIDEO_H265_LEVEL_IDC_5_0: return "STD_VIDEO_H265_LEVEL_IDC_5_0"; - case STD_VIDEO_H265_LEVEL_IDC_5_1: return "STD_VIDEO_H265_LEVEL_IDC_5_1"; - case STD_VIDEO_H265_LEVEL_IDC_5_2: return "STD_VIDEO_H265_LEVEL_IDC_5_2"; - case STD_VIDEO_H265_LEVEL_IDC_6_0: return "STD_VIDEO_H265_LEVEL_IDC_6_0"; - case STD_VIDEO_H265_LEVEL_IDC_6_1: return "STD_VIDEO_H265_LEVEL_IDC_6_1"; - case STD_VIDEO_H265_LEVEL_IDC_6_2: return "STD_VIDEO_H265_LEVEL_IDC_6_2"; - case STD_VIDEO_H265_LEVEL_IDC_INVALID: return "STD_VIDEO_H265_LEVEL_IDC_INVALID"; - default: break; - } - return "Unhandled StdVideoH265LevelIdc"; -} - -template <> std::string ToString(const StdVideoH265PictureType& value, ToStringFlags, uint32_t, uint32_t) -{ - switch (value) { - case STD_VIDEO_H265_PICTURE_TYPE_P: return "STD_VIDEO_H265_PICTURE_TYPE_P"; - case STD_VIDEO_H265_PICTURE_TYPE_B: return "STD_VIDEO_H265_PICTURE_TYPE_B"; - case STD_VIDEO_H265_PICTURE_TYPE_I: return "STD_VIDEO_H265_PICTURE_TYPE_I"; - case STD_VIDEO_H265_PICTURE_TYPE_IDR: return "STD_VIDEO_H265_PICTURE_TYPE_IDR"; - case STD_VIDEO_H265_PICTURE_TYPE_INVALID: return "STD_VIDEO_H265_PICTURE_TYPE_INVALID"; - default: break; - } - return "Unhandled StdVideoH265PictureType"; -} - -template <> std::string ToString(const StdVideoH265ProfileIdc& value, ToStringFlags, uint32_t, uint32_t) -{ - switch (value) { - case STD_VIDEO_H265_PROFILE_IDC_MAIN: return "STD_VIDEO_H265_PROFILE_IDC_MAIN"; - case STD_VIDEO_H265_PROFILE_IDC_MAIN_10: return "STD_VIDEO_H265_PROFILE_IDC_MAIN_10"; - case STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE: return "STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE"; - case STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS: return "STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS"; - case STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS: return "STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS"; - case STD_VIDEO_H265_PROFILE_IDC_INVALID: return "STD_VIDEO_H265_PROFILE_IDC_INVALID"; - default: break; - } - return "Unhandled StdVideoH265ProfileIdc"; -} - -template <> std::string ToString(const StdVideoH265SliceType& value, ToStringFlags, uint32_t, uint32_t) -{ - switch (value) { - case STD_VIDEO_H265_SLICE_TYPE_B: return "STD_VIDEO_H265_SLICE_TYPE_B"; - case STD_VIDEO_H265_SLICE_TYPE_P: return "STD_VIDEO_H265_SLICE_TYPE_P"; - case STD_VIDEO_H265_SLICE_TYPE_I: return "STD_VIDEO_H265_SLICE_TYPE_I"; - case STD_VIDEO_H265_SLICE_TYPE_INVALID: return "STD_VIDEO_H265_SLICE_TYPE_INVALID"; - default: break; - } - return "Unhandled StdVideoH265SliceType"; -} - template <> std::string ToString(const StdVideoVP9ColorSpace& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { @@ -795,6 +694,8 @@ std::string VkAccessFlagBits2ToString(const VkAccessFlagBits2 value) case VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV: return "VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV"; case VK_ACCESS_2_DATA_GRAPH_READ_BIT_ARM: return "VK_ACCESS_2_DATA_GRAPH_READ_BIT_ARM"; case VK_ACCESS_2_DATA_GRAPH_WRITE_BIT_ARM: return "VK_ACCESS_2_DATA_GRAPH_WRITE_BIT_ARM"; + case VK_ACCESS_2_MEMORY_DECOMPRESSION_READ_BIT_EXT: return "VK_ACCESS_2_MEMORY_DECOMPRESSION_READ_BIT_EXT"; + case VK_ACCESS_2_MEMORY_DECOMPRESSION_WRITE_BIT_EXT: return "VK_ACCESS_2_MEMORY_DECOMPRESSION_WRITE_BIT_EXT"; default: break; } return "Unhandled VkAccessFlagBits2"; @@ -829,6 +730,22 @@ template <> std::string ToString(VkFlags vkFl return BitmaskToString(vkFlags); } +template <> std::string ToString(const VkAddressCopyFlagBitsKHR& value, ToStringFlags, uint32_t, uint32_t) +{ + switch (value) { + case VK_ADDRESS_COPY_DEVICE_LOCAL_BIT_KHR: return "VK_ADDRESS_COPY_DEVICE_LOCAL_BIT_KHR"; + case VK_ADDRESS_COPY_SPARSE_BIT_KHR: return "VK_ADDRESS_COPY_SPARSE_BIT_KHR"; + case VK_ADDRESS_COPY_PROTECTED_BIT_KHR: return "VK_ADDRESS_COPY_PROTECTED_BIT_KHR"; + default: break; + } + return "Unhandled VkAddressCopyFlagBitsKHR"; +} + +template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) +{ + return BitmaskToString(vkFlags); +} + template <> std::string ToString(const VkAntiLagModeAMD& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { @@ -854,6 +771,8 @@ template <> std::string ToString(const VkAttach { switch (value) { case VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT: return "VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT"; + case VK_ATTACHMENT_DESCRIPTION_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR: return "VK_ATTACHMENT_DESCRIPTION_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR"; + case VK_ATTACHMENT_DESCRIPTION_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR: return "VK_ATTACHMENT_DESCRIPTION_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR"; default: break; } return "Unhandled VkAttachmentDescriptionFlagBits"; @@ -1099,8 +1018,10 @@ std::string VkBufferUsageFlagBits2ToString(const VkBufferUsageFlagBits2 value) case VK_BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT: return "VK_BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT"; case VK_BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT: return "VK_BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT"; case VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT: return "VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT"; + case VK_BUFFER_USAGE_2_COMPRESSED_DATA_DGF1_BIT_AMDX: return "VK_BUFFER_USAGE_2_COMPRESSED_DATA_DGF1_BIT_AMDX"; case VK_BUFFER_USAGE_2_DATA_GRAPH_FOREIGN_DESCRIPTOR_BIT_ARM: return "VK_BUFFER_USAGE_2_DATA_GRAPH_FOREIGN_DESCRIPTOR_BIT_ARM"; case VK_BUFFER_USAGE_2_TILE_MEMORY_BIT_QCOM: return "VK_BUFFER_USAGE_2_TILE_MEMORY_BIT_QCOM"; + case VK_BUFFER_USAGE_2_MEMORY_DECOMPRESSION_BIT_EXT: return "VK_BUFFER_USAGE_2_MEMORY_DECOMPRESSION_BIT_EXT"; case VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT: return "VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT"; default: break; } @@ -1126,6 +1047,7 @@ template <> std::string ToString(const case VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT_EXT: return "VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT_EXT"; case VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_BIT_NV: return "VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_BIT_NV"; case VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR: return "VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR"; + case VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_CLUSTER_OPACITY_MICROMAPS_BIT_NV: return "VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_CLUSTER_OPACITY_MICROMAPS_BIT_NV"; default: break; } return "Unhandled VkBuildAccelerationStructureFlagBitsKHR"; @@ -1488,6 +1410,67 @@ template <> std::string ToString(VkFlags vkFlags, ToStringFl return BitmaskToString(vkFlags); } +template <> std::string ToString(const VkDataGraphModelCacheTypeQCOM& value, ToStringFlags, uint32_t, uint32_t) +{ + switch (value) { + case VK_DATA_GRAPH_MODEL_CACHE_TYPE_GENERIC_BINARY_QCOM: return "VK_DATA_GRAPH_MODEL_CACHE_TYPE_GENERIC_BINARY_QCOM"; + default: break; + } + return "Unhandled VkDataGraphModelCacheTypeQCOM"; +} + +std::string VkDataGraphPipelineDispatchFlagBitsARMToString(const VkDataGraphPipelineDispatchFlagBitsARM value) +{ + return "Unhandled VkDataGraphPipelineDispatchFlagBitsARM"; +} + +std::string VkDataGraphPipelineDispatchFlagsARMToString(VkFlags64 vkFlags) +{ + return BitmaskToString(vkFlags, VkDataGraphPipelineDispatchFlagBitsARMToString); +} + +template <> std::string ToString(const VkDataGraphPipelinePropertyARM& value, ToStringFlags, uint32_t, uint32_t) +{ + switch (value) { + case VK_DATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM: return "VK_DATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM"; + case VK_DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM: return "VK_DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM"; + default: break; + } + return "Unhandled VkDataGraphPipelinePropertyARM"; +} + +template <> std::string ToString(const VkDataGraphPipelineSessionBindPointARM& value, ToStringFlags, uint32_t, uint32_t) +{ + switch (value) { + case VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM: return "VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM"; + default: break; + } + return "Unhandled VkDataGraphPipelineSessionBindPointARM"; +} + +template <> std::string ToString(const VkDataGraphPipelineSessionBindPointTypeARM& value, ToStringFlags, uint32_t, uint32_t) +{ + switch (value) { + case VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM: return "VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM"; + default: break; + } + return "Unhandled VkDataGraphPipelineSessionBindPointTypeARM"; +} + +std::string VkDataGraphPipelineSessionCreateFlagBitsARMToString(const VkDataGraphPipelineSessionCreateFlagBitsARM value) +{ + switch (value) { + case VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM: return "VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM"; + default: break; + } + return "Unhandled VkDataGraphPipelineSessionCreateFlagBitsARM"; +} + +std::string VkDataGraphPipelineSessionCreateFlagsARMToString(VkFlags64 vkFlags) +{ + return BitmaskToString(vkFlags, VkDataGraphPipelineSessionCreateFlagBitsARMToString); +} + template <> std::string ToString(const VkDebugReportFlagBitsEXT& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { @@ -1959,6 +1942,7 @@ template <> std::string ToString(const VkDriverId& value, ToStringFl case VK_DRIVER_ID_IMAGINATION_OPEN_SOURCE_MESA: return "VK_DRIVER_ID_IMAGINATION_OPEN_SOURCE_MESA"; case VK_DRIVER_ID_MESA_HONEYKRISP: return "VK_DRIVER_ID_MESA_HONEYKRISP"; case VK_DRIVER_ID_VULKAN_SC_EMULATION_ON_VULKAN: return "VK_DRIVER_ID_VULKAN_SC_EMULATION_ON_VULKAN"; + case VK_DRIVER_ID_MESA_KOSMICKRISP: return "VK_DRIVER_ID_MESA_KOSMICKRISP"; default: break; } return "Unhandled VkDriverId"; @@ -2139,6 +2123,7 @@ template <> std::string ToString(const VkExt case VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT: return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT"; case VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA: return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA"; case VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV: return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV"; + case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OH_NATIVE_BUFFER_BIT_OHOS: return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OH_NATIVE_BUFFER_BIT_OHOS"; case VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX: return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX"; case VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLBUFFER_BIT_EXT: return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLBUFFER_BIT_EXT"; case VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_EXT: return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_EXT"; @@ -2495,6 +2480,36 @@ template <> std::string ToString(const VkFormat& value, ToStringFlags, case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG: return "VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG"; case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG: return "VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG"; case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: return "VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG"; + case VK_FORMAT_ASTC_3x3x3_UNORM_BLOCK_EXT: return "VK_FORMAT_ASTC_3x3x3_UNORM_BLOCK_EXT"; + case VK_FORMAT_ASTC_3x3x3_SRGB_BLOCK_EXT: return "VK_FORMAT_ASTC_3x3x3_SRGB_BLOCK_EXT"; + case VK_FORMAT_ASTC_3x3x3_SFLOAT_BLOCK_EXT: return "VK_FORMAT_ASTC_3x3x3_SFLOAT_BLOCK_EXT"; + case VK_FORMAT_ASTC_4x3x3_UNORM_BLOCK_EXT: return "VK_FORMAT_ASTC_4x3x3_UNORM_BLOCK_EXT"; + case VK_FORMAT_ASTC_4x3x3_SRGB_BLOCK_EXT: return "VK_FORMAT_ASTC_4x3x3_SRGB_BLOCK_EXT"; + case VK_FORMAT_ASTC_4x3x3_SFLOAT_BLOCK_EXT: return "VK_FORMAT_ASTC_4x3x3_SFLOAT_BLOCK_EXT"; + case VK_FORMAT_ASTC_4x4x3_UNORM_BLOCK_EXT: return "VK_FORMAT_ASTC_4x4x3_UNORM_BLOCK_EXT"; + case VK_FORMAT_ASTC_4x4x3_SRGB_BLOCK_EXT: return "VK_FORMAT_ASTC_4x4x3_SRGB_BLOCK_EXT"; + case VK_FORMAT_ASTC_4x4x3_SFLOAT_BLOCK_EXT: return "VK_FORMAT_ASTC_4x4x3_SFLOAT_BLOCK_EXT"; + case VK_FORMAT_ASTC_4x4x4_UNORM_BLOCK_EXT: return "VK_FORMAT_ASTC_4x4x4_UNORM_BLOCK_EXT"; + case VK_FORMAT_ASTC_4x4x4_SRGB_BLOCK_EXT: return "VK_FORMAT_ASTC_4x4x4_SRGB_BLOCK_EXT"; + case VK_FORMAT_ASTC_4x4x4_SFLOAT_BLOCK_EXT: return "VK_FORMAT_ASTC_4x4x4_SFLOAT_BLOCK_EXT"; + case VK_FORMAT_ASTC_5x4x4_UNORM_BLOCK_EXT: return "VK_FORMAT_ASTC_5x4x4_UNORM_BLOCK_EXT"; + case VK_FORMAT_ASTC_5x4x4_SRGB_BLOCK_EXT: return "VK_FORMAT_ASTC_5x4x4_SRGB_BLOCK_EXT"; + case VK_FORMAT_ASTC_5x4x4_SFLOAT_BLOCK_EXT: return "VK_FORMAT_ASTC_5x4x4_SFLOAT_BLOCK_EXT"; + case VK_FORMAT_ASTC_5x5x4_UNORM_BLOCK_EXT: return "VK_FORMAT_ASTC_5x5x4_UNORM_BLOCK_EXT"; + case VK_FORMAT_ASTC_5x5x4_SRGB_BLOCK_EXT: return "VK_FORMAT_ASTC_5x5x4_SRGB_BLOCK_EXT"; + case VK_FORMAT_ASTC_5x5x4_SFLOAT_BLOCK_EXT: return "VK_FORMAT_ASTC_5x5x4_SFLOAT_BLOCK_EXT"; + case VK_FORMAT_ASTC_5x5x5_UNORM_BLOCK_EXT: return "VK_FORMAT_ASTC_5x5x5_UNORM_BLOCK_EXT"; + case VK_FORMAT_ASTC_5x5x5_SRGB_BLOCK_EXT: return "VK_FORMAT_ASTC_5x5x5_SRGB_BLOCK_EXT"; + case VK_FORMAT_ASTC_5x5x5_SFLOAT_BLOCK_EXT: return "VK_FORMAT_ASTC_5x5x5_SFLOAT_BLOCK_EXT"; + case VK_FORMAT_ASTC_6x5x5_UNORM_BLOCK_EXT: return "VK_FORMAT_ASTC_6x5x5_UNORM_BLOCK_EXT"; + case VK_FORMAT_ASTC_6x5x5_SRGB_BLOCK_EXT: return "VK_FORMAT_ASTC_6x5x5_SRGB_BLOCK_EXT"; + case VK_FORMAT_ASTC_6x5x5_SFLOAT_BLOCK_EXT: return "VK_FORMAT_ASTC_6x5x5_SFLOAT_BLOCK_EXT"; + case VK_FORMAT_ASTC_6x6x5_UNORM_BLOCK_EXT: return "VK_FORMAT_ASTC_6x6x5_UNORM_BLOCK_EXT"; + case VK_FORMAT_ASTC_6x6x5_SRGB_BLOCK_EXT: return "VK_FORMAT_ASTC_6x6x5_SRGB_BLOCK_EXT"; + case VK_FORMAT_ASTC_6x6x5_SFLOAT_BLOCK_EXT: return "VK_FORMAT_ASTC_6x6x5_SFLOAT_BLOCK_EXT"; + case VK_FORMAT_ASTC_6x6x6_UNORM_BLOCK_EXT: return "VK_FORMAT_ASTC_6x6x6_UNORM_BLOCK_EXT"; + case VK_FORMAT_ASTC_6x6x6_SRGB_BLOCK_EXT: return "VK_FORMAT_ASTC_6x6x6_SRGB_BLOCK_EXT"; + case VK_FORMAT_ASTC_6x6x6_SFLOAT_BLOCK_EXT: return "VK_FORMAT_ASTC_6x6x6_SFLOAT_BLOCK_EXT"; case VK_FORMAT_R8_BOOL_ARM: return "VK_FORMAT_R8_BOOL_ARM"; case VK_FORMAT_R16G16_SFIXED5_NV: return "VK_FORMAT_R16G16_SFIXED5_NV"; case VK_FORMAT_R10X6_UINT_PACK16_ARM: return "VK_FORMAT_R10X6_UINT_PACK16_ARM"; @@ -2610,8 +2625,13 @@ std::string VkFormatFeatureFlagBits2ToString(const VkFormatFeatureFlagBits2 valu case VK_FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV: return "VK_FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV"; case VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV: return "VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV"; case VK_FORMAT_FEATURE_2_TENSOR_DATA_GRAPH_BIT_ARM: return "VK_FORMAT_FEATURE_2_TENSOR_DATA_GRAPH_BIT_ARM"; + case VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR: return "VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR"; case VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR: return "VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR"; case VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR: return "VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR"; + case VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_COMPUTE_QUEUE_BIT_KHR: return "VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_COMPUTE_QUEUE_BIT_KHR"; + case VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_TRANSFER_QUEUE_BIT_KHR: return "VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_TRANSFER_QUEUE_BIT_KHR"; + case VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_COMPUTE_QUEUE_BIT_KHR: return "VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_COMPUTE_QUEUE_BIT_KHR"; + case VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_TRANSFER_QUEUE_BIT_KHR: return "VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_TRANSFER_QUEUE_BIT_KHR"; default: break; } return "Unhandled VkFormatFeatureFlagBits2"; @@ -2757,6 +2777,7 @@ template <> std::string ToString(const VkGeometryTypeKHR& val case VK_GEOMETRY_TYPE_INSTANCES_KHR: return "VK_GEOMETRY_TYPE_INSTANCES_KHR"; case VK_GEOMETRY_TYPE_SPHERES_NV: return "VK_GEOMETRY_TYPE_SPHERES_NV"; case VK_GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV: return "VK_GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV"; + case VK_GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX: return "VK_GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX"; default: break; } return "Unhandled VkGeometryTypeKHR"; @@ -3283,6 +3304,20 @@ template <> std::string ToString(VkFlags vkFlags, ToSt return BitmaskToString(vkFlags); } +std::string VkMemoryDecompressionMethodFlagBitsEXTToString(const VkMemoryDecompressionMethodFlagBitsEXT value) +{ + switch (value) { + case VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_EXT: return "VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_EXT"; + default: break; + } + return "Unhandled VkMemoryDecompressionMethodFlagBitsEXT"; +} + +std::string VkMemoryDecompressionMethodFlagsEXTToString(VkFlags64 vkFlags) +{ + return BitmaskToString(vkFlags, VkMemoryDecompressionMethodFlagBitsEXTToString); +} + template <> std::string ToString(const VkMemoryHeapFlagBits& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { @@ -3413,8 +3448,8 @@ template <> std::string ToString(const VkObjectType& value, ToStri case VK_OBJECT_TYPE_DESCRIPTOR_SET: return "VK_OBJECT_TYPE_DESCRIPTOR_SET"; case VK_OBJECT_TYPE_FRAMEBUFFER: return "VK_OBJECT_TYPE_FRAMEBUFFER"; case VK_OBJECT_TYPE_COMMAND_POOL: return "VK_OBJECT_TYPE_COMMAND_POOL"; - case VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION: return "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"; case VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE: return "VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE"; + case VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION: return "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"; case VK_OBJECT_TYPE_PRIVATE_DATA_SLOT: return "VK_OBJECT_TYPE_PRIVATE_DATA_SLOT"; case VK_OBJECT_TYPE_SURFACE_KHR: return "VK_OBJECT_TYPE_SURFACE_KHR"; case VK_OBJECT_TYPE_SWAPCHAIN_KHR: return "VK_OBJECT_TYPE_SWAPCHAIN_KHR"; @@ -3610,6 +3645,21 @@ template <> std::string ToString(con return "Unhandled VkPartitionedAccelerationStructureOpTypeNV"; } +template <> std::string ToString(const VkPastPresentationTimingFlagBitsEXT& value, ToStringFlags, uint32_t, uint32_t) +{ + switch (value) { + case VK_PAST_PRESENTATION_TIMING_ALLOW_PARTIAL_RESULTS_BIT_EXT: return "VK_PAST_PRESENTATION_TIMING_ALLOW_PARTIAL_RESULTS_BIT_EXT"; + case VK_PAST_PRESENTATION_TIMING_ALLOW_OUT_OF_ORDER_RESULTS_BIT_EXT: return "VK_PAST_PRESENTATION_TIMING_ALLOW_OUT_OF_ORDER_RESULTS_BIT_EXT"; + default: break; + } + return "Unhandled VkPastPresentationTimingFlagBitsEXT"; +} + +template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) +{ + return BitmaskToString(vkFlags); +} + template <> std::string ToString(const VkPeerMemoryFeatureFlagBits& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { @@ -3728,6 +3778,28 @@ template <> std::string ToString(const VkPerformanc return "Unhandled VkPerformanceValueTypeINTEL"; } +template <> std::string ToString(const VkPhysicalDeviceDataGraphOperationTypeARM& value, ToStringFlags, uint32_t, uint32_t) +{ + switch (value) { + case VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM: return "VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM"; + case VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_NEURAL_MODEL_QCOM: return "VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_NEURAL_MODEL_QCOM"; + case VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_BUILTIN_MODEL_QCOM: return "VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_BUILTIN_MODEL_QCOM"; + default: break; + } + return "Unhandled VkPhysicalDeviceDataGraphOperationTypeARM"; +} + +template <> std::string ToString(const VkPhysicalDeviceDataGraphProcessingEngineTypeARM& value, ToStringFlags, uint32_t, uint32_t) +{ + switch (value) { + case VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM: return "VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM"; + case VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM: return "VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM"; + case VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM: return "VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM"; + default: break; + } + return "Unhandled VkPhysicalDeviceDataGraphProcessingEngineTypeARM"; +} + template <> std::string ToString(const VkPhysicalDeviceLayeredApiKHR& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { @@ -3801,6 +3873,7 @@ template <> std::string ToString(const VkPipelineC { switch (value) { case VK_PIPELINE_CACHE_HEADER_VERSION_ONE: return "VK_PIPELINE_CACHE_HEADER_VERSION_ONE"; + case VK_PIPELINE_CACHE_HEADER_VERSION_DATA_GRAPH_QCOM: return "VK_PIPELINE_CACHE_HEADER_VERSION_DATA_GRAPH_QCOM"; default: break; } return "Unhandled VkPipelineCacheHeaderVersion"; @@ -3836,8 +3909,8 @@ template <> std::string ToString(const VkPipelineCreat case VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT: return "VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"; case VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT: return "VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"; case VK_PIPELINE_CREATE_DERIVATIVE_BIT: return "VK_PIPELINE_CREATE_DERIVATIVE_BIT"; - case VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT: return "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"; case VK_PIPELINE_CREATE_DISPATCH_BASE_BIT: return "VK_PIPELINE_CREATE_DISPATCH_BASE_BIT"; + case VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT: return "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"; case VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT: return "VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT"; case VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT: return "VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT"; case VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT: return "VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT"; @@ -3915,6 +3988,7 @@ std::string VkPipelineCreateFlagBits2ToString(const VkPipelineCreateFlagBits2 va case VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR: return "VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR"; case VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT: return "VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT"; case VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE: return "VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE"; + case VK_PIPELINE_CREATE_2_64_BIT_INDEXING_BIT_EXT: return "VK_PIPELINE_CREATE_2_64_BIT_INDEXING_BIT_EXT"; default: break; } return "Unhandled VkPipelineCreateFlagBits2"; @@ -4108,6 +4182,8 @@ std::string VkPipelineStageFlagBits2ToString(const VkPipelineStageFlagBits2 valu case VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV: return "VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV"; case VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV: return "VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV"; case VK_PIPELINE_STAGE_2_DATA_GRAPH_BIT_ARM: return "VK_PIPELINE_STAGE_2_DATA_GRAPH_BIT_ARM"; + case VK_PIPELINE_STAGE_2_COPY_INDIRECT_BIT_KHR: return "VK_PIPELINE_STAGE_2_COPY_INDIRECT_BIT_KHR"; + case VK_PIPELINE_STAGE_2_MEMORY_DECOMPRESSION_BIT_EXT: return "VK_PIPELINE_STAGE_2_MEMORY_DECOMPRESSION_BIT_EXT"; default: break; } return "Unhandled VkPipelineStageFlagBits2"; @@ -4187,6 +4263,38 @@ template <> std::string ToString(VkFlags vkFlags, T return BitmaskToString(vkFlags); } +template <> std::string ToString(const VkPresentStageFlagBitsEXT& value, ToStringFlags, uint32_t, uint32_t) +{ + switch (value) { + case VK_PRESENT_STAGE_QUEUE_OPERATIONS_END_BIT_EXT: return "VK_PRESENT_STAGE_QUEUE_OPERATIONS_END_BIT_EXT"; + case VK_PRESENT_STAGE_REQUEST_DEQUEUED_BIT_EXT: return "VK_PRESENT_STAGE_REQUEST_DEQUEUED_BIT_EXT"; + case VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_OUT_BIT_EXT: return "VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_OUT_BIT_EXT"; + case VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_VISIBLE_BIT_EXT: return "VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_VISIBLE_BIT_EXT"; + default: break; + } + return "Unhandled VkPresentStageFlagBitsEXT"; +} + +template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) +{ + return BitmaskToString(vkFlags); +} + +template <> std::string ToString(const VkPresentTimingInfoFlagBitsEXT& value, ToStringFlags, uint32_t, uint32_t) +{ + switch (value) { + case VK_PRESENT_TIMING_INFO_PRESENT_AT_RELATIVE_TIME_BIT_EXT: return "VK_PRESENT_TIMING_INFO_PRESENT_AT_RELATIVE_TIME_BIT_EXT"; + case VK_PRESENT_TIMING_INFO_PRESENT_AT_NEAREST_REFRESH_CYCLE_BIT_EXT: return "VK_PRESENT_TIMING_INFO_PRESENT_AT_NEAREST_REFRESH_CYCLE_BIT_EXT"; + default: break; + } + return "Unhandled VkPresentTimingInfoFlagBitsEXT"; +} + +template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) +{ + return BitmaskToString(vkFlags); +} + template <> std::string ToString(const VkPrimitiveTopology& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { @@ -4379,14 +4487,14 @@ template <> std::string ToString(const VkRasterizationO return "Unhandled VkRasterizationOrderAMD"; } -template <> std::string ToString(const VkRayTracingInvocationReorderModeNV& value, ToStringFlags, uint32_t, uint32_t) +template <> std::string ToString(const VkRayTracingInvocationReorderModeEXT& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { - case VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV: return "VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV"; - case VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV: return "VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV"; + case VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_EXT: return "VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_EXT"; + case VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_EXT: return "VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_EXT"; default: break; } - return "Unhandled VkRayTracingInvocationReorderModeNV"; + return "Unhandled VkRayTracingInvocationReorderModeEXT"; } template <> std::string ToString(const VkRayTracingLssIndexingModeNV& value, ToStringFlags, uint32_t, uint32_t) @@ -4435,6 +4543,22 @@ template <> std::string ToString(VkFlags vkFlags, To return BitmaskToString(vkFlags); } +template <> std::string ToString(const VkRenderingAttachmentFlagBitsKHR& value, ToStringFlags, uint32_t, uint32_t) +{ + switch (value) { + case VK_RENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR: return "VK_RENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR"; + case VK_RENDERING_ATTACHMENT_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR: return "VK_RENDERING_ATTACHMENT_RESOLVE_SKIP_TRANSFER_FUNCTION_BIT_KHR"; + case VK_RENDERING_ATTACHMENT_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR: return "VK_RENDERING_ATTACHMENT_RESOLVE_ENABLE_TRANSFER_FUNCTION_BIT_KHR"; + default: break; + } + return "Unhandled VkRenderingAttachmentFlagBitsKHR"; +} + +template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) +{ + return BitmaskToString(vkFlags); +} + template <> std::string ToString(const VkRenderingFlagBits& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { @@ -4444,6 +4568,9 @@ template <> std::string ToString(const VkRenderingFlagBits& case VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT: return "VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT"; case VK_RENDERING_CONTENTS_INLINE_BIT_KHR: return "VK_RENDERING_CONTENTS_INLINE_BIT_KHR"; case VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE: return "VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE"; + case VK_RENDERING_FRAGMENT_REGION_BIT_EXT: return "VK_RENDERING_FRAGMENT_REGION_BIT_EXT"; + case VK_RENDERING_CUSTOM_RESOLVE_BIT_EXT: return "VK_RENDERING_CUSTOM_RESOLVE_BIT_EXT"; + case VK_RENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHR: return "VK_RENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHR"; default: break; } return "Unhandled VkRenderingFlagBits"; @@ -4454,6 +4581,21 @@ template <> std::string ToString(VkFlags vkFlags, ToStringF return BitmaskToString(vkFlags); } +template <> std::string ToString(const VkResolveImageFlagBitsKHR& value, ToStringFlags, uint32_t, uint32_t) +{ + switch (value) { + case VK_RESOLVE_IMAGE_SKIP_TRANSFER_FUNCTION_BIT_KHR: return "VK_RESOLVE_IMAGE_SKIP_TRANSFER_FUNCTION_BIT_KHR"; + case VK_RESOLVE_IMAGE_ENABLE_TRANSFER_FUNCTION_BIT_KHR: return "VK_RESOLVE_IMAGE_ENABLE_TRANSFER_FUNCTION_BIT_KHR"; + default: break; + } + return "Unhandled VkResolveImageFlagBitsKHR"; +} + +template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) +{ + return BitmaskToString(vkFlags); +} + template <> std::string ToString(const VkResolveModeFlagBits& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { @@ -4463,6 +4605,7 @@ template <> std::string ToString(const VkResolveModeFlagB case VK_RESOLVE_MODE_MIN_BIT: return "VK_RESOLVE_MODE_MIN_BIT"; case VK_RESOLVE_MODE_MAX_BIT: return "VK_RESOLVE_MODE_MAX_BIT"; case VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID: return "VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID"; + case VK_RESOLVE_MODE_CUSTOM_BIT_EXT: return "VK_RESOLVE_MODE_CUSTOM_BIT_EXT"; default: break; } return "Unhandled VkResolveModeFlagBits"; @@ -4495,10 +4638,11 @@ template <> std::string ToString(const VkResult& value, ToStringFlags, case VK_ERROR_FORMAT_NOT_SUPPORTED: return "VK_ERROR_FORMAT_NOT_SUPPORTED"; case VK_ERROR_FRAGMENTED_POOL: return "VK_ERROR_FRAGMENTED_POOL"; case VK_ERROR_UNKNOWN: return "VK_ERROR_UNKNOWN"; + case VK_ERROR_VALIDATION_FAILED: return "VK_ERROR_VALIDATION_FAILED"; case VK_ERROR_OUT_OF_POOL_MEMORY: return "VK_ERROR_OUT_OF_POOL_MEMORY"; case VK_ERROR_INVALID_EXTERNAL_HANDLE: return "VK_ERROR_INVALID_EXTERNAL_HANDLE"; - case VK_ERROR_FRAGMENTATION: return "VK_ERROR_FRAGMENTATION"; case VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS: return "VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS"; + case VK_ERROR_FRAGMENTATION: return "VK_ERROR_FRAGMENTATION"; case VK_PIPELINE_COMPILE_REQUIRED: return "VK_PIPELINE_COMPILE_REQUIRED"; case VK_ERROR_NOT_PERMITTED: return "VK_ERROR_NOT_PERMITTED"; case VK_ERROR_SURFACE_LOST_KHR: return "VK_ERROR_SURFACE_LOST_KHR"; @@ -4506,7 +4650,6 @@ template <> std::string ToString(const VkResult& value, ToStringFlags, case VK_SUBOPTIMAL_KHR: return "VK_SUBOPTIMAL_KHR"; case VK_ERROR_OUT_OF_DATE_KHR: return "VK_ERROR_OUT_OF_DATE_KHR"; case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR: return "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR"; - case VK_ERROR_VALIDATION_FAILED_EXT: return "VK_ERROR_VALIDATION_FAILED_EXT"; case VK_ERROR_INVALID_SHADER_NV: return "VK_ERROR_INVALID_SHADER_NV"; case VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR: return "VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR"; case VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR: return "VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR"; @@ -4515,6 +4658,7 @@ template <> std::string ToString(const VkResult& value, ToStringFlags, case VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR: return "VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR"; case VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR: return "VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR"; case VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT: return "VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT"; + case VK_ERROR_PRESENT_TIMING_QUEUE_FULL_EXT: return "VK_ERROR_PRESENT_TIMING_QUEUE_FULL_EXT"; case VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT: return "VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT"; case VK_THREAD_IDLE_KHR: return "VK_THREAD_IDLE_KHR"; case VK_THREAD_DONE_KHR: return "VK_THREAD_DONE_KHR"; @@ -4707,6 +4851,7 @@ template <> std::string ToString(const VkShaderCreate case VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT: return "VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT"; case VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT: return "VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT"; case VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT: return "VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT"; + case VK_SHADER_CREATE_64_BIT_INDEXING_BIT_EXT: return "VK_SHADER_CREATE_64_BIT_INDEXING_BIT_EXT"; default: break; } return "Unhandled VkShaderCreateFlagBitsEXT"; @@ -4926,14 +5071,11 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_MEMORY_BARRIER: return "VK_STRUCTURE_TYPE_MEMORY_BARRIER"; case VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO: return "VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO"; case VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO: return "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES"; case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO: return "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO"; case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO: return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"; case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: return "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS"; case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO: return "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO"; case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO: return "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO"; - case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO: return "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"; case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO: return "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO"; case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO: return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO"; case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO: return "VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO"; @@ -4955,25 +5097,11 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2"; case VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2: return "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"; - case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO: return "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"; case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO: return "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO: return "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO: return "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"; case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO: return "VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES"; case VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2: return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2"; - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO: return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"; - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO: return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"; - case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO: return "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"; - case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO: return "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"; - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES: return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"; - case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO: return "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO"; case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES: return "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO"; @@ -4988,23 +5116,46 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO: return "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO"; case VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES: return "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"; + case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO: return "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES"; case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT: return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT"; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO: return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO: return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"; + case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO: return "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"; + case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO: return "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES: return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO: return "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"; + case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO: return "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"; + case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO: return "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"; + case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO: return "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES"; case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO: return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO"; - case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2: return "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2"; - case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2: return "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2"; - case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2: return "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2"; - case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2: return "VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2"; - case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2"; - case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO: return "VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO"; - case VK_STRUCTURE_TYPE_SUBPASS_END_INFO: return "VK_STRUCTURE_TYPE_SUBPASS_END_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES"; + case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO: return "VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO"; + case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: return "VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO"; + case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO: return "VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO"; + case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO: return "VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES"; + case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO: return "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO"; + case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO: return "VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO"; + case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO: return "VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO"; + case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO: return "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES"; @@ -5013,44 +5164,34 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES"; case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO: return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO"; case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT: return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES"; - case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE: return "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES"; - case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO: return "VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES"; case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO: return "VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES"; + case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2: return "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2"; + case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2: return "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2"; + case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2: return "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2"; + case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2: return "VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2"; + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2"; + case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO: return "VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO"; + case VK_STRUCTURE_TYPE_SUBPASS_END_INFO: return "VK_STRUCTURE_TYPE_SUBPASS_END_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES"; + case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE: return "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE"; + case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO: return "VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES"; case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO: return "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO"; case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO: return "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO"; case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO: return "VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES"; case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT: return "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT"; case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT: return "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES"; - case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO: return "VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: return "VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO"; - case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO: return "VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO"; - case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO: return "VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES"; - case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO: return "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO"; - case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO: return "VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO"; - case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO: return "VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO"; - case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO: return "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES"; - case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO: return "VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES"; case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO: return "VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO"; case VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO: return "VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES"; case VK_STRUCTURE_TYPE_MEMORY_BARRIER_2: return "VK_STRUCTURE_TYPE_MEMORY_BARRIER_2"; case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2: return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2"; case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2: return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2"; @@ -5059,19 +5200,25 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO: return "VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO"; case VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO: return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES"; case VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2: return "VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2"; case VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2: return "VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2"; case VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2: return "VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2"; case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2: return "VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2"; - case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2: return "VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2"; - case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2: return "VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2"; case VK_STRUCTURE_TYPE_BUFFER_COPY_2: return "VK_STRUCTURE_TYPE_BUFFER_COPY_2"; case VK_STRUCTURE_TYPE_IMAGE_COPY_2: return "VK_STRUCTURE_TYPE_IMAGE_COPY_2"; - case VK_STRUCTURE_TYPE_IMAGE_BLIT_2: return "VK_STRUCTURE_TYPE_IMAGE_BLIT_2"; case VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2: return "VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2"; - case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2: return "VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES"; + case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3: return "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES"; + case VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS: return "VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS"; + case VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS: return "VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS"; + case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO: return "VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES"; case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO: return "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES"; @@ -5079,60 +5226,35 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES"; case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK: return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK"; case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO: return "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES"; + case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2: return "VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2"; + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2: return "VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2"; + case VK_STRUCTURE_TYPE_IMAGE_BLIT_2: return "VK_STRUCTURE_TYPE_IMAGE_BLIT_2"; + case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2: return "VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2"; case VK_STRUCTURE_TYPE_RENDERING_INFO: return "VK_STRUCTURE_TYPE_RENDERING_INFO"; case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO: return "VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO"; case VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO: return "VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES"; case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO: return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES"; - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3: return "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES"; - case VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS: return "VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS"; - case VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS: return "VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES"; case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO: return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES"; case VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES: return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES"; - case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO: return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES"; - case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO: return "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES"; case VK_STRUCTURE_TYPE_MEMORY_MAP_INFO: return "VK_STRUCTURE_TYPE_MEMORY_MAP_INFO"; case VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO: return "VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES"; - case VK_STRUCTURE_TYPE_RENDERING_AREA_INFO: return "VK_STRUCTURE_TYPE_RENDERING_AREA_INFO"; case VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO: return "VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO"; case VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2: return "VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2"; case VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2: return "VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2"; - case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO: return "VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO"; case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO: return "VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES"; - case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: return "VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO"; - case VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO: return "VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES"; case VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS: return "VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS"; - case VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO: return "VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO"; - case VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO: return "VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO"; - case VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO: return "VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO"; - case VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO: return "VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES"; - case VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO: return "VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES"; case VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY: return "VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY"; @@ -5143,6 +5265,29 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO: return "VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO"; case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE: return "VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE"; case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY: return "VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES"; + case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO: return "VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES"; + case VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO: return "VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO"; + case VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO: return "VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO"; + case VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO: return "VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO"; + case VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO: return "VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES"; + case VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO: return "VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES"; + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO: return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES"; + case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO: return "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES"; + case VK_STRUCTURE_TYPE_RENDERING_AREA_INFO: return "VK_STRUCTURE_TYPE_RENDERING_AREA_INFO"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES"; + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: return "VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO"; + case VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO: return "VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO"; case VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR: return "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR"; case VK_STRUCTURE_TYPE_PRESENT_INFO_KHR: return "VK_STRUCTURE_TYPE_PRESENT_INFO_KHR"; case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR: return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR"; @@ -5406,6 +5551,16 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV: return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV"; case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV: return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV"; case VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV: return "VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT"; + case VK_STRUCTURE_TYPE_SWAPCHAIN_TIMING_PROPERTIES_EXT: return "VK_STRUCTURE_TYPE_SWAPCHAIN_TIMING_PROPERTIES_EXT"; + case VK_STRUCTURE_TYPE_SWAPCHAIN_TIME_DOMAIN_PROPERTIES_EXT: return "VK_STRUCTURE_TYPE_SWAPCHAIN_TIME_DOMAIN_PROPERTIES_EXT"; + case VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT: return "VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT"; + case VK_STRUCTURE_TYPE_PRESENT_TIMING_INFO_EXT: return "VK_STRUCTURE_TYPE_PRESENT_TIMING_INFO_EXT"; + case VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_INFO_EXT: return "VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_INFO_EXT"; + case VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_PROPERTIES_EXT: return "VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_PROPERTIES_EXT"; + case VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_EXT: return "VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_EXT"; + case VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT: return "VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT"; + case VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT: return "VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL"; case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL: return "VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL"; case VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL: return "VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL"; @@ -5490,6 +5645,7 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT: return "VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT"; case VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR: return "VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV"; case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_BARRIER_NV: return "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_BARRIER_NV"; @@ -5619,6 +5775,11 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT: return "VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE"; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RGB_CONVERSION_CAPABILITIES_VALVE: return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_RGB_CONVERSION_CAPABILITIES_VALVE"; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_PROFILE_RGB_CONVERSION_INFO_VALVE: return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_PROFILE_RGB_CONVERSION_INFO_VALVE"; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_RGB_CONVERSION_CREATE_INFO_VALVE: return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_RGB_CONVERSION_CREATE_INFO_VALVE"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT"; case VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT: return "VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT"; @@ -5661,9 +5822,6 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_INFO_ARM: return "VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_INFO_ARM"; case VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_SUBMIT_INFO_ARM: return "VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_SUBMIT_INFO_ARM"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_NV: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV"; case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV: return "VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV"; case VK_STRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV: return "VK_STRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV"; @@ -5678,6 +5836,12 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM: return "VK_STRUCTURE_TYPE_IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT"; + case VK_STRUCTURE_TYPE_NATIVE_BUFFER_USAGE_OHOS: return "VK_STRUCTURE_TYPE_NATIVE_BUFFER_USAGE_OHOS"; + case VK_STRUCTURE_TYPE_NATIVE_BUFFER_PROPERTIES_OHOS: return "VK_STRUCTURE_TYPE_NATIVE_BUFFER_PROPERTIES_OHOS"; + case VK_STRUCTURE_TYPE_NATIVE_BUFFER_FORMAT_PROPERTIES_OHOS: return "VK_STRUCTURE_TYPE_NATIVE_BUFFER_FORMAT_PROPERTIES_OHOS"; + case VK_STRUCTURE_TYPE_IMPORT_NATIVE_BUFFER_INFO_OHOS: return "VK_STRUCTURE_TYPE_IMPORT_NATIVE_BUFFER_INFO_OHOS"; + case VK_STRUCTURE_TYPE_MEMORY_GET_NATIVE_BUFFER_INFO_OHOS: return "VK_STRUCTURE_TYPE_MEMORY_GET_NATIVE_BUFFER_INFO_OHOS"; + case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_OHOS: return "VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_OHOS"; case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT: return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT"; @@ -5730,6 +5894,8 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ANTI_LAG_FEATURES_AMD: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ANTI_LAG_FEATURES_AMD"; case VK_STRUCTURE_TYPE_ANTI_LAG_DATA_AMD: return "VK_STRUCTURE_TYPE_ANTI_LAG_DATA_AMD"; case VK_STRUCTURE_TYPE_ANTI_LAG_PRESENTATION_INFO_AMD: return "VK_STRUCTURE_TYPE_ANTI_LAG_PRESENTATION_INFO_AMD"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DENSE_GEOMETRY_FORMAT_FEATURES_AMDX: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DENSE_GEOMETRY_FORMAT_FEATURES_AMDX"; + case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DENSE_GEOMETRY_FORMAT_TRIANGLES_DATA_AMDX: return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DENSE_GEOMETRY_FORMAT_TRIANGLES_DATA_AMDX"; case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR: return "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR"; case VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR: return "VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR"; @@ -5867,6 +6033,13 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_TILE_MEMORY_REQUIREMENTS_QCOM: return "VK_STRUCTURE_TYPE_TILE_MEMORY_REQUIREMENTS_QCOM"; case VK_STRUCTURE_TYPE_TILE_MEMORY_BIND_INFO_QCOM: return "VK_STRUCTURE_TYPE_TILE_MEMORY_BIND_INFO_QCOM"; case VK_STRUCTURE_TYPE_TILE_MEMORY_SIZE_INFO_QCOM: return "VK_STRUCTURE_TYPE_TILE_MEMORY_SIZE_INFO_QCOM"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR"; + case VK_STRUCTURE_TYPE_COPY_MEMORY_INDIRECT_INFO_KHR: return "VK_STRUCTURE_TYPE_COPY_MEMORY_INDIRECT_INFO_KHR"; + case VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INDIRECT_INFO_KHR: return "VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INDIRECT_INFO_KHR"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_EXT"; + case VK_STRUCTURE_TYPE_DECOMPRESS_MEMORY_INFO_EXT: return "VK_STRUCTURE_TYPE_DECOMPRESS_MEMORY_INFO_EXT"; case VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV: return "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV"; case VK_STRUCTURE_TYPE_DISPLAY_MODE_STEREO_PROPERTIES_NV: return "VK_STRUCTURE_TYPE_DISPLAY_MODE_STEREO_PROPERTIES_NV"; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR: return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR"; @@ -5933,6 +6106,9 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_PROPERTIES_MESA: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_PROPERTIES_MESA"; case VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA: return "VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT"; case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT: return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR"; @@ -5942,7 +6118,7 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR: return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR"; case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR: return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR"; case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR: return "VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR"; - case VK_STRUCTURE_TYPE_OH_SURFACE_CREATE_INFO_OHOS: return "VK_STRUCTURE_TYPE_OH_SURFACE_CREATE_INFO_OHOS"; + case VK_STRUCTURE_TYPE_SURFACE_CREATE_INFO_OHOS: return "VK_STRUCTURE_TYPE_SURFACE_CREATE_INFO_OHOS"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HDR_VIVID_FEATURES_HUAWEI: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HDR_VIVID_FEATURES_HUAWEI"; case VK_STRUCTURE_TYPE_HDR_VIVID_DYNAMIC_METADATA_HUAWEI: return "VK_STRUCTURE_TYPE_HDR_VIVID_DYNAMIC_METADATA_HUAWEI"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV"; @@ -5953,6 +6129,11 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_MEMORY_METAL_HANDLE_PROPERTIES_EXT: return "VK_STRUCTURE_TYPE_MEMORY_METAL_HANDLE_PROPERTIES_EXT"; case VK_STRUCTURE_TYPE_MEMORY_GET_METAL_HANDLE_INFO_EXT: return "VK_STRUCTURE_TYPE_MEMORY_GET_METAL_HANDLE_INFO_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM"; + case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_ARM: return "VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_ARM"; + case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_ARM: return "VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_ARM"; + case VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM: return "VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE"; @@ -5965,10 +6146,25 @@ template <> std::string ToString(const VkStructureType& value, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_EXT"; case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_EXT: return "VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_EXT"; - case VK_STRUCTURE_TYPE_RENDERING_END_INFO_EXT: return "VK_STRUCTURE_TYPE_RENDERING_END_INFO_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT"; + case VK_STRUCTURE_TYPE_BEGIN_CUSTOM_RESOLVE_INFO_EXT: return "VK_STRUCTURE_TYPE_BEGIN_CUSTOM_RESOLVE_INFO_EXT"; + case VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT: return "VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM"; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_BUILTIN_MODEL_CREATE_INFO_QCOM: return "VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_BUILTIN_MODEL_CREATE_INFO_QCOM"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR"; + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR: return "VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR"; + case VK_STRUCTURE_TYPE_RENDERING_END_INFO_KHR: return "VK_STRUCTURE_TYPE_RENDERING_END_INFO_KHR"; + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR: return "VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT"; + case VK_STRUCTURE_TYPE_COMPUTE_OCCUPANCY_PRIORITY_PARAMETERS_NV: return "VK_STRUCTURE_TYPE_COMPUTE_OCCUPANCY_PRIORITY_PARAMETERS_NV"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV"; default: break; } return "Unhandled VkStructureType"; @@ -6028,13 +6224,13 @@ template <> std::string ToString(const VkSubpassDe switch (value) { case VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX: return "VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX"; case VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX: return "VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX"; - case VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM: return "VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM"; - case VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM: return "VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM"; case VK_SUBPASS_DESCRIPTION_TILE_SHADING_APRON_BIT_QCOM: return "VK_SUBPASS_DESCRIPTION_TILE_SHADING_APRON_BIT_QCOM"; case VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT: return "VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT"; case VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT: return "VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT"; case VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT: return "VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT"; case VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT: return "VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT"; + case VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_EXT: return "VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_EXT"; + case VK_SUBPASS_DESCRIPTION_CUSTOM_RESOLVE_BIT_EXT: return "VK_SUBPASS_DESCRIPTION_CUSTOM_RESOLVE_BIT_EXT"; default: break; } return "Unhandled VkSubpassDescriptionFlagBits"; @@ -6109,6 +6305,7 @@ template <> std::string ToString(const VkSwapchain case VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR: return "VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR"; case VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR: return "VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR"; case VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR: return "VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR"; + case VK_SWAPCHAIN_CREATE_PRESENT_TIMING_BIT_EXT: return "VK_SWAPCHAIN_CREATE_PRESENT_TIMING_BIT_EXT"; case VK_SWAPCHAIN_CREATE_PRESENT_ID_2_BIT_KHR: return "VK_SWAPCHAIN_CREATE_PRESENT_ID_2_BIT_KHR"; case VK_SWAPCHAIN_CREATE_PRESENT_WAIT_2_BIT_KHR: return "VK_SWAPCHAIN_CREATE_PRESENT_WAIT_2_BIT_KHR"; case VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_KHR: return "VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_KHR"; @@ -6167,6 +6364,8 @@ template <> std::string ToString(const VkTimeDomainKHR& value, case VK_TIME_DOMAIN_CLOCK_MONOTONIC_KHR: return "VK_TIME_DOMAIN_CLOCK_MONOTONIC_KHR"; case VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_KHR: return "VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_KHR"; case VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_KHR: return "VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_KHR"; + case VK_TIME_DOMAIN_PRESENT_STAGE_LOCAL_EXT: return "VK_TIME_DOMAIN_PRESENT_STAGE_LOCAL_EXT"; + case VK_TIME_DOMAIN_SWAPCHAIN_LOCAL_EXT: return "VK_TIME_DOMAIN_SWAPCHAIN_LOCAL_EXT"; default: break; } return "Unhandled VkTimeDomainKHR"; @@ -6633,31 +6832,6 @@ template <> std::string ToString(VkFlags vkFlag return BitmaskToString(vkFlags); } -template <> std::string ToString(const VkVideoEncodeH265CapabilityFlagBitsKHR& value, ToStringFlags, uint32_t, uint32_t) -{ - switch (value) { - case VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_KHR: return "VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR: return "VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_KHR: return "VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_KHR: return "VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR: return "VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR: return "VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR: return "VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_KHR: return "VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_KHR: return "VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_KHR: return "VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR: return "VK_VIDEO_ENCODE_H265_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_CU_QP_DIFF_WRAPAROUND_BIT_KHR: return "VK_VIDEO_ENCODE_H265_CAPABILITY_CU_QP_DIFF_WRAPAROUND_BIT_KHR"; - default: break; - } - return "Unhandled VkVideoEncodeH265CapabilityFlagBitsKHR"; -} - -template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) -{ - return BitmaskToString(vkFlags); -} - template <> std::string ToString(const VkVideoEncodeH265CtbSizeFlagBitsKHR& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { @@ -6674,108 +6848,87 @@ template <> std::string ToString(VkFlags vk return BitmaskToString(vkFlags); } -template <> std::string ToString(const VkVideoEncodeH265RateControlFlagBitsKHR& value, ToStringFlags, uint32_t, uint32_t) +template <> std::string ToString(const VkVideoEncodeIntraRefreshModeFlagBitsKHR& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR: return "VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_KHR: return "VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR: return "VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR: return "VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_KHR: return "VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_KHR"; + case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR: return "VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR"; + case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR: return "VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR"; + case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_BASED_BIT_KHR: return "VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_BASED_BIT_KHR"; + case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_ROW_BASED_BIT_KHR: return "VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_ROW_BASED_BIT_KHR"; + case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_COLUMN_BASED_BIT_KHR: return "VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_COLUMN_BASED_BIT_KHR"; default: break; } - return "Unhandled VkVideoEncodeH265RateControlFlagBitsKHR"; + return "Unhandled VkVideoEncodeIntraRefreshModeFlagBitsKHR"; } -template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) +template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) { - return BitmaskToString(vkFlags); + return BitmaskToString(vkFlags); } -template <> std::string ToString(const VkVideoEncodeH265StdFlagBitsKHR& value, ToStringFlags, uint32_t, uint32_t) +template <> std::string ToString(const VkVideoEncodeRateControlModeFlagBitsKHR& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { - case VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR: return "VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR"; + case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR: return "VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR"; + case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR: return "VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR"; + case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR: return "VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR"; + case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR: return "VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR"; default: break; } - return "Unhandled VkVideoEncodeH265StdFlagBitsKHR"; + return "Unhandled VkVideoEncodeRateControlModeFlagBitsKHR"; } -template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) +template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) { - return BitmaskToString(vkFlags); + return BitmaskToString(vkFlags); } -template <> std::string ToString(const VkVideoEncodeH265TransformBlockSizeFlagBitsKHR& value, ToStringFlags, uint32_t, uint32_t) +template <> std::string ToString(const VkVideoEncodeRgbChromaOffsetFlagBitsVALVE& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR: return "VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR: return "VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR: return "VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR"; - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR: return "VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR"; + case VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_COSITED_EVEN_BIT_VALVE: return "VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_COSITED_EVEN_BIT_VALVE"; + case VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_MIDPOINT_BIT_VALVE: return "VK_VIDEO_ENCODE_RGB_CHROMA_OFFSET_MIDPOINT_BIT_VALVE"; default: break; } - return "Unhandled VkVideoEncodeH265TransformBlockSizeFlagBitsKHR"; + return "Unhandled VkVideoEncodeRgbChromaOffsetFlagBitsVALVE"; } -template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) +template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) { - return BitmaskToString(vkFlags); + return BitmaskToString(vkFlags); } -template <> std::string ToString(const VkVideoEncodeIntraRefreshModeFlagBitsKHR& value, ToStringFlags, uint32_t, uint32_t) +template <> std::string ToString(const VkVideoEncodeRgbModelConversionFlagBitsVALVE& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { - case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR: return "VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR"; - case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR: return "VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR"; - case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_BASED_BIT_KHR: return "VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_BASED_BIT_KHR"; - case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_ROW_BASED_BIT_KHR: return "VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_ROW_BASED_BIT_KHR"; - case VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_COLUMN_BASED_BIT_KHR: return "VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_COLUMN_BASED_BIT_KHR"; + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_RGB_IDENTITY_BIT_VALVE: return "VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_RGB_IDENTITY_BIT_VALVE"; + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_IDENTITY_BIT_VALVE: return "VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_IDENTITY_BIT_VALVE"; + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_709_BIT_VALVE: return "VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_709_BIT_VALVE"; + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_601_BIT_VALVE: return "VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_601_BIT_VALVE"; + case VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_2020_BIT_VALVE: return "VK_VIDEO_ENCODE_RGB_MODEL_CONVERSION_YCBCR_2020_BIT_VALVE"; default: break; } - return "Unhandled VkVideoEncodeIntraRefreshModeFlagBitsKHR"; + return "Unhandled VkVideoEncodeRgbModelConversionFlagBitsVALVE"; } -template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) +template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) { - return BitmaskToString(vkFlags); + return BitmaskToString(vkFlags); } -template <> std::string ToString(const VkVideoEncodeRateControlModeFlagBitsKHR& value, ToStringFlags, uint32_t, uint32_t) +template <> std::string ToString(const VkVideoEncodeRgbRangeCompressionFlagBitsVALVE& value, ToStringFlags, uint32_t, uint32_t) { switch (value) { - case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR: return "VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR"; - case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR: return "VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR"; - case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR: return "VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR"; - case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR: return "VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR"; + case VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_FULL_RANGE_BIT_VALVE: return "VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_FULL_RANGE_BIT_VALVE"; + case VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_NARROW_RANGE_BIT_VALVE: return "VK_VIDEO_ENCODE_RGB_RANGE_COMPRESSION_NARROW_RANGE_BIT_VALVE"; default: break; } - return "Unhandled VkVideoEncodeRateControlModeFlagBitsKHR"; + return "Unhandled VkVideoEncodeRgbRangeCompressionFlagBitsVALVE"; } -template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) +template <> std::string ToString(VkFlags vkFlags, ToStringFlags, uint32_t, uint32_t) { - return BitmaskToString(vkFlags); + return BitmaskToString(vkFlags); } template <> std::string ToString(const VkVideoEncodeTuningModeKHR& value, ToStringFlags, uint32_t, uint32_t) diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_string.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_string.h index cee7a04be..f828477be 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_string.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_enum_to_string.h @@ -69,12 +69,6 @@ template <> std::string ToString(const StdVideoH264PocType& template <> std::string ToString(const StdVideoH264ProfileIdc& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const StdVideoH264SliceType& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const StdVideoH264WeightedBipredIdc& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(const StdVideoH265AspectRatioIdc& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(const StdVideoH265ChromaFormatIdc& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(const StdVideoH265LevelIdc& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(const StdVideoH265PictureType& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(const StdVideoH265ProfileIdc& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(const StdVideoH265SliceType& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const StdVideoVP9ColorSpace& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const StdVideoVP9FrameType& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const StdVideoVP9InterpolationFilter& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); @@ -96,6 +90,8 @@ std::string VkAccessFlagBits3KHRToString(const VkAccessFlagBits3KHR value); std::string VkAccessFlags3KHRToString(VkFlags64 vkFlags); template <> std::string ToString(const VkAcquireProfilingLockFlagBitsKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkAddressCopyFlagBitsKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkAntiLagModeAMD& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkAntiLagStageAMD& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkAttachmentDescriptionFlagBits& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); @@ -149,6 +145,14 @@ template <> std::string ToString(const VkCoverageRedu template <> std::string ToString(const VkCubicFilterWeightsQCOM& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkCullModeFlagBits& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkDataGraphModelCacheTypeQCOM& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +std::string VkDataGraphPipelineDispatchFlagBitsARMToString(const VkDataGraphPipelineDispatchFlagBitsARM value); +std::string VkDataGraphPipelineDispatchFlagsARMToString(VkFlags64 vkFlags); +template <> std::string ToString(const VkDataGraphPipelinePropertyARM& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkDataGraphPipelineSessionBindPointARM& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkDataGraphPipelineSessionBindPointTypeARM& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +std::string VkDataGraphPipelineSessionCreateFlagBitsARMToString(const VkDataGraphPipelineSessionCreateFlagBitsARM value); +std::string VkDataGraphPipelineSessionCreateFlagsARMToString(VkFlags64 vkFlags); template <> std::string ToString(const VkDebugReportFlagBitsEXT& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkDebugReportObjectTypeEXT& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); @@ -276,6 +280,8 @@ template <> std::string ToString(const VkLineRasterizat template <> std::string ToString(const VkLogicOp& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkMemoryAllocateFlagBits& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +std::string VkMemoryDecompressionMethodFlagBitsEXTToString(const VkMemoryDecompressionMethodFlagBitsEXT value); +std::string VkMemoryDecompressionMethodFlagsEXTToString(VkFlags64 vkFlags); template <> std::string ToString(const VkMemoryHeapFlagBits& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkMemoryMapFlagBits& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); @@ -305,6 +311,8 @@ template <> std::string ToString(const VkOutOfBandQueueT template <> std::string ToString(const VkPartitionedAccelerationStructureInstanceFlagBitsNV& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkPartitionedAccelerationStructureOpTypeNV& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkPastPresentationTimingFlagBitsEXT& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkPeerMemoryFeatureFlagBits& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkPerformanceConfigurationTypeINTEL& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); @@ -316,6 +324,8 @@ template <> std::string ToString(const VkPerformanc template <> std::string ToString(const VkPerformanceOverrideTypeINTEL& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkPerformanceParameterTypeINTEL& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkPerformanceValueTypeINTEL& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkPhysicalDeviceDataGraphOperationTypeARM& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkPhysicalDeviceDataGraphProcessingEngineTypeARM& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkPhysicalDeviceLayeredApiKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); std::string VkPhysicalDeviceSchedulingControlsFlagBitsARMToString(const VkPhysicalDeviceSchedulingControlsFlagBitsARM value); std::string VkPhysicalDeviceSchedulingControlsFlagsARMToString(VkFlags64 vkFlags); @@ -354,6 +364,10 @@ template <> std::string ToString(VkFlags vkFlags, T template <> std::string ToString(const VkPresentModeKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkPresentScalingFlagBitsKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkPresentStageFlagBitsEXT& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkPresentTimingInfoFlagBitsEXT& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkPrimitiveTopology& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkProvokingVertexModeEXT& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkQueryControlFlagBits& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); @@ -371,14 +385,18 @@ template <> std::string ToString(const VkQueueFlagBits& value, template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkQueueGlobalPriority& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkRasterizationOrderAMD& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(const VkRayTracingInvocationReorderModeNV& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkRayTracingInvocationReorderModeEXT& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkRayTracingLssIndexingModeNV& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkRayTracingLssPrimitiveEndCapsModeNV& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkRayTracingShaderGroupTypeKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkRenderPassCreateFlagBits& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkRenderingAttachmentFlagBitsKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkRenderingFlagBits& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkResolveImageFlagBitsKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkResolveModeFlagBits& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkResult& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); @@ -484,20 +502,18 @@ template <> std::string ToString(const template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkVideoEncodeH264StdFlagBitsKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(const VkVideoEncodeH265CapabilityFlagBitsKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkVideoEncodeH265CtbSizeFlagBitsKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(const VkVideoEncodeH265RateControlFlagBitsKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(const VkVideoEncodeH265StdFlagBitsKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(const VkVideoEncodeH265TransformBlockSizeFlagBitsKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); -template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkVideoEncodeIntraRefreshModeFlagBitsKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkVideoEncodeRateControlModeFlagBitsKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkVideoEncodeRgbChromaOffsetFlagBitsVALVE& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkVideoEncodeRgbModelConversionFlagBitsVALVE& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(const VkVideoEncodeRgbRangeCompressionFlagBitsVALVE& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); +template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkVideoEncodeTuningModeKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(const VkVideoEncodeUsageFlagBitsKHR& value, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); template <> std::string ToString(VkFlags vkFlags, ToStringFlags toStringFlags, uint32_t tabCount, uint32_t tabSize); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_feature_util.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_feature_util.cpp index 9c1b2582a..7532bbd76 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_feature_util.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_feature_util.cpp @@ -27,14 +27,14 @@ ** */ -#include "decode/vulkan_feature_util.h" +#include "graphics/vulkan_feature_util.h" #include "util/logging.h" #include "format/platform_types.h" GFXRECON_BEGIN_NAMESPACE(gfxrecon) -GFXRECON_BEGIN_NAMESPACE(decode) +GFXRECON_BEGIN_NAMESPACE(graphics) GFXRECON_BEGIN_NAMESPACE(feature_util) void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, @@ -68,6 +68,21 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: physicalDeviceFeatures = &reinterpret_cast(next)->features; break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: + { + const VkPhysicalDeviceProtectedMemoryFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceProtectedMemoryFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->protectedMemory == VK_TRUE) && (query.protectedMemory == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature protectedMemory %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->protectedMemory = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: { const VkPhysicalDevice16BitStorageFeatures* currentNext = reinterpret_cast(next); @@ -104,35 +119,6 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: - { - const VkPhysicalDeviceMultiviewFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceMultiviewFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, nullptr }; - physicalDeviceFeatures2.pNext = &query; - GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->multiview == VK_TRUE) && (query.multiview == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature multiview %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->multiview = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - if ((currentNext->multiviewGeometryShader == VK_TRUE) && (query.multiviewGeometryShader == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature multiviewGeometryShader %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->multiviewGeometryShader = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - if ((currentNext->multiviewTessellationShader == VK_TRUE) && (query.multiviewTessellationShader == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature multiviewTessellationShader %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->multiviewTessellationShader = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: { const VkPhysicalDeviceVariablePointersFeatures* currentNext = reinterpret_cast(next); @@ -155,32 +141,46 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: { - const VkPhysicalDeviceProtectedMemoryFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceProtectedMemoryFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, nullptr }; + const VkPhysicalDeviceSamplerYcbcrConversionFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceSamplerYcbcrConversionFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, nullptr }; physicalDeviceFeatures2.pNext = &query; GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->protectedMemory == VK_TRUE) && (query.protectedMemory == VK_FALSE)) + if ((currentNext->samplerYcbcrConversion == VK_TRUE) && (query.samplerYcbcrConversion == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature protectedMemory %s", warn_message); + GFXRECON_LOG_WARNING("Feature samplerYcbcrConversion %s", warn_message); found_unsupported = true; - const_cast(currentNext)->protectedMemory = + const_cast(currentNext)->samplerYcbcrConversion = remove_unsupported ? VK_FALSE : VK_TRUE; } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: { - const VkPhysicalDeviceSamplerYcbcrConversionFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceSamplerYcbcrConversionFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, nullptr }; + const VkPhysicalDeviceMultiviewFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceMultiviewFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, nullptr }; physicalDeviceFeatures2.pNext = &query; GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->samplerYcbcrConversion == VK_TRUE) && (query.samplerYcbcrConversion == VK_FALSE)) + if ((currentNext->multiview == VK_TRUE) && (query.multiview == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature samplerYcbcrConversion %s", warn_message); + GFXRECON_LOG_WARNING("Feature multiview %s", warn_message); found_unsupported = true; - const_cast(currentNext)->samplerYcbcrConversion = + const_cast(currentNext)->multiview = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->multiviewGeometryShader == VK_TRUE) && (query.multiviewGeometryShader == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature multiviewGeometryShader %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->multiviewGeometryShader = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->multiviewTessellationShader == VK_TRUE) && (query.multiviewTessellationShader == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature multiviewTessellationShader %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->multiviewTessellationShader = remove_unsupported ? VK_FALSE : VK_TRUE; } break; @@ -629,6 +629,94 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: + { + const VkPhysicalDeviceVulkanMemoryModelFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceVulkanMemoryModelFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->vulkanMemoryModel == VK_TRUE) && (query.vulkanMemoryModel == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature vulkanMemoryModel %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->vulkanMemoryModel = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->vulkanMemoryModelDeviceScope == VK_TRUE) && (query.vulkanMemoryModelDeviceScope == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature vulkanMemoryModelDeviceScope %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->vulkanMemoryModelDeviceScope = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->vulkanMemoryModelAvailabilityVisibilityChains == VK_TRUE) && (query.vulkanMemoryModelAvailabilityVisibilityChains == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature vulkanMemoryModelAvailabilityVisibilityChains %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->vulkanMemoryModelAvailabilityVisibilityChains = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: + { + const VkPhysicalDeviceHostQueryResetFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceHostQueryResetFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->hostQueryReset == VK_TRUE) && (query.hostQueryReset == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature hostQueryReset %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->hostQueryReset = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: + { + const VkPhysicalDeviceTimelineSemaphoreFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceTimelineSemaphoreFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->timelineSemaphore == VK_TRUE) && (query.timelineSemaphore == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature timelineSemaphore %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->timelineSemaphore = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: + { + const VkPhysicalDeviceBufferDeviceAddressFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceBufferDeviceAddressFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->bufferDeviceAddress == VK_TRUE) && (query.bufferDeviceAddress == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature bufferDeviceAddress %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->bufferDeviceAddress = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->bufferDeviceAddressCaptureReplay == VK_TRUE) && (query.bufferDeviceAddressCaptureReplay == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature bufferDeviceAddressCaptureReplay %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->bufferDeviceAddressCaptureReplay = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->bufferDeviceAddressMultiDevice == VK_TRUE) && (query.bufferDeviceAddressMultiDevice == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature bufferDeviceAddressMultiDevice %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->bufferDeviceAddressMultiDevice = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: { const VkPhysicalDevice8BitStorageFeatures* currentNext = reinterpret_cast(next); @@ -865,50 +953,6 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: - { - const VkPhysicalDeviceVulkanMemoryModelFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceVulkanMemoryModelFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, nullptr }; - physicalDeviceFeatures2.pNext = &query; - GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->vulkanMemoryModel == VK_TRUE) && (query.vulkanMemoryModel == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature vulkanMemoryModel %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->vulkanMemoryModel = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - if ((currentNext->vulkanMemoryModelDeviceScope == VK_TRUE) && (query.vulkanMemoryModelDeviceScope == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature vulkanMemoryModelDeviceScope %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->vulkanMemoryModelDeviceScope = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - if ((currentNext->vulkanMemoryModelAvailabilityVisibilityChains == VK_TRUE) && (query.vulkanMemoryModelAvailabilityVisibilityChains == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature vulkanMemoryModelAvailabilityVisibilityChains %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->vulkanMemoryModelAvailabilityVisibilityChains = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: - { - const VkPhysicalDeviceImagelessFramebufferFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceImagelessFramebufferFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, nullptr }; - physicalDeviceFeatures2.pNext = &query; - GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->imagelessFramebuffer == VK_TRUE) && (query.imagelessFramebuffer == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature imagelessFramebuffer %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->imagelessFramebuffer = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES: { const VkPhysicalDeviceUniformBufferStandardLayoutFeatures* currentNext = reinterpret_cast(next); @@ -939,6 +983,21 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: + { + const VkPhysicalDeviceImagelessFramebufferFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceImagelessFramebufferFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->imagelessFramebuffer == VK_TRUE) && (query.imagelessFramebuffer == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature imagelessFramebuffer %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->imagelessFramebuffer = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: { const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* currentNext = reinterpret_cast(next); @@ -954,83 +1013,24 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: { - const VkPhysicalDeviceHostQueryResetFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceHostQueryResetFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, nullptr }; + const VkPhysicalDeviceVulkan13Features* currentNext = reinterpret_cast(next); + VkPhysicalDeviceVulkan13Features query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, nullptr }; physicalDeviceFeatures2.pNext = &query; GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->hostQueryReset == VK_TRUE) && (query.hostQueryReset == VK_FALSE)) + if ((currentNext->robustImageAccess == VK_TRUE) && (query.robustImageAccess == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature hostQueryReset %s", warn_message); + GFXRECON_LOG_WARNING("Feature robustImageAccess %s", warn_message); found_unsupported = true; - const_cast(currentNext)->hostQueryReset = + const_cast(currentNext)->robustImageAccess = remove_unsupported ? VK_FALSE : VK_TRUE; } - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: - { - const VkPhysicalDeviceTimelineSemaphoreFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceTimelineSemaphoreFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, nullptr }; - physicalDeviceFeatures2.pNext = &query; - GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->timelineSemaphore == VK_TRUE) && (query.timelineSemaphore == VK_FALSE)) + if ((currentNext->inlineUniformBlock == VK_TRUE) && (query.inlineUniformBlock == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature timelineSemaphore %s", warn_message); + GFXRECON_LOG_WARNING("Feature inlineUniformBlock %s", warn_message); found_unsupported = true; - const_cast(currentNext)->timelineSemaphore = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: - { - const VkPhysicalDeviceBufferDeviceAddressFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceBufferDeviceAddressFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, nullptr }; - physicalDeviceFeatures2.pNext = &query; - GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->bufferDeviceAddress == VK_TRUE) && (query.bufferDeviceAddress == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature bufferDeviceAddress %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->bufferDeviceAddress = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - if ((currentNext->bufferDeviceAddressCaptureReplay == VK_TRUE) && (query.bufferDeviceAddressCaptureReplay == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature bufferDeviceAddressCaptureReplay %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->bufferDeviceAddressCaptureReplay = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - if ((currentNext->bufferDeviceAddressMultiDevice == VK_TRUE) && (query.bufferDeviceAddressMultiDevice == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature bufferDeviceAddressMultiDevice %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->bufferDeviceAddressMultiDevice = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: - { - const VkPhysicalDeviceVulkan13Features* currentNext = reinterpret_cast(next); - VkPhysicalDeviceVulkan13Features query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, nullptr }; - physicalDeviceFeatures2.pNext = &query; - GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->robustImageAccess == VK_TRUE) && (query.robustImageAccess == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature robustImageAccess %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->robustImageAccess = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - if ((currentNext->inlineUniformBlock == VK_TRUE) && (query.inlineUniformBlock == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature inlineUniformBlock %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->inlineUniformBlock = + const_cast(currentNext)->inlineUniformBlock = remove_unsupported ? VK_FALSE : VK_TRUE; } if ((currentNext->descriptorBindingInlineUniformBlockUpdateAfterBind == VK_TRUE) && (query.descriptorBindingInlineUniformBlockUpdateAfterBind == VK_FALSE)) @@ -1126,77 +1126,107 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: { - const VkPhysicalDeviceShaderTerminateInvocationFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceShaderTerminateInvocationFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES, nullptr }; + const VkPhysicalDevicePrivateDataFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDevicePrivateDataFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, nullptr }; physicalDeviceFeatures2.pNext = &query; GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->shaderTerminateInvocation == VK_TRUE) && (query.shaderTerminateInvocation == VK_FALSE)) + if ((currentNext->privateData == VK_TRUE) && (query.privateData == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature shaderTerminateInvocation %s", warn_message); + GFXRECON_LOG_WARNING("Feature privateData %s", warn_message); found_unsupported = true; - const_cast(currentNext)->shaderTerminateInvocation = + const_cast(currentNext)->privateData = remove_unsupported ? VK_FALSE : VK_TRUE; } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES: { - const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES, nullptr }; + const VkPhysicalDeviceSynchronization2Features* currentNext = reinterpret_cast(next); + VkPhysicalDeviceSynchronization2Features query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES, nullptr }; physicalDeviceFeatures2.pNext = &query; GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->shaderDemoteToHelperInvocation == VK_TRUE) && (query.shaderDemoteToHelperInvocation == VK_FALSE)) + if ((currentNext->synchronization2 == VK_TRUE) && (query.synchronization2 == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature shaderDemoteToHelperInvocation %s", warn_message); + GFXRECON_LOG_WARNING("Feature synchronization2 %s", warn_message); found_unsupported = true; - const_cast(currentNext)->shaderDemoteToHelperInvocation = + const_cast(currentNext)->synchronization2 = remove_unsupported ? VK_FALSE : VK_TRUE; } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: { - const VkPhysicalDevicePrivateDataFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDevicePrivateDataFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, nullptr }; + const VkPhysicalDeviceTextureCompressionASTCHDRFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceTextureCompressionASTCHDRFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES, nullptr }; physicalDeviceFeatures2.pNext = &query; GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->privateData == VK_TRUE) && (query.privateData == VK_FALSE)) + if ((currentNext->textureCompressionASTC_HDR == VK_TRUE) && (query.textureCompressionASTC_HDR == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature privateData %s", warn_message); + GFXRECON_LOG_WARNING("Feature textureCompressionASTC_HDR %s", warn_message); found_unsupported = true; - const_cast(currentNext)->privateData = + const_cast(currentNext)->textureCompressionASTC_HDR = remove_unsupported ? VK_FALSE : VK_TRUE; } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: { - const VkPhysicalDevicePipelineCreationCacheControlFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDevicePipelineCreationCacheControlFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES, nullptr }; + const VkPhysicalDeviceMaintenance4Features* currentNext = reinterpret_cast(next); + VkPhysicalDeviceMaintenance4Features query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES, nullptr }; physicalDeviceFeatures2.pNext = &query; GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->pipelineCreationCacheControl == VK_TRUE) && (query.pipelineCreationCacheControl == VK_FALSE)) + if ((currentNext->maintenance4 == VK_TRUE) && (query.maintenance4 == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature pipelineCreationCacheControl %s", warn_message); + GFXRECON_LOG_WARNING("Feature maintenance4 %s", warn_message); found_unsupported = true; - const_cast(currentNext)->pipelineCreationCacheControl = + const_cast(currentNext)->maintenance4 = remove_unsupported ? VK_FALSE : VK_TRUE; } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: { - const VkPhysicalDeviceSynchronization2Features* currentNext = reinterpret_cast(next); - VkPhysicalDeviceSynchronization2Features query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES, nullptr }; + const VkPhysicalDeviceShaderTerminateInvocationFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceShaderTerminateInvocationFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES, nullptr }; physicalDeviceFeatures2.pNext = &query; GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->synchronization2 == VK_TRUE) && (query.synchronization2 == VK_FALSE)) + if ((currentNext->shaderTerminateInvocation == VK_TRUE) && (query.shaderTerminateInvocation == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature synchronization2 %s", warn_message); + GFXRECON_LOG_WARNING("Feature shaderTerminateInvocation %s", warn_message); found_unsupported = true; - const_cast(currentNext)->synchronization2 = + const_cast(currentNext)->shaderTerminateInvocation = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: + { + const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->shaderDemoteToHelperInvocation == VK_TRUE) && (query.shaderDemoteToHelperInvocation == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature shaderDemoteToHelperInvocation %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->shaderDemoteToHelperInvocation = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: + { + const VkPhysicalDevicePipelineCreationCacheControlFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDevicePipelineCreationCacheControlFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->pipelineCreationCacheControl == VK_TRUE) && (query.pipelineCreationCacheControl == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature pipelineCreationCacheControl %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->pipelineCreationCacheControl = remove_unsupported ? VK_FALSE : VK_TRUE; } break; @@ -1275,36 +1305,6 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: - { - const VkPhysicalDeviceTextureCompressionASTCHDRFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceTextureCompressionASTCHDRFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES, nullptr }; - physicalDeviceFeatures2.pNext = &query; - GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->textureCompressionASTC_HDR == VK_TRUE) && (query.textureCompressionASTC_HDR == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature textureCompressionASTC_HDR %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->textureCompressionASTC_HDR = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES: - { - const VkPhysicalDeviceDynamicRenderingFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceDynamicRenderingFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES, nullptr }; - physicalDeviceFeatures2.pNext = &query; - GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->dynamicRendering == VK_TRUE) && (query.dynamicRendering == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature dynamicRendering %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->dynamicRendering = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: { const VkPhysicalDeviceShaderIntegerDotProductFeatures* currentNext = reinterpret_cast(next); @@ -1320,17 +1320,17 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES: { - const VkPhysicalDeviceMaintenance4Features* currentNext = reinterpret_cast(next); - VkPhysicalDeviceMaintenance4Features query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES, nullptr }; + const VkPhysicalDeviceDynamicRenderingFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceDynamicRenderingFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES, nullptr }; physicalDeviceFeatures2.pNext = &query; GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->maintenance4 == VK_TRUE) && (query.maintenance4 == VK_FALSE)) + if ((currentNext->dynamicRendering == VK_TRUE) && (query.dynamicRendering == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature maintenance4 %s", warn_message); + GFXRECON_LOG_WARNING("Feature dynamicRendering %s", warn_message); found_unsupported = true; - const_cast(currentNext)->maintenance4 = + const_cast(currentNext)->dynamicRendering = remove_unsupported ? VK_FALSE : VK_TRUE; } break; @@ -1505,6 +1505,66 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES: + { + const VkPhysicalDeviceIndexTypeUint8Features* currentNext = reinterpret_cast(next); + VkPhysicalDeviceIndexTypeUint8Features query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->indexTypeUint8 == VK_TRUE) && (query.indexTypeUint8 == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature indexTypeUint8 %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->indexTypeUint8 = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES: + { + const VkPhysicalDeviceMaintenance5Features* currentNext = reinterpret_cast(next); + VkPhysicalDeviceMaintenance5Features query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->maintenance5 == VK_TRUE) && (query.maintenance5 == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature maintenance5 %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->maintenance5 = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES: + { + const VkPhysicalDeviceMaintenance6Features* currentNext = reinterpret_cast(next); + VkPhysicalDeviceMaintenance6Features query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->maintenance6 == VK_TRUE) && (query.maintenance6 == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature maintenance6 %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->maintenance6 = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES: + { + const VkPhysicalDeviceHostImageCopyFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceHostImageCopyFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->hostImageCopy == VK_TRUE) && (query.hostImageCopy == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature hostImageCopy %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->hostImageCopy = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES: { const VkPhysicalDeviceShaderSubgroupRotateFeatures* currentNext = reinterpret_cast(next); @@ -1557,6 +1617,36 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES: + { + const VkPhysicalDevicePipelineProtectedAccessFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDevicePipelineProtectedAccessFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->pipelineProtectedAccess == VK_TRUE) && (query.pipelineProtectedAccess == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature pipelineProtectedAccess %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->pipelineProtectedAccess = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES: + { + const VkPhysicalDevicePipelineRobustnessFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDevicePipelineRobustnessFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->pipelineRobustness == VK_TRUE) && (query.pipelineRobustness == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature pipelineRobustness %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->pipelineRobustness = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES: { const VkPhysicalDeviceLineRasterizationFeatures* currentNext = reinterpret_cast(next); @@ -1600,136 +1690,46 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } if ((currentNext->stippledSmoothLines == VK_TRUE) && (query.stippledSmoothLines == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature stippledSmoothLines %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->stippledSmoothLines = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: - { - const VkPhysicalDeviceVertexAttributeDivisorFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceVertexAttributeDivisorFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES, nullptr }; - physicalDeviceFeatures2.pNext = &query; - GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->vertexAttributeInstanceRateDivisor == VK_TRUE) && (query.vertexAttributeInstanceRateDivisor == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature vertexAttributeInstanceRateDivisor %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->vertexAttributeInstanceRateDivisor = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - if ((currentNext->vertexAttributeInstanceRateZeroDivisor == VK_TRUE) && (query.vertexAttributeInstanceRateZeroDivisor == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature vertexAttributeInstanceRateZeroDivisor %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->vertexAttributeInstanceRateZeroDivisor = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES: - { - const VkPhysicalDeviceIndexTypeUint8Features* currentNext = reinterpret_cast(next); - VkPhysicalDeviceIndexTypeUint8Features query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES, nullptr }; - physicalDeviceFeatures2.pNext = &query; - GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->indexTypeUint8 == VK_TRUE) && (query.indexTypeUint8 == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature indexTypeUint8 %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->indexTypeUint8 = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES: - { - const VkPhysicalDeviceMaintenance5Features* currentNext = reinterpret_cast(next); - VkPhysicalDeviceMaintenance5Features query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES, nullptr }; - physicalDeviceFeatures2.pNext = &query; - GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->maintenance5 == VK_TRUE) && (query.maintenance5 == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature maintenance5 %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->maintenance5 = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES: - { - const VkPhysicalDeviceDynamicRenderingLocalReadFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceDynamicRenderingLocalReadFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES, nullptr }; - physicalDeviceFeatures2.pNext = &query; - GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->dynamicRenderingLocalRead == VK_TRUE) && (query.dynamicRenderingLocalRead == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature dynamicRenderingLocalRead %s", warn_message); - found_unsupported = true; - const_cast(currentNext)->dynamicRenderingLocalRead = - remove_unsupported ? VK_FALSE : VK_TRUE; - } - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES: - { - const VkPhysicalDeviceMaintenance6Features* currentNext = reinterpret_cast(next); - VkPhysicalDeviceMaintenance6Features query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES, nullptr }; - physicalDeviceFeatures2.pNext = &query; - GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->maintenance6 == VK_TRUE) && (query.maintenance6 == VK_FALSE)) - { - GFXRECON_LOG_WARNING("Feature maintenance6 %s", warn_message); + GFXRECON_LOG_WARNING("Feature stippledSmoothLines %s", warn_message); found_unsupported = true; - const_cast(currentNext)->maintenance6 = + const_cast(currentNext)->stippledSmoothLines = remove_unsupported ? VK_FALSE : VK_TRUE; } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: { - const VkPhysicalDevicePipelineProtectedAccessFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDevicePipelineProtectedAccessFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES, nullptr }; + const VkPhysicalDeviceVertexAttributeDivisorFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceVertexAttributeDivisorFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES, nullptr }; physicalDeviceFeatures2.pNext = &query; GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->pipelineProtectedAccess == VK_TRUE) && (query.pipelineProtectedAccess == VK_FALSE)) + if ((currentNext->vertexAttributeInstanceRateDivisor == VK_TRUE) && (query.vertexAttributeInstanceRateDivisor == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature pipelineProtectedAccess %s", warn_message); + GFXRECON_LOG_WARNING("Feature vertexAttributeInstanceRateDivisor %s", warn_message); found_unsupported = true; - const_cast(currentNext)->pipelineProtectedAccess = + const_cast(currentNext)->vertexAttributeInstanceRateDivisor = remove_unsupported ? VK_FALSE : VK_TRUE; } - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES: - { - const VkPhysicalDevicePipelineRobustnessFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDevicePipelineRobustnessFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES, nullptr }; - physicalDeviceFeatures2.pNext = &query; - GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->pipelineRobustness == VK_TRUE) && (query.pipelineRobustness == VK_FALSE)) + if ((currentNext->vertexAttributeInstanceRateZeroDivisor == VK_TRUE) && (query.vertexAttributeInstanceRateZeroDivisor == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature pipelineRobustness %s", warn_message); + GFXRECON_LOG_WARNING("Feature vertexAttributeInstanceRateZeroDivisor %s", warn_message); found_unsupported = true; - const_cast(currentNext)->pipelineRobustness = + const_cast(currentNext)->vertexAttributeInstanceRateZeroDivisor = remove_unsupported ? VK_FALSE : VK_TRUE; } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES: { - const VkPhysicalDeviceHostImageCopyFeatures* currentNext = reinterpret_cast(next); - VkPhysicalDeviceHostImageCopyFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES, nullptr }; + const VkPhysicalDeviceDynamicRenderingLocalReadFeatures* currentNext = reinterpret_cast(next); + VkPhysicalDeviceDynamicRenderingLocalReadFeatures query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES, nullptr }; physicalDeviceFeatures2.pNext = &query; GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->hostImageCopy == VK_TRUE) && (query.hostImageCopy == VK_FALSE)) + if ((currentNext->dynamicRenderingLocalRead == VK_TRUE) && (query.dynamicRenderingLocalRead == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature hostImageCopy %s", warn_message); + GFXRECON_LOG_WARNING("Feature dynamicRenderingLocalRead %s", warn_message); found_unsupported = true; - const_cast(currentNext)->hostImageCopy = + const_cast(currentNext)->dynamicRenderingLocalRead = remove_unsupported ? VK_FALSE : VK_TRUE; } break; @@ -2097,6 +2097,21 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: + { + const VkPhysicalDeviceShaderUntypedPointersFeaturesKHR* currentNext = reinterpret_cast(next); + VkPhysicalDeviceShaderUntypedPointersFeaturesKHR query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->shaderUntypedPointers == VK_TRUE) && (query.shaderUntypedPointers == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature shaderUntypedPointers %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->shaderUntypedPointers = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: { const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* currentNext = reinterpret_cast(next); @@ -2298,6 +2313,28 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR: + { + const VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR* currentNext = reinterpret_cast(next); + VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->indirectMemoryCopy == VK_TRUE) && (query.indirectMemoryCopy == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature indirectMemoryCopy %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->indirectMemoryCopy = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->indirectMemoryToImageCopy == VK_TRUE) && (query.indirectMemoryToImageCopy == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature indirectMemoryToImageCopy %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->indirectMemoryToImageCopy = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_INTRA_REFRESH_FEATURES_KHR: { const VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* currentNext = reinterpret_cast(next); @@ -2373,32 +2410,46 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR: { - const VkPhysicalDeviceMaintenance9FeaturesKHR* currentNext = reinterpret_cast(next); - VkPhysicalDeviceMaintenance9FeaturesKHR query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR, nullptr }; + const VkPhysicalDeviceShaderFmaFeaturesKHR* currentNext = reinterpret_cast(next); + VkPhysicalDeviceShaderFmaFeaturesKHR query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR, nullptr }; physicalDeviceFeatures2.pNext = &query; GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->maintenance9 == VK_TRUE) && (query.maintenance9 == VK_FALSE)) + if ((currentNext->shaderFmaFloat16 == VK_TRUE) && (query.shaderFmaFloat16 == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature maintenance9 %s", warn_message); + GFXRECON_LOG_WARNING("Feature shaderFmaFloat16 %s", warn_message); found_unsupported = true; - const_cast(currentNext)->maintenance9 = + const_cast(currentNext)->shaderFmaFloat16 = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->shaderFmaFloat32 == VK_TRUE) && (query.shaderFmaFloat32 == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature shaderFmaFloat32 %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->shaderFmaFloat32 = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->shaderFmaFloat64 == VK_TRUE) && (query.shaderFmaFloat64 == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature shaderFmaFloat64 %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->shaderFmaFloat64 = remove_unsupported ? VK_FALSE : VK_TRUE; } break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR: { - const VkPhysicalDeviceVideoMaintenance2FeaturesKHR* currentNext = reinterpret_cast(next); - VkPhysicalDeviceVideoMaintenance2FeaturesKHR query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR, nullptr }; + const VkPhysicalDeviceMaintenance9FeaturesKHR* currentNext = reinterpret_cast(next); + VkPhysicalDeviceMaintenance9FeaturesKHR query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR, nullptr }; physicalDeviceFeatures2.pNext = &query; GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); - if ((currentNext->videoMaintenance2 == VK_TRUE) && (query.videoMaintenance2 == VK_FALSE)) + if ((currentNext->maintenance9 == VK_TRUE) && (query.maintenance9 == VK_FALSE)) { - GFXRECON_LOG_WARNING("Feature videoMaintenance2 %s", warn_message); + GFXRECON_LOG_WARNING("Feature maintenance9 %s", warn_message); found_unsupported = true; - const_cast(currentNext)->videoMaintenance2 = + const_cast(currentNext)->maintenance9 = remove_unsupported ? VK_FALSE : VK_TRUE; } break; @@ -2462,6 +2513,21 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR: + { + const VkPhysicalDeviceMaintenance10FeaturesKHR* currentNext = reinterpret_cast(next); + VkPhysicalDeviceMaintenance10FeaturesKHR query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->maintenance10 == VK_TRUE) && (query.maintenance10 == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature maintenance10 %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->maintenance10 = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT: { const VkPhysicalDeviceTransformFeedbackFeaturesEXT* currentNext = reinterpret_cast(next); @@ -2685,6 +2751,35 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT: + { + const VkPhysicalDevicePresentTimingFeaturesEXT* currentNext = reinterpret_cast(next); + VkPhysicalDevicePresentTimingFeaturesEXT query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->presentTiming == VK_TRUE) && (query.presentTiming == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature presentTiming %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->presentTiming = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->presentAtAbsoluteTime == VK_TRUE) && (query.presentAtAbsoluteTime == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature presentAtAbsoluteTime %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->presentAtAbsoluteTime = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->presentAtRelativeTime == VK_TRUE) && (query.presentAtRelativeTime == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature presentAtRelativeTime %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->presentAtRelativeTime = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: { const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* currentNext = reinterpret_cast(next); @@ -3274,6 +3369,21 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT: + { + const VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT* currentNext = reinterpret_cast(next); + VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->textureCompressionASTC_3D == VK_TRUE) && (query.textureCompressionASTC_3D == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature textureCompressionASTC_3D %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->textureCompressionASTC_3D = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV: { const VkPhysicalDevicePresentBarrierFeaturesNV* currentNext = reinterpret_cast(next); @@ -3410,6 +3520,42 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT: + { + const VkPhysicalDeviceDescriptorBufferFeaturesEXT* currentNext = reinterpret_cast(next); + VkPhysicalDeviceDescriptorBufferFeaturesEXT query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->descriptorBuffer == VK_TRUE) && (query.descriptorBuffer == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature descriptorBuffer %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->descriptorBuffer = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->descriptorBufferCaptureReplay == VK_TRUE) && (query.descriptorBufferCaptureReplay == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature descriptorBufferCaptureReplay %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->descriptorBufferCaptureReplay = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->descriptorBufferImageLayoutIgnored == VK_TRUE) && (query.descriptorBufferImageLayoutIgnored == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature descriptorBufferImageLayoutIgnored %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->descriptorBufferImageLayoutIgnored = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->descriptorBufferPushDescriptors == VK_TRUE) && (query.descriptorBufferPushDescriptors == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature descriptorBufferPushDescriptors %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->descriptorBufferPushDescriptors = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT: { const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* currentNext = reinterpret_cast(next); @@ -3854,6 +4000,21 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE: + { + const VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE* currentNext = reinterpret_cast(next); + VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->videoEncodeRgbConversion == VK_TRUE) && (query.videoEncodeRgbConversion == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature videoEncodeRgbConversion %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->videoEncodeRgbConversion = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT: { const VkPhysicalDeviceImageViewMinLodFeaturesEXT* currentNext = reinterpret_cast(next); @@ -4754,6 +4915,49 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM: + { + const VkPhysicalDeviceDataGraphFeaturesARM* currentNext = reinterpret_cast(next); + VkPhysicalDeviceDataGraphFeaturesARM query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->dataGraph == VK_TRUE) && (query.dataGraph == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature dataGraph %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->dataGraph = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->dataGraphUpdateAfterBind == VK_TRUE) && (query.dataGraphUpdateAfterBind == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature dataGraphUpdateAfterBind %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->dataGraphUpdateAfterBind = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->dataGraphSpecializationConstants == VK_TRUE) && (query.dataGraphSpecializationConstants == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature dataGraphSpecializationConstants %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->dataGraphSpecializationConstants = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->dataGraphDescriptorBuffer == VK_TRUE) && (query.dataGraphDescriptorBuffer == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature dataGraphDescriptorBuffer %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->dataGraphDescriptorBuffer = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + if ((currentNext->dataGraphShaderModule == VK_TRUE) && (query.dataGraphShaderModule == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature dataGraphShaderModule %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->dataGraphShaderModule = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM: { const VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM* currentNext = reinterpret_cast(next); @@ -4896,6 +5100,21 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT: + { + const VkPhysicalDeviceMemoryDecompressionFeaturesEXT* currentNext = reinterpret_cast(next); + VkPhysicalDeviceMemoryDecompressionFeaturesEXT query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->memoryDecompression == VK_TRUE) && (query.memoryDecompression == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature memoryDecompression %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->memoryDecompression = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV: { const VkPhysicalDeviceRawAccessChainsFeaturesNV* currentNext = reinterpret_cast(next); @@ -5045,6 +5264,21 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT: + { + const VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT* currentNext = reinterpret_cast(next); + VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->rayTracingInvocationReorder == VK_TRUE) && (query.rayTracingInvocationReorder == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature rayTracingInvocationReorder %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->rayTracingInvocationReorder = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT: { const VkPhysicalDeviceDepthClampControlFeaturesEXT* currentNext = reinterpret_cast(next); @@ -5147,6 +5381,21 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM: + { + const VkPhysicalDevicePerformanceCountersByRegionFeaturesARM* currentNext = reinterpret_cast(next); + VkPhysicalDevicePerformanceCountersByRegionFeaturesARM query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->performanceCountersByRegion == VK_TRUE) && (query.performanceCountersByRegion == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature performanceCountersByRegion %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->performanceCountersByRegion = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT: { const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT* currentNext = reinterpret_cast(next); @@ -5222,6 +5471,66 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT: + { + const VkPhysicalDeviceShader64BitIndexingFeaturesEXT* currentNext = reinterpret_cast(next); + VkPhysicalDeviceShader64BitIndexingFeaturesEXT query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->shader64BitIndexing == VK_TRUE) && (query.shader64BitIndexing == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature shader64BitIndexing %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->shader64BitIndexing = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT: + { + const VkPhysicalDeviceCustomResolveFeaturesEXT* currentNext = reinterpret_cast(next); + VkPhysicalDeviceCustomResolveFeaturesEXT query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->customResolve == VK_TRUE) && (query.customResolve == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature customResolve %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->customResolve = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM: + { + const VkPhysicalDeviceDataGraphModelFeaturesQCOM* currentNext = reinterpret_cast(next); + VkPhysicalDeviceDataGraphModelFeaturesQCOM query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->dataGraphModel == VK_TRUE) && (query.dataGraphModel == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature dataGraphModel %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->dataGraphModel = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT: + { + const VkPhysicalDeviceShaderLongVectorFeaturesEXT* currentNext = reinterpret_cast(next); + VkPhysicalDeviceShaderLongVectorFeaturesEXT query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->longVector == VK_TRUE) && (query.longVector == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature longVector %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->longVector = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC: { const VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC* currentNext = reinterpret_cast(next); @@ -5237,6 +5546,36 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: + { + const VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT* currentNext = reinterpret_cast(next); + VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->shaderUniformBufferUnsizedArray == VK_TRUE) && (query.shaderUniformBufferUnsizedArray == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature shaderUniformBufferUnsizedArray %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->shaderUniformBufferUnsizedArray = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV: + { + const VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV* currentNext = reinterpret_cast(next); + VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV query = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV, nullptr }; + physicalDeviceFeatures2.pNext = &query; + GetPhysicalDeviceFeatures2(physicalDevice, &physicalDeviceFeatures2); + if ((currentNext->computeOccupancyPriority == VK_TRUE) && (query.computeOccupancyPriority == VK_FALSE)) + { + GFXRECON_LOG_WARNING("Feature computeOccupancyPriority %s", warn_message); + found_unsupported = true; + const_cast(currentNext)->computeOccupancyPriority = + remove_unsupported ? VK_FALSE : VK_TRUE; + } + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR: { const VkPhysicalDeviceAccelerationStructureFeaturesKHR* currentNext = reinterpret_cast(next); @@ -5786,5 +6125,5 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, } GFXRECON_END_NAMESPACE(feature_util) -GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(graphics) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_json_consumer.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_json_consumer.cpp index 6e75a4d41..40fa5f703 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_json_consumer.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_json_consumer.cpp @@ -650,85 +650,6 @@ void VulkanExportJsonConsumer::Process_vkDestroySemaphore( WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCreateEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pEvent) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateEvent"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); - HandleToJson(args["pEvent"], pEvent, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkDestroyEvent( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId event, - StructPointerDecoder* pAllocator) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyEvent"); - const JsonOptions& json_options = GetJsonOptions(); - auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - HandleToJson(args["event"], event, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkGetEventStatus( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetEventStatus"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - HandleToJson(args["event"], event, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkSetEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkSetEvent"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - HandleToJson(args["event"], event, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkResetEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkResetEvent"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - HandleToJson(args["event"], event, json_options); - WriteBlockEnd(); -} - void VulkanExportJsonConsumer::Process_vkCreateQueryPool( const ApiCallInfo& call_info, VkResult returnValue, @@ -824,40 +745,6 @@ void VulkanExportJsonConsumer::Process_vkDestroyBuffer( WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCreateBufferView( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pView) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateBufferView"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); - HandleToJson(args["pView"], pView, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkDestroyBufferView( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId bufferView, - StructPointerDecoder* pAllocator) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyBufferView"); - const JsonOptions& json_options = GetJsonOptions(); - auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - HandleToJson(args["bufferView"], bufferView, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); - WriteBlockEnd(); -} - void VulkanExportJsonConsumer::Process_vkCreateImage( const ApiCallInfo& call_info, VkResult returnValue, @@ -943,694 +830,825 @@ void VulkanExportJsonConsumer::Process_vkDestroyImageView( WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkDestroyShaderModule( +void VulkanExportJsonConsumer::Process_vkCreateCommandPool( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId shaderModule, - StructPointerDecoder* pAllocator) + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pCommandPool) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyShaderModule"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateCommandPool"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - HandleToJson(args["shaderModule"], shaderModule, json_options); + FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["pCommandPool"], pCommandPool, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkDestroyPipelineCache( +void VulkanExportJsonConsumer::Process_vkDestroyCommandPool( const ApiCallInfo& call_info, format::HandleId device, - format::HandleId pipelineCache, + format::HandleId commandPool, StructPointerDecoder* pAllocator) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyPipelineCache"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyCommandPool"); const JsonOptions& json_options = GetJsonOptions(); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - HandleToJson(args["pipelineCache"], pipelineCache, json_options); + HandleToJson(args["commandPool"], commandPool, json_options); FieldToJson(args["pAllocator"], pAllocator, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkMergePipelineCaches( +void VulkanExportJsonConsumer::Process_vkResetCommandPool( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - format::HandleId dstCache, - uint32_t srcCacheCount, - HandlePointerDecoder* pSrcCaches) + format::HandleId commandPool, + VkCommandPoolResetFlags flags) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkMergePipelineCaches"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkResetCommandPool"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - HandleToJson(args["dstCache"], dstCache, json_options); - FieldToJson(args["srcCacheCount"], srcCacheCount, json_options); - HandleToJson(args["pSrcCaches"], pSrcCaches, json_options); + HandleToJson(args["commandPool"], commandPool, json_options); + FieldToJson(VkCommandPoolResetFlags_t(), args["flags"], flags, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCreateGraphicsPipelines( +void VulkanExportJsonConsumer::Process_vkAllocateCommandBuffers( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - format::HandleId pipelineCache, - uint32_t createInfoCount, - StructPointerDecoder* pCreateInfos, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelines) + StructPointerDecoder* pAllocateInfo, + HandlePointerDecoder* pCommandBuffers) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateGraphicsPipelines"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkAllocateCommandBuffers"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - HandleToJson(args["pipelineCache"], pipelineCache, json_options); - FieldToJson(args["createInfoCount"], createInfoCount, json_options); - FieldToJson(args["pCreateInfos"], pCreateInfos, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); - HandleToJson(args["pPipelines"], pPipelines, json_options); + FieldToJson(args["pAllocateInfo"], pAllocateInfo, json_options); + HandleToJson(args["pCommandBuffers"], pCommandBuffers, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCreateComputePipelines( +void VulkanExportJsonConsumer::Process_vkFreeCommandBuffers( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - format::HandleId pipelineCache, - uint32_t createInfoCount, - StructPointerDecoder* pCreateInfos, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelines) + format::HandleId commandPool, + uint32_t commandBufferCount, + HandlePointerDecoder* pCommandBuffers) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateComputePipelines"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkFreeCommandBuffers"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - HandleToJson(args["pipelineCache"], pipelineCache, json_options); - FieldToJson(args["createInfoCount"], createInfoCount, json_options); - FieldToJson(args["pCreateInfos"], pCreateInfos, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); - HandleToJson(args["pPipelines"], pPipelines, json_options); + HandleToJson(args["commandPool"], commandPool, json_options); + FieldToJson(args["commandBufferCount"], commandBufferCount, json_options); + HandleToJson(args["pCommandBuffers"], pCommandBuffers, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkDestroyPipeline( +void VulkanExportJsonConsumer::Process_vkBeginCommandBuffer( const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId pipeline, - StructPointerDecoder* pAllocator) + VkResult returnValue, + format::HandleId commandBuffer, + StructPointerDecoder* pBeginInfo) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyPipeline"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkBeginCommandBuffer"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - HandleToJson(args["pipeline"], pipeline, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pBeginInfo"], pBeginInfo, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCreatePipelineLayout( +void VulkanExportJsonConsumer::Process_vkEndCommandBuffer( const ApiCallInfo& call_info, VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelineLayout) + format::HandleId commandBuffer) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreatePipelineLayout"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkEndCommandBuffer"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); - HandleToJson(args["pPipelineLayout"], pPipelineLayout, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkDestroyPipelineLayout( +void VulkanExportJsonConsumer::Process_vkResetCommandBuffer( const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId pipelineLayout, - StructPointerDecoder* pAllocator) + VkResult returnValue, + format::HandleId commandBuffer, + VkCommandBufferResetFlags flags) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyPipelineLayout"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkResetCommandBuffer"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - HandleToJson(args["pipelineLayout"], pipelineLayout, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(VkCommandBufferResetFlags_t(), args["flags"], flags, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCreateSampler( +void VulkanExportJsonConsumer::Process_vkCmdCopyBuffer( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pSampler) + format::HandleId commandBuffer, + format::HandleId srcBuffer, + format::HandleId dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateSampler"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyBuffer"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); - HandleToJson(args["pSampler"], pSampler, json_options); - WriteBlockEnd(); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["srcBuffer"], srcBuffer, json_options); + HandleToJson(args["dstBuffer"], dstBuffer, json_options); + FieldToJson(args["regionCount"], regionCount, json_options); + FieldToJson(args["pRegions"], pRegions, json_options); + WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkDestroySampler( +void VulkanExportJsonConsumer::Process_vkCmdCopyImage( const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId sampler, - StructPointerDecoder* pAllocator) + format::HandleId commandBuffer, + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroySampler"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyImage"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - HandleToJson(args["sampler"], sampler, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["srcImage"], srcImage, json_options); + FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); + HandleToJson(args["dstImage"], dstImage, json_options); + FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); + FieldToJson(args["regionCount"], regionCount, json_options); + FieldToJson(args["pRegions"], pRegions, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCreateDescriptorSetLayout( +void VulkanExportJsonConsumer::Process_vkCmdCopyBufferToImage( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pSetLayout) + format::HandleId commandBuffer, + format::HandleId srcBuffer, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateDescriptorSetLayout"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyBufferToImage"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); - HandleToJson(args["pSetLayout"], pSetLayout, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["srcBuffer"], srcBuffer, json_options); + HandleToJson(args["dstImage"], dstImage, json_options); + FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); + FieldToJson(args["regionCount"], regionCount, json_options); + FieldToJson(args["pRegions"], pRegions, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkDestroyDescriptorSetLayout( +void VulkanExportJsonConsumer::Process_vkCmdCopyImageToBuffer( const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId descriptorSetLayout, - StructPointerDecoder* pAllocator) + format::HandleId commandBuffer, + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyDescriptorSetLayout"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyImageToBuffer"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - HandleToJson(args["descriptorSetLayout"], descriptorSetLayout, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["srcImage"], srcImage, json_options); + FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); + HandleToJson(args["dstBuffer"], dstBuffer, json_options); + FieldToJson(args["regionCount"], regionCount, json_options); + FieldToJson(args["pRegions"], pRegions, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCreateDescriptorPool( +void VulkanExportJsonConsumer::Process_vkCmdUpdateBuffer( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pDescriptorPool) + format::HandleId commandBuffer, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize dataSize, + PointerDecoder* pData) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateDescriptorPool"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdUpdateBuffer"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); - HandleToJson(args["pDescriptorPool"], pDescriptorPool, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["dstBuffer"], dstBuffer, json_options); + FieldToJson(args["dstOffset"], dstOffset, json_options); + FieldToJson(args["dataSize"], dataSize, json_options); + FieldToJson(args["pData"], pData, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkDestroyDescriptorPool( +void VulkanExportJsonConsumer::Process_vkCmdFillBuffer( const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId descriptorPool, - StructPointerDecoder* pAllocator) + format::HandleId commandBuffer, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize size, + uint32_t data) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyDescriptorPool"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdFillBuffer"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - HandleToJson(args["descriptorPool"], descriptorPool, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["dstBuffer"], dstBuffer, json_options); + FieldToJson(args["dstOffset"], dstOffset, json_options); + FieldToJson(args["size"], size, json_options); + FieldToJson(args["data"], data, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkResetDescriptorPool( +void VulkanExportJsonConsumer::Process_vkCmdPipelineBarrier( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId descriptorPool, - VkDescriptorPoolResetFlags flags) + format::HandleId commandBuffer, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkDependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + StructPointerDecoder* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + StructPointerDecoder* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + StructPointerDecoder* pImageMemoryBarriers) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkResetDescriptorPool"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdPipelineBarrier"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - HandleToJson(args["descriptorPool"], descriptorPool, json_options); - FieldToJson(VkDescriptorPoolResetFlags_t(), args["flags"], flags, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(VkPipelineStageFlags_t(), args["srcStageMask"], srcStageMask, json_options); + FieldToJson(VkPipelineStageFlags_t(), args["dstStageMask"], dstStageMask, json_options); + FieldToJson(VkDependencyFlags_t(), args["dependencyFlags"], dependencyFlags, json_options); + FieldToJson(args["memoryBarrierCount"], memoryBarrierCount, json_options); + FieldToJson(args["pMemoryBarriers"], pMemoryBarriers, json_options); + FieldToJson(args["bufferMemoryBarrierCount"], bufferMemoryBarrierCount, json_options); + FieldToJson(args["pBufferMemoryBarriers"], pBufferMemoryBarriers, json_options); + FieldToJson(args["imageMemoryBarrierCount"], imageMemoryBarrierCount, json_options); + FieldToJson(args["pImageMemoryBarriers"], pImageMemoryBarriers, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkAllocateDescriptorSets( +void VulkanExportJsonConsumer::Process_vkCmdBeginQuery( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pAllocateInfo, - HandlePointerDecoder* pDescriptorSets) + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t query, + VkQueryControlFlags flags) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkAllocateDescriptorSets"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBeginQuery"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["pAllocateInfo"], pAllocateInfo, json_options); - HandleToJson(args["pDescriptorSets"], pDescriptorSets, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["queryPool"], queryPool, json_options); + FieldToJson(args["query"], query, json_options); + FieldToJson(VkQueryControlFlags_t(), args["flags"], flags, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkFreeDescriptorSets( +void VulkanExportJsonConsumer::Process_vkCmdEndQuery( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId descriptorPool, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets) + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t query) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkFreeDescriptorSets"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdEndQuery"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - HandleToJson(args["descriptorPool"], descriptorPool, json_options); - FieldToJson(args["descriptorSetCount"], descriptorSetCount, json_options); - HandleToJson(args["pDescriptorSets"], pDescriptorSets, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["queryPool"], queryPool, json_options); + FieldToJson(args["query"], query, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkUpdateDescriptorSets( +void VulkanExportJsonConsumer::Process_vkCmdResetQueryPool( const ApiCallInfo& call_info, - format::HandleId device, - uint32_t descriptorWriteCount, - StructPointerDecoder* pDescriptorWrites, - uint32_t descriptorCopyCount, - StructPointerDecoder* pDescriptorCopies) + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkUpdateDescriptorSets"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdResetQueryPool"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["descriptorWriteCount"], descriptorWriteCount, json_options); - FieldToJson(args["pDescriptorWrites"], pDescriptorWrites, json_options); - FieldToJson(args["descriptorCopyCount"], descriptorCopyCount, json_options); - FieldToJson(args["pDescriptorCopies"], pDescriptorCopies, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["queryPool"], queryPool, json_options); + FieldToJson(args["firstQuery"], firstQuery, json_options); + FieldToJson(args["queryCount"], queryCount, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCreateFramebuffer( +void VulkanExportJsonConsumer::Process_vkCmdWriteTimestamp( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineStageFlagBits pipelineStage, + format::HandleId queryPool, + uint32_t query) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdWriteTimestamp"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pipelineStage"], pipelineStage, json_options); + HandleToJson(args["queryPool"], queryPool, json_options); + FieldToJson(args["query"], query, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdCopyQueryPoolResults( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyQueryPoolResults"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["queryPool"], queryPool, json_options); + FieldToJson(args["firstQuery"], firstQuery, json_options); + FieldToJson(args["queryCount"], queryCount, json_options); + HandleToJson(args["dstBuffer"], dstBuffer, json_options); + FieldToJson(args["dstOffset"], dstOffset, json_options); + FieldToJson(args["stride"], stride, json_options); + FieldToJson(VkQueryResultFlags_t(), args["flags"], flags, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdExecuteCommands( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t commandBufferCount, + HandlePointerDecoder* pCommandBuffers) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdExecuteCommands"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["commandBufferCount"], commandBufferCount, json_options); + HandleToJson(args["pCommandBuffers"], pCommandBuffers, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCreateEvent( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pCreateInfo, StructPointerDecoder* pAllocator, - HandlePointerDecoder* pFramebuffer) + HandlePointerDecoder* pEvent) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateFramebuffer"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateEvent"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); FieldToJson(args["pAllocator"], pAllocator, json_options); - HandleToJson(args["pFramebuffer"], pFramebuffer, json_options); + HandleToJson(args["pEvent"], pEvent, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkDestroyFramebuffer( +void VulkanExportJsonConsumer::Process_vkDestroyEvent( const ApiCallInfo& call_info, format::HandleId device, - format::HandleId framebuffer, + format::HandleId event, StructPointerDecoder* pAllocator) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyFramebuffer"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyEvent"); const JsonOptions& json_options = GetJsonOptions(); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - HandleToJson(args["framebuffer"], framebuffer, json_options); + HandleToJson(args["event"], event, json_options); FieldToJson(args["pAllocator"], pAllocator, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCreateRenderPass( +void VulkanExportJsonConsumer::Process_vkGetEventStatus( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pRenderPass) + format::HandleId event) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateRenderPass"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetEventStatus"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); - HandleToJson(args["pRenderPass"], pRenderPass, json_options); + HandleToJson(args["event"], event, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkDestroyRenderPass( +void VulkanExportJsonConsumer::Process_vkSetEvent( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId renderPass, - StructPointerDecoder* pAllocator) + format::HandleId event) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyRenderPass"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkSetEvent"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - HandleToJson(args["renderPass"], renderPass, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["event"], event, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkGetRenderAreaGranularity( +void VulkanExportJsonConsumer::Process_vkResetEvent( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId renderPass, - StructPointerDecoder* pGranularity) + format::HandleId event) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetRenderAreaGranularity"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkResetEvent"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - HandleToJson(args["renderPass"], renderPass, json_options); - FieldToJson(args["pGranularity"], pGranularity, json_options); + HandleToJson(args["event"], event, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCreateCommandPool( +void VulkanExportJsonConsumer::Process_vkCreateBufferView( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pCreateInfo, StructPointerDecoder* pAllocator, - HandlePointerDecoder* pCommandPool) + HandlePointerDecoder* pView) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateCommandPool"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateBufferView"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); FieldToJson(args["pAllocator"], pAllocator, json_options); - HandleToJson(args["pCommandPool"], pCommandPool, json_options); + HandleToJson(args["pView"], pView, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkDestroyCommandPool( +void VulkanExportJsonConsumer::Process_vkDestroyBufferView( const ApiCallInfo& call_info, format::HandleId device, - format::HandleId commandPool, + format::HandleId bufferView, StructPointerDecoder* pAllocator) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyCommandPool"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyBufferView"); const JsonOptions& json_options = GetJsonOptions(); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - HandleToJson(args["commandPool"], commandPool, json_options); + HandleToJson(args["bufferView"], bufferView, json_options); FieldToJson(args["pAllocator"], pAllocator, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkResetCommandPool( +void VulkanExportJsonConsumer::Process_vkDestroyShaderModule( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId shaderModule, + StructPointerDecoder* pAllocator) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyShaderModule"); + const JsonOptions& json_options = GetJsonOptions(); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + HandleToJson(args["shaderModule"], shaderModule, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkDestroyPipelineCache( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId pipelineCache, + StructPointerDecoder* pAllocator) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyPipelineCache"); + const JsonOptions& json_options = GetJsonOptions(); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + HandleToJson(args["pipelineCache"], pipelineCache, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkMergePipelineCaches( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - format::HandleId commandPool, - VkCommandPoolResetFlags flags) + format::HandleId dstCache, + uint32_t srcCacheCount, + HandlePointerDecoder* pSrcCaches) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkResetCommandPool"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkMergePipelineCaches"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - HandleToJson(args["commandPool"], commandPool, json_options); - FieldToJson(VkCommandPoolResetFlags_t(), args["flags"], flags, json_options); + HandleToJson(args["dstCache"], dstCache, json_options); + FieldToJson(args["srcCacheCount"], srcCacheCount, json_options); + HandleToJson(args["pSrcCaches"], pSrcCaches, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkAllocateCommandBuffers( +void VulkanExportJsonConsumer::Process_vkCreateComputePipelines( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pAllocateInfo, - HandlePointerDecoder* pCommandBuffers) + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkAllocateCommandBuffers"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateComputePipelines"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - FieldToJson(args["pAllocateInfo"], pAllocateInfo, json_options); - HandleToJson(args["pCommandBuffers"], pCommandBuffers, json_options); + HandleToJson(args["pipelineCache"], pipelineCache, json_options); + FieldToJson(args["createInfoCount"], createInfoCount, json_options); + FieldToJson(args["pCreateInfos"], pCreateInfos, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["pPipelines"], pPipelines, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkFreeCommandBuffers( +void VulkanExportJsonConsumer::Process_vkDestroyPipeline( const ApiCallInfo& call_info, format::HandleId device, - format::HandleId commandPool, - uint32_t commandBufferCount, - HandlePointerDecoder* pCommandBuffers) + format::HandleId pipeline, + StructPointerDecoder* pAllocator) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkFreeCommandBuffers"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyPipeline"); const JsonOptions& json_options = GetJsonOptions(); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - HandleToJson(args["commandPool"], commandPool, json_options); - FieldToJson(args["commandBufferCount"], commandBufferCount, json_options); - HandleToJson(args["pCommandBuffers"], pCommandBuffers, json_options); + HandleToJson(args["pipeline"], pipeline, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkBeginCommandBuffer( +void VulkanExportJsonConsumer::Process_vkCreatePipelineLayout( const ApiCallInfo& call_info, VkResult returnValue, - format::HandleId commandBuffer, - StructPointerDecoder* pBeginInfo) + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelineLayout) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkBeginCommandBuffer"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreatePipelineLayout"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pBeginInfo"], pBeginInfo, json_options); + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["pPipelineLayout"], pPipelineLayout, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkEndCommandBuffer( +void VulkanExportJsonConsumer::Process_vkDestroyPipelineLayout( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId commandBuffer) + format::HandleId device, + format::HandleId pipelineLayout, + StructPointerDecoder* pAllocator) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkEndCommandBuffer"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyPipelineLayout"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["device"], device, json_options); + HandleToJson(args["pipelineLayout"], pipelineLayout, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkResetCommandBuffer( +void VulkanExportJsonConsumer::Process_vkCreateSampler( const ApiCallInfo& call_info, VkResult returnValue, - format::HandleId commandBuffer, - VkCommandBufferResetFlags flags) + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSampler) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkResetCommandBuffer"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateSampler"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(VkCommandBufferResetFlags_t(), args["flags"], flags, json_options); + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["pSampler"], pSampler, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdBindPipeline( +void VulkanExportJsonConsumer::Process_vkDestroySampler( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - format::HandleId pipeline) + format::HandleId device, + format::HandleId sampler, + StructPointerDecoder* pAllocator) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBindPipeline"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroySampler"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pipelineBindPoint"], pipelineBindPoint, json_options); - HandleToJson(args["pipeline"], pipeline, json_options); + HandleToJson(args["device"], device, json_options); + HandleToJson(args["sampler"], sampler, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdSetViewport( +void VulkanExportJsonConsumer::Process_vkCreateDescriptorSetLayout( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t firstViewport, - uint32_t viewportCount, - StructPointerDecoder* pViewports) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSetLayout) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetViewport"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateDescriptorSetLayout"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["firstViewport"], firstViewport, json_options); - FieldToJson(args["viewportCount"], viewportCount, json_options); - FieldToJson(args["pViewports"], pViewports, json_options); + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["pSetLayout"], pSetLayout, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdSetScissor( +void VulkanExportJsonConsumer::Process_vkDestroyDescriptorSetLayout( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t firstScissor, - uint32_t scissorCount, - StructPointerDecoder* pScissors) + format::HandleId device, + format::HandleId descriptorSetLayout, + StructPointerDecoder* pAllocator) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetScissor"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyDescriptorSetLayout"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["firstScissor"], firstScissor, json_options); - FieldToJson(args["scissorCount"], scissorCount, json_options); - FieldToJson(args["pScissors"], pScissors, json_options); + HandleToJson(args["device"], device, json_options); + HandleToJson(args["descriptorSetLayout"], descriptorSetLayout, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdSetLineWidth( +void VulkanExportJsonConsumer::Process_vkCreateDescriptorPool( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - float lineWidth) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pDescriptorPool) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetLineWidth"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateDescriptorPool"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["lineWidth"], lineWidth, json_options); + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["pDescriptorPool"], pDescriptorPool, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdSetDepthBias( +void VulkanExportJsonConsumer::Process_vkDestroyDescriptorPool( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - float depthBiasConstantFactor, - float depthBiasClamp, - float depthBiasSlopeFactor) + format::HandleId device, + format::HandleId descriptorPool, + StructPointerDecoder* pAllocator) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetDepthBias"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyDescriptorPool"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["depthBiasConstantFactor"], depthBiasConstantFactor, json_options); - FieldToJson(args["depthBiasClamp"], depthBiasClamp, json_options); - FieldToJson(args["depthBiasSlopeFactor"], depthBiasSlopeFactor, json_options); + HandleToJson(args["device"], device, json_options); + HandleToJson(args["descriptorPool"], descriptorPool, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdSetBlendConstants( +void VulkanExportJsonConsumer::Process_vkResetDescriptorPool( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - PointerDecoder* blendConstants) + VkResult returnValue, + format::HandleId device, + format::HandleId descriptorPool, + VkDescriptorPoolResetFlags flags) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetBlendConstants"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkResetDescriptorPool"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["blendConstants"], blendConstants, json_options); + HandleToJson(args["device"], device, json_options); + HandleToJson(args["descriptorPool"], descriptorPool, json_options); + FieldToJson(VkDescriptorPoolResetFlags_t(), args["flags"], flags, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdSetDepthBounds( +void VulkanExportJsonConsumer::Process_vkAllocateDescriptorSets( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - float minDepthBounds, - float maxDepthBounds) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pAllocateInfo, + HandlePointerDecoder* pDescriptorSets) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetDepthBounds"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkAllocateDescriptorSets"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["minDepthBounds"], minDepthBounds, json_options); - FieldToJson(args["maxDepthBounds"], maxDepthBounds, json_options); + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pAllocateInfo"], pAllocateInfo, json_options); + HandleToJson(args["pDescriptorSets"], pDescriptorSets, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdSetStencilCompareMask( +void VulkanExportJsonConsumer::Process_vkFreeDescriptorSets( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t compareMask) + VkResult returnValue, + format::HandleId device, + format::HandleId descriptorPool, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetStencilCompareMask"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkFreeDescriptorSets"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(VkStencilFaceFlags_t(), args["faceMask"], faceMask, json_options); - FieldToJson(args["compareMask"], compareMask, json_options); + HandleToJson(args["device"], device, json_options); + HandleToJson(args["descriptorPool"], descriptorPool, json_options); + FieldToJson(args["descriptorSetCount"], descriptorSetCount, json_options); + HandleToJson(args["pDescriptorSets"], pDescriptorSets, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdSetStencilWriteMask( +void VulkanExportJsonConsumer::Process_vkUpdateDescriptorSets( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t writeMask) + format::HandleId device, + uint32_t descriptorWriteCount, + StructPointerDecoder* pDescriptorWrites, + uint32_t descriptorCopyCount, + StructPointerDecoder* pDescriptorCopies) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetStencilWriteMask"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkUpdateDescriptorSets"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(VkStencilFaceFlags_t(), args["faceMask"], faceMask, json_options); - FieldToJson(args["writeMask"], writeMask, json_options); + HandleToJson(args["device"], device, json_options); + FieldToJson(args["descriptorWriteCount"], descriptorWriteCount, json_options); + FieldToJson(args["pDescriptorWrites"], pDescriptorWrites, json_options); + FieldToJson(args["descriptorCopyCount"], descriptorCopyCount, json_options); + FieldToJson(args["pDescriptorCopies"], pDescriptorCopies, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdSetStencilReference( +void VulkanExportJsonConsumer::Process_vkCmdBindPipeline( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t reference) + VkPipelineBindPoint pipelineBindPoint, + format::HandleId pipeline) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetStencilReference"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBindPipeline"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(VkStencilFaceFlags_t(), args["faceMask"], faceMask, json_options); - FieldToJson(args["reference"], reference, json_options); + FieldToJson(args["pipelineBindPoint"], pipelineBindPoint, json_options); + HandleToJson(args["pipeline"], pipeline, json_options); WriteBlockEnd(); } @@ -1660,589 +1678,587 @@ void VulkanExportJsonConsumer::Process_vkCmdBindDescriptorSets( WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdBindIndexBuffer( +void VulkanExportJsonConsumer::Process_vkCmdClearColorImage( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId image, + VkImageLayout imageLayout, + StructPointerDecoder* pColor, + uint32_t rangeCount, + StructPointerDecoder* pRanges) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdClearColorImage"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["image"], image, json_options); + FieldToJson(args["imageLayout"], imageLayout, json_options); + FieldToJson(args["pColor"], pColor, json_options); + FieldToJson(args["rangeCount"], rangeCount, json_options); + FieldToJson(args["pRanges"], pRanges, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdDispatch( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDispatch"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["groupCountX"], groupCountX, json_options); + FieldToJson(args["groupCountY"], groupCountY, json_options); + FieldToJson(args["groupCountZ"], groupCountZ, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdDispatchIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, format::HandleId buffer, - VkDeviceSize offset, - VkIndexType indexType) + VkDeviceSize offset) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBindIndexBuffer"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDispatchIndirect"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); HandleToJson(args["buffer"], buffer, json_options); FieldToJson(args["offset"], offset, json_options); - FieldToJson(args["indexType"], indexType, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdBindVertexBuffers( +void VulkanExportJsonConsumer::Process_vkCmdSetEvent( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - HandlePointerDecoder* pBuffers, - PointerDecoder* pOffsets) + format::HandleId event, + VkPipelineStageFlags stageMask) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBindVertexBuffers"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetEvent"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["firstBinding"], firstBinding, json_options); - FieldToJson(args["bindingCount"], bindingCount, json_options); - HandleToJson(args["pBuffers"], pBuffers, json_options); - FieldToJson(args["pOffsets"], pOffsets, json_options); + HandleToJson(args["event"], event, json_options); + FieldToJson(VkPipelineStageFlags_t(), args["stageMask"], stageMask, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdDraw( +void VulkanExportJsonConsumer::Process_vkCmdResetEvent( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t vertexCount, - uint32_t instanceCount, - uint32_t firstVertex, - uint32_t firstInstance) + format::HandleId event, + VkPipelineStageFlags stageMask) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdResetEvent"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["event"], event, json_options); + FieldToJson(VkPipelineStageFlags_t(), args["stageMask"], stageMask, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdWaitEvents( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t eventCount, + HandlePointerDecoder* pEvents, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + uint32_t memoryBarrierCount, + StructPointerDecoder* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + StructPointerDecoder* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + StructPointerDecoder* pImageMemoryBarriers) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDraw"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdWaitEvents"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["vertexCount"], vertexCount, json_options); - FieldToJson(args["instanceCount"], instanceCount, json_options); - FieldToJson(args["firstVertex"], firstVertex, json_options); - FieldToJson(args["firstInstance"], firstInstance, json_options); + FieldToJson(args["eventCount"], eventCount, json_options); + HandleToJson(args["pEvents"], pEvents, json_options); + FieldToJson(VkPipelineStageFlags_t(), args["srcStageMask"], srcStageMask, json_options); + FieldToJson(VkPipelineStageFlags_t(), args["dstStageMask"], dstStageMask, json_options); + FieldToJson(args["memoryBarrierCount"], memoryBarrierCount, json_options); + FieldToJson(args["pMemoryBarriers"], pMemoryBarriers, json_options); + FieldToJson(args["bufferMemoryBarrierCount"], bufferMemoryBarrierCount, json_options); + FieldToJson(args["pBufferMemoryBarriers"], pBufferMemoryBarriers, json_options); + FieldToJson(args["imageMemoryBarrierCount"], imageMemoryBarrierCount, json_options); + FieldToJson(args["pImageMemoryBarriers"], pImageMemoryBarriers, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdDrawIndexed( +void VulkanExportJsonConsumer::Process_vkCreateGraphicsPipelines( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t indexCount, - uint32_t instanceCount, - uint32_t firstIndex, - int32_t vertexOffset, - uint32_t firstInstance) + VkResult returnValue, + format::HandleId device, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDrawIndexed"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateGraphicsPipelines"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["indexCount"], indexCount, json_options); - FieldToJson(args["instanceCount"], instanceCount, json_options); - FieldToJson(args["firstIndex"], firstIndex, json_options); - FieldToJson(args["vertexOffset"], vertexOffset, json_options); - FieldToJson(args["firstInstance"], firstInstance, json_options); + HandleToJson(args["device"], device, json_options); + HandleToJson(args["pipelineCache"], pipelineCache, json_options); + FieldToJson(args["createInfoCount"], createInfoCount, json_options); + FieldToJson(args["pCreateInfos"], pCreateInfos, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["pPipelines"], pPipelines, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdDrawIndirect( +void VulkanExportJsonConsumer::Process_vkCreateFramebuffer( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pFramebuffer) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDrawIndirect"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateFramebuffer"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["buffer"], buffer, json_options); - FieldToJson(args["offset"], offset, json_options); - FieldToJson(args["drawCount"], drawCount, json_options); - FieldToJson(args["stride"], stride, json_options); + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["pFramebuffer"], pFramebuffer, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdDrawIndexedIndirect( +void VulkanExportJsonConsumer::Process_vkDestroyFramebuffer( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) + format::HandleId device, + format::HandleId framebuffer, + StructPointerDecoder* pAllocator) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDrawIndexedIndirect"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyFramebuffer"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["buffer"], buffer, json_options); - FieldToJson(args["offset"], offset, json_options); - FieldToJson(args["drawCount"], drawCount, json_options); - FieldToJson(args["stride"], stride, json_options); + HandleToJson(args["device"], device, json_options); + HandleToJson(args["framebuffer"], framebuffer, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdDispatch( +void VulkanExportJsonConsumer::Process_vkCreateRenderPass( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pRenderPass) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDispatch"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateRenderPass"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["groupCountX"], groupCountX, json_options); - FieldToJson(args["groupCountY"], groupCountY, json_options); - FieldToJson(args["groupCountZ"], groupCountZ, json_options); + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["pRenderPass"], pRenderPass, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdDispatchIndirect( +void VulkanExportJsonConsumer::Process_vkDestroyRenderPass( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset) + format::HandleId device, + format::HandleId renderPass, + StructPointerDecoder* pAllocator) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDispatchIndirect"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyRenderPass"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["buffer"], buffer, json_options); - FieldToJson(args["offset"], offset, json_options); + HandleToJson(args["device"], device, json_options); + HandleToJson(args["renderPass"], renderPass, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdCopyBuffer( +void VulkanExportJsonConsumer::Process_vkGetRenderAreaGranularity( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcBuffer, - format::HandleId dstBuffer, - uint32_t regionCount, - StructPointerDecoder* pRegions) + format::HandleId device, + format::HandleId renderPass, + StructPointerDecoder* pGranularity) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyBuffer"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetRenderAreaGranularity"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["srcBuffer"], srcBuffer, json_options); - HandleToJson(args["dstBuffer"], dstBuffer, json_options); - FieldToJson(args["regionCount"], regionCount, json_options); - FieldToJson(args["pRegions"], pRegions, json_options); + HandleToJson(args["device"], device, json_options); + HandleToJson(args["renderPass"], renderPass, json_options); + FieldToJson(args["pGranularity"], pGranularity, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdCopyImage( +void VulkanExportJsonConsumer::Process_vkCmdSetViewport( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) + uint32_t firstViewport, + uint32_t viewportCount, + StructPointerDecoder* pViewports) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyImage"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetViewport"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["srcImage"], srcImage, json_options); - FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); - HandleToJson(args["dstImage"], dstImage, json_options); - FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); - FieldToJson(args["regionCount"], regionCount, json_options); - FieldToJson(args["pRegions"], pRegions, json_options); + FieldToJson(args["firstViewport"], firstViewport, json_options); + FieldToJson(args["viewportCount"], viewportCount, json_options); + FieldToJson(args["pViewports"], pViewports, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdBlitImage( +void VulkanExportJsonConsumer::Process_vkCmdSetScissor( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions, - VkFilter filter) + uint32_t firstScissor, + uint32_t scissorCount, + StructPointerDecoder* pScissors) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBlitImage"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetScissor"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["srcImage"], srcImage, json_options); - FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); - HandleToJson(args["dstImage"], dstImage, json_options); - FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); - FieldToJson(args["regionCount"], regionCount, json_options); - FieldToJson(args["pRegions"], pRegions, json_options); - FieldToJson(args["filter"], filter, json_options); + FieldToJson(args["firstScissor"], firstScissor, json_options); + FieldToJson(args["scissorCount"], scissorCount, json_options); + FieldToJson(args["pScissors"], pScissors, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdCopyBufferToImage( +void VulkanExportJsonConsumer::Process_vkCmdSetLineWidth( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcBuffer, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) + float lineWidth) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyBufferToImage"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetLineWidth"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["srcBuffer"], srcBuffer, json_options); - HandleToJson(args["dstImage"], dstImage, json_options); - FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); - FieldToJson(args["regionCount"], regionCount, json_options); - FieldToJson(args["pRegions"], pRegions, json_options); + FieldToJson(args["lineWidth"], lineWidth, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdCopyImageToBuffer( +void VulkanExportJsonConsumer::Process_vkCmdSetDepthBias( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstBuffer, - uint32_t regionCount, - StructPointerDecoder* pRegions) + float depthBiasConstantFactor, + float depthBiasClamp, + float depthBiasSlopeFactor) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyImageToBuffer"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetDepthBias"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["srcImage"], srcImage, json_options); - FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); - HandleToJson(args["dstBuffer"], dstBuffer, json_options); - FieldToJson(args["regionCount"], regionCount, json_options); - FieldToJson(args["pRegions"], pRegions, json_options); + FieldToJson(args["depthBiasConstantFactor"], depthBiasConstantFactor, json_options); + FieldToJson(args["depthBiasClamp"], depthBiasClamp, json_options); + FieldToJson(args["depthBiasSlopeFactor"], depthBiasSlopeFactor, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdUpdateBuffer( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize dataSize, - PointerDecoder* pData) +void VulkanExportJsonConsumer::Process_vkCmdSetBlendConstants( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + PointerDecoder* blendConstants) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdUpdateBuffer"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetBlendConstants"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["dstBuffer"], dstBuffer, json_options); - FieldToJson(args["dstOffset"], dstOffset, json_options); - FieldToJson(args["dataSize"], dataSize, json_options); - FieldToJson(args["pData"], pData, json_options); + FieldToJson(args["blendConstants"], blendConstants, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdFillBuffer( +void VulkanExportJsonConsumer::Process_vkCmdSetDepthBounds( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize size, - uint32_t data) + float minDepthBounds, + float maxDepthBounds) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdFillBuffer"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetDepthBounds"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["dstBuffer"], dstBuffer, json_options); - FieldToJson(args["dstOffset"], dstOffset, json_options); - FieldToJson(args["size"], size, json_options); - FieldToJson(args["data"], data, json_options); + FieldToJson(args["minDepthBounds"], minDepthBounds, json_options); + FieldToJson(args["maxDepthBounds"], maxDepthBounds, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdClearColorImage( +void VulkanExportJsonConsumer::Process_vkCmdSetStencilCompareMask( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId image, - VkImageLayout imageLayout, - StructPointerDecoder* pColor, - uint32_t rangeCount, - StructPointerDecoder* pRanges) + VkStencilFaceFlags faceMask, + uint32_t compareMask) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdClearColorImage"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetStencilCompareMask"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["image"], image, json_options); - FieldToJson(args["imageLayout"], imageLayout, json_options); - FieldToJson(args["pColor"], pColor, json_options); - FieldToJson(args["rangeCount"], rangeCount, json_options); - FieldToJson(args["pRanges"], pRanges, json_options); + FieldToJson(VkStencilFaceFlags_t(), args["faceMask"], faceMask, json_options); + FieldToJson(args["compareMask"], compareMask, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdClearDepthStencilImage( +void VulkanExportJsonConsumer::Process_vkCmdSetStencilWriteMask( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId image, - VkImageLayout imageLayout, - StructPointerDecoder* pDepthStencil, - uint32_t rangeCount, - StructPointerDecoder* pRanges) + VkStencilFaceFlags faceMask, + uint32_t writeMask) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdClearDepthStencilImage"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetStencilWriteMask"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["image"], image, json_options); - FieldToJson(args["imageLayout"], imageLayout, json_options); - FieldToJson(args["pDepthStencil"], pDepthStencil, json_options); - FieldToJson(args["rangeCount"], rangeCount, json_options); - FieldToJson(args["pRanges"], pRanges, json_options); + FieldToJson(VkStencilFaceFlags_t(), args["faceMask"], faceMask, json_options); + FieldToJson(args["writeMask"], writeMask, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdClearAttachments( +void VulkanExportJsonConsumer::Process_vkCmdSetStencilReference( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t attachmentCount, - StructPointerDecoder* pAttachments, - uint32_t rectCount, - StructPointerDecoder* pRects) + VkStencilFaceFlags faceMask, + uint32_t reference) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdClearAttachments"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetStencilReference"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["attachmentCount"], attachmentCount, json_options); - FieldToJson(args["pAttachments"], pAttachments, json_options); - FieldToJson(args["rectCount"], rectCount, json_options); - FieldToJson(args["pRects"], pRects, json_options); + FieldToJson(VkStencilFaceFlags_t(), args["faceMask"], faceMask, json_options); + FieldToJson(args["reference"], reference, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdResolveImage( +void VulkanExportJsonConsumer::Process_vkCmdBindIndexBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) + format::HandleId buffer, + VkDeviceSize offset, + VkIndexType indexType) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdResolveImage"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBindIndexBuffer"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["srcImage"], srcImage, json_options); - FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); - HandleToJson(args["dstImage"], dstImage, json_options); - FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); - FieldToJson(args["regionCount"], regionCount, json_options); - FieldToJson(args["pRegions"], pRegions, json_options); + HandleToJson(args["buffer"], buffer, json_options); + FieldToJson(args["offset"], offset, json_options); + FieldToJson(args["indexType"], indexType, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdSetEvent( +void VulkanExportJsonConsumer::Process_vkCmdBindVertexBuffers( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags stageMask) + uint32_t firstBinding, + uint32_t bindingCount, + HandlePointerDecoder* pBuffers, + PointerDecoder* pOffsets) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetEvent"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBindVertexBuffers"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["event"], event, json_options); - FieldToJson(VkPipelineStageFlags_t(), args["stageMask"], stageMask, json_options); + FieldToJson(args["firstBinding"], firstBinding, json_options); + FieldToJson(args["bindingCount"], bindingCount, json_options); + HandleToJson(args["pBuffers"], pBuffers, json_options); + FieldToJson(args["pOffsets"], pOffsets, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdResetEvent( +void VulkanExportJsonConsumer::Process_vkCmdDraw( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags stageMask) + uint32_t vertexCount, + uint32_t instanceCount, + uint32_t firstVertex, + uint32_t firstInstance) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdResetEvent"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDraw"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["event"], event, json_options); - FieldToJson(VkPipelineStageFlags_t(), args["stageMask"], stageMask, json_options); + FieldToJson(args["vertexCount"], vertexCount, json_options); + FieldToJson(args["instanceCount"], instanceCount, json_options); + FieldToJson(args["firstVertex"], firstVertex, json_options); + FieldToJson(args["firstInstance"], firstInstance, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdWaitEvents( +void VulkanExportJsonConsumer::Process_vkCmdDrawIndexed( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t eventCount, - HandlePointerDecoder* pEvents, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - uint32_t memoryBarrierCount, - StructPointerDecoder* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - StructPointerDecoder* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - StructPointerDecoder* pImageMemoryBarriers) + uint32_t indexCount, + uint32_t instanceCount, + uint32_t firstIndex, + int32_t vertexOffset, + uint32_t firstInstance) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdWaitEvents"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDrawIndexed"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["eventCount"], eventCount, json_options); - HandleToJson(args["pEvents"], pEvents, json_options); - FieldToJson(VkPipelineStageFlags_t(), args["srcStageMask"], srcStageMask, json_options); - FieldToJson(VkPipelineStageFlags_t(), args["dstStageMask"], dstStageMask, json_options); - FieldToJson(args["memoryBarrierCount"], memoryBarrierCount, json_options); - FieldToJson(args["pMemoryBarriers"], pMemoryBarriers, json_options); - FieldToJson(args["bufferMemoryBarrierCount"], bufferMemoryBarrierCount, json_options); - FieldToJson(args["pBufferMemoryBarriers"], pBufferMemoryBarriers, json_options); - FieldToJson(args["imageMemoryBarrierCount"], imageMemoryBarrierCount, json_options); - FieldToJson(args["pImageMemoryBarriers"], pImageMemoryBarriers, json_options); + FieldToJson(args["indexCount"], indexCount, json_options); + FieldToJson(args["instanceCount"], instanceCount, json_options); + FieldToJson(args["firstIndex"], firstIndex, json_options); + FieldToJson(args["vertexOffset"], vertexOffset, json_options); + FieldToJson(args["firstInstance"], firstInstance, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdPipelineBarrier( +void VulkanExportJsonConsumer::Process_vkCmdDrawIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - StructPointerDecoder* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - StructPointerDecoder* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - StructPointerDecoder* pImageMemoryBarriers) + format::HandleId buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdPipelineBarrier"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDrawIndirect"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(VkPipelineStageFlags_t(), args["srcStageMask"], srcStageMask, json_options); - FieldToJson(VkPipelineStageFlags_t(), args["dstStageMask"], dstStageMask, json_options); - FieldToJson(VkDependencyFlags_t(), args["dependencyFlags"], dependencyFlags, json_options); - FieldToJson(args["memoryBarrierCount"], memoryBarrierCount, json_options); - FieldToJson(args["pMemoryBarriers"], pMemoryBarriers, json_options); - FieldToJson(args["bufferMemoryBarrierCount"], bufferMemoryBarrierCount, json_options); - FieldToJson(args["pBufferMemoryBarriers"], pBufferMemoryBarriers, json_options); - FieldToJson(args["imageMemoryBarrierCount"], imageMemoryBarrierCount, json_options); - FieldToJson(args["pImageMemoryBarriers"], pImageMemoryBarriers, json_options); + HandleToJson(args["buffer"], buffer, json_options); + FieldToJson(args["offset"], offset, json_options); + FieldToJson(args["drawCount"], drawCount, json_options); + FieldToJson(args["stride"], stride, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdBeginQuery( +void VulkanExportJsonConsumer::Process_vkCmdDrawIndexedIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t query, - VkQueryControlFlags flags) + format::HandleId buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBeginQuery"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDrawIndexedIndirect"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["queryPool"], queryPool, json_options); - FieldToJson(args["query"], query, json_options); - FieldToJson(VkQueryControlFlags_t(), args["flags"], flags, json_options); + HandleToJson(args["buffer"], buffer, json_options); + FieldToJson(args["offset"], offset, json_options); + FieldToJson(args["drawCount"], drawCount, json_options); + FieldToJson(args["stride"], stride, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdEndQuery( +void VulkanExportJsonConsumer::Process_vkCmdBlitImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t query) + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + VkFilter filter) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdEndQuery"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBlitImage"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["queryPool"], queryPool, json_options); - FieldToJson(args["query"], query, json_options); + HandleToJson(args["srcImage"], srcImage, json_options); + FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); + HandleToJson(args["dstImage"], dstImage, json_options); + FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); + FieldToJson(args["regionCount"], regionCount, json_options); + FieldToJson(args["pRegions"], pRegions, json_options); + FieldToJson(args["filter"], filter, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdResetQueryPool( +void VulkanExportJsonConsumer::Process_vkCmdClearDepthStencilImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount) + format::HandleId image, + VkImageLayout imageLayout, + StructPointerDecoder* pDepthStencil, + uint32_t rangeCount, + StructPointerDecoder* pRanges) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdResetQueryPool"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdClearDepthStencilImage"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["queryPool"], queryPool, json_options); - FieldToJson(args["firstQuery"], firstQuery, json_options); - FieldToJson(args["queryCount"], queryCount, json_options); + HandleToJson(args["image"], image, json_options); + FieldToJson(args["imageLayout"], imageLayout, json_options); + FieldToJson(args["pDepthStencil"], pDepthStencil, json_options); + FieldToJson(args["rangeCount"], rangeCount, json_options); + FieldToJson(args["pRanges"], pRanges, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdWriteTimestamp( +void VulkanExportJsonConsumer::Process_vkCmdClearAttachments( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlagBits pipelineStage, - format::HandleId queryPool, - uint32_t query) + uint32_t attachmentCount, + StructPointerDecoder* pAttachments, + uint32_t rectCount, + StructPointerDecoder* pRects) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdWriteTimestamp"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdClearAttachments"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pipelineStage"], pipelineStage, json_options); - HandleToJson(args["queryPool"], queryPool, json_options); - FieldToJson(args["query"], query, json_options); + FieldToJson(args["attachmentCount"], attachmentCount, json_options); + FieldToJson(args["pAttachments"], pAttachments, json_options); + FieldToJson(args["rectCount"], rectCount, json_options); + FieldToJson(args["pRects"], pRects, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdCopyQueryPoolResults( +void VulkanExportJsonConsumer::Process_vkCmdResolveImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags) + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyQueryPoolResults"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdResolveImage"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["queryPool"], queryPool, json_options); - FieldToJson(args["firstQuery"], firstQuery, json_options); - FieldToJson(args["queryCount"], queryCount, json_options); - HandleToJson(args["dstBuffer"], dstBuffer, json_options); - FieldToJson(args["dstOffset"], dstOffset, json_options); - FieldToJson(args["stride"], stride, json_options); - FieldToJson(VkQueryResultFlags_t(), args["flags"], flags, json_options); + HandleToJson(args["srcImage"], srcImage, json_options); + FieldToJson(args["srcImageLayout"], srcImageLayout, json_options); + HandleToJson(args["dstImage"], dstImage, json_options); + FieldToJson(args["dstImageLayout"], dstImageLayout, json_options); + FieldToJson(args["regionCount"], regionCount, json_options); + FieldToJson(args["pRegions"], pRegions, json_options); WriteBlockEnd(); } @@ -2288,22 +2304,6 @@ void VulkanExportJsonConsumer::Process_vkCmdEndRenderPass( WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdExecuteCommands( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t commandBufferCount, - HandlePointerDecoder* pCommandBuffers) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdExecuteCommands"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["commandBufferCount"], commandBufferCount, json_options); - HandleToJson(args["pCommandBuffers"], pCommandBuffers, json_options); - WriteBlockEnd(); -} - void VulkanExportJsonConsumer::Process_vkBindBufferMemory2( const ApiCallInfo& call_info, VkResult returnValue, @@ -2371,30 +2371,6 @@ void VulkanExportJsonConsumer::Process_vkCmdSetDeviceMask( WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdDispatchBase( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDispatchBase"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["baseGroupX"], baseGroupX, json_options); - FieldToJson(args["baseGroupY"], baseGroupY, json_options); - FieldToJson(args["baseGroupZ"], baseGroupZ, json_options); - FieldToJson(args["groupCountX"], groupCountX, json_options); - FieldToJson(args["groupCountY"], groupCountY, json_options); - FieldToJson(args["groupCountZ"], groupCountZ, json_options); - WriteBlockEnd(); -} - void VulkanExportJsonConsumer::Process_vkEnumeratePhysicalDeviceGroups( const ApiCallInfo& call_info, VkResult returnValue, @@ -2592,6 +2568,124 @@ void VulkanExportJsonConsumer::Process_vkGetDeviceQueue2( WriteBlockEnd(); } +void VulkanExportJsonConsumer::Process_vkGetPhysicalDeviceExternalBufferProperties( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pExternalBufferInfo, + StructPointerDecoder* pExternalBufferProperties) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetPhysicalDeviceExternalBufferProperties"); + const JsonOptions& json_options = GetJsonOptions(); + auto& args = jdata[NameArgs()]; + HandleToJson(args["physicalDevice"], physicalDevice, json_options); + FieldToJson(args["pExternalBufferInfo"], pExternalBufferInfo, json_options); + FieldToJson(args["pExternalBufferProperties"], pExternalBufferProperties, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetPhysicalDeviceExternalFenceProperties( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pExternalFenceInfo, + StructPointerDecoder* pExternalFenceProperties) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetPhysicalDeviceExternalFenceProperties"); + const JsonOptions& json_options = GetJsonOptions(); + auto& args = jdata[NameArgs()]; + HandleToJson(args["physicalDevice"], physicalDevice, json_options); + FieldToJson(args["pExternalFenceInfo"], pExternalFenceInfo, json_options); + FieldToJson(args["pExternalFenceProperties"], pExternalFenceProperties, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetPhysicalDeviceExternalSemaphoreProperties( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pExternalSemaphoreInfo, + StructPointerDecoder* pExternalSemaphoreProperties) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetPhysicalDeviceExternalSemaphoreProperties"); + const JsonOptions& json_options = GetJsonOptions(); + auto& args = jdata[NameArgs()]; + HandleToJson(args["physicalDevice"], physicalDevice, json_options); + FieldToJson(args["pExternalSemaphoreInfo"], pExternalSemaphoreInfo, json_options); + FieldToJson(args["pExternalSemaphoreProperties"], pExternalSemaphoreProperties, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdDispatchBase( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDispatchBase"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["baseGroupX"], baseGroupX, json_options); + FieldToJson(args["baseGroupY"], baseGroupY, json_options); + FieldToJson(args["baseGroupZ"], baseGroupZ, json_options); + FieldToJson(args["groupCountX"], groupCountX, json_options); + FieldToJson(args["groupCountY"], groupCountY, json_options); + FieldToJson(args["groupCountZ"], groupCountZ, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCreateDescriptorUpdateTemplate( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pDescriptorUpdateTemplate) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateDescriptorUpdateTemplate"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["pDescriptorUpdateTemplate"], pDescriptorUpdateTemplate, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkDestroyDescriptorUpdateTemplate( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId descriptorUpdateTemplate, + StructPointerDecoder* pAllocator) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyDescriptorUpdateTemplate"); + const JsonOptions& json_options = GetJsonOptions(); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + HandleToJson(args["descriptorUpdateTemplate"], descriptorUpdateTemplate, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetDescriptorSetLayoutSupport( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pSupport) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDescriptorSetLayoutSupport"); + const JsonOptions& json_options = GetJsonOptions(); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); + FieldToJson(args["pSupport"], pSupport, json_options); + WriteBlockEnd(); +} + void VulkanExportJsonConsumer::Process_vkCreateSamplerYcbcrConversion( const ApiCallInfo& call_info, VkResult returnValue, @@ -2626,97 +2720,114 @@ void VulkanExportJsonConsumer::Process_vkDestroySamplerYcbcrConversion( WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCreateDescriptorUpdateTemplate( +void VulkanExportJsonConsumer::Process_vkResetQueryPool( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkResetQueryPool"); + const JsonOptions& json_options = GetJsonOptions(); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + HandleToJson(args["queryPool"], queryPool, json_options); + FieldToJson(args["firstQuery"], firstQuery, json_options); + FieldToJson(args["queryCount"], queryCount, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetSemaphoreCounterValue( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pDescriptorUpdateTemplate) + format::HandleId semaphore, + PointerDecoder* pValue) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateDescriptorUpdateTemplate"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetSemaphoreCounterValue"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); - HandleToJson(args["pDescriptorUpdateTemplate"], pDescriptorUpdateTemplate, json_options); + HandleToJson(args["semaphore"], semaphore, json_options); + FieldToJson(args["pValue"], pValue, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkDestroyDescriptorUpdateTemplate( +void VulkanExportJsonConsumer::Process_vkWaitSemaphores( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId descriptorUpdateTemplate, - StructPointerDecoder* pAllocator) + StructPointerDecoder* pWaitInfo, + uint64_t timeout) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyDescriptorUpdateTemplate"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkWaitSemaphores"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - HandleToJson(args["descriptorUpdateTemplate"], descriptorUpdateTemplate, json_options); - FieldToJson(args["pAllocator"], pAllocator, json_options); + FieldToJson(args["pWaitInfo"], pWaitInfo, json_options); + FieldToJson(args["timeout"], timeout, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkGetPhysicalDeviceExternalBufferProperties( +void VulkanExportJsonConsumer::Process_vkSignalSemaphore( const ApiCallInfo& call_info, - format::HandleId physicalDevice, - StructPointerDecoder* pExternalBufferInfo, - StructPointerDecoder* pExternalBufferProperties) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pSignalInfo) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetPhysicalDeviceExternalBufferProperties"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkSignalSemaphore"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["physicalDevice"], physicalDevice, json_options); - FieldToJson(args["pExternalBufferInfo"], pExternalBufferInfo, json_options); - FieldToJson(args["pExternalBufferProperties"], pExternalBufferProperties, json_options); + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pSignalInfo"], pSignalInfo, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkGetPhysicalDeviceExternalFenceProperties( +void VulkanExportJsonConsumer::Process_vkGetBufferDeviceAddress( const ApiCallInfo& call_info, - format::HandleId physicalDevice, - StructPointerDecoder* pExternalFenceInfo, - StructPointerDecoder* pExternalFenceProperties) + VkDeviceAddress returnValue, + format::HandleId device, + StructPointerDecoder* pInfo) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetPhysicalDeviceExternalFenceProperties"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetBufferDeviceAddress"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJsonAsHex(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["physicalDevice"], physicalDevice, json_options); - FieldToJson(args["pExternalFenceInfo"], pExternalFenceInfo, json_options); - FieldToJson(args["pExternalFenceProperties"], pExternalFenceProperties, json_options); + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pInfo"], pInfo, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkGetPhysicalDeviceExternalSemaphoreProperties( +void VulkanExportJsonConsumer::Process_vkGetBufferOpaqueCaptureAddress( const ApiCallInfo& call_info, - format::HandleId physicalDevice, - StructPointerDecoder* pExternalSemaphoreInfo, - StructPointerDecoder* pExternalSemaphoreProperties) + uint64_t returnValue, + format::HandleId device, + StructPointerDecoder* pInfo) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetPhysicalDeviceExternalSemaphoreProperties"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetBufferOpaqueCaptureAddress"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["physicalDevice"], physicalDevice, json_options); - FieldToJson(args["pExternalSemaphoreInfo"], pExternalSemaphoreInfo, json_options); - FieldToJson(args["pExternalSemaphoreProperties"], pExternalSemaphoreProperties, json_options); + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pInfo"], pInfo, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkGetDescriptorSetLayoutSupport( +void VulkanExportJsonConsumer::Process_vkGetDeviceMemoryOpaqueCaptureAddress( const ApiCallInfo& call_info, + uint64_t returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pSupport) + StructPointerDecoder* pInfo) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDescriptorSetLayoutSupport"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDeviceMemoryOpaqueCaptureAddress"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); - FieldToJson(args["pSupport"], pSupport, json_options); + FieldToJson(args["pInfo"], pInfo, json_options); WriteBlockEnd(); } @@ -2833,117 +2944,6 @@ void VulkanExportJsonConsumer::Process_vkCmdEndRenderPass2( WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkResetQueryPool( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkResetQueryPool"); - const JsonOptions& json_options = GetJsonOptions(); - auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - HandleToJson(args["queryPool"], queryPool, json_options); - FieldToJson(args["firstQuery"], firstQuery, json_options); - FieldToJson(args["queryCount"], queryCount, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkGetSemaphoreCounterValue( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId semaphore, - PointerDecoder* pValue) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetSemaphoreCounterValue"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - HandleToJson(args["semaphore"], semaphore, json_options); - FieldToJson(args["pValue"], pValue, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkWaitSemaphores( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pWaitInfo, - uint64_t timeout) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkWaitSemaphores"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["pWaitInfo"], pWaitInfo, json_options); - FieldToJson(args["timeout"], timeout, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkSignalSemaphore( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pSignalInfo) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkSignalSemaphore"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["pSignalInfo"], pSignalInfo, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkGetBufferDeviceAddress( - const ApiCallInfo& call_info, - VkDeviceAddress returnValue, - format::HandleId device, - StructPointerDecoder* pInfo) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetBufferDeviceAddress"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJsonAsHex(jdata[NameReturn()], returnValue, json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["pInfo"], pInfo, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkGetBufferOpaqueCaptureAddress( - const ApiCallInfo& call_info, - uint64_t returnValue, - format::HandleId device, - StructPointerDecoder* pInfo) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetBufferOpaqueCaptureAddress"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["pInfo"], pInfo, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkGetDeviceMemoryOpaqueCaptureAddress( - const ApiCallInfo& call_info, - uint64_t returnValue, - format::HandleId device, - StructPointerDecoder* pInfo) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDeviceMemoryOpaqueCaptureAddress"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["pInfo"], pInfo, json_options); - WriteBlockEnd(); -} - void VulkanExportJsonConsumer::Process_vkGetPhysicalDeviceToolProperties( const ApiCallInfo& call_info, VkResult returnValue, @@ -3035,161 +3035,208 @@ void VulkanExportJsonConsumer::Process_vkGetPrivateData( WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdSetEvent2( +void VulkanExportJsonConsumer::Process_vkCmdPipelineBarrier2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId event, StructPointerDecoder* pDependencyInfo) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetEvent2"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdPipelineBarrier2"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["event"], event, json_options); FieldToJson(args["pDependencyInfo"], pDependencyInfo, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdResetEvent2( +void VulkanExportJsonConsumer::Process_vkCmdWriteTimestamp2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags2 stageMask) + VkPipelineStageFlags2 stage, + format::HandleId queryPool, + uint32_t query) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdResetEvent2"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdWriteTimestamp2"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["event"], event, json_options); - FieldToJson(VkPipelineStageFlags2_t(), args["stageMask"], stageMask, json_options); + FieldToJson(VkPipelineStageFlags2_t(), args["stage"], stage, json_options); + HandleToJson(args["queryPool"], queryPool, json_options); + FieldToJson(args["query"], query, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdWaitEvents2( +void VulkanExportJsonConsumer::Process_vkQueueSubmit2( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId queue, + uint32_t submitCount, + StructPointerDecoder* pSubmits, + format::HandleId fence) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkQueueSubmit2"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameSubmitIndex()], ++submit_index_, json_options); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["queue"], queue, json_options); + FieldToJson(args["submitCount"], submitCount, json_options); + FieldToJson(args["pSubmits"], pSubmits, json_options); + HandleToJson(args["fence"], fence, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdCopyBuffer2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t eventCount, - HandlePointerDecoder* pEvents, - StructPointerDecoder* pDependencyInfos) + StructPointerDecoder* pCopyBufferInfo) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdWaitEvents2"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyBuffer2"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["eventCount"], eventCount, json_options); - HandleToJson(args["pEvents"], pEvents, json_options); - FieldToJson(args["pDependencyInfos"], pDependencyInfos, json_options); + FieldToJson(args["pCopyBufferInfo"], pCopyBufferInfo, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdPipelineBarrier2( +void VulkanExportJsonConsumer::Process_vkCmdCopyImage2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pDependencyInfo) + StructPointerDecoder* pCopyImageInfo) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdPipelineBarrier2"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyImage2"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pDependencyInfo"], pDependencyInfo, json_options); + FieldToJson(args["pCopyImageInfo"], pCopyImageInfo, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdWriteTimestamp2( +void VulkanExportJsonConsumer::Process_vkCmdCopyBufferToImage2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlags2 stage, - format::HandleId queryPool, - uint32_t query) + StructPointerDecoder* pCopyBufferToImageInfo) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyBufferToImage2"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pCopyBufferToImageInfo"], pCopyBufferToImageInfo, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdCopyImageToBuffer2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyImageToBufferInfo) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyImageToBuffer2"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pCopyImageToBufferInfo"], pCopyImageToBufferInfo, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetDeviceBufferMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdWriteTimestamp2"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDeviceBufferMemoryRequirements"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(VkPipelineStageFlags2_t(), args["stage"], stage, json_options); - HandleToJson(args["queryPool"], queryPool, json_options); - FieldToJson(args["query"], query, json_options); + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pInfo"], pInfo, json_options); + FieldToJson(args["pMemoryRequirements"], pMemoryRequirements, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkQueueSubmit2( +void VulkanExportJsonConsumer::Process_vkGetDeviceImageMemoryRequirements( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId queue, - uint32_t submitCount, - StructPointerDecoder* pSubmits, - format::HandleId fence) + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkQueueSubmit2"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDeviceImageMemoryRequirements"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameSubmitIndex()], ++submit_index_, json_options); - FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["queue"], queue, json_options); - FieldToJson(args["submitCount"], submitCount, json_options); - FieldToJson(args["pSubmits"], pSubmits, json_options); - HandleToJson(args["fence"], fence, json_options); + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pInfo"], pInfo, json_options); + FieldToJson(args["pMemoryRequirements"], pMemoryRequirements, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdCopyBuffer2( +void VulkanExportJsonConsumer::Process_vkGetDeviceImageSparseMemoryRequirements( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pCopyBufferInfo) + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pSparseMemoryRequirementCount, + StructPointerDecoder* pSparseMemoryRequirements) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyBuffer2"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDeviceImageSparseMemoryRequirements"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pCopyBufferInfo"], pCopyBufferInfo, json_options); + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pInfo"], pInfo, json_options); + FieldToJson(args["pSparseMemoryRequirementCount"], pSparseMemoryRequirementCount, json_options); + FieldToJson(args["pSparseMemoryRequirements"], pSparseMemoryRequirements, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdCopyImage2( +void VulkanExportJsonConsumer::Process_vkCmdSetEvent2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyImageInfo) + format::HandleId event, + StructPointerDecoder* pDependencyInfo) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyImage2"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetEvent2"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pCopyImageInfo"], pCopyImageInfo, json_options); + HandleToJson(args["event"], event, json_options); + FieldToJson(args["pDependencyInfo"], pDependencyInfo, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdCopyBufferToImage2( +void VulkanExportJsonConsumer::Process_vkCmdResetEvent2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyBufferToImageInfo) + format::HandleId event, + VkPipelineStageFlags2 stageMask) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyBufferToImage2"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdResetEvent2"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pCopyBufferToImageInfo"], pCopyBufferToImageInfo, json_options); + HandleToJson(args["event"], event, json_options); + FieldToJson(VkPipelineStageFlags2_t(), args["stageMask"], stageMask, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdCopyImageToBuffer2( +void VulkanExportJsonConsumer::Process_vkCmdWaitEvents2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyImageToBufferInfo) + uint32_t eventCount, + HandlePointerDecoder* pEvents, + StructPointerDecoder* pDependencyInfos) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyImageToBuffer2"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdWaitEvents2"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pCopyImageToBufferInfo"], pCopyImageToBufferInfo, json_options); + FieldToJson(args["eventCount"], eventCount, json_options); + HandleToJson(args["pEvents"], pEvents, json_options); + FieldToJson(args["pDependencyInfos"], pDependencyInfos, json_options); WriteBlockEnd(); } @@ -3479,165 +3526,129 @@ void VulkanExportJsonConsumer::Process_vkCmdSetPrimitiveRestartEnable( WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkGetDeviceBufferMemoryRequirements( +void VulkanExportJsonConsumer::Process_vkMapMemory2( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pMemoryRequirements) + StructPointerDecoder* pMemoryMapInfo, + PointerDecoder* ppData) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDeviceBufferMemoryRequirements"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkMapMemory2"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - FieldToJson(args["pInfo"], pInfo, json_options); - FieldToJson(args["pMemoryRequirements"], pMemoryRequirements, json_options); + FieldToJson(args["pMemoryMapInfo"], pMemoryMapInfo, json_options); + FieldToJsonAsHex(args["ppData"], ppData, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkGetDeviceImageMemoryRequirements( +void VulkanExportJsonConsumer::Process_vkUnmapMemory2( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pMemoryRequirements) + StructPointerDecoder* pMemoryUnmapInfo) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDeviceImageMemoryRequirements"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkUnmapMemory2"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - FieldToJson(args["pInfo"], pInfo, json_options); - FieldToJson(args["pMemoryRequirements"], pMemoryRequirements, json_options); + FieldToJson(args["pMemoryUnmapInfo"], pMemoryUnmapInfo, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkGetDeviceImageSparseMemoryRequirements( +void VulkanExportJsonConsumer::Process_vkGetDeviceImageSubresourceLayout( const ApiCallInfo& call_info, format::HandleId device, - StructPointerDecoder* pInfo, - PointerDecoder* pSparseMemoryRequirementCount, - StructPointerDecoder* pSparseMemoryRequirements) + StructPointerDecoder* pInfo, + StructPointerDecoder* pLayout) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDeviceImageSparseMemoryRequirements"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDeviceImageSubresourceLayout"); const JsonOptions& json_options = GetJsonOptions(); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); FieldToJson(args["pInfo"], pInfo, json_options); - FieldToJson(args["pSparseMemoryRequirementCount"], pSparseMemoryRequirementCount, json_options); - FieldToJson(args["pSparseMemoryRequirements"], pSparseMemoryRequirements, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkCmdSetLineStipple( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t lineStippleFactor, - uint16_t lineStipplePattern) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetLineStipple"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["lineStippleFactor"], lineStippleFactor, json_options); - FieldToJson(args["lineStipplePattern"], lineStipplePattern, json_options); + FieldToJson(args["pLayout"], pLayout, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkMapMemory2( +void VulkanExportJsonConsumer::Process_vkGetImageSubresourceLayout2( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - StructPointerDecoder* pMemoryMapInfo, - PointerDecoder* ppData) + format::HandleId image, + StructPointerDecoder* pSubresource, + StructPointerDecoder* pLayout) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkMapMemory2"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetImageSubresourceLayout2"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - FieldToJson(args["pMemoryMapInfo"], pMemoryMapInfo, json_options); - FieldToJsonAsHex(args["ppData"], ppData, json_options); + HandleToJson(args["image"], image, json_options); + FieldToJson(args["pSubresource"], pSubresource, json_options); + FieldToJson(args["pLayout"], pLayout, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkUnmapMemory2( +void VulkanExportJsonConsumer::Process_vkCopyMemoryToImage( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pMemoryUnmapInfo) + StructPointerDecoder* pCopyMemoryToImageInfo) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkUnmapMemory2"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCopyMemoryToImage"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - FieldToJson(args["pMemoryUnmapInfo"], pMemoryUnmapInfo, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkCmdBindIndexBuffer2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkDeviceSize size, - VkIndexType indexType) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBindIndexBuffer2"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - HandleToJson(args["buffer"], buffer, json_options); - FieldToJson(args["offset"], offset, json_options); - FieldToJson(args["size"], size, json_options); - FieldToJson(args["indexType"], indexType, json_options); + FieldToJson(args["pCopyMemoryToImageInfo"], pCopyMemoryToImageInfo, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkGetRenderingAreaGranularity( +void VulkanExportJsonConsumer::Process_vkCopyImageToMemory( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - StructPointerDecoder* pRenderingAreaInfo, - StructPointerDecoder* pGranularity) + StructPointerDecoder* pCopyImageToMemoryInfo) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetRenderingAreaGranularity"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCopyImageToMemory"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - FieldToJson(args["pRenderingAreaInfo"], pRenderingAreaInfo, json_options); - FieldToJson(args["pGranularity"], pGranularity, json_options); + FieldToJson(args["pCopyImageToMemoryInfo"], pCopyImageToMemoryInfo, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkGetDeviceImageSubresourceLayout( +void VulkanExportJsonConsumer::Process_vkCopyImageToImage( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pLayout) + StructPointerDecoder* pCopyImageToImageInfo) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDeviceImageSubresourceLayout"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCopyImageToImage"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - FieldToJson(args["pInfo"], pInfo, json_options); - FieldToJson(args["pLayout"], pLayout, json_options); + FieldToJson(args["pCopyImageToImageInfo"], pCopyImageToImageInfo, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkGetImageSubresourceLayout2( +void VulkanExportJsonConsumer::Process_vkTransitionImageLayout( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId image, - StructPointerDecoder* pSubresource, - StructPointerDecoder* pLayout) + uint32_t transitionCount, + StructPointerDecoder* pTransitions) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetImageSubresourceLayout2"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkTransitionImageLayout"); const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - HandleToJson(args["image"], image, json_options); - FieldToJson(args["pSubresource"], pSubresource, json_options); - FieldToJson(args["pLayout"], pLayout, json_options); + FieldToJson(args["transitionCount"], transitionCount, json_options); + FieldToJson(args["pTransitions"], pTransitions, json_options); WriteBlockEnd(); } @@ -3650,44 +3661,16 @@ void VulkanExportJsonConsumer::Process_vkCmdPushDescriptorSet( uint32_t descriptorWriteCount, StructPointerDecoder* pDescriptorWrites) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdPushDescriptorSet"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pipelineBindPoint"], pipelineBindPoint, json_options); - HandleToJson(args["layout"], layout, json_options); - FieldToJson(args["set"], set, json_options); - FieldToJson(args["descriptorWriteCount"], descriptorWriteCount, json_options); - FieldToJson(args["pDescriptorWrites"], pDescriptorWrites, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkCmdSetRenderingAttachmentLocations( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pLocationInfo) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetRenderingAttachmentLocations"); - const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); - auto& args = jdata[NameArgs()]; - HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pLocationInfo"], pLocationInfo, json_options); - WriteBlockEnd(); -} - -void VulkanExportJsonConsumer::Process_vkCmdSetRenderingInputAttachmentIndices( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pInputAttachmentIndexInfo) -{ - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetRenderingInputAttachmentIndices"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdPushDescriptorSet"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pInputAttachmentIndexInfo"], pInputAttachmentIndexInfo, json_options); + FieldToJson(args["pipelineBindPoint"], pipelineBindPoint, json_options); + HandleToJson(args["layout"], layout, json_options); + FieldToJson(args["set"], set, json_options); + FieldToJson(args["descriptorWriteCount"], descriptorWriteCount, json_options); + FieldToJson(args["pDescriptorWrites"], pDescriptorWrites, json_options); WriteBlockEnd(); } @@ -3733,65 +3716,82 @@ void VulkanExportJsonConsumer::Process_vkCmdPushDescriptorSet2( WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCopyMemoryToImage( +void VulkanExportJsonConsumer::Process_vkCmdSetLineStipple( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCopyMemoryToImageInfo) + format::HandleId commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCopyMemoryToImage"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetLineStipple"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["pCopyMemoryToImageInfo"], pCopyMemoryToImageInfo, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["lineStippleFactor"], lineStippleFactor, json_options); + FieldToJson(args["lineStipplePattern"], lineStipplePattern, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCopyImageToMemory( +void VulkanExportJsonConsumer::Process_vkCmdBindIndexBuffer2( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCopyImageToMemoryInfo) + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCopyImageToMemory"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBindIndexBuffer2"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["pCopyImageToMemoryInfo"], pCopyImageToMemoryInfo, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["buffer"], buffer, json_options); + FieldToJson(args["offset"], offset, json_options); + FieldToJson(args["size"], size, json_options); + FieldToJson(args["indexType"], indexType, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCopyImageToImage( +void VulkanExportJsonConsumer::Process_vkGetRenderingAreaGranularity( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCopyImageToImageInfo) + StructPointerDecoder* pRenderingAreaInfo, + StructPointerDecoder* pGranularity) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCopyImageToImage"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetRenderingAreaGranularity"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - FieldToJson(args["pCopyImageToImageInfo"], pCopyImageToImageInfo, json_options); + FieldToJson(args["pRenderingAreaInfo"], pRenderingAreaInfo, json_options); + FieldToJson(args["pGranularity"], pGranularity, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkTransitionImageLayout( +void VulkanExportJsonConsumer::Process_vkCmdSetRenderingAttachmentLocations( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - uint32_t transitionCount, - StructPointerDecoder* pTransitions) + format::HandleId commandBuffer, + StructPointerDecoder* pLocationInfo) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkTransitionImageLayout"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetRenderingAttachmentLocations"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; - HandleToJson(args["device"], device, json_options); - FieldToJson(args["transitionCount"], transitionCount, json_options); - FieldToJson(args["pTransitions"], pTransitions, json_options); + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pLocationInfo"], pLocationInfo, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdSetRenderingInputAttachmentIndices( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pInputAttachmentIndexInfo) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetRenderingInputAttachmentIndices"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pInputAttachmentIndexInfo"], pInputAttachmentIndexInfo, json_options); WriteBlockEnd(); } @@ -6489,6 +6489,48 @@ void VulkanExportJsonConsumer::Process_vkCmdBindDescriptorBufferEmbeddedSamplers WriteBlockEnd(); } +void VulkanExportJsonConsumer::Process_vkCmdCopyMemoryIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryIndirectInfo) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyMemoryIndirectKHR"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pCopyMemoryIndirectInfo"], pCopyMemoryIndirectInfo, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdCopyMemoryToImageIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryToImageIndirectInfo) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdCopyMemoryToImageIndirectKHR"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pCopyMemoryToImageIndirectInfo"], pCopyMemoryToImageIndirectInfo, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdEndRendering2KHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pRenderingEndInfo) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdEndRendering2KHR"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pRenderingEndInfo"], pRenderingEndInfo, json_options); + WriteBlockEnd(); +} + void VulkanExportJsonConsumer::Process_vkFrameBoundaryANDROID( const ApiCallInfo& call_info, format::HandleId device, @@ -8162,6 +8204,78 @@ void VulkanExportJsonConsumer::Process_vkGetQueueCheckpointData2NV( WriteBlockEnd(); } +void VulkanExportJsonConsumer::Process_vkSetSwapchainPresentTimingQueueSizeEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + uint32_t size) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkSetSwapchainPresentTimingQueueSizeEXT"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + HandleToJson(args["swapchain"], swapchain, json_options); + FieldToJson(args["size"], size, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetSwapchainTimingPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimingProperties, + PointerDecoder* pSwapchainTimingPropertiesCounter) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetSwapchainTimingPropertiesEXT"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + HandleToJson(args["swapchain"], swapchain, json_options); + FieldToJson(args["pSwapchainTimingProperties"], pSwapchainTimingProperties, json_options); + FieldToJson(args["pSwapchainTimingPropertiesCounter"], pSwapchainTimingPropertiesCounter, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetSwapchainTimeDomainPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimeDomainProperties, + PointerDecoder* pTimeDomainsCounter) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetSwapchainTimeDomainPropertiesEXT"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + HandleToJson(args["swapchain"], swapchain, json_options); + FieldToJson(args["pSwapchainTimeDomainProperties"], pSwapchainTimeDomainProperties, json_options); + FieldToJson(args["pTimeDomainsCounter"], pTimeDomainsCounter, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetPastPresentationTimingEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPastPresentationTimingInfo, + StructPointerDecoder* pPastPresentationTimingProperties) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetPastPresentationTimingEXT"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pPastPresentationTimingInfo"], pPastPresentationTimingInfo, json_options); + FieldToJson(args["pPastPresentationTimingProperties"], pPastPresentationTimingProperties, json_options); + WriteBlockEnd(); +} + void VulkanExportJsonConsumer::Process_vkInitializePerformanceApiINTEL( const ApiCallInfo& call_info, VkResult returnValue, @@ -9011,76 +9125,183 @@ void VulkanExportJsonConsumer::Process_vkSetPrivateDataEXT( format::HandleId privateDataSlot, uint64_t data) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkSetPrivateDataEXT"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkSetPrivateDataEXT"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + FieldToJson(args["objectType"], objectType, json_options); + HandleToJson(args["objectHandle"], objectHandle, json_options); + HandleToJson(args["privateDataSlot"], privateDataSlot, json_options); + FieldToJson(args["data"], data, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetPrivateDataEXT( + const ApiCallInfo& call_info, + format::HandleId device, + VkObjectType objectType, + uint64_t objectHandle, + format::HandleId privateDataSlot, + PointerDecoder* pData) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetPrivateDataEXT"); + const JsonOptions& json_options = GetJsonOptions(); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + FieldToJson(args["objectType"], objectType, json_options); + HandleToJson(args["objectHandle"], objectHandle, json_options); + HandleToJson(args["privateDataSlot"], privateDataSlot, json_options); + FieldToJson(args["pData"], pData, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdDispatchTileQCOM( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pDispatchTileInfo) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDispatchTileQCOM"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pDispatchTileInfo"], pDispatchTileInfo, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdBeginPerTileExecutionQCOM( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pPerTileBeginInfo) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBeginPerTileExecutionQCOM"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pPerTileBeginInfo"], pPerTileBeginInfo, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdEndPerTileExecutionQCOM( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pPerTileEndInfo) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdEndPerTileExecutionQCOM"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pPerTileEndInfo"], pPerTileEndInfo, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetDescriptorSetLayoutSizeEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + PointerDecoder* pLayoutSizeInBytes) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDescriptorSetLayoutSizeEXT"); + const JsonOptions& json_options = GetJsonOptions(); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + HandleToJson(args["layout"], layout, json_options); + FieldToJson(args["pLayoutSizeInBytes"], pLayoutSizeInBytes, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetDescriptorSetLayoutBindingOffsetEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + uint32_t binding, + PointerDecoder* pOffset) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDescriptorSetLayoutBindingOffsetEXT"); const JsonOptions& json_options = GetJsonOptions(); - FieldToJson(jdata[NameReturn()], returnValue, json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - FieldToJson(args["objectType"], objectType, json_options); - HandleToJson(args["objectHandle"], objectHandle, json_options); - HandleToJson(args["privateDataSlot"], privateDataSlot, json_options); - FieldToJson(args["data"], data, json_options); + HandleToJson(args["layout"], layout, json_options); + FieldToJson(args["binding"], binding, json_options); + FieldToJson(args["pOffset"], pOffset, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkGetPrivateDataEXT( +void VulkanExportJsonConsumer::Process_vkGetDescriptorEXT( const ApiCallInfo& call_info, format::HandleId device, - VkObjectType objectType, - uint64_t objectHandle, - format::HandleId privateDataSlot, - PointerDecoder* pData) + StructPointerDecoder* pDescriptorInfo, + size_t dataSize, + PointerDecoder* pDescriptor) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetPrivateDataEXT"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDescriptorEXT"); const JsonOptions& json_options = GetJsonOptions(); auto& args = jdata[NameArgs()]; HandleToJson(args["device"], device, json_options); - FieldToJson(args["objectType"], objectType, json_options); - HandleToJson(args["objectHandle"], objectHandle, json_options); - HandleToJson(args["privateDataSlot"], privateDataSlot, json_options); - FieldToJson(args["pData"], pData, json_options); + FieldToJson(args["pDescriptorInfo"], pDescriptorInfo, json_options); + FieldToJson(args["dataSize"], dataSize, json_options); + FieldToJson(args["pDescriptor"], pDescriptor, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdDispatchTileQCOM( +void VulkanExportJsonConsumer::Process_vkCmdBindDescriptorBuffersEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pDispatchTileInfo) + uint32_t bufferCount, + StructPointerDecoder* pBindingInfos) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDispatchTileQCOM"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBindDescriptorBuffersEXT"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pDispatchTileInfo"], pDispatchTileInfo, json_options); + FieldToJson(args["bufferCount"], bufferCount, json_options); + FieldToJson(args["pBindingInfos"], pBindingInfos, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdBeginPerTileExecutionQCOM( +void VulkanExportJsonConsumer::Process_vkCmdSetDescriptorBufferOffsetsEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pPerTileBeginInfo) + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t setCount, + PointerDecoder* pBufferIndices, + PointerDecoder* pOffsets) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBeginPerTileExecutionQCOM"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetDescriptorBufferOffsetsEXT"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pPerTileBeginInfo"], pPerTileBeginInfo, json_options); + FieldToJson(args["pipelineBindPoint"], pipelineBindPoint, json_options); + HandleToJson(args["layout"], layout, json_options); + FieldToJson(args["firstSet"], firstSet, json_options); + FieldToJson(args["setCount"], setCount, json_options); + FieldToJson(args["pBufferIndices"], pBufferIndices, json_options); + FieldToJson(args["pOffsets"], pOffsets, json_options); WriteBlockEnd(); } -void VulkanExportJsonConsumer::Process_vkCmdEndPerTileExecutionQCOM( +void VulkanExportJsonConsumer::Process_vkCmdBindDescriptorBufferEmbeddedSamplersEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pPerTileEndInfo) + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t set) { - nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdEndPerTileExecutionQCOM"); + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBindDescriptorBufferEmbeddedSamplersEXT"); const JsonOptions& json_options = GetJsonOptions(); FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); auto& args = jdata[NameArgs()]; HandleToJson(args["commandBuffer"], commandBuffer, json_options); - FieldToJson(args["pPerTileEndInfo"], pPerTileEndInfo, json_options); + FieldToJson(args["pipelineBindPoint"], pipelineBindPoint, json_options); + HandleToJson(args["layout"], layout, json_options); + FieldToJson(args["set"], set, json_options); WriteBlockEnd(); } @@ -10681,6 +10902,204 @@ void VulkanExportJsonConsumer::Process_vkQueueNotifyOutOfBandNV( WriteBlockEnd(); } +void VulkanExportJsonConsumer::Process_vkCreateDataGraphPipelinesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId deferredOperation, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateDataGraphPipelinesARM"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + HandleToJson(args["deferredOperation"], deferredOperation, json_options); + HandleToJson(args["pipelineCache"], pipelineCache, json_options); + FieldToJson(args["createInfoCount"], createInfoCount, json_options); + FieldToJson(args["pCreateInfos"], pCreateInfos, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["pPipelines"], pPipelines, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCreateDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSession) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCreateDataGraphPipelineSessionARM"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pCreateInfo"], pCreateInfo, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + HandleToJson(args["pSession"], pSession, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetDataGraphPipelineSessionBindPointRequirementsARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pBindPointRequirementCount, + StructPointerDecoder* pBindPointRequirements) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDataGraphPipelineSessionBindPointRequirementsARM"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pInfo"], pInfo, json_options); + FieldToJson(args["pBindPointRequirementCount"], pBindPointRequirementCount, json_options); + FieldToJson(args["pBindPointRequirements"], pBindPointRequirements, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetDataGraphPipelineSessionMemoryRequirementsARM( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDataGraphPipelineSessionMemoryRequirementsARM"); + const JsonOptions& json_options = GetJsonOptions(); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pInfo"], pInfo, json_options); + FieldToJson(args["pMemoryRequirements"], pMemoryRequirements, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkBindDataGraphPipelineSessionMemoryARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + uint32_t bindInfoCount, + StructPointerDecoder* pBindInfos) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkBindDataGraphPipelineSessionMemoryARM"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + FieldToJson(args["bindInfoCount"], bindInfoCount, json_options); + FieldToJson(args["pBindInfos"], pBindInfos, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkDestroyDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId session, + StructPointerDecoder* pAllocator) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkDestroyDataGraphPipelineSessionARM"); + const JsonOptions& json_options = GetJsonOptions(); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + HandleToJson(args["session"], session, json_options); + FieldToJson(args["pAllocator"], pAllocator, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdDispatchDataGraphARM( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId session, + StructPointerDecoder* pInfo) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDispatchDataGraphARM"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + HandleToJson(args["session"], session, json_options); + FieldToJson(args["pInfo"], pInfo, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetDataGraphPipelineAvailablePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + PointerDecoder* pPropertiesCount, + PointerDecoder* pProperties) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDataGraphPipelineAvailablePropertiesARM"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pPipelineInfo"], pPipelineInfo, json_options); + FieldToJson(args["pPropertiesCount"], pPropertiesCount, json_options); + FieldToJson(args["pProperties"], pProperties, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetDataGraphPipelinePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + uint32_t propertiesCount, + StructPointerDecoder* pProperties) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetDataGraphPipelinePropertiesARM"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["device"], device, json_options); + FieldToJson(args["pPipelineInfo"], pPipelineInfo, json_options); + FieldToJson(args["propertiesCount"], propertiesCount, json_options); + FieldToJson(args["pProperties"], pProperties, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pQueueFamilyDataGraphPropertyCount, + StructPointerDecoder* pQueueFamilyDataGraphProperties) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["physicalDevice"], physicalDevice, json_options); + FieldToJson(args["queueFamilyIndex"], queueFamilyIndex, json_options); + FieldToJson(args["pQueueFamilyDataGraphPropertyCount"], pQueueFamilyDataGraphPropertyCount, json_options); + FieldToJson(args["pQueueFamilyDataGraphProperties"], pQueueFamilyDataGraphProperties, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineInfo, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineProperties) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM"); + const JsonOptions& json_options = GetJsonOptions(); + auto& args = jdata[NameArgs()]; + HandleToJson(args["physicalDevice"], physicalDevice, json_options); + FieldToJson(args["pQueueFamilyDataGraphProcessingEngineInfo"], pQueueFamilyDataGraphProcessingEngineInfo, json_options); + FieldToJson(args["pQueueFamilyDataGraphProcessingEngineProperties"], pQueueFamilyDataGraphProcessingEngineProperties, json_options); + WriteBlockEnd(); +} + void VulkanExportJsonConsumer::Process_vkCmdSetAttachmentFeedbackLoopEnableEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -10709,6 +11128,42 @@ void VulkanExportJsonConsumer::Process_vkCmdBindTileMemoryQCOM( WriteBlockEnd(); } +void VulkanExportJsonConsumer::Process_vkCmdDecompressMemoryEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pDecompressMemoryInfoEXT) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDecompressMemoryEXT"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pDecompressMemoryInfoEXT"], pDecompressMemoryInfoEXT, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdDecompressMemoryIndirectCountEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkMemoryDecompressionMethodFlagsEXT decompressionMethod, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t maxDecompressionCount, + uint32_t stride) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdDecompressMemoryIndirectCountEXT"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(VkMemoryDecompressionMethodFlagsEXT_t(), args["decompressionMethod"], decompressionMethod, json_options); + FieldToJsonAsHex(args["indirectCommandsAddress"], indirectCommandsAddress, json_options); + FieldToJsonAsHex(args["indirectCommandsCountAddress"], indirectCommandsCountAddress, json_options); + FieldToJson(args["maxDecompressionCount"], maxDecompressionCount, json_options); + FieldToJson(args["stride"], stride, json_options); + WriteBlockEnd(); +} + void VulkanExportJsonConsumer::Process_vkGetPartitionedAccelerationStructuresBuildSizesNV( const ApiCallInfo& call_info, format::HandleId device, @@ -10940,10 +11395,31 @@ void VulkanExportJsonConsumer::Process_vkGetMemoryMetalHandlePropertiesEXT( WriteBlockEnd(); } +void VulkanExportJsonConsumer::Process_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pCounterCount, + StructPointerDecoder* pCounters, + StructPointerDecoder* pCounterDescriptions) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameReturn()], returnValue, json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["physicalDevice"], physicalDevice, json_options); + FieldToJson(args["queueFamilyIndex"], queueFamilyIndex, json_options); + FieldToJson(args["pCounterCount"], pCounterCount, json_options); + FieldToJson(args["pCounters"], pCounters, json_options); + FieldToJson(args["pCounterDescriptions"], pCounterDescriptions, json_options); + WriteBlockEnd(); +} + void VulkanExportJsonConsumer::Process_vkCmdEndRendering2EXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pRenderingEndInfo) + StructPointerDecoder* pRenderingEndInfo) { nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdEndRendering2EXT"); const JsonOptions& json_options = GetJsonOptions(); @@ -10954,6 +11430,34 @@ void VulkanExportJsonConsumer::Process_vkCmdEndRendering2EXT( WriteBlockEnd(); } +void VulkanExportJsonConsumer::Process_vkCmdBeginCustomResolveEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pBeginCustomResolveInfo) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdBeginCustomResolveEXT"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pBeginCustomResolveInfo"], pBeginCustomResolveInfo, json_options); + WriteBlockEnd(); +} + +void VulkanExportJsonConsumer::Process_vkCmdSetComputeOccupancyPriorityNV( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pParameters) +{ + nlohmann::ordered_json& jdata = WriteApiCallStart(call_info, "vkCmdSetComputeOccupancyPriorityNV"); + const JsonOptions& json_options = GetJsonOptions(); + FieldToJson(jdata[NameCommandIndex()], GetCommandBufferRecordIndex(commandBuffer), json_options); + auto& args = jdata[NameArgs()]; + HandleToJson(args["commandBuffer"], commandBuffer, json_options); + FieldToJson(args["pParameters"], pParameters, json_options); + WriteBlockEnd(); +} + void VulkanExportJsonConsumer::Process_vkCreateAccelerationStructureKHR( const ApiCallInfo& call_info, VkResult returnValue, diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_json_consumer.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_json_consumer.h index f3a5c3a09..1a926d3cb 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_json_consumer.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_json_consumer.h @@ -299,38 +299,6 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId semaphore, StructPointerDecoder* pAllocator) override; - virtual void Process_vkCreateEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pEvent) override; - - virtual void Process_vkDestroyEvent( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId event, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkGetEventStatus( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) override; - - virtual void Process_vkSetEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) override; - - virtual void Process_vkResetEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) override; - virtual void Process_vkCreateQueryPool( const ApiCallInfo& call_info, VkResult returnValue, @@ -371,20 +339,6 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId buffer, StructPointerDecoder* pAllocator) override; - virtual void Process_vkCreateBufferView( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pView) override; - - virtual void Process_vkDestroyBufferView( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId bufferView, - StructPointerDecoder* pAllocator) override; - virtual void Process_vkCreateImage( const ApiCallInfo& call_info, VkResult returnValue, @@ -420,172 +374,6 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId imageView, StructPointerDecoder* pAllocator) override; - virtual void Process_vkDestroyShaderModule( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId shaderModule, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkDestroyPipelineCache( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId pipelineCache, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkMergePipelineCaches( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId dstCache, - uint32_t srcCacheCount, - HandlePointerDecoder* pSrcCaches) override; - - virtual void Process_vkCreateGraphicsPipelines( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId pipelineCache, - uint32_t createInfoCount, - StructPointerDecoder* pCreateInfos, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelines) override; - - virtual void Process_vkCreateComputePipelines( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId pipelineCache, - uint32_t createInfoCount, - StructPointerDecoder* pCreateInfos, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelines) override; - - virtual void Process_vkDestroyPipeline( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId pipeline, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkCreatePipelineLayout( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelineLayout) override; - - virtual void Process_vkDestroyPipelineLayout( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId pipelineLayout, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkCreateSampler( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pSampler) override; - - virtual void Process_vkDestroySampler( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId sampler, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkCreateDescriptorSetLayout( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pSetLayout) override; - - virtual void Process_vkDestroyDescriptorSetLayout( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId descriptorSetLayout, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkCreateDescriptorPool( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pDescriptorPool) override; - - virtual void Process_vkDestroyDescriptorPool( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId descriptorPool, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkResetDescriptorPool( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId descriptorPool, - VkDescriptorPoolResetFlags flags) override; - - virtual void Process_vkAllocateDescriptorSets( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pAllocateInfo, - HandlePointerDecoder* pDescriptorSets) override; - - virtual void Process_vkFreeDescriptorSets( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId descriptorPool, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets) override; - - virtual void Process_vkUpdateDescriptorSets( - const ApiCallInfo& call_info, - format::HandleId device, - uint32_t descriptorWriteCount, - StructPointerDecoder* pDescriptorWrites, - uint32_t descriptorCopyCount, - StructPointerDecoder* pDescriptorCopies) override; - - virtual void Process_vkCreateFramebuffer( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pFramebuffer) override; - - virtual void Process_vkDestroyFramebuffer( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId framebuffer, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkCreateRenderPass( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pRenderPass) override; - - virtual void Process_vkDestroyRenderPass( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId renderPass, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkGetRenderAreaGranularity( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId renderPass, - StructPointerDecoder* pGranularity) override; - virtual void Process_vkCreateCommandPool( const ApiCallInfo& call_info, VkResult returnValue, @@ -638,237 +426,321 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId commandBuffer, VkCommandBufferResetFlags flags) override; - virtual void Process_vkCmdBindPipeline( + virtual void Process_vkCmdCopyBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - format::HandleId pipeline) override; + format::HandleId srcBuffer, + format::HandleId dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; - virtual void Process_vkCmdSetViewport( + virtual void Process_vkCmdCopyImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t firstViewport, - uint32_t viewportCount, - StructPointerDecoder* pViewports) override; + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; - virtual void Process_vkCmdSetScissor( + virtual void Process_vkCmdCopyBufferToImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t firstScissor, - uint32_t scissorCount, - StructPointerDecoder* pScissors) override; + format::HandleId srcBuffer, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; - virtual void Process_vkCmdSetLineWidth( + virtual void Process_vkCmdCopyImageToBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, - float lineWidth) override; + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; - virtual void Process_vkCmdSetDepthBias( + virtual void Process_vkCmdUpdateBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, - float depthBiasConstantFactor, - float depthBiasClamp, - float depthBiasSlopeFactor) override; - - virtual void Process_vkCmdSetBlendConstants( + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize dataSize, + PointerDecoder* pData) override; + + virtual void Process_vkCmdFillBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, - PointerDecoder* blendConstants) override; + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize size, + uint32_t data) override; - virtual void Process_vkCmdSetDepthBounds( + virtual void Process_vkCmdPipelineBarrier( const ApiCallInfo& call_info, format::HandleId commandBuffer, - float minDepthBounds, - float maxDepthBounds) override; + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkDependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + StructPointerDecoder* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + StructPointerDecoder* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + StructPointerDecoder* pImageMemoryBarriers) override; - virtual void Process_vkCmdSetStencilCompareMask( + virtual void Process_vkCmdBeginQuery( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t compareMask) override; + format::HandleId queryPool, + uint32_t query, + VkQueryControlFlags flags) override; - virtual void Process_vkCmdSetStencilWriteMask( + virtual void Process_vkCmdEndQuery( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t writeMask) override; + format::HandleId queryPool, + uint32_t query) override; - virtual void Process_vkCmdSetStencilReference( + virtual void Process_vkCmdResetQueryPool( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t reference) override; + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount) override; - virtual void Process_vkCmdBindDescriptorSets( + virtual void Process_vkCmdWriteTimestamp( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - format::HandleId layout, - uint32_t firstSet, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets, - uint32_t dynamicOffsetCount, - PointerDecoder* pDynamicOffsets) override; + VkPipelineStageFlagBits pipelineStage, + format::HandleId queryPool, + uint32_t query) override; - virtual void Process_vkCmdBindIndexBuffer( + virtual void Process_vkCmdCopyQueryPoolResults( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkIndexType indexType) override; + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags) override; - virtual void Process_vkCmdBindVertexBuffers( + virtual void Process_vkCmdExecuteCommands( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - HandlePointerDecoder* pBuffers, - PointerDecoder* pOffsets) override; + uint32_t commandBufferCount, + HandlePointerDecoder* pCommandBuffers) override; - virtual void Process_vkCmdDraw( + virtual void Process_vkCreateEvent( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t vertexCount, - uint32_t instanceCount, - uint32_t firstVertex, - uint32_t firstInstance) override; + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pEvent) override; - virtual void Process_vkCmdDrawIndexed( + virtual void Process_vkDestroyEvent( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t indexCount, - uint32_t instanceCount, - uint32_t firstIndex, - int32_t vertexOffset, - uint32_t firstInstance) override; + format::HandleId device, + format::HandleId event, + StructPointerDecoder* pAllocator) override; - virtual void Process_vkCmdDrawIndirect( + virtual void Process_vkGetEventStatus( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) override; + VkResult returnValue, + format::HandleId device, + format::HandleId event) override; - virtual void Process_vkCmdDrawIndexedIndirect( + virtual void Process_vkSetEvent( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) override; + VkResult returnValue, + format::HandleId device, + format::HandleId event) override; - virtual void Process_vkCmdDispatch( + virtual void Process_vkResetEvent( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) override; + VkResult returnValue, + format::HandleId device, + format::HandleId event) override; - virtual void Process_vkCmdDispatchIndirect( + virtual void Process_vkCreateBufferView( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset) override; + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pView) override; - virtual void Process_vkCmdCopyBuffer( + virtual void Process_vkDestroyBufferView( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcBuffer, - format::HandleId dstBuffer, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; + format::HandleId device, + format::HandleId bufferView, + StructPointerDecoder* pAllocator) override; - virtual void Process_vkCmdCopyImage( + virtual void Process_vkDestroyShaderModule( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; + format::HandleId device, + format::HandleId shaderModule, + StructPointerDecoder* pAllocator) override; - virtual void Process_vkCmdBlitImage( + virtual void Process_vkDestroyPipelineCache( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions, - VkFilter filter) override; + format::HandleId device, + format::HandleId pipelineCache, + StructPointerDecoder* pAllocator) override; - virtual void Process_vkCmdCopyBufferToImage( + virtual void Process_vkMergePipelineCaches( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcBuffer, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; + VkResult returnValue, + format::HandleId device, + format::HandleId dstCache, + uint32_t srcCacheCount, + HandlePointerDecoder* pSrcCaches) override; - virtual void Process_vkCmdCopyImageToBuffer( + virtual void Process_vkCreateComputePipelines( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstBuffer, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; + VkResult returnValue, + format::HandleId device, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) override; - virtual void Process_vkCmdUpdateBuffer( + virtual void Process_vkDestroyPipeline( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize dataSize, - PointerDecoder* pData) override; + format::HandleId device, + format::HandleId pipeline, + StructPointerDecoder* pAllocator) override; - virtual void Process_vkCmdFillBuffer( + virtual void Process_vkCreatePipelineLayout( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelineLayout) override; + + virtual void Process_vkDestroyPipelineLayout( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId pipelineLayout, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkCreateSampler( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSampler) override; + + virtual void Process_vkDestroySampler( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId sampler, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkCreateDescriptorSetLayout( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSetLayout) override; + + virtual void Process_vkDestroyDescriptorSetLayout( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId descriptorSetLayout, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkCreateDescriptorPool( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pDescriptorPool) override; + + virtual void Process_vkDestroyDescriptorPool( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId descriptorPool, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkResetDescriptorPool( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId descriptorPool, + VkDescriptorPoolResetFlags flags) override; + + virtual void Process_vkAllocateDescriptorSets( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pAllocateInfo, + HandlePointerDecoder* pDescriptorSets) override; + + virtual void Process_vkFreeDescriptorSets( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId descriptorPool, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets) override; + + virtual void Process_vkUpdateDescriptorSets( + const ApiCallInfo& call_info, + format::HandleId device, + uint32_t descriptorWriteCount, + StructPointerDecoder* pDescriptorWrites, + uint32_t descriptorCopyCount, + StructPointerDecoder* pDescriptorCopies) override; + + virtual void Process_vkCmdBindPipeline( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize size, - uint32_t data) override; + VkPipelineBindPoint pipelineBindPoint, + format::HandleId pipeline) override; - virtual void Process_vkCmdClearColorImage( + virtual void Process_vkCmdBindDescriptorSets( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId image, - VkImageLayout imageLayout, - StructPointerDecoder* pColor, - uint32_t rangeCount, - StructPointerDecoder* pRanges) override; + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets, + uint32_t dynamicOffsetCount, + PointerDecoder* pDynamicOffsets) override; - virtual void Process_vkCmdClearDepthStencilImage( + virtual void Process_vkCmdClearColorImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, format::HandleId image, VkImageLayout imageLayout, - StructPointerDecoder* pDepthStencil, + StructPointerDecoder* pColor, uint32_t rangeCount, StructPointerDecoder* pRanges) override; - virtual void Process_vkCmdClearAttachments( + virtual void Process_vkCmdDispatch( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t attachmentCount, - StructPointerDecoder* pAttachments, - uint32_t rectCount, - StructPointerDecoder* pRects) override; + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) override; - virtual void Process_vkCmdResolveImage( + virtual void Process_vkCmdDispatchIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; + format::HandleId buffer, + VkDeviceSize offset) override; virtual void Process_vkCmdSetEvent( const ApiCallInfo& call_info, @@ -896,56 +768,190 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase uint32_t imageMemoryBarrierCount, StructPointerDecoder* pImageMemoryBarriers) override; - virtual void Process_vkCmdPipelineBarrier( + virtual void Process_vkCreateGraphicsPipelines( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) override; + + virtual void Process_vkCreateFramebuffer( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pFramebuffer) override; + + virtual void Process_vkDestroyFramebuffer( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId framebuffer, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkCreateRenderPass( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pRenderPass) override; + + virtual void Process_vkDestroyRenderPass( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId renderPass, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkGetRenderAreaGranularity( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId renderPass, + StructPointerDecoder* pGranularity) override; + + virtual void Process_vkCmdSetViewport( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - StructPointerDecoder* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - StructPointerDecoder* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - StructPointerDecoder* pImageMemoryBarriers) override; + uint32_t firstViewport, + uint32_t viewportCount, + StructPointerDecoder* pViewports) override; - virtual void Process_vkCmdBeginQuery( + virtual void Process_vkCmdSetScissor( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t query, - VkQueryControlFlags flags) override; + uint32_t firstScissor, + uint32_t scissorCount, + StructPointerDecoder* pScissors) override; + + virtual void Process_vkCmdSetLineWidth( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + float lineWidth) override; + + virtual void Process_vkCmdSetDepthBias( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + float depthBiasConstantFactor, + float depthBiasClamp, + float depthBiasSlopeFactor) override; + + virtual void Process_vkCmdSetBlendConstants( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + PointerDecoder* blendConstants) override; + + virtual void Process_vkCmdSetDepthBounds( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + float minDepthBounds, + float maxDepthBounds) override; + + virtual void Process_vkCmdSetStencilCompareMask( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkStencilFaceFlags faceMask, + uint32_t compareMask) override; + + virtual void Process_vkCmdSetStencilWriteMask( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkStencilFaceFlags faceMask, + uint32_t writeMask) override; + + virtual void Process_vkCmdSetStencilReference( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkStencilFaceFlags faceMask, + uint32_t reference) override; + + virtual void Process_vkCmdBindIndexBuffer( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + VkIndexType indexType) override; + + virtual void Process_vkCmdBindVertexBuffers( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + HandlePointerDecoder* pBuffers, + PointerDecoder* pOffsets) override; + + virtual void Process_vkCmdDraw( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t vertexCount, + uint32_t instanceCount, + uint32_t firstVertex, + uint32_t firstInstance) override; + + virtual void Process_vkCmdDrawIndexed( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t indexCount, + uint32_t instanceCount, + uint32_t firstIndex, + int32_t vertexOffset, + uint32_t firstInstance) override; + + virtual void Process_vkCmdDrawIndirect( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) override; + + virtual void Process_vkCmdDrawIndexedIndirect( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) override; - virtual void Process_vkCmdEndQuery( + virtual void Process_vkCmdBlitImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t query) override; + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + VkFilter filter) override; - virtual void Process_vkCmdResetQueryPool( + virtual void Process_vkCmdClearDepthStencilImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount) override; + format::HandleId image, + VkImageLayout imageLayout, + StructPointerDecoder* pDepthStencil, + uint32_t rangeCount, + StructPointerDecoder* pRanges) override; - virtual void Process_vkCmdWriteTimestamp( + virtual void Process_vkCmdClearAttachments( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlagBits pipelineStage, - format::HandleId queryPool, - uint32_t query) override; + uint32_t attachmentCount, + StructPointerDecoder* pAttachments, + uint32_t rectCount, + StructPointerDecoder* pRects) override; - virtual void Process_vkCmdCopyQueryPoolResults( + virtual void Process_vkCmdResolveImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags) override; + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; virtual void Process_vkCmdBeginRenderPass( const ApiCallInfo& call_info, @@ -962,12 +968,6 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase const ApiCallInfo& call_info, format::HandleId commandBuffer) override; - virtual void Process_vkCmdExecuteCommands( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t commandBufferCount, - HandlePointerDecoder* pCommandBuffers) override; - virtual void Process_vkBindBufferMemory2( const ApiCallInfo& call_info, VkResult returnValue, @@ -995,16 +995,6 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId commandBuffer, uint32_t deviceMask) override; - virtual void Process_vkCmdDispatchBase( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) override; - virtual void Process_vkEnumeratePhysicalDeviceGroups( const ApiCallInfo& call_info, VkResult returnValue, @@ -1084,34 +1074,6 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase StructPointerDecoder* pQueueInfo, HandlePointerDecoder* pQueue) override; - virtual void Process_vkCreateSamplerYcbcrConversion( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pYcbcrConversion) override; - - virtual void Process_vkDestroySamplerYcbcrConversion( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId ycbcrConversion, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkCreateDescriptorUpdateTemplate( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pDescriptorUpdateTemplate) override; - - virtual void Process_vkDestroyDescriptorUpdateTemplate( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId descriptorUpdateTemplate, - StructPointerDecoder* pAllocator) override; - virtual void Process_vkGetPhysicalDeviceExternalBufferProperties( const ApiCallInfo& call_info, format::HandleId physicalDevice, @@ -1130,56 +1092,49 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase StructPointerDecoder* pExternalSemaphoreInfo, StructPointerDecoder* pExternalSemaphoreProperties) override; - virtual void Process_vkGetDescriptorSetLayoutSupport( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pSupport) override; - - virtual void Process_vkCmdDrawIndirectCount( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - format::HandleId countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) override; - - virtual void Process_vkCmdDrawIndexedIndirectCount( + virtual void Process_vkCmdDispatchBase( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - format::HandleId countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) override; + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) override; - virtual void Process_vkCreateRenderPass2( + virtual void Process_vkCreateDescriptorUpdateTemplate( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pCreateInfo, StructPointerDecoder* pAllocator, - HandlePointerDecoder* pRenderPass) override; + HandlePointerDecoder* pDescriptorUpdateTemplate) override; - virtual void Process_vkCmdBeginRenderPass2( + virtual void Process_vkDestroyDescriptorUpdateTemplate( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pRenderPassBegin, - StructPointerDecoder* pSubpassBeginInfo) override; + format::HandleId device, + format::HandleId descriptorUpdateTemplate, + StructPointerDecoder* pAllocator) override; - virtual void Process_vkCmdNextSubpass2( + virtual void Process_vkGetDescriptorSetLayoutSupport( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pSubpassBeginInfo, - StructPointerDecoder* pSubpassEndInfo) override; + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pSupport) override; - virtual void Process_vkCmdEndRenderPass2( + virtual void Process_vkCreateSamplerYcbcrConversion( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pSubpassEndInfo) override; + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pYcbcrConversion) override; + + virtual void Process_vkDestroySamplerYcbcrConversion( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId ycbcrConversion, + StructPointerDecoder* pAllocator) override; virtual void Process_vkResetQueryPool( const ApiCallInfo& call_info, @@ -1226,6 +1181,51 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId device, StructPointerDecoder* pInfo) override; + virtual void Process_vkCmdDrawIndirectCount( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + format::HandleId countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) override; + + virtual void Process_vkCmdDrawIndexedIndirectCount( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + format::HandleId countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) override; + + virtual void Process_vkCreateRenderPass2( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pRenderPass) override; + + virtual void Process_vkCmdBeginRenderPass2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pRenderPassBegin, + StructPointerDecoder* pSubpassBeginInfo) override; + + virtual void Process_vkCmdNextSubpass2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pSubpassBeginInfo, + StructPointerDecoder* pSubpassEndInfo) override; + + virtual void Process_vkCmdEndRenderPass2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pSubpassEndInfo) override; + virtual void Process_vkGetPhysicalDeviceToolProperties( const ApiCallInfo& call_info, VkResult returnValue, @@ -1264,25 +1264,6 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId privateDataSlot, PointerDecoder* pData) override; - virtual void Process_vkCmdSetEvent2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - StructPointerDecoder* pDependencyInfo) override; - - virtual void Process_vkCmdResetEvent2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags2 stageMask) override; - - virtual void Process_vkCmdWaitEvents2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t eventCount, - HandlePointerDecoder* pEvents, - StructPointerDecoder* pDependencyInfos) override; - virtual void Process_vkCmdPipelineBarrier2( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -1308,20 +1289,58 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pCopyBufferInfo) override; - virtual void Process_vkCmdCopyImage2( + virtual void Process_vkCmdCopyImage2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyImageInfo) override; + + virtual void Process_vkCmdCopyBufferToImage2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyBufferToImageInfo) override; + + virtual void Process_vkCmdCopyImageToBuffer2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyImageToBufferInfo) override; + + virtual void Process_vkGetDeviceBufferMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) override; + + virtual void Process_vkGetDeviceImageMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) override; + + virtual void Process_vkGetDeviceImageSparseMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pSparseMemoryRequirementCount, + StructPointerDecoder* pSparseMemoryRequirements) override; + + virtual void Process_vkCmdSetEvent2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyImageInfo) override; + format::HandleId event, + StructPointerDecoder* pDependencyInfo) override; - virtual void Process_vkCmdCopyBufferToImage2( + virtual void Process_vkCmdResetEvent2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyBufferToImageInfo) override; + format::HandleId event, + VkPipelineStageFlags2 stageMask) override; - virtual void Process_vkCmdCopyImageToBuffer2( + virtual void Process_vkCmdWaitEvents2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyImageToBufferInfo) override; + uint32_t eventCount, + HandlePointerDecoder* pEvents, + StructPointerDecoder* pDependencyInfos) override; virtual void Process_vkCmdBlitImage2( const ApiCallInfo& call_info, @@ -1428,31 +1447,6 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId commandBuffer, VkBool32 primitiveRestartEnable) override; - virtual void Process_vkGetDeviceBufferMemoryRequirements( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pMemoryRequirements) override; - - virtual void Process_vkGetDeviceImageMemoryRequirements( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pMemoryRequirements) override; - - virtual void Process_vkGetDeviceImageSparseMemoryRequirements( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - PointerDecoder* pSparseMemoryRequirementCount, - StructPointerDecoder* pSparseMemoryRequirements) override; - - virtual void Process_vkCmdSetLineStipple( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t lineStippleFactor, - uint16_t lineStipplePattern) override; - virtual void Process_vkMapMemory2( const ApiCallInfo& call_info, VkResult returnValue, @@ -1466,20 +1460,6 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId device, StructPointerDecoder* pMemoryUnmapInfo) override; - virtual void Process_vkCmdBindIndexBuffer2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkDeviceSize size, - VkIndexType indexType) override; - - virtual void Process_vkGetRenderingAreaGranularity( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pRenderingAreaInfo, - StructPointerDecoder* pGranularity) override; - virtual void Process_vkGetDeviceImageSubresourceLayout( const ApiCallInfo& call_info, format::HandleId device, @@ -1493,6 +1473,31 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase StructPointerDecoder* pSubresource, StructPointerDecoder* pLayout) override; + virtual void Process_vkCopyMemoryToImage( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyMemoryToImageInfo) override; + + virtual void Process_vkCopyImageToMemory( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyImageToMemoryInfo) override; + + virtual void Process_vkCopyImageToImage( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyImageToImageInfo) override; + + virtual void Process_vkTransitionImageLayout( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + uint32_t transitionCount, + StructPointerDecoder* pTransitions) override; + virtual void Process_vkCmdPushDescriptorSet( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -1502,16 +1507,6 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase uint32_t descriptorWriteCount, StructPointerDecoder* pDescriptorWrites) override; - virtual void Process_vkCmdSetRenderingAttachmentLocations( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pLocationInfo) override; - - virtual void Process_vkCmdSetRenderingInputAttachmentIndices( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pInputAttachmentIndexInfo) override; - virtual void Process_vkCmdBindDescriptorSets2( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -1527,30 +1522,35 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pPushDescriptorSetInfo) override; - virtual void Process_vkCopyMemoryToImage( + virtual void Process_vkCmdSetLineStipple( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCopyMemoryToImageInfo) override; + format::HandleId commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern) override; - virtual void Process_vkCopyImageToMemory( + virtual void Process_vkCmdBindIndexBuffer2( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCopyImageToMemoryInfo) override; + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType) override; - virtual void Process_vkCopyImageToImage( + virtual void Process_vkGetRenderingAreaGranularity( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCopyImageToImageInfo) override; + StructPointerDecoder* pRenderingAreaInfo, + StructPointerDecoder* pGranularity) override; - virtual void Process_vkTransitionImageLayout( + virtual void Process_vkCmdSetRenderingAttachmentLocations( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - uint32_t transitionCount, - StructPointerDecoder* pTransitions) override; + format::HandleId commandBuffer, + StructPointerDecoder* pLocationInfo) override; + + virtual void Process_vkCmdSetRenderingInputAttachmentIndices( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pInputAttachmentIndexInfo) override; virtual void Process_vkDestroySurfaceKHR( const ApiCallInfo& call_info, @@ -2638,6 +2638,21 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pBindDescriptorBufferEmbeddedSamplersInfo) override; + virtual void Process_vkCmdCopyMemoryIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryIndirectInfo) override; + + virtual void Process_vkCmdCopyMemoryToImageIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryToImageIndirectInfo) override; + + virtual void Process_vkCmdEndRendering2KHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pRenderingEndInfo) override; + virtual void Process_vkFrameBoundaryANDROID( const ApiCallInfo& call_info, format::HandleId device, @@ -3317,6 +3332,36 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase PointerDecoder* pCheckpointDataCount, StructPointerDecoder* pCheckpointData) override; + virtual void Process_vkSetSwapchainPresentTimingQueueSizeEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + uint32_t size) override; + + virtual void Process_vkGetSwapchainTimingPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimingProperties, + PointerDecoder* pSwapchainTimingPropertiesCounter) override; + + virtual void Process_vkGetSwapchainTimeDomainPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimeDomainProperties, + PointerDecoder* pTimeDomainsCounter) override; + + virtual void Process_vkGetPastPresentationTimingEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPastPresentationTimingInfo, + StructPointerDecoder* pPastPresentationTimingProperties) override; + virtual void Process_vkInitializePerformanceApiINTEL( const ApiCallInfo& call_info, VkResult returnValue, @@ -3681,6 +3726,49 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pPerTileEndInfo) override; + virtual void Process_vkGetDescriptorSetLayoutSizeEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + PointerDecoder* pLayoutSizeInBytes) override; + + virtual void Process_vkGetDescriptorSetLayoutBindingOffsetEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + uint32_t binding, + PointerDecoder* pOffset) override; + + virtual void Process_vkGetDescriptorEXT( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pDescriptorInfo, + size_t dataSize, + PointerDecoder* pDescriptor) override; + + virtual void Process_vkCmdBindDescriptorBuffersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t bufferCount, + StructPointerDecoder* pBindingInfos) override; + + virtual void Process_vkCmdSetDescriptorBufferOffsetsEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t setCount, + PointerDecoder* pBufferIndices, + PointerDecoder* pOffsets) override; + + virtual void Process_vkCmdBindDescriptorBufferEmbeddedSamplersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t set) override; + virtual void Process_vkCmdSetFragmentShadingRateEnumNV( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -4304,6 +4392,88 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId queue, StructPointerDecoder* pQueueTypeInfo) override; + virtual void Process_vkCreateDataGraphPipelinesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId deferredOperation, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) override; + + virtual void Process_vkCreateDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSession) override; + + virtual void Process_vkGetDataGraphPipelineSessionBindPointRequirementsARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pBindPointRequirementCount, + StructPointerDecoder* pBindPointRequirements) override; + + virtual void Process_vkGetDataGraphPipelineSessionMemoryRequirementsARM( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) override; + + virtual void Process_vkBindDataGraphPipelineSessionMemoryARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + uint32_t bindInfoCount, + StructPointerDecoder* pBindInfos) override; + + virtual void Process_vkDestroyDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId session, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkCmdDispatchDataGraphARM( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId session, + StructPointerDecoder* pInfo) override; + + virtual void Process_vkGetDataGraphPipelineAvailablePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + PointerDecoder* pPropertiesCount, + PointerDecoder* pProperties) override; + + virtual void Process_vkGetDataGraphPipelinePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + uint32_t propertiesCount, + StructPointerDecoder* pProperties) override; + + virtual void Process_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pQueueFamilyDataGraphPropertyCount, + StructPointerDecoder* pQueueFamilyDataGraphProperties) override; + + virtual void Process_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineInfo, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineProperties) override; + virtual void Process_vkCmdSetAttachmentFeedbackLoopEnableEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -4314,6 +4484,20 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pTileMemoryBindInfo) override; + virtual void Process_vkCmdDecompressMemoryEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pDecompressMemoryInfoEXT) override; + + virtual void Process_vkCmdDecompressMemoryIndirectCountEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkMemoryDecompressionMethodFlagsEXT decompressionMethod, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t maxDecompressionCount, + uint32_t stride) override; + virtual void Process_vkGetPartitionedAccelerationStructuresBuildSizesNV( const ApiCallInfo& call_info, format::HandleId device, @@ -4407,10 +4591,29 @@ class VulkanExportJsonConsumer : public VulkanExportJsonConsumerBase uint64_t pHandle, StructPointerDecoder* pMemoryMetalHandleProperties) override; + virtual void Process_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pCounterCount, + StructPointerDecoder* pCounters, + StructPointerDecoder* pCounterDescriptions) override; + virtual void Process_vkCmdEndRendering2EXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pRenderingEndInfo) override; + StructPointerDecoder* pRenderingEndInfo) override; + + virtual void Process_vkCmdBeginCustomResolveEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pBeginCustomResolveInfo) override; + + virtual void Process_vkCmdSetComputeOccupancyPriorityNV( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pParameters) override; virtual void Process_vkCreateAccelerationStructureKHR( const ApiCallInfo& call_info, diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_layer_func_table.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_layer_func_table.h index e91504ccd..e03dca6f6 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_layer_func_table.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_layer_func_table.h @@ -93,30 +93,50 @@ static inline const std::unordered_map GetVulka { "vkWaitForFences", reinterpret_cast(encode::vkWaitForFences) }, { "vkCreateSemaphore", reinterpret_cast(encode::vkCreateSemaphore) }, { "vkDestroySemaphore", reinterpret_cast(encode::vkDestroySemaphore) }, - { "vkCreateEvent", reinterpret_cast(encode::vkCreateEvent) }, - { "vkDestroyEvent", reinterpret_cast(encode::vkDestroyEvent) }, - { "vkGetEventStatus", reinterpret_cast(encode::vkGetEventStatus) }, - { "vkSetEvent", reinterpret_cast(encode::vkSetEvent) }, - { "vkResetEvent", reinterpret_cast(encode::vkResetEvent) }, { "vkCreateQueryPool", reinterpret_cast(encode::vkCreateQueryPool) }, { "vkDestroyQueryPool", reinterpret_cast(encode::vkDestroyQueryPool) }, { "vkGetQueryPoolResults", reinterpret_cast(encode::vkGetQueryPoolResults) }, { "vkCreateBuffer", reinterpret_cast(encode::vkCreateBuffer) }, { "vkDestroyBuffer", reinterpret_cast(encode::vkDestroyBuffer) }, - { "vkCreateBufferView", reinterpret_cast(encode::vkCreateBufferView) }, - { "vkDestroyBufferView", reinterpret_cast(encode::vkDestroyBufferView) }, { "vkCreateImage", reinterpret_cast(encode::vkCreateImage) }, { "vkDestroyImage", reinterpret_cast(encode::vkDestroyImage) }, { "vkGetImageSubresourceLayout", reinterpret_cast(encode::vkGetImageSubresourceLayout) }, { "vkCreateImageView", reinterpret_cast(encode::vkCreateImageView) }, { "vkDestroyImageView", reinterpret_cast(encode::vkDestroyImageView) }, + { "vkCreateCommandPool", reinterpret_cast(encode::vkCreateCommandPool) }, + { "vkDestroyCommandPool", reinterpret_cast(encode::vkDestroyCommandPool) }, + { "vkResetCommandPool", reinterpret_cast(encode::vkResetCommandPool) }, + { "vkAllocateCommandBuffers", reinterpret_cast(encode::vkAllocateCommandBuffers) }, + { "vkFreeCommandBuffers", reinterpret_cast(encode::vkFreeCommandBuffers) }, + { "vkBeginCommandBuffer", reinterpret_cast(encode::vkBeginCommandBuffer) }, + { "vkEndCommandBuffer", reinterpret_cast(encode::vkEndCommandBuffer) }, + { "vkResetCommandBuffer", reinterpret_cast(encode::vkResetCommandBuffer) }, + { "vkCmdCopyBuffer", reinterpret_cast(encode::vkCmdCopyBuffer) }, + { "vkCmdCopyImage", reinterpret_cast(encode::vkCmdCopyImage) }, + { "vkCmdCopyBufferToImage", reinterpret_cast(encode::vkCmdCopyBufferToImage) }, + { "vkCmdCopyImageToBuffer", reinterpret_cast(encode::vkCmdCopyImageToBuffer) }, + { "vkCmdUpdateBuffer", reinterpret_cast(encode::vkCmdUpdateBuffer) }, + { "vkCmdFillBuffer", reinterpret_cast(encode::vkCmdFillBuffer) }, + { "vkCmdPipelineBarrier", reinterpret_cast(encode::vkCmdPipelineBarrier) }, + { "vkCmdBeginQuery", reinterpret_cast(encode::vkCmdBeginQuery) }, + { "vkCmdEndQuery", reinterpret_cast(encode::vkCmdEndQuery) }, + { "vkCmdResetQueryPool", reinterpret_cast(encode::vkCmdResetQueryPool) }, + { "vkCmdWriteTimestamp", reinterpret_cast(encode::vkCmdWriteTimestamp) }, + { "vkCmdCopyQueryPoolResults", reinterpret_cast(encode::vkCmdCopyQueryPoolResults) }, + { "vkCmdExecuteCommands", reinterpret_cast(encode::vkCmdExecuteCommands) }, + { "vkCreateEvent", reinterpret_cast(encode::vkCreateEvent) }, + { "vkDestroyEvent", reinterpret_cast(encode::vkDestroyEvent) }, + { "vkGetEventStatus", reinterpret_cast(encode::vkGetEventStatus) }, + { "vkSetEvent", reinterpret_cast(encode::vkSetEvent) }, + { "vkResetEvent", reinterpret_cast(encode::vkResetEvent) }, + { "vkCreateBufferView", reinterpret_cast(encode::vkCreateBufferView) }, + { "vkDestroyBufferView", reinterpret_cast(encode::vkDestroyBufferView) }, { "vkCreateShaderModule", reinterpret_cast(encode::vkCreateShaderModule) }, { "vkDestroyShaderModule", reinterpret_cast(encode::vkDestroyShaderModule) }, { "vkCreatePipelineCache", reinterpret_cast(encode::vkCreatePipelineCache) }, { "vkDestroyPipelineCache", reinterpret_cast(encode::vkDestroyPipelineCache) }, { "vkGetPipelineCacheData", reinterpret_cast(encode::vkGetPipelineCacheData) }, { "vkMergePipelineCaches", reinterpret_cast(encode::vkMergePipelineCaches) }, - { "vkCreateGraphicsPipelines", reinterpret_cast(encode::vkCreateGraphicsPipelines) }, { "vkCreateComputePipelines", reinterpret_cast(encode::vkCreateComputePipelines) }, { "vkDestroyPipeline", reinterpret_cast(encode::vkDestroyPipeline) }, { "vkCreatePipelineLayout", reinterpret_cast(encode::vkCreatePipelineLayout) }, @@ -131,20 +151,21 @@ static inline const std::unordered_map GetVulka { "vkAllocateDescriptorSets", reinterpret_cast(encode::vkAllocateDescriptorSets) }, { "vkFreeDescriptorSets", reinterpret_cast(encode::vkFreeDescriptorSets) }, { "vkUpdateDescriptorSets", reinterpret_cast(encode::vkUpdateDescriptorSets) }, + { "vkCmdBindPipeline", reinterpret_cast(encode::vkCmdBindPipeline) }, + { "vkCmdBindDescriptorSets", reinterpret_cast(encode::vkCmdBindDescriptorSets) }, + { "vkCmdClearColorImage", reinterpret_cast(encode::vkCmdClearColorImage) }, + { "vkCmdDispatch", reinterpret_cast(encode::vkCmdDispatch) }, + { "vkCmdDispatchIndirect", reinterpret_cast(encode::vkCmdDispatchIndirect) }, + { "vkCmdSetEvent", reinterpret_cast(encode::vkCmdSetEvent) }, + { "vkCmdResetEvent", reinterpret_cast(encode::vkCmdResetEvent) }, + { "vkCmdWaitEvents", reinterpret_cast(encode::vkCmdWaitEvents) }, + { "vkCmdPushConstants", reinterpret_cast(encode::vkCmdPushConstants) }, + { "vkCreateGraphicsPipelines", reinterpret_cast(encode::vkCreateGraphicsPipelines) }, { "vkCreateFramebuffer", reinterpret_cast(encode::vkCreateFramebuffer) }, { "vkDestroyFramebuffer", reinterpret_cast(encode::vkDestroyFramebuffer) }, { "vkCreateRenderPass", reinterpret_cast(encode::vkCreateRenderPass) }, { "vkDestroyRenderPass", reinterpret_cast(encode::vkDestroyRenderPass) }, { "vkGetRenderAreaGranularity", reinterpret_cast(encode::vkGetRenderAreaGranularity) }, - { "vkCreateCommandPool", reinterpret_cast(encode::vkCreateCommandPool) }, - { "vkDestroyCommandPool", reinterpret_cast(encode::vkDestroyCommandPool) }, - { "vkResetCommandPool", reinterpret_cast(encode::vkResetCommandPool) }, - { "vkAllocateCommandBuffers", reinterpret_cast(encode::vkAllocateCommandBuffers) }, - { "vkFreeCommandBuffers", reinterpret_cast(encode::vkFreeCommandBuffers) }, - { "vkBeginCommandBuffer", reinterpret_cast(encode::vkBeginCommandBuffer) }, - { "vkEndCommandBuffer", reinterpret_cast(encode::vkEndCommandBuffer) }, - { "vkResetCommandBuffer", reinterpret_cast(encode::vkResetCommandBuffer) }, - { "vkCmdBindPipeline", reinterpret_cast(encode::vkCmdBindPipeline) }, { "vkCmdSetViewport", reinterpret_cast(encode::vkCmdSetViewport) }, { "vkCmdSetScissor", reinterpret_cast(encode::vkCmdSetScissor) }, { "vkCmdSetLineWidth", reinterpret_cast(encode::vkCmdSetLineWidth) }, @@ -154,45 +175,23 @@ static inline const std::unordered_map GetVulka { "vkCmdSetStencilCompareMask", reinterpret_cast(encode::vkCmdSetStencilCompareMask) }, { "vkCmdSetStencilWriteMask", reinterpret_cast(encode::vkCmdSetStencilWriteMask) }, { "vkCmdSetStencilReference", reinterpret_cast(encode::vkCmdSetStencilReference) }, - { "vkCmdBindDescriptorSets", reinterpret_cast(encode::vkCmdBindDescriptorSets) }, { "vkCmdBindIndexBuffer", reinterpret_cast(encode::vkCmdBindIndexBuffer) }, { "vkCmdBindVertexBuffers", reinterpret_cast(encode::vkCmdBindVertexBuffers) }, { "vkCmdDraw", reinterpret_cast(encode::vkCmdDraw) }, { "vkCmdDrawIndexed", reinterpret_cast(encode::vkCmdDrawIndexed) }, { "vkCmdDrawIndirect", reinterpret_cast(encode::vkCmdDrawIndirect) }, { "vkCmdDrawIndexedIndirect", reinterpret_cast(encode::vkCmdDrawIndexedIndirect) }, - { "vkCmdDispatch", reinterpret_cast(encode::vkCmdDispatch) }, - { "vkCmdDispatchIndirect", reinterpret_cast(encode::vkCmdDispatchIndirect) }, - { "vkCmdCopyBuffer", reinterpret_cast(encode::vkCmdCopyBuffer) }, - { "vkCmdCopyImage", reinterpret_cast(encode::vkCmdCopyImage) }, { "vkCmdBlitImage", reinterpret_cast(encode::vkCmdBlitImage) }, - { "vkCmdCopyBufferToImage", reinterpret_cast(encode::vkCmdCopyBufferToImage) }, - { "vkCmdCopyImageToBuffer", reinterpret_cast(encode::vkCmdCopyImageToBuffer) }, - { "vkCmdUpdateBuffer", reinterpret_cast(encode::vkCmdUpdateBuffer) }, - { "vkCmdFillBuffer", reinterpret_cast(encode::vkCmdFillBuffer) }, - { "vkCmdClearColorImage", reinterpret_cast(encode::vkCmdClearColorImage) }, { "vkCmdClearDepthStencilImage", reinterpret_cast(encode::vkCmdClearDepthStencilImage) }, { "vkCmdClearAttachments", reinterpret_cast(encode::vkCmdClearAttachments) }, { "vkCmdResolveImage", reinterpret_cast(encode::vkCmdResolveImage) }, - { "vkCmdSetEvent", reinterpret_cast(encode::vkCmdSetEvent) }, - { "vkCmdResetEvent", reinterpret_cast(encode::vkCmdResetEvent) }, - { "vkCmdWaitEvents", reinterpret_cast(encode::vkCmdWaitEvents) }, - { "vkCmdPipelineBarrier", reinterpret_cast(encode::vkCmdPipelineBarrier) }, - { "vkCmdBeginQuery", reinterpret_cast(encode::vkCmdBeginQuery) }, - { "vkCmdEndQuery", reinterpret_cast(encode::vkCmdEndQuery) }, - { "vkCmdResetQueryPool", reinterpret_cast(encode::vkCmdResetQueryPool) }, - { "vkCmdWriteTimestamp", reinterpret_cast(encode::vkCmdWriteTimestamp) }, - { "vkCmdCopyQueryPoolResults", reinterpret_cast(encode::vkCmdCopyQueryPoolResults) }, - { "vkCmdPushConstants", reinterpret_cast(encode::vkCmdPushConstants) }, { "vkCmdBeginRenderPass", reinterpret_cast(encode::vkCmdBeginRenderPass) }, { "vkCmdNextSubpass", reinterpret_cast(encode::vkCmdNextSubpass) }, { "vkCmdEndRenderPass", reinterpret_cast(encode::vkCmdEndRenderPass) }, - { "vkCmdExecuteCommands", reinterpret_cast(encode::vkCmdExecuteCommands) }, { "vkBindBufferMemory2", reinterpret_cast(encode::vkBindBufferMemory2) }, { "vkBindImageMemory2", reinterpret_cast(encode::vkBindImageMemory2) }, { "vkGetDeviceGroupPeerMemoryFeatures", reinterpret_cast(encode::vkGetDeviceGroupPeerMemoryFeatures) }, { "vkCmdSetDeviceMask", reinterpret_cast(encode::vkCmdSetDeviceMask) }, - { "vkCmdDispatchBase", reinterpret_cast(encode::vkCmdDispatchBase) }, { "vkEnumeratePhysicalDeviceGroups", reinterpret_cast(encode::vkEnumeratePhysicalDeviceGroups) }, { "vkGetImageMemoryRequirements2", reinterpret_cast(encode::vkGetImageMemoryRequirements2) }, { "vkGetBufferMemoryRequirements2", reinterpret_cast(encode::vkGetBufferMemoryRequirements2) }, @@ -206,21 +205,16 @@ static inline const std::unordered_map GetVulka { "vkGetPhysicalDeviceSparseImageFormatProperties2", reinterpret_cast(encode::vkGetPhysicalDeviceSparseImageFormatProperties2) }, { "vkTrimCommandPool", reinterpret_cast(encode::vkTrimCommandPool) }, { "vkGetDeviceQueue2", reinterpret_cast(encode::vkGetDeviceQueue2) }, - { "vkCreateSamplerYcbcrConversion", reinterpret_cast(encode::vkCreateSamplerYcbcrConversion) }, - { "vkDestroySamplerYcbcrConversion", reinterpret_cast(encode::vkDestroySamplerYcbcrConversion) }, - { "vkCreateDescriptorUpdateTemplate", reinterpret_cast(encode::vkCreateDescriptorUpdateTemplate) }, - { "vkDestroyDescriptorUpdateTemplate", reinterpret_cast(encode::vkDestroyDescriptorUpdateTemplate) }, - { "vkUpdateDescriptorSetWithTemplate", reinterpret_cast(encode::vkUpdateDescriptorSetWithTemplate) }, { "vkGetPhysicalDeviceExternalBufferProperties", reinterpret_cast(encode::vkGetPhysicalDeviceExternalBufferProperties) }, { "vkGetPhysicalDeviceExternalFenceProperties", reinterpret_cast(encode::vkGetPhysicalDeviceExternalFenceProperties) }, { "vkGetPhysicalDeviceExternalSemaphoreProperties", reinterpret_cast(encode::vkGetPhysicalDeviceExternalSemaphoreProperties) }, + { "vkCmdDispatchBase", reinterpret_cast(encode::vkCmdDispatchBase) }, + { "vkCreateDescriptorUpdateTemplate", reinterpret_cast(encode::vkCreateDescriptorUpdateTemplate) }, + { "vkDestroyDescriptorUpdateTemplate", reinterpret_cast(encode::vkDestroyDescriptorUpdateTemplate) }, + { "vkUpdateDescriptorSetWithTemplate", reinterpret_cast(encode::vkUpdateDescriptorSetWithTemplate) }, { "vkGetDescriptorSetLayoutSupport", reinterpret_cast(encode::vkGetDescriptorSetLayoutSupport) }, - { "vkCmdDrawIndirectCount", reinterpret_cast(encode::vkCmdDrawIndirectCount) }, - { "vkCmdDrawIndexedIndirectCount", reinterpret_cast(encode::vkCmdDrawIndexedIndirectCount) }, - { "vkCreateRenderPass2", reinterpret_cast(encode::vkCreateRenderPass2) }, - { "vkCmdBeginRenderPass2", reinterpret_cast(encode::vkCmdBeginRenderPass2) }, - { "vkCmdNextSubpass2", reinterpret_cast(encode::vkCmdNextSubpass2) }, - { "vkCmdEndRenderPass2", reinterpret_cast(encode::vkCmdEndRenderPass2) }, + { "vkCreateSamplerYcbcrConversion", reinterpret_cast(encode::vkCreateSamplerYcbcrConversion) }, + { "vkDestroySamplerYcbcrConversion", reinterpret_cast(encode::vkDestroySamplerYcbcrConversion) }, { "vkResetQueryPool", reinterpret_cast(encode::vkResetQueryPool) }, { "vkGetSemaphoreCounterValue", reinterpret_cast(encode::vkGetSemaphoreCounterValue) }, { "vkWaitSemaphores", reinterpret_cast(encode::vkWaitSemaphores) }, @@ -228,14 +222,17 @@ static inline const std::unordered_map GetVulka { "vkGetBufferDeviceAddress", reinterpret_cast(encode::vkGetBufferDeviceAddress) }, { "vkGetBufferOpaqueCaptureAddress", reinterpret_cast(encode::vkGetBufferOpaqueCaptureAddress) }, { "vkGetDeviceMemoryOpaqueCaptureAddress", reinterpret_cast(encode::vkGetDeviceMemoryOpaqueCaptureAddress) }, + { "vkCmdDrawIndirectCount", reinterpret_cast(encode::vkCmdDrawIndirectCount) }, + { "vkCmdDrawIndexedIndirectCount", reinterpret_cast(encode::vkCmdDrawIndexedIndirectCount) }, + { "vkCreateRenderPass2", reinterpret_cast(encode::vkCreateRenderPass2) }, + { "vkCmdBeginRenderPass2", reinterpret_cast(encode::vkCmdBeginRenderPass2) }, + { "vkCmdNextSubpass2", reinterpret_cast(encode::vkCmdNextSubpass2) }, + { "vkCmdEndRenderPass2", reinterpret_cast(encode::vkCmdEndRenderPass2) }, { "vkGetPhysicalDeviceToolProperties", reinterpret_cast(encode::vkGetPhysicalDeviceToolProperties) }, { "vkCreatePrivateDataSlot", reinterpret_cast(encode::vkCreatePrivateDataSlot) }, { "vkDestroyPrivateDataSlot", reinterpret_cast(encode::vkDestroyPrivateDataSlot) }, { "vkSetPrivateData", reinterpret_cast(encode::vkSetPrivateData) }, { "vkGetPrivateData", reinterpret_cast(encode::vkGetPrivateData) }, - { "vkCmdSetEvent2", reinterpret_cast(encode::vkCmdSetEvent2) }, - { "vkCmdResetEvent2", reinterpret_cast(encode::vkCmdResetEvent2) }, - { "vkCmdWaitEvents2", reinterpret_cast(encode::vkCmdWaitEvents2) }, { "vkCmdPipelineBarrier2", reinterpret_cast(encode::vkCmdPipelineBarrier2) }, { "vkCmdWriteTimestamp2", reinterpret_cast(encode::vkCmdWriteTimestamp2) }, { "vkQueueSubmit2", reinterpret_cast(encode::vkQueueSubmit2) }, @@ -243,6 +240,12 @@ static inline const std::unordered_map GetVulka { "vkCmdCopyImage2", reinterpret_cast(encode::vkCmdCopyImage2) }, { "vkCmdCopyBufferToImage2", reinterpret_cast(encode::vkCmdCopyBufferToImage2) }, { "vkCmdCopyImageToBuffer2", reinterpret_cast(encode::vkCmdCopyImageToBuffer2) }, + { "vkGetDeviceBufferMemoryRequirements", reinterpret_cast(encode::vkGetDeviceBufferMemoryRequirements) }, + { "vkGetDeviceImageMemoryRequirements", reinterpret_cast(encode::vkGetDeviceImageMemoryRequirements) }, + { "vkGetDeviceImageSparseMemoryRequirements", reinterpret_cast(encode::vkGetDeviceImageSparseMemoryRequirements) }, + { "vkCmdSetEvent2", reinterpret_cast(encode::vkCmdSetEvent2) }, + { "vkCmdResetEvent2", reinterpret_cast(encode::vkCmdResetEvent2) }, + { "vkCmdWaitEvents2", reinterpret_cast(encode::vkCmdWaitEvents2) }, { "vkCmdBlitImage2", reinterpret_cast(encode::vkCmdBlitImage2) }, { "vkCmdResolveImage2", reinterpret_cast(encode::vkCmdResolveImage2) }, { "vkCmdBeginRendering", reinterpret_cast(encode::vkCmdBeginRendering) }, @@ -262,28 +265,25 @@ static inline const std::unordered_map GetVulka { "vkCmdSetRasterizerDiscardEnable", reinterpret_cast(encode::vkCmdSetRasterizerDiscardEnable) }, { "vkCmdSetDepthBiasEnable", reinterpret_cast(encode::vkCmdSetDepthBiasEnable) }, { "vkCmdSetPrimitiveRestartEnable", reinterpret_cast(encode::vkCmdSetPrimitiveRestartEnable) }, - { "vkGetDeviceBufferMemoryRequirements", reinterpret_cast(encode::vkGetDeviceBufferMemoryRequirements) }, - { "vkGetDeviceImageMemoryRequirements", reinterpret_cast(encode::vkGetDeviceImageMemoryRequirements) }, - { "vkGetDeviceImageSparseMemoryRequirements", reinterpret_cast(encode::vkGetDeviceImageSparseMemoryRequirements) }, - { "vkCmdSetLineStipple", reinterpret_cast(encode::vkCmdSetLineStipple) }, { "vkMapMemory2", reinterpret_cast(encode::vkMapMemory2) }, { "vkUnmapMemory2", reinterpret_cast(encode::vkUnmapMemory2) }, - { "vkCmdBindIndexBuffer2", reinterpret_cast(encode::vkCmdBindIndexBuffer2) }, - { "vkGetRenderingAreaGranularity", reinterpret_cast(encode::vkGetRenderingAreaGranularity) }, { "vkGetDeviceImageSubresourceLayout", reinterpret_cast(encode::vkGetDeviceImageSubresourceLayout) }, { "vkGetImageSubresourceLayout2", reinterpret_cast(encode::vkGetImageSubresourceLayout2) }, + { "vkCopyMemoryToImage", reinterpret_cast(encode::vkCopyMemoryToImage) }, + { "vkCopyImageToMemory", reinterpret_cast(encode::vkCopyImageToMemory) }, + { "vkCopyImageToImage", reinterpret_cast(encode::vkCopyImageToImage) }, + { "vkTransitionImageLayout", reinterpret_cast(encode::vkTransitionImageLayout) }, { "vkCmdPushDescriptorSet", reinterpret_cast(encode::vkCmdPushDescriptorSet) }, { "vkCmdPushDescriptorSetWithTemplate", reinterpret_cast(encode::vkCmdPushDescriptorSetWithTemplate) }, - { "vkCmdSetRenderingAttachmentLocations", reinterpret_cast(encode::vkCmdSetRenderingAttachmentLocations) }, - { "vkCmdSetRenderingInputAttachmentIndices", reinterpret_cast(encode::vkCmdSetRenderingInputAttachmentIndices) }, { "vkCmdBindDescriptorSets2", reinterpret_cast(encode::vkCmdBindDescriptorSets2) }, { "vkCmdPushConstants2", reinterpret_cast(encode::vkCmdPushConstants2) }, { "vkCmdPushDescriptorSet2", reinterpret_cast(encode::vkCmdPushDescriptorSet2) }, { "vkCmdPushDescriptorSetWithTemplate2", reinterpret_cast(encode::vkCmdPushDescriptorSetWithTemplate2) }, - { "vkCopyMemoryToImage", reinterpret_cast(encode::vkCopyMemoryToImage) }, - { "vkCopyImageToMemory", reinterpret_cast(encode::vkCopyImageToMemory) }, - { "vkCopyImageToImage", reinterpret_cast(encode::vkCopyImageToImage) }, - { "vkTransitionImageLayout", reinterpret_cast(encode::vkTransitionImageLayout) }, + { "vkCmdSetLineStipple", reinterpret_cast(encode::vkCmdSetLineStipple) }, + { "vkCmdBindIndexBuffer2", reinterpret_cast(encode::vkCmdBindIndexBuffer2) }, + { "vkGetRenderingAreaGranularity", reinterpret_cast(encode::vkGetRenderingAreaGranularity) }, + { "vkCmdSetRenderingAttachmentLocations", reinterpret_cast(encode::vkCmdSetRenderingAttachmentLocations) }, + { "vkCmdSetRenderingInputAttachmentIndices", reinterpret_cast(encode::vkCmdSetRenderingInputAttachmentIndices) }, { "vkDestroySurfaceKHR", reinterpret_cast(encode::vkDestroySurfaceKHR) }, { "vkGetPhysicalDeviceSurfaceSupportKHR", reinterpret_cast(encode::vkGetPhysicalDeviceSurfaceSupportKHR) }, { "vkGetPhysicalDeviceSurfaceCapabilitiesKHR", reinterpret_cast(encode::vkGetPhysicalDeviceSurfaceCapabilitiesKHR) }, @@ -448,6 +448,9 @@ static inline const std::unordered_map GetVulka { "vkCmdPushDescriptorSetWithTemplate2KHR", reinterpret_cast(encode::vkCmdPushDescriptorSetWithTemplate2KHR) }, { "vkCmdSetDescriptorBufferOffsets2EXT", reinterpret_cast(encode::vkCmdSetDescriptorBufferOffsets2EXT) }, { "vkCmdBindDescriptorBufferEmbeddedSamplers2EXT", reinterpret_cast(encode::vkCmdBindDescriptorBufferEmbeddedSamplers2EXT) }, + { "vkCmdCopyMemoryIndirectKHR", reinterpret_cast(encode::vkCmdCopyMemoryIndirectKHR) }, + { "vkCmdCopyMemoryToImageIndirectKHR", reinterpret_cast(encode::vkCmdCopyMemoryToImageIndirectKHR) }, + { "vkCmdEndRendering2KHR", reinterpret_cast(encode::vkCmdEndRendering2KHR) }, { "vkFrameBoundaryANDROID", reinterpret_cast(encode::vkFrameBoundaryANDROID) }, { "vkCreateDebugReportCallbackEXT", reinterpret_cast(encode::vkCreateDebugReportCallbackEXT) }, { "vkDestroyDebugReportCallbackEXT", reinterpret_cast(encode::vkDestroyDebugReportCallbackEXT) }, @@ -541,6 +544,10 @@ static inline const std::unordered_map GetVulka { "vkCmdSetCheckpointNV", reinterpret_cast(encode::vkCmdSetCheckpointNV) }, { "vkGetQueueCheckpointDataNV", reinterpret_cast(encode::vkGetQueueCheckpointDataNV) }, { "vkGetQueueCheckpointData2NV", reinterpret_cast(encode::vkGetQueueCheckpointData2NV) }, + { "vkSetSwapchainPresentTimingQueueSizeEXT", reinterpret_cast(encode::vkSetSwapchainPresentTimingQueueSizeEXT) }, + { "vkGetSwapchainTimingPropertiesEXT", reinterpret_cast(encode::vkGetSwapchainTimingPropertiesEXT) }, + { "vkGetSwapchainTimeDomainPropertiesEXT", reinterpret_cast(encode::vkGetSwapchainTimeDomainPropertiesEXT) }, + { "vkGetPastPresentationTimingEXT", reinterpret_cast(encode::vkGetPastPresentationTimingEXT) }, { "vkInitializePerformanceApiINTEL", reinterpret_cast(encode::vkInitializePerformanceApiINTEL) }, { "vkUninitializePerformanceApiINTEL", reinterpret_cast(encode::vkUninitializePerformanceApiINTEL) }, { "vkCmdSetPerformanceMarkerINTEL", reinterpret_cast(encode::vkCmdSetPerformanceMarkerINTEL) }, @@ -598,6 +605,17 @@ static inline const std::unordered_map GetVulka { "vkCmdDispatchTileQCOM", reinterpret_cast(encode::vkCmdDispatchTileQCOM) }, { "vkCmdBeginPerTileExecutionQCOM", reinterpret_cast(encode::vkCmdBeginPerTileExecutionQCOM) }, { "vkCmdEndPerTileExecutionQCOM", reinterpret_cast(encode::vkCmdEndPerTileExecutionQCOM) }, + { "vkGetDescriptorSetLayoutSizeEXT", reinterpret_cast(encode::vkGetDescriptorSetLayoutSizeEXT) }, + { "vkGetDescriptorSetLayoutBindingOffsetEXT", reinterpret_cast(encode::vkGetDescriptorSetLayoutBindingOffsetEXT) }, + { "vkGetDescriptorEXT", reinterpret_cast(encode::vkGetDescriptorEXT) }, + { "vkCmdBindDescriptorBuffersEXT", reinterpret_cast(encode::vkCmdBindDescriptorBuffersEXT) }, + { "vkCmdSetDescriptorBufferOffsetsEXT", reinterpret_cast(encode::vkCmdSetDescriptorBufferOffsetsEXT) }, + { "vkCmdBindDescriptorBufferEmbeddedSamplersEXT", reinterpret_cast(encode::vkCmdBindDescriptorBufferEmbeddedSamplersEXT) }, + { "vkGetBufferOpaqueCaptureDescriptorDataEXT", reinterpret_cast(encode::vkGetBufferOpaqueCaptureDescriptorDataEXT) }, + { "vkGetImageOpaqueCaptureDescriptorDataEXT", reinterpret_cast(encode::vkGetImageOpaqueCaptureDescriptorDataEXT) }, + { "vkGetImageViewOpaqueCaptureDescriptorDataEXT", reinterpret_cast(encode::vkGetImageViewOpaqueCaptureDescriptorDataEXT) }, + { "vkGetSamplerOpaqueCaptureDescriptorDataEXT", reinterpret_cast(encode::vkGetSamplerOpaqueCaptureDescriptorDataEXT) }, + { "vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT", reinterpret_cast(encode::vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT) }, { "vkCmdSetFragmentShadingRateEnumNV", reinterpret_cast(encode::vkCmdSetFragmentShadingRateEnumNV) }, { "vkGetDeviceFaultInfoEXT", reinterpret_cast(encode::vkGetDeviceFaultInfoEXT) }, { "vkAcquireWinrtDisplayNV", reinterpret_cast(encode::vkAcquireWinrtDisplayNV) }, @@ -697,8 +715,21 @@ static inline const std::unordered_map GetVulka { "vkSetLatencyMarkerNV", reinterpret_cast(encode::vkSetLatencyMarkerNV) }, { "vkGetLatencyTimingsNV", reinterpret_cast(encode::vkGetLatencyTimingsNV) }, { "vkQueueNotifyOutOfBandNV", reinterpret_cast(encode::vkQueueNotifyOutOfBandNV) }, + { "vkCreateDataGraphPipelinesARM", reinterpret_cast(encode::vkCreateDataGraphPipelinesARM) }, + { "vkCreateDataGraphPipelineSessionARM", reinterpret_cast(encode::vkCreateDataGraphPipelineSessionARM) }, + { "vkGetDataGraphPipelineSessionBindPointRequirementsARM", reinterpret_cast(encode::vkGetDataGraphPipelineSessionBindPointRequirementsARM) }, + { "vkGetDataGraphPipelineSessionMemoryRequirementsARM", reinterpret_cast(encode::vkGetDataGraphPipelineSessionMemoryRequirementsARM) }, + { "vkBindDataGraphPipelineSessionMemoryARM", reinterpret_cast(encode::vkBindDataGraphPipelineSessionMemoryARM) }, + { "vkDestroyDataGraphPipelineSessionARM", reinterpret_cast(encode::vkDestroyDataGraphPipelineSessionARM) }, + { "vkCmdDispatchDataGraphARM", reinterpret_cast(encode::vkCmdDispatchDataGraphARM) }, + { "vkGetDataGraphPipelineAvailablePropertiesARM", reinterpret_cast(encode::vkGetDataGraphPipelineAvailablePropertiesARM) }, + { "vkGetDataGraphPipelinePropertiesARM", reinterpret_cast(encode::vkGetDataGraphPipelinePropertiesARM) }, + { "vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM", reinterpret_cast(encode::vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM) }, + { "vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM", reinterpret_cast(encode::vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM) }, { "vkCmdSetAttachmentFeedbackLoopEnableEXT", reinterpret_cast(encode::vkCmdSetAttachmentFeedbackLoopEnableEXT) }, { "vkCmdBindTileMemoryQCOM", reinterpret_cast(encode::vkCmdBindTileMemoryQCOM) }, + { "vkCmdDecompressMemoryEXT", reinterpret_cast(encode::vkCmdDecompressMemoryEXT) }, + { "vkCmdDecompressMemoryIndirectCountEXT", reinterpret_cast(encode::vkCmdDecompressMemoryIndirectCountEXT) }, { "vkGetPartitionedAccelerationStructuresBuildSizesNV", reinterpret_cast(encode::vkGetPartitionedAccelerationStructuresBuildSizesNV) }, { "vkCmdBuildPartitionedAccelerationStructuresNV", reinterpret_cast(encode::vkCmdBuildPartitionedAccelerationStructuresNV) }, { "vkGetGeneratedCommandsMemoryRequirementsEXT", reinterpret_cast(encode::vkGetGeneratedCommandsMemoryRequirementsEXT) }, @@ -713,7 +744,10 @@ static inline const std::unordered_map GetVulka { "vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV", reinterpret_cast(encode::vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV) }, { "vkGetMemoryMetalHandleEXT", reinterpret_cast(encode::vkGetMemoryMetalHandleEXT) }, { "vkGetMemoryMetalHandlePropertiesEXT", reinterpret_cast(encode::vkGetMemoryMetalHandlePropertiesEXT) }, + { "vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM", reinterpret_cast(encode::vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM) }, { "vkCmdEndRendering2EXT", reinterpret_cast(encode::vkCmdEndRendering2EXT) }, + { "vkCmdBeginCustomResolveEXT", reinterpret_cast(encode::vkCmdBeginCustomResolveEXT) }, + { "vkCmdSetComputeOccupancyPriorityNV", reinterpret_cast(encode::vkCmdSetComputeOccupancyPriorityNV) }, { "vkCreateAccelerationStructureKHR", reinterpret_cast(encode::vkCreateAccelerationStructureKHR) }, { "vkDestroyAccelerationStructureKHR", reinterpret_cast(encode::vkDestroyAccelerationStructureKHR) }, { "vkCmdBuildAccelerationStructuresKHR", reinterpret_cast(encode::vkCmdBuildAccelerationStructuresKHR) }, diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_object_info_table_base2.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_object_info_table_base2.h index a92f65e10..6ddaac912 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_object_info_table_base2.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_object_info_table_base2.h @@ -47,6 +47,7 @@ class VulkanObjectInfoTableBase2 : VulkanObjectInfoTableBase void AddVkBufferViewInfo(VulkanBufferViewInfo&& info) { AddVkObjectInfo(std::move(info), &bufferView_map_); } void AddVkCommandBufferInfo(VulkanCommandBufferInfo&& info) { AddVkObjectInfo(std::move(info), &commandBuffer_map_); } void AddVkCommandPoolInfo(VulkanCommandPoolInfo&& info) { AddVkObjectInfo(std::move(info), &commandPool_map_); } + void AddVkDataGraphPipelineSessionARMInfo(VulkanDataGraphPipelineSessionARMInfo&& info) { AddVkObjectInfo(std::move(info), &dataGraphPipelineSessionARM_map_); } void AddVkDebugReportCallbackEXTInfo(VulkanDebugReportCallbackEXTInfo&& info) { AddVkObjectInfo(std::move(info), &debugReportCallbackEXT_map_); } void AddVkDebugUtilsMessengerEXTInfo(VulkanDebugUtilsMessengerEXTInfo&& info) { AddVkObjectInfo(std::move(info), &debugUtilsMessengerEXT_map_); } void AddVkDeferredOperationKHRInfo(VulkanDeferredOperationKHRInfo&& info) { AddVkObjectInfo(std::move(info), &deferredOperationKHR_map_); } @@ -96,6 +97,7 @@ class VulkanObjectInfoTableBase2 : VulkanObjectInfoTableBase void RemoveVkBufferViewInfo(format::HandleId id) { bufferView_map_.erase(id); } void RemoveVkCommandBufferInfo(format::HandleId id) { commandBuffer_map_.erase(id); } void RemoveVkCommandPoolInfo(format::HandleId id) { commandPool_map_.erase(id); } + void RemoveVkDataGraphPipelineSessionARMInfo(format::HandleId id) { dataGraphPipelineSessionARM_map_.erase(id); } void RemoveVkDebugReportCallbackEXTInfo(format::HandleId id) { debugReportCallbackEXT_map_.erase(id); } void RemoveVkDebugUtilsMessengerEXTInfo(format::HandleId id) { debugUtilsMessengerEXT_map_.erase(id); } void RemoveVkDeferredOperationKHRInfo(format::HandleId id) { deferredOperationKHR_map_.erase(id); } @@ -145,6 +147,7 @@ class VulkanObjectInfoTableBase2 : VulkanObjectInfoTableBase const VulkanBufferViewInfo* GetVkBufferViewInfo(format::HandleId id) const { return GetVkObjectInfo(id, &bufferView_map_); } const VulkanCommandBufferInfo* GetVkCommandBufferInfo(format::HandleId id) const { return GetVkObjectInfo(id, &commandBuffer_map_); } const VulkanCommandPoolInfo* GetVkCommandPoolInfo(format::HandleId id) const { return GetVkObjectInfo(id, &commandPool_map_); } + const VulkanDataGraphPipelineSessionARMInfo* GetVkDataGraphPipelineSessionARMInfo(format::HandleId id) const { return GetVkObjectInfo(id, &dataGraphPipelineSessionARM_map_); } const VulkanDebugReportCallbackEXTInfo* GetVkDebugReportCallbackEXTInfo(format::HandleId id) const { return GetVkObjectInfo(id, &debugReportCallbackEXT_map_); } const VulkanDebugUtilsMessengerEXTInfo* GetVkDebugUtilsMessengerEXTInfo(format::HandleId id) const { return GetVkObjectInfo(id, &debugUtilsMessengerEXT_map_); } const VulkanDeferredOperationKHRInfo* GetVkDeferredOperationKHRInfo(format::HandleId id) const { return GetVkObjectInfo(id, &deferredOperationKHR_map_); } @@ -194,6 +197,7 @@ class VulkanObjectInfoTableBase2 : VulkanObjectInfoTableBase VulkanBufferViewInfo* GetVkBufferViewInfo(format::HandleId id) { return GetVkObjectInfo(id, &bufferView_map_); } VulkanCommandBufferInfo* GetVkCommandBufferInfo(format::HandleId id) { return GetVkObjectInfo(id, &commandBuffer_map_); } VulkanCommandPoolInfo* GetVkCommandPoolInfo(format::HandleId id) { return GetVkObjectInfo(id, &commandPool_map_); } + VulkanDataGraphPipelineSessionARMInfo* GetVkDataGraphPipelineSessionARMInfo(format::HandleId id) { return GetVkObjectInfo(id, &dataGraphPipelineSessionARM_map_); } VulkanDebugReportCallbackEXTInfo* GetVkDebugReportCallbackEXTInfo(format::HandleId id) { return GetVkObjectInfo(id, &debugReportCallbackEXT_map_); } VulkanDebugUtilsMessengerEXTInfo* GetVkDebugUtilsMessengerEXTInfo(format::HandleId id) { return GetVkObjectInfo(id, &debugUtilsMessengerEXT_map_); } VulkanDeferredOperationKHRInfo* GetVkDeferredOperationKHRInfo(format::HandleId id) { return GetVkObjectInfo(id, &deferredOperationKHR_map_); } @@ -243,6 +247,7 @@ class VulkanObjectInfoTableBase2 : VulkanObjectInfoTableBase void VisitVkBufferViewInfo(std::function visitor) const { for (const auto& entry : bufferView_map_) { visitor(&entry.second); } } void VisitVkCommandBufferInfo(std::function visitor) const { for (const auto& entry : commandBuffer_map_) { visitor(&entry.second); } } void VisitVkCommandPoolInfo(std::function visitor) const { for (const auto& entry : commandPool_map_) { visitor(&entry.second); } } + void VisitVkDataGraphPipelineSessionARMInfo(std::function visitor) const { for (const auto& entry : dataGraphPipelineSessionARM_map_) { visitor(&entry.second); } } void VisitVkDebugReportCallbackEXTInfo(std::function visitor) const { for (const auto& entry : debugReportCallbackEXT_map_) { visitor(&entry.second); } } void VisitVkDebugUtilsMessengerEXTInfo(std::function visitor) const { for (const auto& entry : debugUtilsMessengerEXT_map_) { visitor(&entry.second); } } void VisitVkDeferredOperationKHRInfo(std::function visitor) const { for (const auto& entry : deferredOperationKHR_map_) { visitor(&entry.second); } } @@ -293,6 +298,7 @@ class VulkanObjectInfoTableBase2 : VulkanObjectInfoTableBase std::unordered_map bufferView_map_; std::unordered_map commandBuffer_map_; std::unordered_map commandPool_map_; + std::unordered_map dataGraphPipelineSessionARM_map_; std::unordered_map debugReportCallbackEXT_map_; std::unordered_map debugUtilsMessengerEXT_map_; std::unordered_map deferredOperationKHR_map_; diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_pnext_struct_decoder.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_pnext_struct_decoder.cpp index 97d849ffc..23006e4de 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_pnext_struct_decoder.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_pnext_struct_decoder.cpp @@ -204,10 +204,38 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_BUILTIN_MODEL_CREATE_INFO_QCOM: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -236,6 +264,10 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -584,6 +616,10 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -688,6 +724,10 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -736,6 +776,14 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -760,6 +808,18 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -788,6 +848,18 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -1140,6 +1212,14 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -1200,6 +1280,14 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -1304,6 +1392,14 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -1384,6 +1480,10 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -1440,10 +1540,18 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -1532,6 +1640,10 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -1604,6 +1716,10 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -1624,6 +1740,14 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -1688,6 +1812,14 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -1728,6 +1860,10 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -1816,12 +1952,12 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR: - (*pNext) = DecodeAllocator::Allocate>(); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE: + (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR: - (*pNext) = DecodeAllocator::Allocate>(); + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR: + (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: @@ -2048,6 +2184,14 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; + case VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -2120,6 +2264,10 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -2144,6 +2292,10 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -2160,6 +2312,10 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -2228,6 +2384,10 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -2268,6 +2428,10 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -2336,10 +2500,6 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -2364,10 +2524,6 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_KHR: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -2384,34 +2540,6 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; case VK_STRUCTURE_TYPE_VIDEO_DECODE_USAGE_INFO_KHR: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -2532,62 +2660,10 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUANTIZATION_MAP_CAPABILITIES_KHR: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR: - (*pNext) = DecodeAllocator::Allocate>(); - bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); - break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -2596,6 +2672,10 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_PROFILE_RGB_CONVERSION_INFO_VALVE: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); @@ -2616,10 +2696,18 @@ size_t DecodePNextStruct(const uint8_t* parameter_buffer, size_t buffer_size, PN (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RGB_CONVERSION_CAPABILITIES_VALVE: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_INTRA_REFRESH_CREATE_INFO_KHR: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_RGB_CONVERSION_CREATE_INFO_VALVE: + (*pNext) = DecodeAllocator::Allocate>(); + bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); + break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_USAGE_INFO_KHR: (*pNext) = DecodeAllocator::Allocate>(); bytes_read = (*pNext)->Decode(parameter_buffer, buffer_size); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_pnext_struct_encoder.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_pnext_struct_encoder.cpp index f163ca96e..d48977906 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_pnext_struct_encoder.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_pnext_struct_encoder.cpp @@ -167,9 +167,30 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_BUILTIN_MODEL_CREATE_INFO_QCOM: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -191,6 +212,9 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_DEPTH_BIAS_REPRESENTATION_INFO_EXT: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -452,6 +476,9 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -530,6 +557,9 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMMAND_BUFFER_INHERITANCE_FEATURES_NV: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -566,6 +596,12 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_PROPERTIES_NV: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -584,6 +620,15 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -605,6 +650,15 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -869,6 +923,12 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -914,6 +974,12 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -992,6 +1058,12 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1052,6 +1124,9 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1094,9 +1169,15 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1163,6 +1244,9 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1217,6 +1301,9 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1232,6 +1319,12 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1280,6 +1373,12 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1310,6 +1409,9 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1376,12 +1478,12 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUANTIZATION_MAP_FEATURES_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1550,6 +1652,12 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; + case VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1604,6 +1712,9 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1622,6 +1733,9 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1634,6 +1748,9 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1715,6 +1832,9 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1766,9 +1886,6 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1787,9 +1904,6 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1802,27 +1916,6 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; case VK_STRUCTURE_TYPE_VIDEO_DECODE_USAGE_INFO_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1913,54 +2006,18 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_GET_INFO_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUANTIZATION_MAP_CAPABILITIES_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR: - EncodeStructPtr(encoder, reinterpret_cast(base)); - break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_INFO_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_PROFILE_RGB_CONVERSION_INFO_VALVE: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; @@ -1976,9 +2033,15 @@ void EncodePNextStruct(ParameterEncoder* encoder, const void* value) case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RGB_CONVERSION_CAPABILITIES_VALVE: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_INTRA_REFRESH_CREATE_INFO_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_RGB_CONVERSION_CREATE_INFO_VALVE: + EncodeStructPtr(encoder, reinterpret_cast(base)); + break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_USAGE_INFO_KHR: EncodeStructPtr(encoder, reinterpret_cast(base)); break; diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_recapture_func_table.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_recapture_func_table.h new file mode 100644 index 000000000..38492f3db --- /dev/null +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_recapture_func_table.h @@ -0,0 +1,785 @@ +/* +** Copyright (c) 2018-2023 Valve Corporation +** Copyright (c) 2018-2023 LunarG, Inc. +** Copyright (c) 2023 Advanced Micro Devices, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +/* +** This file is generated from the Khronos Vulkan XML API Registry. +** +*/ + +#ifndef GFXRECON_GENERATED_VULKAN_RECAPTURE_FUNC_TABLE_H +#define GFXRECON_GENERATED_VULKAN_RECAPTURE_FUNC_TABLE_H + +#include "encode/custom_vulkan_api_call_encoders.h" +#include "generated/generated_vulkan_api_call_encoders.h" +#include "tools/replay/recapture_vulkan_entry.h" +#include "util/defines.h" + +#include "vulkan/vulkan.h" +#include "vk_video/vulkan_video_codec_h264std.h" +#include "vk_video/vulkan_video_codec_h264std_decode.h" +#include "vk_video/vulkan_video_codec_h264std_encode.h" +#include "vk_video/vulkan_video_codec_h265std.h" +#include "vk_video/vulkan_video_codec_h265std_decode.h" +#include "vk_video/vulkan_video_codec_h265std_encode.h" +#include "vk_video/vulkan_video_codecs_common.h" + +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(vulkan_recapture) +// This static function can be used to avoid issues with static variable initialization order. +static inline const std::unordered_map GetVulkanRecaptureFuncTable() { + return { + { "vkCreateInstance", reinterpret_cast(encode::vkCreateInstance) }, + { "vkDestroyInstance", reinterpret_cast(encode::vkDestroyInstance) }, + { "vkEnumeratePhysicalDevices", reinterpret_cast(encode::vkEnumeratePhysicalDevices) }, + { "vkGetPhysicalDeviceFeatures", reinterpret_cast(encode::vkGetPhysicalDeviceFeatures) }, + { "vkGetPhysicalDeviceFormatProperties", reinterpret_cast(encode::vkGetPhysicalDeviceFormatProperties) }, + { "vkGetPhysicalDeviceImageFormatProperties", reinterpret_cast(encode::vkGetPhysicalDeviceImageFormatProperties) }, + { "vkGetPhysicalDeviceProperties", reinterpret_cast(encode::vkGetPhysicalDeviceProperties) }, + { "vkGetPhysicalDeviceQueueFamilyProperties", reinterpret_cast(encode::vkGetPhysicalDeviceQueueFamilyProperties) }, + { "vkGetPhysicalDeviceMemoryProperties", reinterpret_cast(encode::vkGetPhysicalDeviceMemoryProperties) }, + { "vkGetInstanceProcAddr", reinterpret_cast(vulkan_recapture::GetInstanceProcAddr) }, + { "vkGetDeviceProcAddr", reinterpret_cast(vulkan_recapture::GetDeviceProcAddr) }, + { "vkCreateDevice", reinterpret_cast(encode::vkCreateDevice) }, + { "vkDestroyDevice", reinterpret_cast(encode::vkDestroyDevice) }, + { "vkEnumerateInstanceExtensionProperties", reinterpret_cast(vulkan_recapture::EnumerateInstanceExtensionProperties) }, + { "vkEnumerateDeviceExtensionProperties", reinterpret_cast(vulkan_recapture::EnumerateDeviceExtensionProperties) }, + { "vkEnumerateInstanceLayerProperties", reinterpret_cast(vulkan_recapture::EnumerateInstanceLayerProperties) }, + { "vkEnumerateDeviceLayerProperties", reinterpret_cast(vulkan_recapture::EnumerateDeviceLayerProperties) }, + { "vkGetDeviceQueue", reinterpret_cast(encode::vkGetDeviceQueue) }, + { "vkQueueSubmit", reinterpret_cast(encode::vkQueueSubmit) }, + { "vkQueueWaitIdle", reinterpret_cast(encode::vkQueueWaitIdle) }, + { "vkDeviceWaitIdle", reinterpret_cast(encode::vkDeviceWaitIdle) }, + { "vkAllocateMemory", reinterpret_cast(encode::vkAllocateMemory) }, + { "vkFreeMemory", reinterpret_cast(encode::vkFreeMemory) }, + { "vkMapMemory", reinterpret_cast(encode::vkMapMemory) }, + { "vkUnmapMemory", reinterpret_cast(encode::vkUnmapMemory) }, + { "vkFlushMappedMemoryRanges", reinterpret_cast(encode::vkFlushMappedMemoryRanges) }, + { "vkInvalidateMappedMemoryRanges", reinterpret_cast(encode::vkInvalidateMappedMemoryRanges) }, + { "vkGetDeviceMemoryCommitment", reinterpret_cast(encode::vkGetDeviceMemoryCommitment) }, + { "vkBindBufferMemory", reinterpret_cast(encode::vkBindBufferMemory) }, + { "vkBindImageMemory", reinterpret_cast(encode::vkBindImageMemory) }, + { "vkGetBufferMemoryRequirements", reinterpret_cast(encode::vkGetBufferMemoryRequirements) }, + { "vkGetImageMemoryRequirements", reinterpret_cast(encode::vkGetImageMemoryRequirements) }, + { "vkGetImageSparseMemoryRequirements", reinterpret_cast(encode::vkGetImageSparseMemoryRequirements) }, + { "vkGetPhysicalDeviceSparseImageFormatProperties", reinterpret_cast(encode::vkGetPhysicalDeviceSparseImageFormatProperties) }, + { "vkQueueBindSparse", reinterpret_cast(encode::vkQueueBindSparse) }, + { "vkCreateFence", reinterpret_cast(encode::vkCreateFence) }, + { "vkDestroyFence", reinterpret_cast(encode::vkDestroyFence) }, + { "vkResetFences", reinterpret_cast(encode::vkResetFences) }, + { "vkGetFenceStatus", reinterpret_cast(encode::vkGetFenceStatus) }, + { "vkWaitForFences", reinterpret_cast(encode::vkWaitForFences) }, + { "vkCreateSemaphore", reinterpret_cast(encode::vkCreateSemaphore) }, + { "vkDestroySemaphore", reinterpret_cast(encode::vkDestroySemaphore) }, + { "vkCreateQueryPool", reinterpret_cast(encode::vkCreateQueryPool) }, + { "vkDestroyQueryPool", reinterpret_cast(encode::vkDestroyQueryPool) }, + { "vkGetQueryPoolResults", reinterpret_cast(encode::vkGetQueryPoolResults) }, + { "vkCreateBuffer", reinterpret_cast(encode::vkCreateBuffer) }, + { "vkDestroyBuffer", reinterpret_cast(encode::vkDestroyBuffer) }, + { "vkCreateImage", reinterpret_cast(encode::vkCreateImage) }, + { "vkDestroyImage", reinterpret_cast(encode::vkDestroyImage) }, + { "vkGetImageSubresourceLayout", reinterpret_cast(encode::vkGetImageSubresourceLayout) }, + { "vkCreateImageView", reinterpret_cast(encode::vkCreateImageView) }, + { "vkDestroyImageView", reinterpret_cast(encode::vkDestroyImageView) }, + { "vkCreateCommandPool", reinterpret_cast(encode::vkCreateCommandPool) }, + { "vkDestroyCommandPool", reinterpret_cast(encode::vkDestroyCommandPool) }, + { "vkResetCommandPool", reinterpret_cast(encode::vkResetCommandPool) }, + { "vkAllocateCommandBuffers", reinterpret_cast(encode::vkAllocateCommandBuffers) }, + { "vkFreeCommandBuffers", reinterpret_cast(encode::vkFreeCommandBuffers) }, + { "vkBeginCommandBuffer", reinterpret_cast(encode::vkBeginCommandBuffer) }, + { "vkEndCommandBuffer", reinterpret_cast(encode::vkEndCommandBuffer) }, + { "vkResetCommandBuffer", reinterpret_cast(encode::vkResetCommandBuffer) }, + { "vkCmdCopyBuffer", reinterpret_cast(encode::vkCmdCopyBuffer) }, + { "vkCmdCopyImage", reinterpret_cast(encode::vkCmdCopyImage) }, + { "vkCmdCopyBufferToImage", reinterpret_cast(encode::vkCmdCopyBufferToImage) }, + { "vkCmdCopyImageToBuffer", reinterpret_cast(encode::vkCmdCopyImageToBuffer) }, + { "vkCmdUpdateBuffer", reinterpret_cast(encode::vkCmdUpdateBuffer) }, + { "vkCmdFillBuffer", reinterpret_cast(encode::vkCmdFillBuffer) }, + { "vkCmdPipelineBarrier", reinterpret_cast(encode::vkCmdPipelineBarrier) }, + { "vkCmdBeginQuery", reinterpret_cast(encode::vkCmdBeginQuery) }, + { "vkCmdEndQuery", reinterpret_cast(encode::vkCmdEndQuery) }, + { "vkCmdResetQueryPool", reinterpret_cast(encode::vkCmdResetQueryPool) }, + { "vkCmdWriteTimestamp", reinterpret_cast(encode::vkCmdWriteTimestamp) }, + { "vkCmdCopyQueryPoolResults", reinterpret_cast(encode::vkCmdCopyQueryPoolResults) }, + { "vkCmdExecuteCommands", reinterpret_cast(encode::vkCmdExecuteCommands) }, + { "vkCreateEvent", reinterpret_cast(encode::vkCreateEvent) }, + { "vkDestroyEvent", reinterpret_cast(encode::vkDestroyEvent) }, + { "vkGetEventStatus", reinterpret_cast(encode::vkGetEventStatus) }, + { "vkSetEvent", reinterpret_cast(encode::vkSetEvent) }, + { "vkResetEvent", reinterpret_cast(encode::vkResetEvent) }, + { "vkCreateBufferView", reinterpret_cast(encode::vkCreateBufferView) }, + { "vkDestroyBufferView", reinterpret_cast(encode::vkDestroyBufferView) }, + { "vkCreateShaderModule", reinterpret_cast(encode::vkCreateShaderModule) }, + { "vkDestroyShaderModule", reinterpret_cast(encode::vkDestroyShaderModule) }, + { "vkCreatePipelineCache", reinterpret_cast(encode::vkCreatePipelineCache) }, + { "vkDestroyPipelineCache", reinterpret_cast(encode::vkDestroyPipelineCache) }, + { "vkGetPipelineCacheData", reinterpret_cast(encode::vkGetPipelineCacheData) }, + { "vkMergePipelineCaches", reinterpret_cast(encode::vkMergePipelineCaches) }, + { "vkCreateComputePipelines", reinterpret_cast(encode::vkCreateComputePipelines) }, + { "vkDestroyPipeline", reinterpret_cast(encode::vkDestroyPipeline) }, + { "vkCreatePipelineLayout", reinterpret_cast(encode::vkCreatePipelineLayout) }, + { "vkDestroyPipelineLayout", reinterpret_cast(encode::vkDestroyPipelineLayout) }, + { "vkCreateSampler", reinterpret_cast(encode::vkCreateSampler) }, + { "vkDestroySampler", reinterpret_cast(encode::vkDestroySampler) }, + { "vkCreateDescriptorSetLayout", reinterpret_cast(encode::vkCreateDescriptorSetLayout) }, + { "vkDestroyDescriptorSetLayout", reinterpret_cast(encode::vkDestroyDescriptorSetLayout) }, + { "vkCreateDescriptorPool", reinterpret_cast(encode::vkCreateDescriptorPool) }, + { "vkDestroyDescriptorPool", reinterpret_cast(encode::vkDestroyDescriptorPool) }, + { "vkResetDescriptorPool", reinterpret_cast(encode::vkResetDescriptorPool) }, + { "vkAllocateDescriptorSets", reinterpret_cast(encode::vkAllocateDescriptorSets) }, + { "vkFreeDescriptorSets", reinterpret_cast(encode::vkFreeDescriptorSets) }, + { "vkUpdateDescriptorSets", reinterpret_cast(encode::vkUpdateDescriptorSets) }, + { "vkCmdBindPipeline", reinterpret_cast(encode::vkCmdBindPipeline) }, + { "vkCmdBindDescriptorSets", reinterpret_cast(encode::vkCmdBindDescriptorSets) }, + { "vkCmdClearColorImage", reinterpret_cast(encode::vkCmdClearColorImage) }, + { "vkCmdDispatch", reinterpret_cast(encode::vkCmdDispatch) }, + { "vkCmdDispatchIndirect", reinterpret_cast(encode::vkCmdDispatchIndirect) }, + { "vkCmdSetEvent", reinterpret_cast(encode::vkCmdSetEvent) }, + { "vkCmdResetEvent", reinterpret_cast(encode::vkCmdResetEvent) }, + { "vkCmdWaitEvents", reinterpret_cast(encode::vkCmdWaitEvents) }, + { "vkCmdPushConstants", reinterpret_cast(encode::vkCmdPushConstants) }, + { "vkCreateGraphicsPipelines", reinterpret_cast(encode::vkCreateGraphicsPipelines) }, + { "vkCreateFramebuffer", reinterpret_cast(encode::vkCreateFramebuffer) }, + { "vkDestroyFramebuffer", reinterpret_cast(encode::vkDestroyFramebuffer) }, + { "vkCreateRenderPass", reinterpret_cast(encode::vkCreateRenderPass) }, + { "vkDestroyRenderPass", reinterpret_cast(encode::vkDestroyRenderPass) }, + { "vkGetRenderAreaGranularity", reinterpret_cast(encode::vkGetRenderAreaGranularity) }, + { "vkCmdSetViewport", reinterpret_cast(encode::vkCmdSetViewport) }, + { "vkCmdSetScissor", reinterpret_cast(encode::vkCmdSetScissor) }, + { "vkCmdSetLineWidth", reinterpret_cast(encode::vkCmdSetLineWidth) }, + { "vkCmdSetDepthBias", reinterpret_cast(encode::vkCmdSetDepthBias) }, + { "vkCmdSetBlendConstants", reinterpret_cast(encode::vkCmdSetBlendConstants) }, + { "vkCmdSetDepthBounds", reinterpret_cast(encode::vkCmdSetDepthBounds) }, + { "vkCmdSetStencilCompareMask", reinterpret_cast(encode::vkCmdSetStencilCompareMask) }, + { "vkCmdSetStencilWriteMask", reinterpret_cast(encode::vkCmdSetStencilWriteMask) }, + { "vkCmdSetStencilReference", reinterpret_cast(encode::vkCmdSetStencilReference) }, + { "vkCmdBindIndexBuffer", reinterpret_cast(encode::vkCmdBindIndexBuffer) }, + { "vkCmdBindVertexBuffers", reinterpret_cast(encode::vkCmdBindVertexBuffers) }, + { "vkCmdDraw", reinterpret_cast(encode::vkCmdDraw) }, + { "vkCmdDrawIndexed", reinterpret_cast(encode::vkCmdDrawIndexed) }, + { "vkCmdDrawIndirect", reinterpret_cast(encode::vkCmdDrawIndirect) }, + { "vkCmdDrawIndexedIndirect", reinterpret_cast(encode::vkCmdDrawIndexedIndirect) }, + { "vkCmdBlitImage", reinterpret_cast(encode::vkCmdBlitImage) }, + { "vkCmdClearDepthStencilImage", reinterpret_cast(encode::vkCmdClearDepthStencilImage) }, + { "vkCmdClearAttachments", reinterpret_cast(encode::vkCmdClearAttachments) }, + { "vkCmdResolveImage", reinterpret_cast(encode::vkCmdResolveImage) }, + { "vkCmdBeginRenderPass", reinterpret_cast(encode::vkCmdBeginRenderPass) }, + { "vkCmdNextSubpass", reinterpret_cast(encode::vkCmdNextSubpass) }, + { "vkCmdEndRenderPass", reinterpret_cast(encode::vkCmdEndRenderPass) }, + { "vkBindBufferMemory2", reinterpret_cast(encode::vkBindBufferMemory2) }, + { "vkBindImageMemory2", reinterpret_cast(encode::vkBindImageMemory2) }, + { "vkGetDeviceGroupPeerMemoryFeatures", reinterpret_cast(encode::vkGetDeviceGroupPeerMemoryFeatures) }, + { "vkCmdSetDeviceMask", reinterpret_cast(encode::vkCmdSetDeviceMask) }, + { "vkEnumeratePhysicalDeviceGroups", reinterpret_cast(encode::vkEnumeratePhysicalDeviceGroups) }, + { "vkGetImageMemoryRequirements2", reinterpret_cast(encode::vkGetImageMemoryRequirements2) }, + { "vkGetBufferMemoryRequirements2", reinterpret_cast(encode::vkGetBufferMemoryRequirements2) }, + { "vkGetImageSparseMemoryRequirements2", reinterpret_cast(encode::vkGetImageSparseMemoryRequirements2) }, + { "vkGetPhysicalDeviceFeatures2", reinterpret_cast(encode::vkGetPhysicalDeviceFeatures2) }, + { "vkGetPhysicalDeviceProperties2", reinterpret_cast(encode::vkGetPhysicalDeviceProperties2) }, + { "vkGetPhysicalDeviceFormatProperties2", reinterpret_cast(encode::vkGetPhysicalDeviceFormatProperties2) }, + { "vkGetPhysicalDeviceImageFormatProperties2", reinterpret_cast(encode::vkGetPhysicalDeviceImageFormatProperties2) }, + { "vkGetPhysicalDeviceQueueFamilyProperties2", reinterpret_cast(encode::vkGetPhysicalDeviceQueueFamilyProperties2) }, + { "vkGetPhysicalDeviceMemoryProperties2", reinterpret_cast(encode::vkGetPhysicalDeviceMemoryProperties2) }, + { "vkGetPhysicalDeviceSparseImageFormatProperties2", reinterpret_cast(encode::vkGetPhysicalDeviceSparseImageFormatProperties2) }, + { "vkTrimCommandPool", reinterpret_cast(encode::vkTrimCommandPool) }, + { "vkGetDeviceQueue2", reinterpret_cast(encode::vkGetDeviceQueue2) }, + { "vkGetPhysicalDeviceExternalBufferProperties", reinterpret_cast(encode::vkGetPhysicalDeviceExternalBufferProperties) }, + { "vkGetPhysicalDeviceExternalFenceProperties", reinterpret_cast(encode::vkGetPhysicalDeviceExternalFenceProperties) }, + { "vkGetPhysicalDeviceExternalSemaphoreProperties", reinterpret_cast(encode::vkGetPhysicalDeviceExternalSemaphoreProperties) }, + { "vkCmdDispatchBase", reinterpret_cast(encode::vkCmdDispatchBase) }, + { "vkCreateDescriptorUpdateTemplate", reinterpret_cast(encode::vkCreateDescriptorUpdateTemplate) }, + { "vkDestroyDescriptorUpdateTemplate", reinterpret_cast(encode::vkDestroyDescriptorUpdateTemplate) }, + { "vkUpdateDescriptorSetWithTemplate", reinterpret_cast(encode::vkUpdateDescriptorSetWithTemplate) }, + { "vkGetDescriptorSetLayoutSupport", reinterpret_cast(encode::vkGetDescriptorSetLayoutSupport) }, + { "vkCreateSamplerYcbcrConversion", reinterpret_cast(encode::vkCreateSamplerYcbcrConversion) }, + { "vkDestroySamplerYcbcrConversion", reinterpret_cast(encode::vkDestroySamplerYcbcrConversion) }, + { "vkResetQueryPool", reinterpret_cast(encode::vkResetQueryPool) }, + { "vkGetSemaphoreCounterValue", reinterpret_cast(encode::vkGetSemaphoreCounterValue) }, + { "vkWaitSemaphores", reinterpret_cast(encode::vkWaitSemaphores) }, + { "vkSignalSemaphore", reinterpret_cast(encode::vkSignalSemaphore) }, + { "vkGetBufferDeviceAddress", reinterpret_cast(encode::vkGetBufferDeviceAddress) }, + { "vkGetBufferOpaqueCaptureAddress", reinterpret_cast(encode::vkGetBufferOpaqueCaptureAddress) }, + { "vkGetDeviceMemoryOpaqueCaptureAddress", reinterpret_cast(encode::vkGetDeviceMemoryOpaqueCaptureAddress) }, + { "vkCmdDrawIndirectCount", reinterpret_cast(encode::vkCmdDrawIndirectCount) }, + { "vkCmdDrawIndexedIndirectCount", reinterpret_cast(encode::vkCmdDrawIndexedIndirectCount) }, + { "vkCreateRenderPass2", reinterpret_cast(encode::vkCreateRenderPass2) }, + { "vkCmdBeginRenderPass2", reinterpret_cast(encode::vkCmdBeginRenderPass2) }, + { "vkCmdNextSubpass2", reinterpret_cast(encode::vkCmdNextSubpass2) }, + { "vkCmdEndRenderPass2", reinterpret_cast(encode::vkCmdEndRenderPass2) }, + { "vkGetPhysicalDeviceToolProperties", reinterpret_cast(encode::vkGetPhysicalDeviceToolProperties) }, + { "vkCreatePrivateDataSlot", reinterpret_cast(encode::vkCreatePrivateDataSlot) }, + { "vkDestroyPrivateDataSlot", reinterpret_cast(encode::vkDestroyPrivateDataSlot) }, + { "vkSetPrivateData", reinterpret_cast(encode::vkSetPrivateData) }, + { "vkGetPrivateData", reinterpret_cast(encode::vkGetPrivateData) }, + { "vkCmdPipelineBarrier2", reinterpret_cast(encode::vkCmdPipelineBarrier2) }, + { "vkCmdWriteTimestamp2", reinterpret_cast(encode::vkCmdWriteTimestamp2) }, + { "vkQueueSubmit2", reinterpret_cast(encode::vkQueueSubmit2) }, + { "vkCmdCopyBuffer2", reinterpret_cast(encode::vkCmdCopyBuffer2) }, + { "vkCmdCopyImage2", reinterpret_cast(encode::vkCmdCopyImage2) }, + { "vkCmdCopyBufferToImage2", reinterpret_cast(encode::vkCmdCopyBufferToImage2) }, + { "vkCmdCopyImageToBuffer2", reinterpret_cast(encode::vkCmdCopyImageToBuffer2) }, + { "vkGetDeviceBufferMemoryRequirements", reinterpret_cast(encode::vkGetDeviceBufferMemoryRequirements) }, + { "vkGetDeviceImageMemoryRequirements", reinterpret_cast(encode::vkGetDeviceImageMemoryRequirements) }, + { "vkGetDeviceImageSparseMemoryRequirements", reinterpret_cast(encode::vkGetDeviceImageSparseMemoryRequirements) }, + { "vkCmdSetEvent2", reinterpret_cast(encode::vkCmdSetEvent2) }, + { "vkCmdResetEvent2", reinterpret_cast(encode::vkCmdResetEvent2) }, + { "vkCmdWaitEvents2", reinterpret_cast(encode::vkCmdWaitEvents2) }, + { "vkCmdBlitImage2", reinterpret_cast(encode::vkCmdBlitImage2) }, + { "vkCmdResolveImage2", reinterpret_cast(encode::vkCmdResolveImage2) }, + { "vkCmdBeginRendering", reinterpret_cast(encode::vkCmdBeginRendering) }, + { "vkCmdEndRendering", reinterpret_cast(encode::vkCmdEndRendering) }, + { "vkCmdSetCullMode", reinterpret_cast(encode::vkCmdSetCullMode) }, + { "vkCmdSetFrontFace", reinterpret_cast(encode::vkCmdSetFrontFace) }, + { "vkCmdSetPrimitiveTopology", reinterpret_cast(encode::vkCmdSetPrimitiveTopology) }, + { "vkCmdSetViewportWithCount", reinterpret_cast(encode::vkCmdSetViewportWithCount) }, + { "vkCmdSetScissorWithCount", reinterpret_cast(encode::vkCmdSetScissorWithCount) }, + { "vkCmdBindVertexBuffers2", reinterpret_cast(encode::vkCmdBindVertexBuffers2) }, + { "vkCmdSetDepthTestEnable", reinterpret_cast(encode::vkCmdSetDepthTestEnable) }, + { "vkCmdSetDepthWriteEnable", reinterpret_cast(encode::vkCmdSetDepthWriteEnable) }, + { "vkCmdSetDepthCompareOp", reinterpret_cast(encode::vkCmdSetDepthCompareOp) }, + { "vkCmdSetDepthBoundsTestEnable", reinterpret_cast(encode::vkCmdSetDepthBoundsTestEnable) }, + { "vkCmdSetStencilTestEnable", reinterpret_cast(encode::vkCmdSetStencilTestEnable) }, + { "vkCmdSetStencilOp", reinterpret_cast(encode::vkCmdSetStencilOp) }, + { "vkCmdSetRasterizerDiscardEnable", reinterpret_cast(encode::vkCmdSetRasterizerDiscardEnable) }, + { "vkCmdSetDepthBiasEnable", reinterpret_cast(encode::vkCmdSetDepthBiasEnable) }, + { "vkCmdSetPrimitiveRestartEnable", reinterpret_cast(encode::vkCmdSetPrimitiveRestartEnable) }, + { "vkMapMemory2", reinterpret_cast(encode::vkMapMemory2) }, + { "vkUnmapMemory2", reinterpret_cast(encode::vkUnmapMemory2) }, + { "vkGetDeviceImageSubresourceLayout", reinterpret_cast(encode::vkGetDeviceImageSubresourceLayout) }, + { "vkGetImageSubresourceLayout2", reinterpret_cast(encode::vkGetImageSubresourceLayout2) }, + { "vkCopyMemoryToImage", reinterpret_cast(encode::vkCopyMemoryToImage) }, + { "vkCopyImageToMemory", reinterpret_cast(encode::vkCopyImageToMemory) }, + { "vkCopyImageToImage", reinterpret_cast(encode::vkCopyImageToImage) }, + { "vkTransitionImageLayout", reinterpret_cast(encode::vkTransitionImageLayout) }, + { "vkCmdPushDescriptorSet", reinterpret_cast(encode::vkCmdPushDescriptorSet) }, + { "vkCmdPushDescriptorSetWithTemplate", reinterpret_cast(encode::vkCmdPushDescriptorSetWithTemplate) }, + { "vkCmdBindDescriptorSets2", reinterpret_cast(encode::vkCmdBindDescriptorSets2) }, + { "vkCmdPushConstants2", reinterpret_cast(encode::vkCmdPushConstants2) }, + { "vkCmdPushDescriptorSet2", reinterpret_cast(encode::vkCmdPushDescriptorSet2) }, + { "vkCmdPushDescriptorSetWithTemplate2", reinterpret_cast(encode::vkCmdPushDescriptorSetWithTemplate2) }, + { "vkCmdSetLineStipple", reinterpret_cast(encode::vkCmdSetLineStipple) }, + { "vkCmdBindIndexBuffer2", reinterpret_cast(encode::vkCmdBindIndexBuffer2) }, + { "vkGetRenderingAreaGranularity", reinterpret_cast(encode::vkGetRenderingAreaGranularity) }, + { "vkCmdSetRenderingAttachmentLocations", reinterpret_cast(encode::vkCmdSetRenderingAttachmentLocations) }, + { "vkCmdSetRenderingInputAttachmentIndices", reinterpret_cast(encode::vkCmdSetRenderingInputAttachmentIndices) }, + { "vkDestroySurfaceKHR", reinterpret_cast(encode::vkDestroySurfaceKHR) }, + { "vkGetPhysicalDeviceSurfaceSupportKHR", reinterpret_cast(encode::vkGetPhysicalDeviceSurfaceSupportKHR) }, + { "vkGetPhysicalDeviceSurfaceCapabilitiesKHR", reinterpret_cast(encode::vkGetPhysicalDeviceSurfaceCapabilitiesKHR) }, + { "vkGetPhysicalDeviceSurfaceFormatsKHR", reinterpret_cast(encode::vkGetPhysicalDeviceSurfaceFormatsKHR) }, + { "vkGetPhysicalDeviceSurfacePresentModesKHR", reinterpret_cast(encode::vkGetPhysicalDeviceSurfacePresentModesKHR) }, + { "vkCreateSwapchainKHR", reinterpret_cast(encode::vkCreateSwapchainKHR) }, + { "vkDestroySwapchainKHR", reinterpret_cast(encode::vkDestroySwapchainKHR) }, + { "vkGetSwapchainImagesKHR", reinterpret_cast(encode::vkGetSwapchainImagesKHR) }, + { "vkAcquireNextImageKHR", reinterpret_cast(encode::vkAcquireNextImageKHR) }, + { "vkQueuePresentKHR", reinterpret_cast(encode::vkQueuePresentKHR) }, + { "vkGetDeviceGroupPresentCapabilitiesKHR", reinterpret_cast(encode::vkGetDeviceGroupPresentCapabilitiesKHR) }, + { "vkGetDeviceGroupSurfacePresentModesKHR", reinterpret_cast(encode::vkGetDeviceGroupSurfacePresentModesKHR) }, + { "vkGetPhysicalDevicePresentRectanglesKHR", reinterpret_cast(encode::vkGetPhysicalDevicePresentRectanglesKHR) }, + { "vkAcquireNextImage2KHR", reinterpret_cast(encode::vkAcquireNextImage2KHR) }, + { "vkGetPhysicalDeviceDisplayPropertiesKHR", reinterpret_cast(encode::vkGetPhysicalDeviceDisplayPropertiesKHR) }, + { "vkGetPhysicalDeviceDisplayPlanePropertiesKHR", reinterpret_cast(encode::vkGetPhysicalDeviceDisplayPlanePropertiesKHR) }, + { "vkGetDisplayPlaneSupportedDisplaysKHR", reinterpret_cast(encode::vkGetDisplayPlaneSupportedDisplaysKHR) }, + { "vkGetDisplayModePropertiesKHR", reinterpret_cast(encode::vkGetDisplayModePropertiesKHR) }, + { "vkCreateDisplayModeKHR", reinterpret_cast(encode::vkCreateDisplayModeKHR) }, + { "vkGetDisplayPlaneCapabilitiesKHR", reinterpret_cast(encode::vkGetDisplayPlaneCapabilitiesKHR) }, + { "vkCreateDisplayPlaneSurfaceKHR", reinterpret_cast(encode::vkCreateDisplayPlaneSurfaceKHR) }, + { "vkCreateSharedSwapchainsKHR", reinterpret_cast(encode::vkCreateSharedSwapchainsKHR) }, + { "vkCreateXlibSurfaceKHR", reinterpret_cast(encode::vkCreateXlibSurfaceKHR) }, + { "vkGetPhysicalDeviceXlibPresentationSupportKHR", reinterpret_cast(encode::vkGetPhysicalDeviceXlibPresentationSupportKHR) }, + { "vkCreateXcbSurfaceKHR", reinterpret_cast(encode::vkCreateXcbSurfaceKHR) }, + { "vkGetPhysicalDeviceXcbPresentationSupportKHR", reinterpret_cast(encode::vkGetPhysicalDeviceXcbPresentationSupportKHR) }, + { "vkCreateWaylandSurfaceKHR", reinterpret_cast(encode::vkCreateWaylandSurfaceKHR) }, + { "vkGetPhysicalDeviceWaylandPresentationSupportKHR", reinterpret_cast(encode::vkGetPhysicalDeviceWaylandPresentationSupportKHR) }, + { "vkCreateAndroidSurfaceKHR", reinterpret_cast(encode::vkCreateAndroidSurfaceKHR) }, + { "vkCreateWin32SurfaceKHR", reinterpret_cast(encode::vkCreateWin32SurfaceKHR) }, + { "vkGetPhysicalDeviceWin32PresentationSupportKHR", reinterpret_cast(encode::vkGetPhysicalDeviceWin32PresentationSupportKHR) }, + { "vkGetPhysicalDeviceVideoCapabilitiesKHR", reinterpret_cast(encode::vkGetPhysicalDeviceVideoCapabilitiesKHR) }, + { "vkGetPhysicalDeviceVideoFormatPropertiesKHR", reinterpret_cast(encode::vkGetPhysicalDeviceVideoFormatPropertiesKHR) }, + { "vkCreateVideoSessionKHR", reinterpret_cast(encode::vkCreateVideoSessionKHR) }, + { "vkDestroyVideoSessionKHR", reinterpret_cast(encode::vkDestroyVideoSessionKHR) }, + { "vkGetVideoSessionMemoryRequirementsKHR", reinterpret_cast(encode::vkGetVideoSessionMemoryRequirementsKHR) }, + { "vkBindVideoSessionMemoryKHR", reinterpret_cast(encode::vkBindVideoSessionMemoryKHR) }, + { "vkCreateVideoSessionParametersKHR", reinterpret_cast(encode::vkCreateVideoSessionParametersKHR) }, + { "vkUpdateVideoSessionParametersKHR", reinterpret_cast(encode::vkUpdateVideoSessionParametersKHR) }, + { "vkDestroyVideoSessionParametersKHR", reinterpret_cast(encode::vkDestroyVideoSessionParametersKHR) }, + { "vkCmdBeginVideoCodingKHR", reinterpret_cast(encode::vkCmdBeginVideoCodingKHR) }, + { "vkCmdEndVideoCodingKHR", reinterpret_cast(encode::vkCmdEndVideoCodingKHR) }, + { "vkCmdControlVideoCodingKHR", reinterpret_cast(encode::vkCmdControlVideoCodingKHR) }, + { "vkCmdDecodeVideoKHR", reinterpret_cast(encode::vkCmdDecodeVideoKHR) }, + { "vkCmdBeginRenderingKHR", reinterpret_cast(encode::vkCmdBeginRenderingKHR) }, + { "vkCmdEndRenderingKHR", reinterpret_cast(encode::vkCmdEndRenderingKHR) }, + { "vkGetPhysicalDeviceFeatures2KHR", reinterpret_cast(encode::vkGetPhysicalDeviceFeatures2KHR) }, + { "vkGetPhysicalDeviceProperties2KHR", reinterpret_cast(encode::vkGetPhysicalDeviceProperties2KHR) }, + { "vkGetPhysicalDeviceFormatProperties2KHR", reinterpret_cast(encode::vkGetPhysicalDeviceFormatProperties2KHR) }, + { "vkGetPhysicalDeviceImageFormatProperties2KHR", reinterpret_cast(encode::vkGetPhysicalDeviceImageFormatProperties2KHR) }, + { "vkGetPhysicalDeviceQueueFamilyProperties2KHR", reinterpret_cast(encode::vkGetPhysicalDeviceQueueFamilyProperties2KHR) }, + { "vkGetPhysicalDeviceMemoryProperties2KHR", reinterpret_cast(encode::vkGetPhysicalDeviceMemoryProperties2KHR) }, + { "vkGetPhysicalDeviceSparseImageFormatProperties2KHR", reinterpret_cast(encode::vkGetPhysicalDeviceSparseImageFormatProperties2KHR) }, + { "vkGetDeviceGroupPeerMemoryFeaturesKHR", reinterpret_cast(encode::vkGetDeviceGroupPeerMemoryFeaturesKHR) }, + { "vkCmdSetDeviceMaskKHR", reinterpret_cast(encode::vkCmdSetDeviceMaskKHR) }, + { "vkCmdDispatchBaseKHR", reinterpret_cast(encode::vkCmdDispatchBaseKHR) }, + { "vkTrimCommandPoolKHR", reinterpret_cast(encode::vkTrimCommandPoolKHR) }, + { "vkEnumeratePhysicalDeviceGroupsKHR", reinterpret_cast(encode::vkEnumeratePhysicalDeviceGroupsKHR) }, + { "vkGetPhysicalDeviceExternalBufferPropertiesKHR", reinterpret_cast(encode::vkGetPhysicalDeviceExternalBufferPropertiesKHR) }, + { "vkGetMemoryWin32HandleKHR", reinterpret_cast(encode::vkGetMemoryWin32HandleKHR) }, + { "vkGetMemoryWin32HandlePropertiesKHR", reinterpret_cast(encode::vkGetMemoryWin32HandlePropertiesKHR) }, + { "vkGetMemoryFdKHR", reinterpret_cast(encode::vkGetMemoryFdKHR) }, + { "vkGetMemoryFdPropertiesKHR", reinterpret_cast(encode::vkGetMemoryFdPropertiesKHR) }, + { "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR", reinterpret_cast(encode::vkGetPhysicalDeviceExternalSemaphorePropertiesKHR) }, + { "vkImportSemaphoreWin32HandleKHR", reinterpret_cast(encode::vkImportSemaphoreWin32HandleKHR) }, + { "vkGetSemaphoreWin32HandleKHR", reinterpret_cast(encode::vkGetSemaphoreWin32HandleKHR) }, + { "vkImportSemaphoreFdKHR", reinterpret_cast(encode::vkImportSemaphoreFdKHR) }, + { "vkGetSemaphoreFdKHR", reinterpret_cast(encode::vkGetSemaphoreFdKHR) }, + { "vkCmdPushDescriptorSetKHR", reinterpret_cast(encode::vkCmdPushDescriptorSetKHR) }, + { "vkCmdPushDescriptorSetWithTemplateKHR", reinterpret_cast(encode::vkCmdPushDescriptorSetWithTemplateKHR) }, + { "vkCreateDescriptorUpdateTemplateKHR", reinterpret_cast(encode::vkCreateDescriptorUpdateTemplateKHR) }, + { "vkDestroyDescriptorUpdateTemplateKHR", reinterpret_cast(encode::vkDestroyDescriptorUpdateTemplateKHR) }, + { "vkUpdateDescriptorSetWithTemplateKHR", reinterpret_cast(encode::vkUpdateDescriptorSetWithTemplateKHR) }, + { "vkCreateRenderPass2KHR", reinterpret_cast(encode::vkCreateRenderPass2KHR) }, + { "vkCmdBeginRenderPass2KHR", reinterpret_cast(encode::vkCmdBeginRenderPass2KHR) }, + { "vkCmdNextSubpass2KHR", reinterpret_cast(encode::vkCmdNextSubpass2KHR) }, + { "vkCmdEndRenderPass2KHR", reinterpret_cast(encode::vkCmdEndRenderPass2KHR) }, + { "vkGetSwapchainStatusKHR", reinterpret_cast(encode::vkGetSwapchainStatusKHR) }, + { "vkGetPhysicalDeviceExternalFencePropertiesKHR", reinterpret_cast(encode::vkGetPhysicalDeviceExternalFencePropertiesKHR) }, + { "vkImportFenceWin32HandleKHR", reinterpret_cast(encode::vkImportFenceWin32HandleKHR) }, + { "vkGetFenceWin32HandleKHR", reinterpret_cast(encode::vkGetFenceWin32HandleKHR) }, + { "vkImportFenceFdKHR", reinterpret_cast(encode::vkImportFenceFdKHR) }, + { "vkGetFenceFdKHR", reinterpret_cast(encode::vkGetFenceFdKHR) }, + { "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR", reinterpret_cast(encode::vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR) }, + { "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR", reinterpret_cast(encode::vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR) }, + { "vkAcquireProfilingLockKHR", reinterpret_cast(encode::vkAcquireProfilingLockKHR) }, + { "vkReleaseProfilingLockKHR", reinterpret_cast(encode::vkReleaseProfilingLockKHR) }, + { "vkGetPhysicalDeviceSurfaceCapabilities2KHR", reinterpret_cast(encode::vkGetPhysicalDeviceSurfaceCapabilities2KHR) }, + { "vkGetPhysicalDeviceSurfaceFormats2KHR", reinterpret_cast(encode::vkGetPhysicalDeviceSurfaceFormats2KHR) }, + { "vkGetPhysicalDeviceDisplayProperties2KHR", reinterpret_cast(encode::vkGetPhysicalDeviceDisplayProperties2KHR) }, + { "vkGetPhysicalDeviceDisplayPlaneProperties2KHR", reinterpret_cast(encode::vkGetPhysicalDeviceDisplayPlaneProperties2KHR) }, + { "vkGetDisplayModeProperties2KHR", reinterpret_cast(encode::vkGetDisplayModeProperties2KHR) }, + { "vkGetDisplayPlaneCapabilities2KHR", reinterpret_cast(encode::vkGetDisplayPlaneCapabilities2KHR) }, + { "vkGetImageMemoryRequirements2KHR", reinterpret_cast(encode::vkGetImageMemoryRequirements2KHR) }, + { "vkGetBufferMemoryRequirements2KHR", reinterpret_cast(encode::vkGetBufferMemoryRequirements2KHR) }, + { "vkGetImageSparseMemoryRequirements2KHR", reinterpret_cast(encode::vkGetImageSparseMemoryRequirements2KHR) }, + { "vkCreateSamplerYcbcrConversionKHR", reinterpret_cast(encode::vkCreateSamplerYcbcrConversionKHR) }, + { "vkDestroySamplerYcbcrConversionKHR", reinterpret_cast(encode::vkDestroySamplerYcbcrConversionKHR) }, + { "vkBindBufferMemory2KHR", reinterpret_cast(encode::vkBindBufferMemory2KHR) }, + { "vkBindImageMemory2KHR", reinterpret_cast(encode::vkBindImageMemory2KHR) }, + { "vkGetDescriptorSetLayoutSupportKHR", reinterpret_cast(encode::vkGetDescriptorSetLayoutSupportKHR) }, + { "vkCmdDrawIndirectCountKHR", reinterpret_cast(encode::vkCmdDrawIndirectCountKHR) }, + { "vkCmdDrawIndexedIndirectCountKHR", reinterpret_cast(encode::vkCmdDrawIndexedIndirectCountKHR) }, + { "vkGetSemaphoreCounterValueKHR", reinterpret_cast(encode::vkGetSemaphoreCounterValueKHR) }, + { "vkWaitSemaphoresKHR", reinterpret_cast(encode::vkWaitSemaphoresKHR) }, + { "vkSignalSemaphoreKHR", reinterpret_cast(encode::vkSignalSemaphoreKHR) }, + { "vkGetPhysicalDeviceFragmentShadingRatesKHR", reinterpret_cast(encode::vkGetPhysicalDeviceFragmentShadingRatesKHR) }, + { "vkCmdSetFragmentShadingRateKHR", reinterpret_cast(encode::vkCmdSetFragmentShadingRateKHR) }, + { "vkCmdSetRenderingAttachmentLocationsKHR", reinterpret_cast(encode::vkCmdSetRenderingAttachmentLocationsKHR) }, + { "vkCmdSetRenderingInputAttachmentIndicesKHR", reinterpret_cast(encode::vkCmdSetRenderingInputAttachmentIndicesKHR) }, + { "vkWaitForPresentKHR", reinterpret_cast(encode::vkWaitForPresentKHR) }, + { "vkGetBufferDeviceAddressKHR", reinterpret_cast(encode::vkGetBufferDeviceAddressKHR) }, + { "vkGetBufferOpaqueCaptureAddressKHR", reinterpret_cast(encode::vkGetBufferOpaqueCaptureAddressKHR) }, + { "vkGetDeviceMemoryOpaqueCaptureAddressKHR", reinterpret_cast(encode::vkGetDeviceMemoryOpaqueCaptureAddressKHR) }, + { "vkCreateDeferredOperationKHR", reinterpret_cast(encode::vkCreateDeferredOperationKHR) }, + { "vkDestroyDeferredOperationKHR", reinterpret_cast(encode::vkDestroyDeferredOperationKHR) }, + { "vkGetDeferredOperationMaxConcurrencyKHR", reinterpret_cast(encode::vkGetDeferredOperationMaxConcurrencyKHR) }, + { "vkGetDeferredOperationResultKHR", reinterpret_cast(encode::vkGetDeferredOperationResultKHR) }, + { "vkDeferredOperationJoinKHR", reinterpret_cast(encode::vkDeferredOperationJoinKHR) }, + { "vkGetPipelineExecutablePropertiesKHR", reinterpret_cast(encode::vkGetPipelineExecutablePropertiesKHR) }, + { "vkGetPipelineExecutableStatisticsKHR", reinterpret_cast(encode::vkGetPipelineExecutableStatisticsKHR) }, + { "vkGetPipelineExecutableInternalRepresentationsKHR", reinterpret_cast(encode::vkGetPipelineExecutableInternalRepresentationsKHR) }, + { "vkMapMemory2KHR", reinterpret_cast(encode::vkMapMemory2KHR) }, + { "vkUnmapMemory2KHR", reinterpret_cast(encode::vkUnmapMemory2KHR) }, + { "vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR", reinterpret_cast(encode::vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR) }, + { "vkGetEncodedVideoSessionParametersKHR", reinterpret_cast(encode::vkGetEncodedVideoSessionParametersKHR) }, + { "vkCmdEncodeVideoKHR", reinterpret_cast(encode::vkCmdEncodeVideoKHR) }, + { "vkCmdSetEvent2KHR", reinterpret_cast(encode::vkCmdSetEvent2KHR) }, + { "vkCmdResetEvent2KHR", reinterpret_cast(encode::vkCmdResetEvent2KHR) }, + { "vkCmdWaitEvents2KHR", reinterpret_cast(encode::vkCmdWaitEvents2KHR) }, + { "vkCmdPipelineBarrier2KHR", reinterpret_cast(encode::vkCmdPipelineBarrier2KHR) }, + { "vkCmdWriteTimestamp2KHR", reinterpret_cast(encode::vkCmdWriteTimestamp2KHR) }, + { "vkQueueSubmit2KHR", reinterpret_cast(encode::vkQueueSubmit2KHR) }, + { "vkCmdCopyBuffer2KHR", reinterpret_cast(encode::vkCmdCopyBuffer2KHR) }, + { "vkCmdCopyImage2KHR", reinterpret_cast(encode::vkCmdCopyImage2KHR) }, + { "vkCmdCopyBufferToImage2KHR", reinterpret_cast(encode::vkCmdCopyBufferToImage2KHR) }, + { "vkCmdCopyImageToBuffer2KHR", reinterpret_cast(encode::vkCmdCopyImageToBuffer2KHR) }, + { "vkCmdBlitImage2KHR", reinterpret_cast(encode::vkCmdBlitImage2KHR) }, + { "vkCmdResolveImage2KHR", reinterpret_cast(encode::vkCmdResolveImage2KHR) }, + { "vkCmdTraceRaysIndirect2KHR", reinterpret_cast(encode::vkCmdTraceRaysIndirect2KHR) }, + { "vkGetDeviceBufferMemoryRequirementsKHR", reinterpret_cast(encode::vkGetDeviceBufferMemoryRequirementsKHR) }, + { "vkGetDeviceImageMemoryRequirementsKHR", reinterpret_cast(encode::vkGetDeviceImageMemoryRequirementsKHR) }, + { "vkGetDeviceImageSparseMemoryRequirementsKHR", reinterpret_cast(encode::vkGetDeviceImageSparseMemoryRequirementsKHR) }, + { "vkCmdBindIndexBuffer2KHR", reinterpret_cast(encode::vkCmdBindIndexBuffer2KHR) }, + { "vkGetRenderingAreaGranularityKHR", reinterpret_cast(encode::vkGetRenderingAreaGranularityKHR) }, + { "vkGetDeviceImageSubresourceLayoutKHR", reinterpret_cast(encode::vkGetDeviceImageSubresourceLayoutKHR) }, + { "vkGetImageSubresourceLayout2KHR", reinterpret_cast(encode::vkGetImageSubresourceLayout2KHR) }, + { "vkWaitForPresent2KHR", reinterpret_cast(encode::vkWaitForPresent2KHR) }, + { "vkCreatePipelineBinariesKHR", reinterpret_cast(encode::vkCreatePipelineBinariesKHR) }, + { "vkDestroyPipelineBinaryKHR", reinterpret_cast(encode::vkDestroyPipelineBinaryKHR) }, + { "vkGetPipelineKeyKHR", reinterpret_cast(encode::vkGetPipelineKeyKHR) }, + { "vkGetPipelineBinaryDataKHR", reinterpret_cast(encode::vkGetPipelineBinaryDataKHR) }, + { "vkReleaseCapturedPipelineDataKHR", reinterpret_cast(encode::vkReleaseCapturedPipelineDataKHR) }, + { "vkReleaseSwapchainImagesKHR", reinterpret_cast(encode::vkReleaseSwapchainImagesKHR) }, + { "vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR", reinterpret_cast(encode::vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR) }, + { "vkCmdSetLineStippleKHR", reinterpret_cast(encode::vkCmdSetLineStippleKHR) }, + { "vkGetPhysicalDeviceCalibrateableTimeDomainsKHR", reinterpret_cast(encode::vkGetPhysicalDeviceCalibrateableTimeDomainsKHR) }, + { "vkGetCalibratedTimestampsKHR", reinterpret_cast(encode::vkGetCalibratedTimestampsKHR) }, + { "vkCmdBindDescriptorSets2KHR", reinterpret_cast(encode::vkCmdBindDescriptorSets2KHR) }, + { "vkCmdPushConstants2KHR", reinterpret_cast(encode::vkCmdPushConstants2KHR) }, + { "vkCmdPushDescriptorSet2KHR", reinterpret_cast(encode::vkCmdPushDescriptorSet2KHR) }, + { "vkCmdPushDescriptorSetWithTemplate2KHR", reinterpret_cast(encode::vkCmdPushDescriptorSetWithTemplate2KHR) }, + { "vkCmdSetDescriptorBufferOffsets2EXT", reinterpret_cast(encode::vkCmdSetDescriptorBufferOffsets2EXT) }, + { "vkCmdBindDescriptorBufferEmbeddedSamplers2EXT", reinterpret_cast(encode::vkCmdBindDescriptorBufferEmbeddedSamplers2EXT) }, + { "vkCmdCopyMemoryIndirectKHR", reinterpret_cast(encode::vkCmdCopyMemoryIndirectKHR) }, + { "vkCmdCopyMemoryToImageIndirectKHR", reinterpret_cast(encode::vkCmdCopyMemoryToImageIndirectKHR) }, + { "vkCmdEndRendering2KHR", reinterpret_cast(encode::vkCmdEndRendering2KHR) }, + { "vkFrameBoundaryANDROID", reinterpret_cast(encode::vkFrameBoundaryANDROID) }, + { "vkCreateDebugReportCallbackEXT", reinterpret_cast(encode::vkCreateDebugReportCallbackEXT) }, + { "vkDestroyDebugReportCallbackEXT", reinterpret_cast(encode::vkDestroyDebugReportCallbackEXT) }, + { "vkDebugReportMessageEXT", reinterpret_cast(encode::vkDebugReportMessageEXT) }, + { "vkDebugMarkerSetObjectTagEXT", reinterpret_cast(encode::vkDebugMarkerSetObjectTagEXT) }, + { "vkDebugMarkerSetObjectNameEXT", reinterpret_cast(encode::vkDebugMarkerSetObjectNameEXT) }, + { "vkCmdDebugMarkerBeginEXT", reinterpret_cast(encode::vkCmdDebugMarkerBeginEXT) }, + { "vkCmdDebugMarkerEndEXT", reinterpret_cast(encode::vkCmdDebugMarkerEndEXT) }, + { "vkCmdDebugMarkerInsertEXT", reinterpret_cast(encode::vkCmdDebugMarkerInsertEXT) }, + { "vkCmdBindTransformFeedbackBuffersEXT", reinterpret_cast(encode::vkCmdBindTransformFeedbackBuffersEXT) }, + { "vkCmdBeginTransformFeedbackEXT", reinterpret_cast(encode::vkCmdBeginTransformFeedbackEXT) }, + { "vkCmdEndTransformFeedbackEXT", reinterpret_cast(encode::vkCmdEndTransformFeedbackEXT) }, + { "vkCmdBeginQueryIndexedEXT", reinterpret_cast(encode::vkCmdBeginQueryIndexedEXT) }, + { "vkCmdEndQueryIndexedEXT", reinterpret_cast(encode::vkCmdEndQueryIndexedEXT) }, + { "vkCmdDrawIndirectByteCountEXT", reinterpret_cast(encode::vkCmdDrawIndirectByteCountEXT) }, + { "vkGetImageViewHandleNVX", reinterpret_cast(encode::vkGetImageViewHandleNVX) }, + { "vkGetImageViewHandle64NVX", reinterpret_cast(encode::vkGetImageViewHandle64NVX) }, + { "vkGetImageViewAddressNVX", reinterpret_cast(encode::vkGetImageViewAddressNVX) }, + { "vkCmdDrawIndirectCountAMD", reinterpret_cast(encode::vkCmdDrawIndirectCountAMD) }, + { "vkCmdDrawIndexedIndirectCountAMD", reinterpret_cast(encode::vkCmdDrawIndexedIndirectCountAMD) }, + { "vkGetShaderInfoAMD", reinterpret_cast(encode::vkGetShaderInfoAMD) }, + { "vkCreateStreamDescriptorSurfaceGGP", reinterpret_cast(encode::vkCreateStreamDescriptorSurfaceGGP) }, + { "vkGetPhysicalDeviceExternalImageFormatPropertiesNV", reinterpret_cast(encode::vkGetPhysicalDeviceExternalImageFormatPropertiesNV) }, + { "vkGetMemoryWin32HandleNV", reinterpret_cast(encode::vkGetMemoryWin32HandleNV) }, + { "vkCreateViSurfaceNN", reinterpret_cast(encode::vkCreateViSurfaceNN) }, + { "vkCmdBeginConditionalRenderingEXT", reinterpret_cast(encode::vkCmdBeginConditionalRenderingEXT) }, + { "vkCmdEndConditionalRenderingEXT", reinterpret_cast(encode::vkCmdEndConditionalRenderingEXT) }, + { "vkCmdSetViewportWScalingNV", reinterpret_cast(encode::vkCmdSetViewportWScalingNV) }, + { "vkReleaseDisplayEXT", reinterpret_cast(encode::vkReleaseDisplayEXT) }, + { "vkAcquireXlibDisplayEXT", reinterpret_cast(encode::vkAcquireXlibDisplayEXT) }, + { "vkGetRandROutputDisplayEXT", reinterpret_cast(encode::vkGetRandROutputDisplayEXT) }, + { "vkGetPhysicalDeviceSurfaceCapabilities2EXT", reinterpret_cast(encode::vkGetPhysicalDeviceSurfaceCapabilities2EXT) }, + { "vkDisplayPowerControlEXT", reinterpret_cast(encode::vkDisplayPowerControlEXT) }, + { "vkRegisterDeviceEventEXT", reinterpret_cast(encode::vkRegisterDeviceEventEXT) }, + { "vkRegisterDisplayEventEXT", reinterpret_cast(encode::vkRegisterDisplayEventEXT) }, + { "vkGetSwapchainCounterEXT", reinterpret_cast(encode::vkGetSwapchainCounterEXT) }, + { "vkGetRefreshCycleDurationGOOGLE", reinterpret_cast(encode::vkGetRefreshCycleDurationGOOGLE) }, + { "vkGetPastPresentationTimingGOOGLE", reinterpret_cast(encode::vkGetPastPresentationTimingGOOGLE) }, + { "vkCmdSetDiscardRectangleEXT", reinterpret_cast(encode::vkCmdSetDiscardRectangleEXT) }, + { "vkCmdSetDiscardRectangleEnableEXT", reinterpret_cast(encode::vkCmdSetDiscardRectangleEnableEXT) }, + { "vkCmdSetDiscardRectangleModeEXT", reinterpret_cast(encode::vkCmdSetDiscardRectangleModeEXT) }, + { "vkSetHdrMetadataEXT", reinterpret_cast(encode::vkSetHdrMetadataEXT) }, + { "vkCreateIOSSurfaceMVK", reinterpret_cast(encode::vkCreateIOSSurfaceMVK) }, + { "vkCreateMacOSSurfaceMVK", reinterpret_cast(encode::vkCreateMacOSSurfaceMVK) }, + { "vkSetDebugUtilsObjectNameEXT", reinterpret_cast(encode::vkSetDebugUtilsObjectNameEXT) }, + { "vkSetDebugUtilsObjectTagEXT", reinterpret_cast(encode::vkSetDebugUtilsObjectTagEXT) }, + { "vkQueueBeginDebugUtilsLabelEXT", reinterpret_cast(encode::vkQueueBeginDebugUtilsLabelEXT) }, + { "vkQueueEndDebugUtilsLabelEXT", reinterpret_cast(encode::vkQueueEndDebugUtilsLabelEXT) }, + { "vkQueueInsertDebugUtilsLabelEXT", reinterpret_cast(encode::vkQueueInsertDebugUtilsLabelEXT) }, + { "vkCmdBeginDebugUtilsLabelEXT", reinterpret_cast(encode::vkCmdBeginDebugUtilsLabelEXT) }, + { "vkCmdEndDebugUtilsLabelEXT", reinterpret_cast(encode::vkCmdEndDebugUtilsLabelEXT) }, + { "vkCmdInsertDebugUtilsLabelEXT", reinterpret_cast(encode::vkCmdInsertDebugUtilsLabelEXT) }, + { "vkCreateDebugUtilsMessengerEXT", reinterpret_cast(encode::vkCreateDebugUtilsMessengerEXT) }, + { "vkDestroyDebugUtilsMessengerEXT", reinterpret_cast(encode::vkDestroyDebugUtilsMessengerEXT) }, + { "vkSubmitDebugUtilsMessageEXT", reinterpret_cast(encode::vkSubmitDebugUtilsMessageEXT) }, + { "vkGetAndroidHardwareBufferPropertiesANDROID", reinterpret_cast(encode::vkGetAndroidHardwareBufferPropertiesANDROID) }, + { "vkGetMemoryAndroidHardwareBufferANDROID", reinterpret_cast(encode::vkGetMemoryAndroidHardwareBufferANDROID) }, + { "vkCmdSetSampleLocationsEXT", reinterpret_cast(encode::vkCmdSetSampleLocationsEXT) }, + { "vkGetPhysicalDeviceMultisamplePropertiesEXT", reinterpret_cast(encode::vkGetPhysicalDeviceMultisamplePropertiesEXT) }, + { "vkGetImageDrmFormatModifierPropertiesEXT", reinterpret_cast(encode::vkGetImageDrmFormatModifierPropertiesEXT) }, + { "vkCreateValidationCacheEXT", reinterpret_cast(encode::vkCreateValidationCacheEXT) }, + { "vkDestroyValidationCacheEXT", reinterpret_cast(encode::vkDestroyValidationCacheEXT) }, + { "vkMergeValidationCachesEXT", reinterpret_cast(encode::vkMergeValidationCachesEXT) }, + { "vkGetValidationCacheDataEXT", reinterpret_cast(encode::vkGetValidationCacheDataEXT) }, + { "vkCmdBindShadingRateImageNV", reinterpret_cast(encode::vkCmdBindShadingRateImageNV) }, + { "vkCmdSetViewportShadingRatePaletteNV", reinterpret_cast(encode::vkCmdSetViewportShadingRatePaletteNV) }, + { "vkCmdSetCoarseSampleOrderNV", reinterpret_cast(encode::vkCmdSetCoarseSampleOrderNV) }, + { "vkCreateAccelerationStructureNV", reinterpret_cast(encode::vkCreateAccelerationStructureNV) }, + { "vkDestroyAccelerationStructureNV", reinterpret_cast(encode::vkDestroyAccelerationStructureNV) }, + { "vkGetAccelerationStructureMemoryRequirementsNV", reinterpret_cast(encode::vkGetAccelerationStructureMemoryRequirementsNV) }, + { "vkBindAccelerationStructureMemoryNV", reinterpret_cast(encode::vkBindAccelerationStructureMemoryNV) }, + { "vkCmdBuildAccelerationStructureNV", reinterpret_cast(encode::vkCmdBuildAccelerationStructureNV) }, + { "vkCmdCopyAccelerationStructureNV", reinterpret_cast(encode::vkCmdCopyAccelerationStructureNV) }, + { "vkCmdTraceRaysNV", reinterpret_cast(encode::vkCmdTraceRaysNV) }, + { "vkCreateRayTracingPipelinesNV", reinterpret_cast(encode::vkCreateRayTracingPipelinesNV) }, + { "vkGetRayTracingShaderGroupHandlesKHR", reinterpret_cast(encode::vkGetRayTracingShaderGroupHandlesKHR) }, + { "vkGetRayTracingShaderGroupHandlesNV", reinterpret_cast(encode::vkGetRayTracingShaderGroupHandlesNV) }, + { "vkGetAccelerationStructureHandleNV", reinterpret_cast(encode::vkGetAccelerationStructureHandleNV) }, + { "vkCmdWriteAccelerationStructuresPropertiesNV", reinterpret_cast(encode::vkCmdWriteAccelerationStructuresPropertiesNV) }, + { "vkCompileDeferredNV", reinterpret_cast(encode::vkCompileDeferredNV) }, + { "vkGetMemoryHostPointerPropertiesEXT", reinterpret_cast(encode::vkGetMemoryHostPointerPropertiesEXT) }, + { "vkCmdWriteBufferMarkerAMD", reinterpret_cast(encode::vkCmdWriteBufferMarkerAMD) }, + { "vkCmdWriteBufferMarker2AMD", reinterpret_cast(encode::vkCmdWriteBufferMarker2AMD) }, + { "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT", reinterpret_cast(encode::vkGetPhysicalDeviceCalibrateableTimeDomainsEXT) }, + { "vkGetCalibratedTimestampsEXT", reinterpret_cast(encode::vkGetCalibratedTimestampsEXT) }, + { "vkCmdDrawMeshTasksNV", reinterpret_cast(encode::vkCmdDrawMeshTasksNV) }, + { "vkCmdDrawMeshTasksIndirectNV", reinterpret_cast(encode::vkCmdDrawMeshTasksIndirectNV) }, + { "vkCmdDrawMeshTasksIndirectCountNV", reinterpret_cast(encode::vkCmdDrawMeshTasksIndirectCountNV) }, + { "vkCmdSetExclusiveScissorEnableNV", reinterpret_cast(encode::vkCmdSetExclusiveScissorEnableNV) }, + { "vkCmdSetExclusiveScissorNV", reinterpret_cast(encode::vkCmdSetExclusiveScissorNV) }, + { "vkCmdSetCheckpointNV", reinterpret_cast(encode::vkCmdSetCheckpointNV) }, + { "vkGetQueueCheckpointDataNV", reinterpret_cast(encode::vkGetQueueCheckpointDataNV) }, + { "vkGetQueueCheckpointData2NV", reinterpret_cast(encode::vkGetQueueCheckpointData2NV) }, + { "vkSetSwapchainPresentTimingQueueSizeEXT", reinterpret_cast(encode::vkSetSwapchainPresentTimingQueueSizeEXT) }, + { "vkGetSwapchainTimingPropertiesEXT", reinterpret_cast(encode::vkGetSwapchainTimingPropertiesEXT) }, + { "vkGetSwapchainTimeDomainPropertiesEXT", reinterpret_cast(encode::vkGetSwapchainTimeDomainPropertiesEXT) }, + { "vkGetPastPresentationTimingEXT", reinterpret_cast(encode::vkGetPastPresentationTimingEXT) }, + { "vkInitializePerformanceApiINTEL", reinterpret_cast(encode::vkInitializePerformanceApiINTEL) }, + { "vkUninitializePerformanceApiINTEL", reinterpret_cast(encode::vkUninitializePerformanceApiINTEL) }, + { "vkCmdSetPerformanceMarkerINTEL", reinterpret_cast(encode::vkCmdSetPerformanceMarkerINTEL) }, + { "vkCmdSetPerformanceStreamMarkerINTEL", reinterpret_cast(encode::vkCmdSetPerformanceStreamMarkerINTEL) }, + { "vkCmdSetPerformanceOverrideINTEL", reinterpret_cast(encode::vkCmdSetPerformanceOverrideINTEL) }, + { "vkAcquirePerformanceConfigurationINTEL", reinterpret_cast(encode::vkAcquirePerformanceConfigurationINTEL) }, + { "vkReleasePerformanceConfigurationINTEL", reinterpret_cast(encode::vkReleasePerformanceConfigurationINTEL) }, + { "vkQueueSetPerformanceConfigurationINTEL", reinterpret_cast(encode::vkQueueSetPerformanceConfigurationINTEL) }, + { "vkGetPerformanceParameterINTEL", reinterpret_cast(encode::vkGetPerformanceParameterINTEL) }, + { "vkSetLocalDimmingAMD", reinterpret_cast(encode::vkSetLocalDimmingAMD) }, + { "vkCreateImagePipeSurfaceFUCHSIA", reinterpret_cast(encode::vkCreateImagePipeSurfaceFUCHSIA) }, + { "vkCreateMetalSurfaceEXT", reinterpret_cast(encode::vkCreateMetalSurfaceEXT) }, + { "vkGetBufferDeviceAddressEXT", reinterpret_cast(encode::vkGetBufferDeviceAddressEXT) }, + { "vkGetPhysicalDeviceToolPropertiesEXT", reinterpret_cast(encode::vkGetPhysicalDeviceToolPropertiesEXT) }, + { "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV", reinterpret_cast(encode::vkGetPhysicalDeviceCooperativeMatrixPropertiesNV) }, + { "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", reinterpret_cast(encode::vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV) }, + { "vkGetPhysicalDeviceSurfacePresentModes2EXT", reinterpret_cast(encode::vkGetPhysicalDeviceSurfacePresentModes2EXT) }, + { "vkAcquireFullScreenExclusiveModeEXT", reinterpret_cast(encode::vkAcquireFullScreenExclusiveModeEXT) }, + { "vkReleaseFullScreenExclusiveModeEXT", reinterpret_cast(encode::vkReleaseFullScreenExclusiveModeEXT) }, + { "vkGetDeviceGroupSurfacePresentModes2EXT", reinterpret_cast(encode::vkGetDeviceGroupSurfacePresentModes2EXT) }, + { "vkCreateHeadlessSurfaceEXT", reinterpret_cast(encode::vkCreateHeadlessSurfaceEXT) }, + { "vkCmdSetLineStippleEXT", reinterpret_cast(encode::vkCmdSetLineStippleEXT) }, + { "vkResetQueryPoolEXT", reinterpret_cast(encode::vkResetQueryPoolEXT) }, + { "vkCmdSetCullModeEXT", reinterpret_cast(encode::vkCmdSetCullModeEXT) }, + { "vkCmdSetFrontFaceEXT", reinterpret_cast(encode::vkCmdSetFrontFaceEXT) }, + { "vkCmdSetPrimitiveTopologyEXT", reinterpret_cast(encode::vkCmdSetPrimitiveTopologyEXT) }, + { "vkCmdSetViewportWithCountEXT", reinterpret_cast(encode::vkCmdSetViewportWithCountEXT) }, + { "vkCmdSetScissorWithCountEXT", reinterpret_cast(encode::vkCmdSetScissorWithCountEXT) }, + { "vkCmdBindVertexBuffers2EXT", reinterpret_cast(encode::vkCmdBindVertexBuffers2EXT) }, + { "vkCmdSetDepthTestEnableEXT", reinterpret_cast(encode::vkCmdSetDepthTestEnableEXT) }, + { "vkCmdSetDepthWriteEnableEXT", reinterpret_cast(encode::vkCmdSetDepthWriteEnableEXT) }, + { "vkCmdSetDepthCompareOpEXT", reinterpret_cast(encode::vkCmdSetDepthCompareOpEXT) }, + { "vkCmdSetDepthBoundsTestEnableEXT", reinterpret_cast(encode::vkCmdSetDepthBoundsTestEnableEXT) }, + { "vkCmdSetStencilTestEnableEXT", reinterpret_cast(encode::vkCmdSetStencilTestEnableEXT) }, + { "vkCmdSetStencilOpEXT", reinterpret_cast(encode::vkCmdSetStencilOpEXT) }, + { "vkCopyMemoryToImageEXT", reinterpret_cast(encode::vkCopyMemoryToImageEXT) }, + { "vkCopyImageToMemoryEXT", reinterpret_cast(encode::vkCopyImageToMemoryEXT) }, + { "vkCopyImageToImageEXT", reinterpret_cast(encode::vkCopyImageToImageEXT) }, + { "vkTransitionImageLayoutEXT", reinterpret_cast(encode::vkTransitionImageLayoutEXT) }, + { "vkGetImageSubresourceLayout2EXT", reinterpret_cast(encode::vkGetImageSubresourceLayout2EXT) }, + { "vkReleaseSwapchainImagesEXT", reinterpret_cast(encode::vkReleaseSwapchainImagesEXT) }, + { "vkGetGeneratedCommandsMemoryRequirementsNV", reinterpret_cast(encode::vkGetGeneratedCommandsMemoryRequirementsNV) }, + { "vkCmdPreprocessGeneratedCommandsNV", reinterpret_cast(encode::vkCmdPreprocessGeneratedCommandsNV) }, + { "vkCmdExecuteGeneratedCommandsNV", reinterpret_cast(encode::vkCmdExecuteGeneratedCommandsNV) }, + { "vkCmdBindPipelineShaderGroupNV", reinterpret_cast(encode::vkCmdBindPipelineShaderGroupNV) }, + { "vkCreateIndirectCommandsLayoutNV", reinterpret_cast(encode::vkCreateIndirectCommandsLayoutNV) }, + { "vkDestroyIndirectCommandsLayoutNV", reinterpret_cast(encode::vkDestroyIndirectCommandsLayoutNV) }, + { "vkCmdSetDepthBias2EXT", reinterpret_cast(encode::vkCmdSetDepthBias2EXT) }, + { "vkAcquireDrmDisplayEXT", reinterpret_cast(encode::vkAcquireDrmDisplayEXT) }, + { "vkGetDrmDisplayEXT", reinterpret_cast(encode::vkGetDrmDisplayEXT) }, + { "vkCreatePrivateDataSlotEXT", reinterpret_cast(encode::vkCreatePrivateDataSlotEXT) }, + { "vkDestroyPrivateDataSlotEXT", reinterpret_cast(encode::vkDestroyPrivateDataSlotEXT) }, + { "vkSetPrivateDataEXT", reinterpret_cast(encode::vkSetPrivateDataEXT) }, + { "vkGetPrivateDataEXT", reinterpret_cast(encode::vkGetPrivateDataEXT) }, + { "vkCmdDispatchTileQCOM", reinterpret_cast(encode::vkCmdDispatchTileQCOM) }, + { "vkCmdBeginPerTileExecutionQCOM", reinterpret_cast(encode::vkCmdBeginPerTileExecutionQCOM) }, + { "vkCmdEndPerTileExecutionQCOM", reinterpret_cast(encode::vkCmdEndPerTileExecutionQCOM) }, + { "vkGetDescriptorSetLayoutSizeEXT", reinterpret_cast(encode::vkGetDescriptorSetLayoutSizeEXT) }, + { "vkGetDescriptorSetLayoutBindingOffsetEXT", reinterpret_cast(encode::vkGetDescriptorSetLayoutBindingOffsetEXT) }, + { "vkGetDescriptorEXT", reinterpret_cast(encode::vkGetDescriptorEXT) }, + { "vkCmdBindDescriptorBuffersEXT", reinterpret_cast(encode::vkCmdBindDescriptorBuffersEXT) }, + { "vkCmdSetDescriptorBufferOffsetsEXT", reinterpret_cast(encode::vkCmdSetDescriptorBufferOffsetsEXT) }, + { "vkCmdBindDescriptorBufferEmbeddedSamplersEXT", reinterpret_cast(encode::vkCmdBindDescriptorBufferEmbeddedSamplersEXT) }, + { "vkGetBufferOpaqueCaptureDescriptorDataEXT", reinterpret_cast(encode::vkGetBufferOpaqueCaptureDescriptorDataEXT) }, + { "vkGetImageOpaqueCaptureDescriptorDataEXT", reinterpret_cast(encode::vkGetImageOpaqueCaptureDescriptorDataEXT) }, + { "vkGetImageViewOpaqueCaptureDescriptorDataEXT", reinterpret_cast(encode::vkGetImageViewOpaqueCaptureDescriptorDataEXT) }, + { "vkGetSamplerOpaqueCaptureDescriptorDataEXT", reinterpret_cast(encode::vkGetSamplerOpaqueCaptureDescriptorDataEXT) }, + { "vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT", reinterpret_cast(encode::vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT) }, + { "vkCmdSetFragmentShadingRateEnumNV", reinterpret_cast(encode::vkCmdSetFragmentShadingRateEnumNV) }, + { "vkGetDeviceFaultInfoEXT", reinterpret_cast(encode::vkGetDeviceFaultInfoEXT) }, + { "vkAcquireWinrtDisplayNV", reinterpret_cast(encode::vkAcquireWinrtDisplayNV) }, + { "vkGetWinrtDisplayNV", reinterpret_cast(encode::vkGetWinrtDisplayNV) }, + { "vkCreateDirectFBSurfaceEXT", reinterpret_cast(encode::vkCreateDirectFBSurfaceEXT) }, + { "vkGetPhysicalDeviceDirectFBPresentationSupportEXT", reinterpret_cast(encode::vkGetPhysicalDeviceDirectFBPresentationSupportEXT) }, + { "vkCmdSetVertexInputEXT", reinterpret_cast(encode::vkCmdSetVertexInputEXT) }, + { "vkGetMemoryZirconHandleFUCHSIA", reinterpret_cast(encode::vkGetMemoryZirconHandleFUCHSIA) }, + { "vkGetMemoryZirconHandlePropertiesFUCHSIA", reinterpret_cast(encode::vkGetMemoryZirconHandlePropertiesFUCHSIA) }, + { "vkImportSemaphoreZirconHandleFUCHSIA", reinterpret_cast(encode::vkImportSemaphoreZirconHandleFUCHSIA) }, + { "vkGetSemaphoreZirconHandleFUCHSIA", reinterpret_cast(encode::vkGetSemaphoreZirconHandleFUCHSIA) }, + { "vkCmdBindInvocationMaskHUAWEI", reinterpret_cast(encode::vkCmdBindInvocationMaskHUAWEI) }, + { "vkGetMemoryRemoteAddressNV", reinterpret_cast(encode::vkGetMemoryRemoteAddressNV) }, + { "vkCmdSetPatchControlPointsEXT", reinterpret_cast(encode::vkCmdSetPatchControlPointsEXT) }, + { "vkCmdSetRasterizerDiscardEnableEXT", reinterpret_cast(encode::vkCmdSetRasterizerDiscardEnableEXT) }, + { "vkCmdSetDepthBiasEnableEXT", reinterpret_cast(encode::vkCmdSetDepthBiasEnableEXT) }, + { "vkCmdSetLogicOpEXT", reinterpret_cast(encode::vkCmdSetLogicOpEXT) }, + { "vkCmdSetPrimitiveRestartEnableEXT", reinterpret_cast(encode::vkCmdSetPrimitiveRestartEnableEXT) }, + { "vkCreateScreenSurfaceQNX", reinterpret_cast(encode::vkCreateScreenSurfaceQNX) }, + { "vkGetPhysicalDeviceScreenPresentationSupportQNX", reinterpret_cast(encode::vkGetPhysicalDeviceScreenPresentationSupportQNX) }, + { "vkCmdSetColorWriteEnableEXT", reinterpret_cast(encode::vkCmdSetColorWriteEnableEXT) }, + { "vkCmdDrawMultiEXT", reinterpret_cast(encode::vkCmdDrawMultiEXT) }, + { "vkCmdDrawMultiIndexedEXT", reinterpret_cast(encode::vkCmdDrawMultiIndexedEXT) }, + { "vkCreateMicromapEXT", reinterpret_cast(encode::vkCreateMicromapEXT) }, + { "vkDestroyMicromapEXT", reinterpret_cast(encode::vkDestroyMicromapEXT) }, + { "vkCmdBuildMicromapsEXT", reinterpret_cast(encode::vkCmdBuildMicromapsEXT) }, + { "vkBuildMicromapsEXT", reinterpret_cast(encode::vkBuildMicromapsEXT) }, + { "vkCopyMicromapEXT", reinterpret_cast(encode::vkCopyMicromapEXT) }, + { "vkCopyMicromapToMemoryEXT", reinterpret_cast(encode::vkCopyMicromapToMemoryEXT) }, + { "vkCopyMemoryToMicromapEXT", reinterpret_cast(encode::vkCopyMemoryToMicromapEXT) }, + { "vkWriteMicromapsPropertiesEXT", reinterpret_cast(encode::vkWriteMicromapsPropertiesEXT) }, + { "vkCmdCopyMicromapEXT", reinterpret_cast(encode::vkCmdCopyMicromapEXT) }, + { "vkCmdCopyMicromapToMemoryEXT", reinterpret_cast(encode::vkCmdCopyMicromapToMemoryEXT) }, + { "vkCmdCopyMemoryToMicromapEXT", reinterpret_cast(encode::vkCmdCopyMemoryToMicromapEXT) }, + { "vkCmdWriteMicromapsPropertiesEXT", reinterpret_cast(encode::vkCmdWriteMicromapsPropertiesEXT) }, + { "vkGetDeviceMicromapCompatibilityEXT", reinterpret_cast(encode::vkGetDeviceMicromapCompatibilityEXT) }, + { "vkGetMicromapBuildSizesEXT", reinterpret_cast(encode::vkGetMicromapBuildSizesEXT) }, + { "vkCmdDrawClusterHUAWEI", reinterpret_cast(encode::vkCmdDrawClusterHUAWEI) }, + { "vkCmdDrawClusterIndirectHUAWEI", reinterpret_cast(encode::vkCmdDrawClusterIndirectHUAWEI) }, + { "vkSetDeviceMemoryPriorityEXT", reinterpret_cast(encode::vkSetDeviceMemoryPriorityEXT) }, + { "vkGetDescriptorSetLayoutHostMappingInfoVALVE", reinterpret_cast(encode::vkGetDescriptorSetLayoutHostMappingInfoVALVE) }, + { "vkGetDescriptorSetHostMappingVALVE", reinterpret_cast(encode::vkGetDescriptorSetHostMappingVALVE) }, + { "vkGetPipelineIndirectMemoryRequirementsNV", reinterpret_cast(encode::vkGetPipelineIndirectMemoryRequirementsNV) }, + { "vkCmdUpdatePipelineIndirectBufferNV", reinterpret_cast(encode::vkCmdUpdatePipelineIndirectBufferNV) }, + { "vkGetPipelineIndirectDeviceAddressNV", reinterpret_cast(encode::vkGetPipelineIndirectDeviceAddressNV) }, + { "vkCmdSetDepthClampEnableEXT", reinterpret_cast(encode::vkCmdSetDepthClampEnableEXT) }, + { "vkCmdSetPolygonModeEXT", reinterpret_cast(encode::vkCmdSetPolygonModeEXT) }, + { "vkCmdSetRasterizationSamplesEXT", reinterpret_cast(encode::vkCmdSetRasterizationSamplesEXT) }, + { "vkCmdSetSampleMaskEXT", reinterpret_cast(encode::vkCmdSetSampleMaskEXT) }, + { "vkCmdSetAlphaToCoverageEnableEXT", reinterpret_cast(encode::vkCmdSetAlphaToCoverageEnableEXT) }, + { "vkCmdSetAlphaToOneEnableEXT", reinterpret_cast(encode::vkCmdSetAlphaToOneEnableEXT) }, + { "vkCmdSetLogicOpEnableEXT", reinterpret_cast(encode::vkCmdSetLogicOpEnableEXT) }, + { "vkCmdSetColorBlendEnableEXT", reinterpret_cast(encode::vkCmdSetColorBlendEnableEXT) }, + { "vkCmdSetColorBlendEquationEXT", reinterpret_cast(encode::vkCmdSetColorBlendEquationEXT) }, + { "vkCmdSetColorWriteMaskEXT", reinterpret_cast(encode::vkCmdSetColorWriteMaskEXT) }, + { "vkCmdSetTessellationDomainOriginEXT", reinterpret_cast(encode::vkCmdSetTessellationDomainOriginEXT) }, + { "vkCmdSetRasterizationStreamEXT", reinterpret_cast(encode::vkCmdSetRasterizationStreamEXT) }, + { "vkCmdSetConservativeRasterizationModeEXT", reinterpret_cast(encode::vkCmdSetConservativeRasterizationModeEXT) }, + { "vkCmdSetExtraPrimitiveOverestimationSizeEXT", reinterpret_cast(encode::vkCmdSetExtraPrimitiveOverestimationSizeEXT) }, + { "vkCmdSetDepthClipEnableEXT", reinterpret_cast(encode::vkCmdSetDepthClipEnableEXT) }, + { "vkCmdSetSampleLocationsEnableEXT", reinterpret_cast(encode::vkCmdSetSampleLocationsEnableEXT) }, + { "vkCmdSetColorBlendAdvancedEXT", reinterpret_cast(encode::vkCmdSetColorBlendAdvancedEXT) }, + { "vkCmdSetProvokingVertexModeEXT", reinterpret_cast(encode::vkCmdSetProvokingVertexModeEXT) }, + { "vkCmdSetLineRasterizationModeEXT", reinterpret_cast(encode::vkCmdSetLineRasterizationModeEXT) }, + { "vkCmdSetLineStippleEnableEXT", reinterpret_cast(encode::vkCmdSetLineStippleEnableEXT) }, + { "vkCmdSetDepthClipNegativeOneToOneEXT", reinterpret_cast(encode::vkCmdSetDepthClipNegativeOneToOneEXT) }, + { "vkCmdSetViewportWScalingEnableNV", reinterpret_cast(encode::vkCmdSetViewportWScalingEnableNV) }, + { "vkCmdSetViewportSwizzleNV", reinterpret_cast(encode::vkCmdSetViewportSwizzleNV) }, + { "vkCmdSetCoverageToColorEnableNV", reinterpret_cast(encode::vkCmdSetCoverageToColorEnableNV) }, + { "vkCmdSetCoverageToColorLocationNV", reinterpret_cast(encode::vkCmdSetCoverageToColorLocationNV) }, + { "vkCmdSetCoverageModulationModeNV", reinterpret_cast(encode::vkCmdSetCoverageModulationModeNV) }, + { "vkCmdSetCoverageModulationTableEnableNV", reinterpret_cast(encode::vkCmdSetCoverageModulationTableEnableNV) }, + { "vkCmdSetCoverageModulationTableNV", reinterpret_cast(encode::vkCmdSetCoverageModulationTableNV) }, + { "vkCmdSetShadingRateImageEnableNV", reinterpret_cast(encode::vkCmdSetShadingRateImageEnableNV) }, + { "vkCmdSetRepresentativeFragmentTestEnableNV", reinterpret_cast(encode::vkCmdSetRepresentativeFragmentTestEnableNV) }, + { "vkCmdSetCoverageReductionModeNV", reinterpret_cast(encode::vkCmdSetCoverageReductionModeNV) }, + { "vkGetShaderModuleIdentifierEXT", reinterpret_cast(encode::vkGetShaderModuleIdentifierEXT) }, + { "vkGetShaderModuleCreateInfoIdentifierEXT", reinterpret_cast(encode::vkGetShaderModuleCreateInfoIdentifierEXT) }, + { "vkGetPhysicalDeviceOpticalFlowImageFormatsNV", reinterpret_cast(encode::vkGetPhysicalDeviceOpticalFlowImageFormatsNV) }, + { "vkCreateOpticalFlowSessionNV", reinterpret_cast(encode::vkCreateOpticalFlowSessionNV) }, + { "vkDestroyOpticalFlowSessionNV", reinterpret_cast(encode::vkDestroyOpticalFlowSessionNV) }, + { "vkBindOpticalFlowSessionImageNV", reinterpret_cast(encode::vkBindOpticalFlowSessionImageNV) }, + { "vkCmdOpticalFlowExecuteNV", reinterpret_cast(encode::vkCmdOpticalFlowExecuteNV) }, + { "vkAntiLagUpdateAMD", reinterpret_cast(encode::vkAntiLagUpdateAMD) }, + { "vkCreateShadersEXT", reinterpret_cast(encode::vkCreateShadersEXT) }, + { "vkDestroyShaderEXT", reinterpret_cast(encode::vkDestroyShaderEXT) }, + { "vkGetShaderBinaryDataEXT", reinterpret_cast(encode::vkGetShaderBinaryDataEXT) }, + { "vkCmdBindShadersEXT", reinterpret_cast(encode::vkCmdBindShadersEXT) }, + { "vkCmdSetDepthClampRangeEXT", reinterpret_cast(encode::vkCmdSetDepthClampRangeEXT) }, + { "vkGetFramebufferTilePropertiesQCOM", reinterpret_cast(encode::vkGetFramebufferTilePropertiesQCOM) }, + { "vkGetDynamicRenderingTilePropertiesQCOM", reinterpret_cast(encode::vkGetDynamicRenderingTilePropertiesQCOM) }, + { "vkGetPhysicalDeviceCooperativeVectorPropertiesNV", reinterpret_cast(encode::vkGetPhysicalDeviceCooperativeVectorPropertiesNV) }, + { "vkConvertCooperativeVectorMatrixNV", reinterpret_cast(encode::vkConvertCooperativeVectorMatrixNV) }, + { "vkCmdConvertCooperativeVectorMatrixNV", reinterpret_cast(encode::vkCmdConvertCooperativeVectorMatrixNV) }, + { "vkSetLatencySleepModeNV", reinterpret_cast(encode::vkSetLatencySleepModeNV) }, + { "vkLatencySleepNV", reinterpret_cast(encode::vkLatencySleepNV) }, + { "vkSetLatencyMarkerNV", reinterpret_cast(encode::vkSetLatencyMarkerNV) }, + { "vkGetLatencyTimingsNV", reinterpret_cast(encode::vkGetLatencyTimingsNV) }, + { "vkQueueNotifyOutOfBandNV", reinterpret_cast(encode::vkQueueNotifyOutOfBandNV) }, + { "vkCreateDataGraphPipelinesARM", reinterpret_cast(encode::vkCreateDataGraphPipelinesARM) }, + { "vkCreateDataGraphPipelineSessionARM", reinterpret_cast(encode::vkCreateDataGraphPipelineSessionARM) }, + { "vkGetDataGraphPipelineSessionBindPointRequirementsARM", reinterpret_cast(encode::vkGetDataGraphPipelineSessionBindPointRequirementsARM) }, + { "vkGetDataGraphPipelineSessionMemoryRequirementsARM", reinterpret_cast(encode::vkGetDataGraphPipelineSessionMemoryRequirementsARM) }, + { "vkBindDataGraphPipelineSessionMemoryARM", reinterpret_cast(encode::vkBindDataGraphPipelineSessionMemoryARM) }, + { "vkDestroyDataGraphPipelineSessionARM", reinterpret_cast(encode::vkDestroyDataGraphPipelineSessionARM) }, + { "vkCmdDispatchDataGraphARM", reinterpret_cast(encode::vkCmdDispatchDataGraphARM) }, + { "vkGetDataGraphPipelineAvailablePropertiesARM", reinterpret_cast(encode::vkGetDataGraphPipelineAvailablePropertiesARM) }, + { "vkGetDataGraphPipelinePropertiesARM", reinterpret_cast(encode::vkGetDataGraphPipelinePropertiesARM) }, + { "vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM", reinterpret_cast(encode::vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM) }, + { "vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM", reinterpret_cast(encode::vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM) }, + { "vkCmdSetAttachmentFeedbackLoopEnableEXT", reinterpret_cast(encode::vkCmdSetAttachmentFeedbackLoopEnableEXT) }, + { "vkCmdBindTileMemoryQCOM", reinterpret_cast(encode::vkCmdBindTileMemoryQCOM) }, + { "vkCmdDecompressMemoryEXT", reinterpret_cast(encode::vkCmdDecompressMemoryEXT) }, + { "vkCmdDecompressMemoryIndirectCountEXT", reinterpret_cast(encode::vkCmdDecompressMemoryIndirectCountEXT) }, + { "vkGetPartitionedAccelerationStructuresBuildSizesNV", reinterpret_cast(encode::vkGetPartitionedAccelerationStructuresBuildSizesNV) }, + { "vkCmdBuildPartitionedAccelerationStructuresNV", reinterpret_cast(encode::vkCmdBuildPartitionedAccelerationStructuresNV) }, + { "vkGetGeneratedCommandsMemoryRequirementsEXT", reinterpret_cast(encode::vkGetGeneratedCommandsMemoryRequirementsEXT) }, + { "vkCmdPreprocessGeneratedCommandsEXT", reinterpret_cast(encode::vkCmdPreprocessGeneratedCommandsEXT) }, + { "vkCmdExecuteGeneratedCommandsEXT", reinterpret_cast(encode::vkCmdExecuteGeneratedCommandsEXT) }, + { "vkCreateIndirectCommandsLayoutEXT", reinterpret_cast(encode::vkCreateIndirectCommandsLayoutEXT) }, + { "vkDestroyIndirectCommandsLayoutEXT", reinterpret_cast(encode::vkDestroyIndirectCommandsLayoutEXT) }, + { "vkCreateIndirectExecutionSetEXT", reinterpret_cast(encode::vkCreateIndirectExecutionSetEXT) }, + { "vkDestroyIndirectExecutionSetEXT", reinterpret_cast(encode::vkDestroyIndirectExecutionSetEXT) }, + { "vkUpdateIndirectExecutionSetPipelineEXT", reinterpret_cast(encode::vkUpdateIndirectExecutionSetPipelineEXT) }, + { "vkUpdateIndirectExecutionSetShaderEXT", reinterpret_cast(encode::vkUpdateIndirectExecutionSetShaderEXT) }, + { "vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV", reinterpret_cast(encode::vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV) }, + { "vkGetMemoryMetalHandleEXT", reinterpret_cast(encode::vkGetMemoryMetalHandleEXT) }, + { "vkGetMemoryMetalHandlePropertiesEXT", reinterpret_cast(encode::vkGetMemoryMetalHandlePropertiesEXT) }, + { "vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM", reinterpret_cast(encode::vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM) }, + { "vkCmdEndRendering2EXT", reinterpret_cast(encode::vkCmdEndRendering2EXT) }, + { "vkCmdBeginCustomResolveEXT", reinterpret_cast(encode::vkCmdBeginCustomResolveEXT) }, + { "vkCmdSetComputeOccupancyPriorityNV", reinterpret_cast(encode::vkCmdSetComputeOccupancyPriorityNV) }, + { "vkCreateAccelerationStructureKHR", reinterpret_cast(encode::vkCreateAccelerationStructureKHR) }, + { "vkDestroyAccelerationStructureKHR", reinterpret_cast(encode::vkDestroyAccelerationStructureKHR) }, + { "vkCmdBuildAccelerationStructuresKHR", reinterpret_cast(encode::vkCmdBuildAccelerationStructuresKHR) }, + { "vkCmdBuildAccelerationStructuresIndirectKHR", reinterpret_cast(encode::vkCmdBuildAccelerationStructuresIndirectKHR) }, + { "vkBuildAccelerationStructuresKHR", reinterpret_cast(encode::vkBuildAccelerationStructuresKHR) }, + { "vkCopyAccelerationStructureKHR", reinterpret_cast(encode::vkCopyAccelerationStructureKHR) }, + { "vkCopyAccelerationStructureToMemoryKHR", reinterpret_cast(encode::vkCopyAccelerationStructureToMemoryKHR) }, + { "vkCopyMemoryToAccelerationStructureKHR", reinterpret_cast(encode::vkCopyMemoryToAccelerationStructureKHR) }, + { "vkWriteAccelerationStructuresPropertiesKHR", reinterpret_cast(encode::vkWriteAccelerationStructuresPropertiesKHR) }, + { "vkCmdCopyAccelerationStructureKHR", reinterpret_cast(encode::vkCmdCopyAccelerationStructureKHR) }, + { "vkCmdCopyAccelerationStructureToMemoryKHR", reinterpret_cast(encode::vkCmdCopyAccelerationStructureToMemoryKHR) }, + { "vkCmdCopyMemoryToAccelerationStructureKHR", reinterpret_cast(encode::vkCmdCopyMemoryToAccelerationStructureKHR) }, + { "vkGetAccelerationStructureDeviceAddressKHR", reinterpret_cast(encode::vkGetAccelerationStructureDeviceAddressKHR) }, + { "vkCmdWriteAccelerationStructuresPropertiesKHR", reinterpret_cast(encode::vkCmdWriteAccelerationStructuresPropertiesKHR) }, + { "vkGetDeviceAccelerationStructureCompatibilityKHR", reinterpret_cast(encode::vkGetDeviceAccelerationStructureCompatibilityKHR) }, + { "vkGetAccelerationStructureBuildSizesKHR", reinterpret_cast(encode::vkGetAccelerationStructureBuildSizesKHR) }, + { "vkCmdTraceRaysKHR", reinterpret_cast(encode::vkCmdTraceRaysKHR) }, + { "vkCreateRayTracingPipelinesKHR", reinterpret_cast(encode::vkCreateRayTracingPipelinesKHR) }, + { "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR", reinterpret_cast(encode::vkGetRayTracingCaptureReplayShaderGroupHandlesKHR) }, + { "vkCmdTraceRaysIndirectKHR", reinterpret_cast(encode::vkCmdTraceRaysIndirectKHR) }, + { "vkGetRayTracingShaderGroupStackSizeKHR", reinterpret_cast(encode::vkGetRayTracingShaderGroupStackSizeKHR) }, + { "vkCmdSetRayTracingPipelineStackSizeKHR", reinterpret_cast(encode::vkCmdSetRayTracingPipelineStackSizeKHR) }, + { "vkCmdDrawMeshTasksEXT", reinterpret_cast(encode::vkCmdDrawMeshTasksEXT) }, + { "vkCmdDrawMeshTasksIndirectEXT", reinterpret_cast(encode::vkCmdDrawMeshTasksIndirectEXT) }, + { "vkCmdDrawMeshTasksIndirectCountEXT", reinterpret_cast(encode::vkCmdDrawMeshTasksIndirectCountEXT) }, + { "vk_layerGetPhysicalDeviceProcAddr", reinterpret_cast(vulkan_recapture::GetPhysicalDeviceProcAddr) }, + }; +} + +static const auto vulkan_recapture_func_table = GetVulkanRecaptureFuncTable(); + +GFXRECON_END_NAMESPACE(vulkan_recapture) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // GFXRECON_GENERATED_VULKAN_RECAPTURE_FUNC_TABLE_H diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_referenced_resource_consumer.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_referenced_resource_consumer.cpp index cac444011..c74ec67f4 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_referenced_resource_consumer.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_referenced_resource_consumer.cpp @@ -53,116 +53,6 @@ void VulkanReferencedResourceConsumer::Process_vkBeginCommandBuffer( } } -void VulkanReferencedResourceConsumer::Process_vkCmdBindDescriptorSets( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - format::HandleId layout, - uint32_t firstSet, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets, - uint32_t dynamicOffsetCount, - PointerDecoder* pDynamicOffsets) -{ - GFXRECON_UNREFERENCED_PARAMETER(pipelineBindPoint); - GFXRECON_UNREFERENCED_PARAMETER(layout); - GFXRECON_UNREFERENCED_PARAMETER(firstSet); - GFXRECON_UNREFERENCED_PARAMETER(descriptorSetCount); - GFXRECON_UNREFERENCED_PARAMETER(dynamicOffsetCount); - GFXRECON_UNREFERENCED_PARAMETER(pDynamicOffsets); - - assert(pDescriptorSets != nullptr); - - if (!pDescriptorSets->IsNull() && (pDescriptorSets->HasData())) - { - auto pDescriptorSets_ptr = pDescriptorSets->GetPointer(); - size_t pDescriptorSets_count = pDescriptorSets->GetLength(); - for (size_t pDescriptorSets_index = 0; pDescriptorSets_index < pDescriptorSets_count; ++pDescriptorSets_index) - { - GetTable().AddContainerToUser(commandBuffer, pDescriptorSets_ptr[pDescriptorSets_index]); - } - } -} - -void VulkanReferencedResourceConsumer::Process_vkCmdBindIndexBuffer( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkIndexType indexType) -{ - GFXRECON_UNREFERENCED_PARAMETER(offset); - GFXRECON_UNREFERENCED_PARAMETER(indexType); - - GetTable().AddResourceToUser(commandBuffer, buffer); -} - -void VulkanReferencedResourceConsumer::Process_vkCmdBindVertexBuffers( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - HandlePointerDecoder* pBuffers, - PointerDecoder* pOffsets) -{ - GFXRECON_UNREFERENCED_PARAMETER(firstBinding); - GFXRECON_UNREFERENCED_PARAMETER(bindingCount); - GFXRECON_UNREFERENCED_PARAMETER(pOffsets); - - assert(pBuffers != nullptr); - - if (!pBuffers->IsNull() && (pBuffers->HasData())) - { - auto pBuffers_ptr = pBuffers->GetPointer(); - size_t pBuffers_count = pBuffers->GetLength(); - for (size_t pBuffers_index = 0; pBuffers_index < pBuffers_count; ++pBuffers_index) - { - GetTable().AddResourceToUser(commandBuffer, pBuffers_ptr[pBuffers_index]); - } - } -} - -void VulkanReferencedResourceConsumer::Process_vkCmdDrawIndirect( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) -{ - GFXRECON_UNREFERENCED_PARAMETER(offset); - GFXRECON_UNREFERENCED_PARAMETER(drawCount); - GFXRECON_UNREFERENCED_PARAMETER(stride); - - GetTable().AddResourceToUser(commandBuffer, buffer); -} - -void VulkanReferencedResourceConsumer::Process_vkCmdDrawIndexedIndirect( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) -{ - GFXRECON_UNREFERENCED_PARAMETER(offset); - GFXRECON_UNREFERENCED_PARAMETER(drawCount); - GFXRECON_UNREFERENCED_PARAMETER(stride); - - GetTable().AddResourceToUser(commandBuffer, buffer); -} - -void VulkanReferencedResourceConsumer::Process_vkCmdDispatchIndirect( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset) -{ - GFXRECON_UNREFERENCED_PARAMETER(offset); - - GetTable().AddResourceToUser(commandBuffer, buffer); -} - void VulkanReferencedResourceConsumer::Process_vkCmdCopyBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -197,27 +87,6 @@ void VulkanReferencedResourceConsumer::Process_vkCmdCopyImage( GetTable().AddResourceToUser(commandBuffer, dstImage); } -void VulkanReferencedResourceConsumer::Process_vkCmdBlitImage( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions, - VkFilter filter) -{ - GFXRECON_UNREFERENCED_PARAMETER(srcImageLayout); - GFXRECON_UNREFERENCED_PARAMETER(dstImageLayout); - GFXRECON_UNREFERENCED_PARAMETER(regionCount); - GFXRECON_UNREFERENCED_PARAMETER(pRegions); - GFXRECON_UNREFERENCED_PARAMETER(filter); - - GetTable().AddResourceToUser(commandBuffer, srcImage); - GetTable().AddResourceToUser(commandBuffer, dstImage); -} - void VulkanReferencedResourceConsumer::Process_vkCmdCopyBufferToImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -282,57 +151,151 @@ void VulkanReferencedResourceConsumer::Process_vkCmdFillBuffer( GetTable().AddResourceToUser(commandBuffer, dstBuffer); } -void VulkanReferencedResourceConsumer::Process_vkCmdClearColorImage( +void VulkanReferencedResourceConsumer::Process_vkCmdPipelineBarrier( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId image, - VkImageLayout imageLayout, - StructPointerDecoder* pColor, - uint32_t rangeCount, - StructPointerDecoder* pRanges) + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkDependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + StructPointerDecoder* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + StructPointerDecoder* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + StructPointerDecoder* pImageMemoryBarriers) { - GFXRECON_UNREFERENCED_PARAMETER(imageLayout); - GFXRECON_UNREFERENCED_PARAMETER(pColor); - GFXRECON_UNREFERENCED_PARAMETER(rangeCount); - GFXRECON_UNREFERENCED_PARAMETER(pRanges); + GFXRECON_UNREFERENCED_PARAMETER(srcStageMask); + GFXRECON_UNREFERENCED_PARAMETER(dstStageMask); + GFXRECON_UNREFERENCED_PARAMETER(dependencyFlags); + GFXRECON_UNREFERENCED_PARAMETER(memoryBarrierCount); + GFXRECON_UNREFERENCED_PARAMETER(pMemoryBarriers); + GFXRECON_UNREFERENCED_PARAMETER(bufferMemoryBarrierCount); + GFXRECON_UNREFERENCED_PARAMETER(imageMemoryBarrierCount); - GetTable().AddResourceToUser(commandBuffer, image); + assert(pBufferMemoryBarriers != nullptr); + + if (!pBufferMemoryBarriers->IsNull() && (pBufferMemoryBarriers->HasData())) + { + auto pBufferMemoryBarriers_ptr = pBufferMemoryBarriers->GetMetaStructPointer(); + size_t pBufferMemoryBarriers_count = pBufferMemoryBarriers->GetLength(); + for (size_t pBufferMemoryBarriers_index = 0; pBufferMemoryBarriers_index < pBufferMemoryBarriers_count; ++pBufferMemoryBarriers_index) + { + GetTable().AddResourceToUser(commandBuffer, pBufferMemoryBarriers_ptr[pBufferMemoryBarriers_index].buffer); + } + } + + assert(pImageMemoryBarriers != nullptr); + + if (!pImageMemoryBarriers->IsNull() && (pImageMemoryBarriers->HasData())) + { + auto pImageMemoryBarriers_ptr = pImageMemoryBarriers->GetMetaStructPointer(); + size_t pImageMemoryBarriers_count = pImageMemoryBarriers->GetLength(); + for (size_t pImageMemoryBarriers_index = 0; pImageMemoryBarriers_index < pImageMemoryBarriers_count; ++pImageMemoryBarriers_index) + { + GetTable().AddResourceToUser(commandBuffer, pImageMemoryBarriers_ptr[pImageMemoryBarriers_index].image); + } + } } -void VulkanReferencedResourceConsumer::Process_vkCmdClearDepthStencilImage( +void VulkanReferencedResourceConsumer::Process_vkCmdCopyQueryPoolResults( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags) +{ + GFXRECON_UNREFERENCED_PARAMETER(queryPool); + GFXRECON_UNREFERENCED_PARAMETER(firstQuery); + GFXRECON_UNREFERENCED_PARAMETER(queryCount); + GFXRECON_UNREFERENCED_PARAMETER(dstOffset); + GFXRECON_UNREFERENCED_PARAMETER(stride); + GFXRECON_UNREFERENCED_PARAMETER(flags); + + GetTable().AddResourceToUser(commandBuffer, dstBuffer); +} + +void VulkanReferencedResourceConsumer::Process_vkCmdExecuteCommands( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t commandBufferCount, + HandlePointerDecoder* pCommandBuffers) +{ + GFXRECON_UNREFERENCED_PARAMETER(commandBufferCount); + + assert(pCommandBuffers != nullptr); + + if (!pCommandBuffers->IsNull() && (pCommandBuffers->HasData())) + { + auto pCommandBuffers_ptr = pCommandBuffers->GetPointer(); + size_t pCommandBuffers_count = pCommandBuffers->GetLength(); + for (size_t pCommandBuffers_index = 0; pCommandBuffers_index < pCommandBuffers_count; ++pCommandBuffers_index) + { + GetTable().AddUserToUser(commandBuffer, pCommandBuffers_ptr[pCommandBuffers_index]); + } + } +} + +void VulkanReferencedResourceConsumer::Process_vkCmdBindDescriptorSets( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets, + uint32_t dynamicOffsetCount, + PointerDecoder* pDynamicOffsets) +{ + GFXRECON_UNREFERENCED_PARAMETER(pipelineBindPoint); + GFXRECON_UNREFERENCED_PARAMETER(layout); + GFXRECON_UNREFERENCED_PARAMETER(firstSet); + GFXRECON_UNREFERENCED_PARAMETER(descriptorSetCount); + GFXRECON_UNREFERENCED_PARAMETER(dynamicOffsetCount); + GFXRECON_UNREFERENCED_PARAMETER(pDynamicOffsets); + + assert(pDescriptorSets != nullptr); + + if (!pDescriptorSets->IsNull() && (pDescriptorSets->HasData())) + { + auto pDescriptorSets_ptr = pDescriptorSets->GetPointer(); + size_t pDescriptorSets_count = pDescriptorSets->GetLength(); + for (size_t pDescriptorSets_index = 0; pDescriptorSets_index < pDescriptorSets_count; ++pDescriptorSets_index) + { + GetTable().AddContainerToUser(commandBuffer, pDescriptorSets_ptr[pDescriptorSets_index]); + } + } +} + +void VulkanReferencedResourceConsumer::Process_vkCmdClearColorImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, format::HandleId image, VkImageLayout imageLayout, - StructPointerDecoder* pDepthStencil, + StructPointerDecoder* pColor, uint32_t rangeCount, StructPointerDecoder* pRanges) { GFXRECON_UNREFERENCED_PARAMETER(imageLayout); - GFXRECON_UNREFERENCED_PARAMETER(pDepthStencil); + GFXRECON_UNREFERENCED_PARAMETER(pColor); GFXRECON_UNREFERENCED_PARAMETER(rangeCount); GFXRECON_UNREFERENCED_PARAMETER(pRanges); GetTable().AddResourceToUser(commandBuffer, image); } -void VulkanReferencedResourceConsumer::Process_vkCmdResolveImage( +void VulkanReferencedResourceConsumer::Process_vkCmdDispatchIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) + format::HandleId buffer, + VkDeviceSize offset) { - GFXRECON_UNREFERENCED_PARAMETER(srcImageLayout); - GFXRECON_UNREFERENCED_PARAMETER(dstImageLayout); - GFXRECON_UNREFERENCED_PARAMETER(regionCount); - GFXRECON_UNREFERENCED_PARAMETER(pRegions); + GFXRECON_UNREFERENCED_PARAMETER(offset); - GetTable().AddResourceToUser(commandBuffer, srcImage); - GetTable().AddResourceToUser(commandBuffer, dstImage); + GetTable().AddResourceToUser(commandBuffer, buffer); } void VulkanReferencedResourceConsumer::Process_vkCmdWaitEvents( @@ -383,71 +346,129 @@ void VulkanReferencedResourceConsumer::Process_vkCmdWaitEvents( } } -void VulkanReferencedResourceConsumer::Process_vkCmdPipelineBarrier( +void VulkanReferencedResourceConsumer::Process_vkCmdBindIndexBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - StructPointerDecoder* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - StructPointerDecoder* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - StructPointerDecoder* pImageMemoryBarriers) + format::HandleId buffer, + VkDeviceSize offset, + VkIndexType indexType) { - GFXRECON_UNREFERENCED_PARAMETER(srcStageMask); - GFXRECON_UNREFERENCED_PARAMETER(dstStageMask); - GFXRECON_UNREFERENCED_PARAMETER(dependencyFlags); - GFXRECON_UNREFERENCED_PARAMETER(memoryBarrierCount); - GFXRECON_UNREFERENCED_PARAMETER(pMemoryBarriers); - GFXRECON_UNREFERENCED_PARAMETER(bufferMemoryBarrierCount); - GFXRECON_UNREFERENCED_PARAMETER(imageMemoryBarrierCount); + GFXRECON_UNREFERENCED_PARAMETER(offset); + GFXRECON_UNREFERENCED_PARAMETER(indexType); - assert(pBufferMemoryBarriers != nullptr); + GetTable().AddResourceToUser(commandBuffer, buffer); +} - if (!pBufferMemoryBarriers->IsNull() && (pBufferMemoryBarriers->HasData())) - { - auto pBufferMemoryBarriers_ptr = pBufferMemoryBarriers->GetMetaStructPointer(); - size_t pBufferMemoryBarriers_count = pBufferMemoryBarriers->GetLength(); - for (size_t pBufferMemoryBarriers_index = 0; pBufferMemoryBarriers_index < pBufferMemoryBarriers_count; ++pBufferMemoryBarriers_index) - { - GetTable().AddResourceToUser(commandBuffer, pBufferMemoryBarriers_ptr[pBufferMemoryBarriers_index].buffer); - } - } +void VulkanReferencedResourceConsumer::Process_vkCmdBindVertexBuffers( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + HandlePointerDecoder* pBuffers, + PointerDecoder* pOffsets) +{ + GFXRECON_UNREFERENCED_PARAMETER(firstBinding); + GFXRECON_UNREFERENCED_PARAMETER(bindingCount); + GFXRECON_UNREFERENCED_PARAMETER(pOffsets); - assert(pImageMemoryBarriers != nullptr); + assert(pBuffers != nullptr); - if (!pImageMemoryBarriers->IsNull() && (pImageMemoryBarriers->HasData())) + if (!pBuffers->IsNull() && (pBuffers->HasData())) { - auto pImageMemoryBarriers_ptr = pImageMemoryBarriers->GetMetaStructPointer(); - size_t pImageMemoryBarriers_count = pImageMemoryBarriers->GetLength(); - for (size_t pImageMemoryBarriers_index = 0; pImageMemoryBarriers_index < pImageMemoryBarriers_count; ++pImageMemoryBarriers_index) + auto pBuffers_ptr = pBuffers->GetPointer(); + size_t pBuffers_count = pBuffers->GetLength(); + for (size_t pBuffers_index = 0; pBuffers_index < pBuffers_count; ++pBuffers_index) { - GetTable().AddResourceToUser(commandBuffer, pImageMemoryBarriers_ptr[pImageMemoryBarriers_index].image); + GetTable().AddResourceToUser(commandBuffer, pBuffers_ptr[pBuffers_index]); } } } -void VulkanReferencedResourceConsumer::Process_vkCmdCopyQueryPoolResults( +void VulkanReferencedResourceConsumer::Process_vkCmdDrawIndirect( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) +{ + GFXRECON_UNREFERENCED_PARAMETER(offset); + GFXRECON_UNREFERENCED_PARAMETER(drawCount); + GFXRECON_UNREFERENCED_PARAMETER(stride); + + GetTable().AddResourceToUser(commandBuffer, buffer); +} + +void VulkanReferencedResourceConsumer::Process_vkCmdDrawIndexedIndirect( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) +{ + GFXRECON_UNREFERENCED_PARAMETER(offset); + GFXRECON_UNREFERENCED_PARAMETER(drawCount); + GFXRECON_UNREFERENCED_PARAMETER(stride); + + GetTable().AddResourceToUser(commandBuffer, buffer); +} + +void VulkanReferencedResourceConsumer::Process_vkCmdBlitImage( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + VkFilter filter) +{ + GFXRECON_UNREFERENCED_PARAMETER(srcImageLayout); + GFXRECON_UNREFERENCED_PARAMETER(dstImageLayout); + GFXRECON_UNREFERENCED_PARAMETER(regionCount); + GFXRECON_UNREFERENCED_PARAMETER(pRegions); + GFXRECON_UNREFERENCED_PARAMETER(filter); + + GetTable().AddResourceToUser(commandBuffer, srcImage); + GetTable().AddResourceToUser(commandBuffer, dstImage); +} + +void VulkanReferencedResourceConsumer::Process_vkCmdClearDepthStencilImage( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId image, + VkImageLayout imageLayout, + StructPointerDecoder* pDepthStencil, + uint32_t rangeCount, + StructPointerDecoder* pRanges) +{ + GFXRECON_UNREFERENCED_PARAMETER(imageLayout); + GFXRECON_UNREFERENCED_PARAMETER(pDepthStencil); + GFXRECON_UNREFERENCED_PARAMETER(rangeCount); + GFXRECON_UNREFERENCED_PARAMETER(pRanges); + + GetTable().AddResourceToUser(commandBuffer, image); +} + +void VulkanReferencedResourceConsumer::Process_vkCmdResolveImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags) + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) { - GFXRECON_UNREFERENCED_PARAMETER(queryPool); - GFXRECON_UNREFERENCED_PARAMETER(firstQuery); - GFXRECON_UNREFERENCED_PARAMETER(queryCount); - GFXRECON_UNREFERENCED_PARAMETER(dstOffset); - GFXRECON_UNREFERENCED_PARAMETER(stride); - GFXRECON_UNREFERENCED_PARAMETER(flags); + GFXRECON_UNREFERENCED_PARAMETER(srcImageLayout); + GFXRECON_UNREFERENCED_PARAMETER(dstImageLayout); + GFXRECON_UNREFERENCED_PARAMETER(regionCount); + GFXRECON_UNREFERENCED_PARAMETER(pRegions); - GetTable().AddResourceToUser(commandBuffer, dstBuffer); + GetTable().AddResourceToUser(commandBuffer, srcImage); + GetTable().AddResourceToUser(commandBuffer, dstImage); } void VulkanReferencedResourceConsumer::Process_vkCmdBeginRenderPass( @@ -482,27 +503,6 @@ void VulkanReferencedResourceConsumer::Process_vkCmdBeginRenderPass( } } -void VulkanReferencedResourceConsumer::Process_vkCmdExecuteCommands( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t commandBufferCount, - HandlePointerDecoder* pCommandBuffers) -{ - GFXRECON_UNREFERENCED_PARAMETER(commandBufferCount); - - assert(pCommandBuffers != nullptr); - - if (!pCommandBuffers->IsNull() && (pCommandBuffers->HasData())) - { - auto pCommandBuffers_ptr = pCommandBuffers->GetPointer(); - size_t pCommandBuffers_count = pCommandBuffers->GetLength(); - for (size_t pCommandBuffers_index = 0; pCommandBuffers_index < pCommandBuffers_count; ++pCommandBuffers_index) - { - GetTable().AddUserToUser(commandBuffer, pCommandBuffers_ptr[pCommandBuffers_index]); - } - } -} - void VulkanReferencedResourceConsumer::Process_vkCmdDrawIndirectCount( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -573,82 +573,6 @@ void VulkanReferencedResourceConsumer::Process_vkCmdBeginRenderPass2( } } -void VulkanReferencedResourceConsumer::Process_vkCmdSetEvent2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - StructPointerDecoder* pDependencyInfo) -{ - GFXRECON_UNREFERENCED_PARAMETER(event); - - assert(pDependencyInfo != nullptr); - - if (!pDependencyInfo->IsNull() && (pDependencyInfo->HasData())) - { - auto pDependencyInfo_ptr = pDependencyInfo->GetMetaStructPointer(); - if (!pDependencyInfo_ptr->pBufferMemoryBarriers->IsNull() && (pDependencyInfo_ptr->pBufferMemoryBarriers->HasData())) - { - auto pBufferMemoryBarriers_ptr = pDependencyInfo_ptr->pBufferMemoryBarriers->GetMetaStructPointer(); - size_t pBufferMemoryBarriers_count = pDependencyInfo_ptr->pBufferMemoryBarriers->GetLength(); - for (size_t pBufferMemoryBarriers_index = 0; pBufferMemoryBarriers_index < pBufferMemoryBarriers_count; ++pBufferMemoryBarriers_index) - { - GetTable().AddResourceToUser(commandBuffer, pBufferMemoryBarriers_ptr[pBufferMemoryBarriers_index].buffer); - } - } - - if (!pDependencyInfo_ptr->pImageMemoryBarriers->IsNull() && (pDependencyInfo_ptr->pImageMemoryBarriers->HasData())) - { - auto pImageMemoryBarriers_ptr = pDependencyInfo_ptr->pImageMemoryBarriers->GetMetaStructPointer(); - size_t pImageMemoryBarriers_count = pDependencyInfo_ptr->pImageMemoryBarriers->GetLength(); - for (size_t pImageMemoryBarriers_index = 0; pImageMemoryBarriers_index < pImageMemoryBarriers_count; ++pImageMemoryBarriers_index) - { - GetTable().AddResourceToUser(commandBuffer, pImageMemoryBarriers_ptr[pImageMemoryBarriers_index].image); - } - } - } -} - -void VulkanReferencedResourceConsumer::Process_vkCmdWaitEvents2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t eventCount, - HandlePointerDecoder* pEvents, - StructPointerDecoder* pDependencyInfos) -{ - GFXRECON_UNREFERENCED_PARAMETER(eventCount); - GFXRECON_UNREFERENCED_PARAMETER(pEvents); - - assert(pDependencyInfos != nullptr); - - if (!pDependencyInfos->IsNull() && (pDependencyInfos->HasData())) - { - auto pDependencyInfos_ptr = pDependencyInfos->GetMetaStructPointer(); - size_t pDependencyInfos_count = pDependencyInfos->GetLength(); - for (size_t pDependencyInfos_index = 0; pDependencyInfos_index < pDependencyInfos_count; ++pDependencyInfos_index) - { - if (!pDependencyInfos_ptr[pDependencyInfos_index].pBufferMemoryBarriers->IsNull() && (pDependencyInfos_ptr[pDependencyInfos_index].pBufferMemoryBarriers->HasData())) - { - auto pBufferMemoryBarriers_ptr = pDependencyInfos_ptr[pDependencyInfos_index].pBufferMemoryBarriers->GetMetaStructPointer(); - size_t pBufferMemoryBarriers_count = pDependencyInfos_ptr[pDependencyInfos_index].pBufferMemoryBarriers->GetLength(); - for (size_t pBufferMemoryBarriers_index = 0; pBufferMemoryBarriers_index < pBufferMemoryBarriers_count; ++pBufferMemoryBarriers_index) - { - GetTable().AddResourceToUser(commandBuffer, pBufferMemoryBarriers_ptr[pBufferMemoryBarriers_index].buffer); - } - } - - if (!pDependencyInfos_ptr[pDependencyInfos_index].pImageMemoryBarriers->IsNull() && (pDependencyInfos_ptr[pDependencyInfos_index].pImageMemoryBarriers->HasData())) - { - auto pImageMemoryBarriers_ptr = pDependencyInfos_ptr[pDependencyInfos_index].pImageMemoryBarriers->GetMetaStructPointer(); - size_t pImageMemoryBarriers_count = pDependencyInfos_ptr[pDependencyInfos_index].pImageMemoryBarriers->GetLength(); - for (size_t pImageMemoryBarriers_index = 0; pImageMemoryBarriers_index < pImageMemoryBarriers_count; ++pImageMemoryBarriers_index) - { - GetTable().AddResourceToUser(commandBuffer, pImageMemoryBarriers_ptr[pImageMemoryBarriers_index].image); - } - } - } - } -} - void VulkanReferencedResourceConsumer::Process_vkCmdPipelineBarrier2( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -741,6 +665,82 @@ void VulkanReferencedResourceConsumer::Process_vkCmdCopyImageToBuffer2( } } +void VulkanReferencedResourceConsumer::Process_vkCmdSetEvent2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId event, + StructPointerDecoder* pDependencyInfo) +{ + GFXRECON_UNREFERENCED_PARAMETER(event); + + assert(pDependencyInfo != nullptr); + + if (!pDependencyInfo->IsNull() && (pDependencyInfo->HasData())) + { + auto pDependencyInfo_ptr = pDependencyInfo->GetMetaStructPointer(); + if (!pDependencyInfo_ptr->pBufferMemoryBarriers->IsNull() && (pDependencyInfo_ptr->pBufferMemoryBarriers->HasData())) + { + auto pBufferMemoryBarriers_ptr = pDependencyInfo_ptr->pBufferMemoryBarriers->GetMetaStructPointer(); + size_t pBufferMemoryBarriers_count = pDependencyInfo_ptr->pBufferMemoryBarriers->GetLength(); + for (size_t pBufferMemoryBarriers_index = 0; pBufferMemoryBarriers_index < pBufferMemoryBarriers_count; ++pBufferMemoryBarriers_index) + { + GetTable().AddResourceToUser(commandBuffer, pBufferMemoryBarriers_ptr[pBufferMemoryBarriers_index].buffer); + } + } + + if (!pDependencyInfo_ptr->pImageMemoryBarriers->IsNull() && (pDependencyInfo_ptr->pImageMemoryBarriers->HasData())) + { + auto pImageMemoryBarriers_ptr = pDependencyInfo_ptr->pImageMemoryBarriers->GetMetaStructPointer(); + size_t pImageMemoryBarriers_count = pDependencyInfo_ptr->pImageMemoryBarriers->GetLength(); + for (size_t pImageMemoryBarriers_index = 0; pImageMemoryBarriers_index < pImageMemoryBarriers_count; ++pImageMemoryBarriers_index) + { + GetTable().AddResourceToUser(commandBuffer, pImageMemoryBarriers_ptr[pImageMemoryBarriers_index].image); + } + } + } +} + +void VulkanReferencedResourceConsumer::Process_vkCmdWaitEvents2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t eventCount, + HandlePointerDecoder* pEvents, + StructPointerDecoder* pDependencyInfos) +{ + GFXRECON_UNREFERENCED_PARAMETER(eventCount); + GFXRECON_UNREFERENCED_PARAMETER(pEvents); + + assert(pDependencyInfos != nullptr); + + if (!pDependencyInfos->IsNull() && (pDependencyInfos->HasData())) + { + auto pDependencyInfos_ptr = pDependencyInfos->GetMetaStructPointer(); + size_t pDependencyInfos_count = pDependencyInfos->GetLength(); + for (size_t pDependencyInfos_index = 0; pDependencyInfos_index < pDependencyInfos_count; ++pDependencyInfos_index) + { + if (!pDependencyInfos_ptr[pDependencyInfos_index].pBufferMemoryBarriers->IsNull() && (pDependencyInfos_ptr[pDependencyInfos_index].pBufferMemoryBarriers->HasData())) + { + auto pBufferMemoryBarriers_ptr = pDependencyInfos_ptr[pDependencyInfos_index].pBufferMemoryBarriers->GetMetaStructPointer(); + size_t pBufferMemoryBarriers_count = pDependencyInfos_ptr[pDependencyInfos_index].pBufferMemoryBarriers->GetLength(); + for (size_t pBufferMemoryBarriers_index = 0; pBufferMemoryBarriers_index < pBufferMemoryBarriers_count; ++pBufferMemoryBarriers_index) + { + GetTable().AddResourceToUser(commandBuffer, pBufferMemoryBarriers_ptr[pBufferMemoryBarriers_index].buffer); + } + } + + if (!pDependencyInfos_ptr[pDependencyInfos_index].pImageMemoryBarriers->IsNull() && (pDependencyInfos_ptr[pDependencyInfos_index].pImageMemoryBarriers->HasData())) + { + auto pImageMemoryBarriers_ptr = pDependencyInfos_ptr[pDependencyInfos_index].pImageMemoryBarriers->GetMetaStructPointer(); + size_t pImageMemoryBarriers_count = pDependencyInfos_ptr[pDependencyInfos_index].pImageMemoryBarriers->GetLength(); + for (size_t pImageMemoryBarriers_index = 0; pImageMemoryBarriers_index < pImageMemoryBarriers_count; ++pImageMemoryBarriers_index) + { + GetTable().AddResourceToUser(commandBuffer, pImageMemoryBarriers_ptr[pImageMemoryBarriers_index].image); + } + } + } + } +} + void VulkanReferencedResourceConsumer::Process_vkCmdBlitImage2( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -852,21 +852,6 @@ void VulkanReferencedResourceConsumer::Process_vkCmdBindVertexBuffers2( } } -void VulkanReferencedResourceConsumer::Process_vkCmdBindIndexBuffer2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkDeviceSize size, - VkIndexType indexType) -{ - GFXRECON_UNREFERENCED_PARAMETER(offset); - GFXRECON_UNREFERENCED_PARAMETER(size); - GFXRECON_UNREFERENCED_PARAMETER(indexType); - - GetTable().AddResourceToUser(commandBuffer, buffer); -} - void VulkanReferencedResourceConsumer::Process_vkCmdPushDescriptorSet( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -1028,6 +1013,21 @@ void VulkanReferencedResourceConsumer::Process_vkCmdPushDescriptorSet2( } } +void VulkanReferencedResourceConsumer::Process_vkCmdBindIndexBuffer2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType) +{ + GFXRECON_UNREFERENCED_PARAMETER(offset); + GFXRECON_UNREFERENCED_PARAMETER(size); + GFXRECON_UNREFERENCED_PARAMETER(indexType); + + GetTable().AddResourceToUser(commandBuffer, buffer); +} + void VulkanReferencedResourceConsumer::Process_vkCmdBeginVideoCodingKHR( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -1635,6 +1635,20 @@ void VulkanReferencedResourceConsumer::Process_vkCmdPushDescriptorSet2KHR( } } +void VulkanReferencedResourceConsumer::Process_vkCmdCopyMemoryToImageIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryToImageIndirectInfo) +{ + assert(pCopyMemoryToImageIndirectInfo != nullptr); + + if (!pCopyMemoryToImageIndirectInfo->IsNull() && (pCopyMemoryToImageIndirectInfo->HasData())) + { + auto pCopyMemoryToImageIndirectInfo_ptr = pCopyMemoryToImageIndirectInfo->GetMetaStructPointer(); + GetTable().AddResourceToUser(commandBuffer, pCopyMemoryToImageIndirectInfo_ptr->dstImage); + } +} + void VulkanReferencedResourceConsumer::Process_vkCmdBindTransformFeedbackBuffersEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -2015,6 +2029,33 @@ void VulkanReferencedResourceConsumer::Process_vkCmdExecuteGeneratedCommandsNV( } } +void VulkanReferencedResourceConsumer::Process_vkCmdBindDescriptorBuffersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t bufferCount, + StructPointerDecoder* pBindingInfos) +{ + GFXRECON_UNREFERENCED_PARAMETER(bufferCount); + + assert(pBindingInfos != nullptr); + + if (!pBindingInfos->IsNull() && (pBindingInfos->HasData())) + { + auto pBindingInfos_ptr = pBindingInfos->GetMetaStructPointer(); + size_t pBindingInfos_count = pBindingInfos->GetLength(); + for (size_t pBindingInfos_index = 0; pBindingInfos_index < pBindingInfos_count; ++pBindingInfos_index) + { + { + const auto* ext_struct_info = GetPNextMetaStruct(pBindingInfos_ptr->pNext); + if (ext_struct_info != nullptr) + { + GetTable().AddResourceToUser(commandBuffer, ext_struct_info->buffer); + } + } + } + } +} + void VulkanReferencedResourceConsumer::Process_vkCmdBindInvocationMaskHUAWEI( const ApiCallInfo& call_info, format::HandleId commandBuffer, diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_referenced_resource_consumer.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_referenced_resource_consumer.h index ab95cfbb7..2c9365bc3 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_referenced_resource_consumer.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_referenced_resource_consumer.h @@ -58,54 +58,6 @@ class VulkanReferencedResourceConsumer : public VulkanReferencedResourceConsumer format::HandleId commandBuffer, StructPointerDecoder* pBeginInfo) override; - virtual void Process_vkCmdBindDescriptorSets( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - format::HandleId layout, - uint32_t firstSet, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets, - uint32_t dynamicOffsetCount, - PointerDecoder* pDynamicOffsets) override; - - virtual void Process_vkCmdBindIndexBuffer( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkIndexType indexType) override; - - virtual void Process_vkCmdBindVertexBuffers( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - HandlePointerDecoder* pBuffers, - PointerDecoder* pOffsets) override; - - virtual void Process_vkCmdDrawIndirect( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) override; - - virtual void Process_vkCmdDrawIndexedIndirect( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) override; - - virtual void Process_vkCmdDispatchIndirect( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset) override; - virtual void Process_vkCmdCopyBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -124,17 +76,6 @@ class VulkanReferencedResourceConsumer : public VulkanReferencedResourceConsumer uint32_t regionCount, StructPointerDecoder* pRegions) override; - virtual void Process_vkCmdBlitImage( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions, - VkFilter filter) override; - virtual void Process_vkCmdCopyBufferToImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -169,33 +110,61 @@ class VulkanReferencedResourceConsumer : public VulkanReferencedResourceConsumer VkDeviceSize size, uint32_t data) override; - virtual void Process_vkCmdClearColorImage( + virtual void Process_vkCmdPipelineBarrier( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId image, - VkImageLayout imageLayout, - StructPointerDecoder* pColor, - uint32_t rangeCount, - StructPointerDecoder* pRanges) override; + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkDependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + StructPointerDecoder* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + StructPointerDecoder* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + StructPointerDecoder* pImageMemoryBarriers) override; - virtual void Process_vkCmdClearDepthStencilImage( + virtual void Process_vkCmdCopyQueryPoolResults( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags) override; + + virtual void Process_vkCmdExecuteCommands( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t commandBufferCount, + HandlePointerDecoder* pCommandBuffers) override; + + virtual void Process_vkCmdBindDescriptorSets( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets, + uint32_t dynamicOffsetCount, + PointerDecoder* pDynamicOffsets) override; + + virtual void Process_vkCmdClearColorImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, format::HandleId image, VkImageLayout imageLayout, - StructPointerDecoder* pDepthStencil, + StructPointerDecoder* pColor, uint32_t rangeCount, StructPointerDecoder* pRanges) override; - virtual void Process_vkCmdResolveImage( + virtual void Process_vkCmdDispatchIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; + format::HandleId buffer, + VkDeviceSize offset) override; virtual void Process_vkCmdWaitEvents( const ApiCallInfo& call_info, @@ -211,41 +180,72 @@ class VulkanReferencedResourceConsumer : public VulkanReferencedResourceConsumer uint32_t imageMemoryBarrierCount, StructPointerDecoder* pImageMemoryBarriers) override; - virtual void Process_vkCmdPipelineBarrier( + virtual void Process_vkCmdBindIndexBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - StructPointerDecoder* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - StructPointerDecoder* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - StructPointerDecoder* pImageMemoryBarriers) override; + format::HandleId buffer, + VkDeviceSize offset, + VkIndexType indexType) override; - virtual void Process_vkCmdCopyQueryPoolResults( + virtual void Process_vkCmdBindVertexBuffers( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags) override; + uint32_t firstBinding, + uint32_t bindingCount, + HandlePointerDecoder* pBuffers, + PointerDecoder* pOffsets) override; - virtual void Process_vkCmdBeginRenderPass( + virtual void Process_vkCmdDrawIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pRenderPassBegin, - VkSubpassContents contents) override; + format::HandleId buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) override; - virtual void Process_vkCmdExecuteCommands( + virtual void Process_vkCmdDrawIndexedIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t commandBufferCount, - HandlePointerDecoder* pCommandBuffers) override; + format::HandleId buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) override; + + virtual void Process_vkCmdBlitImage( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + VkFilter filter) override; + + virtual void Process_vkCmdClearDepthStencilImage( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId image, + VkImageLayout imageLayout, + StructPointerDecoder* pDepthStencil, + uint32_t rangeCount, + StructPointerDecoder* pRanges) override; + + virtual void Process_vkCmdResolveImage( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; + + virtual void Process_vkCmdBeginRenderPass( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pRenderPassBegin, + VkSubpassContents contents) override; virtual void Process_vkCmdDrawIndirectCount( const ApiCallInfo& call_info, @@ -273,19 +273,6 @@ class VulkanReferencedResourceConsumer : public VulkanReferencedResourceConsumer StructPointerDecoder* pRenderPassBegin, StructPointerDecoder* pSubpassBeginInfo) override; - virtual void Process_vkCmdSetEvent2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - StructPointerDecoder* pDependencyInfo) override; - - virtual void Process_vkCmdWaitEvents2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t eventCount, - HandlePointerDecoder* pEvents, - StructPointerDecoder* pDependencyInfos) override; - virtual void Process_vkCmdPipelineBarrier2( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -311,6 +298,19 @@ class VulkanReferencedResourceConsumer : public VulkanReferencedResourceConsumer format::HandleId commandBuffer, StructPointerDecoder* pCopyImageToBufferInfo) override; + virtual void Process_vkCmdSetEvent2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId event, + StructPointerDecoder* pDependencyInfo) override; + + virtual void Process_vkCmdWaitEvents2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t eventCount, + HandlePointerDecoder* pEvents, + StructPointerDecoder* pDependencyInfos) override; + virtual void Process_vkCmdBlitImage2( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -336,14 +336,6 @@ class VulkanReferencedResourceConsumer : public VulkanReferencedResourceConsumer PointerDecoder* pSizes, PointerDecoder* pStrides) override; - virtual void Process_vkCmdBindIndexBuffer2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkDeviceSize size, - VkIndexType indexType) override; - virtual void Process_vkCmdPushDescriptorSet( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -363,6 +355,14 @@ class VulkanReferencedResourceConsumer : public VulkanReferencedResourceConsumer format::HandleId commandBuffer, StructPointerDecoder* pPushDescriptorSetInfo) override; + virtual void Process_vkCmdBindIndexBuffer2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType) override; + virtual void Process_vkCmdBeginVideoCodingKHR( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -484,6 +484,11 @@ class VulkanReferencedResourceConsumer : public VulkanReferencedResourceConsumer format::HandleId commandBuffer, StructPointerDecoder* pPushDescriptorSetInfo) override; + virtual void Process_vkCmdCopyMemoryToImageIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryToImageIndirectInfo) override; + virtual void Process_vkCmdBindTransformFeedbackBuffersEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -635,6 +640,12 @@ class VulkanReferencedResourceConsumer : public VulkanReferencedResourceConsumer VkBool32 isPreprocessed, StructPointerDecoder* pGeneratedCommandsInfo) override; + virtual void Process_vkCmdBindDescriptorBuffersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t bufferCount, + StructPointerDecoder* pBindingInfos) override; + virtual void Process_vkCmdBindInvocationMaskHUAWEI( const ApiCallInfo& call_info, format::HandleId commandBuffer, diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_consumer.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_consumer.cpp index 08a16d77c..ad8f432fa 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_consumer.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_consumer.cpp @@ -52,8 +52,10 @@ void VulkanReplayConsumer::Process_vkCreateInstance( VulkanInstanceInfo handle_info; pInstance->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pInstance->GetPointer()); VkResult replay_result = OverrideCreateInstance(returnValue, pCreateInfo, pAllocator, pInstance); CheckResult("vkCreateInstance", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(format::kNullHandleId, pInstance->GetPointer(), pInstance->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkInstanceInfo); } @@ -82,8 +84,10 @@ void VulkanReplayConsumer::Process_vkEnumeratePhysicalDevices( std::vector handle_info(*pPhysicalDeviceCount->GetOutputPointer()); for (size_t i = 0; i < *pPhysicalDeviceCount->GetOutputPointer(); ++i) { pPhysicalDevices->SetConsumerData(i, &handle_info[i]); } + PushRecaptureHandleIds(pPhysicalDevices->GetPointer(), pPhysicalDevices->GetLength()); VkResult replay_result = OverrideEnumeratePhysicalDevices(GetInstanceTable(in_instance->handle)->EnumeratePhysicalDevices, returnValue, in_instance, pPhysicalDeviceCount, pPhysicalDevices); CheckResult("vkEnumeratePhysicalDevices", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); if (pPhysicalDevices->IsNull()) { SetOutputArrayCount(instance, kInstanceArrayEnumeratePhysicalDevices, *pPhysicalDeviceCount->GetOutputPointer(), &CommonObjectInfoTable::GetVkInstanceInfo); } AddHandles(instance, pPhysicalDevices->GetPointer(), pPhysicalDevices->GetLength(), pPhysicalDevices->GetHandlePointer(), *pPhysicalDeviceCount->GetOutputPointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkPhysicalDeviceInfo); @@ -182,8 +186,10 @@ void VulkanReplayConsumer::Process_vkCreateDevice( VulkanDeviceInfo handle_info; pDevice->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pDevice->GetPointer()); VkResult replay_result = OverrideCreateDevice(returnValue, in_physicalDevice, pCreateInfo, pAllocator, pDevice); CheckResult("vkCreateDevice", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(physicalDevice, pDevice->GetPointer(), pDevice->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkDeviceInfo); } @@ -211,7 +217,9 @@ void VulkanReplayConsumer::Process_vkGetDeviceQueue( VulkanQueueInfo handle_info; pQueue->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pQueue->GetPointer()); OverrideGetDeviceQueue(GetDeviceTable(in_device->handle)->GetDeviceQueue, in_device, queueFamilyIndex, queueIndex, pQueue); + ClearRecaptureHandleIds(); AddHandle(device, pQueue->GetPointer(), pQueue->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkQueueInfo); } @@ -270,8 +278,10 @@ void VulkanReplayConsumer::Process_vkAllocateMemory( VulkanDeviceMemoryInfo handle_info; pMemory->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pMemory->GetPointer()); VkResult replay_result = OverrideAllocateMemory(GetDeviceTable(in_device->handle)->AllocateMemory, returnValue, in_device, pAllocateInfo, pAllocator, pMemory); CheckResult("vkAllocateMemory", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pMemory->GetPointer(), pMemory->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkDeviceMemoryInfo); } @@ -356,11 +366,11 @@ void VulkanReplayConsumer::Process_vkGetDeviceMemoryCommitment( format::HandleId memory, PointerDecoder* pCommittedMemoryInBytes) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkDeviceMemory in_memory = MapHandle(memory, &CommonObjectInfoTable::GetVkDeviceMemoryInfo); - VkDeviceSize* out_pCommittedMemoryInBytes = pCommittedMemoryInBytes->IsNull() ? nullptr : pCommittedMemoryInBytes->AllocateOutputData(1, static_cast(0)); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + auto in_memory = GetObjectInfoTable().GetVkDeviceMemoryInfo(memory); + pCommittedMemoryInBytes->IsNull() ? nullptr : pCommittedMemoryInBytes->AllocateOutputData(1, static_cast(0)); - GetDeviceTable(in_device)->GetDeviceMemoryCommitment(in_device, in_memory, out_pCommittedMemoryInBytes); + OverrideGetDeviceMemoryCommitment(GetDeviceTable(in_device->handle)->GetDeviceMemoryCommitment, in_device, in_memory, pCommittedMemoryInBytes); } void VulkanReplayConsumer::Process_vkBindBufferMemory( @@ -489,8 +499,10 @@ void VulkanReplayConsumer::Process_vkCreateFence( if (!pFence->IsNull()) { pFence->SetHandleLength(1); } VkFence* out_pFence = pFence->GetHandlePointer(); + PushRecaptureHandleId(pFence->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->CreateFence(in_device, in_pCreateInfo, in_pAllocator, out_pFence); CheckResult("vkCreateFence", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pFence->GetPointer(), out_pFence, &CommonObjectInfoTable::AddVkFenceInfo); } @@ -566,8 +578,10 @@ void VulkanReplayConsumer::Process_vkCreateSemaphore( if (!pSemaphore->IsNull()) { pSemaphore->SetHandleLength(1); } VkSemaphore* out_pSemaphore = pSemaphore->GetHandlePointer(); + PushRecaptureHandleId(pSemaphore->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->CreateSemaphore(in_device, in_pCreateInfo, in_pAllocator, out_pSemaphore); CheckResult("vkCreateSemaphore", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pSemaphore->GetPointer(), out_pSemaphore, &CommonObjectInfoTable::AddVkSemaphoreInfo); } @@ -586,79 +600,6 @@ void VulkanReplayConsumer::Process_vkDestroySemaphore( RemoveHandle(semaphore, &CommonObjectInfoTable::RemoveVkSemaphoreInfo); } -void VulkanReplayConsumer::Process_vkCreateEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pEvent) -{ - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkEventCreateInfo* in_pCreateInfo = pCreateInfo->GetPointer(); - const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); - if (!pEvent->IsNull()) { pEvent->SetHandleLength(1); } - VkEvent* out_pEvent = pEvent->GetHandlePointer(); - - VkResult replay_result = GetDeviceTable(in_device)->CreateEvent(in_device, in_pCreateInfo, in_pAllocator, out_pEvent); - CheckResult("vkCreateEvent", returnValue, replay_result, call_info); - - AddHandle(device, pEvent->GetPointer(), out_pEvent, &CommonObjectInfoTable::AddVkEventInfo); -} - -void VulkanReplayConsumer::Process_vkDestroyEvent( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId event, - StructPointerDecoder* pAllocator) -{ - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkEvent in_event = MapHandle(event, &CommonObjectInfoTable::GetVkEventInfo); - const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); - - GetDeviceTable(in_device)->DestroyEvent(in_device, in_event, in_pAllocator); - RemoveHandle(event, &CommonObjectInfoTable::RemoveVkEventInfo); -} - -void VulkanReplayConsumer::Process_vkGetEventStatus( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) -{ - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - auto in_event = GetObjectInfoTable().GetVkEventInfo(event); - - VkResult replay_result = OverrideGetEventStatus(GetDeviceTable(in_device->handle)->GetEventStatus, returnValue, in_device, in_event); - CheckResult("vkGetEventStatus", returnValue, replay_result, call_info); -} - -void VulkanReplayConsumer::Process_vkSetEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) -{ - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkEvent in_event = MapHandle(event, &CommonObjectInfoTable::GetVkEventInfo); - - VkResult replay_result = GetDeviceTable(in_device)->SetEvent(in_device, in_event); - CheckResult("vkSetEvent", returnValue, replay_result, call_info); -} - -void VulkanReplayConsumer::Process_vkResetEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) -{ - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkEvent in_event = MapHandle(event, &CommonObjectInfoTable::GetVkEventInfo); - - VkResult replay_result = GetDeviceTable(in_device)->ResetEvent(in_device, in_event); - CheckResult("vkResetEvent", returnValue, replay_result, call_info); -} - void VulkanReplayConsumer::Process_vkCreateQueryPool( const ApiCallInfo& call_info, VkResult returnValue, @@ -673,8 +614,10 @@ void VulkanReplayConsumer::Process_vkCreateQueryPool( if (!pQueryPool->IsNull()) { pQueryPool->SetHandleLength(1); } VkQueryPool* out_pQueryPool = pQueryPool->GetHandlePointer(); + PushRecaptureHandleId(pQueryPool->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->CreateQueryPool(in_device, in_pCreateInfo, in_pAllocator, out_pQueryPool); CheckResult("vkCreateQueryPool", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pQueryPool->GetPointer(), out_pQueryPool, &CommonObjectInfoTable::AddVkQueryPoolInfo); } @@ -726,8 +669,10 @@ void VulkanReplayConsumer::Process_vkCreateBuffer( VulkanBufferInfo handle_info; pBuffer->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pBuffer->GetPointer()); VkResult replay_result = OverrideCreateBuffer(GetDeviceTable(in_device->handle)->CreateBuffer, returnValue, in_device, pCreateInfo, pAllocator, pBuffer); CheckResult("vkCreateBuffer", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pBuffer->GetPointer(), pBuffer->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkBufferInfo); } @@ -745,41 +690,6 @@ void VulkanReplayConsumer::Process_vkDestroyBuffer( RemoveHandle(buffer, &CommonObjectInfoTable::RemoveVkBufferInfo); } -void VulkanReplayConsumer::Process_vkCreateBufferView( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pView) -{ - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - - MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); - if (!pView->IsNull()) { pView->SetHandleLength(1); } - VulkanBufferViewInfo handle_info; - pView->SetConsumerData(0, &handle_info); - - VkResult replay_result = OverrideCreateBufferView(GetDeviceTable(in_device->handle)->CreateBufferView, returnValue, in_device, pCreateInfo, pAllocator, pView); - CheckResult("vkCreateBufferView", returnValue, replay_result, call_info); - - AddHandle(device, pView->GetPointer(), pView->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkBufferViewInfo); -} - -void VulkanReplayConsumer::Process_vkDestroyBufferView( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId bufferView, - StructPointerDecoder* pAllocator) -{ - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkBufferView in_bufferView = MapHandle(bufferView, &CommonObjectInfoTable::GetVkBufferViewInfo); - const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); - - GetDeviceTable(in_device)->DestroyBufferView(in_device, in_bufferView, in_pAllocator); - RemoveHandle(bufferView, &CommonObjectInfoTable::RemoveVkBufferViewInfo); -} - void VulkanReplayConsumer::Process_vkCreateImage( const ApiCallInfo& call_info, VkResult returnValue, @@ -795,8 +705,10 @@ void VulkanReplayConsumer::Process_vkCreateImage( VulkanImageInfo handle_info; pImage->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pImage->GetPointer()); VkResult replay_result = OverrideCreateImage(GetDeviceTable(in_device->handle)->CreateImage, returnValue, in_device, pCreateInfo, pAllocator, pImage); CheckResult("vkCreateImage", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pImage->GetPointer(), pImage->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkImageInfo); } @@ -843,8 +755,10 @@ void VulkanReplayConsumer::Process_vkCreateImageView( VulkanImageViewInfo handle_info; pView->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pView->GetPointer()); VkResult replay_result = OverrideCreateImageView(GetDeviceTable(in_device->handle)->CreateImageView, returnValue, in_device, pCreateInfo, pAllocator, pView); CheckResult("vkCreateImageView", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pView->GetPointer(), pView->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkImageViewInfo); } @@ -863,759 +777,914 @@ void VulkanReplayConsumer::Process_vkDestroyImageView( RemoveHandle(imageView, &CommonObjectInfoTable::RemoveVkImageViewInfo); } -void VulkanReplayConsumer::Process_vkCreateShaderModule( +void VulkanReplayConsumer::Process_vkCreateCommandPool( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pCreateInfo, StructPointerDecoder* pAllocator, - HandlePointerDecoder* pShaderModule) + HandlePointerDecoder* pCommandPool) { - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - - MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); - if (!pShaderModule->IsNull()) { pShaderModule->SetHandleLength(1); } - VulkanShaderModuleInfo handle_info; - pShaderModule->SetConsumerData(0, &handle_info); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkCommandPoolCreateInfo* in_pCreateInfo = pCreateInfo->GetPointer(); + const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); + if (!pCommandPool->IsNull()) { pCommandPool->SetHandleLength(1); } + VkCommandPool* out_pCommandPool = pCommandPool->GetHandlePointer(); - VkResult replay_result = OverrideCreateShaderModule(GetDeviceTable(in_device->handle)->CreateShaderModule, returnValue, in_device, pCreateInfo, pAllocator, pShaderModule); - CheckResult("vkCreateShaderModule", returnValue, replay_result, call_info); + PushRecaptureHandleId(pCommandPool->GetPointer()); + VkResult replay_result = GetDeviceTable(in_device)->CreateCommandPool(in_device, in_pCreateInfo, in_pAllocator, out_pCommandPool); + CheckResult("vkCreateCommandPool", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); - AddHandle(device, pShaderModule->GetPointer(), pShaderModule->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkShaderModuleInfo); + AddHandle(device, pCommandPool->GetPointer(), out_pCommandPool, &CommonObjectInfoTable::AddVkCommandPoolInfo); } -void VulkanReplayConsumer::Process_vkDestroyShaderModule( +void VulkanReplayConsumer::Process_vkDestroyCommandPool( const ApiCallInfo& call_info, format::HandleId device, - format::HandleId shaderModule, + format::HandleId commandPool, StructPointerDecoder* pAllocator) { auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - auto in_shaderModule = GetObjectInfoTable().GetVkShaderModuleInfo(shaderModule); + auto in_commandPool = GetObjectInfoTable().GetVkCommandPoolInfo(commandPool); - OverrideDestroyShaderModule(GetDeviceTable(in_device->handle)->DestroyShaderModule, in_device, in_shaderModule, pAllocator); - RemoveHandle(shaderModule, &CommonObjectInfoTable::RemoveVkShaderModuleInfo); + OverrideDestroyCommandPool(GetDeviceTable(in_device->handle)->DestroyCommandPool, in_device, in_commandPool, pAllocator); + RemovePoolHandle(commandPool, &CommonObjectInfoTable::GetVkCommandPoolInfo, &CommonObjectInfoTable::RemoveVkCommandPoolInfo, &CommonObjectInfoTable::RemoveVkCommandBufferInfo); } -void VulkanReplayConsumer::Process_vkCreatePipelineCache( +void VulkanReplayConsumer::Process_vkResetCommandPool( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelineCache) + format::HandleId commandPool, + VkCommandPoolResetFlags flags) { auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - if (!pPipelineCache->IsNull()) { pPipelineCache->SetHandleLength(1); } - VulkanPipelineCacheInfo handle_info; - pPipelineCache->SetConsumerData(0, &handle_info); - - VkResult replay_result = OverrideCreatePipelineCache(GetDeviceTable(in_device->handle)->CreatePipelineCache, returnValue, in_device, pCreateInfo, pAllocator, pPipelineCache); - CheckResult("vkCreatePipelineCache", returnValue, replay_result, call_info); + auto in_commandPool = GetObjectInfoTable().GetVkCommandPoolInfo(commandPool); - AddHandle(device, pPipelineCache->GetPointer(), pPipelineCache->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkPipelineCacheInfo); + VkResult replay_result = OverrideResetCommandPool(GetDeviceTable(in_device->handle)->ResetCommandPool, returnValue, in_device, in_commandPool, flags); + CheckResult("vkResetCommandPool", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkDestroyPipelineCache( +void VulkanReplayConsumer::Process_vkAllocateCommandBuffers( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId pipelineCache, - StructPointerDecoder* pAllocator) + StructPointerDecoder* pAllocateInfo, + HandlePointerDecoder* pCommandBuffers) { auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - auto in_pipelineCache = GetObjectInfoTable().GetVkPipelineCacheInfo(pipelineCache); - OverrideDestroyPipelineCache(GetDeviceTable(in_device->handle)->DestroyPipelineCache, in_device, in_pipelineCache, pAllocator); - RemoveHandle(pipelineCache, &CommonObjectInfoTable::RemoveVkPipelineCacheInfo); + MapStructHandles(pAllocateInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (!pCommandBuffers->IsNull()) { pCommandBuffers->SetHandleLength(pAllocateInfo->GetPointer()->commandBufferCount); } + std::vector handle_info(pAllocateInfo->GetPointer()->commandBufferCount); + for (size_t i = 0; i < pAllocateInfo->GetPointer()->commandBufferCount; ++i) { pCommandBuffers->SetConsumerData(i, &handle_info[i]); } + + PushRecaptureHandleIds(pCommandBuffers->GetPointer(), pCommandBuffers->GetLength()); + VkResult replay_result = OverrideAllocateCommandBuffers(GetDeviceTable(in_device->handle)->AllocateCommandBuffers, returnValue, in_device, pAllocateInfo, pCommandBuffers); + CheckResult("vkAllocateCommandBuffers", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); + + AddPoolHandles(device, handle_mapping::GetPoolId(pAllocateInfo->GetMetaStructPointer()), pCommandBuffers->GetPointer(), pCommandBuffers->GetLength(), pCommandBuffers->GetHandlePointer(), pAllocateInfo->GetPointer()->commandBufferCount, std::move(handle_info), &CommonObjectInfoTable::GetVkCommandPoolInfo, &CommonObjectInfoTable::AddVkCommandBufferInfo); } -void VulkanReplayConsumer::Process_vkGetPipelineCacheData( +void VulkanReplayConsumer::Process_vkFreeCommandBuffers( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - format::HandleId pipelineCache, - PointerDecoder* pDataSize, - PointerDecoder* pData) + format::HandleId commandPool, + uint32_t commandBufferCount, + HandlePointerDecoder* pCommandBuffers) { auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - auto in_pipelineCache = GetObjectInfoTable().GetVkPipelineCacheInfo(pipelineCache); - pDataSize->IsNull() ? nullptr : pDataSize->AllocateOutputData(1, GetOutputArrayCount("vkGetPipelineCacheData", returnValue, pipelineCache, kPipelineCacheArrayGetPipelineCacheData, pDataSize, pData, &CommonObjectInfoTable::GetVkPipelineCacheInfo)); - if (!pData->IsNull()) { pData->AllocateOutputData(*pDataSize->GetOutputPointer()); } - - VkResult replay_result = OverrideGetPipelineCacheData(GetDeviceTable(in_device->handle)->GetPipelineCacheData, returnValue, in_device, in_pipelineCache, pDataSize, pData); - CheckResult("vkGetPipelineCacheData", returnValue, replay_result, call_info); + auto in_commandPool = GetObjectInfoTable().GetVkCommandPoolInfo(commandPool); + MapHandles(pCommandBuffers, commandBufferCount, &CommonObjectInfoTable::GetVkCommandBufferInfo); - if (pData->IsNull()) { SetOutputArrayCount(pipelineCache, kPipelineCacheArrayGetPipelineCacheData, *pDataSize->GetOutputPointer(), &CommonObjectInfoTable::GetVkPipelineCacheInfo); } + OverrideFreeCommandBuffers(GetDeviceTable(in_device->handle)->FreeCommandBuffers, in_device, in_commandPool, commandBufferCount, pCommandBuffers); + RemovePoolHandles(commandPool, pCommandBuffers, commandBufferCount, &CommonObjectInfoTable::GetVkCommandPoolInfo, &CommonObjectInfoTable::RemoveVkCommandBufferInfo); } -void VulkanReplayConsumer::Process_vkMergePipelineCaches( +void VulkanReplayConsumer::Process_vkBeginCommandBuffer( const ApiCallInfo& call_info, VkResult returnValue, - format::HandleId device, - format::HandleId dstCache, - uint32_t srcCacheCount, - HandlePointerDecoder* pSrcCaches) + format::HandleId commandBuffer, + StructPointerDecoder* pBeginInfo) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkPipelineCache in_dstCache = MapHandle(dstCache, &CommonObjectInfoTable::GetVkPipelineCacheInfo); - const VkPipelineCache* in_pSrcCaches = MapHandles(pSrcCaches, srcCacheCount, &CommonObjectInfoTable::GetVkPipelineCacheInfo); + auto in_commandBuffer = GetObjectInfoTable().GetVkCommandBufferInfo(commandBuffer); - VkResult replay_result = GetDeviceTable(in_device)->MergePipelineCaches(in_device, in_dstCache, srcCacheCount, in_pSrcCaches); - CheckResult("vkMergePipelineCaches", returnValue, replay_result, call_info); + MapStructHandles(pBeginInfo->GetMetaStructPointer(), GetObjectInfoTable()); + + VkResult replay_result = OverrideBeginCommandBuffer(GetDeviceTable(in_commandBuffer->handle)->BeginCommandBuffer, call_info.index, returnValue, in_commandBuffer, pBeginInfo); + CheckResult("vkBeginCommandBuffer", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkCreateGraphicsPipelines( +void VulkanReplayConsumer::Process_vkEndCommandBuffer( const ApiCallInfo& call_info, VkResult returnValue, - format::HandleId device, - format::HandleId pipelineCache, - uint32_t createInfoCount, - StructPointerDecoder* pCreateInfos, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelines) + format::HandleId commandBuffer) { - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - auto in_pipelineCache = GetObjectInfoTable().GetVkPipelineCacheInfo(pipelineCache); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - MapStructArrayHandles(pCreateInfos->GetMetaStructPointer(), pCreateInfos->GetLength(), GetObjectInfoTable()); - if (!pPipelines->IsNull()) { pPipelines->SetHandleLength(createInfoCount); } - if (omitted_pipeline_cache_data_) {AllowCompileDuringPipelineCreation(createInfoCount, pCreateInfos->GetPointer());} - std::vector handle_info(createInfoCount); - for (size_t i = 0; i < createInfoCount; ++i) { pPipelines->SetConsumerData(i, &handle_info[i]); } + VkResult replay_result = GetDeviceTable(in_commandBuffer)->EndCommandBuffer(in_commandBuffer); + CheckResult("vkEndCommandBuffer", returnValue, replay_result, call_info); - if (UseAsyncOperations()) + if (options_.dumping_resources) { - auto task = AsyncCreateGraphicsPipelines(GetDeviceTable(in_device->handle)->CreateGraphicsPipelines, returnValue, call_info, in_device, in_pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); - if(task) - { - AddHandlesAsync(device, pPipelines->GetPointer(), pPipelines->GetLength(), std::move(handle_info), &CommonObjectInfoTable::AddVkPipelineInfo, std::move(task)); - return; - } + resource_dumper_->Process_vkEndCommandBuffer(call_info, GetDeviceTable(in_commandBuffer)->EndCommandBuffer, returnValue, in_commandBuffer); } - VkResult replay_result = OverrideCreateGraphicsPipelines(GetDeviceTable(in_device->handle)->CreateGraphicsPipelines, returnValue, in_device, in_pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); - CheckResult("vkCreateGraphicsPipelines", returnValue, replay_result, call_info); - - AddHandles(device, pPipelines->GetPointer(), pPipelines->GetLength(), pPipelines->GetHandlePointer(), createInfoCount, std::move(handle_info), &CommonObjectInfoTable::AddVkPipelineInfo); } -void VulkanReplayConsumer::Process_vkCreateComputePipelines( +void VulkanReplayConsumer::Process_vkResetCommandBuffer( const ApiCallInfo& call_info, VkResult returnValue, - format::HandleId device, - format::HandleId pipelineCache, - uint32_t createInfoCount, - StructPointerDecoder* pCreateInfos, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelines) + format::HandleId commandBuffer, + VkCommandBufferResetFlags flags) { - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - auto in_pipelineCache = GetObjectInfoTable().GetVkPipelineCacheInfo(pipelineCache); + auto in_commandBuffer = GetObjectInfoTable().GetVkCommandBufferInfo(commandBuffer); - MapStructArrayHandles(pCreateInfos->GetMetaStructPointer(), pCreateInfos->GetLength(), GetObjectInfoTable()); - if (!pPipelines->IsNull()) { pPipelines->SetHandleLength(createInfoCount); } - if (omitted_pipeline_cache_data_) {AllowCompileDuringPipelineCreation(createInfoCount, pCreateInfos->GetPointer());} - std::vector handle_info(createInfoCount); - for (size_t i = 0; i < createInfoCount; ++i) { pPipelines->SetConsumerData(i, &handle_info[i]); } + VkResult replay_result = OverrideResetCommandBuffer(GetDeviceTable(in_commandBuffer->handle)->ResetCommandBuffer, returnValue, in_commandBuffer, flags); + CheckResult("vkResetCommandBuffer", returnValue, replay_result, call_info); +} - if (UseAsyncOperations()) +void VulkanReplayConsumer::Process_vkCmdCopyBuffer( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId srcBuffer, + format::HandleId dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkBuffer in_srcBuffer = MapHandle(srcBuffer, &CommonObjectInfoTable::GetVkBufferInfo); + VkBuffer in_dstBuffer = MapHandle(dstBuffer, &CommonObjectInfoTable::GetVkBufferInfo); + const VkBufferCopy* in_pRegions = pRegions->GetPointer(); + + if (options_.dumping_resources && options_.dump_resources_before) { - auto task = AsyncCreateComputePipelines(GetDeviceTable(in_device->handle)->CreateComputePipelines, returnValue, call_info, in_device, in_pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); - if(task) - { - AddHandlesAsync(device, pPipelines->GetPointer(), pPipelines->GetLength(), std::move(handle_info), &CommonObjectInfoTable::AddVkPipelineInfo, std::move(task)); - return; - } + resource_dumper_->Process_vkCmdCopyBuffer(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBuffer, in_commandBuffer, GetObjectInfoTable().GetVkBufferInfo(srcBuffer), GetObjectInfoTable().GetVkBufferInfo(dstBuffer), regionCount, pRegions, true); } - VkResult replay_result = OverrideCreateComputePipelines(GetDeviceTable(in_device->handle)->CreateComputePipelines, returnValue, in_device, in_pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); - CheckResult("vkCreateComputePipelines", returnValue, replay_result, call_info); - AddHandles(device, pPipelines->GetPointer(), pPipelines->GetLength(), pPipelines->GetHandlePointer(), createInfoCount, std::move(handle_info), &CommonObjectInfoTable::AddVkPipelineInfo); + GetDeviceTable(in_commandBuffer)->CmdCopyBuffer(in_commandBuffer, in_srcBuffer, in_dstBuffer, regionCount, in_pRegions); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdCopyBuffer(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBuffer, in_commandBuffer, GetObjectInfoTable().GetVkBufferInfo(srcBuffer), GetObjectInfoTable().GetVkBufferInfo(dstBuffer), regionCount, pRegions, false); + } } -void VulkanReplayConsumer::Process_vkDestroyPipeline( +void VulkanReplayConsumer::Process_vkCmdCopyImage( const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId pipeline, - StructPointerDecoder* pAllocator) + format::HandleId commandBuffer, + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) { - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - auto in_pipeline = GetObjectInfoTable().GetVkPipelineInfo(pipeline); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkImage in_srcImage = MapHandle(srcImage, &CommonObjectInfoTable::GetVkImageInfo); + VkImage in_dstImage = MapHandle(dstImage, &CommonObjectInfoTable::GetVkImageInfo); + const VkImageCopy* in_pRegions = pRegions->GetPointer(); - OverrideDestroyPipeline(GetDeviceTable(in_device->handle)->DestroyPipeline, in_device, in_pipeline, pAllocator); - RemoveHandle(pipeline, &CommonObjectInfoTable::RemoveVkPipelineInfo); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdCopyImage(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImage, in_commandBuffer, GetObjectInfoTable().GetVkImageInfo(srcImage), srcImageLayout, GetObjectInfoTable().GetVkImageInfo(dstImage), dstImageLayout, regionCount, pRegions, true); + } + + GetDeviceTable(in_commandBuffer)->CmdCopyImage(in_commandBuffer, in_srcImage, srcImageLayout, in_dstImage, dstImageLayout, regionCount, in_pRegions); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdCopyImage(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImage, in_commandBuffer, GetObjectInfoTable().GetVkImageInfo(srcImage), srcImageLayout, GetObjectInfoTable().GetVkImageInfo(dstImage), dstImageLayout, regionCount, pRegions, false); + } } -void VulkanReplayConsumer::Process_vkCreatePipelineLayout( +void VulkanReplayConsumer::Process_vkCmdCopyBufferToImage( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelineLayout) + format::HandleId commandBuffer, + format::HandleId srcBuffer, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) { - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkBuffer in_srcBuffer = MapHandle(srcBuffer, &CommonObjectInfoTable::GetVkBufferInfo); + VkImage in_dstImage = MapHandle(dstImage, &CommonObjectInfoTable::GetVkImageInfo); + const VkBufferImageCopy* in_pRegions = pRegions->GetPointer(); - MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); - if (!pPipelineLayout->IsNull()) { pPipelineLayout->SetHandleLength(1); } - VulkanPipelineLayoutInfo handle_info; - pPipelineLayout->SetConsumerData(0, &handle_info); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdCopyBufferToImage(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBufferToImage, in_commandBuffer, GetObjectInfoTable().GetVkBufferInfo(srcBuffer), GetObjectInfoTable().GetVkImageInfo(dstImage), dstImageLayout, regionCount, pRegions, true); + } - VkResult replay_result = OverrideCreatePipelineLayout(GetDeviceTable(in_device->handle)->CreatePipelineLayout, returnValue, in_device, pCreateInfo, pAllocator, pPipelineLayout); - CheckResult("vkCreatePipelineLayout", returnValue, replay_result, call_info); + GetDeviceTable(in_commandBuffer)->CmdCopyBufferToImage(in_commandBuffer, in_srcBuffer, in_dstImage, dstImageLayout, regionCount, in_pRegions); - AddHandle(device, pPipelineLayout->GetPointer(), pPipelineLayout->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkPipelineLayoutInfo); + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdCopyBufferToImage(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBufferToImage, in_commandBuffer, GetObjectInfoTable().GetVkBufferInfo(srcBuffer), GetObjectInfoTable().GetVkImageInfo(dstImage), dstImageLayout, regionCount, pRegions, false); + } } -void VulkanReplayConsumer::Process_vkDestroyPipelineLayout( +void VulkanReplayConsumer::Process_vkCmdCopyImageToBuffer( const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId pipelineLayout, - StructPointerDecoder* pAllocator) + format::HandleId commandBuffer, + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkPipelineLayout in_pipelineLayout = MapHandle(pipelineLayout, &CommonObjectInfoTable::GetVkPipelineLayoutInfo); - const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkImage in_srcImage = MapHandle(srcImage, &CommonObjectInfoTable::GetVkImageInfo); + VkBuffer in_dstBuffer = MapHandle(dstBuffer, &CommonObjectInfoTable::GetVkBufferInfo); + const VkBufferImageCopy* in_pRegions = pRegions->GetPointer(); - GetDeviceTable(in_device)->DestroyPipelineLayout(in_device, in_pipelineLayout, in_pAllocator); - RemoveHandle(pipelineLayout, &CommonObjectInfoTable::RemoveVkPipelineLayoutInfo); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdCopyImageToBuffer(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImageToBuffer, in_commandBuffer, GetObjectInfoTable().GetVkImageInfo(srcImage), srcImageLayout, GetObjectInfoTable().GetVkBufferInfo(dstBuffer), regionCount, pRegions, true); + } + + GetDeviceTable(in_commandBuffer)->CmdCopyImageToBuffer(in_commandBuffer, in_srcImage, srcImageLayout, in_dstBuffer, regionCount, in_pRegions); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdCopyImageToBuffer(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImageToBuffer, in_commandBuffer, GetObjectInfoTable().GetVkImageInfo(srcImage), srcImageLayout, GetObjectInfoTable().GetVkBufferInfo(dstBuffer), regionCount, pRegions, false); + } } -void VulkanReplayConsumer::Process_vkCreateSampler( +void VulkanReplayConsumer::Process_vkCmdUpdateBuffer( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pSampler) + format::HandleId commandBuffer, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize dataSize, + PointerDecoder* pData) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkSamplerCreateInfo* in_pCreateInfo = pCreateInfo->GetPointer(); - MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); - const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); - if (!pSampler->IsNull()) { pSampler->SetHandleLength(1); } - VkSampler* out_pSampler = pSampler->GetHandlePointer(); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkBuffer in_dstBuffer = MapHandle(dstBuffer, &CommonObjectInfoTable::GetVkBufferInfo); + const void* in_pData = pData->GetPointer(); - VkResult replay_result = GetDeviceTable(in_device)->CreateSampler(in_device, in_pCreateInfo, in_pAllocator, out_pSampler); - CheckResult("vkCreateSampler", returnValue, replay_result, call_info); + GetDeviceTable(in_commandBuffer)->CmdUpdateBuffer(in_commandBuffer, in_dstBuffer, dstOffset, dataSize, in_pData); - AddHandle(device, pSampler->GetPointer(), out_pSampler, &CommonObjectInfoTable::AddVkSamplerInfo); + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdUpdateBuffer(call_info, GetDeviceTable(in_commandBuffer)->CmdUpdateBuffer, in_commandBuffer, in_dstBuffer, dstOffset, dataSize, in_pData); + } } -void VulkanReplayConsumer::Process_vkDestroySampler( +void VulkanReplayConsumer::Process_vkCmdFillBuffer( const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId sampler, - StructPointerDecoder* pAllocator) + format::HandleId commandBuffer, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize size, + uint32_t data) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkSampler in_sampler = MapHandle(sampler, &CommonObjectInfoTable::GetVkSamplerInfo); - const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkBuffer in_dstBuffer = MapHandle(dstBuffer, &CommonObjectInfoTable::GetVkBufferInfo); - GetDeviceTable(in_device)->DestroySampler(in_device, in_sampler, in_pAllocator); - RemoveHandle(sampler, &CommonObjectInfoTable::RemoveVkSamplerInfo); + GetDeviceTable(in_commandBuffer)->CmdFillBuffer(in_commandBuffer, in_dstBuffer, dstOffset, size, data); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdFillBuffer(call_info, GetDeviceTable(in_commandBuffer)->CmdFillBuffer, in_commandBuffer, in_dstBuffer, dstOffset, size, data); + } } -void VulkanReplayConsumer::Process_vkCreateDescriptorSetLayout( +void VulkanReplayConsumer::Process_vkCmdPipelineBarrier( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pSetLayout) + format::HandleId commandBuffer, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkDependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + StructPointerDecoder* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + StructPointerDecoder* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + StructPointerDecoder* pImageMemoryBarriers) { - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + auto in_commandBuffer = GetObjectInfoTable().GetVkCommandBufferInfo(commandBuffer); - MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); - if (!pSetLayout->IsNull()) { pSetLayout->SetHandleLength(1); } - VulkanDescriptorSetLayoutInfo handle_info; - pSetLayout->SetConsumerData(0, &handle_info); + MapStructArrayHandles(pBufferMemoryBarriers->GetMetaStructPointer(), pBufferMemoryBarriers->GetLength(), GetObjectInfoTable()); - VkResult replay_result = OverrideCreateDescriptorSetLayout(GetDeviceTable(in_device->handle)->CreateDescriptorSetLayout, returnValue, in_device, pCreateInfo, pAllocator, pSetLayout); - CheckResult("vkCreateDescriptorSetLayout", returnValue, replay_result, call_info); + MapStructArrayHandles(pImageMemoryBarriers->GetMetaStructPointer(), pImageMemoryBarriers->GetLength(), GetObjectInfoTable()); - AddHandle(device, pSetLayout->GetPointer(), pSetLayout->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkDescriptorSetLayoutInfo); + OverrideCmdPipelineBarrier(GetDeviceTable(in_commandBuffer->handle)->CmdPipelineBarrier, in_commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdPipelineBarrier(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdPipelineBarrier, in_commandBuffer->handle, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers->GetPointer(), bufferMemoryBarrierCount, pBufferMemoryBarriers->GetPointer(), imageMemoryBarrierCount, pImageMemoryBarriers->GetPointer()); + } } -void VulkanReplayConsumer::Process_vkDestroyDescriptorSetLayout( +void VulkanReplayConsumer::Process_vkCmdBeginQuery( const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId descriptorSetLayout, - StructPointerDecoder* pAllocator) + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t query, + VkQueryControlFlags flags) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkDescriptorSetLayout in_descriptorSetLayout = MapHandle(descriptorSetLayout, &CommonObjectInfoTable::GetVkDescriptorSetLayoutInfo); - const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkQueryPool in_queryPool = MapHandle(queryPool, &CommonObjectInfoTable::GetVkQueryPoolInfo); + + GetDeviceTable(in_commandBuffer)->CmdBeginQuery(in_commandBuffer, in_queryPool, query, flags); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdBeginQuery(call_info, GetDeviceTable(in_commandBuffer)->CmdBeginQuery, in_commandBuffer, in_queryPool, query, flags); + } +} + +void VulkanReplayConsumer::Process_vkCmdEndQuery( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t query) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkQueryPool in_queryPool = MapHandle(queryPool, &CommonObjectInfoTable::GetVkQueryPoolInfo); + + GetDeviceTable(in_commandBuffer)->CmdEndQuery(in_commandBuffer, in_queryPool, query); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdEndQuery(call_info, GetDeviceTable(in_commandBuffer)->CmdEndQuery, in_commandBuffer, in_queryPool, query); + } +} + +void VulkanReplayConsumer::Process_vkCmdResetQueryPool( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkQueryPool in_queryPool = MapHandle(queryPool, &CommonObjectInfoTable::GetVkQueryPoolInfo); + + GetDeviceTable(in_commandBuffer)->CmdResetQueryPool(in_commandBuffer, in_queryPool, firstQuery, queryCount); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdResetQueryPool(call_info, GetDeviceTable(in_commandBuffer)->CmdResetQueryPool, in_commandBuffer, in_queryPool, firstQuery, queryCount); + } +} + +void VulkanReplayConsumer::Process_vkCmdWriteTimestamp( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineStageFlagBits pipelineStage, + format::HandleId queryPool, + uint32_t query) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkQueryPool in_queryPool = MapHandle(queryPool, &CommonObjectInfoTable::GetVkQueryPoolInfo); + + GetDeviceTable(in_commandBuffer)->CmdWriteTimestamp(in_commandBuffer, pipelineStage, in_queryPool, query); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdWriteTimestamp(call_info, GetDeviceTable(in_commandBuffer)->CmdWriteTimestamp, in_commandBuffer, pipelineStage, in_queryPool, query); + } +} + +void VulkanReplayConsumer::Process_vkCmdCopyQueryPoolResults( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkQueryPool in_queryPool = MapHandle(queryPool, &CommonObjectInfoTable::GetVkQueryPoolInfo); + VkBuffer in_dstBuffer = MapHandle(dstBuffer, &CommonObjectInfoTable::GetVkBufferInfo); + + GetDeviceTable(in_commandBuffer)->CmdCopyQueryPoolResults(in_commandBuffer, in_queryPool, firstQuery, queryCount, in_dstBuffer, dstOffset, stride, flags); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdCopyQueryPoolResults(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyQueryPoolResults, in_commandBuffer, in_queryPool, firstQuery, queryCount, in_dstBuffer, dstOffset, stride, flags); + } +} + +void VulkanReplayConsumer::Process_vkCmdExecuteCommands( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t commandBufferCount, + HandlePointerDecoder* pCommandBuffers) +{ + auto in_commandBuffer = GetObjectInfoTable().GetVkCommandBufferInfo(commandBuffer); + MapHandles(pCommandBuffers, commandBufferCount, &CommonObjectInfoTable::GetVkCommandBufferInfo); + + OverrideCmdExecuteCommands(GetDeviceTable(in_commandBuffer->handle)->CmdExecuteCommands, in_commandBuffer, commandBufferCount, pCommandBuffers); - GetDeviceTable(in_device)->DestroyDescriptorSetLayout(in_device, in_descriptorSetLayout, in_pAllocator); - RemoveHandle(descriptorSetLayout, &CommonObjectInfoTable::RemoveVkDescriptorSetLayoutInfo); + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdExecuteCommands(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdExecuteCommands, in_commandBuffer->handle, commandBufferCount, pCommandBuffers->GetHandlePointer()); + } } -void VulkanReplayConsumer::Process_vkCreateDescriptorPool( +void VulkanReplayConsumer::Process_vkCreateEvent( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pCreateInfo, StructPointerDecoder* pAllocator, - HandlePointerDecoder* pDescriptorPool) + HandlePointerDecoder* pEvent) { - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - if (!pDescriptorPool->IsNull()) { pDescriptorPool->SetHandleLength(1); } - VulkanDescriptorPoolInfo handle_info; - pDescriptorPool->SetConsumerData(0, &handle_info); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkEventCreateInfo* in_pCreateInfo = pCreateInfo->GetPointer(); + const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); + if (!pEvent->IsNull()) { pEvent->SetHandleLength(1); } + VkEvent* out_pEvent = pEvent->GetHandlePointer(); - VkResult replay_result = OverrideCreateDescriptorPool(GetDeviceTable(in_device->handle)->CreateDescriptorPool, returnValue, in_device, pCreateInfo, pAllocator, pDescriptorPool); - CheckResult("vkCreateDescriptorPool", returnValue, replay_result, call_info); + PushRecaptureHandleId(pEvent->GetPointer()); + VkResult replay_result = GetDeviceTable(in_device)->CreateEvent(in_device, in_pCreateInfo, in_pAllocator, out_pEvent); + CheckResult("vkCreateEvent", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); - AddHandle(device, pDescriptorPool->GetPointer(), pDescriptorPool->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkDescriptorPoolInfo); + AddHandle(device, pEvent->GetPointer(), out_pEvent, &CommonObjectInfoTable::AddVkEventInfo); } -void VulkanReplayConsumer::Process_vkDestroyDescriptorPool( +void VulkanReplayConsumer::Process_vkDestroyEvent( const ApiCallInfo& call_info, format::HandleId device, - format::HandleId descriptorPool, + format::HandleId event, StructPointerDecoder* pAllocator) { - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - auto in_descriptorPool = GetObjectInfoTable().GetVkDescriptorPoolInfo(descriptorPool); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkEvent in_event = MapHandle(event, &CommonObjectInfoTable::GetVkEventInfo); + const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); - OverrideDestroyDescriptorPool(GetDeviceTable(in_device->handle)->DestroyDescriptorPool, in_device, in_descriptorPool, pAllocator); - RemovePoolHandle(descriptorPool, &CommonObjectInfoTable::GetVkDescriptorPoolInfo, &CommonObjectInfoTable::RemoveVkDescriptorPoolInfo, &CommonObjectInfoTable::RemoveVkDescriptorSetInfo); + GetDeviceTable(in_device)->DestroyEvent(in_device, in_event, in_pAllocator); + RemoveHandle(event, &CommonObjectInfoTable::RemoveVkEventInfo); } -void VulkanReplayConsumer::Process_vkResetDescriptorPool( +void VulkanReplayConsumer::Process_vkGetEventStatus( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - format::HandleId descriptorPool, - VkDescriptorPoolResetFlags flags) + format::HandleId event) { auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - auto in_descriptorPool = GetObjectInfoTable().GetVkDescriptorPoolInfo(descriptorPool); + auto in_event = GetObjectInfoTable().GetVkEventInfo(event); - VkResult replay_result = OverrideResetDescriptorPool(GetDeviceTable(in_device->handle)->ResetDescriptorPool, returnValue, in_device, in_descriptorPool, flags); - CheckResult("vkResetDescriptorPool", returnValue, replay_result, call_info); + VkResult replay_result = OverrideGetEventStatus(GetDeviceTable(in_device->handle)->GetEventStatus, returnValue, in_device, in_event); + CheckResult("vkGetEventStatus", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkAllocateDescriptorSets( +void VulkanReplayConsumer::Process_vkSetEvent( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pAllocateInfo, - HandlePointerDecoder* pDescriptorSets) + format::HandleId event) { - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - - MapStructHandles(pAllocateInfo->GetMetaStructPointer(), GetObjectInfoTable()); - if (!pDescriptorSets->IsNull()) { pDescriptorSets->SetHandleLength(pAllocateInfo->GetPointer()->descriptorSetCount); } - std::vector handle_info(pAllocateInfo->GetPointer()->descriptorSetCount); - for (size_t i = 0; i < pAllocateInfo->GetPointer()->descriptorSetCount; ++i) { pDescriptorSets->SetConsumerData(i, &handle_info[i]); } - - VkResult replay_result = OverrideAllocateDescriptorSets(GetDeviceTable(in_device->handle)->AllocateDescriptorSets, returnValue, in_device, pAllocateInfo, pDescriptorSets); - CheckResult("vkAllocateDescriptorSets", returnValue, replay_result, call_info); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkEvent in_event = MapHandle(event, &CommonObjectInfoTable::GetVkEventInfo); - AddPoolHandles(device, handle_mapping::GetPoolId(pAllocateInfo->GetMetaStructPointer()), pDescriptorSets->GetPointer(), pDescriptorSets->GetLength(), pDescriptorSets->GetHandlePointer(), pAllocateInfo->GetPointer()->descriptorSetCount, std::move(handle_info), &CommonObjectInfoTable::GetVkDescriptorPoolInfo, &CommonObjectInfoTable::AddVkDescriptorSetInfo); + VkResult replay_result = GetDeviceTable(in_device)->SetEvent(in_device, in_event); + CheckResult("vkSetEvent", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkFreeDescriptorSets( +void VulkanReplayConsumer::Process_vkResetEvent( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - format::HandleId descriptorPool, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets) + format::HandleId event) { VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkDescriptorPool in_descriptorPool = MapHandle(descriptorPool, &CommonObjectInfoTable::GetVkDescriptorPoolInfo); - const VkDescriptorSet* in_pDescriptorSets = MapHandles(pDescriptorSets, descriptorSetCount, &CommonObjectInfoTable::GetVkDescriptorSetInfo); + VkEvent in_event = MapHandle(event, &CommonObjectInfoTable::GetVkEventInfo); - VkResult replay_result = GetDeviceTable(in_device)->FreeDescriptorSets(in_device, in_descriptorPool, descriptorSetCount, in_pDescriptorSets); - CheckResult("vkFreeDescriptorSets", returnValue, replay_result, call_info); - RemovePoolHandles(descriptorPool, pDescriptorSets, descriptorSetCount, &CommonObjectInfoTable::GetVkDescriptorPoolInfo, &CommonObjectInfoTable::RemoveVkDescriptorSetInfo); + VkResult replay_result = GetDeviceTable(in_device)->ResetEvent(in_device, in_event); + CheckResult("vkResetEvent", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkUpdateDescriptorSets( +void VulkanReplayConsumer::Process_vkCreateBufferView( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - uint32_t descriptorWriteCount, - StructPointerDecoder* pDescriptorWrites, - uint32_t descriptorCopyCount, - StructPointerDecoder* pDescriptorCopies) + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pView) { auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - MapStructArrayHandles(pDescriptorWrites->GetMetaStructPointer(), pDescriptorWrites->GetLength(), GetObjectInfoTable()); + MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (!pView->IsNull()) { pView->SetHandleLength(1); } + VulkanBufferViewInfo handle_info; + pView->SetConsumerData(0, &handle_info); - MapStructArrayHandles(pDescriptorCopies->GetMetaStructPointer(), pDescriptorCopies->GetLength(), GetObjectInfoTable()); + PushRecaptureHandleId(pView->GetPointer()); + VkResult replay_result = OverrideCreateBufferView(GetDeviceTable(in_device->handle)->CreateBufferView, returnValue, in_device, pCreateInfo, pAllocator, pView); + CheckResult("vkCreateBufferView", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); - OverrideUpdateDescriptorSets(GetDeviceTable(in_device->handle)->UpdateDescriptorSets, in_device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies); + AddHandle(device, pView->GetPointer(), pView->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkBufferViewInfo); } -void VulkanReplayConsumer::Process_vkCreateFramebuffer( +void VulkanReplayConsumer::Process_vkDestroyBufferView( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId bufferView, + StructPointerDecoder* pAllocator) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkBufferView in_bufferView = MapHandle(bufferView, &CommonObjectInfoTable::GetVkBufferViewInfo); + const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); + + GetDeviceTable(in_device)->DestroyBufferView(in_device, in_bufferView, in_pAllocator); + RemoveHandle(bufferView, &CommonObjectInfoTable::RemoveVkBufferViewInfo); +} + +void VulkanReplayConsumer::Process_vkCreateShaderModule( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pCreateInfo, StructPointerDecoder* pAllocator, - HandlePointerDecoder* pFramebuffer) + HandlePointerDecoder* pShaderModule) { auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); - if (!pFramebuffer->IsNull()) { pFramebuffer->SetHandleLength(1); } - VulkanFramebufferInfo handle_info; - pFramebuffer->SetConsumerData(0, &handle_info); + if (!pShaderModule->IsNull()) { pShaderModule->SetHandleLength(1); } + VulkanShaderModuleInfo handle_info; + pShaderModule->SetConsumerData(0, &handle_info); - VkResult replay_result = OverrideCreateFramebuffer(GetDeviceTable(in_device->handle)->CreateFramebuffer, returnValue, in_device, pCreateInfo, pAllocator, pFramebuffer); - CheckResult("vkCreateFramebuffer", returnValue, replay_result, call_info); + PushRecaptureHandleId(pShaderModule->GetPointer()); + VkResult replay_result = OverrideCreateShaderModule(GetDeviceTable(in_device->handle)->CreateShaderModule, returnValue, in_device, pCreateInfo, pAllocator, pShaderModule); + CheckResult("vkCreateShaderModule", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); - AddHandle(device, pFramebuffer->GetPointer(), pFramebuffer->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkFramebufferInfo); + AddHandle(device, pShaderModule->GetPointer(), pShaderModule->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkShaderModuleInfo); } -void VulkanReplayConsumer::Process_vkDestroyFramebuffer( +void VulkanReplayConsumer::Process_vkDestroyShaderModule( const ApiCallInfo& call_info, format::HandleId device, - format::HandleId framebuffer, + format::HandleId shaderModule, StructPointerDecoder* pAllocator) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkFramebuffer in_framebuffer = MapHandle(framebuffer, &CommonObjectInfoTable::GetVkFramebufferInfo); - const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + auto in_shaderModule = GetObjectInfoTable().GetVkShaderModuleInfo(shaderModule); - GetDeviceTable(in_device)->DestroyFramebuffer(in_device, in_framebuffer, in_pAllocator); - RemoveHandle(framebuffer, &CommonObjectInfoTable::RemoveVkFramebufferInfo); + OverrideDestroyShaderModule(GetDeviceTable(in_device->handle)->DestroyShaderModule, in_device, in_shaderModule, pAllocator); + RemoveHandle(shaderModule, &CommonObjectInfoTable::RemoveVkShaderModuleInfo); } -void VulkanReplayConsumer::Process_vkCreateRenderPass( +void VulkanReplayConsumer::Process_vkCreatePipelineCache( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pCreateInfo, StructPointerDecoder* pAllocator, - HandlePointerDecoder* pRenderPass) + HandlePointerDecoder* pPipelineCache) { auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - if (!pRenderPass->IsNull()) { pRenderPass->SetHandleLength(1); } - VulkanRenderPassInfo handle_info; - pRenderPass->SetConsumerData(0, &handle_info); + if (!pPipelineCache->IsNull()) { pPipelineCache->SetHandleLength(1); } + VulkanPipelineCacheInfo handle_info; + pPipelineCache->SetConsumerData(0, &handle_info); - VkResult replay_result = OverrideCreateRenderPass(GetDeviceTable(in_device->handle)->CreateRenderPass, returnValue, in_device, pCreateInfo, pAllocator, pRenderPass); - CheckResult("vkCreateRenderPass", returnValue, replay_result, call_info); + PushRecaptureHandleId(pPipelineCache->GetPointer()); + VkResult replay_result = OverrideCreatePipelineCache(GetDeviceTable(in_device->handle)->CreatePipelineCache, returnValue, in_device, pCreateInfo, pAllocator, pPipelineCache); + CheckResult("vkCreatePipelineCache", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); - AddHandle(device, pRenderPass->GetPointer(), pRenderPass->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkRenderPassInfo); + AddHandle(device, pPipelineCache->GetPointer(), pPipelineCache->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkPipelineCacheInfo); } -void VulkanReplayConsumer::Process_vkDestroyRenderPass( +void VulkanReplayConsumer::Process_vkDestroyPipelineCache( const ApiCallInfo& call_info, format::HandleId device, - format::HandleId renderPass, + format::HandleId pipelineCache, StructPointerDecoder* pAllocator) { auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - auto in_renderPass = GetObjectInfoTable().GetVkRenderPassInfo(renderPass); + auto in_pipelineCache = GetObjectInfoTable().GetVkPipelineCacheInfo(pipelineCache); - OverrideDestroyRenderPass(GetDeviceTable(in_device->handle)->DestroyRenderPass, in_device, in_renderPass, pAllocator); - RemoveHandle(renderPass, &CommonObjectInfoTable::RemoveVkRenderPassInfo); + OverrideDestroyPipelineCache(GetDeviceTable(in_device->handle)->DestroyPipelineCache, in_device, in_pipelineCache, pAllocator); + RemoveHandle(pipelineCache, &CommonObjectInfoTable::RemoveVkPipelineCacheInfo); } -void VulkanReplayConsumer::Process_vkGetRenderAreaGranularity( +void VulkanReplayConsumer::Process_vkGetPipelineCacheData( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId renderPass, - StructPointerDecoder* pGranularity) + format::HandleId pipelineCache, + PointerDecoder* pDataSize, + PointerDecoder* pData) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkRenderPass in_renderPass = MapHandle(renderPass, &CommonObjectInfoTable::GetVkRenderPassInfo); - VkExtent2D* out_pGranularity = pGranularity->IsNull() ? nullptr : pGranularity->AllocateOutputData(1); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + auto in_pipelineCache = GetObjectInfoTable().GetVkPipelineCacheInfo(pipelineCache); + pDataSize->IsNull() ? nullptr : pDataSize->AllocateOutputData(1, GetOutputArrayCount("vkGetPipelineCacheData", returnValue, pipelineCache, kPipelineCacheArrayGetPipelineCacheData, pDataSize, pData, &CommonObjectInfoTable::GetVkPipelineCacheInfo)); + if (!pData->IsNull()) { pData->AllocateOutputData(*pDataSize->GetOutputPointer()); } - GetDeviceTable(in_device)->GetRenderAreaGranularity(in_device, in_renderPass, out_pGranularity); + VkResult replay_result = OverrideGetPipelineCacheData(GetDeviceTable(in_device->handle)->GetPipelineCacheData, returnValue, in_device, in_pipelineCache, pDataSize, pData); + CheckResult("vkGetPipelineCacheData", returnValue, replay_result, call_info); + + if (pData->IsNull()) { SetOutputArrayCount(pipelineCache, kPipelineCacheArrayGetPipelineCacheData, *pDataSize->GetOutputPointer(), &CommonObjectInfoTable::GetVkPipelineCacheInfo); } } -void VulkanReplayConsumer::Process_vkCreateCommandPool( +void VulkanReplayConsumer::Process_vkMergePipelineCaches( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pCommandPool) + format::HandleId dstCache, + uint32_t srcCacheCount, + HandlePointerDecoder* pSrcCaches) { VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkCommandPoolCreateInfo* in_pCreateInfo = pCreateInfo->GetPointer(); - const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); - if (!pCommandPool->IsNull()) { pCommandPool->SetHandleLength(1); } - VkCommandPool* out_pCommandPool = pCommandPool->GetHandlePointer(); - - VkResult replay_result = GetDeviceTable(in_device)->CreateCommandPool(in_device, in_pCreateInfo, in_pAllocator, out_pCommandPool); - CheckResult("vkCreateCommandPool", returnValue, replay_result, call_info); + VkPipelineCache in_dstCache = MapHandle(dstCache, &CommonObjectInfoTable::GetVkPipelineCacheInfo); + const VkPipelineCache* in_pSrcCaches = MapHandles(pSrcCaches, srcCacheCount, &CommonObjectInfoTable::GetVkPipelineCacheInfo); - AddHandle(device, pCommandPool->GetPointer(), out_pCommandPool, &CommonObjectInfoTable::AddVkCommandPoolInfo); + VkResult replay_result = GetDeviceTable(in_device)->MergePipelineCaches(in_device, in_dstCache, srcCacheCount, in_pSrcCaches); + CheckResult("vkMergePipelineCaches", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkDestroyCommandPool( +void VulkanReplayConsumer::Process_vkCreateComputePipelines( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId commandPool, - StructPointerDecoder* pAllocator) + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) { auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - auto in_commandPool = GetObjectInfoTable().GetVkCommandPoolInfo(commandPool); + auto in_pipelineCache = GetObjectInfoTable().GetVkPipelineCacheInfo(pipelineCache); - OverrideDestroyCommandPool(GetDeviceTable(in_device->handle)->DestroyCommandPool, in_device, in_commandPool, pAllocator); - RemovePoolHandle(commandPool, &CommonObjectInfoTable::GetVkCommandPoolInfo, &CommonObjectInfoTable::RemoveVkCommandPoolInfo, &CommonObjectInfoTable::RemoveVkCommandBufferInfo); + MapStructArrayHandles(pCreateInfos->GetMetaStructPointer(), pCreateInfos->GetLength(), GetObjectInfoTable()); + if (!pPipelines->IsNull()) { pPipelines->SetHandleLength(createInfoCount); } + if (omitted_pipeline_cache_data_) {AllowCompileDuringPipelineCreation(createInfoCount, pCreateInfos->GetPointer());} + std::vector handle_info(createInfoCount); + for (size_t i = 0; i < createInfoCount; ++i) { pPipelines->SetConsumerData(i, &handle_info[i]); } + + if (UseAsyncOperations()) + { + auto task = AsyncCreateComputePipelines(GetDeviceTable(in_device->handle)->CreateComputePipelines, returnValue, call_info, in_device, in_pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); + if(task) + { + AddHandlesAsync(device, pPipelines->GetPointer(), pPipelines->GetLength(), std::move(handle_info), &CommonObjectInfoTable::AddVkPipelineInfo, std::move(task)); + return; + } + } + PushRecaptureHandleIds(pPipelines->GetPointer(), pPipelines->GetLength()); + VkResult replay_result = OverrideCreateComputePipelines(GetDeviceTable(in_device->handle)->CreateComputePipelines, returnValue, in_device, in_pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); + CheckResult("vkCreateComputePipelines", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); + + AddHandles(device, pPipelines->GetPointer(), pPipelines->GetLength(), pPipelines->GetHandlePointer(), createInfoCount, std::move(handle_info), &CommonObjectInfoTable::AddVkPipelineInfo); } -void VulkanReplayConsumer::Process_vkResetCommandPool( +void VulkanReplayConsumer::Process_vkDestroyPipeline( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - format::HandleId commandPool, - VkCommandPoolResetFlags flags) + format::HandleId pipeline, + StructPointerDecoder* pAllocator) { auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - auto in_commandPool = GetObjectInfoTable().GetVkCommandPoolInfo(commandPool); + auto in_pipeline = GetObjectInfoTable().GetVkPipelineInfo(pipeline); - VkResult replay_result = OverrideResetCommandPool(GetDeviceTable(in_device->handle)->ResetCommandPool, returnValue, in_device, in_commandPool, flags); - CheckResult("vkResetCommandPool", returnValue, replay_result, call_info); + OverrideDestroyPipeline(GetDeviceTable(in_device->handle)->DestroyPipeline, in_device, in_pipeline, pAllocator); + RemoveHandle(pipeline, &CommonObjectInfoTable::RemoveVkPipelineInfo); } -void VulkanReplayConsumer::Process_vkAllocateCommandBuffers( +void VulkanReplayConsumer::Process_vkCreatePipelineLayout( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pAllocateInfo, - HandlePointerDecoder* pCommandBuffers) + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelineLayout) { auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - MapStructHandles(pAllocateInfo->GetMetaStructPointer(), GetObjectInfoTable()); - if (!pCommandBuffers->IsNull()) { pCommandBuffers->SetHandleLength(pAllocateInfo->GetPointer()->commandBufferCount); } - std::vector handle_info(pAllocateInfo->GetPointer()->commandBufferCount); - for (size_t i = 0; i < pAllocateInfo->GetPointer()->commandBufferCount; ++i) { pCommandBuffers->SetConsumerData(i, &handle_info[i]); } + MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (!pPipelineLayout->IsNull()) { pPipelineLayout->SetHandleLength(1); } + VulkanPipelineLayoutInfo handle_info; + pPipelineLayout->SetConsumerData(0, &handle_info); - VkResult replay_result = OverrideAllocateCommandBuffers(GetDeviceTable(in_device->handle)->AllocateCommandBuffers, returnValue, in_device, pAllocateInfo, pCommandBuffers); - CheckResult("vkAllocateCommandBuffers", returnValue, replay_result, call_info); + PushRecaptureHandleId(pPipelineLayout->GetPointer()); + VkResult replay_result = OverrideCreatePipelineLayout(GetDeviceTable(in_device->handle)->CreatePipelineLayout, returnValue, in_device, pCreateInfo, pAllocator, pPipelineLayout); + CheckResult("vkCreatePipelineLayout", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); - AddPoolHandles(device, handle_mapping::GetPoolId(pAllocateInfo->GetMetaStructPointer()), pCommandBuffers->GetPointer(), pCommandBuffers->GetLength(), pCommandBuffers->GetHandlePointer(), pAllocateInfo->GetPointer()->commandBufferCount, std::move(handle_info), &CommonObjectInfoTable::GetVkCommandPoolInfo, &CommonObjectInfoTable::AddVkCommandBufferInfo); + AddHandle(device, pPipelineLayout->GetPointer(), pPipelineLayout->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkPipelineLayoutInfo); } -void VulkanReplayConsumer::Process_vkFreeCommandBuffers( +void VulkanReplayConsumer::Process_vkDestroyPipelineLayout( const ApiCallInfo& call_info, format::HandleId device, - format::HandleId commandPool, - uint32_t commandBufferCount, - HandlePointerDecoder* pCommandBuffers) + format::HandleId pipelineLayout, + StructPointerDecoder* pAllocator) { - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - auto in_commandPool = GetObjectInfoTable().GetVkCommandPoolInfo(commandPool); - MapHandles(pCommandBuffers, commandBufferCount, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkPipelineLayout in_pipelineLayout = MapHandle(pipelineLayout, &CommonObjectInfoTable::GetVkPipelineLayoutInfo); + const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); - OverrideFreeCommandBuffers(GetDeviceTable(in_device->handle)->FreeCommandBuffers, in_device, in_commandPool, commandBufferCount, pCommandBuffers); - RemovePoolHandles(commandPool, pCommandBuffers, commandBufferCount, &CommonObjectInfoTable::GetVkCommandPoolInfo, &CommonObjectInfoTable::RemoveVkCommandBufferInfo); + GetDeviceTable(in_device)->DestroyPipelineLayout(in_device, in_pipelineLayout, in_pAllocator); + RemoveHandle(pipelineLayout, &CommonObjectInfoTable::RemoveVkPipelineLayoutInfo); } -void VulkanReplayConsumer::Process_vkBeginCommandBuffer( +void VulkanReplayConsumer::Process_vkCreateSampler( const ApiCallInfo& call_info, VkResult returnValue, - format::HandleId commandBuffer, - StructPointerDecoder* pBeginInfo) + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSampler) { - auto in_commandBuffer = GetObjectInfoTable().GetVkCommandBufferInfo(commandBuffer); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - MapStructHandles(pBeginInfo->GetMetaStructPointer(), GetObjectInfoTable()); + MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (!pSampler->IsNull()) { pSampler->SetHandleLength(1); } + VulkanSamplerInfo handle_info; + pSampler->SetConsumerData(0, &handle_info); - VkResult replay_result = OverrideBeginCommandBuffer(GetDeviceTable(in_commandBuffer->handle)->BeginCommandBuffer, call_info.index, returnValue, in_commandBuffer, pBeginInfo); - CheckResult("vkBeginCommandBuffer", returnValue, replay_result, call_info); + PushRecaptureHandleId(pSampler->GetPointer()); + VkResult replay_result = OverrideCreateSampler(GetDeviceTable(in_device->handle)->CreateSampler, returnValue, in_device, pCreateInfo, pAllocator, pSampler); + CheckResult("vkCreateSampler", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); + + AddHandle(device, pSampler->GetPointer(), pSampler->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkSamplerInfo); } -void VulkanReplayConsumer::Process_vkEndCommandBuffer( +void VulkanReplayConsumer::Process_vkDestroySampler( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId commandBuffer) + format::HandleId device, + format::HandleId sampler, + StructPointerDecoder* pAllocator) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - - VkResult replay_result = GetDeviceTable(in_commandBuffer)->EndCommandBuffer(in_commandBuffer); - CheckResult("vkEndCommandBuffer", returnValue, replay_result, call_info); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkSampler in_sampler = MapHandle(sampler, &CommonObjectInfoTable::GetVkSamplerInfo); + const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); - if (options_.dumping_resources) - { - resource_dumper_->Process_vkEndCommandBuffer(call_info, GetDeviceTable(in_commandBuffer)->EndCommandBuffer, returnValue, in_commandBuffer); - } + GetDeviceTable(in_device)->DestroySampler(in_device, in_sampler, in_pAllocator); + RemoveHandle(sampler, &CommonObjectInfoTable::RemoveVkSamplerInfo); } -void VulkanReplayConsumer::Process_vkResetCommandBuffer( +void VulkanReplayConsumer::Process_vkCreateDescriptorSetLayout( const ApiCallInfo& call_info, VkResult returnValue, - format::HandleId commandBuffer, - VkCommandBufferResetFlags flags) + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSetLayout) { - auto in_commandBuffer = GetObjectInfoTable().GetVkCommandBufferInfo(commandBuffer); - - VkResult replay_result = OverrideResetCommandBuffer(GetDeviceTable(in_commandBuffer->handle)->ResetCommandBuffer, returnValue, in_commandBuffer, flags); - CheckResult("vkResetCommandBuffer", returnValue, replay_result, call_info); -} + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); -void VulkanReplayConsumer::Process_vkCmdBindPipeline( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - format::HandleId pipeline) -{ - auto in_commandBuffer = GetObjectInfoTable().GetVkCommandBufferInfo(commandBuffer); - auto in_pipeline = GetObjectInfoTable().GetVkPipelineInfo(pipeline); + MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (!pSetLayout->IsNull()) { pSetLayout->SetHandleLength(1); } + VulkanDescriptorSetLayoutInfo handle_info; + pSetLayout->SetConsumerData(0, &handle_info); - OverrideCmdBindPipeline(GetDeviceTable(in_commandBuffer->handle)->CmdBindPipeline, in_commandBuffer, pipelineBindPoint, in_pipeline); + PushRecaptureHandleId(pSetLayout->GetPointer()); + VkResult replay_result = OverrideCreateDescriptorSetLayout(GetDeviceTable(in_device->handle)->CreateDescriptorSetLayout, returnValue, in_device, pCreateInfo, pAllocator, pSetLayout); + CheckResult("vkCreateDescriptorSetLayout", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdBindPipeline(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdBindPipeline, in_commandBuffer->handle, pipelineBindPoint, in_pipeline); - } + AddHandle(device, pSetLayout->GetPointer(), pSetLayout->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkDescriptorSetLayoutInfo); } -void VulkanReplayConsumer::Process_vkCmdSetViewport( +void VulkanReplayConsumer::Process_vkDestroyDescriptorSetLayout( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t firstViewport, - uint32_t viewportCount, - StructPointerDecoder* pViewports) + format::HandleId device, + format::HandleId descriptorSetLayout, + StructPointerDecoder* pAllocator) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkViewport* in_pViewports = pViewports->GetPointer(); - - GetDeviceTable(in_commandBuffer)->CmdSetViewport(in_commandBuffer, firstViewport, viewportCount, in_pViewports); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkDescriptorSetLayout in_descriptorSetLayout = MapHandle(descriptorSetLayout, &CommonObjectInfoTable::GetVkDescriptorSetLayoutInfo); + const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdSetViewport(call_info, GetDeviceTable(in_commandBuffer)->CmdSetViewport, in_commandBuffer, firstViewport, viewportCount, in_pViewports); - } + GetDeviceTable(in_device)->DestroyDescriptorSetLayout(in_device, in_descriptorSetLayout, in_pAllocator); + RemoveHandle(descriptorSetLayout, &CommonObjectInfoTable::RemoveVkDescriptorSetLayoutInfo); } -void VulkanReplayConsumer::Process_vkCmdSetScissor( +void VulkanReplayConsumer::Process_vkCreateDescriptorPool( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t firstScissor, - uint32_t scissorCount, - StructPointerDecoder* pScissors) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pDescriptorPool) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkRect2D* in_pScissors = pScissors->GetPointer(); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + if (!pDescriptorPool->IsNull()) { pDescriptorPool->SetHandleLength(1); } + VulkanDescriptorPoolInfo handle_info; + pDescriptorPool->SetConsumerData(0, &handle_info); - GetDeviceTable(in_commandBuffer)->CmdSetScissor(in_commandBuffer, firstScissor, scissorCount, in_pScissors); + PushRecaptureHandleId(pDescriptorPool->GetPointer()); + VkResult replay_result = OverrideCreateDescriptorPool(GetDeviceTable(in_device->handle)->CreateDescriptorPool, returnValue, in_device, pCreateInfo, pAllocator, pDescriptorPool); + CheckResult("vkCreateDescriptorPool", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdSetScissor(call_info, GetDeviceTable(in_commandBuffer)->CmdSetScissor, in_commandBuffer, firstScissor, scissorCount, in_pScissors); - } + AddHandle(device, pDescriptorPool->GetPointer(), pDescriptorPool->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkDescriptorPoolInfo); } -void VulkanReplayConsumer::Process_vkCmdSetLineWidth( +void VulkanReplayConsumer::Process_vkDestroyDescriptorPool( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - float lineWidth) + format::HandleId device, + format::HandleId descriptorPool, + StructPointerDecoder* pAllocator) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - - GetDeviceTable(in_commandBuffer)->CmdSetLineWidth(in_commandBuffer, lineWidth); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + auto in_descriptorPool = GetObjectInfoTable().GetVkDescriptorPoolInfo(descriptorPool); - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdSetLineWidth(call_info, GetDeviceTable(in_commandBuffer)->CmdSetLineWidth, in_commandBuffer, lineWidth); - } + OverrideDestroyDescriptorPool(GetDeviceTable(in_device->handle)->DestroyDescriptorPool, in_device, in_descriptorPool, pAllocator); + RemovePoolHandle(descriptorPool, &CommonObjectInfoTable::GetVkDescriptorPoolInfo, &CommonObjectInfoTable::RemoveVkDescriptorPoolInfo, &CommonObjectInfoTable::RemoveVkDescriptorSetInfo); } -void VulkanReplayConsumer::Process_vkCmdSetDepthBias( +void VulkanReplayConsumer::Process_vkResetDescriptorPool( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - float depthBiasConstantFactor, - float depthBiasClamp, - float depthBiasSlopeFactor) + VkResult returnValue, + format::HandleId device, + format::HandleId descriptorPool, + VkDescriptorPoolResetFlags flags) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - - GetDeviceTable(in_commandBuffer)->CmdSetDepthBias(in_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + auto in_descriptorPool = GetObjectInfoTable().GetVkDescriptorPoolInfo(descriptorPool); - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdSetDepthBias(call_info, GetDeviceTable(in_commandBuffer)->CmdSetDepthBias, in_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); - } + VkResult replay_result = OverrideResetDescriptorPool(GetDeviceTable(in_device->handle)->ResetDescriptorPool, returnValue, in_device, in_descriptorPool, flags); + CheckResult("vkResetDescriptorPool", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkCmdSetBlendConstants( +void VulkanReplayConsumer::Process_vkAllocateDescriptorSets( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - PointerDecoder* blendConstants) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pAllocateInfo, + HandlePointerDecoder* pDescriptorSets) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const float* in_blendConstants = blendConstants->GetPointer(); - - GetDeviceTable(in_commandBuffer)->CmdSetBlendConstants(in_commandBuffer, in_blendConstants); - - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdSetBlendConstants(call_info, GetDeviceTable(in_commandBuffer)->CmdSetBlendConstants, in_commandBuffer, in_blendConstants); - } -} + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); -void VulkanReplayConsumer::Process_vkCmdSetDepthBounds( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - float minDepthBounds, - float maxDepthBounds) -{ - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + MapStructHandles(pAllocateInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (!pDescriptorSets->IsNull()) { pDescriptorSets->SetHandleLength(pAllocateInfo->GetPointer()->descriptorSetCount); } + std::vector handle_info(pAllocateInfo->GetPointer()->descriptorSetCount); + for (size_t i = 0; i < pAllocateInfo->GetPointer()->descriptorSetCount; ++i) { pDescriptorSets->SetConsumerData(i, &handle_info[i]); } - GetDeviceTable(in_commandBuffer)->CmdSetDepthBounds(in_commandBuffer, minDepthBounds, maxDepthBounds); + PushRecaptureHandleIds(pDescriptorSets->GetPointer(), pDescriptorSets->GetLength()); + VkResult replay_result = OverrideAllocateDescriptorSets(GetDeviceTable(in_device->handle)->AllocateDescriptorSets, returnValue, in_device, pAllocateInfo, pDescriptorSets); + CheckResult("vkAllocateDescriptorSets", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdSetDepthBounds(call_info, GetDeviceTable(in_commandBuffer)->CmdSetDepthBounds, in_commandBuffer, minDepthBounds, maxDepthBounds); - } + AddPoolHandles(device, handle_mapping::GetPoolId(pAllocateInfo->GetMetaStructPointer()), pDescriptorSets->GetPointer(), pDescriptorSets->GetLength(), pDescriptorSets->GetHandlePointer(), pAllocateInfo->GetPointer()->descriptorSetCount, std::move(handle_info), &CommonObjectInfoTable::GetVkDescriptorPoolInfo, &CommonObjectInfoTable::AddVkDescriptorSetInfo); } -void VulkanReplayConsumer::Process_vkCmdSetStencilCompareMask( +void VulkanReplayConsumer::Process_vkFreeDescriptorSets( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t compareMask) + VkResult returnValue, + format::HandleId device, + format::HandleId descriptorPool, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - - GetDeviceTable(in_commandBuffer)->CmdSetStencilCompareMask(in_commandBuffer, faceMask, compareMask); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkDescriptorPool in_descriptorPool = MapHandle(descriptorPool, &CommonObjectInfoTable::GetVkDescriptorPoolInfo); + const VkDescriptorSet* in_pDescriptorSets = MapHandles(pDescriptorSets, descriptorSetCount, &CommonObjectInfoTable::GetVkDescriptorSetInfo); - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdSetStencilCompareMask(call_info, GetDeviceTable(in_commandBuffer)->CmdSetStencilCompareMask, in_commandBuffer, faceMask, compareMask); - } + VkResult replay_result = GetDeviceTable(in_device)->FreeDescriptorSets(in_device, in_descriptorPool, descriptorSetCount, in_pDescriptorSets); + CheckResult("vkFreeDescriptorSets", returnValue, replay_result, call_info); + RemovePoolHandles(descriptorPool, pDescriptorSets, descriptorSetCount, &CommonObjectInfoTable::GetVkDescriptorPoolInfo, &CommonObjectInfoTable::RemoveVkDescriptorSetInfo); } -void VulkanReplayConsumer::Process_vkCmdSetStencilWriteMask( +void VulkanReplayConsumer::Process_vkUpdateDescriptorSets( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t writeMask) + format::HandleId device, + uint32_t descriptorWriteCount, + StructPointerDecoder* pDescriptorWrites, + uint32_t descriptorCopyCount, + StructPointerDecoder* pDescriptorCopies) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - GetDeviceTable(in_commandBuffer)->CmdSetStencilWriteMask(in_commandBuffer, faceMask, writeMask); + MapStructArrayHandles(pDescriptorWrites->GetMetaStructPointer(), pDescriptorWrites->GetLength(), GetObjectInfoTable()); - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdSetStencilWriteMask(call_info, GetDeviceTable(in_commandBuffer)->CmdSetStencilWriteMask, in_commandBuffer, faceMask, writeMask); - } + MapStructArrayHandles(pDescriptorCopies->GetMetaStructPointer(), pDescriptorCopies->GetLength(), GetObjectInfoTable()); + + OverrideUpdateDescriptorSets(GetDeviceTable(in_device->handle)->UpdateDescriptorSets, in_device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies); } -void VulkanReplayConsumer::Process_vkCmdSetStencilReference( +void VulkanReplayConsumer::Process_vkCmdBindPipeline( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t reference) + VkPipelineBindPoint pipelineBindPoint, + format::HandleId pipeline) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + auto in_commandBuffer = GetObjectInfoTable().GetVkCommandBufferInfo(commandBuffer); + auto in_pipeline = GetObjectInfoTable().GetVkPipelineInfo(pipeline); - GetDeviceTable(in_commandBuffer)->CmdSetStencilReference(in_commandBuffer, faceMask, reference); + OverrideCmdBindPipeline(GetDeviceTable(in_commandBuffer->handle)->CmdBindPipeline, in_commandBuffer, pipelineBindPoint, in_pipeline); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdSetStencilReference(call_info, GetDeviceTable(in_commandBuffer)->CmdSetStencilReference, in_commandBuffer, faceMask, reference); + resource_dumper_->Process_vkCmdBindPipeline(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdBindPipeline, in_commandBuffer->handle, pipelineBindPoint, in_pipeline); } } @@ -1642,593 +1711,618 @@ void VulkanReplayConsumer::Process_vkCmdBindDescriptorSets( } } -void VulkanReplayConsumer::Process_vkCmdBindIndexBuffer( +void VulkanReplayConsumer::Process_vkCmdClearColorImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkIndexType indexType) + format::HandleId image, + VkImageLayout imageLayout, + StructPointerDecoder* pColor, + uint32_t rangeCount, + StructPointerDecoder* pRanges) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkBuffer in_buffer = MapHandle(buffer, &CommonObjectInfoTable::GetVkBufferInfo); + VkImage in_image = MapHandle(image, &CommonObjectInfoTable::GetVkImageInfo); + const VkClearColorValue* in_pColor = pColor->GetPointer(); + const VkImageSubresourceRange* in_pRanges = pRanges->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdBindIndexBuffer(in_commandBuffer, in_buffer, offset, indexType); + GetDeviceTable(in_commandBuffer)->CmdClearColorImage(in_commandBuffer, in_image, imageLayout, in_pColor, rangeCount, in_pRanges); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdBindIndexBuffer(call_info, GetDeviceTable(in_commandBuffer)->CmdBindIndexBuffer, in_commandBuffer, GetObjectInfoTable().GetVkBufferInfo(buffer), offset, indexType); + resource_dumper_->Process_vkCmdClearColorImage(call_info, GetDeviceTable(in_commandBuffer)->CmdClearColorImage, in_commandBuffer, in_image, imageLayout, in_pColor, rangeCount, in_pRanges); } } -void VulkanReplayConsumer::Process_vkCmdBindVertexBuffers( +void VulkanReplayConsumer::Process_vkCmdDispatch( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - HandlePointerDecoder* pBuffers, - PointerDecoder* pOffsets) + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkBuffer* in_pBuffers = MapHandles(pBuffers, bindingCount, &CommonObjectInfoTable::GetVkBufferInfo); - const VkDeviceSize* in_pOffsets = pOffsets->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdBindVertexBuffers(in_commandBuffer, firstBinding, bindingCount, in_pBuffers, in_pOffsets); + GetDeviceTable(in_commandBuffer)->CmdDispatch(in_commandBuffer, groupCountX, groupCountY, groupCountZ); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdBindVertexBuffers(call_info, GetDeviceTable(in_commandBuffer)->CmdBindVertexBuffers, in_commandBuffer, firstBinding, bindingCount, pBuffers, in_pOffsets); + resource_dumper_->Process_vkCmdDispatch(call_info, GetDeviceTable(in_commandBuffer)->CmdDispatch, in_commandBuffer, groupCountX, groupCountY, groupCountZ); } } -void VulkanReplayConsumer::Process_vkCmdDraw( +void VulkanReplayConsumer::Process_vkCmdDispatchIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t vertexCount, - uint32_t instanceCount, - uint32_t firstVertex, - uint32_t firstInstance) + format::HandleId buffer, + VkDeviceSize offset) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkBuffer in_buffer = MapHandle(buffer, &CommonObjectInfoTable::GetVkBufferInfo); - GetDeviceTable(in_commandBuffer)->CmdDraw(in_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); + GetDeviceTable(in_commandBuffer)->CmdDispatchIndirect(in_commandBuffer, in_buffer, offset); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdDraw(call_info, GetDeviceTable(in_commandBuffer)->CmdDraw, in_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); + resource_dumper_->Process_vkCmdDispatchIndirect(call_info, GetDeviceTable(in_commandBuffer)->CmdDispatchIndirect, in_commandBuffer, GetObjectInfoTable().GetVkBufferInfo(buffer), offset); } } -void VulkanReplayConsumer::Process_vkCmdDrawIndexed( +void VulkanReplayConsumer::Process_vkCmdSetEvent( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t indexCount, - uint32_t instanceCount, - uint32_t firstIndex, - int32_t vertexOffset, - uint32_t firstInstance) + format::HandleId event, + VkPipelineStageFlags stageMask) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkEvent in_event = MapHandle(event, &CommonObjectInfoTable::GetVkEventInfo); - GetDeviceTable(in_commandBuffer)->CmdDrawIndexed(in_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); + GetDeviceTable(in_commandBuffer)->CmdSetEvent(in_commandBuffer, in_event, stageMask); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdDrawIndexed(call_info, GetDeviceTable(in_commandBuffer)->CmdDrawIndexed, in_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); + resource_dumper_->Process_vkCmdSetEvent(call_info, GetDeviceTable(in_commandBuffer)->CmdSetEvent, in_commandBuffer, in_event, stageMask); } } -void VulkanReplayConsumer::Process_vkCmdDrawIndirect( +void VulkanReplayConsumer::Process_vkCmdResetEvent( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) + format::HandleId event, + VkPipelineStageFlags stageMask) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkBuffer in_buffer = MapHandle(buffer, &CommonObjectInfoTable::GetVkBufferInfo); + VkEvent in_event = MapHandle(event, &CommonObjectInfoTable::GetVkEventInfo); - GetDeviceTable(in_commandBuffer)->CmdDrawIndirect(in_commandBuffer, in_buffer, offset, drawCount, stride); + GetDeviceTable(in_commandBuffer)->CmdResetEvent(in_commandBuffer, in_event, stageMask); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdDrawIndirect(call_info, GetDeviceTable(in_commandBuffer)->CmdDrawIndirect, in_commandBuffer, GetObjectInfoTable().GetVkBufferInfo(buffer), offset, drawCount, stride); + resource_dumper_->Process_vkCmdResetEvent(call_info, GetDeviceTable(in_commandBuffer)->CmdResetEvent, in_commandBuffer, in_event, stageMask); } } -void VulkanReplayConsumer::Process_vkCmdDrawIndexedIndirect( +void VulkanReplayConsumer::Process_vkCmdWaitEvents( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) + uint32_t eventCount, + HandlePointerDecoder* pEvents, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + uint32_t memoryBarrierCount, + StructPointerDecoder* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + StructPointerDecoder* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + StructPointerDecoder* pImageMemoryBarriers) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkBuffer in_buffer = MapHandle(buffer, &CommonObjectInfoTable::GetVkBufferInfo); + const VkEvent* in_pEvents = MapHandles(pEvents, eventCount, &CommonObjectInfoTable::GetVkEventInfo); + const VkMemoryBarrier* in_pMemoryBarriers = pMemoryBarriers->GetPointer(); + const VkBufferMemoryBarrier* in_pBufferMemoryBarriers = pBufferMemoryBarriers->GetPointer(); + MapStructArrayHandles(pBufferMemoryBarriers->GetMetaStructPointer(), pBufferMemoryBarriers->GetLength(), GetObjectInfoTable()); + const VkImageMemoryBarrier* in_pImageMemoryBarriers = pImageMemoryBarriers->GetPointer(); + MapStructArrayHandles(pImageMemoryBarriers->GetMetaStructPointer(), pImageMemoryBarriers->GetLength(), GetObjectInfoTable()); - GetDeviceTable(in_commandBuffer)->CmdDrawIndexedIndirect(in_commandBuffer, in_buffer, offset, drawCount, stride); + GetDeviceTable(in_commandBuffer)->CmdWaitEvents(in_commandBuffer, eventCount, in_pEvents, srcStageMask, dstStageMask, memoryBarrierCount, in_pMemoryBarriers, bufferMemoryBarrierCount, in_pBufferMemoryBarriers, imageMemoryBarrierCount, in_pImageMemoryBarriers); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdDrawIndexedIndirect(call_info, GetDeviceTable(in_commandBuffer)->CmdDrawIndexedIndirect, in_commandBuffer, GetObjectInfoTable().GetVkBufferInfo(buffer), offset, drawCount, stride); + resource_dumper_->Process_vkCmdWaitEvents(call_info, GetDeviceTable(in_commandBuffer)->CmdWaitEvents, in_commandBuffer, eventCount, in_pEvents, srcStageMask, dstStageMask, memoryBarrierCount, in_pMemoryBarriers, bufferMemoryBarrierCount, in_pBufferMemoryBarriers, imageMemoryBarrierCount, in_pImageMemoryBarriers); } } -void VulkanReplayConsumer::Process_vkCmdDispatch( +void VulkanReplayConsumer::Process_vkCmdPushConstants( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) + format::HandleId layout, + VkShaderStageFlags stageFlags, + uint32_t offset, + uint32_t size, + PointerDecoder* pValues) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + auto in_commandBuffer = GetObjectInfoTable().GetVkCommandBufferInfo(commandBuffer); + auto in_layout = GetObjectInfoTable().GetVkPipelineLayoutInfo(layout); - GetDeviceTable(in_commandBuffer)->CmdDispatch(in_commandBuffer, groupCountX, groupCountY, groupCountZ); + OverrideCmdPushConstants(GetDeviceTable(in_commandBuffer->handle)->CmdPushConstants, in_commandBuffer, in_layout, stageFlags, offset, size, pValues); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdDispatch(call_info, GetDeviceTable(in_commandBuffer)->CmdDispatch, in_commandBuffer, groupCountX, groupCountY, groupCountZ); + resource_dumper_->Process_vkCmdPushConstants(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdPushConstants, in_commandBuffer->handle, in_layout->handle, stageFlags, offset, size, pValues->GetPointer()); } } -void VulkanReplayConsumer::Process_vkCmdDispatchIndirect( +void VulkanReplayConsumer::Process_vkCreateGraphicsPipelines( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset) + VkResult returnValue, + format::HandleId device, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkBuffer in_buffer = MapHandle(buffer, &CommonObjectInfoTable::GetVkBufferInfo); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + auto in_pipelineCache = GetObjectInfoTable().GetVkPipelineCacheInfo(pipelineCache); - GetDeviceTable(in_commandBuffer)->CmdDispatchIndirect(in_commandBuffer, in_buffer, offset); + MapStructArrayHandles(pCreateInfos->GetMetaStructPointer(), pCreateInfos->GetLength(), GetObjectInfoTable()); + if (!pPipelines->IsNull()) { pPipelines->SetHandleLength(createInfoCount); } + if (omitted_pipeline_cache_data_) {AllowCompileDuringPipelineCreation(createInfoCount, pCreateInfos->GetPointer());} + std::vector handle_info(createInfoCount); + for (size_t i = 0; i < createInfoCount; ++i) { pPipelines->SetConsumerData(i, &handle_info[i]); } - if (options_.dumping_resources) + if (UseAsyncOperations()) { - resource_dumper_->Process_vkCmdDispatchIndirect(call_info, GetDeviceTable(in_commandBuffer)->CmdDispatchIndirect, in_commandBuffer, GetObjectInfoTable().GetVkBufferInfo(buffer), offset); + auto task = AsyncCreateGraphicsPipelines(GetDeviceTable(in_device->handle)->CreateGraphicsPipelines, returnValue, call_info, in_device, in_pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); + if(task) + { + AddHandlesAsync(device, pPipelines->GetPointer(), pPipelines->GetLength(), std::move(handle_info), &CommonObjectInfoTable::AddVkPipelineInfo, std::move(task)); + return; + } } + PushRecaptureHandleIds(pPipelines->GetPointer(), pPipelines->GetLength()); + VkResult replay_result = OverrideCreateGraphicsPipelines(GetDeviceTable(in_device->handle)->CreateGraphicsPipelines, returnValue, in_device, in_pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); + CheckResult("vkCreateGraphicsPipelines", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); + + AddHandles(device, pPipelines->GetPointer(), pPipelines->GetLength(), pPipelines->GetHandlePointer(), createInfoCount, std::move(handle_info), &CommonObjectInfoTable::AddVkPipelineInfo); } -void VulkanReplayConsumer::Process_vkCmdCopyBuffer( +void VulkanReplayConsumer::Process_vkCreateFramebuffer( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcBuffer, - format::HandleId dstBuffer, - uint32_t regionCount, - StructPointerDecoder* pRegions) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pFramebuffer) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkBuffer in_srcBuffer = MapHandle(srcBuffer, &CommonObjectInfoTable::GetVkBufferInfo); - VkBuffer in_dstBuffer = MapHandle(dstBuffer, &CommonObjectInfoTable::GetVkBufferInfo); - const VkBufferCopy* in_pRegions = pRegions->GetPointer(); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - GetDeviceTable(in_commandBuffer)->CmdCopyBuffer(in_commandBuffer, in_srcBuffer, in_dstBuffer, regionCount, in_pRegions); + MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (!pFramebuffer->IsNull()) { pFramebuffer->SetHandleLength(1); } + VulkanFramebufferInfo handle_info; + pFramebuffer->SetConsumerData(0, &handle_info); - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdCopyBuffer(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBuffer, in_commandBuffer, in_srcBuffer, in_dstBuffer, regionCount, in_pRegions); - } + PushRecaptureHandleId(pFramebuffer->GetPointer()); + VkResult replay_result = OverrideCreateFramebuffer(GetDeviceTable(in_device->handle)->CreateFramebuffer, returnValue, in_device, pCreateInfo, pAllocator, pFramebuffer); + CheckResult("vkCreateFramebuffer", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); + + AddHandle(device, pFramebuffer->GetPointer(), pFramebuffer->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkFramebufferInfo); +} + +void VulkanReplayConsumer::Process_vkDestroyFramebuffer( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId framebuffer, + StructPointerDecoder* pAllocator) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkFramebuffer in_framebuffer = MapHandle(framebuffer, &CommonObjectInfoTable::GetVkFramebufferInfo); + const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); + + GetDeviceTable(in_device)->DestroyFramebuffer(in_device, in_framebuffer, in_pAllocator); + RemoveHandle(framebuffer, &CommonObjectInfoTable::RemoveVkFramebufferInfo); +} + +void VulkanReplayConsumer::Process_vkCreateRenderPass( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pRenderPass) +{ + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + if (!pRenderPass->IsNull()) { pRenderPass->SetHandleLength(1); } + VulkanRenderPassInfo handle_info; + pRenderPass->SetConsumerData(0, &handle_info); + + PushRecaptureHandleId(pRenderPass->GetPointer()); + VkResult replay_result = OverrideCreateRenderPass(GetDeviceTable(in_device->handle)->CreateRenderPass, returnValue, in_device, pCreateInfo, pAllocator, pRenderPass); + CheckResult("vkCreateRenderPass", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); + + AddHandle(device, pRenderPass->GetPointer(), pRenderPass->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkRenderPassInfo); } -void VulkanReplayConsumer::Process_vkCmdCopyImage( +void VulkanReplayConsumer::Process_vkDestroyRenderPass( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) + format::HandleId device, + format::HandleId renderPass, + StructPointerDecoder* pAllocator) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkImage in_srcImage = MapHandle(srcImage, &CommonObjectInfoTable::GetVkImageInfo); - VkImage in_dstImage = MapHandle(dstImage, &CommonObjectInfoTable::GetVkImageInfo); - const VkImageCopy* in_pRegions = pRegions->GetPointer(); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + auto in_renderPass = GetObjectInfoTable().GetVkRenderPassInfo(renderPass); - GetDeviceTable(in_commandBuffer)->CmdCopyImage(in_commandBuffer, in_srcImage, srcImageLayout, in_dstImage, dstImageLayout, regionCount, in_pRegions); + OverrideDestroyRenderPass(GetDeviceTable(in_device->handle)->DestroyRenderPass, in_device, in_renderPass, pAllocator); + RemoveHandle(renderPass, &CommonObjectInfoTable::RemoveVkRenderPassInfo); +} - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdCopyImage(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImage, in_commandBuffer, in_srcImage, srcImageLayout, in_dstImage, dstImageLayout, regionCount, in_pRegions); - } +void VulkanReplayConsumer::Process_vkGetRenderAreaGranularity( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId renderPass, + StructPointerDecoder* pGranularity) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkRenderPass in_renderPass = MapHandle(renderPass, &CommonObjectInfoTable::GetVkRenderPassInfo); + VkExtent2D* out_pGranularity = pGranularity->IsNull() ? nullptr : pGranularity->AllocateOutputData(1); + + GetDeviceTable(in_device)->GetRenderAreaGranularity(in_device, in_renderPass, out_pGranularity); } -void VulkanReplayConsumer::Process_vkCmdBlitImage( +void VulkanReplayConsumer::Process_vkCmdSetViewport( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions, - VkFilter filter) + uint32_t firstViewport, + uint32_t viewportCount, + StructPointerDecoder* pViewports) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkImage in_srcImage = MapHandle(srcImage, &CommonObjectInfoTable::GetVkImageInfo); - VkImage in_dstImage = MapHandle(dstImage, &CommonObjectInfoTable::GetVkImageInfo); - const VkImageBlit* in_pRegions = pRegions->GetPointer(); + const VkViewport* in_pViewports = pViewports->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdBlitImage(in_commandBuffer, in_srcImage, srcImageLayout, in_dstImage, dstImageLayout, regionCount, in_pRegions, filter); + GetDeviceTable(in_commandBuffer)->CmdSetViewport(in_commandBuffer, firstViewport, viewportCount, in_pViewports); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdBlitImage(call_info, GetDeviceTable(in_commandBuffer)->CmdBlitImage, in_commandBuffer, in_srcImage, srcImageLayout, in_dstImage, dstImageLayout, regionCount, in_pRegions, filter); + resource_dumper_->Process_vkCmdSetViewport(call_info, GetDeviceTable(in_commandBuffer)->CmdSetViewport, in_commandBuffer, firstViewport, viewportCount, in_pViewports); } } -void VulkanReplayConsumer::Process_vkCmdCopyBufferToImage( +void VulkanReplayConsumer::Process_vkCmdSetScissor( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcBuffer, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) + uint32_t firstScissor, + uint32_t scissorCount, + StructPointerDecoder* pScissors) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkBuffer in_srcBuffer = MapHandle(srcBuffer, &CommonObjectInfoTable::GetVkBufferInfo); - VkImage in_dstImage = MapHandle(dstImage, &CommonObjectInfoTable::GetVkImageInfo); - const VkBufferImageCopy* in_pRegions = pRegions->GetPointer(); + const VkRect2D* in_pScissors = pScissors->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdCopyBufferToImage(in_commandBuffer, in_srcBuffer, in_dstImage, dstImageLayout, regionCount, in_pRegions); + GetDeviceTable(in_commandBuffer)->CmdSetScissor(in_commandBuffer, firstScissor, scissorCount, in_pScissors); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdCopyBufferToImage(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBufferToImage, in_commandBuffer, in_srcBuffer, in_dstImage, dstImageLayout, regionCount, in_pRegions); + resource_dumper_->Process_vkCmdSetScissor(call_info, GetDeviceTable(in_commandBuffer)->CmdSetScissor, in_commandBuffer, firstScissor, scissorCount, in_pScissors); } } -void VulkanReplayConsumer::Process_vkCmdCopyImageToBuffer( +void VulkanReplayConsumer::Process_vkCmdSetLineWidth( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstBuffer, - uint32_t regionCount, - StructPointerDecoder* pRegions) + float lineWidth) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkImage in_srcImage = MapHandle(srcImage, &CommonObjectInfoTable::GetVkImageInfo); - VkBuffer in_dstBuffer = MapHandle(dstBuffer, &CommonObjectInfoTable::GetVkBufferInfo); - const VkBufferImageCopy* in_pRegions = pRegions->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdCopyImageToBuffer(in_commandBuffer, in_srcImage, srcImageLayout, in_dstBuffer, regionCount, in_pRegions); + GetDeviceTable(in_commandBuffer)->CmdSetLineWidth(in_commandBuffer, lineWidth); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdCopyImageToBuffer(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImageToBuffer, in_commandBuffer, in_srcImage, srcImageLayout, in_dstBuffer, regionCount, in_pRegions); + resource_dumper_->Process_vkCmdSetLineWidth(call_info, GetDeviceTable(in_commandBuffer)->CmdSetLineWidth, in_commandBuffer, lineWidth); } } -void VulkanReplayConsumer::Process_vkCmdUpdateBuffer( +void VulkanReplayConsumer::Process_vkCmdSetDepthBias( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize dataSize, - PointerDecoder* pData) + float depthBiasConstantFactor, + float depthBiasClamp, + float depthBiasSlopeFactor) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkBuffer in_dstBuffer = MapHandle(dstBuffer, &CommonObjectInfoTable::GetVkBufferInfo); - const void* in_pData = pData->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdUpdateBuffer(in_commandBuffer, in_dstBuffer, dstOffset, dataSize, in_pData); + GetDeviceTable(in_commandBuffer)->CmdSetDepthBias(in_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdUpdateBuffer(call_info, GetDeviceTable(in_commandBuffer)->CmdUpdateBuffer, in_commandBuffer, in_dstBuffer, dstOffset, dataSize, in_pData); + resource_dumper_->Process_vkCmdSetDepthBias(call_info, GetDeviceTable(in_commandBuffer)->CmdSetDepthBias, in_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); } } -void VulkanReplayConsumer::Process_vkCmdFillBuffer( +void VulkanReplayConsumer::Process_vkCmdSetBlendConstants( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize size, - uint32_t data) + PointerDecoder* blendConstants) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkBuffer in_dstBuffer = MapHandle(dstBuffer, &CommonObjectInfoTable::GetVkBufferInfo); + const float* in_blendConstants = blendConstants->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdFillBuffer(in_commandBuffer, in_dstBuffer, dstOffset, size, data); + GetDeviceTable(in_commandBuffer)->CmdSetBlendConstants(in_commandBuffer, in_blendConstants); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdFillBuffer(call_info, GetDeviceTable(in_commandBuffer)->CmdFillBuffer, in_commandBuffer, in_dstBuffer, dstOffset, size, data); + resource_dumper_->Process_vkCmdSetBlendConstants(call_info, GetDeviceTable(in_commandBuffer)->CmdSetBlendConstants, in_commandBuffer, in_blendConstants); } } -void VulkanReplayConsumer::Process_vkCmdClearColorImage( +void VulkanReplayConsumer::Process_vkCmdSetDepthBounds( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId image, - VkImageLayout imageLayout, - StructPointerDecoder* pColor, - uint32_t rangeCount, - StructPointerDecoder* pRanges) + float minDepthBounds, + float maxDepthBounds) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkImage in_image = MapHandle(image, &CommonObjectInfoTable::GetVkImageInfo); - const VkClearColorValue* in_pColor = pColor->GetPointer(); - const VkImageSubresourceRange* in_pRanges = pRanges->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdClearColorImage(in_commandBuffer, in_image, imageLayout, in_pColor, rangeCount, in_pRanges); + GetDeviceTable(in_commandBuffer)->CmdSetDepthBounds(in_commandBuffer, minDepthBounds, maxDepthBounds); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdClearColorImage(call_info, GetDeviceTable(in_commandBuffer)->CmdClearColorImage, in_commandBuffer, in_image, imageLayout, in_pColor, rangeCount, in_pRanges); + resource_dumper_->Process_vkCmdSetDepthBounds(call_info, GetDeviceTable(in_commandBuffer)->CmdSetDepthBounds, in_commandBuffer, minDepthBounds, maxDepthBounds); } } -void VulkanReplayConsumer::Process_vkCmdClearDepthStencilImage( +void VulkanReplayConsumer::Process_vkCmdSetStencilCompareMask( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId image, - VkImageLayout imageLayout, - StructPointerDecoder* pDepthStencil, - uint32_t rangeCount, - StructPointerDecoder* pRanges) + VkStencilFaceFlags faceMask, + uint32_t compareMask) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkImage in_image = MapHandle(image, &CommonObjectInfoTable::GetVkImageInfo); - const VkClearDepthStencilValue* in_pDepthStencil = pDepthStencil->GetPointer(); - const VkImageSubresourceRange* in_pRanges = pRanges->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdClearDepthStencilImage(in_commandBuffer, in_image, imageLayout, in_pDepthStencil, rangeCount, in_pRanges); + GetDeviceTable(in_commandBuffer)->CmdSetStencilCompareMask(in_commandBuffer, faceMask, compareMask); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdClearDepthStencilImage(call_info, GetDeviceTable(in_commandBuffer)->CmdClearDepthStencilImage, in_commandBuffer, in_image, imageLayout, in_pDepthStencil, rangeCount, in_pRanges); + resource_dumper_->Process_vkCmdSetStencilCompareMask(call_info, GetDeviceTable(in_commandBuffer)->CmdSetStencilCompareMask, in_commandBuffer, faceMask, compareMask); } } -void VulkanReplayConsumer::Process_vkCmdClearAttachments( +void VulkanReplayConsumer::Process_vkCmdSetStencilWriteMask( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t attachmentCount, - StructPointerDecoder* pAttachments, - uint32_t rectCount, - StructPointerDecoder* pRects) + VkStencilFaceFlags faceMask, + uint32_t writeMask) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkClearAttachment* in_pAttachments = pAttachments->GetPointer(); - const VkClearRect* in_pRects = pRects->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdClearAttachments(in_commandBuffer, attachmentCount, in_pAttachments, rectCount, in_pRects); + GetDeviceTable(in_commandBuffer)->CmdSetStencilWriteMask(in_commandBuffer, faceMask, writeMask); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdClearAttachments(call_info, GetDeviceTable(in_commandBuffer)->CmdClearAttachments, in_commandBuffer, attachmentCount, in_pAttachments, rectCount, in_pRects); + resource_dumper_->Process_vkCmdSetStencilWriteMask(call_info, GetDeviceTable(in_commandBuffer)->CmdSetStencilWriteMask, in_commandBuffer, faceMask, writeMask); } } -void VulkanReplayConsumer::Process_vkCmdResolveImage( +void VulkanReplayConsumer::Process_vkCmdSetStencilReference( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) + VkStencilFaceFlags faceMask, + uint32_t reference) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkImage in_srcImage = MapHandle(srcImage, &CommonObjectInfoTable::GetVkImageInfo); - VkImage in_dstImage = MapHandle(dstImage, &CommonObjectInfoTable::GetVkImageInfo); - const VkImageResolve* in_pRegions = pRegions->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdResolveImage(in_commandBuffer, in_srcImage, srcImageLayout, in_dstImage, dstImageLayout, regionCount, in_pRegions); + GetDeviceTable(in_commandBuffer)->CmdSetStencilReference(in_commandBuffer, faceMask, reference); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdResolveImage(call_info, GetDeviceTable(in_commandBuffer)->CmdResolveImage, in_commandBuffer, in_srcImage, srcImageLayout, in_dstImage, dstImageLayout, regionCount, in_pRegions); + resource_dumper_->Process_vkCmdSetStencilReference(call_info, GetDeviceTable(in_commandBuffer)->CmdSetStencilReference, in_commandBuffer, faceMask, reference); } } -void VulkanReplayConsumer::Process_vkCmdSetEvent( +void VulkanReplayConsumer::Process_vkCmdBindIndexBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags stageMask) + format::HandleId buffer, + VkDeviceSize offset, + VkIndexType indexType) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkEvent in_event = MapHandle(event, &CommonObjectInfoTable::GetVkEventInfo); + VkBuffer in_buffer = MapHandle(buffer, &CommonObjectInfoTable::GetVkBufferInfo); - GetDeviceTable(in_commandBuffer)->CmdSetEvent(in_commandBuffer, in_event, stageMask); + GetDeviceTable(in_commandBuffer)->CmdBindIndexBuffer(in_commandBuffer, in_buffer, offset, indexType); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdSetEvent(call_info, GetDeviceTable(in_commandBuffer)->CmdSetEvent, in_commandBuffer, in_event, stageMask); + resource_dumper_->Process_vkCmdBindIndexBuffer(call_info, GetDeviceTable(in_commandBuffer)->CmdBindIndexBuffer, in_commandBuffer, GetObjectInfoTable().GetVkBufferInfo(buffer), offset, indexType); } } -void VulkanReplayConsumer::Process_vkCmdResetEvent( +void VulkanReplayConsumer::Process_vkCmdBindVertexBuffers( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags stageMask) + uint32_t firstBinding, + uint32_t bindingCount, + HandlePointerDecoder* pBuffers, + PointerDecoder* pOffsets) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkEvent in_event = MapHandle(event, &CommonObjectInfoTable::GetVkEventInfo); + const VkBuffer* in_pBuffers = MapHandles(pBuffers, bindingCount, &CommonObjectInfoTable::GetVkBufferInfo); + const VkDeviceSize* in_pOffsets = pOffsets->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdResetEvent(in_commandBuffer, in_event, stageMask); + GetDeviceTable(in_commandBuffer)->CmdBindVertexBuffers(in_commandBuffer, firstBinding, bindingCount, in_pBuffers, in_pOffsets); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdResetEvent(call_info, GetDeviceTable(in_commandBuffer)->CmdResetEvent, in_commandBuffer, in_event, stageMask); + resource_dumper_->Process_vkCmdBindVertexBuffers(call_info, GetDeviceTable(in_commandBuffer)->CmdBindVertexBuffers, in_commandBuffer, firstBinding, bindingCount, pBuffers, in_pOffsets); } } -void VulkanReplayConsumer::Process_vkCmdWaitEvents( +void VulkanReplayConsumer::Process_vkCmdDraw( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t eventCount, - HandlePointerDecoder* pEvents, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - uint32_t memoryBarrierCount, - StructPointerDecoder* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - StructPointerDecoder* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - StructPointerDecoder* pImageMemoryBarriers) + uint32_t vertexCount, + uint32_t instanceCount, + uint32_t firstVertex, + uint32_t firstInstance) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkEvent* in_pEvents = MapHandles(pEvents, eventCount, &CommonObjectInfoTable::GetVkEventInfo); - const VkMemoryBarrier* in_pMemoryBarriers = pMemoryBarriers->GetPointer(); - const VkBufferMemoryBarrier* in_pBufferMemoryBarriers = pBufferMemoryBarriers->GetPointer(); - MapStructArrayHandles(pBufferMemoryBarriers->GetMetaStructPointer(), pBufferMemoryBarriers->GetLength(), GetObjectInfoTable()); - const VkImageMemoryBarrier* in_pImageMemoryBarriers = pImageMemoryBarriers->GetPointer(); - MapStructArrayHandles(pImageMemoryBarriers->GetMetaStructPointer(), pImageMemoryBarriers->GetLength(), GetObjectInfoTable()); - GetDeviceTable(in_commandBuffer)->CmdWaitEvents(in_commandBuffer, eventCount, in_pEvents, srcStageMask, dstStageMask, memoryBarrierCount, in_pMemoryBarriers, bufferMemoryBarrierCount, in_pBufferMemoryBarriers, imageMemoryBarrierCount, in_pImageMemoryBarriers); + GetDeviceTable(in_commandBuffer)->CmdDraw(in_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdWaitEvents(call_info, GetDeviceTable(in_commandBuffer)->CmdWaitEvents, in_commandBuffer, eventCount, in_pEvents, srcStageMask, dstStageMask, memoryBarrierCount, in_pMemoryBarriers, bufferMemoryBarrierCount, in_pBufferMemoryBarriers, imageMemoryBarrierCount, in_pImageMemoryBarriers); + resource_dumper_->Process_vkCmdDraw(call_info, GetDeviceTable(in_commandBuffer)->CmdDraw, in_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); } } -void VulkanReplayConsumer::Process_vkCmdPipelineBarrier( +void VulkanReplayConsumer::Process_vkCmdDrawIndexed( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - StructPointerDecoder* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - StructPointerDecoder* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - StructPointerDecoder* pImageMemoryBarriers) + uint32_t indexCount, + uint32_t instanceCount, + uint32_t firstIndex, + int32_t vertexOffset, + uint32_t firstInstance) { - auto in_commandBuffer = GetObjectInfoTable().GetVkCommandBufferInfo(commandBuffer); - - MapStructArrayHandles(pBufferMemoryBarriers->GetMetaStructPointer(), pBufferMemoryBarriers->GetLength(), GetObjectInfoTable()); - - MapStructArrayHandles(pImageMemoryBarriers->GetMetaStructPointer(), pImageMemoryBarriers->GetLength(), GetObjectInfoTable()); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - OverrideCmdPipelineBarrier(GetDeviceTable(in_commandBuffer->handle)->CmdPipelineBarrier, in_commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + GetDeviceTable(in_commandBuffer)->CmdDrawIndexed(in_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdPipelineBarrier(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdPipelineBarrier, in_commandBuffer->handle, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers->GetPointer(), bufferMemoryBarrierCount, pBufferMemoryBarriers->GetPointer(), imageMemoryBarrierCount, pImageMemoryBarriers->GetPointer()); + resource_dumper_->Process_vkCmdDrawIndexed(call_info, GetDeviceTable(in_commandBuffer)->CmdDrawIndexed, in_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); } } -void VulkanReplayConsumer::Process_vkCmdBeginQuery( +void VulkanReplayConsumer::Process_vkCmdDrawIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t query, - VkQueryControlFlags flags) + format::HandleId buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkQueryPool in_queryPool = MapHandle(queryPool, &CommonObjectInfoTable::GetVkQueryPoolInfo); + VkBuffer in_buffer = MapHandle(buffer, &CommonObjectInfoTable::GetVkBufferInfo); - GetDeviceTable(in_commandBuffer)->CmdBeginQuery(in_commandBuffer, in_queryPool, query, flags); + GetDeviceTable(in_commandBuffer)->CmdDrawIndirect(in_commandBuffer, in_buffer, offset, drawCount, stride); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdBeginQuery(call_info, GetDeviceTable(in_commandBuffer)->CmdBeginQuery, in_commandBuffer, in_queryPool, query, flags); + resource_dumper_->Process_vkCmdDrawIndirect(call_info, GetDeviceTable(in_commandBuffer)->CmdDrawIndirect, in_commandBuffer, GetObjectInfoTable().GetVkBufferInfo(buffer), offset, drawCount, stride); } } -void VulkanReplayConsumer::Process_vkCmdEndQuery( +void VulkanReplayConsumer::Process_vkCmdDrawIndexedIndirect( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t query) + format::HandleId buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkQueryPool in_queryPool = MapHandle(queryPool, &CommonObjectInfoTable::GetVkQueryPoolInfo); + VkBuffer in_buffer = MapHandle(buffer, &CommonObjectInfoTable::GetVkBufferInfo); - GetDeviceTable(in_commandBuffer)->CmdEndQuery(in_commandBuffer, in_queryPool, query); + GetDeviceTable(in_commandBuffer)->CmdDrawIndexedIndirect(in_commandBuffer, in_buffer, offset, drawCount, stride); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdEndQuery(call_info, GetDeviceTable(in_commandBuffer)->CmdEndQuery, in_commandBuffer, in_queryPool, query); + resource_dumper_->Process_vkCmdDrawIndexedIndirect(call_info, GetDeviceTable(in_commandBuffer)->CmdDrawIndexedIndirect, in_commandBuffer, GetObjectInfoTable().GetVkBufferInfo(buffer), offset, drawCount, stride); } } -void VulkanReplayConsumer::Process_vkCmdResetQueryPool( +void VulkanReplayConsumer::Process_vkCmdBlitImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount) + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + VkFilter filter) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkQueryPool in_queryPool = MapHandle(queryPool, &CommonObjectInfoTable::GetVkQueryPoolInfo); + VkImage in_srcImage = MapHandle(srcImage, &CommonObjectInfoTable::GetVkImageInfo); + VkImage in_dstImage = MapHandle(dstImage, &CommonObjectInfoTable::GetVkImageInfo); + const VkImageBlit* in_pRegions = pRegions->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdResetQueryPool(in_commandBuffer, in_queryPool, firstQuery, queryCount); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdBlitImage(call_info, GetDeviceTable(in_commandBuffer)->CmdBlitImage, in_commandBuffer, GetObjectInfoTable().GetVkImageInfo(srcImage), srcImageLayout, GetObjectInfoTable().GetVkImageInfo(dstImage), dstImageLayout, regionCount, pRegions, filter, true); + } + + GetDeviceTable(in_commandBuffer)->CmdBlitImage(in_commandBuffer, in_srcImage, srcImageLayout, in_dstImage, dstImageLayout, regionCount, in_pRegions, filter); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdResetQueryPool(call_info, GetDeviceTable(in_commandBuffer)->CmdResetQueryPool, in_commandBuffer, in_queryPool, firstQuery, queryCount); + resource_dumper_->Process_vkCmdBlitImage(call_info, GetDeviceTable(in_commandBuffer)->CmdBlitImage, in_commandBuffer, GetObjectInfoTable().GetVkImageInfo(srcImage), srcImageLayout, GetObjectInfoTable().GetVkImageInfo(dstImage), dstImageLayout, regionCount, pRegions, filter, false); } } -void VulkanReplayConsumer::Process_vkCmdWriteTimestamp( +void VulkanReplayConsumer::Process_vkCmdClearDepthStencilImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlagBits pipelineStage, - format::HandleId queryPool, - uint32_t query) + format::HandleId image, + VkImageLayout imageLayout, + StructPointerDecoder* pDepthStencil, + uint32_t rangeCount, + StructPointerDecoder* pRanges) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkQueryPool in_queryPool = MapHandle(queryPool, &CommonObjectInfoTable::GetVkQueryPoolInfo); + VkImage in_image = MapHandle(image, &CommonObjectInfoTable::GetVkImageInfo); + const VkClearDepthStencilValue* in_pDepthStencil = pDepthStencil->GetPointer(); + const VkImageSubresourceRange* in_pRanges = pRanges->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdWriteTimestamp(in_commandBuffer, pipelineStage, in_queryPool, query); + GetDeviceTable(in_commandBuffer)->CmdClearDepthStencilImage(in_commandBuffer, in_image, imageLayout, in_pDepthStencil, rangeCount, in_pRanges); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdWriteTimestamp(call_info, GetDeviceTable(in_commandBuffer)->CmdWriteTimestamp, in_commandBuffer, pipelineStage, in_queryPool, query); + resource_dumper_->Process_vkCmdClearDepthStencilImage(call_info, GetDeviceTable(in_commandBuffer)->CmdClearDepthStencilImage, in_commandBuffer, in_image, imageLayout, in_pDepthStencil, rangeCount, in_pRanges); } } -void VulkanReplayConsumer::Process_vkCmdCopyQueryPoolResults( +void VulkanReplayConsumer::Process_vkCmdClearAttachments( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags) + uint32_t attachmentCount, + StructPointerDecoder* pAttachments, + uint32_t rectCount, + StructPointerDecoder* pRects) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkQueryPool in_queryPool = MapHandle(queryPool, &CommonObjectInfoTable::GetVkQueryPoolInfo); - VkBuffer in_dstBuffer = MapHandle(dstBuffer, &CommonObjectInfoTable::GetVkBufferInfo); + const VkClearAttachment* in_pAttachments = pAttachments->GetPointer(); + const VkClearRect* in_pRects = pRects->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdCopyQueryPoolResults(in_commandBuffer, in_queryPool, firstQuery, queryCount, in_dstBuffer, dstOffset, stride, flags); + GetDeviceTable(in_commandBuffer)->CmdClearAttachments(in_commandBuffer, attachmentCount, in_pAttachments, rectCount, in_pRects); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdCopyQueryPoolResults(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyQueryPoolResults, in_commandBuffer, in_queryPool, firstQuery, queryCount, in_dstBuffer, dstOffset, stride, flags); + resource_dumper_->Process_vkCmdClearAttachments(call_info, GetDeviceTable(in_commandBuffer)->CmdClearAttachments, in_commandBuffer, attachmentCount, in_pAttachments, rectCount, in_pRects); } } -void VulkanReplayConsumer::Process_vkCmdPushConstants( +void VulkanReplayConsumer::Process_vkCmdResolveImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId layout, - VkShaderStageFlags stageFlags, - uint32_t offset, - uint32_t size, - PointerDecoder* pValues) + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) { - auto in_commandBuffer = GetObjectInfoTable().GetVkCommandBufferInfo(commandBuffer); - auto in_layout = GetObjectInfoTable().GetVkPipelineLayoutInfo(layout); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkImage in_srcImage = MapHandle(srcImage, &CommonObjectInfoTable::GetVkImageInfo); + VkImage in_dstImage = MapHandle(dstImage, &CommonObjectInfoTable::GetVkImageInfo); + const VkImageResolve* in_pRegions = pRegions->GetPointer(); - OverrideCmdPushConstants(GetDeviceTable(in_commandBuffer->handle)->CmdPushConstants, in_commandBuffer, in_layout, stageFlags, offset, size, pValues); + GetDeviceTable(in_commandBuffer)->CmdResolveImage(in_commandBuffer, in_srcImage, srcImageLayout, in_dstImage, dstImageLayout, regionCount, in_pRegions); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdPushConstants(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdPushConstants, in_commandBuffer->handle, in_layout->handle, stageFlags, offset, size, pValues->GetPointer()); + resource_dumper_->Process_vkCmdResolveImage(call_info, GetDeviceTable(in_commandBuffer)->CmdResolveImage, in_commandBuffer, in_srcImage, srcImageLayout, in_dstImage, dstImageLayout, regionCount, in_pRegions); } } @@ -2279,23 +2373,6 @@ void VulkanReplayConsumer::Process_vkCmdEndRenderPass( } } -void VulkanReplayConsumer::Process_vkCmdExecuteCommands( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t commandBufferCount, - HandlePointerDecoder* pCommandBuffers) -{ - auto in_commandBuffer = GetObjectInfoTable().GetVkCommandBufferInfo(commandBuffer); - MapHandles(pCommandBuffers, commandBufferCount, &CommonObjectInfoTable::GetVkCommandBufferInfo); - - OverrideCmdExecuteCommands(GetDeviceTable(in_commandBuffer->handle)->CmdExecuteCommands, in_commandBuffer, commandBufferCount, pCommandBuffers); - - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdExecuteCommands(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdExecuteCommands, in_commandBuffer->handle, commandBufferCount, pCommandBuffers->GetHandlePointer()); - } -} - void VulkanReplayConsumer::Process_vkBindBufferMemory2( const ApiCallInfo& call_info, VkResult returnValue, @@ -2355,26 +2432,6 @@ void VulkanReplayConsumer::Process_vkCmdSetDeviceMask( } } -void VulkanReplayConsumer::Process_vkCmdDispatchBase( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) -{ - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - - GetDeviceTable(in_commandBuffer)->CmdDispatchBase(in_commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); - - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdDispatchBase(call_info, GetDeviceTable(in_commandBuffer)->CmdDispatchBase, in_commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); - } -} - void VulkanReplayConsumer::Process_vkEnumeratePhysicalDeviceGroups( const ApiCallInfo& call_info, VkResult returnValue, @@ -2387,8 +2444,10 @@ void VulkanReplayConsumer::Process_vkEnumeratePhysicalDeviceGroups( SetStructArrayHandleLengths(pPhysicalDeviceGroupProperties->GetMetaStructPointer(), pPhysicalDeviceGroupProperties->GetLength()); if (!pPhysicalDeviceGroupProperties->IsNull()) { pPhysicalDeviceGroupProperties->AllocateOutputData(*pPhysicalDeviceGroupCount->GetOutputPointer(), VkPhysicalDeviceGroupProperties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES, nullptr }); } + PushRecaptureStructArrayHandleIds(pPhysicalDeviceGroupProperties->GetMetaStructPointer(), pPhysicalDeviceGroupProperties->GetLength(), this); VkResult replay_result = OverrideEnumeratePhysicalDeviceGroups(GetInstanceTable(in_instance->handle)->EnumeratePhysicalDeviceGroups, returnValue, in_instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); CheckResult("vkEnumeratePhysicalDeviceGroups", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); if (pPhysicalDeviceGroupProperties->IsNull()) { SetOutputArrayCount(instance, kInstanceArrayEnumeratePhysicalDeviceGroups, *pPhysicalDeviceGroupCount->GetOutputPointer(), &CommonObjectInfoTable::GetVkInstanceInfo); } AddStructArrayHandles(instance, pPhysicalDeviceGroupProperties->GetMetaStructPointer(), pPhysicalDeviceGroupProperties->GetLength(), pPhysicalDeviceGroupProperties->GetOutputPointer(), *pPhysicalDeviceGroupCount->GetOutputPointer(), &GetObjectInfoTable()); @@ -2534,37 +2593,152 @@ void VulkanReplayConsumer::Process_vkGetPhysicalDeviceSparseImageFormatPropertie uint32_t* out_pPropertyCount = pPropertyCount->IsNull() ? nullptr : pPropertyCount->AllocateOutputData(1, GetOutputArrayCount("vkGetPhysicalDeviceSparseImageFormatProperties2", VK_SUCCESS, physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceSparseImageFormatProperties2, pPropertyCount, pProperties, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo)); VkSparseImageFormatProperties2* out_pProperties = pProperties->IsNull() ? nullptr : pProperties->AllocateOutputData(*out_pPropertyCount, VkSparseImageFormatProperties2{ VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2, nullptr }); - GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties2(in_physicalDevice, in_pFormatInfo, out_pPropertyCount, out_pProperties); + GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties2(in_physicalDevice, in_pFormatInfo, out_pPropertyCount, out_pProperties); + + if (pProperties->IsNull()) { SetOutputArrayCount(physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceSparseImageFormatProperties2, *out_pPropertyCount, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); } +} + +void VulkanReplayConsumer::Process_vkTrimCommandPool( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId commandPool, + VkCommandPoolTrimFlags flags) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkCommandPool in_commandPool = MapHandle(commandPool, &CommonObjectInfoTable::GetVkCommandPoolInfo); + + GetDeviceTable(in_device)->TrimCommandPool(in_device, in_commandPool, flags); +} + +void VulkanReplayConsumer::Process_vkGetDeviceQueue2( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pQueueInfo, + HandlePointerDecoder* pQueue) +{ + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + if (!pQueue->IsNull()) { pQueue->SetHandleLength(1); } + VulkanQueueInfo handle_info; + pQueue->SetConsumerData(0, &handle_info); + + PushRecaptureHandleId(pQueue->GetPointer()); + OverrideGetDeviceQueue2(GetDeviceTable(in_device->handle)->GetDeviceQueue2, in_device, pQueueInfo, pQueue); + ClearRecaptureHandleIds(); + + AddHandle(device, pQueue->GetPointer(), pQueue->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkQueueInfo); +} + +void VulkanReplayConsumer::Process_vkGetPhysicalDeviceExternalBufferProperties( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pExternalBufferInfo, + StructPointerDecoder* pExternalBufferProperties) +{ + VkPhysicalDevice in_physicalDevice = MapHandle(physicalDevice, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); + const VkPhysicalDeviceExternalBufferInfo* in_pExternalBufferInfo = pExternalBufferInfo->GetPointer(); + VkExternalBufferProperties* out_pExternalBufferProperties = pExternalBufferProperties->IsNull() ? nullptr : pExternalBufferProperties->AllocateOutputData(1, { VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES, nullptr }); + InitializeOutputStructPNext(pExternalBufferProperties); + + GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceExternalBufferProperties(in_physicalDevice, in_pExternalBufferInfo, out_pExternalBufferProperties); +} + +void VulkanReplayConsumer::Process_vkGetPhysicalDeviceExternalFenceProperties( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pExternalFenceInfo, + StructPointerDecoder* pExternalFenceProperties) +{ + VkPhysicalDevice in_physicalDevice = MapHandle(physicalDevice, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); + const VkPhysicalDeviceExternalFenceInfo* in_pExternalFenceInfo = pExternalFenceInfo->GetPointer(); + VkExternalFenceProperties* out_pExternalFenceProperties = pExternalFenceProperties->IsNull() ? nullptr : pExternalFenceProperties->AllocateOutputData(1, { VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES, nullptr }); + InitializeOutputStructPNext(pExternalFenceProperties); + + GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceExternalFenceProperties(in_physicalDevice, in_pExternalFenceInfo, out_pExternalFenceProperties); +} + +void VulkanReplayConsumer::Process_vkGetPhysicalDeviceExternalSemaphoreProperties( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pExternalSemaphoreInfo, + StructPointerDecoder* pExternalSemaphoreProperties) +{ + VkPhysicalDevice in_physicalDevice = MapHandle(physicalDevice, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); + const VkPhysicalDeviceExternalSemaphoreInfo* in_pExternalSemaphoreInfo = pExternalSemaphoreInfo->GetPointer(); + VkExternalSemaphoreProperties* out_pExternalSemaphoreProperties = pExternalSemaphoreProperties->IsNull() ? nullptr : pExternalSemaphoreProperties->AllocateOutputData(1, { VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES, nullptr }); + InitializeOutputStructPNext(pExternalSemaphoreProperties); + + GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceExternalSemaphoreProperties(in_physicalDevice, in_pExternalSemaphoreInfo, out_pExternalSemaphoreProperties); +} + +void VulkanReplayConsumer::Process_vkCmdDispatchBase( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + + GetDeviceTable(in_commandBuffer)->CmdDispatchBase(in_commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdDispatchBase(call_info, GetDeviceTable(in_commandBuffer)->CmdDispatchBase, in_commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + } +} + +void VulkanReplayConsumer::Process_vkCreateDescriptorUpdateTemplate( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pDescriptorUpdateTemplate) +{ + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + + MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (!pDescriptorUpdateTemplate->IsNull()) { pDescriptorUpdateTemplate->SetHandleLength(1); } + VulkanDescriptorUpdateTemplateInfo handle_info; + pDescriptorUpdateTemplate->SetConsumerData(0, &handle_info); - if (pProperties->IsNull()) { SetOutputArrayCount(physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceSparseImageFormatProperties2, *out_pPropertyCount, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); } + PushRecaptureHandleId(pDescriptorUpdateTemplate->GetPointer()); + VkResult replay_result = OverrideCreateDescriptorUpdateTemplate(GetDeviceTable(in_device->handle)->CreateDescriptorUpdateTemplate, returnValue, in_device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate); + CheckResult("vkCreateDescriptorUpdateTemplate", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); + + AddHandle(device, pDescriptorUpdateTemplate->GetPointer(), pDescriptorUpdateTemplate->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkDescriptorUpdateTemplateInfo); } -void VulkanReplayConsumer::Process_vkTrimCommandPool( +void VulkanReplayConsumer::Process_vkDestroyDescriptorUpdateTemplate( const ApiCallInfo& call_info, format::HandleId device, - format::HandleId commandPool, - VkCommandPoolTrimFlags flags) + format::HandleId descriptorUpdateTemplate, + StructPointerDecoder* pAllocator) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkCommandPool in_commandPool = MapHandle(commandPool, &CommonObjectInfoTable::GetVkCommandPoolInfo); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + auto in_descriptorUpdateTemplate = GetObjectInfoTable().GetVkDescriptorUpdateTemplateInfo(descriptorUpdateTemplate); - GetDeviceTable(in_device)->TrimCommandPool(in_device, in_commandPool, flags); + OverrideDestroyDescriptorUpdateTemplate(GetDeviceTable(in_device->handle)->DestroyDescriptorUpdateTemplate, in_device, in_descriptorUpdateTemplate, pAllocator); + RemoveHandle(descriptorUpdateTemplate, &CommonObjectInfoTable::RemoveVkDescriptorUpdateTemplateInfo); } -void VulkanReplayConsumer::Process_vkGetDeviceQueue2( +void VulkanReplayConsumer::Process_vkGetDescriptorSetLayoutSupport( const ApiCallInfo& call_info, format::HandleId device, - StructPointerDecoder* pQueueInfo, - HandlePointerDecoder* pQueue) + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pSupport) { - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - if (!pQueue->IsNull()) { pQueue->SetHandleLength(1); } - VulkanQueueInfo handle_info; - pQueue->SetConsumerData(0, &handle_info); - - OverrideGetDeviceQueue2(GetDeviceTable(in_device->handle)->GetDeviceQueue2, in_device, pQueueInfo, pQueue); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkDescriptorSetLayoutCreateInfo* in_pCreateInfo = pCreateInfo->GetPointer(); + MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); + VkDescriptorSetLayoutSupport* out_pSupport = pSupport->IsNull() ? nullptr : pSupport->AllocateOutputData(1, { VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT, nullptr }); + InitializeOutputStructPNext(pSupport); - AddHandle(device, pQueue->GetPointer(), pQueue->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkQueueInfo); + GetDeviceTable(in_device)->GetDescriptorSetLayoutSupport(in_device, in_pCreateInfo, out_pSupport); } void VulkanReplayConsumer::Process_vkCreateSamplerYcbcrConversion( @@ -2580,8 +2754,10 @@ void VulkanReplayConsumer::Process_vkCreateSamplerYcbcrConversion( VulkanSamplerYcbcrConversionInfo handle_info; pYcbcrConversion->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pYcbcrConversion->GetPointer()); VkResult replay_result = OverrideCreateSamplerYcbcrConversion(GetDeviceTable(in_device->handle)->CreateSamplerYcbcrConversion, returnValue, in_device, pCreateInfo, pAllocator, pYcbcrConversion); CheckResult("vkCreateSamplerYcbcrConversion", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pYcbcrConversion->GetPointer(), pYcbcrConversion->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkSamplerYcbcrConversionInfo); } @@ -2600,95 +2776,100 @@ void VulkanReplayConsumer::Process_vkDestroySamplerYcbcrConversion( RemoveHandle(ycbcrConversion, &CommonObjectInfoTable::RemoveVkSamplerYcbcrConversionInfo); } -void VulkanReplayConsumer::Process_vkCreateDescriptorUpdateTemplate( +void VulkanReplayConsumer::Process_vkResetQueryPool( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pDescriptorUpdateTemplate) + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount) { - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkQueryPool in_queryPool = MapHandle(queryPool, &CommonObjectInfoTable::GetVkQueryPoolInfo); - MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); - if (!pDescriptorUpdateTemplate->IsNull()) { pDescriptorUpdateTemplate->SetHandleLength(1); } - VulkanDescriptorUpdateTemplateInfo handle_info; - pDescriptorUpdateTemplate->SetConsumerData(0, &handle_info); + GetDeviceTable(in_device)->ResetQueryPool(in_device, in_queryPool, firstQuery, queryCount); +} - VkResult replay_result = OverrideCreateDescriptorUpdateTemplate(GetDeviceTable(in_device->handle)->CreateDescriptorUpdateTemplate, returnValue, in_device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate); - CheckResult("vkCreateDescriptorUpdateTemplate", returnValue, replay_result, call_info); +void VulkanReplayConsumer::Process_vkGetSemaphoreCounterValue( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId semaphore, + PointerDecoder* pValue) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkSemaphore in_semaphore = MapHandle(semaphore, &CommonObjectInfoTable::GetVkSemaphoreInfo); + uint64_t* out_pValue = pValue->IsNull() ? nullptr : pValue->AllocateOutputData(1, static_cast(0)); - AddHandle(device, pDescriptorUpdateTemplate->GetPointer(), pDescriptorUpdateTemplate->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkDescriptorUpdateTemplateInfo); + VkResult replay_result = GetDeviceTable(in_device)->GetSemaphoreCounterValue(in_device, in_semaphore, out_pValue); + CheckResult("vkGetSemaphoreCounterValue", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkDestroyDescriptorUpdateTemplate( +void VulkanReplayConsumer::Process_vkWaitSemaphores( const ApiCallInfo& call_info, + VkResult returnValue, format::HandleId device, - format::HandleId descriptorUpdateTemplate, - StructPointerDecoder* pAllocator) + StructPointerDecoder* pWaitInfo, + uint64_t timeout) { auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - auto in_descriptorUpdateTemplate = GetObjectInfoTable().GetVkDescriptorUpdateTemplateInfo(descriptorUpdateTemplate); - OverrideDestroyDescriptorUpdateTemplate(GetDeviceTable(in_device->handle)->DestroyDescriptorUpdateTemplate, in_device, in_descriptorUpdateTemplate, pAllocator); - RemoveHandle(descriptorUpdateTemplate, &CommonObjectInfoTable::RemoveVkDescriptorUpdateTemplateInfo); + MapStructHandles(pWaitInfo->GetMetaStructPointer(), GetObjectInfoTable()); + + VkResult replay_result = OverrideWaitSemaphores(GetDeviceTable(in_device->handle)->WaitSemaphores, returnValue, in_device, pWaitInfo, timeout); + CheckResult("vkWaitSemaphores", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkGetPhysicalDeviceExternalBufferProperties( +void VulkanReplayConsumer::Process_vkSignalSemaphore( const ApiCallInfo& call_info, - format::HandleId physicalDevice, - StructPointerDecoder* pExternalBufferInfo, - StructPointerDecoder* pExternalBufferProperties) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pSignalInfo) { - VkPhysicalDevice in_physicalDevice = MapHandle(physicalDevice, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); - const VkPhysicalDeviceExternalBufferInfo* in_pExternalBufferInfo = pExternalBufferInfo->GetPointer(); - VkExternalBufferProperties* out_pExternalBufferProperties = pExternalBufferProperties->IsNull() ? nullptr : pExternalBufferProperties->AllocateOutputData(1, { VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES, nullptr }); - InitializeOutputStructPNext(pExternalBufferProperties); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkSemaphoreSignalInfo* in_pSignalInfo = pSignalInfo->GetPointer(); + MapStructHandles(pSignalInfo->GetMetaStructPointer(), GetObjectInfoTable()); - GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceExternalBufferProperties(in_physicalDevice, in_pExternalBufferInfo, out_pExternalBufferProperties); + VkResult replay_result = GetDeviceTable(in_device)->SignalSemaphore(in_device, in_pSignalInfo); + CheckResult("vkSignalSemaphore", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkGetPhysicalDeviceExternalFenceProperties( +void VulkanReplayConsumer::Process_vkGetBufferDeviceAddress( const ApiCallInfo& call_info, - format::HandleId physicalDevice, - StructPointerDecoder* pExternalFenceInfo, - StructPointerDecoder* pExternalFenceProperties) + VkDeviceAddress returnValue, + format::HandleId device, + StructPointerDecoder* pInfo) { - VkPhysicalDevice in_physicalDevice = MapHandle(physicalDevice, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); - const VkPhysicalDeviceExternalFenceInfo* in_pExternalFenceInfo = pExternalFenceInfo->GetPointer(); - VkExternalFenceProperties* out_pExternalFenceProperties = pExternalFenceProperties->IsNull() ? nullptr : pExternalFenceProperties->AllocateOutputData(1, { VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES, nullptr }); - InitializeOutputStructPNext(pExternalFenceProperties); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceExternalFenceProperties(in_physicalDevice, in_pExternalFenceInfo, out_pExternalFenceProperties); + MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); + + OverrideGetBufferDeviceAddress(GetDeviceTable(in_device->handle)->GetBufferDeviceAddress, returnValue, in_device, pInfo); } -void VulkanReplayConsumer::Process_vkGetPhysicalDeviceExternalSemaphoreProperties( +void VulkanReplayConsumer::Process_vkGetBufferOpaqueCaptureAddress( const ApiCallInfo& call_info, - format::HandleId physicalDevice, - StructPointerDecoder* pExternalSemaphoreInfo, - StructPointerDecoder* pExternalSemaphoreProperties) + uint64_t returnValue, + format::HandleId device, + StructPointerDecoder* pInfo) { - VkPhysicalDevice in_physicalDevice = MapHandle(physicalDevice, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); - const VkPhysicalDeviceExternalSemaphoreInfo* in_pExternalSemaphoreInfo = pExternalSemaphoreInfo->GetPointer(); - VkExternalSemaphoreProperties* out_pExternalSemaphoreProperties = pExternalSemaphoreProperties->IsNull() ? nullptr : pExternalSemaphoreProperties->AllocateOutputData(1, { VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES, nullptr }); - InitializeOutputStructPNext(pExternalSemaphoreProperties); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkBufferDeviceAddressInfo* in_pInfo = pInfo->GetPointer(); + MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); - GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceExternalSemaphoreProperties(in_physicalDevice, in_pExternalSemaphoreInfo, out_pExternalSemaphoreProperties); + GetDeviceTable(in_device)->GetBufferOpaqueCaptureAddress(in_device, in_pInfo); } -void VulkanReplayConsumer::Process_vkGetDescriptorSetLayoutSupport( +void VulkanReplayConsumer::Process_vkGetDeviceMemoryOpaqueCaptureAddress( const ApiCallInfo& call_info, + uint64_t returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pSupport) + StructPointerDecoder* pInfo) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkDescriptorSetLayoutCreateInfo* in_pCreateInfo = pCreateInfo->GetPointer(); - MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); - VkDescriptorSetLayoutSupport* out_pSupport = pSupport->IsNull() ? nullptr : pSupport->AllocateOutputData(1, { VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT, nullptr }); - InitializeOutputStructPNext(pSupport); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - GetDeviceTable(in_device)->GetDescriptorSetLayoutSupport(in_device, in_pCreateInfo, out_pSupport); + MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); + + OverrideGetDeviceMemoryOpaqueCaptureAddress(GetDeviceTable(in_device->handle)->GetDeviceMemoryOpaqueCaptureAddress, in_device, pInfo); } void VulkanReplayConsumer::Process_vkCmdDrawIndirectCount( @@ -2748,8 +2929,10 @@ void VulkanReplayConsumer::Process_vkCreateRenderPass2( VulkanRenderPassInfo handle_info; pRenderPass->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pRenderPass->GetPointer()); VkResult replay_result = OverrideCreateRenderPass2(GetDeviceTable(in_device->handle)->CreateRenderPass2, returnValue, in_device, pCreateInfo, pAllocator, pRenderPass); CheckResult("vkCreateRenderPass2", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pRenderPass->GetPointer(), pRenderPass->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkRenderPassInfo); } @@ -2787,119 +2970,23 @@ void VulkanReplayConsumer::Process_vkCmdNextSubpass2( if (options_.dumping_resources) { resource_dumper_->Process_vkCmdNextSubpass2(call_info, GetDeviceTable(in_commandBuffer)->CmdNextSubpass2, in_commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); - } -} - -void VulkanReplayConsumer::Process_vkCmdEndRenderPass2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pSubpassEndInfo) -{ - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkSubpassEndInfo* in_pSubpassEndInfo = pSubpassEndInfo->GetPointer(); - - GetDeviceTable(in_commandBuffer)->CmdEndRenderPass2(in_commandBuffer, in_pSubpassEndInfo); - - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdEndRenderPass2(call_info, GetDeviceTable(in_commandBuffer)->CmdEndRenderPass2, in_commandBuffer, pSubpassEndInfo); - } -} - -void VulkanReplayConsumer::Process_vkResetQueryPool( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount) -{ - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkQueryPool in_queryPool = MapHandle(queryPool, &CommonObjectInfoTable::GetVkQueryPoolInfo); - - GetDeviceTable(in_device)->ResetQueryPool(in_device, in_queryPool, firstQuery, queryCount); -} - -void VulkanReplayConsumer::Process_vkGetSemaphoreCounterValue( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId semaphore, - PointerDecoder* pValue) -{ - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkSemaphore in_semaphore = MapHandle(semaphore, &CommonObjectInfoTable::GetVkSemaphoreInfo); - uint64_t* out_pValue = pValue->IsNull() ? nullptr : pValue->AllocateOutputData(1, static_cast(0)); - - VkResult replay_result = GetDeviceTable(in_device)->GetSemaphoreCounterValue(in_device, in_semaphore, out_pValue); - CheckResult("vkGetSemaphoreCounterValue", returnValue, replay_result, call_info); -} - -void VulkanReplayConsumer::Process_vkWaitSemaphores( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pWaitInfo, - uint64_t timeout) -{ - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - - MapStructHandles(pWaitInfo->GetMetaStructPointer(), GetObjectInfoTable()); - - VkResult replay_result = OverrideWaitSemaphores(GetDeviceTable(in_device->handle)->WaitSemaphores, returnValue, in_device, pWaitInfo, timeout); - CheckResult("vkWaitSemaphores", returnValue, replay_result, call_info); -} - -void VulkanReplayConsumer::Process_vkSignalSemaphore( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pSignalInfo) -{ - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkSemaphoreSignalInfo* in_pSignalInfo = pSignalInfo->GetPointer(); - MapStructHandles(pSignalInfo->GetMetaStructPointer(), GetObjectInfoTable()); - - VkResult replay_result = GetDeviceTable(in_device)->SignalSemaphore(in_device, in_pSignalInfo); - CheckResult("vkSignalSemaphore", returnValue, replay_result, call_info); -} - -void VulkanReplayConsumer::Process_vkGetBufferDeviceAddress( - const ApiCallInfo& call_info, - VkDeviceAddress returnValue, - format::HandleId device, - StructPointerDecoder* pInfo) -{ - auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - - MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); - - OverrideGetBufferDeviceAddress(GetDeviceTable(in_device->handle)->GetBufferDeviceAddress, returnValue, in_device, pInfo); -} - -void VulkanReplayConsumer::Process_vkGetBufferOpaqueCaptureAddress( - const ApiCallInfo& call_info, - uint64_t returnValue, - format::HandleId device, - StructPointerDecoder* pInfo) -{ - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkBufferDeviceAddressInfo* in_pInfo = pInfo->GetPointer(); - MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); - - GetDeviceTable(in_device)->GetBufferOpaqueCaptureAddress(in_device, in_pInfo); + } } -void VulkanReplayConsumer::Process_vkGetDeviceMemoryOpaqueCaptureAddress( +void VulkanReplayConsumer::Process_vkCmdEndRenderPass2( const ApiCallInfo& call_info, - uint64_t returnValue, - format::HandleId device, - StructPointerDecoder* pInfo) + format::HandleId commandBuffer, + StructPointerDecoder* pSubpassEndInfo) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkDeviceMemoryOpaqueCaptureAddressInfo* in_pInfo = pInfo->GetPointer(); - MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + const VkSubpassEndInfo* in_pSubpassEndInfo = pSubpassEndInfo->GetPointer(); - GetDeviceTable(in_device)->GetDeviceMemoryOpaqueCaptureAddress(in_device, in_pInfo); + GetDeviceTable(in_commandBuffer)->CmdEndRenderPass2(in_commandBuffer, in_pSubpassEndInfo); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdEndRenderPass2(call_info, GetDeviceTable(in_commandBuffer)->CmdEndRenderPass2, in_commandBuffer, pSubpassEndInfo); + } } void VulkanReplayConsumer::Process_vkGetPhysicalDeviceToolProperties( @@ -2933,8 +3020,10 @@ void VulkanReplayConsumer::Process_vkCreatePrivateDataSlot( if (!pPrivateDataSlot->IsNull()) { pPrivateDataSlot->SetHandleLength(1); } VkPrivateDataSlot* out_pPrivateDataSlot = pPrivateDataSlot->GetHandlePointer(); + PushRecaptureHandleId(pPrivateDataSlot->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->CreatePrivateDataSlot(in_device, in_pCreateInfo, in_pAllocator, out_pPrivateDataSlot); CheckResult("vkCreatePrivateDataSlot", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pPrivateDataSlot->GetPointer(), out_pPrivateDataSlot, &CommonObjectInfoTable::AddVkPrivateDataSlotInfo); } @@ -2986,62 +3075,6 @@ void VulkanReplayConsumer::Process_vkGetPrivateData( GetDeviceTable(in_device)->GetPrivateData(in_device, objectType, in_objectHandle, in_privateDataSlot, out_pData); } -void VulkanReplayConsumer::Process_vkCmdSetEvent2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - StructPointerDecoder* pDependencyInfo) -{ - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkEvent in_event = MapHandle(event, &CommonObjectInfoTable::GetVkEventInfo); - const VkDependencyInfo* in_pDependencyInfo = pDependencyInfo->GetPointer(); - MapStructHandles(pDependencyInfo->GetMetaStructPointer(), GetObjectInfoTable()); - - GetDeviceTable(in_commandBuffer)->CmdSetEvent2(in_commandBuffer, in_event, in_pDependencyInfo); - - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdSetEvent2(call_info, GetDeviceTable(in_commandBuffer)->CmdSetEvent2, in_commandBuffer, in_event, in_pDependencyInfo); - } -} - -void VulkanReplayConsumer::Process_vkCmdResetEvent2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags2 stageMask) -{ - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkEvent in_event = MapHandle(event, &CommonObjectInfoTable::GetVkEventInfo); - - GetDeviceTable(in_commandBuffer)->CmdResetEvent2(in_commandBuffer, in_event, stageMask); - - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdResetEvent2(call_info, GetDeviceTable(in_commandBuffer)->CmdResetEvent2, in_commandBuffer, in_event, stageMask); - } -} - -void VulkanReplayConsumer::Process_vkCmdWaitEvents2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t eventCount, - HandlePointerDecoder* pEvents, - StructPointerDecoder* pDependencyInfos) -{ - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkEvent* in_pEvents = MapHandles(pEvents, eventCount, &CommonObjectInfoTable::GetVkEventInfo); - const VkDependencyInfo* in_pDependencyInfos = pDependencyInfos->GetPointer(); - MapStructArrayHandles(pDependencyInfos->GetMetaStructPointer(), pDependencyInfos->GetLength(), GetObjectInfoTable()); - - GetDeviceTable(in_commandBuffer)->CmdWaitEvents2(in_commandBuffer, eventCount, in_pEvents, in_pDependencyInfos); - - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdWaitEvents2(call_info, GetDeviceTable(in_commandBuffer)->CmdWaitEvents2, in_commandBuffer, eventCount, in_pEvents, in_pDependencyInfos); - } -} - void VulkanReplayConsumer::Process_vkCmdPipelineBarrier2( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -3103,11 +3136,16 @@ void VulkanReplayConsumer::Process_vkCmdCopyBuffer2( const VkCopyBufferInfo2* in_pCopyBufferInfo = pCopyBufferInfo->GetPointer(); MapStructHandles(pCopyBufferInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdCopyBuffer2(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBuffer2, in_commandBuffer, pCopyBufferInfo, true); + } + GetDeviceTable(in_commandBuffer)->CmdCopyBuffer2(in_commandBuffer, in_pCopyBufferInfo); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdCopyBuffer2(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBuffer2, in_commandBuffer, in_pCopyBufferInfo); + resource_dumper_->Process_vkCmdCopyBuffer2(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBuffer2, in_commandBuffer, pCopyBufferInfo, false); } } @@ -3120,11 +3158,16 @@ void VulkanReplayConsumer::Process_vkCmdCopyImage2( const VkCopyImageInfo2* in_pCopyImageInfo = pCopyImageInfo->GetPointer(); MapStructHandles(pCopyImageInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdCopyImage2(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImage2, in_commandBuffer, pCopyImageInfo, true); + } + GetDeviceTable(in_commandBuffer)->CmdCopyImage2(in_commandBuffer, in_pCopyImageInfo); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdCopyImage2(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImage2, in_commandBuffer, in_pCopyImageInfo); + resource_dumper_->Process_vkCmdCopyImage2(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImage2, in_commandBuffer, pCopyImageInfo, false); } } @@ -3137,11 +3180,16 @@ void VulkanReplayConsumer::Process_vkCmdCopyBufferToImage2( const VkCopyBufferToImageInfo2* in_pCopyBufferToImageInfo = pCopyBufferToImageInfo->GetPointer(); MapStructHandles(pCopyBufferToImageInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdCopyBufferToImage2(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBufferToImage2, in_commandBuffer, pCopyBufferToImageInfo, true); + } + GetDeviceTable(in_commandBuffer)->CmdCopyBufferToImage2(in_commandBuffer, in_pCopyBufferToImageInfo); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdCopyBufferToImage2(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBufferToImage2, in_commandBuffer, in_pCopyBufferToImageInfo); + resource_dumper_->Process_vkCmdCopyBufferToImage2(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBufferToImage2, in_commandBuffer, pCopyBufferToImageInfo, false); } } @@ -3154,11 +3202,119 @@ void VulkanReplayConsumer::Process_vkCmdCopyImageToBuffer2( const VkCopyImageToBufferInfo2* in_pCopyImageToBufferInfo = pCopyImageToBufferInfo->GetPointer(); MapStructHandles(pCopyImageToBufferInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdCopyImageToBuffer2(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImageToBuffer2, in_commandBuffer, pCopyImageToBufferInfo, true); + } + GetDeviceTable(in_commandBuffer)->CmdCopyImageToBuffer2(in_commandBuffer, in_pCopyImageToBufferInfo); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdCopyImageToBuffer2(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImageToBuffer2, in_commandBuffer, in_pCopyImageToBufferInfo); + resource_dumper_->Process_vkCmdCopyImageToBuffer2(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImageToBuffer2, in_commandBuffer, pCopyImageToBufferInfo, false); + } +} + +void VulkanReplayConsumer::Process_vkGetDeviceBufferMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkDeviceBufferMemoryRequirements* in_pInfo = pInfo->GetPointer(); + VkMemoryRequirements2* out_pMemoryRequirements = pMemoryRequirements->IsNull() ? nullptr : pMemoryRequirements->AllocateOutputData(1, { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2, nullptr }); + InitializeOutputStructPNext(pMemoryRequirements); + + GetDeviceTable(in_device)->GetDeviceBufferMemoryRequirements(in_device, in_pInfo, out_pMemoryRequirements); +} + +void VulkanReplayConsumer::Process_vkGetDeviceImageMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkDeviceImageMemoryRequirements* in_pInfo = pInfo->GetPointer(); + MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); + VkMemoryRequirements2* out_pMemoryRequirements = pMemoryRequirements->IsNull() ? nullptr : pMemoryRequirements->AllocateOutputData(1, { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2, nullptr }); + InitializeOutputStructPNext(pMemoryRequirements); + + GetDeviceTable(in_device)->GetDeviceImageMemoryRequirements(in_device, in_pInfo, out_pMemoryRequirements); +} + +void VulkanReplayConsumer::Process_vkGetDeviceImageSparseMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pSparseMemoryRequirementCount, + StructPointerDecoder* pSparseMemoryRequirements) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkDeviceImageMemoryRequirements* in_pInfo = pInfo->GetPointer(); + MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); + uint32_t* out_pSparseMemoryRequirementCount = pSparseMemoryRequirementCount->IsNull() ? nullptr : pSparseMemoryRequirementCount->AllocateOutputData(1, GetOutputArrayCount("vkGetDeviceImageSparseMemoryRequirements", VK_SUCCESS, device, kDeviceArrayGetDeviceImageSparseMemoryRequirements, pSparseMemoryRequirementCount, pSparseMemoryRequirements, &CommonObjectInfoTable::GetVkDeviceInfo)); + VkSparseImageMemoryRequirements2* out_pSparseMemoryRequirements = pSparseMemoryRequirements->IsNull() ? nullptr : pSparseMemoryRequirements->AllocateOutputData(*out_pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2{ VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2, nullptr }); + + GetDeviceTable(in_device)->GetDeviceImageSparseMemoryRequirements(in_device, in_pInfo, out_pSparseMemoryRequirementCount, out_pSparseMemoryRequirements); + + if (pSparseMemoryRequirements->IsNull()) { SetOutputArrayCount(device, kDeviceArrayGetDeviceImageSparseMemoryRequirements, *out_pSparseMemoryRequirementCount, &CommonObjectInfoTable::GetVkDeviceInfo); } +} + +void VulkanReplayConsumer::Process_vkCmdSetEvent2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId event, + StructPointerDecoder* pDependencyInfo) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkEvent in_event = MapHandle(event, &CommonObjectInfoTable::GetVkEventInfo); + const VkDependencyInfo* in_pDependencyInfo = pDependencyInfo->GetPointer(); + MapStructHandles(pDependencyInfo->GetMetaStructPointer(), GetObjectInfoTable()); + + GetDeviceTable(in_commandBuffer)->CmdSetEvent2(in_commandBuffer, in_event, in_pDependencyInfo); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdSetEvent2(call_info, GetDeviceTable(in_commandBuffer)->CmdSetEvent2, in_commandBuffer, in_event, in_pDependencyInfo); + } +} + +void VulkanReplayConsumer::Process_vkCmdResetEvent2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId event, + VkPipelineStageFlags2 stageMask) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkEvent in_event = MapHandle(event, &CommonObjectInfoTable::GetVkEventInfo); + + GetDeviceTable(in_commandBuffer)->CmdResetEvent2(in_commandBuffer, in_event, stageMask); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdResetEvent2(call_info, GetDeviceTable(in_commandBuffer)->CmdResetEvent2, in_commandBuffer, in_event, stageMask); + } +} + +void VulkanReplayConsumer::Process_vkCmdWaitEvents2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t eventCount, + HandlePointerDecoder* pEvents, + StructPointerDecoder* pDependencyInfos) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + const VkEvent* in_pEvents = MapHandles(pEvents, eventCount, &CommonObjectInfoTable::GetVkEventInfo); + const VkDependencyInfo* in_pDependencyInfos = pDependencyInfos->GetPointer(); + MapStructArrayHandles(pDependencyInfos->GetMetaStructPointer(), pDependencyInfos->GetLength(), GetObjectInfoTable()); + + GetDeviceTable(in_commandBuffer)->CmdWaitEvents2(in_commandBuffer, eventCount, in_pEvents, in_pDependencyInfos); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdWaitEvents2(call_info, GetDeviceTable(in_commandBuffer)->CmdWaitEvents2, in_commandBuffer, eventCount, in_pEvents, in_pDependencyInfos); } } @@ -3171,11 +3327,16 @@ void VulkanReplayConsumer::Process_vkCmdBlitImage2( const VkBlitImageInfo2* in_pBlitImageInfo = pBlitImageInfo->GetPointer(); MapStructHandles(pBlitImageInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdBlitImage2(call_info, GetDeviceTable(in_commandBuffer)->CmdBlitImage2, in_commandBuffer, pBlitImageInfo, true); + } + GetDeviceTable(in_commandBuffer)->CmdBlitImage2(in_commandBuffer, in_pBlitImageInfo); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdBlitImage2(call_info, GetDeviceTable(in_commandBuffer)->CmdBlitImage2, in_commandBuffer, in_pBlitImageInfo); + resource_dumper_->Process_vkCmdBlitImage2(call_info, GetDeviceTable(in_commandBuffer)->CmdBlitImage2, in_commandBuffer, pBlitImageInfo, false); } } @@ -3424,111 +3585,48 @@ void VulkanReplayConsumer::Process_vkCmdSetStencilOp( } } -void VulkanReplayConsumer::Process_vkCmdSetRasterizerDiscardEnable( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkBool32 rasterizerDiscardEnable) -{ - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - - GetDeviceTable(in_commandBuffer)->CmdSetRasterizerDiscardEnable(in_commandBuffer, rasterizerDiscardEnable); - - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdSetRasterizerDiscardEnable(call_info, GetDeviceTable(in_commandBuffer)->CmdSetRasterizerDiscardEnable, in_commandBuffer, rasterizerDiscardEnable); - } -} - -void VulkanReplayConsumer::Process_vkCmdSetDepthBiasEnable( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkBool32 depthBiasEnable) -{ - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - - GetDeviceTable(in_commandBuffer)->CmdSetDepthBiasEnable(in_commandBuffer, depthBiasEnable); - - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdSetDepthBiasEnable(call_info, GetDeviceTable(in_commandBuffer)->CmdSetDepthBiasEnable, in_commandBuffer, depthBiasEnable); - } -} - -void VulkanReplayConsumer::Process_vkCmdSetPrimitiveRestartEnable( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkBool32 primitiveRestartEnable) -{ - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - - GetDeviceTable(in_commandBuffer)->CmdSetPrimitiveRestartEnable(in_commandBuffer, primitiveRestartEnable); - - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdSetPrimitiveRestartEnable(call_info, GetDeviceTable(in_commandBuffer)->CmdSetPrimitiveRestartEnable, in_commandBuffer, primitiveRestartEnable); - } -} - -void VulkanReplayConsumer::Process_vkGetDeviceBufferMemoryRequirements( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pMemoryRequirements) -{ - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkDeviceBufferMemoryRequirements* in_pInfo = pInfo->GetPointer(); - VkMemoryRequirements2* out_pMemoryRequirements = pMemoryRequirements->IsNull() ? nullptr : pMemoryRequirements->AllocateOutputData(1, { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2, nullptr }); - InitializeOutputStructPNext(pMemoryRequirements); - - GetDeviceTable(in_device)->GetDeviceBufferMemoryRequirements(in_device, in_pInfo, out_pMemoryRequirements); -} - -void VulkanReplayConsumer::Process_vkGetDeviceImageMemoryRequirements( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pMemoryRequirements) +void VulkanReplayConsumer::Process_vkCmdSetRasterizerDiscardEnable( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkBool32 rasterizerDiscardEnable) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkDeviceImageMemoryRequirements* in_pInfo = pInfo->GetPointer(); - MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); - VkMemoryRequirements2* out_pMemoryRequirements = pMemoryRequirements->IsNull() ? nullptr : pMemoryRequirements->AllocateOutputData(1, { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2, nullptr }); - InitializeOutputStructPNext(pMemoryRequirements); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - GetDeviceTable(in_device)->GetDeviceImageMemoryRequirements(in_device, in_pInfo, out_pMemoryRequirements); + GetDeviceTable(in_commandBuffer)->CmdSetRasterizerDiscardEnable(in_commandBuffer, rasterizerDiscardEnable); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdSetRasterizerDiscardEnable(call_info, GetDeviceTable(in_commandBuffer)->CmdSetRasterizerDiscardEnable, in_commandBuffer, rasterizerDiscardEnable); + } } -void VulkanReplayConsumer::Process_vkGetDeviceImageSparseMemoryRequirements( +void VulkanReplayConsumer::Process_vkCmdSetDepthBiasEnable( const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - PointerDecoder* pSparseMemoryRequirementCount, - StructPointerDecoder* pSparseMemoryRequirements) + format::HandleId commandBuffer, + VkBool32 depthBiasEnable) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkDeviceImageMemoryRequirements* in_pInfo = pInfo->GetPointer(); - MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); - uint32_t* out_pSparseMemoryRequirementCount = pSparseMemoryRequirementCount->IsNull() ? nullptr : pSparseMemoryRequirementCount->AllocateOutputData(1, GetOutputArrayCount("vkGetDeviceImageSparseMemoryRequirements", VK_SUCCESS, device, kDeviceArrayGetDeviceImageSparseMemoryRequirements, pSparseMemoryRequirementCount, pSparseMemoryRequirements, &CommonObjectInfoTable::GetVkDeviceInfo)); - VkSparseImageMemoryRequirements2* out_pSparseMemoryRequirements = pSparseMemoryRequirements->IsNull() ? nullptr : pSparseMemoryRequirements->AllocateOutputData(*out_pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2{ VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2, nullptr }); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - GetDeviceTable(in_device)->GetDeviceImageSparseMemoryRequirements(in_device, in_pInfo, out_pSparseMemoryRequirementCount, out_pSparseMemoryRequirements); + GetDeviceTable(in_commandBuffer)->CmdSetDepthBiasEnable(in_commandBuffer, depthBiasEnable); - if (pSparseMemoryRequirements->IsNull()) { SetOutputArrayCount(device, kDeviceArrayGetDeviceImageSparseMemoryRequirements, *out_pSparseMemoryRequirementCount, &CommonObjectInfoTable::GetVkDeviceInfo); } + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdSetDepthBiasEnable(call_info, GetDeviceTable(in_commandBuffer)->CmdSetDepthBiasEnable, in_commandBuffer, depthBiasEnable); + } } -void VulkanReplayConsumer::Process_vkCmdSetLineStipple( +void VulkanReplayConsumer::Process_vkCmdSetPrimitiveRestartEnable( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t lineStippleFactor, - uint16_t lineStipplePattern) + VkBool32 primitiveRestartEnable) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - GetDeviceTable(in_commandBuffer)->CmdSetLineStipple(in_commandBuffer, lineStippleFactor, lineStipplePattern); + GetDeviceTable(in_commandBuffer)->CmdSetPrimitiveRestartEnable(in_commandBuffer, primitiveRestartEnable); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdSetLineStipple(call_info, GetDeviceTable(in_commandBuffer)->CmdSetLineStipple, in_commandBuffer, lineStippleFactor, lineStipplePattern); + resource_dumper_->Process_vkCmdSetPrimitiveRestartEnable(call_info, GetDeviceTable(in_commandBuffer)->CmdSetPrimitiveRestartEnable, in_commandBuffer, primitiveRestartEnable); } } @@ -3539,12 +3637,12 @@ void VulkanReplayConsumer::Process_vkMapMemory2( StructPointerDecoder* pMemoryMapInfo, PointerDecoder* ppData) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkMemoryMapInfo* in_pMemoryMapInfo = pMemoryMapInfo->GetPointer(); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + MapStructHandles(pMemoryMapInfo->GetMetaStructPointer(), GetObjectInfoTable()); void** out_ppData = ppData->IsNull() ? nullptr : ppData->AllocateOutputData(1); - VkResult replay_result = GetDeviceTable(in_device)->MapMemory2(in_device, in_pMemoryMapInfo, out_ppData); + VkResult replay_result = OverrideMapMemory2(GetDeviceTable(in_device->handle)->MapMemory2, returnValue, in_device, pMemoryMapInfo, out_ppData); CheckResult("vkMapMemory2", returnValue, replay_result, call_info); PostProcessExternalObject(replay_result, (*ppData->GetPointer()), *ppData->GetOutputPointer(), format::ApiCallId::ApiCall_vkMapMemory2, "vkMapMemory2"); @@ -3556,46 +3654,14 @@ void VulkanReplayConsumer::Process_vkUnmapMemory2( format::HandleId device, StructPointerDecoder* pMemoryUnmapInfo) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkMemoryUnmapInfo* in_pMemoryUnmapInfo = pMemoryUnmapInfo->GetPointer(); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + MapStructHandles(pMemoryUnmapInfo->GetMetaStructPointer(), GetObjectInfoTable()); - VkResult replay_result = GetDeviceTable(in_device)->UnmapMemory2(in_device, in_pMemoryUnmapInfo); + VkResult replay_result = OverrideUnmapMemory2(GetDeviceTable(in_device->handle)->UnmapMemory2, returnValue, in_device, pMemoryUnmapInfo); CheckResult("vkUnmapMemory2", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkCmdBindIndexBuffer2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkDeviceSize size, - VkIndexType indexType) -{ - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkBuffer in_buffer = MapHandle(buffer, &CommonObjectInfoTable::GetVkBufferInfo); - - GetDeviceTable(in_commandBuffer)->CmdBindIndexBuffer2(in_commandBuffer, in_buffer, offset, size, indexType); - - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdBindIndexBuffer2(call_info, GetDeviceTable(in_commandBuffer)->CmdBindIndexBuffer2, in_commandBuffer, in_buffer, offset, size, indexType); - } -} - -void VulkanReplayConsumer::Process_vkGetRenderingAreaGranularity( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pRenderingAreaInfo, - StructPointerDecoder* pGranularity) -{ - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkRenderingAreaInfo* in_pRenderingAreaInfo = pRenderingAreaInfo->GetPointer(); - VkExtent2D* out_pGranularity = pGranularity->IsNull() ? nullptr : pGranularity->AllocateOutputData(1); - - GetDeviceTable(in_device)->GetRenderingAreaGranularity(in_device, in_pRenderingAreaInfo, out_pGranularity); -} - void VulkanReplayConsumer::Process_vkGetDeviceImageSubresourceLayout( const ApiCallInfo& call_info, format::HandleId device, @@ -3627,57 +3693,82 @@ void VulkanReplayConsumer::Process_vkGetImageSubresourceLayout2( GetDeviceTable(in_device)->GetImageSubresourceLayout2(in_device, in_image, in_pSubresource, out_pLayout); } -void VulkanReplayConsumer::Process_vkCmdPushDescriptorSet( +void VulkanReplayConsumer::Process_vkCopyMemoryToImage( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - format::HandleId layout, - uint32_t set, - uint32_t descriptorWriteCount, - StructPointerDecoder* pDescriptorWrites) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyMemoryToImageInfo) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkPipelineLayout in_layout = MapHandle(layout, &CommonObjectInfoTable::GetVkPipelineLayoutInfo); - const VkWriteDescriptorSet* in_pDescriptorWrites = pDescriptorWrites->GetPointer(); - MapStructArrayHandles(pDescriptorWrites->GetMetaStructPointer(), pDescriptorWrites->GetLength(), GetObjectInfoTable()); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkCopyMemoryToImageInfo* in_pCopyMemoryToImageInfo = pCopyMemoryToImageInfo->GetPointer(); + MapStructHandles(pCopyMemoryToImageInfo->GetMetaStructPointer(), GetObjectInfoTable()); - GetDeviceTable(in_commandBuffer)->CmdPushDescriptorSet(in_commandBuffer, pipelineBindPoint, in_layout, set, descriptorWriteCount, in_pDescriptorWrites); + VkResult replay_result = GetDeviceTable(in_device)->CopyMemoryToImage(in_device, in_pCopyMemoryToImageInfo); + CheckResult("vkCopyMemoryToImage", returnValue, replay_result, call_info); +} - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdPushDescriptorSet(call_info, GetDeviceTable(in_commandBuffer)->CmdPushDescriptorSet, in_commandBuffer, pipelineBindPoint, in_layout, set, descriptorWriteCount, in_pDescriptorWrites); - } +void VulkanReplayConsumer::Process_vkCopyImageToMemory( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyImageToMemoryInfo) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkCopyImageToMemoryInfo* in_pCopyImageToMemoryInfo = pCopyImageToMemoryInfo->GetPointer(); + MapStructHandles(pCopyImageToMemoryInfo->GetMetaStructPointer(), GetObjectInfoTable()); + + VkResult replay_result = GetDeviceTable(in_device)->CopyImageToMemory(in_device, in_pCopyImageToMemoryInfo); + CheckResult("vkCopyImageToMemory", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkCmdSetRenderingAttachmentLocations( +void VulkanReplayConsumer::Process_vkCopyImageToImage( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pLocationInfo) + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyImageToImageInfo) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkRenderingAttachmentLocationInfo* in_pLocationInfo = pLocationInfo->GetPointer(); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkCopyImageToImageInfo* in_pCopyImageToImageInfo = pCopyImageToImageInfo->GetPointer(); + MapStructHandles(pCopyImageToImageInfo->GetMetaStructPointer(), GetObjectInfoTable()); - GetDeviceTable(in_commandBuffer)->CmdSetRenderingAttachmentLocations(in_commandBuffer, in_pLocationInfo); + VkResult replay_result = GetDeviceTable(in_device)->CopyImageToImage(in_device, in_pCopyImageToImageInfo); + CheckResult("vkCopyImageToImage", returnValue, replay_result, call_info); +} - if (options_.dumping_resources) - { - resource_dumper_->Process_vkCmdSetRenderingAttachmentLocations(call_info, GetDeviceTable(in_commandBuffer)->CmdSetRenderingAttachmentLocations, in_commandBuffer, in_pLocationInfo); - } +void VulkanReplayConsumer::Process_vkTransitionImageLayout( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + uint32_t transitionCount, + StructPointerDecoder* pTransitions) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkHostImageLayoutTransitionInfo* in_pTransitions = pTransitions->GetPointer(); + MapStructArrayHandles(pTransitions->GetMetaStructPointer(), pTransitions->GetLength(), GetObjectInfoTable()); + + VkResult replay_result = GetDeviceTable(in_device)->TransitionImageLayout(in_device, transitionCount, in_pTransitions); + CheckResult("vkTransitionImageLayout", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkCmdSetRenderingInputAttachmentIndices( +void VulkanReplayConsumer::Process_vkCmdPushDescriptorSet( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pInputAttachmentIndexInfo) + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t set, + uint32_t descriptorWriteCount, + StructPointerDecoder* pDescriptorWrites) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkRenderingInputAttachmentIndexInfo* in_pInputAttachmentIndexInfo = pInputAttachmentIndexInfo->GetPointer(); + VkPipelineLayout in_layout = MapHandle(layout, &CommonObjectInfoTable::GetVkPipelineLayoutInfo); + const VkWriteDescriptorSet* in_pDescriptorWrites = pDescriptorWrites->GetPointer(); + MapStructArrayHandles(pDescriptorWrites->GetMetaStructPointer(), pDescriptorWrites->GetLength(), GetObjectInfoTable()); - GetDeviceTable(in_commandBuffer)->CmdSetRenderingInputAttachmentIndices(in_commandBuffer, in_pInputAttachmentIndexInfo); + GetDeviceTable(in_commandBuffer)->CmdPushDescriptorSet(in_commandBuffer, pipelineBindPoint, in_layout, set, descriptorWriteCount, in_pDescriptorWrites); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdSetRenderingInputAttachmentIndices(call_info, GetDeviceTable(in_commandBuffer)->CmdSetRenderingInputAttachmentIndices, in_commandBuffer, in_pInputAttachmentIndexInfo); + resource_dumper_->Process_vkCmdPushDescriptorSet(call_info, GetDeviceTable(in_commandBuffer)->CmdPushDescriptorSet, in_commandBuffer, pipelineBindPoint, in_layout, set, descriptorWriteCount, in_pDescriptorWrites); } } @@ -3694,7 +3785,7 @@ void VulkanReplayConsumer::Process_vkCmdBindDescriptorSets2( if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdBindDescriptorSets2(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdBindDescriptorSets2, in_commandBuffer->handle, pBindDescriptorSetsInfo->GetPointer()); + resource_dumper_->Process_vkCmdBindDescriptorSets2(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdBindDescriptorSets2, in_commandBuffer->handle, pBindDescriptorSetsInfo); } } @@ -3732,61 +3823,84 @@ void VulkanReplayConsumer::Process_vkCmdPushDescriptorSet2( } } -void VulkanReplayConsumer::Process_vkCopyMemoryToImage( +void VulkanReplayConsumer::Process_vkCmdSetLineStipple( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCopyMemoryToImageInfo) + format::HandleId commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkCopyMemoryToImageInfo* in_pCopyMemoryToImageInfo = pCopyMemoryToImageInfo->GetPointer(); - MapStructHandles(pCopyMemoryToImageInfo->GetMetaStructPointer(), GetObjectInfoTable()); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - VkResult replay_result = GetDeviceTable(in_device)->CopyMemoryToImage(in_device, in_pCopyMemoryToImageInfo); - CheckResult("vkCopyMemoryToImage", returnValue, replay_result, call_info); + GetDeviceTable(in_commandBuffer)->CmdSetLineStipple(in_commandBuffer, lineStippleFactor, lineStipplePattern); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdSetLineStipple(call_info, GetDeviceTable(in_commandBuffer)->CmdSetLineStipple, in_commandBuffer, lineStippleFactor, lineStipplePattern); + } } -void VulkanReplayConsumer::Process_vkCopyImageToMemory( +void VulkanReplayConsumer::Process_vkCmdBindIndexBuffer2( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCopyImageToMemoryInfo) + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkCopyImageToMemoryInfo* in_pCopyImageToMemoryInfo = pCopyImageToMemoryInfo->GetPointer(); - MapStructHandles(pCopyImageToMemoryInfo->GetMetaStructPointer(), GetObjectInfoTable()); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + VkBuffer in_buffer = MapHandle(buffer, &CommonObjectInfoTable::GetVkBufferInfo); - VkResult replay_result = GetDeviceTable(in_device)->CopyImageToMemory(in_device, in_pCopyImageToMemoryInfo); - CheckResult("vkCopyImageToMemory", returnValue, replay_result, call_info); + GetDeviceTable(in_commandBuffer)->CmdBindIndexBuffer2(in_commandBuffer, in_buffer, offset, size, indexType); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdBindIndexBuffer2(call_info, GetDeviceTable(in_commandBuffer)->CmdBindIndexBuffer2, in_commandBuffer, in_buffer, offset, size, indexType); + } } -void VulkanReplayConsumer::Process_vkCopyImageToImage( +void VulkanReplayConsumer::Process_vkGetRenderingAreaGranularity( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCopyImageToImageInfo) + StructPointerDecoder* pRenderingAreaInfo, + StructPointerDecoder* pGranularity) { VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkCopyImageToImageInfo* in_pCopyImageToImageInfo = pCopyImageToImageInfo->GetPointer(); - MapStructHandles(pCopyImageToImageInfo->GetMetaStructPointer(), GetObjectInfoTable()); + const VkRenderingAreaInfo* in_pRenderingAreaInfo = pRenderingAreaInfo->GetPointer(); + VkExtent2D* out_pGranularity = pGranularity->IsNull() ? nullptr : pGranularity->AllocateOutputData(1); - VkResult replay_result = GetDeviceTable(in_device)->CopyImageToImage(in_device, in_pCopyImageToImageInfo); - CheckResult("vkCopyImageToImage", returnValue, replay_result, call_info); + GetDeviceTable(in_device)->GetRenderingAreaGranularity(in_device, in_pRenderingAreaInfo, out_pGranularity); } -void VulkanReplayConsumer::Process_vkTransitionImageLayout( +void VulkanReplayConsumer::Process_vkCmdSetRenderingAttachmentLocations( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - uint32_t transitionCount, - StructPointerDecoder* pTransitions) + format::HandleId commandBuffer, + StructPointerDecoder* pLocationInfo) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkHostImageLayoutTransitionInfo* in_pTransitions = pTransitions->GetPointer(); - MapStructArrayHandles(pTransitions->GetMetaStructPointer(), pTransitions->GetLength(), GetObjectInfoTable()); + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + const VkRenderingAttachmentLocationInfo* in_pLocationInfo = pLocationInfo->GetPointer(); + + GetDeviceTable(in_commandBuffer)->CmdSetRenderingAttachmentLocations(in_commandBuffer, in_pLocationInfo); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdSetRenderingAttachmentLocations(call_info, GetDeviceTable(in_commandBuffer)->CmdSetRenderingAttachmentLocations, in_commandBuffer, in_pLocationInfo); + } +} + +void VulkanReplayConsumer::Process_vkCmdSetRenderingInputAttachmentIndices( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pInputAttachmentIndexInfo) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + const VkRenderingInputAttachmentIndexInfo* in_pInputAttachmentIndexInfo = pInputAttachmentIndexInfo->GetPointer(); - VkResult replay_result = GetDeviceTable(in_device)->TransitionImageLayout(in_device, transitionCount, in_pTransitions); - CheckResult("vkTransitionImageLayout", returnValue, replay_result, call_info); + GetDeviceTable(in_commandBuffer)->CmdSetRenderingInputAttachmentIndices(in_commandBuffer, in_pInputAttachmentIndexInfo); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdSetRenderingInputAttachmentIndices(call_info, GetDeviceTable(in_commandBuffer)->CmdSetRenderingInputAttachmentIndices, in_commandBuffer, in_pInputAttachmentIndexInfo); + } } void VulkanReplayConsumer::Process_vkDestroySurfaceKHR( @@ -3859,16 +3973,16 @@ void VulkanReplayConsumer::Process_vkGetPhysicalDeviceSurfaceFormatsKHR( GFXRECON_LOG_DEBUG("Skip vkGetPhysicalDeviceSurfaceFormatsKHR for offscreen."); return; } - VkPhysicalDevice in_physicalDevice = MapHandle(physicalDevice, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); - VkSurfaceKHR in_surface = MapHandle(surface, &CommonObjectInfoTable::GetVkSurfaceKHRInfo); - if (GetObjectInfoTable().GetVkSurfaceKHRInfo(surface) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(surface)->surface_creation_skipped) { return; } - uint32_t* out_pSurfaceFormatCount = pSurfaceFormatCount->IsNull() ? nullptr : pSurfaceFormatCount->AllocateOutputData(1, GetOutputArrayCount("vkGetPhysicalDeviceSurfaceFormatsKHR", returnValue, surface, kSurfaceKHRArrayGetPhysicalDeviceSurfaceFormatsKHR, pSurfaceFormatCount, pSurfaceFormats, &CommonObjectInfoTable::GetVkSurfaceKHRInfo)); - VkSurfaceFormatKHR* out_pSurfaceFormats = pSurfaceFormats->IsNull() ? nullptr : pSurfaceFormats->AllocateOutputData(*out_pSurfaceFormatCount); + auto in_physicalDevice = GetObjectInfoTable().GetVkPhysicalDeviceInfo(physicalDevice); + auto in_surface = GetObjectInfoTable().GetVkSurfaceKHRInfo(surface); + if (in_surface == nullptr || in_surface->surface_creation_skipped) { return; } + pSurfaceFormatCount->IsNull() ? nullptr : pSurfaceFormatCount->AllocateOutputData(1, GetOutputArrayCount("vkGetPhysicalDeviceSurfaceFormatsKHR", returnValue, surface, kSurfaceKHRArrayGetPhysicalDeviceSurfaceFormatsKHR, pSurfaceFormatCount, pSurfaceFormats, &CommonObjectInfoTable::GetVkSurfaceKHRInfo)); + if (!pSurfaceFormats->IsNull()) { pSurfaceFormats->AllocateOutputData(*pSurfaceFormatCount->GetOutputPointer()); } - VkResult replay_result = GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceSurfaceFormatsKHR(in_physicalDevice, in_surface, out_pSurfaceFormatCount, out_pSurfaceFormats); + VkResult replay_result = OverrideGetPhysicalDeviceSurfaceFormatsKHR(GetInstanceTable(in_physicalDevice->handle)->GetPhysicalDeviceSurfaceFormatsKHR, returnValue, in_physicalDevice, in_surface, pSurfaceFormatCount, pSurfaceFormats); CheckResult("vkGetPhysicalDeviceSurfaceFormatsKHR", returnValue, replay_result, call_info); - if (pSurfaceFormats->IsNull()) { SetOutputArrayCount(surface, kSurfaceKHRArrayGetPhysicalDeviceSurfaceFormatsKHR, *out_pSurfaceFormatCount, &CommonObjectInfoTable::GetVkSurfaceKHRInfo); } + if (pSurfaceFormats->IsNull()) { SetOutputArrayCount(surface, kSurfaceKHRArrayGetPhysicalDeviceSurfaceFormatsKHR, *pSurfaceFormatCount->GetOutputPointer(), &CommonObjectInfoTable::GetVkSurfaceKHRInfo); } } void VulkanReplayConsumer::Process_vkGetPhysicalDeviceSurfacePresentModesKHR( @@ -3911,8 +4025,10 @@ void VulkanReplayConsumer::Process_vkCreateSwapchainKHR( VulkanSwapchainKHRInfo handle_info; pSwapchain->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pSwapchain->GetPointer()); VkResult replay_result = OverrideCreateSwapchainKHR(GetDeviceTable(in_device->handle)->CreateSwapchainKHR, returnValue, in_device, pCreateInfo, pAllocator, pSwapchain); CheckResult("vkCreateSwapchainKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pSwapchain->GetPointer(), pSwapchain->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkSwapchainKHRInfo); } @@ -3945,8 +4061,10 @@ void VulkanReplayConsumer::Process_vkGetSwapchainImagesKHR( std::vector handle_info(*pSwapchainImageCount->GetOutputPointer()); for (size_t i = 0; i < *pSwapchainImageCount->GetOutputPointer(); ++i) { pSwapchainImages->SetConsumerData(i, &handle_info[i]); } + PushRecaptureHandleIds(pSwapchainImages->GetPointer(), pSwapchainImages->GetLength()); VkResult replay_result = OverrideGetSwapchainImagesKHR(GetDeviceTable(in_device->handle)->GetSwapchainImagesKHR, returnValue, in_device, in_swapchain, pSwapchainImageCount, pSwapchainImages); CheckResult("vkGetSwapchainImagesKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); if (pSwapchainImages->IsNull()) { SetOutputArrayCount(swapchain, kSwapchainKHRArrayGetSwapchainImagesKHR, *pSwapchainImageCount->GetOutputPointer(), &CommonObjectInfoTable::GetVkSwapchainKHRInfo); } AddHandles(device, pSwapchainImages->GetPointer(), pSwapchainImages->GetLength(), pSwapchainImages->GetHandlePointer(), *pSwapchainImageCount->GetOutputPointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkImageInfo); @@ -4078,8 +4196,10 @@ void VulkanReplayConsumer::Process_vkGetPhysicalDeviceDisplayPropertiesKHR( uint32_t* out_pPropertyCount = pPropertyCount->IsNull() ? nullptr : pPropertyCount->AllocateOutputData(1, GetOutputArrayCount("vkGetPhysicalDeviceDisplayPropertiesKHR", returnValue, physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceDisplayPropertiesKHR, pPropertyCount, pProperties, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo)); VkDisplayPropertiesKHR* out_pProperties = pProperties->IsNull() ? nullptr : pProperties->AllocateOutputData(*out_pPropertyCount); + PushRecaptureStructArrayHandleIds(pProperties->GetMetaStructPointer(), pProperties->GetLength(), this); VkResult replay_result = GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceDisplayPropertiesKHR(in_physicalDevice, out_pPropertyCount, out_pProperties); CheckResult("vkGetPhysicalDeviceDisplayPropertiesKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); if (pProperties->IsNull()) { SetOutputArrayCount(physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceDisplayPropertiesKHR, *out_pPropertyCount, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); } AddStructArrayHandles(physicalDevice, pProperties->GetMetaStructPointer(), pProperties->GetLength(), out_pProperties, *out_pPropertyCount, &GetObjectInfoTable()); @@ -4096,8 +4216,10 @@ void VulkanReplayConsumer::Process_vkGetPhysicalDeviceDisplayPlanePropertiesKHR( uint32_t* out_pPropertyCount = pPropertyCount->IsNull() ? nullptr : pPropertyCount->AllocateOutputData(1, GetOutputArrayCount("vkGetPhysicalDeviceDisplayPlanePropertiesKHR", returnValue, physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceDisplayPlanePropertiesKHR, pPropertyCount, pProperties, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo)); VkDisplayPlanePropertiesKHR* out_pProperties = pProperties->IsNull() ? nullptr : pProperties->AllocateOutputData(*out_pPropertyCount); + PushRecaptureStructArrayHandleIds(pProperties->GetMetaStructPointer(), pProperties->GetLength(), this); VkResult replay_result = GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceDisplayPlanePropertiesKHR(in_physicalDevice, out_pPropertyCount, out_pProperties); CheckResult("vkGetPhysicalDeviceDisplayPlanePropertiesKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); if (pProperties->IsNull()) { SetOutputArrayCount(physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceDisplayPlanePropertiesKHR, *out_pPropertyCount, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); } AddStructArrayHandles(physicalDevice, pProperties->GetMetaStructPointer(), pProperties->GetLength(), out_pProperties, *out_pPropertyCount, &GetObjectInfoTable()); @@ -4116,8 +4238,10 @@ void VulkanReplayConsumer::Process_vkGetDisplayPlaneSupportedDisplaysKHR( if (!pDisplays->IsNull()) { pDisplays->SetHandleLength(*out_pDisplayCount); } VkDisplayKHR* out_pDisplays = pDisplays->GetHandlePointer(); + PushRecaptureHandleIds(pDisplays->GetPointer(), pDisplays->GetLength()); VkResult replay_result = GetInstanceTable(in_physicalDevice)->GetDisplayPlaneSupportedDisplaysKHR(in_physicalDevice, planeIndex, out_pDisplayCount, out_pDisplays); CheckResult("vkGetDisplayPlaneSupportedDisplaysKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); if (pDisplays->IsNull()) { SetOutputArrayCount(physicalDevice, kPhysicalDeviceArrayGetDisplayPlaneSupportedDisplaysKHR, *out_pDisplayCount, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); } AddHandles(physicalDevice, pDisplays->GetPointer(), pDisplays->GetLength(), out_pDisplays, *out_pDisplayCount, &CommonObjectInfoTable::AddVkDisplayKHRInfo); @@ -4136,8 +4260,10 @@ void VulkanReplayConsumer::Process_vkGetDisplayModePropertiesKHR( uint32_t* out_pPropertyCount = pPropertyCount->IsNull() ? nullptr : pPropertyCount->AllocateOutputData(1, GetOutputArrayCount("vkGetDisplayModePropertiesKHR", returnValue, display, kDisplayKHRArrayGetDisplayModePropertiesKHR, pPropertyCount, pProperties, &CommonObjectInfoTable::GetVkDisplayKHRInfo)); VkDisplayModePropertiesKHR* out_pProperties = pProperties->IsNull() ? nullptr : pProperties->AllocateOutputData(*out_pPropertyCount); + PushRecaptureStructArrayHandleIds(pProperties->GetMetaStructPointer(), pProperties->GetLength(), this); VkResult replay_result = GetInstanceTable(in_physicalDevice)->GetDisplayModePropertiesKHR(in_physicalDevice, in_display, out_pPropertyCount, out_pProperties); CheckResult("vkGetDisplayModePropertiesKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); if (pProperties->IsNull()) { SetOutputArrayCount(display, kDisplayKHRArrayGetDisplayModePropertiesKHR, *out_pPropertyCount, &CommonObjectInfoTable::GetVkDisplayKHRInfo); } AddStructArrayHandles(physicalDevice, pProperties->GetMetaStructPointer(), pProperties->GetLength(), out_pProperties, *out_pPropertyCount, &GetObjectInfoTable()); @@ -4159,8 +4285,10 @@ void VulkanReplayConsumer::Process_vkCreateDisplayModeKHR( if (!pMode->IsNull()) { pMode->SetHandleLength(1); } VkDisplayModeKHR* out_pMode = pMode->GetHandlePointer(); + PushRecaptureHandleId(pMode->GetPointer()); VkResult replay_result = GetInstanceTable(in_physicalDevice)->CreateDisplayModeKHR(in_physicalDevice, in_display, in_pCreateInfo, in_pAllocator, out_pMode); CheckResult("vkCreateDisplayModeKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(physicalDevice, pMode->GetPointer(), out_pMode, &CommonObjectInfoTable::AddVkDisplayModeKHRInfo); } @@ -4196,8 +4324,10 @@ void VulkanReplayConsumer::Process_vkCreateDisplayPlaneSurfaceKHR( VulkanSurfaceKHRInfo handle_info; pSurface->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = OverrideCreateDisplayPlaneSurfaceKHR(GetInstanceTable(in_instance->handle)->CreateDisplayPlaneSurfaceKHR, returnValue, in_instance, pCreateInfo, pAllocator, pSurface); CheckResult("vkCreateDisplayPlaneSurfaceKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), pSurface->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -4218,8 +4348,10 @@ void VulkanReplayConsumer::Process_vkCreateSharedSwapchainsKHR( std::vector handle_info(swapchainCount); for (size_t i = 0; i < swapchainCount; ++i) { pSwapchains->SetConsumerData(i, &handle_info[i]); } + PushRecaptureHandleIds(pSwapchains->GetPointer(), pSwapchains->GetLength()); VkResult replay_result = OverrideCreateSharedSwapchainsKHR(GetDeviceTable(in_device->handle)->CreateSharedSwapchainsKHR, returnValue, in_device, swapchainCount, pCreateInfos, pAllocator, pSwapchains); CheckResult("vkCreateSharedSwapchainsKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandles(device, pSwapchains->GetPointer(), pSwapchains->GetLength(), pSwapchains->GetHandlePointer(), swapchainCount, std::move(handle_info), &CommonObjectInfoTable::AddVkSwapchainKHRInfo); } @@ -4237,8 +4369,10 @@ void VulkanReplayConsumer::Process_vkCreateXlibSurfaceKHR( VulkanSurfaceKHRInfo handle_info; pSurface->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = OverrideCreateXlibSurfaceKHR(GetInstanceTable(in_instance->handle)->CreateXlibSurfaceKHR, returnValue, in_instance, pCreateInfo, pAllocator, pSurface); CheckResult("vkCreateXlibSurfaceKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), pSurface->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -4270,8 +4404,10 @@ void VulkanReplayConsumer::Process_vkCreateXcbSurfaceKHR( VulkanSurfaceKHRInfo handle_info; pSurface->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = OverrideCreateXcbSurfaceKHR(GetInstanceTable(in_instance->handle)->CreateXcbSurfaceKHR, returnValue, in_instance, pCreateInfo, pAllocator, pSurface); CheckResult("vkCreateXcbSurfaceKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), pSurface->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -4303,8 +4439,10 @@ void VulkanReplayConsumer::Process_vkCreateWaylandSurfaceKHR( VulkanSurfaceKHRInfo handle_info; pSurface->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = OverrideCreateWaylandSurfaceKHR(GetInstanceTable(in_instance->handle)->CreateWaylandSurfaceKHR, returnValue, in_instance, pCreateInfo, pAllocator, pSurface); CheckResult("vkCreateWaylandSurfaceKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), pSurface->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -4335,8 +4473,10 @@ void VulkanReplayConsumer::Process_vkCreateAndroidSurfaceKHR( VulkanSurfaceKHRInfo handle_info; pSurface->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = OverrideCreateAndroidSurfaceKHR(GetInstanceTable(in_instance->handle)->CreateAndroidSurfaceKHR, returnValue, in_instance, pCreateInfo, pAllocator, pSurface); CheckResult("vkCreateAndroidSurfaceKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), pSurface->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -4354,8 +4494,10 @@ void VulkanReplayConsumer::Process_vkCreateWin32SurfaceKHR( VulkanSurfaceKHRInfo handle_info; pSurface->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = OverrideCreateWin32SurfaceKHR(GetInstanceTable(in_instance->handle)->CreateWin32SurfaceKHR, returnValue, in_instance, pCreateInfo, pAllocator, pSurface); CheckResult("vkCreateWin32SurfaceKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), pSurface->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -4419,8 +4561,10 @@ void VulkanReplayConsumer::Process_vkCreateVideoSessionKHR( VulkanVideoSessionKHRInfo handle_info; pVideoSession->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pVideoSession->GetPointer()); VkResult replay_result = OverrideCreateVideoSessionKHR(GetDeviceTable(in_device->handle)->CreateVideoSessionKHR, returnValue, in_device, pCreateInfo, pAllocator, pVideoSession); CheckResult("vkCreateVideoSessionKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pVideoSession->GetPointer(), pVideoSession->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkVideoSessionKHRInfo); } @@ -4489,8 +4633,10 @@ void VulkanReplayConsumer::Process_vkCreateVideoSessionParametersKHR( if (!pVideoSessionParameters->IsNull()) { pVideoSessionParameters->SetHandleLength(1); } VkVideoSessionParametersKHR* out_pVideoSessionParameters = pVideoSessionParameters->GetHandlePointer(); + PushRecaptureHandleId(pVideoSessionParameters->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->CreateVideoSessionParametersKHR(in_device, in_pCreateInfo, in_pAllocator, out_pVideoSessionParameters); CheckResult("vkCreateVideoSessionParametersKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pVideoSessionParameters->GetPointer(), out_pVideoSessionParameters, &CommonObjectInfoTable::AddVkVideoSessionParametersKHRInfo); } @@ -4791,8 +4937,10 @@ void VulkanReplayConsumer::Process_vkEnumeratePhysicalDeviceGroupsKHR( SetStructArrayHandleLengths(pPhysicalDeviceGroupProperties->GetMetaStructPointer(), pPhysicalDeviceGroupProperties->GetLength()); if (!pPhysicalDeviceGroupProperties->IsNull()) { pPhysicalDeviceGroupProperties->AllocateOutputData(*pPhysicalDeviceGroupCount->GetOutputPointer(), VkPhysicalDeviceGroupProperties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES, nullptr }); } + PushRecaptureStructArrayHandleIds(pPhysicalDeviceGroupProperties->GetMetaStructPointer(), pPhysicalDeviceGroupProperties->GetLength(), this); VkResult replay_result = OverrideEnumeratePhysicalDeviceGroups(GetInstanceTable(in_instance->handle)->EnumeratePhysicalDeviceGroupsKHR, returnValue, in_instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); CheckResult("vkEnumeratePhysicalDeviceGroupsKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); if (pPhysicalDeviceGroupProperties->IsNull()) { SetOutputArrayCount(instance, kInstanceArrayEnumeratePhysicalDeviceGroupsKHR, *pPhysicalDeviceGroupCount->GetOutputPointer(), &CommonObjectInfoTable::GetVkInstanceInfo); } AddStructArrayHandles(instance, pPhysicalDeviceGroupProperties->GetMetaStructPointer(), pPhysicalDeviceGroupProperties->GetLength(), pPhysicalDeviceGroupProperties->GetOutputPointer(), *pPhysicalDeviceGroupCount->GetOutputPointer(), &GetObjectInfoTable()); @@ -4854,12 +5002,12 @@ void VulkanReplayConsumer::Process_vkGetMemoryFdKHR( StructPointerDecoder* pGetFdInfo, PointerDecoder* pFd) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkMemoryGetFdInfoKHR* in_pGetFdInfo = pGetFdInfo->GetPointer(); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + MapStructHandles(pGetFdInfo->GetMetaStructPointer(), GetObjectInfoTable()); - int* out_pFd = pFd->IsNull() ? nullptr : pFd->AllocateOutputData(1, static_cast(0)); + pFd->IsNull() ? nullptr : pFd->AllocateOutputData(1, static_cast(0)); - VkResult replay_result = GetDeviceTable(in_device)->GetMemoryFdKHR(in_device, in_pGetFdInfo, out_pFd); + VkResult replay_result = OverrideGetMemoryFdKHR(GetDeviceTable(in_device->handle)->GetMemoryFdKHR, returnValue, in_device, pGetFdInfo, pFd); CheckResult("vkGetMemoryFdKHR", returnValue, replay_result, call_info); } @@ -4992,8 +5140,10 @@ void VulkanReplayConsumer::Process_vkCreateDescriptorUpdateTemplateKHR( VulkanDescriptorUpdateTemplateInfo handle_info; pDescriptorUpdateTemplate->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pDescriptorUpdateTemplate->GetPointer()); VkResult replay_result = OverrideCreateDescriptorUpdateTemplate(GetDeviceTable(in_device->handle)->CreateDescriptorUpdateTemplateKHR, returnValue, in_device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate); CheckResult("vkCreateDescriptorUpdateTemplateKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pDescriptorUpdateTemplate->GetPointer(), pDescriptorUpdateTemplate->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkDescriptorUpdateTemplateInfo); } @@ -5024,8 +5174,10 @@ void VulkanReplayConsumer::Process_vkCreateRenderPass2KHR( VulkanRenderPassInfo handle_info; pRenderPass->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pRenderPass->GetPointer()); VkResult replay_result = OverrideCreateRenderPass2(GetDeviceTable(in_device->handle)->CreateRenderPass2KHR, returnValue, in_device, pCreateInfo, pAllocator, pRenderPass); CheckResult("vkCreateRenderPass2KHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pRenderPass->GetPointer(), pRenderPass->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkRenderPassInfo); } @@ -5270,19 +5422,19 @@ void VulkanReplayConsumer::Process_vkGetPhysicalDeviceSurfaceFormats2KHR( GFXRECON_LOG_DEBUG("Skip vkGetPhysicalDeviceSurfaceFormats2KHR for offscreen."); return; } - VkPhysicalDevice in_physicalDevice = MapHandle(physicalDevice, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); - const VkPhysicalDeviceSurfaceInfo2KHR* in_pSurfaceInfo = pSurfaceInfo->GetPointer(); + auto in_physicalDevice = GetObjectInfoTable().GetVkPhysicalDeviceInfo(physicalDevice); + MapStructHandles(pSurfaceInfo->GetMetaStructPointer(), GetObjectInfoTable()); if (pSurfaceInfo->GetPointer()->surface == VK_NULL_HANDLE) { return; } auto in_pSurfaceInfo_meta = pSurfaceInfo->GetMetaStructPointer(); if (GetObjectInfoTable().GetVkSurfaceKHRInfo(in_pSurfaceInfo_meta->surface) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(in_pSurfaceInfo_meta->surface)->surface_creation_skipped) { return; } - uint32_t* out_pSurfaceFormatCount = pSurfaceFormatCount->IsNull() ? nullptr : pSurfaceFormatCount->AllocateOutputData(1, GetOutputArrayCount("vkGetPhysicalDeviceSurfaceFormats2KHR", returnValue, physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceSurfaceFormats2KHR, pSurfaceFormatCount, pSurfaceFormats, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo)); - VkSurfaceFormat2KHR* out_pSurfaceFormats = pSurfaceFormats->IsNull() ? nullptr : pSurfaceFormats->AllocateOutputData(*out_pSurfaceFormatCount, VkSurfaceFormat2KHR{ VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR, nullptr }); + pSurfaceFormatCount->IsNull() ? nullptr : pSurfaceFormatCount->AllocateOutputData(1, GetOutputArrayCount("vkGetPhysicalDeviceSurfaceFormats2KHR", returnValue, physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceSurfaceFormats2KHR, pSurfaceFormatCount, pSurfaceFormats, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo)); + if (!pSurfaceFormats->IsNull()) { pSurfaceFormats->AllocateOutputData(*pSurfaceFormatCount->GetOutputPointer(), VkSurfaceFormat2KHR{ VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR, nullptr }); } - VkResult replay_result = GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceSurfaceFormats2KHR(in_physicalDevice, in_pSurfaceInfo, out_pSurfaceFormatCount, out_pSurfaceFormats); + VkResult replay_result = OverrideGetPhysicalDeviceSurfaceFormats2KHR(GetInstanceTable(in_physicalDevice->handle)->GetPhysicalDeviceSurfaceFormats2KHR, returnValue, in_physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats); CheckResult("vkGetPhysicalDeviceSurfaceFormats2KHR", returnValue, replay_result, call_info); - if (pSurfaceFormats->IsNull()) { SetOutputArrayCount(physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceSurfaceFormats2KHR, *out_pSurfaceFormatCount, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); } + if (pSurfaceFormats->IsNull()) { SetOutputArrayCount(physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceSurfaceFormats2KHR, *pSurfaceFormatCount->GetOutputPointer(), &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); } } void VulkanReplayConsumer::Process_vkGetPhysicalDeviceDisplayProperties2KHR( @@ -5296,8 +5448,10 @@ void VulkanReplayConsumer::Process_vkGetPhysicalDeviceDisplayProperties2KHR( uint32_t* out_pPropertyCount = pPropertyCount->IsNull() ? nullptr : pPropertyCount->AllocateOutputData(1, GetOutputArrayCount("vkGetPhysicalDeviceDisplayProperties2KHR", returnValue, physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceDisplayProperties2KHR, pPropertyCount, pProperties, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo)); VkDisplayProperties2KHR* out_pProperties = pProperties->IsNull() ? nullptr : pProperties->AllocateOutputData(*out_pPropertyCount, VkDisplayProperties2KHR{ VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR, nullptr }); + PushRecaptureStructArrayHandleIds(pProperties->GetMetaStructPointer(), pProperties->GetLength(), this); VkResult replay_result = GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceDisplayProperties2KHR(in_physicalDevice, out_pPropertyCount, out_pProperties); CheckResult("vkGetPhysicalDeviceDisplayProperties2KHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); if (pProperties->IsNull()) { SetOutputArrayCount(physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceDisplayProperties2KHR, *out_pPropertyCount, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); } AddStructArrayHandles(physicalDevice, pProperties->GetMetaStructPointer(), pProperties->GetLength(), out_pProperties, *out_pPropertyCount, &GetObjectInfoTable()); @@ -5314,8 +5468,10 @@ void VulkanReplayConsumer::Process_vkGetPhysicalDeviceDisplayPlaneProperties2KHR uint32_t* out_pPropertyCount = pPropertyCount->IsNull() ? nullptr : pPropertyCount->AllocateOutputData(1, GetOutputArrayCount("vkGetPhysicalDeviceDisplayPlaneProperties2KHR", returnValue, physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceDisplayPlaneProperties2KHR, pPropertyCount, pProperties, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo)); VkDisplayPlaneProperties2KHR* out_pProperties = pProperties->IsNull() ? nullptr : pProperties->AllocateOutputData(*out_pPropertyCount, VkDisplayPlaneProperties2KHR{ VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR, nullptr }); + PushRecaptureStructArrayHandleIds(pProperties->GetMetaStructPointer(), pProperties->GetLength(), this); VkResult replay_result = GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceDisplayPlaneProperties2KHR(in_physicalDevice, out_pPropertyCount, out_pProperties); CheckResult("vkGetPhysicalDeviceDisplayPlaneProperties2KHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); if (pProperties->IsNull()) { SetOutputArrayCount(physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceDisplayPlaneProperties2KHR, *out_pPropertyCount, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); } AddStructArrayHandles(physicalDevice, pProperties->GetMetaStructPointer(), pProperties->GetLength(), out_pProperties, *out_pPropertyCount, &GetObjectInfoTable()); @@ -5334,8 +5490,10 @@ void VulkanReplayConsumer::Process_vkGetDisplayModeProperties2KHR( uint32_t* out_pPropertyCount = pPropertyCount->IsNull() ? nullptr : pPropertyCount->AllocateOutputData(1, GetOutputArrayCount("vkGetDisplayModeProperties2KHR", returnValue, display, kDisplayKHRArrayGetDisplayModeProperties2KHR, pPropertyCount, pProperties, &CommonObjectInfoTable::GetVkDisplayKHRInfo)); VkDisplayModeProperties2KHR* out_pProperties = pProperties->IsNull() ? nullptr : pProperties->AllocateOutputData(*out_pPropertyCount, VkDisplayModeProperties2KHR{ VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR, nullptr }); + PushRecaptureStructArrayHandleIds(pProperties->GetMetaStructPointer(), pProperties->GetLength(), this); VkResult replay_result = GetInstanceTable(in_physicalDevice)->GetDisplayModeProperties2KHR(in_physicalDevice, in_display, out_pPropertyCount, out_pProperties); CheckResult("vkGetDisplayModeProperties2KHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); if (pProperties->IsNull()) { SetOutputArrayCount(display, kDisplayKHRArrayGetDisplayModeProperties2KHR, *out_pPropertyCount, &CommonObjectInfoTable::GetVkDisplayKHRInfo); } AddStructArrayHandles(physicalDevice, pProperties->GetMetaStructPointer(), pProperties->GetLength(), out_pProperties, *out_pPropertyCount, &GetObjectInfoTable()); @@ -5419,8 +5577,10 @@ void VulkanReplayConsumer::Process_vkCreateSamplerYcbcrConversionKHR( VulkanSamplerYcbcrConversionInfo handle_info; pYcbcrConversion->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pYcbcrConversion->GetPointer()); VkResult replay_result = OverrideCreateSamplerYcbcrConversionKHR(GetDeviceTable(in_device->handle)->CreateSamplerYcbcrConversionKHR, returnValue, in_device, pCreateInfo, pAllocator, pYcbcrConversion); CheckResult("vkCreateSamplerYcbcrConversionKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pYcbcrConversion->GetPointer(), pYcbcrConversion->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkSamplerYcbcrConversionInfo); } @@ -5691,11 +5851,11 @@ void VulkanReplayConsumer::Process_vkGetDeviceMemoryOpaqueCaptureAddressKHR( format::HandleId device, StructPointerDecoder* pInfo) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkDeviceMemoryOpaqueCaptureAddressInfo* in_pInfo = pInfo->GetPointer(); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); - GetDeviceTable(in_device)->GetDeviceMemoryOpaqueCaptureAddressKHR(in_device, in_pInfo); + OverrideGetDeviceMemoryOpaqueCaptureAddress(GetDeviceTable(in_device->handle)->GetDeviceMemoryOpaqueCaptureAddressKHR, in_device, pInfo); } void VulkanReplayConsumer::Process_vkCreateDeferredOperationKHR( @@ -5710,8 +5870,10 @@ void VulkanReplayConsumer::Process_vkCreateDeferredOperationKHR( if (!pDeferredOperation->IsNull()) { pDeferredOperation->SetHandleLength(1); } VkDeferredOperationKHR* out_pDeferredOperation = pDeferredOperation->GetHandlePointer(); + PushRecaptureHandleId(pDeferredOperation->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->CreateDeferredOperationKHR(in_device, in_pAllocator, out_pDeferredOperation); CheckResult("vkCreateDeferredOperationKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pDeferredOperation->GetPointer(), out_pDeferredOperation, &CommonObjectInfoTable::AddVkDeferredOperationKHRInfo); } @@ -5835,12 +5997,12 @@ void VulkanReplayConsumer::Process_vkMapMemory2KHR( StructPointerDecoder* pMemoryMapInfo, PointerDecoder* ppData) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkMemoryMapInfo* in_pMemoryMapInfo = pMemoryMapInfo->GetPointer(); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + MapStructHandles(pMemoryMapInfo->GetMetaStructPointer(), GetObjectInfoTable()); void** out_ppData = ppData->IsNull() ? nullptr : ppData->AllocateOutputData(1); - VkResult replay_result = GetDeviceTable(in_device)->MapMemory2KHR(in_device, in_pMemoryMapInfo, out_ppData); + VkResult replay_result = OverrideMapMemory2(GetDeviceTable(in_device->handle)->MapMemory2KHR, returnValue, in_device, pMemoryMapInfo, out_ppData); CheckResult("vkMapMemory2KHR", returnValue, replay_result, call_info); PostProcessExternalObject(replay_result, (*ppData->GetPointer()), *ppData->GetOutputPointer(), format::ApiCallId::ApiCall_vkMapMemory2KHR, "vkMapMemory2KHR"); @@ -5852,11 +6014,11 @@ void VulkanReplayConsumer::Process_vkUnmapMemory2KHR( format::HandleId device, StructPointerDecoder* pMemoryUnmapInfo) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkMemoryUnmapInfo* in_pMemoryUnmapInfo = pMemoryUnmapInfo->GetPointer(); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + MapStructHandles(pMemoryUnmapInfo->GetMetaStructPointer(), GetObjectInfoTable()); - VkResult replay_result = GetDeviceTable(in_device)->UnmapMemory2KHR(in_device, in_pMemoryUnmapInfo); + VkResult replay_result = OverrideUnmapMemory2(GetDeviceTable(in_device->handle)->UnmapMemory2KHR, returnValue, in_device, pMemoryUnmapInfo); CheckResult("vkUnmapMemory2KHR", returnValue, replay_result, call_info); } @@ -6033,11 +6195,16 @@ void VulkanReplayConsumer::Process_vkCmdCopyBuffer2KHR( const VkCopyBufferInfo2* in_pCopyBufferInfo = pCopyBufferInfo->GetPointer(); MapStructHandles(pCopyBufferInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdCopyBuffer2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBuffer2KHR, in_commandBuffer, pCopyBufferInfo, true); + } + GetDeviceTable(in_commandBuffer)->CmdCopyBuffer2KHR(in_commandBuffer, in_pCopyBufferInfo); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdCopyBuffer2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBuffer2KHR, in_commandBuffer, in_pCopyBufferInfo); + resource_dumper_->Process_vkCmdCopyBuffer2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBuffer2KHR, in_commandBuffer, pCopyBufferInfo, false); } } @@ -6050,11 +6217,16 @@ void VulkanReplayConsumer::Process_vkCmdCopyImage2KHR( const VkCopyImageInfo2* in_pCopyImageInfo = pCopyImageInfo->GetPointer(); MapStructHandles(pCopyImageInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdCopyImage2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImage2KHR, in_commandBuffer, pCopyImageInfo, true); + } + GetDeviceTable(in_commandBuffer)->CmdCopyImage2KHR(in_commandBuffer, in_pCopyImageInfo); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdCopyImage2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImage2KHR, in_commandBuffer, in_pCopyImageInfo); + resource_dumper_->Process_vkCmdCopyImage2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImage2KHR, in_commandBuffer, pCopyImageInfo, false); } } @@ -6067,11 +6239,16 @@ void VulkanReplayConsumer::Process_vkCmdCopyBufferToImage2KHR( const VkCopyBufferToImageInfo2* in_pCopyBufferToImageInfo = pCopyBufferToImageInfo->GetPointer(); MapStructHandles(pCopyBufferToImageInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdCopyBufferToImage2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBufferToImage2KHR, in_commandBuffer, pCopyBufferToImageInfo, true); + } + GetDeviceTable(in_commandBuffer)->CmdCopyBufferToImage2KHR(in_commandBuffer, in_pCopyBufferToImageInfo); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdCopyBufferToImage2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBufferToImage2KHR, in_commandBuffer, in_pCopyBufferToImageInfo); + resource_dumper_->Process_vkCmdCopyBufferToImage2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyBufferToImage2KHR, in_commandBuffer, pCopyBufferToImageInfo, false); } } @@ -6084,11 +6261,16 @@ void VulkanReplayConsumer::Process_vkCmdCopyImageToBuffer2KHR( const VkCopyImageToBufferInfo2* in_pCopyImageToBufferInfo = pCopyImageToBufferInfo->GetPointer(); MapStructHandles(pCopyImageToBufferInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdCopyImageToBuffer2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImageToBuffer2KHR, in_commandBuffer, pCopyImageToBufferInfo, true); + } + GetDeviceTable(in_commandBuffer)->CmdCopyImageToBuffer2KHR(in_commandBuffer, in_pCopyImageToBufferInfo); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdCopyImageToBuffer2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImageToBuffer2KHR, in_commandBuffer, in_pCopyImageToBufferInfo); + resource_dumper_->Process_vkCmdCopyImageToBuffer2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyImageToBuffer2KHR, in_commandBuffer, pCopyImageToBufferInfo, false); } } @@ -6101,11 +6283,16 @@ void VulkanReplayConsumer::Process_vkCmdBlitImage2KHR( const VkBlitImageInfo2* in_pBlitImageInfo = pBlitImageInfo->GetPointer(); MapStructHandles(pBlitImageInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdBlitImage2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdBlitImage2KHR, in_commandBuffer, pBlitImageInfo, true); + } + GetDeviceTable(in_commandBuffer)->CmdBlitImage2KHR(in_commandBuffer, in_pBlitImageInfo); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdBlitImage2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdBlitImage2KHR, in_commandBuffer, in_pBlitImageInfo); + resource_dumper_->Process_vkCmdBlitImage2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdBlitImage2KHR, in_commandBuffer, pBlitImageInfo, false); } } @@ -6288,8 +6475,10 @@ void VulkanReplayConsumer::Process_vkCreatePipelineBinariesKHR( VkPipelineBinaryHandlesInfoKHR* out_pBinaries = pBinaries->IsNull() ? nullptr : pBinaries->AllocateOutputData(1, { VK_STRUCTURE_TYPE_PIPELINE_BINARY_HANDLES_INFO_KHR, nullptr }); InitializeOutputStructPNext(pBinaries); + PushRecaptureStructHandleIds(pBinaries->GetMetaStructPointer(), this); VkResult replay_result = GetDeviceTable(in_device)->CreatePipelineBinariesKHR(in_device, in_pCreateInfo, in_pAllocator, out_pBinaries); CheckResult("vkCreatePipelineBinariesKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddStructHandles(device, pBinaries->GetMetaStructPointer(), out_pBinaries, &GetObjectInfoTable()); } @@ -6443,6 +6632,7 @@ void VulkanReplayConsumer::Process_vkGetCalibratedTimestampsKHR( { VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); const VkCalibratedTimestampInfoKHR* in_pTimestampInfos = pTimestampInfos->GetPointer(); + MapStructArrayHandles(pTimestampInfos->GetMetaStructPointer(), pTimestampInfos->GetLength(), GetObjectInfoTable()); uint64_t* out_pTimestamps = pTimestamps->IsNull() ? nullptr : pTimestamps->AllocateOutputData(timestampCount); uint64_t* out_pMaxDeviation = pMaxDeviation->IsNull() ? nullptr : pMaxDeviation->AllocateOutputData(1, static_cast(0)); @@ -6463,7 +6653,7 @@ void VulkanReplayConsumer::Process_vkCmdBindDescriptorSets2KHR( if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdBindDescriptorSets2KHR(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdBindDescriptorSets2KHR, in_commandBuffer->handle, pBindDescriptorSetsInfo->GetPointer()); + resource_dumper_->Process_vkCmdBindDescriptorSets2KHR(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdBindDescriptorSets2KHR, in_commandBuffer->handle, pBindDescriptorSetsInfo); } } @@ -6535,6 +6725,55 @@ void VulkanReplayConsumer::Process_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT } } +void VulkanReplayConsumer::Process_vkCmdCopyMemoryIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryIndirectInfo) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + const VkCopyMemoryIndirectInfoKHR* in_pCopyMemoryIndirectInfo = pCopyMemoryIndirectInfo->GetPointer(); + + GetDeviceTable(in_commandBuffer)->CmdCopyMemoryIndirectKHR(in_commandBuffer, in_pCopyMemoryIndirectInfo); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdCopyMemoryIndirectKHR(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyMemoryIndirectKHR, in_commandBuffer, in_pCopyMemoryIndirectInfo); + } +} + +void VulkanReplayConsumer::Process_vkCmdCopyMemoryToImageIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryToImageIndirectInfo) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + const VkCopyMemoryToImageIndirectInfoKHR* in_pCopyMemoryToImageIndirectInfo = pCopyMemoryToImageIndirectInfo->GetPointer(); + MapStructHandles(pCopyMemoryToImageIndirectInfo->GetMetaStructPointer(), GetObjectInfoTable()); + + GetDeviceTable(in_commandBuffer)->CmdCopyMemoryToImageIndirectKHR(in_commandBuffer, in_pCopyMemoryToImageIndirectInfo); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdCopyMemoryToImageIndirectKHR(call_info, GetDeviceTable(in_commandBuffer)->CmdCopyMemoryToImageIndirectKHR, in_commandBuffer, in_pCopyMemoryToImageIndirectInfo); + } +} + +void VulkanReplayConsumer::Process_vkCmdEndRendering2KHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pRenderingEndInfo) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + const VkRenderingEndInfoKHR* in_pRenderingEndInfo = pRenderingEndInfo->GetPointer(); + + GetDeviceTable(in_commandBuffer)->CmdEndRendering2KHR(in_commandBuffer, in_pRenderingEndInfo); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdEndRendering2KHR(call_info, GetDeviceTable(in_commandBuffer)->CmdEndRendering2KHR, in_commandBuffer, in_pRenderingEndInfo); + } +} + void VulkanReplayConsumer::Process_vkFrameBoundaryANDROID( const ApiCallInfo& call_info, format::HandleId device, @@ -6561,8 +6800,10 @@ void VulkanReplayConsumer::Process_vkCreateDebugReportCallbackEXT( VulkanDebugReportCallbackEXTInfo handle_info; pCallback->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pCallback->GetPointer()); VkResult replay_result = OverrideCreateDebugReportCallbackEXT(GetInstanceTable(in_instance->handle)->CreateDebugReportCallbackEXT, returnValue, in_instance, pCreateInfo, pAllocator, pCallback); CheckResult("vkCreateDebugReportCallbackEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pCallback->GetPointer(), pCallback->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkDebugReportCallbackEXTInfo); } @@ -6914,8 +7155,10 @@ void VulkanReplayConsumer::Process_vkCreateStreamDescriptorSurfaceGGP( if (!pSurface->IsNull()) { pSurface->SetHandleLength(1); } VkSurfaceKHR* out_pSurface = pSurface->GetHandlePointer(); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = GetInstanceTable(in_instance)->CreateStreamDescriptorSurfaceGGP(in_instance, in_pCreateInfo, in_pAllocator, out_pSurface); CheckResult("vkCreateStreamDescriptorSurfaceGGP", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), out_pSurface, &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -6971,8 +7214,10 @@ void VulkanReplayConsumer::Process_vkCreateViSurfaceNN( if (!pSurface->IsNull()) { pSurface->SetHandleLength(1); } VkSurfaceKHR* out_pSurface = pSurface->GetHandlePointer(); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = GetInstanceTable(in_instance)->CreateViSurfaceNN(in_instance, in_pCreateInfo, in_pAllocator, out_pSurface); CheckResult("vkCreateViSurfaceNN", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), out_pSurface, &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -7068,8 +7313,10 @@ void VulkanReplayConsumer::Process_vkGetRandROutputDisplayEXT( VulkanDisplayKHRInfo handle_info; pDisplay->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pDisplay->GetPointer()); VkResult replay_result = OverrideGetRandROutputDisplayEXT(GetInstanceTable(in_physicalDevice->handle)->GetRandROutputDisplayEXT, returnValue, in_physicalDevice, in_dpy, rrOutput, pDisplay); CheckResult("vkGetRandROutputDisplayEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(physicalDevice, pDisplay->GetPointer(), pDisplay->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkDisplayKHRInfo); } @@ -7125,8 +7372,10 @@ void VulkanReplayConsumer::Process_vkRegisterDeviceEventEXT( if (!pFence->IsNull()) { pFence->SetHandleLength(1); } VkFence* out_pFence = pFence->GetHandlePointer(); + PushRecaptureHandleId(pFence->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->RegisterDeviceEventEXT(in_device, in_pDeviceEventInfo, in_pAllocator, out_pFence); CheckResult("vkRegisterDeviceEventEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pFence->GetPointer(), out_pFence, &CommonObjectInfoTable::AddVkFenceInfo); } @@ -7147,8 +7396,10 @@ void VulkanReplayConsumer::Process_vkRegisterDisplayEventEXT( if (!pFence->IsNull()) { pFence->SetHandleLength(1); } VkFence* out_pFence = pFence->GetHandlePointer(); + PushRecaptureHandleId(pFence->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->RegisterDisplayEventEXT(in_device, in_display, in_pDisplayEventInfo, in_pAllocator, out_pFence); CheckResult("vkRegisterDisplayEventEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pFence->GetPointer(), out_pFence, &CommonObjectInfoTable::AddVkFenceInfo); } @@ -7187,12 +7438,11 @@ void VulkanReplayConsumer::Process_vkGetRefreshCycleDurationGOOGLE( GFXRECON_LOG_DEBUG("Skip vkGetRefreshCycleDurationGOOGLE for offscreen."); return; } - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkSwapchainKHR in_swapchain = MapHandle(swapchain, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); - if (GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id)->surface_creation_skipped) { return; } - VkRefreshCycleDurationGOOGLE* out_pDisplayTimingProperties = pDisplayTimingProperties->IsNull() ? nullptr : pDisplayTimingProperties->AllocateOutputData(1); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + auto in_swapchain = GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain); + pDisplayTimingProperties->IsNull() ? nullptr : pDisplayTimingProperties->AllocateOutputData(1); - VkResult replay_result = GetDeviceTable(in_device)->GetRefreshCycleDurationGOOGLE(in_device, in_swapchain, out_pDisplayTimingProperties); + VkResult replay_result = OverrideGetRefreshCycleDurationGOOGLE(GetDeviceTable(in_device->handle)->GetRefreshCycleDurationGOOGLE, returnValue, in_device, in_swapchain, pDisplayTimingProperties); CheckResult("vkGetRefreshCycleDurationGOOGLE", returnValue, replay_result, call_info); } @@ -7209,16 +7459,15 @@ void VulkanReplayConsumer::Process_vkGetPastPresentationTimingGOOGLE( GFXRECON_LOG_DEBUG("Skip vkGetPastPresentationTimingGOOGLE for offscreen."); return; } - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkSwapchainKHR in_swapchain = MapHandle(swapchain, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); - if (GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id)->surface_creation_skipped) { return; } - uint32_t* out_pPresentationTimingCount = pPresentationTimingCount->IsNull() ? nullptr : pPresentationTimingCount->AllocateOutputData(1, GetOutputArrayCount("vkGetPastPresentationTimingGOOGLE", returnValue, swapchain, kSwapchainKHRArrayGetPastPresentationTimingGOOGLE, pPresentationTimingCount, pPresentationTimings, &CommonObjectInfoTable::GetVkSwapchainKHRInfo)); - VkPastPresentationTimingGOOGLE* out_pPresentationTimings = pPresentationTimings->IsNull() ? nullptr : pPresentationTimings->AllocateOutputData(*out_pPresentationTimingCount); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + auto in_swapchain = GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain); + pPresentationTimingCount->IsNull() ? nullptr : pPresentationTimingCount->AllocateOutputData(1, GetOutputArrayCount("vkGetPastPresentationTimingGOOGLE", returnValue, swapchain, kSwapchainKHRArrayGetPastPresentationTimingGOOGLE, pPresentationTimingCount, pPresentationTimings, &CommonObjectInfoTable::GetVkSwapchainKHRInfo)); + if (!pPresentationTimings->IsNull()) { pPresentationTimings->AllocateOutputData(*pPresentationTimingCount->GetOutputPointer()); } - VkResult replay_result = GetDeviceTable(in_device)->GetPastPresentationTimingGOOGLE(in_device, in_swapchain, out_pPresentationTimingCount, out_pPresentationTimings); + VkResult replay_result = OverrideGetPastPresentationTimingGOOGLE(GetDeviceTable(in_device->handle)->GetPastPresentationTimingGOOGLE, returnValue, in_device, in_swapchain, pPresentationTimingCount, pPresentationTimings); CheckResult("vkGetPastPresentationTimingGOOGLE", returnValue, replay_result, call_info); - if (pPresentationTimings->IsNull()) { SetOutputArrayCount(swapchain, kSwapchainKHRArrayGetPastPresentationTimingGOOGLE, *out_pPresentationTimingCount, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); } + if (pPresentationTimings->IsNull()) { SetOutputArrayCount(swapchain, kSwapchainKHRArrayGetPastPresentationTimingGOOGLE, *pPresentationTimingCount->GetOutputPointer(), &CommonObjectInfoTable::GetVkSwapchainKHRInfo); } } void VulkanReplayConsumer::Process_vkCmdSetDiscardRectangleEXT( @@ -7302,8 +7551,10 @@ void VulkanReplayConsumer::Process_vkCreateIOSSurfaceMVK( if (!pSurface->IsNull()) { pSurface->SetHandleLength(1); } VkSurfaceKHR* out_pSurface = pSurface->GetHandlePointer(); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = GetInstanceTable(in_instance)->CreateIOSSurfaceMVK(in_instance, in_pCreateInfo, in_pAllocator, out_pSurface); CheckResult("vkCreateIOSSurfaceMVK", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), out_pSurface, &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -7322,8 +7573,10 @@ void VulkanReplayConsumer::Process_vkCreateMacOSSurfaceMVK( if (!pSurface->IsNull()) { pSurface->SetHandleLength(1); } VkSurfaceKHR* out_pSurface = pSurface->GetHandlePointer(); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = GetInstanceTable(in_instance)->CreateMacOSSurfaceMVK(in_instance, in_pCreateInfo, in_pAllocator, out_pSurface); CheckResult("vkCreateMacOSSurfaceMVK", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), out_pSurface, &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -7336,7 +7589,6 @@ void VulkanReplayConsumer::Process_vkSetDebugUtilsObjectNameEXT( { auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - MapStructHandles(pNameInfo->GetMetaStructPointer(), GetObjectInfoTable()); VulkanDeviceInfo* device_info = GetObjectInfoTable().GetVkDeviceInfo(device); VkPhysicalDevice physical_device = device_info->parent; @@ -7449,8 +7701,10 @@ void VulkanReplayConsumer::Process_vkCreateDebugUtilsMessengerEXT( VulkanDebugUtilsMessengerEXTInfo handle_info; pMessenger->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pMessenger->GetPointer()); VkResult replay_result = OverrideCreateDebugUtilsMessengerEXT(GetInstanceTable(in_instance->handle)->CreateDebugUtilsMessengerEXT, returnValue, in_instance, pCreateInfo, pAllocator, pMessenger); CheckResult("vkCreateDebugUtilsMessengerEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pMessenger->GetPointer(), pMessenger->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkDebugUtilsMessengerEXTInfo); } @@ -7575,8 +7829,10 @@ void VulkanReplayConsumer::Process_vkCreateValidationCacheEXT( if (!pValidationCache->IsNull()) { pValidationCache->SetHandleLength(1); } VkValidationCacheEXT* out_pValidationCache = pValidationCache->GetHandlePointer(); + PushRecaptureHandleId(pValidationCache->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->CreateValidationCacheEXT(in_device, in_pCreateInfo, in_pAllocator, out_pValidationCache); CheckResult("vkCreateValidationCacheEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pValidationCache->GetPointer(), out_pValidationCache, &CommonObjectInfoTable::AddVkValidationCacheEXTInfo); } @@ -7691,17 +7947,19 @@ void VulkanReplayConsumer::Process_vkCreateAccelerationStructureNV( StructPointerDecoder* pAllocator, HandlePointerDecoder* pAccelerationStructure) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkAccelerationStructureCreateInfoNV* in_pCreateInfo = pCreateInfo->GetPointer(); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); - const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); if (!pAccelerationStructure->IsNull()) { pAccelerationStructure->SetHandleLength(1); } - VkAccelerationStructureNV* out_pAccelerationStructure = pAccelerationStructure->GetHandlePointer(); + VulkanAccelerationStructureNVInfo handle_info; + pAccelerationStructure->SetConsumerData(0, &handle_info); - VkResult replay_result = GetDeviceTable(in_device)->CreateAccelerationStructureNV(in_device, in_pCreateInfo, in_pAllocator, out_pAccelerationStructure); + PushRecaptureHandleId(pAccelerationStructure->GetPointer()); + VkResult replay_result = OverrideCreateAccelerationStructureNV(GetDeviceTable(in_device->handle)->CreateAccelerationStructureNV, returnValue, in_device, pCreateInfo, pAllocator, pAccelerationStructure); CheckResult("vkCreateAccelerationStructureNV", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); - AddHandle(device, pAccelerationStructure->GetPointer(), out_pAccelerationStructure, &CommonObjectInfoTable::AddVkAccelerationStructureNVInfo); + AddHandle(device, pAccelerationStructure->GetPointer(), pAccelerationStructure->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkAccelerationStructureNVInfo); } void VulkanReplayConsumer::Process_vkDestroyAccelerationStructureNV( @@ -7710,11 +7968,10 @@ void VulkanReplayConsumer::Process_vkDestroyAccelerationStructureNV( format::HandleId accelerationStructure, StructPointerDecoder* pAllocator) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkAccelerationStructureNV in_accelerationStructure = MapHandle(accelerationStructure, &CommonObjectInfoTable::GetVkAccelerationStructureNVInfo); - const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + auto in_accelerationStructure = GetObjectInfoTable().GetVkAccelerationStructureNVInfo(accelerationStructure); - GetDeviceTable(in_device)->DestroyAccelerationStructureNV(in_device, in_accelerationStructure, in_pAllocator); + OverrideDestroyAccelerationStructureNV(GetDeviceTable(in_device->handle)->DestroyAccelerationStructureNV, in_device, in_accelerationStructure, pAllocator); RemoveHandle(accelerationStructure, &CommonObjectInfoTable::RemoveVkAccelerationStructureNVInfo); } @@ -7724,12 +7981,12 @@ void VulkanReplayConsumer::Process_vkGetAccelerationStructureMemoryRequirementsN StructPointerDecoder* pInfo, StructPointerDecoder* pMemoryRequirements) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkAccelerationStructureMemoryRequirementsInfoNV* in_pInfo = pInfo->GetPointer(); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); - VkMemoryRequirements2KHR* out_pMemoryRequirements = pMemoryRequirements->IsNull() ? nullptr : pMemoryRequirements->AllocateOutputData(1); + pMemoryRequirements->IsNull() ? nullptr : pMemoryRequirements->AllocateOutputData(1); - GetDeviceTable(in_device)->GetAccelerationStructureMemoryRequirementsNV(in_device, in_pInfo, out_pMemoryRequirements); + OverrideGetAccelerationStructureMemoryRequirementsNV(GetDeviceTable(in_device->handle)->GetAccelerationStructureMemoryRequirementsNV, in_device, pInfo, pMemoryRequirements); } void VulkanReplayConsumer::Process_vkBindAccelerationStructureMemoryNV( @@ -7739,11 +7996,11 @@ void VulkanReplayConsumer::Process_vkBindAccelerationStructureMemoryNV( uint32_t bindInfoCount, StructPointerDecoder* pBindInfos) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkBindAccelerationStructureMemoryInfoNV* in_pBindInfos = pBindInfos->GetPointer(); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + MapStructArrayHandles(pBindInfos->GetMetaStructPointer(), pBindInfos->GetLength(), GetObjectInfoTable()); - VkResult replay_result = GetDeviceTable(in_device)->BindAccelerationStructureMemoryNV(in_device, bindInfoCount, in_pBindInfos); + VkResult replay_result = OverrideBindAccelerationStructureMemoryNV(GetDeviceTable(in_device->handle)->BindAccelerationStructureMemoryNV, returnValue, in_device, bindInfoCount, pBindInfos); CheckResult("vkBindAccelerationStructureMemoryNV", returnValue, replay_result, call_info); } @@ -7845,8 +8102,10 @@ void VulkanReplayConsumer::Process_vkCreateRayTracingPipelinesNV( std::vector handle_info(createInfoCount); for (size_t i = 0; i < createInfoCount; ++i) { pPipelines->SetConsumerData(i, &handle_info[i]); } + PushRecaptureHandleIds(pPipelines->GetPointer(), pPipelines->GetLength()); VkResult replay_result = OverrideCreateRayTracingPipelinesNV(GetDeviceTable(in_device->handle)->CreateRayTracingPipelinesNV, returnValue, in_device, in_pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); CheckResult("vkCreateRayTracingPipelinesNV", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandles(device, pPipelines->GetPointer(), pPipelines->GetLength(), pPipelines->GetHandlePointer(), createInfoCount, std::move(handle_info), &CommonObjectInfoTable::AddVkPipelineInfo); } @@ -8021,6 +8280,7 @@ void VulkanReplayConsumer::Process_vkGetCalibratedTimestampsEXT( { VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); const VkCalibratedTimestampInfoKHR* in_pTimestampInfos = pTimestampInfos->GetPointer(); + MapStructArrayHandles(pTimestampInfos->GetMetaStructPointer(), pTimestampInfos->GetLength(), GetObjectInfoTable()); uint64_t* out_pTimestamps = pTimestamps->IsNull() ? nullptr : pTimestamps->AllocateOutputData(timestampCount); uint64_t* out_pMaxDeviation = pMaxDeviation->IsNull() ? nullptr : pMaxDeviation->AllocateOutputData(1, static_cast(0)); @@ -8167,6 +8427,96 @@ void VulkanReplayConsumer::Process_vkGetQueueCheckpointData2NV( if (pCheckpointData->IsNull()) { SetOutputArrayCount(queue, kQueueArrayGetQueueCheckpointData2NV, *out_pCheckpointDataCount, &CommonObjectInfoTable::GetVkQueueInfo); } } +void VulkanReplayConsumer::Process_vkSetSwapchainPresentTimingQueueSizeEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + uint32_t size) +{ + if (options_.swapchain_option == util::SwapchainOption::kOffscreen) + { + GFXRECON_LOG_DEBUG("Skip vkSetSwapchainPresentTimingQueueSizeEXT for offscreen."); + return; + } + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkSwapchainKHR in_swapchain = MapHandle(swapchain, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); + if (GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id)->surface_creation_skipped) { return; } + + VkResult replay_result = GetDeviceTable(in_device)->SetSwapchainPresentTimingQueueSizeEXT(in_device, in_swapchain, size); + CheckResult("vkSetSwapchainPresentTimingQueueSizeEXT", returnValue, replay_result, call_info); +} + +void VulkanReplayConsumer::Process_vkGetSwapchainTimingPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimingProperties, + PointerDecoder* pSwapchainTimingPropertiesCounter) +{ + if (options_.swapchain_option == util::SwapchainOption::kOffscreen) + { + GFXRECON_LOG_DEBUG("Skip vkGetSwapchainTimingPropertiesEXT for offscreen."); + return; + } + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkSwapchainKHR in_swapchain = MapHandle(swapchain, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); + if (GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id)->surface_creation_skipped) { return; } + VkSwapchainTimingPropertiesEXT* out_pSwapchainTimingProperties = pSwapchainTimingProperties->IsNull() ? nullptr : pSwapchainTimingProperties->AllocateOutputData(1, { VK_STRUCTURE_TYPE_SWAPCHAIN_TIMING_PROPERTIES_EXT, nullptr }); + InitializeOutputStructPNext(pSwapchainTimingProperties); + uint64_t* out_pSwapchainTimingPropertiesCounter = pSwapchainTimingPropertiesCounter->IsNull() ? nullptr : pSwapchainTimingPropertiesCounter->AllocateOutputData(1, static_cast(0)); + + VkResult replay_result = GetDeviceTable(in_device)->GetSwapchainTimingPropertiesEXT(in_device, in_swapchain, out_pSwapchainTimingProperties, out_pSwapchainTimingPropertiesCounter); + CheckResult("vkGetSwapchainTimingPropertiesEXT", returnValue, replay_result, call_info); +} + +void VulkanReplayConsumer::Process_vkGetSwapchainTimeDomainPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimeDomainProperties, + PointerDecoder* pTimeDomainsCounter) +{ + if (options_.swapchain_option == util::SwapchainOption::kOffscreen) + { + GFXRECON_LOG_DEBUG("Skip vkGetSwapchainTimeDomainPropertiesEXT for offscreen."); + return; + } + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkSwapchainKHR in_swapchain = MapHandle(swapchain, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); + if (GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id)->surface_creation_skipped) { return; } + VkSwapchainTimeDomainPropertiesEXT* out_pSwapchainTimeDomainProperties = pSwapchainTimeDomainProperties->IsNull() ? nullptr : pSwapchainTimeDomainProperties->AllocateOutputData(1, { VK_STRUCTURE_TYPE_SWAPCHAIN_TIME_DOMAIN_PROPERTIES_EXT, nullptr }); + InitializeOutputStructPNext(pSwapchainTimeDomainProperties); + uint64_t* out_pTimeDomainsCounter = pTimeDomainsCounter->IsNull() ? nullptr : pTimeDomainsCounter->AllocateOutputData(1, static_cast(0)); + + VkResult replay_result = GetDeviceTable(in_device)->GetSwapchainTimeDomainPropertiesEXT(in_device, in_swapchain, out_pSwapchainTimeDomainProperties, out_pTimeDomainsCounter); + CheckResult("vkGetSwapchainTimeDomainPropertiesEXT", returnValue, replay_result, call_info); +} + +void VulkanReplayConsumer::Process_vkGetPastPresentationTimingEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPastPresentationTimingInfo, + StructPointerDecoder* pPastPresentationTimingProperties) +{ + if (options_.swapchain_option == util::SwapchainOption::kOffscreen) + { + GFXRECON_LOG_DEBUG("Skip vkGetPastPresentationTimingEXT for offscreen."); + return; + } + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkPastPresentationTimingInfoEXT* in_pPastPresentationTimingInfo = pPastPresentationTimingInfo->GetPointer(); + MapStructHandles(pPastPresentationTimingInfo->GetMetaStructPointer(), GetObjectInfoTable()); + VkPastPresentationTimingPropertiesEXT* out_pPastPresentationTimingProperties = pPastPresentationTimingProperties->IsNull() ? nullptr : pPastPresentationTimingProperties->AllocateOutputData(1, { VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_PROPERTIES_EXT, nullptr }); + InitializeOutputStructPNext(pPastPresentationTimingProperties); + + VkResult replay_result = GetDeviceTable(in_device)->GetPastPresentationTimingEXT(in_device, in_pPastPresentationTimingInfo, out_pPastPresentationTimingProperties); + CheckResult("vkGetPastPresentationTimingEXT", returnValue, replay_result, call_info); +} + void VulkanReplayConsumer::Process_vkInitializePerformanceApiINTEL( const ApiCallInfo& call_info, VkResult returnValue, @@ -8255,8 +8605,10 @@ void VulkanReplayConsumer::Process_vkAcquirePerformanceConfigurationINTEL( if (!pConfiguration->IsNull()) { pConfiguration->SetHandleLength(1); } VkPerformanceConfigurationINTEL* out_pConfiguration = pConfiguration->GetHandlePointer(); + PushRecaptureHandleId(pConfiguration->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->AcquirePerformanceConfigurationINTEL(in_device, in_pAcquireInfo, out_pConfiguration); CheckResult("vkAcquirePerformanceConfigurationINTEL", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pConfiguration->GetPointer(), out_pConfiguration, &CommonObjectInfoTable::AddVkPerformanceConfigurationINTELInfo); } @@ -8333,8 +8685,10 @@ void VulkanReplayConsumer::Process_vkCreateImagePipeSurfaceFUCHSIA( if (!pSurface->IsNull()) { pSurface->SetHandleLength(1); } VkSurfaceKHR* out_pSurface = pSurface->GetHandlePointer(); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = GetInstanceTable(in_instance)->CreateImagePipeSurfaceFUCHSIA(in_instance, in_pCreateInfo, in_pAllocator, out_pSurface); CheckResult("vkCreateImagePipeSurfaceFUCHSIA", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), out_pSurface, &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -8352,8 +8706,10 @@ void VulkanReplayConsumer::Process_vkCreateMetalSurfaceEXT( VulkanSurfaceKHRInfo handle_info; pSurface->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = OverrideCreateMetalSurfaceEXT(GetInstanceTable(in_instance->handle)->CreateMetalSurfaceEXT, returnValue, in_instance, pCreateInfo, pAllocator, pSurface); CheckResult("vkCreateMetalSurfaceEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), pSurface->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -8525,8 +8881,10 @@ void VulkanReplayConsumer::Process_vkCreateHeadlessSurfaceEXT( VulkanSurfaceKHRInfo handle_info; pSurface->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = OverrideCreateHeadlessSurfaceEXT(GetInstanceTable(in_instance->handle)->CreateHeadlessSurfaceEXT, returnValue, in_instance, pCreateInfo, pAllocator, pSurface); CheckResult("vkCreateHeadlessSurfaceEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), pSurface->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -8932,8 +9290,10 @@ void VulkanReplayConsumer::Process_vkCreateIndirectCommandsLayoutNV( if (!pIndirectCommandsLayout->IsNull()) { pIndirectCommandsLayout->SetHandleLength(1); } VkIndirectCommandsLayoutNV* out_pIndirectCommandsLayout = pIndirectCommandsLayout->GetHandlePointer(); + PushRecaptureHandleId(pIndirectCommandsLayout->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->CreateIndirectCommandsLayoutNV(in_device, in_pCreateInfo, in_pAllocator, out_pIndirectCommandsLayout); CheckResult("vkCreateIndirectCommandsLayoutNV", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pIndirectCommandsLayout->GetPointer(), out_pIndirectCommandsLayout, &CommonObjectInfoTable::AddVkIndirectCommandsLayoutNVInfo); } @@ -8994,8 +9354,10 @@ void VulkanReplayConsumer::Process_vkGetDrmDisplayEXT( if (!display->IsNull()) { display->SetHandleLength(1); } VkDisplayKHR* out_display = display->GetHandlePointer(); + PushRecaptureHandleId(display->GetPointer()); VkResult replay_result = GetInstanceTable(in_physicalDevice)->GetDrmDisplayEXT(in_physicalDevice, drmFd, connectorId, out_display); CheckResult("vkGetDrmDisplayEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(physicalDevice, display->GetPointer(), out_display, &CommonObjectInfoTable::AddVkDisplayKHRInfo); } @@ -9014,8 +9376,10 @@ void VulkanReplayConsumer::Process_vkCreatePrivateDataSlotEXT( if (!pPrivateDataSlot->IsNull()) { pPrivateDataSlot->SetHandleLength(1); } VkPrivateDataSlot* out_pPrivateDataSlot = pPrivateDataSlot->GetHandlePointer(); + PushRecaptureHandleId(pPrivateDataSlot->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->CreatePrivateDataSlotEXT(in_device, in_pCreateInfo, in_pAllocator, out_pPrivateDataSlot); CheckResult("vkCreatePrivateDataSlotEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pPrivateDataSlot->GetPointer(), out_pPrivateDataSlot, &CommonObjectInfoTable::AddVkPrivateDataSlotInfo); } @@ -9030,88 +9394,189 @@ void VulkanReplayConsumer::Process_vkDestroyPrivateDataSlotEXT( VkPrivateDataSlot in_privateDataSlot = MapHandle(privateDataSlot, &CommonObjectInfoTable::GetVkPrivateDataSlotInfo); const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); - GetDeviceTable(in_device)->DestroyPrivateDataSlotEXT(in_device, in_privateDataSlot, in_pAllocator); - RemoveHandle(privateDataSlot, &CommonObjectInfoTable::RemoveVkPrivateDataSlotInfo); + GetDeviceTable(in_device)->DestroyPrivateDataSlotEXT(in_device, in_privateDataSlot, in_pAllocator); + RemoveHandle(privateDataSlot, &CommonObjectInfoTable::RemoveVkPrivateDataSlotInfo); +} + +void VulkanReplayConsumer::Process_vkSetPrivateDataEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + VkObjectType objectType, + uint64_t objectHandle, + format::HandleId privateDataSlot, + uint64_t data) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + uint64_t in_objectHandle = MapHandle(objectHandle, objectType); + VkPrivateDataSlot in_privateDataSlot = MapHandle(privateDataSlot, &CommonObjectInfoTable::GetVkPrivateDataSlotInfo); + + VkResult replay_result = GetDeviceTable(in_device)->SetPrivateDataEXT(in_device, objectType, in_objectHandle, in_privateDataSlot, data); + CheckResult("vkSetPrivateDataEXT", returnValue, replay_result, call_info); +} + +void VulkanReplayConsumer::Process_vkGetPrivateDataEXT( + const ApiCallInfo& call_info, + format::HandleId device, + VkObjectType objectType, + uint64_t objectHandle, + format::HandleId privateDataSlot, + PointerDecoder* pData) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + uint64_t in_objectHandle = MapHandle(objectHandle, objectType); + VkPrivateDataSlot in_privateDataSlot = MapHandle(privateDataSlot, &CommonObjectInfoTable::GetVkPrivateDataSlotInfo); + uint64_t* out_pData = pData->IsNull() ? nullptr : pData->AllocateOutputData(1, static_cast(0)); + + GetDeviceTable(in_device)->GetPrivateDataEXT(in_device, objectType, in_objectHandle, in_privateDataSlot, out_pData); +} + +void VulkanReplayConsumer::Process_vkCmdDispatchTileQCOM( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pDispatchTileInfo) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + const VkDispatchTileInfoQCOM* in_pDispatchTileInfo = pDispatchTileInfo->GetPointer(); + + GetDeviceTable(in_commandBuffer)->CmdDispatchTileQCOM(in_commandBuffer, in_pDispatchTileInfo); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdDispatchTileQCOM(call_info, GetDeviceTable(in_commandBuffer)->CmdDispatchTileQCOM, in_commandBuffer, in_pDispatchTileInfo); + } +} + +void VulkanReplayConsumer::Process_vkCmdBeginPerTileExecutionQCOM( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pPerTileBeginInfo) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + const VkPerTileBeginInfoQCOM* in_pPerTileBeginInfo = pPerTileBeginInfo->GetPointer(); + + GetDeviceTable(in_commandBuffer)->CmdBeginPerTileExecutionQCOM(in_commandBuffer, in_pPerTileBeginInfo); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdBeginPerTileExecutionQCOM(call_info, GetDeviceTable(in_commandBuffer)->CmdBeginPerTileExecutionQCOM, in_commandBuffer, in_pPerTileBeginInfo); + } +} + +void VulkanReplayConsumer::Process_vkCmdEndPerTileExecutionQCOM( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pPerTileEndInfo) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + const VkPerTileEndInfoQCOM* in_pPerTileEndInfo = pPerTileEndInfo->GetPointer(); + + GetDeviceTable(in_commandBuffer)->CmdEndPerTileExecutionQCOM(in_commandBuffer, in_pPerTileEndInfo); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdEndPerTileExecutionQCOM(call_info, GetDeviceTable(in_commandBuffer)->CmdEndPerTileExecutionQCOM, in_commandBuffer, in_pPerTileEndInfo); + } +} + +void VulkanReplayConsumer::Process_vkGetDescriptorSetLayoutSizeEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + PointerDecoder* pLayoutSizeInBytes) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkDescriptorSetLayout in_layout = MapHandle(layout, &CommonObjectInfoTable::GetVkDescriptorSetLayoutInfo); + VkDeviceSize* out_pLayoutSizeInBytes = pLayoutSizeInBytes->IsNull() ? nullptr : pLayoutSizeInBytes->AllocateOutputData(1, static_cast(0)); + + GetDeviceTable(in_device)->GetDescriptorSetLayoutSizeEXT(in_device, in_layout, out_pLayoutSizeInBytes); } -void VulkanReplayConsumer::Process_vkSetPrivateDataEXT( +void VulkanReplayConsumer::Process_vkGetDescriptorSetLayoutBindingOffsetEXT( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - VkObjectType objectType, - uint64_t objectHandle, - format::HandleId privateDataSlot, - uint64_t data) + format::HandleId layout, + uint32_t binding, + PointerDecoder* pOffset) { VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - uint64_t in_objectHandle = MapHandle(objectHandle, objectType); - VkPrivateDataSlot in_privateDataSlot = MapHandle(privateDataSlot, &CommonObjectInfoTable::GetVkPrivateDataSlotInfo); + VkDescriptorSetLayout in_layout = MapHandle(layout, &CommonObjectInfoTable::GetVkDescriptorSetLayoutInfo); + VkDeviceSize* out_pOffset = pOffset->IsNull() ? nullptr : pOffset->AllocateOutputData(1, static_cast(0)); - VkResult replay_result = GetDeviceTable(in_device)->SetPrivateDataEXT(in_device, objectType, in_objectHandle, in_privateDataSlot, data); - CheckResult("vkSetPrivateDataEXT", returnValue, replay_result, call_info); + GetDeviceTable(in_device)->GetDescriptorSetLayoutBindingOffsetEXT(in_device, in_layout, binding, out_pOffset); } -void VulkanReplayConsumer::Process_vkGetPrivateDataEXT( +void VulkanReplayConsumer::Process_vkGetDescriptorEXT( const ApiCallInfo& call_info, format::HandleId device, - VkObjectType objectType, - uint64_t objectHandle, - format::HandleId privateDataSlot, - PointerDecoder* pData) + StructPointerDecoder* pDescriptorInfo, + size_t dataSize, + PointerDecoder* pDescriptor) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - uint64_t in_objectHandle = MapHandle(objectHandle, objectType); - VkPrivateDataSlot in_privateDataSlot = MapHandle(privateDataSlot, &CommonObjectInfoTable::GetVkPrivateDataSlotInfo); - uint64_t* out_pData = pData->IsNull() ? nullptr : pData->AllocateOutputData(1, static_cast(0)); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); - GetDeviceTable(in_device)->GetPrivateDataEXT(in_device, objectType, in_objectHandle, in_privateDataSlot, out_pData); + MapStructHandles(pDescriptorInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (!pDescriptor->IsNull()) { pDescriptor->AllocateOutputData(dataSize); } + + OverrideGetDescriptorEXT(GetDeviceTable(in_device->handle)->GetDescriptorEXT, in_device, pDescriptorInfo, dataSize, pDescriptor); } -void VulkanReplayConsumer::Process_vkCmdDispatchTileQCOM( +void VulkanReplayConsumer::Process_vkCmdBindDescriptorBuffersEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pDispatchTileInfo) + uint32_t bufferCount, + StructPointerDecoder* pBindingInfos) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkDispatchTileInfoQCOM* in_pDispatchTileInfo = pDispatchTileInfo->GetPointer(); + auto in_commandBuffer = GetObjectInfoTable().GetVkCommandBufferInfo(commandBuffer); - GetDeviceTable(in_commandBuffer)->CmdDispatchTileQCOM(in_commandBuffer, in_pDispatchTileInfo); + MapStructArrayHandles(pBindingInfos->GetMetaStructPointer(), pBindingInfos->GetLength(), GetObjectInfoTable()); + + OverrideCmdBindDescriptorBuffersEXT(GetDeviceTable(in_commandBuffer->handle)->CmdBindDescriptorBuffersEXT, in_commandBuffer, bufferCount, pBindingInfos); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdDispatchTileQCOM(call_info, GetDeviceTable(in_commandBuffer)->CmdDispatchTileQCOM, in_commandBuffer, in_pDispatchTileInfo); + resource_dumper_->Process_vkCmdBindDescriptorBuffersEXT(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdBindDescriptorBuffersEXT, in_commandBuffer->handle, bufferCount, pBindingInfos->GetPointer()); } } -void VulkanReplayConsumer::Process_vkCmdBeginPerTileExecutionQCOM( +void VulkanReplayConsumer::Process_vkCmdSetDescriptorBufferOffsetsEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pPerTileBeginInfo) + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t setCount, + PointerDecoder* pBufferIndices, + PointerDecoder* pOffsets) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkPerTileBeginInfoQCOM* in_pPerTileBeginInfo = pPerTileBeginInfo->GetPointer(); + VkPipelineLayout in_layout = MapHandle(layout, &CommonObjectInfoTable::GetVkPipelineLayoutInfo); + const uint32_t* in_pBufferIndices = pBufferIndices->GetPointer(); + const VkDeviceSize* in_pOffsets = pOffsets->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdBeginPerTileExecutionQCOM(in_commandBuffer, in_pPerTileBeginInfo); + GetDeviceTable(in_commandBuffer)->CmdSetDescriptorBufferOffsetsEXT(in_commandBuffer, pipelineBindPoint, in_layout, firstSet, setCount, in_pBufferIndices, in_pOffsets); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdBeginPerTileExecutionQCOM(call_info, GetDeviceTable(in_commandBuffer)->CmdBeginPerTileExecutionQCOM, in_commandBuffer, in_pPerTileBeginInfo); + resource_dumper_->Process_vkCmdSetDescriptorBufferOffsetsEXT(call_info, GetDeviceTable(in_commandBuffer)->CmdSetDescriptorBufferOffsetsEXT, in_commandBuffer, pipelineBindPoint, in_layout, firstSet, setCount, in_pBufferIndices, in_pOffsets); } } -void VulkanReplayConsumer::Process_vkCmdEndPerTileExecutionQCOM( +void VulkanReplayConsumer::Process_vkCmdBindDescriptorBufferEmbeddedSamplersEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pPerTileEndInfo) + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t set) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkPerTileEndInfoQCOM* in_pPerTileEndInfo = pPerTileEndInfo->GetPointer(); + VkPipelineLayout in_layout = MapHandle(layout, &CommonObjectInfoTable::GetVkPipelineLayoutInfo); - GetDeviceTable(in_commandBuffer)->CmdEndPerTileExecutionQCOM(in_commandBuffer, in_pPerTileEndInfo); + GetDeviceTable(in_commandBuffer)->CmdBindDescriptorBufferEmbeddedSamplersEXT(in_commandBuffer, pipelineBindPoint, in_layout, set); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdEndPerTileExecutionQCOM(call_info, GetDeviceTable(in_commandBuffer)->CmdEndPerTileExecutionQCOM, in_commandBuffer, in_pPerTileEndInfo); + resource_dumper_->Process_vkCmdBindDescriptorBufferEmbeddedSamplersEXT(call_info, GetDeviceTable(in_commandBuffer)->CmdBindDescriptorBufferEmbeddedSamplersEXT, in_commandBuffer, pipelineBindPoint, in_layout, set); } } @@ -9173,8 +9638,10 @@ void VulkanReplayConsumer::Process_vkGetWinrtDisplayNV( if (!pDisplay->IsNull()) { pDisplay->SetHandleLength(1); } VkDisplayKHR* out_pDisplay = pDisplay->GetHandlePointer(); + PushRecaptureHandleId(pDisplay->GetPointer()); VkResult replay_result = GetInstanceTable(in_physicalDevice)->GetWinrtDisplayNV(in_physicalDevice, deviceRelativeId, out_pDisplay); CheckResult("vkGetWinrtDisplayNV", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(physicalDevice, pDisplay->GetPointer(), out_pDisplay, &CommonObjectInfoTable::AddVkDisplayKHRInfo); } @@ -9193,8 +9660,10 @@ void VulkanReplayConsumer::Process_vkCreateDirectFBSurfaceEXT( if (!pSurface->IsNull()) { pSurface->SetHandleLength(1); } VkSurfaceKHR* out_pSurface = pSurface->GetHandlePointer(); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = GetInstanceTable(in_instance)->CreateDirectFBSurfaceEXT(in_instance, in_pCreateInfo, in_pAllocator, out_pSurface); CheckResult("vkCreateDirectFBSurfaceEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), out_pSurface, &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -9318,12 +9787,12 @@ void VulkanReplayConsumer::Process_vkGetMemoryRemoteAddressNV( StructPointerDecoder* pMemoryGetRemoteAddressInfo, PointerDecoder* pAddress) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkMemoryGetRemoteAddressInfoNV* in_pMemoryGetRemoteAddressInfo = pMemoryGetRemoteAddressInfo->GetPointer(); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + MapStructHandles(pMemoryGetRemoteAddressInfo->GetMetaStructPointer(), GetObjectInfoTable()); VkRemoteAddressNV* out_pAddress = pAddress->IsNull() ? nullptr : reinterpret_cast(pAddress->AllocateOutputData(1)); - VkResult replay_result = GetDeviceTable(in_device)->GetMemoryRemoteAddressNV(in_device, in_pMemoryGetRemoteAddressInfo, out_pAddress); + VkResult replay_result = OverrideGetMemoryRemoteAddressNV(GetDeviceTable(in_device->handle)->GetMemoryRemoteAddressNV, returnValue, in_device, pMemoryGetRemoteAddressInfo, out_pAddress); CheckResult("vkGetMemoryRemoteAddressNV", returnValue, replay_result, call_info); PostProcessExternalObject(replay_result, (*pAddress->GetPointer()), static_cast(*out_pAddress), format::ApiCallId::ApiCall_vkGetMemoryRemoteAddressNV, "vkGetMemoryRemoteAddressNV"); @@ -9418,8 +9887,10 @@ void VulkanReplayConsumer::Process_vkCreateScreenSurfaceQNX( if (!pSurface->IsNull()) { pSurface->SetHandleLength(1); } VkSurfaceKHR* out_pSurface = pSurface->GetHandlePointer(); + PushRecaptureHandleId(pSurface->GetPointer()); VkResult replay_result = GetInstanceTable(in_instance)->CreateScreenSurfaceQNX(in_instance, in_pCreateInfo, in_pAllocator, out_pSurface); CheckResult("vkCreateScreenSurfaceQNX", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(instance, pSurface->GetPointer(), out_pSurface, &CommonObjectInfoTable::AddVkSurfaceKHRInfo); } @@ -9511,8 +9982,10 @@ void VulkanReplayConsumer::Process_vkCreateMicromapEXT( if (!pMicromap->IsNull()) { pMicromap->SetHandleLength(1); } VkMicromapEXT* out_pMicromap = pMicromap->GetHandlePointer(); + PushRecaptureHandleId(pMicromap->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->CreateMicromapEXT(in_device, in_pCreateInfo, in_pAllocator, out_pMicromap); CheckResult("vkCreateMicromapEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pMicromap->GetPointer(), out_pMicromap, &CommonObjectInfoTable::AddVkMicromapEXTInfo); } @@ -9774,10 +10247,10 @@ void VulkanReplayConsumer::Process_vkSetDeviceMemoryPriorityEXT( format::HandleId memory, float priority) { - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkDeviceMemory in_memory = MapHandle(memory, &CommonObjectInfoTable::GetVkDeviceMemoryInfo); + auto in_device = GetObjectInfoTable().GetVkDeviceInfo(device); + auto in_memory = GetObjectInfoTable().GetVkDeviceMemoryInfo(memory); - GetDeviceTable(in_device)->SetDeviceMemoryPriorityEXT(in_device, in_memory, priority); + OverrideSetDeviceMemoryPriorityEXT(GetDeviceTable(in_device->handle)->SetDeviceMemoryPriorityEXT, in_device, in_memory, priority); } void VulkanReplayConsumer::Process_vkGetDescriptorSetLayoutHostMappingInfoVALVE( @@ -10401,8 +10874,10 @@ void VulkanReplayConsumer::Process_vkCreateOpticalFlowSessionNV( if (!pSession->IsNull()) { pSession->SetHandleLength(1); } VkOpticalFlowSessionNV* out_pSession = pSession->GetHandlePointer(); + PushRecaptureHandleId(pSession->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->CreateOpticalFlowSessionNV(in_device, in_pCreateInfo, in_pAllocator, out_pSession); CheckResult("vkCreateOpticalFlowSessionNV", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pSession->GetPointer(), out_pSession, &CommonObjectInfoTable::AddVkOpticalFlowSessionNVInfo); } @@ -10492,8 +10967,10 @@ void VulkanReplayConsumer::Process_vkCreateShadersEXT( return; } } + PushRecaptureHandleIds(pShaders->GetPointer(), pShaders->GetLength()); VkResult replay_result = OverrideCreateShadersEXT(GetDeviceTable(in_device->handle)->CreateShadersEXT, returnValue, in_device, createInfoCount, pCreateInfos, pAllocator, pShaders); CheckResult("vkCreateShadersEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandles(device, pShaders->GetPointer(), pShaders->GetLength(), pShaders->GetHandlePointer(), createInfoCount, std::move(handle_info), &CommonObjectInfoTable::AddVkShaderEXTInfo); } @@ -10590,157 +11067,359 @@ void VulkanReplayConsumer::Process_vkGetDynamicRenderingTilePropertiesQCOM( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pRenderingInfo, - StructPointerDecoder* pProperties) + StructPointerDecoder* pRenderingInfo, + StructPointerDecoder* pProperties) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkRenderingInfo* in_pRenderingInfo = pRenderingInfo->GetPointer(); + MapStructHandles(pRenderingInfo->GetMetaStructPointer(), GetObjectInfoTable()); + VkTilePropertiesQCOM* out_pProperties = pProperties->IsNull() ? nullptr : pProperties->AllocateOutputData(1, { VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM, nullptr }); + InitializeOutputStructPNext(pProperties); + + VkResult replay_result = GetDeviceTable(in_device)->GetDynamicRenderingTilePropertiesQCOM(in_device, in_pRenderingInfo, out_pProperties); + CheckResult("vkGetDynamicRenderingTilePropertiesQCOM", returnValue, replay_result, call_info); +} + +void VulkanReplayConsumer::Process_vkGetPhysicalDeviceCooperativeVectorPropertiesNV( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + PointerDecoder* pPropertyCount, + StructPointerDecoder* pProperties) +{ + VkPhysicalDevice in_physicalDevice = MapHandle(physicalDevice, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); + uint32_t* out_pPropertyCount = pPropertyCount->IsNull() ? nullptr : pPropertyCount->AllocateOutputData(1, GetOutputArrayCount("vkGetPhysicalDeviceCooperativeVectorPropertiesNV", returnValue, physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceCooperativeVectorPropertiesNV, pPropertyCount, pProperties, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo)); + VkCooperativeVectorPropertiesNV* out_pProperties = pProperties->IsNull() ? nullptr : pProperties->AllocateOutputData(*out_pPropertyCount, VkCooperativeVectorPropertiesNV{ VK_STRUCTURE_TYPE_COOPERATIVE_VECTOR_PROPERTIES_NV, nullptr }); + + VkResult replay_result = GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceCooperativeVectorPropertiesNV(in_physicalDevice, out_pPropertyCount, out_pProperties); + CheckResult("vkGetPhysicalDeviceCooperativeVectorPropertiesNV", returnValue, replay_result, call_info); + + if (pProperties->IsNull()) { SetOutputArrayCount(physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceCooperativeVectorPropertiesNV, *out_pPropertyCount, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); } +} + +void VulkanReplayConsumer::Process_vkConvertCooperativeVectorMatrixNV( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pInfo) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkConvertCooperativeVectorMatrixInfoNV* in_pInfo = pInfo->GetPointer(); + + VkResult replay_result = GetDeviceTable(in_device)->ConvertCooperativeVectorMatrixNV(in_device, in_pInfo); + CheckResult("vkConvertCooperativeVectorMatrixNV", returnValue, replay_result, call_info); +} + +void VulkanReplayConsumer::Process_vkCmdConvertCooperativeVectorMatrixNV( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t infoCount, + StructPointerDecoder* pInfos) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + const VkConvertCooperativeVectorMatrixInfoNV* in_pInfos = pInfos->GetPointer(); + + GetDeviceTable(in_commandBuffer)->CmdConvertCooperativeVectorMatrixNV(in_commandBuffer, infoCount, in_pInfos); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdConvertCooperativeVectorMatrixNV(call_info, GetDeviceTable(in_commandBuffer)->CmdConvertCooperativeVectorMatrixNV, in_commandBuffer, infoCount, in_pInfos); + } +} + +void VulkanReplayConsumer::Process_vkSetLatencySleepModeNV( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSleepModeInfo) +{ + if (options_.swapchain_option == util::SwapchainOption::kOffscreen) + { + GFXRECON_LOG_DEBUG("Skip vkSetLatencySleepModeNV for offscreen."); + return; + } + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkSwapchainKHR in_swapchain = MapHandle(swapchain, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); + if (GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id)->surface_creation_skipped) { return; } + const VkLatencySleepModeInfoNV* in_pSleepModeInfo = pSleepModeInfo->GetPointer(); + + VkResult replay_result = GetDeviceTable(in_device)->SetLatencySleepModeNV(in_device, in_swapchain, in_pSleepModeInfo); + CheckResult("vkSetLatencySleepModeNV", returnValue, replay_result, call_info); +} + +void VulkanReplayConsumer::Process_vkLatencySleepNV( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSleepInfo) +{ + if (options_.swapchain_option == util::SwapchainOption::kOffscreen) + { + GFXRECON_LOG_DEBUG("Skip vkLatencySleepNV for offscreen."); + return; + } + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkSwapchainKHR in_swapchain = MapHandle(swapchain, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); + if (GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id)->surface_creation_skipped) { return; } + const VkLatencySleepInfoNV* in_pSleepInfo = pSleepInfo->GetPointer(); + MapStructHandles(pSleepInfo->GetMetaStructPointer(), GetObjectInfoTable()); + + VkResult replay_result = GetDeviceTable(in_device)->LatencySleepNV(in_device, in_swapchain, in_pSleepInfo); + CheckResult("vkLatencySleepNV", returnValue, replay_result, call_info); +} + +void VulkanReplayConsumer::Process_vkSetLatencyMarkerNV( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pLatencyMarkerInfo) +{ + if (options_.swapchain_option == util::SwapchainOption::kOffscreen) + { + GFXRECON_LOG_DEBUG("Skip vkSetLatencyMarkerNV for offscreen."); + return; + } + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkSwapchainKHR in_swapchain = MapHandle(swapchain, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); + if (GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id)->surface_creation_skipped) { return; } + const VkSetLatencyMarkerInfoNV* in_pLatencyMarkerInfo = pLatencyMarkerInfo->GetPointer(); + + GetDeviceTable(in_device)->SetLatencyMarkerNV(in_device, in_swapchain, in_pLatencyMarkerInfo); +} + +void VulkanReplayConsumer::Process_vkGetLatencyTimingsNV( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pLatencyMarkerInfo) +{ + if (options_.swapchain_option == util::SwapchainOption::kOffscreen) + { + GFXRECON_LOG_DEBUG("Skip vkGetLatencyTimingsNV for offscreen."); + return; + } + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkSwapchainKHR in_swapchain = MapHandle(swapchain, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); + if (GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id)->surface_creation_skipped) { return; } + VkGetLatencyMarkerInfoNV* out_pLatencyMarkerInfo = pLatencyMarkerInfo->IsNull() ? nullptr : pLatencyMarkerInfo->AllocateOutputData(1, { VK_STRUCTURE_TYPE_GET_LATENCY_MARKER_INFO_NV, nullptr }); + InitializeOutputStructPNext(pLatencyMarkerInfo); + + GetDeviceTable(in_device)->GetLatencyTimingsNV(in_device, in_swapchain, out_pLatencyMarkerInfo); +} + +void VulkanReplayConsumer::Process_vkQueueNotifyOutOfBandNV( + const ApiCallInfo& call_info, + format::HandleId queue, + StructPointerDecoder* pQueueTypeInfo) +{ + VkQueue in_queue = MapHandle(queue, &CommonObjectInfoTable::GetVkQueueInfo); + const VkOutOfBandQueueTypeInfoNV* in_pQueueTypeInfo = pQueueTypeInfo->GetPointer(); + + GetDeviceTable(in_queue)->QueueNotifyOutOfBandNV(in_queue, in_pQueueTypeInfo); +} + +void VulkanReplayConsumer::Process_vkCreateDataGraphPipelinesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId deferredOperation, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + VkDeferredOperationKHR in_deferredOperation = MapHandle(deferredOperation, &CommonObjectInfoTable::GetVkDeferredOperationKHRInfo); + VkPipelineCache in_pipelineCache = MapHandle(pipelineCache, &CommonObjectInfoTable::GetVkPipelineCacheInfo); + const VkDataGraphPipelineCreateInfoARM* in_pCreateInfos = pCreateInfos->GetPointer(); + MapStructArrayHandles(pCreateInfos->GetMetaStructPointer(), pCreateInfos->GetLength(), GetObjectInfoTable()); + const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); + if (!pPipelines->IsNull()) { pPipelines->SetHandleLength(createInfoCount); } + VkPipeline* out_pPipelines = pPipelines->GetHandlePointer(); + + PushRecaptureHandleIds(pPipelines->GetPointer(), pPipelines->GetLength()); + VkResult replay_result = GetDeviceTable(in_device)->CreateDataGraphPipelinesARM(in_device, in_deferredOperation, in_pipelineCache, createInfoCount, in_pCreateInfos, in_pAllocator, out_pPipelines); + CheckResult("vkCreateDataGraphPipelinesARM", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); + + AddHandles(device, pPipelines->GetPointer(), pPipelines->GetLength(), out_pPipelines, createInfoCount, &CommonObjectInfoTable::AddVkPipelineInfo); +} + +void VulkanReplayConsumer::Process_vkCreateDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSession) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkDataGraphPipelineSessionCreateInfoARM* in_pCreateInfo = pCreateInfo->GetPointer(); + MapStructHandles(pCreateInfo->GetMetaStructPointer(), GetObjectInfoTable()); + const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); + if (!pSession->IsNull()) { pSession->SetHandleLength(1); } + VkDataGraphPipelineSessionARM* out_pSession = pSession->GetHandlePointer(); + + PushRecaptureHandleId(pSession->GetPointer()); + VkResult replay_result = GetDeviceTable(in_device)->CreateDataGraphPipelineSessionARM(in_device, in_pCreateInfo, in_pAllocator, out_pSession); + CheckResult("vkCreateDataGraphPipelineSessionARM", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); + + AddHandle(device, pSession->GetPointer(), out_pSession, &CommonObjectInfoTable::AddVkDataGraphPipelineSessionARMInfo); +} + +void VulkanReplayConsumer::Process_vkGetDataGraphPipelineSessionBindPointRequirementsARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pBindPointRequirementCount, + StructPointerDecoder* pBindPointRequirements) +{ + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* in_pInfo = pInfo->GetPointer(); + MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); + uint32_t* out_pBindPointRequirementCount = pBindPointRequirementCount->IsNull() ? nullptr : pBindPointRequirementCount->AllocateOutputData(1, GetOutputArrayCount("vkGetDataGraphPipelineSessionBindPointRequirementsARM", returnValue, device, kDeviceArrayGetDataGraphPipelineSessionBindPointRequirementsARM, pBindPointRequirementCount, pBindPointRequirements, &CommonObjectInfoTable::GetVkDeviceInfo)); + VkDataGraphPipelineSessionBindPointRequirementARM* out_pBindPointRequirements = pBindPointRequirements->IsNull() ? nullptr : pBindPointRequirements->AllocateOutputData(*out_pBindPointRequirementCount, VkDataGraphPipelineSessionBindPointRequirementARM{ VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENT_ARM, nullptr }); + + VkResult replay_result = GetDeviceTable(in_device)->GetDataGraphPipelineSessionBindPointRequirementsARM(in_device, in_pInfo, out_pBindPointRequirementCount, out_pBindPointRequirements); + CheckResult("vkGetDataGraphPipelineSessionBindPointRequirementsARM", returnValue, replay_result, call_info); + + if (pBindPointRequirements->IsNull()) { SetOutputArrayCount(device, kDeviceArrayGetDataGraphPipelineSessionBindPointRequirementsARM, *out_pBindPointRequirementCount, &CommonObjectInfoTable::GetVkDeviceInfo); } +} + +void VulkanReplayConsumer::Process_vkGetDataGraphPipelineSessionMemoryRequirementsARM( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) { VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkRenderingInfo* in_pRenderingInfo = pRenderingInfo->GetPointer(); - MapStructHandles(pRenderingInfo->GetMetaStructPointer(), GetObjectInfoTable()); - VkTilePropertiesQCOM* out_pProperties = pProperties->IsNull() ? nullptr : pProperties->AllocateOutputData(1, { VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM, nullptr }); - InitializeOutputStructPNext(pProperties); + const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* in_pInfo = pInfo->GetPointer(); + MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); + VkMemoryRequirements2* out_pMemoryRequirements = pMemoryRequirements->IsNull() ? nullptr : pMemoryRequirements->AllocateOutputData(1, { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2, nullptr }); + InitializeOutputStructPNext(pMemoryRequirements); - VkResult replay_result = GetDeviceTable(in_device)->GetDynamicRenderingTilePropertiesQCOM(in_device, in_pRenderingInfo, out_pProperties); - CheckResult("vkGetDynamicRenderingTilePropertiesQCOM", returnValue, replay_result, call_info); + GetDeviceTable(in_device)->GetDataGraphPipelineSessionMemoryRequirementsARM(in_device, in_pInfo, out_pMemoryRequirements); } -void VulkanReplayConsumer::Process_vkGetPhysicalDeviceCooperativeVectorPropertiesNV( +void VulkanReplayConsumer::Process_vkBindDataGraphPipelineSessionMemoryARM( const ApiCallInfo& call_info, VkResult returnValue, - format::HandleId physicalDevice, - PointerDecoder* pPropertyCount, - StructPointerDecoder* pProperties) + format::HandleId device, + uint32_t bindInfoCount, + StructPointerDecoder* pBindInfos) { - VkPhysicalDevice in_physicalDevice = MapHandle(physicalDevice, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); - uint32_t* out_pPropertyCount = pPropertyCount->IsNull() ? nullptr : pPropertyCount->AllocateOutputData(1, GetOutputArrayCount("vkGetPhysicalDeviceCooperativeVectorPropertiesNV", returnValue, physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceCooperativeVectorPropertiesNV, pPropertyCount, pProperties, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo)); - VkCooperativeVectorPropertiesNV* out_pProperties = pProperties->IsNull() ? nullptr : pProperties->AllocateOutputData(*out_pPropertyCount, VkCooperativeVectorPropertiesNV{ VK_STRUCTURE_TYPE_COOPERATIVE_VECTOR_PROPERTIES_NV, nullptr }); - - VkResult replay_result = GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceCooperativeVectorPropertiesNV(in_physicalDevice, out_pPropertyCount, out_pProperties); - CheckResult("vkGetPhysicalDeviceCooperativeVectorPropertiesNV", returnValue, replay_result, call_info); + VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); + const VkBindDataGraphPipelineSessionMemoryInfoARM* in_pBindInfos = pBindInfos->GetPointer(); + MapStructArrayHandles(pBindInfos->GetMetaStructPointer(), pBindInfos->GetLength(), GetObjectInfoTable()); - if (pProperties->IsNull()) { SetOutputArrayCount(physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceCooperativeVectorPropertiesNV, *out_pPropertyCount, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); } + VkResult replay_result = GetDeviceTable(in_device)->BindDataGraphPipelineSessionMemoryARM(in_device, bindInfoCount, in_pBindInfos); + CheckResult("vkBindDataGraphPipelineSessionMemoryARM", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkConvertCooperativeVectorMatrixNV( +void VulkanReplayConsumer::Process_vkDestroyDataGraphPipelineSessionARM( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - StructPointerDecoder* pInfo) + format::HandleId session, + StructPointerDecoder* pAllocator) { VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - const VkConvertCooperativeVectorMatrixInfoNV* in_pInfo = pInfo->GetPointer(); + VkDataGraphPipelineSessionARM in_session = MapHandle(session, &CommonObjectInfoTable::GetVkDataGraphPipelineSessionARMInfo); + const VkAllocationCallbacks* in_pAllocator = GetAllocationCallbacks(pAllocator); - VkResult replay_result = GetDeviceTable(in_device)->ConvertCooperativeVectorMatrixNV(in_device, in_pInfo); - CheckResult("vkConvertCooperativeVectorMatrixNV", returnValue, replay_result, call_info); + GetDeviceTable(in_device)->DestroyDataGraphPipelineSessionARM(in_device, in_session, in_pAllocator); + RemoveHandle(session, &CommonObjectInfoTable::RemoveVkDataGraphPipelineSessionARMInfo); } -void VulkanReplayConsumer::Process_vkCmdConvertCooperativeVectorMatrixNV( +void VulkanReplayConsumer::Process_vkCmdDispatchDataGraphARM( const ApiCallInfo& call_info, format::HandleId commandBuffer, - uint32_t infoCount, - StructPointerDecoder* pInfos) + format::HandleId session, + StructPointerDecoder* pInfo) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkConvertCooperativeVectorMatrixInfoNV* in_pInfos = pInfos->GetPointer(); + VkDataGraphPipelineSessionARM in_session = MapHandle(session, &CommonObjectInfoTable::GetVkDataGraphPipelineSessionARMInfo); + const VkDataGraphPipelineDispatchInfoARM* in_pInfo = pInfo->GetPointer(); - GetDeviceTable(in_commandBuffer)->CmdConvertCooperativeVectorMatrixNV(in_commandBuffer, infoCount, in_pInfos); + GetDeviceTable(in_commandBuffer)->CmdDispatchDataGraphARM(in_commandBuffer, in_session, in_pInfo); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdConvertCooperativeVectorMatrixNV(call_info, GetDeviceTable(in_commandBuffer)->CmdConvertCooperativeVectorMatrixNV, in_commandBuffer, infoCount, in_pInfos); + resource_dumper_->Process_vkCmdDispatchDataGraphARM(call_info, GetDeviceTable(in_commandBuffer)->CmdDispatchDataGraphARM, in_commandBuffer, in_session, in_pInfo); } } -void VulkanReplayConsumer::Process_vkSetLatencySleepModeNV( +void VulkanReplayConsumer::Process_vkGetDataGraphPipelineAvailablePropertiesARM( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - format::HandleId swapchain, - StructPointerDecoder* pSleepModeInfo) + StructPointerDecoder* pPipelineInfo, + PointerDecoder* pPropertiesCount, + PointerDecoder* pProperties) { - if (options_.swapchain_option == util::SwapchainOption::kOffscreen) - { - GFXRECON_LOG_DEBUG("Skip vkSetLatencySleepModeNV for offscreen."); - return; - } VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkSwapchainKHR in_swapchain = MapHandle(swapchain, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); - if (GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id)->surface_creation_skipped) { return; } - const VkLatencySleepModeInfoNV* in_pSleepModeInfo = pSleepModeInfo->GetPointer(); + const VkDataGraphPipelineInfoARM* in_pPipelineInfo = pPipelineInfo->GetPointer(); + MapStructHandles(pPipelineInfo->GetMetaStructPointer(), GetObjectInfoTable()); + uint32_t* out_pPropertiesCount = pPropertiesCount->IsNull() ? nullptr : pPropertiesCount->AllocateOutputData(1, GetOutputArrayCount("vkGetDataGraphPipelineAvailablePropertiesARM", returnValue, device, kDeviceArrayGetDataGraphPipelineAvailablePropertiesARM, pPropertiesCount, pProperties, &CommonObjectInfoTable::GetVkDeviceInfo)); + VkDataGraphPipelinePropertyARM* out_pProperties = pProperties->IsNull() ? nullptr : pProperties->AllocateOutputData(*out_pPropertiesCount); - VkResult replay_result = GetDeviceTable(in_device)->SetLatencySleepModeNV(in_device, in_swapchain, in_pSleepModeInfo); - CheckResult("vkSetLatencySleepModeNV", returnValue, replay_result, call_info); + VkResult replay_result = GetDeviceTable(in_device)->GetDataGraphPipelineAvailablePropertiesARM(in_device, in_pPipelineInfo, out_pPropertiesCount, out_pProperties); + CheckResult("vkGetDataGraphPipelineAvailablePropertiesARM", returnValue, replay_result, call_info); + + if (pProperties->IsNull()) { SetOutputArrayCount(device, kDeviceArrayGetDataGraphPipelineAvailablePropertiesARM, *out_pPropertiesCount, &CommonObjectInfoTable::GetVkDeviceInfo); } } -void VulkanReplayConsumer::Process_vkLatencySleepNV( +void VulkanReplayConsumer::Process_vkGetDataGraphPipelinePropertiesARM( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - format::HandleId swapchain, - StructPointerDecoder* pSleepInfo) + StructPointerDecoder* pPipelineInfo, + uint32_t propertiesCount, + StructPointerDecoder* pProperties) { - if (options_.swapchain_option == util::SwapchainOption::kOffscreen) - { - GFXRECON_LOG_DEBUG("Skip vkLatencySleepNV for offscreen."); - return; - } VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkSwapchainKHR in_swapchain = MapHandle(swapchain, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); - if (GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id)->surface_creation_skipped) { return; } - const VkLatencySleepInfoNV* in_pSleepInfo = pSleepInfo->GetPointer(); - MapStructHandles(pSleepInfo->GetMetaStructPointer(), GetObjectInfoTable()); + const VkDataGraphPipelineInfoARM* in_pPipelineInfo = pPipelineInfo->GetPointer(); + MapStructHandles(pPipelineInfo->GetMetaStructPointer(), GetObjectInfoTable()); + VkDataGraphPipelinePropertyQueryResultARM* out_pProperties = pProperties->IsNull() ? nullptr : pProperties->AllocateOutputData(propertiesCount, VkDataGraphPipelinePropertyQueryResultARM{ VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_PROPERTY_QUERY_RESULT_ARM, nullptr }); - VkResult replay_result = GetDeviceTable(in_device)->LatencySleepNV(in_device, in_swapchain, in_pSleepInfo); - CheckResult("vkLatencySleepNV", returnValue, replay_result, call_info); + VkResult replay_result = GetDeviceTable(in_device)->GetDataGraphPipelinePropertiesARM(in_device, in_pPipelineInfo, propertiesCount, out_pProperties); + CheckResult("vkGetDataGraphPipelinePropertiesARM", returnValue, replay_result, call_info); } -void VulkanReplayConsumer::Process_vkSetLatencyMarkerNV( +void VulkanReplayConsumer::Process_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId swapchain, - StructPointerDecoder* pLatencyMarkerInfo) + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pQueueFamilyDataGraphPropertyCount, + StructPointerDecoder* pQueueFamilyDataGraphProperties) { - if (options_.swapchain_option == util::SwapchainOption::kOffscreen) - { - GFXRECON_LOG_DEBUG("Skip vkSetLatencyMarkerNV for offscreen."); - return; - } - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkSwapchainKHR in_swapchain = MapHandle(swapchain, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); - if (GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id)->surface_creation_skipped) { return; } - const VkSetLatencyMarkerInfoNV* in_pLatencyMarkerInfo = pLatencyMarkerInfo->GetPointer(); - - GetDeviceTable(in_device)->SetLatencyMarkerNV(in_device, in_swapchain, in_pLatencyMarkerInfo); -} + VkPhysicalDevice in_physicalDevice = MapHandle(physicalDevice, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); + uint32_t* out_pQueueFamilyDataGraphPropertyCount = pQueueFamilyDataGraphPropertyCount->IsNull() ? nullptr : pQueueFamilyDataGraphPropertyCount->AllocateOutputData(1, GetOutputArrayCount("vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM", returnValue, physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM, pQueueFamilyDataGraphPropertyCount, pQueueFamilyDataGraphProperties, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo)); + VkQueueFamilyDataGraphPropertiesARM* out_pQueueFamilyDataGraphProperties = pQueueFamilyDataGraphProperties->IsNull() ? nullptr : pQueueFamilyDataGraphProperties->AllocateOutputData(*out_pQueueFamilyDataGraphPropertyCount, VkQueueFamilyDataGraphPropertiesARM{ VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM, nullptr }); -void VulkanReplayConsumer::Process_vkGetLatencyTimingsNV( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId swapchain, - StructPointerDecoder* pLatencyMarkerInfo) -{ - if (options_.swapchain_option == util::SwapchainOption::kOffscreen) - { - GFXRECON_LOG_DEBUG("Skip vkGetLatencyTimingsNV for offscreen."); - return; - } - VkDevice in_device = MapHandle(device, &CommonObjectInfoTable::GetVkDeviceInfo); - VkSwapchainKHR in_swapchain = MapHandle(swapchain, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); - if (GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id) == nullptr || GetObjectInfoTable().GetVkSurfaceKHRInfo(GetObjectInfoTable().GetVkSwapchainKHRInfo(swapchain)->surface_id)->surface_creation_skipped) { return; } - VkGetLatencyMarkerInfoNV* out_pLatencyMarkerInfo = pLatencyMarkerInfo->IsNull() ? nullptr : pLatencyMarkerInfo->AllocateOutputData(1, { VK_STRUCTURE_TYPE_GET_LATENCY_MARKER_INFO_NV, nullptr }); - InitializeOutputStructPNext(pLatencyMarkerInfo); + VkResult replay_result = GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM(in_physicalDevice, queueFamilyIndex, out_pQueueFamilyDataGraphPropertyCount, out_pQueueFamilyDataGraphProperties); + CheckResult("vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM", returnValue, replay_result, call_info); - GetDeviceTable(in_device)->GetLatencyTimingsNV(in_device, in_swapchain, out_pLatencyMarkerInfo); + if (pQueueFamilyDataGraphProperties->IsNull()) { SetOutputArrayCount(physicalDevice, kPhysicalDeviceArrayGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM, *out_pQueueFamilyDataGraphPropertyCount, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); } } -void VulkanReplayConsumer::Process_vkQueueNotifyOutOfBandNV( +void VulkanReplayConsumer::Process_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( const ApiCallInfo& call_info, - format::HandleId queue, - StructPointerDecoder* pQueueTypeInfo) + format::HandleId physicalDevice, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineInfo, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineProperties) { - VkQueue in_queue = MapHandle(queue, &CommonObjectInfoTable::GetVkQueueInfo); - const VkOutOfBandQueueTypeInfoNV* in_pQueueTypeInfo = pQueueTypeInfo->GetPointer(); + VkPhysicalDevice in_physicalDevice = MapHandle(physicalDevice, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); + const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* in_pQueueFamilyDataGraphProcessingEngineInfo = pQueueFamilyDataGraphProcessingEngineInfo->GetPointer(); + VkQueueFamilyDataGraphProcessingEnginePropertiesARM* out_pQueueFamilyDataGraphProcessingEngineProperties = pQueueFamilyDataGraphProcessingEngineProperties->IsNull() ? nullptr : pQueueFamilyDataGraphProcessingEngineProperties->AllocateOutputData(1, { VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM, nullptr }); + InitializeOutputStructPNext(pQueueFamilyDataGraphProcessingEngineProperties); - GetDeviceTable(in_queue)->QueueNotifyOutOfBandNV(in_queue, in_pQueueTypeInfo); + GetInstanceTable(in_physicalDevice)->GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM(in_physicalDevice, in_pQueueFamilyDataGraphProcessingEngineInfo, out_pQueueFamilyDataGraphProcessingEngineProperties); } void VulkanReplayConsumer::Process_vkCmdSetAttachmentFeedbackLoopEnableEXT( @@ -10775,6 +11454,41 @@ void VulkanReplayConsumer::Process_vkCmdBindTileMemoryQCOM( } } +void VulkanReplayConsumer::Process_vkCmdDecompressMemoryEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pDecompressMemoryInfoEXT) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + const VkDecompressMemoryInfoEXT* in_pDecompressMemoryInfoEXT = pDecompressMemoryInfoEXT->GetPointer(); + + GetDeviceTable(in_commandBuffer)->CmdDecompressMemoryEXT(in_commandBuffer, in_pDecompressMemoryInfoEXT); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdDecompressMemoryEXT(call_info, GetDeviceTable(in_commandBuffer)->CmdDecompressMemoryEXT, in_commandBuffer, in_pDecompressMemoryInfoEXT); + } +} + +void VulkanReplayConsumer::Process_vkCmdDecompressMemoryIndirectCountEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkMemoryDecompressionMethodFlagsEXT decompressionMethod, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t maxDecompressionCount, + uint32_t stride) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + + GetDeviceTable(in_commandBuffer)->CmdDecompressMemoryIndirectCountEXT(in_commandBuffer, decompressionMethod, indirectCommandsAddress, indirectCommandsCountAddress, maxDecompressionCount, stride); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdDecompressMemoryIndirectCountEXT(call_info, GetDeviceTable(in_commandBuffer)->CmdDecompressMemoryIndirectCountEXT, in_commandBuffer, decompressionMethod, indirectCommandsAddress, indirectCommandsCountAddress, maxDecompressionCount, stride); + } +} + void VulkanReplayConsumer::Process_vkGetPartitionedAccelerationStructuresBuildSizesNV( const ApiCallInfo& call_info, format::HandleId device, @@ -10872,8 +11586,10 @@ void VulkanReplayConsumer::Process_vkCreateIndirectCommandsLayoutEXT( if (!pIndirectCommandsLayout->IsNull()) { pIndirectCommandsLayout->SetHandleLength(1); } VkIndirectCommandsLayoutEXT* out_pIndirectCommandsLayout = pIndirectCommandsLayout->GetHandlePointer(); + PushRecaptureHandleId(pIndirectCommandsLayout->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->CreateIndirectCommandsLayoutEXT(in_device, in_pCreateInfo, in_pAllocator, out_pIndirectCommandsLayout); CheckResult("vkCreateIndirectCommandsLayoutEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pIndirectCommandsLayout->GetPointer(), out_pIndirectCommandsLayout, &CommonObjectInfoTable::AddVkIndirectCommandsLayoutEXTInfo); } @@ -10906,8 +11622,10 @@ void VulkanReplayConsumer::Process_vkCreateIndirectExecutionSetEXT( if (!pIndirectExecutionSet->IsNull()) { pIndirectExecutionSet->SetHandleLength(1); } VkIndirectExecutionSetEXT* out_pIndirectExecutionSet = pIndirectExecutionSet->GetHandlePointer(); + PushRecaptureHandleId(pIndirectExecutionSet->GetPointer()); VkResult replay_result = GetDeviceTable(in_device)->CreateIndirectExecutionSetEXT(in_device, in_pCreateInfo, in_pAllocator, out_pIndirectExecutionSet); CheckResult("vkCreateIndirectExecutionSetEXT", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pIndirectExecutionSet->GetPointer(), out_pIndirectExecutionSet, &CommonObjectInfoTable::AddVkIndirectExecutionSetEXTInfo); } @@ -11008,13 +11726,34 @@ void VulkanReplayConsumer::Process_vkGetMemoryMetalHandlePropertiesEXT( CheckResult("vkGetMemoryMetalHandlePropertiesEXT", returnValue, replay_result, call_info); } +void VulkanReplayConsumer::Process_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pCounterCount, + StructPointerDecoder* pCounters, + StructPointerDecoder* pCounterDescriptions) +{ + VkPhysicalDevice in_physicalDevice = MapHandle(physicalDevice, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); + uint32_t* out_pCounterCount = pCounterCount->IsNull() ? nullptr : pCounterCount->AllocateOutputData(1, GetOutputArrayCount("vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM", returnValue, physicalDevice, kPhysicalDeviceArrayEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM, pCounterCount, pCounterDescriptions, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo)); + VkPerformanceCounterARM* out_pCounters = pCounters->IsNull() ? nullptr : pCounters->AllocateOutputData(*out_pCounterCount, VkPerformanceCounterARM{ VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_ARM, nullptr }); + VkPerformanceCounterDescriptionARM* out_pCounterDescriptions = pCounterDescriptions->IsNull() ? nullptr : pCounterDescriptions->AllocateOutputData(*out_pCounterCount, VkPerformanceCounterDescriptionARM{ VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_ARM, nullptr }); + + VkResult replay_result = GetInstanceTable(in_physicalDevice)->EnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM(in_physicalDevice, queueFamilyIndex, out_pCounterCount, out_pCounters, out_pCounterDescriptions); + CheckResult("vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM", returnValue, replay_result, call_info); + + if (pCounters->IsNull()) { SetOutputArrayCount(physicalDevice, kPhysicalDeviceArrayEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM, *out_pCounterCount, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); } + if (pCounterDescriptions->IsNull()) { SetOutputArrayCount(physicalDevice, kPhysicalDeviceArrayEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM, *out_pCounterCount, &CommonObjectInfoTable::GetVkPhysicalDeviceInfo); } +} + void VulkanReplayConsumer::Process_vkCmdEndRendering2EXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pRenderingEndInfo) + StructPointerDecoder* pRenderingEndInfo) { VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkRenderingEndInfoEXT* in_pRenderingEndInfo = pRenderingEndInfo->GetPointer(); + const VkRenderingEndInfoKHR* in_pRenderingEndInfo = pRenderingEndInfo->GetPointer(); GetDeviceTable(in_commandBuffer)->CmdEndRendering2EXT(in_commandBuffer, in_pRenderingEndInfo); @@ -11024,6 +11763,38 @@ void VulkanReplayConsumer::Process_vkCmdEndRendering2EXT( } } +void VulkanReplayConsumer::Process_vkCmdBeginCustomResolveEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pBeginCustomResolveInfo) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + const VkBeginCustomResolveInfoEXT* in_pBeginCustomResolveInfo = pBeginCustomResolveInfo->GetPointer(); + + GetDeviceTable(in_commandBuffer)->CmdBeginCustomResolveEXT(in_commandBuffer, in_pBeginCustomResolveInfo); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdBeginCustomResolveEXT(call_info, GetDeviceTable(in_commandBuffer)->CmdBeginCustomResolveEXT, in_commandBuffer, in_pBeginCustomResolveInfo); + } +} + +void VulkanReplayConsumer::Process_vkCmdSetComputeOccupancyPriorityNV( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pParameters) +{ + VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); + const VkComputeOccupancyPriorityParametersNV* in_pParameters = pParameters->GetPointer(); + + GetDeviceTable(in_commandBuffer)->CmdSetComputeOccupancyPriorityNV(in_commandBuffer, in_pParameters); + + if (options_.dumping_resources) + { + resource_dumper_->Process_vkCmdSetComputeOccupancyPriorityNV(call_info, GetDeviceTable(in_commandBuffer)->CmdSetComputeOccupancyPriorityNV, in_commandBuffer, in_pParameters); + } +} + void VulkanReplayConsumer::Process_vkCreateAccelerationStructureKHR( const ApiCallInfo& call_info, VkResult returnValue, @@ -11039,8 +11810,10 @@ void VulkanReplayConsumer::Process_vkCreateAccelerationStructureKHR( VulkanAccelerationStructureKHRInfo handle_info; pAccelerationStructure->SetConsumerData(0, &handle_info); + PushRecaptureHandleId(pAccelerationStructure->GetPointer()); VkResult replay_result = OverrideCreateAccelerationStructureKHR(GetDeviceTable(in_device->handle)->CreateAccelerationStructureKHR, returnValue, in_device, pCreateInfo, pAllocator, pAccelerationStructure); CheckResult("vkCreateAccelerationStructureKHR", returnValue, replay_result, call_info); + ClearRecaptureHandleIds(); AddHandle(device, pAccelerationStructure->GetPointer(), pAccelerationStructure->GetHandlePointer(), std::move(handle_info), &CommonObjectInfoTable::AddVkAccelerationStructureKHRInfo); } @@ -11069,11 +11842,16 @@ void VulkanReplayConsumer::Process_vkCmdBuildAccelerationStructuresKHR( MapStructArrayHandles(pInfos->GetMetaStructPointer(), pInfos->GetLength(), GetObjectInfoTable()); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdBuildAccelerationStructuresKHR(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdBuildAccelerationStructuresKHR, in_commandBuffer->handle, infoCount, pInfos, ppBuildRangeInfos, true); + } + OverrideCmdBuildAccelerationStructuresKHR(GetDeviceTable(in_commandBuffer->handle)->CmdBuildAccelerationStructuresKHR, in_commandBuffer, infoCount, pInfos, ppBuildRangeInfos); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdBuildAccelerationStructuresKHR(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdBuildAccelerationStructuresKHR, in_commandBuffer->handle, infoCount, pInfos->GetPointer(), ppBuildRangeInfos->GetPointer()); + resource_dumper_->Process_vkCmdBuildAccelerationStructuresKHR(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdBuildAccelerationStructuresKHR, in_commandBuffer->handle, infoCount, pInfos, ppBuildRangeInfos, false); } } @@ -11161,11 +11939,16 @@ void VulkanReplayConsumer::Process_vkCmdCopyAccelerationStructureKHR( MapStructHandles(pInfo->GetMetaStructPointer(), GetObjectInfoTable()); + if (options_.dumping_resources && options_.dump_resources_before) + { + resource_dumper_->Process_vkCmdCopyAccelerationStructureKHR(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdCopyAccelerationStructureKHR, in_commandBuffer->handle, pInfo, true); + } + OverrideCmdCopyAccelerationStructureKHR(GetDeviceTable(in_commandBuffer->handle)->CmdCopyAccelerationStructureKHR, in_commandBuffer, pInfo); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdCopyAccelerationStructureKHR(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdCopyAccelerationStructureKHR, in_commandBuffer->handle, pInfo->GetPointer()); + resource_dumper_->Process_vkCmdCopyAccelerationStructureKHR(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdCopyAccelerationStructureKHR, in_commandBuffer->handle, pInfo, false); } } @@ -11316,17 +12099,13 @@ void VulkanReplayConsumer::Process_vkCmdTraceRaysIndirectKHR( StructPointerDecoder* pCallableShaderBindingTable, VkDeviceAddress indirectDeviceAddress) { - VkCommandBuffer in_commandBuffer = MapHandle(commandBuffer, &CommonObjectInfoTable::GetVkCommandBufferInfo); - const VkStridedDeviceAddressRegionKHR* in_pRaygenShaderBindingTable = pRaygenShaderBindingTable->GetPointer(); - const VkStridedDeviceAddressRegionKHR* in_pMissShaderBindingTable = pMissShaderBindingTable->GetPointer(); - const VkStridedDeviceAddressRegionKHR* in_pHitShaderBindingTable = pHitShaderBindingTable->GetPointer(); - const VkStridedDeviceAddressRegionKHR* in_pCallableShaderBindingTable = pCallableShaderBindingTable->GetPointer(); + auto in_commandBuffer = GetObjectInfoTable().GetVkCommandBufferInfo(commandBuffer); - GetDeviceTable(in_commandBuffer)->CmdTraceRaysIndirectKHR(in_commandBuffer, in_pRaygenShaderBindingTable, in_pMissShaderBindingTable, in_pHitShaderBindingTable, in_pCallableShaderBindingTable, indirectDeviceAddress); + OverrideCmdTraceRaysIndirectKHR(GetDeviceTable(in_commandBuffer->handle)->CmdTraceRaysIndirectKHR, in_commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, indirectDeviceAddress); if (options_.dumping_resources) { - resource_dumper_->Process_vkCmdTraceRaysIndirectKHR(call_info, GetDeviceTable(in_commandBuffer)->CmdTraceRaysIndirectKHR, in_commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, indirectDeviceAddress); + resource_dumper_->Process_vkCmdTraceRaysIndirectKHR(call_info, GetDeviceTable(in_commandBuffer->handle)->CmdTraceRaysIndirectKHR, in_commandBuffer->handle, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, indirectDeviceAddress); } } @@ -11488,11 +12267,6 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_EVENT_CREATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -11503,39 +12277,99 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_EVENT_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO: + case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO: + case VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO: + case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO: + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO: + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO: + case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO: @@ -11588,41 +12422,6 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -11633,36 +12432,11 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -11673,11 +12447,6 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -11693,11 +12462,6 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -11803,46 +12567,11 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -11863,16 +12592,6 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -11883,21 +12602,6 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -11968,6 +12672,26 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -11978,6 +12702,61 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -11995,52 +12774,87 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES: + case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO: + case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2: + case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2: + case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2: + case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: + case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO: + case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_SUBPASS_END_INFO: + case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: @@ -12048,11 +12862,6 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -12093,26 +12902,11 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -12123,31 +12917,6 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -12158,99 +12927,99 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: + case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT: + case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT: + case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: + case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES: + case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO: + case VK_STRUCTURE_TYPE_SUBPASS_END_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: + case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO: + case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO: + case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO: + case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO: + case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: + case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES: + case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES: @@ -12258,11 +13027,6 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -12278,11 +13042,6 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_MEMORY_BARRIER_2: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -12323,16 +13082,6 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_BUFFER_COPY_2: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -12368,89 +13117,99 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_IMAGE_BLIT_2: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2: + case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES: + case VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES: + case VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO: + case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_RENDERING_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO: + case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: @@ -12468,29 +13227,49 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3: + case VK_STRUCTURE_TYPE_IMAGE_BLIT_2: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: + case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES: + case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS: + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS: + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_RENDERING_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES: @@ -12518,139 +13297,139 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: + case VK_STRUCTURE_TYPE_MEMORY_MAP_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES: + case VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO: + case VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES: + case VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO: + case VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: + case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_MEMORY_MAP_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO: + case VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_RENDERING_AREA_INFO: + case VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2: + case VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO: + case VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2: + case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO: + case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO: + case VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES: + case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES: + case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES: + case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } case VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO: @@ -12693,54 +13472,54 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY: + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO: + case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO: + case VK_STRUCTURE_TYPE_RENDERING_AREA_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE: + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY: + case VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } case VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR: @@ -12993,76 +13772,6 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_INFO_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_INFO_KHR: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -13275,52 +13984,22 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_BFLOAT16_FEATURES_KHR: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR: - { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR: @@ -13493,6 +14172,11 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -13788,6 +14472,26 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_COPY_MEMORY_INDIRECT_INFO_KHR: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INDIRECT_INFO_KHR: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -13893,14 +14597,19 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_MEMORY_BARRIER_ACCESS_FLAGS_3_KHR: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_MEMORY_BARRIER_ACCESS_FLAGS_3_KHR: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR: @@ -13918,44 +14627,49 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR: + case VK_STRUCTURE_TYPE_RENDERING_END_INFO_KHR: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR: + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR: + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT: @@ -14543,6 +15257,56 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_SWAPCHAIN_TIMING_PROPERTIES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_SWAPCHAIN_TIME_DOMAIN_PROPERTIES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_PROPERTIES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PRESENT_TIMING_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -14888,6 +15652,11 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -14948,6 +15717,71 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_BUFFER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_IMAGE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_IMAGE_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_SAMPLER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -15218,6 +16052,26 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RGB_CONVERSION_CAPABILITIES_VALVE: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_PROFILE_RGB_CONVERSION_INFO_VALVE: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_RGB_CONVERSION_CREATE_INFO_VALVE: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -15798,6 +16652,106 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CREATE_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_CREATE_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENTS_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENT_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_MEMORY_REQUIREMENTS_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_BIND_DATA_GRAPH_PIPELINE_SESSION_MEMORY_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_PROPERTY_QUERY_RESULT_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_DISPATCH_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -15898,6 +16852,21 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_DECOMPRESS_MEMORY_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -16058,6 +17027,16 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -16113,6 +17092,31 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); @@ -16148,14 +17152,49 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_RENDERING_END_INFO_EXT: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT: { - output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_BEGIN_CUSTOM_RESOLVE_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_BUILTIN_MODEL_CREATE_INFO_QCOM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC: @@ -16163,6 +17202,21 @@ void InitializeOutputStructPNextImpl(const VkBaseInStructure* in_pnext, VkBaseOu output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_COMPUTE_OCCUPANCY_PRIORITY_PARAMETERS_NV: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV: + { + output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); + break; + } case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR: { output_struct->pNext = reinterpret_cast(DecodeAllocator::Allocate()); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_consumer.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_consumer.h index 4c96b1a0b..7f0ca824f 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_consumer.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_consumer.h @@ -299,38 +299,6 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId semaphore, StructPointerDecoder* pAllocator) override; - virtual void Process_vkCreateEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pEvent) override; - - virtual void Process_vkDestroyEvent( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId event, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkGetEventStatus( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) override; - - virtual void Process_vkSetEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) override; - - virtual void Process_vkResetEvent( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId event) override; - virtual void Process_vkCreateQueryPool( const ApiCallInfo& call_info, VkResult returnValue, @@ -371,20 +339,6 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId buffer, StructPointerDecoder* pAllocator) override; - virtual void Process_vkCreateBufferView( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pView) override; - - virtual void Process_vkDestroyBufferView( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId bufferView, - StructPointerDecoder* pAllocator) override; - virtual void Process_vkCreateImage( const ApiCallInfo& call_info, VkResult returnValue, @@ -420,6 +374,213 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId imageView, StructPointerDecoder* pAllocator) override; + virtual void Process_vkCreateCommandPool( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pCommandPool) override; + + virtual void Process_vkDestroyCommandPool( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId commandPool, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkResetCommandPool( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId commandPool, + VkCommandPoolResetFlags flags) override; + + virtual void Process_vkAllocateCommandBuffers( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pAllocateInfo, + HandlePointerDecoder* pCommandBuffers) override; + + virtual void Process_vkFreeCommandBuffers( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId commandPool, + uint32_t commandBufferCount, + HandlePointerDecoder* pCommandBuffers) override; + + virtual void Process_vkBeginCommandBuffer( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId commandBuffer, + StructPointerDecoder* pBeginInfo) override; + + virtual void Process_vkEndCommandBuffer( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId commandBuffer) override; + + virtual void Process_vkResetCommandBuffer( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId commandBuffer, + VkCommandBufferResetFlags flags) override; + + virtual void Process_vkCmdCopyBuffer( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId srcBuffer, + format::HandleId dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; + + virtual void Process_vkCmdCopyImage( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; + + virtual void Process_vkCmdCopyBufferToImage( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId srcBuffer, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; + + virtual void Process_vkCmdCopyImageToBuffer( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; + + virtual void Process_vkCmdUpdateBuffer( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize dataSize, + PointerDecoder* pData) override; + + virtual void Process_vkCmdFillBuffer( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize size, + uint32_t data) override; + + virtual void Process_vkCmdPipelineBarrier( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkDependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + StructPointerDecoder* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + StructPointerDecoder* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + StructPointerDecoder* pImageMemoryBarriers) override; + + virtual void Process_vkCmdBeginQuery( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t query, + VkQueryControlFlags flags) override; + + virtual void Process_vkCmdEndQuery( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t query) override; + + virtual void Process_vkCmdResetQueryPool( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount) override; + + virtual void Process_vkCmdWriteTimestamp( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineStageFlagBits pipelineStage, + format::HandleId queryPool, + uint32_t query) override; + + virtual void Process_vkCmdCopyQueryPoolResults( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId queryPool, + uint32_t firstQuery, + uint32_t queryCount, + format::HandleId dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags) override; + + virtual void Process_vkCmdExecuteCommands( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t commandBufferCount, + HandlePointerDecoder* pCommandBuffers) override; + + virtual void Process_vkCreateEvent( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pEvent) override; + + virtual void Process_vkDestroyEvent( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId event, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkGetEventStatus( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId event) override; + + virtual void Process_vkSetEvent( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId event) override; + + virtual void Process_vkResetEvent( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId event) override; + + virtual void Process_vkCreateBufferView( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pView) override; + + virtual void Process_vkDestroyBufferView( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId bufferView, + StructPointerDecoder* pAllocator) override; + virtual void Process_vkCreateShaderModule( const ApiCallInfo& call_info, VkResult returnValue, @@ -464,16 +625,6 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase uint32_t srcCacheCount, HandlePointerDecoder* pSrcCaches) override; - virtual void Process_vkCreateGraphicsPipelines( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId pipelineCache, - uint32_t createInfoCount, - StructPointerDecoder* pCreateInfos, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pPipelines) override; - virtual void Process_vkCreateComputePipelines( const ApiCallInfo& call_info, VkResult returnValue, @@ -560,21 +711,105 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase StructPointerDecoder* pAllocateInfo, HandlePointerDecoder* pDescriptorSets) override; - virtual void Process_vkFreeDescriptorSets( + virtual void Process_vkFreeDescriptorSets( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId descriptorPool, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets) override; + + virtual void Process_vkUpdateDescriptorSets( + const ApiCallInfo& call_info, + format::HandleId device, + uint32_t descriptorWriteCount, + StructPointerDecoder* pDescriptorWrites, + uint32_t descriptorCopyCount, + StructPointerDecoder* pDescriptorCopies) override; + + virtual void Process_vkCmdBindPipeline( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId pipeline) override; + + virtual void Process_vkCmdBindDescriptorSets( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets, + uint32_t dynamicOffsetCount, + PointerDecoder* pDynamicOffsets) override; + + virtual void Process_vkCmdClearColorImage( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId image, + VkImageLayout imageLayout, + StructPointerDecoder* pColor, + uint32_t rangeCount, + StructPointerDecoder* pRanges) override; + + virtual void Process_vkCmdDispatch( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) override; + + virtual void Process_vkCmdDispatchIndirect( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset) override; + + virtual void Process_vkCmdSetEvent( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId event, + VkPipelineStageFlags stageMask) override; + + virtual void Process_vkCmdResetEvent( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId event, + VkPipelineStageFlags stageMask) override; + + virtual void Process_vkCmdWaitEvents( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t eventCount, + HandlePointerDecoder* pEvents, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + uint32_t memoryBarrierCount, + StructPointerDecoder* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + StructPointerDecoder* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + StructPointerDecoder* pImageMemoryBarriers) override; + + virtual void Process_vkCmdPushConstants( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId layout, + VkShaderStageFlags stageFlags, + uint32_t offset, + uint32_t size, + PointerDecoder* pValues) override; + + virtual void Process_vkCreateGraphicsPipelines( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - format::HandleId descriptorPool, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets) override; - - virtual void Process_vkUpdateDescriptorSets( - const ApiCallInfo& call_info, - format::HandleId device, - uint32_t descriptorWriteCount, - StructPointerDecoder* pDescriptorWrites, - uint32_t descriptorCopyCount, - StructPointerDecoder* pDescriptorCopies) override; + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) override; virtual void Process_vkCreateFramebuffer( const ApiCallInfo& call_info, @@ -610,64 +845,6 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId renderPass, StructPointerDecoder* pGranularity) override; - virtual void Process_vkCreateCommandPool( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pCommandPool) override; - - virtual void Process_vkDestroyCommandPool( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId commandPool, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkResetCommandPool( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - format::HandleId commandPool, - VkCommandPoolResetFlags flags) override; - - virtual void Process_vkAllocateCommandBuffers( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pAllocateInfo, - HandlePointerDecoder* pCommandBuffers) override; - - virtual void Process_vkFreeCommandBuffers( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId commandPool, - uint32_t commandBufferCount, - HandlePointerDecoder* pCommandBuffers) override; - - virtual void Process_vkBeginCommandBuffer( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId commandBuffer, - StructPointerDecoder* pBeginInfo) override; - - virtual void Process_vkEndCommandBuffer( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId commandBuffer) override; - - virtual void Process_vkResetCommandBuffer( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId commandBuffer, - VkCommandBufferResetFlags flags) override; - - virtual void Process_vkCmdBindPipeline( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - format::HandleId pipeline) override; - virtual void Process_vkCmdSetViewport( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -723,17 +900,6 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase VkStencilFaceFlags faceMask, uint32_t reference) override; - virtual void Process_vkCmdBindDescriptorSets( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - format::HandleId layout, - uint32_t firstSet, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets, - uint32_t dynamicOffsetCount, - PointerDecoder* pDynamicOffsets) override; - virtual void Process_vkCmdBindIndexBuffer( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -780,205 +946,45 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId buffer, VkDeviceSize offset, uint32_t drawCount, - uint32_t stride) override; - - virtual void Process_vkCmdDispatch( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) override; - - virtual void Process_vkCmdDispatchIndirect( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset) override; - - virtual void Process_vkCmdCopyBuffer( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcBuffer, - format::HandleId dstBuffer, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; - - virtual void Process_vkCmdCopyImage( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; - - virtual void Process_vkCmdBlitImage( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions, - VkFilter filter) override; - - virtual void Process_vkCmdCopyBufferToImage( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcBuffer, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; - - virtual void Process_vkCmdCopyImageToBuffer( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstBuffer, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; - - virtual void Process_vkCmdUpdateBuffer( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize dataSize, - PointerDecoder* pData) override; - - virtual void Process_vkCmdFillBuffer( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize size, - uint32_t data) override; - - virtual void Process_vkCmdClearColorImage( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId image, - VkImageLayout imageLayout, - StructPointerDecoder* pColor, - uint32_t rangeCount, - StructPointerDecoder* pRanges) override; - - virtual void Process_vkCmdClearDepthStencilImage( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId image, - VkImageLayout imageLayout, - StructPointerDecoder* pDepthStencil, - uint32_t rangeCount, - StructPointerDecoder* pRanges) override; - - virtual void Process_vkCmdClearAttachments( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t attachmentCount, - StructPointerDecoder* pAttachments, - uint32_t rectCount, - StructPointerDecoder* pRects) override; - - virtual void Process_vkCmdResolveImage( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId srcImage, - VkImageLayout srcImageLayout, - format::HandleId dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - StructPointerDecoder* pRegions) override; - - virtual void Process_vkCmdSetEvent( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags stageMask) override; - - virtual void Process_vkCmdResetEvent( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags stageMask) override; - - virtual void Process_vkCmdWaitEvents( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t eventCount, - HandlePointerDecoder* pEvents, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - uint32_t memoryBarrierCount, - StructPointerDecoder* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - StructPointerDecoder* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - StructPointerDecoder* pImageMemoryBarriers) override; - - virtual void Process_vkCmdPipelineBarrier( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - StructPointerDecoder* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - StructPointerDecoder* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - StructPointerDecoder* pImageMemoryBarriers) override; - - virtual void Process_vkCmdBeginQuery( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t query, - VkQueryControlFlags flags) override; - - virtual void Process_vkCmdEndQuery( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t query) override; + uint32_t stride) override; - virtual void Process_vkCmdResetQueryPool( + virtual void Process_vkCmdBlitImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount) override; + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + VkFilter filter) override; - virtual void Process_vkCmdWriteTimestamp( + virtual void Process_vkCmdClearDepthStencilImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - VkPipelineStageFlagBits pipelineStage, - format::HandleId queryPool, - uint32_t query) override; + format::HandleId image, + VkImageLayout imageLayout, + StructPointerDecoder* pDepthStencil, + uint32_t rangeCount, + StructPointerDecoder* pRanges) override; - virtual void Process_vkCmdCopyQueryPoolResults( + virtual void Process_vkCmdClearAttachments( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId queryPool, - uint32_t firstQuery, - uint32_t queryCount, - format::HandleId dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags) override; + uint32_t attachmentCount, + StructPointerDecoder* pAttachments, + uint32_t rectCount, + StructPointerDecoder* pRects) override; - virtual void Process_vkCmdPushConstants( + virtual void Process_vkCmdResolveImage( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId layout, - VkShaderStageFlags stageFlags, - uint32_t offset, - uint32_t size, - PointerDecoder* pValues) override; + format::HandleId srcImage, + VkImageLayout srcImageLayout, + format::HandleId dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions) override; virtual void Process_vkCmdBeginRenderPass( const ApiCallInfo& call_info, @@ -995,12 +1001,6 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase const ApiCallInfo& call_info, format::HandleId commandBuffer) override; - virtual void Process_vkCmdExecuteCommands( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t commandBufferCount, - HandlePointerDecoder* pCommandBuffers) override; - virtual void Process_vkBindBufferMemory2( const ApiCallInfo& call_info, VkResult returnValue, @@ -1028,16 +1028,6 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId commandBuffer, uint32_t deviceMask) override; - virtual void Process_vkCmdDispatchBase( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ) override; - virtual void Process_vkEnumeratePhysicalDeviceGroups( const ApiCallInfo& call_info, VkResult returnValue, @@ -1117,34 +1107,6 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase StructPointerDecoder* pQueueInfo, HandlePointerDecoder* pQueue) override; - virtual void Process_vkCreateSamplerYcbcrConversion( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pYcbcrConversion) override; - - virtual void Process_vkDestroySamplerYcbcrConversion( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId ycbcrConversion, - StructPointerDecoder* pAllocator) override; - - virtual void Process_vkCreateDescriptorUpdateTemplate( - const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pAllocator, - HandlePointerDecoder* pDescriptorUpdateTemplate) override; - - virtual void Process_vkDestroyDescriptorUpdateTemplate( - const ApiCallInfo& call_info, - format::HandleId device, - format::HandleId descriptorUpdateTemplate, - StructPointerDecoder* pAllocator) override; - virtual void Process_vkGetPhysicalDeviceExternalBufferProperties( const ApiCallInfo& call_info, format::HandleId physicalDevice, @@ -1163,56 +1125,49 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase StructPointerDecoder* pExternalSemaphoreInfo, StructPointerDecoder* pExternalSemaphoreProperties) override; - virtual void Process_vkGetDescriptorSetLayoutSupport( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pCreateInfo, - StructPointerDecoder* pSupport) override; - - virtual void Process_vkCmdDrawIndirectCount( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - format::HandleId countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) override; - - virtual void Process_vkCmdDrawIndexedIndirectCount( + virtual void Process_vkCmdDispatchBase( const ApiCallInfo& call_info, format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - format::HandleId countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride) override; + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) override; - virtual void Process_vkCreateRenderPass2( + virtual void Process_vkCreateDescriptorUpdateTemplate( const ApiCallInfo& call_info, VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pCreateInfo, StructPointerDecoder* pAllocator, - HandlePointerDecoder* pRenderPass) override; + HandlePointerDecoder* pDescriptorUpdateTemplate) override; - virtual void Process_vkCmdBeginRenderPass2( + virtual void Process_vkDestroyDescriptorUpdateTemplate( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pRenderPassBegin, - StructPointerDecoder* pSubpassBeginInfo) override; + format::HandleId device, + format::HandleId descriptorUpdateTemplate, + StructPointerDecoder* pAllocator) override; - virtual void Process_vkCmdNextSubpass2( + virtual void Process_vkGetDescriptorSetLayoutSupport( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pSubpassBeginInfo, - StructPointerDecoder* pSubpassEndInfo) override; + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pSupport) override; - virtual void Process_vkCmdEndRenderPass2( + virtual void Process_vkCreateSamplerYcbcrConversion( const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pSubpassEndInfo) override; + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pYcbcrConversion) override; + + virtual void Process_vkDestroySamplerYcbcrConversion( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId ycbcrConversion, + StructPointerDecoder* pAllocator) override; virtual void Process_vkResetQueryPool( const ApiCallInfo& call_info, @@ -1259,6 +1214,51 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId device, StructPointerDecoder* pInfo) override; + virtual void Process_vkCmdDrawIndirectCount( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + format::HandleId countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) override; + + virtual void Process_vkCmdDrawIndexedIndirectCount( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + format::HandleId countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) override; + + virtual void Process_vkCreateRenderPass2( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pRenderPass) override; + + virtual void Process_vkCmdBeginRenderPass2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pRenderPassBegin, + StructPointerDecoder* pSubpassBeginInfo) override; + + virtual void Process_vkCmdNextSubpass2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pSubpassBeginInfo, + StructPointerDecoder* pSubpassEndInfo) override; + + virtual void Process_vkCmdEndRenderPass2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pSubpassEndInfo) override; + virtual void Process_vkGetPhysicalDeviceToolProperties( const ApiCallInfo& call_info, VkResult returnValue, @@ -1297,25 +1297,6 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId privateDataSlot, PointerDecoder* pData) override; - virtual void Process_vkCmdSetEvent2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - StructPointerDecoder* pDependencyInfo) override; - - virtual void Process_vkCmdResetEvent2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId event, - VkPipelineStageFlags2 stageMask) override; - - virtual void Process_vkCmdWaitEvents2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t eventCount, - HandlePointerDecoder* pEvents, - StructPointerDecoder* pDependencyInfos) override; - virtual void Process_vkCmdPipelineBarrier2( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -1341,20 +1322,58 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pCopyBufferInfo) override; - virtual void Process_vkCmdCopyImage2( + virtual void Process_vkCmdCopyImage2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyImageInfo) override; + + virtual void Process_vkCmdCopyBufferToImage2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyBufferToImageInfo) override; + + virtual void Process_vkCmdCopyImageToBuffer2( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyImageToBufferInfo) override; + + virtual void Process_vkGetDeviceBufferMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) override; + + virtual void Process_vkGetDeviceImageMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) override; + + virtual void Process_vkGetDeviceImageSparseMemoryRequirements( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pSparseMemoryRequirementCount, + StructPointerDecoder* pSparseMemoryRequirements) override; + + virtual void Process_vkCmdSetEvent2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyImageInfo) override; + format::HandleId event, + StructPointerDecoder* pDependencyInfo) override; - virtual void Process_vkCmdCopyBufferToImage2( + virtual void Process_vkCmdResetEvent2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyBufferToImageInfo) override; + format::HandleId event, + VkPipelineStageFlags2 stageMask) override; - virtual void Process_vkCmdCopyImageToBuffer2( + virtual void Process_vkCmdWaitEvents2( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pCopyImageToBufferInfo) override; + uint32_t eventCount, + HandlePointerDecoder* pEvents, + StructPointerDecoder* pDependencyInfos) override; virtual void Process_vkCmdBlitImage2( const ApiCallInfo& call_info, @@ -1461,31 +1480,6 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId commandBuffer, VkBool32 primitiveRestartEnable) override; - virtual void Process_vkGetDeviceBufferMemoryRequirements( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pMemoryRequirements) override; - - virtual void Process_vkGetDeviceImageMemoryRequirements( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - StructPointerDecoder* pMemoryRequirements) override; - - virtual void Process_vkGetDeviceImageSparseMemoryRequirements( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pInfo, - PointerDecoder* pSparseMemoryRequirementCount, - StructPointerDecoder* pSparseMemoryRequirements) override; - - virtual void Process_vkCmdSetLineStipple( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - uint32_t lineStippleFactor, - uint16_t lineStipplePattern) override; - virtual void Process_vkMapMemory2( const ApiCallInfo& call_info, VkResult returnValue, @@ -1499,20 +1493,6 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId device, StructPointerDecoder* pMemoryUnmapInfo) override; - virtual void Process_vkCmdBindIndexBuffer2( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - format::HandleId buffer, - VkDeviceSize offset, - VkDeviceSize size, - VkIndexType indexType) override; - - virtual void Process_vkGetRenderingAreaGranularity( - const ApiCallInfo& call_info, - format::HandleId device, - StructPointerDecoder* pRenderingAreaInfo, - StructPointerDecoder* pGranularity) override; - virtual void Process_vkGetDeviceImageSubresourceLayout( const ApiCallInfo& call_info, format::HandleId device, @@ -1526,6 +1506,31 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase StructPointerDecoder* pSubresource, StructPointerDecoder* pLayout) override; + virtual void Process_vkCopyMemoryToImage( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyMemoryToImageInfo) override; + + virtual void Process_vkCopyImageToMemory( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyImageToMemoryInfo) override; + + virtual void Process_vkCopyImageToImage( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCopyImageToImageInfo) override; + + virtual void Process_vkTransitionImageLayout( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + uint32_t transitionCount, + StructPointerDecoder* pTransitions) override; + virtual void Process_vkCmdPushDescriptorSet( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -1535,16 +1540,6 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase uint32_t descriptorWriteCount, StructPointerDecoder* pDescriptorWrites) override; - virtual void Process_vkCmdSetRenderingAttachmentLocations( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pLocationInfo) override; - - virtual void Process_vkCmdSetRenderingInputAttachmentIndices( - const ApiCallInfo& call_info, - format::HandleId commandBuffer, - StructPointerDecoder* pInputAttachmentIndexInfo) override; - virtual void Process_vkCmdBindDescriptorSets2( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -1560,30 +1555,35 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pPushDescriptorSetInfo) override; - virtual void Process_vkCopyMemoryToImage( + virtual void Process_vkCmdSetLineStipple( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCopyMemoryToImageInfo) override; + format::HandleId commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern) override; - virtual void Process_vkCopyImageToMemory( + virtual void Process_vkCmdBindIndexBuffer2( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - StructPointerDecoder* pCopyImageToMemoryInfo) override; + format::HandleId commandBuffer, + format::HandleId buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType) override; - virtual void Process_vkCopyImageToImage( + virtual void Process_vkGetRenderingAreaGranularity( const ApiCallInfo& call_info, - VkResult returnValue, format::HandleId device, - StructPointerDecoder* pCopyImageToImageInfo) override; + StructPointerDecoder* pRenderingAreaInfo, + StructPointerDecoder* pGranularity) override; - virtual void Process_vkTransitionImageLayout( + virtual void Process_vkCmdSetRenderingAttachmentLocations( const ApiCallInfo& call_info, - VkResult returnValue, - format::HandleId device, - uint32_t transitionCount, - StructPointerDecoder* pTransitions) override; + format::HandleId commandBuffer, + StructPointerDecoder* pLocationInfo) override; + + virtual void Process_vkCmdSetRenderingInputAttachmentIndices( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pInputAttachmentIndexInfo) override; virtual void Process_vkDestroySurfaceKHR( const ApiCallInfo& call_info, @@ -2671,6 +2671,21 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pBindDescriptorBufferEmbeddedSamplersInfo) override; + virtual void Process_vkCmdCopyMemoryIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryIndirectInfo) override; + + virtual void Process_vkCmdCopyMemoryToImageIndirectKHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pCopyMemoryToImageIndirectInfo) override; + + virtual void Process_vkCmdEndRendering2KHR( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pRenderingEndInfo) override; + virtual void Process_vkFrameBoundaryANDROID( const ApiCallInfo& call_info, format::HandleId device, @@ -3350,6 +3365,36 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase PointerDecoder* pCheckpointDataCount, StructPointerDecoder* pCheckpointData) override; + virtual void Process_vkSetSwapchainPresentTimingQueueSizeEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + uint32_t size) override; + + virtual void Process_vkGetSwapchainTimingPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimingProperties, + PointerDecoder* pSwapchainTimingPropertiesCounter) override; + + virtual void Process_vkGetSwapchainTimeDomainPropertiesEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId swapchain, + StructPointerDecoder* pSwapchainTimeDomainProperties, + PointerDecoder* pTimeDomainsCounter) override; + + virtual void Process_vkGetPastPresentationTimingEXT( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPastPresentationTimingInfo, + StructPointerDecoder* pPastPresentationTimingProperties) override; + virtual void Process_vkInitializePerformanceApiINTEL( const ApiCallInfo& call_info, VkResult returnValue, @@ -3714,6 +3759,49 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pPerTileEndInfo) override; + virtual void Process_vkGetDescriptorSetLayoutSizeEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + PointerDecoder* pLayoutSizeInBytes) override; + + virtual void Process_vkGetDescriptorSetLayoutBindingOffsetEXT( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId layout, + uint32_t binding, + PointerDecoder* pOffset) override; + + virtual void Process_vkGetDescriptorEXT( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pDescriptorInfo, + size_t dataSize, + PointerDecoder* pDescriptor) override; + + virtual void Process_vkCmdBindDescriptorBuffersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + uint32_t bufferCount, + StructPointerDecoder* pBindingInfos) override; + + virtual void Process_vkCmdSetDescriptorBufferOffsetsEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t firstSet, + uint32_t setCount, + PointerDecoder* pBufferIndices, + PointerDecoder* pOffsets) override; + + virtual void Process_vkCmdBindDescriptorBufferEmbeddedSamplersEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + format::HandleId layout, + uint32_t set) override; + virtual void Process_vkCmdSetFragmentShadingRateEnumNV( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -4337,6 +4425,88 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId queue, StructPointerDecoder* pQueueTypeInfo) override; + virtual void Process_vkCreateDataGraphPipelinesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + format::HandleId deferredOperation, + format::HandleId pipelineCache, + uint32_t createInfoCount, + StructPointerDecoder* pCreateInfos, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pPipelines) override; + + virtual void Process_vkCreateDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pCreateInfo, + StructPointerDecoder* pAllocator, + HandlePointerDecoder* pSession) override; + + virtual void Process_vkGetDataGraphPipelineSessionBindPointRequirementsARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pInfo, + PointerDecoder* pBindPointRequirementCount, + StructPointerDecoder* pBindPointRequirements) override; + + virtual void Process_vkGetDataGraphPipelineSessionMemoryRequirementsARM( + const ApiCallInfo& call_info, + format::HandleId device, + StructPointerDecoder* pInfo, + StructPointerDecoder* pMemoryRequirements) override; + + virtual void Process_vkBindDataGraphPipelineSessionMemoryARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + uint32_t bindInfoCount, + StructPointerDecoder* pBindInfos) override; + + virtual void Process_vkDestroyDataGraphPipelineSessionARM( + const ApiCallInfo& call_info, + format::HandleId device, + format::HandleId session, + StructPointerDecoder* pAllocator) override; + + virtual void Process_vkCmdDispatchDataGraphARM( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + format::HandleId session, + StructPointerDecoder* pInfo) override; + + virtual void Process_vkGetDataGraphPipelineAvailablePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + PointerDecoder* pPropertiesCount, + PointerDecoder* pProperties) override; + + virtual void Process_vkGetDataGraphPipelinePropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId device, + StructPointerDecoder* pPipelineInfo, + uint32_t propertiesCount, + StructPointerDecoder* pProperties) override; + + virtual void Process_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pQueueFamilyDataGraphPropertyCount, + StructPointerDecoder* pQueueFamilyDataGraphProperties) override; + + virtual void Process_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + const ApiCallInfo& call_info, + format::HandleId physicalDevice, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineInfo, + StructPointerDecoder* pQueueFamilyDataGraphProcessingEngineProperties) override; + virtual void Process_vkCmdSetAttachmentFeedbackLoopEnableEXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, @@ -4347,6 +4517,20 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase format::HandleId commandBuffer, StructPointerDecoder* pTileMemoryBindInfo) override; + virtual void Process_vkCmdDecompressMemoryEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pDecompressMemoryInfoEXT) override; + + virtual void Process_vkCmdDecompressMemoryIndirectCountEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + VkMemoryDecompressionMethodFlagsEXT decompressionMethod, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t maxDecompressionCount, + uint32_t stride) override; + virtual void Process_vkGetPartitionedAccelerationStructuresBuildSizesNV( const ApiCallInfo& call_info, format::HandleId device, @@ -4440,10 +4624,29 @@ class VulkanReplayConsumer : public VulkanReplayConsumerBase uint64_t pHandle, StructPointerDecoder* pMemoryMetalHandleProperties) override; + virtual void Process_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM( + const ApiCallInfo& call_info, + VkResult returnValue, + format::HandleId physicalDevice, + uint32_t queueFamilyIndex, + PointerDecoder* pCounterCount, + StructPointerDecoder* pCounters, + StructPointerDecoder* pCounterDescriptions) override; + virtual void Process_vkCmdEndRendering2EXT( const ApiCallInfo& call_info, format::HandleId commandBuffer, - StructPointerDecoder* pRenderingEndInfo) override; + StructPointerDecoder* pRenderingEndInfo) override; + + virtual void Process_vkCmdBeginCustomResolveEXT( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pBeginCustomResolveInfo) override; + + virtual void Process_vkCmdSetComputeOccupancyPriorityNV( + const ApiCallInfo& call_info, + format::HandleId commandBuffer, + StructPointerDecoder* pParameters) override; virtual void Process_vkCreateAccelerationStructureKHR( const ApiCallInfo& call_info, diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_dump_resources.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_dump_resources.cpp index ef9437a40..794641725 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_dump_resources.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_dump_resources.cpp @@ -40,374 +40,431 @@ void VulkanReplayDumpResources::Process_vkEndCommandBuffer( VkResult returnValue, VkCommandBuffer commandBuffer) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideEndCommandBuffer(call_info, func, commandBuffer); } } -void VulkanReplayDumpResources::Process_vkCmdBindPipeline( +void VulkanReplayDumpResources::Process_vkCmdCopyBuffer( const ApiCallInfo& call_info, - PFN_vkCmdBindPipeline func, + PFN_vkCmdCopyBuffer func, VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - const VulkanPipelineInfo* pipeline) + const VulkanBufferInfo* srcBuffer, + const VulkanBufferInfo* dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - OverrideCmdBindPipeline(call_info, func, commandBuffer, pipelineBindPoint, pipeline); + OverrideCmdCopyBuffer(call_info, func, commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions, before_command); } } -void VulkanReplayDumpResources::Process_vkCmdSetViewport( +void VulkanReplayDumpResources::Process_vkCmdCopyImage( const ApiCallInfo& call_info, - PFN_vkCmdSetViewport func, + PFN_vkCmdCopyImage func, VkCommandBuffer commandBuffer, - uint32_t firstViewport, - uint32_t viewportCount, - const VkViewport* pViewports) + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, firstViewport, viewportCount, pViewports); - } - } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, firstViewport, viewportCount, pViewports); - } + OverrideCmdCopyImage(call_info, func, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, before_command); } } -void VulkanReplayDumpResources::Process_vkCmdSetScissor( +void VulkanReplayDumpResources::Process_vkCmdCopyBufferToImage( const ApiCallInfo& call_info, - PFN_vkCmdSetScissor func, + PFN_vkCmdCopyBufferToImage func, VkCommandBuffer commandBuffer, - uint32_t firstScissor, - uint32_t scissorCount, - const VkRect2D* pScissors) + const VulkanBufferInfo* srcBuffer, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, firstScissor, scissorCount, pScissors); - } - } + OverrideCmdCopyBufferToImage(call_info, func, commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions, before_command); + } +} - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, firstScissor, scissorCount, pScissors); - } +void VulkanReplayDumpResources::Process_vkCmdCopyImageToBuffer( + const ApiCallInfo& call_info, + PFN_vkCmdCopyImageToBuffer func, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanBufferInfo* dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command) +{ + if (IsRecording()) + { + OverrideCmdCopyImageToBuffer(call_info, func, commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions, before_command); } } -void VulkanReplayDumpResources::Process_vkCmdSetLineWidth( +void VulkanReplayDumpResources::Process_vkCmdUpdateBuffer( const ApiCallInfo& call_info, - PFN_vkCmdSetLineWidth func, + PFN_vkCmdUpdateBuffer func, VkCommandBuffer commandBuffer, - float lineWidth) + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize dataSize, + const void* pData) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, lineWidth); + func(*it, dstBuffer, dstOffset, dataSize, pData); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, lineWidth); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, dstBuffer, dstOffset, dataSize, pData); + } } } } -void VulkanReplayDumpResources::Process_vkCmdSetDepthBias( +void VulkanReplayDumpResources::Process_vkCmdFillBuffer( const ApiCallInfo& call_info, - PFN_vkCmdSetDepthBias func, + PFN_vkCmdFillBuffer func, VkCommandBuffer commandBuffer, - float depthBiasConstantFactor, - float depthBiasClamp, - float depthBiasSlopeFactor) + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize size, + uint32_t data) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); + func(*it, dstBuffer, dstOffset, size, data); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, dstBuffer, dstOffset, size, data); + } } } } -void VulkanReplayDumpResources::Process_vkCmdSetBlendConstants( +void VulkanReplayDumpResources::Process_vkCmdPipelineBarrier( const ApiCallInfo& call_info, - PFN_vkCmdSetBlendConstants func, + PFN_vkCmdPipelineBarrier func, VkCommandBuffer commandBuffer, - const float* blendConstants) + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkDependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + const VkMemoryBarrier* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const VkBufferMemoryBarrier* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const VkImageMemoryBarrier* pImageMemoryBarriers) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, blendConstants); + func(*it, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, blendConstants); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + } } } } -void VulkanReplayDumpResources::Process_vkCmdSetDepthBounds( +void VulkanReplayDumpResources::Process_vkCmdBeginQuery( const ApiCallInfo& call_info, - PFN_vkCmdSetDepthBounds func, + PFN_vkCmdBeginQuery func, VkCommandBuffer commandBuffer, - float minDepthBounds, - float maxDepthBounds) + VkQueryPool queryPool, + uint32_t query, + VkQueryControlFlags flags) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, minDepthBounds, maxDepthBounds); + func(*it, queryPool, query, flags); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, minDepthBounds, maxDepthBounds); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, queryPool, query, flags); + } } } } -void VulkanReplayDumpResources::Process_vkCmdSetStencilCompareMask( +void VulkanReplayDumpResources::Process_vkCmdEndQuery( const ApiCallInfo& call_info, - PFN_vkCmdSetStencilCompareMask func, + PFN_vkCmdEndQuery func, VkCommandBuffer commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t compareMask) + VkQueryPool queryPool, + uint32_t query) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, faceMask, compareMask); + func(*it, queryPool, query); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, faceMask, compareMask); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, queryPool, query); + } } } } -void VulkanReplayDumpResources::Process_vkCmdSetStencilWriteMask( +void VulkanReplayDumpResources::Process_vkCmdResetQueryPool( const ApiCallInfo& call_info, - PFN_vkCmdSetStencilWriteMask func, + PFN_vkCmdResetQueryPool func, VkCommandBuffer commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t writeMask) + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, faceMask, writeMask); + func(*it, queryPool, firstQuery, queryCount); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, faceMask, writeMask); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, queryPool, firstQuery, queryCount); + } } } } -void VulkanReplayDumpResources::Process_vkCmdSetStencilReference( +void VulkanReplayDumpResources::Process_vkCmdWriteTimestamp( const ApiCallInfo& call_info, - PFN_vkCmdSetStencilReference func, + PFN_vkCmdWriteTimestamp func, VkCommandBuffer commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t reference) + VkPipelineStageFlagBits pipelineStage, + VkQueryPool queryPool, + uint32_t query) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, faceMask, reference); + func(*it, pipelineStage, queryPool, query); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, faceMask, reference); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pipelineStage, queryPool, query); + } } } } -void VulkanReplayDumpResources::Process_vkCmdBindDescriptorSets( +void VulkanReplayDumpResources::Process_vkCmdCopyQueryPoolResults( const ApiCallInfo& call_info, - PFN_vkCmdBindDescriptorSets func, + PFN_vkCmdCopyQueryPoolResults func, VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - const VulkanPipelineLayoutInfo* layout, - uint32_t firstSet, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets, - uint32_t dynamicOffsetCount, - const uint32_t* pDynamicOffsets) + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - OverrideCmdBindDescriptorSets(call_info, func, commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets->GetPointer(), dynamicOffsetCount, pDynamicOffsets); - } -} + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); + } + } -void VulkanReplayDumpResources::Process_vkCmdBindIndexBuffer( - const ApiCallInfo& call_info, - PFN_vkCmdBindIndexBuffer func, - VkCommandBuffer commandBuffer, - const VulkanBufferInfo* buffer, - VkDeviceSize offset, - VkIndexType indexType) -{ - if (IsRecording(commandBuffer)) - { - OverrideCmdBindIndexBuffer(call_info, func, commandBuffer, buffer, offset, indexType); + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); + } + } } } -void VulkanReplayDumpResources::Process_vkCmdBindVertexBuffers( +void VulkanReplayDumpResources::Process_vkCmdExecuteCommands( const ApiCallInfo& call_info, - PFN_vkCmdBindVertexBuffers func, + PFN_vkCmdExecuteCommands func, VkCommandBuffer commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - HandlePointerDecoder* pBuffers, - const VkDeviceSize* pOffsets) + uint32_t commandBufferCount, + const VkCommandBuffer* pCommandBuffers) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - OverrideCmdBindVertexBuffers(call_info, func, commandBuffer, firstBinding, bindingCount, pBuffers->GetPointer(), pOffsets); + OverrideCmdExecuteCommands(call_info, func, commandBuffer, commandBufferCount, pCommandBuffers); } } -void VulkanReplayDumpResources::Process_vkCmdDraw( +void VulkanReplayDumpResources::Process_vkCmdBindPipeline( const ApiCallInfo& call_info, - PFN_vkCmdDraw func, + PFN_vkCmdBindPipeline func, VkCommandBuffer commandBuffer, - uint32_t vertexCount, - uint32_t instanceCount, - uint32_t firstVertex, - uint32_t firstInstance) + VkPipelineBindPoint pipelineBindPoint, + const VulkanPipelineInfo* pipeline) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - OverrideCmdDraw(call_info, func, commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); + OverrideCmdBindPipeline(call_info, func, commandBuffer, pipelineBindPoint, pipeline); } } -void VulkanReplayDumpResources::Process_vkCmdDrawIndexed( +void VulkanReplayDumpResources::Process_vkCmdBindDescriptorSets( const ApiCallInfo& call_info, - PFN_vkCmdDrawIndexed func, + PFN_vkCmdBindDescriptorSets func, VkCommandBuffer commandBuffer, - uint32_t indexCount, - uint32_t instanceCount, - uint32_t firstIndex, - int32_t vertexOffset, - uint32_t firstInstance) + VkPipelineBindPoint pipelineBindPoint, + const VulkanPipelineLayoutInfo* layout, + uint32_t firstSet, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets, + uint32_t dynamicOffsetCount, + const uint32_t* pDynamicOffsets) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - OverrideCmdDrawIndexed(call_info, func, commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); + OverrideCmdBindDescriptorSets(call_info, func, commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets->GetPointer(), dynamicOffsetCount, pDynamicOffsets); } } -void VulkanReplayDumpResources::Process_vkCmdDrawIndirect( +void VulkanReplayDumpResources::Process_vkCmdClearColorImage( const ApiCallInfo& call_info, - PFN_vkCmdDrawIndirect func, + PFN_vkCmdClearColorImage func, VkCommandBuffer commandBuffer, - const VulkanBufferInfo* buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) + VkImage image, + VkImageLayout imageLayout, + const VkClearColorValue* pColor, + uint32_t rangeCount, + const VkImageSubresourceRange* pRanges) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - OverrideCmdDrawIndirect(call_info, func, commandBuffer, buffer, offset, drawCount, stride); - } -} + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, image, imageLayout, pColor, rangeCount, pRanges); + } + } -void VulkanReplayDumpResources::Process_vkCmdDrawIndexedIndirect( - const ApiCallInfo& call_info, - PFN_vkCmdDrawIndexedIndirect func, - VkCommandBuffer commandBuffer, - const VulkanBufferInfo* buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride) -{ - if (IsRecording(commandBuffer)) - { - OverrideCmdDrawIndexedIndirect(call_info, func, commandBuffer, buffer, offset, drawCount, stride); + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, image, imageLayout, pColor, rangeCount, pRanges); + } + } } } @@ -419,7 +476,7 @@ void VulkanReplayDumpResources::Process_vkCmdDispatch( uint32_t groupCountY, uint32_t groupCountZ) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdDispatch(call_info, func, commandBuffer, groupCountX, groupCountY, groupCountZ); } @@ -432,634 +489,650 @@ void VulkanReplayDumpResources::Process_vkCmdDispatchIndirect( const VulkanBufferInfo* buffer, VkDeviceSize offset) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdDispatchIndirect(call_info, func, commandBuffer, buffer, offset); } } -void VulkanReplayDumpResources::Process_vkCmdCopyBuffer( +void VulkanReplayDumpResources::Process_vkCmdSetEvent( const ApiCallInfo& call_info, - PFN_vkCmdCopyBuffer func, + PFN_vkCmdSetEvent func, VkCommandBuffer commandBuffer, - VkBuffer srcBuffer, - VkBuffer dstBuffer, - uint32_t regionCount, - const VkBufferCopy* pRegions) + VkEvent event, + VkPipelineStageFlags stageMask) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, srcBuffer, dstBuffer, regionCount, pRegions); + func(*it, event, stageMask); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, srcBuffer, dstBuffer, regionCount, pRegions); - } - } -} - -void VulkanReplayDumpResources::Process_vkCmdCopyImage( - const ApiCallInfo& call_info, - PFN_vkCmdCopyImage func, - VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageCopy* pRegions) -{ - if (IsRecording(commandBuffer)) - { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) { - func(*it, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + func(dispatch_rays_command_buffer, event, stageMask); } } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); - } } } -void VulkanReplayDumpResources::Process_vkCmdBlitImage( +void VulkanReplayDumpResources::Process_vkCmdResetEvent( const ApiCallInfo& call_info, - PFN_vkCmdBlitImage func, + PFN_vkCmdResetEvent func, VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageBlit* pRegions, - VkFilter filter) + VkEvent event, + VkPipelineStageFlags stageMask) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); + func(*it, event, stageMask); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); - } - } -} - -void VulkanReplayDumpResources::Process_vkCmdCopyBufferToImage( - const ApiCallInfo& call_info, - PFN_vkCmdCopyBufferToImage func, - VkCommandBuffer commandBuffer, - VkBuffer srcBuffer, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkBufferImageCopy* pRegions) -{ - if (IsRecording(commandBuffer)) - { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) { - func(*it, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); + func(dispatch_rays_command_buffer, event, stageMask); } } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); - } } } -void VulkanReplayDumpResources::Process_vkCmdCopyImageToBuffer( +void VulkanReplayDumpResources::Process_vkCmdWaitEvents( const ApiCallInfo& call_info, - PFN_vkCmdCopyImageToBuffer func, + PFN_vkCmdWaitEvents func, VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkBuffer dstBuffer, - uint32_t regionCount, - const VkBufferImageCopy* pRegions) + uint32_t eventCount, + const VkEvent* pEvents, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + uint32_t memoryBarrierCount, + const VkMemoryBarrier* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const VkBufferMemoryBarrier* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const VkImageMemoryBarrier* pImageMemoryBarriers) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); + func(*it, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + } } } } -void VulkanReplayDumpResources::Process_vkCmdUpdateBuffer( +void VulkanReplayDumpResources::Process_vkCmdPushConstants( const ApiCallInfo& call_info, - PFN_vkCmdUpdateBuffer func, + PFN_vkCmdPushConstants func, VkCommandBuffer commandBuffer, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize dataSize, - const void* pData) + VkPipelineLayout layout, + VkShaderStageFlags stageFlags, + uint32_t offset, + uint32_t size, + const void* pValues) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, dstBuffer, dstOffset, dataSize, pData); + func(*it, layout, stageFlags, offset, size, pValues); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, dstBuffer, dstOffset, dataSize, pData); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, layout, stageFlags, offset, size, pValues); + } } } } -void VulkanReplayDumpResources::Process_vkCmdFillBuffer( +void VulkanReplayDumpResources::Process_vkCmdSetViewport( const ApiCallInfo& call_info, - PFN_vkCmdFillBuffer func, + PFN_vkCmdSetViewport func, VkCommandBuffer commandBuffer, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize size, - uint32_t data) + uint32_t firstViewport, + uint32_t viewportCount, + const VkViewport* pViewports) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, dstBuffer, dstOffset, size, data); + func(*it, firstViewport, viewportCount, pViewports); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, dstBuffer, dstOffset, size, data); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstViewport, viewportCount, pViewports); + } } } } -void VulkanReplayDumpResources::Process_vkCmdClearColorImage( +void VulkanReplayDumpResources::Process_vkCmdSetScissor( const ApiCallInfo& call_info, - PFN_vkCmdClearColorImage func, + PFN_vkCmdSetScissor func, VkCommandBuffer commandBuffer, - VkImage image, - VkImageLayout imageLayout, - const VkClearColorValue* pColor, - uint32_t rangeCount, - const VkImageSubresourceRange* pRanges) + uint32_t firstScissor, + uint32_t scissorCount, + const VkRect2D* pScissors) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, image, imageLayout, pColor, rangeCount, pRanges); + func(*it, firstScissor, scissorCount, pScissors); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, image, imageLayout, pColor, rangeCount, pRanges); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstScissor, scissorCount, pScissors); + } } } } -void VulkanReplayDumpResources::Process_vkCmdClearDepthStencilImage( +void VulkanReplayDumpResources::Process_vkCmdSetLineWidth( const ApiCallInfo& call_info, - PFN_vkCmdClearDepthStencilImage func, + PFN_vkCmdSetLineWidth func, VkCommandBuffer commandBuffer, - VkImage image, - VkImageLayout imageLayout, - const VkClearDepthStencilValue* pDepthStencil, - uint32_t rangeCount, - const VkImageSubresourceRange* pRanges) + float lineWidth) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, image, imageLayout, pDepthStencil, rangeCount, pRanges); + func(*it, lineWidth); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, image, imageLayout, pDepthStencil, rangeCount, pRanges); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, lineWidth); + } } } } -void VulkanReplayDumpResources::Process_vkCmdClearAttachments( +void VulkanReplayDumpResources::Process_vkCmdSetDepthBias( const ApiCallInfo& call_info, - PFN_vkCmdClearAttachments func, + PFN_vkCmdSetDepthBias func, VkCommandBuffer commandBuffer, - uint32_t attachmentCount, - const VkClearAttachment* pAttachments, - uint32_t rectCount, - const VkClearRect* pRects) + float depthBiasConstantFactor, + float depthBiasClamp, + float depthBiasSlopeFactor) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, attachmentCount, pAttachments, rectCount, pRects); + func(*it, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, attachmentCount, pAttachments, rectCount, pRects); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); + } } } } -void VulkanReplayDumpResources::Process_vkCmdResolveImage( +void VulkanReplayDumpResources::Process_vkCmdSetBlendConstants( const ApiCallInfo& call_info, - PFN_vkCmdResolveImage func, + PFN_vkCmdSetBlendConstants func, VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageResolve* pRegions) + const float* blendConstants) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + func(*it, blendConstants); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, blendConstants); + } } } } -void VulkanReplayDumpResources::Process_vkCmdSetEvent( +void VulkanReplayDumpResources::Process_vkCmdSetDepthBounds( const ApiCallInfo& call_info, - PFN_vkCmdSetEvent func, + PFN_vkCmdSetDepthBounds func, VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags stageMask) + float minDepthBounds, + float maxDepthBounds) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, event, stageMask); + func(*it, minDepthBounds, maxDepthBounds); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, event, stageMask); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, minDepthBounds, maxDepthBounds); + } } } } -void VulkanReplayDumpResources::Process_vkCmdResetEvent( +void VulkanReplayDumpResources::Process_vkCmdSetStencilCompareMask( const ApiCallInfo& call_info, - PFN_vkCmdResetEvent func, + PFN_vkCmdSetStencilCompareMask func, VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags stageMask) + VkStencilFaceFlags faceMask, + uint32_t compareMask) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, event, stageMask); + func(*it, faceMask, compareMask); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, event, stageMask); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, faceMask, compareMask); + } } } } -void VulkanReplayDumpResources::Process_vkCmdWaitEvents( +void VulkanReplayDumpResources::Process_vkCmdSetStencilWriteMask( const ApiCallInfo& call_info, - PFN_vkCmdWaitEvents func, + PFN_vkCmdSetStencilWriteMask func, VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent* pEvents, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - uint32_t memoryBarrierCount, - const VkMemoryBarrier* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VkBufferMemoryBarrier* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VkImageMemoryBarrier* pImageMemoryBarriers) + VkStencilFaceFlags faceMask, + uint32_t writeMask) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + func(*it, faceMask, writeMask); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, faceMask, writeMask); + } } } } -void VulkanReplayDumpResources::Process_vkCmdPipelineBarrier( +void VulkanReplayDumpResources::Process_vkCmdSetStencilReference( const ApiCallInfo& call_info, - PFN_vkCmdPipelineBarrier func, + PFN_vkCmdSetStencilReference func, VkCommandBuffer commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - const VkMemoryBarrier* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VkBufferMemoryBarrier* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VkImageMemoryBarrier* pImageMemoryBarriers) + VkStencilFaceFlags faceMask, + uint32_t reference) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + func(*it, faceMask, reference); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, faceMask, reference); + } } } } -void VulkanReplayDumpResources::Process_vkCmdBeginQuery( +void VulkanReplayDumpResources::Process_vkCmdBindIndexBuffer( const ApiCallInfo& call_info, - PFN_vkCmdBeginQuery func, + PFN_vkCmdBindIndexBuffer func, VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t query, - VkQueryControlFlags flags) + const VulkanBufferInfo* buffer, + VkDeviceSize offset, + VkIndexType indexType) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, queryPool, query, flags); - } - } + OverrideCmdBindIndexBuffer(call_info, func, commandBuffer, buffer, offset, indexType); + } +} - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, queryPool, query, flags); - } +void VulkanReplayDumpResources::Process_vkCmdBindVertexBuffers( + const ApiCallInfo& call_info, + PFN_vkCmdBindVertexBuffers func, + VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + HandlePointerDecoder* pBuffers, + const VkDeviceSize* pOffsets) +{ + if (IsRecording()) + { + OverrideCmdBindVertexBuffers(call_info, func, commandBuffer, firstBinding, bindingCount, pBuffers->GetPointer(), pOffsets); } } -void VulkanReplayDumpResources::Process_vkCmdEndQuery( +void VulkanReplayDumpResources::Process_vkCmdDraw( const ApiCallInfo& call_info, - PFN_vkCmdEndQuery func, + PFN_vkCmdDraw func, VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t query) + uint32_t vertexCount, + uint32_t instanceCount, + uint32_t firstVertex, + uint32_t firstInstance) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, queryPool, query); - } - } + OverrideCmdDraw(call_info, func, commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); + } +} - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, queryPool, query); - } +void VulkanReplayDumpResources::Process_vkCmdDrawIndexed( + const ApiCallInfo& call_info, + PFN_vkCmdDrawIndexed func, + VkCommandBuffer commandBuffer, + uint32_t indexCount, + uint32_t instanceCount, + uint32_t firstIndex, + int32_t vertexOffset, + uint32_t firstInstance) +{ + if (IsRecording()) + { + OverrideCmdDrawIndexed(call_info, func, commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); } } -void VulkanReplayDumpResources::Process_vkCmdResetQueryPool( +void VulkanReplayDumpResources::Process_vkCmdDrawIndirect( const ApiCallInfo& call_info, - PFN_vkCmdResetQueryPool func, + PFN_vkCmdDrawIndirect func, VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount) + const VulkanBufferInfo* buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, queryPool, firstQuery, queryCount); - } - } + OverrideCmdDrawIndirect(call_info, func, commandBuffer, buffer, offset, drawCount, stride); + } +} - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, queryPool, firstQuery, queryCount); - } +void VulkanReplayDumpResources::Process_vkCmdDrawIndexedIndirect( + const ApiCallInfo& call_info, + PFN_vkCmdDrawIndexedIndirect func, + VkCommandBuffer commandBuffer, + const VulkanBufferInfo* buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) +{ + if (IsRecording()) + { + OverrideCmdDrawIndexedIndirect(call_info, func, commandBuffer, buffer, offset, drawCount, stride); } } -void VulkanReplayDumpResources::Process_vkCmdWriteTimestamp( +void VulkanReplayDumpResources::Process_vkCmdBlitImage( const ApiCallInfo& call_info, - PFN_vkCmdWriteTimestamp func, + PFN_vkCmdBlitImage func, VkCommandBuffer commandBuffer, - VkPipelineStageFlagBits pipelineStage, - VkQueryPool queryPool, - uint32_t query) + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + VkFilter filter, + bool before_command) +{ + if (IsRecording()) + { + OverrideCmdBlitImage(call_info, func, commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter, before_command); + } +} + +void VulkanReplayDumpResources::Process_vkCmdClearDepthStencilImage( + const ApiCallInfo& call_info, + PFN_vkCmdClearDepthStencilImage func, + VkCommandBuffer commandBuffer, + VkImage image, + VkImageLayout imageLayout, + const VkClearDepthStencilValue* pDepthStencil, + uint32_t rangeCount, + const VkImageSubresourceRange* pRanges) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pipelineStage, queryPool, query); + func(*it, image, imageLayout, pDepthStencil, rangeCount, pRanges); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pipelineStage, queryPool, query); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, image, imageLayout, pDepthStencil, rangeCount, pRanges); + } } } } -void VulkanReplayDumpResources::Process_vkCmdCopyQueryPoolResults( +void VulkanReplayDumpResources::Process_vkCmdClearAttachments( const ApiCallInfo& call_info, - PFN_vkCmdCopyQueryPoolResults func, + PFN_vkCmdClearAttachments func, VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags) + uint32_t attachmentCount, + const VkClearAttachment* pAttachments, + uint32_t rectCount, + const VkClearRect* pRects) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); + func(*it, attachmentCount, pAttachments, rectCount, pRects); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, attachmentCount, pAttachments, rectCount, pRects); + } } } } -void VulkanReplayDumpResources::Process_vkCmdPushConstants( +void VulkanReplayDumpResources::Process_vkCmdResolveImage( const ApiCallInfo& call_info, - PFN_vkCmdPushConstants func, + PFN_vkCmdResolveImage func, VkCommandBuffer commandBuffer, - VkPipelineLayout layout, - VkShaderStageFlags stageFlags, - uint32_t offset, - uint32_t size, - const void* pValues) + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkImageResolve* pRegions) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, layout, stageFlags, offset, size, pValues); + func(*it, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, layout, stageFlags, offset, size, pValues); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + } } } } @@ -1071,7 +1144,7 @@ void VulkanReplayDumpResources::Process_vkCmdBeginRenderPass( StructPointerDecoder* pRenderPassBegin, VkSubpassContents contents) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdBeginRenderPass(call_info, func, commandBuffer, pRenderPassBegin, contents); } @@ -1083,7 +1156,7 @@ void VulkanReplayDumpResources::Process_vkCmdNextSubpass( VkCommandBuffer commandBuffer, VkSubpassContents contents) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdNextSubpass(call_info, func, commandBuffer, contents); } @@ -1094,47 +1167,39 @@ void VulkanReplayDumpResources::Process_vkCmdEndRenderPass( PFN_vkCmdEndRenderPass func, VkCommandBuffer commandBuffer) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdEndRenderPass(call_info, func, commandBuffer); } } -void VulkanReplayDumpResources::Process_vkCmdExecuteCommands( - const ApiCallInfo& call_info, - PFN_vkCmdExecuteCommands func, - VkCommandBuffer commandBuffer, - uint32_t commandBufferCount, - const VkCommandBuffer* pCommandBuffers) -{ - if (IsRecording(commandBuffer)) - { - OverrideCmdExecuteCommands(call_info, func, commandBuffer, commandBufferCount, pCommandBuffers); - } -} - void VulkanReplayDumpResources::Process_vkCmdSetDeviceMask( const ApiCallInfo& call_info, PFN_vkCmdSetDeviceMask func, VkCommandBuffer commandBuffer, uint32_t deviceMask) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, deviceMask); + func(*it, deviceMask); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, deviceMask); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, deviceMask); + } } } } @@ -1150,22 +1215,27 @@ void VulkanReplayDumpResources::Process_vkCmdDispatchBase( uint32_t groupCountY, uint32_t groupCountZ) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + func(*it, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + } } } } @@ -1181,7 +1251,7 @@ void VulkanReplayDumpResources::Process_vkCmdDrawIndirectCount( uint32_t maxDrawCount, uint32_t stride) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdDrawIndirectCount(call_info, func, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } @@ -1198,7 +1268,7 @@ void VulkanReplayDumpResources::Process_vkCmdDrawIndexedIndirectCount( uint32_t maxDrawCount, uint32_t stride) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdDrawIndexedIndirectCount(call_info, func, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } @@ -1211,7 +1281,7 @@ void VulkanReplayDumpResources::Process_vkCmdBeginRenderPass2( StructPointerDecoder* pRenderPassBegin, StructPointerDecoder* pSubpassBeginInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdBeginRenderPass2(call_info, func, commandBuffer, pRenderPassBegin, pSubpassBeginInfo); } @@ -1224,7 +1294,7 @@ void VulkanReplayDumpResources::Process_vkCmdNextSubpass2( StructPointerDecoder* pSubpassBeginInfo, StructPointerDecoder* pSubpassEndInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdNextSubpass2(call_info, func, commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); } @@ -1236,248 +1306,221 @@ void VulkanReplayDumpResources::Process_vkCmdEndRenderPass2( VkCommandBuffer commandBuffer, StructPointerDecoder* pSubpassEndInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdEndRenderPass2(call_info, func, commandBuffer, pSubpassEndInfo); } } -void VulkanReplayDumpResources::Process_vkCmdSetEvent2( +void VulkanReplayDumpResources::Process_vkCmdPipelineBarrier2( const ApiCallInfo& call_info, - PFN_vkCmdSetEvent2 func, + PFN_vkCmdPipelineBarrier2 func, VkCommandBuffer commandBuffer, - VkEvent event, const VkDependencyInfo* pDependencyInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, event, pDependencyInfo); + func(*it, pDependencyInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, event, pDependencyInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pDependencyInfo); + } } } } -void VulkanReplayDumpResources::Process_vkCmdResetEvent2( +void VulkanReplayDumpResources::Process_vkCmdWriteTimestamp2( const ApiCallInfo& call_info, - PFN_vkCmdResetEvent2 func, + PFN_vkCmdWriteTimestamp2 func, VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags2 stageMask) + VkPipelineStageFlags2 stage, + VkQueryPool queryPool, + uint32_t query) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, event, stageMask); + func(*it, stage, queryPool, query); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, event, stageMask); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, stage, queryPool, query); + } } } } -void VulkanReplayDumpResources::Process_vkCmdWaitEvents2( +void VulkanReplayDumpResources::Process_vkCmdCopyBuffer2( const ApiCallInfo& call_info, - PFN_vkCmdWaitEvents2 func, + PFN_vkCmdCopyBuffer2 func, VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent* pEvents, - const VkDependencyInfo* pDependencyInfos) + StructPointerDecoder* pCopyBufferInfo, + bool before_command) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, eventCount, pEvents, pDependencyInfos); - } - } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, eventCount, pEvents, pDependencyInfos); - } + OverrideCmdCopyBuffer2(call_info, func, commandBuffer, pCopyBufferInfo, before_command); } } -void VulkanReplayDumpResources::Process_vkCmdPipelineBarrier2( +void VulkanReplayDumpResources::Process_vkCmdCopyImage2( const ApiCallInfo& call_info, - PFN_vkCmdPipelineBarrier2 func, + PFN_vkCmdCopyImage2 func, VkCommandBuffer commandBuffer, - const VkDependencyInfo* pDependencyInfo) + StructPointerDecoder* pCopyImageInfo, + bool before_command) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, pDependencyInfo); - } - } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, pDependencyInfo); - } + OverrideCmdCopyImage2(call_info, func, commandBuffer, pCopyImageInfo, before_command); } } -void VulkanReplayDumpResources::Process_vkCmdWriteTimestamp2( +void VulkanReplayDumpResources::Process_vkCmdCopyBufferToImage2( const ApiCallInfo& call_info, - PFN_vkCmdWriteTimestamp2 func, + PFN_vkCmdCopyBufferToImage2 func, VkCommandBuffer commandBuffer, - VkPipelineStageFlags2 stage, - VkQueryPool queryPool, - uint32_t query) + StructPointerDecoder* pCopyBufferToImageInfo, + bool before_command) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, stage, queryPool, query); - } - } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, stage, queryPool, query); - } + OverrideCmdCopyBufferToImage2(call_info, func, commandBuffer, pCopyBufferToImageInfo, before_command); } } -void VulkanReplayDumpResources::Process_vkCmdCopyBuffer2( +void VulkanReplayDumpResources::Process_vkCmdCopyImageToBuffer2( const ApiCallInfo& call_info, - PFN_vkCmdCopyBuffer2 func, + PFN_vkCmdCopyImageToBuffer2 func, VkCommandBuffer commandBuffer, - const VkCopyBufferInfo2* pCopyBufferInfo) + StructPointerDecoder* pCopyImageToBufferInfo, + bool before_command) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, pCopyBufferInfo); - } - } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, pCopyBufferInfo); - } + OverrideCmdCopyImageToBuffer2(call_info, func, commandBuffer, pCopyImageToBufferInfo, before_command); } } -void VulkanReplayDumpResources::Process_vkCmdCopyImage2( +void VulkanReplayDumpResources::Process_vkCmdSetEvent2( const ApiCallInfo& call_info, - PFN_vkCmdCopyImage2 func, + PFN_vkCmdSetEvent2 func, VkCommandBuffer commandBuffer, - const VkCopyImageInfo2* pCopyImageInfo) + VkEvent event, + const VkDependencyInfo* pDependencyInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pCopyImageInfo); + func(*it, event, pDependencyInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pCopyImageInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, event, pDependencyInfo); + } } } } -void VulkanReplayDumpResources::Process_vkCmdCopyBufferToImage2( +void VulkanReplayDumpResources::Process_vkCmdResetEvent2( const ApiCallInfo& call_info, - PFN_vkCmdCopyBufferToImage2 func, + PFN_vkCmdResetEvent2 func, VkCommandBuffer commandBuffer, - const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo) + VkEvent event, + VkPipelineStageFlags2 stageMask) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pCopyBufferToImageInfo); + func(*it, event, stageMask); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pCopyBufferToImageInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, event, stageMask); + } } } } -void VulkanReplayDumpResources::Process_vkCmdCopyImageToBuffer2( +void VulkanReplayDumpResources::Process_vkCmdWaitEvents2( const ApiCallInfo& call_info, - PFN_vkCmdCopyImageToBuffer2 func, + PFN_vkCmdWaitEvents2 func, VkCommandBuffer commandBuffer, - const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo) + uint32_t eventCount, + const VkEvent* pEvents, + const VkDependencyInfo* pDependencyInfos) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pCopyImageToBufferInfo); + func(*it, eventCount, pEvents, pDependencyInfos); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pCopyImageToBufferInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, eventCount, pEvents, pDependencyInfos); + } } } } @@ -1486,25 +1529,12 @@ void VulkanReplayDumpResources::Process_vkCmdBlitImage2( const ApiCallInfo& call_info, PFN_vkCmdBlitImage2 func, VkCommandBuffer commandBuffer, - const VkBlitImageInfo2* pBlitImageInfo) + StructPointerDecoder* pBlitImageInfo, + bool before_command) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, pBlitImageInfo); - } - } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, pBlitImageInfo); - } + OverrideCmdBlitImage2(call_info, func, commandBuffer, pBlitImageInfo, before_command); } } @@ -1514,22 +1544,27 @@ void VulkanReplayDumpResources::Process_vkCmdResolveImage2( VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pResolveImageInfo); + func(*it, pResolveImageInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pResolveImageInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pResolveImageInfo); + } } } } @@ -1540,7 +1575,7 @@ void VulkanReplayDumpResources::Process_vkCmdBeginRendering( VkCommandBuffer commandBuffer, StructPointerDecoder* pRenderingInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdBeginRendering(call_info, func, commandBuffer, pRenderingInfo); } @@ -1551,7 +1586,7 @@ void VulkanReplayDumpResources::Process_vkCmdEndRendering( PFN_vkCmdEndRendering func, VkCommandBuffer commandBuffer) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdEndRendering(call_info, func, commandBuffer); } @@ -1563,22 +1598,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetCullMode( VkCommandBuffer commandBuffer, VkCullModeFlags cullMode) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, cullMode); + func(*it, cullMode); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, cullMode); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, cullMode); + } } } } @@ -1589,22 +1629,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetFrontFace( VkCommandBuffer commandBuffer, VkFrontFace frontFace) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, frontFace); + func(*it, frontFace); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, frontFace); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, frontFace); + } } } } @@ -1615,22 +1660,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetPrimitiveTopology( VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, primitiveTopology); + func(*it, primitiveTopology); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, primitiveTopology); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, primitiveTopology); + } } } } @@ -1642,22 +1692,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetViewportWithCount( uint32_t viewportCount, const VkViewport* pViewports) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, viewportCount, pViewports); + func(*it, viewportCount, pViewports); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, viewportCount, pViewports); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, viewportCount, pViewports); + } } } } @@ -1669,22 +1724,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetScissorWithCount( uint32_t scissorCount, const VkRect2D* pScissors) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, scissorCount, pScissors); + func(*it, scissorCount, pScissors); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, scissorCount, pScissors); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, scissorCount, pScissors); + } } } } @@ -1700,7 +1760,7 @@ void VulkanReplayDumpResources::Process_vkCmdBindVertexBuffers2( const VkDeviceSize* pSizes, const VkDeviceSize* pStrides) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdBindVertexBuffers2(call_info, func, commandBuffer, firstBinding, bindingCount, pBuffers->GetPointer(), pOffsets, pSizes, pStrides); } @@ -1712,22 +1772,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDepthTestEnable( VkCommandBuffer commandBuffer, VkBool32 depthTestEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, depthTestEnable); + func(*it, depthTestEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, depthTestEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, depthTestEnable); + } } } } @@ -1738,22 +1803,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDepthWriteEnable( VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, depthWriteEnable); + func(*it, depthWriteEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, depthWriteEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, depthWriteEnable); + } } } } @@ -1764,22 +1834,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDepthCompareOp( VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, depthCompareOp); + func(*it, depthCompareOp); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, depthCompareOp); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, depthCompareOp); + } } } } @@ -1790,22 +1865,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDepthBoundsTestEnable( VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, depthBoundsTestEnable); + func(*it, depthBoundsTestEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, depthBoundsTestEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, depthBoundsTestEnable); + } } } } @@ -1816,22 +1896,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetStencilTestEnable( VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, stencilTestEnable); + func(*it, stencilTestEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, stencilTestEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, stencilTestEnable); + } } } } @@ -1846,22 +1931,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetStencilOp( VkStencilOp depthFailOp, VkCompareOp compareOp) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, faceMask, failOp, passOp, depthFailOp, compareOp); + func(*it, faceMask, failOp, passOp, depthFailOp, compareOp); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, faceMask, failOp, passOp, depthFailOp, compareOp); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, faceMask, failOp, passOp, depthFailOp, compareOp); + } } } } @@ -1872,22 +1962,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetRasterizerDiscardEnable( VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, rasterizerDiscardEnable); + func(*it, rasterizerDiscardEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, rasterizerDiscardEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, rasterizerDiscardEnable); + } } } } @@ -1898,22 +1993,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDepthBiasEnable( VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, depthBiasEnable); + func(*it, depthBiasEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, depthBiasEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, depthBiasEnable); + } } } } @@ -1924,293 +2024,329 @@ void VulkanReplayDumpResources::Process_vkCmdSetPrimitiveRestartEnable( VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, primitiveRestartEnable); + func(*it, primitiveRestartEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, primitiveRestartEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, primitiveRestartEnable); + } } } } -void VulkanReplayDumpResources::Process_vkCmdSetLineStipple( +void VulkanReplayDumpResources::Process_vkCmdPushDescriptorSet( const ApiCallInfo& call_info, - PFN_vkCmdSetLineStipple func, + PFN_vkCmdPushDescriptorSet func, VkCommandBuffer commandBuffer, - uint32_t lineStippleFactor, - uint16_t lineStipplePattern) + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const VkWriteDescriptorSet* pDescriptorWrites) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, lineStippleFactor, lineStipplePattern); + func(*it, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, lineStippleFactor, lineStipplePattern); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); + } } } } -void VulkanReplayDumpResources::Process_vkCmdBindIndexBuffer2( +void VulkanReplayDumpResources::Process_vkCmdPushDescriptorSetWithTemplate( const ApiCallInfo& call_info, - PFN_vkCmdBindIndexBuffer2 func, + PFN_vkCmdPushDescriptorSetWithTemplate func, VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkDeviceSize size, - VkIndexType indexType) + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + VkPipelineLayout layout, + uint32_t set, + const void* pData) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, buffer, offset, size, indexType); + func(*it, descriptorUpdateTemplate, layout, set, pData); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, buffer, offset, size, indexType); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, descriptorUpdateTemplate, layout, set, pData); + } } } } -void VulkanReplayDumpResources::Process_vkCmdPushDescriptorSet( +void VulkanReplayDumpResources::Process_vkCmdBindDescriptorSets2( const ApiCallInfo& call_info, - PFN_vkCmdPushDescriptorSet func, + PFN_vkCmdBindDescriptorSets2 func, VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipelineLayout layout, - uint32_t set, - uint32_t descriptorWriteCount, - const VkWriteDescriptorSet* pDescriptorWrites) + StructPointerDecoder* pBindDescriptorSetsInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); - } - } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); - } + OverrideCmdBindDescriptorSets2(call_info, func, commandBuffer, pBindDescriptorSetsInfo); } } -void VulkanReplayDumpResources::Process_vkCmdPushDescriptorSetWithTemplate( +void VulkanReplayDumpResources::Process_vkCmdPushConstants2( const ApiCallInfo& call_info, - PFN_vkCmdPushDescriptorSetWithTemplate func, + PFN_vkCmdPushConstants2 func, VkCommandBuffer commandBuffer, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - VkPipelineLayout layout, - uint32_t set, - const void* pData) + const VkPushConstantsInfo* pPushConstantsInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, descriptorUpdateTemplate, layout, set, pData); + func(*it, pPushConstantsInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, descriptorUpdateTemplate, layout, set, pData); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pPushConstantsInfo); + } } } } -void VulkanReplayDumpResources::Process_vkCmdSetRenderingAttachmentLocations( +void VulkanReplayDumpResources::Process_vkCmdPushDescriptorSet2( const ApiCallInfo& call_info, - PFN_vkCmdSetRenderingAttachmentLocations func, + PFN_vkCmdPushDescriptorSet2 func, VkCommandBuffer commandBuffer, - const VkRenderingAttachmentLocationInfo* pLocationInfo) + const VkPushDescriptorSetInfo* pPushDescriptorSetInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pLocationInfo); + func(*it, pPushDescriptorSetInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pLocationInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pPushDescriptorSetInfo); + } } } } -void VulkanReplayDumpResources::Process_vkCmdSetRenderingInputAttachmentIndices( +void VulkanReplayDumpResources::Process_vkCmdPushDescriptorSetWithTemplate2( const ApiCallInfo& call_info, - PFN_vkCmdSetRenderingInputAttachmentIndices func, + PFN_vkCmdPushDescriptorSetWithTemplate2 func, VkCommandBuffer commandBuffer, - const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo) + const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pInputAttachmentIndexInfo); + func(*it, pPushDescriptorSetWithTemplateInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pInputAttachmentIndexInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pPushDescriptorSetWithTemplateInfo); + } } } } -void VulkanReplayDumpResources::Process_vkCmdBindDescriptorSets2( +void VulkanReplayDumpResources::Process_vkCmdSetLineStipple( const ApiCallInfo& call_info, - PFN_vkCmdBindDescriptorSets2 func, + PFN_vkCmdSetLineStipple func, VkCommandBuffer commandBuffer, - const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo) + uint32_t lineStippleFactor, + uint16_t lineStipplePattern) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pBindDescriptorSetsInfo); + func(*it, lineStippleFactor, lineStipplePattern); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pBindDescriptorSetsInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, lineStippleFactor, lineStipplePattern); + } } } } -void VulkanReplayDumpResources::Process_vkCmdPushConstants2( +void VulkanReplayDumpResources::Process_vkCmdBindIndexBuffer2( const ApiCallInfo& call_info, - PFN_vkCmdPushConstants2 func, + PFN_vkCmdBindIndexBuffer2 func, VkCommandBuffer commandBuffer, - const VkPushConstantsInfo* pPushConstantsInfo) + VkBuffer buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pPushConstantsInfo); + func(*it, buffer, offset, size, indexType); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pPushConstantsInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, buffer, offset, size, indexType); + } } } } -void VulkanReplayDumpResources::Process_vkCmdPushDescriptorSet2( +void VulkanReplayDumpResources::Process_vkCmdSetRenderingAttachmentLocations( const ApiCallInfo& call_info, - PFN_vkCmdPushDescriptorSet2 func, + PFN_vkCmdSetRenderingAttachmentLocations func, VkCommandBuffer commandBuffer, - const VkPushDescriptorSetInfo* pPushDescriptorSetInfo) + const VkRenderingAttachmentLocationInfo* pLocationInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pPushDescriptorSetInfo); + func(*it, pLocationInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pPushDescriptorSetInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pLocationInfo); + } } } } -void VulkanReplayDumpResources::Process_vkCmdPushDescriptorSetWithTemplate2( +void VulkanReplayDumpResources::Process_vkCmdSetRenderingInputAttachmentIndices( const ApiCallInfo& call_info, - PFN_vkCmdPushDescriptorSetWithTemplate2 func, + PFN_vkCmdSetRenderingInputAttachmentIndices func, VkCommandBuffer commandBuffer, - const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo) + const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pPushDescriptorSetWithTemplateInfo); + func(*it, pInputAttachmentIndexInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pPushDescriptorSetWithTemplateInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pInputAttachmentIndexInfo); + } } } } @@ -2221,22 +2357,27 @@ void VulkanReplayDumpResources::Process_vkCmdBeginVideoCodingKHR( VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pBeginInfo); + func(*it, pBeginInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pBeginInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pBeginInfo); + } } } } @@ -2247,22 +2388,27 @@ void VulkanReplayDumpResources::Process_vkCmdEndVideoCodingKHR( VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pEndCodingInfo); + func(*it, pEndCodingInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pEndCodingInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pEndCodingInfo); + } } } } @@ -2273,22 +2419,27 @@ void VulkanReplayDumpResources::Process_vkCmdControlVideoCodingKHR( VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pCodingControlInfo); + func(*it, pCodingControlInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pCodingControlInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pCodingControlInfo); + } } } } @@ -2299,22 +2450,27 @@ void VulkanReplayDumpResources::Process_vkCmdDecodeVideoKHR( VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pDecodeInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pDecodeInfo); + func(*it, pDecodeInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pDecodeInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pDecodeInfo); + } } } } @@ -2325,7 +2481,7 @@ void VulkanReplayDumpResources::Process_vkCmdBeginRenderingKHR( VkCommandBuffer commandBuffer, StructPointerDecoder* pRenderingInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdBeginRenderingKHR(call_info, func, commandBuffer, pRenderingInfo); } @@ -2336,7 +2492,7 @@ void VulkanReplayDumpResources::Process_vkCmdEndRenderingKHR( PFN_vkCmdEndRenderingKHR func, VkCommandBuffer commandBuffer) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdEndRenderingKHR(call_info, func, commandBuffer); } @@ -2348,22 +2504,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDeviceMaskKHR( VkCommandBuffer commandBuffer, uint32_t deviceMask) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, deviceMask); + func(*it, deviceMask); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, deviceMask); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, deviceMask); + } } } } @@ -2379,22 +2540,27 @@ void VulkanReplayDumpResources::Process_vkCmdDispatchBaseKHR( uint32_t groupCountY, uint32_t groupCountZ) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + func(*it, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); + } } } } @@ -2409,22 +2575,27 @@ void VulkanReplayDumpResources::Process_vkCmdPushDescriptorSetKHR( uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); + func(*it, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); + } } } } @@ -2438,22 +2609,27 @@ void VulkanReplayDumpResources::Process_vkCmdPushDescriptorSetWithTemplateKHR( uint32_t set, const void* pData) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, descriptorUpdateTemplate, layout, set, pData); + func(*it, descriptorUpdateTemplate, layout, set, pData); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, descriptorUpdateTemplate, layout, set, pData); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, descriptorUpdateTemplate, layout, set, pData); + } } } } @@ -2465,7 +2641,7 @@ void VulkanReplayDumpResources::Process_vkCmdBeginRenderPass2KHR( StructPointerDecoder* pRenderPassBegin, StructPointerDecoder* pSubpassBeginInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdBeginRenderPass2(call_info, func, commandBuffer, pRenderPassBegin, pSubpassBeginInfo); } @@ -2478,7 +2654,7 @@ void VulkanReplayDumpResources::Process_vkCmdNextSubpass2KHR( StructPointerDecoder* pSubpassBeginInfo, StructPointerDecoder* pSubpassEndInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdNextSubpass2(call_info, func, commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); } @@ -2490,7 +2666,7 @@ void VulkanReplayDumpResources::Process_vkCmdEndRenderPass2KHR( VkCommandBuffer commandBuffer, StructPointerDecoder* pSubpassEndInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdEndRenderPass2(call_info, func, commandBuffer, pSubpassEndInfo); } @@ -2507,7 +2683,7 @@ void VulkanReplayDumpResources::Process_vkCmdDrawIndirectCountKHR( uint32_t maxDrawCount, uint32_t stride) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdDrawIndirectCountKHR(call_info, func, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } @@ -2524,7 +2700,7 @@ void VulkanReplayDumpResources::Process_vkCmdDrawIndexedIndirectCountKHR( uint32_t maxDrawCount, uint32_t stride) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdDrawIndexedIndirectCountKHR(call_info, func, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } @@ -2537,22 +2713,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetFragmentShadingRateKHR( const VkExtent2D* pFragmentSize, const VkFragmentShadingRateCombinerOpKHR* combinerOps) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pFragmentSize, combinerOps); + func(*it, pFragmentSize, combinerOps); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pFragmentSize, combinerOps); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pFragmentSize, combinerOps); + } } } } @@ -2563,22 +2744,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetRenderingAttachmentLocationsKHR( VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo* pLocationInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pLocationInfo); + func(*it, pLocationInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pLocationInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pLocationInfo); + } } } } @@ -2589,22 +2775,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetRenderingInputAttachmentIndicesK VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pInputAttachmentIndexInfo); + func(*it, pInputAttachmentIndexInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pInputAttachmentIndexInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pInputAttachmentIndexInfo); + } } } } @@ -2615,22 +2806,27 @@ void VulkanReplayDumpResources::Process_vkCmdEncodeVideoKHR( VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pEncodeInfo); + func(*it, pEncodeInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pEncodeInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pEncodeInfo); + } } } } @@ -2642,22 +2838,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetEvent2KHR( VkEvent event, const VkDependencyInfo* pDependencyInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, event, pDependencyInfo); + func(*it, event, pDependencyInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, event, pDependencyInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, event, pDependencyInfo); + } } } } @@ -2669,22 +2870,27 @@ void VulkanReplayDumpResources::Process_vkCmdResetEvent2KHR( VkEvent event, VkPipelineStageFlags2 stageMask) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, event, stageMask); + func(*it, event, stageMask); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, event, stageMask); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, event, stageMask); + } } } } @@ -2697,22 +2903,27 @@ void VulkanReplayDumpResources::Process_vkCmdWaitEvents2KHR( const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, eventCount, pEvents, pDependencyInfos); + func(*it, eventCount, pEvents, pDependencyInfos); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, eventCount, pEvents, pDependencyInfos); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, eventCount, pEvents, pDependencyInfos); + } } } } @@ -2723,22 +2934,27 @@ void VulkanReplayDumpResources::Process_vkCmdPipelineBarrier2KHR( VkCommandBuffer commandBuffer, const VkDependencyInfo* pDependencyInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pDependencyInfo); + func(*it, pDependencyInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pDependencyInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pDependencyInfo); + } } } } @@ -2751,22 +2967,27 @@ void VulkanReplayDumpResources::Process_vkCmdWriteTimestamp2KHR( VkQueryPool queryPool, uint32_t query) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, stage, queryPool, query); + func(*it, stage, queryPool, query); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, stage, queryPool, query); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, stage, queryPool, query); + } } } } @@ -2775,25 +2996,12 @@ void VulkanReplayDumpResources::Process_vkCmdCopyBuffer2KHR( const ApiCallInfo& call_info, PFN_vkCmdCopyBuffer2KHR func, VkCommandBuffer commandBuffer, - const VkCopyBufferInfo2* pCopyBufferInfo) + StructPointerDecoder* pCopyBufferInfo, + bool before_command) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, pCopyBufferInfo); - } - } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, pCopyBufferInfo); - } + OverrideCmdCopyBuffer2KHR(call_info, func, commandBuffer, pCopyBufferInfo, before_command); } } @@ -2801,51 +3009,25 @@ void VulkanReplayDumpResources::Process_vkCmdCopyImage2KHR( const ApiCallInfo& call_info, PFN_vkCmdCopyImage2KHR func, VkCommandBuffer commandBuffer, - const VkCopyImageInfo2* pCopyImageInfo) + StructPointerDecoder* pCopyImageInfo, + bool before_command) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, pCopyImageInfo); - } - } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, pCopyImageInfo); - } + OverrideCmdCopyImage2KHR(call_info, func, commandBuffer, pCopyImageInfo, before_command); } } void VulkanReplayDumpResources::Process_vkCmdCopyBufferToImage2KHR( const ApiCallInfo& call_info, PFN_vkCmdCopyBufferToImage2KHR func, - VkCommandBuffer commandBuffer, - const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo) -{ - if (IsRecording(commandBuffer)) - { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, pCopyBufferToImageInfo); - } - } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, pCopyBufferToImageInfo); - } + VkCommandBuffer commandBuffer, + StructPointerDecoder* pCopyBufferToImageInfo, + bool before_command) +{ + if (IsRecording()) + { + OverrideCmdCopyBufferToImage2KHR(call_info, func, commandBuffer, pCopyBufferToImageInfo, before_command); } } @@ -2853,25 +3035,12 @@ void VulkanReplayDumpResources::Process_vkCmdCopyImageToBuffer2KHR( const ApiCallInfo& call_info, PFN_vkCmdCopyImageToBuffer2KHR func, VkCommandBuffer commandBuffer, - const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo) + StructPointerDecoder* pCopyImageToBufferInfo, + bool before_command) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, pCopyImageToBufferInfo); - } - } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, pCopyImageToBufferInfo); - } + OverrideCmdCopyImageToBuffer2KHR(call_info, func, commandBuffer, pCopyImageToBufferInfo, before_command); } } @@ -2879,25 +3048,12 @@ void VulkanReplayDumpResources::Process_vkCmdBlitImage2KHR( const ApiCallInfo& call_info, PFN_vkCmdBlitImage2KHR func, VkCommandBuffer commandBuffer, - const VkBlitImageInfo2* pBlitImageInfo) + StructPointerDecoder* pBlitImageInfo, + bool before_command) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, pBlitImageInfo); - } - } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, pBlitImageInfo); - } + OverrideCmdBlitImage2KHR(call_info, func, commandBuffer, pBlitImageInfo, before_command); } } @@ -2907,22 +3063,27 @@ void VulkanReplayDumpResources::Process_vkCmdResolveImage2KHR( VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pResolveImageInfo); + func(*it, pResolveImageInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pResolveImageInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pResolveImageInfo); + } } } } @@ -2933,7 +3094,7 @@ void VulkanReplayDumpResources::Process_vkCmdTraceRaysIndirect2KHR( VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdTraceRaysIndirect2KHR(call_info, func, commandBuffer, indirectDeviceAddress); } @@ -2948,7 +3109,7 @@ void VulkanReplayDumpResources::Process_vkCmdBindIndexBuffer2KHR( VkDeviceSize size, VkIndexType indexType) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdBindIndexBuffer2KHR(call_info, func, commandBuffer, buffer, offset, size, indexType); } @@ -2961,22 +3122,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetLineStippleKHR( uint32_t lineStippleFactor, uint16_t lineStipplePattern) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, lineStippleFactor, lineStipplePattern); + func(*it, lineStippleFactor, lineStipplePattern); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, lineStippleFactor, lineStipplePattern); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, lineStippleFactor, lineStipplePattern); + } } } } @@ -2985,25 +3151,11 @@ void VulkanReplayDumpResources::Process_vkCmdBindDescriptorSets2KHR( const ApiCallInfo& call_info, PFN_vkCmdBindDescriptorSets2KHR func, VkCommandBuffer commandBuffer, - const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo) + StructPointerDecoder* pBindDescriptorSetsInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, pBindDescriptorSetsInfo); - } - } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, pBindDescriptorSetsInfo); - } + OverrideCmdBindDescriptorSets2(call_info, func, commandBuffer, pBindDescriptorSetsInfo); } } @@ -3013,22 +3165,27 @@ void VulkanReplayDumpResources::Process_vkCmdPushConstants2KHR( VkCommandBuffer commandBuffer, const VkPushConstantsInfo* pPushConstantsInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pPushConstantsInfo); + func(*it, pPushConstantsInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pPushConstantsInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pPushConstantsInfo); + } } } } @@ -3039,22 +3196,27 @@ void VulkanReplayDumpResources::Process_vkCmdPushDescriptorSet2KHR( VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo* pPushDescriptorSetInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pPushDescriptorSetInfo); + func(*it, pPushDescriptorSetInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pPushDescriptorSetInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pPushDescriptorSetInfo); + } } } } @@ -3065,22 +3227,27 @@ void VulkanReplayDumpResources::Process_vkCmdPushDescriptorSetWithTemplate2KHR( VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pPushDescriptorSetWithTemplateInfo); + func(*it, pPushDescriptorSetWithTemplateInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pPushDescriptorSetWithTemplateInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pPushDescriptorSetWithTemplateInfo); + } } } } @@ -3091,22 +3258,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDescriptorBufferOffsets2EXT( VkCommandBuffer commandBuffer, const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pSetDescriptorBufferOffsetsInfo); + func(*it, pSetDescriptorBufferOffsetsInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pSetDescriptorBufferOffsetsInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pSetDescriptorBufferOffsetsInfo); + } } } } @@ -3117,22 +3289,120 @@ void VulkanReplayDumpResources::Process_vkCmdBindDescriptorBufferEmbeddedSampler VkCommandBuffer commandBuffer, const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) + { + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pBindDescriptorBufferEmbeddedSamplersInfo); + } + } + + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pBindDescriptorBufferEmbeddedSamplersInfo); + } + } + } +} + +void VulkanReplayDumpResources::Process_vkCmdCopyMemoryIndirectKHR( + const ApiCallInfo& call_info, + PFN_vkCmdCopyMemoryIndirectKHR func, + VkCommandBuffer commandBuffer, + const VkCopyMemoryIndirectInfoKHR* pCopyMemoryIndirectInfo) +{ + if (IsRecording()) + { + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pCopyMemoryIndirectInfo); + } + } + + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pCopyMemoryIndirectInfo); + } + } + } +} + +void VulkanReplayDumpResources::Process_vkCmdCopyMemoryToImageIndirectKHR( + const ApiCallInfo& call_info, + PFN_vkCmdCopyMemoryToImageIndirectKHR func, + VkCommandBuffer commandBuffer, + const VkCopyMemoryToImageIndirectInfoKHR* pCopyMemoryToImageIndirectInfo) +{ + if (IsRecording()) + { + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pCopyMemoryToImageIndirectInfo); + } + } + + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pCopyMemoryToImageIndirectInfo); + } + } + } +} + +void VulkanReplayDumpResources::Process_vkCmdEndRendering2KHR( + const ApiCallInfo& call_info, + PFN_vkCmdEndRendering2KHR func, + VkCommandBuffer commandBuffer, + const VkRenderingEndInfoKHR* pRenderingEndInfo) +{ + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pBindDescriptorBufferEmbeddedSamplersInfo); + func(*it, pRenderingEndInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pBindDescriptorBufferEmbeddedSamplersInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pRenderingEndInfo); + } } } } @@ -3143,22 +3413,27 @@ void VulkanReplayDumpResources::Process_vkCmdDebugMarkerBeginEXT( VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pMarkerInfo); + func(*it, pMarkerInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pMarkerInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pMarkerInfo); + } } } } @@ -3168,22 +3443,27 @@ void VulkanReplayDumpResources::Process_vkCmdDebugMarkerEndEXT( PFN_vkCmdDebugMarkerEndEXT func, VkCommandBuffer commandBuffer) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it); + func(*it); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer); + } } } } @@ -3194,22 +3474,27 @@ void VulkanReplayDumpResources::Process_vkCmdDebugMarkerInsertEXT( VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pMarkerInfo); + func(*it, pMarkerInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pMarkerInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pMarkerInfo); + } } } } @@ -3224,22 +3509,27 @@ void VulkanReplayDumpResources::Process_vkCmdBindTransformFeedbackBuffersEXT( const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, firstBinding, bindingCount, pBuffers, pOffsets, pSizes); + func(*it, firstBinding, bindingCount, pBuffers, pOffsets, pSizes); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes); + } } } } @@ -3253,22 +3543,27 @@ void VulkanReplayDumpResources::Process_vkCmdBeginTransformFeedbackEXT( const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); + func(*it, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); + } } } } @@ -3282,22 +3577,27 @@ void VulkanReplayDumpResources::Process_vkCmdEndTransformFeedbackEXT( const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); + func(*it, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); + } } } } @@ -3311,22 +3611,27 @@ void VulkanReplayDumpResources::Process_vkCmdBeginQueryIndexedEXT( VkQueryControlFlags flags, uint32_t index) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, queryPool, query, flags, index); + func(*it, queryPool, query, flags, index); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, queryPool, query, flags, index); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, queryPool, query, flags, index); + } } } } @@ -3339,22 +3644,27 @@ void VulkanReplayDumpResources::Process_vkCmdEndQueryIndexedEXT( uint32_t query, uint32_t index) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, queryPool, query, index); + func(*it, queryPool, query, index); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, queryPool, query, index); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, queryPool, query, index); + } } } } @@ -3370,22 +3680,27 @@ void VulkanReplayDumpResources::Process_vkCmdDrawIndirectByteCountEXT( uint32_t counterOffset, uint32_t vertexStride) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride); + func(*it, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride); + } } } } @@ -3401,7 +3716,7 @@ void VulkanReplayDumpResources::Process_vkCmdDrawIndirectCountAMD( uint32_t maxDrawCount, uint32_t stride) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdDrawIndirectCountAMD(call_info, func, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } @@ -3418,7 +3733,7 @@ void VulkanReplayDumpResources::Process_vkCmdDrawIndexedIndirectCountAMD( uint32_t maxDrawCount, uint32_t stride) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdDrawIndexedIndirectCountAMD(call_info, func, commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } @@ -3430,22 +3745,27 @@ void VulkanReplayDumpResources::Process_vkCmdBeginConditionalRenderingEXT( VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pConditionalRenderingBegin); + func(*it, pConditionalRenderingBegin); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pConditionalRenderingBegin); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pConditionalRenderingBegin); + } } } } @@ -3455,22 +3775,27 @@ void VulkanReplayDumpResources::Process_vkCmdEndConditionalRenderingEXT( PFN_vkCmdEndConditionalRenderingEXT func, VkCommandBuffer commandBuffer) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it); + func(*it); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer); + } } } } @@ -3483,22 +3808,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetViewportWScalingNV( uint32_t viewportCount, const VkViewportWScalingNV* pViewportWScalings) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, firstViewport, viewportCount, pViewportWScalings); + func(*it, firstViewport, viewportCount, pViewportWScalings); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, firstViewport, viewportCount, pViewportWScalings); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstViewport, viewportCount, pViewportWScalings); + } } } } @@ -3511,22 +3841,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDiscardRectangleEXT( uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles); + func(*it, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles); + } } } } @@ -3537,22 +3872,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDiscardRectangleEnableEXT( VkCommandBuffer commandBuffer, VkBool32 discardRectangleEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, discardRectangleEnable); + func(*it, discardRectangleEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, discardRectangleEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, discardRectangleEnable); + } } } } @@ -3563,22 +3903,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDiscardRectangleModeEXT( VkCommandBuffer commandBuffer, VkDiscardRectangleModeEXT discardRectangleMode) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, discardRectangleMode); + func(*it, discardRectangleMode); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, discardRectangleMode); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, discardRectangleMode); + } } } } @@ -3589,22 +3934,27 @@ void VulkanReplayDumpResources::Process_vkCmdBeginDebugUtilsLabelEXT( VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pLabelInfo); + func(*it, pLabelInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pLabelInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pLabelInfo); + } } } } @@ -3614,22 +3964,27 @@ void VulkanReplayDumpResources::Process_vkCmdEndDebugUtilsLabelEXT( PFN_vkCmdEndDebugUtilsLabelEXT func, VkCommandBuffer commandBuffer) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it); + func(*it); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer); + } } } } @@ -3640,22 +3995,27 @@ void VulkanReplayDumpResources::Process_vkCmdInsertDebugUtilsLabelEXT( VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pLabelInfo); + func(*it, pLabelInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pLabelInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pLabelInfo); + } } } } @@ -3666,22 +4026,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetSampleLocationsEXT( VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pSampleLocationsInfo); + func(*it, pSampleLocationsInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pSampleLocationsInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pSampleLocationsInfo); + } } } } @@ -3693,22 +4058,27 @@ void VulkanReplayDumpResources::Process_vkCmdBindShadingRateImageNV( VkImageView imageView, VkImageLayout imageLayout) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, imageView, imageLayout); + func(*it, imageView, imageLayout); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, imageView, imageLayout); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, imageView, imageLayout); + } } } } @@ -3721,22 +4091,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetViewportShadingRatePaletteNV( uint32_t viewportCount, const VkShadingRatePaletteNV* pShadingRatePalettes) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, firstViewport, viewportCount, pShadingRatePalettes); + func(*it, firstViewport, viewportCount, pShadingRatePalettes); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, firstViewport, viewportCount, pShadingRatePalettes); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstViewport, viewportCount, pShadingRatePalettes); + } } } } @@ -3749,22 +4124,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetCoarseSampleOrderNV( uint32_t customSampleOrderCount, const VkCoarseSampleOrderCustomNV* pCustomSampleOrders) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, sampleOrderType, customSampleOrderCount, pCustomSampleOrders); + func(*it, sampleOrderType, customSampleOrderCount, pCustomSampleOrders); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders); + } } } } @@ -3782,22 +4162,27 @@ void VulkanReplayDumpResources::Process_vkCmdBuildAccelerationStructureNV( VkBuffer scratch, VkDeviceSize scratchOffset) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset); + func(*it, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset); + } } } } @@ -3810,22 +4195,27 @@ void VulkanReplayDumpResources::Process_vkCmdCopyAccelerationStructureNV( VkAccelerationStructureNV src, VkCopyAccelerationStructureModeKHR mode) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, dst, src, mode); + func(*it, dst, src, mode); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, dst, src, mode); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, dst, src, mode); + } } } } @@ -3849,22 +4239,27 @@ void VulkanReplayDumpResources::Process_vkCmdTraceRaysNV( uint32_t height, uint32_t depth) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth); + func(*it, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth); + } } } } @@ -3879,22 +4274,27 @@ void VulkanReplayDumpResources::Process_vkCmdWriteAccelerationStructuresProperti VkQueryPool queryPool, uint32_t firstQuery) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); + func(*it, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); + } } } } @@ -3908,22 +4308,27 @@ void VulkanReplayDumpResources::Process_vkCmdWriteBufferMarkerAMD( VkDeviceSize dstOffset, uint32_t marker) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pipelineStage, dstBuffer, dstOffset, marker); + func(*it, pipelineStage, dstBuffer, dstOffset, marker); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pipelineStage, dstBuffer, dstOffset, marker); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pipelineStage, dstBuffer, dstOffset, marker); + } } } } @@ -3937,22 +4342,27 @@ void VulkanReplayDumpResources::Process_vkCmdWriteBufferMarker2AMD( VkDeviceSize dstOffset, uint32_t marker) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, stage, dstBuffer, dstOffset, marker); + func(*it, stage, dstBuffer, dstOffset, marker); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, stage, dstBuffer, dstOffset, marker); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, stage, dstBuffer, dstOffset, marker); + } } } } @@ -3964,22 +4374,27 @@ void VulkanReplayDumpResources::Process_vkCmdDrawMeshTasksNV( uint32_t taskCount, uint32_t firstTask) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, taskCount, firstTask); + func(*it, taskCount, firstTask); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, taskCount, firstTask); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, taskCount, firstTask); + } } } } @@ -3993,22 +4408,27 @@ void VulkanReplayDumpResources::Process_vkCmdDrawMeshTasksIndirectNV( uint32_t drawCount, uint32_t stride) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, buffer, offset, drawCount, stride); + func(*it, buffer, offset, drawCount, stride); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, buffer, offset, drawCount, stride); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, buffer, offset, drawCount, stride); + } } } } @@ -4024,22 +4444,27 @@ void VulkanReplayDumpResources::Process_vkCmdDrawMeshTasksIndirectCountNV( uint32_t maxDrawCount, uint32_t stride) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + func(*it, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + } } } } @@ -4052,22 +4477,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetExclusiveScissorEnableNV( uint32_t exclusiveScissorCount, const VkBool32* pExclusiveScissorEnables) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables); + func(*it, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables); + } } } } @@ -4080,22 +4510,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetExclusiveScissorNV( uint32_t exclusiveScissorCount, const VkRect2D* pExclusiveScissors) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors); + func(*it, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors); + } } } } @@ -4106,22 +4541,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetCheckpointNV( VkCommandBuffer commandBuffer, const void* pCheckpointMarker) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pCheckpointMarker); + func(*it, pCheckpointMarker); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pCheckpointMarker); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pCheckpointMarker); + } } } } @@ -4133,22 +4573,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetPerformanceMarkerINTEL( VkCommandBuffer commandBuffer, const VkPerformanceMarkerInfoINTEL* pMarkerInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pMarkerInfo); + func(*it, pMarkerInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pMarkerInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pMarkerInfo); + } } } } @@ -4160,22 +4605,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetPerformanceStreamMarkerINTEL( VkCommandBuffer commandBuffer, const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pMarkerInfo); + func(*it, pMarkerInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pMarkerInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pMarkerInfo); + } } } } @@ -4187,22 +4637,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetPerformanceOverrideINTEL( VkCommandBuffer commandBuffer, const VkPerformanceOverrideInfoINTEL* pOverrideInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pOverrideInfo); + func(*it, pOverrideInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pOverrideInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pOverrideInfo); + } } } } @@ -4214,22 +4669,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetLineStippleEXT( uint32_t lineStippleFactor, uint16_t lineStipplePattern) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, lineStippleFactor, lineStipplePattern); + func(*it, lineStippleFactor, lineStipplePattern); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, lineStippleFactor, lineStipplePattern); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, lineStippleFactor, lineStipplePattern); + } } } } @@ -4240,22 +4700,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetCullModeEXT( VkCommandBuffer commandBuffer, VkCullModeFlags cullMode) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, cullMode); + func(*it, cullMode); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, cullMode); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, cullMode); + } } } } @@ -4266,22 +4731,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetFrontFaceEXT( VkCommandBuffer commandBuffer, VkFrontFace frontFace) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, frontFace); + func(*it, frontFace); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, frontFace); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, frontFace); + } } } } @@ -4292,22 +4762,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetPrimitiveTopologyEXT( VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, primitiveTopology); + func(*it, primitiveTopology); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, primitiveTopology); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, primitiveTopology); + } } } } @@ -4319,22 +4794,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetViewportWithCountEXT( uint32_t viewportCount, const VkViewport* pViewports) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, viewportCount, pViewports); + func(*it, viewportCount, pViewports); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, viewportCount, pViewports); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, viewportCount, pViewports); + } } } } @@ -4346,22 +4826,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetScissorWithCountEXT( uint32_t scissorCount, const VkRect2D* pScissors) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, scissorCount, pScissors); + func(*it, scissorCount, pScissors); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, scissorCount, pScissors); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, scissorCount, pScissors); + } } } } @@ -4377,7 +4862,7 @@ void VulkanReplayDumpResources::Process_vkCmdBindVertexBuffers2EXT( const VkDeviceSize* pSizes, const VkDeviceSize* pStrides) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdBindVertexBuffers2EXT(call_info, func, commandBuffer, firstBinding, bindingCount, pBuffers->GetPointer(), pOffsets, pSizes, pStrides); } @@ -4389,22 +4874,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDepthTestEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthTestEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, depthTestEnable); + func(*it, depthTestEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, depthTestEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, depthTestEnable); + } } } } @@ -4415,22 +4905,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDepthWriteEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, depthWriteEnable); + func(*it, depthWriteEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, depthWriteEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, depthWriteEnable); + } } } } @@ -4441,22 +4936,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDepthCompareOpEXT( VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, depthCompareOp); + func(*it, depthCompareOp); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, depthCompareOp); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, depthCompareOp); + } } } } @@ -4467,22 +4967,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDepthBoundsTestEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, depthBoundsTestEnable); + func(*it, depthBoundsTestEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, depthBoundsTestEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, depthBoundsTestEnable); + } } } } @@ -4493,22 +4998,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetStencilTestEnableEXT( VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, stencilTestEnable); + func(*it, stencilTestEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, stencilTestEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, stencilTestEnable); + } } } } @@ -4523,22 +5033,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetStencilOpEXT( VkStencilOp depthFailOp, VkCompareOp compareOp) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, faceMask, failOp, passOp, depthFailOp, compareOp); + func(*it, faceMask, failOp, passOp, depthFailOp, compareOp); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, faceMask, failOp, passOp, depthFailOp, compareOp); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, faceMask, failOp, passOp, depthFailOp, compareOp); + } } } } @@ -4549,22 +5064,27 @@ void VulkanReplayDumpResources::Process_vkCmdPreprocessGeneratedCommandsNV( VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pGeneratedCommandsInfo); + func(*it, pGeneratedCommandsInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pGeneratedCommandsInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pGeneratedCommandsInfo); + } } } } @@ -4576,22 +5096,27 @@ void VulkanReplayDumpResources::Process_vkCmdExecuteGeneratedCommandsNV( VkBool32 isPreprocessed, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, isPreprocessed, pGeneratedCommandsInfo); + func(*it, isPreprocessed, pGeneratedCommandsInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, isPreprocessed, pGeneratedCommandsInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, isPreprocessed, pGeneratedCommandsInfo); + } } } } @@ -4604,126 +5129,252 @@ void VulkanReplayDumpResources::Process_vkCmdBindPipelineShaderGroupNV( VkPipeline pipeline, uint32_t groupIndex) { - if (IsRecording(commandBuffer)) + if (IsRecording()) + { + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pipelineBindPoint, pipeline, groupIndex); + } + } + + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pipelineBindPoint, pipeline, groupIndex); + } + } + } +} + +void VulkanReplayDumpResources::Process_vkCmdSetDepthBias2EXT( + const ApiCallInfo& call_info, + PFN_vkCmdSetDepthBias2EXT func, + VkCommandBuffer commandBuffer, + const VkDepthBiasInfoEXT* pDepthBiasInfo) +{ + if (IsRecording()) + { + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pDepthBiasInfo); + } + } + + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pDepthBiasInfo); + } + } + } +} + +void VulkanReplayDumpResources::Process_vkCmdDispatchTileQCOM( + const ApiCallInfo& call_info, + PFN_vkCmdDispatchTileQCOM func, + VkCommandBuffer commandBuffer, + const VkDispatchTileInfoQCOM* pDispatchTileInfo) +{ + if (IsRecording()) + { + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pDispatchTileInfo); + } + } + + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pDispatchTileInfo); + } + } + } +} + +void VulkanReplayDumpResources::Process_vkCmdBeginPerTileExecutionQCOM( + const ApiCallInfo& call_info, + PFN_vkCmdBeginPerTileExecutionQCOM func, + VkCommandBuffer commandBuffer, + const VkPerTileBeginInfoQCOM* pPerTileBeginInfo) +{ + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pipelineBindPoint, pipeline, groupIndex); + func(*it, pPerTileBeginInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pipelineBindPoint, pipeline, groupIndex); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pPerTileBeginInfo); + } } } } -void VulkanReplayDumpResources::Process_vkCmdSetDepthBias2EXT( +void VulkanReplayDumpResources::Process_vkCmdEndPerTileExecutionQCOM( const ApiCallInfo& call_info, - PFN_vkCmdSetDepthBias2EXT func, + PFN_vkCmdEndPerTileExecutionQCOM func, VkCommandBuffer commandBuffer, - const VkDepthBiasInfoEXT* pDepthBiasInfo) + const VkPerTileEndInfoQCOM* pPerTileEndInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pDepthBiasInfo); + func(*it, pPerTileEndInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pDepthBiasInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pPerTileEndInfo); + } } } } -void VulkanReplayDumpResources::Process_vkCmdDispatchTileQCOM( +void VulkanReplayDumpResources::Process_vkCmdBindDescriptorBuffersEXT( const ApiCallInfo& call_info, - PFN_vkCmdDispatchTileQCOM func, + PFN_vkCmdBindDescriptorBuffersEXT func, VkCommandBuffer commandBuffer, - const VkDispatchTileInfoQCOM* pDispatchTileInfo) + uint32_t bufferCount, + const VkDescriptorBufferBindingInfoEXT* pBindingInfos) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pDispatchTileInfo); + func(*it, bufferCount, pBindingInfos); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pDispatchTileInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, bufferCount, pBindingInfos); + } } } } -void VulkanReplayDumpResources::Process_vkCmdBeginPerTileExecutionQCOM( +void VulkanReplayDumpResources::Process_vkCmdSetDescriptorBufferOffsetsEXT( const ApiCallInfo& call_info, - PFN_vkCmdBeginPerTileExecutionQCOM func, + PFN_vkCmdSetDescriptorBufferOffsetsEXT func, VkCommandBuffer commandBuffer, - const VkPerTileBeginInfoQCOM* pPerTileBeginInfo) + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t firstSet, + uint32_t setCount, + const uint32_t* pBufferIndices, + const VkDeviceSize* pOffsets) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pPerTileBeginInfo); + func(*it, pipelineBindPoint, layout, firstSet, setCount, pBufferIndices, pOffsets); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pPerTileBeginInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pipelineBindPoint, layout, firstSet, setCount, pBufferIndices, pOffsets); + } } } } -void VulkanReplayDumpResources::Process_vkCmdEndPerTileExecutionQCOM( +void VulkanReplayDumpResources::Process_vkCmdBindDescriptorBufferEmbeddedSamplersEXT( const ApiCallInfo& call_info, - PFN_vkCmdEndPerTileExecutionQCOM func, + PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT func, VkCommandBuffer commandBuffer, - const VkPerTileEndInfoQCOM* pPerTileEndInfo) + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pPerTileEndInfo); + func(*it, pipelineBindPoint, layout, set); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pPerTileEndInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pipelineBindPoint, layout, set); + } } } } @@ -4735,22 +5386,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetFragmentShadingRateEnumNV( VkFragmentShadingRateNV shadingRate, const VkFragmentShadingRateCombinerOpKHR* combinerOps) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, shadingRate, combinerOps); + func(*it, shadingRate, combinerOps); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, shadingRate, combinerOps); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, shadingRate, combinerOps); + } } } } @@ -4764,7 +5420,7 @@ void VulkanReplayDumpResources::Process_vkCmdSetVertexInputEXT( uint32_t vertexAttributeDescriptionCount, StructPointerDecoder* pVertexAttributeDescriptions) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdSetVertexInputEXT(call_info, func, commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions); } @@ -4777,22 +5433,27 @@ void VulkanReplayDumpResources::Process_vkCmdBindInvocationMaskHUAWEI( VkImageView imageView, VkImageLayout imageLayout) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, imageView, imageLayout); + func(*it, imageView, imageLayout); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, imageView, imageLayout); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, imageView, imageLayout); + } } } } @@ -4803,22 +5464,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetPatchControlPointsEXT( VkCommandBuffer commandBuffer, uint32_t patchControlPoints) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, patchControlPoints); + func(*it, patchControlPoints); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, patchControlPoints); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, patchControlPoints); + } } } } @@ -4829,22 +5495,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetRasterizerDiscardEnableEXT( VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, rasterizerDiscardEnable); + func(*it, rasterizerDiscardEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, rasterizerDiscardEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, rasterizerDiscardEnable); + } } } } @@ -4855,22 +5526,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDepthBiasEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, depthBiasEnable); + func(*it, depthBiasEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, depthBiasEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, depthBiasEnable); + } } } } @@ -4881,22 +5557,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetLogicOpEXT( VkCommandBuffer commandBuffer, VkLogicOp logicOp) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, logicOp); + func(*it, logicOp); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, logicOp); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, logicOp); + } } } } @@ -4907,22 +5588,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetPrimitiveRestartEnableEXT( VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, primitiveRestartEnable); + func(*it, primitiveRestartEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, primitiveRestartEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, primitiveRestartEnable); + } } } } @@ -4934,22 +5620,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetColorWriteEnableEXT( uint32_t attachmentCount, const VkBool32* pColorWriteEnables) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, attachmentCount, pColorWriteEnables); + func(*it, attachmentCount, pColorWriteEnables); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, attachmentCount, pColorWriteEnables); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, attachmentCount, pColorWriteEnables); + } } } } @@ -4964,22 +5655,27 @@ void VulkanReplayDumpResources::Process_vkCmdDrawMultiEXT( uint32_t firstInstance, uint32_t stride) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, drawCount, pVertexInfo, instanceCount, firstInstance, stride); + func(*it, drawCount, pVertexInfo, instanceCount, firstInstance, stride); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride); + } } } } @@ -4995,22 +5691,27 @@ void VulkanReplayDumpResources::Process_vkCmdDrawMultiIndexedEXT( uint32_t stride, const int32_t* pVertexOffset) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset); + func(*it, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset); + } } } } @@ -5022,22 +5723,27 @@ void VulkanReplayDumpResources::Process_vkCmdBuildMicromapsEXT( uint32_t infoCount, const VkMicromapBuildInfoEXT* pInfos) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, infoCount, pInfos); + func(*it, infoCount, pInfos); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, infoCount, pInfos); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, infoCount, pInfos); + } } } } @@ -5048,22 +5754,27 @@ void VulkanReplayDumpResources::Process_vkCmdCopyMicromapEXT( VkCommandBuffer commandBuffer, const VkCopyMicromapInfoEXT* pInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pInfo); + func(*it, pInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pInfo); + } } } } @@ -5074,22 +5785,27 @@ void VulkanReplayDumpResources::Process_vkCmdCopyMicromapToMemoryEXT( VkCommandBuffer commandBuffer, const VkCopyMicromapToMemoryInfoEXT* pInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pInfo); + func(*it, pInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pInfo); + } } } } @@ -5100,22 +5816,27 @@ void VulkanReplayDumpResources::Process_vkCmdCopyMemoryToMicromapEXT( VkCommandBuffer commandBuffer, const VkCopyMemoryToMicromapInfoEXT* pInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pInfo); + func(*it, pInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pInfo); + } } } } @@ -5130,22 +5851,27 @@ void VulkanReplayDumpResources::Process_vkCmdWriteMicromapsPropertiesEXT( VkQueryPool queryPool, uint32_t firstQuery) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, micromapCount, pMicromaps, queryType, queryPool, firstQuery); + func(*it, micromapCount, pMicromaps, queryType, queryPool, firstQuery); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, micromapCount, pMicromaps, queryType, queryPool, firstQuery); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, micromapCount, pMicromaps, queryType, queryPool, firstQuery); + } } } } @@ -5158,22 +5884,27 @@ void VulkanReplayDumpResources::Process_vkCmdDrawClusterHUAWEI( uint32_t groupCountY, uint32_t groupCountZ) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, groupCountX, groupCountY, groupCountZ); + func(*it, groupCountX, groupCountY, groupCountZ); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, groupCountX, groupCountY, groupCountZ); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, groupCountX, groupCountY, groupCountZ); + } } } } @@ -5185,22 +5916,27 @@ void VulkanReplayDumpResources::Process_vkCmdDrawClusterIndirectHUAWEI( VkBuffer buffer, VkDeviceSize offset) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, buffer, offset); + func(*it, buffer, offset); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, buffer, offset); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, buffer, offset); + } } } } @@ -5212,22 +5948,27 @@ void VulkanReplayDumpResources::Process_vkCmdUpdatePipelineIndirectBufferNV( VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pipelineBindPoint, pipeline); + func(*it, pipelineBindPoint, pipeline); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pipelineBindPoint, pipeline); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pipelineBindPoint, pipeline); + } } } } @@ -5238,22 +5979,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDepthClampEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthClampEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, depthClampEnable); + func(*it, depthClampEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, depthClampEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, depthClampEnable); + } } } } @@ -5264,22 +6010,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetPolygonModeEXT( VkCommandBuffer commandBuffer, VkPolygonMode polygonMode) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, polygonMode); + func(*it, polygonMode); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, polygonMode); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, polygonMode); + } } } } @@ -5290,22 +6041,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetRasterizationSamplesEXT( VkCommandBuffer commandBuffer, VkSampleCountFlagBits rasterizationSamples) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, rasterizationSamples); + func(*it, rasterizationSamples); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, rasterizationSamples); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, rasterizationSamples); + } } } } @@ -5317,22 +6073,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetSampleMaskEXT( VkSampleCountFlagBits samples, const VkSampleMask* pSampleMask) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, samples, pSampleMask); + func(*it, samples, pSampleMask); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, samples, pSampleMask); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, samples, pSampleMask); + } } } } @@ -5343,22 +6104,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetAlphaToCoverageEnableEXT( VkCommandBuffer commandBuffer, VkBool32 alphaToCoverageEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, alphaToCoverageEnable); + func(*it, alphaToCoverageEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, alphaToCoverageEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, alphaToCoverageEnable); + } } } } @@ -5369,22 +6135,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetAlphaToOneEnableEXT( VkCommandBuffer commandBuffer, VkBool32 alphaToOneEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, alphaToOneEnable); + func(*it, alphaToOneEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, alphaToOneEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, alphaToOneEnable); + } } } } @@ -5395,22 +6166,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetLogicOpEnableEXT( VkCommandBuffer commandBuffer, VkBool32 logicOpEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, logicOpEnable); + func(*it, logicOpEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, logicOpEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, logicOpEnable); + } } } } @@ -5423,22 +6199,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetColorBlendEnableEXT( uint32_t attachmentCount, const VkBool32* pColorBlendEnables) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, firstAttachment, attachmentCount, pColorBlendEnables); + func(*it, firstAttachment, attachmentCount, pColorBlendEnables); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, firstAttachment, attachmentCount, pColorBlendEnables); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstAttachment, attachmentCount, pColorBlendEnables); + } } } } @@ -5451,22 +6232,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetColorBlendEquationEXT( uint32_t attachmentCount, const VkColorBlendEquationEXT* pColorBlendEquations) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, firstAttachment, attachmentCount, pColorBlendEquations); + func(*it, firstAttachment, attachmentCount, pColorBlendEquations); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, firstAttachment, attachmentCount, pColorBlendEquations); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstAttachment, attachmentCount, pColorBlendEquations); + } } } } @@ -5479,22 +6265,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetColorWriteMaskEXT( uint32_t attachmentCount, const VkColorComponentFlags* pColorWriteMasks) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, firstAttachment, attachmentCount, pColorWriteMasks); + func(*it, firstAttachment, attachmentCount, pColorWriteMasks); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, firstAttachment, attachmentCount, pColorWriteMasks); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstAttachment, attachmentCount, pColorWriteMasks); + } } } } @@ -5505,22 +6296,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetTessellationDomainOriginEXT( VkCommandBuffer commandBuffer, VkTessellationDomainOrigin domainOrigin) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, domainOrigin); + func(*it, domainOrigin); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, domainOrigin); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, domainOrigin); + } } } } @@ -5531,22 +6327,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetRasterizationStreamEXT( VkCommandBuffer commandBuffer, uint32_t rasterizationStream) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, rasterizationStream); + func(*it, rasterizationStream); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, rasterizationStream); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, rasterizationStream); + } } } } @@ -5557,22 +6358,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetConservativeRasterizationModeEXT VkCommandBuffer commandBuffer, VkConservativeRasterizationModeEXT conservativeRasterizationMode) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, conservativeRasterizationMode); + func(*it, conservativeRasterizationMode); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, conservativeRasterizationMode); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, conservativeRasterizationMode); + } } } } @@ -5583,22 +6389,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetExtraPrimitiveOverestimationSize VkCommandBuffer commandBuffer, float extraPrimitiveOverestimationSize) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, extraPrimitiveOverestimationSize); + func(*it, extraPrimitiveOverestimationSize); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, extraPrimitiveOverestimationSize); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, extraPrimitiveOverestimationSize); + } } } } @@ -5609,22 +6420,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDepthClipEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthClipEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, depthClipEnable); + func(*it, depthClipEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, depthClipEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, depthClipEnable); + } } } } @@ -5635,22 +6451,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetSampleLocationsEnableEXT( VkCommandBuffer commandBuffer, VkBool32 sampleLocationsEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, sampleLocationsEnable); + func(*it, sampleLocationsEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, sampleLocationsEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, sampleLocationsEnable); + } } } } @@ -5663,22 +6484,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetColorBlendAdvancedEXT( uint32_t attachmentCount, const VkColorBlendAdvancedEXT* pColorBlendAdvanced) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, firstAttachment, attachmentCount, pColorBlendAdvanced); + func(*it, firstAttachment, attachmentCount, pColorBlendAdvanced); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, firstAttachment, attachmentCount, pColorBlendAdvanced); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstAttachment, attachmentCount, pColorBlendAdvanced); + } } } } @@ -5689,22 +6515,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetProvokingVertexModeEXT( VkCommandBuffer commandBuffer, VkProvokingVertexModeEXT provokingVertexMode) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, provokingVertexMode); + func(*it, provokingVertexMode); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, provokingVertexMode); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, provokingVertexMode); + } } } } @@ -5715,22 +6546,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetLineRasterizationModeEXT( VkCommandBuffer commandBuffer, VkLineRasterizationModeEXT lineRasterizationMode) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, lineRasterizationMode); + func(*it, lineRasterizationMode); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, lineRasterizationMode); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, lineRasterizationMode); + } } } } @@ -5741,22 +6577,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetLineStippleEnableEXT( VkCommandBuffer commandBuffer, VkBool32 stippledLineEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, stippledLineEnable); + func(*it, stippledLineEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, stippledLineEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, stippledLineEnable); + } } } } @@ -5767,22 +6608,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDepthClipNegativeOneToOneEXT( VkCommandBuffer commandBuffer, VkBool32 negativeOneToOne) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, negativeOneToOne); + func(*it, negativeOneToOne); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, negativeOneToOne); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, negativeOneToOne); + } } } } @@ -5793,22 +6639,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetViewportWScalingEnableNV( VkCommandBuffer commandBuffer, VkBool32 viewportWScalingEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, viewportWScalingEnable); + func(*it, viewportWScalingEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, viewportWScalingEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, viewportWScalingEnable); + } } } } @@ -5821,22 +6672,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetViewportSwizzleNV( uint32_t viewportCount, const VkViewportSwizzleNV* pViewportSwizzles) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, firstViewport, viewportCount, pViewportSwizzles); + func(*it, firstViewport, viewportCount, pViewportSwizzles); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, firstViewport, viewportCount, pViewportSwizzles); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, firstViewport, viewportCount, pViewportSwizzles); + } } } } @@ -5847,22 +6703,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetCoverageToColorEnableNV( VkCommandBuffer commandBuffer, VkBool32 coverageToColorEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, coverageToColorEnable); + func(*it, coverageToColorEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, coverageToColorEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, coverageToColorEnable); + } } } } @@ -5873,22 +6734,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetCoverageToColorLocationNV( VkCommandBuffer commandBuffer, uint32_t coverageToColorLocation) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, coverageToColorLocation); + func(*it, coverageToColorLocation); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, coverageToColorLocation); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, coverageToColorLocation); + } } } } @@ -5899,22 +6765,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetCoverageModulationModeNV( VkCommandBuffer commandBuffer, VkCoverageModulationModeNV coverageModulationMode) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, coverageModulationMode); + func(*it, coverageModulationMode); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, coverageModulationMode); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, coverageModulationMode); + } } } } @@ -5925,22 +6796,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetCoverageModulationTableEnableNV( VkCommandBuffer commandBuffer, VkBool32 coverageModulationTableEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, coverageModulationTableEnable); + func(*it, coverageModulationTableEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, coverageModulationTableEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, coverageModulationTableEnable); + } } } } @@ -5952,22 +6828,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetCoverageModulationTableNV( uint32_t coverageModulationTableCount, const float* pCoverageModulationTable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, coverageModulationTableCount, pCoverageModulationTable); + func(*it, coverageModulationTableCount, pCoverageModulationTable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, coverageModulationTableCount, pCoverageModulationTable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, coverageModulationTableCount, pCoverageModulationTable); + } } } } @@ -5978,22 +6859,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetShadingRateImageEnableNV( VkCommandBuffer commandBuffer, VkBool32 shadingRateImageEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, shadingRateImageEnable); + func(*it, shadingRateImageEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, shadingRateImageEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, shadingRateImageEnable); + } } } } @@ -6004,22 +6890,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetRepresentativeFragmentTestEnable VkCommandBuffer commandBuffer, VkBool32 representativeFragmentTestEnable) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, representativeFragmentTestEnable); + func(*it, representativeFragmentTestEnable); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, representativeFragmentTestEnable); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, representativeFragmentTestEnable); + } } } } @@ -6030,22 +6921,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetCoverageReductionModeNV( VkCommandBuffer commandBuffer, VkCoverageReductionModeNV coverageReductionMode) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, coverageReductionMode); + func(*it, coverageReductionMode); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, coverageReductionMode); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, coverageReductionMode); + } } } } @@ -6057,22 +6953,27 @@ void VulkanReplayDumpResources::Process_vkCmdOpticalFlowExecuteNV( VkOpticalFlowSessionNV session, const VkOpticalFlowExecuteInfoNV* pExecuteInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, session, pExecuteInfo); + func(*it, session, pExecuteInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, session, pExecuteInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, session, pExecuteInfo); + } } } } @@ -6085,22 +6986,27 @@ void VulkanReplayDumpResources::Process_vkCmdBindShadersEXT( const VkShaderStageFlagBits* pStages, const VkShaderEXT* pShaders) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, stageCount, pStages, pShaders); + func(*it, stageCount, pStages, pShaders); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, stageCount, pStages, pShaders); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, stageCount, pStages, pShaders); + } } } } @@ -6112,22 +7018,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetDepthClampRangeEXT( VkDepthClampModeEXT depthClampMode, const VkDepthClampRangeEXT* pDepthClampRange) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, depthClampMode, pDepthClampRange); + func(*it, depthClampMode, pDepthClampRange); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, depthClampMode, pDepthClampRange); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, depthClampMode, pDepthClampRange); + } } } } @@ -6139,22 +7050,59 @@ void VulkanReplayDumpResources::Process_vkCmdConvertCooperativeVectorMatrixNV( uint32_t infoCount, const VkConvertCooperativeVectorMatrixInfoNV* pInfos) { - if (IsRecording(commandBuffer)) + if (IsRecording()) + { + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, infoCount, pInfos); + } + } + + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, infoCount, pInfos); + } + } + } +} + +void VulkanReplayDumpResources::Process_vkCmdDispatchDataGraphARM( + const ApiCallInfo& call_info, + PFN_vkCmdDispatchDataGraphARM func, + VkCommandBuffer commandBuffer, + VkDataGraphPipelineSessionARM session, + const VkDataGraphPipelineDispatchInfoARM* pInfo) +{ + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, infoCount, pInfos); + func(*it, session, pInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, infoCount, pInfos); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, session, pInfo); + } } } } @@ -6165,22 +7113,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetAttachmentFeedbackLoopEnableEXT( VkCommandBuffer commandBuffer, VkImageAspectFlags aspectMask) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, aspectMask); + func(*it, aspectMask); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, aspectMask); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, aspectMask); + } } } } @@ -6191,22 +7144,93 @@ void VulkanReplayDumpResources::Process_vkCmdBindTileMemoryQCOM( VkCommandBuffer commandBuffer, const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) + { + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pTileMemoryBindInfo); + } + } + + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pTileMemoryBindInfo); + } + } + } +} + +void VulkanReplayDumpResources::Process_vkCmdDecompressMemoryEXT( + const ApiCallInfo& call_info, + PFN_vkCmdDecompressMemoryEXT func, + VkCommandBuffer commandBuffer, + const VkDecompressMemoryInfoEXT* pDecompressMemoryInfoEXT) +{ + if (IsRecording()) + { + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pDecompressMemoryInfoEXT); + } + } + + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pDecompressMemoryInfoEXT); + } + } + } +} + +void VulkanReplayDumpResources::Process_vkCmdDecompressMemoryIndirectCountEXT( + const ApiCallInfo& call_info, + PFN_vkCmdDecompressMemoryIndirectCountEXT func, + VkCommandBuffer commandBuffer, + VkMemoryDecompressionMethodFlagsEXT decompressionMethod, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t maxDecompressionCount, + uint32_t stride) +{ + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pTileMemoryBindInfo); + func(*it, decompressionMethod, indirectCommandsAddress, indirectCommandsCountAddress, maxDecompressionCount, stride); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pTileMemoryBindInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, decompressionMethod, indirectCommandsAddress, indirectCommandsCountAddress, maxDecompressionCount, stride); + } } } } @@ -6217,22 +7241,27 @@ void VulkanReplayDumpResources::Process_vkCmdBuildPartitionedAccelerationStructu VkCommandBuffer commandBuffer, const VkBuildPartitionedAccelerationStructureInfoNV* pBuildInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pBuildInfo); + func(*it, pBuildInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pBuildInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pBuildInfo); + } } } } @@ -6244,22 +7273,27 @@ void VulkanReplayDumpResources::Process_vkCmdPreprocessGeneratedCommandsEXT( const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo, VkCommandBuffer stateCommandBuffer) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pGeneratedCommandsInfo, stateCommandBuffer); + func(*it, pGeneratedCommandsInfo, stateCommandBuffer); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pGeneratedCommandsInfo, stateCommandBuffer); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pGeneratedCommandsInfo, stateCommandBuffer); + } } } } @@ -6271,22 +7305,27 @@ void VulkanReplayDumpResources::Process_vkCmdExecuteGeneratedCommandsEXT( VkBool32 isPreprocessed, const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, isPreprocessed, pGeneratedCommandsInfo); + func(*it, isPreprocessed, pGeneratedCommandsInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, isPreprocessed, pGeneratedCommandsInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, isPreprocessed, pGeneratedCommandsInfo); + } } } } @@ -6295,56 +7334,110 @@ void VulkanReplayDumpResources::Process_vkCmdEndRendering2EXT( const ApiCallInfo& call_info, PFN_vkCmdEndRendering2EXT func, VkCommandBuffer commandBuffer, - const VkRenderingEndInfoEXT* pRenderingEndInfo) + const VkRenderingEndInfoKHR* pRenderingEndInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pRenderingEndInfo); + func(*it, pRenderingEndInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pRenderingEndInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pRenderingEndInfo); + } } } } -void VulkanReplayDumpResources::Process_vkCmdBuildAccelerationStructuresKHR( +void VulkanReplayDumpResources::Process_vkCmdBeginCustomResolveEXT( const ApiCallInfo& call_info, - PFN_vkCmdBuildAccelerationStructuresKHR func, + PFN_vkCmdBeginCustomResolveEXT func, VkCommandBuffer commandBuffer, - uint32_t infoCount, - const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, - const VkAccelerationStructureBuildRangeInfoKHR* const * ppBuildRangeInfos) + const VkBeginCustomResolveInfoEXT* pBeginCustomResolveInfo) +{ + if (IsRecording()) + { + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) + { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); + for (CommandBufferIterator it = first; it < last; ++it) + { + func(*it, pBeginCustomResolveInfo); + } + } + + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) + { + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pBeginCustomResolveInfo); + } + } + } +} + +void VulkanReplayDumpResources::Process_vkCmdSetComputeOccupancyPriorityNV( + const ApiCallInfo& call_info, + PFN_vkCmdSetComputeOccupancyPriorityNV func, + VkCommandBuffer commandBuffer, + const VkComputeOccupancyPriorityParametersNV* pParameters) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, infoCount, pInfos, ppBuildRangeInfos); + func(*it, pParameters); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, infoCount, pInfos, ppBuildRangeInfos); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pParameters); + } } } } +void VulkanReplayDumpResources::Process_vkCmdBuildAccelerationStructuresKHR( + const ApiCallInfo& call_info, + PFN_vkCmdBuildAccelerationStructuresKHR func, + VkCommandBuffer commandBuffer, + uint32_t infoCount, + StructPointerDecoder* pInfos, + StructPointerDecoder* ppBuildRangeInfos, + bool before_command) +{ + if (IsRecording()) + { + OverrideCmdBuildAccelerationStructuresKHR(call_info, func, commandBuffer, infoCount, pInfos, ppBuildRangeInfos, before_command); + } +} + void VulkanReplayDumpResources::Process_vkCmdBuildAccelerationStructuresIndirectKHR( const ApiCallInfo& call_info, PFN_vkCmdBuildAccelerationStructuresIndirectKHR func, @@ -6355,22 +7448,27 @@ void VulkanReplayDumpResources::Process_vkCmdBuildAccelerationStructuresIndirect const uint32_t* pIndirectStrides, const uint32_t* const * ppMaxPrimitiveCounts) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, infoCount, pInfos, pIndirectDeviceAddresses, pIndirectStrides, ppMaxPrimitiveCounts); + func(*it, infoCount, pInfos, pIndirectDeviceAddresses, pIndirectStrides, ppMaxPrimitiveCounts); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, infoCount, pInfos, pIndirectDeviceAddresses, pIndirectStrides, ppMaxPrimitiveCounts); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, infoCount, pInfos, pIndirectDeviceAddresses, pIndirectStrides, ppMaxPrimitiveCounts); + } } } } @@ -6379,25 +7477,12 @@ void VulkanReplayDumpResources::Process_vkCmdCopyAccelerationStructureKHR( const ApiCallInfo& call_info, PFN_vkCmdCopyAccelerationStructureKHR func, VkCommandBuffer commandBuffer, - const VkCopyAccelerationStructureInfoKHR* pInfo) + StructPointerDecoder* pInfo, + bool before_command) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) - { - for (CommandBufferIterator it = first; it < last; ++it) - { - func(*it, pInfo); - } - } - - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) - { - func(dispatch_rays_command_buffer, pInfo); - } + OverrideCmdCopyAccelerationStructureKHR(call_info, func, commandBuffer, pInfo, before_command); } } @@ -6407,22 +7492,27 @@ void VulkanReplayDumpResources::Process_vkCmdCopyAccelerationStructureToMemoryKH VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pInfo); + func(*it, pInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pInfo); + } } } } @@ -6433,22 +7523,27 @@ void VulkanReplayDumpResources::Process_vkCmdCopyMemoryToAccelerationStructureKH VkCommandBuffer commandBuffer, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pInfo); + func(*it, pInfo); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pInfo); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pInfo); + } } } } @@ -6463,22 +7558,27 @@ void VulkanReplayDumpResources::Process_vkCmdWriteAccelerationStructuresProperti VkQueryPool queryPool, uint32_t firstQuery) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); + func(*it, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); + } } } } @@ -6495,7 +7595,7 @@ void VulkanReplayDumpResources::Process_vkCmdTraceRaysKHR( uint32_t height, uint32_t depth) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdTraceRaysKHR(call_info, func, commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, width, height, depth); } @@ -6511,7 +7611,7 @@ void VulkanReplayDumpResources::Process_vkCmdTraceRaysIndirectKHR( StructPointerDecoder* pCallableShaderBindingTable, VkDeviceAddress indirectDeviceAddress) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { OverrideCmdTraceRaysIndirectKHR(call_info, func, commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, indirectDeviceAddress); } @@ -6523,22 +7623,27 @@ void VulkanReplayDumpResources::Process_vkCmdSetRayTracingPipelineStackSizeKHR( VkCommandBuffer commandBuffer, uint32_t pipelineStackSize) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, pipelineStackSize); + func(*it, pipelineStackSize); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, pipelineStackSize); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, pipelineStackSize); + } } } } @@ -6551,22 +7656,27 @@ void VulkanReplayDumpResources::Process_vkCmdDrawMeshTasksEXT( uint32_t groupCountY, uint32_t groupCountZ) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, groupCountX, groupCountY, groupCountZ); + func(*it, groupCountX, groupCountY, groupCountZ); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, groupCountX, groupCountY, groupCountZ); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, groupCountX, groupCountY, groupCountZ); + } } } } @@ -6580,22 +7690,27 @@ void VulkanReplayDumpResources::Process_vkCmdDrawMeshTasksIndirectEXT( uint32_t drawCount, uint32_t stride) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, buffer, offset, drawCount, stride); + func(*it, buffer, offset, drawCount, stride); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, buffer, offset, drawCount, stride); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, buffer, offset, drawCount, stride); + } } } } @@ -6611,22 +7726,27 @@ void VulkanReplayDumpResources::Process_vkCmdDrawMeshTasksIndirectCountEXT( uint32_t maxDrawCount, uint32_t stride) { - if (IsRecording(commandBuffer)) + if (IsRecording()) { - CommandBufferIterator first, last; - bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last); - if (found) + const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer); + for (auto dc_context : dc_contexts) { + CommandBufferIterator first, last; + dc_context->GetDrawCallActiveCommandBuffers(first, last); for (CommandBufferIterator it = first; it < last; ++it) { - func(*it, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + func(*it, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } } - VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer); - if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer); + for (auto dr_context : dr_contexts) { - func(dispatch_rays_command_buffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer(); + if (dispatch_rays_command_buffer != VK_NULL_HANDLE) + { + func(dispatch_rays_command_buffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + } } } } diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_dump_resources.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_dump_resources.h index a6ddd0f64..40e9e8303 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_dump_resources.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_replay_dump_resources.h @@ -49,7 +49,11 @@ GFXRECON_BEGIN_NAMESPACE(decode) class VulkanReplayDumpResources : public VulkanReplayDumpResourcesBase { public: - VulkanReplayDumpResources(const VulkanReplayOptions& options, CommonObjectInfoTable* object_info_table) : VulkanReplayDumpResourcesBase(options, object_info_table) { } + VulkanReplayDumpResources(const VulkanReplayOptions& options, + CommonObjectInfoTable* object_info_table, + const VulkanPerDeviceAddressTrackers& address_trackers, + const graphics::InstanceDispatchTablesMap& instance_tables, + const graphics::DeviceDispatchTablesMap& device_tables) : VulkanReplayDumpResourcesBase(options, object_info_table, address_trackers, instance_tables, device_tables) { } ~VulkanReplayDumpResources() { } @@ -59,6 +63,132 @@ void Process_vkEndCommandBuffer( VkResult returnValue, VkCommandBuffer commandBuffer); +void Process_vkCmdCopyBuffer( + const ApiCallInfo& call_info, + PFN_vkCmdCopyBuffer func, + VkCommandBuffer commandBuffer, + const VulkanBufferInfo* srcBuffer, + const VulkanBufferInfo* dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command); + +void Process_vkCmdCopyImage( + const ApiCallInfo& call_info, + PFN_vkCmdCopyImage func, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command); + +void Process_vkCmdCopyBufferToImage( + const ApiCallInfo& call_info, + PFN_vkCmdCopyBufferToImage func, + VkCommandBuffer commandBuffer, + const VulkanBufferInfo* srcBuffer, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command); + +void Process_vkCmdCopyImageToBuffer( + const ApiCallInfo& call_info, + PFN_vkCmdCopyImageToBuffer func, + VkCommandBuffer commandBuffer, + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanBufferInfo* dstBuffer, + uint32_t regionCount, + StructPointerDecoder* pRegions, + bool before_command); + +void Process_vkCmdUpdateBuffer( + const ApiCallInfo& call_info, + PFN_vkCmdUpdateBuffer func, + VkCommandBuffer commandBuffer, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize dataSize, + const void* pData); + +void Process_vkCmdFillBuffer( + const ApiCallInfo& call_info, + PFN_vkCmdFillBuffer func, + VkCommandBuffer commandBuffer, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize size, + uint32_t data); + +void Process_vkCmdPipelineBarrier( + const ApiCallInfo& call_info, + PFN_vkCmdPipelineBarrier func, + VkCommandBuffer commandBuffer, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkDependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + const VkMemoryBarrier* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const VkBufferMemoryBarrier* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const VkImageMemoryBarrier* pImageMemoryBarriers); + +void Process_vkCmdBeginQuery( + const ApiCallInfo& call_info, + PFN_vkCmdBeginQuery func, + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query, + VkQueryControlFlags flags); + +void Process_vkCmdEndQuery( + const ApiCallInfo& call_info, + PFN_vkCmdEndQuery func, + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query); + +void Process_vkCmdResetQueryPool( + const ApiCallInfo& call_info, + PFN_vkCmdResetQueryPool func, + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount); + +void Process_vkCmdWriteTimestamp( + const ApiCallInfo& call_info, + PFN_vkCmdWriteTimestamp func, + VkCommandBuffer commandBuffer, + VkPipelineStageFlagBits pipelineStage, + VkQueryPool queryPool, + uint32_t query); + +void Process_vkCmdCopyQueryPoolResults( + const ApiCallInfo& call_info, + PFN_vkCmdCopyQueryPoolResults func, + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags); + +void Process_vkCmdExecuteCommands( + const ApiCallInfo& call_info, + PFN_vkCmdExecuteCommands func, + VkCommandBuffer commandBuffer, + uint32_t commandBufferCount, + const VkCommandBuffer* pCommandBuffers); + void Process_vkCmdBindPipeline( const ApiCallInfo& call_info, PFN_vkCmdBindPipeline func, @@ -66,6 +196,82 @@ void Process_vkCmdBindPipeline( VkPipelineBindPoint pipelineBindPoint, const VulkanPipelineInfo* pipeline); +void Process_vkCmdBindDescriptorSets( + const ApiCallInfo& call_info, + PFN_vkCmdBindDescriptorSets func, + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + const VulkanPipelineLayoutInfo* layout, + uint32_t firstSet, + uint32_t descriptorSetCount, + HandlePointerDecoder* pDescriptorSets, + uint32_t dynamicOffsetCount, + const uint32_t* pDynamicOffsets); + +void Process_vkCmdClearColorImage( + const ApiCallInfo& call_info, + PFN_vkCmdClearColorImage func, + VkCommandBuffer commandBuffer, + VkImage image, + VkImageLayout imageLayout, + const VkClearColorValue* pColor, + uint32_t rangeCount, + const VkImageSubresourceRange* pRanges); + +void Process_vkCmdDispatch( + const ApiCallInfo& call_info, + PFN_vkCmdDispatch func, + VkCommandBuffer commandBuffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ); + +void Process_vkCmdDispatchIndirect( + const ApiCallInfo& call_info, + PFN_vkCmdDispatchIndirect func, + VkCommandBuffer commandBuffer, + const VulkanBufferInfo* buffer, + VkDeviceSize offset); + +void Process_vkCmdSetEvent( + const ApiCallInfo& call_info, + PFN_vkCmdSetEvent func, + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags stageMask); + +void Process_vkCmdResetEvent( + const ApiCallInfo& call_info, + PFN_vkCmdResetEvent func, + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags stageMask); + +void Process_vkCmdWaitEvents( + const ApiCallInfo& call_info, + PFN_vkCmdWaitEvents func, + VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent* pEvents, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + uint32_t memoryBarrierCount, + const VkMemoryBarrier* pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const VkBufferMemoryBarrier* pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const VkImageMemoryBarrier* pImageMemoryBarriers); + +void Process_vkCmdPushConstants( + const ApiCallInfo& call_info, + PFN_vkCmdPushConstants func, + VkCommandBuffer commandBuffer, + VkPipelineLayout layout, + VkShaderStageFlags stageFlags, + uint32_t offset, + uint32_t size, + const void* pValues); + void Process_vkCmdSetViewport( const ApiCallInfo& call_info, PFN_vkCmdSetViewport func, @@ -130,18 +336,6 @@ void Process_vkCmdSetStencilReference( VkStencilFaceFlags faceMask, uint32_t reference); -void Process_vkCmdBindDescriptorSets( - const ApiCallInfo& call_info, - PFN_vkCmdBindDescriptorSets func, - VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - const VulkanPipelineLayoutInfo* layout, - uint32_t firstSet, - uint32_t descriptorSetCount, - HandlePointerDecoder* pDescriptorSets, - uint32_t dynamicOffsetCount, - const uint32_t* pDynamicOffsets); - void Process_vkCmdBindIndexBuffer( const ApiCallInfo& call_info, PFN_vkCmdBindIndexBuffer func, @@ -196,100 +390,18 @@ void Process_vkCmdDrawIndexedIndirect( uint32_t drawCount, uint32_t stride); -void Process_vkCmdDispatch( - const ApiCallInfo& call_info, - PFN_vkCmdDispatch func, - VkCommandBuffer commandBuffer, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ); - -void Process_vkCmdDispatchIndirect( - const ApiCallInfo& call_info, - PFN_vkCmdDispatchIndirect func, - VkCommandBuffer commandBuffer, - const VulkanBufferInfo* buffer, - VkDeviceSize offset); - -void Process_vkCmdCopyBuffer( - const ApiCallInfo& call_info, - PFN_vkCmdCopyBuffer func, - VkCommandBuffer commandBuffer, - VkBuffer srcBuffer, - VkBuffer dstBuffer, - uint32_t regionCount, - const VkBufferCopy* pRegions); - -void Process_vkCmdCopyImage( - const ApiCallInfo& call_info, - PFN_vkCmdCopyImage func, - VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageCopy* pRegions); - -void Process_vkCmdBlitImage( - const ApiCallInfo& call_info, - PFN_vkCmdBlitImage func, - VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageBlit* pRegions, - VkFilter filter); - -void Process_vkCmdCopyBufferToImage( - const ApiCallInfo& call_info, - PFN_vkCmdCopyBufferToImage func, - VkCommandBuffer commandBuffer, - VkBuffer srcBuffer, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkBufferImageCopy* pRegions); - -void Process_vkCmdCopyImageToBuffer( - const ApiCallInfo& call_info, - PFN_vkCmdCopyImageToBuffer func, - VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkBuffer dstBuffer, - uint32_t regionCount, - const VkBufferImageCopy* pRegions); - -void Process_vkCmdUpdateBuffer( - const ApiCallInfo& call_info, - PFN_vkCmdUpdateBuffer func, - VkCommandBuffer commandBuffer, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize dataSize, - const void* pData); - -void Process_vkCmdFillBuffer( - const ApiCallInfo& call_info, - PFN_vkCmdFillBuffer func, - VkCommandBuffer commandBuffer, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize size, - uint32_t data); - -void Process_vkCmdClearColorImage( +void Process_vkCmdBlitImage( const ApiCallInfo& call_info, - PFN_vkCmdClearColorImage func, + PFN_vkCmdBlitImage func, VkCommandBuffer commandBuffer, - VkImage image, - VkImageLayout imageLayout, - const VkClearColorValue* pColor, - uint32_t rangeCount, - const VkImageSubresourceRange* pRanges); + const VulkanImageInfo* srcImage, + VkImageLayout srcImageLayout, + const VulkanImageInfo* dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + StructPointerDecoder* pRegions, + VkFilter filter, + bool before_command); void Process_vkCmdClearDepthStencilImage( const ApiCallInfo& call_info, @@ -321,102 +433,6 @@ void Process_vkCmdResolveImage( uint32_t regionCount, const VkImageResolve* pRegions); -void Process_vkCmdSetEvent( - const ApiCallInfo& call_info, - PFN_vkCmdSetEvent func, - VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags stageMask); - -void Process_vkCmdResetEvent( - const ApiCallInfo& call_info, - PFN_vkCmdResetEvent func, - VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags stageMask); - -void Process_vkCmdWaitEvents( - const ApiCallInfo& call_info, - PFN_vkCmdWaitEvents func, - VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent* pEvents, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - uint32_t memoryBarrierCount, - const VkMemoryBarrier* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VkBufferMemoryBarrier* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VkImageMemoryBarrier* pImageMemoryBarriers); - -void Process_vkCmdPipelineBarrier( - const ApiCallInfo& call_info, - PFN_vkCmdPipelineBarrier func, - VkCommandBuffer commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - const VkMemoryBarrier* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VkBufferMemoryBarrier* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VkImageMemoryBarrier* pImageMemoryBarriers); - -void Process_vkCmdBeginQuery( - const ApiCallInfo& call_info, - PFN_vkCmdBeginQuery func, - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t query, - VkQueryControlFlags flags); - -void Process_vkCmdEndQuery( - const ApiCallInfo& call_info, - PFN_vkCmdEndQuery func, - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t query); - -void Process_vkCmdResetQueryPool( - const ApiCallInfo& call_info, - PFN_vkCmdResetQueryPool func, - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount); - -void Process_vkCmdWriteTimestamp( - const ApiCallInfo& call_info, - PFN_vkCmdWriteTimestamp func, - VkCommandBuffer commandBuffer, - VkPipelineStageFlagBits pipelineStage, - VkQueryPool queryPool, - uint32_t query); - -void Process_vkCmdCopyQueryPoolResults( - const ApiCallInfo& call_info, - PFN_vkCmdCopyQueryPoolResults func, - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags); - -void Process_vkCmdPushConstants( - const ApiCallInfo& call_info, - PFN_vkCmdPushConstants func, - VkCommandBuffer commandBuffer, - VkPipelineLayout layout, - VkShaderStageFlags stageFlags, - uint32_t offset, - uint32_t size, - const void* pValues); - void Process_vkCmdBeginRenderPass( const ApiCallInfo& call_info, PFN_vkCmdBeginRenderPass func, @@ -435,13 +451,6 @@ void Process_vkCmdEndRenderPass( PFN_vkCmdEndRenderPass func, VkCommandBuffer commandBuffer); -void Process_vkCmdExecuteCommands( - const ApiCallInfo& call_info, - PFN_vkCmdExecuteCommands func, - VkCommandBuffer commandBuffer, - uint32_t commandBufferCount, - const VkCommandBuffer* pCommandBuffers); - void Process_vkCmdSetDeviceMask( const ApiCallInfo& call_info, PFN_vkCmdSetDeviceMask func, @@ -501,28 +510,6 @@ void Process_vkCmdEndRenderPass2( VkCommandBuffer commandBuffer, StructPointerDecoder* pSubpassEndInfo); -void Process_vkCmdSetEvent2( - const ApiCallInfo& call_info, - PFN_vkCmdSetEvent2 func, - VkCommandBuffer commandBuffer, - VkEvent event, - const VkDependencyInfo* pDependencyInfo); - -void Process_vkCmdResetEvent2( - const ApiCallInfo& call_info, - PFN_vkCmdResetEvent2 func, - VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags2 stageMask); - -void Process_vkCmdWaitEvents2( - const ApiCallInfo& call_info, - PFN_vkCmdWaitEvents2 func, - VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent* pEvents, - const VkDependencyInfo* pDependencyInfos); - void Process_vkCmdPipelineBarrier2( const ApiCallInfo& call_info, PFN_vkCmdPipelineBarrier2 func, @@ -541,31 +528,58 @@ void Process_vkCmdCopyBuffer2( const ApiCallInfo& call_info, PFN_vkCmdCopyBuffer2 func, VkCommandBuffer commandBuffer, - const VkCopyBufferInfo2* pCopyBufferInfo); + StructPointerDecoder* pCopyBufferInfo, + bool before_command); void Process_vkCmdCopyImage2( const ApiCallInfo& call_info, PFN_vkCmdCopyImage2 func, VkCommandBuffer commandBuffer, - const VkCopyImageInfo2* pCopyImageInfo); + StructPointerDecoder* pCopyImageInfo, + bool before_command); void Process_vkCmdCopyBufferToImage2( const ApiCallInfo& call_info, PFN_vkCmdCopyBufferToImage2 func, VkCommandBuffer commandBuffer, - const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); + StructPointerDecoder* pCopyBufferToImageInfo, + bool before_command); void Process_vkCmdCopyImageToBuffer2( const ApiCallInfo& call_info, PFN_vkCmdCopyImageToBuffer2 func, VkCommandBuffer commandBuffer, - const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); + StructPointerDecoder* pCopyImageToBufferInfo, + bool before_command); + +void Process_vkCmdSetEvent2( + const ApiCallInfo& call_info, + PFN_vkCmdSetEvent2 func, + VkCommandBuffer commandBuffer, + VkEvent event, + const VkDependencyInfo* pDependencyInfo); + +void Process_vkCmdResetEvent2( + const ApiCallInfo& call_info, + PFN_vkCmdResetEvent2 func, + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags2 stageMask); + +void Process_vkCmdWaitEvents2( + const ApiCallInfo& call_info, + PFN_vkCmdWaitEvents2 func, + VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent* pEvents, + const VkDependencyInfo* pDependencyInfos); void Process_vkCmdBlitImage2( const ApiCallInfo& call_info, PFN_vkCmdBlitImage2 func, VkCommandBuffer commandBuffer, - const VkBlitImageInfo2* pBlitImageInfo); + StructPointerDecoder* pBlitImageInfo, + bool before_command); void Process_vkCmdResolveImage2( const ApiCallInfo& call_info, @@ -685,22 +699,6 @@ void Process_vkCmdSetPrimitiveRestartEnable( VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable); -void Process_vkCmdSetLineStipple( - const ApiCallInfo& call_info, - PFN_vkCmdSetLineStipple func, - VkCommandBuffer commandBuffer, - uint32_t lineStippleFactor, - uint16_t lineStipplePattern); - -void Process_vkCmdBindIndexBuffer2( - const ApiCallInfo& call_info, - PFN_vkCmdBindIndexBuffer2 func, - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkDeviceSize size, - VkIndexType indexType); - void Process_vkCmdPushDescriptorSet( const ApiCallInfo& call_info, PFN_vkCmdPushDescriptorSet func, @@ -720,23 +718,11 @@ void Process_vkCmdPushDescriptorSetWithTemplate( uint32_t set, const void* pData); -void Process_vkCmdSetRenderingAttachmentLocations( - const ApiCallInfo& call_info, - PFN_vkCmdSetRenderingAttachmentLocations func, - VkCommandBuffer commandBuffer, - const VkRenderingAttachmentLocationInfo* pLocationInfo); - -void Process_vkCmdSetRenderingInputAttachmentIndices( - const ApiCallInfo& call_info, - PFN_vkCmdSetRenderingInputAttachmentIndices func, - VkCommandBuffer commandBuffer, - const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); - void Process_vkCmdBindDescriptorSets2( const ApiCallInfo& call_info, PFN_vkCmdBindDescriptorSets2 func, VkCommandBuffer commandBuffer, - const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); + StructPointerDecoder* pBindDescriptorSetsInfo); void Process_vkCmdPushConstants2( const ApiCallInfo& call_info, @@ -756,6 +742,34 @@ void Process_vkCmdPushDescriptorSetWithTemplate2( VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo); +void Process_vkCmdSetLineStipple( + const ApiCallInfo& call_info, + PFN_vkCmdSetLineStipple func, + VkCommandBuffer commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern); + +void Process_vkCmdBindIndexBuffer2( + const ApiCallInfo& call_info, + PFN_vkCmdBindIndexBuffer2 func, + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType); + +void Process_vkCmdSetRenderingAttachmentLocations( + const ApiCallInfo& call_info, + PFN_vkCmdSetRenderingAttachmentLocations func, + VkCommandBuffer commandBuffer, + const VkRenderingAttachmentLocationInfo* pLocationInfo); + +void Process_vkCmdSetRenderingInputAttachmentIndices( + const ApiCallInfo& call_info, + PFN_vkCmdSetRenderingInputAttachmentIndices func, + VkCommandBuffer commandBuffer, + const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); + void Process_vkCmdBeginVideoCodingKHR( const ApiCallInfo& call_info, PFN_vkCmdBeginVideoCodingKHR func, @@ -934,31 +948,36 @@ void Process_vkCmdCopyBuffer2KHR( const ApiCallInfo& call_info, PFN_vkCmdCopyBuffer2KHR func, VkCommandBuffer commandBuffer, - const VkCopyBufferInfo2* pCopyBufferInfo); + StructPointerDecoder* pCopyBufferInfo, + bool before_command); void Process_vkCmdCopyImage2KHR( const ApiCallInfo& call_info, PFN_vkCmdCopyImage2KHR func, VkCommandBuffer commandBuffer, - const VkCopyImageInfo2* pCopyImageInfo); + StructPointerDecoder* pCopyImageInfo, + bool before_command); void Process_vkCmdCopyBufferToImage2KHR( const ApiCallInfo& call_info, PFN_vkCmdCopyBufferToImage2KHR func, VkCommandBuffer commandBuffer, - const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); + StructPointerDecoder* pCopyBufferToImageInfo, + bool before_command); void Process_vkCmdCopyImageToBuffer2KHR( const ApiCallInfo& call_info, PFN_vkCmdCopyImageToBuffer2KHR func, VkCommandBuffer commandBuffer, - const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); + StructPointerDecoder* pCopyImageToBufferInfo, + bool before_command); void Process_vkCmdBlitImage2KHR( const ApiCallInfo& call_info, PFN_vkCmdBlitImage2KHR func, VkCommandBuffer commandBuffer, - const VkBlitImageInfo2* pBlitImageInfo); + StructPointerDecoder* pBlitImageInfo, + bool before_command); void Process_vkCmdResolveImage2KHR( const ApiCallInfo& call_info, @@ -992,7 +1011,7 @@ void Process_vkCmdBindDescriptorSets2KHR( const ApiCallInfo& call_info, PFN_vkCmdBindDescriptorSets2KHR func, VkCommandBuffer commandBuffer, - const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); + StructPointerDecoder* pBindDescriptorSetsInfo); void Process_vkCmdPushConstants2KHR( const ApiCallInfo& call_info, @@ -1024,6 +1043,24 @@ void Process_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( VkCommandBuffer commandBuffer, const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo); +void Process_vkCmdCopyMemoryIndirectKHR( + const ApiCallInfo& call_info, + PFN_vkCmdCopyMemoryIndirectKHR func, + VkCommandBuffer commandBuffer, + const VkCopyMemoryIndirectInfoKHR* pCopyMemoryIndirectInfo); + +void Process_vkCmdCopyMemoryToImageIndirectKHR( + const ApiCallInfo& call_info, + PFN_vkCmdCopyMemoryToImageIndirectKHR func, + VkCommandBuffer commandBuffer, + const VkCopyMemoryToImageIndirectInfoKHR* pCopyMemoryToImageIndirectInfo); + +void Process_vkCmdEndRendering2KHR( + const ApiCallInfo& call_info, + PFN_vkCmdEndRendering2KHR func, + VkCommandBuffer commandBuffer, + const VkRenderingEndInfoKHR* pRenderingEndInfo); + void Process_vkCmdDebugMarkerBeginEXT( const ApiCallInfo& call_info, PFN_vkCmdDebugMarkerBeginEXT func, @@ -1477,6 +1514,32 @@ void Process_vkCmdEndPerTileExecutionQCOM( VkCommandBuffer commandBuffer, const VkPerTileEndInfoQCOM* pPerTileEndInfo); +void Process_vkCmdBindDescriptorBuffersEXT( + const ApiCallInfo& call_info, + PFN_vkCmdBindDescriptorBuffersEXT func, + VkCommandBuffer commandBuffer, + uint32_t bufferCount, + const VkDescriptorBufferBindingInfoEXT* pBindingInfos); + +void Process_vkCmdSetDescriptorBufferOffsetsEXT( + const ApiCallInfo& call_info, + PFN_vkCmdSetDescriptorBufferOffsetsEXT func, + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t firstSet, + uint32_t setCount, + const uint32_t* pBufferIndices, + const VkDeviceSize* pOffsets); + +void Process_vkCmdBindDescriptorBufferEmbeddedSamplersEXT( + const ApiCallInfo& call_info, + PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT func, + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set); + void Process_vkCmdSetFragmentShadingRateEnumNV( const ApiCallInfo& call_info, PFN_vkCmdSetFragmentShadingRateEnumNV func, @@ -1842,6 +1905,13 @@ void Process_vkCmdConvertCooperativeVectorMatrixNV( uint32_t infoCount, const VkConvertCooperativeVectorMatrixInfoNV* pInfos); +void Process_vkCmdDispatchDataGraphARM( + const ApiCallInfo& call_info, + PFN_vkCmdDispatchDataGraphARM func, + VkCommandBuffer commandBuffer, + VkDataGraphPipelineSessionARM session, + const VkDataGraphPipelineDispatchInfoARM* pInfo); + void Process_vkCmdSetAttachmentFeedbackLoopEnableEXT( const ApiCallInfo& call_info, PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT func, @@ -1854,6 +1924,22 @@ void Process_vkCmdBindTileMemoryQCOM( VkCommandBuffer commandBuffer, const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo); +void Process_vkCmdDecompressMemoryEXT( + const ApiCallInfo& call_info, + PFN_vkCmdDecompressMemoryEXT func, + VkCommandBuffer commandBuffer, + const VkDecompressMemoryInfoEXT* pDecompressMemoryInfoEXT); + +void Process_vkCmdDecompressMemoryIndirectCountEXT( + const ApiCallInfo& call_info, + PFN_vkCmdDecompressMemoryIndirectCountEXT func, + VkCommandBuffer commandBuffer, + VkMemoryDecompressionMethodFlagsEXT decompressionMethod, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t maxDecompressionCount, + uint32_t stride); + void Process_vkCmdBuildPartitionedAccelerationStructuresNV( const ApiCallInfo& call_info, PFN_vkCmdBuildPartitionedAccelerationStructuresNV func, @@ -1878,15 +1964,28 @@ void Process_vkCmdEndRendering2EXT( const ApiCallInfo& call_info, PFN_vkCmdEndRendering2EXT func, VkCommandBuffer commandBuffer, - const VkRenderingEndInfoEXT* pRenderingEndInfo); + const VkRenderingEndInfoKHR* pRenderingEndInfo); + +void Process_vkCmdBeginCustomResolveEXT( + const ApiCallInfo& call_info, + PFN_vkCmdBeginCustomResolveEXT func, + VkCommandBuffer commandBuffer, + const VkBeginCustomResolveInfoEXT* pBeginCustomResolveInfo); + +void Process_vkCmdSetComputeOccupancyPriorityNV( + const ApiCallInfo& call_info, + PFN_vkCmdSetComputeOccupancyPriorityNV func, + VkCommandBuffer commandBuffer, + const VkComputeOccupancyPriorityParametersNV* pParameters); void Process_vkCmdBuildAccelerationStructuresKHR( const ApiCallInfo& call_info, PFN_vkCmdBuildAccelerationStructuresKHR func, VkCommandBuffer commandBuffer, uint32_t infoCount, - const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, - const VkAccelerationStructureBuildRangeInfoKHR* const * ppBuildRangeInfos); + StructPointerDecoder* pInfos, + StructPointerDecoder* ppBuildRangeInfos, + bool before_command); void Process_vkCmdBuildAccelerationStructuresIndirectKHR( const ApiCallInfo& call_info, @@ -1902,7 +2001,8 @@ void Process_vkCmdCopyAccelerationStructureKHR( const ApiCallInfo& call_info, PFN_vkCmdCopyAccelerationStructureKHR func, VkCommandBuffer commandBuffer, - const VkCopyAccelerationStructureInfoKHR* pInfo); + StructPointerDecoder* pInfo, + bool before_command); void Process_vkCmdCopyAccelerationStructureToMemoryKHR( const ApiCallInfo& call_info, diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_state_table.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_state_table.h index 3ee904aa7..d85ba62c2 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_state_table.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_state_table.h @@ -47,6 +47,7 @@ class VulkanStateTable : VulkanStateTableBase bool InsertWrapper(format::HandleId id, vulkan_wrappers::BufferViewWrapper* wrapper) { return InsertEntry(id, wrapper, vk_bufferView_map_); } bool InsertWrapper(format::HandleId id, vulkan_wrappers::CommandBufferWrapper* wrapper) { return InsertEntry(id, wrapper, vk_commandBuffer_map_); } bool InsertWrapper(format::HandleId id, vulkan_wrappers::CommandPoolWrapper* wrapper) { return InsertEntry(id, wrapper, vk_commandPool_map_); } + bool InsertWrapper(format::HandleId id, vulkan_wrappers::DataGraphPipelineSessionARMWrapper* wrapper) { return InsertEntry(id, wrapper, vk_dataGraphPipelineSessionARM_map_); } bool InsertWrapper(format::HandleId id, vulkan_wrappers::DebugReportCallbackEXTWrapper* wrapper) { return InsertEntry(id, wrapper, vk_debugReportCallbackEXT_map_); } bool InsertWrapper(format::HandleId id, vulkan_wrappers::DebugUtilsMessengerEXTWrapper* wrapper) { return InsertEntry(id, wrapper, vk_debugUtilsMessengerEXT_map_); } bool InsertWrapper(format::HandleId id, vulkan_wrappers::DeferredOperationKHRWrapper* wrapper) { return InsertEntry(id, wrapper, vk_deferredOperationKHR_map_); } @@ -96,6 +97,7 @@ class VulkanStateTable : VulkanStateTableBase bool RemoveWrapper(const vulkan_wrappers::BufferViewWrapper* wrapper) { return RemoveEntry(wrapper, vk_bufferView_map_); } bool RemoveWrapper(const vulkan_wrappers::CommandBufferWrapper* wrapper) { return RemoveEntry(wrapper, vk_commandBuffer_map_); } bool RemoveWrapper(const vulkan_wrappers::CommandPoolWrapper* wrapper) { return RemoveEntry(wrapper, vk_commandPool_map_); } + bool RemoveWrapper(const vulkan_wrappers::DataGraphPipelineSessionARMWrapper* wrapper) { return RemoveEntry(wrapper, vk_dataGraphPipelineSessionARM_map_); } bool RemoveWrapper(const vulkan_wrappers::DebugReportCallbackEXTWrapper* wrapper) { return RemoveEntry(wrapper, vk_debugReportCallbackEXT_map_); } bool RemoveWrapper(const vulkan_wrappers::DebugUtilsMessengerEXTWrapper* wrapper) { return RemoveEntry(wrapper, vk_debugUtilsMessengerEXT_map_); } bool RemoveWrapper(const vulkan_wrappers::DeferredOperationKHRWrapper* wrapper) { return RemoveEntry(wrapper, vk_deferredOperationKHR_map_); } @@ -145,6 +147,7 @@ class VulkanStateTable : VulkanStateTableBase const vulkan_wrappers::BufferViewWrapper* GetVulkanBufferViewWrapper(format::HandleId id) const { return GetWrapper(id, vk_bufferView_map_); } const vulkan_wrappers::CommandBufferWrapper* GetVulkanCommandBufferWrapper(format::HandleId id) const { return GetWrapper(id, vk_commandBuffer_map_); } const vulkan_wrappers::CommandPoolWrapper* GetVulkanCommandPoolWrapper(format::HandleId id) const { return GetWrapper(id, vk_commandPool_map_); } + const vulkan_wrappers::DataGraphPipelineSessionARMWrapper* GetVulkanDataGraphPipelineSessionARMWrapper(format::HandleId id) const { return GetWrapper(id, vk_dataGraphPipelineSessionARM_map_); } const vulkan_wrappers::DebugReportCallbackEXTWrapper* GetVulkanDebugReportCallbackEXTWrapper(format::HandleId id) const { return GetWrapper(id, vk_debugReportCallbackEXT_map_); } const vulkan_wrappers::DebugUtilsMessengerEXTWrapper* GetVulkanDebugUtilsMessengerEXTWrapper(format::HandleId id) const { return GetWrapper(id, vk_debugUtilsMessengerEXT_map_); } const vulkan_wrappers::DeferredOperationKHRWrapper* GetVulkanDeferredOperationKHRWrapper(format::HandleId id) const { return GetWrapper(id, vk_deferredOperationKHR_map_); } @@ -194,6 +197,7 @@ class VulkanStateTable : VulkanStateTableBase vulkan_wrappers::BufferViewWrapper* GetVulkanBufferViewWrapper(format::HandleId id) { return GetWrapper(id, vk_bufferView_map_); } vulkan_wrappers::CommandBufferWrapper* GetVulkanCommandBufferWrapper(format::HandleId id) { return GetWrapper(id, vk_commandBuffer_map_); } vulkan_wrappers::CommandPoolWrapper* GetVulkanCommandPoolWrapper(format::HandleId id) { return GetWrapper(id, vk_commandPool_map_); } + vulkan_wrappers::DataGraphPipelineSessionARMWrapper* GetVulkanDataGraphPipelineSessionARMWrapper(format::HandleId id) { return GetWrapper(id, vk_dataGraphPipelineSessionARM_map_); } vulkan_wrappers::DebugReportCallbackEXTWrapper* GetVulkanDebugReportCallbackEXTWrapper(format::HandleId id) { return GetWrapper(id, vk_debugReportCallbackEXT_map_); } vulkan_wrappers::DebugUtilsMessengerEXTWrapper* GetVulkanDebugUtilsMessengerEXTWrapper(format::HandleId id) { return GetWrapper(id, vk_debugUtilsMessengerEXT_map_); } vulkan_wrappers::DeferredOperationKHRWrapper* GetVulkanDeferredOperationKHRWrapper(format::HandleId id) { return GetWrapper(id, vk_deferredOperationKHR_map_); } @@ -243,6 +247,7 @@ class VulkanStateTable : VulkanStateTableBase void VisitWrappers(std::function visitor) const { for (auto entry : vk_bufferView_map_) { visitor(entry.second); } } void VisitWrappers(std::function visitor) const { for (auto entry : vk_commandBuffer_map_) { visitor(entry.second); } } void VisitWrappers(std::function visitor) const { for (auto entry : vk_commandPool_map_) { visitor(entry.second); } } + void VisitWrappers(std::function visitor) const { for (auto entry : vk_dataGraphPipelineSessionARM_map_) { visitor(entry.second); } } void VisitWrappers(std::function visitor) const { for (auto entry : vk_debugReportCallbackEXT_map_) { visitor(entry.second); } } void VisitWrappers(std::function visitor) const { for (auto entry : vk_debugUtilsMessengerEXT_map_) { visitor(entry.second); } } void VisitWrappers(std::function visitor) const { for (auto entry : vk_deferredOperationKHR_map_) { visitor(entry.second); } } @@ -293,6 +298,7 @@ class VulkanStateTable : VulkanStateTableBase std::map vk_bufferView_map_; std::map vk_commandBuffer_map_; std::map vk_commandPool_map_; + std::map vk_dataGraphPipelineSessionARM_map_; std::map vk_debugReportCallbackEXT_map_; std::map vk_debugUtilsMessengerEXT_map_; std::map vk_deferredOperationKHR_map_; @@ -349,6 +355,7 @@ class VulkanStateHandleTable : VulkanStateTableBase bool InsertWrapper(vulkan_wrappers::BufferViewWrapper* wrapper) { return InsertEntry(wrapper->handle, wrapper, vk_bufferView_map_); } bool InsertWrapper(vulkan_wrappers::CommandBufferWrapper* wrapper) { return InsertEntry(wrapper->handle, wrapper, vk_commandBuffer_map_); } bool InsertWrapper(vulkan_wrappers::CommandPoolWrapper* wrapper) { return InsertEntry(wrapper->handle, wrapper, vk_commandPool_map_); } + bool InsertWrapper(vulkan_wrappers::DataGraphPipelineSessionARMWrapper* wrapper) { return InsertEntry(wrapper->handle, wrapper, vk_dataGraphPipelineSessionARM_map_); } bool InsertWrapper(vulkan_wrappers::DebugReportCallbackEXTWrapper* wrapper) { return InsertEntry(wrapper->handle, wrapper, vk_debugReportCallbackEXT_map_); } bool InsertWrapper(vulkan_wrappers::DebugUtilsMessengerEXTWrapper* wrapper) { return InsertEntry(wrapper->handle, wrapper, vk_debugUtilsMessengerEXT_map_); } bool InsertWrapper(vulkan_wrappers::DeferredOperationKHRWrapper* wrapper) { return InsertEntry(wrapper->handle, wrapper, vk_deferredOperationKHR_map_); } @@ -416,6 +423,10 @@ class VulkanStateHandleTable : VulkanStateTableBase if (wrapper == nullptr) return false; return RemoveEntry(wrapper->handle, vk_commandPool_map_); } + bool RemoveWrapper(const vulkan_wrappers::DataGraphPipelineSessionARMWrapper* wrapper) { + if (wrapper == nullptr) return false; + return RemoveEntry(wrapper->handle, vk_dataGraphPipelineSessionARM_map_); + } bool RemoveWrapper(const vulkan_wrappers::DebugReportCallbackEXTWrapper* wrapper) { if (wrapper == nullptr) return false; return RemoveEntry(wrapper->handle, vk_debugReportCallbackEXT_map_); @@ -596,6 +607,7 @@ class VulkanStateHandleTable : VulkanStateTableBase std::unordered_map vk_bufferView_map_; std::unordered_map vk_commandBuffer_map_; std::unordered_map vk_commandPool_map_; + std::unordered_map vk_dataGraphPipelineSessionARM_map_; std::unordered_map vk_debugReportCallbackEXT_map_; std::unordered_map vk_debugUtilsMessengerEXT_map_; std::unordered_map vk_deferredOperationKHR_map_; @@ -646,6 +658,7 @@ template<> inline const vulkan_wrappers::BufferWrapper* VulkanStateHandleTable:: template<> inline const vulkan_wrappers::BufferViewWrapper* VulkanStateHandleTable::GetWrapper(VkBufferView handle) const { return VulkanStateTableBase::GetWrapper(handle, vk_bufferView_map_); } template<> inline const vulkan_wrappers::CommandBufferWrapper* VulkanStateHandleTable::GetWrapper(VkCommandBuffer handle) const { return VulkanStateTableBase::GetWrapper(handle, vk_commandBuffer_map_); } template<> inline const vulkan_wrappers::CommandPoolWrapper* VulkanStateHandleTable::GetWrapper(VkCommandPool handle) const { return VulkanStateTableBase::GetWrapper(handle, vk_commandPool_map_); } +template<> inline const vulkan_wrappers::DataGraphPipelineSessionARMWrapper* VulkanStateHandleTable::GetWrapper(VkDataGraphPipelineSessionARM handle) const { return VulkanStateTableBase::GetWrapper(handle, vk_dataGraphPipelineSessionARM_map_); } template<> inline const vulkan_wrappers::DebugReportCallbackEXTWrapper* VulkanStateHandleTable::GetWrapper(VkDebugReportCallbackEXT handle) const { return VulkanStateTableBase::GetWrapper(handle, vk_debugReportCallbackEXT_map_); } template<> inline const vulkan_wrappers::DebugUtilsMessengerEXTWrapper* VulkanStateHandleTable::GetWrapper(VkDebugUtilsMessengerEXT handle) const { return VulkanStateTableBase::GetWrapper(handle, vk_debugUtilsMessengerEXT_map_); } template<> inline const vulkan_wrappers::DeferredOperationKHRWrapper* VulkanStateHandleTable::GetWrapper(VkDeferredOperationKHR handle) const { return VulkanStateTableBase::GetWrapper(handle, vk_deferredOperationKHR_map_); } @@ -695,6 +708,7 @@ template<> inline vulkan_wrappers::BufferWrapper* VulkanStateHandleTable::GetWra template<> inline vulkan_wrappers::BufferViewWrapper* VulkanStateHandleTable::GetWrapper(VkBufferView handle) { return VulkanStateTableBase::GetWrapper(handle, vk_bufferView_map_); } template<> inline vulkan_wrappers::CommandBufferWrapper* VulkanStateHandleTable::GetWrapper(VkCommandBuffer handle) { return VulkanStateTableBase::GetWrapper(handle, vk_commandBuffer_map_); } template<> inline vulkan_wrappers::CommandPoolWrapper* VulkanStateHandleTable::GetWrapper(VkCommandPool handle) { return VulkanStateTableBase::GetWrapper(handle, vk_commandPool_map_); } +template<> inline vulkan_wrappers::DataGraphPipelineSessionARMWrapper* VulkanStateHandleTable::GetWrapper(VkDataGraphPipelineSessionARM handle) { return VulkanStateTableBase::GetWrapper(handle, vk_dataGraphPipelineSessionARM_map_); } template<> inline vulkan_wrappers::DebugReportCallbackEXTWrapper* VulkanStateHandleTable::GetWrapper(VkDebugReportCallbackEXT handle) { return VulkanStateTableBase::GetWrapper(handle, vk_debugReportCallbackEXT_map_); } template<> inline vulkan_wrappers::DebugUtilsMessengerEXTWrapper* VulkanStateHandleTable::GetWrapper(VkDebugUtilsMessengerEXT handle) { return VulkanStateTableBase::GetWrapper(handle, vk_debugUtilsMessengerEXT_map_); } template<> inline vulkan_wrappers::DeferredOperationKHRWrapper* VulkanStateHandleTable::GetWrapper(VkDeferredOperationKHR handle) { return VulkanStateTableBase::GetWrapper(handle, vk_deferredOperationKHR_map_); } diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_decoders.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_decoders.cpp index a4a3e602a..580871e34 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_decoders.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_decoders.cpp @@ -681,1045 +681,609 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoE return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265ProfileTierLevelFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoVP9ColorConfigFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoH265ProfileTierLevelFlags* value = wrapper->decoded_value; + StdVideoVP9ColorConfigFlags* value = wrapper->decoded_value; - uint32_t temp_general_tier_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_general_tier_flag); - value->general_tier_flag = temp_general_tier_flag; - uint32_t temp_general_progressive_source_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_general_progressive_source_flag); - value->general_progressive_source_flag = temp_general_progressive_source_flag; - uint32_t temp_general_interlaced_source_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_general_interlaced_source_flag); - value->general_interlaced_source_flag = temp_general_interlaced_source_flag; - uint32_t temp_general_non_packed_constraint_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_general_non_packed_constraint_flag); - value->general_non_packed_constraint_flag = temp_general_non_packed_constraint_flag; - uint32_t temp_general_frame_only_constraint_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_general_frame_only_constraint_flag); - value->general_frame_only_constraint_flag = temp_general_frame_only_constraint_flag; + uint32_t temp_color_range; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_color_range); + value->color_range = temp_color_range; + uint32_t temp_reserved; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); + value->reserved = temp_reserved; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265ProfileTierLevel* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoVP9ColorConfig* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoH265ProfileTierLevel* value = wrapper->decoded_value; + StdVideoVP9ColorConfig* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags = DecodeAllocator::Allocate(); wrapper->flags->decoded_value = &(value->flags); bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->general_profile_idc)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->general_level_idc)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->BitDepth)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subsampling_x)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subsampling_y)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved1)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->color_space)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265DecPicBufMgr* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoVP9LoopFilterFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoH265DecPicBufMgr* value = wrapper->decoded_value; + StdVideoVP9LoopFilterFlags* value = wrapper->decoded_value; - wrapper->max_latency_increase_plus1.SetExternalMemory(value->max_latency_increase_plus1, STD_VIDEO_H265_SUBLAYERS_LIST_SIZE); - bytes_read += wrapper->max_latency_increase_plus1.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->max_dec_pic_buffering_minus1.SetExternalMemory(value->max_dec_pic_buffering_minus1, STD_VIDEO_H265_SUBLAYERS_LIST_SIZE); - bytes_read += wrapper->max_dec_pic_buffering_minus1.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->max_num_reorder_pics.SetExternalMemory(value->max_num_reorder_pics, STD_VIDEO_H265_SUBLAYERS_LIST_SIZE); - bytes_read += wrapper->max_num_reorder_pics.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + uint32_t temp_loop_filter_delta_enabled; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_loop_filter_delta_enabled); + value->loop_filter_delta_enabled = temp_loop_filter_delta_enabled; + uint32_t temp_loop_filter_delta_update; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_loop_filter_delta_update); + value->loop_filter_delta_update = temp_loop_filter_delta_update; + uint32_t temp_reserved; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); + value->reserved = temp_reserved; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265SubLayerHrdParameters* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoVP9LoopFilter* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoH265SubLayerHrdParameters* value = wrapper->decoded_value; + StdVideoVP9LoopFilter* value = wrapper->decoded_value; - wrapper->bit_rate_value_minus1.SetExternalMemory(value->bit_rate_value_minus1, STD_VIDEO_H265_CPB_CNT_LIST_SIZE); - bytes_read += wrapper->bit_rate_value_minus1.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->cpb_size_value_minus1.SetExternalMemory(value->cpb_size_value_minus1, STD_VIDEO_H265_CPB_CNT_LIST_SIZE); - bytes_read += wrapper->cpb_size_value_minus1.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->cpb_size_du_value_minus1.SetExternalMemory(value->cpb_size_du_value_minus1, STD_VIDEO_H265_CPB_CNT_LIST_SIZE); - bytes_read += wrapper->cpb_size_du_value_minus1.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->bit_rate_du_value_minus1.SetExternalMemory(value->bit_rate_du_value_minus1, STD_VIDEO_H265_CPB_CNT_LIST_SIZE); - bytes_read += wrapper->bit_rate_du_value_minus1.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cbr_flag)); + wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags->decoded_value = &(value->flags); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->loop_filter_level)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->loop_filter_sharpness)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->update_ref_delta)); + wrapper->loop_filter_ref_deltas.SetExternalMemory(value->loop_filter_ref_deltas, STD_VIDEO_VP9_MAX_REF_FRAMES); + bytes_read += wrapper->loop_filter_ref_deltas.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->update_mode_delta)); + wrapper->loop_filter_mode_deltas.SetExternalMemory(value->loop_filter_mode_deltas, STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS); + bytes_read += wrapper->loop_filter_mode_deltas.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265HrdFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoVP9SegmentationFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoH265HrdFlags* value = wrapper->decoded_value; + StdVideoVP9SegmentationFlags* value = wrapper->decoded_value; - uint32_t temp_nal_hrd_parameters_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_nal_hrd_parameters_present_flag); - value->nal_hrd_parameters_present_flag = temp_nal_hrd_parameters_present_flag; - uint32_t temp_vcl_hrd_parameters_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_vcl_hrd_parameters_present_flag); - value->vcl_hrd_parameters_present_flag = temp_vcl_hrd_parameters_present_flag; - uint32_t temp_sub_pic_hrd_params_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_sub_pic_hrd_params_present_flag); - value->sub_pic_hrd_params_present_flag = temp_sub_pic_hrd_params_present_flag; - uint32_t temp_sub_pic_cpb_params_in_pic_timing_sei_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_sub_pic_cpb_params_in_pic_timing_sei_flag); - value->sub_pic_cpb_params_in_pic_timing_sei_flag = temp_sub_pic_cpb_params_in_pic_timing_sei_flag; - uint32_t temp_fixed_pic_rate_general_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_fixed_pic_rate_general_flag); - value->fixed_pic_rate_general_flag = temp_fixed_pic_rate_general_flag; - uint32_t temp_fixed_pic_rate_within_cvs_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_fixed_pic_rate_within_cvs_flag); - value->fixed_pic_rate_within_cvs_flag = temp_fixed_pic_rate_within_cvs_flag; - uint32_t temp_low_delay_hrd_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_low_delay_hrd_flag); - value->low_delay_hrd_flag = temp_low_delay_hrd_flag; + uint32_t temp_segmentation_update_map; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_update_map); + value->segmentation_update_map = temp_segmentation_update_map; + uint32_t temp_segmentation_temporal_update; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_temporal_update); + value->segmentation_temporal_update = temp_segmentation_temporal_update; + uint32_t temp_segmentation_update_data; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_update_data); + value->segmentation_update_data = temp_segmentation_update_data; + uint32_t temp_segmentation_abs_or_delta_update; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_abs_or_delta_update); + value->segmentation_abs_or_delta_update = temp_segmentation_abs_or_delta_update; + uint32_t temp_reserved; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); + value->reserved = temp_reserved; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265HrdParameters* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoVP9Segmentation* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoH265HrdParameters* value = wrapper->decoded_value; + StdVideoVP9Segmentation* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags = DecodeAllocator::Allocate(); wrapper->flags->decoded_value = &(value->flags); bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tick_divisor_minus2)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->du_cpb_removal_delay_increment_length_minus1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dpb_output_delay_du_length_minus1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bit_rate_scale)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cpb_size_scale)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cpb_size_du_scale)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->initial_cpb_removal_delay_length_minus1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->au_cpb_removal_delay_length_minus1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dpb_output_delay_length_minus1)); - wrapper->cpb_cnt_minus1.SetExternalMemory(value->cpb_cnt_minus1, STD_VIDEO_H265_SUBLAYERS_LIST_SIZE); - bytes_read += wrapper->cpb_cnt_minus1.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->elemental_duration_in_tc_minus1.SetExternalMemory(value->elemental_duration_in_tc_minus1, STD_VIDEO_H265_SUBLAYERS_LIST_SIZE); - bytes_read += wrapper->elemental_duration_in_tc_minus1.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->reserved.SetExternalMemory(value->reserved, 3); - bytes_read += wrapper->reserved.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->pSubLayerHrdParametersNal = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSubLayerHrdParametersNal->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSubLayerHrdParametersNal = wrapper->pSubLayerHrdParametersNal->GetPointer(); - wrapper->pSubLayerHrdParametersVcl = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSubLayerHrdParametersVcl->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSubLayerHrdParametersVcl = wrapper->pSubLayerHrdParametersVcl->GetPointer(); + wrapper->segmentation_tree_probs.SetExternalMemory(value->segmentation_tree_probs, STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS); + bytes_read += wrapper->segmentation_tree_probs.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->segmentation_pred_prob.SetExternalMemory(value->segmentation_pred_prob, STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB); + bytes_read += wrapper->segmentation_pred_prob.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->FeatureEnabled.SetExternalMemory(value->FeatureEnabled, STD_VIDEO_VP9_MAX_SEGMENTS); + bytes_read += wrapper->FeatureEnabled.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->FeatureData.SetExternalMemory(value->FeatureData, STD_VIDEO_VP9_MAX_SEGMENTS, STD_VIDEO_VP9_SEG_LVL_MAX); + bytes_read += wrapper->FeatureData.DecodeInt16((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265VpsFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeVP9PictureInfoFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoH265VpsFlags* value = wrapper->decoded_value; + StdVideoDecodeVP9PictureInfoFlags* value = wrapper->decoded_value; - uint32_t temp_vps_temporal_id_nesting_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_vps_temporal_id_nesting_flag); - value->vps_temporal_id_nesting_flag = temp_vps_temporal_id_nesting_flag; - uint32_t temp_vps_sub_layer_ordering_info_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_vps_sub_layer_ordering_info_present_flag); - value->vps_sub_layer_ordering_info_present_flag = temp_vps_sub_layer_ordering_info_present_flag; - uint32_t temp_vps_timing_info_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_vps_timing_info_present_flag); - value->vps_timing_info_present_flag = temp_vps_timing_info_present_flag; - uint32_t temp_vps_poc_proportional_to_timing_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_vps_poc_proportional_to_timing_flag); - value->vps_poc_proportional_to_timing_flag = temp_vps_poc_proportional_to_timing_flag; + uint32_t temp_error_resilient_mode; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_error_resilient_mode); + value->error_resilient_mode = temp_error_resilient_mode; + uint32_t temp_intra_only; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_intra_only); + value->intra_only = temp_intra_only; + uint32_t temp_allow_high_precision_mv; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_high_precision_mv); + value->allow_high_precision_mv = temp_allow_high_precision_mv; + uint32_t temp_refresh_frame_context; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_refresh_frame_context); + value->refresh_frame_context = temp_refresh_frame_context; + uint32_t temp_frame_parallel_decoding_mode; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_frame_parallel_decoding_mode); + value->frame_parallel_decoding_mode = temp_frame_parallel_decoding_mode; + uint32_t temp_segmentation_enabled; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_enabled); + value->segmentation_enabled = temp_segmentation_enabled; + uint32_t temp_show_frame; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_show_frame); + value->show_frame = temp_show_frame; + uint32_t temp_UsePrevFrameMvs; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_UsePrevFrameMvs); + value->UsePrevFrameMvs = temp_UsePrevFrameMvs; + uint32_t temp_reserved; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); + value->reserved = temp_reserved; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265VideoParameterSet* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeVP9PictureInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoH265VideoParameterSet* value = wrapper->decoded_value; + StdVideoDecodeVP9PictureInfo* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags = DecodeAllocator::Allocate(); wrapper->flags->decoded_value = &(value->flags); bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vps_video_parameter_set_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vps_max_sub_layers_minus1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved2)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vps_num_units_in_tick)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vps_time_scale)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vps_num_ticks_poc_diff_one_minus1)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved3)); - wrapper->pDecPicBufMgr = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDecPicBufMgr->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDecPicBufMgr = wrapper->pDecPicBufMgr->GetPointer(); - wrapper->pHrdParameters = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pHrdParameters->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pHrdParameters = wrapper->pHrdParameters->GetPointer(); - wrapper->pProfileTierLevel = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pProfileTierLevel->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pProfileTierLevel = wrapper->pProfileTierLevel->GetPointer(); - - return bytes_read; -} - -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265ScalingLists* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); - - size_t bytes_read = 0; - StdVideoH265ScalingLists* value = wrapper->decoded_value; - - wrapper->ScalingList4x4.SetExternalMemory(value->ScalingList4x4, STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS, STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS); - bytes_read += wrapper->ScalingList4x4.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->ScalingList8x8.SetExternalMemory(value->ScalingList8x8, STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS, STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS); - bytes_read += wrapper->ScalingList8x8.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->ScalingList16x16.SetExternalMemory(value->ScalingList16x16, STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS, STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS); - bytes_read += wrapper->ScalingList16x16.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->ScalingList32x32.SetExternalMemory(value->ScalingList32x32, STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS, STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS); - bytes_read += wrapper->ScalingList32x32.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->ScalingListDCCoef16x16.SetExternalMemory(value->ScalingListDCCoef16x16, STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS); - bytes_read += wrapper->ScalingListDCCoef16x16.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->ScalingListDCCoef32x32.SetExternalMemory(value->ScalingListDCCoef32x32, STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS); - bytes_read += wrapper->ScalingListDCCoef32x32.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->profile)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_type)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_context_idx)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reset_frame_context)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->refresh_frame_flags)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->ref_frame_sign_bias_mask)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->interpolation_filter)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->base_q_idx)); + bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_q_y_dc)); + bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_q_uv_dc)); + bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_q_uv_ac)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tile_cols_log2)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tile_rows_log2)); + wrapper->reserved1.SetExternalMemory(value->reserved1, 3); + bytes_read += wrapper->reserved1.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->pColorConfig = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pColorConfig->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pColorConfig = wrapper->pColorConfig->GetPointer(); + wrapper->pLoopFilter = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pLoopFilter->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pLoopFilter = wrapper->pLoopFilter->GetPointer(); + wrapper->pSegmentation = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSegmentation->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSegmentation = wrapper->pSegmentation->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265ShortTermRefPicSetFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1ColorConfigFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoH265ShortTermRefPicSetFlags* value = wrapper->decoded_value; + StdVideoAV1ColorConfigFlags* value = wrapper->decoded_value; - uint32_t temp_inter_ref_pic_set_prediction_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_inter_ref_pic_set_prediction_flag); - value->inter_ref_pic_set_prediction_flag = temp_inter_ref_pic_set_prediction_flag; - uint32_t temp_delta_rps_sign; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_delta_rps_sign); - value->delta_rps_sign = temp_delta_rps_sign; + uint32_t temp_mono_chrome; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_mono_chrome); + value->mono_chrome = temp_mono_chrome; + uint32_t temp_color_range; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_color_range); + value->color_range = temp_color_range; + uint32_t temp_separate_uv_delta_q; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_separate_uv_delta_q); + value->separate_uv_delta_q = temp_separate_uv_delta_q; + uint32_t temp_color_description_present_flag; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_color_description_present_flag); + value->color_description_present_flag = temp_color_description_present_flag; + uint32_t temp_reserved; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); + value->reserved = temp_reserved; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265ShortTermRefPicSet* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1ColorConfig* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoH265ShortTermRefPicSet* value = wrapper->decoded_value; + StdVideoAV1ColorConfig* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags = DecodeAllocator::Allocate(); wrapper->flags->decoded_value = &(value->flags); bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_idx_minus1)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->use_delta_flag)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->abs_delta_rps_minus1)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->used_by_curr_pic_flag)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->used_by_curr_pic_s0_flag)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->used_by_curr_pic_s1_flag)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved2)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved3)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_negative_pics)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_positive_pics)); - wrapper->delta_poc_s0_minus1.SetExternalMemory(value->delta_poc_s0_minus1, STD_VIDEO_H265_MAX_DPB_SIZE); - bytes_read += wrapper->delta_poc_s0_minus1.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->delta_poc_s1_minus1.SetExternalMemory(value->delta_poc_s1_minus1, STD_VIDEO_H265_MAX_DPB_SIZE); - bytes_read += wrapper->delta_poc_s1_minus1.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); - - return bytes_read; -} - -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265LongTermRefPicsSps* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); - - size_t bytes_read = 0; - StdVideoH265LongTermRefPicsSps* value = wrapper->decoded_value; - - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->used_by_curr_pic_lt_sps_flag)); - wrapper->lt_ref_pic_poc_lsb_sps.SetExternalMemory(value->lt_ref_pic_poc_lsb_sps, STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS); - bytes_read += wrapper->lt_ref_pic_poc_lsb_sps.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->BitDepth)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subsampling_x)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subsampling_y)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved1)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->color_primaries)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->transfer_characteristics)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->matrix_coefficients)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->chroma_sample_position)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265SpsVuiFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1TimingInfoFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoH265SpsVuiFlags* value = wrapper->decoded_value; + StdVideoAV1TimingInfoFlags* value = wrapper->decoded_value; - uint32_t temp_aspect_ratio_info_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_aspect_ratio_info_present_flag); - value->aspect_ratio_info_present_flag = temp_aspect_ratio_info_present_flag; - uint32_t temp_overscan_info_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_overscan_info_present_flag); - value->overscan_info_present_flag = temp_overscan_info_present_flag; - uint32_t temp_overscan_appropriate_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_overscan_appropriate_flag); - value->overscan_appropriate_flag = temp_overscan_appropriate_flag; - uint32_t temp_video_signal_type_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_video_signal_type_present_flag); - value->video_signal_type_present_flag = temp_video_signal_type_present_flag; - uint32_t temp_video_full_range_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_video_full_range_flag); - value->video_full_range_flag = temp_video_full_range_flag; - uint32_t temp_colour_description_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_colour_description_present_flag); - value->colour_description_present_flag = temp_colour_description_present_flag; - uint32_t temp_chroma_loc_info_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_chroma_loc_info_present_flag); - value->chroma_loc_info_present_flag = temp_chroma_loc_info_present_flag; - uint32_t temp_neutral_chroma_indication_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_neutral_chroma_indication_flag); - value->neutral_chroma_indication_flag = temp_neutral_chroma_indication_flag; - uint32_t temp_field_seq_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_field_seq_flag); - value->field_seq_flag = temp_field_seq_flag; - uint32_t temp_frame_field_info_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_frame_field_info_present_flag); - value->frame_field_info_present_flag = temp_frame_field_info_present_flag; - uint32_t temp_default_display_window_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_default_display_window_flag); - value->default_display_window_flag = temp_default_display_window_flag; - uint32_t temp_vui_timing_info_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_vui_timing_info_present_flag); - value->vui_timing_info_present_flag = temp_vui_timing_info_present_flag; - uint32_t temp_vui_poc_proportional_to_timing_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_vui_poc_proportional_to_timing_flag); - value->vui_poc_proportional_to_timing_flag = temp_vui_poc_proportional_to_timing_flag; - uint32_t temp_vui_hrd_parameters_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_vui_hrd_parameters_present_flag); - value->vui_hrd_parameters_present_flag = temp_vui_hrd_parameters_present_flag; - uint32_t temp_bitstream_restriction_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_bitstream_restriction_flag); - value->bitstream_restriction_flag = temp_bitstream_restriction_flag; - uint32_t temp_tiles_fixed_structure_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_tiles_fixed_structure_flag); - value->tiles_fixed_structure_flag = temp_tiles_fixed_structure_flag; - uint32_t temp_motion_vectors_over_pic_boundaries_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_motion_vectors_over_pic_boundaries_flag); - value->motion_vectors_over_pic_boundaries_flag = temp_motion_vectors_over_pic_boundaries_flag; - uint32_t temp_restricted_ref_pic_lists_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_restricted_ref_pic_lists_flag); - value->restricted_ref_pic_lists_flag = temp_restricted_ref_pic_lists_flag; + uint32_t temp_equal_picture_interval; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_equal_picture_interval); + value->equal_picture_interval = temp_equal_picture_interval; + uint32_t temp_reserved; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); + value->reserved = temp_reserved; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265SequenceParameterSetVui* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1TimingInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoH265SequenceParameterSetVui* value = wrapper->decoded_value; + StdVideoAV1TimingInfo* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags = DecodeAllocator::Allocate(); wrapper->flags->decoded_value = &(value->flags); bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspect_ratio_idc)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sar_width)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sar_height)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->video_format)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colour_primaries)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transfer_characteristics)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->matrix_coeffs)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->chroma_sample_loc_type_top_field)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->chroma_sample_loc_type_bottom_field)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved2)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->def_disp_win_left_offset)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->def_disp_win_right_offset)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->def_disp_win_top_offset)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->def_disp_win_bottom_offset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vui_num_units_in_tick)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vui_time_scale)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vui_num_ticks_poc_diff_one_minus1)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->min_spatial_segmentation_idc)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved3)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->max_bytes_per_pic_denom)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->max_bits_per_min_cu_denom)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->log2_max_mv_length_horizontal)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->log2_max_mv_length_vertical)); - wrapper->pHrdParameters = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pHrdParameters->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pHrdParameters = wrapper->pHrdParameters->GetPointer(); - - return bytes_read; -} - -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265PredictorPaletteEntries* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); - - size_t bytes_read = 0; - StdVideoH265PredictorPaletteEntries* value = wrapper->decoded_value; - - wrapper->PredictorPaletteEntries.SetExternalMemory(value->PredictorPaletteEntries, STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE, STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE); - bytes_read += wrapper->PredictorPaletteEntries.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_units_in_display_tick)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->time_scale)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_ticks_per_picture_minus_1)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265SpsFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1SequenceHeaderFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoH265SpsFlags* value = wrapper->decoded_value; + StdVideoAV1SequenceHeaderFlags* value = wrapper->decoded_value; - uint32_t temp_sps_temporal_id_nesting_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_sps_temporal_id_nesting_flag); - value->sps_temporal_id_nesting_flag = temp_sps_temporal_id_nesting_flag; - uint32_t temp_separate_colour_plane_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_separate_colour_plane_flag); - value->separate_colour_plane_flag = temp_separate_colour_plane_flag; - uint32_t temp_conformance_window_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_conformance_window_flag); - value->conformance_window_flag = temp_conformance_window_flag; - uint32_t temp_sps_sub_layer_ordering_info_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_sps_sub_layer_ordering_info_present_flag); - value->sps_sub_layer_ordering_info_present_flag = temp_sps_sub_layer_ordering_info_present_flag; - uint32_t temp_scaling_list_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_scaling_list_enabled_flag); - value->scaling_list_enabled_flag = temp_scaling_list_enabled_flag; - uint32_t temp_sps_scaling_list_data_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_sps_scaling_list_data_present_flag); - value->sps_scaling_list_data_present_flag = temp_sps_scaling_list_data_present_flag; - uint32_t temp_amp_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_amp_enabled_flag); - value->amp_enabled_flag = temp_amp_enabled_flag; - uint32_t temp_sample_adaptive_offset_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_sample_adaptive_offset_enabled_flag); - value->sample_adaptive_offset_enabled_flag = temp_sample_adaptive_offset_enabled_flag; - uint32_t temp_pcm_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_pcm_enabled_flag); - value->pcm_enabled_flag = temp_pcm_enabled_flag; - uint32_t temp_pcm_loop_filter_disabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_pcm_loop_filter_disabled_flag); - value->pcm_loop_filter_disabled_flag = temp_pcm_loop_filter_disabled_flag; - uint32_t temp_long_term_ref_pics_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_long_term_ref_pics_present_flag); - value->long_term_ref_pics_present_flag = temp_long_term_ref_pics_present_flag; - uint32_t temp_sps_temporal_mvp_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_sps_temporal_mvp_enabled_flag); - value->sps_temporal_mvp_enabled_flag = temp_sps_temporal_mvp_enabled_flag; - uint32_t temp_strong_intra_smoothing_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_strong_intra_smoothing_enabled_flag); - value->strong_intra_smoothing_enabled_flag = temp_strong_intra_smoothing_enabled_flag; - uint32_t temp_vui_parameters_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_vui_parameters_present_flag); - value->vui_parameters_present_flag = temp_vui_parameters_present_flag; - uint32_t temp_sps_extension_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_sps_extension_present_flag); - value->sps_extension_present_flag = temp_sps_extension_present_flag; - uint32_t temp_sps_range_extension_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_sps_range_extension_flag); - value->sps_range_extension_flag = temp_sps_range_extension_flag; - uint32_t temp_transform_skip_rotation_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_transform_skip_rotation_enabled_flag); - value->transform_skip_rotation_enabled_flag = temp_transform_skip_rotation_enabled_flag; - uint32_t temp_transform_skip_context_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_transform_skip_context_enabled_flag); - value->transform_skip_context_enabled_flag = temp_transform_skip_context_enabled_flag; - uint32_t temp_implicit_rdpcm_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_implicit_rdpcm_enabled_flag); - value->implicit_rdpcm_enabled_flag = temp_implicit_rdpcm_enabled_flag; - uint32_t temp_explicit_rdpcm_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_explicit_rdpcm_enabled_flag); - value->explicit_rdpcm_enabled_flag = temp_explicit_rdpcm_enabled_flag; - uint32_t temp_extended_precision_processing_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_extended_precision_processing_flag); - value->extended_precision_processing_flag = temp_extended_precision_processing_flag; - uint32_t temp_intra_smoothing_disabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_intra_smoothing_disabled_flag); - value->intra_smoothing_disabled_flag = temp_intra_smoothing_disabled_flag; - uint32_t temp_high_precision_offsets_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_high_precision_offsets_enabled_flag); - value->high_precision_offsets_enabled_flag = temp_high_precision_offsets_enabled_flag; - uint32_t temp_persistent_rice_adaptation_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_persistent_rice_adaptation_enabled_flag); - value->persistent_rice_adaptation_enabled_flag = temp_persistent_rice_adaptation_enabled_flag; - uint32_t temp_cabac_bypass_alignment_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_cabac_bypass_alignment_enabled_flag); - value->cabac_bypass_alignment_enabled_flag = temp_cabac_bypass_alignment_enabled_flag; - uint32_t temp_sps_scc_extension_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_sps_scc_extension_flag); - value->sps_scc_extension_flag = temp_sps_scc_extension_flag; - uint32_t temp_sps_curr_pic_ref_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_sps_curr_pic_ref_enabled_flag); - value->sps_curr_pic_ref_enabled_flag = temp_sps_curr_pic_ref_enabled_flag; - uint32_t temp_palette_mode_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_palette_mode_enabled_flag); - value->palette_mode_enabled_flag = temp_palette_mode_enabled_flag; - uint32_t temp_sps_palette_predictor_initializers_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_sps_palette_predictor_initializers_present_flag); - value->sps_palette_predictor_initializers_present_flag = temp_sps_palette_predictor_initializers_present_flag; - uint32_t temp_intra_boundary_filtering_disabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_intra_boundary_filtering_disabled_flag); - value->intra_boundary_filtering_disabled_flag = temp_intra_boundary_filtering_disabled_flag; - - return bytes_read; -} - -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265SequenceParameterSet* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); - - size_t bytes_read = 0; - StdVideoH265SequenceParameterSet* value = wrapper->decoded_value; - - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->chroma_format_idc)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pic_width_in_luma_samples)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pic_height_in_luma_samples)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sps_video_parameter_set_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sps_max_sub_layers_minus1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sps_seq_parameter_set_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bit_depth_luma_minus8)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bit_depth_chroma_minus8)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->log2_max_pic_order_cnt_lsb_minus4)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->log2_min_luma_coding_block_size_minus3)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->log2_diff_max_min_luma_coding_block_size)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->log2_min_luma_transform_block_size_minus2)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->log2_diff_max_min_luma_transform_block_size)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->max_transform_hierarchy_depth_inter)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->max_transform_hierarchy_depth_intra)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_short_term_ref_pic_sets)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_long_term_ref_pics_sps)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pcm_sample_bit_depth_luma_minus1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pcm_sample_bit_depth_chroma_minus1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->log2_min_pcm_luma_coding_block_size_minus3)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->log2_diff_max_min_pcm_luma_coding_block_size)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved2)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->palette_max_size)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_palette_max_predictor_size)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->motion_vector_resolution_control_idc)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sps_num_palette_predictor_initializers_minus1)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->conf_win_left_offset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->conf_win_right_offset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->conf_win_top_offset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->conf_win_bottom_offset)); - wrapper->pProfileTierLevel = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pProfileTierLevel->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pProfileTierLevel = wrapper->pProfileTierLevel->GetPointer(); - wrapper->pDecPicBufMgr = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDecPicBufMgr->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDecPicBufMgr = wrapper->pDecPicBufMgr->GetPointer(); - wrapper->pScalingLists = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pScalingLists->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pScalingLists = wrapper->pScalingLists->GetPointer(); - wrapper->pShortTermRefPicSet = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pShortTermRefPicSet->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pShortTermRefPicSet = wrapper->pShortTermRefPicSet->GetPointer(); - wrapper->pLongTermRefPicsSps = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pLongTermRefPicsSps->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pLongTermRefPicsSps = wrapper->pLongTermRefPicsSps->GetPointer(); - wrapper->pSequenceParameterSetVui = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSequenceParameterSetVui->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSequenceParameterSetVui = wrapper->pSequenceParameterSetVui->GetPointer(); - wrapper->pPredictorPaletteEntries = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pPredictorPaletteEntries->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPredictorPaletteEntries = wrapper->pPredictorPaletteEntries->GetPointer(); + uint32_t temp_still_picture; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_still_picture); + value->still_picture = temp_still_picture; + uint32_t temp_reduced_still_picture_header; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reduced_still_picture_header); + value->reduced_still_picture_header = temp_reduced_still_picture_header; + uint32_t temp_use_128x128_superblock; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_use_128x128_superblock); + value->use_128x128_superblock = temp_use_128x128_superblock; + uint32_t temp_enable_filter_intra; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_filter_intra); + value->enable_filter_intra = temp_enable_filter_intra; + uint32_t temp_enable_intra_edge_filter; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_intra_edge_filter); + value->enable_intra_edge_filter = temp_enable_intra_edge_filter; + uint32_t temp_enable_interintra_compound; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_interintra_compound); + value->enable_interintra_compound = temp_enable_interintra_compound; + uint32_t temp_enable_masked_compound; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_masked_compound); + value->enable_masked_compound = temp_enable_masked_compound; + uint32_t temp_enable_warped_motion; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_warped_motion); + value->enable_warped_motion = temp_enable_warped_motion; + uint32_t temp_enable_dual_filter; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_dual_filter); + value->enable_dual_filter = temp_enable_dual_filter; + uint32_t temp_enable_order_hint; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_order_hint); + value->enable_order_hint = temp_enable_order_hint; + uint32_t temp_enable_jnt_comp; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_jnt_comp); + value->enable_jnt_comp = temp_enable_jnt_comp; + uint32_t temp_enable_ref_frame_mvs; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_ref_frame_mvs); + value->enable_ref_frame_mvs = temp_enable_ref_frame_mvs; + uint32_t temp_frame_id_numbers_present_flag; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_frame_id_numbers_present_flag); + value->frame_id_numbers_present_flag = temp_frame_id_numbers_present_flag; + uint32_t temp_enable_superres; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_superres); + value->enable_superres = temp_enable_superres; + uint32_t temp_enable_cdef; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_cdef); + value->enable_cdef = temp_enable_cdef; + uint32_t temp_enable_restoration; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_restoration); + value->enable_restoration = temp_enable_restoration; + uint32_t temp_film_grain_params_present; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_film_grain_params_present); + value->film_grain_params_present = temp_film_grain_params_present; + uint32_t temp_timing_info_present_flag; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_timing_info_present_flag); + value->timing_info_present_flag = temp_timing_info_present_flag; + uint32_t temp_initial_display_delay_present_flag; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_initial_display_delay_present_flag); + value->initial_display_delay_present_flag = temp_initial_display_delay_present_flag; + uint32_t temp_reserved; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); + value->reserved = temp_reserved; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265PpsFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1SequenceHeader* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoH265PpsFlags* value = wrapper->decoded_value; + StdVideoAV1SequenceHeader* value = wrapper->decoded_value; - uint32_t temp_dependent_slice_segments_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_dependent_slice_segments_enabled_flag); - value->dependent_slice_segments_enabled_flag = temp_dependent_slice_segments_enabled_flag; - uint32_t temp_output_flag_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_output_flag_present_flag); - value->output_flag_present_flag = temp_output_flag_present_flag; - uint32_t temp_sign_data_hiding_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_sign_data_hiding_enabled_flag); - value->sign_data_hiding_enabled_flag = temp_sign_data_hiding_enabled_flag; - uint32_t temp_cabac_init_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_cabac_init_present_flag); - value->cabac_init_present_flag = temp_cabac_init_present_flag; - uint32_t temp_constrained_intra_pred_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_constrained_intra_pred_flag); - value->constrained_intra_pred_flag = temp_constrained_intra_pred_flag; - uint32_t temp_transform_skip_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_transform_skip_enabled_flag); - value->transform_skip_enabled_flag = temp_transform_skip_enabled_flag; - uint32_t temp_cu_qp_delta_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_cu_qp_delta_enabled_flag); - value->cu_qp_delta_enabled_flag = temp_cu_qp_delta_enabled_flag; - uint32_t temp_pps_slice_chroma_qp_offsets_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_pps_slice_chroma_qp_offsets_present_flag); - value->pps_slice_chroma_qp_offsets_present_flag = temp_pps_slice_chroma_qp_offsets_present_flag; - uint32_t temp_weighted_pred_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_weighted_pred_flag); - value->weighted_pred_flag = temp_weighted_pred_flag; - uint32_t temp_weighted_bipred_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_weighted_bipred_flag); - value->weighted_bipred_flag = temp_weighted_bipred_flag; - uint32_t temp_transquant_bypass_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_transquant_bypass_enabled_flag); - value->transquant_bypass_enabled_flag = temp_transquant_bypass_enabled_flag; - uint32_t temp_tiles_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_tiles_enabled_flag); - value->tiles_enabled_flag = temp_tiles_enabled_flag; - uint32_t temp_entropy_coding_sync_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_entropy_coding_sync_enabled_flag); - value->entropy_coding_sync_enabled_flag = temp_entropy_coding_sync_enabled_flag; - uint32_t temp_uniform_spacing_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_uniform_spacing_flag); - value->uniform_spacing_flag = temp_uniform_spacing_flag; - uint32_t temp_loop_filter_across_tiles_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_loop_filter_across_tiles_enabled_flag); - value->loop_filter_across_tiles_enabled_flag = temp_loop_filter_across_tiles_enabled_flag; - uint32_t temp_pps_loop_filter_across_slices_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_pps_loop_filter_across_slices_enabled_flag); - value->pps_loop_filter_across_slices_enabled_flag = temp_pps_loop_filter_across_slices_enabled_flag; - uint32_t temp_deblocking_filter_control_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_deblocking_filter_control_present_flag); - value->deblocking_filter_control_present_flag = temp_deblocking_filter_control_present_flag; - uint32_t temp_deblocking_filter_override_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_deblocking_filter_override_enabled_flag); - value->deblocking_filter_override_enabled_flag = temp_deblocking_filter_override_enabled_flag; - uint32_t temp_pps_deblocking_filter_disabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_pps_deblocking_filter_disabled_flag); - value->pps_deblocking_filter_disabled_flag = temp_pps_deblocking_filter_disabled_flag; - uint32_t temp_pps_scaling_list_data_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_pps_scaling_list_data_present_flag); - value->pps_scaling_list_data_present_flag = temp_pps_scaling_list_data_present_flag; - uint32_t temp_lists_modification_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_lists_modification_present_flag); - value->lists_modification_present_flag = temp_lists_modification_present_flag; - uint32_t temp_slice_segment_header_extension_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_slice_segment_header_extension_present_flag); - value->slice_segment_header_extension_present_flag = temp_slice_segment_header_extension_present_flag; - uint32_t temp_pps_extension_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_pps_extension_present_flag); - value->pps_extension_present_flag = temp_pps_extension_present_flag; - uint32_t temp_cross_component_prediction_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_cross_component_prediction_enabled_flag); - value->cross_component_prediction_enabled_flag = temp_cross_component_prediction_enabled_flag; - uint32_t temp_chroma_qp_offset_list_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_chroma_qp_offset_list_enabled_flag); - value->chroma_qp_offset_list_enabled_flag = temp_chroma_qp_offset_list_enabled_flag; - uint32_t temp_pps_curr_pic_ref_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_pps_curr_pic_ref_enabled_flag); - value->pps_curr_pic_ref_enabled_flag = temp_pps_curr_pic_ref_enabled_flag; - uint32_t temp_residual_adaptive_colour_transform_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_residual_adaptive_colour_transform_enabled_flag); - value->residual_adaptive_colour_transform_enabled_flag = temp_residual_adaptive_colour_transform_enabled_flag; - uint32_t temp_pps_slice_act_qp_offsets_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_pps_slice_act_qp_offsets_present_flag); - value->pps_slice_act_qp_offsets_present_flag = temp_pps_slice_act_qp_offsets_present_flag; - uint32_t temp_pps_palette_predictor_initializers_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_pps_palette_predictor_initializers_present_flag); - value->pps_palette_predictor_initializers_present_flag = temp_pps_palette_predictor_initializers_present_flag; - uint32_t temp_monochrome_palette_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_monochrome_palette_flag); - value->monochrome_palette_flag = temp_monochrome_palette_flag; - uint32_t temp_pps_range_extension_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_pps_range_extension_flag); - value->pps_range_extension_flag = temp_pps_range_extension_flag; - - return bytes_read; -} - -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoH265PictureParameterSet* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); - - size_t bytes_read = 0; - StdVideoH265PictureParameterSet* value = wrapper->decoded_value; - - wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags = DecodeAllocator::Allocate(); wrapper->flags->decoded_value = &(value->flags); bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pps_pic_parameter_set_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pps_seq_parameter_set_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sps_video_parameter_set_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_extra_slice_header_bits)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_ref_idx_l0_default_active_minus1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_ref_idx_l1_default_active_minus1)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->init_qp_minus26)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->diff_cu_qp_delta_depth)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pps_cb_qp_offset)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pps_cr_qp_offset)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pps_beta_offset_div2)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pps_tc_offset_div2)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->log2_parallel_merge_level_minus2)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->log2_max_transform_skip_block_size_minus2)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->diff_cu_chroma_qp_offset_depth)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->chroma_qp_offset_list_len_minus1)); - wrapper->cb_qp_offset_list.SetExternalMemory(value->cb_qp_offset_list, STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE); - bytes_read += wrapper->cb_qp_offset_list.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->cr_qp_offset_list.SetExternalMemory(value->cr_qp_offset_list, STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE); - bytes_read += wrapper->cr_qp_offset_list.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->log2_sao_offset_scale_luma)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->log2_sao_offset_scale_chroma)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pps_act_y_qp_offset_plus5)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pps_act_cb_qp_offset_plus5)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pps_act_cr_qp_offset_plus3)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pps_num_palette_predictor_initializers)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->luma_bit_depth_entry_minus8)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->chroma_bit_depth_entry_minus8)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_tile_columns_minus1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_tile_rows_minus1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved2)); - wrapper->column_width_minus1.SetExternalMemory(value->column_width_minus1, STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE); - bytes_read += wrapper->column_width_minus1.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->row_height_minus1.SetExternalMemory(value->row_height_minus1, STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE); - bytes_read += wrapper->row_height_minus1.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved3)); - wrapper->pScalingLists = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pScalingLists->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pScalingLists = wrapper->pScalingLists->GetPointer(); - wrapper->pPredictorPaletteEntries = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pPredictorPaletteEntries->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPredictorPaletteEntries = wrapper->pPredictorPaletteEntries->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->seq_profile)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_width_bits_minus_1)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_height_bits_minus_1)); + bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->max_frame_width_minus_1)); + bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->max_frame_height_minus_1)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_frame_id_length_minus_2)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->additional_frame_id_length_minus_1)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->order_hint_bits_minus_1)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->seq_force_integer_mv)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->seq_force_screen_content_tools)); + wrapper->reserved1.SetExternalMemory(value->reserved1, 5); + bytes_read += wrapper->reserved1.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->pColorConfig = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pColorConfig->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pColorConfig = wrapper->pColorConfig->GetPointer(); + wrapper->pTimingInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pTimingInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTimingInfo = wrapper->pTimingInfo->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeH265PictureInfoFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1LoopFilterFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoDecodeH265PictureInfoFlags* value = wrapper->decoded_value; + StdVideoAV1LoopFilterFlags* value = wrapper->decoded_value; - uint32_t temp_IrapPicFlag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_IrapPicFlag); - value->IrapPicFlag = temp_IrapPicFlag; - uint32_t temp_IdrPicFlag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_IdrPicFlag); - value->IdrPicFlag = temp_IdrPicFlag; - uint32_t temp_IsReference; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_IsReference); - value->IsReference = temp_IsReference; - uint32_t temp_short_term_ref_pic_set_sps_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_short_term_ref_pic_set_sps_flag); - value->short_term_ref_pic_set_sps_flag = temp_short_term_ref_pic_set_sps_flag; + uint32_t temp_loop_filter_delta_enabled; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_loop_filter_delta_enabled); + value->loop_filter_delta_enabled = temp_loop_filter_delta_enabled; + uint32_t temp_loop_filter_delta_update; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_loop_filter_delta_update); + value->loop_filter_delta_update = temp_loop_filter_delta_update; + uint32_t temp_reserved; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); + value->reserved = temp_reserved; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeH265PictureInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1LoopFilter* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoDecodeH265PictureInfo* value = wrapper->decoded_value; + StdVideoAV1LoopFilter* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags = DecodeAllocator::Allocate(); wrapper->flags->decoded_value = &(value->flags); bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sps_video_parameter_set_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pps_seq_parameter_set_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pps_pic_parameter_set_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->NumDeltaPocsOfRefRpsIdx)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->PicOrderCntVal)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->NumBitsForSTRefPicSetInSlice)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved)); - wrapper->RefPicSetStCurrBefore.SetExternalMemory(value->RefPicSetStCurrBefore, STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE); - bytes_read += wrapper->RefPicSetStCurrBefore.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->RefPicSetStCurrAfter.SetExternalMemory(value->RefPicSetStCurrAfter, STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE); - bytes_read += wrapper->RefPicSetStCurrAfter.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->RefPicSetLtCurr.SetExternalMemory(value->RefPicSetLtCurr, STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE); - bytes_read += wrapper->RefPicSetLtCurr.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->loop_filter_level.SetExternalMemory(value->loop_filter_level, STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS); + bytes_read += wrapper->loop_filter_level.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->loop_filter_sharpness)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->update_ref_delta)); + wrapper->loop_filter_ref_deltas.SetExternalMemory(value->loop_filter_ref_deltas, STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME); + bytes_read += wrapper->loop_filter_ref_deltas.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->update_mode_delta)); + wrapper->loop_filter_mode_deltas.SetExternalMemory(value->loop_filter_mode_deltas, STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS); + bytes_read += wrapper->loop_filter_mode_deltas.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeH265ReferenceInfoFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1QuantizationFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoDecodeH265ReferenceInfoFlags* value = wrapper->decoded_value; + StdVideoAV1QuantizationFlags* value = wrapper->decoded_value; - uint32_t temp_used_for_long_term_reference; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_used_for_long_term_reference); - value->used_for_long_term_reference = temp_used_for_long_term_reference; - uint32_t temp_unused_for_reference; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_unused_for_reference); - value->unused_for_reference = temp_unused_for_reference; + uint32_t temp_using_qmatrix; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_using_qmatrix); + value->using_qmatrix = temp_using_qmatrix; + uint32_t temp_diff_uv_delta; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_diff_uv_delta); + value->diff_uv_delta = temp_diff_uv_delta; + uint32_t temp_reserved; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); + value->reserved = temp_reserved; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeH265ReferenceInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1Quantization* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoDecodeH265ReferenceInfo* value = wrapper->decoded_value; + StdVideoAV1Quantization* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags = DecodeAllocator::Allocate(); wrapper->flags->decoded_value = &(value->flags); bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->PicOrderCntVal)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->base_q_idx)); + bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->DeltaQYDc)); + bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->DeltaQUDc)); + bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->DeltaQUAc)); + bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->DeltaQVDc)); + bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->DeltaQVAc)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qm_y)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qm_u)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qm_v)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeH265WeightTableFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1Segmentation* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeH265WeightTableFlags* value = wrapper->decoded_value; + StdVideoAV1Segmentation* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->luma_weight_l0_flag)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->chroma_weight_l0_flag)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->luma_weight_l1_flag)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->chroma_weight_l1_flag)); + wrapper->FeatureEnabled.SetExternalMemory(value->FeatureEnabled, STD_VIDEO_AV1_MAX_SEGMENTS); + bytes_read += wrapper->FeatureEnabled.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->FeatureData.SetExternalMemory(value->FeatureData, STD_VIDEO_AV1_MAX_SEGMENTS, STD_VIDEO_AV1_SEG_LVL_MAX); + bytes_read += wrapper->FeatureData.DecodeInt16((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeH265WeightTable* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1TileInfoFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeH265WeightTable* value = wrapper->decoded_value; + StdVideoAV1TileInfoFlags* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->luma_log2_weight_denom)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_chroma_log2_weight_denom)); - wrapper->delta_luma_weight_l0.SetExternalMemory(value->delta_luma_weight_l0, STD_VIDEO_H265_MAX_NUM_LIST_REF); - bytes_read += wrapper->delta_luma_weight_l0.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->luma_offset_l0.SetExternalMemory(value->luma_offset_l0, STD_VIDEO_H265_MAX_NUM_LIST_REF); - bytes_read += wrapper->luma_offset_l0.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->delta_chroma_weight_l0.SetExternalMemory(value->delta_chroma_weight_l0, STD_VIDEO_H265_MAX_NUM_LIST_REF, STD_VIDEO_H265_MAX_CHROMA_PLANES); - bytes_read += wrapper->delta_chroma_weight_l0.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->delta_chroma_offset_l0.SetExternalMemory(value->delta_chroma_offset_l0, STD_VIDEO_H265_MAX_NUM_LIST_REF, STD_VIDEO_H265_MAX_CHROMA_PLANES); - bytes_read += wrapper->delta_chroma_offset_l0.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->delta_luma_weight_l1.SetExternalMemory(value->delta_luma_weight_l1, STD_VIDEO_H265_MAX_NUM_LIST_REF); - bytes_read += wrapper->delta_luma_weight_l1.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->luma_offset_l1.SetExternalMemory(value->luma_offset_l1, STD_VIDEO_H265_MAX_NUM_LIST_REF); - bytes_read += wrapper->luma_offset_l1.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->delta_chroma_weight_l1.SetExternalMemory(value->delta_chroma_weight_l1, STD_VIDEO_H265_MAX_NUM_LIST_REF, STD_VIDEO_H265_MAX_CHROMA_PLANES); - bytes_read += wrapper->delta_chroma_weight_l1.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->delta_chroma_offset_l1.SetExternalMemory(value->delta_chroma_offset_l1, STD_VIDEO_H265_MAX_NUM_LIST_REF, STD_VIDEO_H265_MAX_CHROMA_PLANES); - bytes_read += wrapper->delta_chroma_offset_l1.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); + uint32_t temp_uniform_tile_spacing_flag; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_uniform_tile_spacing_flag); + value->uniform_tile_spacing_flag = temp_uniform_tile_spacing_flag; + uint32_t temp_reserved; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); + value->reserved = temp_reserved; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeH265LongTermRefPics* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1TileInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeH265LongTermRefPics* value = wrapper->decoded_value; + StdVideoAV1TileInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_long_term_sps)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_long_term_pics)); - wrapper->lt_idx_sps.SetExternalMemory(value->lt_idx_sps, STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS); - bytes_read += wrapper->lt_idx_sps.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->poc_lsb_lt.SetExternalMemory(value->poc_lsb_lt, STD_VIDEO_H265_MAX_LONG_TERM_PICS); - bytes_read += wrapper->poc_lsb_lt.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->used_by_curr_pic_lt_flag)); - wrapper->delta_poc_msb_present_flag.SetExternalMemory(value->delta_poc_msb_present_flag, STD_VIDEO_H265_MAX_DELTA_POC); - bytes_read += wrapper->delta_poc_msb_present_flag.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->delta_poc_msb_cycle_lt.SetExternalMemory(value->delta_poc_msb_cycle_lt, STD_VIDEO_H265_MAX_DELTA_POC); - bytes_read += wrapper->delta_poc_msb_cycle_lt.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags->decoded_value = &(value->flags); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->TileCols)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->TileRows)); + bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->context_update_tile_id)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tile_size_bytes_minus_1)); + wrapper->reserved1.SetExternalMemory(value->reserved1, 7); + bytes_read += wrapper->reserved1.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += wrapper->pMiColStarts.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); + value->pMiColStarts = wrapper->pMiColStarts.GetPointer(); + bytes_read += wrapper->pMiRowStarts.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); + value->pMiRowStarts = wrapper->pMiRowStarts.GetPointer(); + bytes_read += wrapper->pWidthInSbsMinus1.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); + value->pWidthInSbsMinus1 = wrapper->pWidthInSbsMinus1.GetPointer(); + bytes_read += wrapper->pHeightInSbsMinus1.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); + value->pHeightInSbsMinus1 = wrapper->pHeightInSbsMinus1.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeH265SliceSegmentHeaderFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1CDEF* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeH265SliceSegmentHeaderFlags* value = wrapper->decoded_value; + StdVideoAV1CDEF* value = wrapper->decoded_value; - uint32_t temp_first_slice_segment_in_pic_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_first_slice_segment_in_pic_flag); - value->first_slice_segment_in_pic_flag = temp_first_slice_segment_in_pic_flag; - uint32_t temp_dependent_slice_segment_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_dependent_slice_segment_flag); - value->dependent_slice_segment_flag = temp_dependent_slice_segment_flag; - uint32_t temp_slice_sao_luma_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_slice_sao_luma_flag); - value->slice_sao_luma_flag = temp_slice_sao_luma_flag; - uint32_t temp_slice_sao_chroma_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_slice_sao_chroma_flag); - value->slice_sao_chroma_flag = temp_slice_sao_chroma_flag; - uint32_t temp_num_ref_idx_active_override_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_num_ref_idx_active_override_flag); - value->num_ref_idx_active_override_flag = temp_num_ref_idx_active_override_flag; - uint32_t temp_mvd_l1_zero_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_mvd_l1_zero_flag); - value->mvd_l1_zero_flag = temp_mvd_l1_zero_flag; - uint32_t temp_cabac_init_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_cabac_init_flag); - value->cabac_init_flag = temp_cabac_init_flag; - uint32_t temp_cu_chroma_qp_offset_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_cu_chroma_qp_offset_enabled_flag); - value->cu_chroma_qp_offset_enabled_flag = temp_cu_chroma_qp_offset_enabled_flag; - uint32_t temp_deblocking_filter_override_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_deblocking_filter_override_flag); - value->deblocking_filter_override_flag = temp_deblocking_filter_override_flag; - uint32_t temp_slice_deblocking_filter_disabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_slice_deblocking_filter_disabled_flag); - value->slice_deblocking_filter_disabled_flag = temp_slice_deblocking_filter_disabled_flag; - uint32_t temp_collocated_from_l0_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_collocated_from_l0_flag); - value->collocated_from_l0_flag = temp_collocated_from_l0_flag; - uint32_t temp_slice_loop_filter_across_slices_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_slice_loop_filter_across_slices_enabled_flag); - value->slice_loop_filter_across_slices_enabled_flag = temp_slice_loop_filter_across_slices_enabled_flag; - uint32_t temp_reserved; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); - value->reserved = temp_reserved; + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cdef_damping_minus_3)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cdef_bits)); + wrapper->cdef_y_pri_strength.SetExternalMemory(value->cdef_y_pri_strength, STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS); + bytes_read += wrapper->cdef_y_pri_strength.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->cdef_y_sec_strength.SetExternalMemory(value->cdef_y_sec_strength, STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS); + bytes_read += wrapper->cdef_y_sec_strength.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->cdef_uv_pri_strength.SetExternalMemory(value->cdef_uv_pri_strength, STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS); + bytes_read += wrapper->cdef_uv_pri_strength.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->cdef_uv_sec_strength.SetExternalMemory(value->cdef_uv_sec_strength, STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS); + bytes_read += wrapper->cdef_uv_sec_strength.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeH265SliceSegmentHeader* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1LoopRestoration* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeH265SliceSegmentHeader* value = wrapper->decoded_value; + StdVideoAV1LoopRestoration* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->slice_type)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->slice_segment_address)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->collocated_ref_idx)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->MaxNumMergeCand)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->slice_cb_qp_offset)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->slice_cr_qp_offset)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->slice_beta_offset_div2)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->slice_tc_offset_div2)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->slice_act_y_qp_offset)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->slice_act_cb_qp_offset)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->slice_act_cr_qp_offset)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->slice_qp_delta)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved1)); - wrapper->pWeightTable = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pWeightTable->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pWeightTable = wrapper->pWeightTable->GetPointer(); + wrapper->FrameRestorationType.SetExternalMemory(value->FrameRestorationType, STD_VIDEO_AV1_MAX_NUM_PLANES); + bytes_read += wrapper->FrameRestorationType.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->LoopRestorationSize.SetExternalMemory(value->LoopRestorationSize, STD_VIDEO_AV1_MAX_NUM_PLANES); + bytes_read += wrapper->LoopRestorationSize.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeH265ReferenceListsInfoFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1GlobalMotion* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeH265ReferenceListsInfoFlags* value = wrapper->decoded_value; + StdVideoAV1GlobalMotion* value = wrapper->decoded_value; - uint32_t temp_ref_pic_list_modification_flag_l0; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_ref_pic_list_modification_flag_l0); - value->ref_pic_list_modification_flag_l0 = temp_ref_pic_list_modification_flag_l0; - uint32_t temp_ref_pic_list_modification_flag_l1; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_ref_pic_list_modification_flag_l1); - value->ref_pic_list_modification_flag_l1 = temp_ref_pic_list_modification_flag_l1; - uint32_t temp_reserved; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); - value->reserved = temp_reserved; + wrapper->GmType.SetExternalMemory(value->GmType, STD_VIDEO_AV1_NUM_REF_FRAMES); + bytes_read += wrapper->GmType.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->gm_params.SetExternalMemory(value->gm_params, STD_VIDEO_AV1_NUM_REF_FRAMES, STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS); + bytes_read += wrapper->gm_params.DecodeInt32((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeH265ReferenceListsInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1FilmGrainFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeH265ReferenceListsInfo* value = wrapper->decoded_value; - - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_ref_idx_l0_active_minus1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_ref_idx_l1_active_minus1)); - wrapper->RefPicList0.SetExternalMemory(value->RefPicList0, STD_VIDEO_H265_MAX_NUM_LIST_REF); - bytes_read += wrapper->RefPicList0.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->RefPicList1.SetExternalMemory(value->RefPicList1, STD_VIDEO_H265_MAX_NUM_LIST_REF); - bytes_read += wrapper->RefPicList1.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->list_entry_l0.SetExternalMemory(value->list_entry_l0, STD_VIDEO_H265_MAX_NUM_LIST_REF); - bytes_read += wrapper->list_entry_l0.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->list_entry_l1.SetExternalMemory(value->list_entry_l1, STD_VIDEO_H265_MAX_NUM_LIST_REF); - bytes_read += wrapper->list_entry_l1.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - - return bytes_read; -} - -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeH265PictureInfoFlags* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + StdVideoAV1FilmGrainFlags* value = wrapper->decoded_value; - size_t bytes_read = 0; - StdVideoEncodeH265PictureInfoFlags* value = wrapper->decoded_value; - - uint32_t temp_is_reference; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_is_reference); - value->is_reference = temp_is_reference; - uint32_t temp_IrapPicFlag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_IrapPicFlag); - value->IrapPicFlag = temp_IrapPicFlag; - uint32_t temp_used_for_long_term_reference; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_used_for_long_term_reference); - value->used_for_long_term_reference = temp_used_for_long_term_reference; - uint32_t temp_discardable_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_discardable_flag); - value->discardable_flag = temp_discardable_flag; - uint32_t temp_cross_layer_bla_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_cross_layer_bla_flag); - value->cross_layer_bla_flag = temp_cross_layer_bla_flag; - uint32_t temp_pic_output_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_pic_output_flag); - value->pic_output_flag = temp_pic_output_flag; - uint32_t temp_no_output_of_prior_pics_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_no_output_of_prior_pics_flag); - value->no_output_of_prior_pics_flag = temp_no_output_of_prior_pics_flag; - uint32_t temp_short_term_ref_pic_set_sps_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_short_term_ref_pic_set_sps_flag); - value->short_term_ref_pic_set_sps_flag = temp_short_term_ref_pic_set_sps_flag; - uint32_t temp_slice_temporal_mvp_enabled_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_slice_temporal_mvp_enabled_flag); - value->slice_temporal_mvp_enabled_flag = temp_slice_temporal_mvp_enabled_flag; + uint32_t temp_chroma_scaling_from_luma; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_chroma_scaling_from_luma); + value->chroma_scaling_from_luma = temp_chroma_scaling_from_luma; + uint32_t temp_overlap_flag; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_overlap_flag); + value->overlap_flag = temp_overlap_flag; + uint32_t temp_clip_to_restricted_range; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_clip_to_restricted_range); + value->clip_to_restricted_range = temp_clip_to_restricted_range; + uint32_t temp_update_grain; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_update_grain); + value->update_grain = temp_update_grain; uint32_t temp_reserved; bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); value->reserved = temp_reserved; @@ -1727,51 +1291,147 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoE return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeH265PictureInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1FilmGrain* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeH265PictureInfo* value = wrapper->decoded_value; + StdVideoAV1FilmGrain* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags = DecodeAllocator::Allocate(); wrapper->flags->decoded_value = &(value->flags); bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pic_type)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sps_video_parameter_set_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pps_seq_parameter_set_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pps_pic_parameter_set_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->short_term_ref_pic_set_idx)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->PicOrderCntVal)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->TemporalId)); - wrapper->reserved1.SetExternalMemory(value->reserved1, 7); - bytes_read += wrapper->reserved1.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->pRefLists = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pRefLists->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pRefLists = wrapper->pRefLists->GetPointer(); - wrapper->pShortTermRefPicSet = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pShortTermRefPicSet->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pShortTermRefPicSet = wrapper->pShortTermRefPicSet->GetPointer(); - wrapper->pLongTermRefPics = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pLongTermRefPics->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pLongTermRefPics = wrapper->pLongTermRefPics->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->grain_scaling_minus_8)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->ar_coeff_lag)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->ar_coeff_shift_minus_6)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->grain_scale_shift)); + bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->grain_seed)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->film_grain_params_ref_idx)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_y_points)); + wrapper->point_y_value.SetExternalMemory(value->point_y_value, STD_VIDEO_AV1_MAX_NUM_Y_POINTS); + bytes_read += wrapper->point_y_value.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->point_y_scaling.SetExternalMemory(value->point_y_scaling, STD_VIDEO_AV1_MAX_NUM_Y_POINTS); + bytes_read += wrapper->point_y_scaling.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_cb_points)); + wrapper->point_cb_value.SetExternalMemory(value->point_cb_value, STD_VIDEO_AV1_MAX_NUM_CB_POINTS); + bytes_read += wrapper->point_cb_value.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->point_cb_scaling.SetExternalMemory(value->point_cb_scaling, STD_VIDEO_AV1_MAX_NUM_CB_POINTS); + bytes_read += wrapper->point_cb_scaling.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_cr_points)); + wrapper->point_cr_value.SetExternalMemory(value->point_cr_value, STD_VIDEO_AV1_MAX_NUM_CR_POINTS); + bytes_read += wrapper->point_cr_value.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->point_cr_scaling.SetExternalMemory(value->point_cr_scaling, STD_VIDEO_AV1_MAX_NUM_CR_POINTS); + bytes_read += wrapper->point_cr_scaling.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->ar_coeffs_y_plus_128.SetExternalMemory(value->ar_coeffs_y_plus_128, STD_VIDEO_AV1_MAX_NUM_POS_LUMA); + bytes_read += wrapper->ar_coeffs_y_plus_128.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->ar_coeffs_cb_plus_128.SetExternalMemory(value->ar_coeffs_cb_plus_128, STD_VIDEO_AV1_MAX_NUM_POS_CHROMA); + bytes_read += wrapper->ar_coeffs_cb_plus_128.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->ar_coeffs_cr_plus_128.SetExternalMemory(value->ar_coeffs_cr_plus_128, STD_VIDEO_AV1_MAX_NUM_POS_CHROMA); + bytes_read += wrapper->ar_coeffs_cr_plus_128.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cb_mult)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cb_luma_mult)); + bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cb_offset)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cr_mult)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cr_luma_mult)); + bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cr_offset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeH265ReferenceInfoFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeAV1PictureInfoFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeH265ReferenceInfoFlags* value = wrapper->decoded_value; + StdVideoDecodeAV1PictureInfoFlags* value = wrapper->decoded_value; - uint32_t temp_used_for_long_term_reference; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_used_for_long_term_reference); - value->used_for_long_term_reference = temp_used_for_long_term_reference; - uint32_t temp_unused_for_reference; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_unused_for_reference); - value->unused_for_reference = temp_unused_for_reference; + uint32_t temp_error_resilient_mode; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_error_resilient_mode); + value->error_resilient_mode = temp_error_resilient_mode; + uint32_t temp_disable_cdf_update; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_disable_cdf_update); + value->disable_cdf_update = temp_disable_cdf_update; + uint32_t temp_use_superres; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_use_superres); + value->use_superres = temp_use_superres; + uint32_t temp_render_and_frame_size_different; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_render_and_frame_size_different); + value->render_and_frame_size_different = temp_render_and_frame_size_different; + uint32_t temp_allow_screen_content_tools; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_screen_content_tools); + value->allow_screen_content_tools = temp_allow_screen_content_tools; + uint32_t temp_is_filter_switchable; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_is_filter_switchable); + value->is_filter_switchable = temp_is_filter_switchable; + uint32_t temp_force_integer_mv; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_force_integer_mv); + value->force_integer_mv = temp_force_integer_mv; + uint32_t temp_frame_size_override_flag; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_frame_size_override_flag); + value->frame_size_override_flag = temp_frame_size_override_flag; + uint32_t temp_buffer_removal_time_present_flag; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_buffer_removal_time_present_flag); + value->buffer_removal_time_present_flag = temp_buffer_removal_time_present_flag; + uint32_t temp_allow_intrabc; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_intrabc); + value->allow_intrabc = temp_allow_intrabc; + uint32_t temp_frame_refs_short_signaling; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_frame_refs_short_signaling); + value->frame_refs_short_signaling = temp_frame_refs_short_signaling; + uint32_t temp_allow_high_precision_mv; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_high_precision_mv); + value->allow_high_precision_mv = temp_allow_high_precision_mv; + uint32_t temp_is_motion_mode_switchable; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_is_motion_mode_switchable); + value->is_motion_mode_switchable = temp_is_motion_mode_switchable; + uint32_t temp_use_ref_frame_mvs; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_use_ref_frame_mvs); + value->use_ref_frame_mvs = temp_use_ref_frame_mvs; + uint32_t temp_disable_frame_end_update_cdf; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_disable_frame_end_update_cdf); + value->disable_frame_end_update_cdf = temp_disable_frame_end_update_cdf; + uint32_t temp_allow_warped_motion; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_warped_motion); + value->allow_warped_motion = temp_allow_warped_motion; + uint32_t temp_reduced_tx_set; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reduced_tx_set); + value->reduced_tx_set = temp_reduced_tx_set; + uint32_t temp_reference_select; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reference_select); + value->reference_select = temp_reference_select; + uint32_t temp_skip_mode_present; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_skip_mode_present); + value->skip_mode_present = temp_skip_mode_present; + uint32_t temp_delta_q_present; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_delta_q_present); + value->delta_q_present = temp_delta_q_present; + uint32_t temp_delta_lf_present; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_delta_lf_present); + value->delta_lf_present = temp_delta_lf_present; + uint32_t temp_delta_lf_multi; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_delta_lf_multi); + value->delta_lf_multi = temp_delta_lf_multi; + uint32_t temp_segmentation_enabled; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_enabled); + value->segmentation_enabled = temp_segmentation_enabled; + uint32_t temp_segmentation_update_map; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_update_map); + value->segmentation_update_map = temp_segmentation_update_map; + uint32_t temp_segmentation_temporal_update; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_temporal_update); + value->segmentation_temporal_update = temp_segmentation_temporal_update; + uint32_t temp_segmentation_update_data; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_update_data); + value->segmentation_update_data = temp_segmentation_update_data; + uint32_t temp_UsesLr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_UsesLr); + value->UsesLr = temp_UsesLr; + uint32_t temp_usesChromaLr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_usesChromaLr); + value->usesChromaLr = temp_usesChromaLr; + uint32_t temp_apply_grain; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_apply_grain); + value->apply_grain = temp_apply_grain; uint32_t temp_reserved; bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); value->reserved = temp_reserved; @@ -1779,33 +1439,76 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoE return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeH265ReferenceInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeAV1PictureInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeH265ReferenceInfo* value = wrapper->decoded_value; + StdVideoDecodeAV1PictureInfo* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags = DecodeAllocator::Allocate(); wrapper->flags->decoded_value = &(value->flags); bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pic_type)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->PicOrderCntVal)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->TemporalId)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_type)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->current_frame_id)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->OrderHint)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primary_ref_frame)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->refresh_frame_flags)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved1)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->interpolation_filter)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->TxMode)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_q_res)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_lf_res)); + wrapper->SkipModeFrame.SetExternalMemory(value->SkipModeFrame, STD_VIDEO_AV1_SKIP_MODE_FRAMES); + bytes_read += wrapper->SkipModeFrame.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->coded_denom)); + wrapper->reserved2.SetExternalMemory(value->reserved2, 3); + bytes_read += wrapper->reserved2.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->OrderHints.SetExternalMemory(value->OrderHints, STD_VIDEO_AV1_NUM_REF_FRAMES); + bytes_read += wrapper->OrderHints.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->expectedFrameId.SetExternalMemory(value->expectedFrameId, STD_VIDEO_AV1_NUM_REF_FRAMES); + bytes_read += wrapper->expectedFrameId.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->pTileInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pTileInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTileInfo = wrapper->pTileInfo->GetPointer(); + wrapper->pQuantization = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pQuantization->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pQuantization = wrapper->pQuantization->GetPointer(); + wrapper->pSegmentation = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSegmentation->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSegmentation = wrapper->pSegmentation->GetPointer(); + wrapper->pLoopFilter = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pLoopFilter->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pLoopFilter = wrapper->pLoopFilter->GetPointer(); + wrapper->pCDEF = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pCDEF->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCDEF = wrapper->pCDEF->GetPointer(); + wrapper->pLoopRestoration = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pLoopRestoration->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pLoopRestoration = wrapper->pLoopRestoration->GetPointer(); + wrapper->pGlobalMotion = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pGlobalMotion->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pGlobalMotion = wrapper->pGlobalMotion->GetPointer(); + wrapper->pFilmGrain = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pFilmGrain->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pFilmGrain = wrapper->pFilmGrain->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoVP9ColorConfigFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeAV1ReferenceInfoFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoVP9ColorConfigFlags* value = wrapper->decoded_value; + StdVideoDecodeAV1ReferenceInfoFlags* value = wrapper->decoded_value; - uint32_t temp_color_range; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_color_range); - value->color_range = temp_color_range; + uint32_t temp_disable_frame_end_update_cdf; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_disable_frame_end_update_cdf); + value->disable_frame_end_update_cdf = temp_disable_frame_end_update_cdf; + uint32_t temp_segmentation_enabled; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_enabled); + value->segmentation_enabled = temp_segmentation_enabled; uint32_t temp_reserved; bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); value->reserved = temp_reserved; @@ -1813,86 +1516,70 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoV return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoVP9ColorConfig* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeAV1ReferenceInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoVP9ColorConfig* value = wrapper->decoded_value; + StdVideoDecodeAV1ReferenceInfo* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags = DecodeAllocator::Allocate(); wrapper->flags->decoded_value = &(value->flags); bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->BitDepth)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subsampling_x)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subsampling_y)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved1)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->color_space)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_type)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->RefFrameSignBias)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->OrderHint)); + wrapper->SavedOrderHints.SetExternalMemory(value->SavedOrderHints, STD_VIDEO_AV1_NUM_REF_FRAMES); + bytes_read += wrapper->SavedOrderHints.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoVP9LoopFilterFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1ExtensionHeader* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoVP9LoopFilterFlags* value = wrapper->decoded_value; + StdVideoEncodeAV1ExtensionHeader* value = wrapper->decoded_value; - uint32_t temp_loop_filter_delta_enabled; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_loop_filter_delta_enabled); - value->loop_filter_delta_enabled = temp_loop_filter_delta_enabled; - uint32_t temp_loop_filter_delta_update; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_loop_filter_delta_update); - value->loop_filter_delta_update = temp_loop_filter_delta_update; - uint32_t temp_reserved; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); - value->reserved = temp_reserved; + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->temporal_id)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->spatial_id)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoVP9LoopFilter* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1DecoderModelInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoVP9LoopFilter* value = wrapper->decoded_value; + StdVideoEncodeAV1DecoderModelInfo* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->loop_filter_level)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->loop_filter_sharpness)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->update_ref_delta)); - wrapper->loop_filter_ref_deltas.SetExternalMemory(value->loop_filter_ref_deltas, STD_VIDEO_VP9_MAX_REF_FRAMES); - bytes_read += wrapper->loop_filter_ref_deltas.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->update_mode_delta)); - wrapper->loop_filter_mode_deltas.SetExternalMemory(value->loop_filter_mode_deltas, STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS); - bytes_read += wrapper->loop_filter_mode_deltas.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->buffer_delay_length_minus_1)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->buffer_removal_time_length_minus_1)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_presentation_time_length_minus_1)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved1)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_units_in_decoding_tick)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoVP9SegmentationFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1OperatingPointInfoFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoVP9SegmentationFlags* value = wrapper->decoded_value; + StdVideoEncodeAV1OperatingPointInfoFlags* value = wrapper->decoded_value; - uint32_t temp_segmentation_update_map; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_update_map); - value->segmentation_update_map = temp_segmentation_update_map; - uint32_t temp_segmentation_temporal_update; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_temporal_update); - value->segmentation_temporal_update = temp_segmentation_temporal_update; - uint32_t temp_segmentation_update_data; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_update_data); - value->segmentation_update_data = temp_segmentation_update_data; - uint32_t temp_segmentation_abs_or_delta_update; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_abs_or_delta_update); - value->segmentation_abs_or_delta_update = temp_segmentation_abs_or_delta_update; + uint32_t temp_decoder_model_present_for_this_op; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_decoder_model_present_for_this_op); + value->decoder_model_present_for_this_op = temp_decoder_model_present_for_this_op; + uint32_t temp_low_delay_mode_flag; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_low_delay_mode_flag); + value->low_delay_mode_flag = temp_low_delay_mode_flag; + uint32_t temp_initial_display_delay_present_for_this_op; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_initial_display_delay_present_for_this_op); + value->initial_display_delay_present_for_this_op = temp_initial_display_delay_present_for_this_op; uint32_t temp_reserved; bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); value->reserved = temp_reserved; @@ -1900,59 +1587,120 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoV return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoVP9Segmentation* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1OperatingPointInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoVP9Segmentation* value = wrapper->decoded_value; + StdVideoEncodeAV1OperatingPointInfo* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags = DecodeAllocator::Allocate(); wrapper->flags->decoded_value = &(value->flags); bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - wrapper->segmentation_tree_probs.SetExternalMemory(value->segmentation_tree_probs, STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS); - bytes_read += wrapper->segmentation_tree_probs.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->segmentation_pred_prob.SetExternalMemory(value->segmentation_pred_prob, STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB); - bytes_read += wrapper->segmentation_pred_prob.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->FeatureEnabled.SetExternalMemory(value->FeatureEnabled, STD_VIDEO_VP9_MAX_SEGMENTS); - bytes_read += wrapper->FeatureEnabled.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->FeatureData.SetExternalMemory(value->FeatureData, STD_VIDEO_VP9_MAX_SEGMENTS, STD_VIDEO_VP9_SEG_LVL_MAX); - bytes_read += wrapper->FeatureData.DecodeInt16((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->operating_point_idc)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->seq_level_idx)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->seq_tier)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->decoder_buffer_delay)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->encoder_buffer_delay)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->initial_display_delay_minus_1)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeVP9PictureInfoFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1PictureInfoFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoDecodeVP9PictureInfoFlags* value = wrapper->decoded_value; + StdVideoEncodeAV1PictureInfoFlags* value = wrapper->decoded_value; uint32_t temp_error_resilient_mode; bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_error_resilient_mode); value->error_resilient_mode = temp_error_resilient_mode; - uint32_t temp_intra_only; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_intra_only); - value->intra_only = temp_intra_only; + uint32_t temp_disable_cdf_update; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_disable_cdf_update); + value->disable_cdf_update = temp_disable_cdf_update; + uint32_t temp_use_superres; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_use_superres); + value->use_superres = temp_use_superres; + uint32_t temp_render_and_frame_size_different; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_render_and_frame_size_different); + value->render_and_frame_size_different = temp_render_and_frame_size_different; + uint32_t temp_allow_screen_content_tools; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_screen_content_tools); + value->allow_screen_content_tools = temp_allow_screen_content_tools; + uint32_t temp_is_filter_switchable; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_is_filter_switchable); + value->is_filter_switchable = temp_is_filter_switchable; + uint32_t temp_force_integer_mv; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_force_integer_mv); + value->force_integer_mv = temp_force_integer_mv; + uint32_t temp_frame_size_override_flag; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_frame_size_override_flag); + value->frame_size_override_flag = temp_frame_size_override_flag; + uint32_t temp_buffer_removal_time_present_flag; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_buffer_removal_time_present_flag); + value->buffer_removal_time_present_flag = temp_buffer_removal_time_present_flag; + uint32_t temp_allow_intrabc; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_intrabc); + value->allow_intrabc = temp_allow_intrabc; + uint32_t temp_frame_refs_short_signaling; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_frame_refs_short_signaling); + value->frame_refs_short_signaling = temp_frame_refs_short_signaling; uint32_t temp_allow_high_precision_mv; bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_high_precision_mv); value->allow_high_precision_mv = temp_allow_high_precision_mv; - uint32_t temp_refresh_frame_context; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_refresh_frame_context); - value->refresh_frame_context = temp_refresh_frame_context; - uint32_t temp_frame_parallel_decoding_mode; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_frame_parallel_decoding_mode); - value->frame_parallel_decoding_mode = temp_frame_parallel_decoding_mode; + uint32_t temp_is_motion_mode_switchable; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_is_motion_mode_switchable); + value->is_motion_mode_switchable = temp_is_motion_mode_switchable; + uint32_t temp_use_ref_frame_mvs; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_use_ref_frame_mvs); + value->use_ref_frame_mvs = temp_use_ref_frame_mvs; + uint32_t temp_disable_frame_end_update_cdf; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_disable_frame_end_update_cdf); + value->disable_frame_end_update_cdf = temp_disable_frame_end_update_cdf; + uint32_t temp_allow_warped_motion; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_warped_motion); + value->allow_warped_motion = temp_allow_warped_motion; + uint32_t temp_reduced_tx_set; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reduced_tx_set); + value->reduced_tx_set = temp_reduced_tx_set; + uint32_t temp_skip_mode_present; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_skip_mode_present); + value->skip_mode_present = temp_skip_mode_present; + uint32_t temp_delta_q_present; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_delta_q_present); + value->delta_q_present = temp_delta_q_present; + uint32_t temp_delta_lf_present; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_delta_lf_present); + value->delta_lf_present = temp_delta_lf_present; + uint32_t temp_delta_lf_multi; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_delta_lf_multi); + value->delta_lf_multi = temp_delta_lf_multi; uint32_t temp_segmentation_enabled; bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_enabled); value->segmentation_enabled = temp_segmentation_enabled; + uint32_t temp_segmentation_update_map; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_update_map); + value->segmentation_update_map = temp_segmentation_update_map; + uint32_t temp_segmentation_temporal_update; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_temporal_update); + value->segmentation_temporal_update = temp_segmentation_temporal_update; + uint32_t temp_segmentation_update_data; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_update_data); + value->segmentation_update_data = temp_segmentation_update_data; + uint32_t temp_UsesLr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_UsesLr); + value->UsesLr = temp_UsesLr; + uint32_t temp_usesChromaLr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_usesChromaLr); + value->usesChromaLr = temp_usesChromaLr; uint32_t temp_show_frame; bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_show_frame); value->show_frame = temp_show_frame; - uint32_t temp_UsePrevFrameMvs; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_UsePrevFrameMvs); - value->UsePrevFrameMvs = temp_UsePrevFrameMvs; + uint32_t temp_showable_frame; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_showable_frame); + value->showable_frame = temp_showable_frame; uint32_t temp_reserved; bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); value->reserved = temp_reserved; @@ -1960,63 +1708,80 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoD return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeVP9PictureInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1PictureInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoDecodeVP9PictureInfo* value = wrapper->decoded_value; + StdVideoEncodeAV1PictureInfo* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags = DecodeAllocator::Allocate(); wrapper->flags->decoded_value = &(value->flags); bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->profile)); bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_type)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_context_idx)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reset_frame_context)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_presentation_time)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->current_frame_id)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->order_hint)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primary_ref_frame)); bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->refresh_frame_flags)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->ref_frame_sign_bias_mask)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->coded_denom)); + bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->render_width_minus_1)); + bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->render_height_minus_1)); bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->interpolation_filter)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->base_q_idx)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_q_y_dc)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_q_uv_dc)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_q_uv_ac)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tile_cols_log2)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tile_rows_log2)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->TxMode)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_q_res)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_lf_res)); + wrapper->ref_order_hint.SetExternalMemory(value->ref_order_hint, STD_VIDEO_AV1_NUM_REF_FRAMES); + bytes_read += wrapper->ref_order_hint.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->ref_frame_idx.SetExternalMemory(value->ref_frame_idx, STD_VIDEO_AV1_REFS_PER_FRAME); + bytes_read += wrapper->ref_frame_idx.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); wrapper->reserved1.SetExternalMemory(value->reserved1, 3); - bytes_read += wrapper->reserved1.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->pColorConfig = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pColorConfig->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pColorConfig = wrapper->pColorConfig->GetPointer(); - wrapper->pLoopFilter = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pLoopFilter->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pLoopFilter = wrapper->pLoopFilter->GetPointer(); - wrapper->pSegmentation = DecodeAllocator::Allocate>(); + bytes_read += wrapper->reserved1.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->delta_frame_id_minus_1.SetExternalMemory(value->delta_frame_id_minus_1, STD_VIDEO_AV1_REFS_PER_FRAME); + bytes_read += wrapper->delta_frame_id_minus_1.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->pTileInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pTileInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTileInfo = wrapper->pTileInfo->GetPointer(); + wrapper->pQuantization = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pQuantization->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pQuantization = wrapper->pQuantization->GetPointer(); + wrapper->pSegmentation = DecodeAllocator::Allocate>(); bytes_read += wrapper->pSegmentation->Decode((buffer + bytes_read), (buffer_size - bytes_read)); value->pSegmentation = wrapper->pSegmentation->GetPointer(); + wrapper->pLoopFilter = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pLoopFilter->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pLoopFilter = wrapper->pLoopFilter->GetPointer(); + wrapper->pCDEF = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pCDEF->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCDEF = wrapper->pCDEF->GetPointer(); + wrapper->pLoopRestoration = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pLoopRestoration->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pLoopRestoration = wrapper->pLoopRestoration->GetPointer(); + wrapper->pGlobalMotion = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pGlobalMotion->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pGlobalMotion = wrapper->pGlobalMotion->GetPointer(); + wrapper->pExtensionHeader = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pExtensionHeader->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pExtensionHeader = wrapper->pExtensionHeader->GetPointer(); + bytes_read += wrapper->pBufferRemovalTimes.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pBufferRemovalTimes = wrapper->pBufferRemovalTimes.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1ColorConfigFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1ReferenceInfoFlags* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1ColorConfigFlags* value = wrapper->decoded_value; + StdVideoEncodeAV1ReferenceInfoFlags* value = wrapper->decoded_value; - uint32_t temp_mono_chrome; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_mono_chrome); - value->mono_chrome = temp_mono_chrome; - uint32_t temp_color_range; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_color_range); - value->color_range = temp_color_range; - uint32_t temp_separate_uv_delta_q; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_separate_uv_delta_q); - value->separate_uv_delta_q = temp_separate_uv_delta_q; - uint32_t temp_color_description_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_color_description_present_flag); - value->color_description_present_flag = temp_color_description_present_flag; + uint32_t temp_disable_frame_end_update_cdf; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_disable_frame_end_update_cdf); + value->disable_frame_end_update_cdf = temp_disable_frame_end_update_cdf; + uint32_t temp_segmentation_enabled; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_enabled); + value->segmentation_enabled = temp_segmentation_enabled; uint32_t temp_reserved; bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); value->reserved = temp_reserved; @@ -2024,5323 +1789,5235 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoA return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1ColorConfig* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1ReferenceInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1ColorConfig* value = wrapper->decoded_value; + StdVideoEncodeAV1ReferenceInfo* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); + wrapper->flags = DecodeAllocator::Allocate(); wrapper->flags->decoded_value = &(value->flags); bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->BitDepth)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subsampling_x)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subsampling_y)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved1)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->color_primaries)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->transfer_characteristics)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->matrix_coefficients)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->chroma_sample_position)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->RefFrameId)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_type)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->OrderHint)); + wrapper->reserved1.SetExternalMemory(value->reserved1, 3); + bytes_read += wrapper->reserved1.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->pExtensionHeader = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pExtensionHeader->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pExtensionHeader = wrapper->pExtensionHeader->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1TimingInfoFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExtent2D* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1TimingInfoFlags* value = wrapper->decoded_value; + VkExtent2D* value = wrapper->decoded_value; - uint32_t temp_equal_picture_interval; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_equal_picture_interval); - value->equal_picture_interval = temp_equal_picture_interval; - uint32_t temp_reserved; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); - value->reserved = temp_reserved; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->width)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->height)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1TimingInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExtent3D* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1TimingInfo* value = wrapper->decoded_value; + VkExtent3D* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_units_in_display_tick)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->time_scale)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_ticks_per_picture_minus_1)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->width)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->height)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depth)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1SequenceHeaderFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOffset2D* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1SequenceHeaderFlags* value = wrapper->decoded_value; + VkOffset2D* value = wrapper->decoded_value; - uint32_t temp_still_picture; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_still_picture); - value->still_picture = temp_still_picture; - uint32_t temp_reduced_still_picture_header; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reduced_still_picture_header); - value->reduced_still_picture_header = temp_reduced_still_picture_header; - uint32_t temp_use_128x128_superblock; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_use_128x128_superblock); - value->use_128x128_superblock = temp_use_128x128_superblock; - uint32_t temp_enable_filter_intra; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_filter_intra); - value->enable_filter_intra = temp_enable_filter_intra; - uint32_t temp_enable_intra_edge_filter; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_intra_edge_filter); - value->enable_intra_edge_filter = temp_enable_intra_edge_filter; - uint32_t temp_enable_interintra_compound; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_interintra_compound); - value->enable_interintra_compound = temp_enable_interintra_compound; - uint32_t temp_enable_masked_compound; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_masked_compound); - value->enable_masked_compound = temp_enable_masked_compound; - uint32_t temp_enable_warped_motion; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_warped_motion); - value->enable_warped_motion = temp_enable_warped_motion; - uint32_t temp_enable_dual_filter; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_dual_filter); - value->enable_dual_filter = temp_enable_dual_filter; - uint32_t temp_enable_order_hint; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_order_hint); - value->enable_order_hint = temp_enable_order_hint; - uint32_t temp_enable_jnt_comp; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_jnt_comp); - value->enable_jnt_comp = temp_enable_jnt_comp; - uint32_t temp_enable_ref_frame_mvs; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_ref_frame_mvs); - value->enable_ref_frame_mvs = temp_enable_ref_frame_mvs; - uint32_t temp_frame_id_numbers_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_frame_id_numbers_present_flag); - value->frame_id_numbers_present_flag = temp_frame_id_numbers_present_flag; - uint32_t temp_enable_superres; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_superres); - value->enable_superres = temp_enable_superres; - uint32_t temp_enable_cdef; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_cdef); - value->enable_cdef = temp_enable_cdef; - uint32_t temp_enable_restoration; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_enable_restoration); - value->enable_restoration = temp_enable_restoration; - uint32_t temp_film_grain_params_present; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_film_grain_params_present); - value->film_grain_params_present = temp_film_grain_params_present; - uint32_t temp_timing_info_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_timing_info_present_flag); - value->timing_info_present_flag = temp_timing_info_present_flag; - uint32_t temp_initial_display_delay_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_initial_display_delay_present_flag); - value->initial_display_delay_present_flag = temp_initial_display_delay_present_flag; - uint32_t temp_reserved; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); - value->reserved = temp_reserved; + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->x)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->y)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1SequenceHeader* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOffset3D* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1SequenceHeader* value = wrapper->decoded_value; + VkOffset3D* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->seq_profile)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_width_bits_minus_1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_height_bits_minus_1)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->max_frame_width_minus_1)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->max_frame_height_minus_1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_frame_id_length_minus_2)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->additional_frame_id_length_minus_1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->order_hint_bits_minus_1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->seq_force_integer_mv)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->seq_force_screen_content_tools)); - wrapper->reserved1.SetExternalMemory(value->reserved1, 5); - bytes_read += wrapper->reserved1.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->pColorConfig = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pColorConfig->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pColorConfig = wrapper->pColorConfig->GetPointer(); - wrapper->pTimingInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pTimingInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pTimingInfo = wrapper->pTimingInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->x)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->y)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->z)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1LoopFilterFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRect2D* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1LoopFilterFlags* value = wrapper->decoded_value; + VkRect2D* value = wrapper->decoded_value; - uint32_t temp_loop_filter_delta_enabled; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_loop_filter_delta_enabled); - value->loop_filter_delta_enabled = temp_loop_filter_delta_enabled; - uint32_t temp_loop_filter_delta_update; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_loop_filter_delta_update); - value->loop_filter_delta_update = temp_loop_filter_delta_update; - uint32_t temp_reserved; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); - value->reserved = temp_reserved; + wrapper->offset = DecodeAllocator::Allocate(); + wrapper->offset->decoded_value = &(value->offset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->offset); + wrapper->extent = DecodeAllocator::Allocate(); + wrapper->extent->decoded_value = &(value->extent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1LoopFilter* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferMemoryBarrier* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1LoopFilter* value = wrapper->decoded_value; + VkBufferMemoryBarrier* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - wrapper->loop_filter_level.SetExternalMemory(value->loop_filter_level, STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS); - bytes_read += wrapper->loop_filter_level.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->loop_filter_sharpness)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->update_ref_delta)); - wrapper->loop_filter_ref_deltas.SetExternalMemory(value->loop_filter_ref_deltas, STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME); - bytes_read += wrapper->loop_filter_ref_deltas.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->update_mode_delta)); - wrapper->loop_filter_mode_deltas.SetExternalMemory(value->loop_filter_mode_deltas, STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS); - bytes_read += wrapper->loop_filter_mode_deltas.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcQueueFamilyIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstQueueFamilyIndex)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1QuantizationFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageSubresourceRange* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1QuantizationFlags* value = wrapper->decoded_value; + VkImageSubresourceRange* value = wrapper->decoded_value; - uint32_t temp_using_qmatrix; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_using_qmatrix); - value->using_qmatrix = temp_using_qmatrix; - uint32_t temp_diff_uv_delta; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_diff_uv_delta); - value->diff_uv_delta = temp_diff_uv_delta; - uint32_t temp_reserved; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); - value->reserved = temp_reserved; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseMipLevel)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->levelCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseArrayLayer)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layerCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1Quantization* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageMemoryBarrier* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1Quantization* value = wrapper->decoded_value; + VkImageMemoryBarrier* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->base_q_idx)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->DeltaQYDc)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->DeltaQUDc)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->DeltaQUAc)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->DeltaQVDc)); - bytes_read += ValueDecoder::DecodeInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->DeltaQVAc)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qm_y)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qm_u)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qm_v)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->oldLayout)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->newLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcQueueFamilyIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstQueueFamilyIndex)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); + value->image = VK_NULL_HANDLE; + wrapper->subresourceRange = DecodeAllocator::Allocate(); + wrapper->subresourceRange->decoded_value = &(value->subresourceRange); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->subresourceRange); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1Segmentation* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryBarrier* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1Segmentation* value = wrapper->decoded_value; + VkMemoryBarrier* value = wrapper->decoded_value; - wrapper->FeatureEnabled.SetExternalMemory(value->FeatureEnabled, STD_VIDEO_AV1_MAX_SEGMENTS); - bytes_read += wrapper->FeatureEnabled.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->FeatureData.SetExternalMemory(value->FeatureData, STD_VIDEO_AV1_MAX_SEGMENTS, STD_VIDEO_AV1_SEG_LVL_MAX); - bytes_read += wrapper->FeatureData.DecodeInt16((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1TileInfoFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAllocationCallbacks* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1TileInfoFlags* value = wrapper->decoded_value; + VkAllocationCallbacks* value = wrapper->decoded_value; - uint32_t temp_uniform_tile_spacing_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_uniform_tile_spacing_flag); - value->uniform_tile_spacing_flag = temp_uniform_tile_spacing_flag; - uint32_t temp_reserved; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); - value->reserved = temp_reserved; + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pUserData)); + value->pUserData = nullptr; + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnAllocation)); + value->pfnAllocation = nullptr; + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnReallocation)); + value->pfnReallocation = nullptr; + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnFree)); + value->pfnFree = nullptr; + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnInternalAllocation)); + value->pfnInternalAllocation = nullptr; + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnInternalFree)); + value->pfnInternalFree = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1TileInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkApplicationInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1TileInfo* value = wrapper->decoded_value; + VkApplicationInfo* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->TileCols)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->TileRows)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->context_update_tile_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tile_size_bytes_minus_1)); - wrapper->reserved1.SetExternalMemory(value->reserved1, 7); - bytes_read += wrapper->reserved1.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += wrapper->pMiColStarts.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); - value->pMiColStarts = wrapper->pMiColStarts.GetPointer(); - bytes_read += wrapper->pMiRowStarts.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); - value->pMiRowStarts = wrapper->pMiRowStarts.GetPointer(); - bytes_read += wrapper->pWidthInSbsMinus1.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); - value->pWidthInSbsMinus1 = wrapper->pWidthInSbsMinus1.GetPointer(); - bytes_read += wrapper->pHeightInSbsMinus1.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); - value->pHeightInSbsMinus1 = wrapper->pHeightInSbsMinus1.GetPointer(); - - return bytes_read; -} - -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1CDEF* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); - - size_t bytes_read = 0; - StdVideoAV1CDEF* value = wrapper->decoded_value; - - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cdef_damping_minus_3)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cdef_bits)); - wrapper->cdef_y_pri_strength.SetExternalMemory(value->cdef_y_pri_strength, STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS); - bytes_read += wrapper->cdef_y_pri_strength.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->cdef_y_sec_strength.SetExternalMemory(value->cdef_y_sec_strength, STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS); - bytes_read += wrapper->cdef_y_sec_strength.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->cdef_uv_pri_strength.SetExternalMemory(value->cdef_uv_pri_strength, STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS); - bytes_read += wrapper->cdef_uv_pri_strength.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->cdef_uv_sec_strength.SetExternalMemory(value->cdef_uv_sec_strength, STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS); - bytes_read += wrapper->cdef_uv_sec_strength.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += wrapper->pApplicationName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pApplicationName = wrapper->pApplicationName.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->applicationVersion)); + bytes_read += wrapper->pEngineName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pEngineName = wrapper->pEngineName.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->engineVersion)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->apiVersion)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1LoopRestoration* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFormatProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1LoopRestoration* value = wrapper->decoded_value; + VkFormatProperties* value = wrapper->decoded_value; - wrapper->FrameRestorationType.SetExternalMemory(value->FrameRestorationType, STD_VIDEO_AV1_MAX_NUM_PLANES); - bytes_read += wrapper->FrameRestorationType.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->LoopRestorationSize.SetExternalMemory(value->LoopRestorationSize, STD_VIDEO_AV1_MAX_NUM_PLANES); - bytes_read += wrapper->LoopRestorationSize.DecodeUInt16((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->linearTilingFeatures)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->optimalTilingFeatures)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferFeatures)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1GlobalMotion* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageFormatProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1GlobalMotion* value = wrapper->decoded_value; + VkImageFormatProperties* value = wrapper->decoded_value; - wrapper->GmType.SetExternalMemory(value->GmType, STD_VIDEO_AV1_NUM_REF_FRAMES); - bytes_read += wrapper->GmType.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->gm_params.SetExternalMemory(value->gm_params, STD_VIDEO_AV1_NUM_REF_FRAMES, STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS); - bytes_read += wrapper->gm_params.DecodeInt32((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->maxExtent = DecodeAllocator::Allocate(); + wrapper->maxExtent->decoded_value = &(value->maxExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxExtent); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMipLevels)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxArrayLayers)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleCounts)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxResourceSize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1FilmGrainFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkInstanceCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1FilmGrainFlags* value = wrapper->decoded_value; + VkInstanceCreateInfo* value = wrapper->decoded_value; - uint32_t temp_chroma_scaling_from_luma; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_chroma_scaling_from_luma); - value->chroma_scaling_from_luma = temp_chroma_scaling_from_luma; - uint32_t temp_overlap_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_overlap_flag); - value->overlap_flag = temp_overlap_flag; - uint32_t temp_clip_to_restricted_range; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_clip_to_restricted_range); - value->clip_to_restricted_range = temp_clip_to_restricted_range; - uint32_t temp_update_grain; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_update_grain); - value->update_grain = temp_update_grain; - uint32_t temp_reserved; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); - value->reserved = temp_reserved; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + wrapper->pApplicationInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pApplicationInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pApplicationInfo = wrapper->pApplicationInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->enabledLayerCount)); + bytes_read += wrapper->ppEnabledLayerNames.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->ppEnabledLayerNames = wrapper->ppEnabledLayerNames.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->enabledExtensionCount)); + bytes_read += wrapper->ppEnabledExtensionNames.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->ppEnabledExtensionNames = wrapper->ppEnabledExtensionNames.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoAV1FilmGrain* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryHeap* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoAV1FilmGrain* value = wrapper->decoded_value; + VkMemoryHeap* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->grain_scaling_minus_8)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->ar_coeff_lag)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->ar_coeff_shift_minus_6)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->grain_scale_shift)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->grain_seed)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->film_grain_params_ref_idx)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_y_points)); - wrapper->point_y_value.SetExternalMemory(value->point_y_value, STD_VIDEO_AV1_MAX_NUM_Y_POINTS); - bytes_read += wrapper->point_y_value.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->point_y_scaling.SetExternalMemory(value->point_y_scaling, STD_VIDEO_AV1_MAX_NUM_Y_POINTS); - bytes_read += wrapper->point_y_scaling.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_cb_points)); - wrapper->point_cb_value.SetExternalMemory(value->point_cb_value, STD_VIDEO_AV1_MAX_NUM_CB_POINTS); - bytes_read += wrapper->point_cb_value.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->point_cb_scaling.SetExternalMemory(value->point_cb_scaling, STD_VIDEO_AV1_MAX_NUM_CB_POINTS); - bytes_read += wrapper->point_cb_scaling.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_cr_points)); - wrapper->point_cr_value.SetExternalMemory(value->point_cr_value, STD_VIDEO_AV1_MAX_NUM_CR_POINTS); - bytes_read += wrapper->point_cr_value.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->point_cr_scaling.SetExternalMemory(value->point_cr_scaling, STD_VIDEO_AV1_MAX_NUM_CR_POINTS); - bytes_read += wrapper->point_cr_scaling.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->ar_coeffs_y_plus_128.SetExternalMemory(value->ar_coeffs_y_plus_128, STD_VIDEO_AV1_MAX_NUM_POS_LUMA); - bytes_read += wrapper->ar_coeffs_y_plus_128.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->ar_coeffs_cb_plus_128.SetExternalMemory(value->ar_coeffs_cb_plus_128, STD_VIDEO_AV1_MAX_NUM_POS_CHROMA); - bytes_read += wrapper->ar_coeffs_cb_plus_128.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->ar_coeffs_cr_plus_128.SetExternalMemory(value->ar_coeffs_cr_plus_128, STD_VIDEO_AV1_MAX_NUM_POS_CHROMA); - bytes_read += wrapper->ar_coeffs_cr_plus_128.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cb_mult)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cb_luma_mult)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cb_offset)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cr_mult)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cr_luma_mult)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cr_offset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeAV1PictureInfoFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryType* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoDecodeAV1PictureInfoFlags* value = wrapper->decoded_value; + VkMemoryType* value = wrapper->decoded_value; - uint32_t temp_error_resilient_mode; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_error_resilient_mode); - value->error_resilient_mode = temp_error_resilient_mode; - uint32_t temp_disable_cdf_update; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_disable_cdf_update); - value->disable_cdf_update = temp_disable_cdf_update; - uint32_t temp_use_superres; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_use_superres); - value->use_superres = temp_use_superres; - uint32_t temp_render_and_frame_size_different; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_render_and_frame_size_different); - value->render_and_frame_size_different = temp_render_and_frame_size_different; - uint32_t temp_allow_screen_content_tools; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_screen_content_tools); - value->allow_screen_content_tools = temp_allow_screen_content_tools; - uint32_t temp_is_filter_switchable; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_is_filter_switchable); - value->is_filter_switchable = temp_is_filter_switchable; - uint32_t temp_force_integer_mv; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_force_integer_mv); - value->force_integer_mv = temp_force_integer_mv; - uint32_t temp_frame_size_override_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_frame_size_override_flag); - value->frame_size_override_flag = temp_frame_size_override_flag; - uint32_t temp_buffer_removal_time_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_buffer_removal_time_present_flag); - value->buffer_removal_time_present_flag = temp_buffer_removal_time_present_flag; - uint32_t temp_allow_intrabc; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_intrabc); - value->allow_intrabc = temp_allow_intrabc; - uint32_t temp_frame_refs_short_signaling; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_frame_refs_short_signaling); - value->frame_refs_short_signaling = temp_frame_refs_short_signaling; - uint32_t temp_allow_high_precision_mv; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_high_precision_mv); - value->allow_high_precision_mv = temp_allow_high_precision_mv; - uint32_t temp_is_motion_mode_switchable; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_is_motion_mode_switchable); - value->is_motion_mode_switchable = temp_is_motion_mode_switchable; - uint32_t temp_use_ref_frame_mvs; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_use_ref_frame_mvs); - value->use_ref_frame_mvs = temp_use_ref_frame_mvs; - uint32_t temp_disable_frame_end_update_cdf; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_disable_frame_end_update_cdf); - value->disable_frame_end_update_cdf = temp_disable_frame_end_update_cdf; - uint32_t temp_allow_warped_motion; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_warped_motion); - value->allow_warped_motion = temp_allow_warped_motion; - uint32_t temp_reduced_tx_set; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reduced_tx_set); - value->reduced_tx_set = temp_reduced_tx_set; - uint32_t temp_reference_select; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reference_select); - value->reference_select = temp_reference_select; - uint32_t temp_skip_mode_present; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_skip_mode_present); - value->skip_mode_present = temp_skip_mode_present; - uint32_t temp_delta_q_present; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_delta_q_present); - value->delta_q_present = temp_delta_q_present; - uint32_t temp_delta_lf_present; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_delta_lf_present); - value->delta_lf_present = temp_delta_lf_present; - uint32_t temp_delta_lf_multi; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_delta_lf_multi); - value->delta_lf_multi = temp_delta_lf_multi; - uint32_t temp_segmentation_enabled; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_enabled); - value->segmentation_enabled = temp_segmentation_enabled; - uint32_t temp_segmentation_update_map; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_update_map); - value->segmentation_update_map = temp_segmentation_update_map; - uint32_t temp_segmentation_temporal_update; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_temporal_update); - value->segmentation_temporal_update = temp_segmentation_temporal_update; - uint32_t temp_segmentation_update_data; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_update_data); - value->segmentation_update_data = temp_segmentation_update_data; - uint32_t temp_UsesLr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_UsesLr); - value->UsesLr = temp_UsesLr; - uint32_t temp_usesChromaLr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_usesChromaLr); - value->usesChromaLr = temp_usesChromaLr; - uint32_t temp_apply_grain; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_apply_grain); - value->apply_grain = temp_apply_grain; - uint32_t temp_reserved; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); - value->reserved = temp_reserved; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->propertyFlags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->heapIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeAV1PictureInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoDecodeAV1PictureInfo* value = wrapper->decoded_value; + VkPhysicalDeviceFeatures* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_type)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->current_frame_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->OrderHint)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primary_ref_frame)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->refresh_frame_flags)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved1)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->interpolation_filter)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->TxMode)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_q_res)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_lf_res)); - wrapper->SkipModeFrame.SetExternalMemory(value->SkipModeFrame, STD_VIDEO_AV1_SKIP_MODE_FRAMES); - bytes_read += wrapper->SkipModeFrame.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->coded_denom)); - wrapper->reserved2.SetExternalMemory(value->reserved2, 3); - bytes_read += wrapper->reserved2.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->OrderHints.SetExternalMemory(value->OrderHints, STD_VIDEO_AV1_NUM_REF_FRAMES); - bytes_read += wrapper->OrderHints.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->expectedFrameId.SetExternalMemory(value->expectedFrameId, STD_VIDEO_AV1_NUM_REF_FRAMES); - bytes_read += wrapper->expectedFrameId.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->pTileInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pTileInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pTileInfo = wrapper->pTileInfo->GetPointer(); - wrapper->pQuantization = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pQuantization->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pQuantization = wrapper->pQuantization->GetPointer(); - wrapper->pSegmentation = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSegmentation->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSegmentation = wrapper->pSegmentation->GetPointer(); - wrapper->pLoopFilter = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pLoopFilter->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pLoopFilter = wrapper->pLoopFilter->GetPointer(); - wrapper->pCDEF = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pCDEF->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCDEF = wrapper->pCDEF->GetPointer(); - wrapper->pLoopRestoration = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pLoopRestoration->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pLoopRestoration = wrapper->pLoopRestoration->GetPointer(); - wrapper->pGlobalMotion = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pGlobalMotion->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pGlobalMotion = wrapper->pGlobalMotion->GetPointer(); - wrapper->pFilmGrain = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pFilmGrain->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pFilmGrain = wrapper->pFilmGrain->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustBufferAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fullDrawIndexUint32)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCubeArray)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->independentBlend)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->geometryShader)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tessellationShader)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleRateShading)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dualSrcBlend)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->logicOp)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiDrawIndirect)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drawIndirectFirstInstance)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthClamp)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasClamp)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fillModeNonSolid)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBounds)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->wideLines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->largePoints)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->alphaToOne)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiViewport)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerAnisotropy)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureCompressionETC2)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureCompressionASTC_LDR)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureCompressionBC)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->occlusionQueryPrecise)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineStatisticsQuery)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexPipelineStoresAndAtomics)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentStoresAndAtomics)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTessellationAndGeometryPointSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderImageGatherExtended)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageExtendedFormats)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageMultisample)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageReadWithoutFormat)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageWriteWithoutFormat)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformBufferArrayDynamicIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSampledImageArrayDynamicIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageBufferArrayDynamicIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageArrayDynamicIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderClipDistance)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderCullDistance)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderFloat64)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInt64)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInt16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderResourceResidency)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderResourceMinLod)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseBinding)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidencyBuffer)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidencyImage2D)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidencyImage3D)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidency2Samples)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidency4Samples)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidency8Samples)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidency16Samples)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidencyAliased)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->variableMultisampleRate)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inheritedQueries)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLimits* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDeviceLimits* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageDimension1D)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageDimension2D)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageDimension3D)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageDimensionCube)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageArrayLayers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTexelBufferElements)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxUniformBufferRange)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStorageBufferRange)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPushConstantsSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMemoryAllocationCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSamplerAllocationCount)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferImageGranularity)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseAddressSpaceSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBoundDescriptorSets)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorSamplers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUniformBuffers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorStorageBuffers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorSampledImages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorStorageImages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorInputAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageResources)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetSamplers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUniformBuffers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUniformBuffersDynamic)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetStorageBuffers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetStorageBuffersDynamic)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetSampledImages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetStorageImages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetInputAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexInputAttributes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexInputBindings)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexInputAttributeOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexInputBindingStride)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexOutputComponents)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationGenerationLevel)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationPatchSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationControlPerVertexInputComponents)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationControlPerVertexOutputComponents)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationControlPerPatchOutputComponents)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationControlTotalOutputComponents)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationEvaluationInputComponents)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationEvaluationOutputComponents)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxGeometryShaderInvocations)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxGeometryInputComponents)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxGeometryOutputComponents)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxGeometryOutputVertices)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxGeometryTotalOutputComponents)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentInputComponents)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentOutputAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentDualSrcAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentCombinedOutputResources)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxComputeSharedMemorySize)); + wrapper->maxComputeWorkGroupCount.SetExternalMemory(value->maxComputeWorkGroupCount, 3); + bytes_read += wrapper->maxComputeWorkGroupCount.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxComputeWorkGroupInvocations)); + wrapper->maxComputeWorkGroupSize.SetExternalMemory(value->maxComputeWorkGroupSize, 3); + bytes_read += wrapper->maxComputeWorkGroupSize.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subPixelPrecisionBits)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subTexelPrecisionBits)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mipmapPrecisionBits)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDrawIndexedIndexValue)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDrawIndirectCount)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSamplerLodBias)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSamplerAnisotropy)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxViewports)); + wrapper->maxViewportDimensions.SetExternalMemory(value->maxViewportDimensions, 2); + bytes_read += wrapper->maxViewportDimensions.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->viewportBoundsRange.SetExternalMemory(value->viewportBoundsRange, 2); + bytes_read += wrapper->viewportBoundsRange.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportSubPixelBits)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minMemoryMapAlignment)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minTexelBufferOffsetAlignment)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minUniformBufferOffsetAlignment)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minStorageBufferOffsetAlignment)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minTexelOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTexelOffset)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minTexelGatherOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTexelGatherOffset)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minInterpolationOffset)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxInterpolationOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subPixelInterpolationOffsetBits)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFramebufferWidth)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFramebufferHeight)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFramebufferLayers)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->framebufferColorSampleCounts)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->framebufferDepthSampleCounts)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->framebufferStencilSampleCounts)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->framebufferNoAttachmentsSampleCounts)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxColorAttachments)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampledImageColorSampleCounts)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampledImageIntegerSampleCounts)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampledImageDepthSampleCounts)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampledImageStencilSampleCounts)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageImageSampleCounts)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSampleMaskWords)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timestampComputeAndGraphics)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->timestampPeriod)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxClipDistances)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxCullDistances)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxCombinedClipAndCullDistances)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->discreteQueuePriorities)); + wrapper->pointSizeRange.SetExternalMemory(value->pointSizeRange, 2); + bytes_read += wrapper->pointSizeRange.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->lineWidthRange.SetExternalMemory(value->lineWidthRange, 2); + bytes_read += wrapper->lineWidthRange.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pointSizeGranularity)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->lineWidthGranularity)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->strictLines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->standardSampleLocations)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->optimalBufferCopyOffsetAlignment)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->optimalBufferCopyRowPitchAlignment)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nonCoherentAtomSize)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMemoryProperties* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDeviceMemoryProperties* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeCount)); + wrapper->memoryTypes = DecodeAllocator::Allocate>(); + wrapper->memoryTypes->SetExternalMemory(value->memoryTypes, VK_MAX_MEMORY_TYPES); + bytes_read += wrapper->memoryTypes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryHeapCount)); + wrapper->memoryHeaps = DecodeAllocator::Allocate>(); + wrapper->memoryHeaps->SetExternalMemory(value->memoryHeaps, VK_MAX_MEMORY_HEAPS); + bytes_read += wrapper->memoryHeaps->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSparseProperties* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDeviceSparseProperties* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->residencyStandard2DBlockShape)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->residencyStandard2DMultisampleBlockShape)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->residencyStandard3DBlockShape)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->residencyAlignedMipSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->residencyNonResidentStrict)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceProperties* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDeviceProperties* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->apiVersion)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->driverVersion)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorID)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceID)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceType)); + wrapper->deviceName.SetExternalMemory(value->deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); + bytes_read += wrapper->deviceName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->pipelineCacheUUID.SetExternalMemory(value->pipelineCacheUUID, VK_UUID_SIZE); + bytes_read += wrapper->pipelineCacheUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->limits = DecodeAllocator::Allocate(); + wrapper->limits->decoded_value = &(value->limits); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->limits); + wrapper->sparseProperties = DecodeAllocator::Allocate(); + wrapper->sparseProperties->decoded_value = &(value->sparseProperties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->sparseProperties); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyProperties* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkQueueFamilyProperties* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFlags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timestampValidBits)); + wrapper->minImageTransferGranularity = DecodeAllocator::Allocate(); + wrapper->minImageTransferGranularity->decoded_value = &(value->minImageTransferGranularity); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minImageTransferGranularity); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceQueueCreateInfo* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkDeviceQueueCreateInfo* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueCount)); + bytes_read += wrapper->pQueuePriorities.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); + value->pQueuePriorities = wrapper->pQueuePriorities.GetPointer(); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceCreateInfo* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkDeviceCreateInfo* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueCreateInfoCount)); + wrapper->pQueueCreateInfos = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pQueueCreateInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pQueueCreateInfos = wrapper->pQueueCreateInfos->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->enabledLayerCount)); + bytes_read += wrapper->ppEnabledLayerNames.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->ppEnabledLayerNames = wrapper->ppEnabledLayerNames.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->enabledExtensionCount)); + bytes_read += wrapper->ppEnabledExtensionNames.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->ppEnabledExtensionNames = wrapper->ppEnabledExtensionNames.GetPointer(); + wrapper->pEnabledFeatures = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pEnabledFeatures->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pEnabledFeatures = wrapper->pEnabledFeatures->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeAV1ReferenceInfoFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExtensionProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoDecodeAV1ReferenceInfoFlags* value = wrapper->decoded_value; + VkExtensionProperties* value = wrapper->decoded_value; - uint32_t temp_disable_frame_end_update_cdf; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_disable_frame_end_update_cdf); - value->disable_frame_end_update_cdf = temp_disable_frame_end_update_cdf; - uint32_t temp_segmentation_enabled; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_enabled); - value->segmentation_enabled = temp_segmentation_enabled; - uint32_t temp_reserved; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); - value->reserved = temp_reserved; + wrapper->extensionName.SetExternalMemory(value->extensionName, VK_MAX_EXTENSION_NAME_SIZE); + bytes_read += wrapper->extensionName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->specVersion)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoDecodeAV1ReferenceInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLayerProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoDecodeAV1ReferenceInfo* value = wrapper->decoded_value; + VkLayerProperties* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_type)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->RefFrameSignBias)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->OrderHint)); - wrapper->SavedOrderHints.SetExternalMemory(value->SavedOrderHints, STD_VIDEO_AV1_NUM_REF_FRAMES); - bytes_read += wrapper->SavedOrderHints.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->layerName.SetExternalMemory(value->layerName, VK_MAX_EXTENSION_NAME_SIZE); + bytes_read += wrapper->layerName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->specVersion)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->implementationVersion)); + wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); + bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1ExtensionHeader* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubmitInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeAV1ExtensionHeader* value = wrapper->decoded_value; + VkSubmitInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->temporal_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->spatial_id)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->waitSemaphoreCount)); + bytes_read += wrapper->pWaitSemaphores.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pWaitSemaphores = nullptr; + bytes_read += wrapper->pWaitDstStageMask.DecodeFlags((buffer + bytes_read), (buffer_size - bytes_read)); + value->pWaitDstStageMask = wrapper->pWaitDstStageMask.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->commandBufferCount)); + bytes_read += wrapper->pCommandBuffers.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCommandBuffers = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->signalSemaphoreCount)); + bytes_read += wrapper->pSignalSemaphores.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSignalSemaphores = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1DecoderModelInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMappedMemoryRange* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeAV1DecoderModelInfo* value = wrapper->decoded_value; + VkMappedMemoryRange* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->buffer_delay_length_minus_1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->buffer_removal_time_length_minus_1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_presentation_time_length_minus_1)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reserved1)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->num_units_in_decoding_tick)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1OperatingPointInfoFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryAllocateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeAV1OperatingPointInfoFlags* value = wrapper->decoded_value; + VkMemoryAllocateInfo* value = wrapper->decoded_value; - uint32_t temp_decoder_model_present_for_this_op; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_decoder_model_present_for_this_op); - value->decoder_model_present_for_this_op = temp_decoder_model_present_for_this_op; - uint32_t temp_low_delay_mode_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_low_delay_mode_flag); - value->low_delay_mode_flag = temp_low_delay_mode_flag; - uint32_t temp_initial_display_delay_present_for_this_op; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_initial_display_delay_present_for_this_op); - value->initial_display_delay_present_for_this_op = temp_initial_display_delay_present_for_this_op; - uint32_t temp_reserved; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); - value->reserved = temp_reserved; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->allocationSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1OperatingPointInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryRequirements* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeAV1OperatingPointInfo* value = wrapper->decoded_value; + VkMemoryRequirements* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->operating_point_idc)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->seq_level_idx)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->seq_tier)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->decoder_buffer_delay)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->encoder_buffer_delay)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->initial_display_delay_minus_1)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->alignment)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeBits)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1PictureInfoFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseMemoryBind* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeAV1PictureInfoFlags* value = wrapper->decoded_value; + VkSparseMemoryBind* value = wrapper->decoded_value; - uint32_t temp_error_resilient_mode; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_error_resilient_mode); - value->error_resilient_mode = temp_error_resilient_mode; - uint32_t temp_disable_cdf_update; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_disable_cdf_update); - value->disable_cdf_update = temp_disable_cdf_update; - uint32_t temp_use_superres; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_use_superres); - value->use_superres = temp_use_superres; - uint32_t temp_render_and_frame_size_different; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_render_and_frame_size_different); - value->render_and_frame_size_different = temp_render_and_frame_size_different; - uint32_t temp_allow_screen_content_tools; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_screen_content_tools); - value->allow_screen_content_tools = temp_allow_screen_content_tools; - uint32_t temp_is_filter_switchable; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_is_filter_switchable); - value->is_filter_switchable = temp_is_filter_switchable; - uint32_t temp_force_integer_mv; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_force_integer_mv); - value->force_integer_mv = temp_force_integer_mv; - uint32_t temp_frame_size_override_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_frame_size_override_flag); - value->frame_size_override_flag = temp_frame_size_override_flag; - uint32_t temp_buffer_removal_time_present_flag; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_buffer_removal_time_present_flag); - value->buffer_removal_time_present_flag = temp_buffer_removal_time_present_flag; - uint32_t temp_allow_intrabc; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_intrabc); - value->allow_intrabc = temp_allow_intrabc; - uint32_t temp_frame_refs_short_signaling; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_frame_refs_short_signaling); - value->frame_refs_short_signaling = temp_frame_refs_short_signaling; - uint32_t temp_allow_high_precision_mv; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_high_precision_mv); - value->allow_high_precision_mv = temp_allow_high_precision_mv; - uint32_t temp_is_motion_mode_switchable; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_is_motion_mode_switchable); - value->is_motion_mode_switchable = temp_is_motion_mode_switchable; - uint32_t temp_use_ref_frame_mvs; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_use_ref_frame_mvs); - value->use_ref_frame_mvs = temp_use_ref_frame_mvs; - uint32_t temp_disable_frame_end_update_cdf; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_disable_frame_end_update_cdf); - value->disable_frame_end_update_cdf = temp_disable_frame_end_update_cdf; - uint32_t temp_allow_warped_motion; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_allow_warped_motion); - value->allow_warped_motion = temp_allow_warped_motion; - uint32_t temp_reduced_tx_set; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reduced_tx_set); - value->reduced_tx_set = temp_reduced_tx_set; - uint32_t temp_skip_mode_present; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_skip_mode_present); - value->skip_mode_present = temp_skip_mode_present; - uint32_t temp_delta_q_present; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_delta_q_present); - value->delta_q_present = temp_delta_q_present; - uint32_t temp_delta_lf_present; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_delta_lf_present); - value->delta_lf_present = temp_delta_lf_present; - uint32_t temp_delta_lf_multi; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_delta_lf_multi); - value->delta_lf_multi = temp_delta_lf_multi; - uint32_t temp_segmentation_enabled; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_enabled); - value->segmentation_enabled = temp_segmentation_enabled; - uint32_t temp_segmentation_update_map; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_update_map); - value->segmentation_update_map = temp_segmentation_update_map; - uint32_t temp_segmentation_temporal_update; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_temporal_update); - value->segmentation_temporal_update = temp_segmentation_temporal_update; - uint32_t temp_segmentation_update_data; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_update_data); - value->segmentation_update_data = temp_segmentation_update_data; - uint32_t temp_UsesLr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_UsesLr); - value->UsesLr = temp_UsesLr; - uint32_t temp_usesChromaLr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_usesChromaLr); - value->usesChromaLr = temp_usesChromaLr; - uint32_t temp_show_frame; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_show_frame); - value->show_frame = temp_show_frame; - uint32_t temp_showable_frame; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_showable_frame); - value->showable_frame = temp_showable_frame; - uint32_t temp_reserved; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); - value->reserved = temp_reserved; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->resourceOffset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryOffset)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseBufferMemoryBindInfo* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkSparseBufferMemoryBindInfo* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindCount)); + wrapper->pBinds = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pBinds->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pBinds = wrapper->pBinds->GetPointer(); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseImageOpaqueMemoryBindInfo* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkSparseImageOpaqueMemoryBindInfo* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); + value->image = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindCount)); + wrapper->pBinds = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pBinds->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pBinds = wrapper->pBinds->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1PictureInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageSubresource* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeAV1PictureInfo* value = wrapper->decoded_value; + VkImageSubresource* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_type)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_presentation_time)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->current_frame_id)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->order_hint)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primary_ref_frame)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->refresh_frame_flags)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->coded_denom)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->render_width_minus_1)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->render_height_minus_1)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->interpolation_filter)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->TxMode)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_q_res)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->delta_lf_res)); - wrapper->ref_order_hint.SetExternalMemory(value->ref_order_hint, STD_VIDEO_AV1_NUM_REF_FRAMES); - bytes_read += wrapper->ref_order_hint.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->ref_frame_idx.SetExternalMemory(value->ref_frame_idx, STD_VIDEO_AV1_REFS_PER_FRAME); - bytes_read += wrapper->ref_frame_idx.DecodeInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->reserved1.SetExternalMemory(value->reserved1, 3); - bytes_read += wrapper->reserved1.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->delta_frame_id_minus_1.SetExternalMemory(value->delta_frame_id_minus_1, STD_VIDEO_AV1_REFS_PER_FRAME); - bytes_read += wrapper->delta_frame_id_minus_1.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->pTileInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pTileInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pTileInfo = wrapper->pTileInfo->GetPointer(); - wrapper->pQuantization = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pQuantization->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pQuantization = wrapper->pQuantization->GetPointer(); - wrapper->pSegmentation = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSegmentation->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSegmentation = wrapper->pSegmentation->GetPointer(); - wrapper->pLoopFilter = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pLoopFilter->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pLoopFilter = wrapper->pLoopFilter->GetPointer(); - wrapper->pCDEF = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pCDEF->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCDEF = wrapper->pCDEF->GetPointer(); - wrapper->pLoopRestoration = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pLoopRestoration->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pLoopRestoration = wrapper->pLoopRestoration->GetPointer(); - wrapper->pGlobalMotion = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pGlobalMotion->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pGlobalMotion = wrapper->pGlobalMotion->GetPointer(); - wrapper->pExtensionHeader = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pExtensionHeader->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pExtensionHeader = wrapper->pExtensionHeader->GetPointer(); - bytes_read += wrapper->pBufferRemovalTimes.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pBufferRemovalTimes = wrapper->pBufferRemovalTimes.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mipLevel)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->arrayLayer)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1ReferenceInfoFlags* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseImageMemoryBind* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeAV1ReferenceInfoFlags* value = wrapper->decoded_value; + VkSparseImageMemoryBind* value = wrapper->decoded_value; - uint32_t temp_disable_frame_end_update_cdf; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_disable_frame_end_update_cdf); - value->disable_frame_end_update_cdf = temp_disable_frame_end_update_cdf; - uint32_t temp_segmentation_enabled; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_segmentation_enabled); - value->segmentation_enabled = temp_segmentation_enabled; - uint32_t temp_reserved; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_reserved); - value->reserved = temp_reserved; + wrapper->subresource = DecodeAllocator::Allocate(); + wrapper->subresource->decoded_value = &(value->subresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->subresource); + wrapper->offset = DecodeAllocator::Allocate(); + wrapper->offset->decoded_value = &(value->offset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->offset); + wrapper->extent = DecodeAllocator::Allocate(); + wrapper->extent->decoded_value = &(value->extent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryOffset)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_StdVideoEncodeAV1ReferenceInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseImageMemoryBindInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - StdVideoEncodeAV1ReferenceInfo* value = wrapper->decoded_value; + VkSparseImageMemoryBindInfo* value = wrapper->decoded_value; - wrapper->flags = DecodeAllocator::Allocate(); - wrapper->flags->decoded_value = &(value->flags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->flags); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->RefFrameId)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->frame_type)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->OrderHint)); - wrapper->reserved1.SetExternalMemory(value->reserved1, 3); - bytes_read += wrapper->reserved1.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->pExtensionHeader = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pExtensionHeader->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pExtensionHeader = wrapper->pExtensionHeader->GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); + value->image = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindCount)); + wrapper->pBinds = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pBinds->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pBinds = wrapper->pBinds->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExtent2D* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindSparseInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExtent2D* value = wrapper->decoded_value; + VkBindSparseInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->width)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->height)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->waitSemaphoreCount)); + bytes_read += wrapper->pWaitSemaphores.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pWaitSemaphores = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferBindCount)); + wrapper->pBufferBinds = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pBufferBinds->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pBufferBinds = wrapper->pBufferBinds->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageOpaqueBindCount)); + wrapper->pImageOpaqueBinds = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pImageOpaqueBinds->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pImageOpaqueBinds = wrapper->pImageOpaqueBinds->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageBindCount)); + wrapper->pImageBinds = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pImageBinds->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pImageBinds = wrapper->pImageBinds->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->signalSemaphoreCount)); + bytes_read += wrapper->pSignalSemaphores.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSignalSemaphores = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExtent3D* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseImageFormatProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExtent3D* value = wrapper->decoded_value; + VkSparseImageFormatProperties* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->width)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->height)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depth)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectMask)); + wrapper->imageGranularity = DecodeAllocator::Allocate(); + wrapper->imageGranularity->decoded_value = &(value->imageGranularity); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageGranularity); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOffset2D* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseImageMemoryRequirements* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkOffset2D* value = wrapper->decoded_value; + VkSparseImageMemoryRequirements* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->x)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->y)); + wrapper->formatProperties = DecodeAllocator::Allocate(); + wrapper->formatProperties->decoded_value = &(value->formatProperties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->formatProperties); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageMipTailFirstLod)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageMipTailSize)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageMipTailOffset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageMipTailStride)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOffset3D* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFenceCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkOffset3D* value = wrapper->decoded_value; + VkFenceCreateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->x)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->y)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->z)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreCreateInfo* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkSemaphoreCreateInfo* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueryPoolCreateInfo* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkQueryPoolCreateInfo* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->queryType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queryCount)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineStatistics)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferCreateInfo* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkBufferCreateInfo* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sharingMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndexCount)); + bytes_read += wrapper->pQueueFamilyIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pQueueFamilyIndices = wrapper->pQueueFamilyIndices.GetPointer(); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageCreateInfo* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkImageCreateInfo* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + wrapper->extent = DecodeAllocator::Allocate(); + wrapper->extent->decoded_value = &(value->extent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mipLevels)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->arrayLayers)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->samples)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tiling)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sharingMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndexCount)); + bytes_read += wrapper->pQueueFamilyIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pQueueFamilyIndices = wrapper->pQueueFamilyIndices.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->initialLayout)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRect2D* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubresourceLayout* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRect2D* value = wrapper->decoded_value; + VkSubresourceLayout* value = wrapper->decoded_value; - wrapper->offset = DecodeAllocator::Allocate(); - wrapper->offset->decoded_value = &(value->offset); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->offset); - wrapper->extent = DecodeAllocator::Allocate(); - wrapper->extent->decoded_value = &(value->extent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rowPitch)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->arrayPitch)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthPitch)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferMemoryBarrier* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkComponentMapping* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBufferMemoryBarrier* value = wrapper->decoded_value; + VkComponentMapping* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcQueueFamilyIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstQueueFamilyIndex)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); - value->buffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->r)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->g)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->b)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->a)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDispatchIndirectCommand* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDispatchIndirectCommand* value = wrapper->decoded_value; + VkImageViewCreateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->x)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->y)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->z)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); + value->image = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + wrapper->components = DecodeAllocator::Allocate(); + wrapper->components->decoded_value = &(value->components); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->components); + wrapper->subresourceRange = DecodeAllocator::Allocate(); + wrapper->subresourceRange->decoded_value = &(value->subresourceRange); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->subresourceRange); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDrawIndexedIndirectCommand* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandPoolCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDrawIndexedIndirectCommand* value = wrapper->decoded_value; + VkCommandPoolCreateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->instanceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstIndex)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstInstance)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDrawIndirectCommand* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferAllocateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDrawIndirectCommand* value = wrapper->decoded_value; + VkCommandBufferAllocateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->instanceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstVertex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstInstance)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->commandPool)); + value->commandPool = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->level)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->commandBufferCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageSubresourceRange* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferInheritanceInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageSubresourceRange* value = wrapper->decoded_value; + VkCommandBufferInheritanceInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseMipLevel)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->levelCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseArrayLayer)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layerCount)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->renderPass)); + value->renderPass = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpass)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->framebuffer)); + value->framebuffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->occlusionQueryEnable)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->queryFlags)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineStatistics)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageMemoryBarrier* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferBeginInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageMemoryBarrier* value = wrapper->decoded_value; + VkCommandBufferBeginInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->oldLayout)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->newLayout)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcQueueFamilyIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstQueueFamilyIndex)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); - value->image = VK_NULL_HANDLE; - wrapper->subresourceRange = DecodeAllocator::Allocate(); - wrapper->subresourceRange->decoded_value = &(value->subresourceRange); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->subresourceRange); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + wrapper->pInheritanceInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pInheritanceInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pInheritanceInfo = wrapper->pInheritanceInfo->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryBarrier* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferCopy* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryBarrier* value = wrapper->decoded_value; + VkBufferCopy* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcOffset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstOffset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCacheHeaderVersionOne* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageSubresourceLayers* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineCacheHeaderVersionOne* value = wrapper->decoded_value; + VkImageSubresourceLayers* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->headerSize)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->headerVersion)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorID)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceID)); - wrapper->pipelineCacheUUID.SetExternalMemory(value->pipelineCacheUUID, VK_UUID_SIZE); - bytes_read += wrapper->pipelineCacheUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mipLevel)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseArrayLayer)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layerCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAllocationCallbacks* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferImageCopy* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAllocationCallbacks* value = wrapper->decoded_value; + VkBufferImageCopy* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pUserData)); - value->pUserData = nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnAllocation)); - value->pfnAllocation = nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnReallocation)); - value->pfnReallocation = nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnFree)); - value->pfnFree = nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnInternalAllocation)); - value->pfnInternalAllocation = nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnInternalFree)); - value->pfnInternalFree = nullptr; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferRowLength)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferImageHeight)); + wrapper->imageSubresource = DecodeAllocator::Allocate(); + wrapper->imageSubresource->decoded_value = &(value->imageSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageSubresource); + wrapper->imageOffset = DecodeAllocator::Allocate(); + wrapper->imageOffset->decoded_value = &(value->imageOffset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageOffset); + wrapper->imageExtent = DecodeAllocator::Allocate(); + wrapper->imageExtent->decoded_value = &(value->imageExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageExtent); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkApplicationInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageCopy* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkApplicationInfo* value = wrapper->decoded_value; + VkImageCopy* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += wrapper->pApplicationName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pApplicationName = wrapper->pApplicationName.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->applicationVersion)); - bytes_read += wrapper->pEngineName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pEngineName = wrapper->pEngineName.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->engineVersion)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->apiVersion)); + wrapper->srcSubresource = DecodeAllocator::Allocate(); + wrapper->srcSubresource->decoded_value = &(value->srcSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcSubresource); + wrapper->srcOffset = DecodeAllocator::Allocate(); + wrapper->srcOffset->decoded_value = &(value->srcOffset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcOffset); + wrapper->dstSubresource = DecodeAllocator::Allocate(); + wrapper->dstSubresource->decoded_value = &(value->dstSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstSubresource); + wrapper->dstOffset = DecodeAllocator::Allocate(); + wrapper->dstOffset->decoded_value = &(value->dstOffset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstOffset); + wrapper->extent = DecodeAllocator::Allocate(); + wrapper->extent->decoded_value = &(value->extent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFormatProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDispatchIndirectCommand* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkFormatProperties* value = wrapper->decoded_value; + VkDispatchIndirectCommand* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->linearTilingFeatures)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->optimalTilingFeatures)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferFeatures)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->x)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->y)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->z)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageFormatProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCacheHeaderVersionOne* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageFormatProperties* value = wrapper->decoded_value; + VkPipelineCacheHeaderVersionOne* value = wrapper->decoded_value; - wrapper->maxExtent = DecodeAllocator::Allocate(); - wrapper->maxExtent->decoded_value = &(value->maxExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxExtent); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMipLevels)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxArrayLayers)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleCounts)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxResourceSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->headerSize)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->headerVersion)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorID)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceID)); + wrapper->pipelineCacheUUID.SetExternalMemory(value->pipelineCacheUUID, VK_UUID_SIZE); + bytes_read += wrapper->pipelineCacheUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkInstanceCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkEventCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkInstanceCreateInfo* value = wrapper->decoded_value; + VkEventCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - wrapper->pApplicationInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pApplicationInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pApplicationInfo = wrapper->pApplicationInfo->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->enabledLayerCount)); - bytes_read += wrapper->ppEnabledLayerNames.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->ppEnabledLayerNames = wrapper->ppEnabledLayerNames.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->enabledExtensionCount)); - bytes_read += wrapper->ppEnabledExtensionNames.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->ppEnabledExtensionNames = wrapper->ppEnabledExtensionNames.GetPointer(); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryHeap* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferViewCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryHeap* value = wrapper->decoded_value; + VkBufferViewCreateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->range)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryType* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkShaderModuleCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryType* value = wrapper->decoded_value; + VkShaderModuleCreateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->propertyFlags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->heapIndex)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->codeSize)); + bytes_read += wrapper->pCode.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCode = wrapper->pCode.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCacheCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFeatures* value = wrapper->decoded_value; + VkPipelineCacheCreateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustBufferAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fullDrawIndexUint32)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCubeArray)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->independentBlend)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->geometryShader)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tessellationShader)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleRateShading)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dualSrcBlend)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->logicOp)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiDrawIndirect)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drawIndirectFirstInstance)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthClamp)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasClamp)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fillModeNonSolid)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBounds)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->wideLines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->largePoints)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->alphaToOne)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiViewport)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerAnisotropy)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureCompressionETC2)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureCompressionASTC_LDR)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureCompressionBC)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->occlusionQueryPrecise)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineStatisticsQuery)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexPipelineStoresAndAtomics)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentStoresAndAtomics)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTessellationAndGeometryPointSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderImageGatherExtended)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageExtendedFormats)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageMultisample)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageReadWithoutFormat)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageWriteWithoutFormat)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformBufferArrayDynamicIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSampledImageArrayDynamicIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageBufferArrayDynamicIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageArrayDynamicIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderClipDistance)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderCullDistance)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderFloat64)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInt64)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInt16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderResourceResidency)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderResourceMinLod)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseBinding)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidencyBuffer)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidencyImage2D)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidencyImage3D)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidency2Samples)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidency4Samples)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidency8Samples)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidency16Samples)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseResidencyAliased)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->variableMultisampleRate)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inheritedQueries)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->initialDataSize)); + bytes_read += wrapper->pInitialData.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); + value->pInitialData = wrapper->pInitialData.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLimits* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSpecializationMapEntry* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceLimits* value = wrapper->decoded_value; + VkSpecializationMapEntry* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageDimension1D)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageDimension2D)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageDimension3D)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageDimensionCube)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageArrayLayers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTexelBufferElements)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxUniformBufferRange)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStorageBufferRange)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPushConstantsSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMemoryAllocationCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSamplerAllocationCount)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferImageGranularity)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseAddressSpaceSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBoundDescriptorSets)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorSamplers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUniformBuffers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorStorageBuffers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorSampledImages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorStorageImages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorInputAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageResources)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetSamplers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUniformBuffers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUniformBuffersDynamic)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetStorageBuffers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetStorageBuffersDynamic)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetSampledImages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetStorageImages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetInputAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexInputAttributes)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexInputBindings)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexInputAttributeOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexInputBindingStride)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexOutputComponents)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationGenerationLevel)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationPatchSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationControlPerVertexInputComponents)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationControlPerVertexOutputComponents)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationControlPerPatchOutputComponents)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationControlTotalOutputComponents)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationEvaluationInputComponents)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTessellationEvaluationOutputComponents)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxGeometryShaderInvocations)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxGeometryInputComponents)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxGeometryOutputComponents)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxGeometryOutputVertices)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxGeometryTotalOutputComponents)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentInputComponents)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentOutputAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentDualSrcAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentCombinedOutputResources)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxComputeSharedMemorySize)); - wrapper->maxComputeWorkGroupCount.SetExternalMemory(value->maxComputeWorkGroupCount, 3); - bytes_read += wrapper->maxComputeWorkGroupCount.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxComputeWorkGroupInvocations)); - wrapper->maxComputeWorkGroupSize.SetExternalMemory(value->maxComputeWorkGroupSize, 3); - bytes_read += wrapper->maxComputeWorkGroupSize.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subPixelPrecisionBits)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subTexelPrecisionBits)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mipmapPrecisionBits)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDrawIndexedIndexValue)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDrawIndirectCount)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSamplerLodBias)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSamplerAnisotropy)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxViewports)); - wrapper->maxViewportDimensions.SetExternalMemory(value->maxViewportDimensions, 2); - bytes_read += wrapper->maxViewportDimensions.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->viewportBoundsRange.SetExternalMemory(value->viewportBoundsRange, 2); - bytes_read += wrapper->viewportBoundsRange.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportSubPixelBits)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minMemoryMapAlignment)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minTexelBufferOffsetAlignment)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minUniformBufferOffsetAlignment)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minStorageBufferOffsetAlignment)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minTexelOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTexelOffset)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minTexelGatherOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTexelGatherOffset)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minInterpolationOffset)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxInterpolationOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subPixelInterpolationOffsetBits)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFramebufferWidth)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFramebufferHeight)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFramebufferLayers)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->framebufferColorSampleCounts)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->framebufferDepthSampleCounts)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->framebufferStencilSampleCounts)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->framebufferNoAttachmentsSampleCounts)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxColorAttachments)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampledImageColorSampleCounts)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampledImageIntegerSampleCounts)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampledImageDepthSampleCounts)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampledImageStencilSampleCounts)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageImageSampleCounts)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSampleMaskWords)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timestampComputeAndGraphics)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->timestampPeriod)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxClipDistances)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxCullDistances)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxCombinedClipAndCullDistances)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->discreteQueuePriorities)); - wrapper->pointSizeRange.SetExternalMemory(value->pointSizeRange, 2); - bytes_read += wrapper->pointSizeRange.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->lineWidthRange.SetExternalMemory(value->lineWidthRange, 2); - bytes_read += wrapper->lineWidthRange.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pointSizeGranularity)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->lineWidthGranularity)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->strictLines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->standardSampleLocations)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->optimalBufferCopyOffsetAlignment)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->optimalBufferCopyRowPitchAlignment)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nonCoherentAtomSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->constantID)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMemoryProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSpecializationInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMemoryProperties* value = wrapper->decoded_value; + VkSpecializationInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeCount)); - wrapper->memoryTypes = DecodeAllocator::Allocate>(); - wrapper->memoryTypes->SetExternalMemory(value->memoryTypes, VK_MAX_MEMORY_TYPES); - bytes_read += wrapper->memoryTypes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryHeapCount)); - wrapper->memoryHeaps = DecodeAllocator::Allocate>(); - wrapper->memoryHeaps->SetExternalMemory(value->memoryHeaps, VK_MAX_MEMORY_HEAPS); - bytes_read += wrapper->memoryHeaps->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mapEntryCount)); + wrapper->pMapEntries = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pMapEntries->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pMapEntries = wrapper->pMapEntries->GetPointer(); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataSize)); + bytes_read += wrapper->pData.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); + value->pData = wrapper->pData.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSparseProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineShaderStageCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSparseProperties* value = wrapper->decoded_value; + VkPipelineShaderStageCreateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->residencyStandard2DBlockShape)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->residencyStandard2DMultisampleBlockShape)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->residencyStandard3DBlockShape)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->residencyAlignedMipSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->residencyNonResidentStrict)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stage)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->module)); + value->module = VK_NULL_HANDLE; + bytes_read += wrapper->pName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pName = wrapper->pName.GetPointer(); + wrapper->pSpecializationInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSpecializationInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSpecializationInfo = wrapper->pSpecializationInfo->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkComputePipelineCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceProperties* value = wrapper->decoded_value; + VkComputePipelineCreateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->apiVersion)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->driverVersion)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorID)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceID)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceType)); - wrapper->deviceName.SetExternalMemory(value->deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); - bytes_read += wrapper->deviceName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->pipelineCacheUUID.SetExternalMemory(value->pipelineCacheUUID, VK_UUID_SIZE); - bytes_read += wrapper->pipelineCacheUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->limits = DecodeAllocator::Allocate(); - wrapper->limits->decoded_value = &(value->limits); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->limits); - wrapper->sparseProperties = DecodeAllocator::Allocate(); - wrapper->sparseProperties->decoded_value = &(value->sparseProperties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->sparseProperties); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + wrapper->stage = DecodeAllocator::Allocate(); + wrapper->stage->decoded_value = &(value->stage); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->stage); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); + value->layout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->basePipelineHandle)); + value->basePipelineHandle = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->basePipelineIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPushConstantRange* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkQueueFamilyProperties* value = wrapper->decoded_value; + VkPushConstantRange* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFlags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timestampValidBits)); - wrapper->minImageTransferGranularity = DecodeAllocator::Allocate(); - wrapper->minImageTransferGranularity->decoded_value = &(value->minImageTransferGranularity); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minImageTransferGranularity); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageFlags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceQueueCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineLayoutCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceQueueCreateInfo* value = wrapper->decoded_value; + VkPipelineLayoutCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueCount)); - bytes_read += wrapper->pQueuePriorities.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); - value->pQueuePriorities = wrapper->pQueuePriorities.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->setLayoutCount)); + bytes_read += wrapper->pSetLayouts.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSetLayouts = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pushConstantRangeCount)); + wrapper->pPushConstantRanges = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pPushConstantRanges->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPushConstantRanges = wrapper->pPushConstantRanges->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceCreateInfo* value = wrapper->decoded_value; + VkSamplerCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueCreateInfoCount)); - wrapper->pQueueCreateInfos = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pQueueCreateInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pQueueCreateInfos = wrapper->pQueueCreateInfos->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->enabledLayerCount)); - bytes_read += wrapper->ppEnabledLayerNames.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->ppEnabledLayerNames = wrapper->ppEnabledLayerNames.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->enabledExtensionCount)); - bytes_read += wrapper->ppEnabledExtensionNames.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->ppEnabledExtensionNames = wrapper->ppEnabledExtensionNames.GetPointer(); - wrapper->pEnabledFeatures = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pEnabledFeatures->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pEnabledFeatures = wrapper->pEnabledFeatures->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->magFilter)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minFilter)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mipmapMode)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->addressModeU)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->addressModeV)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->addressModeW)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mipLodBias)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->anisotropyEnable)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxAnisotropy)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->compareEnable)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compareOp)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minLod)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLod)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->borderColor)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->unnormalizedCoordinates)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExtensionProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyDescriptorSet* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExtensionProperties* value = wrapper->decoded_value; + VkCopyDescriptorSet* value = wrapper->decoded_value; - wrapper->extensionName.SetExternalMemory(value->extensionName, VK_MAX_EXTENSION_NAME_SIZE); - bytes_read += wrapper->extensionName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->specVersion)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcSet)); + value->srcSet = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcBinding)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcArrayElement)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstSet)); + value->dstSet = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstBinding)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstArrayElement)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLayerProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorBufferInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkLayerProperties* value = wrapper->decoded_value; + VkDescriptorBufferInfo* value = wrapper->decoded_value; - wrapper->layerName.SetExternalMemory(value->layerName, VK_MAX_EXTENSION_NAME_SIZE); - bytes_read += wrapper->layerName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->specVersion)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->implementationVersion)); - wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); - bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->range)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubmitInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorPoolSize* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSubmitInfo* value = wrapper->decoded_value; + VkDescriptorPoolSize* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->waitSemaphoreCount)); - bytes_read += wrapper->pWaitSemaphores.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pWaitSemaphores = nullptr; - bytes_read += wrapper->pWaitDstStageMask.DecodeFlags((buffer + bytes_read), (buffer_size - bytes_read)); - value->pWaitDstStageMask = wrapper->pWaitDstStageMask.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->commandBufferCount)); - bytes_read += wrapper->pCommandBuffers.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCommandBuffers = nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->signalSemaphoreCount)); - bytes_read += wrapper->pSignalSemaphores.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSignalSemaphores = nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMappedMemoryRange* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorPoolCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMappedMemoryRange* value = wrapper->decoded_value; + VkDescriptorPoolCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSets)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->poolSizeCount)); + wrapper->pPoolSizes = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pPoolSizes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPoolSizes = wrapper->pPoolSizes->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryAllocateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetAllocateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryAllocateInfo* value = wrapper->decoded_value; + VkDescriptorSetAllocateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->allocationSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeIndex)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->descriptorPool)); + value->descriptorPool = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorSetCount)); + bytes_read += wrapper->pSetLayouts.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSetLayouts = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryRequirements* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutBinding* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryRequirements* value = wrapper->decoded_value; + VkDescriptorSetLayoutBinding* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->alignment)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeBits)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorCount)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageFlags)); + bytes_read += wrapper->pImmutableSamplers.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pImmutableSamplers = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseMemoryBind* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSparseMemoryBind* value = wrapper->decoded_value; + VkDescriptorSetLayoutCreateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->resourceOffset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryOffset)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindingCount)); + wrapper->pBindings = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pBindings->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pBindings = wrapper->pBindings->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseBufferMemoryBindInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDrawIndexedIndirectCommand* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSparseBufferMemoryBindInfo* value = wrapper->decoded_value; + VkDrawIndexedIndirectCommand* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); - value->buffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindCount)); - wrapper->pBinds = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pBinds->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pBinds = wrapper->pBinds->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->instanceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstIndex)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstInstance)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseImageOpaqueMemoryBindInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDrawIndirectCommand* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSparseImageOpaqueMemoryBindInfo* value = wrapper->decoded_value; + VkDrawIndirectCommand* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); - value->image = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindCount)); - wrapper->pBinds = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pBinds->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pBinds = wrapper->pBinds->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->instanceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstVertex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstInstance)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageSubresource* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVertexInputBindingDescription* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageSubresource* value = wrapper->decoded_value; + VkVertexInputBindingDescription* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mipLevel)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->arrayLayer)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stride)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputRate)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseImageMemoryBind* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVertexInputAttributeDescription* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSparseImageMemoryBind* value = wrapper->decoded_value; + VkVertexInputAttributeDescription* value = wrapper->decoded_value; - wrapper->subresource = DecodeAllocator::Allocate(); - wrapper->subresource->decoded_value = &(value->subresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->subresource); - wrapper->offset = DecodeAllocator::Allocate(); - wrapper->offset->decoded_value = &(value->offset); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->offset); - wrapper->extent = DecodeAllocator::Allocate(); - wrapper->extent->decoded_value = &(value->extent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryOffset)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->location)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseImageMemoryBindInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineVertexInputStateCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSparseImageMemoryBindInfo* value = wrapper->decoded_value; + VkPipelineVertexInputStateCreateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); - value->image = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindCount)); - wrapper->pBinds = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pBinds->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pBinds = wrapper->pBinds->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexBindingDescriptionCount)); + wrapper->pVertexBindingDescriptions = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pVertexBindingDescriptions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pVertexBindingDescriptions = wrapper->pVertexBindingDescriptions->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexAttributeDescriptionCount)); + wrapper->pVertexAttributeDescriptions = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pVertexAttributeDescriptions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pVertexAttributeDescriptions = wrapper->pVertexAttributeDescriptions->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindSparseInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineInputAssemblyStateCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindSparseInfo* value = wrapper->decoded_value; + VkPipelineInputAssemblyStateCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->waitSemaphoreCount)); - bytes_read += wrapper->pWaitSemaphores.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pWaitSemaphores = nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferBindCount)); - wrapper->pBufferBinds = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pBufferBinds->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pBufferBinds = wrapper->pBufferBinds->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageOpaqueBindCount)); - wrapper->pImageOpaqueBinds = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pImageOpaqueBinds->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pImageOpaqueBinds = wrapper->pImageOpaqueBinds->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageBindCount)); - wrapper->pImageBinds = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pImageBinds->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pImageBinds = wrapper->pImageBinds->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->signalSemaphoreCount)); - bytes_read += wrapper->pSignalSemaphores.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSignalSemaphores = nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->topology)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitiveRestartEnable)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseImageFormatProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineTessellationStateCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSparseImageFormatProperties* value = wrapper->decoded_value; + VkPipelineTessellationStateCreateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectMask)); - wrapper->imageGranularity = DecodeAllocator::Allocate(); - wrapper->imageGranularity->decoded_value = &(value->imageGranularity); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageGranularity); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->patchControlPoints)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseImageMemoryRequirements* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkViewport* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSparseImageMemoryRequirements* value = wrapper->decoded_value; + VkViewport* value = wrapper->decoded_value; - wrapper->formatProperties = DecodeAllocator::Allocate(); - wrapper->formatProperties->decoded_value = &(value->formatProperties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->formatProperties); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageMipTailFirstLod)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageMipTailSize)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageMipTailOffset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageMipTailStride)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->x)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->y)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->width)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->height)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minDepth)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDepth)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFenceCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineViewportStateCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkFenceCreateInfo* value = wrapper->decoded_value; + VkPipelineViewportStateCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportCount)); + wrapper->pViewports = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pViewports->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pViewports = wrapper->pViewports->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->scissorCount)); + wrapper->pScissors = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pScissors->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pScissors = wrapper->pScissors->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRasterizationStateCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSemaphoreCreateInfo* value = wrapper->decoded_value; + VkPipelineRasterizationStateCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthClampEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizerDiscardEnable)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->polygonMode)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->cullMode)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->frontFace)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasEnable)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasConstantFactor)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasClamp)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasSlopeFactor)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->lineWidth)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkEventCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineMultisampleStateCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkEventCreateInfo* value = wrapper->decoded_value; + VkPipelineMultisampleStateCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationSamples)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleShadingEnable)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minSampleShading)); + bytes_read += wrapper->pSampleMask.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSampleMask = wrapper->pSampleMask.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->alphaToCoverageEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->alphaToOneEnable)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueryPoolCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkStencilOpState* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkQueryPoolCreateInfo* value = wrapper->decoded_value; + VkStencilOpState* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->queryType)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queryCount)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineStatistics)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->failOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->passOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthFailOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compareOp)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->compareMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->writeMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reference)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineDepthStencilStateCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBufferCreateInfo* value = wrapper->decoded_value; + VkPipelineDepthStencilStateCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sharingMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndexCount)); - bytes_read += wrapper->pQueueFamilyIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pQueueFamilyIndices = wrapper->pQueueFamilyIndices.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthTestEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthWriteEnable)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthCompareOp)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBoundsTestEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilTestEnable)); + wrapper->front = DecodeAllocator::Allocate(); + wrapper->front->decoded_value = &(value->front); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->front); + wrapper->back = DecodeAllocator::Allocate(); + wrapper->back->decoded_value = &(value->back); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->back); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minDepthBounds)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDepthBounds)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferViewCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineColorBlendAttachmentState* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBufferViewCreateInfo* value = wrapper->decoded_value; + VkPipelineColorBlendAttachmentState* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->blendEnable)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcColorBlendFactor)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstColorBlendFactor)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorBlendOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAlphaBlendFactor)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAlphaBlendFactor)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->alphaBlendOp)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorWriteMask)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineColorBlendStateCreateInfo* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPipelineColorBlendStateCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); - value->buffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->range)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->logicOpEnable)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->logicOp)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentCount)); + wrapper->pAttachments = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAttachments = wrapper->pAttachments->GetPointer(); + wrapper->blendConstants.SetExternalMemory(value->blendConstants, 4); + bytes_read += wrapper->blendConstants.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineDynamicStateCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageCreateInfo* value = wrapper->decoded_value; + VkPipelineDynamicStateCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageType)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - wrapper->extent = DecodeAllocator::Allocate(); - wrapper->extent->decoded_value = &(value->extent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mipLevels)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->arrayLayers)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->samples)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tiling)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sharingMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndexCount)); - bytes_read += wrapper->pQueueFamilyIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pQueueFamilyIndices = wrapper->pQueueFamilyIndices.GetPointer(); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->initialLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicStateCount)); + bytes_read += wrapper->pDynamicStates.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDynamicStates = wrapper->pDynamicStates.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubresourceLayout* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGraphicsPipelineCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSubresourceLayout* value = wrapper->decoded_value; + VkGraphicsPipelineCreateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rowPitch)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->arrayPitch)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthPitch)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageCount)); + wrapper->pStages = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStages->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStages = wrapper->pStages->GetPointer(); + wrapper->pVertexInputState = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pVertexInputState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pVertexInputState = wrapper->pVertexInputState->GetPointer(); + wrapper->pInputAssemblyState = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pInputAssemblyState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pInputAssemblyState = wrapper->pInputAssemblyState->GetPointer(); + wrapper->pTessellationState = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pTessellationState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTessellationState = wrapper->pTessellationState->GetPointer(); + wrapper->pViewportState = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pViewportState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pViewportState = wrapper->pViewportState->GetPointer(); + wrapper->pRasterizationState = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pRasterizationState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pRasterizationState = wrapper->pRasterizationState->GetPointer(); + wrapper->pMultisampleState = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pMultisampleState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pMultisampleState = wrapper->pMultisampleState->GetPointer(); + wrapper->pDepthStencilState = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDepthStencilState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDepthStencilState = wrapper->pDepthStencilState->GetPointer(); + wrapper->pColorBlendState = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pColorBlendState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pColorBlendState = wrapper->pColorBlendState->GetPointer(); + wrapper->pDynamicState = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDynamicState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDynamicState = wrapper->pDynamicState->GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); + value->layout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->renderPass)); + value->renderPass = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpass)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->basePipelineHandle)); + value->basePipelineHandle = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->basePipelineIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkComponentMapping* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentDescription* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkComponentMapping* value = wrapper->decoded_value; + VkAttachmentDescription* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->r)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->g)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->b)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->a)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->samples)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->loadOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storeOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilLoadOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilStoreOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->initialLayout)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->finalLayout)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentReference* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageViewCreateInfo* value = wrapper->decoded_value; + VkAttachmentReference* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); - value->image = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewType)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - wrapper->components = DecodeAllocator::Allocate(); - wrapper->components->decoded_value = &(value->components); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->components); - wrapper->subresourceRange = DecodeAllocator::Allocate(); - wrapper->subresourceRange->decoded_value = &(value->subresourceRange); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->subresourceRange); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachment)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->layout)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkShaderModuleCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFramebufferCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkShaderModuleCreateInfo* value = wrapper->decoded_value; + VkFramebufferCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->codeSize)); - bytes_read += wrapper->pCode.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCode = wrapper->pCode.GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->renderPass)); + value->renderPass = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentCount)); + bytes_read += wrapper->pAttachments.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAttachments = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->width)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->height)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layers)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCacheCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassDescription* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineCacheCreateInfo* value = wrapper->decoded_value; + VkSubpassDescription* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->initialDataSize)); - bytes_read += wrapper->pInitialData.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); - value->pInitialData = wrapper->pInitialData.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBindPoint)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputAttachmentCount)); + wrapper->pInputAttachments = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pInputAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pInputAttachments = wrapper->pInputAttachments->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); + wrapper->pColorAttachments = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pColorAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pColorAttachments = wrapper->pColorAttachments->GetPointer(); + wrapper->pResolveAttachments = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pResolveAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pResolveAttachments = wrapper->pResolveAttachments->GetPointer(); + wrapper->pDepthStencilAttachment = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDepthStencilAttachment->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDepthStencilAttachment = wrapper->pDepthStencilAttachment->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preserveAttachmentCount)); + bytes_read += wrapper->pPreserveAttachments.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPreserveAttachments = wrapper->pPreserveAttachments.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSpecializationMapEntry* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassDependency* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSpecializationMapEntry* value = wrapper->decoded_value; + VkSubpassDependency* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->constantID)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcSubpass)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstSubpass)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcStageMask)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstStageMask)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dependencyFlags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSpecializationInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSpecializationInfo* value = wrapper->decoded_value; + VkRenderPassCreateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mapEntryCount)); - wrapper->pMapEntries = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pMapEntries->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pMapEntries = wrapper->pMapEntries->GetPointer(); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataSize)); - bytes_read += wrapper->pData.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); - value->pData = wrapper->pData.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentCount)); + wrapper->pAttachments = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAttachments = wrapper->pAttachments->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpassCount)); + wrapper->pSubpasses = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSubpasses->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSubpasses = wrapper->pSubpasses->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dependencyCount)); + wrapper->pDependencies = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDependencies->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDependencies = wrapper->pDependencies->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineShaderStageCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkClearDepthStencilValue* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineShaderStageCreateInfo* value = wrapper->decoded_value; + VkClearDepthStencilValue* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stage)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->module)); - value->module = VK_NULL_HANDLE; - bytes_read += wrapper->pName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pName = wrapper->pName.GetPointer(); - wrapper->pSpecializationInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSpecializationInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSpecializationInfo = wrapper->pSpecializationInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depth)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencil)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkComputePipelineCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkClearAttachment* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkComputePipelineCreateInfo* value = wrapper->decoded_value; + VkClearAttachment* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - wrapper->stage = DecodeAllocator::Allocate(); - wrapper->stage->decoded_value = &(value->stage); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->stage); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); - value->layout = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->basePipelineHandle)); - value->basePipelineHandle = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->basePipelineIndex)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachment)); + wrapper->clearValue = DecodeAllocator::Allocate(); + wrapper->clearValue->decoded_value = &(value->clearValue); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->clearValue); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVertexInputBindingDescription* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkClearRect* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVertexInputBindingDescription* value = wrapper->decoded_value; + VkClearRect* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stride)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputRate)); + wrapper->rect = DecodeAllocator::Allocate(); + wrapper->rect->decoded_value = &(value->rect); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->rect); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseArrayLayer)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layerCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVertexInputAttributeDescription* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageBlit* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVertexInputAttributeDescription* value = wrapper->decoded_value; + VkImageBlit* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->location)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + wrapper->srcSubresource = DecodeAllocator::Allocate(); + wrapper->srcSubresource->decoded_value = &(value->srcSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcSubresource); + wrapper->srcOffsets = DecodeAllocator::Allocate>(); + wrapper->srcOffsets->SetExternalMemory(value->srcOffsets, 2); + bytes_read += wrapper->srcOffsets->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->dstSubresource = DecodeAllocator::Allocate(); + wrapper->dstSubresource->decoded_value = &(value->dstSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstSubresource); + wrapper->dstOffsets = DecodeAllocator::Allocate>(); + wrapper->dstOffsets->SetExternalMemory(value->dstOffsets, 2); + bytes_read += wrapper->dstOffsets->Decode((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineVertexInputStateCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageResolve* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineVertexInputStateCreateInfo* value = wrapper->decoded_value; + VkImageResolve* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexBindingDescriptionCount)); - wrapper->pVertexBindingDescriptions = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pVertexBindingDescriptions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pVertexBindingDescriptions = wrapper->pVertexBindingDescriptions->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexAttributeDescriptionCount)); - wrapper->pVertexAttributeDescriptions = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pVertexAttributeDescriptions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pVertexAttributeDescriptions = wrapper->pVertexAttributeDescriptions->GetPointer(); + wrapper->srcSubresource = DecodeAllocator::Allocate(); + wrapper->srcSubresource->decoded_value = &(value->srcSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcSubresource); + wrapper->srcOffset = DecodeAllocator::Allocate(); + wrapper->srcOffset->decoded_value = &(value->srcOffset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcOffset); + wrapper->dstSubresource = DecodeAllocator::Allocate(); + wrapper->dstSubresource->decoded_value = &(value->dstSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstSubresource); + wrapper->dstOffset = DecodeAllocator::Allocate(); + wrapper->dstOffset->decoded_value = &(value->dstOffset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstOffset); + wrapper->extent = DecodeAllocator::Allocate(); + wrapper->extent->decoded_value = &(value->extent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineInputAssemblyStateCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassBeginInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineInputAssemblyStateCreateInfo* value = wrapper->decoded_value; + VkRenderPassBeginInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->topology)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitiveRestartEnable)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->renderPass)); + value->renderPass = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->framebuffer)); + value->framebuffer = VK_NULL_HANDLE; + wrapper->renderArea = DecodeAllocator::Allocate(); + wrapper->renderArea->decoded_value = &(value->renderArea); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->renderArea); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->clearValueCount)); + wrapper->pClearValues = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pClearValues->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pClearValues = wrapper->pClearValues->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineTessellationStateCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindBufferMemoryInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineTessellationStateCreateInfo* value = wrapper->decoded_value; + VkBindBufferMemoryInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->patchControlPoints)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryOffset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkViewport* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindImageMemoryInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkViewport* value = wrapper->decoded_value; + VkBindImageMemoryInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->x)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->y)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->width)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->height)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minDepth)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDepth)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); + value->image = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryOffset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineViewportStateCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryDedicatedRequirements* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineViewportStateCreateInfo* value = wrapper->decoded_value; + VkMemoryDedicatedRequirements* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportCount)); - wrapper->pViewports = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pViewports->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pViewports = wrapper->pViewports->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->scissorCount)); - wrapper->pScissors = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pScissors->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pScissors = wrapper->pScissors->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->prefersDedicatedAllocation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->requiresDedicatedAllocation)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRasterizationStateCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryDedicatedAllocateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineRasterizationStateCreateInfo* value = wrapper->decoded_value; + VkMemoryDedicatedAllocateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthClampEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizerDiscardEnable)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->polygonMode)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->cullMode)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->frontFace)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasEnable)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasConstantFactor)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasClamp)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasSlopeFactor)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->lineWidth)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); + value->image = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineMultisampleStateCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryAllocateFlagsInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineMultisampleStateCreateInfo* value = wrapper->decoded_value; + VkMemoryAllocateFlagsInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationSamples)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleShadingEnable)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minSampleShading)); - bytes_read += wrapper->pSampleMask.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSampleMask = wrapper->pSampleMask.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->alphaToCoverageEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->alphaToOneEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceMask)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkStencilOpState* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupCommandBufferBeginInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkStencilOpState* value = wrapper->decoded_value; + VkDeviceGroupCommandBufferBeginInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->failOp)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->passOp)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthFailOp)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compareOp)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->compareMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->writeMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reference)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceMask)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineDepthStencilStateCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupSubmitInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineDepthStencilStateCreateInfo* value = wrapper->decoded_value; + VkDeviceGroupSubmitInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthTestEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthWriteEnable)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthCompareOp)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBoundsTestEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilTestEnable)); - wrapper->front = DecodeAllocator::Allocate(); - wrapper->front->decoded_value = &(value->front); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->front); - wrapper->back = DecodeAllocator::Allocate(); - wrapper->back->decoded_value = &(value->back); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->back); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minDepthBounds)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDepthBounds)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->waitSemaphoreCount)); + bytes_read += wrapper->pWaitSemaphoreDeviceIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pWaitSemaphoreDeviceIndices = wrapper->pWaitSemaphoreDeviceIndices.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->commandBufferCount)); + bytes_read += wrapper->pCommandBufferDeviceMasks.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCommandBufferDeviceMasks = wrapper->pCommandBufferDeviceMasks.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->signalSemaphoreCount)); + bytes_read += wrapper->pSignalSemaphoreDeviceIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSignalSemaphoreDeviceIndices = wrapper->pSignalSemaphoreDeviceIndices.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineColorBlendAttachmentState* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupBindSparseInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineColorBlendAttachmentState* value = wrapper->decoded_value; + VkDeviceGroupBindSparseInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->blendEnable)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcColorBlendFactor)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstColorBlendFactor)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorBlendOp)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAlphaBlendFactor)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAlphaBlendFactor)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->alphaBlendOp)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorWriteMask)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->resourceDeviceIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryDeviceIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineColorBlendStateCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindBufferMemoryDeviceGroupInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineColorBlendStateCreateInfo* value = wrapper->decoded_value; + VkBindBufferMemoryDeviceGroupInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->logicOpEnable)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->logicOp)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentCount)); - wrapper->pAttachments = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAttachments = wrapper->pAttachments->GetPointer(); - wrapper->blendConstants.SetExternalMemory(value->blendConstants, 4); - bytes_read += wrapper->blendConstants.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceIndexCount)); + bytes_read += wrapper->pDeviceIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDeviceIndices = wrapper->pDeviceIndices.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineDynamicStateCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindImageMemoryDeviceGroupInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineDynamicStateCreateInfo* value = wrapper->decoded_value; + VkBindImageMemoryDeviceGroupInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicStateCount)); - bytes_read += wrapper->pDynamicStates.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDynamicStates = wrapper->pDynamicStates.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceIndexCount)); + bytes_read += wrapper->pDeviceIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDeviceIndices = wrapper->pDeviceIndices.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->splitInstanceBindRegionCount)); + wrapper->pSplitInstanceBindRegions = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSplitInstanceBindRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSplitInstanceBindRegions = wrapper->pSplitInstanceBindRegions->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGraphicsPipelineCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceGroupProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkGraphicsPipelineCreateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceGroupProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageCount)); - wrapper->pStages = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStages->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStages = wrapper->pStages->GetPointer(); - wrapper->pVertexInputState = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pVertexInputState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pVertexInputState = wrapper->pVertexInputState->GetPointer(); - wrapper->pInputAssemblyState = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pInputAssemblyState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pInputAssemblyState = wrapper->pInputAssemblyState->GetPointer(); - wrapper->pTessellationState = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pTessellationState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pTessellationState = wrapper->pTessellationState->GetPointer(); - wrapper->pViewportState = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pViewportState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pViewportState = wrapper->pViewportState->GetPointer(); - wrapper->pRasterizationState = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pRasterizationState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pRasterizationState = wrapper->pRasterizationState->GetPointer(); - wrapper->pMultisampleState = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pMultisampleState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pMultisampleState = wrapper->pMultisampleState->GetPointer(); - wrapper->pDepthStencilState = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDepthStencilState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDepthStencilState = wrapper->pDepthStencilState->GetPointer(); - wrapper->pColorBlendState = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pColorBlendState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pColorBlendState = wrapper->pColorBlendState->GetPointer(); - wrapper->pDynamicState = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDynamicState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDynamicState = wrapper->pDynamicState->GetPointer(); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); - value->layout = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->renderPass)); - value->renderPass = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpass)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->basePipelineHandle)); - value->basePipelineHandle = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->basePipelineIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->physicalDeviceCount)); + wrapper->physicalDevices.SetExternalMemory(value->physicalDevices, VK_MAX_DEVICE_GROUP_SIZE); + bytes_read += wrapper->physicalDevices.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subsetAllocation)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPushConstantRange* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupDeviceCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPushConstantRange* value = wrapper->decoded_value; + VkDeviceGroupDeviceCreateInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageFlags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->physicalDeviceCount)); + bytes_read += wrapper->pPhysicalDevices.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPhysicalDevices = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineLayoutCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferMemoryRequirementsInfo2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineLayoutCreateInfo* value = wrapper->decoded_value; + VkBufferMemoryRequirementsInfo2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->setLayoutCount)); - bytes_read += wrapper->pSetLayouts.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSetLayouts = nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pushConstantRangeCount)); - wrapper->pPushConstantRanges = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pPushConstantRanges->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPushConstantRanges = wrapper->pPushConstantRanges->GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageMemoryRequirementsInfo2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSamplerCreateInfo* value = wrapper->decoded_value; - - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->magFilter)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minFilter)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mipmapMode)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->addressModeU)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->addressModeV)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->addressModeW)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mipLodBias)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->anisotropyEnable)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxAnisotropy)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->compareEnable)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compareOp)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minLod)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLod)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->borderColor)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->unnormalizedCoordinates)); + VkImageMemoryRequirementsInfo2* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); + value->image = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyDescriptorSet* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageSparseMemoryRequirementsInfo2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCopyDescriptorSet* value = wrapper->decoded_value; + VkImageSparseMemoryRequirementsInfo2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcSet)); - value->srcSet = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcBinding)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcArrayElement)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstSet)); - value->dstSet = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstBinding)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstArrayElement)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorCount)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); + value->image = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorBufferInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryRequirements2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorBufferInfo* value = wrapper->decoded_value; + VkMemoryRequirements2* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); - value->buffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->range)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->memoryRequirements = DecodeAllocator::Allocate(); + wrapper->memoryRequirements->decoded_value = &(value->memoryRequirements); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->memoryRequirements); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorPoolSize* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseImageMemoryRequirements2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorPoolSize* value = wrapper->decoded_value; + VkSparseImageMemoryRequirements2* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorCount)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->memoryRequirements = DecodeAllocator::Allocate(); + wrapper->memoryRequirements->decoded_value = &(value->memoryRequirements); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->memoryRequirements); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorPoolCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFeatures2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorPoolCreateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceFeatures2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSets)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->poolSizeCount)); - wrapper->pPoolSizes = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pPoolSizes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPoolSizes = wrapper->pPoolSizes->GetPointer(); + wrapper->features = DecodeAllocator::Allocate(); + wrapper->features->decoded_value = &(value->features); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->features); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetAllocateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceProperties2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorSetAllocateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceProperties2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->descriptorPool)); - value->descriptorPool = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorSetCount)); - bytes_read += wrapper->pSetLayouts.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSetLayouts = nullptr; + wrapper->properties = DecodeAllocator::Allocate(); + wrapper->properties->decoded_value = &(value->properties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->properties); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutBinding* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFormatProperties2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorSetLayoutBinding* value = wrapper->decoded_value; + VkFormatProperties2* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorType)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorCount)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageFlags)); - bytes_read += wrapper->pImmutableSamplers.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pImmutableSamplers = nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->formatProperties = DecodeAllocator::Allocate(); + wrapper->formatProperties->decoded_value = &(value->formatProperties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->formatProperties); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageFormatProperties2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorSetLayoutCreateInfo* value = wrapper->decoded_value; + VkImageFormatProperties2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindingCount)); - wrapper->pBindings = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pBindings->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pBindings = wrapper->pBindings->GetPointer(); + wrapper->imageFormatProperties = DecodeAllocator::Allocate(); + wrapper->imageFormatProperties->decoded_value = &(value->imageFormatProperties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageFormatProperties); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentDescription* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageFormatInfo2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAttachmentDescription* value = wrapper->decoded_value; + VkPhysicalDeviceImageFormatInfo2* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->samples)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->loadOp)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storeOp)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilLoadOp)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilStoreOp)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->initialLayout)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->finalLayout)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tiling)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentReference* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyProperties2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAttachmentReference* value = wrapper->decoded_value; + VkQueueFamilyProperties2* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachment)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->layout)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->queueFamilyProperties = DecodeAllocator::Allocate(); + wrapper->queueFamilyProperties->decoded_value = &(value->queueFamilyProperties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->queueFamilyProperties); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFramebufferCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMemoryProperties2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkFramebufferCreateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceMemoryProperties2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->renderPass)); - value->renderPass = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentCount)); - bytes_read += wrapper->pAttachments.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAttachments = nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->width)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->height)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layers)); + wrapper->memoryProperties = DecodeAllocator::Allocate(); + wrapper->memoryProperties->decoded_value = &(value->memoryProperties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->memoryProperties); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassDescription* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseImageFormatProperties2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSubpassDescription* value = wrapper->decoded_value; + VkSparseImageFormatProperties2* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBindPoint)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputAttachmentCount)); - wrapper->pInputAttachments = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pInputAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pInputAttachments = wrapper->pInputAttachments->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); - wrapper->pColorAttachments = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pColorAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pColorAttachments = wrapper->pColorAttachments->GetPointer(); - wrapper->pResolveAttachments = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pResolveAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pResolveAttachments = wrapper->pResolveAttachments->GetPointer(); - wrapper->pDepthStencilAttachment = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDepthStencilAttachment->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDepthStencilAttachment = wrapper->pDepthStencilAttachment->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preserveAttachmentCount)); - bytes_read += wrapper->pPreserveAttachments.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPreserveAttachments = wrapper->pPreserveAttachments.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->properties = DecodeAllocator::Allocate(); + wrapper->properties->decoded_value = &(value->properties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->properties); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassDependency* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSparseImageFormatInfo2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSubpassDependency* value = wrapper->decoded_value; + VkPhysicalDeviceSparseImageFormatInfo2* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcSubpass)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstSubpass)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcStageMask)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstStageMask)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dependencyFlags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->samples)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tiling)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewUsageCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassCreateInfo* value = wrapper->decoded_value; + VkImageViewUsageCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentCount)); - wrapper->pAttachments = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAttachments = wrapper->pAttachments->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpassCount)); - wrapper->pSubpasses = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSubpasses->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSubpasses = wrapper->pSubpasses->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dependencyCount)); - wrapper->pDependencies = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDependencies->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDependencies = wrapper->pDependencies->GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandPoolCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceProtectedMemoryFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCommandPoolCreateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceProtectedMemoryFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->protectedMemory)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferAllocateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceProtectedMemoryProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCommandBufferAllocateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceProtectedMemoryProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->commandPool)); - value->commandPool = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->level)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->commandBufferCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->protectedNoFault)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferInheritanceInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceQueueInfo2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCommandBufferInheritanceInfo* value = wrapper->decoded_value; + VkDeviceQueueInfo2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->renderPass)); - value->renderPass = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpass)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->framebuffer)); - value->framebuffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->occlusionQueryEnable)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->queryFlags)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineStatistics)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferBeginInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkProtectedSubmitInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCommandBufferBeginInfo* value = wrapper->decoded_value; + VkProtectedSubmitInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - wrapper->pInheritanceInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pInheritanceInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pInheritanceInfo = wrapper->pInheritanceInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->protectedSubmit)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferCopy* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindImagePlaneMemoryInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBufferCopy* value = wrapper->decoded_value; + VkBindImagePlaneMemoryInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcOffset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstOffset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->planeAspect)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageSubresourceLayers* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImagePlaneMemoryRequirementsInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageSubresourceLayers* value = wrapper->decoded_value; + VkImagePlaneMemoryRequirementsInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mipLevel)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseArrayLayer)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layerCount)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->planeAspect)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferImageCopy* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalMemoryProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBufferImageCopy* value = wrapper->decoded_value; + VkExternalMemoryProperties* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferRowLength)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferImageHeight)); - wrapper->imageSubresource = DecodeAllocator::Allocate(); - wrapper->imageSubresource->decoded_value = &(value->imageSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageSubresource); - wrapper->imageOffset = DecodeAllocator::Allocate(); - wrapper->imageOffset->decoded_value = &(value->imageOffset); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageOffset); - wrapper->imageExtent = DecodeAllocator::Allocate(); - wrapper->imageExtent->decoded_value = &(value->imageExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageExtent); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalMemoryFeatures)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->exportFromImportedHandleTypes)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compatibleHandleTypes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkClearDepthStencilValue* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalImageFormatInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkClearDepthStencilValue* value = wrapper->decoded_value; + VkPhysicalDeviceExternalImageFormatInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depth)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencil)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkClearAttachment* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalImageFormatProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkClearAttachment* value = wrapper->decoded_value; + VkExternalImageFormatProperties* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachment)); - wrapper->clearValue = DecodeAllocator::Allocate(); - wrapper->clearValue->decoded_value = &(value->clearValue); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->clearValue); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->externalMemoryProperties = DecodeAllocator::Allocate(); + wrapper->externalMemoryProperties->decoded_value = &(value->externalMemoryProperties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->externalMemoryProperties); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkClearRect* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalBufferInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkClearRect* value = wrapper->decoded_value; + VkPhysicalDeviceExternalBufferInfo* value = wrapper->decoded_value; - wrapper->rect = DecodeAllocator::Allocate(); - wrapper->rect->decoded_value = &(value->rect); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->rect); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseArrayLayer)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layerCount)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageBlit* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalBufferProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageBlit* value = wrapper->decoded_value; + VkExternalBufferProperties* value = wrapper->decoded_value; - wrapper->srcSubresource = DecodeAllocator::Allocate(); - wrapper->srcSubresource->decoded_value = &(value->srcSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcSubresource); - wrapper->srcOffsets = DecodeAllocator::Allocate>(); - wrapper->srcOffsets->SetExternalMemory(value->srcOffsets, 2); - bytes_read += wrapper->srcOffsets->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->dstSubresource = DecodeAllocator::Allocate(); - wrapper->dstSubresource->decoded_value = &(value->dstSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstSubresource); - wrapper->dstOffsets = DecodeAllocator::Allocate>(); - wrapper->dstOffsets->SetExternalMemory(value->dstOffsets, 2); - bytes_read += wrapper->dstOffsets->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->externalMemoryProperties = DecodeAllocator::Allocate(); + wrapper->externalMemoryProperties->decoded_value = &(value->externalMemoryProperties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->externalMemoryProperties); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageCopy* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceIDProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageCopy* value = wrapper->decoded_value; + VkPhysicalDeviceIDProperties* value = wrapper->decoded_value; - wrapper->srcSubresource = DecodeAllocator::Allocate(); - wrapper->srcSubresource->decoded_value = &(value->srcSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcSubresource); - wrapper->srcOffset = DecodeAllocator::Allocate(); - wrapper->srcOffset->decoded_value = &(value->srcOffset); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcOffset); - wrapper->dstSubresource = DecodeAllocator::Allocate(); - wrapper->dstSubresource->decoded_value = &(value->dstSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstSubresource); - wrapper->dstOffset = DecodeAllocator::Allocate(); - wrapper->dstOffset->decoded_value = &(value->dstOffset); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstOffset); - wrapper->extent = DecodeAllocator::Allocate(); - wrapper->extent->decoded_value = &(value->extent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->deviceUUID.SetExternalMemory(value->deviceUUID, VK_UUID_SIZE); + bytes_read += wrapper->deviceUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->driverUUID.SetExternalMemory(value->driverUUID, VK_UUID_SIZE); + bytes_read += wrapper->driverUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->deviceLUID.SetExternalMemory(value->deviceLUID, VK_LUID_SIZE); + bytes_read += wrapper->deviceLUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceNodeMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceLUIDValid)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageResolve* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalMemoryImageCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageResolve* value = wrapper->decoded_value; + VkExternalMemoryImageCreateInfo* value = wrapper->decoded_value; - wrapper->srcSubresource = DecodeAllocator::Allocate(); - wrapper->srcSubresource->decoded_value = &(value->srcSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcSubresource); - wrapper->srcOffset = DecodeAllocator::Allocate(); - wrapper->srcOffset->decoded_value = &(value->srcOffset); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcOffset); - wrapper->dstSubresource = DecodeAllocator::Allocate(); - wrapper->dstSubresource->decoded_value = &(value->dstSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstSubresource); - wrapper->dstOffset = DecodeAllocator::Allocate(); - wrapper->dstOffset->decoded_value = &(value->dstOffset); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstOffset); - wrapper->extent = DecodeAllocator::Allocate(); - wrapper->extent->decoded_value = &(value->extent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleTypes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassBeginInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalMemoryBufferCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassBeginInfo* value = wrapper->decoded_value; + VkExternalMemoryBufferCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->renderPass)); - value->renderPass = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->framebuffer)); - value->framebuffer = VK_NULL_HANDLE; - wrapper->renderArea = DecodeAllocator::Allocate(); - wrapper->renderArea->decoded_value = &(value->renderArea); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->renderArea); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->clearValueCount)); - wrapper->pClearValues = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pClearValues->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pClearValues = wrapper->pClearValues->GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleTypes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSubgroupProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportMemoryAllocateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSubgroupProperties* value = wrapper->decoded_value; + VkExportMemoryAllocateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupSize)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedStages)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedOperations)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->quadOperationsInAllStages)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleTypes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindBufferMemoryInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalFenceInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindBufferMemoryInfo* value = wrapper->decoded_value; + VkPhysicalDeviceExternalFenceInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); - value->buffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryOffset)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindImageMemoryInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalFenceProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindImageMemoryInfo* value = wrapper->decoded_value; + VkExternalFenceProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); - value->image = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryOffset)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->exportFromImportedHandleTypes)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compatibleHandleTypes)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalFenceFeatures)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevice16BitStorageFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportFenceCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevice16BitStorageFeatures* value = wrapper->decoded_value; + VkExportFenceCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageBuffer16BitAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformAndStorageBuffer16BitAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storagePushConstant16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageInputOutput16)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleTypes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryDedicatedRequirements* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportSemaphoreCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryDedicatedRequirements* value = wrapper->decoded_value; + VkExportSemaphoreCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->prefersDedicatedAllocation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->requiresDedicatedAllocation)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleTypes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryDedicatedAllocateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalSemaphoreInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryDedicatedAllocateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceExternalSemaphoreInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); - value->image = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); - value->buffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryAllocateFlagsInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalSemaphoreProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryAllocateFlagsInfo* value = wrapper->decoded_value; + VkExternalSemaphoreProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceMask)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->exportFromImportedHandleTypes)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compatibleHandleTypes)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalSemaphoreFeatures)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupRenderPassBeginInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSubgroupProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceGroupRenderPassBeginInfo* value = wrapper->decoded_value; + VkPhysicalDeviceSubgroupProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceRenderAreaCount)); - wrapper->pDeviceRenderAreas = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDeviceRenderAreas->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDeviceRenderAreas = wrapper->pDeviceRenderAreas->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupSize)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedStages)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedOperations)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->quadOperationsInAllStages)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupCommandBufferBeginInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevice16BitStorageFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceGroupCommandBufferBeginInfo* value = wrapper->decoded_value; + VkPhysicalDevice16BitStorageFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageBuffer16BitAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformAndStorageBuffer16BitAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storagePushConstant16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageInputOutput16)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupSubmitInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVariablePointersFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceGroupSubmitInfo* value = wrapper->decoded_value; + VkPhysicalDeviceVariablePointersFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->waitSemaphoreCount)); - bytes_read += wrapper->pWaitSemaphoreDeviceIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pWaitSemaphoreDeviceIndices = wrapper->pWaitSemaphoreDeviceIndices.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->commandBufferCount)); - bytes_read += wrapper->pCommandBufferDeviceMasks.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCommandBufferDeviceMasks = wrapper->pCommandBufferDeviceMasks.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->signalSemaphoreCount)); - bytes_read += wrapper->pSignalSemaphoreDeviceIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSignalSemaphoreDeviceIndices = wrapper->pSignalSemaphoreDeviceIndices.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->variablePointersStorageBuffer)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->variablePointers)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupBindSparseInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorUpdateTemplateEntry* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceGroupBindSparseInfo* value = wrapper->decoded_value; + VkDescriptorUpdateTemplateEntry* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->resourceDeviceIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryDeviceIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstBinding)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstArrayElement)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorCount)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorType)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stride)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindBufferMemoryDeviceGroupInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorUpdateTemplateCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindBufferMemoryDeviceGroupInfo* value = wrapper->decoded_value; + VkDescriptorUpdateTemplateCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceIndexCount)); - bytes_read += wrapper->pDeviceIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDeviceIndices = wrapper->pDeviceIndices.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorUpdateEntryCount)); + wrapper->pDescriptorUpdateEntries = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDescriptorUpdateEntries->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDescriptorUpdateEntries = wrapper->pDescriptorUpdateEntries->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->templateType)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->descriptorSetLayout)); + value->descriptorSetLayout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBindPoint)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipelineLayout)); + value->pipelineLayout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->set)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindImageMemoryDeviceGroupInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance3Properties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindImageMemoryDeviceGroupInfo* value = wrapper->decoded_value; + VkPhysicalDeviceMaintenance3Properties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceIndexCount)); - bytes_read += wrapper->pDeviceIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDeviceIndices = wrapper->pDeviceIndices.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->splitInstanceBindRegionCount)); - wrapper->pSplitInstanceBindRegions = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSplitInstanceBindRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSplitInstanceBindRegions = wrapper->pSplitInstanceBindRegions->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerSetDescriptors)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMemoryAllocationSize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceGroupProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutSupport* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceGroupProperties* value = wrapper->decoded_value; + VkDescriptorSetLayoutSupport* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->physicalDeviceCount)); - wrapper->physicalDevices.SetExternalMemory(value->physicalDevices, VK_MAX_DEVICE_GROUP_SIZE); - bytes_read += wrapper->physicalDevices.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subsetAllocation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->supported)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupDeviceCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerYcbcrConversionCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceGroupDeviceCreateInfo* value = wrapper->decoded_value; + VkSamplerYcbcrConversionCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->physicalDeviceCount)); - bytes_read += wrapper->pPhysicalDevices.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPhysicalDevices = nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->ycbcrModel)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->ycbcrRange)); + wrapper->components = DecodeAllocator::Allocate(); + wrapper->components->decoded_value = &(value->components); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->components); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->xChromaOffset)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->yChromaOffset)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->chromaFilter)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->forceExplicitReconstruction)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferMemoryRequirementsInfo2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerYcbcrConversionInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBufferMemoryRequirementsInfo2* value = wrapper->decoded_value; + VkSamplerYcbcrConversionInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); - value->buffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->conversion)); + value->conversion = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageMemoryRequirementsInfo2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageMemoryRequirementsInfo2* value = wrapper->decoded_value; + VkPhysicalDeviceSamplerYcbcrConversionFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); - value->image = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerYcbcrConversion)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageSparseMemoryRequirementsInfo2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerYcbcrConversionImageFormatProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageSparseMemoryRequirementsInfo2* value = wrapper->decoded_value; + VkSamplerYcbcrConversionImageFormatProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); - value->image = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->combinedImageSamplerDescriptorCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryRequirements2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupRenderPassBeginInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryRequirements2* value = wrapper->decoded_value; + VkDeviceGroupRenderPassBeginInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->memoryRequirements = DecodeAllocator::Allocate(); - wrapper->memoryRequirements->decoded_value = &(value->memoryRequirements); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->memoryRequirements); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceRenderAreaCount)); + wrapper->pDeviceRenderAreas = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDeviceRenderAreas->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDeviceRenderAreas = wrapper->pDeviceRenderAreas->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseImageMemoryRequirements2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePointClippingProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSparseImageMemoryRequirements2* value = wrapper->decoded_value; + VkPhysicalDevicePointClippingProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->memoryRequirements = DecodeAllocator::Allocate(); - wrapper->memoryRequirements->decoded_value = &(value->memoryRequirements); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->memoryRequirements); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pointClippingBehavior)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFeatures2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkInputAttachmentAspectReference* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFeatures2* value = wrapper->decoded_value; + VkInputAttachmentAspectReference* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->features = DecodeAllocator::Allocate(); - wrapper->features->decoded_value = &(value->features); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->features); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpass)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputAttachmentIndex)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectMask)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceProperties2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassInputAttachmentAspectCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceProperties2* value = wrapper->decoded_value; + VkRenderPassInputAttachmentAspectCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->properties = DecodeAllocator::Allocate(); - wrapper->properties->decoded_value = &(value->properties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->properties); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectReferenceCount)); + wrapper->pAspectReferences = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pAspectReferences->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAspectReferences = wrapper->pAspectReferences->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFormatProperties2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineTessellationDomainOriginStateCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkFormatProperties2* value = wrapper->decoded_value; + VkPipelineTessellationDomainOriginStateCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->formatProperties = DecodeAllocator::Allocate(); - wrapper->formatProperties->decoded_value = &(value->formatProperties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->formatProperties); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->domainOrigin)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageFormatProperties2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassMultiviewCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageFormatProperties2* value = wrapper->decoded_value; + VkRenderPassMultiviewCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->imageFormatProperties = DecodeAllocator::Allocate(); - wrapper->imageFormatProperties->decoded_value = &(value->imageFormatProperties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageFormatProperties); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpassCount)); + bytes_read += wrapper->pViewMasks.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pViewMasks = wrapper->pViewMasks.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dependencyCount)); + bytes_read += wrapper->pViewOffsets.DecodeInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pViewOffsets = wrapper->pViewOffsets.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->correlationMaskCount)); + bytes_read += wrapper->pCorrelationMasks.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCorrelationMasks = wrapper->pCorrelationMasks.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageFormatInfo2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiviewFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceImageFormatInfo2* value = wrapper->decoded_value; + VkPhysicalDeviceMultiviewFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tiling)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiview)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiviewGeometryShader)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiviewTessellationShader)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyProperties2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiviewProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkQueueFamilyProperties2* value = wrapper->decoded_value; + VkPhysicalDeviceMultiviewProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->queueFamilyProperties = DecodeAllocator::Allocate(); - wrapper->queueFamilyProperties->decoded_value = &(value->queueFamilyProperties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->queueFamilyProperties); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMultiviewViewCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMultiviewInstanceIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMemoryProperties2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderDrawParametersFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMemoryProperties2* value = wrapper->decoded_value; + VkPhysicalDeviceShaderDrawParametersFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->memoryProperties = DecodeAllocator::Allocate(); - wrapper->memoryProperties->decoded_value = &(value->memoryProperties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->memoryProperties); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDrawParameters)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSparseImageFormatProperties2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan11Features* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSparseImageFormatProperties2* value = wrapper->decoded_value; + VkPhysicalDeviceVulkan11Features* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->properties = DecodeAllocator::Allocate(); - wrapper->properties->decoded_value = &(value->properties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->properties); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageBuffer16BitAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformAndStorageBuffer16BitAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storagePushConstant16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageInputOutput16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiview)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiviewGeometryShader)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiviewTessellationShader)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->variablePointersStorageBuffer)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->variablePointers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->protectedMemory)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerYcbcrConversion)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDrawParameters)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSparseImageFormatInfo2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan11Properties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSparseImageFormatInfo2* value = wrapper->decoded_value; + VkPhysicalDeviceVulkan11Properties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->samples)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tiling)); + wrapper->deviceUUID.SetExternalMemory(value->deviceUUID, VK_UUID_SIZE); + bytes_read += wrapper->deviceUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->driverUUID.SetExternalMemory(value->driverUUID, VK_UUID_SIZE); + bytes_read += wrapper->driverUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->deviceLUID.SetExternalMemory(value->deviceLUID, VK_LUID_SIZE); + bytes_read += wrapper->deviceLUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceNodeMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceLUIDValid)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupSize)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupSupportedStages)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupSupportedOperations)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupQuadOperationsInAllStages)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pointClippingBehavior)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMultiviewViewCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMultiviewInstanceIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->protectedNoFault)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerSetDescriptors)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMemoryAllocationSize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePointClippingProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan12Features* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePointClippingProperties* value = wrapper->decoded_value; + VkPhysicalDeviceVulkan12Features* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pointClippingBehavior)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerMirrorClampToEdge)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drawIndirectCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageBuffer8BitAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformAndStorageBuffer8BitAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storagePushConstant8)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferInt64Atomics)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedInt64Atomics)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderFloat16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInt8)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInputAttachmentArrayDynamicIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformTexelBufferArrayDynamicIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageTexelBufferArrayDynamicIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformBufferArrayNonUniformIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSampledImageArrayNonUniformIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageBufferArrayNonUniformIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageArrayNonUniformIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInputAttachmentArrayNonUniformIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformTexelBufferArrayNonUniformIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageTexelBufferArrayNonUniformIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingUniformBufferUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingSampledImageUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingStorageImageUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingStorageBufferUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingUniformTexelBufferUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingStorageTexelBufferUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingUpdateUnusedWhilePending)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingPartiallyBound)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingVariableDescriptorCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->runtimeDescriptorArray)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerFilterMinmax)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->scalarBlockLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imagelessFramebuffer)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformBufferStandardLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupExtendedTypes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->separateDepthStencilLayouts)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hostQueryReset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timelineSemaphore)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddress)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddressCaptureReplay)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddressMultiDevice)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vulkanMemoryModel)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vulkanMemoryModelDeviceScope)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vulkanMemoryModelAvailabilityVisibilityChains)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderOutputViewportIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderOutputLayer)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupBroadcastDynamicId)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkInputAttachmentAspectReference* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkConformanceVersion* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkInputAttachmentAspectReference* value = wrapper->decoded_value; + VkConformanceVersion* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpass)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputAttachmentIndex)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectMask)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->major)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minor)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subminor)); + bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->patch)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassInputAttachmentAspectCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan12Properties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassInputAttachmentAspectCreateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceVulkan12Properties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectReferenceCount)); - wrapper->pAspectReferences = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pAspectReferences->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAspectReferences = wrapper->pAspectReferences->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->driverID)); + wrapper->driverName.SetExternalMemory(value->driverName, VK_MAX_DRIVER_NAME_SIZE); + bytes_read += wrapper->driverName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->driverInfo.SetExternalMemory(value->driverInfo, VK_MAX_DRIVER_INFO_SIZE); + bytes_read += wrapper->driverInfo.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->conformanceVersion = DecodeAllocator::Allocate(); + wrapper->conformanceVersion->decoded_value = &(value->conformanceVersion); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->conformanceVersion); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->denormBehaviorIndependence)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->roundingModeIndependence)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSignedZeroInfNanPreserveFloat16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSignedZeroInfNanPreserveFloat32)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSignedZeroInfNanPreserveFloat64)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormPreserveFloat16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormPreserveFloat32)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormPreserveFloat64)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormFlushToZeroFloat16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormFlushToZeroFloat32)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormFlushToZeroFloat64)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTEFloat16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTEFloat32)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTEFloat64)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTZFloat16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTZFloat32)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTZFloat64)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxUpdateAfterBindDescriptorsInAllPools)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformBufferArrayNonUniformIndexingNative)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSampledImageArrayNonUniformIndexingNative)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageBufferArrayNonUniformIndexingNative)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageArrayNonUniformIndexingNative)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInputAttachmentArrayNonUniformIndexingNative)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustBufferAccessUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->quadDivergentImplicitLod)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindSamplers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindUniformBuffers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindStorageBuffers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindSampledImages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindStorageImages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindInputAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageUpdateAfterBindResources)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindSamplers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindUniformBuffers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindStorageBuffers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindSampledImages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindStorageImages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindInputAttachments)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedDepthResolveModes)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedStencilResolveModes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->independentResolveNone)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->independentResolve)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->filterMinmaxSingleComponentFormats)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->filterMinmaxImageComponentMapping)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTimelineSemaphoreValueDifference)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->framebufferIntegerColorSampleCounts)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewUsageCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageFormatListCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageViewUsageCreateInfo* value = wrapper->decoded_value; + VkImageFormatListCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewFormatCount)); + bytes_read += wrapper->pViewFormats.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pViewFormats = wrapper->pViewFormats.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineTessellationDomainOriginStateCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDriverProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineTessellationDomainOriginStateCreateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceDriverProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->domainOrigin)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->driverID)); + wrapper->driverName.SetExternalMemory(value->driverName, VK_MAX_DRIVER_NAME_SIZE); + bytes_read += wrapper->driverName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->driverInfo.SetExternalMemory(value->driverInfo, VK_MAX_DRIVER_INFO_SIZE); + bytes_read += wrapper->driverInfo.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->conformanceVersion = DecodeAllocator::Allocate(); + wrapper->conformanceVersion->decoded_value = &(value->conformanceVersion); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->conformanceVersion); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassMultiviewCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassMultiviewCreateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceVulkanMemoryModelFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpassCount)); - bytes_read += wrapper->pViewMasks.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pViewMasks = wrapper->pViewMasks.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dependencyCount)); - bytes_read += wrapper->pViewOffsets.DecodeInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pViewOffsets = wrapper->pViewOffsets.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->correlationMaskCount)); - bytes_read += wrapper->pCorrelationMasks.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCorrelationMasks = wrapper->pCorrelationMasks.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vulkanMemoryModel)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vulkanMemoryModelDeviceScope)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vulkanMemoryModelAvailabilityVisibilityChains)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiviewFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceHostQueryResetFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMultiviewFeatures* value = wrapper->decoded_value; + VkPhysicalDeviceHostQueryResetFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiview)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiviewGeometryShader)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiviewTessellationShader)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hostQueryReset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiviewProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMultiviewProperties* value = wrapper->decoded_value; + VkPhysicalDeviceTimelineSemaphoreFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMultiviewViewCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMultiviewInstanceIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timelineSemaphore)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVariablePointersFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTimelineSemaphoreProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVariablePointersFeatures* value = wrapper->decoded_value; + VkPhysicalDeviceTimelineSemaphoreProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->variablePointersStorageBuffer)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->variablePointers)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTimelineSemaphoreValueDifference)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceProtectedMemoryFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreTypeCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceProtectedMemoryFeatures* value = wrapper->decoded_value; + VkSemaphoreTypeCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->protectedMemory)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->semaphoreType)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->initialValue)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceProtectedMemoryProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTimelineSemaphoreSubmitInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceProtectedMemoryProperties* value = wrapper->decoded_value; + VkTimelineSemaphoreSubmitInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->protectedNoFault)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->waitSemaphoreValueCount)); + bytes_read += wrapper->pWaitSemaphoreValues.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pWaitSemaphoreValues = wrapper->pWaitSemaphoreValues.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->signalSemaphoreValueCount)); + bytes_read += wrapper->pSignalSemaphoreValues.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSignalSemaphoreValues = wrapper->pSignalSemaphoreValues.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceQueueInfo2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreWaitInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceQueueInfo2* value = wrapper->decoded_value; + VkSemaphoreWaitInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->semaphoreCount)); + bytes_read += wrapper->pSemaphores.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSemaphores = nullptr; + bytes_read += wrapper->pValues.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pValues = wrapper->pValues.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkProtectedSubmitInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreSignalInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkProtectedSubmitInfo* value = wrapper->decoded_value; + VkSemaphoreSignalInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->protectedSubmit)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); + value->semaphore = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->value)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerYcbcrConversionCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSamplerYcbcrConversionCreateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceBufferDeviceAddressFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->ycbcrModel)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->ycbcrRange)); - wrapper->components = DecodeAllocator::Allocate(); - wrapper->components->decoded_value = &(value->components); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->components); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->xChromaOffset)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->yChromaOffset)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->chromaFilter)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->forceExplicitReconstruction)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddress)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddressCaptureReplay)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddressMultiDevice)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerYcbcrConversionInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferDeviceAddressInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSamplerYcbcrConversionInfo* value = wrapper->decoded_value; + VkBufferDeviceAddressInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->conversion)); - value->conversion = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindImagePlaneMemoryInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferOpaqueCaptureAddressCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindImagePlaneMemoryInfo* value = wrapper->decoded_value; + VkBufferOpaqueCaptureAddressCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->planeAspect)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->opaqueCaptureAddress)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImagePlaneMemoryRequirementsInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImagePlaneMemoryRequirementsInfo* value = wrapper->decoded_value; + VkMemoryOpaqueCaptureAddressAllocateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->planeAspect)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->opaqueCaptureAddress)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSamplerYcbcrConversionFeatures* value = wrapper->decoded_value; + VkDeviceMemoryOpaqueCaptureAddressInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerYcbcrConversion)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerYcbcrConversionImageFormatProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevice8BitStorageFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSamplerYcbcrConversionImageFormatProperties* value = wrapper->decoded_value; + VkPhysicalDevice8BitStorageFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->combinedImageSamplerDescriptorCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageBuffer8BitAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformAndStorageBuffer8BitAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storagePushConstant8)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorUpdateTemplateEntry* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderAtomicInt64Features* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorUpdateTemplateEntry* value = wrapper->decoded_value; + VkPhysicalDeviceShaderAtomicInt64Features* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstBinding)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstArrayElement)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorCount)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorType)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stride)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferInt64Atomics)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedInt64Atomics)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorUpdateTemplateCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderFloat16Int8Features* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorUpdateTemplateCreateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceShaderFloat16Int8Features* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorUpdateEntryCount)); - wrapper->pDescriptorUpdateEntries = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDescriptorUpdateEntries->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDescriptorUpdateEntries = wrapper->pDescriptorUpdateEntries->GetPointer(); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->templateType)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->descriptorSetLayout)); - value->descriptorSetLayout = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBindPoint)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipelineLayout)); - value->pipelineLayout = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->set)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderFloat16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInt8)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalMemoryProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFloatControlsProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExternalMemoryProperties* value = wrapper->decoded_value; + VkPhysicalDeviceFloatControlsProperties* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalMemoryFeatures)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->exportFromImportedHandleTypes)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compatibleHandleTypes)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->denormBehaviorIndependence)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->roundingModeIndependence)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSignedZeroInfNanPreserveFloat16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSignedZeroInfNanPreserveFloat32)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSignedZeroInfNanPreserveFloat64)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormPreserveFloat16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormPreserveFloat32)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormPreserveFloat64)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormFlushToZeroFloat16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormFlushToZeroFloat32)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormFlushToZeroFloat64)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTEFloat16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTEFloat32)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTEFloat64)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTZFloat16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTZFloat32)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTZFloat64)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalImageFormatInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutBindingFlagsCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExternalImageFormatInfo* value = wrapper->decoded_value; + VkDescriptorSetLayoutBindingFlagsCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindingCount)); + bytes_read += wrapper->pBindingFlags.DecodeFlags((buffer + bytes_read), (buffer_size - bytes_read)); + value->pBindingFlags = wrapper->pBindingFlags.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalImageFormatProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDescriptorIndexingFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExternalImageFormatProperties* value = wrapper->decoded_value; + VkPhysicalDeviceDescriptorIndexingFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->externalMemoryProperties = DecodeAllocator::Allocate(); - wrapper->externalMemoryProperties->decoded_value = &(value->externalMemoryProperties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->externalMemoryProperties); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInputAttachmentArrayDynamicIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformTexelBufferArrayDynamicIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageTexelBufferArrayDynamicIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformBufferArrayNonUniformIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSampledImageArrayNonUniformIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageBufferArrayNonUniformIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageArrayNonUniformIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInputAttachmentArrayNonUniformIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformTexelBufferArrayNonUniformIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageTexelBufferArrayNonUniformIndexing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingUniformBufferUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingSampledImageUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingStorageImageUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingStorageBufferUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingUniformTexelBufferUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingStorageTexelBufferUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingUpdateUnusedWhilePending)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingPartiallyBound)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingVariableDescriptorCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->runtimeDescriptorArray)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalBufferInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDescriptorIndexingProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExternalBufferInfo* value = wrapper->decoded_value; + VkPhysicalDeviceDescriptorIndexingProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxUpdateAfterBindDescriptorsInAllPools)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformBufferArrayNonUniformIndexingNative)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSampledImageArrayNonUniformIndexingNative)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageBufferArrayNonUniformIndexingNative)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageArrayNonUniformIndexingNative)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInputAttachmentArrayNonUniformIndexingNative)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustBufferAccessUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->quadDivergentImplicitLod)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindSamplers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindUniformBuffers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindStorageBuffers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindSampledImages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindStorageImages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindInputAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageUpdateAfterBindResources)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindSamplers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindUniformBuffers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindStorageBuffers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindSampledImages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindStorageImages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindInputAttachments)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalBufferProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetVariableDescriptorCountAllocateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExternalBufferProperties* value = wrapper->decoded_value; + VkDescriptorSetVariableDescriptorCountAllocateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->externalMemoryProperties = DecodeAllocator::Allocate(); - wrapper->externalMemoryProperties->decoded_value = &(value->externalMemoryProperties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->externalMemoryProperties); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorSetCount)); + bytes_read += wrapper->pDescriptorCounts.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDescriptorCounts = wrapper->pDescriptorCounts.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceIDProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetVariableDescriptorCountLayoutSupport* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceIDProperties* value = wrapper->decoded_value; + VkDescriptorSetVariableDescriptorCountLayoutSupport* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->deviceUUID.SetExternalMemory(value->deviceUUID, VK_UUID_SIZE); - bytes_read += wrapper->deviceUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->driverUUID.SetExternalMemory(value->driverUUID, VK_UUID_SIZE); - bytes_read += wrapper->driverUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->deviceLUID.SetExternalMemory(value->deviceLUID, VK_LUID_SIZE); - bytes_read += wrapper->deviceLUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceNodeMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceLUIDValid)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVariableDescriptorCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalMemoryImageCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceScalarBlockLayoutFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExternalMemoryImageCreateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceScalarBlockLayoutFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleTypes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->scalarBlockLayout)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalMemoryBufferCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerReductionModeCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExternalMemoryBufferCreateInfo* value = wrapper->decoded_value; + VkSamplerReductionModeCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleTypes)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->reductionMode)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportMemoryAllocateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSamplerFilterMinmaxProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExportMemoryAllocateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceSamplerFilterMinmaxProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleTypes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->filterMinmaxSingleComponentFormats)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->filterMinmaxImageComponentMapping)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalFenceInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExternalFenceInfo* value = wrapper->decoded_value; + VkPhysicalDeviceUniformBufferStandardLayoutFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformBufferStandardLayout)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalFenceProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExternalFenceProperties* value = wrapper->decoded_value; + VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->exportFromImportedHandleTypes)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compatibleHandleTypes)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalFenceFeatures)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupExtendedTypes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportFenceCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentDescription2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExportFenceCreateInfo* value = wrapper->decoded_value; + VkAttachmentDescription2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleTypes)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->samples)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->loadOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storeOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilLoadOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilStoreOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->initialLayout)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->finalLayout)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportSemaphoreCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentReference2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExportSemaphoreCreateInfo* value = wrapper->decoded_value; + VkAttachmentReference2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleTypes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachment)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->layout)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectMask)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalSemaphoreInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassDescription2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExternalSemaphoreInfo* value = wrapper->decoded_value; + VkSubpassDescription2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBindPoint)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputAttachmentCount)); + wrapper->pInputAttachments = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pInputAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pInputAttachments = wrapper->pInputAttachments->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); + wrapper->pColorAttachments = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pColorAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pColorAttachments = wrapper->pColorAttachments->GetPointer(); + wrapper->pResolveAttachments = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pResolveAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pResolveAttachments = wrapper->pResolveAttachments->GetPointer(); + wrapper->pDepthStencilAttachment = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDepthStencilAttachment->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDepthStencilAttachment = wrapper->pDepthStencilAttachment->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preserveAttachmentCount)); + bytes_read += wrapper->pPreserveAttachments.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPreserveAttachments = wrapper->pPreserveAttachments.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalSemaphoreProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassDependency2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExternalSemaphoreProperties* value = wrapper->decoded_value; + VkSubpassDependency2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->exportFromImportedHandleTypes)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compatibleHandleTypes)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalSemaphoreFeatures)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcSubpass)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstSubpass)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcStageMask)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstStageMask)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dependencyFlags)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewOffset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance3Properties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassCreateInfo2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMaintenance3Properties* value = wrapper->decoded_value; + VkRenderPassCreateInfo2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerSetDescriptors)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMemoryAllocationSize)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentCount)); + wrapper->pAttachments = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAttachments = wrapper->pAttachments->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpassCount)); + wrapper->pSubpasses = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSubpasses->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSubpasses = wrapper->pSubpasses->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dependencyCount)); + wrapper->pDependencies = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDependencies->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDependencies = wrapper->pDependencies->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->correlatedViewMaskCount)); + bytes_read += wrapper->pCorrelatedViewMasks.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCorrelatedViewMasks = wrapper->pCorrelatedViewMasks.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutSupport* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassBeginInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorSetLayoutSupport* value = wrapper->decoded_value; + VkSubpassBeginInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->supported)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->contents)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderDrawParametersFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassEndInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderDrawParametersFeatures* value = wrapper->decoded_value; + VkSubpassEndInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDrawParameters)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan11Features* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassDescriptionDepthStencilResolve* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVulkan11Features* value = wrapper->decoded_value; + VkSubpassDescriptionDepthStencilResolve* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageBuffer16BitAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformAndStorageBuffer16BitAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storagePushConstant16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageInputOutput16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiview)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiviewGeometryShader)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiviewTessellationShader)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->variablePointersStorageBuffer)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->variablePointers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->protectedMemory)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerYcbcrConversion)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDrawParameters)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthResolveMode)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilResolveMode)); + wrapper->pDepthStencilResolveAttachment = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDepthStencilResolveAttachment->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDepthStencilResolveAttachment = wrapper->pDepthStencilResolveAttachment->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan11Properties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthStencilResolveProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVulkan11Properties* value = wrapper->decoded_value; + VkPhysicalDeviceDepthStencilResolveProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->deviceUUID.SetExternalMemory(value->deviceUUID, VK_UUID_SIZE); - bytes_read += wrapper->deviceUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->driverUUID.SetExternalMemory(value->driverUUID, VK_UUID_SIZE); - bytes_read += wrapper->driverUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->deviceLUID.SetExternalMemory(value->deviceLUID, VK_LUID_SIZE); - bytes_read += wrapper->deviceLUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceNodeMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceLUIDValid)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupSize)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupSupportedStages)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupSupportedOperations)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupQuadOperationsInAllStages)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pointClippingBehavior)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMultiviewViewCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMultiviewInstanceIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->protectedNoFault)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerSetDescriptors)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMemoryAllocationSize)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedDepthResolveModes)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedStencilResolveModes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->independentResolveNone)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->independentResolve)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan12Features* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageStencilUsageCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVulkan12Features* value = wrapper->decoded_value; + VkImageStencilUsageCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerMirrorClampToEdge)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drawIndirectCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageBuffer8BitAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformAndStorageBuffer8BitAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storagePushConstant8)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferInt64Atomics)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedInt64Atomics)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderFloat16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInt8)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInputAttachmentArrayDynamicIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformTexelBufferArrayDynamicIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageTexelBufferArrayDynamicIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformBufferArrayNonUniformIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSampledImageArrayNonUniformIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageBufferArrayNonUniformIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageArrayNonUniformIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInputAttachmentArrayNonUniformIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformTexelBufferArrayNonUniformIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageTexelBufferArrayNonUniformIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingUniformBufferUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingSampledImageUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingStorageImageUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingStorageBufferUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingUniformTexelBufferUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingStorageTexelBufferUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingUpdateUnusedWhilePending)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingPartiallyBound)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingVariableDescriptorCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->runtimeDescriptorArray)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerFilterMinmax)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->scalarBlockLayout)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imagelessFramebuffer)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformBufferStandardLayout)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupExtendedTypes)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->separateDepthStencilLayouts)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hostQueryReset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timelineSemaphore)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddress)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddressCaptureReplay)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddressMultiDevice)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vulkanMemoryModel)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vulkanMemoryModelDeviceScope)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vulkanMemoryModelAvailabilityVisibilityChains)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderOutputViewportIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderOutputLayer)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupBroadcastDynamicId)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilUsage)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkConformanceVersion* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImagelessFramebufferFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkConformanceVersion* value = wrapper->decoded_value; + VkPhysicalDeviceImagelessFramebufferFeatures* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->major)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minor)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subminor)); - bytes_read += ValueDecoder::DecodeUInt8Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->patch)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imagelessFramebuffer)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan12Properties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFramebufferAttachmentImageInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVulkan12Properties* value = wrapper->decoded_value; + VkFramebufferAttachmentImageInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->driverID)); - wrapper->driverName.SetExternalMemory(value->driverName, VK_MAX_DRIVER_NAME_SIZE); - bytes_read += wrapper->driverName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->driverInfo.SetExternalMemory(value->driverInfo, VK_MAX_DRIVER_INFO_SIZE); - bytes_read += wrapper->driverInfo.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->conformanceVersion = DecodeAllocator::Allocate(); - wrapper->conformanceVersion->decoded_value = &(value->conformanceVersion); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->conformanceVersion); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->denormBehaviorIndependence)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->roundingModeIndependence)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSignedZeroInfNanPreserveFloat16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSignedZeroInfNanPreserveFloat32)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSignedZeroInfNanPreserveFloat64)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormPreserveFloat16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormPreserveFloat32)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormPreserveFloat64)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormFlushToZeroFloat16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormFlushToZeroFloat32)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormFlushToZeroFloat64)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTEFloat16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTEFloat32)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTEFloat64)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTZFloat16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTZFloat32)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTZFloat64)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxUpdateAfterBindDescriptorsInAllPools)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformBufferArrayNonUniformIndexingNative)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSampledImageArrayNonUniformIndexingNative)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageBufferArrayNonUniformIndexingNative)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageArrayNonUniformIndexingNative)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInputAttachmentArrayNonUniformIndexingNative)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustBufferAccessUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->quadDivergentImplicitLod)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindSamplers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindUniformBuffers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindStorageBuffers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindSampledImages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindStorageImages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindInputAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageUpdateAfterBindResources)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindSamplers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindUniformBuffers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindStorageBuffers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindSampledImages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindStorageImages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindInputAttachments)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedDepthResolveModes)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedStencilResolveModes)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->independentResolveNone)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->independentResolve)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->filterMinmaxSingleComponentFormats)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->filterMinmaxImageComponentMapping)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTimelineSemaphoreValueDifference)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->framebufferIntegerColorSampleCounts)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->width)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->height)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layerCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewFormatCount)); + bytes_read += wrapper->pViewFormats.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pViewFormats = wrapper->pViewFormats.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageFormatListCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFramebufferAttachmentsCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageFormatListCreateInfo* value = wrapper->decoded_value; + VkFramebufferAttachmentsCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewFormatCount)); - bytes_read += wrapper->pViewFormats.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pViewFormats = wrapper->pViewFormats.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentImageInfoCount)); + wrapper->pAttachmentImageInfos = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pAttachmentImageInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAttachmentImageInfos = wrapper->pAttachmentImageInfos->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentDescription2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassAttachmentBeginInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAttachmentDescription2* value = wrapper->decoded_value; + VkRenderPassAttachmentBeginInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->samples)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->loadOp)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storeOp)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilLoadOp)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilStoreOp)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->initialLayout)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->finalLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentCount)); + bytes_read += wrapper->pAttachments.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAttachments = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentReference2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAttachmentReference2* value = wrapper->decoded_value; + VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachment)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->layout)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->aspectMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->separateDepthStencilLayouts)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassDescription2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentReferenceStencilLayout* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSubpassDescription2* value = wrapper->decoded_value; + VkAttachmentReferenceStencilLayout* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBindPoint)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputAttachmentCount)); - wrapper->pInputAttachments = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pInputAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pInputAttachments = wrapper->pInputAttachments->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); - wrapper->pColorAttachments = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pColorAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pColorAttachments = wrapper->pColorAttachments->GetPointer(); - wrapper->pResolveAttachments = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pResolveAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pResolveAttachments = wrapper->pResolveAttachments->GetPointer(); - wrapper->pDepthStencilAttachment = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDepthStencilAttachment->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDepthStencilAttachment = wrapper->pDepthStencilAttachment->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preserveAttachmentCount)); - bytes_read += wrapper->pPreserveAttachments.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPreserveAttachments = wrapper->pPreserveAttachments.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilLayout)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassDependency2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentDescriptionStencilLayout* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSubpassDependency2* value = wrapper->decoded_value; + VkAttachmentDescriptionStencilLayout* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcSubpass)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstSubpass)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcStageMask)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstStageMask)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dependencyFlags)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewOffset)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilInitialLayout)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilFinalLayout)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassCreateInfo2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan13Features* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassCreateInfo2* value = wrapper->decoded_value; + VkPhysicalDeviceVulkan13Features* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentCount)); - wrapper->pAttachments = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAttachments = wrapper->pAttachments->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpassCount)); - wrapper->pSubpasses = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSubpasses->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSubpasses = wrapper->pSubpasses->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dependencyCount)); - wrapper->pDependencies = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDependencies->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDependencies = wrapper->pDependencies->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->correlatedViewMaskCount)); - bytes_read += wrapper->pCorrelatedViewMasks.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCorrelatedViewMasks = wrapper->pCorrelatedViewMasks.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustImageAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inlineUniformBlock)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingInlineUniformBlockUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineCreationCacheControl)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->privateData)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDemoteToHelperInvocation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTerminateInvocation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupSizeControl)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->computeFullSubgroups)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->synchronization2)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureCompressionASTC_HDR)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderZeroInitializeWorkgroupMemory)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicRendering)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderIntegerDotProduct)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance4)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassBeginInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan13Properties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSubpassBeginInfo* value = wrapper->decoded_value; + VkPhysicalDeviceVulkan13Properties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->contents)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minSubgroupSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSubgroupSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxComputeWorkgroupSubgroups)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->requiredSubgroupSizeStages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxInlineUniformBlockSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorInlineUniformBlocks)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetInlineUniformBlocks)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindInlineUniformBlocks)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxInlineUniformTotalSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct8BitUnsignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct8BitSignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct8BitMixedSignednessAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct4x8BitPackedUnsignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct4x8BitPackedSignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct4x8BitPackedMixedSignednessAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct16BitUnsignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct16BitSignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct16BitMixedSignednessAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct32BitUnsignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct32BitSignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct32BitMixedSignednessAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct64BitUnsignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct64BitSignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct64BitMixedSignednessAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating8BitUnsignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating8BitSignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating16BitUnsignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating16BitSignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating32BitUnsignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating32BitSignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating64BitUnsignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating64BitSignedAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageTexelBufferOffsetAlignmentBytes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageTexelBufferOffsetSingleTexelAlignment)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformTexelBufferOffsetAlignmentBytes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformTexelBufferOffsetSingleTexelAlignment)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBufferSize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassEndInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceToolProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSubpassEndInfo* value = wrapper->decoded_value; + VkPhysicalDeviceToolProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->name.SetExternalMemory(value->name, VK_MAX_EXTENSION_NAME_SIZE); + bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->version.SetExternalMemory(value->version, VK_MAX_EXTENSION_NAME_SIZE); + bytes_read += wrapper->version.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->purposes)); + wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); + bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->layer.SetExternalMemory(value->layer, VK_MAX_EXTENSION_NAME_SIZE); + bytes_read += wrapper->layer.Decode((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevice8BitStorageFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePrivateDataFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevice8BitStorageFeatures* value = wrapper->decoded_value; + VkPhysicalDevicePrivateDataFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageBuffer8BitAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformAndStorageBuffer8BitAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storagePushConstant8)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->privateData)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDriverProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDevicePrivateDataCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDriverProperties* value = wrapper->decoded_value; + VkDevicePrivateDataCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->driverID)); - wrapper->driverName.SetExternalMemory(value->driverName, VK_MAX_DRIVER_NAME_SIZE); - bytes_read += wrapper->driverName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->driverInfo.SetExternalMemory(value->driverInfo, VK_MAX_DRIVER_INFO_SIZE); - bytes_read += wrapper->driverInfo.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->conformanceVersion = DecodeAllocator::Allocate(); - wrapper->conformanceVersion->decoded_value = &(value->conformanceVersion); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->conformanceVersion); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->privateDataSlotRequestCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderAtomicInt64Features* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPrivateDataSlotCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderAtomicInt64Features* value = wrapper->decoded_value; + VkPrivateDataSlotCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferInt64Atomics)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedInt64Atomics)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderFloat16Int8Features* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryBarrier2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderFloat16Int8Features* value = wrapper->decoded_value; + VkMemoryBarrier2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderFloat16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInt8)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcStageMask)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstStageMask)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFloatControlsProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferMemoryBarrier2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFloatControlsProperties* value = wrapper->decoded_value; + VkBufferMemoryBarrier2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->denormBehaviorIndependence)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->roundingModeIndependence)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSignedZeroInfNanPreserveFloat16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSignedZeroInfNanPreserveFloat32)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSignedZeroInfNanPreserveFloat64)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormPreserveFloat16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormPreserveFloat32)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormPreserveFloat64)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormFlushToZeroFloat16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormFlushToZeroFloat32)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDenormFlushToZeroFloat64)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTEFloat16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTEFloat32)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTEFloat64)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTZFloat16)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTZFloat32)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRoundingModeRTZFloat64)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcStageMask)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstStageMask)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcQueueFamilyIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstQueueFamilyIndex)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutBindingFlagsCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageMemoryBarrier2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorSetLayoutBindingFlagsCreateInfo* value = wrapper->decoded_value; + VkImageMemoryBarrier2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindingCount)); - bytes_read += wrapper->pBindingFlags.DecodeFlags((buffer + bytes_read), (buffer_size - bytes_read)); - value->pBindingFlags = wrapper->pBindingFlags.GetPointer(); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcStageMask)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstStageMask)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->oldLayout)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->newLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcQueueFamilyIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstQueueFamilyIndex)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); + value->image = VK_NULL_HANDLE; + wrapper->subresourceRange = DecodeAllocator::Allocate(); + wrapper->subresourceRange->decoded_value = &(value->subresourceRange); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->subresourceRange); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDescriptorIndexingFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDependencyInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDescriptorIndexingFeatures* value = wrapper->decoded_value; + VkDependencyInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInputAttachmentArrayDynamicIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformTexelBufferArrayDynamicIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageTexelBufferArrayDynamicIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformBufferArrayNonUniformIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSampledImageArrayNonUniformIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageBufferArrayNonUniformIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageArrayNonUniformIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInputAttachmentArrayNonUniformIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformTexelBufferArrayNonUniformIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageTexelBufferArrayNonUniformIndexing)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingUniformBufferUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingSampledImageUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingStorageImageUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingStorageBufferUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingUniformTexelBufferUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingStorageTexelBufferUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingUpdateUnusedWhilePending)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingPartiallyBound)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingVariableDescriptorCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->runtimeDescriptorArray)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dependencyFlags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryBarrierCount)); + wrapper->pMemoryBarriers = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pMemoryBarriers->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pMemoryBarriers = wrapper->pMemoryBarriers->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferMemoryBarrierCount)); + wrapper->pBufferMemoryBarriers = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pBufferMemoryBarriers->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pBufferMemoryBarriers = wrapper->pBufferMemoryBarriers->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageMemoryBarrierCount)); + wrapper->pImageMemoryBarriers = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pImageMemoryBarriers->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pImageMemoryBarriers = wrapper->pImageMemoryBarriers->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDescriptorIndexingProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreSubmitInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDescriptorIndexingProperties* value = wrapper->decoded_value; + VkSemaphoreSubmitInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxUpdateAfterBindDescriptorsInAllPools)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformBufferArrayNonUniformIndexingNative)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSampledImageArrayNonUniformIndexingNative)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageBufferArrayNonUniformIndexingNative)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStorageImageArrayNonUniformIndexingNative)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderInputAttachmentArrayNonUniformIndexingNative)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustBufferAccessUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->quadDivergentImplicitLod)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindSamplers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindUniformBuffers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindStorageBuffers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindSampledImages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindStorageImages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindInputAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageUpdateAfterBindResources)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindSamplers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindUniformBuffers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindStorageBuffers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindSampledImages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindStorageImages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindInputAttachments)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); + value->semaphore = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->value)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetVariableDescriptorCountAllocateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferSubmitInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorSetVariableDescriptorCountAllocateInfo* value = wrapper->decoded_value; + VkCommandBufferSubmitInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorSetCount)); - bytes_read += wrapper->pDescriptorCounts.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDescriptorCounts = wrapper->pDescriptorCounts.GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->commandBuffer)); + value->commandBuffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceMask)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetVariableDescriptorCountLayoutSupport* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubmitInfo2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorSetVariableDescriptorCountLayoutSupport* value = wrapper->decoded_value; + VkSubmitInfo2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVariableDescriptorCount)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->waitSemaphoreInfoCount)); + wrapper->pWaitSemaphoreInfos = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pWaitSemaphoreInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pWaitSemaphoreInfos = wrapper->pWaitSemaphoreInfos->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->commandBufferInfoCount)); + wrapper->pCommandBufferInfos = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pCommandBufferInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCommandBufferInfos = wrapper->pCommandBufferInfos->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->signalSemaphoreInfoCount)); + wrapper->pSignalSemaphoreInfos = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSignalSemaphoreInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSignalSemaphoreInfos = wrapper->pSignalSemaphoreInfos->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassDescriptionDepthStencilResolve* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSynchronization2Features* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSubpassDescriptionDepthStencilResolve* value = wrapper->decoded_value; + VkPhysicalDeviceSynchronization2Features* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthResolveMode)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilResolveMode)); - wrapper->pDepthStencilResolveAttachment = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDepthStencilResolveAttachment->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDepthStencilResolveAttachment = wrapper->pDepthStencilResolveAttachment->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->synchronization2)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthStencilResolveProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferCopy2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDepthStencilResolveProperties* value = wrapper->decoded_value; + VkBufferCopy2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedDepthResolveModes)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedStencilResolveModes)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->independentResolveNone)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->independentResolve)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcOffset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstOffset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceScalarBlockLayoutFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyBufferInfo2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceScalarBlockLayoutFeatures* value = wrapper->decoded_value; + VkCopyBufferInfo2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->scalarBlockLayout)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcBuffer)); + value->srcBuffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstBuffer)); + value->dstBuffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); + wrapper->pRegions = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pRegions = wrapper->pRegions->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageStencilUsageCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageCopy2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageStencilUsageCreateInfo* value = wrapper->decoded_value; + VkImageCopy2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilUsage)); + wrapper->srcSubresource = DecodeAllocator::Allocate(); + wrapper->srcSubresource->decoded_value = &(value->srcSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcSubresource); + wrapper->srcOffset = DecodeAllocator::Allocate(); + wrapper->srcOffset->decoded_value = &(value->srcOffset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcOffset); + wrapper->dstSubresource = DecodeAllocator::Allocate(); + wrapper->dstSubresource->decoded_value = &(value->dstSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstSubresource); + wrapper->dstOffset = DecodeAllocator::Allocate(); + wrapper->dstOffset->decoded_value = &(value->dstOffset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstOffset); + wrapper->extent = DecodeAllocator::Allocate(); + wrapper->extent->decoded_value = &(value->extent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerReductionModeCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyImageInfo2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSamplerReductionModeCreateInfo* value = wrapper->decoded_value; + VkCopyImageInfo2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->reductionMode)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcImage)); + value->srcImage = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcImageLayout)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstImage)); + value->dstImage = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstImageLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); + wrapper->pRegions = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pRegions = wrapper->pRegions->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSamplerFilterMinmaxProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferImageCopy2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSamplerFilterMinmaxProperties* value = wrapper->decoded_value; + VkBufferImageCopy2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->filterMinmaxSingleComponentFormats)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->filterMinmaxImageComponentMapping)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferRowLength)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferImageHeight)); + wrapper->imageSubresource = DecodeAllocator::Allocate(); + wrapper->imageSubresource->decoded_value = &(value->imageSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageSubresource); + wrapper->imageOffset = DecodeAllocator::Allocate(); + wrapper->imageOffset->decoded_value = &(value->imageOffset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageOffset); + wrapper->imageExtent = DecodeAllocator::Allocate(); + wrapper->imageExtent->decoded_value = &(value->imageExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageExtent); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyBufferToImageInfo2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVulkanMemoryModelFeatures* value = wrapper->decoded_value; + VkCopyBufferToImageInfo2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vulkanMemoryModel)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vulkanMemoryModelDeviceScope)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vulkanMemoryModelAvailabilityVisibilityChains)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcBuffer)); + value->srcBuffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstImage)); + value->dstImage = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstImageLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); + wrapper->pRegions = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pRegions = wrapper->pRegions->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImagelessFramebufferFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyImageToBufferInfo2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceImagelessFramebufferFeatures* value = wrapper->decoded_value; + VkCopyImageToBufferInfo2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imagelessFramebuffer)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcImage)); + value->srcImage = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcImageLayout)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstBuffer)); + value->dstBuffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); + wrapper->pRegions = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pRegions = wrapper->pRegions->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFramebufferAttachmentImageInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkFramebufferAttachmentImageInfo* value = wrapper->decoded_value; + VkPhysicalDeviceTextureCompressionASTCHDRFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->width)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->height)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layerCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewFormatCount)); - bytes_read += wrapper->pViewFormats.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pViewFormats = wrapper->pViewFormats.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureCompressionASTC_HDR)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFramebufferAttachmentsCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFormatProperties3* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkFramebufferAttachmentsCreateInfo* value = wrapper->decoded_value; + VkFormatProperties3* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentImageInfoCount)); - wrapper->pAttachmentImageInfos = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pAttachmentImageInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAttachmentImageInfos = wrapper->pAttachmentImageInfos->GetPointer(); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->linearTilingFeatures)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->optimalTilingFeatures)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferFeatures)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassAttachmentBeginInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance4Features* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassAttachmentBeginInfo* value = wrapper->decoded_value; + VkPhysicalDeviceMaintenance4Features* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentCount)); - bytes_read += wrapper->pAttachments.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAttachments = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance4)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance4Properties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceUniformBufferStandardLayoutFeatures* value = wrapper->decoded_value; + VkPhysicalDeviceMaintenance4Properties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformBufferStandardLayout)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBufferSize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceBufferMemoryRequirements* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* value = wrapper->decoded_value; + VkDeviceBufferMemoryRequirements* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupExtendedTypes)); + wrapper->pCreateInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pCreateInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCreateInfo = wrapper->pCreateInfo->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceImageMemoryRequirements* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* value = wrapper->decoded_value; + VkDeviceImageMemoryRequirements* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->separateDepthStencilLayouts)); + wrapper->pCreateInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pCreateInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCreateInfo = wrapper->pCreateInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->planeAspect)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentReferenceStencilLayout* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCreationFeedback* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAttachmentReferenceStencilLayout* value = wrapper->decoded_value; + VkPipelineCreationFeedback* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilLayout)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->duration)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentDescriptionStencilLayout* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCreationFeedbackCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAttachmentDescriptionStencilLayout* value = wrapper->decoded_value; + VkPipelineCreationFeedbackCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilInitialLayout)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilFinalLayout)); + wrapper->pPipelineCreationFeedback = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pPipelineCreationFeedback->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPipelineCreationFeedback = wrapper->pPipelineCreationFeedback->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineStageCreationFeedbackCount)); + wrapper->pPipelineStageCreationFeedbacks = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pPipelineStageCreationFeedbacks->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPipelineStageCreationFeedbacks = wrapper->pPipelineStageCreationFeedbacks->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceHostQueryResetFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceHostQueryResetFeatures* value = wrapper->decoded_value; + VkPhysicalDeviceShaderTerminateInvocationFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hostQueryReset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTerminateInvocation)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceTimelineSemaphoreFeatures* value = wrapper->decoded_value; + VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timelineSemaphore)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDemoteToHelperInvocation)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTimelineSemaphoreProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceTimelineSemaphoreProperties* value = wrapper->decoded_value; + VkPhysicalDevicePipelineCreationCacheControlFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTimelineSemaphoreValueDifference)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineCreationCacheControl)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreTypeCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSemaphoreTypeCreateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->semaphoreType)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->initialValue)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderZeroInitializeWorkgroupMemory)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTimelineSemaphoreSubmitInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageRobustnessFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkTimelineSemaphoreSubmitInfo* value = wrapper->decoded_value; + VkPhysicalDeviceImageRobustnessFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->waitSemaphoreValueCount)); - bytes_read += wrapper->pWaitSemaphoreValues.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); - value->pWaitSemaphoreValues = wrapper->pWaitSemaphoreValues.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->signalSemaphoreValueCount)); - bytes_read += wrapper->pSignalSemaphoreValues.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSignalSemaphoreValues = wrapper->pSignalSemaphoreValues.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustImageAccess)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreWaitInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSubgroupSizeControlFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSemaphoreWaitInfo* value = wrapper->decoded_value; + VkPhysicalDeviceSubgroupSizeControlFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->semaphoreCount)); - bytes_read += wrapper->pSemaphores.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSemaphores = nullptr; - bytes_read += wrapper->pValues.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); - value->pValues = wrapper->pValues.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupSizeControl)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->computeFullSubgroups)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreSignalInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSubgroupSizeControlProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSemaphoreSignalInfo* value = wrapper->decoded_value; + VkPhysicalDeviceSubgroupSizeControlProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); - value->semaphore = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->value)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minSubgroupSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSubgroupSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxComputeWorkgroupSubgroups)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->requiredSubgroupSizeStages)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceBufferDeviceAddressFeatures* value = wrapper->decoded_value; + VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddress)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddressCaptureReplay)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddressMultiDevice)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->requiredSubgroupSize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferDeviceAddressInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceInlineUniformBlockFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBufferDeviceAddressInfo* value = wrapper->decoded_value; + VkPhysicalDeviceInlineUniformBlockFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); - value->buffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inlineUniformBlock)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingInlineUniformBlockUpdateAfterBind)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferOpaqueCaptureAddressCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceInlineUniformBlockProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBufferOpaqueCaptureAddressCreateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceInlineUniformBlockProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->opaqueCaptureAddress)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxInlineUniformBlockSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorInlineUniformBlocks)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetInlineUniformBlocks)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindInlineUniformBlocks)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkWriteDescriptorSetInlineUniformBlock* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryOpaqueCaptureAddressAllocateInfo* value = wrapper->decoded_value; + VkWriteDescriptorSetInlineUniformBlock* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->opaqueCaptureAddress)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataSize)); + bytes_read += wrapper->pData.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); + value->pData = wrapper->pData.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorPoolInlineUniformBlockCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceMemoryOpaqueCaptureAddressInfo* value = wrapper->decoded_value; + VkDescriptorPoolInlineUniformBlockCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxInlineUniformBlockBindings)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan13Features* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVulkan13Features* value = wrapper->decoded_value; + VkPhysicalDeviceShaderIntegerDotProductFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustImageAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inlineUniformBlock)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingInlineUniformBlockUpdateAfterBind)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineCreationCacheControl)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->privateData)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDemoteToHelperInvocation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTerminateInvocation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupSizeControl)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->computeFullSubgroups)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->synchronization2)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureCompressionASTC_HDR)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderZeroInitializeWorkgroupMemory)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicRendering)); bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderIntegerDotProduct)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance4)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan13Properties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVulkan13Properties* value = wrapper->decoded_value; + VkPhysicalDeviceShaderIntegerDotProductProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minSubgroupSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSubgroupSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxComputeWorkgroupSubgroups)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->requiredSubgroupSizeStages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxInlineUniformBlockSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorInlineUniformBlocks)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetInlineUniformBlocks)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindInlineUniformBlocks)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxInlineUniformTotalSize)); bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct8BitUnsignedAccelerated)); bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct8BitSignedAccelerated)); bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct8BitMixedSignednessAccelerated)); @@ -7371,9772 +7048,9608 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysica bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating64BitUnsignedAccelerated)); bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating64BitSignedAccelerated)); bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageTexelBufferOffsetAlignmentBytes)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageTexelBufferOffsetSingleTexelAlignment)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformTexelBufferOffsetAlignmentBytes)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformTexelBufferOffsetSingleTexelAlignment)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBufferSize)); - - return bytes_read; -} - -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCreationFeedback* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); - - size_t bytes_read = 0; - VkPipelineCreationFeedback* value = wrapper->decoded_value; - - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->duration)); - - return bytes_read; -} - -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCreationFeedbackCreateInfo* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); - - size_t bytes_read = 0; - VkPipelineCreationFeedbackCreateInfo* value = wrapper->decoded_value; - - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pPipelineCreationFeedback = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pPipelineCreationFeedback->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPipelineCreationFeedback = wrapper->pPipelineCreationFeedback->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineStageCreationFeedbackCount)); - wrapper->pPipelineStageCreationFeedbacks = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pPipelineStageCreationFeedbacks->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPipelineStageCreationFeedbacks = wrapper->pPipelineStageCreationFeedbacks->GetPointer(); - - return bytes_read; -} - -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); - - size_t bytes_read = 0; - VkPhysicalDeviceShaderTerminateInvocationFeatures* value = wrapper->decoded_value; - - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTerminateInvocation)); - - return bytes_read; -} - -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceToolProperties* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); - - size_t bytes_read = 0; - VkPhysicalDeviceToolProperties* value = wrapper->decoded_value; - - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->name.SetExternalMemory(value->name, VK_MAX_EXTENSION_NAME_SIZE); - bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->version.SetExternalMemory(value->version, VK_MAX_EXTENSION_NAME_SIZE); - bytes_read += wrapper->version.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->purposes)); - wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); - bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->layer.SetExternalMemory(value->layer, VK_MAX_EXTENSION_NAME_SIZE); - bytes_read += wrapper->layer.Decode((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* value = wrapper->decoded_value; + VkPhysicalDeviceTexelBufferAlignmentProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDemoteToHelperInvocation)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageTexelBufferOffsetAlignmentBytes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageTexelBufferOffsetSingleTexelAlignment)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformTexelBufferOffsetAlignmentBytes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformTexelBufferOffsetSingleTexelAlignment)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePrivateDataFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageBlit2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePrivateDataFeatures* value = wrapper->decoded_value; + VkImageBlit2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->privateData)); + wrapper->srcSubresource = DecodeAllocator::Allocate(); + wrapper->srcSubresource->decoded_value = &(value->srcSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcSubresource); + wrapper->srcOffsets = DecodeAllocator::Allocate>(); + wrapper->srcOffsets->SetExternalMemory(value->srcOffsets, 2); + bytes_read += wrapper->srcOffsets->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->dstSubresource = DecodeAllocator::Allocate(); + wrapper->dstSubresource->decoded_value = &(value->dstSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstSubresource); + wrapper->dstOffsets = DecodeAllocator::Allocate>(); + wrapper->dstOffsets->SetExternalMemory(value->dstOffsets, 2); + bytes_read += wrapper->dstOffsets->Decode((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDevicePrivateDataCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBlitImageInfo2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDevicePrivateDataCreateInfo* value = wrapper->decoded_value; + VkBlitImageInfo2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->privateDataSlotRequestCount)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcImage)); + value->srcImage = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcImageLayout)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstImage)); + value->dstImage = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstImageLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); + wrapper->pRegions = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pRegions = wrapper->pRegions->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->filter)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPrivateDataSlotCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageResolve2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPrivateDataSlotCreateInfo* value = wrapper->decoded_value; + VkImageResolve2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + wrapper->srcSubresource = DecodeAllocator::Allocate(); + wrapper->srcSubresource->decoded_value = &(value->srcSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcSubresource); + wrapper->srcOffset = DecodeAllocator::Allocate(); + wrapper->srcOffset->decoded_value = &(value->srcOffset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcOffset); + wrapper->dstSubresource = DecodeAllocator::Allocate(); + wrapper->dstSubresource->decoded_value = &(value->dstSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstSubresource); + wrapper->dstOffset = DecodeAllocator::Allocate(); + wrapper->dstOffset->decoded_value = &(value->dstOffset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstOffset); + wrapper->extent = DecodeAllocator::Allocate(); + wrapper->extent->decoded_value = &(value->extent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkResolveImageInfo2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePipelineCreationCacheControlFeatures* value = wrapper->decoded_value; + VkResolveImageInfo2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineCreationCacheControl)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcImage)); + value->srcImage = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcImageLayout)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstImage)); + value->dstImage = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstImageLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); + wrapper->pRegions = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pRegions = wrapper->pRegions->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryBarrier2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingAttachmentInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryBarrier2* value = wrapper->decoded_value; + VkRenderingAttachmentInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcStageMask)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstStageMask)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->imageView)); + value->imageView = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageLayout)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->resolveMode)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->resolveImageView)); + value->resolveImageView = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->resolveImageLayout)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->loadOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storeOp)); + wrapper->clearValue = DecodeAllocator::Allocate(); + wrapper->clearValue->decoded_value = &(value->clearValue); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->clearValue); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferMemoryBarrier2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBufferMemoryBarrier2* value = wrapper->decoded_value; + VkRenderingInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcStageMask)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstStageMask)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcQueueFamilyIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstQueueFamilyIndex)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); - value->buffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + wrapper->renderArea = DecodeAllocator::Allocate(); + wrapper->renderArea->decoded_value = &(value->renderArea); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->renderArea); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layerCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); + wrapper->pColorAttachments = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pColorAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pColorAttachments = wrapper->pColorAttachments->GetPointer(); + wrapper->pDepthAttachment = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDepthAttachment->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDepthAttachment = wrapper->pDepthAttachment->GetPointer(); + wrapper->pStencilAttachment = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStencilAttachment->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStencilAttachment = wrapper->pStencilAttachment->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageMemoryBarrier2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRenderingCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageMemoryBarrier2* value = wrapper->decoded_value; + VkPipelineRenderingCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcStageMask)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstStageMask)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->oldLayout)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->newLayout)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcQueueFamilyIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstQueueFamilyIndex)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); - value->image = VK_NULL_HANDLE; - wrapper->subresourceRange = DecodeAllocator::Allocate(); - wrapper->subresourceRange->decoded_value = &(value->subresourceRange); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->subresourceRange); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); + bytes_read += wrapper->pColorAttachmentFormats.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pColorAttachmentFormats = wrapper->pColorAttachmentFormats.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthAttachmentFormat)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilAttachmentFormat)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDependencyInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDynamicRenderingFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDependencyInfo* value = wrapper->decoded_value; + VkPhysicalDeviceDynamicRenderingFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dependencyFlags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryBarrierCount)); - wrapper->pMemoryBarriers = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pMemoryBarriers->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pMemoryBarriers = wrapper->pMemoryBarriers->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferMemoryBarrierCount)); - wrapper->pBufferMemoryBarriers = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pBufferMemoryBarriers->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pBufferMemoryBarriers = wrapper->pBufferMemoryBarriers->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageMemoryBarrierCount)); - wrapper->pImageMemoryBarriers = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pImageMemoryBarriers->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pImageMemoryBarriers = wrapper->pImageMemoryBarriers->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicRendering)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreSubmitInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferInheritanceRenderingInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSemaphoreSubmitInfo* value = wrapper->decoded_value; + VkCommandBufferInheritanceRenderingInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); - value->semaphore = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->value)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceIndex)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); + bytes_read += wrapper->pColorAttachmentFormats.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pColorAttachmentFormats = wrapper->pColorAttachmentFormats.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthAttachmentFormat)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilAttachmentFormat)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationSamples)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferSubmitInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan14Features* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCommandBufferSubmitInfo* value = wrapper->decoded_value; + VkPhysicalDeviceVulkan14Features* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->commandBuffer)); - value->commandBuffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->globalPriorityQuery)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupRotate)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupRotateClustered)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderFloatControls2)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderExpectAssume)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rectangularLines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bresenhamLines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->smoothLines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stippledRectangularLines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stippledBresenhamLines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stippledSmoothLines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexAttributeInstanceRateDivisor)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexAttributeInstanceRateZeroDivisor)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexTypeUint8)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicRenderingLocalRead)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance5)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance6)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineProtectedAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineRobustness)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hostImageCopy)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pushDescriptor)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubmitInfo2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan14Properties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSubmitInfo2* value = wrapper->decoded_value; + VkPhysicalDeviceVulkan14Properties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->waitSemaphoreInfoCount)); - wrapper->pWaitSemaphoreInfos = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pWaitSemaphoreInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pWaitSemaphoreInfos = wrapper->pWaitSemaphoreInfos->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->commandBufferInfoCount)); - wrapper->pCommandBufferInfos = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pCommandBufferInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCommandBufferInfos = wrapper->pCommandBufferInfos->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->signalSemaphoreInfoCount)); - wrapper->pSignalSemaphoreInfos = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSignalSemaphoreInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSignalSemaphoreInfos = wrapper->pSignalSemaphoreInfos->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->lineSubPixelPrecisionBits)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexAttribDivisor)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportsNonZeroFirstInstance)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPushDescriptors)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicRenderingLocalReadDepthStencilAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicRenderingLocalReadMultisampledAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->earlyFragmentMultisampleCoverageAfterSampleCounting)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->earlyFragmentSampleMaskTestBeforeSampleCounting)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthStencilSwizzleOneSupport)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->polygonModePointSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nonStrictSinglePixelWideLinesUseParallelogram)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nonStrictWideLinesUseParallelogram)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->blockTexelViewCompatibleMultipleLayers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxCombinedImageSamplerDescriptorCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateClampCombinerInputs)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessStorageBuffers)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessUniformBuffers)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessVertexInputs)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessImages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->copySrcLayoutCount)); + bytes_read += wrapper->pCopySrcLayouts.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCopySrcLayouts = wrapper->pCopySrcLayouts.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->copyDstLayoutCount)); + bytes_read += wrapper->pCopyDstLayouts.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCopyDstLayouts = wrapper->pCopyDstLayouts.GetPointer(); + wrapper->optimalTilingLayoutUUID.SetExternalMemory(value->optimalTilingLayoutUUID, VK_UUID_SIZE); + bytes_read += wrapper->optimalTilingLayoutUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->identicalMemoryTypeRequirements)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSynchronization2Features* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceQueueGlobalPriorityCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSynchronization2Features* value = wrapper->decoded_value; + VkDeviceQueueGlobalPriorityCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->synchronization2)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->globalPriority)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceGlobalPriorityQueryFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* value = wrapper->decoded_value; + VkPhysicalDeviceGlobalPriorityQueryFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderZeroInitializeWorkgroupMemory)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->globalPriorityQuery)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageRobustnessFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyGlobalPriorityProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceImageRobustnessFeatures* value = wrapper->decoded_value; + VkQueueFamilyGlobalPriorityProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustImageAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->priorityCount)); + wrapper->priorities.SetExternalMemory(value->priorities, VK_MAX_GLOBAL_PRIORITY_SIZE); + bytes_read += wrapper->priorities.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferCopy2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceIndexTypeUint8Features* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBufferCopy2* value = wrapper->decoded_value; + VkPhysicalDeviceIndexTypeUint8Features* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcOffset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstOffset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexTypeUint8)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyBufferInfo2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryMapInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCopyBufferInfo2* value = wrapper->decoded_value; + VkMemoryMapInfo* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcBuffer)); - value->srcBuffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstBuffer)); - value->dstBuffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); - wrapper->pRegions = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pRegions = wrapper->pRegions->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageCopy2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryUnmapInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageCopy2* value = wrapper->decoded_value; + VkMemoryUnmapInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->srcSubresource = DecodeAllocator::Allocate(); - wrapper->srcSubresource->decoded_value = &(value->srcSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcSubresource); - wrapper->srcOffset = DecodeAllocator::Allocate(); - wrapper->srcOffset->decoded_value = &(value->srcOffset); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcOffset); - wrapper->dstSubresource = DecodeAllocator::Allocate(); - wrapper->dstSubresource->decoded_value = &(value->dstSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstSubresource); - wrapper->dstOffset = DecodeAllocator::Allocate(); - wrapper->dstOffset->decoded_value = &(value->dstOffset); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstOffset); - wrapper->extent = DecodeAllocator::Allocate(); - wrapper->extent->decoded_value = &(value->extent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyImageInfo2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance5Features* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCopyImageInfo2* value = wrapper->decoded_value; + VkPhysicalDeviceMaintenance5Features* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcImage)); - value->srcImage = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcImageLayout)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstImage)); - value->dstImage = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstImageLayout)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); - wrapper->pRegions = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pRegions = wrapper->pRegions->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance5)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferImageCopy2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance5Properties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBufferImageCopy2* value = wrapper->decoded_value; + VkPhysicalDeviceMaintenance5Properties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferRowLength)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferImageHeight)); - wrapper->imageSubresource = DecodeAllocator::Allocate(); - wrapper->imageSubresource->decoded_value = &(value->imageSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageSubresource); - wrapper->imageOffset = DecodeAllocator::Allocate(); - wrapper->imageOffset->decoded_value = &(value->imageOffset); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageOffset); - wrapper->imageExtent = DecodeAllocator::Allocate(); - wrapper->imageExtent->decoded_value = &(value->imageExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageExtent); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->earlyFragmentMultisampleCoverageAfterSampleCounting)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->earlyFragmentSampleMaskTestBeforeSampleCounting)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthStencilSwizzleOneSupport)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->polygonModePointSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nonStrictSinglePixelWideLinesUseParallelogram)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nonStrictWideLinesUseParallelogram)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyBufferToImageInfo2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageSubresource2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCopyBufferToImageInfo2* value = wrapper->decoded_value; + VkImageSubresource2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcBuffer)); - value->srcBuffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstImage)); - value->dstImage = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstImageLayout)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); - wrapper->pRegions = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pRegions = wrapper->pRegions->GetPointer(); + wrapper->imageSubresource = DecodeAllocator::Allocate(); + wrapper->imageSubresource->decoded_value = &(value->imageSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageSubresource); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyImageToBufferInfo2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceImageSubresourceInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCopyImageToBufferInfo2* value = wrapper->decoded_value; + VkDeviceImageSubresourceInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcImage)); - value->srcImage = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcImageLayout)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstBuffer)); - value->dstBuffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); - wrapper->pRegions = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pRegions = wrapper->pRegions->GetPointer(); + wrapper->pCreateInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pCreateInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCreateInfo = wrapper->pCreateInfo->GetPointer(); + wrapper->pSubresource = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSubresource->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSubresource = wrapper->pSubresource->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageBlit2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubresourceLayout2* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageBlit2* value = wrapper->decoded_value; + VkSubresourceLayout2* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->srcSubresource = DecodeAllocator::Allocate(); - wrapper->srcSubresource->decoded_value = &(value->srcSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcSubresource); - wrapper->srcOffsets = DecodeAllocator::Allocate>(); - wrapper->srcOffsets->SetExternalMemory(value->srcOffsets, 2); - bytes_read += wrapper->srcOffsets->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->dstSubresource = DecodeAllocator::Allocate(); - wrapper->dstSubresource->decoded_value = &(value->dstSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstSubresource); - wrapper->dstOffsets = DecodeAllocator::Allocate>(); - wrapper->dstOffsets->SetExternalMemory(value->dstOffsets, 2); - bytes_read += wrapper->dstOffsets->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->subresourceLayout = DecodeAllocator::Allocate(); + wrapper->subresourceLayout->decoded_value = &(value->subresourceLayout); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->subresourceLayout); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBlitImageInfo2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferUsageFlags2CreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBlitImageInfo2* value = wrapper->decoded_value; + VkBufferUsageFlags2CreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcImage)); - value->srcImage = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcImageLayout)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstImage)); - value->dstImage = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstImageLayout)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); - wrapper->pRegions = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pRegions = wrapper->pRegions->GetPointer(); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->filter)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageResolve2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance6Features* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageResolve2* value = wrapper->decoded_value; + VkPhysicalDeviceMaintenance6Features* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->srcSubresource = DecodeAllocator::Allocate(); - wrapper->srcSubresource->decoded_value = &(value->srcSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcSubresource); - wrapper->srcOffset = DecodeAllocator::Allocate(); - wrapper->srcOffset->decoded_value = &(value->srcOffset); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcOffset); - wrapper->dstSubresource = DecodeAllocator::Allocate(); - wrapper->dstSubresource->decoded_value = &(value->dstSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstSubresource); - wrapper->dstOffset = DecodeAllocator::Allocate(); - wrapper->dstOffset->decoded_value = &(value->dstOffset); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstOffset); - wrapper->extent = DecodeAllocator::Allocate(); - wrapper->extent->decoded_value = &(value->extent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance6)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkResolveImageInfo2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance6Properties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkResolveImageInfo2* value = wrapper->decoded_value; + VkPhysicalDeviceMaintenance6Properties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcImage)); - value->srcImage = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcImageLayout)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstImage)); - value->dstImage = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstImageLayout)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); - wrapper->pRegions = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pRegions = wrapper->pRegions->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->blockTexelViewCompatibleMultipleLayers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxCombinedImageSamplerDescriptorCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateClampCombinerInputs)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSubgroupSizeControlFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindMemoryStatus* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSubgroupSizeControlFeatures* value = wrapper->decoded_value; + VkBindMemoryStatus* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupSizeControl)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->computeFullSubgroups)); + bytes_read += wrapper->pResult.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pResult = wrapper->pResult.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSubgroupSizeControlProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceHostImageCopyFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSubgroupSizeControlProperties* value = wrapper->decoded_value; + VkPhysicalDeviceHostImageCopyFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minSubgroupSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSubgroupSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxComputeWorkgroupSubgroups)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->requiredSubgroupSizeStages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hostImageCopy)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceHostImageCopyProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* value = wrapper->decoded_value; + VkPhysicalDeviceHostImageCopyProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->requiredSubgroupSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->copySrcLayoutCount)); + bytes_read += wrapper->pCopySrcLayouts.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCopySrcLayouts = wrapper->pCopySrcLayouts.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->copyDstLayoutCount)); + bytes_read += wrapper->pCopyDstLayouts.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCopyDstLayouts = wrapper->pCopyDstLayouts.GetPointer(); + wrapper->optimalTilingLayoutUUID.SetExternalMemory(value->optimalTilingLayoutUUID, VK_UUID_SIZE); + bytes_read += wrapper->optimalTilingLayoutUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->identicalMemoryTypeRequirements)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceInlineUniformBlockFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyImageToImageInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceInlineUniformBlockFeatures* value = wrapper->decoded_value; + VkCopyImageToImageInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inlineUniformBlock)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBindingInlineUniformBlockUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcImage)); + value->srcImage = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcImageLayout)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstImage)); + value->dstImage = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstImageLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); + wrapper->pRegions = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pRegions = wrapper->pRegions->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceInlineUniformBlockProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkHostImageLayoutTransitionInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceInlineUniformBlockProperties* value = wrapper->decoded_value; + VkHostImageLayoutTransitionInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxInlineUniformBlockSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorInlineUniformBlocks)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetInlineUniformBlocks)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindInlineUniformBlocks)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); + value->image = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->oldLayout)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->newLayout)); + wrapper->subresourceRange = DecodeAllocator::Allocate(); + wrapper->subresourceRange->decoded_value = &(value->subresourceRange); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->subresourceRange); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkWriteDescriptorSetInlineUniformBlock* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubresourceHostMemcpySize* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkWriteDescriptorSetInlineUniformBlock* value = wrapper->decoded_value; + VkSubresourceHostMemcpySize* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataSize)); - bytes_read += wrapper->pData.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); - value->pData = wrapper->pData.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorPoolInlineUniformBlockCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkHostImageCopyDevicePerformanceQuery* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorPoolInlineUniformBlockCreateInfo* value = wrapper->decoded_value; + VkHostImageCopyDevicePerformanceQuery* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxInlineUniformBlockBindings)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->optimalDeviceAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->identicalMemoryLayout)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceTextureCompressionASTCHDRFeatures* value = wrapper->decoded_value; + VkPhysicalDeviceShaderSubgroupRotateFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureCompressionASTC_HDR)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupRotate)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupRotateClustered)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingAttachmentInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderFloatControls2Features* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderingAttachmentInfo* value = wrapper->decoded_value; + VkPhysicalDeviceShaderFloatControls2Features* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->imageView)); - value->imageView = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageLayout)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->resolveMode)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->resolveImageView)); - value->resolveImageView = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->resolveImageLayout)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->loadOp)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storeOp)); - wrapper->clearValue = DecodeAllocator::Allocate(); - wrapper->clearValue->decoded_value = &(value->clearValue); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->clearValue); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderFloatControls2)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderingInfo* value = wrapper->decoded_value; + VkPhysicalDeviceShaderExpectAssumeFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - wrapper->renderArea = DecodeAllocator::Allocate(); - wrapper->renderArea->decoded_value = &(value->renderArea); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->renderArea); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layerCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); - wrapper->pColorAttachments = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pColorAttachments->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pColorAttachments = wrapper->pColorAttachments->GetPointer(); - wrapper->pDepthAttachment = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDepthAttachment->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDepthAttachment = wrapper->pDepthAttachment->GetPointer(); - wrapper->pStencilAttachment = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStencilAttachment->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStencilAttachment = wrapper->pStencilAttachment->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderExpectAssume)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRenderingCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCreateFlags2CreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineRenderingCreateInfo* value = wrapper->decoded_value; + VkPipelineCreateFlags2CreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); - bytes_read += wrapper->pColorAttachmentFormats.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pColorAttachmentFormats = wrapper->pColorAttachmentFormats.GetPointer(); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthAttachmentFormat)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilAttachmentFormat)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDynamicRenderingFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePushDescriptorProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDynamicRenderingFeatures* value = wrapper->decoded_value; + VkPhysicalDevicePushDescriptorProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicRendering)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPushDescriptors)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferInheritanceRenderingInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindDescriptorSetsInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCommandBufferInheritanceRenderingInfo* value = wrapper->decoded_value; + VkBindDescriptorSetsInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); - bytes_read += wrapper->pColorAttachmentFormats.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pColorAttachmentFormats = wrapper->pColorAttachmentFormats.GetPointer(); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthAttachmentFormat)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilAttachmentFormat)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationSamples)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageFlags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); + value->layout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstSet)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorSetCount)); + bytes_read += wrapper->pDescriptorSets.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDescriptorSets = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicOffsetCount)); + bytes_read += wrapper->pDynamicOffsets.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDynamicOffsets = wrapper->pDynamicOffsets.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPushConstantsInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderIntegerDotProductFeatures* value = wrapper->decoded_value; + VkPushConstantsInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderIntegerDotProduct)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); + value->layout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageFlags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += wrapper->pValues.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); + value->pValues = wrapper->pValues.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPushDescriptorSetInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderIntegerDotProductProperties* value = wrapper->decoded_value; + VkPushDescriptorSetInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct8BitUnsignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct8BitSignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct8BitMixedSignednessAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct4x8BitPackedUnsignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct4x8BitPackedSignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct4x8BitPackedMixedSignednessAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct16BitUnsignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct16BitSignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct16BitMixedSignednessAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct32BitUnsignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct32BitSignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct32BitMixedSignednessAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct64BitUnsignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct64BitSignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProduct64BitMixedSignednessAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating8BitUnsignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating8BitSignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating16BitUnsignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating16BitSignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating32BitUnsignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating32BitSignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating64BitUnsignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating64BitSignedAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageFlags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); + value->layout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->set)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorWriteCount)); + wrapper->pDescriptorWrites = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDescriptorWrites->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDescriptorWrites = wrapper->pDescriptorWrites->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineProtectedAccessFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceTexelBufferAlignmentProperties* value = wrapper->decoded_value; + VkPhysicalDevicePipelineProtectedAccessFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageTexelBufferOffsetAlignmentBytes)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageTexelBufferOffsetSingleTexelAlignment)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformTexelBufferOffsetAlignmentBytes)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformTexelBufferOffsetSingleTexelAlignment)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineProtectedAccess)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFormatProperties3* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineRobustnessFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkFormatProperties3* value = wrapper->decoded_value; + VkPhysicalDevicePipelineRobustnessFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->linearTilingFeatures)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->optimalTilingFeatures)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferFeatures)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineRobustness)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance4Features* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineRobustnessProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMaintenance4Features* value = wrapper->decoded_value; + VkPhysicalDevicePipelineRobustnessProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance4)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessStorageBuffers)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessUniformBuffers)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessVertexInputs)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessImages)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance4Properties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRobustnessCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMaintenance4Properties* value = wrapper->decoded_value; + VkPipelineRobustnessCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBufferSize)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageBuffers)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformBuffers)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexInputs)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->images)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceBufferMemoryRequirements* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLineRasterizationFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceBufferMemoryRequirements* value = wrapper->decoded_value; + VkPhysicalDeviceLineRasterizationFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pCreateInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pCreateInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCreateInfo = wrapper->pCreateInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rectangularLines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bresenhamLines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->smoothLines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stippledRectangularLines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stippledBresenhamLines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stippledSmoothLines)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceImageMemoryRequirements* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLineRasterizationProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceImageMemoryRequirements* value = wrapper->decoded_value; + VkPhysicalDeviceLineRasterizationProperties* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pCreateInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pCreateInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCreateInfo = wrapper->pCreateInfo->GetPointer(); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->planeAspect)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->lineSubPixelPrecisionBits)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan14Features* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRasterizationLineStateCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVulkan14Features* value = wrapper->decoded_value; + VkPipelineRasterizationLineStateCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->globalPriorityQuery)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupRotate)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupRotateClustered)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderFloatControls2)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderExpectAssume)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rectangularLines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bresenhamLines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->smoothLines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stippledRectangularLines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stippledBresenhamLines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stippledSmoothLines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexAttributeInstanceRateDivisor)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexAttributeInstanceRateZeroDivisor)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexTypeUint8)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicRenderingLocalRead)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance5)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance6)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineProtectedAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineRobustness)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hostImageCopy)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pushDescriptor)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->lineRasterizationMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stippledLineEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->lineStippleFactor)); + bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->lineStipplePattern)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan14Properties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVertexAttributeDivisorProperties* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVulkan14Properties* value = wrapper->decoded_value; - - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->lineSubPixelPrecisionBits)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexAttribDivisor)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportsNonZeroFirstInstance)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPushDescriptors)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicRenderingLocalReadDepthStencilAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicRenderingLocalReadMultisampledAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->earlyFragmentMultisampleCoverageAfterSampleCounting)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->earlyFragmentSampleMaskTestBeforeSampleCounting)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthStencilSwizzleOneSupport)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->polygonModePointSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nonStrictSinglePixelWideLinesUseParallelogram)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nonStrictWideLinesUseParallelogram)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->blockTexelViewCompatibleMultipleLayers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxCombinedImageSamplerDescriptorCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateClampCombinerInputs)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessStorageBuffers)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessUniformBuffers)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessVertexInputs)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessImages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->copySrcLayoutCount)); - bytes_read += wrapper->pCopySrcLayouts.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCopySrcLayouts = wrapper->pCopySrcLayouts.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->copyDstLayoutCount)); - bytes_read += wrapper->pCopyDstLayouts.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCopyDstLayouts = wrapper->pCopyDstLayouts.GetPointer(); - wrapper->optimalTilingLayoutUUID.SetExternalMemory(value->optimalTilingLayoutUUID, VK_UUID_SIZE); - bytes_read += wrapper->optimalTilingLayoutUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->identicalMemoryTypeRequirements)); + VkPhysicalDeviceVertexAttributeDivisorProperties* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexAttribDivisor)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportsNonZeroFirstInstance)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceQueueGlobalPriorityCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVertexInputBindingDivisorDescription* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceQueueGlobalPriorityCreateInfo* value = wrapper->decoded_value; + VkVertexInputBindingDivisorDescription* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->globalPriority)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->divisor)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceGlobalPriorityQueryFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineVertexInputDivisorStateCreateInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceGlobalPriorityQueryFeatures* value = wrapper->decoded_value; + VkPipelineVertexInputDivisorStateCreateInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->globalPriorityQuery)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexBindingDivisorCount)); + wrapper->pVertexBindingDivisors = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pVertexBindingDivisors->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pVertexBindingDivisors = wrapper->pVertexBindingDivisors->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyGlobalPriorityProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVertexAttributeDivisorFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkQueueFamilyGlobalPriorityProperties* value = wrapper->decoded_value; + VkPhysicalDeviceVertexAttributeDivisorFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->priorityCount)); - wrapper->priorities.SetExternalMemory(value->priorities, VK_MAX_GLOBAL_PRIORITY_SIZE); - bytes_read += wrapper->priorities.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexAttributeInstanceRateDivisor)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexAttributeInstanceRateZeroDivisor)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingAreaInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderSubgroupRotateFeatures* value = wrapper->decoded_value; + VkRenderingAreaInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupRotate)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupRotateClustered)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); + bytes_read += wrapper->pColorAttachmentFormats.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pColorAttachmentFormats = wrapper->pColorAttachmentFormats.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthAttachmentFormat)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilAttachmentFormat)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderFloatControls2Features* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderFloatControls2Features* value = wrapper->decoded_value; + VkPhysicalDeviceDynamicRenderingLocalReadFeatures* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderFloatControls2)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicRenderingLocalRead)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingAttachmentLocationInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderExpectAssumeFeatures* value = wrapper->decoded_value; + VkRenderingAttachmentLocationInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderExpectAssume)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); + bytes_read += wrapper->pColorAttachmentLocations.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pColorAttachmentLocations = wrapper->pColorAttachmentLocations.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLineRasterizationFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingInputAttachmentIndexInfo* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceLineRasterizationFeatures* value = wrapper->decoded_value; + VkRenderingInputAttachmentIndexInfo* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rectangularLines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bresenhamLines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->smoothLines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stippledRectangularLines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stippledBresenhamLines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stippledSmoothLines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); + bytes_read += wrapper->pColorAttachmentInputIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pColorAttachmentInputIndices = wrapper->pColorAttachmentInputIndices.GetPointer(); + bytes_read += wrapper->pDepthInputAttachmentIndex.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDepthInputAttachmentIndex = wrapper->pDepthInputAttachmentIndex.GetPointer(); + bytes_read += wrapper->pStencilInputAttachmentIndex.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStencilInputAttachmentIndex = wrapper->pStencilInputAttachmentIndex.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLineRasterizationProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceCapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceLineRasterizationProperties* value = wrapper->decoded_value; + VkSurfaceCapabilitiesKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->lineSubPixelPrecisionBits)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minImageCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageCount)); + wrapper->currentExtent = DecodeAllocator::Allocate(); + wrapper->currentExtent->decoded_value = &(value->currentExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->currentExtent); + wrapper->minImageExtent = DecodeAllocator::Allocate(); + wrapper->minImageExtent->decoded_value = &(value->minImageExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minImageExtent); + wrapper->maxImageExtent = DecodeAllocator::Allocate(); + wrapper->maxImageExtent->decoded_value = &(value->maxImageExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxImageExtent); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageArrayLayers)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedTransforms)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->currentTransform)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedCompositeAlpha)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedUsageFlags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRasterizationLineStateCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceFormatKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineRasterizationLineStateCreateInfo* value = wrapper->decoded_value; + VkSurfaceFormatKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->lineRasterizationMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stippledLineEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->lineStippleFactor)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->lineStipplePattern)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorSpace)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVertexAttributeDivisorProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVertexAttributeDivisorProperties* value = wrapper->decoded_value; + VkSwapchainCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexAttribDivisor)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportsNonZeroFirstInstance)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->surface)); + value->surface = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minImageCount)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageFormat)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageColorSpace)); + wrapper->imageExtent = DecodeAllocator::Allocate(); + wrapper->imageExtent->decoded_value = &(value->imageExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageExtent); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageArrayLayers)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageUsage)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageSharingMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndexCount)); + bytes_read += wrapper->pQueueFamilyIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pQueueFamilyIndices = wrapper->pQueueFamilyIndices.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->preTransform)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compositeAlpha)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->clipped)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->oldSwapchain)); + value->oldSwapchain = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVertexInputBindingDivisorDescription* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVertexInputBindingDivisorDescription* value = wrapper->decoded_value; + VkPresentInfoKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->divisor)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->waitSemaphoreCount)); + bytes_read += wrapper->pWaitSemaphores.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pWaitSemaphores = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); + bytes_read += wrapper->pSwapchains.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSwapchains = nullptr; + bytes_read += wrapper->pImageIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pImageIndices = wrapper->pImageIndices.GetPointer(); + bytes_read += wrapper->pResults.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pResults = wrapper->pResults.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineVertexInputDivisorStateCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageSwapchainCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineVertexInputDivisorStateCreateInfo* value = wrapper->decoded_value; + VkImageSwapchainCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexBindingDivisorCount)); - wrapper->pVertexBindingDivisors = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pVertexBindingDivisors->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pVertexBindingDivisors = wrapper->pVertexBindingDivisors->GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->swapchain)); + value->swapchain = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVertexAttributeDivisorFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindImageMemorySwapchainInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVertexAttributeDivisorFeatures* value = wrapper->decoded_value; + VkBindImageMemorySwapchainInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexAttributeInstanceRateDivisor)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexAttributeInstanceRateZeroDivisor)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->swapchain)); + value->swapchain = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceIndexTypeUint8Features* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAcquireNextImageInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceIndexTypeUint8Features* value = wrapper->decoded_value; + VkAcquireNextImageInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexTypeUint8)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->swapchain)); + value->swapchain = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timeout)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); + value->semaphore = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->fence)); + value->fence = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceMask)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryMapInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupPresentCapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryMapInfo* value = wrapper->decoded_value; + VkDeviceGroupPresentCapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + wrapper->presentMask.SetExternalMemory(value->presentMask, VK_MAX_DEVICE_GROUP_SIZE); + bytes_read += wrapper->presentMask.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->modes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryUnmapInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupPresentInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryUnmapInfo* value = wrapper->decoded_value; + VkDeviceGroupPresentInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); + bytes_read += wrapper->pDeviceMasks.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDeviceMasks = wrapper->pDeviceMasks.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mode)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance5Features* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupSwapchainCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMaintenance5Features* value = wrapper->decoded_value; + VkDeviceGroupSwapchainCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance5)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->modes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance5Properties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayModeParametersKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMaintenance5Properties* value = wrapper->decoded_value; + VkDisplayModeParametersKHR* value = wrapper->decoded_value; + + wrapper->visibleRegion = DecodeAllocator::Allocate(); + wrapper->visibleRegion->decoded_value = &(value->visibleRegion); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->visibleRegion); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->refreshRate)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayModeCreateInfoKHR* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkDisplayModeCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->earlyFragmentMultisampleCoverageAfterSampleCounting)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->earlyFragmentSampleMaskTestBeforeSampleCounting)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthStencilSwizzleOneSupport)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->polygonModePointSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nonStrictSinglePixelWideLinesUseParallelogram)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nonStrictWideLinesUseParallelogram)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + wrapper->parameters = DecodeAllocator::Allocate(); + wrapper->parameters->decoded_value = &(value->parameters); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->parameters); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayModePropertiesKHR* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkDisplayModePropertiesKHR* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->displayMode)); + value->displayMode = VK_NULL_HANDLE; + wrapper->parameters = DecodeAllocator::Allocate(); + wrapper->parameters->decoded_value = &(value->parameters); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->parameters); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingAreaInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPlaneCapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderingAreaInfo* value = wrapper->decoded_value; + VkDisplayPlaneCapabilitiesKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); - bytes_read += wrapper->pColorAttachmentFormats.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pColorAttachmentFormats = wrapper->pColorAttachmentFormats.GetPointer(); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthAttachmentFormat)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilAttachmentFormat)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedAlpha)); + wrapper->minSrcPosition = DecodeAllocator::Allocate(); + wrapper->minSrcPosition->decoded_value = &(value->minSrcPosition); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minSrcPosition); + wrapper->maxSrcPosition = DecodeAllocator::Allocate(); + wrapper->maxSrcPosition->decoded_value = &(value->maxSrcPosition); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxSrcPosition); + wrapper->minSrcExtent = DecodeAllocator::Allocate(); + wrapper->minSrcExtent->decoded_value = &(value->minSrcExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minSrcExtent); + wrapper->maxSrcExtent = DecodeAllocator::Allocate(); + wrapper->maxSrcExtent->decoded_value = &(value->maxSrcExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxSrcExtent); + wrapper->minDstPosition = DecodeAllocator::Allocate(); + wrapper->minDstPosition->decoded_value = &(value->minDstPosition); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minDstPosition); + wrapper->maxDstPosition = DecodeAllocator::Allocate(); + wrapper->maxDstPosition->decoded_value = &(value->maxDstPosition); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxDstPosition); + wrapper->minDstExtent = DecodeAllocator::Allocate(); + wrapper->minDstExtent->decoded_value = &(value->minDstExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minDstExtent); + wrapper->maxDstExtent = DecodeAllocator::Allocate(); + wrapper->maxDstExtent->decoded_value = &(value->maxDstExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxDstExtent); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageSubresource2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPlanePropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageSubresource2* value = wrapper->decoded_value; + VkDisplayPlanePropertiesKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->imageSubresource = DecodeAllocator::Allocate(); - wrapper->imageSubresource->decoded_value = &(value->imageSubresource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageSubresource); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->currentDisplay)); + value->currentDisplay = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->currentStackIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceImageSubresourceInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceImageSubresourceInfo* value = wrapper->decoded_value; + VkDisplayPropertiesKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pCreateInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pCreateInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCreateInfo = wrapper->pCreateInfo->GetPointer(); - wrapper->pSubresource = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSubresource->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSubresource = wrapper->pSubresource->GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->display)); + value->display = VK_NULL_HANDLE; + bytes_read += wrapper->displayName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->displayName = wrapper->displayName.GetPointer(); + wrapper->physicalDimensions = DecodeAllocator::Allocate(); + wrapper->physicalDimensions->decoded_value = &(value->physicalDimensions); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->physicalDimensions); + wrapper->physicalResolution = DecodeAllocator::Allocate(); + wrapper->physicalResolution->decoded_value = &(value->physicalResolution); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->physicalResolution); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedTransforms)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->planeReorderPossible)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->persistentContent)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubresourceLayout2* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplaySurfaceCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSubresourceLayout2* value = wrapper->decoded_value; + VkDisplaySurfaceCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->subresourceLayout = DecodeAllocator::Allocate(); - wrapper->subresourceLayout->decoded_value = &(value->subresourceLayout); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->subresourceLayout); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->displayMode)); + value->displayMode = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->planeIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->planeStackIndex)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->transform)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->globalAlpha)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->alphaMode)); + wrapper->imageExtent = DecodeAllocator::Allocate(); + wrapper->imageExtent->decoded_value = &(value->imageExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageExtent); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCreateFlags2CreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPresentInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineCreateFlags2CreateInfo* value = wrapper->decoded_value; + VkDisplayPresentInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + wrapper->srcRect = DecodeAllocator::Allocate(); + wrapper->srcRect->decoded_value = &(value->srcRect); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcRect); + wrapper->dstRect = DecodeAllocator::Allocate(); + wrapper->dstRect->decoded_value = &(value->dstRect); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstRect); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->persistent)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferUsageFlags2CreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkXlibSurfaceCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBufferUsageFlags2CreateInfo* value = wrapper->decoded_value; + VkXlibSurfaceCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dpy)); + value->dpy = nullptr; + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->window)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePushDescriptorProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkXcbSurfaceCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePushDescriptorProperties* value = wrapper->decoded_value; + VkXcbSurfaceCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPushDescriptors)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->connection)); + value->connection = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->window)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkWaylandSurfaceCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDynamicRenderingLocalReadFeatures* value = wrapper->decoded_value; + VkWaylandSurfaceCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicRenderingLocalRead)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->display)); + value->display = nullptr; + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->surface)); + value->surface = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingAttachmentLocationInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAndroidSurfaceCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderingAttachmentLocationInfo* value = wrapper->decoded_value; + VkAndroidSurfaceCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); - bytes_read += wrapper->pColorAttachmentLocations.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pColorAttachmentLocations = wrapper->pColorAttachmentLocations.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->window)); + value->window = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingInputAttachmentIndexInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkWin32SurfaceCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderingInputAttachmentIndexInfo* value = wrapper->decoded_value; + VkWin32SurfaceCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); - bytes_read += wrapper->pColorAttachmentInputIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pColorAttachmentInputIndices = wrapper->pColorAttachmentInputIndices.GetPointer(); - bytes_read += wrapper->pDepthInputAttachmentIndex.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDepthInputAttachmentIndex = wrapper->pDepthInputAttachmentIndex.GetPointer(); - bytes_read += wrapper->pStencilInputAttachmentIndex.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStencilInputAttachmentIndex = wrapper->pStencilInputAttachmentIndex.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->hinstance)); + value->hinstance = nullptr; + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->hwnd)); + value->hwnd = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance6Features* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyQueryResultStatusPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMaintenance6Features* value = wrapper->decoded_value; + VkQueueFamilyQueryResultStatusPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance6)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queryResultStatusSupport)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance6Properties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyVideoPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMaintenance6Properties* value = wrapper->decoded_value; + VkQueueFamilyVideoPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->blockTexelViewCompatibleMultipleLayers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxCombinedImageSamplerDescriptorCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateClampCombinerInputs)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoCodecOperations)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindMemoryStatus* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoProfileInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindMemoryStatus* value = wrapper->decoded_value; + VkVideoProfileInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += wrapper->pResult.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pResult = wrapper->pResult.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoCodecOperation)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->chromaSubsampling)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->lumaBitDepth)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->chromaBitDepth)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindDescriptorSetsInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoProfileListInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindDescriptorSetsInfo* value = wrapper->decoded_value; + VkVideoProfileListInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageFlags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); - value->layout = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstSet)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorSetCount)); - bytes_read += wrapper->pDescriptorSets.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDescriptorSets = nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicOffsetCount)); - bytes_read += wrapper->pDynamicOffsets.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDynamicOffsets = wrapper->pDynamicOffsets.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->profileCount)); + wrapper->pProfiles = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pProfiles->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pProfiles = wrapper->pProfiles->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPushConstantsInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoCapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPushConstantsInfo* value = wrapper->decoded_value; + VkVideoCapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); - value->layout = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageFlags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); - bytes_read += wrapper->pValues.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); - value->pValues = wrapper->pValues.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minBitstreamBufferOffsetAlignment)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minBitstreamBufferSizeAlignment)); + wrapper->pictureAccessGranularity = DecodeAllocator::Allocate(); + wrapper->pictureAccessGranularity->decoded_value = &(value->pictureAccessGranularity); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->pictureAccessGranularity); + wrapper->minCodedExtent = DecodeAllocator::Allocate(); + wrapper->minCodedExtent->decoded_value = &(value->minCodedExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minCodedExtent); + wrapper->maxCodedExtent = DecodeAllocator::Allocate(); + wrapper->maxCodedExtent->decoded_value = &(value->maxCodedExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxCodedExtent); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDpbSlots)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxActiveReferencePictures)); + wrapper->stdHeaderVersion = DecodeAllocator::Allocate(); + wrapper->stdHeaderVersion->decoded_value = &(value->stdHeaderVersion); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->stdHeaderVersion); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPushDescriptorSetInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoFormatInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPushDescriptorSetInfo* value = wrapper->decoded_value; + VkPhysicalDeviceVideoFormatInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageFlags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); - value->layout = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->set)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorWriteCount)); - wrapper->pDescriptorWrites = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDescriptorWrites->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDescriptorWrites = wrapper->pDescriptorWrites->GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageUsage)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineProtectedAccessFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoFormatPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePipelineProtectedAccessFeatures* value = wrapper->decoded_value; + VkVideoFormatPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineProtectedAccess)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + wrapper->componentMapping = DecodeAllocator::Allocate(); + wrapper->componentMapping->decoded_value = &(value->componentMapping); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->componentMapping); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCreateFlags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageTiling)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageUsageFlags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineRobustnessFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoPictureResourceInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePipelineRobustnessFeatures* value = wrapper->decoded_value; + VkVideoPictureResourceInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineRobustness)); + wrapper->codedOffset = DecodeAllocator::Allocate(); + wrapper->codedOffset->decoded_value = &(value->codedOffset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->codedOffset); + wrapper->codedExtent = DecodeAllocator::Allocate(); + wrapper->codedExtent->decoded_value = &(value->codedExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->codedExtent); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseArrayLayer)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->imageViewBinding)); + value->imageViewBinding = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineRobustnessProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoReferenceSlotInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePipelineRobustnessProperties* value = wrapper->decoded_value; + VkVideoReferenceSlotInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessStorageBuffers)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessUniformBuffers)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessVertexInputs)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultRobustnessImages)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->slotIndex)); + wrapper->pPictureResource = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pPictureResource->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPictureResource = wrapper->pPictureResource->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRobustnessCreateInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoSessionMemoryRequirementsKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineRobustnessCreateInfo* value = wrapper->decoded_value; + VkVideoSessionMemoryRequirementsKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageBuffers)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformBuffers)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexInputs)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->images)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryBindIndex)); + wrapper->memoryRequirements = DecodeAllocator::Allocate(); + wrapper->memoryRequirements->decoded_value = &(value->memoryRequirements); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->memoryRequirements); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceHostImageCopyFeatures* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindVideoSessionMemoryInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceHostImageCopyFeatures* value = wrapper->decoded_value; + VkBindVideoSessionMemoryInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hostImageCopy)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryBindIndex)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryOffset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memorySize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceHostImageCopyProperties* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoSessionCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceHostImageCopyProperties* value = wrapper->decoded_value; + VkVideoSessionCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->copySrcLayoutCount)); - bytes_read += wrapper->pCopySrcLayouts.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCopySrcLayouts = wrapper->pCopySrcLayouts.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->copyDstLayoutCount)); - bytes_read += wrapper->pCopyDstLayouts.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCopyDstLayouts = wrapper->pCopyDstLayouts.GetPointer(); - wrapper->optimalTilingLayoutUUID.SetExternalMemory(value->optimalTilingLayoutUUID, VK_UUID_SIZE); - bytes_read += wrapper->optimalTilingLayoutUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->identicalMemoryTypeRequirements)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndex)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + wrapper->pVideoProfile = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pVideoProfile->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pVideoProfile = wrapper->pVideoProfile->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pictureFormat)); + wrapper->maxCodedExtent = DecodeAllocator::Allocate(); + wrapper->maxCodedExtent->decoded_value = &(value->maxCodedExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxCodedExtent); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->referencePictureFormat)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDpbSlots)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxActiveReferencePictures)); + wrapper->pStdHeaderVersion = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdHeaderVersion->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdHeaderVersion = wrapper->pStdHeaderVersion->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyImageToImageInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoSessionParametersCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCopyImageToImageInfo* value = wrapper->decoded_value; + VkVideoSessionParametersCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcImage)); - value->srcImage = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcImageLayout)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstImage)); - value->dstImage = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstImageLayout)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); - wrapper->pRegions = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pRegions = wrapper->pRegions->GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->videoSessionParametersTemplate)); + value->videoSessionParametersTemplate = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->videoSession)); + value->videoSession = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkHostImageLayoutTransitionInfo* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoSessionParametersUpdateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkHostImageLayoutTransitionInfo* value = wrapper->decoded_value; + VkVideoSessionParametersUpdateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); - value->image = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->oldLayout)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->newLayout)); - wrapper->subresourceRange = DecodeAllocator::Allocate(); - wrapper->subresourceRange->decoded_value = &(value->subresourceRange); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->subresourceRange); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->updateSequenceCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubresourceHostMemcpySize* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoBeginCodingInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSubresourceHostMemcpySize* value = wrapper->decoded_value; + VkVideoBeginCodingInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->videoSession)); + value->videoSession = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->videoSessionParameters)); + value->videoSessionParameters = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->referenceSlotCount)); + wrapper->pReferenceSlots = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pReferenceSlots->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pReferenceSlots = wrapper->pReferenceSlots->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkHostImageCopyDevicePerformanceQuery* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEndCodingInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkHostImageCopyDevicePerformanceQuery* value = wrapper->decoded_value; + VkVideoEndCodingInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->optimalDeviceAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->identicalMemoryLayout)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceCapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoCodingControlInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfaceCapabilitiesKHR* value = wrapper->decoded_value; + VkVideoCodingControlInfoKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minImageCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageCount)); - wrapper->currentExtent = DecodeAllocator::Allocate(); - wrapper->currentExtent->decoded_value = &(value->currentExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->currentExtent); - wrapper->minImageExtent = DecodeAllocator::Allocate(); - wrapper->minImageExtent->decoded_value = &(value->minImageExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minImageExtent); - wrapper->maxImageExtent = DecodeAllocator::Allocate(); - wrapper->maxImageExtent->decoded_value = &(value->maxImageExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxImageExtent); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageArrayLayers)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedTransforms)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->currentTransform)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedCompositeAlpha)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedUsageFlags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceFormatKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeCapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfaceFormatKHR* value = wrapper->decoded_value; + VkVideoDecodeCapabilitiesKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorSpace)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeUsageInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSwapchainCreateInfoKHR* value = wrapper->decoded_value; + VkVideoDecodeUsageInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->surface)); - value->surface = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minImageCount)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageFormat)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageColorSpace)); - wrapper->imageExtent = DecodeAllocator::Allocate(); - wrapper->imageExtent->decoded_value = &(value->imageExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageExtent); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageArrayLayers)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageUsage)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageSharingMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndexCount)); - bytes_read += wrapper->pQueueFamilyIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pQueueFamilyIndices = wrapper->pQueueFamilyIndices.GetPointer(); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->preTransform)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compositeAlpha)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->clipped)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->oldSwapchain)); - value->oldSwapchain = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoUsageHints)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPresentInfoKHR* value = wrapper->decoded_value; + VkVideoDecodeInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->waitSemaphoreCount)); - bytes_read += wrapper->pWaitSemaphores.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pWaitSemaphores = nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); - bytes_read += wrapper->pSwapchains.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSwapchains = nullptr; - bytes_read += wrapper->pImageIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pImageIndices = wrapper->pImageIndices.GetPointer(); - bytes_read += wrapper->pResults.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pResults = wrapper->pResults.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcBuffer)); + value->srcBuffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcBufferOffset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcBufferRange)); + wrapper->dstPictureResource = DecodeAllocator::Allocate(); + wrapper->dstPictureResource->decoded_value = &(value->dstPictureResource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstPictureResource); + wrapper->pSetupReferenceSlot = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSetupReferenceSlot->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSetupReferenceSlot = wrapper->pSetupReferenceSlot->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->referenceSlotCount)); + wrapper->pReferenceSlots = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pReferenceSlots->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pReferenceSlots = wrapper->pReferenceSlots->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageSwapchainCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264CapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageSwapchainCreateInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeH264CapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->swapchain)); - value->swapchain = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevelIdc)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSliceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPPictureL0ReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBPictureL0ReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxL1ReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTemporalLayerCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->expectDyadicTemporalLayerPattern)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minQp)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxQp)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->prefersGopRemainingFrames)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->requiresGopRemainingFrames)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdSyntaxFlags)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264QpKHR* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkVideoEncodeH264QpKHR* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qpI)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qpP)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qpB)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindImageMemorySwapchainInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264QualityLevelPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindImageMemorySwapchainInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeH264QualityLevelPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->swapchain)); - value->swapchain = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageIndex)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredRateControlFlags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredGopFrameCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredIdrPeriod)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredConsecutiveBFrameCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredTemporalLayerCount)); + wrapper->preferredConstantQp = DecodeAllocator::Allocate(); + wrapper->preferredConstantQp->decoded_value = &(value->preferredConstantQp); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->preferredConstantQp); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxL0ReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxL1ReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredStdEntropyCodingModeFlag)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAcquireNextImageInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264SessionCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAcquireNextImageInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeH264SessionCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->swapchain)); - value->swapchain = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timeout)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); - value->semaphore = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->fence)); - value->fence = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxLevelIdc)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevelIdc)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupPresentCapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264SessionParametersAddInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceGroupPresentCapabilitiesKHR* value = wrapper->decoded_value; + VkVideoEncodeH264SessionParametersAddInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->presentMask.SetExternalMemory(value->presentMask, VK_MAX_DEVICE_GROUP_SIZE); - bytes_read += wrapper->presentMask.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->modes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdSPSCount)); + wrapper->pStdSPSs = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdSPSs->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdSPSs = wrapper->pStdSPSs->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdPPSCount)); + wrapper->pStdPPSs = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdPPSs->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdPPSs = wrapper->pStdPPSs->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupPresentInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264SessionParametersCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceGroupPresentInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeH264SessionParametersCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); - bytes_read += wrapper->pDeviceMasks.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDeviceMasks = wrapper->pDeviceMasks.GetPointer(); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStdSPSCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStdPPSCount)); + wrapper->pParametersAddInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pParametersAddInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pParametersAddInfo = wrapper->pParametersAddInfo->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceGroupSwapchainCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264SessionParametersGetInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceGroupSwapchainCreateInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeH264SessionParametersGetInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->modes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->writeStdSPS)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->writeStdPPS)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdSPSId)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdPPSId)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayModeParametersKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264SessionParametersFeedbackInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayModeParametersKHR* value = wrapper->decoded_value; + VkVideoEncodeH264SessionParametersFeedbackInfoKHR* value = wrapper->decoded_value; - wrapper->visibleRegion = DecodeAllocator::Allocate(); - wrapper->visibleRegion->decoded_value = &(value->visibleRegion); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->visibleRegion); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->refreshRate)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hasStdSPSOverrides)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hasStdPPSOverrides)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayModeCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264NaluSliceInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayModeCreateInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeH264NaluSliceInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - wrapper->parameters = DecodeAllocator::Allocate(); - wrapper->parameters->decoded_value = &(value->parameters); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->parameters); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->constantQp)); + wrapper->pStdSliceHeader = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdSliceHeader->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdSliceHeader = wrapper->pStdSliceHeader->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayModePropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264PictureInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayModePropertiesKHR* value = wrapper->decoded_value; + VkVideoEncodeH264PictureInfoKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->displayMode)); - value->displayMode = VK_NULL_HANDLE; - wrapper->parameters = DecodeAllocator::Allocate(); - wrapper->parameters->decoded_value = &(value->parameters); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->parameters); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->naluSliceEntryCount)); + wrapper->pNaluSliceEntries = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pNaluSliceEntries->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pNaluSliceEntries = wrapper->pNaluSliceEntries->GetPointer(); + wrapper->pStdPictureInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdPictureInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdPictureInfo = wrapper->pStdPictureInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->generatePrefixNalu)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPlaneCapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264DpbSlotInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayPlaneCapabilitiesKHR* value = wrapper->decoded_value; + VkVideoEncodeH264DpbSlotInfoKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedAlpha)); - wrapper->minSrcPosition = DecodeAllocator::Allocate(); - wrapper->minSrcPosition->decoded_value = &(value->minSrcPosition); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minSrcPosition); - wrapper->maxSrcPosition = DecodeAllocator::Allocate(); - wrapper->maxSrcPosition->decoded_value = &(value->maxSrcPosition); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxSrcPosition); - wrapper->minSrcExtent = DecodeAllocator::Allocate(); - wrapper->minSrcExtent->decoded_value = &(value->minSrcExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minSrcExtent); - wrapper->maxSrcExtent = DecodeAllocator::Allocate(); - wrapper->maxSrcExtent->decoded_value = &(value->maxSrcExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxSrcExtent); - wrapper->minDstPosition = DecodeAllocator::Allocate(); - wrapper->minDstPosition->decoded_value = &(value->minDstPosition); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minDstPosition); - wrapper->maxDstPosition = DecodeAllocator::Allocate(); - wrapper->maxDstPosition->decoded_value = &(value->maxDstPosition); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxDstPosition); - wrapper->minDstExtent = DecodeAllocator::Allocate(); - wrapper->minDstExtent->decoded_value = &(value->minDstExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minDstExtent); - wrapper->maxDstExtent = DecodeAllocator::Allocate(); - wrapper->maxDstExtent->decoded_value = &(value->maxDstExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxDstExtent); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->pStdReferenceInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdReferenceInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdReferenceInfo = wrapper->pStdReferenceInfo->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPlanePropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264ProfileInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayPlanePropertiesKHR* value = wrapper->decoded_value; + VkVideoEncodeH264ProfileInfoKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->currentDisplay)); - value->currentDisplay = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->currentStackIndex)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdProfileIdc)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264RateControlInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayPropertiesKHR* value = wrapper->decoded_value; + VkVideoEncodeH264RateControlInfoKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->display)); - value->display = VK_NULL_HANDLE; - bytes_read += wrapper->displayName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->displayName = wrapper->displayName.GetPointer(); - wrapper->physicalDimensions = DecodeAllocator::Allocate(); - wrapper->physicalDimensions->decoded_value = &(value->physicalDimensions); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->physicalDimensions); - wrapper->physicalResolution = DecodeAllocator::Allocate(); - wrapper->physicalResolution->decoded_value = &(value->physicalResolution); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->physicalResolution); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedTransforms)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->planeReorderPossible)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->persistentContent)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopFrameCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->idrPeriod)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->consecutiveBFrameCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->temporalLayerCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplaySurfaceCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264FrameSizeKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplaySurfaceCreateInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeH264FrameSizeKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->displayMode)); - value->displayMode = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->planeIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->planeStackIndex)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->transform)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->globalAlpha)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->alphaMode)); - wrapper->imageExtent = DecodeAllocator::Allocate(); - wrapper->imageExtent->decoded_value = &(value->imageExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageExtent); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameISize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->framePSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameBSize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPresentInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264RateControlLayerInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayPresentInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeH264RateControlLayerInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->srcRect = DecodeAllocator::Allocate(); - wrapper->srcRect->decoded_value = &(value->srcRect); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcRect); - wrapper->dstRect = DecodeAllocator::Allocate(); - wrapper->dstRect->decoded_value = &(value->dstRect); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstRect); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->persistent)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMinQp)); + wrapper->minQp = DecodeAllocator::Allocate(); + wrapper->minQp->decoded_value = &(value->minQp); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minQp); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxQp)); + wrapper->maxQp = DecodeAllocator::Allocate(); + wrapper->maxQp->decoded_value = &(value->maxQp); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxQp); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxFrameSize)); + wrapper->maxFrameSize = DecodeAllocator::Allocate(); + wrapper->maxFrameSize->decoded_value = &(value->maxFrameSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxFrameSize); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkXlibSurfaceCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264GopRemainingFrameInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkXlibSurfaceCreateInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeH264GopRemainingFrameInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dpy)); - value->dpy = nullptr; - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->window)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useGopRemainingFrames)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingI)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingP)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingB)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkXcbSurfaceCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH264ProfileInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkXcbSurfaceCreateInfoKHR* value = wrapper->decoded_value; + VkVideoDecodeH264ProfileInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->connection)); - value->connection = nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->window)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdProfileIdc)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pictureLayout)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkWaylandSurfaceCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH264CapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkWaylandSurfaceCreateInfoKHR* value = wrapper->decoded_value; + VkVideoDecodeH264CapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->display)); - value->display = nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->surface)); - value->surface = nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevelIdc)); + wrapper->fieldOffsetGranularity = DecodeAllocator::Allocate(); + wrapper->fieldOffsetGranularity->decoded_value = &(value->fieldOffsetGranularity); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->fieldOffsetGranularity); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAndroidSurfaceCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH264SessionParametersAddInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAndroidSurfaceCreateInfoKHR* value = wrapper->decoded_value; + VkVideoDecodeH264SessionParametersAddInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->window)); - value->window = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdSPSCount)); + wrapper->pStdSPSs = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdSPSs->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdSPSs = wrapper->pStdSPSs->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdPPSCount)); + wrapper->pStdPPSs = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdPPSs->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdPPSs = wrapper->pStdPPSs->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkWin32SurfaceCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH264SessionParametersCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkWin32SurfaceCreateInfoKHR* value = wrapper->decoded_value; + VkVideoDecodeH264SessionParametersCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->hinstance)); - value->hinstance = nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->hwnd)); - value->hwnd = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStdSPSCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStdPPSCount)); + wrapper->pParametersAddInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pParametersAddInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pParametersAddInfo = wrapper->pParametersAddInfo->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyQueryResultStatusPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH264PictureInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkQueueFamilyQueryResultStatusPropertiesKHR* value = wrapper->decoded_value; + VkVideoDecodeH264PictureInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queryResultStatusSupport)); + wrapper->pStdPictureInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdPictureInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdPictureInfo = wrapper->pStdPictureInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sliceCount)); + bytes_read += wrapper->pSliceOffsets.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSliceOffsets = wrapper->pSliceOffsets.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyVideoPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH264DpbSlotInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkQueueFamilyVideoPropertiesKHR* value = wrapper->decoded_value; + VkVideoDecodeH264DpbSlotInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoCodecOperations)); + wrapper->pStdReferenceInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdReferenceInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdReferenceInfo = wrapper->pStdReferenceInfo->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoProfileInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportMemoryWin32HandleInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoProfileInfoKHR* value = wrapper->decoded_value; + VkImportMemoryWin32HandleInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoCodecOperation)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->chromaSubsampling)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->lumaBitDepth)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->chromaBitDepth)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->handle)); + value->handle = nullptr; + bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->name = wrapper->name.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoProfileListInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportMemoryWin32HandleInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoProfileListInfoKHR* value = wrapper->decoded_value; + VkExportMemoryWin32HandleInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->profileCount)); - wrapper->pProfiles = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pProfiles->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pProfiles = wrapper->pProfiles->GetPointer(); + wrapper->pAttributes = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pAttributes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAttributes = wrapper->pAttributes->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dwAccess)); + bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->name = wrapper->name.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoCapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryWin32HandlePropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoCapabilitiesKHR* value = wrapper->decoded_value; + VkMemoryWin32HandlePropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minBitstreamBufferOffsetAlignment)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minBitstreamBufferSizeAlignment)); - wrapper->pictureAccessGranularity = DecodeAllocator::Allocate(); - wrapper->pictureAccessGranularity->decoded_value = &(value->pictureAccessGranularity); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->pictureAccessGranularity); - wrapper->minCodedExtent = DecodeAllocator::Allocate(); - wrapper->minCodedExtent->decoded_value = &(value->minCodedExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minCodedExtent); - wrapper->maxCodedExtent = DecodeAllocator::Allocate(); - wrapper->maxCodedExtent->decoded_value = &(value->maxCodedExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxCodedExtent); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDpbSlots)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxActiveReferencePictures)); - wrapper->stdHeaderVersion = DecodeAllocator::Allocate(); - wrapper->stdHeaderVersion->decoded_value = &(value->stdHeaderVersion); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->stdHeaderVersion); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeBits)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoFormatInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryGetWin32HandleInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVideoFormatInfoKHR* value = wrapper->decoded_value; + VkMemoryGetWin32HandleInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageUsage)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoFormatPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportMemoryFdInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoFormatPropertiesKHR* value = wrapper->decoded_value; + VkImportMemoryFdInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - wrapper->componentMapping = DecodeAllocator::Allocate(); - wrapper->componentMapping->decoded_value = &(value->componentMapping); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->componentMapping); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCreateFlags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageType)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageTiling)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageUsageFlags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fd)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoPictureResourceInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryFdPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoPictureResourceInfoKHR* value = wrapper->decoded_value; + VkMemoryFdPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->codedOffset = DecodeAllocator::Allocate(); - wrapper->codedOffset->decoded_value = &(value->codedOffset); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->codedOffset); - wrapper->codedExtent = DecodeAllocator::Allocate(); - wrapper->codedExtent->decoded_value = &(value->codedExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->codedExtent); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseArrayLayer)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->imageViewBinding)); - value->imageViewBinding = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeBits)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoReferenceSlotInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryGetFdInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoReferenceSlotInfoKHR* value = wrapper->decoded_value; + VkMemoryGetFdInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->slotIndex)); - wrapper->pPictureResource = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pPictureResource->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPictureResource = wrapper->pPictureResource->GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoSessionMemoryRequirementsKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkWin32KeyedMutexAcquireReleaseInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoSessionMemoryRequirementsKHR* value = wrapper->decoded_value; + VkWin32KeyedMutexAcquireReleaseInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryBindIndex)); - wrapper->memoryRequirements = DecodeAllocator::Allocate(); - wrapper->memoryRequirements->decoded_value = &(value->memoryRequirements); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->memoryRequirements); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->acquireCount)); + bytes_read += wrapper->pAcquireSyncs.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAcquireSyncs = nullptr; + bytes_read += wrapper->pAcquireKeys.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAcquireKeys = wrapper->pAcquireKeys.GetPointer(); + bytes_read += wrapper->pAcquireTimeouts.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAcquireTimeouts = wrapper->pAcquireTimeouts.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->releaseCount)); + bytes_read += wrapper->pReleaseSyncs.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pReleaseSyncs = nullptr; + bytes_read += wrapper->pReleaseKeys.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pReleaseKeys = wrapper->pReleaseKeys.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindVideoSessionMemoryInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportSemaphoreWin32HandleInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindVideoSessionMemoryInfoKHR* value = wrapper->decoded_value; + VkImportSemaphoreWin32HandleInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryBindIndex)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryOffset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memorySize)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); + value->semaphore = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->handle)); + value->handle = nullptr; + bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->name = wrapper->name.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoSessionCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportSemaphoreWin32HandleInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoSessionCreateInfoKHR* value = wrapper->decoded_value; + VkExportSemaphoreWin32HandleInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndex)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - wrapper->pVideoProfile = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pVideoProfile->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pVideoProfile = wrapper->pVideoProfile->GetPointer(); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pictureFormat)); - wrapper->maxCodedExtent = DecodeAllocator::Allocate(); - wrapper->maxCodedExtent->decoded_value = &(value->maxCodedExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxCodedExtent); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->referencePictureFormat)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDpbSlots)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxActiveReferencePictures)); - wrapper->pStdHeaderVersion = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdHeaderVersion->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdHeaderVersion = wrapper->pStdHeaderVersion->GetPointer(); + wrapper->pAttributes = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pAttributes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAttributes = wrapper->pAttributes->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dwAccess)); + bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->name = wrapper->name.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoSessionParametersCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkD3D12FenceSubmitInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoSessionParametersCreateInfoKHR* value = wrapper->decoded_value; + VkD3D12FenceSubmitInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->videoSessionParametersTemplate)); - value->videoSessionParametersTemplate = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->videoSession)); - value->videoSession = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->waitSemaphoreValuesCount)); + bytes_read += wrapper->pWaitSemaphoreValues.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pWaitSemaphoreValues = wrapper->pWaitSemaphoreValues.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->signalSemaphoreValuesCount)); + bytes_read += wrapper->pSignalSemaphoreValues.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSignalSemaphoreValues = wrapper->pSignalSemaphoreValues.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoSessionParametersUpdateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreGetWin32HandleInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoSessionParametersUpdateInfoKHR* value = wrapper->decoded_value; + VkSemaphoreGetWin32HandleInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->updateSequenceCount)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); + value->semaphore = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoBeginCodingInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportSemaphoreFdInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoBeginCodingInfoKHR* value = wrapper->decoded_value; + VkImportSemaphoreFdInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->videoSession)); - value->videoSession = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->videoSessionParameters)); - value->videoSessionParameters = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->referenceSlotCount)); - wrapper->pReferenceSlots = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pReferenceSlots->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pReferenceSlots = wrapper->pReferenceSlots->GetPointer(); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); + value->semaphore = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fd)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEndCodingInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreGetFdInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEndCodingInfoKHR* value = wrapper->decoded_value; + VkSemaphoreGetFdInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); + value->semaphore = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoCodingControlInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRectLayerKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoCodingControlInfoKHR* value = wrapper->decoded_value; + VkRectLayerKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + wrapper->offset = DecodeAllocator::Allocate(); + wrapper->offset->decoded_value = &(value->offset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->offset); + wrapper->extent = DecodeAllocator::Allocate(); + wrapper->extent->decoded_value = &(value->extent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layer)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeCapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentRegionKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeCapabilitiesKHR* value = wrapper->decoded_value; + VkPresentRegionKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rectangleCount)); + wrapper->pRectangles = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pRectangles->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pRectangles = wrapper->pRectangles->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeUsageInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentRegionsKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeUsageInfoKHR* value = wrapper->decoded_value; + VkPresentRegionsKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoUsageHints)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); + wrapper->pRegions = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pRegions = wrapper->pRegions->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSharedPresentSurfaceCapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeInfoKHR* value = wrapper->decoded_value; + VkSharedPresentSurfaceCapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->srcBuffer)); - value->srcBuffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcBufferOffset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcBufferRange)); - wrapper->dstPictureResource = DecodeAllocator::Allocate(); - wrapper->dstPictureResource->decoded_value = &(value->dstPictureResource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstPictureResource); - wrapper->pSetupReferenceSlot = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSetupReferenceSlot->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSetupReferenceSlot = wrapper->pSetupReferenceSlot->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->referenceSlotCount)); - wrapper->pReferenceSlots = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pReferenceSlots->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pReferenceSlots = wrapper->pReferenceSlots->GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sharedPresentSupportedUsageFlags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264CapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportFenceWin32HandleInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264CapabilitiesKHR* value = wrapper->decoded_value; + VkImportFenceWin32HandleInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->fence)); + value->fence = VK_NULL_HANDLE; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevelIdc)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSliceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPPictureL0ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBPictureL0ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxL1ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTemporalLayerCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->expectDyadicTemporalLayerPattern)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minQp)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxQp)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->prefersGopRemainingFrames)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->requiresGopRemainingFrames)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdSyntaxFlags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->handle)); + value->handle = nullptr; + bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->name = wrapper->name.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264QpKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportFenceWin32HandleInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264QpKHR* value = wrapper->decoded_value; + VkExportFenceWin32HandleInfoKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qpI)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qpP)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qpB)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->pAttributes = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pAttributes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAttributes = wrapper->pAttributes->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dwAccess)); + bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->name = wrapper->name.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264QualityLevelPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFenceGetWin32HandleInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264QualityLevelPropertiesKHR* value = wrapper->decoded_value; + VkFenceGetWin32HandleInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredRateControlFlags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredGopFrameCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredIdrPeriod)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredConsecutiveBFrameCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredTemporalLayerCount)); - wrapper->preferredConstantQp = DecodeAllocator::Allocate(); - wrapper->preferredConstantQp->decoded_value = &(value->preferredConstantQp); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->preferredConstantQp); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxL0ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxL1ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredStdEntropyCodingModeFlag)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->fence)); + value->fence = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264SessionCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportFenceFdInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264SessionCreateInfoKHR* value = wrapper->decoded_value; + VkImportFenceFdInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxLevelIdc)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevelIdc)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->fence)); + value->fence = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fd)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264SessionParametersAddInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFenceGetFdInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264SessionParametersAddInfoKHR* value = wrapper->decoded_value; + VkFenceGetFdInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdSPSCount)); - wrapper->pStdSPSs = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdSPSs->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdSPSs = wrapper->pStdSPSs->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdPPSCount)); - wrapper->pStdPPSs = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdPPSs->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdPPSs = wrapper->pStdPPSs->GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->fence)); + value->fence = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264SessionParametersCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePerformanceQueryFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264SessionParametersCreateInfoKHR* value = wrapper->decoded_value; + VkPhysicalDevicePerformanceQueryFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStdSPSCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStdPPSCount)); - wrapper->pParametersAddInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pParametersAddInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pParametersAddInfo = wrapper->pParametersAddInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->performanceCounterQueryPools)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->performanceCounterMultipleQueryPools)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264SessionParametersGetInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePerformanceQueryPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264SessionParametersGetInfoKHR* value = wrapper->decoded_value; + VkPhysicalDevicePerformanceQueryPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->writeStdSPS)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->writeStdPPS)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdSPSId)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdPPSId)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->allowCommandBufferQueryCopies)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264SessionParametersFeedbackInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceCounterKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264SessionParametersFeedbackInfoKHR* value = wrapper->decoded_value; + VkPerformanceCounterKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hasStdSPSOverrides)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hasStdPPSOverrides)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->unit)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->scope)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storage)); + wrapper->uuid.SetExternalMemory(value->uuid, VK_UUID_SIZE); + bytes_read += wrapper->uuid.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264NaluSliceInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceCounterDescriptionKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264NaluSliceInfoKHR* value = wrapper->decoded_value; + VkPerformanceCounterDescriptionKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->constantQp)); - wrapper->pStdSliceHeader = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdSliceHeader->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdSliceHeader = wrapper->pStdSliceHeader->GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + wrapper->name.SetExternalMemory(value->name, VK_MAX_DESCRIPTION_SIZE); + bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->category.SetExternalMemory(value->category, VK_MAX_DESCRIPTION_SIZE); + bytes_read += wrapper->category.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); + bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264PictureInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueryPoolPerformanceCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264PictureInfoKHR* value = wrapper->decoded_value; + VkQueryPoolPerformanceCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->naluSliceEntryCount)); - wrapper->pNaluSliceEntries = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pNaluSliceEntries->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pNaluSliceEntries = wrapper->pNaluSliceEntries->GetPointer(); - wrapper->pStdPictureInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdPictureInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdPictureInfo = wrapper->pStdPictureInfo->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->generatePrefixNalu)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->counterIndexCount)); + bytes_read += wrapper->pCounterIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCounterIndices = wrapper->pCounterIndices.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264DpbSlotInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAcquireProfilingLockInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264DpbSlotInfoKHR* value = wrapper->decoded_value; + VkAcquireProfilingLockInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdReferenceInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdReferenceInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdReferenceInfo = wrapper->pStdReferenceInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timeout)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264ProfileInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceQuerySubmitInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264ProfileInfoKHR* value = wrapper->decoded_value; + VkPerformanceQuerySubmitInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdProfileIdc)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->counterPassIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264RateControlInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSurfaceInfo2KHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264RateControlInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceSurfaceInfo2KHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopFrameCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->idrPeriod)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->consecutiveBFrameCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->temporalLayerCount)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->surface)); + value->surface = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264FrameSizeKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceCapabilities2KHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264FrameSizeKHR* value = wrapper->decoded_value; + VkSurfaceCapabilities2KHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameISize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->framePSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameBSize)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->surfaceCapabilities = DecodeAllocator::Allocate(); + wrapper->surfaceCapabilities->decoded_value = &(value->surfaceCapabilities); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->surfaceCapabilities); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264RateControlLayerInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceFormat2KHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264RateControlLayerInfoKHR* value = wrapper->decoded_value; + VkSurfaceFormat2KHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMinQp)); - wrapper->minQp = DecodeAllocator::Allocate(); - wrapper->minQp->decoded_value = &(value->minQp); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minQp); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxQp)); - wrapper->maxQp = DecodeAllocator::Allocate(); - wrapper->maxQp->decoded_value = &(value->maxQp); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxQp); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxFrameSize)); - wrapper->maxFrameSize = DecodeAllocator::Allocate(); - wrapper->maxFrameSize->decoded_value = &(value->maxFrameSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxFrameSize); + wrapper->surfaceFormat = DecodeAllocator::Allocate(); + wrapper->surfaceFormat->decoded_value = &(value->surfaceFormat); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->surfaceFormat); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264GopRemainingFrameInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayProperties2KHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264GopRemainingFrameInfoKHR* value = wrapper->decoded_value; + VkDisplayProperties2KHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useGopRemainingFrames)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingI)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingP)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingB)); + wrapper->displayProperties = DecodeAllocator::Allocate(); + wrapper->displayProperties->decoded_value = &(value->displayProperties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displayProperties); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265CapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPlaneProperties2KHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265CapabilitiesKHR* value = wrapper->decoded_value; + VkDisplayPlaneProperties2KHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevelIdc)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSliceSegmentCount)); - wrapper->maxTiles = DecodeAllocator::Allocate(); - wrapper->maxTiles->decoded_value = &(value->maxTiles); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxTiles); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->ctbSizes)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformBlockSizes)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPPictureL0ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBPictureL0ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxL1ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSubLayerCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->expectDyadicTemporalSubLayerPattern)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minQp)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxQp)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->prefersGopRemainingFrames)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->requiresGopRemainingFrames)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdSyntaxFlags)); + wrapper->displayPlaneProperties = DecodeAllocator::Allocate(); + wrapper->displayPlaneProperties->decoded_value = &(value->displayPlaneProperties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displayPlaneProperties); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265SessionCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayModeProperties2KHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265SessionCreateInfoKHR* value = wrapper->decoded_value; + VkDisplayModeProperties2KHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxLevelIdc)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevelIdc)); + wrapper->displayModeProperties = DecodeAllocator::Allocate(); + wrapper->displayModeProperties->decoded_value = &(value->displayModeProperties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displayModeProperties); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265QpKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPlaneInfo2KHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265QpKHR* value = wrapper->decoded_value; + VkDisplayPlaneInfo2KHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qpI)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qpP)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qpB)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->mode)); + value->mode = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->planeIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265QualityLevelPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPlaneCapabilities2KHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265QualityLevelPropertiesKHR* value = wrapper->decoded_value; + VkDisplayPlaneCapabilities2KHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredRateControlFlags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredGopFrameCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredIdrPeriod)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredConsecutiveBFrameCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredSubLayerCount)); - wrapper->preferredConstantQp = DecodeAllocator::Allocate(); - wrapper->preferredConstantQp->decoded_value = &(value->preferredConstantQp); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->preferredConstantQp); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxL0ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxL1ReferenceCount)); + wrapper->capabilities = DecodeAllocator::Allocate(); + wrapper->capabilities->decoded_value = &(value->capabilities); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->capabilities); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265SessionParametersAddInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderBfloat16FeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265SessionParametersAddInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceShaderBfloat16FeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdVPSCount)); - wrapper->pStdVPSs = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdVPSs->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdVPSs = wrapper->pStdVPSs->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdSPSCount)); - wrapper->pStdSPSs = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdSPSs->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdSPSs = wrapper->pStdSPSs->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdPPSCount)); - wrapper->pStdPPSs = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdPPSs->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdPPSs = wrapper->pStdPPSs->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBFloat16Type)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBFloat16DotProduct)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBFloat16CooperativeMatrix)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265SessionParametersCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePortabilitySubsetFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265SessionParametersCreateInfoKHR* value = wrapper->decoded_value; + VkPhysicalDevicePortabilitySubsetFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStdVPSCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStdSPSCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStdPPSCount)); - wrapper->pParametersAddInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pParametersAddInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pParametersAddInfo = wrapper->pParametersAddInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->constantAlphaColorBlendFactors)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->events)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageViewFormatReinterpretation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageViewFormatSwizzle)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageView2DOn3DImage)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multisampleArrayImage)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mutableComparisonSamplers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pointPolygons)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerMipLodBias)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->separateStencilMaskRef)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSampleRateInterpolationFunctions)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tessellationIsolines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tessellationPointMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->triangleFans)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexAttributeAccessBeyondStride)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265SessionParametersGetInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePortabilitySubsetPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265SessionParametersGetInfoKHR* value = wrapper->decoded_value; + VkPhysicalDevicePortabilitySubsetPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->writeStdVPS)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->writeStdSPS)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->writeStdPPS)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdVPSId)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdSPSId)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdPPSId)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minVertexInputBindingStrideAlignment)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265SessionParametersFeedbackInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderClockFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265SessionParametersFeedbackInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceShaderClockFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hasStdVPSOverrides)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hasStdSPSOverrides)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hasStdPPSOverrides)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupClock)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDeviceClock)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265NaluSliceSegmentInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFragmentShadingRateAttachmentInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265NaluSliceSegmentInfoKHR* value = wrapper->decoded_value; + VkFragmentShadingRateAttachmentInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->constantQp)); - wrapper->pStdSliceSegmentHeader = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdSliceSegmentHeader->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdSliceSegmentHeader = wrapper->pStdSliceSegmentHeader->GetPointer(); + wrapper->pFragmentShadingRateAttachment = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pFragmentShadingRateAttachment->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pFragmentShadingRateAttachment = wrapper->pFragmentShadingRateAttachment->GetPointer(); + wrapper->shadingRateAttachmentTexelSize = DecodeAllocator::Allocate(); + wrapper->shadingRateAttachmentTexelSize->decoded_value = &(value->shadingRateAttachmentTexelSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->shadingRateAttachmentTexelSize); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265PictureInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineFragmentShadingRateStateCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265PictureInfoKHR* value = wrapper->decoded_value; + VkPipelineFragmentShadingRateStateCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->naluSliceSegmentEntryCount)); - wrapper->pNaluSliceSegmentEntries = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pNaluSliceSegmentEntries->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pNaluSliceSegmentEntries = wrapper->pNaluSliceSegmentEntries->GetPointer(); - wrapper->pStdPictureInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdPictureInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdPictureInfo = wrapper->pStdPictureInfo->GetPointer(); + wrapper->fragmentSize = DecodeAllocator::Allocate(); + wrapper->fragmentSize->decoded_value = &(value->fragmentSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->fragmentSize); + wrapper->combinerOps.SetExternalMemory(value->combinerOps, 2); + bytes_read += wrapper->combinerOps.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265DpbSlotInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShadingRateFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265DpbSlotInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceFragmentShadingRateFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdReferenceInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdReferenceInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdReferenceInfo = wrapper->pStdReferenceInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineFragmentShadingRate)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitiveFragmentShadingRate)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentFragmentShadingRate)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265ProfileInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShadingRatePropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265ProfileInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceFragmentShadingRatePropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdProfileIdc)); + wrapper->minFragmentShadingRateAttachmentTexelSize = DecodeAllocator::Allocate(); + wrapper->minFragmentShadingRateAttachmentTexelSize->decoded_value = &(value->minFragmentShadingRateAttachmentTexelSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minFragmentShadingRateAttachmentTexelSize); + wrapper->maxFragmentShadingRateAttachmentTexelSize = DecodeAllocator::Allocate(); + wrapper->maxFragmentShadingRateAttachmentTexelSize->decoded_value = &(value->maxFragmentShadingRateAttachmentTexelSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxFragmentShadingRateAttachmentTexelSize); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentShadingRateAttachmentTexelSizeAspectRatio)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitiveFragmentShadingRateWithMultipleViewports)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layeredShadingRateAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateNonTrivialCombinerOps)); + wrapper->maxFragmentSize = DecodeAllocator::Allocate(); + wrapper->maxFragmentSize->decoded_value = &(value->maxFragmentSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxFragmentSize); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentSizeAspectRatio)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentShadingRateCoverageSamples)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentShadingRateRasterizationSamples)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateWithShaderDepthStencilWrites)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateWithSampleMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateWithShaderSampleMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateWithConservativeRasterization)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateWithFragmentShaderInterlock)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateWithCustomSampleLocations)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateStrictMultiplyCombiner)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265RateControlInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShadingRateKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265RateControlInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceFragmentShadingRateKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopFrameCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->idrPeriod)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->consecutiveBFrameCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subLayerCount)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleCounts)); + wrapper->fragmentSize = DecodeAllocator::Allocate(); + wrapper->fragmentSize->decoded_value = &(value->fragmentSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->fragmentSize); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265FrameSizeKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingFragmentShadingRateAttachmentInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265FrameSizeKHR* value = wrapper->decoded_value; + VkRenderingFragmentShadingRateAttachmentInfoKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameISize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->framePSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameBSize)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->imageView)); + value->imageView = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageLayout)); + wrapper->shadingRateAttachmentTexelSize = DecodeAllocator::Allocate(); + wrapper->shadingRateAttachmentTexelSize->decoded_value = &(value->shadingRateAttachmentTexelSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->shadingRateAttachmentTexelSize); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265RateControlLayerInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderQuadControlFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265RateControlLayerInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceShaderQuadControlFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMinQp)); - wrapper->minQp = DecodeAllocator::Allocate(); - wrapper->minQp->decoded_value = &(value->minQp); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minQp); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxQp)); - wrapper->maxQp = DecodeAllocator::Allocate(); - wrapper->maxQp->decoded_value = &(value->maxQp); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxQp); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxFrameSize)); - wrapper->maxFrameSize = DecodeAllocator::Allocate(); - wrapper->maxFrameSize->decoded_value = &(value->maxFrameSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxFrameSize); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderQuadControl)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265GopRemainingFrameInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceProtectedCapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265GopRemainingFrameInfoKHR* value = wrapper->decoded_value; + VkSurfaceProtectedCapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useGopRemainingFrames)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingI)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingP)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingB)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportsProtected)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH264ProfileInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentWaitFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeH264ProfileInfoKHR* value = wrapper->decoded_value; + VkPhysicalDevicePresentWaitFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdProfileIdc)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pictureLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentWait)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH264CapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeH264CapabilitiesKHR* value = wrapper->decoded_value; + VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevelIdc)); - wrapper->fieldOffsetGranularity = DecodeAllocator::Allocate(); - wrapper->fieldOffsetGranularity->decoded_value = &(value->fieldOffsetGranularity); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->fieldOffsetGranularity); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineExecutableInfo)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH264SessionParametersAddInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeH264SessionParametersAddInfoKHR* value = wrapper->decoded_value; + VkPipelineInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdSPSCount)); - wrapper->pStdSPSs = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdSPSs->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdSPSs = wrapper->pStdSPSs->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdPPSCount)); - wrapper->pStdPPSs = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdPPSs->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdPPSs = wrapper->pStdPPSs->GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipeline)); + value->pipeline = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH264SessionParametersCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineExecutablePropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeH264SessionParametersCreateInfoKHR* value = wrapper->decoded_value; + VkPipelineExecutablePropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStdSPSCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStdPPSCount)); - wrapper->pParametersAddInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pParametersAddInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pParametersAddInfo = wrapper->pParametersAddInfo->GetPointer(); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stages)); + wrapper->name.SetExternalMemory(value->name, VK_MAX_DESCRIPTION_SIZE); + bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); + bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupSize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH264PictureInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineExecutableInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeH264PictureInfoKHR* value = wrapper->decoded_value; + VkPipelineExecutableInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdPictureInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdPictureInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdPictureInfo = wrapper->pStdPictureInfo->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sliceCount)); - bytes_read += wrapper->pSliceOffsets.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSliceOffsets = wrapper->pSliceOffsets.GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipeline)); + value->pipeline = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->executableIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH264DpbSlotInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineExecutableStatisticKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeH264DpbSlotInfoKHR* value = wrapper->decoded_value; + VkPipelineExecutableStatisticKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdReferenceInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdReferenceInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdReferenceInfo = wrapper->pStdReferenceInfo->GetPointer(); + wrapper->name.SetExternalMemory(value->name, VK_MAX_DESCRIPTION_SIZE); + bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); + bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + wrapper->value = DecodeAllocator::Allocate(); + wrapper->value->decoded_value = &(value->value); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->value); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportMemoryWin32HandleInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineExecutableInternalRepresentationKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImportMemoryWin32HandleInfoKHR* value = wrapper->decoded_value; + VkPipelineExecutableInternalRepresentationKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->handle)); - value->handle = nullptr; + wrapper->name.SetExternalMemory(value->name, VK_MAX_DESCRIPTION_SIZE); bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->name = wrapper->name.GetPointer(); + wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); + bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->isText)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataSize)); + bytes_read += wrapper->pData.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); + value->pData = wrapper->pData.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportMemoryWin32HandleInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineLibraryCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExportMemoryWin32HandleInfoKHR* value = wrapper->decoded_value; + VkPipelineLibraryCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pAttributes = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pAttributes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAttributes = wrapper->pAttributes->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dwAccess)); - bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->name = wrapper->name.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->libraryCount)); + bytes_read += wrapper->pLibraries.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pLibraries = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryWin32HandlePropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentIdKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryWin32HandlePropertiesKHR* value = wrapper->decoded_value; + VkPresentIdKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeBits)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); + bytes_read += wrapper->pPresentIds.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPresentIds = wrapper->pPresentIds.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryGetWin32HandleInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentIdFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryGetWin32HandleInfoKHR* value = wrapper->decoded_value; + VkPhysicalDevicePresentIdFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentId)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportMemoryFdInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImportMemoryFdInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fd)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstBuffer)); + value->dstBuffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstBufferOffset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstBufferRange)); + wrapper->srcPictureResource = DecodeAllocator::Allocate(); + wrapper->srcPictureResource->decoded_value = &(value->srcPictureResource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcPictureResource); + wrapper->pSetupReferenceSlot = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSetupReferenceSlot->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSetupReferenceSlot = wrapper->pSetupReferenceSlot->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->referenceSlotCount)); + wrapper->pReferenceSlots = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pReferenceSlots->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pReferenceSlots = wrapper->pReferenceSlots->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->precedingExternallyEncodedBytes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryFdPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeCapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryFdPropertiesKHR* value = wrapper->decoded_value; + VkVideoEncodeCapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeBits)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rateControlModes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxRateControlLayers)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBitrate)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxQualityLevels)); + wrapper->encodeInputPictureGranularity = DecodeAllocator::Allocate(); + wrapper->encodeInputPictureGranularity->decoded_value = &(value->encodeInputPictureGranularity); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->encodeInputPictureGranularity); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedEncodeFeedbackFlags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryGetFdInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueryPoolVideoEncodeFeedbackCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryGetFdInfoKHR* value = wrapper->decoded_value; + VkQueryPoolVideoEncodeFeedbackCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->encodeFeedbackFlags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkWin32KeyedMutexAcquireReleaseInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeUsageInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkWin32KeyedMutexAcquireReleaseInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeUsageInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->acquireCount)); - bytes_read += wrapper->pAcquireSyncs.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAcquireSyncs = nullptr; - bytes_read += wrapper->pAcquireKeys.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAcquireKeys = wrapper->pAcquireKeys.GetPointer(); - bytes_read += wrapper->pAcquireTimeouts.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAcquireTimeouts = wrapper->pAcquireTimeouts.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->releaseCount)); - bytes_read += wrapper->pReleaseSyncs.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pReleaseSyncs = nullptr; - bytes_read += wrapper->pReleaseKeys.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); - value->pReleaseKeys = wrapper->pReleaseKeys.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoUsageHints)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoContentHints)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tuningMode)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportSemaphoreWin32HandleInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeRateControlLayerInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImportSemaphoreWin32HandleInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeRateControlLayerInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); - value->semaphore = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->handle)); - value->handle = nullptr; - bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->name = wrapper->name.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->averageBitrate)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBitrate)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameRateNumerator)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameRateDenominator)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportSemaphoreWin32HandleInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeRateControlInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExportSemaphoreWin32HandleInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeRateControlInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pAttributes = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pAttributes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAttributes = wrapper->pAttributes->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dwAccess)); - bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->name = wrapper->name.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rateControlMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layerCount)); + wrapper->pLayers = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pLayers->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pLayers = wrapper->pLayers->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->virtualBufferSizeInMs)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->initialVirtualBufferSizeInMs)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkD3D12FenceSubmitInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkD3D12FenceSubmitInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->waitSemaphoreValuesCount)); - bytes_read += wrapper->pWaitSemaphoreValues.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); - value->pWaitSemaphoreValues = wrapper->pWaitSemaphoreValues.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->signalSemaphoreValuesCount)); - bytes_read += wrapper->pSignalSemaphoreValues.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSignalSemaphoreValues = wrapper->pSignalSemaphoreValues.GetPointer(); + wrapper->pVideoProfile = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pVideoProfile->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pVideoProfile = wrapper->pVideoProfile->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qualityLevel)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreGetWin32HandleInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeQualityLevelPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSemaphoreGetWin32HandleInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeQualityLevelPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); - value->semaphore = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredRateControlMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredRateControlLayerCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportSemaphoreFdInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeQualityLevelInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImportSemaphoreFdInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeQualityLevelInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); - value->semaphore = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fd)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qualityLevel)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreGetFdInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeSessionParametersGetInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSemaphoreGetFdInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeSessionParametersGetInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); - value->semaphore = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->videoSessionParameters)); + value->videoSessionParameters = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRectLayerKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeSessionParametersFeedbackInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRectLayerKHR* value = wrapper->decoded_value; + VkVideoEncodeSessionParametersFeedbackInfoKHR* value = wrapper->decoded_value; - wrapper->offset = DecodeAllocator::Allocate(); - wrapper->offset->decoded_value = &(value->offset); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->offset); - wrapper->extent = DecodeAllocator::Allocate(); - wrapper->extent->decoded_value = &(value->extent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->extent); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layer)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hasOverrides)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentRegionKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPresentRegionKHR* value = wrapper->decoded_value; + VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rectangleCount)); - wrapper->pRectangles = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pRectangles->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pRectangles = wrapper->pRectangles->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShaderBarycentric)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentRegionsKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPresentRegionsKHR* value = wrapper->decoded_value; + VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); - wrapper->pRegions = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pRegions = wrapper->pRegions->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->triStripVertexOrderIndependentOfProvokingVertex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSharedPresentSurfaceCapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSharedPresentSurfaceCapabilitiesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sharedPresentSupportedUsageFlags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupUniformControlFlow)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportFenceWin32HandleInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImportFenceWin32HandleInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->fence)); - value->fence = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->handle)); - value->handle = nullptr; - bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->name = wrapper->name.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->workgroupMemoryExplicitLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->workgroupMemoryExplicitLayoutScalarBlockLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->workgroupMemoryExplicitLayout8BitAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->workgroupMemoryExplicitLayout16BitAccess)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportFenceWin32HandleInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExportFenceWin32HandleInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pAttributes = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pAttributes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAttributes = wrapper->pAttributes->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dwAccess)); - bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->name = wrapper->name.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingMaintenance1)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingPipelineTraceRaysIndirect2)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFenceGetWin32HandleInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTraceRaysIndirectCommand2KHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkFenceGetWin32HandleInfoKHR* value = wrapper->decoded_value; + VkTraceRaysIndirectCommand2KHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->fence)); - value->fence = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->raygenShaderRecordAddress)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->raygenShaderRecordSize)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->missShaderBindingTableAddress)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->missShaderBindingTableSize)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->missShaderBindingTableStride)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hitShaderBindingTableAddress)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hitShaderBindingTableSize)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hitShaderBindingTableStride)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->callableShaderBindingTableAddress)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->callableShaderBindingTableSize)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->callableShaderBindingTableStride)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->width)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->height)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depth)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportFenceFdInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImportFenceFdInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceShaderUntypedPointersFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->fence)); - value->fence = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fd)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUntypedPointers)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFenceGetFdInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkFenceGetFdInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->fence)); - value->fence = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderMaximalReconvergence)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePerformanceQueryFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceCapabilitiesPresentId2KHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePerformanceQueryFeaturesKHR* value = wrapper->decoded_value; + VkSurfaceCapabilitiesPresentId2KHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->performanceCounterQueryPools)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->performanceCounterMultipleQueryPools)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentId2Supported)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePerformanceQueryPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentId2KHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePerformanceQueryPropertiesKHR* value = wrapper->decoded_value; + VkPresentId2KHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->allowCommandBufferQueryCopies)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); + bytes_read += wrapper->pPresentIds.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPresentIds = wrapper->pPresentIds.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceCounterKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentId2FeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPerformanceCounterKHR* value = wrapper->decoded_value; + VkPhysicalDevicePresentId2FeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->unit)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->scope)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storage)); - wrapper->uuid.SetExternalMemory(value->uuid, VK_UUID_SIZE); - bytes_read += wrapper->uuid.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentId2)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceCounterDescriptionKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceCapabilitiesPresentWait2KHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPerformanceCounterDescriptionKHR* value = wrapper->decoded_value; + VkSurfaceCapabilitiesPresentWait2KHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - wrapper->name.SetExternalMemory(value->name, VK_MAX_DESCRIPTION_SIZE); - bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->category.SetExternalMemory(value->category, VK_MAX_DESCRIPTION_SIZE); - bytes_read += wrapper->category.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); - bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentWait2Supported)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueryPoolPerformanceCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentWait2FeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkQueryPoolPerformanceCreateInfoKHR* value = wrapper->decoded_value; + VkPhysicalDevicePresentWait2FeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->counterIndexCount)); - bytes_read += wrapper->pCounterIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCounterIndices = wrapper->pCounterIndices.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentWait2)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAcquireProfilingLockInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentWait2InfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAcquireProfilingLockInfoKHR* value = wrapper->decoded_value; + VkPresentWait2InfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentId)); bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timeout)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceQuerySubmitInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPerformanceQuerySubmitInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->counterPassIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingPositionFetch)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSurfaceInfo2KHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineBinaryFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSurfaceInfo2KHR* value = wrapper->decoded_value; + VkPhysicalDevicePipelineBinaryFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->surface)); - value->surface = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBinaries)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceCapabilities2KHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineBinaryPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfaceCapabilities2KHR* value = wrapper->decoded_value; + VkPhysicalDevicePipelineBinaryPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->surfaceCapabilities = DecodeAllocator::Allocate(); - wrapper->surfaceCapabilities->decoded_value = &(value->surfaceCapabilities); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->surfaceCapabilities); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBinaryInternalCache)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBinaryInternalCacheControl)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBinaryPrefersInternalCache)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBinaryPrecompiledInternalCache)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBinaryCompressedData)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceFormat2KHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDevicePipelineBinaryInternalCacheControlKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfaceFormat2KHR* value = wrapper->decoded_value; + VkDevicePipelineBinaryInternalCacheControlKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->surfaceFormat = DecodeAllocator::Allocate(); - wrapper->surfaceFormat->decoded_value = &(value->surfaceFormat); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->surfaceFormat); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->disableInternalCache)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayProperties2KHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineBinaryKeyKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayProperties2KHR* value = wrapper->decoded_value; + VkPipelineBinaryKeyKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->displayProperties = DecodeAllocator::Allocate(); - wrapper->displayProperties->decoded_value = &(value->displayProperties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displayProperties); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->keySize)); + wrapper->key.SetExternalMemory(value->key, VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR); + bytes_read += wrapper->key.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPlaneProperties2KHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineBinaryDataKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayPlaneProperties2KHR* value = wrapper->decoded_value; + VkPipelineBinaryDataKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->displayPlaneProperties = DecodeAllocator::Allocate(); - wrapper->displayPlaneProperties->decoded_value = &(value->displayPlaneProperties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displayPlaneProperties); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataSize)); + bytes_read += wrapper->pData.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); + value->pData = wrapper->pData.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayModeProperties2KHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineBinaryKeysAndDataKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayModeProperties2KHR* value = wrapper->decoded_value; + VkPipelineBinaryKeysAndDataKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->displayModeProperties = DecodeAllocator::Allocate(); - wrapper->displayModeProperties->decoded_value = &(value->displayModeProperties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displayModeProperties); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binaryCount)); + wrapper->pPipelineBinaryKeys = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pPipelineBinaryKeys->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPipelineBinaryKeys = wrapper->pPipelineBinaryKeys->GetPointer(); + wrapper->pPipelineBinaryData = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pPipelineBinaryData->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPipelineBinaryData = wrapper->pPipelineBinaryData->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPlaneInfo2KHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayPlaneInfo2KHR* value = wrapper->decoded_value; + VkPipelineCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->mode)); - value->mode = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->planeIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPlaneCapabilities2KHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineBinaryCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayPlaneCapabilities2KHR* value = wrapper->decoded_value; + VkPipelineBinaryCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->capabilities = DecodeAllocator::Allocate(); - wrapper->capabilities->decoded_value = &(value->capabilities); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->capabilities); + wrapper->pKeysAndDataInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pKeysAndDataInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pKeysAndDataInfo = wrapper->pKeysAndDataInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipeline)); + value->pipeline = VK_NULL_HANDLE; + wrapper->pPipelineCreateInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pPipelineCreateInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPipelineCreateInfo = wrapper->pPipelineCreateInfo->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderBfloat16FeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineBinaryInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderBfloat16FeaturesKHR* value = wrapper->decoded_value; + VkPipelineBinaryInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBFloat16Type)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBFloat16DotProduct)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBFloat16CooperativeMatrix)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binaryCount)); + bytes_read += wrapper->pPipelineBinaries.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPipelineBinaries = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePortabilitySubsetFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkReleaseCapturedPipelineDataInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePortabilitySubsetFeaturesKHR* value = wrapper->decoded_value; + VkReleaseCapturedPipelineDataInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->constantAlphaColorBlendFactors)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->events)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageViewFormatReinterpretation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageViewFormatSwizzle)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageView2DOn3DImage)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multisampleArrayImage)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mutableComparisonSamplers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pointPolygons)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerMipLodBias)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->separateStencilMaskRef)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSampleRateInterpolationFunctions)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tessellationIsolines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tessellationPointMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->triangleFans)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexAttributeAccessBeyondStride)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipeline)); + value->pipeline = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePortabilitySubsetPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineBinaryDataInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePortabilitySubsetPropertiesKHR* value = wrapper->decoded_value; + VkPipelineBinaryDataInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minVertexInputBindingStrideAlignment)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipelineBinary)); + value->pipelineBinary = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderClockFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineBinaryHandlesInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderClockFeaturesKHR* value = wrapper->decoded_value; + VkPipelineBinaryHandlesInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupClock)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderDeviceClock)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBinaryCount)); + bytes_read += wrapper->pPipelineBinaries.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPipelineBinaries = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH265ProfileInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfacePresentModeKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeH265ProfileInfoKHR* value = wrapper->decoded_value; + VkSurfacePresentModeKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdProfileIdc)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentMode)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH265CapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfacePresentScalingCapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeH265CapabilitiesKHR* value = wrapper->decoded_value; + VkSurfacePresentScalingCapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevelIdc)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedPresentScaling)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedPresentGravityX)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedPresentGravityY)); + wrapper->minScaledImageExtent = DecodeAllocator::Allocate(); + wrapper->minScaledImageExtent->decoded_value = &(value->minScaledImageExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minScaledImageExtent); + wrapper->maxScaledImageExtent = DecodeAllocator::Allocate(); + wrapper->maxScaledImageExtent->decoded_value = &(value->maxScaledImageExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxScaledImageExtent); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH265SessionParametersAddInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfacePresentModeCompatibilityKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeH265SessionParametersAddInfoKHR* value = wrapper->decoded_value; + VkSurfacePresentModeCompatibilityKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdVPSCount)); - wrapper->pStdVPSs = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdVPSs->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdVPSs = wrapper->pStdVPSs->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdSPSCount)); - wrapper->pStdSPSs = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdSPSs->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdSPSs = wrapper->pStdSPSs->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdPPSCount)); - wrapper->pStdPPSs = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdPPSs->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdPPSs = wrapper->pStdPPSs->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentModeCount)); + bytes_read += wrapper->pPresentModes.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPresentModes = wrapper->pPresentModes.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH265SessionParametersCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeH265SessionParametersCreateInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStdVPSCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStdSPSCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxStdPPSCount)); - wrapper->pParametersAddInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pParametersAddInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pParametersAddInfo = wrapper->pParametersAddInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainMaintenance1)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH265PictureInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainPresentFenceInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeH265PictureInfoKHR* value = wrapper->decoded_value; + VkSwapchainPresentFenceInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdPictureInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdPictureInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdPictureInfo = wrapper->pStdPictureInfo->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sliceSegmentCount)); - bytes_read += wrapper->pSliceSegmentOffsets.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSliceSegmentOffsets = wrapper->pSliceSegmentOffsets.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); + bytes_read += wrapper->pFences.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pFences = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH265DpbSlotInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainPresentModesCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeH265DpbSlotInfoKHR* value = wrapper->decoded_value; + VkSwapchainPresentModesCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdReferenceInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdReferenceInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdReferenceInfo = wrapper->pStdReferenceInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentModeCount)); + bytes_read += wrapper->pPresentModes.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPresentModes = wrapper->pPresentModes.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFragmentShadingRateAttachmentInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainPresentModeInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkFragmentShadingRateAttachmentInfoKHR* value = wrapper->decoded_value; + VkSwapchainPresentModeInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pFragmentShadingRateAttachment = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pFragmentShadingRateAttachment->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pFragmentShadingRateAttachment = wrapper->pFragmentShadingRateAttachment->GetPointer(); - wrapper->shadingRateAttachmentTexelSize = DecodeAllocator::Allocate(); - wrapper->shadingRateAttachmentTexelSize->decoded_value = &(value->shadingRateAttachmentTexelSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->shadingRateAttachmentTexelSize); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); + bytes_read += wrapper->pPresentModes.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPresentModes = wrapper->pPresentModes.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineFragmentShadingRateStateCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainPresentScalingCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineFragmentShadingRateStateCreateInfoKHR* value = wrapper->decoded_value; + VkSwapchainPresentScalingCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->fragmentSize = DecodeAllocator::Allocate(); - wrapper->fragmentSize->decoded_value = &(value->fragmentSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->fragmentSize); - wrapper->combinerOps.SetExternalMemory(value->combinerOps, 2); - bytes_read += wrapper->combinerOps.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->scalingBehavior)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentGravityX)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentGravityY)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShadingRateFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkReleaseSwapchainImagesInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFragmentShadingRateFeaturesKHR* value = wrapper->decoded_value; + VkReleaseSwapchainImagesInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineFragmentShadingRate)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitiveFragmentShadingRate)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentFragmentShadingRate)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->swapchain)); + value->swapchain = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageIndexCount)); + bytes_read += wrapper->pImageIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pImageIndices = wrapper->pImageIndices.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShadingRatePropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCooperativeMatrixPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFragmentShadingRatePropertiesKHR* value = wrapper->decoded_value; + VkCooperativeMatrixPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->minFragmentShadingRateAttachmentTexelSize = DecodeAllocator::Allocate(); - wrapper->minFragmentShadingRateAttachmentTexelSize->decoded_value = &(value->minFragmentShadingRateAttachmentTexelSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minFragmentShadingRateAttachmentTexelSize); - wrapper->maxFragmentShadingRateAttachmentTexelSize = DecodeAllocator::Allocate(); - wrapper->maxFragmentShadingRateAttachmentTexelSize->decoded_value = &(value->maxFragmentShadingRateAttachmentTexelSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxFragmentShadingRateAttachmentTexelSize); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentShadingRateAttachmentTexelSizeAspectRatio)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitiveFragmentShadingRateWithMultipleViewports)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layeredShadingRateAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateNonTrivialCombinerOps)); - wrapper->maxFragmentSize = DecodeAllocator::Allocate(); - wrapper->maxFragmentSize->decoded_value = &(value->maxFragmentSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxFragmentSize); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentSizeAspectRatio)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentShadingRateCoverageSamples)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentShadingRateRasterizationSamples)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateWithShaderDepthStencilWrites)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateWithSampleMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateWithShaderSampleMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateWithConservativeRasterization)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateWithFragmentShaderInterlock)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateWithCustomSampleLocations)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateStrictMultiplyCombiner)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->MSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->NSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->KSize)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->AType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->BType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->CType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->ResultType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->saturatingAccumulation)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->scope)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShadingRateKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFragmentShadingRateKHR* value = wrapper->decoded_value; + VkPhysicalDeviceCooperativeMatrixFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleCounts)); - wrapper->fragmentSize = DecodeAllocator::Allocate(); - wrapper->fragmentSize->decoded_value = &(value->fragmentSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->fragmentSize); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeMatrix)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeMatrixRobustBufferAccess)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingFragmentShadingRateAttachmentInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderingFragmentShadingRateAttachmentInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceCooperativeMatrixPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->imageView)); - value->imageView = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageLayout)); - wrapper->shadingRateAttachmentTexelSize = DecodeAllocator::Allocate(); - wrapper->shadingRateAttachmentTexelSize->decoded_value = &(value->shadingRateAttachmentTexelSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->shadingRateAttachmentTexelSize); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeMatrixSupportedStages)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderQuadControlFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderQuadControlFeaturesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderQuadControl)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->computeDerivativeGroupQuads)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->computeDerivativeGroupLinear)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceProtectedCapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfaceProtectedCapabilitiesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportsProtected)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->meshAndTaskShaderDerivatives)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentWaitFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeAV1ProfileInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePresentWaitFeaturesKHR* value = wrapper->decoded_value; + VkVideoDecodeAV1ProfileInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentWait)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdProfile)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->filmGrainSupport)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeAV1CapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* value = wrapper->decoded_value; + VkVideoDecodeAV1CapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineExecutableInfo)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevel)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeAV1SessionParametersCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineInfoKHR* value = wrapper->decoded_value; + VkVideoDecodeAV1SessionParametersCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipeline)); - value->pipeline = VK_NULL_HANDLE; + wrapper->pStdSequenceHeader = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdSequenceHeader->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdSequenceHeader = wrapper->pStdSequenceHeader->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineExecutablePropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeAV1PictureInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineExecutablePropertiesKHR* value = wrapper->decoded_value; + VkVideoDecodeAV1PictureInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stages)); - wrapper->name.SetExternalMemory(value->name, VK_MAX_DESCRIPTION_SIZE); - bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); - bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subgroupSize)); + wrapper->pStdPictureInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdPictureInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdPictureInfo = wrapper->pStdPictureInfo->GetPointer(); + wrapper->referenceNameSlotIndices.SetExternalMemory(value->referenceNameSlotIndices, VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR); + bytes_read += wrapper->referenceNameSlotIndices.DecodeInt32((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameHeaderOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileCount)); + bytes_read += wrapper->pTileOffsets.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTileOffsets = wrapper->pTileOffsets.GetPointer(); + bytes_read += wrapper->pTileSizes.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTileSizes = wrapper->pTileSizes.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineExecutableInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeAV1DpbSlotInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineExecutableInfoKHR* value = wrapper->decoded_value; + VkVideoDecodeAV1DpbSlotInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipeline)); - value->pipeline = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->executableIndex)); + wrapper->pStdReferenceInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdReferenceInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdReferenceInfo = wrapper->pStdReferenceInfo->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineExecutableStatisticKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoEncodeAV1FeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineExecutableStatisticKHR* value = wrapper->decoded_value; + VkPhysicalDeviceVideoEncodeAV1FeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->name.SetExternalMemory(value->name, VK_MAX_DESCRIPTION_SIZE); - bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); - bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - wrapper->value = DecodeAllocator::Allocate(); - wrapper->value->decoded_value = &(value->value); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->value); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoEncodeAV1)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineExecutableInternalRepresentationKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1CapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineExecutableInternalRepresentationKHR* value = wrapper->decoded_value; + VkVideoEncodeAV1CapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->name.SetExternalMemory(value->name, VK_MAX_DESCRIPTION_SIZE); - bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); - bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->isText)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataSize)); - bytes_read += wrapper->pData.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); - value->pData = wrapper->pData.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevel)); + wrapper->codedPictureAlignment = DecodeAllocator::Allocate(); + wrapper->codedPictureAlignment->decoded_value = &(value->codedPictureAlignment); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->codedPictureAlignment); + wrapper->maxTiles = DecodeAllocator::Allocate(); + wrapper->maxTiles->decoded_value = &(value->maxTiles); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxTiles); + wrapper->minTileSize = DecodeAllocator::Allocate(); + wrapper->minTileSize->decoded_value = &(value->minTileSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minTileSize); + wrapper->maxTileSize = DecodeAllocator::Allocate(); + wrapper->maxTileSize->decoded_value = &(value->maxTileSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxTileSize); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->superblockSizes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSingleReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->singleReferenceNameMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxUnidirectionalCompoundReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxUnidirectionalCompoundGroup1ReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->unidirectionalCompoundReferenceNameMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBidirectionalCompoundReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBidirectionalCompoundGroup1ReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBidirectionalCompoundGroup2ReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bidirectionalCompoundReferenceNameMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTemporalLayerCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSpatialLayerCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxOperatingPoints)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minQIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxQIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->prefersGopRemainingFrames)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->requiresGopRemainingFrames)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdSyntaxFlags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineLibraryCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1QIndexKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineLibraryCreateInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeAV1QIndexKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->libraryCount)); - bytes_read += wrapper->pLibraries.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pLibraries = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->intraQIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->predictiveQIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bipredictiveQIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentIdKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1QualityLevelPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPresentIdKHR* value = wrapper->decoded_value; + VkVideoEncodeAV1QualityLevelPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); - bytes_read += wrapper->pPresentIds.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPresentIds = wrapper->pPresentIds.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredRateControlFlags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredGopFrameCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredKeyFramePeriod)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredConsecutiveBipredictiveFrameCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredTemporalLayerCount)); + wrapper->preferredConstantQIndex = DecodeAllocator::Allocate(); + wrapper->preferredConstantQIndex->decoded_value = &(value->preferredConstantQIndex); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->preferredConstantQIndex); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxSingleReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredSingleReferenceNameMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxUnidirectionalCompoundReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxUnidirectionalCompoundGroup1ReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredUnidirectionalCompoundReferenceNameMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxBidirectionalCompoundReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxBidirectionalCompoundGroup1ReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxBidirectionalCompoundGroup2ReferenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredBidirectionalCompoundReferenceNameMask)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentIdFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1SessionCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePresentIdFeaturesKHR* value = wrapper->decoded_value; + VkVideoEncodeAV1SessionCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentId)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxLevel)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevel)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1SessionParametersCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeAV1SessionParametersCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstBuffer)); - value->dstBuffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstBufferOffset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstBufferRange)); - wrapper->srcPictureResource = DecodeAllocator::Allocate(); - wrapper->srcPictureResource->decoded_value = &(value->srcPictureResource); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcPictureResource); - wrapper->pSetupReferenceSlot = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSetupReferenceSlot->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSetupReferenceSlot = wrapper->pSetupReferenceSlot->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->referenceSlotCount)); - wrapper->pReferenceSlots = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pReferenceSlots->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pReferenceSlots = wrapper->pReferenceSlots->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->precedingExternallyEncodedBytes)); + wrapper->pStdSequenceHeader = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdSequenceHeader->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdSequenceHeader = wrapper->pStdSequenceHeader->GetPointer(); + wrapper->pStdDecoderModelInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdDecoderModelInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdDecoderModelInfo = wrapper->pStdDecoderModelInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdOperatingPointCount)); + wrapper->pStdOperatingPoints = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdOperatingPoints->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdOperatingPoints = wrapper->pStdOperatingPoints->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeCapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1PictureInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeCapabilitiesKHR* value = wrapper->decoded_value; + VkVideoEncodeAV1PictureInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rateControlModes)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxRateControlLayers)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBitrate)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxQualityLevels)); - wrapper->encodeInputPictureGranularity = DecodeAllocator::Allocate(); - wrapper->encodeInputPictureGranularity->decoded_value = &(value->encodeInputPictureGranularity); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->encodeInputPictureGranularity); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedEncodeFeedbackFlags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->predictionMode)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rateControlGroup)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->constantQIndex)); + wrapper->pStdPictureInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdPictureInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdPictureInfo = wrapper->pStdPictureInfo->GetPointer(); + wrapper->referenceNameSlotIndices.SetExternalMemory(value->referenceNameSlotIndices, VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR); + bytes_read += wrapper->referenceNameSlotIndices.DecodeInt32((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primaryReferenceCdfOnly)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->generateObuExtensionHeader)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueryPoolVideoEncodeFeedbackCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1DpbSlotInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkQueryPoolVideoEncodeFeedbackCreateInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeAV1DpbSlotInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->encodeFeedbackFlags)); + wrapper->pStdReferenceInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdReferenceInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdReferenceInfo = wrapper->pStdReferenceInfo->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeUsageInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1ProfileInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeUsageInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeAV1ProfileInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoUsageHints)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoContentHints)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tuningMode)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdProfile)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeRateControlLayerInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1FrameSizeKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeRateControlLayerInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeAV1FrameSizeKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->averageBitrate)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBitrate)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameRateNumerator)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameRateDenominator)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->intraFrameSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->predictiveFrameSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bipredictiveFrameSize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeRateControlInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1GopRemainingFrameInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeRateControlInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeAV1GopRemainingFrameInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rateControlMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layerCount)); - wrapper->pLayers = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pLayers->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pLayers = wrapper->pLayers->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->virtualBufferSizeInMs)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->initialVirtualBufferSizeInMs)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useGopRemainingFrames)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingIntra)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingPredictive)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingBipredictive)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1RateControlInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeAV1RateControlInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pVideoProfile = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pVideoProfile->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pVideoProfile = wrapper->pVideoProfile->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qualityLevel)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopFrameCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->keyFramePeriod)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->consecutiveBipredictiveFrameCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->temporalLayerCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeQualityLevelPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1RateControlLayerInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeQualityLevelPropertiesKHR* value = wrapper->decoded_value; + VkVideoEncodeAV1RateControlLayerInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredRateControlMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredRateControlLayerCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMinQIndex)); + wrapper->minQIndex = DecodeAllocator::Allocate(); + wrapper->minQIndex->decoded_value = &(value->minQIndex); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minQIndex); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxQIndex)); + wrapper->maxQIndex = DecodeAllocator::Allocate(); + wrapper->maxQIndex->decoded_value = &(value->maxQIndex); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxQIndex); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxFrameSize)); + wrapper->maxFrameSize = DecodeAllocator::Allocate(); + wrapper->maxFrameSize->decoded_value = &(value->maxFrameSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxFrameSize); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeQualityLevelInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoDecodeVP9FeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeQualityLevelInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceVideoDecodeVP9FeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->qualityLevel)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoDecodeVP9)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeSessionParametersGetInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeVP9ProfileInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeSessionParametersGetInfoKHR* value = wrapper->decoded_value; + VkVideoDecodeVP9ProfileInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->videoSessionParameters)); - value->videoSessionParameters = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdProfile)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeSessionParametersFeedbackInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeVP9CapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeSessionParametersFeedbackInfoKHR* value = wrapper->decoded_value; + VkVideoDecodeVP9CapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hasOverrides)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevel)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeVP9PictureInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR* value = wrapper->decoded_value; + VkVideoDecodeVP9PictureInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShaderBarycentric)); + wrapper->pStdPictureInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStdPictureInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStdPictureInfo = wrapper->pStdPictureInfo->GetPointer(); + wrapper->referenceNameSlotIndices.SetExternalMemory(value->referenceNameSlotIndices, VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR); + bytes_read += wrapper->referenceNameSlotIndices.DecodeInt32((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uncompressedHeaderOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->compressedHeaderOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tilesOffset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoMaintenance1FeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceVideoMaintenance1FeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->triStripVertexOrderIndependentOfProvokingVertex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoMaintenance1)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoInlineQueryInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* value = wrapper->decoded_value; + VkVideoInlineQueryInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSubgroupUniformControlFlow)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->queryPool)); + value->queryPool = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstQuery)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queryCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->workgroupMemoryExplicitLayout)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->workgroupMemoryExplicitLayoutScalarBlockLayout)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->workgroupMemoryExplicitLayout8BitAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->workgroupMemoryExplicitLayout16BitAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->unifiedImageLayouts)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->unifiedImageLayoutsVideo)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentFeedbackLoopInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* value = wrapper->decoded_value; + VkAttachmentFeedbackLoopInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingMaintenance1)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingPipelineTraceRaysIndirect2)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->feedbackLoopEnable)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTraceRaysIndirectCommand2KHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCalibratedTimestampInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkTraceRaysIndirectCommand2KHR* value = wrapper->decoded_value; + VkCalibratedTimestampInfoKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->raygenShaderRecordAddress)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->raygenShaderRecordSize)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->missShaderBindingTableAddress)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->missShaderBindingTableSize)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->missShaderBindingTableStride)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hitShaderBindingTableAddress)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hitShaderBindingTableSize)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hitShaderBindingTableStride)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->callableShaderBindingTableAddress)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->callableShaderBindingTableSize)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->callableShaderBindingTableStride)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->width)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->height)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depth)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->timeDomain)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSetDescriptorBufferOffsetsInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* value = wrapper->decoded_value; + VkSetDescriptorBufferOffsetsInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderMaximalReconvergence)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageFlags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); + value->layout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstSet)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->setCount)); + bytes_read += wrapper->pBufferIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pBufferIndices = wrapper->pBufferIndices.GetPointer(); + bytes_read += wrapper->pOffsets.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pOffsets = wrapper->pOffsets.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceCapabilitiesPresentId2KHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfaceCapabilitiesPresentId2KHR* value = wrapper->decoded_value; + VkBindDescriptorBufferEmbeddedSamplersInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentId2Supported)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageFlags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); + value->layout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->set)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentId2KHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkStridedDeviceAddressRangeKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPresentId2KHR* value = wrapper->decoded_value; + VkStridedDeviceAddressRangeKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); - bytes_read += wrapper->pPresentIds.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPresentIds = wrapper->pPresentIds.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->address)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stride)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentId2FeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyMemoryIndirectCommandKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePresentId2FeaturesKHR* value = wrapper->decoded_value; + VkCopyMemoryIndirectCommandKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentId2)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAddress)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAddress)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceCapabilitiesPresentWait2KHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyMemoryIndirectInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfaceCapabilitiesPresentWait2KHR* value = wrapper->decoded_value; + VkCopyMemoryIndirectInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentWait2Supported)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcCopyFlags)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstCopyFlags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->copyCount)); + wrapper->copyAddressRange = DecodeAllocator::Allocate(); + wrapper->copyAddressRange->decoded_value = &(value->copyAddressRange); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->copyAddressRange); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentWait2FeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyMemoryToImageIndirectCommandKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePresentWait2FeaturesKHR* value = wrapper->decoded_value; + VkCopyMemoryToImageIndirectCommandKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentWait2)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAddress)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferRowLength)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferImageHeight)); + wrapper->imageSubresource = DecodeAllocator::Allocate(); + wrapper->imageSubresource->decoded_value = &(value->imageSubresource); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageSubresource); + wrapper->imageOffset = DecodeAllocator::Allocate(); + wrapper->imageOffset->decoded_value = &(value->imageOffset); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageOffset); + wrapper->imageExtent = DecodeAllocator::Allocate(); + wrapper->imageExtent->decoded_value = &(value->imageExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageExtent); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentWait2InfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyMemoryToImageIndirectInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPresentWait2InfoKHR* value = wrapper->decoded_value; + VkCopyMemoryToImageIndirectInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentId)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timeout)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcCopyFlags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->copyCount)); + wrapper->copyAddressRange = DecodeAllocator::Allocate(); + wrapper->copyAddressRange->decoded_value = &(value->copyAddressRange); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->copyAddressRange); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstImage)); + value->dstImage = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstImageLayout)); + wrapper->pImageSubresources = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pImageSubresources->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pImageSubresources = wrapper->pImageSubresources->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingPositionFetch)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indirectMemoryCopy)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indirectMemoryToImageCopy)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineBinaryFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePipelineBinaryFeaturesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBinaries)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedQueues)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineBinaryPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeIntraRefreshCapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePipelineBinaryPropertiesKHR* value = wrapper->decoded_value; + VkVideoEncodeIntraRefreshCapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBinaryInternalCache)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBinaryInternalCacheControl)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBinaryPrefersInternalCache)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBinaryPrecompiledInternalCache)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBinaryCompressedData)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->intraRefreshModes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxIntraRefreshCycleDuration)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxIntraRefreshActiveReferencePictures)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->partitionIndependentIntraRefreshRegions)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nonRectangularIntraRefreshRegions)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDevicePipelineBinaryInternalCacheControlKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeSessionIntraRefreshCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDevicePipelineBinaryInternalCacheControlKHR* value = wrapper->decoded_value; + VkVideoEncodeSessionIntraRefreshCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->disableInternalCache)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->intraRefreshMode)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineBinaryKeyKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeIntraRefreshInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineBinaryKeyKHR* value = wrapper->decoded_value; + VkVideoEncodeIntraRefreshInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->keySize)); - wrapper->key.SetExternalMemory(value->key, VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR); - bytes_read += wrapper->key.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->intraRefreshCycleDuration)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->intraRefreshIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineBinaryDataKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoReferenceIntraRefreshInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineBinaryDataKHR* value = wrapper->decoded_value; + VkVideoReferenceIntraRefreshInfoKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataSize)); - bytes_read += wrapper->pData.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); - value->pData = wrapper->pData.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dirtyIntraRefreshRegions)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineBinaryKeysAndDataKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineBinaryKeysAndDataKHR* value = wrapper->decoded_value; + VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binaryCount)); - wrapper->pPipelineBinaryKeys = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pPipelineBinaryKeys->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPipelineBinaryKeys = wrapper->pPipelineBinaryKeys->GetPointer(); - wrapper->pPipelineBinaryData = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pPipelineBinaryData->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPipelineBinaryData = wrapper->pPipelineBinaryData->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoEncodeIntraRefresh)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeQuantizationMapCapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineCreateInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeQuantizationMapCapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->maxQuantizationMapExtent = DecodeAllocator::Allocate(); + wrapper->maxQuantizationMapExtent->decoded_value = &(value->maxQuantizationMapExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxQuantizationMapExtent); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineBinaryCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoFormatQuantizationMapPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineBinaryCreateInfoKHR* value = wrapper->decoded_value; + VkVideoFormatQuantizationMapPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pKeysAndDataInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pKeysAndDataInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pKeysAndDataInfo = wrapper->pKeysAndDataInfo->GetPointer(); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipeline)); - value->pipeline = VK_NULL_HANDLE; - wrapper->pPipelineCreateInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pPipelineCreateInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPipelineCreateInfo = wrapper->pPipelineCreateInfo->GetPointer(); + wrapper->quantizationMapTexelSize = DecodeAllocator::Allocate(); + wrapper->quantizationMapTexelSize->decoded_value = &(value->quantizationMapTexelSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->quantizationMapTexelSize); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineBinaryInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeQuantizationMapInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineBinaryInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeQuantizationMapInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binaryCount)); - bytes_read += wrapper->pPipelineBinaries.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPipelineBinaries = nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->quantizationMap)); + value->quantizationMap = VK_NULL_HANDLE; + wrapper->quantizationMapExtent = DecodeAllocator::Allocate(); + wrapper->quantizationMapExtent->decoded_value = &(value->quantizationMapExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->quantizationMapExtent); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkReleaseCapturedPipelineDataInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkReleaseCapturedPipelineDataInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipeline)); - value->pipeline = VK_NULL_HANDLE; + wrapper->quantizationMapTexelSize = DecodeAllocator::Allocate(); + wrapper->quantizationMapTexelSize->decoded_value = &(value->quantizationMapTexelSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->quantizationMapTexelSize); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineBinaryDataInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineBinaryDataInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipelineBinary)); - value->pipelineBinary = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoEncodeQuantizationMap)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineBinaryHandlesInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264QuantizationMapCapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineBinaryHandlesInfoKHR* value = wrapper->decoded_value; + VkVideoEncodeH264QuantizationMapCapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBinaryCount)); - bytes_read += wrapper->pPipelineBinaries.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPipelineBinaries = nullptr; + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minQpDelta)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxQpDelta)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfacePresentModeKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265QuantizationMapCapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfacePresentModeKHR* value = wrapper->decoded_value; + VkVideoEncodeH265QuantizationMapCapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentMode)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minQpDelta)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxQpDelta)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfacePresentScalingCapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoFormatH265QuantizationMapPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfacePresentScalingCapabilitiesKHR* value = wrapper->decoded_value; + VkVideoFormatH265QuantizationMapPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedPresentScaling)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedPresentGravityX)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedPresentGravityY)); - wrapper->minScaledImageExtent = DecodeAllocator::Allocate(); - wrapper->minScaledImageExtent->decoded_value = &(value->minScaledImageExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minScaledImageExtent); - wrapper->maxScaledImageExtent = DecodeAllocator::Allocate(); - wrapper->maxScaledImageExtent->decoded_value = &(value->maxScaledImageExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxScaledImageExtent); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compatibleCtbSizes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfacePresentModeCompatibilityKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1QuantizationMapCapabilitiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfacePresentModeCompatibilityKHR* value = wrapper->decoded_value; + VkVideoEncodeAV1QuantizationMapCapabilitiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentModeCount)); - bytes_read += wrapper->pPresentModes.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPresentModes = wrapper->pPresentModes.GetPointer(); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minQIndexDelta)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxQIndexDelta)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoFormatAV1QuantizationMapPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR* value = wrapper->decoded_value; + VkVideoFormatAV1QuantizationMapPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainMaintenance1)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compatibleSuperblockSizes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainPresentFenceInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSwapchainPresentFenceInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); - bytes_read += wrapper->pFences.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pFences = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRelaxedExtendedInstruction)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainPresentModesCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance7FeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSwapchainPresentModesCreateInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceMaintenance7FeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentModeCount)); - bytes_read += wrapper->pPresentModes.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPresentModes = wrapper->pPresentModes.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance7)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainPresentModeInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance7PropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSwapchainPresentModeInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceMaintenance7PropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); - bytes_read += wrapper->pPresentModes.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPresentModes = wrapper->pPresentModes.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustFragmentShadingRateAttachmentAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->separateDepthStencilAttachmentAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetTotalUniformBuffersDynamic)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetTotalStorageBuffersDynamic)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetTotalBuffersDynamic)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindTotalBuffersDynamic)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainPresentScalingCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLayeredApiPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSwapchainPresentScalingCreateInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceLayeredApiPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->scalingBehavior)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentGravityX)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentGravityY)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorID)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceID)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->layeredAPI)); + wrapper->deviceName.SetExternalMemory(value->deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); + bytes_read += wrapper->deviceName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkReleaseSwapchainImagesInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLayeredApiPropertiesListKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkReleaseSwapchainImagesInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceLayeredApiPropertiesListKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->swapchain)); - value->swapchain = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageIndexCount)); - bytes_read += wrapper->pImageIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pImageIndices = wrapper->pImageIndices.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layeredApiCount)); + wrapper->pLayeredApis = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pLayeredApis->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pLayeredApis = wrapper->pLayeredApis->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCooperativeMatrixPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCooperativeMatrixPropertiesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceLayeredApiVulkanPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->MSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->NSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->KSize)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->AType)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->BType)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->CType)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->ResultType)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->saturatingAccumulation)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->scope)); + wrapper->properties = DecodeAllocator::Allocate(); + wrapper->properties->decoded_value = &(value->properties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->properties); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryBarrierAccessFlags3KHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceCooperativeMatrixFeaturesKHR* value = wrapper->decoded_value; + VkMemoryBarrierAccessFlags3KHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeMatrix)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeMatrixRobustBufferAccess)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask3)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask3)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceCooperativeMatrixPropertiesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceMaintenance8FeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeMatrixSupportedStages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance8)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderFmaFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceShaderFmaFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->computeDerivativeGroupQuads)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->computeDerivativeGroupLinear)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderFmaFloat16)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderFmaFloat32)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderFmaFloat64)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance9FeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceMaintenance9FeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->meshAndTaskShaderDerivatives)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance9)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeAV1ProfileInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance9PropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeAV1ProfileInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceMaintenance9PropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdProfile)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->filmGrainSupport)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->image2DViewOf3DSparse)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultVertexAttributeValue)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeAV1CapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyOwnershipTransferPropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeAV1CapabilitiesKHR* value = wrapper->decoded_value; + VkQueueFamilyOwnershipTransferPropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevel)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->optimalImageTransferToQueueFamilies)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeAV1SessionParametersCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeAV1SessionParametersCreateInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdSequenceHeader = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdSequenceHeader->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdSequenceHeader = wrapper->pStdSequenceHeader->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthClampZeroOne)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeAV1PictureInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRobustness2FeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeAV1PictureInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceRobustness2FeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdPictureInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdPictureInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdPictureInfo = wrapper->pStdPictureInfo->GetPointer(); - wrapper->referenceNameSlotIndices.SetExternalMemory(value->referenceNameSlotIndices, VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR); - bytes_read += wrapper->referenceNameSlotIndices.DecodeInt32((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameHeaderOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileCount)); - bytes_read += wrapper->pTileOffsets.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pTileOffsets = wrapper->pTileOffsets.GetPointer(); - bytes_read += wrapper->pTileSizes.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pTileSizes = wrapper->pTileSizes.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustBufferAccess2)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustImageAccess2)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nullDescriptor)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeAV1DpbSlotInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRobustness2PropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeAV1DpbSlotInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceRobustness2PropertiesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdReferenceInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdReferenceInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdReferenceInfo = wrapper->pStdReferenceInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustStorageBufferAccessSizeAlignment)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustUniformBufferAccessSizeAlignment)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoEncodeAV1FeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVideoEncodeAV1FeaturesKHR* value = wrapper->decoded_value; + VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoEncodeAV1)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentModeFifoLatestReady)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1CapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance10FeaturesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeAV1CapabilitiesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceMaintenance10FeaturesKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevel)); - wrapper->codedPictureAlignment = DecodeAllocator::Allocate(); - wrapper->codedPictureAlignment->decoded_value = &(value->codedPictureAlignment); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->codedPictureAlignment); - wrapper->maxTiles = DecodeAllocator::Allocate(); - wrapper->maxTiles->decoded_value = &(value->maxTiles); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxTiles); - wrapper->minTileSize = DecodeAllocator::Allocate(); - wrapper->minTileSize->decoded_value = &(value->minTileSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minTileSize); - wrapper->maxTileSize = DecodeAllocator::Allocate(); - wrapper->maxTileSize->decoded_value = &(value->maxTileSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxTileSize); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->superblockSizes)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSingleReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->singleReferenceNameMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxUnidirectionalCompoundReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxUnidirectionalCompoundGroup1ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->unidirectionalCompoundReferenceNameMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBidirectionalCompoundReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBidirectionalCompoundGroup1ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxBidirectionalCompoundGroup2ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bidirectionalCompoundReferenceNameMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTemporalLayerCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSpatialLayerCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxOperatingPoints)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minQIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxQIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->prefersGopRemainingFrames)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->requiresGopRemainingFrames)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdSyntaxFlags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance10)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1QIndexKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance10PropertiesKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeAV1QIndexKHR* value = wrapper->decoded_value; + VkPhysicalDeviceMaintenance10PropertiesKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->intraQIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->predictiveQIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bipredictiveQIndex)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rgba4OpaqueBlackSwizzled)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->resolveSrgbFormatAppliesTransferFunction)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->resolveSrgbFormatSupportsTransferFunctionControl)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1QualityLevelPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingEndInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeAV1QualityLevelPropertiesKHR* value = wrapper->decoded_value; + VkRenderingEndInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredRateControlFlags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredGopFrameCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredKeyFramePeriod)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredConsecutiveBipredictiveFrameCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredTemporalLayerCount)); - wrapper->preferredConstantQIndex = DecodeAllocator::Allocate(); - wrapper->preferredConstantQIndex->decoded_value = &(value->preferredConstantQIndex); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->preferredConstantQIndex); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxSingleReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredSingleReferenceNameMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxUnidirectionalCompoundReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxUnidirectionalCompoundGroup1ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredUnidirectionalCompoundReferenceNameMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxBidirectionalCompoundReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxBidirectionalCompoundGroup1ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredMaxBidirectionalCompoundGroup2ReferenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferredBidirectionalCompoundReferenceNameMask)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1SessionCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingAttachmentFlagsInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeAV1SessionCreateInfoKHR* value = wrapper->decoded_value; + VkRenderingAttachmentFlagsInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxLevel)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevel)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1SessionParametersCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkResolveImageModeInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeAV1SessionParametersCreateInfoKHR* value = wrapper->decoded_value; + VkResolveImageModeInfoKHR* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdSequenceHeader = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdSequenceHeader->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdSequenceHeader = wrapper->pStdSequenceHeader->GetPointer(); - wrapper->pStdDecoderModelInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdDecoderModelInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdDecoderModelInfo = wrapper->pStdDecoderModelInfo->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdOperatingPointCount)); - wrapper->pStdOperatingPoints = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdOperatingPoints->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdOperatingPoints = wrapper->pStdOperatingPoints->GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->resolveMode)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilResolveMode)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1PictureInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugReportCallbackCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeAV1PictureInfoKHR* value = wrapper->decoded_value; + VkDebugReportCallbackCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->predictionMode)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rateControlGroup)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->constantQIndex)); - wrapper->pStdPictureInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdPictureInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdPictureInfo = wrapper->pStdPictureInfo->GetPointer(); - wrapper->referenceNameSlotIndices.SetExternalMemory(value->referenceNameSlotIndices, VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR); - bytes_read += wrapper->referenceNameSlotIndices.DecodeInt32((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primaryReferenceCdfOnly)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->generateObuExtensionHeader)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnCallback)); + value->pfnCallback = nullptr; + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pUserData)); + value->pUserData = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1DpbSlotInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRasterizationStateRasterizationOrderAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeAV1DpbSlotInfoKHR* value = wrapper->decoded_value; + VkPipelineRasterizationStateRasterizationOrderAMD* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdReferenceInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdReferenceInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdReferenceInfo = wrapper->pStdReferenceInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationOrder)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1ProfileInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugMarkerObjectNameInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeAV1ProfileInfoKHR* value = wrapper->decoded_value; + VkDebugMarkerObjectNameInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdProfile)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectType)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->object)); + value->object = 0; + bytes_read += wrapper->pObjectName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pObjectName = wrapper->pObjectName.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1FrameSizeKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugMarkerObjectTagInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeAV1FrameSizeKHR* value = wrapper->decoded_value; + VkDebugMarkerObjectTagInfoEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->intraFrameSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->predictiveFrameSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bipredictiveFrameSize)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectType)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->object)); + value->object = 0; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tagName)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tagSize)); + bytes_read += wrapper->pTag.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTag = wrapper->pTag.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1GopRemainingFrameInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugMarkerMarkerInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeAV1GopRemainingFrameInfoKHR* value = wrapper->decoded_value; + VkDebugMarkerMarkerInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useGopRemainingFrames)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingIntra)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingPredictive)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopRemainingBipredictive)); + bytes_read += wrapper->pMarkerName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pMarkerName = wrapper->pMarkerName.GetPointer(); + wrapper->color.SetExternalMemory(value->color, 4); + bytes_read += wrapper->color.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1RateControlInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDedicatedAllocationImageCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeAV1RateControlInfoKHR* value = wrapper->decoded_value; + VkDedicatedAllocationImageCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gopFrameCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->keyFramePeriod)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->consecutiveBipredictiveFrameCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->temporalLayerCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dedicatedAllocation)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1RateControlLayerInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDedicatedAllocationBufferCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeAV1RateControlLayerInfoKHR* value = wrapper->decoded_value; + VkDedicatedAllocationBufferCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMinQIndex)); - wrapper->minQIndex = DecodeAllocator::Allocate(); - wrapper->minQIndex->decoded_value = &(value->minQIndex); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minQIndex); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxQIndex)); - wrapper->maxQIndex = DecodeAllocator::Allocate(); - wrapper->maxQIndex->decoded_value = &(value->maxQIndex); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxQIndex); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->useMaxFrameSize)); - wrapper->maxFrameSize = DecodeAllocator::Allocate(); - wrapper->maxFrameSize->decoded_value = &(value->maxFrameSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxFrameSize); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dedicatedAllocation)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoDecodeVP9FeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDedicatedAllocationMemoryAllocateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVideoDecodeVP9FeaturesKHR* value = wrapper->decoded_value; + VkDedicatedAllocationMemoryAllocateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoDecodeVP9)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); + value->image = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeVP9ProfileInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTransformFeedbackFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeVP9ProfileInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceTransformFeedbackFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stdProfile)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformFeedback)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->geometryStreams)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeVP9CapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTransformFeedbackPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeVP9CapabilitiesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceTransformFeedbackPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLevel)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTransformFeedbackStreams)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTransformFeedbackBuffers)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTransformFeedbackBufferSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTransformFeedbackStreamDataSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTransformFeedbackBufferDataSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTransformFeedbackBufferDataStride)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformFeedbackQueries)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformFeedbackStreamsLinesTriangles)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformFeedbackRasterizationStreamSelect)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformFeedbackDraw)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeVP9PictureInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRasterizationStateStreamCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeVP9PictureInfoKHR* value = wrapper->decoded_value; + VkPipelineRasterizationStateStreamCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdPictureInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdPictureInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdPictureInfo = wrapper->pStdPictureInfo->GetPointer(); - wrapper->referenceNameSlotIndices.SetExternalMemory(value->referenceNameSlotIndices, VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR); - bytes_read += wrapper->referenceNameSlotIndices.DecodeInt32((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->uncompressedHeaderOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->compressedHeaderOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tilesOffset)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationStream)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoMaintenance1FeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewHandleInfoNVX* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVideoMaintenance1FeaturesKHR* value = wrapper->decoded_value; + VkImageViewHandleInfoNVX* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoMaintenance1)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->imageView)); + value->imageView = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorType)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->sampler)); + value->sampler = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoInlineQueryInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewAddressPropertiesNVX* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoInlineQueryInfoKHR* value = wrapper->decoded_value; + VkImageViewAddressPropertiesNVX* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->queryPool)); - value->queryPool = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstQuery)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queryCount)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceAddress)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTextureLODGatherFormatPropertiesAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* value = wrapper->decoded_value; + VkTextureLODGatherFormatPropertiesAMD* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->unifiedImageLayouts)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->unifiedImageLayoutsVideo)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportsTextureGatherLODBiasAMD)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentFeedbackLoopInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkShaderResourceUsageAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAttachmentFeedbackLoopInfoEXT* value = wrapper->decoded_value; + VkShaderResourceUsageAMD* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->feedbackLoopEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numUsedVgprs)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numUsedSgprs)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->ldsSizePerLocalWorkGroup)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->ldsUsageSizeInBytes)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->scratchMemUsageInBytes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCalibratedTimestampInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkShaderStatisticsInfoAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCalibratedTimestampInfoKHR* value = wrapper->decoded_value; + VkShaderStatisticsInfoAMD* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->timeDomain)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStageMask)); + wrapper->resourceUsage = DecodeAllocator::Allocate(); + wrapper->resourceUsage->decoded_value = &(value->resourceUsage); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->resourceUsage); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numPhysicalVgprs)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numPhysicalSgprs)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numAvailableVgprs)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numAvailableSgprs)); + wrapper->computeWorkGroupSize.SetExternalMemory(value->computeWorkGroupSize, 3); + bytes_read += wrapper->computeWorkGroupSize.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSetDescriptorBufferOffsetsInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkStreamDescriptorSurfaceCreateInfoGGP* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSetDescriptorBufferOffsetsInfoEXT* value = wrapper->decoded_value; + VkStreamDescriptorSurfaceCreateInfoGGP* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageFlags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); - value->layout = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstSet)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->setCount)); - bytes_read += wrapper->pBufferIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pBufferIndices = wrapper->pBufferIndices.GetPointer(); - bytes_read += wrapper->pOffsets.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); - value->pOffsets = wrapper->pOffsets.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->streamDescriptor)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCornerSampledImageFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindDescriptorBufferEmbeddedSamplersInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceCornerSampledImageFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageFlags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); - value->layout = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->set)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cornerSampledImage)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeIntraRefreshCapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalImageFormatPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeIntraRefreshCapabilitiesKHR* value = wrapper->decoded_value; + VkExternalImageFormatPropertiesNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->intraRefreshModes)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxIntraRefreshCycleDuration)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxIntraRefreshActiveReferencePictures)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->partitionIndependentIntraRefreshRegions)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nonRectangularIntraRefreshRegions)); + wrapper->imageFormatProperties = DecodeAllocator::Allocate(); + wrapper->imageFormatProperties->decoded_value = &(value->imageFormatProperties); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageFormatProperties); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalMemoryFeatures)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->exportFromImportedHandleTypes)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compatibleHandleTypes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeSessionIntraRefreshCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalMemoryImageCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeSessionIntraRefreshCreateInfoKHR* value = wrapper->decoded_value; + VkExternalMemoryImageCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->intraRefreshMode)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleTypes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeIntraRefreshInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportMemoryAllocateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeIntraRefreshInfoKHR* value = wrapper->decoded_value; + VkExportMemoryAllocateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->intraRefreshCycleDuration)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->intraRefreshIndex)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleTypes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoReferenceIntraRefreshInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportMemoryWin32HandleInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoReferenceIntraRefreshInfoKHR* value = wrapper->decoded_value; + VkImportMemoryWin32HandleInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dirtyIntraRefreshRegions)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->handle)); + value->handle = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportMemoryWin32HandleInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* value = wrapper->decoded_value; + VkExportMemoryWin32HandleInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoEncodeIntraRefresh)); + wrapper->pAttributes = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pAttributes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAttributes = wrapper->pAttributes->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dwAccess)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeQuantizationMapCapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkWin32KeyedMutexAcquireReleaseInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeQuantizationMapCapabilitiesKHR* value = wrapper->decoded_value; + VkWin32KeyedMutexAcquireReleaseInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->maxQuantizationMapExtent = DecodeAllocator::Allocate(); - wrapper->maxQuantizationMapExtent->decoded_value = &(value->maxQuantizationMapExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxQuantizationMapExtent); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->acquireCount)); + bytes_read += wrapper->pAcquireSyncs.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAcquireSyncs = nullptr; + bytes_read += wrapper->pAcquireKeys.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAcquireKeys = wrapper->pAcquireKeys.GetPointer(); + bytes_read += wrapper->pAcquireTimeoutMilliseconds.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAcquireTimeoutMilliseconds = wrapper->pAcquireTimeoutMilliseconds.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->releaseCount)); + bytes_read += wrapper->pReleaseSyncs.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pReleaseSyncs = nullptr; + bytes_read += wrapper->pReleaseKeys.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pReleaseKeys = wrapper->pReleaseKeys.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoFormatQuantizationMapPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkValidationFlagsEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoFormatQuantizationMapPropertiesKHR* value = wrapper->decoded_value; + VkValidationFlagsEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->quantizationMapTexelSize = DecodeAllocator::Allocate(); - wrapper->quantizationMapTexelSize->decoded_value = &(value->quantizationMapTexelSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->quantizationMapTexelSize); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->disabledValidationCheckCount)); + bytes_read += wrapper->pDisabledValidationChecks.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDisabledValidationChecks = wrapper->pDisabledValidationChecks.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeQuantizationMapInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkViSurfaceCreateInfoNN* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeQuantizationMapInfoKHR* value = wrapper->decoded_value; + VkViSurfaceCreateInfoNN* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->quantizationMap)); - value->quantizationMap = VK_NULL_HANDLE; - wrapper->quantizationMapExtent = DecodeAllocator::Allocate(); - wrapper->quantizationMapExtent->decoded_value = &(value->quantizationMapExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->quantizationMapExtent); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->window)); + value->window = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewASTCDecodeModeEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR* value = wrapper->decoded_value; + VkImageViewASTCDecodeModeEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->quantizationMapTexelSize = DecodeAllocator::Allocate(); - wrapper->quantizationMapTexelSize->decoded_value = &(value->quantizationMapTexelSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->quantizationMapTexelSize); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->decodeMode)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceASTCDecodeFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceASTCDecodeFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoEncodeQuantizationMap)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->decodeModeSharedExponent)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH264QuantizationMapCapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkConditionalRenderingBeginInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH264QuantizationMapCapabilitiesKHR* value = wrapper->decoded_value; + VkConditionalRenderingBeginInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minQpDelta)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxQpDelta)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeH265QuantizationMapCapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceConditionalRenderingFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeH265QuantizationMapCapabilitiesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceConditionalRenderingFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minQpDelta)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxQpDelta)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->conditionalRendering)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inheritedConditionalRendering)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoFormatH265QuantizationMapPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferInheritanceConditionalRenderingInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoFormatH265QuantizationMapPropertiesKHR* value = wrapper->decoded_value; + VkCommandBufferInheritanceConditionalRenderingInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compatibleCtbSizes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->conditionalRenderingEnable)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeAV1QuantizationMapCapabilitiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkViewportWScalingNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoEncodeAV1QuantizationMapCapabilitiesKHR* value = wrapper->decoded_value; + VkViewportWScalingNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minQIndexDelta)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxQIndexDelta)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->xcoeff)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->ycoeff)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoFormatAV1QuantizationMapPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineViewportWScalingStateCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoFormatAV1QuantizationMapPropertiesKHR* value = wrapper->decoded_value; + VkPipelineViewportWScalingStateCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compatibleSuperblockSizes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportWScalingEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportCount)); + wrapper->pViewportWScalings = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pViewportWScalings->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pViewportWScalings = wrapper->pViewportWScalings->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceCapabilities2EXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR* value = wrapper->decoded_value; + VkSurfaceCapabilities2EXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderRelaxedExtendedInstruction)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minImageCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageCount)); + wrapper->currentExtent = DecodeAllocator::Allocate(); + wrapper->currentExtent->decoded_value = &(value->currentExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->currentExtent); + wrapper->minImageExtent = DecodeAllocator::Allocate(); + wrapper->minImageExtent->decoded_value = &(value->minImageExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minImageExtent); + wrapper->maxImageExtent = DecodeAllocator::Allocate(); + wrapper->maxImageExtent->decoded_value = &(value->maxImageExtent); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxImageExtent); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageArrayLayers)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedTransforms)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->currentTransform)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedCompositeAlpha)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedUsageFlags)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedSurfaceCounters)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance7FeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPowerInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMaintenance7FeaturesKHR* value = wrapper->decoded_value; + VkDisplayPowerInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance7)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->powerState)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance7PropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceEventInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMaintenance7PropertiesKHR* value = wrapper->decoded_value; + VkDeviceEventInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustFragmentShadingRateAttachmentAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->separateDepthStencilAttachmentAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetTotalUniformBuffersDynamic)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetTotalStorageBuffersDynamic)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetTotalBuffersDynamic)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetUpdateAfterBindTotalBuffersDynamic)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceEvent)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLayeredApiPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayEventInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceLayeredApiPropertiesKHR* value = wrapper->decoded_value; + VkDisplayEventInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorID)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceID)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->layeredAPI)); - wrapper->deviceName.SetExternalMemory(value->deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); - bytes_read += wrapper->deviceName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->displayEvent)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLayeredApiPropertiesListKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainCounterCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceLayeredApiPropertiesListKHR* value = wrapper->decoded_value; + VkSwapchainCounterCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->layeredApiCount)); - wrapper->pLayeredApis = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pLayeredApis->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pLayeredApis = wrapper->pLayeredApis->GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->surfaceCounters)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRefreshCycleDurationGOOGLE* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceLayeredApiVulkanPropertiesKHR* value = wrapper->decoded_value; + VkRefreshCycleDurationGOOGLE* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->properties = DecodeAllocator::Allocate(); - wrapper->properties->decoded_value = &(value->properties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->properties); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->refreshDuration)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPastPresentationTimingGOOGLE* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMaintenance8FeaturesKHR* value = wrapper->decoded_value; + VkPastPresentationTimingGOOGLE* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance8)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentID)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->desiredPresentTime)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->actualPresentTime)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->earliestPresentTime)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentMargin)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryBarrierAccessFlags3KHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentTimeGOOGLE* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryBarrierAccessFlags3KHR* value = wrapper->decoded_value; + VkPresentTimeGOOGLE* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAccessMask3)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAccessMask3)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentID)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->desiredPresentTime)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance9FeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentTimesInfoGOOGLE* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMaintenance9FeaturesKHR* value = wrapper->decoded_value; + VkPresentTimesInfoGOOGLE* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maintenance9)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); + wrapper->pTimes = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pTimes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTimes = wrapper->pTimes->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance9PropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMaintenance9PropertiesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->image2DViewOf3DSparse)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->defaultVertexAttributeValue)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->perViewPositionAllComponents)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyOwnershipTransferPropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMultiviewPerViewAttributesInfoNVX* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkQueueFamilyOwnershipTransferPropertiesKHR* value = wrapper->decoded_value; + VkMultiviewPerViewAttributesInfoNVX* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->optimalImageTransferToQueueFamilies)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->perViewAttributes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->perViewAttributesPositionXOnly)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoMaintenance2FeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkViewportSwizzleNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVideoMaintenance2FeaturesKHR* value = wrapper->decoded_value; + VkViewportSwizzleNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoMaintenance2)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->x)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->y)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->z)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->w)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH264InlineSessionParametersInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineViewportSwizzleStateCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeH264InlineSessionParametersInfoKHR* value = wrapper->decoded_value; + VkPipelineViewportSwizzleStateCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdSPS = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdSPS->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdSPS = wrapper->pStdSPS->GetPointer(); - wrapper->pStdPPS = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdPPS->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdPPS = wrapper->pStdPPS->GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportCount)); + wrapper->pViewportSwizzles = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pViewportSwizzles->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pViewportSwizzles = wrapper->pViewportSwizzles->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeH265InlineSessionParametersInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDiscardRectanglePropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeH265InlineSessionParametersInfoKHR* value = wrapper->decoded_value; + VkPhysicalDeviceDiscardRectanglePropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdVPS = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdVPS->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdVPS = wrapper->pStdVPS->GetPointer(); - wrapper->pStdSPS = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdSPS->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdSPS = wrapper->pStdSPS->GetPointer(); - wrapper->pStdPPS = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdPPS->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdPPS = wrapper->pStdPPS->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDiscardRectangles)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoDecodeAV1InlineSessionParametersInfoKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineDiscardRectangleStateCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVideoDecodeAV1InlineSessionParametersInfoKHR* value = wrapper->decoded_value; + VkPipelineDiscardRectangleStateCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pStdSequenceHeader = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStdSequenceHeader->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStdSequenceHeader = wrapper->pStdSequenceHeader->GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->discardRectangleMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->discardRectangleCount)); + wrapper->pDiscardRectangles = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDiscardRectangles->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDiscardRectangles = wrapper->pDiscardRectangles->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceConservativeRasterizationPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceConservativeRasterizationPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthClampZeroOne)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitiveOverestimationSize)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxExtraPrimitiveOverestimationSize)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->extraPrimitiveOverestimationSizeGranularity)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitiveUnderestimation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->conservativePointAndLineRasterization)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->degenerateTrianglesRasterized)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->degenerateLinesRasterized)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fullyCoveredFragmentShaderInputVariable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->conservativeRasterizationPostDepthCoverage)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRobustness2FeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRasterizationConservativeStateCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRobustness2FeaturesKHR* value = wrapper->decoded_value; + VkPipelineRasterizationConservativeStateCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustBufferAccess2)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustImageAccess2)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nullDescriptor)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->conservativeRasterizationMode)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->extraPrimitiveOverestimationSize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRobustness2PropertiesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthClipEnableFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRobustness2PropertiesKHR* value = wrapper->decoded_value; + VkPhysicalDeviceDepthClipEnableFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustStorageBufferAccessSizeAlignment)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustUniformBufferAccessSizeAlignment)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthClipEnable)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRasterizationDepthClipStateCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* value = wrapper->decoded_value; + VkPipelineRasterizationDepthClipStateCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentModeFifoLatestReady)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthClipEnable)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugReportCallbackCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkXYColorEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDebugReportCallbackCreateInfoEXT* value = wrapper->decoded_value; + VkXYColorEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnCallback)); - value->pfnCallback = nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pUserData)); - value->pUserData = nullptr; + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->x)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->y)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRasterizationStateRasterizationOrderAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkHdrMetadataEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineRasterizationStateRasterizationOrderAMD* value = wrapper->decoded_value; + VkHdrMetadataEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationOrder)); + wrapper->displayPrimaryRed = DecodeAllocator::Allocate(); + wrapper->displayPrimaryRed->decoded_value = &(value->displayPrimaryRed); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displayPrimaryRed); + wrapper->displayPrimaryGreen = DecodeAllocator::Allocate(); + wrapper->displayPrimaryGreen->decoded_value = &(value->displayPrimaryGreen); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displayPrimaryGreen); + wrapper->displayPrimaryBlue = DecodeAllocator::Allocate(); + wrapper->displayPrimaryBlue->decoded_value = &(value->displayPrimaryBlue); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displayPrimaryBlue); + wrapper->whitePoint = DecodeAllocator::Allocate(); + wrapper->whitePoint->decoded_value = &(value->whitePoint); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->whitePoint); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLuminance)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minLuminance)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxContentLightLevel)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFrameAverageLightLevel)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugMarkerObjectNameInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDebugMarkerObjectNameInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectType)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->object)); - value->object = 0; - bytes_read += wrapper->pObjectName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pObjectName = wrapper->pObjectName.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->relaxedLineRasterization)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugMarkerObjectTagInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkIOSSurfaceCreateInfoMVK* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDebugMarkerObjectTagInfoEXT* value = wrapper->decoded_value; + VkIOSSurfaceCreateInfoMVK* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectType)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->object)); - value->object = 0; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tagName)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tagSize)); - bytes_read += wrapper->pTag.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); - value->pTag = wrapper->pTag.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pView)); + value->pView = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugMarkerMarkerInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMacOSSurfaceCreateInfoMVK* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDebugMarkerMarkerInfoEXT* value = wrapper->decoded_value; + VkMacOSSurfaceCreateInfoMVK* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += wrapper->pMarkerName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pMarkerName = wrapper->pMarkerName.GetPointer(); - wrapper->color.SetExternalMemory(value->color, 4); - bytes_read += wrapper->color.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pView)); + value->pView = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDedicatedAllocationImageCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugUtilsLabelEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDedicatedAllocationImageCreateInfoNV* value = wrapper->decoded_value; + VkDebugUtilsLabelEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dedicatedAllocation)); + bytes_read += wrapper->pLabelName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pLabelName = wrapper->pLabelName.GetPointer(); + wrapper->color.SetExternalMemory(value->color, 4); + bytes_read += wrapper->color.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDedicatedAllocationBufferCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugUtilsObjectNameInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDedicatedAllocationBufferCreateInfoNV* value = wrapper->decoded_value; + VkDebugUtilsObjectNameInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dedicatedAllocation)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectType)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->objectHandle)); + value->objectHandle = 0; + bytes_read += wrapper->pObjectName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pObjectName = wrapper->pObjectName.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDedicatedAllocationMemoryAllocateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugUtilsMessengerCallbackDataEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDedicatedAllocationMemoryAllocateInfoNV* value = wrapper->decoded_value; + VkDebugUtilsMessengerCallbackDataEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); - value->image = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); - value->buffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += wrapper->pMessageIdName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pMessageIdName = wrapper->pMessageIdName.GetPointer(); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->messageIdNumber)); + bytes_read += wrapper->pMessage.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pMessage = wrapper->pMessage.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueLabelCount)); + wrapper->pQueueLabels = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pQueueLabels->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pQueueLabels = wrapper->pQueueLabels->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cmdBufLabelCount)); + wrapper->pCmdBufLabels = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pCmdBufLabels->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCmdBufLabels = wrapper->pCmdBufLabels->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectCount)); + wrapper->pObjects = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pObjects->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pObjects = wrapper->pObjects->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTransformFeedbackFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugUtilsMessengerCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceTransformFeedbackFeaturesEXT* value = wrapper->decoded_value; + VkDebugUtilsMessengerCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformFeedback)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->geometryStreams)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->messageSeverity)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->messageType)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnUserCallback)); + value->pfnUserCallback = nullptr; + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pUserData)); + value->pUserData = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTransformFeedbackPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugUtilsObjectTagInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceTransformFeedbackPropertiesEXT* value = wrapper->decoded_value; + VkDebugUtilsObjectTagInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTransformFeedbackStreams)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTransformFeedbackBuffers)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTransformFeedbackBufferSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTransformFeedbackStreamDataSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTransformFeedbackBufferDataSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTransformFeedbackBufferDataStride)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformFeedbackQueries)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformFeedbackStreamsLinesTriangles)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformFeedbackRasterizationStreamSelect)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformFeedbackDraw)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectType)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->objectHandle)); + value->objectHandle = 0; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tagName)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tagSize)); + bytes_read += wrapper->pTag.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTag = wrapper->pTag.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRasterizationStateStreamCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAndroidHardwareBufferUsageANDROID* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineRasterizationStateStreamCreateInfoEXT* value = wrapper->decoded_value; + VkAndroidHardwareBufferUsageANDROID* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationStream)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->androidHardwareBufferUsage)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewHandleInfoNVX* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAndroidHardwareBufferPropertiesANDROID* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageViewHandleInfoNVX* value = wrapper->decoded_value; + VkAndroidHardwareBufferPropertiesANDROID* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->imageView)); - value->imageView = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorType)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->sampler)); - value->sampler = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->allocationSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeBits)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewAddressPropertiesNVX* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAndroidHardwareBufferFormatPropertiesANDROID* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageViewAddressPropertiesNVX* value = wrapper->decoded_value; + VkAndroidHardwareBufferFormatPropertiesANDROID* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceAddress)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalFormat)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->formatFeatures)); + wrapper->samplerYcbcrConversionComponents = DecodeAllocator::Allocate(); + wrapper->samplerYcbcrConversionComponents->decoded_value = &(value->samplerYcbcrConversionComponents); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->samplerYcbcrConversionComponents); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedYcbcrModel)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedYcbcrRange)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedXChromaOffset)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedYChromaOffset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTextureLODGatherFormatPropertiesAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportAndroidHardwareBufferInfoANDROID* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkTextureLODGatherFormatPropertiesAMD* value = wrapper->decoded_value; + VkImportAndroidHardwareBufferInfoANDROID* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportsTextureGatherLODBiasAMD)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkShaderResourceUsageAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryGetAndroidHardwareBufferInfoANDROID* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkShaderResourceUsageAMD* value = wrapper->decoded_value; + VkMemoryGetAndroidHardwareBufferInfoANDROID* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numUsedVgprs)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numUsedSgprs)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->ldsSizePerLocalWorkGroup)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->ldsUsageSizeInBytes)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->scratchMemUsageInBytes)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkShaderStatisticsInfoAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalFormatANDROID* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkShaderStatisticsInfoAMD* value = wrapper->decoded_value; + VkExternalFormatANDROID* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderStageMask)); - wrapper->resourceUsage = DecodeAllocator::Allocate(); - wrapper->resourceUsage->decoded_value = &(value->resourceUsage); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->resourceUsage); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numPhysicalVgprs)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numPhysicalSgprs)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numAvailableVgprs)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numAvailableSgprs)); - wrapper->computeWorkGroupSize.SetExternalMemory(value->computeWorkGroupSize, 3); - bytes_read += wrapper->computeWorkGroupSize.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalFormat)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkStreamDescriptorSurfaceCreateInfoGGP* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAndroidHardwareBufferFormatProperties2ANDROID* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkStreamDescriptorSurfaceCreateInfoGGP* value = wrapper->decoded_value; + VkAndroidHardwareBufferFormatProperties2ANDROID* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->streamDescriptor)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalFormat)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->formatFeatures)); + wrapper->samplerYcbcrConversionComponents = DecodeAllocator::Allocate(); + wrapper->samplerYcbcrConversionComponents->decoded_value = &(value->samplerYcbcrConversionComponents); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->samplerYcbcrConversionComponents); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedYcbcrModel)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedYcbcrRange)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedXChromaOffset)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedYChromaOffset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCornerSampledImageFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentSampleCountInfoAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceCornerSampledImageFeaturesNV* value = wrapper->decoded_value; + VkAttachmentSampleCountInfoAMD* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cornerSampledImage)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); + bytes_read += wrapper->pColorAttachmentSamples.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pColorAttachmentSamples = wrapper->pColorAttachmentSamples.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthStencilAttachmentSamples)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalImageFormatPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSampleLocationEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExternalImageFormatPropertiesNV* value = wrapper->decoded_value; + VkSampleLocationEXT* value = wrapper->decoded_value; - wrapper->imageFormatProperties = DecodeAllocator::Allocate(); - wrapper->imageFormatProperties->decoded_value = &(value->imageFormatProperties); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->imageFormatProperties); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalMemoryFeatures)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->exportFromImportedHandleTypes)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compatibleHandleTypes)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->x)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->y)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalMemoryImageCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSampleLocationsInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExternalMemoryImageCreateInfoNV* value = wrapper->decoded_value; + VkSampleLocationsInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleTypes)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleLocationsPerPixel)); + wrapper->sampleLocationGridSize = DecodeAllocator::Allocate(); + wrapper->sampleLocationGridSize->decoded_value = &(value->sampleLocationGridSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->sampleLocationGridSize); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleLocationsCount)); + wrapper->pSampleLocations = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSampleLocations->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSampleLocations = wrapper->pSampleLocations->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportMemoryAllocateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentSampleLocationsEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExportMemoryAllocateInfoNV* value = wrapper->decoded_value; + VkAttachmentSampleLocationsEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleTypes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentIndex)); + wrapper->sampleLocationsInfo = DecodeAllocator::Allocate(); + wrapper->sampleLocationsInfo->decoded_value = &(value->sampleLocationsInfo); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->sampleLocationsInfo); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportMemoryWin32HandleInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassSampleLocationsEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImportMemoryWin32HandleInfoNV* value = wrapper->decoded_value; + VkSubpassSampleLocationsEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->handle)); - value->handle = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpassIndex)); + wrapper->sampleLocationsInfo = DecodeAllocator::Allocate(); + wrapper->sampleLocationsInfo->decoded_value = &(value->sampleLocationsInfo); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->sampleLocationsInfo); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExportMemoryWin32HandleInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassSampleLocationsBeginInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExportMemoryWin32HandleInfoNV* value = wrapper->decoded_value; + VkRenderPassSampleLocationsBeginInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pAttributes = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pAttributes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAttributes = wrapper->pAttributes->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dwAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentInitialSampleLocationsCount)); + wrapper->pAttachmentInitialSampleLocations = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pAttachmentInitialSampleLocations->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAttachmentInitialSampleLocations = wrapper->pAttachmentInitialSampleLocations->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->postSubpassSampleLocationsCount)); + wrapper->pPostSubpassSampleLocations = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pPostSubpassSampleLocations->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPostSubpassSampleLocations = wrapper->pPostSubpassSampleLocations->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkWin32KeyedMutexAcquireReleaseInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineSampleLocationsStateCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkWin32KeyedMutexAcquireReleaseInfoNV* value = wrapper->decoded_value; + VkPipelineSampleLocationsStateCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->acquireCount)); - bytes_read += wrapper->pAcquireSyncs.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAcquireSyncs = nullptr; - bytes_read += wrapper->pAcquireKeys.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAcquireKeys = wrapper->pAcquireKeys.GetPointer(); - bytes_read += wrapper->pAcquireTimeoutMilliseconds.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAcquireTimeoutMilliseconds = wrapper->pAcquireTimeoutMilliseconds.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->releaseCount)); - bytes_read += wrapper->pReleaseSyncs.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pReleaseSyncs = nullptr; - bytes_read += wrapper->pReleaseKeys.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); - value->pReleaseKeys = wrapper->pReleaseKeys.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleLocationsEnable)); + wrapper->sampleLocationsInfo = DecodeAllocator::Allocate(); + wrapper->sampleLocationsInfo->decoded_value = &(value->sampleLocationsInfo); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->sampleLocationsInfo); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkValidationFlagsEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSampleLocationsPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkValidationFlagsEXT* value = wrapper->decoded_value; + VkPhysicalDeviceSampleLocationsPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->disabledValidationCheckCount)); - bytes_read += wrapper->pDisabledValidationChecks.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDisabledValidationChecks = wrapper->pDisabledValidationChecks.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleLocationSampleCounts)); + wrapper->maxSampleLocationGridSize = DecodeAllocator::Allocate(); + wrapper->maxSampleLocationGridSize->decoded_value = &(value->maxSampleLocationGridSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxSampleLocationGridSize); + wrapper->sampleLocationCoordinateRange.SetExternalMemory(value->sampleLocationCoordinateRange, 2); + bytes_read += wrapper->sampleLocationCoordinateRange.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleLocationSubPixelBits)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->variableSampleLocations)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkViSurfaceCreateInfoNN* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMultisamplePropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkViSurfaceCreateInfoNN* value = wrapper->decoded_value; + VkMultisamplePropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->window)); - value->window = nullptr; + wrapper->maxSampleLocationGridSize = DecodeAllocator::Allocate(); + wrapper->maxSampleLocationGridSize->decoded_value = &(value->maxSampleLocationGridSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxSampleLocationGridSize); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewASTCDecodeModeEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageViewASTCDecodeModeEXT* value = wrapper->decoded_value; + VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->decodeMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendCoherentOperations)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceASTCDecodeFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceASTCDecodeFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->decodeModeSharedExponent)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendMaxColorAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendIndependentBlend)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendNonPremultipliedSrcColor)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendNonPremultipliedDstColor)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendCorrelatedOverlap)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendAllOperations)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkConditionalRenderingBeginInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineColorBlendAdvancedStateCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkConditionalRenderingBeginInfoEXT* value = wrapper->decoded_value; + VkPipelineColorBlendAdvancedStateCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); - value->buffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcPremultiplied)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstPremultiplied)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->blendOverlap)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceConditionalRenderingFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCoverageToColorStateCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceConditionalRenderingFeaturesEXT* value = wrapper->decoded_value; + VkPipelineCoverageToColorStateCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->conditionalRendering)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inheritedConditionalRendering)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageToColorEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageToColorLocation)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferInheritanceConditionalRenderingInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCoverageModulationStateCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCommandBufferInheritanceConditionalRenderingInfoEXT* value = wrapper->decoded_value; + VkPipelineCoverageModulationStateCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->conditionalRenderingEnable)); - - return bytes_read; -} - -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkViewportWScalingNV* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); - - size_t bytes_read = 0; - VkViewportWScalingNV* value = wrapper->decoded_value; - - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->xcoeff)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->ycoeff)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageModulationMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageModulationTableEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageModulationTableCount)); + bytes_read += wrapper->pCoverageModulationTable.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCoverageModulationTable = wrapper->pCoverageModulationTable.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineViewportWScalingStateCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineViewportWScalingStateCreateInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportWScalingEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportCount)); - wrapper->pViewportWScalings = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pViewportWScalings->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pViewportWScalings = wrapper->pViewportWScalings->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSMCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderWarpsPerSM)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceCapabilities2EXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfaceCapabilities2EXT* value = wrapper->decoded_value; + VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minImageCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageCount)); - wrapper->currentExtent = DecodeAllocator::Allocate(); - wrapper->currentExtent->decoded_value = &(value->currentExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->currentExtent); - wrapper->minImageExtent = DecodeAllocator::Allocate(); - wrapper->minImageExtent->decoded_value = &(value->minImageExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minImageExtent); - wrapper->maxImageExtent = DecodeAllocator::Allocate(); - wrapper->maxImageExtent->decoded_value = &(value->maxImageExtent); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxImageExtent); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxImageArrayLayers)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedTransforms)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->currentTransform)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedCompositeAlpha)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedUsageFlags)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedSurfaceCounters)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSMBuiltins)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayPowerInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDrmFormatModifierPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayPowerInfoEXT* value = wrapper->decoded_value; + VkDrmFormatModifierPropertiesEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->powerState)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifier)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierPlaneCount)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierTilingFeatures)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceEventInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDrmFormatModifierPropertiesListEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceEventInfoEXT* value = wrapper->decoded_value; + VkDrmFormatModifierPropertiesListEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceEvent)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierCount)); + wrapper->pDrmFormatModifierProperties = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDrmFormatModifierProperties->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDrmFormatModifierProperties = wrapper->pDrmFormatModifierProperties->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayEventInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageDrmFormatModifierInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayEventInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceImageDrmFormatModifierInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->displayEvent)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifier)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sharingMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndexCount)); + bytes_read += wrapper->pQueueFamilyIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pQueueFamilyIndices = wrapper->pQueueFamilyIndices.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainCounterCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageDrmFormatModifierListCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSwapchainCounterCreateInfoEXT* value = wrapper->decoded_value; + VkImageDrmFormatModifierListCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->surfaceCounters)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierCount)); + bytes_read += wrapper->pDrmFormatModifiers.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDrmFormatModifiers = wrapper->pDrmFormatModifiers.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRefreshCycleDurationGOOGLE* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageDrmFormatModifierExplicitCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRefreshCycleDurationGOOGLE* value = wrapper->decoded_value; + VkImageDrmFormatModifierExplicitCreateInfoEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->refreshDuration)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifier)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierPlaneCount)); + wrapper->pPlaneLayouts = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pPlaneLayouts->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPlaneLayouts = wrapper->pPlaneLayouts->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPastPresentationTimingGOOGLE* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageDrmFormatModifierPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPastPresentationTimingGOOGLE* value = wrapper->decoded_value; + VkImageDrmFormatModifierPropertiesEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentID)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->desiredPresentTime)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->actualPresentTime)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->earliestPresentTime)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentMargin)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifier)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentTimeGOOGLE* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDrmFormatModifierProperties2EXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPresentTimeGOOGLE* value = wrapper->decoded_value; + VkDrmFormatModifierProperties2EXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentID)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->desiredPresentTime)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifier)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierPlaneCount)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierTilingFeatures)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentTimesInfoGOOGLE* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDrmFormatModifierPropertiesList2EXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPresentTimesInfoGOOGLE* value = wrapper->decoded_value; + VkDrmFormatModifierPropertiesList2EXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); - wrapper->pTimes = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pTimes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pTimes = wrapper->pTimes->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierCount)); + wrapper->pDrmFormatModifierProperties = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDrmFormatModifierProperties->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDrmFormatModifierProperties = wrapper->pDrmFormatModifierProperties->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkValidationCacheCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* value = wrapper->decoded_value; + VkValidationCacheCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->perViewPositionAllComponents)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->initialDataSize)); + bytes_read += wrapper->pInitialData.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); + value->pInitialData = wrapper->pInitialData.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMultiviewPerViewAttributesInfoNVX* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkShaderModuleValidationCacheCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMultiviewPerViewAttributesInfoNVX* value = wrapper->decoded_value; + VkShaderModuleValidationCacheCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->perViewAttributes)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->perViewAttributesPositionXOnly)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->validationCache)); + value->validationCache = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkViewportSwizzleNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkShadingRatePaletteNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkViewportSwizzleNV* value = wrapper->decoded_value; + VkShadingRatePaletteNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->x)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->y)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->z)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->w)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRatePaletteEntryCount)); + bytes_read += wrapper->pShadingRatePaletteEntries.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pShadingRatePaletteEntries = wrapper->pShadingRatePaletteEntries.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineViewportSwizzleStateCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineViewportShadingRateImageStateCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineViewportSwizzleStateCreateInfoNV* value = wrapper->decoded_value; + VkPipelineViewportShadingRateImageStateCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRateImageEnable)); bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportCount)); - wrapper->pViewportSwizzles = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pViewportSwizzles->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pViewportSwizzles = wrapper->pViewportSwizzles->GetPointer(); + wrapper->pShadingRatePalettes = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pShadingRatePalettes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pShadingRatePalettes = wrapper->pShadingRatePalettes->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDiscardRectanglePropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShadingRateImageFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDiscardRectanglePropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceShadingRateImageFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDiscardRectangles)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRateImage)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRateCoarseSampleOrder)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineDiscardRectangleStateCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShadingRateImagePropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineDiscardRectangleStateCreateInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceShadingRateImagePropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->discardRectangleMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->discardRectangleCount)); - wrapper->pDiscardRectangles = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDiscardRectangles->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDiscardRectangles = wrapper->pDiscardRectangles->GetPointer(); + wrapper->shadingRateTexelSize = DecodeAllocator::Allocate(); + wrapper->shadingRateTexelSize->decoded_value = &(value->shadingRateTexelSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->shadingRateTexelSize); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRatePaletteSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRateMaxCoarseSamples)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceConservativeRasterizationPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCoarseSampleLocationNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceConservativeRasterizationPropertiesEXT* value = wrapper->decoded_value; + VkCoarseSampleLocationNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitiveOverestimationSize)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxExtraPrimitiveOverestimationSize)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->extraPrimitiveOverestimationSizeGranularity)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitiveUnderestimation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->conservativePointAndLineRasterization)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->degenerateTrianglesRasterized)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->degenerateLinesRasterized)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fullyCoveredFragmentShaderInputVariable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->conservativeRasterizationPostDepthCoverage)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pixelX)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pixelY)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sample)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRasterizationConservativeStateCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCoarseSampleOrderCustomNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineRasterizationConservativeStateCreateInfoEXT* value = wrapper->decoded_value; + VkCoarseSampleOrderCustomNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->conservativeRasterizationMode)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->extraPrimitiveOverestimationSize)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRate)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleLocationCount)); + wrapper->pSampleLocations = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSampleLocations->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSampleLocations = wrapper->pSampleLocations->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthClipEnableFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDepthClipEnableFeaturesEXT* value = wrapper->decoded_value; + VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthClipEnable)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleOrderType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->customSampleOrderCount)); + wrapper->pCustomSampleOrders = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pCustomSampleOrders->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCustomSampleOrders = wrapper->pCustomSampleOrders->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRasterizationDepthClipStateCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRayTracingShaderGroupCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineRasterizationDepthClipStateCreateInfoEXT* value = wrapper->decoded_value; + VkRayTracingShaderGroupCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthClipEnable)); - - return bytes_read; -} - -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkXYColorEXT* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); - - size_t bytes_read = 0; - VkXYColorEXT* value = wrapper->decoded_value; - - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->x)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->y)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->generalShader)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->closestHitShader)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->anyHitShader)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->intersectionShader)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkHdrMetadataEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRayTracingPipelineCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkHdrMetadataEXT* value = wrapper->decoded_value; + VkRayTracingPipelineCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->displayPrimaryRed = DecodeAllocator::Allocate(); - wrapper->displayPrimaryRed->decoded_value = &(value->displayPrimaryRed); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displayPrimaryRed); - wrapper->displayPrimaryGreen = DecodeAllocator::Allocate(); - wrapper->displayPrimaryGreen->decoded_value = &(value->displayPrimaryGreen); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displayPrimaryGreen); - wrapper->displayPrimaryBlue = DecodeAllocator::Allocate(); - wrapper->displayPrimaryBlue->decoded_value = &(value->displayPrimaryBlue); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displayPrimaryBlue); - wrapper->whitePoint = DecodeAllocator::Allocate(); - wrapper->whitePoint->decoded_value = &(value->whitePoint); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->whitePoint); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxLuminance)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minLuminance)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxContentLightLevel)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFrameAverageLightLevel)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageCount)); + wrapper->pStages = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStages->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStages = wrapper->pStages->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->groupCount)); + wrapper->pGroups = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pGroups->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pGroups = wrapper->pGroups->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxRecursionDepth)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); + value->layout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->basePipelineHandle)); + value->basePipelineHandle = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->basePipelineIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGeometryTrianglesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* value = wrapper->decoded_value; + VkGeometryTrianglesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->relaxedLineRasterization)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->vertexData)); + value->vertexData = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexCount)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexStride)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexFormat)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->indexData)); + value->indexData = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexCount)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexType)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->transformData)); + value->transformData = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformOffset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkIOSSurfaceCreateInfoMVK* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGeometryAABBNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkIOSSurfaceCreateInfoMVK* value = wrapper->decoded_value; + VkGeometryAABBNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pView)); - value->pView = nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->aabbData)); + value->aabbData = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numAABBs)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stride)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMacOSSurfaceCreateInfoMVK* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGeometryDataNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMacOSSurfaceCreateInfoMVK* value = wrapper->decoded_value; + VkGeometryDataNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pView)); - value->pView = nullptr; + wrapper->triangles = DecodeAllocator::Allocate(); + wrapper->triangles->decoded_value = &(value->triangles); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->triangles); + wrapper->aabbs = DecodeAllocator::Allocate(); + wrapper->aabbs->decoded_value = &(value->aabbs); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->aabbs); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugUtilsLabelEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGeometryNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDebugUtilsLabelEXT* value = wrapper->decoded_value; + VkGeometryNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += wrapper->pLabelName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pLabelName = wrapper->pLabelName.GetPointer(); - wrapper->color.SetExternalMemory(value->color, 4); - bytes_read += wrapper->color.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->geometryType)); + wrapper->geometry = DecodeAllocator::Allocate(); + wrapper->geometry->decoded_value = &(value->geometry); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->geometry); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugUtilsObjectNameInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDebugUtilsObjectNameInfoEXT* value = wrapper->decoded_value; + VkAccelerationStructureInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectType)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->objectHandle)); - value->objectHandle = 0; - bytes_read += wrapper->pObjectName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pObjectName = wrapper->pObjectName.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->instanceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->geometryCount)); + wrapper->pGeometries = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pGeometries->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pGeometries = wrapper->pGeometries->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugUtilsMessengerCallbackDataEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDebugUtilsMessengerCallbackDataEXT* value = wrapper->decoded_value; + VkAccelerationStructureCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += wrapper->pMessageIdName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pMessageIdName = wrapper->pMessageIdName.GetPointer(); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->messageIdNumber)); - bytes_read += wrapper->pMessage.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pMessage = wrapper->pMessage.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueLabelCount)); - wrapper->pQueueLabels = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pQueueLabels->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pQueueLabels = wrapper->pQueueLabels->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cmdBufLabelCount)); - wrapper->pCmdBufLabels = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pCmdBufLabels->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCmdBufLabels = wrapper->pCmdBufLabels->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectCount)); - wrapper->pObjects = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pObjects->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pObjects = wrapper->pObjects->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->compactedSize)); + wrapper->info = DecodeAllocator::Allocate(); + wrapper->info->decoded_value = &(value->info); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->info); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugUtilsMessengerCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindAccelerationStructureMemoryInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDebugUtilsMessengerCreateInfoEXT* value = wrapper->decoded_value; + VkBindAccelerationStructureMemoryInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->messageSeverity)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->messageType)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnUserCallback)); - value->pfnUserCallback = nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pUserData)); - value->pUserData = nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->accelerationStructure)); + value->accelerationStructure = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceIndexCount)); + bytes_read += wrapper->pDeviceIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDeviceIndices = wrapper->pDeviceIndices.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDebugUtilsObjectTagInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkWriteDescriptorSetAccelerationStructureNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDebugUtilsObjectTagInfoEXT* value = wrapper->decoded_value; + VkWriteDescriptorSetAccelerationStructureNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectType)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->objectHandle)); - value->objectHandle = 0; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tagName)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tagSize)); - bytes_read += wrapper->pTag.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); - value->pTag = wrapper->pTag.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->accelerationStructureCount)); + bytes_read += wrapper->pAccelerationStructures.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAccelerationStructures = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAndroidHardwareBufferUsageANDROID* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureMemoryRequirementsInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAndroidHardwareBufferUsageANDROID* value = wrapper->decoded_value; + VkAccelerationStructureMemoryRequirementsInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->androidHardwareBufferUsage)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->accelerationStructure)); + value->accelerationStructure = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAndroidHardwareBufferPropertiesANDROID* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAndroidHardwareBufferPropertiesANDROID* value = wrapper->decoded_value; + VkPhysicalDeviceRayTracingPropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->allocationSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeBits)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderGroupHandleSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxRecursionDepth)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxShaderGroupStride)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderGroupBaseAlignment)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxGeometryCount)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxInstanceCount)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTriangleCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetAccelerationStructures)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAndroidHardwareBufferFormatPropertiesANDROID* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTransformMatrixKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAndroidHardwareBufferFormatPropertiesANDROID* value = wrapper->decoded_value; + VkTransformMatrixKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalFormat)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->formatFeatures)); - wrapper->samplerYcbcrConversionComponents = DecodeAllocator::Allocate(); - wrapper->samplerYcbcrConversionComponents->decoded_value = &(value->samplerYcbcrConversionComponents); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->samplerYcbcrConversionComponents); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedYcbcrModel)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedYcbcrRange)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedXChromaOffset)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedYChromaOffset)); + wrapper->matrix.SetExternalMemory(value->matrix, 3, 4); + bytes_read += wrapper->matrix.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportAndroidHardwareBufferInfoANDROID* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAabbPositionsKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImportAndroidHardwareBufferInfoANDROID* value = wrapper->decoded_value; + VkAabbPositionsKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); - value->buffer = nullptr; + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minX)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minY)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minZ)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxX)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxY)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxZ)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryGetAndroidHardwareBufferInfoANDROID* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureInstanceKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryGetAndroidHardwareBufferInfoANDROID* value = wrapper->decoded_value; + VkAccelerationStructureInstanceKHR* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; + wrapper->transform = DecodeAllocator::Allocate(); + wrapper->transform->decoded_value = &(value->transform); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->transform); + uint32_t temp_instanceCustomIndex; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_instanceCustomIndex); + value->instanceCustomIndex = temp_instanceCustomIndex; + uint32_t temp_mask; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_mask); + value->mask = temp_mask; + uint32_t temp_instanceShaderBindingTableRecordOffset; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_instanceShaderBindingTableRecordOffset); + value->instanceShaderBindingTableRecordOffset = temp_instanceShaderBindingTableRecordOffset; + VkGeometryInstanceFlagsKHR temp_flags; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &temp_flags); + value->flags = temp_flags; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->accelerationStructureReference)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalFormatANDROID* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExternalFormatANDROID* value = wrapper->decoded_value; + VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalFormat)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->representativeFragmentTest)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAndroidHardwareBufferFormatProperties2ANDROID* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRepresentativeFragmentTestStateCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAndroidHardwareBufferFormatProperties2ANDROID* value = wrapper->decoded_value; + VkPipelineRepresentativeFragmentTestStateCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalFormat)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->formatFeatures)); - wrapper->samplerYcbcrConversionComponents = DecodeAllocator::Allocate(); - wrapper->samplerYcbcrConversionComponents->decoded_value = &(value->samplerYcbcrConversionComponents); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->samplerYcbcrConversionComponents); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedYcbcrModel)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedYcbcrRange)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedXChromaOffset)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->suggestedYChromaOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->representativeFragmentTestEnable)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentSampleCountInfoAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageViewImageFormatInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAttachmentSampleCountInfoAMD* value = wrapper->decoded_value; + VkPhysicalDeviceImageViewImageFormatInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); - bytes_read += wrapper->pColorAttachmentSamples.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pColorAttachmentSamples = wrapper->pColorAttachmentSamples.GetPointer(); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthStencilAttachmentSamples)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageViewType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSampleLocationEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFilterCubicImageViewImageFormatPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSampleLocationEXT* value = wrapper->decoded_value; + VkFilterCubicImageViewImageFormatPropertiesEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->x)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->y)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->filterCubic)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->filterCubicMinmax)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSampleLocationsInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportMemoryHostPointerInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSampleLocationsInfoEXT* value = wrapper->decoded_value; + VkImportMemoryHostPointerInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleLocationsPerPixel)); - wrapper->sampleLocationGridSize = DecodeAllocator::Allocate(); - wrapper->sampleLocationGridSize->decoded_value = &(value->sampleLocationGridSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->sampleLocationGridSize); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleLocationsCount)); - wrapper->pSampleLocations = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSampleLocations->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSampleLocations = wrapper->pSampleLocations->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pHostPointer)); + value->pHostPointer = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAttachmentSampleLocationsEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryHostPointerPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAttachmentSampleLocationsEXT* value = wrapper->decoded_value; + VkMemoryHostPointerPropertiesEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentIndex)); - wrapper->sampleLocationsInfo = DecodeAllocator::Allocate(); - wrapper->sampleLocationsInfo->decoded_value = &(value->sampleLocationsInfo); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->sampleLocationsInfo); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeBits)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassSampleLocationsEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalMemoryHostPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSubpassSampleLocationsEXT* value = wrapper->decoded_value; + VkPhysicalDeviceExternalMemoryHostPropertiesEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpassIndex)); - wrapper->sampleLocationsInfo = DecodeAllocator::Allocate(); - wrapper->sampleLocationsInfo->decoded_value = &(value->sampleLocationsInfo); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->sampleLocationsInfo); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minImportedHostPointerAlignment)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassSampleLocationsBeginInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCompilerControlCreateInfoAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassSampleLocationsBeginInfoEXT* value = wrapper->decoded_value; + VkPipelineCompilerControlCreateInfoAMD* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentInitialSampleLocationsCount)); - wrapper->pAttachmentInitialSampleLocations = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pAttachmentInitialSampleLocations->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAttachmentInitialSampleLocations = wrapper->pAttachmentInitialSampleLocations->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->postSubpassSampleLocationsCount)); - wrapper->pPostSubpassSampleLocations = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pPostSubpassSampleLocations->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPostSubpassSampleLocations = wrapper->pPostSubpassSampleLocations->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compilerControlFlags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineSampleLocationsStateCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderCorePropertiesAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineSampleLocationsStateCreateInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceShaderCorePropertiesAMD* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleLocationsEnable)); - wrapper->sampleLocationsInfo = DecodeAllocator::Allocate(); - wrapper->sampleLocationsInfo->decoded_value = &(value->sampleLocationsInfo); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->sampleLocationsInfo); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderEngineCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderArraysPerEngineCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->computeUnitsPerShaderArray)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->simdPerComputeUnit)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->wavefrontsPerSimd)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->wavefrontSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sgprsPerSimd)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minSgprAllocation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSgprAllocation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sgprAllocationGranularity)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vgprsPerSimd)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minVgprAllocation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVgprAllocation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vgprAllocationGranularity)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSampleLocationsPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceMemoryOverallocationCreateInfoAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSampleLocationsPropertiesEXT* value = wrapper->decoded_value; + VkDeviceMemoryOverallocationCreateInfoAMD* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleLocationSampleCounts)); - wrapper->maxSampleLocationGridSize = DecodeAllocator::Allocate(); - wrapper->maxSampleLocationGridSize->decoded_value = &(value->maxSampleLocationGridSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxSampleLocationGridSize); - wrapper->sampleLocationCoordinateRange.SetExternalMemory(value->sampleLocationCoordinateRange, 2); - bytes_read += wrapper->sampleLocationCoordinateRange.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleLocationSubPixelBits)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->variableSampleLocations)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->overallocationBehavior)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMultisamplePropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMultisamplePropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->maxSampleLocationGridSize = DecodeAllocator::Allocate(); - wrapper->maxSampleLocationGridSize->decoded_value = &(value->maxSampleLocationGridSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxSampleLocationGridSize); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexAttribDivisor)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentFrameTokenGGP* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* value = wrapper->decoded_value; + VkPresentFrameTokenGGP* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendCoherentOperations)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameToken)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMeshShaderFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceMeshShaderFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendMaxColorAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendIndependentBlend)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendNonPremultipliedSrcColor)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendNonPremultipliedDstColor)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendCorrelatedOverlap)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendAllOperations)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->taskShader)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->meshShader)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineColorBlendAdvancedStateCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMeshShaderPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineColorBlendAdvancedStateCreateInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceMeshShaderPropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcPremultiplied)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstPremultiplied)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->blendOverlap)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDrawMeshTasksCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTaskWorkGroupInvocations)); + wrapper->maxTaskWorkGroupSize.SetExternalMemory(value->maxTaskWorkGroupSize, 3); + bytes_read += wrapper->maxTaskWorkGroupSize.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTaskTotalMemorySize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTaskOutputCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMeshWorkGroupInvocations)); + wrapper->maxMeshWorkGroupSize.SetExternalMemory(value->maxMeshWorkGroupSize, 3); + bytes_read += wrapper->maxMeshWorkGroupSize.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMeshTotalMemorySize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMeshOutputVertices)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMeshOutputPrimitives)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMeshMultiviewViewCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->meshOutputPerVertexGranularity)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->meshOutputPerPrimitiveGranularity)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCoverageToColorStateCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDrawMeshTasksIndirectCommandNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineCoverageToColorStateCreateInfoNV* value = wrapper->decoded_value; + VkDrawMeshTasksIndirectCommandNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageToColorEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageToColorLocation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->taskCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstTask)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCoverageModulationStateCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderImageFootprintFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineCoverageModulationStateCreateInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceShaderImageFootprintFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageModulationMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageModulationTableEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageModulationTableCount)); - bytes_read += wrapper->pCoverageModulationTable.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCoverageModulationTable = wrapper->pCoverageModulationTable.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageFootprint)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineViewportExclusiveScissorStateCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* value = wrapper->decoded_value; + VkPipelineViewportExclusiveScissorStateCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSMCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderWarpsPerSM)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->exclusiveScissorCount)); + wrapper->pExclusiveScissors = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pExclusiveScissors->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pExclusiveScissors = wrapper->pExclusiveScissors->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExclusiveScissorFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* value = wrapper->decoded_value; + VkPhysicalDeviceExclusiveScissorFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSMBuiltins)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->exclusiveScissor)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDrmFormatModifierPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyCheckpointPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDrmFormatModifierPropertiesEXT* value = wrapper->decoded_value; + VkQueueFamilyCheckpointPropertiesNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifier)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierPlaneCount)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierTilingFeatures)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->checkpointExecutionStageMask)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDrmFormatModifierPropertiesListEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCheckpointDataNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDrmFormatModifierPropertiesListEXT* value = wrapper->decoded_value; + VkCheckpointDataNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierCount)); - wrapper->pDrmFormatModifierProperties = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDrmFormatModifierProperties->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDrmFormatModifierProperties = wrapper->pDrmFormatModifierProperties->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stage)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pCheckpointMarker)); + value->pCheckpointMarker = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageDrmFormatModifierInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyCheckpointProperties2NV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceImageDrmFormatModifierInfoEXT* value = wrapper->decoded_value; + VkQueueFamilyCheckpointProperties2NV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifier)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sharingMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndexCount)); - bytes_read += wrapper->pQueueFamilyIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pQueueFamilyIndices = wrapper->pQueueFamilyIndices.GetPointer(); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->checkpointExecutionStageMask)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageDrmFormatModifierListCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCheckpointData2NV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageDrmFormatModifierListCreateInfoEXT* value = wrapper->decoded_value; + VkCheckpointData2NV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierCount)); - bytes_read += wrapper->pDrmFormatModifiers.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDrmFormatModifiers = wrapper->pDrmFormatModifiers.GetPointer(); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stage)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pCheckpointMarker)); + value->pCheckpointMarker = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageDrmFormatModifierExplicitCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentTimingFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageDrmFormatModifierExplicitCreateInfoEXT* value = wrapper->decoded_value; + VkPhysicalDevicePresentTimingFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifier)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierPlaneCount)); - wrapper->pPlaneLayouts = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pPlaneLayouts->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPlaneLayouts = wrapper->pPlaneLayouts->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentTiming)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentAtAbsoluteTime)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentAtRelativeTime)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageDrmFormatModifierPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentTimingSurfaceCapabilitiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageDrmFormatModifierPropertiesEXT* value = wrapper->decoded_value; + VkPresentTimingSurfaceCapabilitiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifier)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentTimingSupported)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentAtAbsoluteTimeSupported)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentAtRelativeTimeSupported)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentStageQueries)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDrmFormatModifierProperties2EXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainCalibratedTimestampInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDrmFormatModifierProperties2EXT* value = wrapper->decoded_value; + VkSwapchainCalibratedTimestampInfoEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifier)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierPlaneCount)); - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierTilingFeatures)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->swapchain)); + value->swapchain = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentStage)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timeDomainId)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDrmFormatModifierPropertiesList2EXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainTimingPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDrmFormatModifierPropertiesList2EXT* value = wrapper->decoded_value; + VkSwapchainTimingPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->drmFormatModifierCount)); - wrapper->pDrmFormatModifierProperties = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDrmFormatModifierProperties->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDrmFormatModifierProperties = wrapper->pDrmFormatModifierProperties->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->refreshDuration)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->refreshInterval)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkValidationCacheCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainTimeDomainPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkValidationCacheCreateInfoEXT* value = wrapper->decoded_value; + VkSwapchainTimeDomainPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->initialDataSize)); - bytes_read += wrapper->pInitialData.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); - value->pInitialData = wrapper->pInitialData.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timeDomainCount)); + bytes_read += wrapper->pTimeDomains.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTimeDomains = wrapper->pTimeDomains.GetPointer(); + bytes_read += wrapper->pTimeDomainIds.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTimeDomainIds = wrapper->pTimeDomainIds.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkShaderModuleValidationCacheCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPastPresentationTimingInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkShaderModuleValidationCacheCreateInfoEXT* value = wrapper->decoded_value; + VkPastPresentationTimingInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->validationCache)); - value->validationCache = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->swapchain)); + value->swapchain = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkShadingRatePaletteNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentStageTimeEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkShadingRatePaletteNV* value = wrapper->decoded_value; + VkPresentStageTimeEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRatePaletteEntryCount)); - bytes_read += wrapper->pShadingRatePaletteEntries.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pShadingRatePaletteEntries = wrapper->pShadingRatePaletteEntries.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stage)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->time)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineViewportShadingRateImageStateCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPastPresentationTimingEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineViewportShadingRateImageStateCreateInfoNV* value = wrapper->decoded_value; + VkPastPresentationTimingEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRateImageEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportCount)); - wrapper->pShadingRatePalettes = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pShadingRatePalettes->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pShadingRatePalettes = wrapper->pShadingRatePalettes->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentId)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->targetTime)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentStageCount)); + wrapper->pPresentStages = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pPresentStages->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPresentStages = wrapper->pPresentStages->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->timeDomain)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timeDomainId)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reportComplete)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShadingRateImageFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPastPresentationTimingPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShadingRateImageFeaturesNV* value = wrapper->decoded_value; + VkPastPresentationTimingPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRateImage)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRateCoarseSampleOrder)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timingPropertiesCounter)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timeDomainsCounter)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentationTimingCount)); + wrapper->pPresentationTimings = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pPresentationTimings->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPresentationTimings = wrapper->pPresentationTimings->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShadingRateImagePropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentTimingInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShadingRateImagePropertiesNV* value = wrapper->decoded_value; + VkPresentTimingInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->shadingRateTexelSize = DecodeAllocator::Allocate(); - wrapper->shadingRateTexelSize->decoded_value = &(value->shadingRateTexelSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->shadingRateTexelSize); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRatePaletteSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRateMaxCoarseSamples)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->targetTime)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timeDomainId)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentStageQueries)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->targetTimeDomainPresentStage)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCoarseSampleLocationNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentTimingsInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCoarseSampleLocationNV* value = wrapper->decoded_value; + VkPresentTimingsInfoEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pixelX)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pixelY)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sample)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapchainCount)); + wrapper->pTimingInfos = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pTimingInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTimingInfos = wrapper->pTimingInfos->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCoarseSampleOrderCustomNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCoarseSampleOrderCustomNV* value = wrapper->decoded_value; + VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRate)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleLocationCount)); - wrapper->pSampleLocations = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSampleLocations->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSampleLocations = wrapper->pSampleLocations->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderIntegerFunctions2)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkInitializePerformanceApiInfoINTEL* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* value = wrapper->decoded_value; + VkInitializePerformanceApiInfoINTEL* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampleOrderType)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->customSampleOrderCount)); - wrapper->pCustomSampleOrders = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pCustomSampleOrders->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCustomSampleOrders = wrapper->pCustomSampleOrders->GetPointer(); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pUserData)); + value->pUserData = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRayTracingShaderGroupCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueryPoolPerformanceQueryCreateInfoINTEL* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRayTracingShaderGroupCreateInfoNV* value = wrapper->decoded_value; + VkQueryPoolPerformanceQueryCreateInfoINTEL* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->generalShader)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->closestHitShader)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->anyHitShader)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->intersectionShader)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->performanceCountersSampling)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRayTracingPipelineCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceMarkerInfoINTEL* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRayTracingPipelineCreateInfoNV* value = wrapper->decoded_value; + VkPerformanceMarkerInfoINTEL* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageCount)); - wrapper->pStages = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStages->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStages = wrapper->pStages->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->groupCount)); - wrapper->pGroups = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pGroups->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pGroups = wrapper->pGroups->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxRecursionDepth)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); - value->layout = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->basePipelineHandle)); - value->basePipelineHandle = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->basePipelineIndex)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->marker)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGeometryTrianglesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceStreamMarkerInfoINTEL* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkGeometryTrianglesNV* value = wrapper->decoded_value; + VkPerformanceStreamMarkerInfoINTEL* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->vertexData)); - value->vertexData = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexCount)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexStride)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexFormat)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->indexData)); - value->indexData = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexCount)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexType)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->transformData)); - value->transformData = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->marker)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGeometryAABBNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceOverrideInfoINTEL* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkGeometryAABBNV* value = wrapper->decoded_value; + VkPerformanceOverrideInfoINTEL* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->aabbData)); - value->aabbData = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numAABBs)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stride)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->enable)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->parameter)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGeometryDataNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceConfigurationAcquireInfoINTEL* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkGeometryDataNV* value = wrapper->decoded_value; + VkPerformanceConfigurationAcquireInfoINTEL* value = wrapper->decoded_value; - wrapper->triangles = DecodeAllocator::Allocate(); - wrapper->triangles->decoded_value = &(value->triangles); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->triangles); - wrapper->aabbs = DecodeAllocator::Allocate(); - wrapper->aabbs->decoded_value = &(value->aabbs); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->aabbs); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGeometryNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePCIBusInfoPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkGeometryNV* value = wrapper->decoded_value; + VkPhysicalDevicePCIBusInfoPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->geometryType)); - wrapper->geometry = DecodeAllocator::Allocate(); - wrapper->geometry->decoded_value = &(value->geometry); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->geometry); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pciDomain)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pciBus)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pciDevice)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pciFunction)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayNativeHdrSurfaceCapabilitiesAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAccelerationStructureInfoNV* value = wrapper->decoded_value; + VkDisplayNativeHdrSurfaceCapabilitiesAMD* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->instanceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->geometryCount)); - wrapper->pGeometries = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pGeometries->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pGeometries = wrapper->pGeometries->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->localDimmingSupport)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainDisplayNativeHdrCreateInfoAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAccelerationStructureCreateInfoNV* value = wrapper->decoded_value; + VkSwapchainDisplayNativeHdrCreateInfoAMD* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->compactedSize)); - wrapper->info = DecodeAllocator::Allocate(); - wrapper->info->decoded_value = &(value->info); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->info); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->localDimmingEnable)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindAccelerationStructureMemoryInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImagePipeSurfaceCreateInfoFUCHSIA* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindAccelerationStructureMemoryInfoNV* value = wrapper->decoded_value; + VkImagePipeSurfaceCreateInfoFUCHSIA* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->accelerationStructure)); - value->accelerationStructure = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceIndexCount)); - bytes_read += wrapper->pDeviceIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDeviceIndices = wrapper->pDeviceIndices.GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imagePipeHandle)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkWriteDescriptorSetAccelerationStructureNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMetalSurfaceCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkWriteDescriptorSetAccelerationStructureNV* value = wrapper->decoded_value; + VkMetalSurfaceCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->accelerationStructureCount)); - bytes_read += wrapper->pAccelerationStructures.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAccelerationStructures = nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pLayer)); + value->pLayer = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureMemoryRequirementsInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentDensityMapFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAccelerationStructureMemoryRequirementsInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->accelerationStructure)); - value->accelerationStructure = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentDensityMap)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentDensityMapDynamic)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentDensityMapNonSubsampledImages)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentDensityMapPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRayTracingPropertiesNV* value = wrapper->decoded_value; + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderGroupHandleSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxRecursionDepth)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxShaderGroupStride)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderGroupBaseAlignment)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxGeometryCount)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxInstanceCount)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTriangleCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetAccelerationStructures)); + wrapper->minFragmentDensityTexelSize = DecodeAllocator::Allocate(); + wrapper->minFragmentDensityTexelSize->decoded_value = &(value->minFragmentDensityTexelSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minFragmentDensityTexelSize); + wrapper->maxFragmentDensityTexelSize = DecodeAllocator::Allocate(); + wrapper->maxFragmentDensityTexelSize->decoded_value = &(value->maxFragmentDensityTexelSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxFragmentDensityTexelSize); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentDensityInvocations)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTransformMatrixKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassFragmentDensityMapCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkTransformMatrixKHR* value = wrapper->decoded_value; + VkRenderPassFragmentDensityMapCreateInfoEXT* value = wrapper->decoded_value; - wrapper->matrix.SetExternalMemory(value->matrix, 3, 4); - bytes_read += wrapper->matrix.DecodeFloat((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->fragmentDensityMapAttachment = DecodeAllocator::Allocate(); + wrapper->fragmentDensityMapAttachment->decoded_value = &(value->fragmentDensityMapAttachment); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->fragmentDensityMapAttachment); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAabbPositionsKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingFragmentDensityMapAttachmentInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAabbPositionsKHR* value = wrapper->decoded_value; + VkRenderingFragmentDensityMapAttachmentInfoEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minX)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minY)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minZ)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxX)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxY)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxZ)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->imageView)); + value->imageView = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageLayout)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureInstanceKHR* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderCoreProperties2AMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAccelerationStructureInstanceKHR* value = wrapper->decoded_value; + VkPhysicalDeviceShaderCoreProperties2AMD* value = wrapper->decoded_value; - wrapper->transform = DecodeAllocator::Allocate(); - wrapper->transform->decoded_value = &(value->transform); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->transform); - uint32_t temp_instanceCustomIndex; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_instanceCustomIndex); - value->instanceCustomIndex = temp_instanceCustomIndex; - uint32_t temp_mask; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_mask); - value->mask = temp_mask; - uint32_t temp_instanceShaderBindingTableRecordOffset; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_instanceShaderBindingTableRecordOffset); - value->instanceShaderBindingTableRecordOffset = temp_instanceShaderBindingTableRecordOffset; - VkGeometryInstanceFlagsKHR temp_flags; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &temp_flags); - value->flags = temp_flags; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->accelerationStructureReference)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderCoreFeatures)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->activeComputeUnitCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCoherentMemoryFeaturesAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* value = wrapper->decoded_value; + VkPhysicalDeviceCoherentMemoryFeaturesAMD* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->representativeFragmentTest)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceCoherentMemory)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRepresentativeFragmentTestStateCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineRepresentativeFragmentTestStateCreateInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->representativeFragmentTestEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderImageInt64Atomics)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseImageInt64Atomics)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageViewImageFormatInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMemoryBudgetPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceImageViewImageFormatInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceMemoryBudgetPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageViewType)); + wrapper->heapBudget.SetExternalMemory(value->heapBudget, VK_MAX_MEMORY_HEAPS); + bytes_read += wrapper->heapBudget.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->heapUsage.SetExternalMemory(value->heapUsage, VK_MAX_MEMORY_HEAPS); + bytes_read += wrapper->heapUsage.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFilterCubicImageViewImageFormatPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMemoryPriorityFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkFilterCubicImageViewImageFormatPropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceMemoryPriorityFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->filterCubic)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->filterCubicMinmax)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryPriority)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportMemoryHostPointerInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryPriorityAllocateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImportMemoryHostPointerInfoEXT* value = wrapper->decoded_value; + VkMemoryPriorityAllocateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pHostPointer)); - value->pHostPointer = nullptr; + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->priority)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryHostPointerPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryHostPointerPropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeBits)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dedicatedAllocationImageAliasing)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalMemoryHostPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExternalMemoryHostPropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minImportedHostPointerAlignment)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddress)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddressCaptureReplay)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddressMultiDevice)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCompilerControlCreateInfoAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferDeviceAddressCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineCompilerControlCreateInfoAMD* value = wrapper->decoded_value; + VkBufferDeviceAddressCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->compilerControlFlags)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceAddress)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderCorePropertiesAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkValidationFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderCorePropertiesAMD* value = wrapper->decoded_value; + VkValidationFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderEngineCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderArraysPerEngineCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->computeUnitsPerShaderArray)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->simdPerComputeUnit)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->wavefrontsPerSimd)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->wavefrontSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sgprsPerSimd)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minSgprAllocation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSgprAllocation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sgprAllocationGranularity)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vgprsPerSimd)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minVgprAllocation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVgprAllocation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vgprAllocationGranularity)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->enabledValidationFeatureCount)); + bytes_read += wrapper->pEnabledValidationFeatures.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pEnabledValidationFeatures = wrapper->pEnabledValidationFeatures.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->disabledValidationFeatureCount)); + bytes_read += wrapper->pDisabledValidationFeatures.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDisabledValidationFeatures = wrapper->pDisabledValidationFeatures.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceMemoryOverallocationCreateInfoAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCooperativeMatrixPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceMemoryOverallocationCreateInfoAMD* value = wrapper->decoded_value; + VkCooperativeMatrixPropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->overallocationBehavior)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->MSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->NSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->KSize)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->AType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->BType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->CType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->DType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->scope)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceCooperativeMatrixFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVertexAttribDivisor)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeMatrix)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeMatrixRobustBufferAccess)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPresentFrameTokenGGP* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPresentFrameTokenGGP* value = wrapper->decoded_value; + VkPhysicalDeviceCooperativeMatrixPropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameToken)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeMatrixSupportedStages)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMeshShaderFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCoverageReductionModeFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMeshShaderFeaturesNV* value = wrapper->decoded_value; + VkPhysicalDeviceCoverageReductionModeFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->taskShader)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->meshShader)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageReductionMode)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMeshShaderPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCoverageReductionStateCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMeshShaderPropertiesNV* value = wrapper->decoded_value; + VkPipelineCoverageReductionStateCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDrawMeshTasksCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTaskWorkGroupInvocations)); - wrapper->maxTaskWorkGroupSize.SetExternalMemory(value->maxTaskWorkGroupSize, 3); - bytes_read += wrapper->maxTaskWorkGroupSize.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTaskTotalMemorySize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxTaskOutputCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMeshWorkGroupInvocations)); - wrapper->maxMeshWorkGroupSize.SetExternalMemory(value->maxMeshWorkGroupSize, 3); - bytes_read += wrapper->maxMeshWorkGroupSize.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMeshTotalMemorySize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMeshOutputVertices)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMeshOutputPrimitives)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMeshMultiviewViewCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->meshOutputPerVertexGranularity)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->meshOutputPerPrimitiveGranularity)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageReductionMode)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDrawMeshTasksIndirectCommandNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFramebufferMixedSamplesCombinationNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDrawMeshTasksIndirectCommandNV* value = wrapper->decoded_value; + VkFramebufferMixedSamplesCombinationNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->taskCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstTask)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageReductionMode)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationSamples)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthStencilSamples)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorSamples)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderImageFootprintFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderImageFootprintFeaturesNV* value = wrapper->decoded_value; + VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageFootprint)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShaderSampleInterlock)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShaderPixelInterlock)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShaderShadingRateInterlock)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineViewportExclusiveScissorStateCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineViewportExclusiveScissorStateCreateInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->exclusiveScissorCount)); - wrapper->pExclusiveScissors = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pExclusiveScissors->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pExclusiveScissors = wrapper->pExclusiveScissors->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->ycbcrImageArrays)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExclusiveScissorFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceProvokingVertexFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExclusiveScissorFeaturesNV* value = wrapper->decoded_value; + VkPhysicalDeviceProvokingVertexFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->exclusiveScissor)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->provokingVertexLast)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformFeedbackPreservesProvokingVertex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyCheckpointPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceProvokingVertexPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkQueueFamilyCheckpointPropertiesNV* value = wrapper->decoded_value; + VkPhysicalDeviceProvokingVertexPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->checkpointExecutionStageMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->provokingVertexModePerPipeline)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformFeedbackPreservesTriangleFanProvokingVertex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCheckpointDataNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCheckpointDataNV* value = wrapper->decoded_value; + VkPipelineRasterizationProvokingVertexStateCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stage)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pCheckpointMarker)); - value->pCheckpointMarker = nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->provokingVertexMode)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyCheckpointProperties2NV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceFullScreenExclusiveInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkQueueFamilyCheckpointProperties2NV* value = wrapper->decoded_value; + VkSurfaceFullScreenExclusiveInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->checkpointExecutionStageMask)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->fullScreenExclusive)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCheckpointData2NV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceCapabilitiesFullScreenExclusiveEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCheckpointData2NV* value = wrapper->decoded_value; + VkSurfaceCapabilitiesFullScreenExclusiveEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stage)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pCheckpointMarker)); - value->pCheckpointMarker = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fullScreenExclusiveSupported)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceFullScreenExclusiveWin32InfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* value = wrapper->decoded_value; + VkSurfaceFullScreenExclusiveWin32InfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderIntegerFunctions2)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->hmonitor)); + value->hmonitor = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkInitializePerformanceApiInfoINTEL* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkHeadlessSurfaceCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkInitializePerformanceApiInfoINTEL* value = wrapper->decoded_value; + VkHeadlessSurfaceCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pUserData)); - value->pUserData = nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueryPoolPerformanceQueryCreateInfoINTEL* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkQueryPoolPerformanceQueryCreateInfoINTEL* value = wrapper->decoded_value; + VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->performanceCountersSampling)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat32Atomics)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat32AtomicAdd)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat64Atomics)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat64AtomicAdd)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat32Atomics)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat32AtomicAdd)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat64Atomics)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat64AtomicAdd)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderImageFloat32Atomics)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderImageFloat32AtomicAdd)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseImageFloat32Atomics)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseImageFloat32AtomicAdd)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceMarkerInfoINTEL* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPerformanceMarkerInfoINTEL* value = wrapper->decoded_value; + VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->marker)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceStreamMarkerInfoINTEL* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPerformanceStreamMarkerInfoINTEL* value = wrapper->decoded_value; + VkPhysicalDeviceMapMemoryPlacedFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->marker)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryMapPlaced)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryMapRangePlaced)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryUnmapReserve)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceOverrideInfoINTEL* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPerformanceOverrideInfoINTEL* value = wrapper->decoded_value; + VkPhysicalDeviceMapMemoryPlacedPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->enable)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->parameter)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minPlacedMemoryMapAlignment)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceConfigurationAcquireInfoINTEL* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryMapPlacedInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPerformanceConfigurationAcquireInfoINTEL* value = wrapper->decoded_value; + VkMemoryMapPlacedInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pPlacedAddress)); + value->pPlacedAddress = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePCIBusInfoPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePCIBusInfoPropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pciDomain)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pciBus)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pciDevice)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pciFunction)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat16Atomics)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat16AtomicAdd)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat16AtomicMinMax)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat32AtomicMinMax)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat64AtomicMinMax)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat16Atomics)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat16AtomicAdd)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat16AtomicMinMax)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat32AtomicMinMax)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat64AtomicMinMax)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderImageFloat32AtomicMinMax)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseImageFloat32AtomicMinMax)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDisplayNativeHdrSurfaceCapabilitiesAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDisplayNativeHdrSurfaceCapabilitiesAMD* value = wrapper->decoded_value; + VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->localDimmingSupport)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxGraphicsShaderGroupCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxIndirectSequenceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxIndirectCommandsTokenCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxIndirectCommandsStreamCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxIndirectCommandsTokenOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxIndirectCommandsStreamStride)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minSequencesCountBufferOffsetAlignment)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minSequencesIndexBufferOffsetAlignment)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minIndirectCommandsBufferOffsetAlignment)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainDisplayNativeHdrCreateInfoAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSwapchainDisplayNativeHdrCreateInfoAMD* value = wrapper->decoded_value; + VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->localDimmingEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceGeneratedCommands)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImagePipeSurfaceCreateInfoFUCHSIA* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGraphicsShaderGroupCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImagePipeSurfaceCreateInfoFUCHSIA* value = wrapper->decoded_value; + VkGraphicsShaderGroupCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imagePipeHandle)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageCount)); + wrapper->pStages = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStages->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStages = wrapper->pStages->GetPointer(); + wrapper->pVertexInputState = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pVertexInputState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pVertexInputState = wrapper->pVertexInputState->GetPointer(); + wrapper->pTessellationState = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pTessellationState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTessellationState = wrapper->pTessellationState->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMetalSurfaceCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGraphicsPipelineShaderGroupsCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMetalSurfaceCreateInfoEXT* value = wrapper->decoded_value; + VkGraphicsPipelineShaderGroupsCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pLayer)); - value->pLayer = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->groupCount)); + wrapper->pGroups = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pGroups->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pGroups = wrapper->pGroups->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineCount)); + bytes_read += wrapper->pPipelines.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPipelines = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentDensityMapFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindShaderGroupIndirectCommandNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFragmentDensityMapFeaturesEXT* value = wrapper->decoded_value; + VkBindShaderGroupIndirectCommandNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentDensityMap)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentDensityMapDynamic)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentDensityMapNonSubsampledImages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->groupIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentDensityMapPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindIndexBufferIndirectCommandNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFragmentDensityMapPropertiesEXT* value = wrapper->decoded_value; + VkBindIndexBufferIndirectCommandNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->minFragmentDensityTexelSize = DecodeAllocator::Allocate(); - wrapper->minFragmentDensityTexelSize->decoded_value = &(value->minFragmentDensityTexelSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->minFragmentDensityTexelSize); - wrapper->maxFragmentDensityTexelSize = DecodeAllocator::Allocate(); - wrapper->maxFragmentDensityTexelSize->decoded_value = &(value->maxFragmentDensityTexelSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxFragmentDensityTexelSize); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentDensityInvocations)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferAddress)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassFragmentDensityMapCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindVertexBufferIndirectCommandNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassFragmentDensityMapCreateInfoEXT* value = wrapper->decoded_value; + VkBindVertexBufferIndirectCommandNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->fragmentDensityMapAttachment = DecodeAllocator::Allocate(); - wrapper->fragmentDensityMapAttachment->decoded_value = &(value->fragmentDensityMapAttachment); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->fragmentDensityMapAttachment); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferAddress)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stride)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingFragmentDensityMapAttachmentInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSetStateFlagsIndirectCommandNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderingFragmentDensityMapAttachmentInfoEXT* value = wrapper->decoded_value; + VkSetStateFlagsIndirectCommandNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->imageView)); - value->imageView = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageLayout)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->data)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderCoreProperties2AMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkIndirectCommandsStreamNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderCoreProperties2AMD* value = wrapper->decoded_value; + VkIndirectCommandsStreamNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderCoreFeatures)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->activeComputeUnitCount)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCoherentMemoryFeaturesAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkIndirectCommandsLayoutTokenNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceCoherentMemoryFeaturesAMD* value = wrapper->decoded_value; + VkIndirectCommandsLayoutTokenNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceCoherentMemory)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tokenType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stream)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexBindingUnit)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexDynamicStride)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pushconstantPipelineLayout)); + value->pushconstantPipelineLayout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pushconstantShaderStageFlags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pushconstantOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pushconstantSize)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indirectStateFlags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexTypeCount)); + bytes_read += wrapper->pIndexTypes.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pIndexTypes = wrapper->pIndexTypes.GetPointer(); + bytes_read += wrapper->pIndexTypeValues.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pIndexTypeValues = wrapper->pIndexTypeValues.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkIndirectCommandsLayoutCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* value = wrapper->decoded_value; + VkIndirectCommandsLayoutCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderImageInt64Atomics)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseImageInt64Atomics)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBindPoint)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tokenCount)); + wrapper->pTokens = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pTokens->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTokens = wrapper->pTokens->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->streamCount)); + bytes_read += wrapper->pStreamStrides.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStreamStrides = wrapper->pStreamStrides.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMemoryBudgetPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGeneratedCommandsInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMemoryBudgetPropertiesEXT* value = wrapper->decoded_value; + VkGeneratedCommandsInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->heapBudget.SetExternalMemory(value->heapBudget, VK_MAX_MEMORY_HEAPS); - bytes_read += wrapper->heapBudget.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->heapUsage.SetExternalMemory(value->heapUsage, VK_MAX_MEMORY_HEAPS); - bytes_read += wrapper->heapUsage.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBindPoint)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipeline)); + value->pipeline = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->indirectCommandsLayout)); + value->indirectCommandsLayout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->streamCount)); + wrapper->pStreams = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStreams->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStreams = wrapper->pStreams->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sequencesCount)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->preprocessBuffer)); + value->preprocessBuffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preprocessOffset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preprocessSize)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->sequencesCountBuffer)); + value->sequencesCountBuffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sequencesCountOffset)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->sequencesIndexBuffer)); + value->sequencesIndexBuffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sequencesIndexOffset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMemoryPriorityFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGeneratedCommandsMemoryRequirementsInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMemoryPriorityFeaturesEXT* value = wrapper->decoded_value; + VkGeneratedCommandsMemoryRequirementsInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryPriority)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBindPoint)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipeline)); + value->pipeline = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->indirectCommandsLayout)); + value->indirectCommandsLayout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSequencesCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryPriorityAllocateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceInheritedViewportScissorFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryPriorityAllocateInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceInheritedViewportScissorFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->priority)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inheritedViewportScissor2D)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferInheritanceViewportScissorInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* value = wrapper->decoded_value; + VkCommandBufferInheritanceViewportScissorInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dedicatedAllocationImageAliasing)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportScissor2D)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportDepthCount)); + wrapper->pViewportDepths = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pViewportDepths->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pViewportDepths = wrapper->pViewportDepths->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddress)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddressCaptureReplay)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferDeviceAddressMultiDevice)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->texelBufferAlignment)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferDeviceAddressCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassTransformBeginInfoQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBufferDeviceAddressCreateInfoEXT* value = wrapper->decoded_value; + VkRenderPassTransformBeginInfoQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceAddress)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->transform)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkValidationFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferInheritanceRenderPassTransformInfoQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkValidationFeaturesEXT* value = wrapper->decoded_value; + VkCommandBufferInheritanceRenderPassTransformInfoQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->enabledValidationFeatureCount)); - bytes_read += wrapper->pEnabledValidationFeatures.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pEnabledValidationFeatures = wrapper->pEnabledValidationFeatures.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->disabledValidationFeatureCount)); - bytes_read += wrapper->pDisabledValidationFeatures.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDisabledValidationFeatures = wrapper->pDisabledValidationFeatures.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->transform)); + wrapper->renderArea = DecodeAllocator::Allocate(); + wrapper->renderArea->decoded_value = &(value->renderArea); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->renderArea); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCooperativeMatrixPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthBiasControlFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCooperativeMatrixPropertiesNV* value = wrapper->decoded_value; + VkPhysicalDeviceDepthBiasControlFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->MSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->NSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->KSize)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->AType)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->BType)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->CType)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->DType)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->scope)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasControl)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->leastRepresentableValueForceUnormRepresentation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->floatRepresentation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasExact)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDepthBiasInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceCooperativeMatrixFeaturesNV* value = wrapper->decoded_value; + VkDepthBiasInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeMatrix)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeMatrixRobustBufferAccess)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasConstantFactor)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasClamp)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasSlopeFactor)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDepthBiasRepresentationInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceCooperativeMatrixPropertiesNV* value = wrapper->decoded_value; + VkDepthBiasRepresentationInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeMatrixSupportedStages)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasRepresentation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasExact)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCoverageReductionModeFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceCoverageReductionModeFeaturesNV* value = wrapper->decoded_value; + VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageReductionMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceMemoryReport)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCoverageReductionStateCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceMemoryReportCallbackDataEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineCoverageReductionStateCreateInfoNV* value = wrapper->decoded_value; + VkDeviceMemoryReportCallbackDataEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageReductionMode)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryObjectId)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectType)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectHandle)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->heapIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFramebufferMixedSamplesCombinationNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceDeviceMemoryReportCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkFramebufferMixedSamplesCombinationNV* value = wrapper->decoded_value; + VkDeviceDeviceMemoryReportCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->coverageReductionMode)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationSamples)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthStencilSamples)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorSamples)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnUserCallback)); + value->pfnUserCallback = nullptr; + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pUserData)); + value->pUserData = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerCustomBorderColorCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* value = wrapper->decoded_value; + VkSamplerCustomBorderColorCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShaderSampleInterlock)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShaderPixelInterlock)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShaderShadingRateInterlock)); + wrapper->customBorderColor = DecodeAllocator::Allocate(); + wrapper->customBorderColor->decoded_value = &(value->customBorderColor); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->customBorderColor); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCustomBorderColorPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceCustomBorderColorPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->ycbcrImageArrays)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxCustomBorderColorSamplers)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceProvokingVertexFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCustomBorderColorFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceProvokingVertexFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceCustomBorderColorFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->provokingVertexLast)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformFeedbackPreservesProvokingVertex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->customBorderColors)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->customBorderColorWithoutFormat)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceProvokingVertexPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceProvokingVertexPropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->provokingVertexModePerPipeline)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transformFeedbackPreservesTriangleFanProvokingVertex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureCompressionASTC_3D)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentBarrierFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineRasterizationProvokingVertexStateCreateInfoEXT* value = wrapper->decoded_value; + VkPhysicalDevicePresentBarrierFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->provokingVertexMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentBarrier)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceFullScreenExclusiveInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceCapabilitiesPresentBarrierNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfaceFullScreenExclusiveInfoEXT* value = wrapper->decoded_value; + VkSurfaceCapabilitiesPresentBarrierNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->fullScreenExclusive)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentBarrierSupported)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceCapabilitiesFullScreenExclusiveEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainPresentBarrierCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfaceCapabilitiesFullScreenExclusiveEXT* value = wrapper->decoded_value; + VkSwapchainPresentBarrierCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fullScreenExclusiveSupported)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentBarrierEnable)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceFullScreenExclusiveWin32InfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDiagnosticsConfigFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfaceFullScreenExclusiveWin32InfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceDiagnosticsConfigFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->hmonitor)); - value->hmonitor = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->diagnosticsConfig)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkHeadlessSurfaceCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceDiagnosticsConfigCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkHeadlessSurfaceCreateInfoEXT* value = wrapper->decoded_value; + VkDeviceDiagnosticsConfigCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); @@ -17146,4103 +16659,4080 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkHeadles return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTileShadingFeaturesQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceTileShadingFeaturesQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat32Atomics)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat32AtomicAdd)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat64Atomics)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat64AtomicAdd)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat32Atomics)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat32AtomicAdd)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat64Atomics)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat64AtomicAdd)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderImageFloat32Atomics)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderImageFloat32AtomicAdd)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseImageFloat32Atomics)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseImageFloat32AtomicAdd)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShading)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingFragmentStage)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingColorAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingDepthAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingStencilAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingInputAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingSampledAttachments)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingPerTileDraw)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingPerTileDispatch)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingDispatchTile)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingApron)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingAnisotropicApron)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingAtomicOps)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingImageProcessing)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTileShadingPropertiesQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceTileShadingPropertiesQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxApronSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferNonCoherent)); + wrapper->tileGranularity = DecodeAllocator::Allocate(); + wrapper->tileGranularity->decoded_value = &(value->tileGranularity); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->tileGranularity); + wrapper->maxTileShadingRate = DecodeAllocator::Allocate(); + wrapper->maxTileShadingRate->decoded_value = &(value->maxTileShadingRate); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxTileShadingRate); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassTileShadingCreateInfoQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMapMemoryPlacedFeaturesEXT* value = wrapper->decoded_value; + VkRenderPassTileShadingCreateInfoQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryMapPlaced)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryMapRangePlaced)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryUnmapReserve)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + wrapper->tileApronSize = DecodeAllocator::Allocate(); + wrapper->tileApronSize->decoded_value = &(value->tileApronSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->tileApronSize); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerTileBeginInfoQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMapMemoryPlacedPropertiesEXT* value = wrapper->decoded_value; + VkPerTileBeginInfoQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minPlacedMemoryMapAlignment)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryMapPlacedInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerTileEndInfoQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryMapPlacedInfoEXT* value = wrapper->decoded_value; + VkPerTileEndInfoQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pPlacedAddress)); - value->pPlacedAddress = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDispatchTileInfoQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT* value = wrapper->decoded_value; + VkDispatchTileInfoQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat16Atomics)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat16AtomicAdd)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat16AtomicMinMax)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat32AtomicMinMax)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBufferFloat64AtomicMinMax)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat16Atomics)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat16AtomicAdd)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat16AtomicMinMax)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat32AtomicMinMax)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderSharedFloat64AtomicMinMax)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderImageFloat32AtomicMinMax)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sparseImageFloat32AtomicMinMax)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueryLowLatencySupportNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* value = wrapper->decoded_value; + VkQueryLowLatencySupportNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxGraphicsShaderGroupCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxIndirectSequenceCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxIndirectCommandsTokenCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxIndirectCommandsStreamCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxIndirectCommandsTokenOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxIndirectCommandsStreamStride)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minSequencesCountBufferOffsetAlignment)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minSequencesIndexBufferOffsetAlignment)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minIndirectCommandsBufferOffsetAlignment)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pQueriedLowLatencyData)); + value->pQueriedLowLatencyData = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDescriptorBufferPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* value = wrapper->decoded_value; + VkPhysicalDeviceDescriptorBufferPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceGeneratedCommands)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->combinedImageSamplerDescriptorSingleArray)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferlessPushDescriptors)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->allowSamplerImageViewPostSubmitCreation)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBufferOffsetAlignment)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorBufferBindings)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxResourceDescriptorBufferBindings)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSamplerDescriptorBufferBindings)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxEmbeddedImmutableSamplerBindings)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxEmbeddedImmutableSamplers)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferCaptureReplayDescriptorDataSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCaptureReplayDescriptorDataSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageViewCaptureReplayDescriptorDataSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerCaptureReplayDescriptorDataSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->accelerationStructureCaptureReplayDescriptorDataSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerDescriptorSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->combinedImageSamplerDescriptorSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampledImageDescriptorSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageImageDescriptorSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformTexelBufferDescriptorSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustUniformTexelBufferDescriptorSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageTexelBufferDescriptorSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustStorageTexelBufferDescriptorSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->uniformBufferDescriptorSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustUniformBufferDescriptorSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->storageBufferDescriptorSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->robustStorageBufferDescriptorSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputAttachmentDescriptorSize)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->accelerationStructureDescriptorSize)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSamplerDescriptorBufferRange)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxResourceDescriptorBufferRange)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->samplerDescriptorBufferAddressSpaceSize)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->resourceDescriptorBufferAddressSpaceSize)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBufferAddressSpaceSize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGraphicsShaderGroupCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkGraphicsShaderGroupCreateInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stageCount)); - wrapper->pStages = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStages->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStages = wrapper->pStages->GetPointer(); - wrapper->pVertexInputState = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pVertexInputState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pVertexInputState = wrapper->pVertexInputState->GetPointer(); - wrapper->pTessellationState = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pTessellationState->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pTessellationState = wrapper->pTessellationState->GetPointer(); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->combinedImageSamplerDensityMapDescriptorSize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGraphicsPipelineShaderGroupsCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDescriptorBufferFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkGraphicsPipelineShaderGroupsCreateInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceDescriptorBufferFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->groupCount)); - wrapper->pGroups = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pGroups->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pGroups = wrapper->pGroups->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineCount)); - bytes_read += wrapper->pPipelines.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPipelines = nullptr; - - return bytes_read; -} - -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindShaderGroupIndirectCommandNV* wrapper) -{ - assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); - - size_t bytes_read = 0; - VkBindShaderGroupIndirectCommandNV* value = wrapper->decoded_value; - - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->groupIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBuffer)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBufferCaptureReplay)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBufferImageLayoutIgnored)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorBufferPushDescriptors)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindIndexBufferIndirectCommandNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorAddressInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindIndexBufferIndirectCommandNV* value = wrapper->decoded_value; + VkDescriptorAddressInfoEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferAddress)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->address)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->range)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindVertexBufferIndirectCommandNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorBufferBindingInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindVertexBufferIndirectCommandNV* value = wrapper->decoded_value; + VkDescriptorBufferBindingInfoEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferAddress)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stride)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->address)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSetStateFlagsIndirectCommandNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSetStateFlagsIndirectCommandNV* value = wrapper->decoded_value; + VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->data)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkIndirectCommandsStreamNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBufferCaptureDescriptorDataInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkIndirectCommandsStreamNV* value = wrapper->decoded_value; + VkBufferCaptureDescriptorDataInfoEXT* value = wrapper->decoded_value; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); value->buffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkIndirectCommandsLayoutTokenNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageCaptureDescriptorDataInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkIndirectCommandsLayoutTokenNV* value = wrapper->decoded_value; + VkImageCaptureDescriptorDataInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tokenType)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stream)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexBindingUnit)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexDynamicStride)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pushconstantPipelineLayout)); - value->pushconstantPipelineLayout = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pushconstantShaderStageFlags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pushconstantOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pushconstantSize)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indirectStateFlags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexTypeCount)); - bytes_read += wrapper->pIndexTypes.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pIndexTypes = wrapper->pIndexTypes.GetPointer(); - bytes_read += wrapper->pIndexTypeValues.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pIndexTypeValues = wrapper->pIndexTypeValues.GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->image)); + value->image = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkIndirectCommandsLayoutCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewCaptureDescriptorDataInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkIndirectCommandsLayoutCreateInfoNV* value = wrapper->decoded_value; + VkImageViewCaptureDescriptorDataInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBindPoint)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tokenCount)); - wrapper->pTokens = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pTokens->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pTokens = wrapper->pTokens->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->streamCount)); - bytes_read += wrapper->pStreamStrides.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStreamStrides = wrapper->pStreamStrides.GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->imageView)); + value->imageView = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGeneratedCommandsInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerCaptureDescriptorDataInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkGeneratedCommandsInfoNV* value = wrapper->decoded_value; + VkSamplerCaptureDescriptorDataInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBindPoint)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipeline)); - value->pipeline = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->indirectCommandsLayout)); - value->indirectCommandsLayout = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->streamCount)); - wrapper->pStreams = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStreams->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStreams = wrapper->pStreams->GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sequencesCount)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->preprocessBuffer)); - value->preprocessBuffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preprocessOffset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preprocessSize)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->sequencesCountBuffer)); - value->sequencesCountBuffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sequencesCountOffset)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->sequencesIndexBuffer)); - value->sequencesIndexBuffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sequencesIndexOffset)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->sampler)); + value->sampler = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGeneratedCommandsMemoryRequirementsInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOpaqueCaptureDescriptorDataCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkGeneratedCommandsMemoryRequirementsInfoNV* value = wrapper->decoded_value; + VkOpaqueCaptureDescriptorDataCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBindPoint)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipeline)); - value->pipeline = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->indirectCommandsLayout)); - value->indirectCommandsLayout = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSequencesCount)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->opaqueCaptureDescriptorData)); + value->opaqueCaptureDescriptorData = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceInheritedViewportScissorFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureCaptureDescriptorDataInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceInheritedViewportScissorFeaturesNV* value = wrapper->decoded_value; + VkAccelerationStructureCaptureDescriptorDataInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inheritedViewportScissor2D)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->accelerationStructure)); + value->accelerationStructure = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->accelerationStructureNV)); + value->accelerationStructureNV = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferInheritanceViewportScissorInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCommandBufferInheritanceViewportScissorInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportScissor2D)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->viewportDepthCount)); - wrapper->pViewportDepths = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pViewportDepths->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pViewportDepths = wrapper->pViewportDepths->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->graphicsPipelineLibrary)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->texelBufferAlignment)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->graphicsPipelineLibraryFastLinking)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->graphicsPipelineLibraryIndependentInterpolationDecoration)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassTransformBeginInfoQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGraphicsPipelineLibraryCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassTransformBeginInfoQCOM* value = wrapper->decoded_value; + VkGraphicsPipelineLibraryCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->transform)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCommandBufferInheritanceRenderPassTransformInfoQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCommandBufferInheritanceRenderPassTransformInfoQCOM* value = wrapper->decoded_value; + VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->transform)); - wrapper->renderArea = DecodeAllocator::Allocate(); - wrapper->renderArea->decoded_value = &(value->renderArea); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->renderArea); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderEarlyAndLateFragmentTests)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthBiasControlFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDepthBiasControlFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasControl)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->leastRepresentableValueForceUnormRepresentation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->floatRepresentation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasExact)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateEnums)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->supersampleFragmentShadingRates)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->noInvocationFragmentShadingRates)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDepthBiasInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDepthBiasInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasConstantFactor)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasClamp)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasSlopeFactor)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentShadingRateInvocationCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDepthBiasRepresentationInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineFragmentShadingRateEnumStateCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDepthBiasRepresentationInfoEXT* value = wrapper->decoded_value; + VkPipelineFragmentShadingRateEnumStateCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasRepresentation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthBiasExact)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRateType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRate)); + wrapper->combinerOps.SetExternalMemory(value->combinerOps, 2); + bytes_read += wrapper->combinerOps.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureGeometryMotionTrianglesDataNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* value = wrapper->decoded_value; + VkAccelerationStructureGeometryMotionTrianglesDataNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceMemoryReport)); + wrapper->vertexData = DecodeAllocator::Allocate(); + wrapper->vertexData->decoded_value = &(value->vertexData); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->vertexData); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceMemoryReportCallbackDataEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureMotionInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceMemoryReportCallbackDataEXT* value = wrapper->decoded_value; + VkAccelerationStructureMotionInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxInstances)); bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryObjectId)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectType)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectHandle)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->heapIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceDeviceMemoryReportCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureMatrixMotionInstanceNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceDeviceMemoryReportCreateInfoEXT* value = wrapper->decoded_value; + VkAccelerationStructureMatrixMotionInstanceNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnUserCallback)); - value->pfnUserCallback = nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pUserData)); - value->pUserData = nullptr; + wrapper->transformT0 = DecodeAllocator::Allocate(); + wrapper->transformT0->decoded_value = &(value->transformT0); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->transformT0); + wrapper->transformT1 = DecodeAllocator::Allocate(); + wrapper->transformT1->decoded_value = &(value->transformT1); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->transformT1); + uint32_t temp_instanceCustomIndex; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_instanceCustomIndex); + value->instanceCustomIndex = temp_instanceCustomIndex; + uint32_t temp_mask; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_mask); + value->mask = temp_mask; + uint32_t temp_instanceShaderBindingTableRecordOffset; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_instanceShaderBindingTableRecordOffset); + value->instanceShaderBindingTableRecordOffset = temp_instanceShaderBindingTableRecordOffset; + VkGeometryInstanceFlagsKHR temp_flags; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &temp_flags); + value->flags = temp_flags; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->accelerationStructureReference)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerCustomBorderColorCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSRTDataNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSamplerCustomBorderColorCreateInfoEXT* value = wrapper->decoded_value; + VkSRTDataNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->customBorderColor = DecodeAllocator::Allocate(); - wrapper->customBorderColor->decoded_value = &(value->customBorderColor); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->customBorderColor); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sx)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->a)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->b)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pvx)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sy)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->c)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pvy)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sz)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pvz)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->qx)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->qy)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->qz)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->qw)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tx)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->ty)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tz)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCustomBorderColorPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureSRTMotionInstanceNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceCustomBorderColorPropertiesEXT* value = wrapper->decoded_value; + VkAccelerationStructureSRTMotionInstanceNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxCustomBorderColorSamplers)); + wrapper->transformT0 = DecodeAllocator::Allocate(); + wrapper->transformT0->decoded_value = &(value->transformT0); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->transformT0); + wrapper->transformT1 = DecodeAllocator::Allocate(); + wrapper->transformT1->decoded_value = &(value->transformT1); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->transformT1); + uint32_t temp_instanceCustomIndex; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_instanceCustomIndex); + value->instanceCustomIndex = temp_instanceCustomIndex; + uint32_t temp_mask; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_mask); + value->mask = temp_mask; + uint32_t temp_instanceShaderBindingTableRecordOffset; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_instanceShaderBindingTableRecordOffset); + value->instanceShaderBindingTableRecordOffset = temp_instanceShaderBindingTableRecordOffset; + VkGeometryInstanceFlagsKHR temp_flags; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &temp_flags); + value->flags = temp_flags; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->accelerationStructureReference)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCustomBorderColorFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingMotionBlurFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceCustomBorderColorFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceRayTracingMotionBlurFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->customBorderColors)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->customBorderColorWithoutFormat)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingMotionBlur)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingMotionBlurPipelineTraceRaysIndirect)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentBarrierFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePresentBarrierFeaturesNV* value = wrapper->decoded_value; + VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentBarrier)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->ycbcr2plane444Formats)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSurfaceCapabilitiesPresentBarrierNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSurfaceCapabilitiesPresentBarrierNV* value = wrapper->decoded_value; + VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentBarrierSupported)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentDensityMapDeferred)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainPresentBarrierCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSwapchainPresentBarrierCreateInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentBarrierEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subsampledLoads)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subsampledCoarseReconstructionEarlyAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSubsampledArrayLayers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetSubsampledSamplers)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDiagnosticsConfigFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyCommandTransformInfoQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDiagnosticsConfigFeaturesNV* value = wrapper->decoded_value; + VkCopyCommandTransformInfoQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->diagnosticsConfig)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->transform)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceDiagnosticsConfigCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageCompressionControlFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceDiagnosticsConfigCreateInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceImageCompressionControlFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCompressionControl)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTileShadingFeaturesQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageCompressionControlEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceTileShadingFeaturesQCOM* value = wrapper->decoded_value; + VkImageCompressionControlEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShading)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingFragmentStage)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingColorAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingDepthAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingStencilAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingInputAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingSampledAttachments)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingPerTileDraw)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingPerTileDispatch)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingDispatchTile)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingApron)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingAnisotropicApron)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingAtomicOps)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileShadingImageProcessing)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->compressionControlPlaneCount)); + bytes_read += wrapper->pFixedRateFlags.DecodeFlags((buffer + bytes_read), (buffer_size - bytes_read)); + value->pFixedRateFlags = wrapper->pFixedRateFlags.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTileShadingPropertiesQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageCompressionPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceTileShadingPropertiesQCOM* value = wrapper->decoded_value; + VkImageCompressionPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxApronSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->preferNonCoherent)); - wrapper->tileGranularity = DecodeAllocator::Allocate(); - wrapper->tileGranularity->decoded_value = &(value->tileGranularity); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->tileGranularity); - wrapper->maxTileShadingRate = DecodeAllocator::Allocate(); - wrapper->maxTileShadingRate->decoded_value = &(value->maxTileShadingRate); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxTileShadingRate); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCompressionFlags)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCompressionFixedRateFlags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassTileShadingCreateInfoQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassTileShadingCreateInfoQCOM* value = wrapper->decoded_value; + VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - wrapper->tileApronSize = DecodeAllocator::Allocate(); - wrapper->tileApronSize->decoded_value = &(value->tileApronSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->tileApronSize); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentFeedbackLoopLayout)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerTileBeginInfoQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevice4444FormatsFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPerTileBeginInfoQCOM* value = wrapper->decoded_value; + VkPhysicalDevice4444FormatsFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->formatA4R4G4B4)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->formatA4B4G4R4)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerTileEndInfoQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFaultFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPerTileEndInfoQCOM* value = wrapper->decoded_value; + VkPhysicalDeviceFaultFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceFault)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceFaultVendorBinary)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDispatchTileInfoQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceFaultCountsEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDispatchTileInfoQCOM* value = wrapper->decoded_value; + VkDeviceFaultCountsEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->addressInfoCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorInfoCount)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorBinarySize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueryLowLatencySupportNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceFaultAddressInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkQueryLowLatencySupportNV* value = wrapper->decoded_value; + VkDeviceFaultAddressInfoEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pQueriedLowLatencyData)); - value->pQueriedLowLatencyData = nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->addressType)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reportedAddress)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->addressPrecision)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceFaultVendorInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* value = wrapper->decoded_value; + VkDeviceFaultVendorInfoEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->graphicsPipelineLibrary)); + wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); + bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorFaultCode)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorFaultData)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceFaultInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* value = wrapper->decoded_value; + VkDeviceFaultInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->graphicsPipelineLibraryFastLinking)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->graphicsPipelineLibraryIndependentInterpolationDecoration)); + wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); + bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->pAddressInfos = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pAddressInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pAddressInfos = wrapper->pAddressInfos->GetPointer(); + wrapper->pVendorInfos = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pVendorInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pVendorInfos = wrapper->pVendorInfos->GetPointer(); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pVendorBinaryData)); + value->pVendorBinaryData = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGraphicsPipelineLibraryCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceFaultVendorBinaryHeaderVersionOneEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkGraphicsPipelineLibraryCreateInfoEXT* value = wrapper->decoded_value; + VkDeviceFaultVendorBinaryHeaderVersionOneEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->headerSize)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->headerVersion)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorID)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceID)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->driverVersion)); + wrapper->pipelineCacheUUID.SetExternalMemory(value->pipelineCacheUUID, VK_UUID_SIZE); + bytes_read += wrapper->pipelineCacheUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->applicationNameOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->applicationVersion)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->engineNameOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->engineVersion)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->apiVersion)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD* value = wrapper->decoded_value; + VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderEarlyAndLateFragmentTests)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationOrderColorAttachmentAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationOrderDepthAttachmentAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationOrderStencilAttachmentAccess)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* value = wrapper->decoded_value; + VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentShadingRateEnums)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->supersampleFragmentShadingRates)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->noInvocationFragmentShadingRates)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->formatRgba10x6WithoutYCbCrSampler)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDirectFBSurfaceCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* value = wrapper->decoded_value; + VkDirectFBSurfaceCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFragmentShadingRateInvocationCount)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dfb)); + value->dfb = nullptr; + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->surface)); + value->surface = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineFragmentShadingRateEnumStateCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineFragmentShadingRateEnumStateCreateInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRateType)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->shadingRate)); - wrapper->combinerOps.SetExternalMemory(value->combinerOps, 2); - bytes_read += wrapper->combinerOps.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mutableDescriptorType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureGeometryMotionTrianglesDataNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMutableDescriptorTypeListEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAccelerationStructureGeometryMotionTrianglesDataNV* value = wrapper->decoded_value; + VkMutableDescriptorTypeListEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->vertexData = DecodeAllocator::Allocate(); - wrapper->vertexData->decoded_value = &(value->vertexData); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->vertexData); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorTypeCount)); + bytes_read += wrapper->pDescriptorTypes.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDescriptorTypes = wrapper->pDescriptorTypes.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureMotionInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMutableDescriptorTypeCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAccelerationStructureMotionInfoNV* value = wrapper->decoded_value; + VkMutableDescriptorTypeCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxInstances)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mutableDescriptorTypeListCount)); + wrapper->pMutableDescriptorTypeLists = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pMutableDescriptorTypeLists->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pMutableDescriptorTypeLists = wrapper->pMutableDescriptorTypeLists->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureMatrixMotionInstanceNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAccelerationStructureMatrixMotionInstanceNV* value = wrapper->decoded_value; + VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT* value = wrapper->decoded_value; - wrapper->transformT0 = DecodeAllocator::Allocate(); - wrapper->transformT0->decoded_value = &(value->transformT0); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->transformT0); - wrapper->transformT1 = DecodeAllocator::Allocate(); - wrapper->transformT1->decoded_value = &(value->transformT1); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->transformT1); - uint32_t temp_instanceCustomIndex; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_instanceCustomIndex); - value->instanceCustomIndex = temp_instanceCustomIndex; - uint32_t temp_mask; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_mask); - value->mask = temp_mask; - uint32_t temp_instanceShaderBindingTableRecordOffset; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_instanceShaderBindingTableRecordOffset); - value->instanceShaderBindingTableRecordOffset = temp_instanceShaderBindingTableRecordOffset; - VkGeometryInstanceFlagsKHR temp_flags; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &temp_flags); - value->flags = temp_flags; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->accelerationStructureReference)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexInputDynamicState)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSRTDataNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVertexInputBindingDescription2EXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSRTDataNV* value = wrapper->decoded_value; + VkVertexInputBindingDescription2EXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sx)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->a)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->b)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pvx)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sy)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->c)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pvy)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sz)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pvz)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->qx)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->qy)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->qz)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->qw)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tx)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->ty)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tz)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stride)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputRate)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->divisor)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureSRTMotionInstanceNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVertexInputAttributeDescription2EXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAccelerationStructureSRTMotionInstanceNV* value = wrapper->decoded_value; + VkVertexInputAttributeDescription2EXT* value = wrapper->decoded_value; - wrapper->transformT0 = DecodeAllocator::Allocate(); - wrapper->transformT0->decoded_value = &(value->transformT0); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->transformT0); - wrapper->transformT1 = DecodeAllocator::Allocate(); - wrapper->transformT1->decoded_value = &(value->transformT1); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->transformT1); - uint32_t temp_instanceCustomIndex; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_instanceCustomIndex); - value->instanceCustomIndex = temp_instanceCustomIndex; - uint32_t temp_mask; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_mask); - value->mask = temp_mask; - uint32_t temp_instanceShaderBindingTableRecordOffset; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &temp_instanceShaderBindingTableRecordOffset); - value->instanceShaderBindingTableRecordOffset = temp_instanceShaderBindingTableRecordOffset; - VkGeometryInstanceFlagsKHR temp_flags; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &temp_flags); - value->flags = temp_flags; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->accelerationStructureReference)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->location)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingMotionBlurFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDrmPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRayTracingMotionBlurFeaturesNV* value = wrapper->decoded_value; + VkPhysicalDeviceDrmPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingMotionBlur)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingMotionBlurPipelineTraceRaysIndirect)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hasPrimary)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hasRender)); + bytes_read += ValueDecoder::DecodeInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primaryMajor)); + bytes_read += ValueDecoder::DecodeInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primaryMinor)); + bytes_read += ValueDecoder::DecodeInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->renderMajor)); + bytes_read += ValueDecoder::DecodeInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->renderMinor)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceAddressBindingReportFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceAddressBindingReportFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->ycbcr2plane444Formats)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reportAddressBinding)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceAddressBindingCallbackDataEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* value = wrapper->decoded_value; + VkDeviceAddressBindingCallbackDataEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentDensityMapDeferred)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseAddress)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindingType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthClipControlFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceDepthClipControlFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subsampledLoads)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subsampledCoarseReconstructionEarlyAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxSubsampledArrayLayers)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDescriptorSetSubsampledSamplers)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthClipControl)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyCommandTransformInfoQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineViewportDepthClipControlCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCopyCommandTransformInfoQCOM* value = wrapper->decoded_value; + VkPipelineViewportDepthClipControlCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->transform)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->negativeOneToOne)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageCompressionControlFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceImageCompressionControlFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCompressionControl)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitiveTopologyListRestart)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitiveTopologyPatchListRestart)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageCompressionControlEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportMemoryZirconHandleInfoFUCHSIA* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageCompressionControlEXT* value = wrapper->decoded_value; + VkImportMemoryZirconHandleInfoFUCHSIA* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->compressionControlPlaneCount)); - bytes_read += wrapper->pFixedRateFlags.DecodeFlags((buffer + bytes_read), (buffer_size - bytes_read)); - value->pFixedRateFlags = wrapper->pFixedRateFlags.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->handle)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageCompressionPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryZirconHandlePropertiesFUCHSIA* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageCompressionPropertiesEXT* value = wrapper->decoded_value; + VkMemoryZirconHandlePropertiesFUCHSIA* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCompressionFlags)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCompressionFixedRateFlags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeBits)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryGetZirconHandleInfoFUCHSIA* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT* value = wrapper->decoded_value; + VkMemoryGetZirconHandleInfoFUCHSIA* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentFeedbackLoopLayout)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevice4444FormatsFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportSemaphoreZirconHandleInfoFUCHSIA* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevice4444FormatsFeaturesEXT* value = wrapper->decoded_value; + VkImportSemaphoreZirconHandleInfoFUCHSIA* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->formatA4R4G4B4)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->formatA4B4G4R4)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); + value->semaphore = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->zirconHandle)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFaultFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreGetZirconHandleInfoFUCHSIA* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFaultFeaturesEXT* value = wrapper->decoded_value; + VkSemaphoreGetZirconHandleInfoFUCHSIA* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceFault)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceFaultVendorBinary)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); + value->semaphore = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceFaultCountsEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceInvocationMaskFeaturesHUAWEI* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceFaultCountsEXT* value = wrapper->decoded_value; + VkPhysicalDeviceInvocationMaskFeaturesHUAWEI* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->addressInfoCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorInfoCount)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorBinarySize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->invocationMask)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceFaultAddressInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryGetRemoteAddressInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceFaultAddressInfoEXT* value = wrapper->decoded_value; + VkMemoryGetRemoteAddressInfoNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->addressType)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reportedAddress)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->addressPrecision)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceFaultVendorInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalMemoryRDMAFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceFaultVendorInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceExternalMemoryRDMAFeaturesNV* value = wrapper->decoded_value; - wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); - bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorFaultCode)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorFaultData)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalMemoryRDMA)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceFaultInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFrameBoundaryFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceFaultInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceFrameBoundaryFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); - bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->pAddressInfos = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pAddressInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pAddressInfos = wrapper->pAddressInfos->GetPointer(); - wrapper->pVendorInfos = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pVendorInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pVendorInfos = wrapper->pVendorInfos->GetPointer(); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pVendorBinaryData)); - value->pVendorBinaryData = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameBoundary)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceFaultVendorBinaryHeaderVersionOneEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFrameBoundaryEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceFaultVendorBinaryHeaderVersionOneEXT* value = wrapper->decoded_value; + VkFrameBoundaryEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->headerSize)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->headerVersion)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vendorID)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceID)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->driverVersion)); - wrapper->pipelineCacheUUID.SetExternalMemory(value->pipelineCacheUUID, VK_UUID_SIZE); - bytes_read += wrapper->pipelineCacheUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->applicationNameOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->applicationVersion)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->engineNameOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->engineVersion)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->apiVersion)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameID)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCount)); + bytes_read += wrapper->pImages.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pImages = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferCount)); + bytes_read += wrapper->pBuffers.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pBuffers = nullptr; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tagName)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tagSize)); + bytes_read += wrapper->pTag.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTag = wrapper->pTag.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationOrderColorAttachmentAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationOrderDepthAttachmentAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationOrderStencilAttachmentAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multisampledRenderToSingleSampled)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassResolvePerformanceQueryEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* value = wrapper->decoded_value; + VkSubpassResolvePerformanceQueryEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->formatRgba10x6WithoutYCbCrSampler)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->optimal)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDirectFBSurfaceCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMultisampledRenderToSingleSampledInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDirectFBSurfaceCreateInfoEXT* value = wrapper->decoded_value; + VkMultisampledRenderToSingleSampledInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dfb)); - value->dfb = nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->surface)); - value->surface = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multisampledRenderToSingleSampledEnable)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationSamples)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mutableDescriptorType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState2)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState2LogicOp)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState2PatchControlPoints)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMutableDescriptorTypeListEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkScreenSurfaceCreateInfoQNX* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMutableDescriptorTypeListEXT* value = wrapper->decoded_value; + VkScreenSurfaceCreateInfoQNX* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorTypeCount)); - bytes_read += wrapper->pDescriptorTypes.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDescriptorTypes = wrapper->pDescriptorTypes.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->context)); + value->context = nullptr; + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->window)); + value->window = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMutableDescriptorTypeCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceColorWriteEnableFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMutableDescriptorTypeCreateInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceColorWriteEnableFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->mutableDescriptorTypeListCount)); - wrapper->pMutableDescriptorTypeLists = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pMutableDescriptorTypeLists->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pMutableDescriptorTypeLists = wrapper->pMutableDescriptorTypeLists->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorWriteEnable)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineColorWriteCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT* value = wrapper->decoded_value; + VkPipelineColorWriteCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexInputDynamicState)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentCount)); + bytes_read += wrapper->pColorWriteEnables.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pColorWriteEnables = wrapper->pColorWriteEnables.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVertexInputBindingDescription2EXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVertexInputBindingDescription2EXT* value = wrapper->decoded_value; + VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stride)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputRate)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->divisor)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitivesGeneratedQuery)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitivesGeneratedQueryWithRasterizerDiscard)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitivesGeneratedQueryWithNonZeroStreams)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVertexInputAttributeDescription2EXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkVertexInputAttributeDescription2EXT* value = wrapper->decoded_value; + VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->location)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->videoEncodeRgbConversion)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDrmPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeRgbConversionCapabilitiesVALVE* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDrmPropertiesEXT* value = wrapper->decoded_value; + VkVideoEncodeRgbConversionCapabilitiesVALVE* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hasPrimary)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hasRender)); - bytes_read += ValueDecoder::DecodeInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primaryMajor)); - bytes_read += ValueDecoder::DecodeInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primaryMinor)); - bytes_read += ValueDecoder::DecodeInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->renderMajor)); - bytes_read += ValueDecoder::DecodeInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->renderMinor)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rgbModels)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rgbRanges)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->xChromaOffsets)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->yChromaOffsets)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceAddressBindingReportFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeProfileRgbConversionInfoVALVE* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceAddressBindingReportFeaturesEXT* value = wrapper->decoded_value; + VkVideoEncodeProfileRgbConversionInfoVALVE* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->reportAddressBinding)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->performEncodeRgbConversion)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceAddressBindingCallbackDataEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkVideoEncodeSessionRgbConversionCreateInfoVALVE* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceAddressBindingCallbackDataEXT* value = wrapper->decoded_value; + VkVideoEncodeSessionRgbConversionCreateInfoVALVE* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseAddress)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindingType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rgbModel)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rgbRange)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->xChromaOffset)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->yChromaOffset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthClipControlFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageViewMinLodFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDepthClipControlFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceImageViewMinLodFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthClipControl)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minLod)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineViewportDepthClipControlCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewMinLodCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineViewportDepthClipControlCreateInfoEXT* value = wrapper->decoded_value; + VkImageViewMinLodCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->negativeOneToOne)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minLod)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiDrawFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceMultiDrawFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitiveTopologyListRestart)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitiveTopologyPatchListRestart)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiDraw)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportMemoryZirconHandleInfoFUCHSIA* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiDrawPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImportMemoryZirconHandleInfoFUCHSIA* value = wrapper->decoded_value; + VkPhysicalDeviceMultiDrawPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->handle)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMultiDrawCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryZirconHandlePropertiesFUCHSIA* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMultiDrawInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryZirconHandlePropertiesFUCHSIA* value = wrapper->decoded_value; + VkMultiDrawInfoEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryTypeBits)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstVertex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryGetZirconHandleInfoFUCHSIA* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMultiDrawIndexedInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryGetZirconHandleInfoFUCHSIA* value = wrapper->decoded_value; + VkMultiDrawIndexedInfoEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexCount)); + bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexOffset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImportSemaphoreZirconHandleInfoFUCHSIA* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImportSemaphoreZirconHandleInfoFUCHSIA* value = wrapper->decoded_value; + VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); - value->semaphore = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->zirconHandle)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->image2DViewOf3D)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampler2DViewOf3D)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSemaphoreGetZirconHandleInfoFUCHSIA* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderTileImageFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSemaphoreGetZirconHandleInfoFUCHSIA* value = wrapper->decoded_value; + VkPhysicalDeviceShaderTileImageFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->semaphore)); - value->semaphore = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTileImageColorReadAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTileImageDepthReadAccess)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTileImageStencilReadAccess)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceInvocationMaskFeaturesHUAWEI* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderTileImagePropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceInvocationMaskFeaturesHUAWEI* value = wrapper->decoded_value; + VkPhysicalDeviceShaderTileImagePropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->invocationMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTileImageCoherentReadAccelerated)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTileImageReadSampleFromPixelRateInvocation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTileImageReadFromHelperInvocation)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryGetRemoteAddressInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMicromapUsageEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMemoryGetRemoteAddressInfoNV* value = wrapper->decoded_value; + VkMicromapUsageEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->handleType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->count)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subdivisionLevel)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalMemoryRDMAFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMicromapBuildInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExternalMemoryRDMAFeaturesNV* value = wrapper->decoded_value; + VkMicromapBuildInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalMemoryRDMA)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mode)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstMicromap)); + value->dstMicromap = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->usageCountsCount)); + wrapper->pUsageCounts = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pUsageCounts->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pUsageCounts = wrapper->pUsageCounts->GetPointer(); + wrapper->ppUsageCounts = DecodeAllocator::Allocate>(); + bytes_read += wrapper->ppUsageCounts->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->ppUsageCounts = wrapper->ppUsageCounts->GetPointer(); + wrapper->data = DecodeAllocator::Allocate(); + wrapper->data->decoded_value = &(value->data); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->data); + wrapper->scratchData = DecodeAllocator::Allocate(); + wrapper->scratchData->decoded_value = &(value->scratchData); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->scratchData); + wrapper->triangleArray = DecodeAllocator::Allocate(); + wrapper->triangleArray->decoded_value = &(value->triangleArray); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->triangleArray); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->triangleArrayStride)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFrameBoundaryFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMicromapCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFrameBoundaryFeaturesEXT* value = wrapper->decoded_value; + VkMicromapCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameBoundary)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->createFlags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); + value->buffer = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceAddress)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkFrameBoundaryEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceOpacityMicromapFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkFrameBoundaryEXT* value = wrapper->decoded_value; + VkPhysicalDeviceOpacityMicromapFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameID)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCount)); - bytes_read += wrapper->pImages.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pImages = nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bufferCount)); - bytes_read += wrapper->pBuffers.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pBuffers = nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tagName)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->tagSize)); - bytes_read += wrapper->pTag.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); - value->pTag = wrapper->pTag.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->micromap)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->micromapCaptureReplay)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->micromapHostCommands)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceOpacityMicromapPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceOpacityMicromapPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multisampledRenderToSingleSampled)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxOpacity2StateSubdivisionLevel)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxOpacity4StateSubdivisionLevel)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSubpassResolvePerformanceQueryEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMicromapVersionInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSubpassResolvePerformanceQueryEXT* value = wrapper->decoded_value; + VkMicromapVersionInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->optimal)); + bytes_read += wrapper->pVersionData.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + value->pVersionData = wrapper->pVersionData.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMultisampledRenderToSingleSampledInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyMicromapToMemoryInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMultisampledRenderToSingleSampledInfoEXT* value = wrapper->decoded_value; + VkCopyMicromapToMemoryInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multisampledRenderToSingleSampledEnable)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rasterizationSamples)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->src)); + value->src = VK_NULL_HANDLE; + wrapper->dst = DecodeAllocator::Allocate(); + wrapper->dst->decoded_value = &(value->dst); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dst); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mode)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyMemoryToMicromapInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* value = wrapper->decoded_value; + VkCopyMemoryToMicromapInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState2)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState2LogicOp)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState2PatchControlPoints)); + wrapper->src = DecodeAllocator::Allocate(); + wrapper->src->decoded_value = &(value->src); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->src); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dst)); + value->dst = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mode)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkScreenSurfaceCreateInfoQNX* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyMicromapInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkScreenSurfaceCreateInfoQNX* value = wrapper->decoded_value; + VkCopyMicromapInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->context)); - value->context = nullptr; - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->window)); - value->window = nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->src)); + value->src = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dst)); + value->dst = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mode)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceColorWriteEnableFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMicromapBuildSizesInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceColorWriteEnableFeaturesEXT* value = wrapper->decoded_value; + VkMicromapBuildSizesInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorWriteEnable)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->micromapSize)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->buildScratchSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->discardable)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineColorWriteCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureTrianglesOpacityMicromapEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineColorWriteCreateInfoEXT* value = wrapper->decoded_value; + VkAccelerationStructureTrianglesOpacityMicromapEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->attachmentCount)); - bytes_read += wrapper->pColorWriteEnables.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - value->pColorWriteEnables = wrapper->pColorWriteEnables.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexType)); + wrapper->indexBuffer = DecodeAllocator::Allocate(); + wrapper->indexBuffer->decoded_value = &(value->indexBuffer); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->indexBuffer); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexStride)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseTriangle)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->usageCountsCount)); + wrapper->pUsageCounts = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pUsageCounts->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pUsageCounts = wrapper->pUsageCounts->GetPointer(); + wrapper->ppUsageCounts = DecodeAllocator::Allocate>(); + bytes_read += wrapper->ppUsageCounts->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->ppUsageCounts = wrapper->ppUsageCounts->GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->micromap)); + value->micromap = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMicromapTriangleEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* value = wrapper->decoded_value; + VkMicromapTriangleEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitivesGeneratedQuery)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitivesGeneratedQueryWithRasterizerDiscard)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->primitivesGeneratedQueryWithNonZeroStreams)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataOffset)); + bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subdivisionLevel)); + bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageViewMinLodFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDisplacementMicromapFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceImageViewMinLodFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceDisplacementMicromapFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minLod)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->displacementMicromap)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewMinLodCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDisplacementMicromapPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageViewMinLodCreateInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceDisplacementMicromapPropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minLod)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDisplacementMicromapSubdivisionLevel)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiDrawFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureTrianglesDisplacementMicromapNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMultiDrawFeaturesEXT* value = wrapper->decoded_value; + VkAccelerationStructureTrianglesDisplacementMicromapNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiDraw)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->displacementBiasAndScaleFormat)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->displacementVectorFormat)); + wrapper->displacementBiasAndScaleBuffer = DecodeAllocator::Allocate(); + wrapper->displacementBiasAndScaleBuffer->decoded_value = &(value->displacementBiasAndScaleBuffer); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displacementBiasAndScaleBuffer); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->displacementBiasAndScaleStride)); + wrapper->displacementVectorBuffer = DecodeAllocator::Allocate(); + wrapper->displacementVectorBuffer->decoded_value = &(value->displacementVectorBuffer); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displacementVectorBuffer); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->displacementVectorStride)); + wrapper->displacedMicromapPrimitiveFlags = DecodeAllocator::Allocate(); + wrapper->displacedMicromapPrimitiveFlags->decoded_value = &(value->displacedMicromapPrimitiveFlags); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displacedMicromapPrimitiveFlags); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->displacedMicromapPrimitiveFlagsStride)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexType)); + wrapper->indexBuffer = DecodeAllocator::Allocate(); + wrapper->indexBuffer->decoded_value = &(value->indexBuffer); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->indexBuffer); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexStride)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseTriangle)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->usageCountsCount)); + wrapper->pUsageCounts = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pUsageCounts->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pUsageCounts = wrapper->pUsageCounts->GetPointer(); + wrapper->ppUsageCounts = DecodeAllocator::Allocate>(); + bytes_read += wrapper->ppUsageCounts->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->ppUsageCounts = wrapper->ppUsageCounts->GetPointer(); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->micromap)); + value->micromap = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiDrawPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMultiDrawPropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxMultiDrawCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->clustercullingShader)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiviewClusterCullingShader)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMultiDrawInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMultiDrawInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstVertex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexCount)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->maxWorkGroupCount.SetExternalMemory(value->maxWorkGroupCount, 3); + bytes_read += wrapper->maxWorkGroupCount.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + wrapper->maxWorkGroupSize.SetExternalMemory(value->maxWorkGroupSize, 3); + bytes_read += wrapper->maxWorkGroupSize.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxOutputClusterCount)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indirectBufferOffsetAlignment)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMultiDrawIndexedInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMultiDrawIndexedInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstIndex)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexCount)); - bytes_read += ValueDecoder::DecodeInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexOffset)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->clusterShadingRate)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceBorderColorSwizzleFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->image2DViewOf3D)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sampler2DViewOf3D)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->borderColorSwizzle)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->borderColorSwizzleFromImage)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderTileImageFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerBorderColorComponentMappingCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderTileImageFeaturesEXT* value = wrapper->decoded_value; + VkSamplerBorderColorComponentMappingCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTileImageColorReadAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTileImageDepthReadAccess)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTileImageStencilReadAccess)); + wrapper->components = DecodeAllocator::Allocate(); + wrapper->components->decoded_value = &(value->components); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->components); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srgb)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderTileImagePropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderTileImagePropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTileImageCoherentReadAccelerated)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTileImageReadSampleFromPixelRateInvocation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderTileImageReadFromHelperInvocation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pageableDeviceLocalMemory)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMicromapUsageEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderCorePropertiesARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMicromapUsageEXT* value = wrapper->decoded_value; + VkPhysicalDeviceShaderCorePropertiesARM* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->count)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subdivisionLevel)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pixelRate)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->texelRate)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fmaRate)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMicromapBuildInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceQueueShaderCoreControlCreateInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMicromapBuildInfoEXT* value = wrapper->decoded_value; + VkDeviceQueueShaderCoreControlCreateInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mode)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dstMicromap)); - value->dstMicromap = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->usageCountsCount)); - wrapper->pUsageCounts = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pUsageCounts->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pUsageCounts = wrapper->pUsageCounts->GetPointer(); - wrapper->ppUsageCounts = DecodeAllocator::Allocate>(); - bytes_read += wrapper->ppUsageCounts->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->ppUsageCounts = wrapper->ppUsageCounts->GetPointer(); - wrapper->data = DecodeAllocator::Allocate(); - wrapper->data->decoded_value = &(value->data); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->data); - wrapper->scratchData = DecodeAllocator::Allocate(); - wrapper->scratchData->decoded_value = &(value->scratchData); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->scratchData); - wrapper->triangleArray = DecodeAllocator::Allocate(); - wrapper->triangleArray->decoded_value = &(value->triangleArray); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->triangleArray); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->triangleArrayStride)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderCoreCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMicromapCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSchedulingControlsFeaturesARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMicromapCreateInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceSchedulingControlsFeaturesARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->createFlags)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->buffer)); - value->buffer = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->offset)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceAddress)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->schedulingControls)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceOpacityMicromapFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSchedulingControlsPropertiesARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceOpacityMicromapFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceSchedulingControlsPropertiesARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->micromap)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->micromapCaptureReplay)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->micromapHostCommands)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->schedulingControlsFlags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceOpacityMicromapPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceOpacityMicromapPropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxOpacity2StateSubdivisionLevel)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxOpacity4StateSubdivisionLevel)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageSlicedViewOf3D)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMicromapVersionInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewSlicedCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMicromapVersionInfoEXT* value = wrapper->decoded_value; + VkImageViewSlicedCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += wrapper->pVersionData.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - value->pVersionData = wrapper->pVersionData.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sliceOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sliceCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyMicromapToMemoryInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCopyMicromapToMemoryInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->src)); - value->src = VK_NULL_HANDLE; - wrapper->dst = DecodeAllocator::Allocate(); - wrapper->dst->decoded_value = &(value->dst); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dst); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorSetHostMapping)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyMemoryToMicromapInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetBindingReferenceVALVE* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCopyMemoryToMicromapInfoEXT* value = wrapper->decoded_value; + VkDescriptorSetBindingReferenceVALVE* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->src = DecodeAllocator::Allocate(); - wrapper->src->decoded_value = &(value->src); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->src); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dst)); - value->dst = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mode)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->descriptorSetLayout)); + value->descriptorSetLayout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCopyMicromapInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutHostMappingInfoVALVE* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCopyMicromapInfoEXT* value = wrapper->decoded_value; + VkDescriptorSetLayoutHostMappingInfoVALVE* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->src)); - value->src = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dst)); - value->dst = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mode)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorOffset)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorSize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMicromapBuildSizesInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMicromapBuildSizesInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->micromapSize)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->buildScratchSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->discardable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nonSeamlessCubeMap)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureTrianglesOpacityMicromapEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRenderPassStripedFeaturesARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAccelerationStructureTrianglesOpacityMicromapEXT* value = wrapper->decoded_value; + VkPhysicalDeviceRenderPassStripedFeaturesARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexType)); - wrapper->indexBuffer = DecodeAllocator::Allocate(); - wrapper->indexBuffer->decoded_value = &(value->indexBuffer); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->indexBuffer); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexStride)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseTriangle)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->usageCountsCount)); - wrapper->pUsageCounts = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pUsageCounts->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pUsageCounts = wrapper->pUsageCounts->GetPointer(); - wrapper->ppUsageCounts = DecodeAllocator::Allocate>(); - bytes_read += wrapper->ppUsageCounts->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->ppUsageCounts = wrapper->ppUsageCounts->GetPointer(); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->micromap)); - value->micromap = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->renderPassStriped)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMicromapTriangleEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRenderPassStripedPropertiesARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkMicromapTriangleEXT* value = wrapper->decoded_value; + VkPhysicalDeviceRenderPassStripedPropertiesARM* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataOffset)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subdivisionLevel)); - bytes_read += ValueDecoder::DecodeUInt16Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->renderPassStripeGranularity = DecodeAllocator::Allocate(); + wrapper->renderPassStripeGranularity->decoded_value = &(value->renderPassStripeGranularity); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->renderPassStripeGranularity); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxRenderPassStripes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDisplacementMicromapFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassStripeInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDisplacementMicromapFeaturesNV* value = wrapper->decoded_value; + VkRenderPassStripeInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->displacementMicromap)); + wrapper->stripeArea = DecodeAllocator::Allocate(); + wrapper->stripeArea->decoded_value = &(value->stripeArea); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->stripeArea); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDisplacementMicromapPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassStripeBeginInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDisplacementMicromapPropertiesNV* value = wrapper->decoded_value; + VkRenderPassStripeBeginInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDisplacementMicromapSubdivisionLevel)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stripeInfoCount)); + wrapper->pStripeInfos = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStripeInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStripeInfos = wrapper->pStripeInfos->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureTrianglesDisplacementMicromapNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassStripeSubmitInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAccelerationStructureTrianglesDisplacementMicromapNV* value = wrapper->decoded_value; + VkRenderPassStripeSubmitInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->displacementBiasAndScaleFormat)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->displacementVectorFormat)); - wrapper->displacementBiasAndScaleBuffer = DecodeAllocator::Allocate(); - wrapper->displacementBiasAndScaleBuffer->decoded_value = &(value->displacementBiasAndScaleBuffer); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displacementBiasAndScaleBuffer); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->displacementBiasAndScaleStride)); - wrapper->displacementVectorBuffer = DecodeAllocator::Allocate(); - wrapper->displacementVectorBuffer->decoded_value = &(value->displacementVectorBuffer); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displacementVectorBuffer); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->displacementVectorStride)); - wrapper->displacedMicromapPrimitiveFlags = DecodeAllocator::Allocate(); - wrapper->displacedMicromapPrimitiveFlags->decoded_value = &(value->displacedMicromapPrimitiveFlags); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->displacedMicromapPrimitiveFlags); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->displacedMicromapPrimitiveFlagsStride)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexType)); - wrapper->indexBuffer = DecodeAllocator::Allocate(); - wrapper->indexBuffer->decoded_value = &(value->indexBuffer); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->indexBuffer); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexStride)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->baseTriangle)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->usageCountsCount)); - wrapper->pUsageCounts = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pUsageCounts->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pUsageCounts = wrapper->pUsageCounts->GetPointer(); - wrapper->ppUsageCounts = DecodeAllocator::Allocate>(); - bytes_read += wrapper->ppUsageCounts->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->ppUsageCounts = wrapper->ppUsageCounts->GetPointer(); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->micromap)); - value->micromap = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stripeSemaphoreInfoCount)); + wrapper->pStripeSemaphoreInfos = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pStripeSemaphoreInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pStripeSemaphoreInfos = wrapper->pStripeSemaphoreInfos->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI* value = wrapper->decoded_value; + VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->clustercullingShader)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiviewClusterCullingShader)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentDensityMapOffset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI* value = wrapper->decoded_value; + VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->maxWorkGroupCount.SetExternalMemory(value->maxWorkGroupCount, 3); - bytes_read += wrapper->maxWorkGroupCount.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - wrapper->maxWorkGroupSize.SetExternalMemory(value->maxWorkGroupSize, 3); - bytes_read += wrapper->maxWorkGroupSize.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxOutputClusterCount)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indirectBufferOffsetAlignment)); + wrapper->fragmentDensityOffsetGranularity = DecodeAllocator::Allocate(); + wrapper->fragmentDensityOffsetGranularity->decoded_value = &(value->fragmentDensityOffsetGranularity); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->fragmentDensityOffsetGranularity); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassFragmentDensityMapOffsetEndInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI* value = wrapper->decoded_value; + VkRenderPassFragmentDensityMapOffsetEndInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->clusterShadingRate)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentDensityOffsetCount)); + wrapper->pFragmentDensityOffsets = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pFragmentDensityOffsets->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pFragmentDensityOffsets = wrapper->pFragmentDensityOffsets->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceBorderColorSwizzleFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->borderColorSwizzle)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->borderColorSwizzleFromImage)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceGeneratedCompute)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceGeneratedComputePipelines)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceGeneratedComputeCaptureReplay)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSamplerBorderColorComponentMappingCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkComputePipelineIndirectBufferInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSamplerBorderColorComponentMappingCreateInfoEXT* value = wrapper->decoded_value; + VkComputePipelineIndirectBufferInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->components = DecodeAllocator::Allocate(); - wrapper->components->decoded_value = &(value->components); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->components); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srgb)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceAddress)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineDeviceAddressCaptureReplay)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineIndirectDeviceAddressInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT* value = wrapper->decoded_value; + VkPipelineIndirectDeviceAddressInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pageableDeviceLocalMemory)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBindPoint)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipeline)); + value->pipeline = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderCorePropertiesARM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindPipelineIndirectCommandNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderCorePropertiesARM* value = wrapper->decoded_value; + VkBindPipelineIndirectCommandNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pixelRate)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->texelRate)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fmaRate)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineAddress)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDeviceQueueShaderCoreControlCreateInfoARM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDeviceQueueShaderCoreControlCreateInfoARM* value = wrapper->decoded_value; + VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderCoreCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->spheres)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->linearSweptSpheres)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSchedulingControlsFeaturesARM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureGeometryLinearSweptSpheresDataNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSchedulingControlsFeaturesARM* value = wrapper->decoded_value; + VkAccelerationStructureGeometryLinearSweptSpheresDataNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->schedulingControls)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexFormat)); + wrapper->vertexData = DecodeAllocator::Allocate(); + wrapper->vertexData->decoded_value = &(value->vertexData); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->vertexData); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexStride)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->radiusFormat)); + wrapper->radiusData = DecodeAllocator::Allocate(); + wrapper->radiusData->decoded_value = &(value->radiusData); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->radiusData); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->radiusStride)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexType)); + wrapper->indexData = DecodeAllocator::Allocate(); + wrapper->indexData->decoded_value = &(value->indexData); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->indexData); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexStride)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexingMode)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->endCapsMode)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSchedulingControlsPropertiesARM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureGeometrySpheresDataNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSchedulingControlsPropertiesARM* value = wrapper->decoded_value; + VkAccelerationStructureGeometrySpheresDataNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->schedulingControlsFlags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexFormat)); + wrapper->vertexData = DecodeAllocator::Allocate(); + wrapper->vertexData->decoded_value = &(value->vertexData); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->vertexData); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexStride)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->radiusFormat)); + wrapper->radiusData = DecodeAllocator::Allocate(); + wrapper->radiusData->decoded_value = &(value->radiusData); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->radiusData); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->radiusStride)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexType)); + wrapper->indexData = DecodeAllocator::Allocate(); + wrapper->indexData->decoded_value = &(value->indexData); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->indexData); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexStride)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLinearColorAttachmentFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceLinearColorAttachmentFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageSlicedViewOf3D)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->linearColorAttachment)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewSlicedCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageViewSlicedCreateInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sliceOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->sliceCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCompressionControlSwapchain)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewSampleWeightCreateInfoQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE* value = wrapper->decoded_value; + VkImageViewSampleWeightCreateInfoQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorSetHostMapping)); + wrapper->filterCenter = DecodeAllocator::Allocate(); + wrapper->filterCenter->decoded_value = &(value->filterCenter); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->filterCenter); + wrapper->filterSize = DecodeAllocator::Allocate(); + wrapper->filterSize->decoded_value = &(value->filterSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->filterSize); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numPhases)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetBindingReferenceVALVE* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageProcessingFeaturesQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorSetBindingReferenceVALVE* value = wrapper->decoded_value; + VkPhysicalDeviceImageProcessingFeaturesQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->descriptorSetLayout)); - value->descriptorSetLayout = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureSampleWeighted)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureBoxFilter)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureBlockMatch)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutHostMappingInfoVALVE* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageProcessingPropertiesQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDescriptorSetLayoutHostMappingInfoVALVE* value = wrapper->decoded_value; + VkPhysicalDeviceImageProcessingPropertiesQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorOffset)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxWeightFilterPhases)); + wrapper->maxWeightFilterDimension = DecodeAllocator::Allocate(); + wrapper->maxWeightFilterDimension->decoded_value = &(value->maxWeightFilterDimension); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxWeightFilterDimension); + wrapper->maxBlockMatchRegion = DecodeAllocator::Allocate(); + wrapper->maxBlockMatchRegion->decoded_value = &(value->maxBlockMatchRegion); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxBlockMatchRegion); + wrapper->maxBoxFilterBlockSize = DecodeAllocator::Allocate(); + wrapper->maxBoxFilterBlockSize->decoded_value = &(value->maxBoxFilterBlockSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxBoxFilterBlockSize); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceNestedCommandBufferFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceNestedCommandBufferFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nonSeamlessCubeMap)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nestedCommandBuffer)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nestedCommandBufferRendering)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nestedCommandBufferSimultaneousUse)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRenderPassStripedFeaturesARM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceNestedCommandBufferPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRenderPassStripedFeaturesARM* value = wrapper->decoded_value; + VkPhysicalDeviceNestedCommandBufferPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->renderPassStriped)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxCommandBufferNestingLevel)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRenderPassStripedPropertiesARM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalMemoryAcquireUnmodifiedEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRenderPassStripedPropertiesARM* value = wrapper->decoded_value; + VkExternalMemoryAcquireUnmodifiedEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->renderPassStripeGranularity = DecodeAllocator::Allocate(); - wrapper->renderPassStripeGranularity->decoded_value = &(value->renderPassStripeGranularity); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->renderPassStripeGranularity); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxRenderPassStripes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->acquireUnmodifiedMemory)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassStripeInfoARM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassStripeInfoARM* value = wrapper->decoded_value; + VkPhysicalDeviceExtendedDynamicState3FeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->stripeArea = DecodeAllocator::Allocate(); - wrapper->stripeArea->decoded_value = &(value->stripeArea); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->stripeArea); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3TessellationDomainOrigin)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3DepthClampEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3PolygonMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3RasterizationSamples)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3SampleMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3AlphaToCoverageEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3AlphaToOneEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3LogicOpEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ColorBlendEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ColorBlendEquation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ColorWriteMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3RasterizationStream)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ConservativeRasterizationMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ExtraPrimitiveOverestimationSize)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3DepthClipEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3SampleLocationsEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ColorBlendAdvanced)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ProvokingVertexMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3LineRasterizationMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3LineStippleEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3DepthClipNegativeOneToOne)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ViewportWScalingEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ViewportSwizzle)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3CoverageToColorEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3CoverageToColorLocation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3CoverageModulationMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3CoverageModulationTableEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3CoverageModulationTable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3CoverageReductionMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3RepresentativeFragmentTestEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ShadingRateImageEnable)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassStripeBeginInfoARM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassStripeBeginInfoARM* value = wrapper->decoded_value; + VkPhysicalDeviceExtendedDynamicState3PropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stripeInfoCount)); - wrapper->pStripeInfos = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStripeInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStripeInfos = wrapper->pStripeInfos->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicPrimitiveTopologyUnrestricted)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassStripeSubmitInfoARM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkColorBlendEquationEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassStripeSubmitInfoARM* value = wrapper->decoded_value; + VkColorBlendEquationEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->stripeSemaphoreInfoCount)); - wrapper->pStripeSemaphoreInfos = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pStripeSemaphoreInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pStripeSemaphoreInfos = wrapper->pStripeSemaphoreInfos->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcColorBlendFactor)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstColorBlendFactor)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorBlendOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAlphaBlendFactor)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAlphaBlendFactor)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->alphaBlendOp)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkColorBlendAdvancedEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT* value = wrapper->decoded_value; + VkColorBlendAdvancedEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentDensityMapOffset)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendOp)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcPremultiplied)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstPremultiplied)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->blendOverlap)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->clampResults)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->fragmentDensityOffsetGranularity = DecodeAllocator::Allocate(); - wrapper->fragmentDensityOffsetGranularity->decoded_value = &(value->fragmentDensityOffsetGranularity); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->fragmentDensityOffsetGranularity); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpassMergeFeedback)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassFragmentDensityMapOffsetEndInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassCreationControlEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassFragmentDensityMapOffsetEndInfoEXT* value = wrapper->decoded_value; + VkRenderPassCreationControlEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->fragmentDensityOffsetCount)); - wrapper->pFragmentDensityOffsets = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pFragmentDensityOffsets->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pFragmentDensityOffsets = wrapper->pFragmentDensityOffsets->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->disallowMerging)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassCreationFeedbackInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV* value = wrapper->decoded_value; + VkRenderPassCreationFeedbackInfoEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceGeneratedCompute)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceGeneratedComputePipelines)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceGeneratedComputeCaptureReplay)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->postMergeSubpassCount)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkComputePipelineIndirectBufferInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassCreationFeedbackCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkComputePipelineIndirectBufferInfoNV* value = wrapper->decoded_value; + VkRenderPassCreationFeedbackCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->deviceAddress)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineDeviceAddressCaptureReplay)); + wrapper->pRenderPassFeedback = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pRenderPassFeedback->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pRenderPassFeedback = wrapper->pRenderPassFeedback->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineIndirectDeviceAddressInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassSubpassFeedbackInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineIndirectDeviceAddressInfoNV* value = wrapper->decoded_value; + VkRenderPassSubpassFeedbackInfoEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineBindPoint)); - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pipeline)); - value->pipeline = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpassMergeStatus)); + wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); + bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->postMergeIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindPipelineIndirectCommandNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassSubpassFeedbackCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkBindPipelineIndirectCommandNV* value = wrapper->decoded_value; + VkRenderPassSubpassFeedbackCreateInfoEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineAddress)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->pSubpassFeedback = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSubpassFeedback->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSubpassFeedback = wrapper->pSubpassFeedback->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDirectDriverLoadingInfoLUNARG* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV* value = wrapper->decoded_value; + VkDirectDriverLoadingInfoLUNARG* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->spheres)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->linearSweptSpheres)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnGetInstanceProcAddr)); + value->pfnGetInstanceProcAddr = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureGeometryLinearSweptSpheresDataNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDirectDriverLoadingListLUNARG* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAccelerationStructureGeometryLinearSweptSpheresDataNV* value = wrapper->decoded_value; + VkDirectDriverLoadingListLUNARG* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexFormat)); - wrapper->vertexData = DecodeAllocator::Allocate(); - wrapper->vertexData->decoded_value = &(value->vertexData); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->vertexData); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexStride)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->radiusFormat)); - wrapper->radiusData = DecodeAllocator::Allocate(); - wrapper->radiusData->decoded_value = &(value->radiusData); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->radiusData); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->radiusStride)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexType)); - wrapper->indexData = DecodeAllocator::Allocate(); - wrapper->indexData->decoded_value = &(value->indexData); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->indexData); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexStride)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexingMode)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->endCapsMode)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->driverCount)); + wrapper->pDrivers = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pDrivers->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDrivers = wrapper->pDrivers->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureGeometrySpheresDataNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAccelerationStructureGeometrySpheresDataNV* value = wrapper->decoded_value; + VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexFormat)); - wrapper->vertexData = DecodeAllocator::Allocate(); - wrapper->vertexData->decoded_value = &(value->vertexData); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->vertexData); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->vertexStride)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->radiusFormat)); - wrapper->radiusData = DecodeAllocator::Allocate(); - wrapper->radiusData->decoded_value = &(value->radiusData); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->radiusData); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->radiusStride)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexType)); - wrapper->indexData = DecodeAllocator::Allocate(); - wrapper->indexData->decoded_value = &(value->indexData); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->indexData); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->indexStride)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderModuleIdentifier)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLinearColorAttachmentFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceLinearColorAttachmentFeaturesNV* value = wrapper->decoded_value; + VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->linearColorAttachment)); + wrapper->shaderModuleIdentifierAlgorithmUUID.SetExternalMemory(value->shaderModuleIdentifierAlgorithmUUID, VK_UUID_SIZE); + bytes_read += wrapper->shaderModuleIdentifierAlgorithmUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineShaderStageModuleIdentifierCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT* value = wrapper->decoded_value; + VkPipelineShaderStageModuleIdentifierCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageCompressionControlSwapchain)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->identifierSize)); + bytes_read += wrapper->pIdentifier.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + value->pIdentifier = wrapper->pIdentifier.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageViewSampleWeightCreateInfoQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkShaderModuleIdentifierEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkImageViewSampleWeightCreateInfoQCOM* value = wrapper->decoded_value; + VkShaderModuleIdentifierEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->filterCenter = DecodeAllocator::Allocate(); - wrapper->filterCenter->decoded_value = &(value->filterCenter); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->filterCenter); - wrapper->filterSize = DecodeAllocator::Allocate(); - wrapper->filterSize->decoded_value = &(value->filterSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->filterSize); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numPhases)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->identifierSize)); + wrapper->identifier.SetExternalMemory(value->identifier, VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT); + bytes_read += wrapper->identifier.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageProcessingFeaturesQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceOpticalFlowFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceImageProcessingFeaturesQCOM* value = wrapper->decoded_value; + VkPhysicalDeviceOpticalFlowFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureSampleWeighted)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureBoxFilter)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->textureBlockMatch)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->opticalFlow)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageProcessingPropertiesQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceOpticalFlowPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceImageProcessingPropertiesQCOM* value = wrapper->decoded_value; + VkPhysicalDeviceOpticalFlowPropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxWeightFilterPhases)); - wrapper->maxWeightFilterDimension = DecodeAllocator::Allocate(); - wrapper->maxWeightFilterDimension->decoded_value = &(value->maxWeightFilterDimension); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxWeightFilterDimension); - wrapper->maxBlockMatchRegion = DecodeAllocator::Allocate(); - wrapper->maxBlockMatchRegion->decoded_value = &(value->maxBlockMatchRegion); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxBlockMatchRegion); - wrapper->maxBoxFilterBlockSize = DecodeAllocator::Allocate(); - wrapper->maxBoxFilterBlockSize->decoded_value = &(value->maxBoxFilterBlockSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->maxBoxFilterBlockSize); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedOutputGridSizes)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedHintGridSizes)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hintSupported)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->costSupported)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bidirectionalFlowSupported)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->globalFlowSupported)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minWidth)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minHeight)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxWidth)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxHeight)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxNumRegionsOfInterest)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceNestedCommandBufferFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOpticalFlowImageFormatInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceNestedCommandBufferFeaturesEXT* value = wrapper->decoded_value; + VkOpticalFlowImageFormatInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nestedCommandBuffer)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nestedCommandBufferRendering)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nestedCommandBufferSimultaneousUse)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceNestedCommandBufferPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOpticalFlowImageFormatPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceNestedCommandBufferPropertiesEXT* value = wrapper->decoded_value; + VkOpticalFlowImageFormatPropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxCommandBufferNestingLevel)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkExternalMemoryAcquireUnmodifiedEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOpticalFlowSessionCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkExternalMemoryAcquireUnmodifiedEXT* value = wrapper->decoded_value; + VkOpticalFlowSessionCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->acquireUnmodifiedMemory)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->width)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->height)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageFormat)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flowVectorFormat)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->costFormat)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->outputGridSize)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->hintGridSize)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->performanceLevel)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOpticalFlowSessionCreatePrivateDataInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExtendedDynamicState3FeaturesEXT* value = wrapper->decoded_value; + VkOpticalFlowSessionCreatePrivateDataInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3TessellationDomainOrigin)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3DepthClampEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3PolygonMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3RasterizationSamples)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3SampleMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3AlphaToCoverageEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3AlphaToOneEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3LogicOpEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ColorBlendEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ColorBlendEquation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ColorWriteMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3RasterizationStream)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ConservativeRasterizationMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ExtraPrimitiveOverestimationSize)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3DepthClipEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3SampleLocationsEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ColorBlendAdvanced)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ProvokingVertexMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3LineRasterizationMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3LineStippleEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3DepthClipNegativeOneToOne)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ViewportWScalingEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ViewportSwizzle)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3CoverageToColorEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3CoverageToColorLocation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3CoverageModulationMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3CoverageModulationTableEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3CoverageModulationTable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3CoverageReductionMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3RepresentativeFragmentTestEnable)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedDynamicState3ShadingRateImageEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->id)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pPrivateData)); + value->pPrivateData = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOpticalFlowExecuteInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExtendedDynamicState3PropertiesEXT* value = wrapper->decoded_value; + VkOpticalFlowExecuteInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicPrimitiveTopologyUnrestricted)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); + wrapper->pRegions = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pRegions = wrapper->pRegions->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkColorBlendEquationEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLegacyDitheringFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkColorBlendEquationEXT* value = wrapper->decoded_value; + VkPhysicalDeviceLegacyDitheringFeaturesEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcColorBlendFactor)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstColorBlendFactor)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorBlendOp)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAlphaBlendFactor)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAlphaBlendFactor)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->alphaBlendOp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->legacyDithering)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkColorBlendAdvancedEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalFormatResolveFeaturesANDROID* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkColorBlendAdvancedEXT* value = wrapper->decoded_value; + VkPhysicalDeviceExternalFormatResolveFeaturesANDROID* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->advancedBlendOp)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcPremultiplied)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstPremultiplied)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->blendOverlap)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->clampResults)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalFormatResolve)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalFormatResolvePropertiesANDROID* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceExternalFormatResolvePropertiesANDROID* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpassMergeFeedback)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nullColorAttachmentWithExternalFormatResolve)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalFormatResolveChromaOffsetX)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalFormatResolveChromaOffsetY)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassCreationControlEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAndroidHardwareBufferFormatResolvePropertiesANDROID* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassCreationControlEXT* value = wrapper->decoded_value; + VkAndroidHardwareBufferFormatResolvePropertiesANDROID* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->disallowMerging)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentFormat)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassCreationFeedbackInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceAntiLagFeaturesAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassCreationFeedbackInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceAntiLagFeaturesAMD* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->postMergeSubpassCount)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->antiLag)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassCreationFeedbackCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAntiLagPresentationInfoAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassCreationFeedbackCreateInfoEXT* value = wrapper->decoded_value; + VkAntiLagPresentationInfoAMD* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pRenderPassFeedback = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pRenderPassFeedback->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pRenderPassFeedback = wrapper->pRenderPassFeedback->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stage)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassSubpassFeedbackInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAntiLagDataAMD* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassSubpassFeedbackInfoEXT* value = wrapper->decoded_value; + VkAntiLagDataAMD* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->subpassMergeStatus)); - wrapper->description.SetExternalMemory(value->description, VK_MAX_DESCRIPTION_SIZE); - bytes_read += wrapper->description.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->postMergeIndex)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFPS)); + wrapper->pPresentationInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pPresentationInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPresentationInfo = wrapper->pPresentationInfo->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassSubpassFeedbackCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderObjectFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderPassSubpassFeedbackCreateInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceShaderObjectFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->pSubpassFeedback = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSubpassFeedback->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSubpassFeedback = wrapper->pSubpassFeedback->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderObject)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDirectDriverLoadingInfoLUNARG* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderObjectPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDirectDriverLoadingInfoLUNARG* value = wrapper->decoded_value; + VkPhysicalDeviceShaderObjectPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pfnGetInstanceProcAddr)); - value->pfnGetInstanceProcAddr = nullptr; + wrapper->shaderBinaryUUID.SetExternalMemory(value->shaderBinaryUUID, VK_UUID_SIZE); + bytes_read += wrapper->shaderBinaryUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBinaryVersion)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDirectDriverLoadingListLUNARG* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkShaderCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDirectDriverLoadingListLUNARG* value = wrapper->decoded_value; + VkShaderCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->driverCount)); - wrapper->pDrivers = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pDrivers->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDrivers = wrapper->pDrivers->GetPointer(); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stage)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->nextStage)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->codeType)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->codeSize)); + bytes_read += wrapper->pCode.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCode = wrapper->pCode.GetPointer(); + bytes_read += wrapper->pName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pName = wrapper->pName.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->setLayoutCount)); + bytes_read += wrapper->pSetLayouts.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSetLayouts = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pushConstantRangeCount)); + wrapper->pPushConstantRanges = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pPushConstantRanges->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPushConstantRanges = wrapper->pPushConstantRanges->GetPointer(); + wrapper->pSpecializationInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSpecializationInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSpecializationInfo = wrapper->pSpecializationInfo->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDepthClampRangeEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT* value = wrapper->decoded_value; + VkDepthClampRangeEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderModuleIdentifier)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minDepthClamp)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDepthClamp)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTilePropertiesFeaturesQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceTilePropertiesFeaturesQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->shaderModuleIdentifierAlgorithmUUID.SetExternalMemory(value->shaderModuleIdentifierAlgorithmUUID, VK_UUID_SIZE); - bytes_read += wrapper->shaderModuleIdentifierAlgorithmUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileProperties)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineShaderStageModuleIdentifierCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTilePropertiesQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPipelineShaderStageModuleIdentifierCreateInfoEXT* value = wrapper->decoded_value; + VkTilePropertiesQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->identifierSize)); - bytes_read += wrapper->pIdentifier.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - value->pIdentifier = wrapper->pIdentifier.GetPointer(); + wrapper->tileSize = DecodeAllocator::Allocate(); + wrapper->tileSize->decoded_value = &(value->tileSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->tileSize); + wrapper->apronSize = DecodeAllocator::Allocate(); + wrapper->apronSize->decoded_value = &(value->apronSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->apronSize); + wrapper->origin = DecodeAllocator::Allocate(); + wrapper->origin->decoded_value = &(value->origin); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->origin); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkShaderModuleIdentifierEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceAmigoProfilingFeaturesSEC* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkShaderModuleIdentifierEXT* value = wrapper->decoded_value; + VkPhysicalDeviceAmigoProfilingFeaturesSEC* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->identifierSize)); - wrapper->identifier.SetExternalMemory(value->identifier, VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT); - bytes_read += wrapper->identifier.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->amigoProfiling)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceOpticalFlowFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAmigoProfilingSubmitInfoSEC* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceOpticalFlowFeaturesNV* value = wrapper->decoded_value; + VkAmigoProfilingSubmitInfoSEC* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->opticalFlow)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstDrawTimestamp)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapBufferTimestamp)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceOpticalFlowPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceOpticalFlowPropertiesNV* value = wrapper->decoded_value; + VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedOutputGridSizes)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->supportedHintGridSizes)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->hintSupported)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->costSupported)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->bidirectionalFlowSupported)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->globalFlowSupported)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minWidth)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minHeight)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxWidth)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxHeight)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxNumRegionsOfInterest)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiviewPerViewViewports)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOpticalFlowImageFormatInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkOpticalFlowImageFormatInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->usage)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingInvocationReorderReorderingHint)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOpticalFlowImageFormatPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkOpticalFlowImageFormatPropertiesNV* value = wrapper->decoded_value; + VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->format)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingInvocationReorder)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOpticalFlowSessionCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCooperativeVectorPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkOpticalFlowSessionCreateInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceCooperativeVectorPropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->width)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->height)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->imageFormat)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flowVectorFormat)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->costFormat)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->outputGridSize)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->hintGridSize)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->performanceLevel)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeVectorSupportedStages)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeVectorTrainingFloat16Accumulation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeVectorTrainingFloat32Accumulation)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxCooperativeVectorComponents)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOpticalFlowSessionCreatePrivateDataInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCooperativeVectorFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkOpticalFlowSessionCreatePrivateDataInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceCooperativeVectorFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->id)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); - bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pPrivateData)); - value->pPrivateData = nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeVector)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeVectorTraining)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOpticalFlowExecuteInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCooperativeVectorPropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkOpticalFlowExecuteInfoNV* value = wrapper->decoded_value; + VkCooperativeVectorPropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); - wrapper->pRegions = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pRegions = wrapper->pRegions->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputInterpretation)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->matrixInterpretation)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->biasInterpretation)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->resultType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transpose)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLegacyDitheringFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkConvertCooperativeVectorMatrixInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceLegacyDitheringFeaturesEXT* value = wrapper->decoded_value; + VkConvertCooperativeVectorMatrixInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->legacyDithering)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcSize)); + wrapper->srcData = DecodeAllocator::Allocate(); + wrapper->srcData->decoded_value = &(value->srcData); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcData); + bytes_read += wrapper->pDstSize.DecodeSizeT((buffer + bytes_read), (buffer_size - bytes_read)); + value->pDstSize = wrapper->pDstSize.GetPointer(); + wrapper->dstData = DecodeAllocator::Allocate(); + wrapper->dstData->decoded_value = &(value->dstData); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstData); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcComponentType)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstComponentType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numRows)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numColumns)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcLayout)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcStride)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstLayout)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstStride)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalFormatResolveFeaturesANDROID* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExternalFormatResolveFeaturesANDROID* value = wrapper->decoded_value; + VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalFormatResolve)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedSparseAddressSpace)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalFormatResolvePropertiesANDROID* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExternalFormatResolvePropertiesANDROID* value = wrapper->decoded_value; + VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nullColorAttachmentWithExternalFormatResolve)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalFormatResolveChromaOffsetX)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->externalFormatResolveChromaOffsetY)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedSparseAddressSpaceSize)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedSparseImageUsageFlags)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedSparseBufferUsageFlags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAndroidHardwareBufferFormatResolvePropertiesANDROID* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAndroidHardwareBufferFormatResolvePropertiesANDROID* value = wrapper->decoded_value; + VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentFormat)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->legacyVertexAttributes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceAntiLagFeaturesAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceAntiLagFeaturesAMD* value = wrapper->decoded_value; + VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->antiLag)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nativeUnalignedPerformance)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAntiLagPresentationInfoAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLayerSettingsCreateInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAntiLagPresentationInfoAMD* value = wrapper->decoded_value; + VkLayerSettingsCreateInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stage)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->frameIndex)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->settingCount)); + wrapper->pSettings = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSettings->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSettings = wrapper->pSettings->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAntiLagDataAMD* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAntiLagDataAMD* value = wrapper->decoded_value; + VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->mode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxFPS)); - wrapper->pPresentationInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pPresentationInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPresentationInfo = wrapper->pPresentationInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderCoreBuiltins)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderObjectFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderObjectFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderObject)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderCoreMask)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderCoreCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderWarpsPerCore)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderObjectPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderObjectPropertiesEXT* value = wrapper->decoded_value; + VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->shaderBinaryUUID.SetExternalMemory(value->shaderBinaryUUID, VK_UUID_SIZE); - bytes_read += wrapper->shaderBinaryUUID.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderBinaryVersion)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineLibraryGroupHandles)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkShaderCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkShaderCreateInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stage)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->nextStage)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->codeType)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->codeSize)); - bytes_read += wrapper->pCode.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); - value->pCode = wrapper->pCode.GetPointer(); - bytes_read += wrapper->pName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pName = wrapper->pName.GetPointer(); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->setLayoutCount)); - bytes_read += wrapper->pSetLayouts.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSetLayouts = nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pushConstantRangeCount)); - wrapper->pPushConstantRanges = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pPushConstantRanges->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPushConstantRanges = wrapper->pPushConstantRanges->GetPointer(); - wrapper->pSpecializationInfo = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSpecializationInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSpecializationInfo = wrapper->pSpecializationInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicRenderingUnusedAttachments)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDepthClampRangeEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLatencySleepModeInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkDepthClampRangeEXT* value = wrapper->decoded_value; + VkLatencySleepModeInfoNV* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->minDepthClamp)); - bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDepthClamp)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->lowLatencyMode)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->lowLatencyBoost)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minimumIntervalUs)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTilePropertiesFeaturesQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLatencySleepInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceTilePropertiesFeaturesQCOM* value = wrapper->decoded_value; + VkLatencySleepInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileProperties)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->signalSemaphore)); + value->signalSemaphore = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->value)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTilePropertiesQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSetLatencyMarkerInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkTilePropertiesQCOM* value = wrapper->decoded_value; + VkSetLatencyMarkerInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - wrapper->tileSize = DecodeAllocator::Allocate(); - wrapper->tileSize->decoded_value = &(value->tileSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->tileSize); - wrapper->apronSize = DecodeAllocator::Allocate(); - wrapper->apronSize->decoded_value = &(value->apronSize); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->apronSize); - wrapper->origin = DecodeAllocator::Allocate(); - wrapper->origin->decoded_value = &(value->origin); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->origin); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentID)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->marker)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceAmigoProfilingFeaturesSEC* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLatencyTimingsFrameReportNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceAmigoProfilingFeaturesSEC* value = wrapper->decoded_value; + VkLatencyTimingsFrameReportNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->amigoProfiling)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentID)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputSampleTimeUs)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->simStartTimeUs)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->simEndTimeUs)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->renderSubmitStartTimeUs)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->renderSubmitEndTimeUs)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentStartTimeUs)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentEndTimeUs)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->driverStartTimeUs)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->driverEndTimeUs)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->osRenderQueueStartTimeUs)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->osRenderQueueEndTimeUs)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gpuRenderStartTimeUs)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gpuRenderEndTimeUs)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAmigoProfilingSubmitInfoSEC* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGetLatencyMarkerInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkAmigoProfilingSubmitInfoSEC* value = wrapper->decoded_value; + VkGetLatencyMarkerInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->firstDrawTimestamp)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->swapBufferTimestamp)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timingCount)); + wrapper->pTimings = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pTimings->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pTimings = wrapper->pTimings->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLatencySubmissionPresentIdNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* value = wrapper->decoded_value; + VkLatencySubmissionPresentIdNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->multiviewPerViewViewports)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentID)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainLatencyCreateInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* value = wrapper->decoded_value; + VkSwapchainLatencyCreateInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingInvocationReorderReorderingHint)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->latencyModeEnable)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOutOfBandQueueTypeInfoNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* value = wrapper->decoded_value; + VkOutOfBandQueueTypeInfoNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingInvocationReorder)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCooperativeVectorPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLatencySurfaceCapabilitiesNV* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceCooperativeVectorPropertiesNV* value = wrapper->decoded_value; + VkLatencySurfaceCapabilitiesNV* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeVectorSupportedStages)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeVectorTrainingFloat16Accumulation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeVectorTrainingFloat32Accumulation)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxCooperativeVectorComponents)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentModeCount)); + bytes_read += wrapper->pPresentModes.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pPresentModes = wrapper->pPresentModes.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCooperativeVectorFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDataGraphFeaturesARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceCooperativeVectorFeaturesNV* value = wrapper->decoded_value; + VkPhysicalDeviceDataGraphFeaturesARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeVector)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cooperativeVectorTraining)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataGraph)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataGraphUpdateAfterBind)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataGraphSpecializationConstants)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataGraphDescriptorBuffer)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataGraphShaderModule)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCooperativeVectorPropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelineConstantARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkCooperativeVectorPropertiesNV* value = wrapper->decoded_value; + VkDataGraphPipelineConstantARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputType)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputInterpretation)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->matrixInterpretation)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->biasInterpretation)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->resultType)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->transpose)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->id)); + bytes_read += ValueDecoder::DecodeAddress((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pConstantData)); + value->pConstantData = nullptr; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkConvertCooperativeVectorMatrixInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelineResourceInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkConvertCooperativeVectorMatrixInfoNV* value = wrapper->decoded_value; + VkDataGraphPipelineResourceInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcSize)); - wrapper->srcData = DecodeAllocator::Allocate(); - wrapper->srcData->decoded_value = &(value->srcData); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->srcData); - bytes_read += wrapper->pDstSize.DecodeSizeT((buffer + bytes_read), (buffer_size - bytes_read)); - value->pDstSize = wrapper->pDstSize.GetPointer(); - wrapper->dstData = DecodeAllocator::Allocate(); - wrapper->dstData->decoded_value = &(value->dstData); - bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->dstData); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcComponentType)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstComponentType)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numRows)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numColumns)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcLayout)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcStride)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstLayout)); - bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstStride)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->descriptorSet)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->binding)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->arrayElement)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelineCompilerControlCreateInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* value = wrapper->decoded_value; + VkDataGraphPipelineCompilerControlCreateInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedSparseAddressSpace)); + bytes_read += wrapper->pVendorOptions.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pVendorOptions = wrapper->pVendorOptions.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelineCreateInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* value = wrapper->decoded_value; + VkDataGraphPipelineCreateInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedSparseAddressSpaceSize)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedSparseImageUsageFlags)); - bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->extendedSparseBufferUsageFlags)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->layout)); + value->layout = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->resourceInfoCount)); + wrapper->pResourceInfos = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pResourceInfos->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pResourceInfos = wrapper->pResourceInfos->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelineShaderModuleCreateInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* value = wrapper->decoded_value; + VkDataGraphPipelineShaderModuleCreateInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->legacyVertexAttributes)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->module)); + value->module = VK_NULL_HANDLE; + bytes_read += wrapper->pName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pName = wrapper->pName.GetPointer(); + wrapper->pSpecializationInfo = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pSpecializationInfo->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pSpecializationInfo = wrapper->pSpecializationInfo->GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->constantCount)); + wrapper->pConstants = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pConstants->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pConstants = wrapper->pConstants->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelineSessionCreateInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* value = wrapper->decoded_value; + VkDataGraphPipelineSessionCreateInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->nativeUnalignedPerformance)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dataGraphPipeline)); + value->dataGraphPipeline = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLayerSettingEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelineSessionBindPointRequirementsInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkLayerSettingEXT* value = wrapper->decoded_value; + VkDataGraphPipelineSessionBindPointRequirementsInfoARM* value = wrapper->decoded_value; - bytes_read += wrapper->pLayerName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pLayerName = wrapper->pLayerName.GetPointer(); - bytes_read += wrapper->pSettingName.Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSettingName = wrapper->pSettingName.GetPointer(); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->valueCount)); - bytes_read += wrapper->pValues.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); - value->pValues = wrapper->pValues.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->session)); + value->session = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLayerSettingsCreateInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelineSessionBindPointRequirementARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkLayerSettingsCreateInfoEXT* value = wrapper->decoded_value; + VkDataGraphPipelineSessionBindPointRequirementARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->settingCount)); - wrapper->pSettings = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pSettings->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pSettings = wrapper->pSettings->GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindPoint)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindPointType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->numObjects)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelineSessionMemoryRequirementsInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* value = wrapper->decoded_value; + VkDataGraphPipelineSessionMemoryRequirementsInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderCoreBuiltins)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->session)); + value->session = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindPoint)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectIndex)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBindDataGraphPipelineSessionMemoryInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* value = wrapper->decoded_value; + VkBindDataGraphPipelineSessionMemoryInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderCoreMask)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderCoreCount)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderWarpsPerCore)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->session)); + value->session = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->bindPoint)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->objectIndex)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryOffset)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelineInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* value = wrapper->decoded_value; + VkDataGraphPipelineInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->pipelineLibraryGroupHandles)); + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->dataGraphPipeline)); + value->dataGraphPipeline = VK_NULL_HANDLE; return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelinePropertyQueryResultARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* value = wrapper->decoded_value; + VkDataGraphPipelinePropertyQueryResultARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dynamicRenderingUnusedAttachments)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->property)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->isText)); + bytes_read += ValueDecoder::DecodeSizeTValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataSize)); + bytes_read += wrapper->pData.DecodeVoid((buffer + bytes_read), (buffer_size - bytes_read)); + value->pData = wrapper->pData.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLatencySleepModeInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelineIdentifierCreateInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkLatencySleepModeInfoNV* value = wrapper->decoded_value; + VkDataGraphPipelineIdentifierCreateInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->lowLatencyMode)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->lowLatencyBoost)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->minimumIntervalUs)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->identifierSize)); + bytes_read += wrapper->pIdentifier.DecodeUInt8((buffer + bytes_read), (buffer_size - bytes_read)); + value->pIdentifier = wrapper->pIdentifier.GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLatencySleepInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelineDispatchInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkLatencySleepInfoNV* value = wrapper->decoded_value; + VkDataGraphPipelineDispatchInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->signalSemaphore)); - value->signalSemaphore = VK_NULL_HANDLE; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->value)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSetLatencyMarkerInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDataGraphProcessingEngineARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSetLatencyMarkerInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceDataGraphProcessingEngineARM* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentID)); - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->marker)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->type)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->isForeign)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLatencyTimingsFrameReportNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDataGraphOperationSupportARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkLatencyTimingsFrameReportNV* value = wrapper->decoded_value; + VkPhysicalDeviceDataGraphOperationSupportARM* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentID)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->inputSampleTimeUs)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->simStartTimeUs)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->simEndTimeUs)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->renderSubmitStartTimeUs)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->renderSubmitEndTimeUs)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentStartTimeUs)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentEndTimeUs)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->driverStartTimeUs)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->driverEndTimeUs)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->osRenderQueueStartTimeUs)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->osRenderQueueEndTimeUs)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gpuRenderStartTimeUs)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->gpuRenderEndTimeUs)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->operationType)); + wrapper->name.SetExternalMemory(value->name, VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM); + bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->version)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkGetLatencyMarkerInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyDataGraphPropertiesARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkGetLatencyMarkerInfoNV* value = wrapper->decoded_value; + VkQueueFamilyDataGraphPropertiesARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->timingCount)); - wrapper->pTimings = DecodeAllocator::Allocate>(); - bytes_read += wrapper->pTimings->Decode((buffer + bytes_read), (buffer_size - bytes_read)); - value->pTimings = wrapper->pTimings->GetPointer(); + wrapper->engine = DecodeAllocator::Allocate(); + wrapper->engine->decoded_value = &(value->engine); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->engine); + wrapper->operation = DecodeAllocator::Allocate(); + wrapper->operation->decoded_value = &(value->operation); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->operation); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLatencySubmissionPresentIdNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphProcessingEngineCreateInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkLatencySubmissionPresentIdNV* value = wrapper->decoded_value; + VkDataGraphProcessingEngineCreateInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentID)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->processingEngineCount)); + wrapper->pProcessingEngines = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pProcessingEngines->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pProcessingEngines = wrapper->pProcessingEngines->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkSwapchainLatencyCreateInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkSwapchainLatencyCreateInfoNV* value = wrapper->decoded_value; + VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->latencyModeEnable)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueFamilyIndex)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->engineType)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkOutOfBandQueueTypeInfoNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkQueueFamilyDataGraphProcessingEnginePropertiesARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkOutOfBandQueueTypeInfoNV* value = wrapper->decoded_value; + VkQueueFamilyDataGraphProcessingEnginePropertiesARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueType)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->foreignSemaphoreHandleTypes)); + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->foreignMemoryHandleTypes)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkLatencySurfaceCapabilitiesNV* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkLatencySurfaceCapabilitiesNV* value = wrapper->decoded_value; + VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->presentModeCount)); - bytes_read += wrapper->pPresentModes.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); - value->pPresentModes = wrapper->pPresentModes.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dimension)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->zeroCount)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->groupSize)); return bytes_read; } @@ -21497,65 +20987,130 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysica return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTileMemoryHeapPropertiesQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTileMemoryHeapPropertiesQCOM* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDeviceTileMemoryHeapPropertiesQCOM* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueSubmitBoundary)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileBufferTransfers)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTileMemoryRequirementsQCOM* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkTileMemoryRequirementsQCOM* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->alignment)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTileMemoryBindInfoQCOM* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkTileMemoryBindInfoQCOM* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); + value->memory = VK_NULL_HANDLE; + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTileMemorySizeInfoQCOM* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkTileMemorySizeInfoQCOM* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDecompressMemoryRegionEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceTileMemoryHeapPropertiesQCOM* value = wrapper->decoded_value; + VkDecompressMemoryRegionEXT* value = wrapper->decoded_value; - bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); - bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); - value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->queueSubmitBoundary)); - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->tileBufferTransfers)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->srcAddress)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dstAddress)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->compressedSize)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->decompressedSize)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTileMemoryRequirementsQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDecompressMemoryInfoEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkTileMemoryRequirementsQCOM* value = wrapper->decoded_value; + VkDecompressMemoryInfoEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->alignment)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->decompressionMethod)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionCount)); + wrapper->pRegions = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pRegions->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pRegions = wrapper->pRegions->GetPointer(); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTileMemoryBindInfoQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMemoryDecompressionFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkTileMemoryBindInfoQCOM* value = wrapper->decoded_value; + VkPhysicalDeviceMemoryDecompressionFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeHandleIdValue((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->memory)); - value->memory = VK_NULL_HANDLE; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->memoryDecompression)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkTileMemorySizeInfoQCOM* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMemoryDecompressionPropertiesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkTileMemorySizeInfoQCOM* value = wrapper->decoded_value; + VkPhysicalDeviceMemoryDecompressionPropertiesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->size)); + bytes_read += ValueDecoder::DecodeFlags64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->decompressionMethods)); + bytes_read += ValueDecoder::DecodeUInt64Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxDecompressionIndirectCount)); return bytes_read; } @@ -22256,6 +21811,37 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkImageAl return bytes_read; } +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingInvocationReorderReorderingHint)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxShaderBindingTableRecordIndex)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rayTracingInvocationReorder)); + + return bytes_read; +} + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthClampControlFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); @@ -22447,6 +22033,95 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkMemoryG return bytes_read; } +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDevicePerformanceCountersByRegionFeaturesARM* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->performanceCountersByRegion)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDevicePerformanceCountersByRegionPropertiesARM* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxPerRegionPerformanceCounters)); + wrapper->performanceCounterRegionSize = DecodeAllocator::Allocate(); + wrapper->performanceCounterRegionSize->decoded_value = &(value->performanceCounterRegionSize); + bytes_read += DecodeStruct((buffer + bytes_read), (buffer_size - bytes_read), wrapper->performanceCounterRegionSize); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->rowStrideAlignment)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->regionAlignment)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->identityTransformOrder)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceCounterARM* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPerformanceCounterARM* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->counterID)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPerformanceCounterDescriptionARM* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPerformanceCounterDescriptionARM* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFlagsValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->flags)); + wrapper->name.SetExternalMemory(value->name, VK_MAX_DESCRIPTION_SIZE); + bytes_read += wrapper->name.Decode((buffer + bytes_read), (buffer_size - bytes_read)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderPassPerformanceCountersByRegionBeginInfoARM* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkRenderPassPerformanceCountersByRegionBeginInfoARM* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->counterAddressCount)); + bytes_read += wrapper->pCounterAddresses.DecodeUInt64((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCounterAddresses = wrapper->pCounterAddresses.GetPointer(); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->serializeRegions)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->counterIndexCount)); + bytes_read += wrapper->pCounterIndices.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + value->pCounterIndices = wrapper->pCounterIndices.GetPointer(); + + return bytes_read; +} + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); @@ -22553,31 +22228,160 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysica return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkRenderingEndInfoEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkRenderingEndInfoEXT* value = wrapper->decoded_value; + VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->zeroInitializeDeviceMemory)); return bytes_read; } -size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* wrapper) +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShader64BitIndexingFeaturesEXT* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); size_t bytes_read = 0; - VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* value = wrapper->decoded_value; + VkPhysicalDeviceShader64BitIndexingFeaturesEXT* value = wrapper->decoded_value; bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; - bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->zeroInitializeDeviceMemory)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shader64BitIndexing)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCustomResolveFeaturesEXT* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDeviceCustomResolveFeaturesEXT* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->customResolve)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkBeginCustomResolveInfoEXT* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkBeginCustomResolveInfoEXT* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkCustomResolveCreateInfoEXT* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkCustomResolveCreateInfoEXT* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->customResolve)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->colorAttachmentCount)); + bytes_read += wrapper->pColorAttachmentFormats.DecodeEnum((buffer + bytes_read), (buffer_size - bytes_read)); + value->pColorAttachmentFormats = wrapper->pColorAttachmentFormats.GetPointer(); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->depthAttachmentFormat)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->stencilAttachmentFormat)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPipelineCacheHeaderVersionDataGraphQCOM* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPipelineCacheHeaderVersionDataGraphQCOM* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->headerSize)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->headerVersion)); + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->cacheType)); + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->cacheVersion)); + wrapper->toolchainVersion.SetExternalMemory(value->toolchainVersion, VK_DATA_GRAPH_MODEL_TOOLCHAIN_VERSION_LENGTH_QCOM); + bytes_read += wrapper->toolchainVersion.DecodeUInt32((buffer + bytes_read), (buffer_size - bytes_read)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkDataGraphPipelineBuiltinModelCreateInfoQCOM* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkDataGraphPipelineBuiltinModelCreateInfoQCOM* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + wrapper->pOperation = DecodeAllocator::Allocate>(); + bytes_read += wrapper->pOperation->Decode((buffer + bytes_read), (buffer_size - bytes_read)); + value->pOperation = wrapper->pOperation->GetPointer(); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDataGraphModelFeaturesQCOM* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDeviceDataGraphModelFeaturesQCOM* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->dataGraphModel)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderLongVectorFeaturesEXT* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDeviceShaderLongVectorFeaturesEXT* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->longVector)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderLongVectorPropertiesEXT* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDeviceShaderLongVectorPropertiesEXT* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->maxVectorComponents)); return bytes_read; } @@ -22597,6 +22401,52 @@ size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysica return bytes_read; } +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->shaderUniformBufferUnsizedArray)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkComputeOccupancyPriorityParametersNV* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkComputeOccupancyPriorityParametersNV* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->occupancyPriority)); + bytes_read += ValueDecoder::DecodeFloatValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->occupancyThrottling)); + + return bytes_read; +} + +size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV* wrapper) +{ + assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); + + size_t bytes_read = 0; + VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV* value = wrapper->decoded_value; + + bytes_read += ValueDecoder::DecodeEnumValue((buffer + bytes_read), (buffer_size - bytes_read), &(value->sType)); + bytes_read += DecodePNextStruct((buffer + bytes_read), (buffer_size - bytes_read), &(wrapper->pNext)); + value->pNext = wrapper->pNext ? wrapper->pNext->GetPointer() : nullptr; + bytes_read += ValueDecoder::DecodeUInt32Value((buffer + bytes_read), (buffer_size - bytes_read), &(value->computeOccupancyPriority)); + + return bytes_read; +} + size_t DecodeStruct(const uint8_t* buffer, size_t buffer_size, Decoded_VkAccelerationStructureBuildRangeInfoKHR* wrapper) { assert((wrapper != nullptr) && (wrapper->decoded_value != nullptr)); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_decoders.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_decoders.h index d084e4305..9ab6d0943 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_decoders.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_decoders.h @@ -275,341 +275,6 @@ struct Decoded_StdVideoEncodeH264SliceHeader StructPointerDecoder* pWeightTable{ nullptr }; }; -struct Decoded_StdVideoH265ProfileTierLevelFlags -{ - using struct_type = StdVideoH265ProfileTierLevelFlags; - - StdVideoH265ProfileTierLevelFlags* decoded_value{ nullptr }; -}; - -struct Decoded_StdVideoH265ProfileTierLevel -{ - using struct_type = StdVideoH265ProfileTierLevel; - - StdVideoH265ProfileTierLevel* decoded_value{ nullptr }; - - Decoded_StdVideoH265ProfileTierLevelFlags* flags{ nullptr }; -}; - -struct Decoded_StdVideoH265DecPicBufMgr -{ - using struct_type = StdVideoH265DecPicBufMgr; - - StdVideoH265DecPicBufMgr* decoded_value{ nullptr }; - - PointerDecoder max_latency_increase_plus1; - PointerDecoder max_dec_pic_buffering_minus1; - PointerDecoder max_num_reorder_pics; -}; - -struct Decoded_StdVideoH265SubLayerHrdParameters -{ - using struct_type = StdVideoH265SubLayerHrdParameters; - - StdVideoH265SubLayerHrdParameters* decoded_value{ nullptr }; - - PointerDecoder bit_rate_value_minus1; - PointerDecoder cpb_size_value_minus1; - PointerDecoder cpb_size_du_value_minus1; - PointerDecoder bit_rate_du_value_minus1; -}; - -struct Decoded_StdVideoH265HrdFlags -{ - using struct_type = StdVideoH265HrdFlags; - - StdVideoH265HrdFlags* decoded_value{ nullptr }; -}; - -struct Decoded_StdVideoH265HrdParameters -{ - using struct_type = StdVideoH265HrdParameters; - - StdVideoH265HrdParameters* decoded_value{ nullptr }; - - Decoded_StdVideoH265HrdFlags* flags{ nullptr }; - PointerDecoder cpb_cnt_minus1; - PointerDecoder elemental_duration_in_tc_minus1; - PointerDecoder reserved; - StructPointerDecoder* pSubLayerHrdParametersNal{ nullptr }; - StructPointerDecoder* pSubLayerHrdParametersVcl{ nullptr }; -}; - -struct Decoded_StdVideoH265VpsFlags -{ - using struct_type = StdVideoH265VpsFlags; - - StdVideoH265VpsFlags* decoded_value{ nullptr }; -}; - -struct Decoded_StdVideoH265VideoParameterSet -{ - using struct_type = StdVideoH265VideoParameterSet; - - StdVideoH265VideoParameterSet* decoded_value{ nullptr }; - - Decoded_StdVideoH265VpsFlags* flags{ nullptr }; - StructPointerDecoder* pDecPicBufMgr{ nullptr }; - StructPointerDecoder* pHrdParameters{ nullptr }; - StructPointerDecoder* pProfileTierLevel{ nullptr }; -}; - -struct Decoded_StdVideoH265ScalingLists -{ - using struct_type = StdVideoH265ScalingLists; - - StdVideoH265ScalingLists* decoded_value{ nullptr }; - - PointerDecoder ScalingList4x4; - PointerDecoder ScalingList8x8; - PointerDecoder ScalingList16x16; - PointerDecoder ScalingList32x32; - PointerDecoder ScalingListDCCoef16x16; - PointerDecoder ScalingListDCCoef32x32; -}; - -struct Decoded_StdVideoH265ShortTermRefPicSetFlags -{ - using struct_type = StdVideoH265ShortTermRefPicSetFlags; - - StdVideoH265ShortTermRefPicSetFlags* decoded_value{ nullptr }; -}; - -struct Decoded_StdVideoH265ShortTermRefPicSet -{ - using struct_type = StdVideoH265ShortTermRefPicSet; - - StdVideoH265ShortTermRefPicSet* decoded_value{ nullptr }; - - Decoded_StdVideoH265ShortTermRefPicSetFlags* flags{ nullptr }; - PointerDecoder delta_poc_s0_minus1; - PointerDecoder delta_poc_s1_minus1; -}; - -struct Decoded_StdVideoH265LongTermRefPicsSps -{ - using struct_type = StdVideoH265LongTermRefPicsSps; - - StdVideoH265LongTermRefPicsSps* decoded_value{ nullptr }; - - PointerDecoder lt_ref_pic_poc_lsb_sps; -}; - -struct Decoded_StdVideoH265SpsVuiFlags -{ - using struct_type = StdVideoH265SpsVuiFlags; - - StdVideoH265SpsVuiFlags* decoded_value{ nullptr }; -}; - -struct Decoded_StdVideoH265SequenceParameterSetVui -{ - using struct_type = StdVideoH265SequenceParameterSetVui; - - StdVideoH265SequenceParameterSetVui* decoded_value{ nullptr }; - - Decoded_StdVideoH265SpsVuiFlags* flags{ nullptr }; - StructPointerDecoder* pHrdParameters{ nullptr }; -}; - -struct Decoded_StdVideoH265PredictorPaletteEntries -{ - using struct_type = StdVideoH265PredictorPaletteEntries; - - StdVideoH265PredictorPaletteEntries* decoded_value{ nullptr }; - - PointerDecoder PredictorPaletteEntries; -}; - -struct Decoded_StdVideoH265SpsFlags -{ - using struct_type = StdVideoH265SpsFlags; - - StdVideoH265SpsFlags* decoded_value{ nullptr }; -}; - -struct Decoded_StdVideoH265SequenceParameterSet -{ - using struct_type = StdVideoH265SequenceParameterSet; - - StdVideoH265SequenceParameterSet* decoded_value{ nullptr }; - - Decoded_StdVideoH265SpsFlags* flags{ nullptr }; - StructPointerDecoder* pProfileTierLevel{ nullptr }; - StructPointerDecoder* pDecPicBufMgr{ nullptr }; - StructPointerDecoder* pScalingLists{ nullptr }; - StructPointerDecoder* pShortTermRefPicSet{ nullptr }; - StructPointerDecoder* pLongTermRefPicsSps{ nullptr }; - StructPointerDecoder* pSequenceParameterSetVui{ nullptr }; - StructPointerDecoder* pPredictorPaletteEntries{ nullptr }; -}; - -struct Decoded_StdVideoH265PpsFlags -{ - using struct_type = StdVideoH265PpsFlags; - - StdVideoH265PpsFlags* decoded_value{ nullptr }; -}; - -struct Decoded_StdVideoH265PictureParameterSet -{ - using struct_type = StdVideoH265PictureParameterSet; - - StdVideoH265PictureParameterSet* decoded_value{ nullptr }; - - Decoded_StdVideoH265PpsFlags* flags{ nullptr }; - PointerDecoder cb_qp_offset_list; - PointerDecoder cr_qp_offset_list; - PointerDecoder column_width_minus1; - PointerDecoder row_height_minus1; - StructPointerDecoder* pScalingLists{ nullptr }; - StructPointerDecoder* pPredictorPaletteEntries{ nullptr }; -}; - -struct Decoded_StdVideoDecodeH265PictureInfoFlags -{ - using struct_type = StdVideoDecodeH265PictureInfoFlags; - - StdVideoDecodeH265PictureInfoFlags* decoded_value{ nullptr }; -}; - -struct Decoded_StdVideoDecodeH265PictureInfo -{ - using struct_type = StdVideoDecodeH265PictureInfo; - - StdVideoDecodeH265PictureInfo* decoded_value{ nullptr }; - - Decoded_StdVideoDecodeH265PictureInfoFlags* flags{ nullptr }; - PointerDecoder RefPicSetStCurrBefore; - PointerDecoder RefPicSetStCurrAfter; - PointerDecoder RefPicSetLtCurr; -}; - -struct Decoded_StdVideoDecodeH265ReferenceInfoFlags -{ - using struct_type = StdVideoDecodeH265ReferenceInfoFlags; - - StdVideoDecodeH265ReferenceInfoFlags* decoded_value{ nullptr }; -}; - -struct Decoded_StdVideoDecodeH265ReferenceInfo -{ - using struct_type = StdVideoDecodeH265ReferenceInfo; - - StdVideoDecodeH265ReferenceInfo* decoded_value{ nullptr }; - - Decoded_StdVideoDecodeH265ReferenceInfoFlags* flags{ nullptr }; -}; - -struct Decoded_StdVideoEncodeH265WeightTableFlags -{ - using struct_type = StdVideoEncodeH265WeightTableFlags; - - StdVideoEncodeH265WeightTableFlags* decoded_value{ nullptr }; -}; - -struct Decoded_StdVideoEncodeH265WeightTable -{ - using struct_type = StdVideoEncodeH265WeightTable; - - StdVideoEncodeH265WeightTable* decoded_value{ nullptr }; - - Decoded_StdVideoEncodeH265WeightTableFlags* flags{ nullptr }; - PointerDecoder delta_luma_weight_l0; - PointerDecoder luma_offset_l0; - PointerDecoder delta_chroma_weight_l0; - PointerDecoder delta_chroma_offset_l0; - PointerDecoder delta_luma_weight_l1; - PointerDecoder luma_offset_l1; - PointerDecoder delta_chroma_weight_l1; - PointerDecoder delta_chroma_offset_l1; -}; - -struct Decoded_StdVideoEncodeH265LongTermRefPics -{ - using struct_type = StdVideoEncodeH265LongTermRefPics; - - StdVideoEncodeH265LongTermRefPics* decoded_value{ nullptr }; - - PointerDecoder lt_idx_sps; - PointerDecoder poc_lsb_lt; - PointerDecoder delta_poc_msb_present_flag; - PointerDecoder delta_poc_msb_cycle_lt; -}; - -struct Decoded_StdVideoEncodeH265SliceSegmentHeaderFlags -{ - using struct_type = StdVideoEncodeH265SliceSegmentHeaderFlags; - - StdVideoEncodeH265SliceSegmentHeaderFlags* decoded_value{ nullptr }; -}; - -struct Decoded_StdVideoEncodeH265SliceSegmentHeader -{ - using struct_type = StdVideoEncodeH265SliceSegmentHeader; - - StdVideoEncodeH265SliceSegmentHeader* decoded_value{ nullptr }; - - Decoded_StdVideoEncodeH265SliceSegmentHeaderFlags* flags{ nullptr }; - StructPointerDecoder* pWeightTable{ nullptr }; -}; - -struct Decoded_StdVideoEncodeH265ReferenceListsInfoFlags -{ - using struct_type = StdVideoEncodeH265ReferenceListsInfoFlags; - - StdVideoEncodeH265ReferenceListsInfoFlags* decoded_value{ nullptr }; -}; - -struct Decoded_StdVideoEncodeH265ReferenceListsInfo -{ - using struct_type = StdVideoEncodeH265ReferenceListsInfo; - - StdVideoEncodeH265ReferenceListsInfo* decoded_value{ nullptr }; - - Decoded_StdVideoEncodeH265ReferenceListsInfoFlags* flags{ nullptr }; - PointerDecoder RefPicList0; - PointerDecoder RefPicList1; - PointerDecoder list_entry_l0; - PointerDecoder list_entry_l1; -}; - -struct Decoded_StdVideoEncodeH265PictureInfoFlags -{ - using struct_type = StdVideoEncodeH265PictureInfoFlags; - - StdVideoEncodeH265PictureInfoFlags* decoded_value{ nullptr }; -}; - -struct Decoded_StdVideoEncodeH265PictureInfo -{ - using struct_type = StdVideoEncodeH265PictureInfo; - - StdVideoEncodeH265PictureInfo* decoded_value{ nullptr }; - - Decoded_StdVideoEncodeH265PictureInfoFlags* flags{ nullptr }; - PointerDecoder reserved1; - StructPointerDecoder* pRefLists{ nullptr }; - StructPointerDecoder* pShortTermRefPicSet{ nullptr }; - StructPointerDecoder* pLongTermRefPics{ nullptr }; -}; - -struct Decoded_StdVideoEncodeH265ReferenceInfoFlags -{ - using struct_type = StdVideoEncodeH265ReferenceInfoFlags; - - StdVideoEncodeH265ReferenceInfoFlags* decoded_value{ nullptr }; -}; - -struct Decoded_StdVideoEncodeH265ReferenceInfo -{ - using struct_type = StdVideoEncodeH265ReferenceInfo; - - StdVideoEncodeH265ReferenceInfo* decoded_value{ nullptr }; - - Decoded_StdVideoEncodeH265ReferenceInfoFlags* flags{ nullptr }; -}; - struct Decoded_StdVideoVP9ColorConfigFlags { using struct_type = StdVideoVP9ColorConfigFlags; @@ -1028,27 +693,6 @@ struct Decoded_VkBufferMemoryBarrier format::HandleId buffer{ format::kNullHandleId }; }; -struct Decoded_VkDispatchIndirectCommand -{ - using struct_type = VkDispatchIndirectCommand; - - VkDispatchIndirectCommand* decoded_value{ nullptr }; -}; - -struct Decoded_VkDrawIndexedIndirectCommand -{ - using struct_type = VkDrawIndexedIndirectCommand; - - VkDrawIndexedIndirectCommand* decoded_value{ nullptr }; -}; - -struct Decoded_VkDrawIndirectCommand -{ - using struct_type = VkDrawIndirectCommand; - - VkDrawIndirectCommand* decoded_value{ nullptr }; -}; - struct Decoded_VkImageSubresourceRange { using struct_type = VkImageSubresourceRange; @@ -1076,15 +720,6 @@ struct Decoded_VkMemoryBarrier PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPipelineCacheHeaderVersionOne -{ - using struct_type = VkPipelineCacheHeaderVersionOne; - - VkPipelineCacheHeaderVersionOne* decoded_value{ nullptr }; - - PointerDecoder pipelineCacheUUID; -}; - struct Decoded_VkAllocationCallbacks { using struct_type = VkAllocationCallbacks; @@ -1400,15 +1035,6 @@ struct Decoded_VkSemaphoreCreateInfo PNextNode* pNext{ nullptr }; }; -struct Decoded_VkEventCreateInfo -{ - using struct_type = VkEventCreateInfo; - - VkEventCreateInfo* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - struct Decoded_VkQueryPoolCreateInfo { using struct_type = VkQueryPoolCreateInfo; @@ -1428,16 +1054,6 @@ struct Decoded_VkBufferCreateInfo PointerDecoder pQueueFamilyIndices; }; -struct Decoded_VkBufferViewCreateInfo -{ - using struct_type = VkBufferViewCreateInfo; - - VkBufferViewCreateInfo* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - format::HandleId buffer{ format::kNullHandleId }; -}; - struct Decoded_VkImageCreateInfo { using struct_type = VkImageCreateInfo; @@ -1475,212 +1091,177 @@ struct Decoded_VkImageViewCreateInfo Decoded_VkImageSubresourceRange* subresourceRange{ nullptr }; }; -struct Decoded_VkShaderModuleCreateInfo +struct Decoded_VkCommandPoolCreateInfo { - using struct_type = VkShaderModuleCreateInfo; + using struct_type = VkCommandPoolCreateInfo; - VkShaderModuleCreateInfo* decoded_value{ nullptr }; + VkCommandPoolCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder pCode; }; -struct Decoded_VkPipelineCacheCreateInfo +struct Decoded_VkCommandBufferAllocateInfo { - using struct_type = VkPipelineCacheCreateInfo; + using struct_type = VkCommandBufferAllocateInfo; - VkPipelineCacheCreateInfo* decoded_value{ nullptr }; + VkCommandBufferAllocateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder pInitialData; + format::HandleId commandPool{ format::kNullHandleId }; }; -struct Decoded_VkSpecializationMapEntry +struct Decoded_VkCommandBufferInheritanceInfo { - using struct_type = VkSpecializationMapEntry; + using struct_type = VkCommandBufferInheritanceInfo; - VkSpecializationMapEntry* decoded_value{ nullptr }; + VkCommandBufferInheritanceInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + format::HandleId renderPass{ format::kNullHandleId }; + format::HandleId framebuffer{ format::kNullHandleId }; }; -struct Decoded_VkSpecializationInfo +struct Decoded_VkCommandBufferBeginInfo { - using struct_type = VkSpecializationInfo; + using struct_type = VkCommandBufferBeginInfo; - VkSpecializationInfo* decoded_value{ nullptr }; + VkCommandBufferBeginInfo* decoded_value{ nullptr }; - StructPointerDecoder* pMapEntries{ nullptr }; - PointerDecoder pData; + PNextNode* pNext{ nullptr }; + StructPointerDecoder* pInheritanceInfo{ nullptr }; }; -struct Decoded_VkPipelineShaderStageCreateInfo +struct Decoded_VkBufferCopy { - using struct_type = VkPipelineShaderStageCreateInfo; + using struct_type = VkBufferCopy; - VkPipelineShaderStageCreateInfo* decoded_value{ nullptr }; + VkBufferCopy* decoded_value{ nullptr }; +}; - PNextNode* pNext{ nullptr }; - format::HandleId module{ format::kNullHandleId }; - StringDecoder pName; - StructPointerDecoder* pSpecializationInfo{ nullptr }; -}; - -struct Decoded_VkComputePipelineCreateInfo +struct Decoded_VkImageSubresourceLayers { - using struct_type = VkComputePipelineCreateInfo; - - VkComputePipelineCreateInfo* decoded_value{ nullptr }; + using struct_type = VkImageSubresourceLayers; - PNextNode* pNext{ nullptr }; - Decoded_VkPipelineShaderStageCreateInfo* stage{ nullptr }; - format::HandleId layout{ format::kNullHandleId }; - format::HandleId basePipelineHandle{ format::kNullHandleId }; + VkImageSubresourceLayers* decoded_value{ nullptr }; }; -struct Decoded_VkVertexInputBindingDescription +struct Decoded_VkBufferImageCopy { - using struct_type = VkVertexInputBindingDescription; - - VkVertexInputBindingDescription* decoded_value{ nullptr }; -}; + using struct_type = VkBufferImageCopy; -struct Decoded_VkVertexInputAttributeDescription -{ - using struct_type = VkVertexInputAttributeDescription; + VkBufferImageCopy* decoded_value{ nullptr }; - VkVertexInputAttributeDescription* decoded_value{ nullptr }; + Decoded_VkImageSubresourceLayers* imageSubresource{ nullptr }; + Decoded_VkOffset3D* imageOffset{ nullptr }; + Decoded_VkExtent3D* imageExtent{ nullptr }; }; -struct Decoded_VkPipelineVertexInputStateCreateInfo +struct Decoded_VkImageCopy { - using struct_type = VkPipelineVertexInputStateCreateInfo; + using struct_type = VkImageCopy; - VkPipelineVertexInputStateCreateInfo* decoded_value{ nullptr }; + VkImageCopy* decoded_value{ nullptr }; - PNextNode* pNext{ nullptr }; - StructPointerDecoder* pVertexBindingDescriptions{ nullptr }; - StructPointerDecoder* pVertexAttributeDescriptions{ nullptr }; + Decoded_VkImageSubresourceLayers* srcSubresource{ nullptr }; + Decoded_VkOffset3D* srcOffset{ nullptr }; + Decoded_VkImageSubresourceLayers* dstSubresource{ nullptr }; + Decoded_VkOffset3D* dstOffset{ nullptr }; + Decoded_VkExtent3D* extent{ nullptr }; }; -struct Decoded_VkPipelineInputAssemblyStateCreateInfo +struct Decoded_VkDispatchIndirectCommand { - using struct_type = VkPipelineInputAssemblyStateCreateInfo; - - VkPipelineInputAssemblyStateCreateInfo* decoded_value{ nullptr }; + using struct_type = VkDispatchIndirectCommand; - PNextNode* pNext{ nullptr }; + VkDispatchIndirectCommand* decoded_value{ nullptr }; }; -struct Decoded_VkPipelineTessellationStateCreateInfo +struct Decoded_VkPipelineCacheHeaderVersionOne { - using struct_type = VkPipelineTessellationStateCreateInfo; - - VkPipelineTessellationStateCreateInfo* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; + using struct_type = VkPipelineCacheHeaderVersionOne; -struct Decoded_VkViewport -{ - using struct_type = VkViewport; + VkPipelineCacheHeaderVersionOne* decoded_value{ nullptr }; - VkViewport* decoded_value{ nullptr }; + PointerDecoder pipelineCacheUUID; }; -struct Decoded_VkPipelineViewportStateCreateInfo +struct Decoded_VkEventCreateInfo { - using struct_type = VkPipelineViewportStateCreateInfo; + using struct_type = VkEventCreateInfo; - VkPipelineViewportStateCreateInfo* decoded_value{ nullptr }; + VkEventCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pViewports{ nullptr }; - StructPointerDecoder* pScissors{ nullptr }; }; -struct Decoded_VkPipelineRasterizationStateCreateInfo +struct Decoded_VkBufferViewCreateInfo { - using struct_type = VkPipelineRasterizationStateCreateInfo; + using struct_type = VkBufferViewCreateInfo; - VkPipelineRasterizationStateCreateInfo* decoded_value{ nullptr }; + VkBufferViewCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId buffer{ format::kNullHandleId }; }; -struct Decoded_VkPipelineMultisampleStateCreateInfo +struct Decoded_VkShaderModuleCreateInfo { - using struct_type = VkPipelineMultisampleStateCreateInfo; + using struct_type = VkShaderModuleCreateInfo; - VkPipelineMultisampleStateCreateInfo* decoded_value{ nullptr }; + VkShaderModuleCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder pSampleMask; -}; - -struct Decoded_VkStencilOpState -{ - using struct_type = VkStencilOpState; - - VkStencilOpState* decoded_value{ nullptr }; + PointerDecoder pCode; }; -struct Decoded_VkPipelineDepthStencilStateCreateInfo +struct Decoded_VkPipelineCacheCreateInfo { - using struct_type = VkPipelineDepthStencilStateCreateInfo; + using struct_type = VkPipelineCacheCreateInfo; - VkPipelineDepthStencilStateCreateInfo* decoded_value{ nullptr }; + VkPipelineCacheCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - Decoded_VkStencilOpState* front{ nullptr }; - Decoded_VkStencilOpState* back{ nullptr }; + PointerDecoder pInitialData; }; -struct Decoded_VkPipelineColorBlendAttachmentState +struct Decoded_VkSpecializationMapEntry { - using struct_type = VkPipelineColorBlendAttachmentState; + using struct_type = VkSpecializationMapEntry; - VkPipelineColorBlendAttachmentState* decoded_value{ nullptr }; + VkSpecializationMapEntry* decoded_value{ nullptr }; }; -struct Decoded_VkPipelineColorBlendStateCreateInfo +struct Decoded_VkSpecializationInfo { - using struct_type = VkPipelineColorBlendStateCreateInfo; + using struct_type = VkSpecializationInfo; - VkPipelineColorBlendStateCreateInfo* decoded_value{ nullptr }; + VkSpecializationInfo* decoded_value{ nullptr }; - PNextNode* pNext{ nullptr }; - StructPointerDecoder* pAttachments{ nullptr }; - PointerDecoder blendConstants; + StructPointerDecoder* pMapEntries{ nullptr }; + PointerDecoder pData; }; -struct Decoded_VkPipelineDynamicStateCreateInfo +struct Decoded_VkPipelineShaderStageCreateInfo { - using struct_type = VkPipelineDynamicStateCreateInfo; + using struct_type = VkPipelineShaderStageCreateInfo; - VkPipelineDynamicStateCreateInfo* decoded_value{ nullptr }; + VkPipelineShaderStageCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder pDynamicStates; + format::HandleId module{ format::kNullHandleId }; + StringDecoder pName; + StructPointerDecoder* pSpecializationInfo{ nullptr }; }; -struct Decoded_VkGraphicsPipelineCreateInfo +struct Decoded_VkComputePipelineCreateInfo { - using struct_type = VkGraphicsPipelineCreateInfo; + using struct_type = VkComputePipelineCreateInfo; - VkGraphicsPipelineCreateInfo* decoded_value{ nullptr }; + VkComputePipelineCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pStages{ nullptr }; - StructPointerDecoder* pVertexInputState{ nullptr }; - StructPointerDecoder* pInputAssemblyState{ nullptr }; - StructPointerDecoder* pTessellationState{ nullptr }; - StructPointerDecoder* pViewportState{ nullptr }; - StructPointerDecoder* pRasterizationState{ nullptr }; - StructPointerDecoder* pMultisampleState{ nullptr }; - StructPointerDecoder* pDepthStencilState{ nullptr }; - StructPointerDecoder* pColorBlendState{ nullptr }; - StructPointerDecoder* pDynamicState{ nullptr }; + Decoded_VkPipelineShaderStageCreateInfo* stage{ nullptr }; format::HandleId layout{ format::kNullHandleId }; - format::HandleId renderPass{ format::kNullHandleId }; format::HandleId basePipelineHandle{ format::kNullHandleId }; }; @@ -1778,126 +1359,223 @@ struct Decoded_VkDescriptorSetLayoutCreateInfo StructPointerDecoder* pBindings{ nullptr }; }; -struct Decoded_VkAttachmentDescription +struct Decoded_VkDrawIndexedIndirectCommand { - using struct_type = VkAttachmentDescription; + using struct_type = VkDrawIndexedIndirectCommand; - VkAttachmentDescription* decoded_value{ nullptr }; + VkDrawIndexedIndirectCommand* decoded_value{ nullptr }; }; -struct Decoded_VkAttachmentReference +struct Decoded_VkDrawIndirectCommand { - using struct_type = VkAttachmentReference; + using struct_type = VkDrawIndirectCommand; - VkAttachmentReference* decoded_value{ nullptr }; + VkDrawIndirectCommand* decoded_value{ nullptr }; }; -struct Decoded_VkFramebufferCreateInfo +struct Decoded_VkVertexInputBindingDescription { - using struct_type = VkFramebufferCreateInfo; - - VkFramebufferCreateInfo* decoded_value{ nullptr }; + using struct_type = VkVertexInputBindingDescription; - PNextNode* pNext{ nullptr }; - format::HandleId renderPass{ format::kNullHandleId }; - HandlePointerDecoder pAttachments; + VkVertexInputBindingDescription* decoded_value{ nullptr }; }; -struct Decoded_VkSubpassDescription +struct Decoded_VkVertexInputAttributeDescription { - using struct_type = VkSubpassDescription; - - VkSubpassDescription* decoded_value{ nullptr }; + using struct_type = VkVertexInputAttributeDescription; - StructPointerDecoder* pInputAttachments{ nullptr }; - StructPointerDecoder* pColorAttachments{ nullptr }; - StructPointerDecoder* pResolveAttachments{ nullptr }; - StructPointerDecoder* pDepthStencilAttachment{ nullptr }; - PointerDecoder pPreserveAttachments; + VkVertexInputAttributeDescription* decoded_value{ nullptr }; }; -struct Decoded_VkSubpassDependency +struct Decoded_VkPipelineVertexInputStateCreateInfo { - using struct_type = VkSubpassDependency; + using struct_type = VkPipelineVertexInputStateCreateInfo; - VkSubpassDependency* decoded_value{ nullptr }; + VkPipelineVertexInputStateCreateInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + StructPointerDecoder* pVertexBindingDescriptions{ nullptr }; + StructPointerDecoder* pVertexAttributeDescriptions{ nullptr }; }; -struct Decoded_VkRenderPassCreateInfo +struct Decoded_VkPipelineInputAssemblyStateCreateInfo { - using struct_type = VkRenderPassCreateInfo; + using struct_type = VkPipelineInputAssemblyStateCreateInfo; - VkRenderPassCreateInfo* decoded_value{ nullptr }; + VkPipelineInputAssemblyStateCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pAttachments{ nullptr }; - StructPointerDecoder* pSubpasses{ nullptr }; - StructPointerDecoder* pDependencies{ nullptr }; }; -struct Decoded_VkCommandPoolCreateInfo +struct Decoded_VkPipelineTessellationStateCreateInfo { - using struct_type = VkCommandPoolCreateInfo; + using struct_type = VkPipelineTessellationStateCreateInfo; - VkCommandPoolCreateInfo* decoded_value{ nullptr }; + VkPipelineTessellationStateCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkCommandBufferAllocateInfo +struct Decoded_VkViewport { - using struct_type = VkCommandBufferAllocateInfo; - - VkCommandBufferAllocateInfo* decoded_value{ nullptr }; + using struct_type = VkViewport; - PNextNode* pNext{ nullptr }; - format::HandleId commandPool{ format::kNullHandleId }; + VkViewport* decoded_value{ nullptr }; }; -struct Decoded_VkCommandBufferInheritanceInfo +struct Decoded_VkPipelineViewportStateCreateInfo { - using struct_type = VkCommandBufferInheritanceInfo; + using struct_type = VkPipelineViewportStateCreateInfo; - VkCommandBufferInheritanceInfo* decoded_value{ nullptr }; + VkPipelineViewportStateCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - format::HandleId renderPass{ format::kNullHandleId }; - format::HandleId framebuffer{ format::kNullHandleId }; + StructPointerDecoder* pViewports{ nullptr }; + StructPointerDecoder* pScissors{ nullptr }; }; -struct Decoded_VkCommandBufferBeginInfo +struct Decoded_VkPipelineRasterizationStateCreateInfo { - using struct_type = VkCommandBufferBeginInfo; + using struct_type = VkPipelineRasterizationStateCreateInfo; - VkCommandBufferBeginInfo* decoded_value{ nullptr }; + VkPipelineRasterizationStateCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pInheritanceInfo{ nullptr }; }; -struct Decoded_VkBufferCopy +struct Decoded_VkPipelineMultisampleStateCreateInfo { - using struct_type = VkBufferCopy; + using struct_type = VkPipelineMultisampleStateCreateInfo; - VkBufferCopy* decoded_value{ nullptr }; + VkPipelineMultisampleStateCreateInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + PointerDecoder pSampleMask; }; -struct Decoded_VkImageSubresourceLayers +struct Decoded_VkStencilOpState { - using struct_type = VkImageSubresourceLayers; + using struct_type = VkStencilOpState; - VkImageSubresourceLayers* decoded_value{ nullptr }; + VkStencilOpState* decoded_value{ nullptr }; }; -struct Decoded_VkBufferImageCopy +struct Decoded_VkPipelineDepthStencilStateCreateInfo { - using struct_type = VkBufferImageCopy; + using struct_type = VkPipelineDepthStencilStateCreateInfo; - VkBufferImageCopy* decoded_value{ nullptr }; + VkPipelineDepthStencilStateCreateInfo* decoded_value{ nullptr }; - Decoded_VkImageSubresourceLayers* imageSubresource{ nullptr }; - Decoded_VkOffset3D* imageOffset{ nullptr }; - Decoded_VkExtent3D* imageExtent{ nullptr }; + PNextNode* pNext{ nullptr }; + Decoded_VkStencilOpState* front{ nullptr }; + Decoded_VkStencilOpState* back{ nullptr }; +}; + +struct Decoded_VkPipelineColorBlendAttachmentState +{ + using struct_type = VkPipelineColorBlendAttachmentState; + + VkPipelineColorBlendAttachmentState* decoded_value{ nullptr }; +}; + +struct Decoded_VkPipelineColorBlendStateCreateInfo +{ + using struct_type = VkPipelineColorBlendStateCreateInfo; + + VkPipelineColorBlendStateCreateInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + StructPointerDecoder* pAttachments{ nullptr }; + PointerDecoder blendConstants; +}; + +struct Decoded_VkPipelineDynamicStateCreateInfo +{ + using struct_type = VkPipelineDynamicStateCreateInfo; + + VkPipelineDynamicStateCreateInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + PointerDecoder pDynamicStates; +}; + +struct Decoded_VkGraphicsPipelineCreateInfo +{ + using struct_type = VkGraphicsPipelineCreateInfo; + + VkGraphicsPipelineCreateInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + StructPointerDecoder* pStages{ nullptr }; + StructPointerDecoder* pVertexInputState{ nullptr }; + StructPointerDecoder* pInputAssemblyState{ nullptr }; + StructPointerDecoder* pTessellationState{ nullptr }; + StructPointerDecoder* pViewportState{ nullptr }; + StructPointerDecoder* pRasterizationState{ nullptr }; + StructPointerDecoder* pMultisampleState{ nullptr }; + StructPointerDecoder* pDepthStencilState{ nullptr }; + StructPointerDecoder* pColorBlendState{ nullptr }; + StructPointerDecoder* pDynamicState{ nullptr }; + format::HandleId layout{ format::kNullHandleId }; + format::HandleId renderPass{ format::kNullHandleId }; + format::HandleId basePipelineHandle{ format::kNullHandleId }; +}; + +struct Decoded_VkAttachmentDescription +{ + using struct_type = VkAttachmentDescription; + + VkAttachmentDescription* decoded_value{ nullptr }; +}; + +struct Decoded_VkAttachmentReference +{ + using struct_type = VkAttachmentReference; + + VkAttachmentReference* decoded_value{ nullptr }; +}; + +struct Decoded_VkFramebufferCreateInfo +{ + using struct_type = VkFramebufferCreateInfo; + + VkFramebufferCreateInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + format::HandleId renderPass{ format::kNullHandleId }; + HandlePointerDecoder pAttachments; +}; + +struct Decoded_VkSubpassDescription +{ + using struct_type = VkSubpassDescription; + + VkSubpassDescription* decoded_value{ nullptr }; + + StructPointerDecoder* pInputAttachments{ nullptr }; + StructPointerDecoder* pColorAttachments{ nullptr }; + StructPointerDecoder* pResolveAttachments{ nullptr }; + StructPointerDecoder* pDepthStencilAttachment{ nullptr }; + PointerDecoder pPreserveAttachments; +}; + +struct Decoded_VkSubpassDependency +{ + using struct_type = VkSubpassDependency; + + VkSubpassDependency* decoded_value{ nullptr }; +}; + +struct Decoded_VkRenderPassCreateInfo +{ + using struct_type = VkRenderPassCreateInfo; + + VkRenderPassCreateInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + StructPointerDecoder* pAttachments{ nullptr }; + StructPointerDecoder* pSubpasses{ nullptr }; + StructPointerDecoder* pDependencies{ nullptr }; }; struct Decoded_VkClearDepthStencilValue @@ -1937,19 +1615,6 @@ struct Decoded_VkImageBlit StructPointerDecoder* dstOffsets{ nullptr }; }; -struct Decoded_VkImageCopy -{ - using struct_type = VkImageCopy; - - VkImageCopy* decoded_value{ nullptr }; - - Decoded_VkImageSubresourceLayers* srcSubresource{ nullptr }; - Decoded_VkOffset3D* srcOffset{ nullptr }; - Decoded_VkImageSubresourceLayers* dstSubresource{ nullptr }; - Decoded_VkOffset3D* dstOffset{ nullptr }; - Decoded_VkExtent3D* extent{ nullptr }; -}; - struct Decoded_VkImageResolve { using struct_type = VkImageResolve; @@ -1976,15 +1641,6 @@ struct Decoded_VkRenderPassBeginInfo StructPointerDecoder* pClearValues{ nullptr }; }; -struct Decoded_VkPhysicalDeviceSubgroupProperties -{ - using struct_type = VkPhysicalDeviceSubgroupProperties; - - VkPhysicalDeviceSubgroupProperties* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - struct Decoded_VkBindBufferMemoryInfo { using struct_type = VkBindBufferMemoryInfo; @@ -2007,15 +1663,6 @@ struct Decoded_VkBindImageMemoryInfo format::HandleId memory{ format::kNullHandleId }; }; -struct Decoded_VkPhysicalDevice16BitStorageFeatures -{ - using struct_type = VkPhysicalDevice16BitStorageFeatures; - - VkPhysicalDevice16BitStorageFeatures* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - struct Decoded_VkMemoryDedicatedRequirements { using struct_type = VkMemoryDedicatedRequirements; @@ -2045,16 +1692,6 @@ struct Decoded_VkMemoryAllocateFlagsInfo PNextNode* pNext{ nullptr }; }; -struct Decoded_VkDeviceGroupRenderPassBeginInfo -{ - using struct_type = VkDeviceGroupRenderPassBeginInfo; - - VkDeviceGroupRenderPassBeginInfo* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - StructPointerDecoder* pDeviceRenderAreas{ nullptr }; -}; - struct Decoded_VkDeviceGroupCommandBufferBeginInfo { using struct_type = VkDeviceGroupCommandBufferBeginInfo; @@ -2264,352 +1901,380 @@ struct Decoded_VkPhysicalDeviceSparseImageFormatInfo2 PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDevicePointClippingProperties +struct Decoded_VkImageViewUsageCreateInfo { - using struct_type = VkPhysicalDevicePointClippingProperties; + using struct_type = VkImageViewUsageCreateInfo; - VkPhysicalDevicePointClippingProperties* decoded_value{ nullptr }; + VkImageViewUsageCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkInputAttachmentAspectReference +struct Decoded_VkPhysicalDeviceProtectedMemoryFeatures { - using struct_type = VkInputAttachmentAspectReference; + using struct_type = VkPhysicalDeviceProtectedMemoryFeatures; - VkInputAttachmentAspectReference* decoded_value{ nullptr }; + VkPhysicalDeviceProtectedMemoryFeatures* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; }; -struct Decoded_VkRenderPassInputAttachmentAspectCreateInfo +struct Decoded_VkPhysicalDeviceProtectedMemoryProperties { - using struct_type = VkRenderPassInputAttachmentAspectCreateInfo; + using struct_type = VkPhysicalDeviceProtectedMemoryProperties; - VkRenderPassInputAttachmentAspectCreateInfo* decoded_value{ nullptr }; + VkPhysicalDeviceProtectedMemoryProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pAspectReferences{ nullptr }; }; -struct Decoded_VkImageViewUsageCreateInfo +struct Decoded_VkDeviceQueueInfo2 { - using struct_type = VkImageViewUsageCreateInfo; + using struct_type = VkDeviceQueueInfo2; - VkImageViewUsageCreateInfo* decoded_value{ nullptr }; + VkDeviceQueueInfo2* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPipelineTessellationDomainOriginStateCreateInfo +struct Decoded_VkProtectedSubmitInfo { - using struct_type = VkPipelineTessellationDomainOriginStateCreateInfo; + using struct_type = VkProtectedSubmitInfo; - VkPipelineTessellationDomainOriginStateCreateInfo* decoded_value{ nullptr }; + VkProtectedSubmitInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkRenderPassMultiviewCreateInfo +struct Decoded_VkBindImagePlaneMemoryInfo { - using struct_type = VkRenderPassMultiviewCreateInfo; + using struct_type = VkBindImagePlaneMemoryInfo; - VkRenderPassMultiviewCreateInfo* decoded_value{ nullptr }; + VkBindImagePlaneMemoryInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder pViewMasks; - PointerDecoder pViewOffsets; - PointerDecoder pCorrelationMasks; }; -struct Decoded_VkPhysicalDeviceMultiviewFeatures +struct Decoded_VkImagePlaneMemoryRequirementsInfo { - using struct_type = VkPhysicalDeviceMultiviewFeatures; + using struct_type = VkImagePlaneMemoryRequirementsInfo; - VkPhysicalDeviceMultiviewFeatures* decoded_value{ nullptr }; + VkImagePlaneMemoryRequirementsInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceMultiviewProperties +struct Decoded_VkExternalMemoryProperties { - using struct_type = VkPhysicalDeviceMultiviewProperties; - - VkPhysicalDeviceMultiviewProperties* decoded_value{ nullptr }; + using struct_type = VkExternalMemoryProperties; - PNextNode* pNext{ nullptr }; + VkExternalMemoryProperties* decoded_value{ nullptr }; }; -struct Decoded_VkPhysicalDeviceVariablePointersFeatures +struct Decoded_VkPhysicalDeviceExternalImageFormatInfo { - using struct_type = VkPhysicalDeviceVariablePointersFeatures; + using struct_type = VkPhysicalDeviceExternalImageFormatInfo; - VkPhysicalDeviceVariablePointersFeatures* decoded_value{ nullptr }; + VkPhysicalDeviceExternalImageFormatInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceProtectedMemoryFeatures +struct Decoded_VkExternalImageFormatProperties { - using struct_type = VkPhysicalDeviceProtectedMemoryFeatures; + using struct_type = VkExternalImageFormatProperties; - VkPhysicalDeviceProtectedMemoryFeatures* decoded_value{ nullptr }; + VkExternalImageFormatProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + Decoded_VkExternalMemoryProperties* externalMemoryProperties{ nullptr }; }; -struct Decoded_VkPhysicalDeviceProtectedMemoryProperties +struct Decoded_VkPhysicalDeviceExternalBufferInfo { - using struct_type = VkPhysicalDeviceProtectedMemoryProperties; + using struct_type = VkPhysicalDeviceExternalBufferInfo; - VkPhysicalDeviceProtectedMemoryProperties* decoded_value{ nullptr }; + VkPhysicalDeviceExternalBufferInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkDeviceQueueInfo2 +struct Decoded_VkExternalBufferProperties { - using struct_type = VkDeviceQueueInfo2; + using struct_type = VkExternalBufferProperties; - VkDeviceQueueInfo2* decoded_value{ nullptr }; + VkExternalBufferProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + Decoded_VkExternalMemoryProperties* externalMemoryProperties{ nullptr }; }; -struct Decoded_VkProtectedSubmitInfo +struct Decoded_VkPhysicalDeviceIDProperties { - using struct_type = VkProtectedSubmitInfo; + using struct_type = VkPhysicalDeviceIDProperties; - VkProtectedSubmitInfo* decoded_value{ nullptr }; + VkPhysicalDeviceIDProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + PointerDecoder deviceUUID; + PointerDecoder driverUUID; + PointerDecoder deviceLUID; }; -struct Decoded_VkSamplerYcbcrConversionCreateInfo +struct Decoded_VkExternalMemoryImageCreateInfo { - using struct_type = VkSamplerYcbcrConversionCreateInfo; + using struct_type = VkExternalMemoryImageCreateInfo; - VkSamplerYcbcrConversionCreateInfo* decoded_value{ nullptr }; + VkExternalMemoryImageCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - Decoded_VkComponentMapping* components{ nullptr }; }; -struct Decoded_VkSamplerYcbcrConversionInfo +struct Decoded_VkExternalMemoryBufferCreateInfo { - using struct_type = VkSamplerYcbcrConversionInfo; + using struct_type = VkExternalMemoryBufferCreateInfo; - VkSamplerYcbcrConversionInfo* decoded_value{ nullptr }; + VkExternalMemoryBufferCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - format::HandleId conversion{ format::kNullHandleId }; }; -struct Decoded_VkBindImagePlaneMemoryInfo +struct Decoded_VkExportMemoryAllocateInfo { - using struct_type = VkBindImagePlaneMemoryInfo; + using struct_type = VkExportMemoryAllocateInfo; - VkBindImagePlaneMemoryInfo* decoded_value{ nullptr }; + VkExportMemoryAllocateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkImagePlaneMemoryRequirementsInfo +struct Decoded_VkPhysicalDeviceExternalFenceInfo { - using struct_type = VkImagePlaneMemoryRequirementsInfo; + using struct_type = VkPhysicalDeviceExternalFenceInfo; - VkImagePlaneMemoryRequirementsInfo* decoded_value{ nullptr }; + VkPhysicalDeviceExternalFenceInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures +struct Decoded_VkExternalFenceProperties { - using struct_type = VkPhysicalDeviceSamplerYcbcrConversionFeatures; + using struct_type = VkExternalFenceProperties; - VkPhysicalDeviceSamplerYcbcrConversionFeatures* decoded_value{ nullptr }; + VkExternalFenceProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkSamplerYcbcrConversionImageFormatProperties +struct Decoded_VkExportFenceCreateInfo { - using struct_type = VkSamplerYcbcrConversionImageFormatProperties; + using struct_type = VkExportFenceCreateInfo; - VkSamplerYcbcrConversionImageFormatProperties* decoded_value{ nullptr }; + VkExportFenceCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkDescriptorUpdateTemplateEntry +struct Decoded_VkExportSemaphoreCreateInfo { - using struct_type = VkDescriptorUpdateTemplateEntry; + using struct_type = VkExportSemaphoreCreateInfo; - VkDescriptorUpdateTemplateEntry* decoded_value{ nullptr }; + VkExportSemaphoreCreateInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; }; -struct Decoded_VkDescriptorUpdateTemplateCreateInfo +struct Decoded_VkPhysicalDeviceExternalSemaphoreInfo { - using struct_type = VkDescriptorUpdateTemplateCreateInfo; + using struct_type = VkPhysicalDeviceExternalSemaphoreInfo; - VkDescriptorUpdateTemplateCreateInfo* decoded_value{ nullptr }; + VkPhysicalDeviceExternalSemaphoreInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pDescriptorUpdateEntries{ nullptr }; - format::HandleId descriptorSetLayout{ format::kNullHandleId }; - format::HandleId pipelineLayout{ format::kNullHandleId }; }; -struct Decoded_VkExternalMemoryProperties +struct Decoded_VkExternalSemaphoreProperties { - using struct_type = VkExternalMemoryProperties; + using struct_type = VkExternalSemaphoreProperties; - VkExternalMemoryProperties* decoded_value{ nullptr }; + VkExternalSemaphoreProperties* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceExternalImageFormatInfo +struct Decoded_VkPhysicalDeviceSubgroupProperties { - using struct_type = VkPhysicalDeviceExternalImageFormatInfo; + using struct_type = VkPhysicalDeviceSubgroupProperties; - VkPhysicalDeviceExternalImageFormatInfo* decoded_value{ nullptr }; + VkPhysicalDeviceSubgroupProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkExternalImageFormatProperties +struct Decoded_VkPhysicalDevice16BitStorageFeatures { - using struct_type = VkExternalImageFormatProperties; + using struct_type = VkPhysicalDevice16BitStorageFeatures; - VkExternalImageFormatProperties* decoded_value{ nullptr }; + VkPhysicalDevice16BitStorageFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - Decoded_VkExternalMemoryProperties* externalMemoryProperties{ nullptr }; }; -struct Decoded_VkPhysicalDeviceExternalBufferInfo +struct Decoded_VkPhysicalDeviceVariablePointersFeatures { - using struct_type = VkPhysicalDeviceExternalBufferInfo; + using struct_type = VkPhysicalDeviceVariablePointersFeatures; - VkPhysicalDeviceExternalBufferInfo* decoded_value{ nullptr }; + VkPhysicalDeviceVariablePointersFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkExternalBufferProperties +struct Decoded_VkDescriptorUpdateTemplateEntry { - using struct_type = VkExternalBufferProperties; + using struct_type = VkDescriptorUpdateTemplateEntry; - VkExternalBufferProperties* decoded_value{ nullptr }; + VkDescriptorUpdateTemplateEntry* decoded_value{ nullptr }; +}; + +struct Decoded_VkDescriptorUpdateTemplateCreateInfo +{ + using struct_type = VkDescriptorUpdateTemplateCreateInfo; + + VkDescriptorUpdateTemplateCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - Decoded_VkExternalMemoryProperties* externalMemoryProperties{ nullptr }; + StructPointerDecoder* pDescriptorUpdateEntries{ nullptr }; + format::HandleId descriptorSetLayout{ format::kNullHandleId }; + format::HandleId pipelineLayout{ format::kNullHandleId }; }; -struct Decoded_VkPhysicalDeviceIDProperties +struct Decoded_VkPhysicalDeviceMaintenance3Properties { - using struct_type = VkPhysicalDeviceIDProperties; + using struct_type = VkPhysicalDeviceMaintenance3Properties; - VkPhysicalDeviceIDProperties* decoded_value{ nullptr }; + VkPhysicalDeviceMaintenance3Properties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder deviceUUID; - PointerDecoder driverUUID; - PointerDecoder deviceLUID; }; -struct Decoded_VkExternalMemoryImageCreateInfo +struct Decoded_VkDescriptorSetLayoutSupport { - using struct_type = VkExternalMemoryImageCreateInfo; + using struct_type = VkDescriptorSetLayoutSupport; - VkExternalMemoryImageCreateInfo* decoded_value{ nullptr }; + VkDescriptorSetLayoutSupport* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkExternalMemoryBufferCreateInfo +struct Decoded_VkSamplerYcbcrConversionCreateInfo { - using struct_type = VkExternalMemoryBufferCreateInfo; + using struct_type = VkSamplerYcbcrConversionCreateInfo; - VkExternalMemoryBufferCreateInfo* decoded_value{ nullptr }; + VkSamplerYcbcrConversionCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + Decoded_VkComponentMapping* components{ nullptr }; }; -struct Decoded_VkExportMemoryAllocateInfo +struct Decoded_VkSamplerYcbcrConversionInfo { - using struct_type = VkExportMemoryAllocateInfo; + using struct_type = VkSamplerYcbcrConversionInfo; - VkExportMemoryAllocateInfo* decoded_value{ nullptr }; + VkSamplerYcbcrConversionInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId conversion{ format::kNullHandleId }; }; -struct Decoded_VkPhysicalDeviceExternalFenceInfo +struct Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures { - using struct_type = VkPhysicalDeviceExternalFenceInfo; + using struct_type = VkPhysicalDeviceSamplerYcbcrConversionFeatures; - VkPhysicalDeviceExternalFenceInfo* decoded_value{ nullptr }; + VkPhysicalDeviceSamplerYcbcrConversionFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkExternalFenceProperties +struct Decoded_VkSamplerYcbcrConversionImageFormatProperties { - using struct_type = VkExternalFenceProperties; + using struct_type = VkSamplerYcbcrConversionImageFormatProperties; - VkExternalFenceProperties* decoded_value{ nullptr }; + VkSamplerYcbcrConversionImageFormatProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkExportFenceCreateInfo +struct Decoded_VkDeviceGroupRenderPassBeginInfo { - using struct_type = VkExportFenceCreateInfo; + using struct_type = VkDeviceGroupRenderPassBeginInfo; - VkExportFenceCreateInfo* decoded_value{ nullptr }; + VkDeviceGroupRenderPassBeginInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + StructPointerDecoder* pDeviceRenderAreas{ nullptr }; }; -struct Decoded_VkExportSemaphoreCreateInfo +struct Decoded_VkPhysicalDevicePointClippingProperties { - using struct_type = VkExportSemaphoreCreateInfo; + using struct_type = VkPhysicalDevicePointClippingProperties; - VkExportSemaphoreCreateInfo* decoded_value{ nullptr }; + VkPhysicalDevicePointClippingProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceExternalSemaphoreInfo +struct Decoded_VkInputAttachmentAspectReference { - using struct_type = VkPhysicalDeviceExternalSemaphoreInfo; + using struct_type = VkInputAttachmentAspectReference; - VkPhysicalDeviceExternalSemaphoreInfo* decoded_value{ nullptr }; + VkInputAttachmentAspectReference* decoded_value{ nullptr }; +}; + +struct Decoded_VkRenderPassInputAttachmentAspectCreateInfo +{ + using struct_type = VkRenderPassInputAttachmentAspectCreateInfo; + + VkRenderPassInputAttachmentAspectCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + StructPointerDecoder* pAspectReferences{ nullptr }; }; -struct Decoded_VkExternalSemaphoreProperties +struct Decoded_VkPipelineTessellationDomainOriginStateCreateInfo { - using struct_type = VkExternalSemaphoreProperties; + using struct_type = VkPipelineTessellationDomainOriginStateCreateInfo; - VkExternalSemaphoreProperties* decoded_value{ nullptr }; + VkPipelineTessellationDomainOriginStateCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceMaintenance3Properties +struct Decoded_VkRenderPassMultiviewCreateInfo { - using struct_type = VkPhysicalDeviceMaintenance3Properties; + using struct_type = VkRenderPassMultiviewCreateInfo; - VkPhysicalDeviceMaintenance3Properties* decoded_value{ nullptr }; + VkRenderPassMultiviewCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + PointerDecoder pViewMasks; + PointerDecoder pViewOffsets; + PointerDecoder pCorrelationMasks; }; -struct Decoded_VkDescriptorSetLayoutSupport +struct Decoded_VkPhysicalDeviceMultiviewFeatures { - using struct_type = VkDescriptorSetLayoutSupport; + using struct_type = VkPhysicalDeviceMultiviewFeatures; - VkDescriptorSetLayoutSupport* decoded_value{ nullptr }; + VkPhysicalDeviceMultiviewFeatures* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceMultiviewProperties +{ + using struct_type = VkPhysicalDeviceMultiviewProperties; + + VkPhysicalDeviceMultiviewProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; @@ -2682,76 +2347,140 @@ struct Decoded_VkImageFormatListCreateInfo PointerDecoder pViewFormats; }; -struct Decoded_VkAttachmentDescription2 +struct Decoded_VkPhysicalDeviceDriverProperties { - using struct_type = VkAttachmentDescription2; + using struct_type = VkPhysicalDeviceDriverProperties; - VkAttachmentDescription2* decoded_value{ nullptr }; + VkPhysicalDeviceDriverProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + StringDecoder driverName; + StringDecoder driverInfo; + Decoded_VkConformanceVersion* conformanceVersion{ nullptr }; }; -struct Decoded_VkAttachmentReference2 +struct Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures { - using struct_type = VkAttachmentReference2; + using struct_type = VkPhysicalDeviceVulkanMemoryModelFeatures; - VkAttachmentReference2* decoded_value{ nullptr }; + VkPhysicalDeviceVulkanMemoryModelFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkSubpassDescription2 +struct Decoded_VkPhysicalDeviceHostQueryResetFeatures { - using struct_type = VkSubpassDescription2; + using struct_type = VkPhysicalDeviceHostQueryResetFeatures; - VkSubpassDescription2* decoded_value{ nullptr }; + VkPhysicalDeviceHostQueryResetFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pInputAttachments{ nullptr }; - StructPointerDecoder* pColorAttachments{ nullptr }; - StructPointerDecoder* pResolveAttachments{ nullptr }; - StructPointerDecoder* pDepthStencilAttachment{ nullptr }; - PointerDecoder pPreserveAttachments; }; -struct Decoded_VkSubpassDependency2 +struct Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures { - using struct_type = VkSubpassDependency2; + using struct_type = VkPhysicalDeviceTimelineSemaphoreFeatures; - VkSubpassDependency2* decoded_value{ nullptr }; + VkPhysicalDeviceTimelineSemaphoreFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkRenderPassCreateInfo2 +struct Decoded_VkPhysicalDeviceTimelineSemaphoreProperties { - using struct_type = VkRenderPassCreateInfo2; + using struct_type = VkPhysicalDeviceTimelineSemaphoreProperties; - VkRenderPassCreateInfo2* decoded_value{ nullptr }; + VkPhysicalDeviceTimelineSemaphoreProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pAttachments{ nullptr }; - StructPointerDecoder* pSubpasses{ nullptr }; - StructPointerDecoder* pDependencies{ nullptr }; - PointerDecoder pCorrelatedViewMasks; }; -struct Decoded_VkSubpassBeginInfo +struct Decoded_VkSemaphoreTypeCreateInfo { - using struct_type = VkSubpassBeginInfo; + using struct_type = VkSemaphoreTypeCreateInfo; - VkSubpassBeginInfo* decoded_value{ nullptr }; + VkSemaphoreTypeCreateInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkTimelineSemaphoreSubmitInfo +{ + using struct_type = VkTimelineSemaphoreSubmitInfo; + + VkTimelineSemaphoreSubmitInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + PointerDecoder pWaitSemaphoreValues; + PointerDecoder pSignalSemaphoreValues; +}; + +struct Decoded_VkSemaphoreWaitInfo +{ + using struct_type = VkSemaphoreWaitInfo; + + VkSemaphoreWaitInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + HandlePointerDecoder pSemaphores; + PointerDecoder pValues; +}; + +struct Decoded_VkSemaphoreSignalInfo +{ + using struct_type = VkSemaphoreSignalInfo; + + VkSemaphoreSignalInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + format::HandleId semaphore{ format::kNullHandleId }; +}; + +struct Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures +{ + using struct_type = VkPhysicalDeviceBufferDeviceAddressFeatures; + + VkPhysicalDeviceBufferDeviceAddressFeatures* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkBufferDeviceAddressInfo +{ + using struct_type = VkBufferDeviceAddressInfo; + + VkBufferDeviceAddressInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + format::HandleId buffer{ format::kNullHandleId }; +}; + +struct Decoded_VkBufferOpaqueCaptureAddressCreateInfo +{ + using struct_type = VkBufferOpaqueCaptureAddressCreateInfo; + + VkBufferOpaqueCaptureAddressCreateInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo +{ + using struct_type = VkMemoryOpaqueCaptureAddressAllocateInfo; + + VkMemoryOpaqueCaptureAddressAllocateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkSubpassEndInfo +struct Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo { - using struct_type = VkSubpassEndInfo; + using struct_type = VkDeviceMemoryOpaqueCaptureAddressInfo; - VkSubpassEndInfo* decoded_value{ nullptr }; + VkDeviceMemoryOpaqueCaptureAddressInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId memory{ format::kNullHandleId }; }; struct Decoded_VkPhysicalDevice8BitStorageFeatures @@ -2763,18 +2492,6 @@ struct Decoded_VkPhysicalDevice8BitStorageFeatures PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceDriverProperties -{ - using struct_type = VkPhysicalDeviceDriverProperties; - - VkPhysicalDeviceDriverProperties* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - StringDecoder driverName; - StringDecoder driverInfo; - Decoded_VkConformanceVersion* conformanceVersion{ nullptr }; -}; - struct Decoded_VkPhysicalDeviceShaderAtomicInt64Features { using struct_type = VkPhysicalDeviceShaderAtomicInt64Features; @@ -2849,25 +2566,6 @@ struct Decoded_VkDescriptorSetVariableDescriptorCountLayoutSupport PNextNode* pNext{ nullptr }; }; -struct Decoded_VkSubpassDescriptionDepthStencilResolve -{ - using struct_type = VkSubpassDescriptionDepthStencilResolve; - - VkSubpassDescriptionDepthStencilResolve* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - StructPointerDecoder* pDepthStencilResolveAttachment{ nullptr }; -}; - -struct Decoded_VkPhysicalDeviceDepthStencilResolveProperties -{ - using struct_type = VkPhysicalDeviceDepthStencilResolveProperties; - - VkPhysicalDeviceDepthStencilResolveProperties* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - struct Decoded_VkPhysicalDeviceScalarBlockLayoutFeatures { using struct_type = VkPhysicalDeviceScalarBlockLayoutFeatures; @@ -2877,15 +2575,6 @@ struct Decoded_VkPhysicalDeviceScalarBlockLayoutFeatures PNextNode* pNext{ nullptr }; }; -struct Decoded_VkImageStencilUsageCreateInfo -{ - using struct_type = VkImageStencilUsageCreateInfo; - - VkImageStencilUsageCreateInfo* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - struct Decoded_VkSamplerReductionModeCreateInfo { using struct_type = VkSamplerReductionModeCreateInfo; @@ -2904,54 +2593,6 @@ struct Decoded_VkPhysicalDeviceSamplerFilterMinmaxProperties PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures -{ - using struct_type = VkPhysicalDeviceVulkanMemoryModelFeatures; - - VkPhysicalDeviceVulkanMemoryModelFeatures* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - -struct Decoded_VkPhysicalDeviceImagelessFramebufferFeatures -{ - using struct_type = VkPhysicalDeviceImagelessFramebufferFeatures; - - VkPhysicalDeviceImagelessFramebufferFeatures* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - -struct Decoded_VkFramebufferAttachmentImageInfo -{ - using struct_type = VkFramebufferAttachmentImageInfo; - - VkFramebufferAttachmentImageInfo* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - PointerDecoder pViewFormats; -}; - -struct Decoded_VkFramebufferAttachmentsCreateInfo -{ - using struct_type = VkFramebufferAttachmentsCreateInfo; - - VkFramebufferAttachmentsCreateInfo* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - StructPointerDecoder* pAttachmentImageInfos{ nullptr }; -}; - -struct Decoded_VkRenderPassAttachmentBeginInfo -{ - using struct_type = VkRenderPassAttachmentBeginInfo; - - VkRenderPassAttachmentBeginInfo* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - HandlePointerDecoder pAttachments; -}; - struct Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures { using struct_type = VkPhysicalDeviceUniformBufferStandardLayoutFeatures; @@ -2970,189 +2611,186 @@ struct Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures +struct Decoded_VkAttachmentDescription2 { - using struct_type = VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures; + using struct_type = VkAttachmentDescription2; - VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* decoded_value{ nullptr }; + VkAttachmentDescription2* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkAttachmentReferenceStencilLayout +struct Decoded_VkAttachmentReference2 { - using struct_type = VkAttachmentReferenceStencilLayout; + using struct_type = VkAttachmentReference2; - VkAttachmentReferenceStencilLayout* decoded_value{ nullptr }; + VkAttachmentReference2* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkAttachmentDescriptionStencilLayout +struct Decoded_VkSubpassDescription2 { - using struct_type = VkAttachmentDescriptionStencilLayout; + using struct_type = VkSubpassDescription2; - VkAttachmentDescriptionStencilLayout* decoded_value{ nullptr }; + VkSubpassDescription2* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + StructPointerDecoder* pInputAttachments{ nullptr }; + StructPointerDecoder* pColorAttachments{ nullptr }; + StructPointerDecoder* pResolveAttachments{ nullptr }; + StructPointerDecoder* pDepthStencilAttachment{ nullptr }; + PointerDecoder pPreserveAttachments; }; -struct Decoded_VkPhysicalDeviceHostQueryResetFeatures +struct Decoded_VkSubpassDependency2 { - using struct_type = VkPhysicalDeviceHostQueryResetFeatures; + using struct_type = VkSubpassDependency2; - VkPhysicalDeviceHostQueryResetFeatures* decoded_value{ nullptr }; + VkSubpassDependency2* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures +struct Decoded_VkRenderPassCreateInfo2 { - using struct_type = VkPhysicalDeviceTimelineSemaphoreFeatures; + using struct_type = VkRenderPassCreateInfo2; - VkPhysicalDeviceTimelineSemaphoreFeatures* decoded_value{ nullptr }; + VkRenderPassCreateInfo2* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + StructPointerDecoder* pAttachments{ nullptr }; + StructPointerDecoder* pSubpasses{ nullptr }; + StructPointerDecoder* pDependencies{ nullptr }; + PointerDecoder pCorrelatedViewMasks; }; -struct Decoded_VkPhysicalDeviceTimelineSemaphoreProperties +struct Decoded_VkSubpassBeginInfo { - using struct_type = VkPhysicalDeviceTimelineSemaphoreProperties; + using struct_type = VkSubpassBeginInfo; - VkPhysicalDeviceTimelineSemaphoreProperties* decoded_value{ nullptr }; + VkSubpassBeginInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkSemaphoreTypeCreateInfo +struct Decoded_VkSubpassEndInfo { - using struct_type = VkSemaphoreTypeCreateInfo; + using struct_type = VkSubpassEndInfo; - VkSemaphoreTypeCreateInfo* decoded_value{ nullptr }; + VkSubpassEndInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkTimelineSemaphoreSubmitInfo +struct Decoded_VkSubpassDescriptionDepthStencilResolve { - using struct_type = VkTimelineSemaphoreSubmitInfo; + using struct_type = VkSubpassDescriptionDepthStencilResolve; - VkTimelineSemaphoreSubmitInfo* decoded_value{ nullptr }; + VkSubpassDescriptionDepthStencilResolve* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder pWaitSemaphoreValues; - PointerDecoder pSignalSemaphoreValues; + StructPointerDecoder* pDepthStencilResolveAttachment{ nullptr }; }; -struct Decoded_VkSemaphoreWaitInfo +struct Decoded_VkPhysicalDeviceDepthStencilResolveProperties { - using struct_type = VkSemaphoreWaitInfo; + using struct_type = VkPhysicalDeviceDepthStencilResolveProperties; - VkSemaphoreWaitInfo* decoded_value{ nullptr }; + VkPhysicalDeviceDepthStencilResolveProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - HandlePointerDecoder pSemaphores; - PointerDecoder pValues; }; -struct Decoded_VkSemaphoreSignalInfo +struct Decoded_VkImageStencilUsageCreateInfo { - using struct_type = VkSemaphoreSignalInfo; + using struct_type = VkImageStencilUsageCreateInfo; - VkSemaphoreSignalInfo* decoded_value{ nullptr }; + VkImageStencilUsageCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - format::HandleId semaphore{ format::kNullHandleId }; }; -struct Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures +struct Decoded_VkPhysicalDeviceImagelessFramebufferFeatures { - using struct_type = VkPhysicalDeviceBufferDeviceAddressFeatures; + using struct_type = VkPhysicalDeviceImagelessFramebufferFeatures; - VkPhysicalDeviceBufferDeviceAddressFeatures* decoded_value{ nullptr }; + VkPhysicalDeviceImagelessFramebufferFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkBufferDeviceAddressInfo +struct Decoded_VkFramebufferAttachmentImageInfo { - using struct_type = VkBufferDeviceAddressInfo; + using struct_type = VkFramebufferAttachmentImageInfo; - VkBufferDeviceAddressInfo* decoded_value{ nullptr }; + VkFramebufferAttachmentImageInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - format::HandleId buffer{ format::kNullHandleId }; + PointerDecoder pViewFormats; }; -struct Decoded_VkBufferOpaqueCaptureAddressCreateInfo +struct Decoded_VkFramebufferAttachmentsCreateInfo { - using struct_type = VkBufferOpaqueCaptureAddressCreateInfo; + using struct_type = VkFramebufferAttachmentsCreateInfo; - VkBufferOpaqueCaptureAddressCreateInfo* decoded_value{ nullptr }; + VkFramebufferAttachmentsCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + StructPointerDecoder* pAttachmentImageInfos{ nullptr }; }; -struct Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo +struct Decoded_VkRenderPassAttachmentBeginInfo { - using struct_type = VkMemoryOpaqueCaptureAddressAllocateInfo; + using struct_type = VkRenderPassAttachmentBeginInfo; - VkMemoryOpaqueCaptureAddressAllocateInfo* decoded_value{ nullptr }; + VkRenderPassAttachmentBeginInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + HandlePointerDecoder pAttachments; }; -struct Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo +struct Decoded_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures { - using struct_type = VkDeviceMemoryOpaqueCaptureAddressInfo; + using struct_type = VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures; - VkDeviceMemoryOpaqueCaptureAddressInfo* decoded_value{ nullptr }; + VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - format::HandleId memory{ format::kNullHandleId }; }; -struct Decoded_VkPhysicalDeviceVulkan13Features +struct Decoded_VkAttachmentReferenceStencilLayout { - using struct_type = VkPhysicalDeviceVulkan13Features; + using struct_type = VkAttachmentReferenceStencilLayout; - VkPhysicalDeviceVulkan13Features* decoded_value{ nullptr }; + VkAttachmentReferenceStencilLayout* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceVulkan13Properties +struct Decoded_VkAttachmentDescriptionStencilLayout { - using struct_type = VkPhysicalDeviceVulkan13Properties; + using struct_type = VkAttachmentDescriptionStencilLayout; - VkPhysicalDeviceVulkan13Properties* decoded_value{ nullptr }; + VkAttachmentDescriptionStencilLayout* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPipelineCreationFeedback -{ - using struct_type = VkPipelineCreationFeedback; - - VkPipelineCreationFeedback* decoded_value{ nullptr }; -}; - -struct Decoded_VkPipelineCreationFeedbackCreateInfo +struct Decoded_VkPhysicalDeviceVulkan13Features { - using struct_type = VkPipelineCreationFeedbackCreateInfo; + using struct_type = VkPhysicalDeviceVulkan13Features; - VkPipelineCreationFeedbackCreateInfo* decoded_value{ nullptr }; + VkPhysicalDeviceVulkan13Features* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pPipelineCreationFeedback{ nullptr }; - StructPointerDecoder* pPipelineStageCreationFeedbacks{ nullptr }; }; -struct Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures +struct Decoded_VkPhysicalDeviceVulkan13Properties { - using struct_type = VkPhysicalDeviceShaderTerminateInvocationFeatures; + using struct_type = VkPhysicalDeviceVulkan13Properties; - VkPhysicalDeviceShaderTerminateInvocationFeatures* decoded_value{ nullptr }; + VkPhysicalDeviceVulkan13Properties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; @@ -3170,15 +2808,6 @@ struct Decoded_VkPhysicalDeviceToolProperties StringDecoder layer; }; -struct Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures -{ - using struct_type = VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures; - - VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - struct Decoded_VkPhysicalDevicePrivateDataFeatures { using struct_type = VkPhysicalDevicePrivateDataFeatures; @@ -3192,25 +2821,16 @@ struct Decoded_VkDevicePrivateDataCreateInfo { using struct_type = VkDevicePrivateDataCreateInfo; - VkDevicePrivateDataCreateInfo* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - -struct Decoded_VkPrivateDataSlotCreateInfo -{ - using struct_type = VkPrivateDataSlotCreateInfo; - - VkPrivateDataSlotCreateInfo* decoded_value{ nullptr }; + VkDevicePrivateDataCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures +struct Decoded_VkPrivateDataSlotCreateInfo { - using struct_type = VkPhysicalDevicePipelineCreationCacheControlFeatures; + using struct_type = VkPrivateDataSlotCreateInfo; - VkPhysicalDevicePipelineCreationCacheControlFeatures* decoded_value{ nullptr }; + VkPrivateDataSlotCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; @@ -3298,24 +2918,6 @@ struct Decoded_VkPhysicalDeviceSynchronization2Features PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures -{ - using struct_type = VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; - - VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - -struct Decoded_VkPhysicalDeviceImageRobustnessFeatures -{ - using struct_type = VkPhysicalDeviceImageRobustnessFeatures; - - VkPhysicalDeviceImageRobustnessFeatures* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - struct Decoded_VkBufferCopy2 { using struct_type = VkBufferCopy2; @@ -3399,394 +3001,368 @@ struct Decoded_VkCopyImageToBufferInfo2 StructPointerDecoder* pRegions{ nullptr }; }; -struct Decoded_VkImageBlit2 -{ - using struct_type = VkImageBlit2; - - VkImageBlit2* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - Decoded_VkImageSubresourceLayers* srcSubresource{ nullptr }; - StructPointerDecoder* srcOffsets{ nullptr }; - Decoded_VkImageSubresourceLayers* dstSubresource{ nullptr }; - StructPointerDecoder* dstOffsets{ nullptr }; -}; - -struct Decoded_VkBlitImageInfo2 -{ - using struct_type = VkBlitImageInfo2; - - VkBlitImageInfo2* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - format::HandleId srcImage{ format::kNullHandleId }; - format::HandleId dstImage{ format::kNullHandleId }; - StructPointerDecoder* pRegions{ nullptr }; -}; - -struct Decoded_VkImageResolve2 -{ - using struct_type = VkImageResolve2; - - VkImageResolve2* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - Decoded_VkImageSubresourceLayers* srcSubresource{ nullptr }; - Decoded_VkOffset3D* srcOffset{ nullptr }; - Decoded_VkImageSubresourceLayers* dstSubresource{ nullptr }; - Decoded_VkOffset3D* dstOffset{ nullptr }; - Decoded_VkExtent3D* extent{ nullptr }; -}; - -struct Decoded_VkResolveImageInfo2 +struct Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures { - using struct_type = VkResolveImageInfo2; + using struct_type = VkPhysicalDeviceTextureCompressionASTCHDRFeatures; - VkResolveImageInfo2* decoded_value{ nullptr }; + VkPhysicalDeviceTextureCompressionASTCHDRFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - format::HandleId srcImage{ format::kNullHandleId }; - format::HandleId dstImage{ format::kNullHandleId }; - StructPointerDecoder* pRegions{ nullptr }; }; -struct Decoded_VkPhysicalDeviceSubgroupSizeControlFeatures +struct Decoded_VkFormatProperties3 { - using struct_type = VkPhysicalDeviceSubgroupSizeControlFeatures; + using struct_type = VkFormatProperties3; - VkPhysicalDeviceSubgroupSizeControlFeatures* decoded_value{ nullptr }; + VkFormatProperties3* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceSubgroupSizeControlProperties +struct Decoded_VkPhysicalDeviceMaintenance4Features { - using struct_type = VkPhysicalDeviceSubgroupSizeControlProperties; + using struct_type = VkPhysicalDeviceMaintenance4Features; - VkPhysicalDeviceSubgroupSizeControlProperties* decoded_value{ nullptr }; + VkPhysicalDeviceMaintenance4Features* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo +struct Decoded_VkPhysicalDeviceMaintenance4Properties { - using struct_type = VkPipelineShaderStageRequiredSubgroupSizeCreateInfo; + using struct_type = VkPhysicalDeviceMaintenance4Properties; - VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* decoded_value{ nullptr }; + VkPhysicalDeviceMaintenance4Properties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceInlineUniformBlockFeatures +struct Decoded_VkDeviceBufferMemoryRequirements { - using struct_type = VkPhysicalDeviceInlineUniformBlockFeatures; + using struct_type = VkDeviceBufferMemoryRequirements; - VkPhysicalDeviceInlineUniformBlockFeatures* decoded_value{ nullptr }; + VkDeviceBufferMemoryRequirements* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + StructPointerDecoder* pCreateInfo{ nullptr }; }; -struct Decoded_VkPhysicalDeviceInlineUniformBlockProperties +struct Decoded_VkDeviceImageMemoryRequirements { - using struct_type = VkPhysicalDeviceInlineUniformBlockProperties; + using struct_type = VkDeviceImageMemoryRequirements; - VkPhysicalDeviceInlineUniformBlockProperties* decoded_value{ nullptr }; + VkDeviceImageMemoryRequirements* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + StructPointerDecoder* pCreateInfo{ nullptr }; }; -struct Decoded_VkWriteDescriptorSetInlineUniformBlock +struct Decoded_VkPipelineCreationFeedback { - using struct_type = VkWriteDescriptorSetInlineUniformBlock; - - VkWriteDescriptorSetInlineUniformBlock* decoded_value{ nullptr }; + using struct_type = VkPipelineCreationFeedback; - PNextNode* pNext{ nullptr }; - PointerDecoder pData; + VkPipelineCreationFeedback* decoded_value{ nullptr }; }; -struct Decoded_VkDescriptorPoolInlineUniformBlockCreateInfo +struct Decoded_VkPipelineCreationFeedbackCreateInfo { - using struct_type = VkDescriptorPoolInlineUniformBlockCreateInfo; + using struct_type = VkPipelineCreationFeedbackCreateInfo; - VkDescriptorPoolInlineUniformBlockCreateInfo* decoded_value{ nullptr }; + VkPipelineCreationFeedbackCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + StructPointerDecoder* pPipelineCreationFeedback{ nullptr }; + StructPointerDecoder* pPipelineStageCreationFeedbacks{ nullptr }; }; -struct Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures +struct Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures { - using struct_type = VkPhysicalDeviceTextureCompressionASTCHDRFeatures; + using struct_type = VkPhysicalDeviceShaderTerminateInvocationFeatures; - VkPhysicalDeviceTextureCompressionASTCHDRFeatures* decoded_value{ nullptr }; + VkPhysicalDeviceShaderTerminateInvocationFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkRenderingAttachmentInfo +struct Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures { - using struct_type = VkRenderingAttachmentInfo; + using struct_type = VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures; - VkRenderingAttachmentInfo* decoded_value{ nullptr }; + VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - format::HandleId imageView{ format::kNullHandleId }; - format::HandleId resolveImageView{ format::kNullHandleId }; - Decoded_VkClearValue* clearValue{ nullptr }; }; -struct Decoded_VkRenderingInfo +struct Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures { - using struct_type = VkRenderingInfo; + using struct_type = VkPhysicalDevicePipelineCreationCacheControlFeatures; - VkRenderingInfo* decoded_value{ nullptr }; + VkPhysicalDevicePipelineCreationCacheControlFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - Decoded_VkRect2D* renderArea{ nullptr }; - StructPointerDecoder* pColorAttachments{ nullptr }; - StructPointerDecoder* pDepthAttachment{ nullptr }; - StructPointerDecoder* pStencilAttachment{ nullptr }; }; -struct Decoded_VkPipelineRenderingCreateInfo +struct Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures { - using struct_type = VkPipelineRenderingCreateInfo; + using struct_type = VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; - VkPipelineRenderingCreateInfo* decoded_value{ nullptr }; + VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder pColorAttachmentFormats; }; -struct Decoded_VkPhysicalDeviceDynamicRenderingFeatures +struct Decoded_VkPhysicalDeviceImageRobustnessFeatures { - using struct_type = VkPhysicalDeviceDynamicRenderingFeatures; + using struct_type = VkPhysicalDeviceImageRobustnessFeatures; - VkPhysicalDeviceDynamicRenderingFeatures* decoded_value{ nullptr }; + VkPhysicalDeviceImageRobustnessFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkCommandBufferInheritanceRenderingInfo +struct Decoded_VkPhysicalDeviceSubgroupSizeControlFeatures { - using struct_type = VkCommandBufferInheritanceRenderingInfo; + using struct_type = VkPhysicalDeviceSubgroupSizeControlFeatures; - VkCommandBufferInheritanceRenderingInfo* decoded_value{ nullptr }; + VkPhysicalDeviceSubgroupSizeControlFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder pColorAttachmentFormats; }; -struct Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures +struct Decoded_VkPhysicalDeviceSubgroupSizeControlProperties { - using struct_type = VkPhysicalDeviceShaderIntegerDotProductFeatures; + using struct_type = VkPhysicalDeviceSubgroupSizeControlProperties; - VkPhysicalDeviceShaderIntegerDotProductFeatures* decoded_value{ nullptr }; + VkPhysicalDeviceSubgroupSizeControlProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties +struct Decoded_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo { - using struct_type = VkPhysicalDeviceShaderIntegerDotProductProperties; + using struct_type = VkPipelineShaderStageRequiredSubgroupSizeCreateInfo; - VkPhysicalDeviceShaderIntegerDotProductProperties* decoded_value{ nullptr }; + VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties +struct Decoded_VkPhysicalDeviceInlineUniformBlockFeatures { - using struct_type = VkPhysicalDeviceTexelBufferAlignmentProperties; + using struct_type = VkPhysicalDeviceInlineUniformBlockFeatures; - VkPhysicalDeviceTexelBufferAlignmentProperties* decoded_value{ nullptr }; + VkPhysicalDeviceInlineUniformBlockFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkFormatProperties3 +struct Decoded_VkPhysicalDeviceInlineUniformBlockProperties { - using struct_type = VkFormatProperties3; + using struct_type = VkPhysicalDeviceInlineUniformBlockProperties; - VkFormatProperties3* decoded_value{ nullptr }; + VkPhysicalDeviceInlineUniformBlockProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceMaintenance4Features +struct Decoded_VkWriteDescriptorSetInlineUniformBlock { - using struct_type = VkPhysicalDeviceMaintenance4Features; + using struct_type = VkWriteDescriptorSetInlineUniformBlock; - VkPhysicalDeviceMaintenance4Features* decoded_value{ nullptr }; + VkWriteDescriptorSetInlineUniformBlock* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + PointerDecoder pData; }; -struct Decoded_VkPhysicalDeviceMaintenance4Properties +struct Decoded_VkDescriptorPoolInlineUniformBlockCreateInfo { - using struct_type = VkPhysicalDeviceMaintenance4Properties; + using struct_type = VkDescriptorPoolInlineUniformBlockCreateInfo; - VkPhysicalDeviceMaintenance4Properties* decoded_value{ nullptr }; + VkDescriptorPoolInlineUniformBlockCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkDeviceBufferMemoryRequirements +struct Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures { - using struct_type = VkDeviceBufferMemoryRequirements; + using struct_type = VkPhysicalDeviceShaderIntegerDotProductFeatures; - VkDeviceBufferMemoryRequirements* decoded_value{ nullptr }; + VkPhysicalDeviceShaderIntegerDotProductFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pCreateInfo{ nullptr }; }; -struct Decoded_VkDeviceImageMemoryRequirements +struct Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties { - using struct_type = VkDeviceImageMemoryRequirements; + using struct_type = VkPhysicalDeviceShaderIntegerDotProductProperties; - VkDeviceImageMemoryRequirements* decoded_value{ nullptr }; + VkPhysicalDeviceShaderIntegerDotProductProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pCreateInfo{ nullptr }; }; -struct Decoded_VkPhysicalDeviceVulkan14Features +struct Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties { - using struct_type = VkPhysicalDeviceVulkan14Features; + using struct_type = VkPhysicalDeviceTexelBufferAlignmentProperties; - VkPhysicalDeviceVulkan14Features* decoded_value{ nullptr }; + VkPhysicalDeviceTexelBufferAlignmentProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceVulkan14Properties +struct Decoded_VkImageBlit2 { - using struct_type = VkPhysicalDeviceVulkan14Properties; + using struct_type = VkImageBlit2; - VkPhysicalDeviceVulkan14Properties* decoded_value{ nullptr }; + VkImageBlit2* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder pCopySrcLayouts; - PointerDecoder pCopyDstLayouts; - PointerDecoder optimalTilingLayoutUUID; + Decoded_VkImageSubresourceLayers* srcSubresource{ nullptr }; + StructPointerDecoder* srcOffsets{ nullptr }; + Decoded_VkImageSubresourceLayers* dstSubresource{ nullptr }; + StructPointerDecoder* dstOffsets{ nullptr }; }; -struct Decoded_VkDeviceQueueGlobalPriorityCreateInfo +struct Decoded_VkBlitImageInfo2 { - using struct_type = VkDeviceQueueGlobalPriorityCreateInfo; + using struct_type = VkBlitImageInfo2; - VkDeviceQueueGlobalPriorityCreateInfo* decoded_value{ nullptr }; + VkBlitImageInfo2* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId srcImage{ format::kNullHandleId }; + format::HandleId dstImage{ format::kNullHandleId }; + StructPointerDecoder* pRegions{ nullptr }; }; -struct Decoded_VkPhysicalDeviceGlobalPriorityQueryFeatures +struct Decoded_VkImageResolve2 { - using struct_type = VkPhysicalDeviceGlobalPriorityQueryFeatures; + using struct_type = VkImageResolve2; - VkPhysicalDeviceGlobalPriorityQueryFeatures* decoded_value{ nullptr }; + VkImageResolve2* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + Decoded_VkImageSubresourceLayers* srcSubresource{ nullptr }; + Decoded_VkOffset3D* srcOffset{ nullptr }; + Decoded_VkImageSubresourceLayers* dstSubresource{ nullptr }; + Decoded_VkOffset3D* dstOffset{ nullptr }; + Decoded_VkExtent3D* extent{ nullptr }; }; -struct Decoded_VkQueueFamilyGlobalPriorityProperties +struct Decoded_VkResolveImageInfo2 { - using struct_type = VkQueueFamilyGlobalPriorityProperties; + using struct_type = VkResolveImageInfo2; - VkQueueFamilyGlobalPriorityProperties* decoded_value{ nullptr }; + VkResolveImageInfo2* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder priorities; + format::HandleId srcImage{ format::kNullHandleId }; + format::HandleId dstImage{ format::kNullHandleId }; + StructPointerDecoder* pRegions{ nullptr }; }; -struct Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures +struct Decoded_VkRenderingAttachmentInfo { - using struct_type = VkPhysicalDeviceShaderSubgroupRotateFeatures; + using struct_type = VkRenderingAttachmentInfo; - VkPhysicalDeviceShaderSubgroupRotateFeatures* decoded_value{ nullptr }; + VkRenderingAttachmentInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId imageView{ format::kNullHandleId }; + format::HandleId resolveImageView{ format::kNullHandleId }; + Decoded_VkClearValue* clearValue{ nullptr }; }; -struct Decoded_VkPhysicalDeviceShaderFloatControls2Features +struct Decoded_VkRenderingInfo { - using struct_type = VkPhysicalDeviceShaderFloatControls2Features; + using struct_type = VkRenderingInfo; - VkPhysicalDeviceShaderFloatControls2Features* decoded_value{ nullptr }; + VkRenderingInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + Decoded_VkRect2D* renderArea{ nullptr }; + StructPointerDecoder* pColorAttachments{ nullptr }; + StructPointerDecoder* pDepthAttachment{ nullptr }; + StructPointerDecoder* pStencilAttachment{ nullptr }; }; -struct Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures +struct Decoded_VkPipelineRenderingCreateInfo { - using struct_type = VkPhysicalDeviceShaderExpectAssumeFeatures; + using struct_type = VkPipelineRenderingCreateInfo; - VkPhysicalDeviceShaderExpectAssumeFeatures* decoded_value{ nullptr }; + VkPipelineRenderingCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + PointerDecoder pColorAttachmentFormats; }; -struct Decoded_VkPhysicalDeviceLineRasterizationFeatures +struct Decoded_VkPhysicalDeviceDynamicRenderingFeatures { - using struct_type = VkPhysicalDeviceLineRasterizationFeatures; + using struct_type = VkPhysicalDeviceDynamicRenderingFeatures; - VkPhysicalDeviceLineRasterizationFeatures* decoded_value{ nullptr }; + VkPhysicalDeviceDynamicRenderingFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceLineRasterizationProperties +struct Decoded_VkCommandBufferInheritanceRenderingInfo { - using struct_type = VkPhysicalDeviceLineRasterizationProperties; + using struct_type = VkCommandBufferInheritanceRenderingInfo; - VkPhysicalDeviceLineRasterizationProperties* decoded_value{ nullptr }; + VkCommandBufferInheritanceRenderingInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + PointerDecoder pColorAttachmentFormats; }; -struct Decoded_VkPipelineRasterizationLineStateCreateInfo +struct Decoded_VkPhysicalDeviceVulkan14Features { - using struct_type = VkPipelineRasterizationLineStateCreateInfo; + using struct_type = VkPhysicalDeviceVulkan14Features; - VkPipelineRasterizationLineStateCreateInfo* decoded_value{ nullptr }; + VkPhysicalDeviceVulkan14Features* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceVertexAttributeDivisorProperties +struct Decoded_VkPhysicalDeviceVulkan14Properties { - using struct_type = VkPhysicalDeviceVertexAttributeDivisorProperties; + using struct_type = VkPhysicalDeviceVulkan14Properties; - VkPhysicalDeviceVertexAttributeDivisorProperties* decoded_value{ nullptr }; + VkPhysicalDeviceVulkan14Properties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + PointerDecoder pCopySrcLayouts; + PointerDecoder pCopyDstLayouts; + PointerDecoder optimalTilingLayoutUUID; }; -struct Decoded_VkVertexInputBindingDivisorDescription +struct Decoded_VkDeviceQueueGlobalPriorityCreateInfo { - using struct_type = VkVertexInputBindingDivisorDescription; + using struct_type = VkDeviceQueueGlobalPriorityCreateInfo; - VkVertexInputBindingDivisorDescription* decoded_value{ nullptr }; + VkDeviceQueueGlobalPriorityCreateInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPipelineVertexInputDivisorStateCreateInfo +struct Decoded_VkPhysicalDeviceGlobalPriorityQueryFeatures { - using struct_type = VkPipelineVertexInputDivisorStateCreateInfo; + using struct_type = VkPhysicalDeviceGlobalPriorityQueryFeatures; - VkPipelineVertexInputDivisorStateCreateInfo* decoded_value{ nullptr }; + VkPhysicalDeviceGlobalPriorityQueryFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pVertexBindingDivisors{ nullptr }; }; -struct Decoded_VkPhysicalDeviceVertexAttributeDivisorFeatures +struct Decoded_VkQueueFamilyGlobalPriorityProperties { - using struct_type = VkPhysicalDeviceVertexAttributeDivisorFeatures; + using struct_type = VkQueueFamilyGlobalPriorityProperties; - VkPhysicalDeviceVertexAttributeDivisorFeatures* decoded_value{ nullptr }; + VkQueueFamilyGlobalPriorityProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + PointerDecoder priorities; }; struct Decoded_VkPhysicalDeviceIndexTypeUint8Features @@ -3836,16 +3412,6 @@ struct Decoded_VkPhysicalDeviceMaintenance5Properties PNextNode* pNext{ nullptr }; }; -struct Decoded_VkRenderingAreaInfo -{ - using struct_type = VkRenderingAreaInfo; - - VkRenderingAreaInfo* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - PointerDecoder pColorAttachmentFormats; -}; - struct Decoded_VkImageSubresource2 { using struct_type = VkImageSubresource2; @@ -3877,90 +3443,148 @@ struct Decoded_VkSubresourceLayout2 Decoded_VkSubresourceLayout* subresourceLayout{ nullptr }; }; -struct Decoded_VkPipelineCreateFlags2CreateInfo +struct Decoded_VkBufferUsageFlags2CreateInfo { - using struct_type = VkPipelineCreateFlags2CreateInfo; + using struct_type = VkBufferUsageFlags2CreateInfo; - VkPipelineCreateFlags2CreateInfo* decoded_value{ nullptr }; + VkBufferUsageFlags2CreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkBufferUsageFlags2CreateInfo +struct Decoded_VkPhysicalDeviceMaintenance6Features { - using struct_type = VkBufferUsageFlags2CreateInfo; + using struct_type = VkPhysicalDeviceMaintenance6Features; - VkBufferUsageFlags2CreateInfo* decoded_value{ nullptr }; + VkPhysicalDeviceMaintenance6Features* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDevicePushDescriptorProperties +struct Decoded_VkPhysicalDeviceMaintenance6Properties { - using struct_type = VkPhysicalDevicePushDescriptorProperties; + using struct_type = VkPhysicalDeviceMaintenance6Properties; - VkPhysicalDevicePushDescriptorProperties* decoded_value{ nullptr }; + VkPhysicalDeviceMaintenance6Properties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures +struct Decoded_VkBindMemoryStatus { - using struct_type = VkPhysicalDeviceDynamicRenderingLocalReadFeatures; + using struct_type = VkBindMemoryStatus; - VkPhysicalDeviceDynamicRenderingLocalReadFeatures* decoded_value{ nullptr }; + VkBindMemoryStatus* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + PointerDecoder pResult; }; -struct Decoded_VkRenderingAttachmentLocationInfo +struct Decoded_VkPhysicalDeviceHostImageCopyFeatures { - using struct_type = VkRenderingAttachmentLocationInfo; + using struct_type = VkPhysicalDeviceHostImageCopyFeatures; - VkRenderingAttachmentLocationInfo* decoded_value{ nullptr }; + VkPhysicalDeviceHostImageCopyFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder pColorAttachmentLocations; }; -struct Decoded_VkRenderingInputAttachmentIndexInfo +struct Decoded_VkPhysicalDeviceHostImageCopyProperties { - using struct_type = VkRenderingInputAttachmentIndexInfo; + using struct_type = VkPhysicalDeviceHostImageCopyProperties; - VkRenderingInputAttachmentIndexInfo* decoded_value{ nullptr }; + VkPhysicalDeviceHostImageCopyProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder pColorAttachmentInputIndices; - PointerDecoder pDepthInputAttachmentIndex; - PointerDecoder pStencilInputAttachmentIndex; + PointerDecoder pCopySrcLayouts; + PointerDecoder pCopyDstLayouts; + PointerDecoder optimalTilingLayoutUUID; }; -struct Decoded_VkPhysicalDeviceMaintenance6Features +struct Decoded_VkCopyImageToImageInfo { - using struct_type = VkPhysicalDeviceMaintenance6Features; + using struct_type = VkCopyImageToImageInfo; - VkPhysicalDeviceMaintenance6Features* decoded_value{ nullptr }; + VkCopyImageToImageInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId srcImage{ format::kNullHandleId }; + format::HandleId dstImage{ format::kNullHandleId }; + StructPointerDecoder* pRegions{ nullptr }; }; -struct Decoded_VkPhysicalDeviceMaintenance6Properties +struct Decoded_VkHostImageLayoutTransitionInfo { - using struct_type = VkPhysicalDeviceMaintenance6Properties; + using struct_type = VkHostImageLayoutTransitionInfo; - VkPhysicalDeviceMaintenance6Properties* decoded_value{ nullptr }; + VkHostImageLayoutTransitionInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId image{ format::kNullHandleId }; + Decoded_VkImageSubresourceRange* subresourceRange{ nullptr }; }; -struct Decoded_VkBindMemoryStatus +struct Decoded_VkSubresourceHostMemcpySize { - using struct_type = VkBindMemoryStatus; + using struct_type = VkSubresourceHostMemcpySize; - VkBindMemoryStatus* decoded_value{ nullptr }; + VkSubresourceHostMemcpySize* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkHostImageCopyDevicePerformanceQuery +{ + using struct_type = VkHostImageCopyDevicePerformanceQuery; + + VkHostImageCopyDevicePerformanceQuery* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures +{ + using struct_type = VkPhysicalDeviceShaderSubgroupRotateFeatures; + + VkPhysicalDeviceShaderSubgroupRotateFeatures* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceShaderFloatControls2Features +{ + using struct_type = VkPhysicalDeviceShaderFloatControls2Features; + + VkPhysicalDeviceShaderFloatControls2Features* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures +{ + using struct_type = VkPhysicalDeviceShaderExpectAssumeFeatures; + + VkPhysicalDeviceShaderExpectAssumeFeatures* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPipelineCreateFlags2CreateInfo +{ + using struct_type = VkPipelineCreateFlags2CreateInfo; + + VkPipelineCreateFlags2CreateInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDevicePushDescriptorProperties +{ + using struct_type = VkPhysicalDevicePushDescriptorProperties; + + VkPhysicalDevicePushDescriptorProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder pResult; }; struct Decoded_VkBindDescriptorSetsInfo @@ -4024,75 +3648,116 @@ struct Decoded_VkPhysicalDevicePipelineRobustnessProperties PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPipelineRobustnessCreateInfo +struct Decoded_VkPipelineRobustnessCreateInfo +{ + using struct_type = VkPipelineRobustnessCreateInfo; + + VkPipelineRobustnessCreateInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceLineRasterizationFeatures +{ + using struct_type = VkPhysicalDeviceLineRasterizationFeatures; + + VkPhysicalDeviceLineRasterizationFeatures* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceLineRasterizationProperties +{ + using struct_type = VkPhysicalDeviceLineRasterizationProperties; + + VkPhysicalDeviceLineRasterizationProperties* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPipelineRasterizationLineStateCreateInfo +{ + using struct_type = VkPipelineRasterizationLineStateCreateInfo; + + VkPipelineRasterizationLineStateCreateInfo* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceVertexAttributeDivisorProperties { - using struct_type = VkPipelineRobustnessCreateInfo; + using struct_type = VkPhysicalDeviceVertexAttributeDivisorProperties; - VkPipelineRobustnessCreateInfo* decoded_value{ nullptr }; + VkPhysicalDeviceVertexAttributeDivisorProperties* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceHostImageCopyFeatures +struct Decoded_VkVertexInputBindingDivisorDescription { - using struct_type = VkPhysicalDeviceHostImageCopyFeatures; + using struct_type = VkVertexInputBindingDivisorDescription; - VkPhysicalDeviceHostImageCopyFeatures* decoded_value{ nullptr }; + VkVertexInputBindingDivisorDescription* decoded_value{ nullptr }; +}; + +struct Decoded_VkPipelineVertexInputDivisorStateCreateInfo +{ + using struct_type = VkPipelineVertexInputDivisorStateCreateInfo; + + VkPipelineVertexInputDivisorStateCreateInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + StructPointerDecoder* pVertexBindingDivisors{ nullptr }; }; -struct Decoded_VkPhysicalDeviceHostImageCopyProperties +struct Decoded_VkPhysicalDeviceVertexAttributeDivisorFeatures { - using struct_type = VkPhysicalDeviceHostImageCopyProperties; + using struct_type = VkPhysicalDeviceVertexAttributeDivisorFeatures; - VkPhysicalDeviceHostImageCopyProperties* decoded_value{ nullptr }; + VkPhysicalDeviceVertexAttributeDivisorFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder pCopySrcLayouts; - PointerDecoder pCopyDstLayouts; - PointerDecoder optimalTilingLayoutUUID; }; -struct Decoded_VkCopyImageToImageInfo +struct Decoded_VkRenderingAreaInfo { - using struct_type = VkCopyImageToImageInfo; + using struct_type = VkRenderingAreaInfo; - VkCopyImageToImageInfo* decoded_value{ nullptr }; + VkRenderingAreaInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - format::HandleId srcImage{ format::kNullHandleId }; - format::HandleId dstImage{ format::kNullHandleId }; - StructPointerDecoder* pRegions{ nullptr }; + PointerDecoder pColorAttachmentFormats; }; -struct Decoded_VkHostImageLayoutTransitionInfo +struct Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures { - using struct_type = VkHostImageLayoutTransitionInfo; + using struct_type = VkPhysicalDeviceDynamicRenderingLocalReadFeatures; - VkHostImageLayoutTransitionInfo* decoded_value{ nullptr }; + VkPhysicalDeviceDynamicRenderingLocalReadFeatures* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - format::HandleId image{ format::kNullHandleId }; - Decoded_VkImageSubresourceRange* subresourceRange{ nullptr }; }; -struct Decoded_VkSubresourceHostMemcpySize +struct Decoded_VkRenderingAttachmentLocationInfo { - using struct_type = VkSubresourceHostMemcpySize; + using struct_type = VkRenderingAttachmentLocationInfo; - VkSubresourceHostMemcpySize* decoded_value{ nullptr }; + VkRenderingAttachmentLocationInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + PointerDecoder pColorAttachmentLocations; }; -struct Decoded_VkHostImageCopyDevicePerformanceQuery +struct Decoded_VkRenderingInputAttachmentIndexInfo { - using struct_type = VkHostImageCopyDevicePerformanceQuery; + using struct_type = VkRenderingInputAttachmentIndexInfo; - VkHostImageCopyDevicePerformanceQuery* decoded_value{ nullptr }; + VkRenderingInputAttachmentIndexInfo* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + PointerDecoder pColorAttachmentInputIndices; + PointerDecoder pDepthInputAttachmentIndex; + PointerDecoder pStencilInputAttachmentIndex; }; struct Decoded_VkSurfaceCapabilitiesKHR @@ -4695,159 +4360,6 @@ struct Decoded_VkVideoEncodeH264GopRemainingFrameInfoKHR PNextNode* pNext{ nullptr }; }; -struct Decoded_VkVideoEncodeH265CapabilitiesKHR -{ - using struct_type = VkVideoEncodeH265CapabilitiesKHR; - - VkVideoEncodeH265CapabilitiesKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - Decoded_VkExtent2D* maxTiles{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265SessionCreateInfoKHR -{ - using struct_type = VkVideoEncodeH265SessionCreateInfoKHR; - - VkVideoEncodeH265SessionCreateInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265QpKHR -{ - using struct_type = VkVideoEncodeH265QpKHR; - - VkVideoEncodeH265QpKHR* decoded_value{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265QualityLevelPropertiesKHR -{ - using struct_type = VkVideoEncodeH265QualityLevelPropertiesKHR; - - VkVideoEncodeH265QualityLevelPropertiesKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - Decoded_VkVideoEncodeH265QpKHR* preferredConstantQp{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265SessionParametersAddInfoKHR -{ - using struct_type = VkVideoEncodeH265SessionParametersAddInfoKHR; - - VkVideoEncodeH265SessionParametersAddInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - StructPointerDecoder* pStdVPSs{ nullptr }; - StructPointerDecoder* pStdSPSs{ nullptr }; - StructPointerDecoder* pStdPPSs{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265SessionParametersCreateInfoKHR -{ - using struct_type = VkVideoEncodeH265SessionParametersCreateInfoKHR; - - VkVideoEncodeH265SessionParametersCreateInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - StructPointerDecoder* pParametersAddInfo{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265SessionParametersGetInfoKHR -{ - using struct_type = VkVideoEncodeH265SessionParametersGetInfoKHR; - - VkVideoEncodeH265SessionParametersGetInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265SessionParametersFeedbackInfoKHR -{ - using struct_type = VkVideoEncodeH265SessionParametersFeedbackInfoKHR; - - VkVideoEncodeH265SessionParametersFeedbackInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265NaluSliceSegmentInfoKHR -{ - using struct_type = VkVideoEncodeH265NaluSliceSegmentInfoKHR; - - VkVideoEncodeH265NaluSliceSegmentInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - StructPointerDecoder* pStdSliceSegmentHeader{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265PictureInfoKHR -{ - using struct_type = VkVideoEncodeH265PictureInfoKHR; - - VkVideoEncodeH265PictureInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - StructPointerDecoder* pNaluSliceSegmentEntries{ nullptr }; - StructPointerDecoder* pStdPictureInfo{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265DpbSlotInfoKHR -{ - using struct_type = VkVideoEncodeH265DpbSlotInfoKHR; - - VkVideoEncodeH265DpbSlotInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - StructPointerDecoder* pStdReferenceInfo{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265ProfileInfoKHR -{ - using struct_type = VkVideoEncodeH265ProfileInfoKHR; - - VkVideoEncodeH265ProfileInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265RateControlInfoKHR -{ - using struct_type = VkVideoEncodeH265RateControlInfoKHR; - - VkVideoEncodeH265RateControlInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265FrameSizeKHR -{ - using struct_type = VkVideoEncodeH265FrameSizeKHR; - - VkVideoEncodeH265FrameSizeKHR* decoded_value{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265RateControlLayerInfoKHR -{ - using struct_type = VkVideoEncodeH265RateControlLayerInfoKHR; - - VkVideoEncodeH265RateControlLayerInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - Decoded_VkVideoEncodeH265QpKHR* minQp{ nullptr }; - Decoded_VkVideoEncodeH265QpKHR* maxQp{ nullptr }; - Decoded_VkVideoEncodeH265FrameSizeKHR* maxFrameSize{ nullptr }; -}; - -struct Decoded_VkVideoEncodeH265GopRemainingFrameInfoKHR -{ - using struct_type = VkVideoEncodeH265GopRemainingFrameInfoKHR; - - VkVideoEncodeH265GopRemainingFrameInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - struct Decoded_VkVideoDecodeH264ProfileInfoKHR { using struct_type = VkVideoDecodeH264ProfileInfoKHR; @@ -5331,67 +4843,6 @@ struct Decoded_VkPhysicalDeviceShaderClockFeaturesKHR PNextNode* pNext{ nullptr }; }; -struct Decoded_VkVideoDecodeH265ProfileInfoKHR -{ - using struct_type = VkVideoDecodeH265ProfileInfoKHR; - - VkVideoDecodeH265ProfileInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - -struct Decoded_VkVideoDecodeH265CapabilitiesKHR -{ - using struct_type = VkVideoDecodeH265CapabilitiesKHR; - - VkVideoDecodeH265CapabilitiesKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; -}; - -struct Decoded_VkVideoDecodeH265SessionParametersAddInfoKHR -{ - using struct_type = VkVideoDecodeH265SessionParametersAddInfoKHR; - - VkVideoDecodeH265SessionParametersAddInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - StructPointerDecoder* pStdVPSs{ nullptr }; - StructPointerDecoder* pStdSPSs{ nullptr }; - StructPointerDecoder* pStdPPSs{ nullptr }; -}; - -struct Decoded_VkVideoDecodeH265SessionParametersCreateInfoKHR -{ - using struct_type = VkVideoDecodeH265SessionParametersCreateInfoKHR; - - VkVideoDecodeH265SessionParametersCreateInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - StructPointerDecoder* pParametersAddInfo{ nullptr }; -}; - -struct Decoded_VkVideoDecodeH265PictureInfoKHR -{ - using struct_type = VkVideoDecodeH265PictureInfoKHR; - - VkVideoDecodeH265PictureInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - StructPointerDecoder* pStdPictureInfo{ nullptr }; - PointerDecoder pSliceSegmentOffsets; -}; - -struct Decoded_VkVideoDecodeH265DpbSlotInfoKHR -{ - using struct_type = VkVideoDecodeH265DpbSlotInfoKHR; - - VkVideoDecodeH265DpbSlotInfoKHR* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; - StructPointerDecoder* pStdReferenceInfo{ nullptr }; -}; - struct Decoded_VkFragmentShadingRateAttachmentInfoKHR { using struct_type = VkFragmentShadingRateAttachmentInfoKHR; @@ -5735,6 +5186,15 @@ struct Decoded_VkTraceRaysIndirectCommand2KHR VkTraceRaysIndirectCommand2KHR* decoded_value{ nullptr }; }; +struct Decoded_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR +{ + using struct_type = VkPhysicalDeviceShaderUntypedPointersFeaturesKHR; + + VkPhysicalDeviceShaderUntypedPointersFeaturesKHR* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + struct Decoded_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR { using struct_type = VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR; @@ -6277,70 +5737,135 @@ struct Decoded_VkVideoDecodeVP9PictureInfoKHR struct Decoded_VkPhysicalDeviceVideoMaintenance1FeaturesKHR { - using struct_type = VkPhysicalDeviceVideoMaintenance1FeaturesKHR; + using struct_type = VkPhysicalDeviceVideoMaintenance1FeaturesKHR; + + VkPhysicalDeviceVideoMaintenance1FeaturesKHR* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkVideoInlineQueryInfoKHR +{ + using struct_type = VkVideoInlineQueryInfoKHR; + + VkVideoInlineQueryInfoKHR* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + format::HandleId queryPool{ format::kNullHandleId }; +}; + +struct Decoded_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR +{ + using struct_type = VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR; + + VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkAttachmentFeedbackLoopInfoEXT +{ + using struct_type = VkAttachmentFeedbackLoopInfoEXT; + + VkAttachmentFeedbackLoopInfoEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkCalibratedTimestampInfoKHR +{ + using struct_type = VkCalibratedTimestampInfoKHR; + + VkCalibratedTimestampInfoKHR* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkSetDescriptorBufferOffsetsInfoEXT +{ + using struct_type = VkSetDescriptorBufferOffsetsInfoEXT; + + VkSetDescriptorBufferOffsetsInfoEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + format::HandleId layout{ format::kNullHandleId }; + PointerDecoder pBufferIndices; + PointerDecoder pOffsets; +}; + +struct Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT +{ + using struct_type = VkBindDescriptorBufferEmbeddedSamplersInfoEXT; - VkPhysicalDeviceVideoMaintenance1FeaturesKHR* decoded_value{ nullptr }; + VkBindDescriptorBufferEmbeddedSamplersInfoEXT* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId layout{ format::kNullHandleId }; }; -struct Decoded_VkVideoInlineQueryInfoKHR +struct Decoded_VkStridedDeviceAddressRangeKHR { - using struct_type = VkVideoInlineQueryInfoKHR; + using struct_type = VkStridedDeviceAddressRangeKHR; - VkVideoInlineQueryInfoKHR* decoded_value{ nullptr }; + VkStridedDeviceAddressRangeKHR* decoded_value{ nullptr }; +}; - PNextNode* pNext{ nullptr }; - format::HandleId queryPool{ format::kNullHandleId }; +struct Decoded_VkCopyMemoryIndirectCommandKHR +{ + using struct_type = VkCopyMemoryIndirectCommandKHR; + + VkCopyMemoryIndirectCommandKHR* decoded_value{ nullptr }; }; -struct Decoded_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR +struct Decoded_VkCopyMemoryIndirectInfoKHR { - using struct_type = VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR; + using struct_type = VkCopyMemoryIndirectInfoKHR; - VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* decoded_value{ nullptr }; + VkCopyMemoryIndirectInfoKHR* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + Decoded_VkStridedDeviceAddressRangeKHR* copyAddressRange{ nullptr }; }; -struct Decoded_VkAttachmentFeedbackLoopInfoEXT +struct Decoded_VkCopyMemoryToImageIndirectCommandKHR { - using struct_type = VkAttachmentFeedbackLoopInfoEXT; + using struct_type = VkCopyMemoryToImageIndirectCommandKHR; - VkAttachmentFeedbackLoopInfoEXT* decoded_value{ nullptr }; + VkCopyMemoryToImageIndirectCommandKHR* decoded_value{ nullptr }; - PNextNode* pNext{ nullptr }; + Decoded_VkImageSubresourceLayers* imageSubresource{ nullptr }; + Decoded_VkOffset3D* imageOffset{ nullptr }; + Decoded_VkExtent3D* imageExtent{ nullptr }; }; -struct Decoded_VkCalibratedTimestampInfoKHR +struct Decoded_VkCopyMemoryToImageIndirectInfoKHR { - using struct_type = VkCalibratedTimestampInfoKHR; + using struct_type = VkCopyMemoryToImageIndirectInfoKHR; - VkCalibratedTimestampInfoKHR* decoded_value{ nullptr }; + VkCopyMemoryToImageIndirectInfoKHR* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + Decoded_VkStridedDeviceAddressRangeKHR* copyAddressRange{ nullptr }; + format::HandleId dstImage{ format::kNullHandleId }; + StructPointerDecoder* pImageSubresources{ nullptr }; }; -struct Decoded_VkSetDescriptorBufferOffsetsInfoEXT +struct Decoded_VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR { - using struct_type = VkSetDescriptorBufferOffsetsInfoEXT; + using struct_type = VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR; - VkSetDescriptorBufferOffsetsInfoEXT* decoded_value{ nullptr }; + VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - format::HandleId layout{ format::kNullHandleId }; - PointerDecoder pBufferIndices; - PointerDecoder pOffsets; }; -struct Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT +struct Decoded_VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR { - using struct_type = VkBindDescriptorBufferEmbeddedSamplersInfoEXT; + using struct_type = VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR; - VkBindDescriptorBufferEmbeddedSamplersInfoEXT* decoded_value{ nullptr }; + VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - format::HandleId layout{ format::kNullHandleId }; }; struct Decoded_VkVideoEncodeIntraRefreshCapabilitiesKHR @@ -6540,6 +6065,15 @@ struct Decoded_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR Decoded_VkPhysicalDeviceProperties2* properties{ nullptr }; }; +struct Decoded_VkMemoryBarrierAccessFlags3KHR +{ + using struct_type = VkMemoryBarrierAccessFlags3KHR; + + VkMemoryBarrierAccessFlags3KHR* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + struct Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR { using struct_type = VkPhysicalDeviceMaintenance8FeaturesKHR; @@ -6549,11 +6083,11 @@ struct Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR PNextNode* pNext{ nullptr }; }; -struct Decoded_VkMemoryBarrierAccessFlags3KHR +struct Decoded_VkPhysicalDeviceShaderFmaFeaturesKHR { - using struct_type = VkMemoryBarrierAccessFlags3KHR; + using struct_type = VkPhysicalDeviceShaderFmaFeaturesKHR; - VkMemoryBarrierAccessFlags3KHR* decoded_value{ nullptr }; + VkPhysicalDeviceShaderFmaFeaturesKHR* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; @@ -6585,80 +6119,83 @@ struct Decoded_VkQueueFamilyOwnershipTransferPropertiesKHR PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceVideoMaintenance2FeaturesKHR +struct Decoded_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR { - using struct_type = VkPhysicalDeviceVideoMaintenance2FeaturesKHR; + using struct_type = VkPhysicalDeviceDepthClampZeroOneFeaturesKHR; - VkPhysicalDeviceVideoMaintenance2FeaturesKHR* decoded_value{ nullptr }; + VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkVideoDecodeH264InlineSessionParametersInfoKHR +struct Decoded_VkPhysicalDeviceRobustness2FeaturesKHR { - using struct_type = VkVideoDecodeH264InlineSessionParametersInfoKHR; + using struct_type = VkPhysicalDeviceRobustness2FeaturesKHR; - VkVideoDecodeH264InlineSessionParametersInfoKHR* decoded_value{ nullptr }; + VkPhysicalDeviceRobustness2FeaturesKHR* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pStdSPS{ nullptr }; - StructPointerDecoder* pStdPPS{ nullptr }; }; -struct Decoded_VkVideoDecodeH265InlineSessionParametersInfoKHR +struct Decoded_VkPhysicalDeviceRobustness2PropertiesKHR { - using struct_type = VkVideoDecodeH265InlineSessionParametersInfoKHR; + using struct_type = VkPhysicalDeviceRobustness2PropertiesKHR; - VkVideoDecodeH265InlineSessionParametersInfoKHR* decoded_value{ nullptr }; + VkPhysicalDeviceRobustness2PropertiesKHR* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pStdVPS{ nullptr }; - StructPointerDecoder* pStdSPS{ nullptr }; - StructPointerDecoder* pStdPPS{ nullptr }; }; -struct Decoded_VkVideoDecodeAV1InlineSessionParametersInfoKHR +struct Decoded_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR { - using struct_type = VkVideoDecodeAV1InlineSessionParametersInfoKHR; + using struct_type = VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR; - VkVideoDecodeAV1InlineSessionParametersInfoKHR* decoded_value{ nullptr }; + VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pStdSequenceHeader{ nullptr }; }; -struct Decoded_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR +struct Decoded_VkPhysicalDeviceMaintenance10FeaturesKHR { - using struct_type = VkPhysicalDeviceDepthClampZeroOneFeaturesKHR; + using struct_type = VkPhysicalDeviceMaintenance10FeaturesKHR; - VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* decoded_value{ nullptr }; + VkPhysicalDeviceMaintenance10FeaturesKHR* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceRobustness2FeaturesKHR +struct Decoded_VkPhysicalDeviceMaintenance10PropertiesKHR { - using struct_type = VkPhysicalDeviceRobustness2FeaturesKHR; + using struct_type = VkPhysicalDeviceMaintenance10PropertiesKHR; - VkPhysicalDeviceRobustness2FeaturesKHR* decoded_value{ nullptr }; + VkPhysicalDeviceMaintenance10PropertiesKHR* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceRobustness2PropertiesKHR +struct Decoded_VkRenderingEndInfoKHR { - using struct_type = VkPhysicalDeviceRobustness2PropertiesKHR; + using struct_type = VkRenderingEndInfoKHR; - VkPhysicalDeviceRobustness2PropertiesKHR* decoded_value{ nullptr }; + VkRenderingEndInfoKHR* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR +struct Decoded_VkRenderingAttachmentFlagsInfoKHR { - using struct_type = VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR; + using struct_type = VkRenderingAttachmentFlagsInfoKHR; - VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* decoded_value{ nullptr }; + VkRenderingAttachmentFlagsInfoKHR* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkResolveImageModeInfoKHR +{ + using struct_type = VkResolveImageModeInfoKHR; + + VkResolveImageModeInfoKHR* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; @@ -7984,6 +7521,110 @@ struct Decoded_VkCheckpointData2NV uint64_t pCheckpointMarker{ 0 }; }; +struct Decoded_VkPhysicalDevicePresentTimingFeaturesEXT +{ + using struct_type = VkPhysicalDevicePresentTimingFeaturesEXT; + + VkPhysicalDevicePresentTimingFeaturesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPresentTimingSurfaceCapabilitiesEXT +{ + using struct_type = VkPresentTimingSurfaceCapabilitiesEXT; + + VkPresentTimingSurfaceCapabilitiesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkSwapchainCalibratedTimestampInfoEXT +{ + using struct_type = VkSwapchainCalibratedTimestampInfoEXT; + + VkSwapchainCalibratedTimestampInfoEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + format::HandleId swapchain{ format::kNullHandleId }; +}; + +struct Decoded_VkSwapchainTimingPropertiesEXT +{ + using struct_type = VkSwapchainTimingPropertiesEXT; + + VkSwapchainTimingPropertiesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkSwapchainTimeDomainPropertiesEXT +{ + using struct_type = VkSwapchainTimeDomainPropertiesEXT; + + VkSwapchainTimeDomainPropertiesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + PointerDecoder pTimeDomains; + PointerDecoder pTimeDomainIds; +}; + +struct Decoded_VkPastPresentationTimingInfoEXT +{ + using struct_type = VkPastPresentationTimingInfoEXT; + + VkPastPresentationTimingInfoEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + format::HandleId swapchain{ format::kNullHandleId }; +}; + +struct Decoded_VkPresentStageTimeEXT +{ + using struct_type = VkPresentStageTimeEXT; + + VkPresentStageTimeEXT* decoded_value{ nullptr }; +}; + +struct Decoded_VkPastPresentationTimingEXT +{ + using struct_type = VkPastPresentationTimingEXT; + + VkPastPresentationTimingEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + StructPointerDecoder* pPresentStages{ nullptr }; +}; + +struct Decoded_VkPastPresentationTimingPropertiesEXT +{ + using struct_type = VkPastPresentationTimingPropertiesEXT; + + VkPastPresentationTimingPropertiesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + StructPointerDecoder* pPresentationTimings{ nullptr }; +}; + +struct Decoded_VkPresentTimingInfoEXT +{ + using struct_type = VkPresentTimingInfoEXT; + + VkPresentTimingInfoEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPresentTimingsInfoEXT +{ + using struct_type = VkPresentTimingsInfoEXT; + + VkPresentTimingsInfoEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + StructPointerDecoder* pTimingInfos{ nullptr }; +}; + struct Decoded_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL { using struct_type = VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; @@ -8677,6 +8318,15 @@ struct Decoded_VkPhysicalDeviceCustomBorderColorFeaturesEXT PNextNode* pNext{ nullptr }; }; +struct Decoded_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT +{ + using struct_type = VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT; + + VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + struct Decoded_VkPhysicalDevicePresentBarrierFeaturesNV { using struct_type = VkPhysicalDevicePresentBarrierFeaturesNV; @@ -8699,94 +8349,210 @@ struct Decoded_VkSwapchainPresentBarrierCreateInfoNV { using struct_type = VkSwapchainPresentBarrierCreateInfoNV; - VkSwapchainPresentBarrierCreateInfoNV* decoded_value{ nullptr }; + VkSwapchainPresentBarrierCreateInfoNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceDiagnosticsConfigFeaturesNV +{ + using struct_type = VkPhysicalDeviceDiagnosticsConfigFeaturesNV; + + VkPhysicalDeviceDiagnosticsConfigFeaturesNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkDeviceDiagnosticsConfigCreateInfoNV +{ + using struct_type = VkDeviceDiagnosticsConfigCreateInfoNV; + + VkDeviceDiagnosticsConfigCreateInfoNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceTileShadingFeaturesQCOM +{ + using struct_type = VkPhysicalDeviceTileShadingFeaturesQCOM; + + VkPhysicalDeviceTileShadingFeaturesQCOM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceTileShadingPropertiesQCOM +{ + using struct_type = VkPhysicalDeviceTileShadingPropertiesQCOM; + + VkPhysicalDeviceTileShadingPropertiesQCOM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + Decoded_VkExtent2D* tileGranularity{ nullptr }; + Decoded_VkExtent2D* maxTileShadingRate{ nullptr }; +}; + +struct Decoded_VkRenderPassTileShadingCreateInfoQCOM +{ + using struct_type = VkRenderPassTileShadingCreateInfoQCOM; + + VkRenderPassTileShadingCreateInfoQCOM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + Decoded_VkExtent2D* tileApronSize{ nullptr }; +}; + +struct Decoded_VkPerTileBeginInfoQCOM +{ + using struct_type = VkPerTileBeginInfoQCOM; + + VkPerTileBeginInfoQCOM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPerTileEndInfoQCOM +{ + using struct_type = VkPerTileEndInfoQCOM; + + VkPerTileEndInfoQCOM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkDispatchTileInfoQCOM +{ + using struct_type = VkDispatchTileInfoQCOM; + + VkDispatchTileInfoQCOM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkQueryLowLatencySupportNV +{ + using struct_type = VkQueryLowLatencySupportNV; + + VkQueryLowLatencySupportNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + uint64_t pQueriedLowLatencyData{ 0 }; +}; + +struct Decoded_VkPhysicalDeviceDescriptorBufferPropertiesEXT +{ + using struct_type = VkPhysicalDeviceDescriptorBufferPropertiesEXT; + + VkPhysicalDeviceDescriptorBufferPropertiesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT +{ + using struct_type = VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT; + + VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceDescriptorBufferFeaturesEXT +{ + using struct_type = VkPhysicalDeviceDescriptorBufferFeaturesEXT; + + VkPhysicalDeviceDescriptorBufferFeaturesEXT* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceDiagnosticsConfigFeaturesNV +struct Decoded_VkDescriptorAddressInfoEXT { - using struct_type = VkPhysicalDeviceDiagnosticsConfigFeaturesNV; + using struct_type = VkDescriptorAddressInfoEXT; - VkPhysicalDeviceDiagnosticsConfigFeaturesNV* decoded_value{ nullptr }; + VkDescriptorAddressInfoEXT* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkDeviceDiagnosticsConfigCreateInfoNV +struct Decoded_VkDescriptorBufferBindingInfoEXT { - using struct_type = VkDeviceDiagnosticsConfigCreateInfoNV; + using struct_type = VkDescriptorBufferBindingInfoEXT; - VkDeviceDiagnosticsConfigCreateInfoNV* decoded_value{ nullptr }; + VkDescriptorBufferBindingInfoEXT* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceTileShadingFeaturesQCOM +struct Decoded_VkDescriptorBufferBindingPushDescriptorBufferHandleEXT { - using struct_type = VkPhysicalDeviceTileShadingFeaturesQCOM; + using struct_type = VkDescriptorBufferBindingPushDescriptorBufferHandleEXT; - VkPhysicalDeviceTileShadingFeaturesQCOM* decoded_value{ nullptr }; + VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId buffer{ format::kNullHandleId }; }; -struct Decoded_VkPhysicalDeviceTileShadingPropertiesQCOM +struct Decoded_VkBufferCaptureDescriptorDataInfoEXT { - using struct_type = VkPhysicalDeviceTileShadingPropertiesQCOM; + using struct_type = VkBufferCaptureDescriptorDataInfoEXT; - VkPhysicalDeviceTileShadingPropertiesQCOM* decoded_value{ nullptr }; + VkBufferCaptureDescriptorDataInfoEXT* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - Decoded_VkExtent2D* tileGranularity{ nullptr }; - Decoded_VkExtent2D* maxTileShadingRate{ nullptr }; + format::HandleId buffer{ format::kNullHandleId }; }; -struct Decoded_VkRenderPassTileShadingCreateInfoQCOM +struct Decoded_VkImageCaptureDescriptorDataInfoEXT { - using struct_type = VkRenderPassTileShadingCreateInfoQCOM; + using struct_type = VkImageCaptureDescriptorDataInfoEXT; - VkRenderPassTileShadingCreateInfoQCOM* decoded_value{ nullptr }; + VkImageCaptureDescriptorDataInfoEXT* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - Decoded_VkExtent2D* tileApronSize{ nullptr }; + format::HandleId image{ format::kNullHandleId }; }; -struct Decoded_VkPerTileBeginInfoQCOM +struct Decoded_VkImageViewCaptureDescriptorDataInfoEXT { - using struct_type = VkPerTileBeginInfoQCOM; + using struct_type = VkImageViewCaptureDescriptorDataInfoEXT; - VkPerTileBeginInfoQCOM* decoded_value{ nullptr }; + VkImageViewCaptureDescriptorDataInfoEXT* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId imageView{ format::kNullHandleId }; }; -struct Decoded_VkPerTileEndInfoQCOM +struct Decoded_VkSamplerCaptureDescriptorDataInfoEXT { - using struct_type = VkPerTileEndInfoQCOM; + using struct_type = VkSamplerCaptureDescriptorDataInfoEXT; - VkPerTileEndInfoQCOM* decoded_value{ nullptr }; + VkSamplerCaptureDescriptorDataInfoEXT* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId sampler{ format::kNullHandleId }; }; -struct Decoded_VkDispatchTileInfoQCOM +struct Decoded_VkOpaqueCaptureDescriptorDataCreateInfoEXT { - using struct_type = VkDispatchTileInfoQCOM; + using struct_type = VkOpaqueCaptureDescriptorDataCreateInfoEXT; - VkDispatchTileInfoQCOM* decoded_value{ nullptr }; + VkOpaqueCaptureDescriptorDataCreateInfoEXT* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + uint64_t opaqueCaptureDescriptorData{ 0 }; }; -struct Decoded_VkQueryLowLatencySupportNV +struct Decoded_VkAccelerationStructureCaptureDescriptorDataInfoEXT { - using struct_type = VkQueryLowLatencySupportNV; + using struct_type = VkAccelerationStructureCaptureDescriptorDataInfoEXT; - VkQueryLowLatencySupportNV* decoded_value{ nullptr }; + VkAccelerationStructureCaptureDescriptorDataInfoEXT* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - uint64_t pQueriedLowLatencyData{ 0 }; + format::HandleId accelerationStructure{ format::kNullHandleId }; + format::HandleId accelerationStructureNV{ format::kNullHandleId }; }; struct Decoded_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT @@ -9356,6 +9122,42 @@ struct Decoded_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT PNextNode* pNext{ nullptr }; }; +struct Decoded_VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE +{ + using struct_type = VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE; + + VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkVideoEncodeRgbConversionCapabilitiesVALVE +{ + using struct_type = VkVideoEncodeRgbConversionCapabilitiesVALVE; + + VkVideoEncodeRgbConversionCapabilitiesVALVE* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkVideoEncodeProfileRgbConversionInfoVALVE +{ + using struct_type = VkVideoEncodeProfileRgbConversionInfoVALVE; + + VkVideoEncodeProfileRgbConversionInfoVALVE* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkVideoEncodeSessionRgbConversionCreateInfoVALVE +{ + using struct_type = VkVideoEncodeSessionRgbConversionCreateInfoVALVE; + + VkVideoEncodeSessionRgbConversionCreateInfoVALVE* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + struct Decoded_VkPhysicalDeviceImageViewMinLodFeaturesEXT { using struct_type = VkPhysicalDeviceImageViewMinLodFeaturesEXT; @@ -10299,261 +10101,465 @@ struct Decoded_VkPhysicalDeviceAmigoProfilingFeaturesSEC { using struct_type = VkPhysicalDeviceAmigoProfilingFeaturesSEC; - VkPhysicalDeviceAmigoProfilingFeaturesSEC* decoded_value{ nullptr }; + VkPhysicalDeviceAmigoProfilingFeaturesSEC* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkAmigoProfilingSubmitInfoSEC +{ + using struct_type = VkAmigoProfilingSubmitInfoSEC; + + VkAmigoProfilingSubmitInfoSEC* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM +{ + using struct_type = VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM; + + VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV +{ + using struct_type = VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV; + + VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV +{ + using struct_type = VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV; + + VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceCooperativeVectorPropertiesNV +{ + using struct_type = VkPhysicalDeviceCooperativeVectorPropertiesNV; + + VkPhysicalDeviceCooperativeVectorPropertiesNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceCooperativeVectorFeaturesNV +{ + using struct_type = VkPhysicalDeviceCooperativeVectorFeaturesNV; + + VkPhysicalDeviceCooperativeVectorFeaturesNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkCooperativeVectorPropertiesNV +{ + using struct_type = VkCooperativeVectorPropertiesNV; + + VkCooperativeVectorPropertiesNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkConvertCooperativeVectorMatrixInfoNV +{ + using struct_type = VkConvertCooperativeVectorMatrixInfoNV; + + VkConvertCooperativeVectorMatrixInfoNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + Decoded_VkDeviceOrHostAddressConstKHR* srcData{ nullptr }; + PointerDecoder pDstSize; + Decoded_VkDeviceOrHostAddressKHR* dstData{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV +{ + using struct_type = VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV; + + VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV +{ + using struct_type = VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV; + + VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT +{ + using struct_type = VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT; + + VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT +{ + using struct_type = VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT; + + VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkLayerSettingsCreateInfoEXT +{ + using struct_type = VkLayerSettingsCreateInfoEXT; + + VkLayerSettingsCreateInfoEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + StructPointerDecoder* pSettings{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM +{ + using struct_type = VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM; + + VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM +{ + using struct_type = VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM; + + VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT +{ + using struct_type = VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT; + + VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT +{ + using struct_type = VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT; + + VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkLatencySleepModeInfoNV +{ + using struct_type = VkLatencySleepModeInfoNV; + + VkLatencySleepModeInfoNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkLatencySleepInfoNV +{ + using struct_type = VkLatencySleepInfoNV; + + VkLatencySleepInfoNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + format::HandleId signalSemaphore{ format::kNullHandleId }; +}; + +struct Decoded_VkSetLatencyMarkerInfoNV +{ + using struct_type = VkSetLatencyMarkerInfoNV; + + VkSetLatencyMarkerInfoNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkLatencyTimingsFrameReportNV +{ + using struct_type = VkLatencyTimingsFrameReportNV; + + VkLatencyTimingsFrameReportNV* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkAmigoProfilingSubmitInfoSEC +struct Decoded_VkGetLatencyMarkerInfoNV { - using struct_type = VkAmigoProfilingSubmitInfoSEC; + using struct_type = VkGetLatencyMarkerInfoNV; - VkAmigoProfilingSubmitInfoSEC* decoded_value{ nullptr }; + VkGetLatencyMarkerInfoNV* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + StructPointerDecoder* pTimings{ nullptr }; }; -struct Decoded_VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM +struct Decoded_VkLatencySubmissionPresentIdNV { - using struct_type = VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM; + using struct_type = VkLatencySubmissionPresentIdNV; - VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* decoded_value{ nullptr }; + VkLatencySubmissionPresentIdNV* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV +struct Decoded_VkSwapchainLatencyCreateInfoNV { - using struct_type = VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV; + using struct_type = VkSwapchainLatencyCreateInfoNV; - VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* decoded_value{ nullptr }; + VkSwapchainLatencyCreateInfoNV* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV +struct Decoded_VkOutOfBandQueueTypeInfoNV { - using struct_type = VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV; + using struct_type = VkOutOfBandQueueTypeInfoNV; - VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* decoded_value{ nullptr }; + VkOutOfBandQueueTypeInfoNV* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceCooperativeVectorPropertiesNV +struct Decoded_VkLatencySurfaceCapabilitiesNV { - using struct_type = VkPhysicalDeviceCooperativeVectorPropertiesNV; + using struct_type = VkLatencySurfaceCapabilitiesNV; - VkPhysicalDeviceCooperativeVectorPropertiesNV* decoded_value{ nullptr }; + VkLatencySurfaceCapabilitiesNV* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + PointerDecoder pPresentModes; }; -struct Decoded_VkPhysicalDeviceCooperativeVectorFeaturesNV +struct Decoded_VkPhysicalDeviceDataGraphFeaturesARM { - using struct_type = VkPhysicalDeviceCooperativeVectorFeaturesNV; + using struct_type = VkPhysicalDeviceDataGraphFeaturesARM; - VkPhysicalDeviceCooperativeVectorFeaturesNV* decoded_value{ nullptr }; + VkPhysicalDeviceDataGraphFeaturesARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkCooperativeVectorPropertiesNV +struct Decoded_VkDataGraphPipelineConstantARM { - using struct_type = VkCooperativeVectorPropertiesNV; + using struct_type = VkDataGraphPipelineConstantARM; - VkCooperativeVectorPropertiesNV* decoded_value{ nullptr }; + VkDataGraphPipelineConstantARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + uint64_t pConstantData{ 0 }; }; -struct Decoded_VkConvertCooperativeVectorMatrixInfoNV +struct Decoded_VkDataGraphPipelineResourceInfoARM { - using struct_type = VkConvertCooperativeVectorMatrixInfoNV; + using struct_type = VkDataGraphPipelineResourceInfoARM; - VkConvertCooperativeVectorMatrixInfoNV* decoded_value{ nullptr }; + VkDataGraphPipelineResourceInfoARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - Decoded_VkDeviceOrHostAddressConstKHR* srcData{ nullptr }; - PointerDecoder pDstSize; - Decoded_VkDeviceOrHostAddressKHR* dstData{ nullptr }; }; -struct Decoded_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV +struct Decoded_VkDataGraphPipelineCompilerControlCreateInfoARM { - using struct_type = VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV; + using struct_type = VkDataGraphPipelineCompilerControlCreateInfoARM; - VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* decoded_value{ nullptr }; + VkDataGraphPipelineCompilerControlCreateInfoARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + StringDecoder pVendorOptions; }; -struct Decoded_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV +struct Decoded_VkDataGraphPipelineCreateInfoARM { - using struct_type = VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV; + using struct_type = VkDataGraphPipelineCreateInfoARM; - VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* decoded_value{ nullptr }; + VkDataGraphPipelineCreateInfoARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId layout{ format::kNullHandleId }; + StructPointerDecoder* pResourceInfos{ nullptr }; }; -struct Decoded_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT +struct Decoded_VkDataGraphPipelineShaderModuleCreateInfoARM { - using struct_type = VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT; + using struct_type = VkDataGraphPipelineShaderModuleCreateInfoARM; - VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* decoded_value{ nullptr }; + VkDataGraphPipelineShaderModuleCreateInfoARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId module{ format::kNullHandleId }; + StringDecoder pName; + StructPointerDecoder* pSpecializationInfo{ nullptr }; + StructPointerDecoder* pConstants{ nullptr }; }; -struct Decoded_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT +struct Decoded_VkDataGraphPipelineSessionCreateInfoARM { - using struct_type = VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT; + using struct_type = VkDataGraphPipelineSessionCreateInfoARM; - VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* decoded_value{ nullptr }; + VkDataGraphPipelineSessionCreateInfoARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId dataGraphPipeline{ format::kNullHandleId }; }; -struct Decoded_VkLayerSettingEXT +struct Decoded_VkDataGraphPipelineSessionBindPointRequirementsInfoARM { - using struct_type = VkLayerSettingEXT; + using struct_type = VkDataGraphPipelineSessionBindPointRequirementsInfoARM; - VkLayerSettingEXT* decoded_value{ nullptr }; + VkDataGraphPipelineSessionBindPointRequirementsInfoARM* decoded_value{ nullptr }; - StringDecoder pLayerName; - StringDecoder pSettingName; - PointerDecoder pValues; + PNextNode* pNext{ nullptr }; + format::HandleId session{ format::kNullHandleId }; }; -struct Decoded_VkLayerSettingsCreateInfoEXT +struct Decoded_VkDataGraphPipelineSessionBindPointRequirementARM { - using struct_type = VkLayerSettingsCreateInfoEXT; + using struct_type = VkDataGraphPipelineSessionBindPointRequirementARM; - VkLayerSettingsCreateInfoEXT* decoded_value{ nullptr }; + VkDataGraphPipelineSessionBindPointRequirementARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pSettings{ nullptr }; }; -struct Decoded_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM +struct Decoded_VkDataGraphPipelineSessionMemoryRequirementsInfoARM { - using struct_type = VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM; + using struct_type = VkDataGraphPipelineSessionMemoryRequirementsInfoARM; - VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* decoded_value{ nullptr }; + VkDataGraphPipelineSessionMemoryRequirementsInfoARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId session{ format::kNullHandleId }; }; -struct Decoded_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM +struct Decoded_VkBindDataGraphPipelineSessionMemoryInfoARM { - using struct_type = VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM; + using struct_type = VkBindDataGraphPipelineSessionMemoryInfoARM; - VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* decoded_value{ nullptr }; + VkBindDataGraphPipelineSessionMemoryInfoARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId session{ format::kNullHandleId }; + format::HandleId memory{ format::kNullHandleId }; }; -struct Decoded_VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT +struct Decoded_VkDataGraphPipelineInfoARM { - using struct_type = VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT; + using struct_type = VkDataGraphPipelineInfoARM; - VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* decoded_value{ nullptr }; + VkDataGraphPipelineInfoARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + format::HandleId dataGraphPipeline{ format::kNullHandleId }; }; -struct Decoded_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT +struct Decoded_VkDataGraphPipelinePropertyQueryResultARM { - using struct_type = VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT; + using struct_type = VkDataGraphPipelinePropertyQueryResultARM; - VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* decoded_value{ nullptr }; + VkDataGraphPipelinePropertyQueryResultARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + PointerDecoder pData; }; -struct Decoded_VkLatencySleepModeInfoNV +struct Decoded_VkDataGraphPipelineIdentifierCreateInfoARM { - using struct_type = VkLatencySleepModeInfoNV; + using struct_type = VkDataGraphPipelineIdentifierCreateInfoARM; - VkLatencySleepModeInfoNV* decoded_value{ nullptr }; + VkDataGraphPipelineIdentifierCreateInfoARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + PointerDecoder pIdentifier; }; -struct Decoded_VkLatencySleepInfoNV +struct Decoded_VkDataGraphPipelineDispatchInfoARM { - using struct_type = VkLatencySleepInfoNV; + using struct_type = VkDataGraphPipelineDispatchInfoARM; - VkLatencySleepInfoNV* decoded_value{ nullptr }; + VkDataGraphPipelineDispatchInfoARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - format::HandleId signalSemaphore{ format::kNullHandleId }; }; -struct Decoded_VkSetLatencyMarkerInfoNV +struct Decoded_VkPhysicalDeviceDataGraphProcessingEngineARM { - using struct_type = VkSetLatencyMarkerInfoNV; + using struct_type = VkPhysicalDeviceDataGraphProcessingEngineARM; - VkSetLatencyMarkerInfoNV* decoded_value{ nullptr }; - - PNextNode* pNext{ nullptr }; + VkPhysicalDeviceDataGraphProcessingEngineARM* decoded_value{ nullptr }; }; -struct Decoded_VkLatencyTimingsFrameReportNV +struct Decoded_VkPhysicalDeviceDataGraphOperationSupportARM { - using struct_type = VkLatencyTimingsFrameReportNV; + using struct_type = VkPhysicalDeviceDataGraphOperationSupportARM; - VkLatencyTimingsFrameReportNV* decoded_value{ nullptr }; + VkPhysicalDeviceDataGraphOperationSupportARM* decoded_value{ nullptr }; - PNextNode* pNext{ nullptr }; + StringDecoder name; }; -struct Decoded_VkGetLatencyMarkerInfoNV +struct Decoded_VkQueueFamilyDataGraphPropertiesARM { - using struct_type = VkGetLatencyMarkerInfoNV; + using struct_type = VkQueueFamilyDataGraphPropertiesARM; - VkGetLatencyMarkerInfoNV* decoded_value{ nullptr }; + VkQueueFamilyDataGraphPropertiesARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - StructPointerDecoder* pTimings{ nullptr }; + Decoded_VkPhysicalDeviceDataGraphProcessingEngineARM* engine{ nullptr }; + Decoded_VkPhysicalDeviceDataGraphOperationSupportARM* operation{ nullptr }; }; -struct Decoded_VkLatencySubmissionPresentIdNV +struct Decoded_VkDataGraphProcessingEngineCreateInfoARM { - using struct_type = VkLatencySubmissionPresentIdNV; + using struct_type = VkDataGraphProcessingEngineCreateInfoARM; - VkLatencySubmissionPresentIdNV* decoded_value{ nullptr }; + VkDataGraphProcessingEngineCreateInfoARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; + StructPointerDecoder* pProcessingEngines{ nullptr }; }; -struct Decoded_VkSwapchainLatencyCreateInfoNV +struct Decoded_VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM { - using struct_type = VkSwapchainLatencyCreateInfoNV; + using struct_type = VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM; - VkSwapchainLatencyCreateInfoNV* decoded_value{ nullptr }; + VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkOutOfBandQueueTypeInfoNV +struct Decoded_VkQueueFamilyDataGraphProcessingEnginePropertiesARM { - using struct_type = VkOutOfBandQueueTypeInfoNV; + using struct_type = VkQueueFamilyDataGraphProcessingEnginePropertiesARM; - VkOutOfBandQueueTypeInfoNV* decoded_value{ nullptr }; + VkQueueFamilyDataGraphProcessingEnginePropertiesARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkLatencySurfaceCapabilitiesNV +struct Decoded_VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM { - using struct_type = VkLatencySurfaceCapabilitiesNV; + using struct_type = VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM; - VkLatencySurfaceCapabilitiesNV* decoded_value{ nullptr }; + VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; - PointerDecoder pPresentModes; }; struct Decoded_VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM @@ -10740,6 +10746,41 @@ struct Decoded_VkTileMemorySizeInfoQCOM PNextNode* pNext{ nullptr }; }; +struct Decoded_VkDecompressMemoryRegionEXT +{ + using struct_type = VkDecompressMemoryRegionEXT; + + VkDecompressMemoryRegionEXT* decoded_value{ nullptr }; +}; + +struct Decoded_VkDecompressMemoryInfoEXT +{ + using struct_type = VkDecompressMemoryInfoEXT; + + VkDecompressMemoryInfoEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + StructPointerDecoder* pRegions{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceMemoryDecompressionFeaturesEXT +{ + using struct_type = VkPhysicalDeviceMemoryDecompressionFeaturesEXT; + + VkPhysicalDeviceMemoryDecompressionFeaturesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceMemoryDecompressionPropertiesEXT +{ + using struct_type = VkPhysicalDeviceMemoryDecompressionPropertiesEXT; + + VkPhysicalDeviceMemoryDecompressionPropertiesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + struct Decoded_VkDisplaySurfaceStereoCreateInfoNV { using struct_type = VkDisplaySurfaceStereoCreateInfoNV; @@ -11120,6 +11161,24 @@ struct Decoded_VkImageAlignmentControlCreateInfoMESA PNextNode* pNext{ nullptr }; }; +struct Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT +{ + using struct_type = VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT; + + VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT +{ + using struct_type = VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT; + + VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + struct Decoded_VkPhysicalDeviceDepthClampControlFeaturesEXT { using struct_type = VkPhysicalDeviceDepthClampControlFeaturesEXT; @@ -11223,6 +11282,55 @@ struct Decoded_VkMemoryGetMetalHandleInfoEXT format::HandleId memory{ format::kNullHandleId }; }; +struct Decoded_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM +{ + using struct_type = VkPhysicalDevicePerformanceCountersByRegionFeaturesARM; + + VkPhysicalDevicePerformanceCountersByRegionFeaturesARM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM +{ + using struct_type = VkPhysicalDevicePerformanceCountersByRegionPropertiesARM; + + VkPhysicalDevicePerformanceCountersByRegionPropertiesARM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + Decoded_VkExtent2D* performanceCounterRegionSize{ nullptr }; +}; + +struct Decoded_VkPerformanceCounterARM +{ + using struct_type = VkPerformanceCounterARM; + + VkPerformanceCounterARM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPerformanceCounterDescriptionARM +{ + using struct_type = VkPerformanceCounterDescriptionARM; + + VkPerformanceCounterDescriptionARM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + StringDecoder name; +}; + +struct Decoded_VkRenderPassPerformanceCountersByRegionBeginInfoARM +{ + using struct_type = VkRenderPassPerformanceCountersByRegionBeginInfoARM; + + VkRenderPassPerformanceCountersByRegionBeginInfoARM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + PointerDecoder pCounterAddresses; + PointerDecoder pCounterIndices; +}; + struct Decoded_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT { using struct_type = VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT; @@ -11286,20 +11394,94 @@ struct Decoded_VkPhysicalDevicePresentMeteringFeaturesNV PNextNode* pNext{ nullptr }; }; -struct Decoded_VkRenderingEndInfoEXT +struct Decoded_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT { - using struct_type = VkRenderingEndInfoEXT; + using struct_type = VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT; - VkRenderingEndInfoEXT* decoded_value{ nullptr }; + VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; -struct Decoded_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT +struct Decoded_VkPhysicalDeviceShader64BitIndexingFeaturesEXT { - using struct_type = VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT; + using struct_type = VkPhysicalDeviceShader64BitIndexingFeaturesEXT; - VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* decoded_value{ nullptr }; + VkPhysicalDeviceShader64BitIndexingFeaturesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceCustomResolveFeaturesEXT +{ + using struct_type = VkPhysicalDeviceCustomResolveFeaturesEXT; + + VkPhysicalDeviceCustomResolveFeaturesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkBeginCustomResolveInfoEXT +{ + using struct_type = VkBeginCustomResolveInfoEXT; + + VkBeginCustomResolveInfoEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkCustomResolveCreateInfoEXT +{ + using struct_type = VkCustomResolveCreateInfoEXT; + + VkCustomResolveCreateInfoEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + PointerDecoder pColorAttachmentFormats; +}; + +struct Decoded_VkPipelineCacheHeaderVersionDataGraphQCOM +{ + using struct_type = VkPipelineCacheHeaderVersionDataGraphQCOM; + + VkPipelineCacheHeaderVersionDataGraphQCOM* decoded_value{ nullptr }; + + PointerDecoder toolchainVersion; +}; + +struct Decoded_VkDataGraphPipelineBuiltinModelCreateInfoQCOM +{ + using struct_type = VkDataGraphPipelineBuiltinModelCreateInfoQCOM; + + VkDataGraphPipelineBuiltinModelCreateInfoQCOM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; + StructPointerDecoder* pOperation{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceDataGraphModelFeaturesQCOM +{ + using struct_type = VkPhysicalDeviceDataGraphModelFeaturesQCOM; + + VkPhysicalDeviceDataGraphModelFeaturesQCOM* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceShaderLongVectorFeaturesEXT +{ + using struct_type = VkPhysicalDeviceShaderLongVectorFeaturesEXT; + + VkPhysicalDeviceShaderLongVectorFeaturesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceShaderLongVectorPropertiesEXT +{ + using struct_type = VkPhysicalDeviceShaderLongVectorPropertiesEXT; + + VkPhysicalDeviceShaderLongVectorPropertiesEXT* decoded_value{ nullptr }; PNextNode* pNext{ nullptr }; }; @@ -11313,6 +11495,33 @@ struct Decoded_VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC PNextNode* pNext{ nullptr }; }; +struct Decoded_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT +{ + using struct_type = VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT; + + VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkComputeOccupancyPriorityParametersNV +{ + using struct_type = VkComputeOccupancyPriorityParametersNV; + + VkComputeOccupancyPriorityParametersNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + +struct Decoded_VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV +{ + using struct_type = VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV; + + VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV* decoded_value{ nullptr }; + + PNextNode* pNext{ nullptr }; +}; + struct Decoded_VkAccelerationStructureBuildRangeInfoKHR { using struct_type = VkAccelerationStructureBuildRangeInfoKHR; @@ -12074,6 +12283,8 @@ typedef Decoded_VkPhysicalDevicePipelineProtectedAccessFeatures Decoded_VkPhysic typedef Decoded_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo Decoded_VkShaderRequiredSubgroupSizeCreateInfoEXT; +typedef Decoded_VkRenderingEndInfoKHR Decoded_VkRenderingEndInfoEXT; + GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_decoders_forward.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_decoders_forward.h index 2bed77c81..0570350b0 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_decoders_forward.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_decoders_forward.h @@ -69,40 +69,6 @@ struct Decoded_StdVideoEncodeH264ReferenceListsInfo; struct Decoded_StdVideoEncodeH264PictureInfo; struct Decoded_StdVideoEncodeH264ReferenceInfo; struct Decoded_StdVideoEncodeH264SliceHeader; -struct Decoded_StdVideoH265ProfileTierLevelFlags; -struct Decoded_StdVideoH265ProfileTierLevel; -struct Decoded_StdVideoH265DecPicBufMgr; -struct Decoded_StdVideoH265SubLayerHrdParameters; -struct Decoded_StdVideoH265HrdFlags; -struct Decoded_StdVideoH265HrdParameters; -struct Decoded_StdVideoH265VpsFlags; -struct Decoded_StdVideoH265VideoParameterSet; -struct Decoded_StdVideoH265ScalingLists; -struct Decoded_StdVideoH265ShortTermRefPicSetFlags; -struct Decoded_StdVideoH265ShortTermRefPicSet; -struct Decoded_StdVideoH265LongTermRefPicsSps; -struct Decoded_StdVideoH265SpsVuiFlags; -struct Decoded_StdVideoH265SequenceParameterSetVui; -struct Decoded_StdVideoH265PredictorPaletteEntries; -struct Decoded_StdVideoH265SpsFlags; -struct Decoded_StdVideoH265SequenceParameterSet; -struct Decoded_StdVideoH265PpsFlags; -struct Decoded_StdVideoH265PictureParameterSet; -struct Decoded_StdVideoDecodeH265PictureInfoFlags; -struct Decoded_StdVideoDecodeH265PictureInfo; -struct Decoded_StdVideoDecodeH265ReferenceInfoFlags; -struct Decoded_StdVideoDecodeH265ReferenceInfo; -struct Decoded_StdVideoEncodeH265WeightTableFlags; -struct Decoded_StdVideoEncodeH265WeightTable; -struct Decoded_StdVideoEncodeH265LongTermRefPics; -struct Decoded_StdVideoEncodeH265SliceSegmentHeaderFlags; -struct Decoded_StdVideoEncodeH265SliceSegmentHeader; -struct Decoded_StdVideoEncodeH265ReferenceListsInfoFlags; -struct Decoded_StdVideoEncodeH265ReferenceListsInfo; -struct Decoded_StdVideoEncodeH265PictureInfoFlags; -struct Decoded_StdVideoEncodeH265PictureInfo; -struct Decoded_StdVideoEncodeH265ReferenceInfoFlags; -struct Decoded_StdVideoEncodeH265ReferenceInfo; struct Decoded_StdVideoVP9ColorConfigFlags; struct Decoded_StdVideoVP9ColorConfig; struct Decoded_StdVideoVP9LoopFilterFlags; @@ -147,13 +113,9 @@ struct Decoded_VkOffset2D; struct Decoded_VkOffset3D; struct Decoded_VkRect2D; struct Decoded_VkBufferMemoryBarrier; -struct Decoded_VkDispatchIndirectCommand; -struct Decoded_VkDrawIndexedIndirectCommand; -struct Decoded_VkDrawIndirectCommand; struct Decoded_VkImageSubresourceRange; struct Decoded_VkImageMemoryBarrier; struct Decoded_VkMemoryBarrier; -struct Decoded_VkPipelineCacheHeaderVersionOne; struct Decoded_VkAllocationCallbacks; struct Decoded_VkApplicationInfo; struct Decoded_VkFormatProperties; @@ -186,20 +148,42 @@ struct Decoded_VkSparseImageFormatProperties; struct Decoded_VkSparseImageMemoryRequirements; struct Decoded_VkFenceCreateInfo; struct Decoded_VkSemaphoreCreateInfo; -struct Decoded_VkEventCreateInfo; struct Decoded_VkQueryPoolCreateInfo; struct Decoded_VkBufferCreateInfo; -struct Decoded_VkBufferViewCreateInfo; struct Decoded_VkImageCreateInfo; struct Decoded_VkSubresourceLayout; struct Decoded_VkComponentMapping; struct Decoded_VkImageViewCreateInfo; +struct Decoded_VkCommandPoolCreateInfo; +struct Decoded_VkCommandBufferAllocateInfo; +struct Decoded_VkCommandBufferInheritanceInfo; +struct Decoded_VkCommandBufferBeginInfo; +struct Decoded_VkBufferCopy; +struct Decoded_VkImageSubresourceLayers; +struct Decoded_VkBufferImageCopy; +struct Decoded_VkImageCopy; +struct Decoded_VkDispatchIndirectCommand; +struct Decoded_VkPipelineCacheHeaderVersionOne; +struct Decoded_VkEventCreateInfo; +struct Decoded_VkBufferViewCreateInfo; struct Decoded_VkShaderModuleCreateInfo; struct Decoded_VkPipelineCacheCreateInfo; struct Decoded_VkSpecializationMapEntry; struct Decoded_VkSpecializationInfo; struct Decoded_VkPipelineShaderStageCreateInfo; struct Decoded_VkComputePipelineCreateInfo; +struct Decoded_VkPushConstantRange; +struct Decoded_VkPipelineLayoutCreateInfo; +struct Decoded_VkSamplerCreateInfo; +struct Decoded_VkCopyDescriptorSet; +struct Decoded_VkDescriptorBufferInfo; +struct Decoded_VkDescriptorPoolSize; +struct Decoded_VkDescriptorPoolCreateInfo; +struct Decoded_VkDescriptorSetAllocateInfo; +struct Decoded_VkDescriptorSetLayoutBinding; +struct Decoded_VkDescriptorSetLayoutCreateInfo; +struct Decoded_VkDrawIndexedIndirectCommand; +struct Decoded_VkDrawIndirectCommand; struct Decoded_VkVertexInputBindingDescription; struct Decoded_VkVertexInputAttributeDescription; struct Decoded_VkPipelineVertexInputStateCreateInfo; @@ -215,44 +199,23 @@ struct Decoded_VkPipelineColorBlendAttachmentState; struct Decoded_VkPipelineColorBlendStateCreateInfo; struct Decoded_VkPipelineDynamicStateCreateInfo; struct Decoded_VkGraphicsPipelineCreateInfo; -struct Decoded_VkPushConstantRange; -struct Decoded_VkPipelineLayoutCreateInfo; -struct Decoded_VkSamplerCreateInfo; -struct Decoded_VkCopyDescriptorSet; -struct Decoded_VkDescriptorBufferInfo; -struct Decoded_VkDescriptorPoolSize; -struct Decoded_VkDescriptorPoolCreateInfo; -struct Decoded_VkDescriptorSetAllocateInfo; -struct Decoded_VkDescriptorSetLayoutBinding; -struct Decoded_VkDescriptorSetLayoutCreateInfo; struct Decoded_VkAttachmentDescription; struct Decoded_VkAttachmentReference; struct Decoded_VkFramebufferCreateInfo; struct Decoded_VkSubpassDescription; struct Decoded_VkSubpassDependency; struct Decoded_VkRenderPassCreateInfo; -struct Decoded_VkCommandPoolCreateInfo; -struct Decoded_VkCommandBufferAllocateInfo; -struct Decoded_VkCommandBufferInheritanceInfo; -struct Decoded_VkCommandBufferBeginInfo; -struct Decoded_VkBufferCopy; -struct Decoded_VkImageSubresourceLayers; -struct Decoded_VkBufferImageCopy; struct Decoded_VkClearDepthStencilValue; struct Decoded_VkClearAttachment; struct Decoded_VkClearRect; struct Decoded_VkImageBlit; -struct Decoded_VkImageCopy; struct Decoded_VkImageResolve; struct Decoded_VkRenderPassBeginInfo; -struct Decoded_VkPhysicalDeviceSubgroupProperties; struct Decoded_VkBindBufferMemoryInfo; struct Decoded_VkBindImageMemoryInfo; -struct Decoded_VkPhysicalDevice16BitStorageFeatures; struct Decoded_VkMemoryDedicatedRequirements; struct Decoded_VkMemoryDedicatedAllocateInfo; struct Decoded_VkMemoryAllocateFlagsInfo; -struct Decoded_VkDeviceGroupRenderPassBeginInfo; struct Decoded_VkDeviceGroupCommandBufferBeginInfo; struct Decoded_VkDeviceGroupSubmitInfo; struct Decoded_VkDeviceGroupBindSparseInfo; @@ -274,27 +237,13 @@ struct Decoded_VkQueueFamilyProperties2; struct Decoded_VkPhysicalDeviceMemoryProperties2; struct Decoded_VkSparseImageFormatProperties2; struct Decoded_VkPhysicalDeviceSparseImageFormatInfo2; -struct Decoded_VkPhysicalDevicePointClippingProperties; -struct Decoded_VkInputAttachmentAspectReference; -struct Decoded_VkRenderPassInputAttachmentAspectCreateInfo; struct Decoded_VkImageViewUsageCreateInfo; -struct Decoded_VkPipelineTessellationDomainOriginStateCreateInfo; -struct Decoded_VkRenderPassMultiviewCreateInfo; -struct Decoded_VkPhysicalDeviceMultiviewFeatures; -struct Decoded_VkPhysicalDeviceMultiviewProperties; -struct Decoded_VkPhysicalDeviceVariablePointersFeatures; struct Decoded_VkPhysicalDeviceProtectedMemoryFeatures; struct Decoded_VkPhysicalDeviceProtectedMemoryProperties; struct Decoded_VkDeviceQueueInfo2; struct Decoded_VkProtectedSubmitInfo; -struct Decoded_VkSamplerYcbcrConversionCreateInfo; -struct Decoded_VkSamplerYcbcrConversionInfo; struct Decoded_VkBindImagePlaneMemoryInfo; struct Decoded_VkImagePlaneMemoryRequirementsInfo; -struct Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures; -struct Decoded_VkSamplerYcbcrConversionImageFormatProperties; -struct Decoded_VkDescriptorUpdateTemplateEntry; -struct Decoded_VkDescriptorUpdateTemplateCreateInfo; struct Decoded_VkExternalMemoryProperties; struct Decoded_VkPhysicalDeviceExternalImageFormatInfo; struct Decoded_VkExternalImageFormatProperties; @@ -310,8 +259,25 @@ struct Decoded_VkExportFenceCreateInfo; struct Decoded_VkExportSemaphoreCreateInfo; struct Decoded_VkPhysicalDeviceExternalSemaphoreInfo; struct Decoded_VkExternalSemaphoreProperties; +struct Decoded_VkPhysicalDeviceSubgroupProperties; +struct Decoded_VkPhysicalDevice16BitStorageFeatures; +struct Decoded_VkPhysicalDeviceVariablePointersFeatures; +struct Decoded_VkDescriptorUpdateTemplateEntry; +struct Decoded_VkDescriptorUpdateTemplateCreateInfo; struct Decoded_VkPhysicalDeviceMaintenance3Properties; struct Decoded_VkDescriptorSetLayoutSupport; +struct Decoded_VkSamplerYcbcrConversionCreateInfo; +struct Decoded_VkSamplerYcbcrConversionInfo; +struct Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures; +struct Decoded_VkSamplerYcbcrConversionImageFormatProperties; +struct Decoded_VkDeviceGroupRenderPassBeginInfo; +struct Decoded_VkPhysicalDevicePointClippingProperties; +struct Decoded_VkInputAttachmentAspectReference; +struct Decoded_VkRenderPassInputAttachmentAspectCreateInfo; +struct Decoded_VkPipelineTessellationDomainOriginStateCreateInfo; +struct Decoded_VkRenderPassMultiviewCreateInfo; +struct Decoded_VkPhysicalDeviceMultiviewFeatures; +struct Decoded_VkPhysicalDeviceMultiviewProperties; struct Decoded_VkPhysicalDeviceShaderDrawParametersFeatures; struct Decoded_VkPhysicalDeviceVulkan11Features; struct Decoded_VkPhysicalDeviceVulkan11Properties; @@ -319,15 +285,21 @@ struct Decoded_VkPhysicalDeviceVulkan12Features; struct Decoded_VkConformanceVersion; struct Decoded_VkPhysicalDeviceVulkan12Properties; struct Decoded_VkImageFormatListCreateInfo; -struct Decoded_VkAttachmentDescription2; -struct Decoded_VkAttachmentReference2; -struct Decoded_VkSubpassDescription2; -struct Decoded_VkSubpassDependency2; -struct Decoded_VkRenderPassCreateInfo2; -struct Decoded_VkSubpassBeginInfo; -struct Decoded_VkSubpassEndInfo; -struct Decoded_VkPhysicalDevice8BitStorageFeatures; struct Decoded_VkPhysicalDeviceDriverProperties; +struct Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures; +struct Decoded_VkPhysicalDeviceHostQueryResetFeatures; +struct Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures; +struct Decoded_VkPhysicalDeviceTimelineSemaphoreProperties; +struct Decoded_VkSemaphoreTypeCreateInfo; +struct Decoded_VkTimelineSemaphoreSubmitInfo; +struct Decoded_VkSemaphoreWaitInfo; +struct Decoded_VkSemaphoreSignalInfo; +struct Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures; +struct Decoded_VkBufferDeviceAddressInfo; +struct Decoded_VkBufferOpaqueCaptureAddressCreateInfo; +struct Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo; +struct Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo; +struct Decoded_VkPhysicalDevice8BitStorageFeatures; struct Decoded_VkPhysicalDeviceShaderAtomicInt64Features; struct Decoded_VkPhysicalDeviceShaderFloat16Int8Features; struct Decoded_VkPhysicalDeviceFloatControlsProperties; @@ -336,45 +308,34 @@ struct Decoded_VkPhysicalDeviceDescriptorIndexingFeatures; struct Decoded_VkPhysicalDeviceDescriptorIndexingProperties; struct Decoded_VkDescriptorSetVariableDescriptorCountAllocateInfo; struct Decoded_VkDescriptorSetVariableDescriptorCountLayoutSupport; -struct Decoded_VkSubpassDescriptionDepthStencilResolve; -struct Decoded_VkPhysicalDeviceDepthStencilResolveProperties; struct Decoded_VkPhysicalDeviceScalarBlockLayoutFeatures; -struct Decoded_VkImageStencilUsageCreateInfo; struct Decoded_VkSamplerReductionModeCreateInfo; struct Decoded_VkPhysicalDeviceSamplerFilterMinmaxProperties; -struct Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures; +struct Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures; +struct Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures; +struct Decoded_VkAttachmentDescription2; +struct Decoded_VkAttachmentReference2; +struct Decoded_VkSubpassDescription2; +struct Decoded_VkSubpassDependency2; +struct Decoded_VkRenderPassCreateInfo2; +struct Decoded_VkSubpassBeginInfo; +struct Decoded_VkSubpassEndInfo; +struct Decoded_VkSubpassDescriptionDepthStencilResolve; +struct Decoded_VkPhysicalDeviceDepthStencilResolveProperties; +struct Decoded_VkImageStencilUsageCreateInfo; struct Decoded_VkPhysicalDeviceImagelessFramebufferFeatures; struct Decoded_VkFramebufferAttachmentImageInfo; struct Decoded_VkFramebufferAttachmentsCreateInfo; struct Decoded_VkRenderPassAttachmentBeginInfo; -struct Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures; -struct Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures; struct Decoded_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures; struct Decoded_VkAttachmentReferenceStencilLayout; struct Decoded_VkAttachmentDescriptionStencilLayout; -struct Decoded_VkPhysicalDeviceHostQueryResetFeatures; -struct Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures; -struct Decoded_VkPhysicalDeviceTimelineSemaphoreProperties; -struct Decoded_VkSemaphoreTypeCreateInfo; -struct Decoded_VkTimelineSemaphoreSubmitInfo; -struct Decoded_VkSemaphoreWaitInfo; -struct Decoded_VkSemaphoreSignalInfo; -struct Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures; -struct Decoded_VkBufferDeviceAddressInfo; -struct Decoded_VkBufferOpaqueCaptureAddressCreateInfo; -struct Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo; -struct Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo; struct Decoded_VkPhysicalDeviceVulkan13Features; struct Decoded_VkPhysicalDeviceVulkan13Properties; -struct Decoded_VkPipelineCreationFeedback; -struct Decoded_VkPipelineCreationFeedbackCreateInfo; -struct Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures; struct Decoded_VkPhysicalDeviceToolProperties; -struct Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures; struct Decoded_VkPhysicalDevicePrivateDataFeatures; struct Decoded_VkDevicePrivateDataCreateInfo; struct Decoded_VkPrivateDataSlotCreateInfo; -struct Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures; struct Decoded_VkMemoryBarrier2; struct Decoded_VkBufferMemoryBarrier2; struct Decoded_VkImageMemoryBarrier2; @@ -383,8 +344,6 @@ struct Decoded_VkSemaphoreSubmitInfo; struct Decoded_VkCommandBufferSubmitInfo; struct Decoded_VkSubmitInfo2; struct Decoded_VkPhysicalDeviceSynchronization2Features; -struct Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; -struct Decoded_VkPhysicalDeviceImageRobustnessFeatures; struct Decoded_VkBufferCopy2; struct Decoded_VkCopyBufferInfo2; struct Decoded_VkImageCopy2; @@ -392,10 +351,19 @@ struct Decoded_VkCopyImageInfo2; struct Decoded_VkBufferImageCopy2; struct Decoded_VkCopyBufferToImageInfo2; struct Decoded_VkCopyImageToBufferInfo2; -struct Decoded_VkImageBlit2; -struct Decoded_VkBlitImageInfo2; -struct Decoded_VkImageResolve2; -struct Decoded_VkResolveImageInfo2; +struct Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures; +struct Decoded_VkFormatProperties3; +struct Decoded_VkPhysicalDeviceMaintenance4Features; +struct Decoded_VkPhysicalDeviceMaintenance4Properties; +struct Decoded_VkDeviceBufferMemoryRequirements; +struct Decoded_VkDeviceImageMemoryRequirements; +struct Decoded_VkPipelineCreationFeedback; +struct Decoded_VkPipelineCreationFeedbackCreateInfo; +struct Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures; +struct Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures; +struct Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures; +struct Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; +struct Decoded_VkPhysicalDeviceImageRobustnessFeatures; struct Decoded_VkPhysicalDeviceSubgroupSizeControlFeatures; struct Decoded_VkPhysicalDeviceSubgroupSizeControlProperties; struct Decoded_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo; @@ -403,53 +371,46 @@ struct Decoded_VkPhysicalDeviceInlineUniformBlockFeatures; struct Decoded_VkPhysicalDeviceInlineUniformBlockProperties; struct Decoded_VkWriteDescriptorSetInlineUniformBlock; struct Decoded_VkDescriptorPoolInlineUniformBlockCreateInfo; -struct Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures; +struct Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures; +struct Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties; +struct Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties; +struct Decoded_VkImageBlit2; +struct Decoded_VkBlitImageInfo2; +struct Decoded_VkImageResolve2; +struct Decoded_VkResolveImageInfo2; struct Decoded_VkRenderingAttachmentInfo; struct Decoded_VkRenderingInfo; struct Decoded_VkPipelineRenderingCreateInfo; struct Decoded_VkPhysicalDeviceDynamicRenderingFeatures; struct Decoded_VkCommandBufferInheritanceRenderingInfo; -struct Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures; -struct Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties; -struct Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties; -struct Decoded_VkFormatProperties3; -struct Decoded_VkPhysicalDeviceMaintenance4Features; -struct Decoded_VkPhysicalDeviceMaintenance4Properties; -struct Decoded_VkDeviceBufferMemoryRequirements; -struct Decoded_VkDeviceImageMemoryRequirements; struct Decoded_VkPhysicalDeviceVulkan14Features; struct Decoded_VkPhysicalDeviceVulkan14Properties; struct Decoded_VkDeviceQueueGlobalPriorityCreateInfo; struct Decoded_VkPhysicalDeviceGlobalPriorityQueryFeatures; struct Decoded_VkQueueFamilyGlobalPriorityProperties; -struct Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures; -struct Decoded_VkPhysicalDeviceShaderFloatControls2Features; -struct Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures; -struct Decoded_VkPhysicalDeviceLineRasterizationFeatures; -struct Decoded_VkPhysicalDeviceLineRasterizationProperties; -struct Decoded_VkPipelineRasterizationLineStateCreateInfo; -struct Decoded_VkPhysicalDeviceVertexAttributeDivisorProperties; -struct Decoded_VkVertexInputBindingDivisorDescription; -struct Decoded_VkPipelineVertexInputDivisorStateCreateInfo; -struct Decoded_VkPhysicalDeviceVertexAttributeDivisorFeatures; struct Decoded_VkPhysicalDeviceIndexTypeUint8Features; struct Decoded_VkMemoryMapInfo; struct Decoded_VkMemoryUnmapInfo; struct Decoded_VkPhysicalDeviceMaintenance5Features; struct Decoded_VkPhysicalDeviceMaintenance5Properties; -struct Decoded_VkRenderingAreaInfo; struct Decoded_VkImageSubresource2; struct Decoded_VkDeviceImageSubresourceInfo; struct Decoded_VkSubresourceLayout2; -struct Decoded_VkPipelineCreateFlags2CreateInfo; struct Decoded_VkBufferUsageFlags2CreateInfo; -struct Decoded_VkPhysicalDevicePushDescriptorProperties; -struct Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures; -struct Decoded_VkRenderingAttachmentLocationInfo; -struct Decoded_VkRenderingInputAttachmentIndexInfo; struct Decoded_VkPhysicalDeviceMaintenance6Features; struct Decoded_VkPhysicalDeviceMaintenance6Properties; struct Decoded_VkBindMemoryStatus; +struct Decoded_VkPhysicalDeviceHostImageCopyFeatures; +struct Decoded_VkPhysicalDeviceHostImageCopyProperties; +struct Decoded_VkCopyImageToImageInfo; +struct Decoded_VkHostImageLayoutTransitionInfo; +struct Decoded_VkSubresourceHostMemcpySize; +struct Decoded_VkHostImageCopyDevicePerformanceQuery; +struct Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures; +struct Decoded_VkPhysicalDeviceShaderFloatControls2Features; +struct Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures; +struct Decoded_VkPipelineCreateFlags2CreateInfo; +struct Decoded_VkPhysicalDevicePushDescriptorProperties; struct Decoded_VkBindDescriptorSetsInfo; struct Decoded_VkPushConstantsInfo; struct Decoded_VkPushDescriptorSetInfo; @@ -457,12 +418,17 @@ struct Decoded_VkPhysicalDevicePipelineProtectedAccessFeatures; struct Decoded_VkPhysicalDevicePipelineRobustnessFeatures; struct Decoded_VkPhysicalDevicePipelineRobustnessProperties; struct Decoded_VkPipelineRobustnessCreateInfo; -struct Decoded_VkPhysicalDeviceHostImageCopyFeatures; -struct Decoded_VkPhysicalDeviceHostImageCopyProperties; -struct Decoded_VkCopyImageToImageInfo; -struct Decoded_VkHostImageLayoutTransitionInfo; -struct Decoded_VkSubresourceHostMemcpySize; -struct Decoded_VkHostImageCopyDevicePerformanceQuery; +struct Decoded_VkPhysicalDeviceLineRasterizationFeatures; +struct Decoded_VkPhysicalDeviceLineRasterizationProperties; +struct Decoded_VkPipelineRasterizationLineStateCreateInfo; +struct Decoded_VkPhysicalDeviceVertexAttributeDivisorProperties; +struct Decoded_VkVertexInputBindingDivisorDescription; +struct Decoded_VkPipelineVertexInputDivisorStateCreateInfo; +struct Decoded_VkPhysicalDeviceVertexAttributeDivisorFeatures; +struct Decoded_VkRenderingAreaInfo; +struct Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures; +struct Decoded_VkRenderingAttachmentLocationInfo; +struct Decoded_VkRenderingInputAttachmentIndexInfo; struct Decoded_VkSurfaceCapabilitiesKHR; struct Decoded_VkSurfaceFormatKHR; struct Decoded_VkSwapchainCreateInfoKHR; @@ -522,22 +488,6 @@ struct Decoded_VkVideoEncodeH264RateControlInfoKHR; struct Decoded_VkVideoEncodeH264FrameSizeKHR; struct Decoded_VkVideoEncodeH264RateControlLayerInfoKHR; struct Decoded_VkVideoEncodeH264GopRemainingFrameInfoKHR; -struct Decoded_VkVideoEncodeH265CapabilitiesKHR; -struct Decoded_VkVideoEncodeH265SessionCreateInfoKHR; -struct Decoded_VkVideoEncodeH265QpKHR; -struct Decoded_VkVideoEncodeH265QualityLevelPropertiesKHR; -struct Decoded_VkVideoEncodeH265SessionParametersAddInfoKHR; -struct Decoded_VkVideoEncodeH265SessionParametersCreateInfoKHR; -struct Decoded_VkVideoEncodeH265SessionParametersGetInfoKHR; -struct Decoded_VkVideoEncodeH265SessionParametersFeedbackInfoKHR; -struct Decoded_VkVideoEncodeH265NaluSliceSegmentInfoKHR; -struct Decoded_VkVideoEncodeH265PictureInfoKHR; -struct Decoded_VkVideoEncodeH265DpbSlotInfoKHR; -struct Decoded_VkVideoEncodeH265ProfileInfoKHR; -struct Decoded_VkVideoEncodeH265RateControlInfoKHR; -struct Decoded_VkVideoEncodeH265FrameSizeKHR; -struct Decoded_VkVideoEncodeH265RateControlLayerInfoKHR; -struct Decoded_VkVideoEncodeH265GopRemainingFrameInfoKHR; struct Decoded_VkVideoDecodeH264ProfileInfoKHR; struct Decoded_VkVideoDecodeH264CapabilitiesKHR; struct Decoded_VkVideoDecodeH264SessionParametersAddInfoKHR; @@ -586,12 +536,6 @@ struct Decoded_VkPhysicalDeviceShaderBfloat16FeaturesKHR; struct Decoded_VkPhysicalDevicePortabilitySubsetFeaturesKHR; struct Decoded_VkPhysicalDevicePortabilitySubsetPropertiesKHR; struct Decoded_VkPhysicalDeviceShaderClockFeaturesKHR; -struct Decoded_VkVideoDecodeH265ProfileInfoKHR; -struct Decoded_VkVideoDecodeH265CapabilitiesKHR; -struct Decoded_VkVideoDecodeH265SessionParametersAddInfoKHR; -struct Decoded_VkVideoDecodeH265SessionParametersCreateInfoKHR; -struct Decoded_VkVideoDecodeH265PictureInfoKHR; -struct Decoded_VkVideoDecodeH265DpbSlotInfoKHR; struct Decoded_VkFragmentShadingRateAttachmentInfoKHR; struct Decoded_VkPipelineFragmentShadingRateStateCreateInfoKHR; struct Decoded_VkPhysicalDeviceFragmentShadingRateFeaturesKHR; @@ -627,6 +571,7 @@ struct Decoded_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; struct Decoded_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; struct Decoded_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR; struct Decoded_VkTraceRaysIndirectCommand2KHR; +struct Decoded_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR; struct Decoded_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR; struct Decoded_VkSurfaceCapabilitiesPresentId2KHR; struct Decoded_VkPresentId2KHR; @@ -690,6 +635,13 @@ struct Decoded_VkAttachmentFeedbackLoopInfoEXT; struct Decoded_VkCalibratedTimestampInfoKHR; struct Decoded_VkSetDescriptorBufferOffsetsInfoEXT; struct Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT; +struct Decoded_VkStridedDeviceAddressRangeKHR; +struct Decoded_VkCopyMemoryIndirectCommandKHR; +struct Decoded_VkCopyMemoryIndirectInfoKHR; +struct Decoded_VkCopyMemoryToImageIndirectCommandKHR; +struct Decoded_VkCopyMemoryToImageIndirectInfoKHR; +struct Decoded_VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR; +struct Decoded_VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR; struct Decoded_VkVideoEncodeIntraRefreshCapabilitiesKHR; struct Decoded_VkVideoEncodeSessionIntraRefreshCreateInfoKHR; struct Decoded_VkVideoEncodeIntraRefreshInfoKHR; @@ -711,19 +663,21 @@ struct Decoded_VkPhysicalDeviceMaintenance7PropertiesKHR; struct Decoded_VkPhysicalDeviceLayeredApiPropertiesKHR; struct Decoded_VkPhysicalDeviceLayeredApiPropertiesListKHR; struct Decoded_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR; -struct Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR; struct Decoded_VkMemoryBarrierAccessFlags3KHR; +struct Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR; +struct Decoded_VkPhysicalDeviceShaderFmaFeaturesKHR; struct Decoded_VkPhysicalDeviceMaintenance9FeaturesKHR; struct Decoded_VkPhysicalDeviceMaintenance9PropertiesKHR; struct Decoded_VkQueueFamilyOwnershipTransferPropertiesKHR; -struct Decoded_VkPhysicalDeviceVideoMaintenance2FeaturesKHR; -struct Decoded_VkVideoDecodeH264InlineSessionParametersInfoKHR; -struct Decoded_VkVideoDecodeH265InlineSessionParametersInfoKHR; -struct Decoded_VkVideoDecodeAV1InlineSessionParametersInfoKHR; struct Decoded_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR; struct Decoded_VkPhysicalDeviceRobustness2FeaturesKHR; struct Decoded_VkPhysicalDeviceRobustness2PropertiesKHR; struct Decoded_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR; +struct Decoded_VkPhysicalDeviceMaintenance10FeaturesKHR; +struct Decoded_VkPhysicalDeviceMaintenance10PropertiesKHR; +struct Decoded_VkRenderingEndInfoKHR; +struct Decoded_VkRenderingAttachmentFlagsInfoKHR; +struct Decoded_VkResolveImageModeInfoKHR; struct Decoded_VkDebugReportCallbackCreateInfoEXT; struct Decoded_VkPipelineRasterizationStateRasterizationOrderAMD; struct Decoded_VkDebugMarkerObjectNameInfoEXT; @@ -863,6 +817,17 @@ struct Decoded_VkQueueFamilyCheckpointPropertiesNV; struct Decoded_VkCheckpointDataNV; struct Decoded_VkQueueFamilyCheckpointProperties2NV; struct Decoded_VkCheckpointData2NV; +struct Decoded_VkPhysicalDevicePresentTimingFeaturesEXT; +struct Decoded_VkPresentTimingSurfaceCapabilitiesEXT; +struct Decoded_VkSwapchainCalibratedTimestampInfoEXT; +struct Decoded_VkSwapchainTimingPropertiesEXT; +struct Decoded_VkSwapchainTimeDomainPropertiesEXT; +struct Decoded_VkPastPresentationTimingInfoEXT; +struct Decoded_VkPresentStageTimeEXT; +struct Decoded_VkPastPresentationTimingEXT; +struct Decoded_VkPastPresentationTimingPropertiesEXT; +struct Decoded_VkPresentTimingInfoEXT; +struct Decoded_VkPresentTimingsInfoEXT; struct Decoded_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; struct Decoded_VkInitializePerformanceApiInfoINTEL; struct Decoded_VkQueryPoolPerformanceQueryCreateInfoINTEL; @@ -937,6 +902,7 @@ struct Decoded_VkDeviceDeviceMemoryReportCreateInfoEXT; struct Decoded_VkSamplerCustomBorderColorCreateInfoEXT; struct Decoded_VkPhysicalDeviceCustomBorderColorPropertiesEXT; struct Decoded_VkPhysicalDeviceCustomBorderColorFeaturesEXT; +struct Decoded_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT; struct Decoded_VkPhysicalDevicePresentBarrierFeaturesNV; struct Decoded_VkSurfaceCapabilitiesPresentBarrierNV; struct Decoded_VkSwapchainPresentBarrierCreateInfoNV; @@ -949,6 +915,18 @@ struct Decoded_VkPerTileBeginInfoQCOM; struct Decoded_VkPerTileEndInfoQCOM; struct Decoded_VkDispatchTileInfoQCOM; struct Decoded_VkQueryLowLatencySupportNV; +struct Decoded_VkPhysicalDeviceDescriptorBufferPropertiesEXT; +struct Decoded_VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT; +struct Decoded_VkPhysicalDeviceDescriptorBufferFeaturesEXT; +struct Decoded_VkDescriptorAddressInfoEXT; +struct Decoded_VkDescriptorBufferBindingInfoEXT; +struct Decoded_VkDescriptorBufferBindingPushDescriptorBufferHandleEXT; +struct Decoded_VkBufferCaptureDescriptorDataInfoEXT; +struct Decoded_VkImageCaptureDescriptorDataInfoEXT; +struct Decoded_VkImageViewCaptureDescriptorDataInfoEXT; +struct Decoded_VkSamplerCaptureDescriptorDataInfoEXT; +struct Decoded_VkOpaqueCaptureDescriptorDataCreateInfoEXT; +struct Decoded_VkAccelerationStructureCaptureDescriptorDataInfoEXT; struct Decoded_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; struct Decoded_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; struct Decoded_VkGraphicsPipelineLibraryCreateInfoEXT; @@ -1010,6 +988,10 @@ struct Decoded_VkScreenSurfaceCreateInfoQNX; struct Decoded_VkPhysicalDeviceColorWriteEnableFeaturesEXT; struct Decoded_VkPipelineColorWriteCreateInfoEXT; struct Decoded_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; +struct Decoded_VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE; +struct Decoded_VkVideoEncodeRgbConversionCapabilitiesVALVE; +struct Decoded_VkVideoEncodeProfileRgbConversionInfoVALVE; +struct Decoded_VkVideoEncodeSessionRgbConversionCreateInfoVALVE; struct Decoded_VkPhysicalDeviceImageViewMinLodFeaturesEXT; struct Decoded_VkImageViewMinLodCreateInfoEXT; struct Decoded_VkPhysicalDeviceMultiDrawFeaturesEXT; @@ -1122,7 +1104,6 @@ struct Decoded_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV; struct Decoded_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV; struct Decoded_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT; struct Decoded_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT; -struct Decoded_VkLayerSettingEXT; struct Decoded_VkLayerSettingsCreateInfoEXT; struct Decoded_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM; struct Decoded_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM; @@ -1137,6 +1118,28 @@ struct Decoded_VkLatencySubmissionPresentIdNV; struct Decoded_VkSwapchainLatencyCreateInfoNV; struct Decoded_VkOutOfBandQueueTypeInfoNV; struct Decoded_VkLatencySurfaceCapabilitiesNV; +struct Decoded_VkPhysicalDeviceDataGraphFeaturesARM; +struct Decoded_VkDataGraphPipelineConstantARM; +struct Decoded_VkDataGraphPipelineResourceInfoARM; +struct Decoded_VkDataGraphPipelineCompilerControlCreateInfoARM; +struct Decoded_VkDataGraphPipelineCreateInfoARM; +struct Decoded_VkDataGraphPipelineShaderModuleCreateInfoARM; +struct Decoded_VkDataGraphPipelineSessionCreateInfoARM; +struct Decoded_VkDataGraphPipelineSessionBindPointRequirementsInfoARM; +struct Decoded_VkDataGraphPipelineSessionBindPointRequirementARM; +struct Decoded_VkDataGraphPipelineSessionMemoryRequirementsInfoARM; +struct Decoded_VkBindDataGraphPipelineSessionMemoryInfoARM; +struct Decoded_VkDataGraphPipelineInfoARM; +struct Decoded_VkDataGraphPipelinePropertyQueryResultARM; +struct Decoded_VkDataGraphPipelineIdentifierCreateInfoARM; +struct Decoded_VkDataGraphPipelineDispatchInfoARM; +struct Decoded_VkPhysicalDeviceDataGraphProcessingEngineARM; +struct Decoded_VkPhysicalDeviceDataGraphOperationSupportARM; +struct Decoded_VkQueueFamilyDataGraphPropertiesARM; +struct Decoded_VkDataGraphProcessingEngineCreateInfoARM; +struct Decoded_VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM; +struct Decoded_VkQueueFamilyDataGraphProcessingEnginePropertiesARM; +struct Decoded_VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM; struct Decoded_VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM; struct Decoded_VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM; struct Decoded_VkPhysicalDevicePerStageDescriptorSetFeaturesNV; @@ -1157,6 +1160,10 @@ struct Decoded_VkPhysicalDeviceTileMemoryHeapPropertiesQCOM; struct Decoded_VkTileMemoryRequirementsQCOM; struct Decoded_VkTileMemoryBindInfoQCOM; struct Decoded_VkTileMemorySizeInfoQCOM; +struct Decoded_VkDecompressMemoryRegionEXT; +struct Decoded_VkDecompressMemoryInfoEXT; +struct Decoded_VkPhysicalDeviceMemoryDecompressionFeaturesEXT; +struct Decoded_VkPhysicalDeviceMemoryDecompressionPropertiesEXT; struct Decoded_VkDisplaySurfaceStereoCreateInfoNV; struct Decoded_VkDisplayModeStereoPropertiesNV; struct Decoded_VkPhysicalDeviceRawAccessChainsFeaturesNV; @@ -1199,6 +1206,8 @@ struct Decoded_VkWriteIndirectExecutionSetShaderEXT; struct Decoded_VkPhysicalDeviceImageAlignmentControlFeaturesMESA; struct Decoded_VkPhysicalDeviceImageAlignmentControlPropertiesMESA; struct Decoded_VkImageAlignmentControlCreateInfoMESA; +struct Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT; +struct Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT; struct Decoded_VkPhysicalDeviceDepthClampControlFeaturesEXT; struct Decoded_VkPipelineViewportDepthClampControlCreateInfoEXT; struct Decoded_VkPhysicalDeviceHdrVividFeaturesHUAWEI; @@ -1210,6 +1219,11 @@ struct Decoded_VkPhysicalDevicePipelineOpacityMicromapFeaturesARM; struct Decoded_VkImportMemoryMetalHandleInfoEXT; struct Decoded_VkMemoryMetalHandlePropertiesEXT; struct Decoded_VkMemoryGetMetalHandleInfoEXT; +struct Decoded_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM; +struct Decoded_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM; +struct Decoded_VkPerformanceCounterARM; +struct Decoded_VkPerformanceCounterDescriptionARM; +struct Decoded_VkRenderPassPerformanceCountersByRegionBeginInfoARM; struct Decoded_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT; struct Decoded_VkPhysicalDeviceFormatPackFeaturesARM; struct Decoded_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE; @@ -1217,9 +1231,20 @@ struct Decoded_VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE; struct Decoded_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE; struct Decoded_VkSetPresentConfigNV; struct Decoded_VkPhysicalDevicePresentMeteringFeaturesNV; -struct Decoded_VkRenderingEndInfoEXT; struct Decoded_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT; +struct Decoded_VkPhysicalDeviceShader64BitIndexingFeaturesEXT; +struct Decoded_VkPhysicalDeviceCustomResolveFeaturesEXT; +struct Decoded_VkBeginCustomResolveInfoEXT; +struct Decoded_VkCustomResolveCreateInfoEXT; +struct Decoded_VkPipelineCacheHeaderVersionDataGraphQCOM; +struct Decoded_VkDataGraphPipelineBuiltinModelCreateInfoQCOM; +struct Decoded_VkPhysicalDeviceDataGraphModelFeaturesQCOM; +struct Decoded_VkPhysicalDeviceShaderLongVectorFeaturesEXT; +struct Decoded_VkPhysicalDeviceShaderLongVectorPropertiesEXT; struct Decoded_VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC; +struct Decoded_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT; +struct Decoded_VkComputeOccupancyPriorityParametersNV; +struct Decoded_VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV; struct Decoded_VkAccelerationStructureBuildRangeInfoKHR; struct Decoded_VkAccelerationStructureGeometryTrianglesDataKHR; struct Decoded_VkAccelerationStructureGeometryAabbsDataKHR; @@ -1270,40 +1295,6 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoEncodeH264PictureInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoEncodeH264ReferenceInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoEncodeH264SliceHeader* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265ProfileTierLevelFlags* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265ProfileTierLevel* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265DecPicBufMgr* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265SubLayerHrdParameters* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265HrdFlags* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265HrdParameters* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265VpsFlags* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265VideoParameterSet* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265ScalingLists* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265ShortTermRefPicSetFlags* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265ShortTermRefPicSet* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265LongTermRefPicsSps* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265SpsVuiFlags* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265SequenceParameterSetVui* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265PredictorPaletteEntries* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265SpsFlags* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265SequenceParameterSet* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265PpsFlags* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoH265PictureParameterSet* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoDecodeH265PictureInfoFlags* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoDecodeH265PictureInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoDecodeH265ReferenceInfoFlags* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoDecodeH265ReferenceInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoEncodeH265WeightTableFlags* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoEncodeH265WeightTable* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoEncodeH265LongTermRefPics* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoEncodeH265SliceSegmentHeaderFlags* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoEncodeH265SliceSegmentHeader* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoEncodeH265ReferenceListsInfoFlags* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoEncodeH265ReferenceListsInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoEncodeH265PictureInfoFlags* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoEncodeH265PictureInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoEncodeH265ReferenceInfoFlags* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoEncodeH265ReferenceInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoVP9ColorConfigFlags* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoVP9ColorConfig* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_StdVideoVP9LoopFilterFlags* wrapper); @@ -1348,13 +1339,9 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkOffset3D* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRect2D* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferMemoryBarrier* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDispatchIndirectCommand* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDrawIndexedIndirectCommand* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDrawIndirectCommand* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageSubresourceRange* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageMemoryBarrier* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkMemoryBarrier* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineCacheHeaderVersionOne* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkAllocationCallbacks* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkApplicationInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkFormatProperties* wrapper); @@ -1387,20 +1374,42 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSparseImageMemoryRequirements* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkFenceCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSemaphoreCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkEventCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkQueryPoolCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferViewCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubresourceLayout* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkComponentMapping* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageViewCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCommandPoolCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCommandBufferAllocateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCommandBufferInheritanceInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCommandBufferBeginInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferCopy* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageSubresourceLayers* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferImageCopy* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageCopy* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDispatchIndirectCommand* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineCacheHeaderVersionOne* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkEventCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferViewCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkShaderModuleCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineCacheCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSpecializationMapEntry* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSpecializationInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineShaderStageCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkComputePipelineCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPushConstantRange* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineLayoutCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSamplerCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCopyDescriptorSet* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorBufferInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorPoolSize* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorPoolCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorSetAllocateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutBinding* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDrawIndexedIndirectCommand* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDrawIndirectCommand* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVertexInputBindingDescription* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVertexInputAttributeDescription* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineVertexInputStateCreateInfo* wrapper); @@ -1416,44 +1425,23 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineColorBlendStateCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineDynamicStateCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkGraphicsPipelineCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPushConstantRange* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineLayoutCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSamplerCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCopyDescriptorSet* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorBufferInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorPoolSize* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorPoolCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorSetAllocateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutBinding* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkAttachmentDescription* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkAttachmentReference* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkFramebufferCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubpassDescription* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubpassDependency* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderPassCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCommandPoolCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCommandBufferAllocateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCommandBufferInheritanceInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCommandBufferBeginInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferCopy* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageSubresourceLayers* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferImageCopy* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkClearDepthStencilValue* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkClearAttachment* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkClearRect* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageBlit* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageCopy* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageResolve* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderPassBeginInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSubgroupProperties* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBindBufferMemoryInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBindImageMemoryInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevice16BitStorageFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkMemoryDedicatedRequirements* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkMemoryDedicatedAllocateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkMemoryAllocateFlagsInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDeviceGroupRenderPassBeginInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDeviceGroupCommandBufferBeginInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDeviceGroupSubmitInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDeviceGroupBindSparseInfo* wrapper); @@ -1475,27 +1463,13 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMemoryProperties2* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSparseImageFormatProperties2* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSparseImageFormatInfo2* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePointClippingProperties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkInputAttachmentAspectReference* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderPassInputAttachmentAspectCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageViewUsageCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineTessellationDomainOriginStateCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderPassMultiviewCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiviewFeatures* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiviewProperties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVariablePointersFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceProtectedMemoryFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceProtectedMemoryProperties* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDeviceQueueInfo2* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkProtectedSubmitInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSamplerYcbcrConversionCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSamplerYcbcrConversionInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBindImagePlaneMemoryInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImagePlaneMemoryRequirementsInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSamplerYcbcrConversionImageFormatProperties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorUpdateTemplateEntry* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorUpdateTemplateCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkExternalMemoryProperties* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalImageFormatInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkExternalImageFormatProperties* wrapper); @@ -1511,8 +1485,25 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkExportSemaphoreCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExternalSemaphoreInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkExternalSemaphoreProperties* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSubgroupProperties* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevice16BitStorageFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVariablePointersFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorUpdateTemplateEntry* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorUpdateTemplateCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance3Properties* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorSetLayoutSupport* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSamplerYcbcrConversionCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSamplerYcbcrConversionInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSamplerYcbcrConversionImageFormatProperties* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDeviceGroupRenderPassBeginInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePointClippingProperties* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkInputAttachmentAspectReference* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderPassInputAttachmentAspectCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineTessellationDomainOriginStateCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderPassMultiviewCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiviewFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiviewProperties* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderDrawParametersFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan11Features* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan11Properties* wrapper); @@ -1520,15 +1511,21 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkConformanceVersion* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan12Properties* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageFormatListCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkAttachmentDescription2* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkAttachmentReference2* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubpassDescription2* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubpassDependency2* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderPassCreateInfo2* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubpassBeginInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubpassEndInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevice8BitStorageFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDriverProperties* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceHostQueryResetFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTimelineSemaphoreProperties* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSemaphoreTypeCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkTimelineSemaphoreSubmitInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSemaphoreWaitInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSemaphoreSignalInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferDeviceAddressInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferOpaqueCaptureAddressCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevice8BitStorageFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderAtomicInt64Features* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderFloat16Int8Features* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFloatControlsProperties* wrapper); @@ -1537,45 +1534,34 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDescriptorIndexingProperties* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorSetVariableDescriptorCountAllocateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorSetVariableDescriptorCountLayoutSupport* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubpassDescriptionDepthStencilResolve* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthStencilResolveProperties* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceScalarBlockLayoutFeatures* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageStencilUsageCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSamplerReductionModeCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSamplerFilterMinmaxProperties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkAttachmentDescription2* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkAttachmentReference2* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubpassDescription2* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubpassDependency2* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderPassCreateInfo2* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubpassBeginInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubpassEndInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubpassDescriptionDepthStencilResolve* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthStencilResolveProperties* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageStencilUsageCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImagelessFramebufferFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkFramebufferAttachmentImageInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkFramebufferAttachmentsCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderPassAttachmentBeginInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkAttachmentReferenceStencilLayout* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkAttachmentDescriptionStencilLayout* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceHostQueryResetFeatures* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTimelineSemaphoreProperties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSemaphoreTypeCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkTimelineSemaphoreSubmitInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSemaphoreWaitInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSemaphoreSignalInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferDeviceAddressInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferOpaqueCaptureAddressCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan13Features* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan13Properties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineCreationFeedback* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineCreationFeedbackCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceToolProperties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePrivateDataFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDevicePrivateDataCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPrivateDataSlotCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkMemoryBarrier2* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferMemoryBarrier2* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageMemoryBarrier2* wrapper); @@ -1584,8 +1570,6 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCommandBufferSubmitInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubmitInfo2* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSynchronization2Features* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageRobustnessFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferCopy2* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCopyBufferInfo2* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageCopy2* wrapper); @@ -1593,10 +1577,19 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferImageCopy2* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCopyBufferToImageInfo2* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCopyImageToBufferInfo2* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageBlit2* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBlitImageInfo2* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageResolve2* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkResolveImageInfo2* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkFormatProperties3* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance4Features* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance4Properties* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDeviceBufferMemoryRequirements* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDeviceImageMemoryRequirements* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineCreationFeedback* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineCreationFeedbackCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageRobustnessFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSubgroupSizeControlFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceSubgroupSizeControlProperties* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* wrapper); @@ -1604,53 +1597,46 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceInlineUniformBlockProperties* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkWriteDescriptorSetInlineUniformBlock* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorPoolInlineUniformBlockCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageBlit2* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBlitImageInfo2* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageResolve2* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkResolveImageInfo2* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderingAttachmentInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderingInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineRenderingCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDynamicRenderingFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCommandBufferInheritanceRenderingInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkFormatProperties3* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance4Features* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance4Properties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDeviceBufferMemoryRequirements* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDeviceImageMemoryRequirements* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan14Features* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVulkan14Properties* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDeviceQueueGlobalPriorityCreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceGlobalPriorityQueryFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkQueueFamilyGlobalPriorityProperties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderFloatControls2Features* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLineRasterizationFeatures* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLineRasterizationProperties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineRasterizationLineStateCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVertexAttributeDivisorProperties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVertexInputBindingDivisorDescription* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineVertexInputDivisorStateCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVertexAttributeDivisorFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceIndexTypeUint8Features* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkMemoryMapInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkMemoryUnmapInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance5Features* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance5Properties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderingAreaInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageSubresource2* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDeviceImageSubresourceInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubresourceLayout2* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineCreateFlags2CreateInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferUsageFlags2CreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePushDescriptorProperties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderingAttachmentLocationInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderingInputAttachmentIndexInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance6Features* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance6Properties* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBindMemoryStatus* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceHostImageCopyFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceHostImageCopyProperties* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCopyImageToImageInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkHostImageLayoutTransitionInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubresourceHostMemcpySize* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkHostImageCopyDevicePerformanceQuery* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderFloatControls2Features* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineCreateFlags2CreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePushDescriptorProperties* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBindDescriptorSetsInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPushConstantsInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPushDescriptorSetInfo* wrapper); @@ -1658,12 +1644,17 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineRobustnessFeatures* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineRobustnessProperties* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineRobustnessCreateInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceHostImageCopyFeatures* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceHostImageCopyProperties* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCopyImageToImageInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkHostImageLayoutTransitionInfo* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSubresourceHostMemcpySize* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkHostImageCopyDevicePerformanceQuery* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLineRasterizationFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLineRasterizationProperties* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineRasterizationLineStateCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVertexAttributeDivisorProperties* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVertexInputBindingDivisorDescription* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineVertexInputDivisorStateCreateInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVertexAttributeDivisorFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderingAreaInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderingAttachmentLocationInfo* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderingInputAttachmentIndexInfo* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSurfaceCapabilitiesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSurfaceFormatKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSwapchainCreateInfoKHR* wrapper); @@ -1723,22 +1714,6 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH264FrameSizeKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH264RateControlLayerInfoKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH264GopRemainingFrameInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265CapabilitiesKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265SessionCreateInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265QpKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265QualityLevelPropertiesKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265SessionParametersAddInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265SessionParametersCreateInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265SessionParametersGetInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265SessionParametersFeedbackInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265NaluSliceSegmentInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265PictureInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265DpbSlotInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265ProfileInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265RateControlInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265FrameSizeKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265RateControlLayerInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeH265GopRemainingFrameInfoKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoDecodeH264ProfileInfoKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoDecodeH264CapabilitiesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoDecodeH264SessionParametersAddInfoKHR* wrapper); @@ -1787,12 +1762,6 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePortabilitySubsetFeaturesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePortabilitySubsetPropertiesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderClockFeaturesKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoDecodeH265ProfileInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoDecodeH265CapabilitiesKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoDecodeH265SessionParametersAddInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoDecodeH265SessionParametersCreateInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoDecodeH265PictureInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoDecodeH265DpbSlotInfoKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkFragmentShadingRateAttachmentInfoKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineFragmentShadingRateStateCreateInfoKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentShadingRateFeaturesKHR* wrapper); @@ -1828,6 +1797,7 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkTraceRaysIndirectCommand2KHR* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSurfaceCapabilitiesPresentId2KHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPresentId2KHR* wrapper); @@ -1891,6 +1861,13 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCalibratedTimestampInfoKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSetDescriptorBufferOffsetsInfoEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkStridedDeviceAddressRangeKHR* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCopyMemoryIndirectCommandKHR* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCopyMemoryIndirectInfoKHR* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCopyMemoryToImageIndirectCommandKHR* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCopyMemoryToImageIndirectInfoKHR* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeIntraRefreshCapabilitiesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeSessionIntraRefreshCreateInfoKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeIntraRefreshInfoKHR* wrapper); @@ -1912,19 +1889,21 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLayeredApiPropertiesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLayeredApiPropertiesListKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkMemoryBarrierAccessFlags3KHR* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderFmaFeaturesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance9FeaturesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance9PropertiesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkQueueFamilyOwnershipTransferPropertiesKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoMaintenance2FeaturesKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoDecodeH264InlineSessionParametersInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoDecodeH265InlineSessionParametersInfoKHR* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoDecodeAV1InlineSessionParametersInfoKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRobustness2FeaturesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRobustness2PropertiesKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance10FeaturesKHR* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMaintenance10PropertiesKHR* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderingEndInfoKHR* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderingAttachmentFlagsInfoKHR* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkResolveImageModeInfoKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDebugReportCallbackCreateInfoEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineRasterizationStateRasterizationOrderAMD* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDebugMarkerObjectNameInfoEXT* wrapper); @@ -2064,6 +2043,17 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCheckpointDataNV* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkQueueFamilyCheckpointProperties2NV* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCheckpointData2NV* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentTimingFeaturesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPresentTimingSurfaceCapabilitiesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSwapchainCalibratedTimestampInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSwapchainTimingPropertiesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSwapchainTimeDomainPropertiesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPastPresentationTimingInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPresentStageTimeEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPastPresentationTimingEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPastPresentationTimingPropertiesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPresentTimingInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPresentTimingsInfoEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkInitializePerformanceApiInfoINTEL* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkQueryPoolPerformanceQueryCreateInfoINTEL* wrapper); @@ -2138,6 +2128,7 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSamplerCustomBorderColorCreateInfoEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCustomBorderColorPropertiesEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCustomBorderColorFeaturesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentBarrierFeaturesNV* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSurfaceCapabilitiesPresentBarrierNV* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSwapchainPresentBarrierCreateInfoNV* wrapper); @@ -2150,6 +2141,18 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPerTileEndInfoQCOM* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDispatchTileInfoQCOM* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkQueryLowLatencySupportNV* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDescriptorBufferPropertiesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDescriptorBufferFeaturesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorAddressInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorBufferBindingInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBufferCaptureDescriptorDataInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageCaptureDescriptorDataInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageViewCaptureDescriptorDataInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSamplerCaptureDescriptorDataInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkOpaqueCaptureDescriptorDataCreateInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkAccelerationStructureCaptureDescriptorDataInfoEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkGraphicsPipelineLibraryCreateInfoEXT* wrapper); @@ -2211,6 +2214,10 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceColorWriteEnableFeaturesEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineColorWriteCreateInfoEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeRgbConversionCapabilitiesVALVE* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeProfileRgbConversionInfoVALVE* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkVideoEncodeSessionRgbConversionCreateInfoVALVE* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageViewMinLodFeaturesEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageViewMinLodCreateInfoEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiDrawFeaturesEXT* wrapper); @@ -2323,7 +2330,6 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkLayerSettingEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkLayerSettingsCreateInfoEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* wrapper); @@ -2338,6 +2344,28 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSwapchainLatencyCreateInfoNV* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkOutOfBandQueueTypeInfoNV* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkLatencySurfaceCapabilitiesNV* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDataGraphFeaturesARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelineConstantARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelineResourceInfoARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelineCompilerControlCreateInfoARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelineCreateInfoARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelineShaderModuleCreateInfoARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelineSessionCreateInfoARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelineSessionBindPointRequirementsInfoARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelineSessionBindPointRequirementARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelineSessionMemoryRequirementsInfoARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBindDataGraphPipelineSessionMemoryInfoARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelineInfoARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelinePropertyQueryResultARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelineIdentifierCreateInfoARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelineDispatchInfoARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDataGraphProcessingEngineARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDataGraphOperationSupportARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkQueueFamilyDataGraphPropertiesARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphProcessingEngineCreateInfoARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkQueueFamilyDataGraphProcessingEnginePropertiesARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePerStageDescriptorSetFeaturesNV* wrapper); @@ -2358,6 +2386,10 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkTileMemoryRequirementsQCOM* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkTileMemoryBindInfoQCOM* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkTileMemorySizeInfoQCOM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDecompressMemoryRegionEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDecompressMemoryInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMemoryDecompressionFeaturesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceMemoryDecompressionPropertiesEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDisplaySurfaceStereoCreateInfoNV* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDisplayModeStereoPropertiesNV* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRawAccessChainsFeaturesNV* wrapper); @@ -2400,6 +2432,8 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageAlignmentControlFeaturesMESA* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceImageAlignmentControlPropertiesMESA* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImageAlignmentControlCreateInfoMESA* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDepthClampControlFeaturesEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineViewportDepthClampControlCreateInfoEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceHdrVividFeaturesHUAWEI* wrapper); @@ -2411,6 +2445,11 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkImportMemoryMetalHandleInfoEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkMemoryMetalHandlePropertiesEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkMemoryGetMetalHandleInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPerformanceCounterARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPerformanceCounterDescriptionARM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderPassPerformanceCountersByRegionBeginInfoARM* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFormatPackFeaturesARM* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE* wrapper); @@ -2418,9 +2457,20 @@ size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkSetPresentConfigNV* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePresentMeteringFeaturesNV* wrapper); -size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkRenderingEndInfoEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShader64BitIndexingFeaturesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceCustomResolveFeaturesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkBeginCustomResolveInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkCustomResolveCreateInfoEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPipelineCacheHeaderVersionDataGraphQCOM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkDataGraphPipelineBuiltinModelCreateInfoQCOM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceDataGraphModelFeaturesQCOM* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderLongVectorFeaturesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderLongVectorPropertiesEXT* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkComputeOccupancyPriorityParametersNV* wrapper); +size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkAccelerationStructureBuildRangeInfoKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkAccelerationStructureGeometryTrianglesDataKHR* wrapper); size_t DecodeStruct(const uint8_t* parameter_buffer, size_t buffer_size, Decoded_VkAccelerationStructureGeometryAabbsDataKHR* wrapper); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_deep_copy.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_deep_copy.cpp index 38757f3ec..78cd90ad8 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_deep_copy.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_deep_copy.cpp @@ -697,7 +697,7 @@ size_t vulkan_struct_deep_copy(const VkSemaphoreCreateInfo* structs, uint32_t co } template <> -size_t vulkan_struct_deep_copy(const VkEventCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkQueryPoolCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -722,7 +722,7 @@ size_t vulkan_struct_deep_copy(const VkEventCreateInfo* structs, uint32_t count, } template <> -size_t vulkan_struct_deep_copy(const VkQueryPoolCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBufferCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -742,12 +742,13 @@ size_t vulkan_struct_deep_copy(const VkQueryPoolCreateInfo* structs, uint32_t co out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pQueueFamilyIndices, base_struct.queueFamilyIndexCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkBufferCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -773,7 +774,7 @@ size_t vulkan_struct_deep_copy(const VkBufferCreateInfo* structs, uint32_t count } template <> -size_t vulkan_struct_deep_copy(const VkBufferViewCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageViewCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -798,7 +799,7 @@ size_t vulkan_struct_deep_copy(const VkBufferViewCreateInfo* structs, uint32_t c } template <> -size_t vulkan_struct_deep_copy(const VkImageCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCommandPoolCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -818,13 +819,113 @@ size_t vulkan_struct_deep_copy(const VkImageCreateInfo* structs, uint32_t count, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pQueueFamilyIndices, base_struct.queueFamilyIndexCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImageViewCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCommandBufferAllocateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkCommandBufferBeginInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pInheritanceInfo, 1, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkEventCreateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkBufferViewCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -980,7 +1081,7 @@ size_t vulkan_struct_deep_copy(const VkComputePipelineCreateInfo* structs, uint3 } template <> -size_t vulkan_struct_deep_copy(const VkPipelineVertexInputStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineLayoutCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1000,14 +1101,14 @@ size_t vulkan_struct_deep_copy(const VkPipelineVertexInputStateCreateInfo* struc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pVertexBindingDescriptions, base_struct.vertexBindingDescriptionCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pVertexAttributeDescriptions, base_struct.vertexAttributeDescriptionCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSetLayouts, base_struct.setLayoutCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPushConstantRanges, base_struct.pushConstantRangeCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineInputAssemblyStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSamplerCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1032,7 +1133,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineInputAssemblyStateCreateInfo* str } template <> -size_t vulkan_struct_deep_copy(const VkPipelineTessellationStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCopyDescriptorSet* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1057,7 +1158,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineTessellationStateCreateInfo* stru } template <> -size_t vulkan_struct_deep_copy(const VkPipelineViewportStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorPoolCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1077,14 +1178,13 @@ size_t vulkan_struct_deep_copy(const VkPipelineViewportStateCreateInfo* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pViewports, base_struct.viewportCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pScissors, base_struct.scissorCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPoolSizes, base_struct.poolSizeCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineRasterizationStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorSetAllocateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1104,12 +1204,38 @@ size_t vulkan_struct_deep_copy(const VkPipelineRasterizationStateCreateInfo* str out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSetLayouts, base_struct.descriptorSetCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineMultisampleStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutBinding* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pointer(base_struct, base_struct.pImmutableSamplers, base_struct.descriptorCount, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1129,13 +1255,13 @@ size_t vulkan_struct_deep_copy(const VkPipelineMultisampleStateCreateInfo* struc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSampleMask, (base_struct.rasterizationSamples + 31) / 32, i, offset, out_data); + handle_pointer(base_struct, base_struct.pBindings, base_struct.bindingCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineDepthStencilStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkWriteDescriptorSet* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1155,12 +1281,15 @@ size_t vulkan_struct_deep_copy(const VkPipelineDepthStencilStateCreateInfo* stru out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pImageInfo, base_struct.descriptorCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pBufferInfo, base_struct.descriptorCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTexelBufferView, base_struct.descriptorCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineColorBlendStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineVertexInputStateCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1180,13 +1309,14 @@ size_t vulkan_struct_deep_copy(const VkPipelineColorBlendStateCreateInfo* struct out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAttachments, base_struct.attachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pVertexBindingDescriptions, base_struct.vertexBindingDescriptionCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pVertexAttributeDescriptions, base_struct.vertexAttributeDescriptionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineDynamicStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineInputAssemblyStateCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1206,13 +1336,1293 @@ size_t vulkan_struct_deep_copy(const VkPipelineDynamicStateCreateInfo* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDynamicStates, base_struct.dynamicStateCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkGraphicsPipelineCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineTessellationStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPipelineViewportStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pViewports, base_struct.viewportCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pScissors, base_struct.scissorCount, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPipelineRasterizationStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPipelineMultisampleStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSampleMask, (base_struct.rasterizationSamples + 31) / 32, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPipelineDepthStencilStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPipelineColorBlendStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAttachments, base_struct.attachmentCount, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPipelineDynamicStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDynamicStates, base_struct.dynamicStateCount, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkGraphicsPipelineCreateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStages, base_struct.stageCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pVertexInputState, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pInputAssemblyState, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTessellationState, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pViewportState, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRasterizationState, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pMultisampleState, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDepthStencilState, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pColorBlendState, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDynamicState, 1, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkFramebufferCreateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAttachments, base_struct.attachmentCount, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkSubpassDescription* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pointer(base_struct, base_struct.pInputAttachments, base_struct.inputAttachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pColorAttachments, base_struct.colorAttachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pResolveAttachments, base_struct.colorAttachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDepthStencilAttachment, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPreserveAttachments, base_struct.preserveAttachmentCount, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkRenderPassCreateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAttachments, base_struct.attachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSubpasses, base_struct.subpassCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDependencies, base_struct.dependencyCount, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkRenderPassBeginInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pClearValues, base_struct.clearValueCount, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkBindBufferMemoryInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkBindImageMemoryInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkMemoryDedicatedRequirements* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkMemoryDedicatedAllocateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkMemoryAllocateFlagsInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkDeviceGroupCommandBufferBeginInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkDeviceGroupSubmitInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pWaitSemaphoreDeviceIndices, base_struct.waitSemaphoreCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCommandBufferDeviceMasks, base_struct.commandBufferCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSignalSemaphoreDeviceIndices, base_struct.signalSemaphoreCount, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkDeviceGroupBindSparseInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkBindBufferMemoryDeviceGroupInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDeviceIndices, base_struct.deviceIndexCount, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkBindImageMemoryDeviceGroupInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDeviceIndices, base_struct.deviceIndexCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSplitInstanceBindRegions, base_struct.splitInstanceBindRegionCount, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceGroupProperties* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkDeviceGroupDeviceCreateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPhysicalDevices, base_struct.physicalDeviceCount, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkBufferMemoryRequirementsInfo2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkImageMemoryRequirementsInfo2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkImageSparseMemoryRequirementsInfo2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkMemoryRequirements2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkSparseImageMemoryRequirements2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFeatures2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProperties2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkFormatProperties2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkImageFormatProperties2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageFormatInfo2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkQueueFamilyProperties2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMemoryProperties2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkSparseImageFormatProperties2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSparseImageFormatInfo2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkImageViewUsageCreateInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProtectedMemoryFeatures* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProtectedMemoryProperties* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkDeviceQueueInfo2* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkProtectedSubmitInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkBindImagePlaneMemoryInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkImagePlaneMemoryRequirementsInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalImageFormatInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkExternalImageFormatProperties* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalBufferInfo* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkExternalBufferProperties* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceIDProperties* structs, uint32_t count, uint8_t* out_data) +{ + using struct_type = std::decay_t; + constexpr uint32_t struct_size = sizeof(struct_type); + + if (structs == nullptr || count == 0) + { + return 0; + } + uint64_t offset = struct_size * count; + + for (uint32_t i = 0; i < count; ++i) + { + const auto& base_struct = structs[i]; + if (out_data != nullptr) + { + auto out_structures = reinterpret_cast(out_data); + out_structures[i] = base_struct; + } + handle_pnext(base_struct, i, offset, out_data); + } + return offset; +} + +template <> +size_t vulkan_struct_deep_copy(const VkExternalMemoryImageCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1232,22 +2642,12 @@ size_t vulkan_struct_deep_copy(const VkGraphicsPipelineCreateInfo* structs, uint out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStages, base_struct.stageCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pVertexInputState, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pInputAssemblyState, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pTessellationState, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pViewportState, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pRasterizationState, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pMultisampleState, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDepthStencilState, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pColorBlendState, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDynamicState, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineLayoutCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkExternalMemoryBufferCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1267,14 +2667,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineLayoutCreateInfo* structs, uint32 out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSetLayouts, base_struct.setLayoutCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPushConstantRanges, base_struct.pushConstantRangeCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSamplerCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkExportMemoryAllocateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1299,7 +2697,7 @@ size_t vulkan_struct_deep_copy(const VkSamplerCreateInfo* structs, uint32_t coun } template <> -size_t vulkan_struct_deep_copy(const VkCopyDescriptorSet* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalFenceInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1324,7 +2722,7 @@ size_t vulkan_struct_deep_copy(const VkCopyDescriptorSet* structs, uint32_t coun } template <> -size_t vulkan_struct_deep_copy(const VkDescriptorPoolCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkExternalFenceProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1344,13 +2742,12 @@ size_t vulkan_struct_deep_copy(const VkDescriptorPoolCreateInfo* structs, uint32 out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPoolSizes, base_struct.poolSizeCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDescriptorSetAllocateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkExportFenceCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1370,13 +2767,12 @@ size_t vulkan_struct_deep_copy(const VkDescriptorSetAllocateInfo* structs, uint3 out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSetLayouts, base_struct.descriptorSetCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutBinding* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkExportSemaphoreCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1395,13 +2791,13 @@ size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutBinding* structs, uint auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pointer(base_struct, base_struct.pImmutableSamplers, base_struct.descriptorCount, i, offset, out_data); + handle_pnext(base_struct, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalSemaphoreInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1421,13 +2817,12 @@ size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutCreateInfo* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pBindings, base_struct.bindingCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkWriteDescriptorSet* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkExternalSemaphoreProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1447,15 +2842,12 @@ size_t vulkan_struct_deep_copy(const VkWriteDescriptorSet* structs, uint32_t cou out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pImageInfo, base_struct.descriptorCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pBufferInfo, base_struct.descriptorCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pTexelBufferView, base_struct.descriptorCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkFramebufferCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSubgroupProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1475,13 +2867,12 @@ size_t vulkan_struct_deep_copy(const VkFramebufferCreateInfo* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAttachments, base_struct.attachmentCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSubpassDescription* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevice16BitStorageFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1500,17 +2891,13 @@ size_t vulkan_struct_deep_copy(const VkSubpassDescription* structs, uint32_t cou auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pointer(base_struct, base_struct.pInputAttachments, base_struct.inputAttachmentCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pColorAttachments, base_struct.colorAttachmentCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pResolveAttachments, base_struct.colorAttachmentCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDepthStencilAttachment, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPreserveAttachments, base_struct.preserveAttachmentCount, i, offset, out_data); + handle_pnext(base_struct, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVariablePointersFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1530,15 +2917,12 @@ size_t vulkan_struct_deep_copy(const VkRenderPassCreateInfo* structs, uint32_t c out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAttachments, base_struct.attachmentCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSubpasses, base_struct.subpassCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDependencies, base_struct.dependencyCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkCommandPoolCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorUpdateTemplateCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1558,12 +2942,13 @@ size_t vulkan_struct_deep_copy(const VkCommandPoolCreateInfo* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDescriptorUpdateEntries, base_struct.descriptorUpdateEntryCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkCommandBufferAllocateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance3Properties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1588,7 +2973,7 @@ size_t vulkan_struct_deep_copy(const VkCommandBufferAllocateInfo* structs, uint3 } template <> -size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutSupport* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1613,7 +2998,7 @@ size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceInfo* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkCommandBufferBeginInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSamplerYcbcrConversionCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1633,13 +3018,12 @@ size_t vulkan_struct_deep_copy(const VkCommandBufferBeginInfo* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pInheritanceInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassBeginInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSamplerYcbcrConversionInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1659,13 +3043,12 @@ size_t vulkan_struct_deep_copy(const VkRenderPassBeginInfo* structs, uint32_t co out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pClearValues, base_struct.clearValueCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSubgroupProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSamplerYcbcrConversionFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1690,7 +3073,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSubgroupProperties* structs } template <> -size_t vulkan_struct_deep_copy(const VkBindBufferMemoryInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSamplerYcbcrConversionImageFormatProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1715,7 +3098,7 @@ size_t vulkan_struct_deep_copy(const VkBindBufferMemoryInfo* structs, uint32_t c } template <> -size_t vulkan_struct_deep_copy(const VkBindImageMemoryInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceGroupRenderPassBeginInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1735,12 +3118,13 @@ size_t vulkan_struct_deep_copy(const VkBindImageMemoryInfo* structs, uint32_t co out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDeviceRenderAreas, base_struct.deviceRenderAreaCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevice16BitStorageFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePointClippingProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1765,7 +3149,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevice16BitStorageFeatures* struc } template <> -size_t vulkan_struct_deep_copy(const VkMemoryDedicatedRequirements* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassInputAttachmentAspectCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1785,12 +3169,13 @@ size_t vulkan_struct_deep_copy(const VkMemoryDedicatedRequirements* structs, uin out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAspectReferences, base_struct.aspectReferenceCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkMemoryDedicatedAllocateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineTessellationDomainOriginStateCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1815,7 +3200,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryDedicatedAllocateInfo* structs, uin } template <> -size_t vulkan_struct_deep_copy(const VkMemoryAllocateFlagsInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassMultiviewCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1835,12 +3220,15 @@ size_t vulkan_struct_deep_copy(const VkMemoryAllocateFlagsInfo* structs, uint32_ out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pViewMasks, base_struct.subpassCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pViewOffsets, base_struct.dependencyCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCorrelationMasks, base_struct.correlationMaskCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDeviceGroupRenderPassBeginInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1860,13 +3248,12 @@ size_t vulkan_struct_deep_copy(const VkDeviceGroupRenderPassBeginInfo* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDeviceRenderAreas, base_struct.deviceRenderAreaCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDeviceGroupCommandBufferBeginInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1891,7 +3278,7 @@ size_t vulkan_struct_deep_copy(const VkDeviceGroupCommandBufferBeginInfo* struct } template <> -size_t vulkan_struct_deep_copy(const VkDeviceGroupSubmitInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderDrawParametersFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1911,15 +3298,12 @@ size_t vulkan_struct_deep_copy(const VkDeviceGroupSubmitInfo* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pWaitSemaphoreDeviceIndices, base_struct.waitSemaphoreCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCommandBufferDeviceMasks, base_struct.commandBufferCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSignalSemaphoreDeviceIndices, base_struct.signalSemaphoreCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDeviceGroupBindSparseInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan11Features* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1944,7 +3328,7 @@ size_t vulkan_struct_deep_copy(const VkDeviceGroupBindSparseInfo* structs, uint3 } template <> -size_t vulkan_struct_deep_copy(const VkBindBufferMemoryDeviceGroupInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan11Properties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1964,13 +3348,12 @@ size_t vulkan_struct_deep_copy(const VkBindBufferMemoryDeviceGroupInfo* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDeviceIndices, base_struct.deviceIndexCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkBindImageMemoryDeviceGroupInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan12Features* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -1990,14 +3373,12 @@ size_t vulkan_struct_deep_copy(const VkBindImageMemoryDeviceGroupInfo* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDeviceIndices, base_struct.deviceIndexCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSplitInstanceBindRegions, base_struct.splitInstanceBindRegionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceGroupProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan12Properties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2022,7 +3403,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceGroupProperties* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkDeviceGroupDeviceCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageFormatListCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2042,13 +3423,13 @@ size_t vulkan_struct_deep_copy(const VkDeviceGroupDeviceCreateInfo* structs, uin out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPhysicalDevices, base_struct.physicalDeviceCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pViewFormats, base_struct.viewFormatCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkBufferMemoryRequirementsInfo2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDriverProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2073,7 +3454,7 @@ size_t vulkan_struct_deep_copy(const VkBufferMemoryRequirementsInfo2* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkImageMemoryRequirementsInfo2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkanMemoryModelFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2098,7 +3479,7 @@ size_t vulkan_struct_deep_copy(const VkImageMemoryRequirementsInfo2* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkImageSparseMemoryRequirementsInfo2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceHostQueryResetFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2123,7 +3504,7 @@ size_t vulkan_struct_deep_copy(const VkImageSparseMemoryRequirementsInfo2* struc } template <> -size_t vulkan_struct_deep_copy(const VkMemoryRequirements2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTimelineSemaphoreFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2148,7 +3529,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryRequirements2* structs, uint32_t co } template <> -size_t vulkan_struct_deep_copy(const VkSparseImageMemoryRequirements2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTimelineSemaphoreProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2173,7 +3554,7 @@ size_t vulkan_struct_deep_copy(const VkSparseImageMemoryRequirements2* structs, } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFeatures2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSemaphoreTypeCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2198,7 +3579,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFeatures2* structs, uint32_ } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProperties2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkTimelineSemaphoreSubmitInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2218,12 +3599,14 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProperties2* structs, uint3 out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pWaitSemaphoreValues, base_struct.waitSemaphoreValueCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSignalSemaphoreValues, base_struct.signalSemaphoreValueCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkFormatProperties2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSemaphoreWaitInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2243,12 +3626,14 @@ size_t vulkan_struct_deep_copy(const VkFormatProperties2* structs, uint32_t coun out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSemaphores, base_struct.semaphoreCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pValues, base_struct.semaphoreCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImageFormatProperties2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSemaphoreSignalInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2273,7 +3658,7 @@ size_t vulkan_struct_deep_copy(const VkImageFormatProperties2* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageFormatInfo2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBufferDeviceAddressFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2298,7 +3683,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageFormatInfo2* structs, } template <> -size_t vulkan_struct_deep_copy(const VkQueueFamilyProperties2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBufferDeviceAddressInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2323,7 +3708,7 @@ size_t vulkan_struct_deep_copy(const VkQueueFamilyProperties2* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMemoryProperties2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBufferOpaqueCaptureAddressCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2348,7 +3733,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMemoryProperties2* structs, } template <> -size_t vulkan_struct_deep_copy(const VkSparseImageFormatProperties2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryOpaqueCaptureAddressAllocateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2373,7 +3758,7 @@ size_t vulkan_struct_deep_copy(const VkSparseImageFormatProperties2* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSparseImageFormatInfo2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceMemoryOpaqueCaptureAddressInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2398,7 +3783,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSparseImageFormatInfo2* str } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePointClippingProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevice8BitStorageFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2423,7 +3808,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePointClippingProperties* st } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassInputAttachmentAspectCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderAtomicInt64Features* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2443,13 +3828,12 @@ size_t vulkan_struct_deep_copy(const VkRenderPassInputAttachmentAspectCreateInfo out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAspectReferences, base_struct.aspectReferenceCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImageViewUsageCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderFloat16Int8Features* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2474,7 +3858,7 @@ size_t vulkan_struct_deep_copy(const VkImageViewUsageCreateInfo* structs, uint32 } template <> -size_t vulkan_struct_deep_copy(const VkPipelineTessellationDomainOriginStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFloatControlsProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2499,7 +3883,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineTessellationDomainOriginStateCrea } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassMultiviewCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutBindingFlagsCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2519,15 +3903,13 @@ size_t vulkan_struct_deep_copy(const VkRenderPassMultiviewCreateInfo* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pViewMasks, base_struct.subpassCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pViewOffsets, base_struct.dependencyCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCorrelationMasks, base_struct.correlationMaskCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pBindingFlags, base_struct.bindingCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorIndexingFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2552,7 +3934,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewFeatures* structs, } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorIndexingProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2577,7 +3959,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewProperties* struct } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVariablePointersFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorSetVariableDescriptorCountAllocateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2597,12 +3979,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVariablePointersFeatures* s out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDescriptorCounts, base_struct.descriptorSetCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProtectedMemoryFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorSetVariableDescriptorCountLayoutSupport* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2627,7 +4010,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProtectedMemoryFeatures* st } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProtectedMemoryProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceScalarBlockLayoutFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2652,7 +4035,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProtectedMemoryProperties* } template <> -size_t vulkan_struct_deep_copy(const VkDeviceQueueInfo2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSamplerReductionModeCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2677,7 +4060,7 @@ size_t vulkan_struct_deep_copy(const VkDeviceQueueInfo2* structs, uint32_t count } template <> -size_t vulkan_struct_deep_copy(const VkProtectedSubmitInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSamplerFilterMinmaxProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2702,7 +4085,7 @@ size_t vulkan_struct_deep_copy(const VkProtectedSubmitInfo* structs, uint32_t co } template <> -size_t vulkan_struct_deep_copy(const VkSamplerYcbcrConversionCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceUniformBufferStandardLayoutFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2727,7 +4110,7 @@ size_t vulkan_struct_deep_copy(const VkSamplerYcbcrConversionCreateInfo* structs } template <> -size_t vulkan_struct_deep_copy(const VkSamplerYcbcrConversionInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2752,7 +4135,7 @@ size_t vulkan_struct_deep_copy(const VkSamplerYcbcrConversionInfo* structs, uint } template <> -size_t vulkan_struct_deep_copy(const VkBindImagePlaneMemoryInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAttachmentDescription2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2777,7 +4160,7 @@ size_t vulkan_struct_deep_copy(const VkBindImagePlaneMemoryInfo* structs, uint32 } template <> -size_t vulkan_struct_deep_copy(const VkImagePlaneMemoryRequirementsInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAttachmentReference2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2802,7 +4185,7 @@ size_t vulkan_struct_deep_copy(const VkImagePlaneMemoryRequirementsInfo* structs } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSamplerYcbcrConversionFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSubpassDescription2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2822,12 +4205,17 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSamplerYcbcrConversionFeatu out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pInputAttachments, base_struct.inputAttachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pColorAttachments, base_struct.colorAttachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pResolveAttachments, base_struct.colorAttachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDepthStencilAttachment, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPreserveAttachments, base_struct.preserveAttachmentCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSamplerYcbcrConversionImageFormatProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSubpassDependency2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2852,7 +4240,7 @@ size_t vulkan_struct_deep_copy(const VkSamplerYcbcrConversionImageFormatProperti } template <> -size_t vulkan_struct_deep_copy(const VkDescriptorUpdateTemplateCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassCreateInfo2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2872,13 +4260,16 @@ size_t vulkan_struct_deep_copy(const VkDescriptorUpdateTemplateCreateInfo* struc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDescriptorUpdateEntries, base_struct.descriptorUpdateEntryCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAttachments, base_struct.attachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSubpasses, base_struct.subpassCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDependencies, base_struct.dependencyCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCorrelatedViewMasks, base_struct.correlatedViewMaskCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalImageFormatInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSubpassBeginInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2903,7 +4294,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalImageFormatInfo* st } template <> -size_t vulkan_struct_deep_copy(const VkExternalImageFormatProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSubpassEndInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2928,7 +4319,7 @@ size_t vulkan_struct_deep_copy(const VkExternalImageFormatProperties* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalBufferInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSubpassDescriptionDepthStencilResolve* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2948,12 +4339,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalBufferInfo* structs out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDepthStencilResolveAttachment, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkExternalBufferProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthStencilResolveProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -2978,7 +4370,7 @@ size_t vulkan_struct_deep_copy(const VkExternalBufferProperties* structs, uint32 } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceIDProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageStencilUsageCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3003,7 +4395,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceIDProperties* structs, uint } template <> -size_t vulkan_struct_deep_copy(const VkExternalMemoryImageCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImagelessFramebufferFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3028,7 +4420,7 @@ size_t vulkan_struct_deep_copy(const VkExternalMemoryImageCreateInfo* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkExternalMemoryBufferCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkFramebufferAttachmentImageInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3048,12 +4440,13 @@ size_t vulkan_struct_deep_copy(const VkExternalMemoryBufferCreateInfo* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pViewFormats, base_struct.viewFormatCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkExportMemoryAllocateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkFramebufferAttachmentsCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3073,12 +4466,13 @@ size_t vulkan_struct_deep_copy(const VkExportMemoryAllocateInfo* structs, uint32 out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAttachmentImageInfos, base_struct.attachmentImageInfoCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalFenceInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassAttachmentBeginInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3098,12 +4492,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalFenceInfo* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAttachments, base_struct.attachmentCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkExternalFenceProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3128,7 +4523,7 @@ size_t vulkan_struct_deep_copy(const VkExternalFenceProperties* structs, uint32_ } template <> -size_t vulkan_struct_deep_copy(const VkExportFenceCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAttachmentReferenceStencilLayout* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3153,7 +4548,7 @@ size_t vulkan_struct_deep_copy(const VkExportFenceCreateInfo* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkExportSemaphoreCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAttachmentDescriptionStencilLayout* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3178,7 +4573,7 @@ size_t vulkan_struct_deep_copy(const VkExportSemaphoreCreateInfo* structs, uint3 } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalSemaphoreInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan13Features* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3203,7 +4598,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalSemaphoreInfo* stru } template <> -size_t vulkan_struct_deep_copy(const VkExternalSemaphoreProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan13Properties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3228,7 +4623,7 @@ size_t vulkan_struct_deep_copy(const VkExternalSemaphoreProperties* structs, uin } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance3Properties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceToolProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3253,7 +4648,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance3Properties* str } template <> -size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutSupport* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePrivateDataFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3278,7 +4673,7 @@ size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutSupport* structs, uint } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderDrawParametersFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDevicePrivateDataCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3303,7 +4698,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderDrawParametersFeature } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan11Features* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPrivateDataSlotCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3328,7 +4723,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan11Features* structs, } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan11Properties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryBarrier2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3353,7 +4748,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan11Properties* structs } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan12Features* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBufferMemoryBarrier2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3378,7 +4773,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan12Features* structs, } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan12Properties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageMemoryBarrier2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3403,7 +4798,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan12Properties* structs } template <> -size_t vulkan_struct_deep_copy(const VkImageFormatListCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDependencyInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3423,13 +4818,15 @@ size_t vulkan_struct_deep_copy(const VkImageFormatListCreateInfo* structs, uint3 out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pViewFormats, base_struct.viewFormatCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pMemoryBarriers, base_struct.memoryBarrierCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pBufferMemoryBarriers, base_struct.bufferMemoryBarrierCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pImageMemoryBarriers, base_struct.imageMemoryBarrierCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkAttachmentDescription2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSemaphoreSubmitInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3454,7 +4851,7 @@ size_t vulkan_struct_deep_copy(const VkAttachmentDescription2* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkAttachmentReference2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCommandBufferSubmitInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3479,7 +4876,7 @@ size_t vulkan_struct_deep_copy(const VkAttachmentReference2* structs, uint32_t c } template <> -size_t vulkan_struct_deep_copy(const VkSubpassDescription2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSubmitInfo2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3499,17 +4896,15 @@ size_t vulkan_struct_deep_copy(const VkSubpassDescription2* structs, uint32_t co out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pInputAttachments, base_struct.inputAttachmentCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pColorAttachments, base_struct.colorAttachmentCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pResolveAttachments, base_struct.colorAttachmentCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDepthStencilAttachment, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPreserveAttachments, base_struct.preserveAttachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pWaitSemaphoreInfos, base_struct.waitSemaphoreInfoCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCommandBufferInfos, base_struct.commandBufferInfoCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSignalSemaphoreInfos, base_struct.signalSemaphoreInfoCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSubpassDependency2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSynchronization2Features* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3534,7 +4929,7 @@ size_t vulkan_struct_deep_copy(const VkSubpassDependency2* structs, uint32_t cou } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassCreateInfo2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBufferCopy2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3554,16 +4949,12 @@ size_t vulkan_struct_deep_copy(const VkRenderPassCreateInfo2* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAttachments, base_struct.attachmentCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSubpasses, base_struct.subpassCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDependencies, base_struct.dependencyCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCorrelatedViewMasks, base_struct.correlatedViewMaskCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSubpassBeginInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCopyBufferInfo2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3583,12 +4974,13 @@ size_t vulkan_struct_deep_copy(const VkSubpassBeginInfo* structs, uint32_t count out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSubpassEndInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageCopy2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3613,7 +5005,7 @@ size_t vulkan_struct_deep_copy(const VkSubpassEndInfo* structs, uint32_t count, } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevice8BitStorageFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCopyImageInfo2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3633,12 +5025,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevice8BitStorageFeatures* struct out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDriverProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBufferImageCopy2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3663,7 +5056,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDriverProperties* structs, } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderAtomicInt64Features* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCopyBufferToImageInfo2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3683,12 +5076,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderAtomicInt64Features* out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderFloat16Int8Features* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCopyImageToBufferInfo2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3708,12 +5102,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderFloat16Int8Features* out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFloatControlsProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTextureCompressionASTCHDRFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3738,7 +5133,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFloatControlsProperties* st } template <> -size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutBindingFlagsCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkFormatProperties3* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3758,13 +5153,12 @@ size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutBindingFlagsCreateInfo out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pBindingFlags, base_struct.bindingCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorIndexingFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance4Features* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3789,7 +5183,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorIndexingFeatures* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorIndexingProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance4Properties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3814,7 +5208,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorIndexingPropertie } template <> -size_t vulkan_struct_deep_copy(const VkDescriptorSetVariableDescriptorCountAllocateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceBufferMemoryRequirements* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3834,13 +5228,13 @@ size_t vulkan_struct_deep_copy(const VkDescriptorSetVariableDescriptorCountAlloc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDescriptorCounts, base_struct.descriptorSetCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCreateInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDescriptorSetVariableDescriptorCountLayoutSupport* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceImageMemoryRequirements* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3860,12 +5254,13 @@ size_t vulkan_struct_deep_copy(const VkDescriptorSetVariableDescriptorCountLayou out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCreateInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSubpassDescriptionDepthStencilResolve* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineCreationFeedbackCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3885,13 +5280,14 @@ size_t vulkan_struct_deep_copy(const VkSubpassDescriptionDepthStencilResolve* st out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDepthStencilResolveAttachment, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPipelineCreationFeedback, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPipelineStageCreationFeedbacks, base_struct.pipelineStageCreationFeedbackCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthStencilResolveProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderTerminateInvocationFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3916,7 +5312,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthStencilResolveProperti } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceScalarBlockLayoutFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3941,7 +5337,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceScalarBlockLayoutFeatures* } template <> -size_t vulkan_struct_deep_copy(const VkImageStencilUsageCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineCreationCacheControlFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3966,7 +5362,7 @@ size_t vulkan_struct_deep_copy(const VkImageStencilUsageCreateInfo* structs, uin } template <> -size_t vulkan_struct_deep_copy(const VkSamplerReductionModeCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -3991,7 +5387,7 @@ size_t vulkan_struct_deep_copy(const VkSamplerReductionModeCreateInfo* structs, } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSamplerFilterMinmaxProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageRobustnessFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4016,7 +5412,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSamplerFilterMinmaxProperti } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkanMemoryModelFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSubgroupSizeControlFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4041,7 +5437,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkanMemoryModelFeatures* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImagelessFramebufferFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSubgroupSizeControlProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4066,7 +5462,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImagelessFramebufferFeature } template <> -size_t vulkan_struct_deep_copy(const VkFramebufferAttachmentImageInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4086,13 +5482,12 @@ size_t vulkan_struct_deep_copy(const VkFramebufferAttachmentImageInfo* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pViewFormats, base_struct.viewFormatCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkFramebufferAttachmentsCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceInlineUniformBlockFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4112,13 +5507,12 @@ size_t vulkan_struct_deep_copy(const VkFramebufferAttachmentsCreateInfo* structs out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAttachmentImageInfos, base_struct.attachmentImageInfoCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassAttachmentBeginInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceInlineUniformBlockProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4138,13 +5532,12 @@ size_t vulkan_struct_deep_copy(const VkRenderPassAttachmentBeginInfo* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAttachments, base_struct.attachmentCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceUniformBufferStandardLayoutFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkWriteDescriptorSetInlineUniformBlock* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4164,12 +5557,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceUniformBufferStandardLayout out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pData, base_struct.dataSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorPoolInlineUniformBlockCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4194,7 +5588,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSubgroupExtendedTypes } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderIntegerDotProductFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4219,7 +5613,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSeparateDepthStencilLayouts } template <> -size_t vulkan_struct_deep_copy(const VkAttachmentReferenceStencilLayout* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderIntegerDotProductProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4244,7 +5638,7 @@ size_t vulkan_struct_deep_copy(const VkAttachmentReferenceStencilLayout* structs } template <> -size_t vulkan_struct_deep_copy(const VkAttachmentDescriptionStencilLayout* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTexelBufferAlignmentProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4269,7 +5663,7 @@ size_t vulkan_struct_deep_copy(const VkAttachmentDescriptionStencilLayout* struc } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceHostQueryResetFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageBlit2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4294,7 +5688,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceHostQueryResetFeatures* str } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTimelineSemaphoreFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBlitImageInfo2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4314,12 +5708,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTimelineSemaphoreFeatures* out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTimelineSemaphoreProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageResolve2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4344,7 +5739,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTimelineSemaphoreProperties } template <> -size_t vulkan_struct_deep_copy(const VkSemaphoreTypeCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkResolveImageInfo2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4364,12 +5759,13 @@ size_t vulkan_struct_deep_copy(const VkSemaphoreTypeCreateInfo* structs, uint32_ out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkTimelineSemaphoreSubmitInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderingAttachmentInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4389,14 +5785,12 @@ size_t vulkan_struct_deep_copy(const VkTimelineSemaphoreSubmitInfo* structs, uin out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pWaitSemaphoreValues, base_struct.waitSemaphoreValueCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSignalSemaphoreValues, base_struct.signalSemaphoreValueCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSemaphoreWaitInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderingInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4416,14 +5810,15 @@ size_t vulkan_struct_deep_copy(const VkSemaphoreWaitInfo* structs, uint32_t coun out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSemaphores, base_struct.semaphoreCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pValues, base_struct.semaphoreCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pColorAttachments, base_struct.colorAttachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDepthAttachment, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStencilAttachment, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSemaphoreSignalInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineRenderingCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4443,12 +5838,13 @@ size_t vulkan_struct_deep_copy(const VkSemaphoreSignalInfo* structs, uint32_t co out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pColorAttachmentFormats, base_struct.colorAttachmentCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBufferDeviceAddressFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDynamicRenderingFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4473,7 +5869,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBufferDeviceAddressFeatures } template <> -size_t vulkan_struct_deep_copy(const VkBufferDeviceAddressInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceRenderingInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4493,12 +5889,13 @@ size_t vulkan_struct_deep_copy(const VkBufferDeviceAddressInfo* structs, uint32_ out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pColorAttachmentFormats, base_struct.colorAttachmentCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkBufferOpaqueCaptureAddressCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan14Features* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4523,7 +5920,7 @@ size_t vulkan_struct_deep_copy(const VkBufferOpaqueCaptureAddressCreateInfo* str } template <> -size_t vulkan_struct_deep_copy(const VkMemoryOpaqueCaptureAddressAllocateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan14Properties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4543,12 +5940,14 @@ size_t vulkan_struct_deep_copy(const VkMemoryOpaqueCaptureAddressAllocateInfo* s out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCopySrcLayouts, base_struct.copySrcLayoutCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCopyDstLayouts, base_struct.copyDstLayoutCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDeviceMemoryOpaqueCaptureAddressInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceQueueGlobalPriorityCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4573,7 +5972,7 @@ size_t vulkan_struct_deep_copy(const VkDeviceMemoryOpaqueCaptureAddressInfo* str } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan13Features* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceGlobalPriorityQueryFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4598,7 +5997,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan13Features* structs, } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan13Properties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkQueueFamilyGlobalPriorityProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4623,7 +6022,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan13Properties* structs } template <> -size_t vulkan_struct_deep_copy(const VkPipelineCreationFeedbackCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceIndexTypeUint8Features* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4643,14 +6042,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineCreationFeedbackCreateInfo* struc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPipelineCreationFeedback, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPipelineStageCreationFeedbacks, base_struct.pipelineStageCreationFeedbackCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderTerminateInvocationFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryMapInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4675,7 +6072,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderTerminateInvocationFe } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceToolProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryUnmapInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4700,7 +6097,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceToolProperties* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance5Features* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4725,7 +6122,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderDemoteToHelperInvocat } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePrivateDataFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance5Properties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4750,7 +6147,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePrivateDataFeatures* struct } template <> -size_t vulkan_struct_deep_copy(const VkDevicePrivateDataCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageSubresource2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4775,7 +6172,7 @@ size_t vulkan_struct_deep_copy(const VkDevicePrivateDataCreateInfo* structs, uin } template <> -size_t vulkan_struct_deep_copy(const VkPrivateDataSlotCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceImageSubresourceInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4795,12 +6192,14 @@ size_t vulkan_struct_deep_copy(const VkPrivateDataSlotCreateInfo* structs, uint3 out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCreateInfo, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSubresource, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineCreationCacheControlFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSubresourceLayout2* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4825,7 +6224,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineCreationCacheContro } template <> -size_t vulkan_struct_deep_copy(const VkMemoryBarrier2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBufferUsageFlags2CreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4850,7 +6249,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryBarrier2* structs, uint32_t count, } template <> -size_t vulkan_struct_deep_copy(const VkBufferMemoryBarrier2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance6Features* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4875,7 +6274,7 @@ size_t vulkan_struct_deep_copy(const VkBufferMemoryBarrier2* structs, uint32_t c } template <> -size_t vulkan_struct_deep_copy(const VkImageMemoryBarrier2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance6Properties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4900,7 +6299,7 @@ size_t vulkan_struct_deep_copy(const VkImageMemoryBarrier2* structs, uint32_t co } template <> -size_t vulkan_struct_deep_copy(const VkDependencyInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBindMemoryStatus* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4920,15 +6319,13 @@ size_t vulkan_struct_deep_copy(const VkDependencyInfo* structs, uint32_t count, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pMemoryBarriers, base_struct.memoryBarrierCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pBufferMemoryBarriers, base_struct.bufferMemoryBarrierCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pImageMemoryBarriers, base_struct.imageMemoryBarrierCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pResult, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSemaphoreSubmitInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceHostImageCopyFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4953,7 +6350,7 @@ size_t vulkan_struct_deep_copy(const VkSemaphoreSubmitInfo* structs, uint32_t co } template <> -size_t vulkan_struct_deep_copy(const VkCommandBufferSubmitInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceHostImageCopyProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4973,12 +6370,14 @@ size_t vulkan_struct_deep_copy(const VkCommandBufferSubmitInfo* structs, uint32_ out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCopySrcLayouts, base_struct.copySrcLayoutCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCopyDstLayouts, base_struct.copyDstLayoutCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSubmitInfo2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryToImageCopy* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -4998,15 +6397,12 @@ size_t vulkan_struct_deep_copy(const VkSubmitInfo2* structs, uint32_t count, uin out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pWaitSemaphoreInfos, base_struct.waitSemaphoreInfoCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCommandBufferInfos, base_struct.commandBufferInfoCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSignalSemaphoreInfos, base_struct.signalSemaphoreInfoCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSynchronization2Features* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageToMemoryCopy* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5031,7 +6427,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSynchronization2Features* s } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCopyMemoryToImageInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5051,12 +6447,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceZeroInitializeWorkgroupMemo out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageRobustnessFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCopyImageToMemoryInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5076,12 +6473,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageRobustnessFeatures* st out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkBufferCopy2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCopyImageToImageInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5101,12 +6499,13 @@ size_t vulkan_struct_deep_copy(const VkBufferCopy2* structs, uint32_t count, uin out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkCopyBufferInfo2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkHostImageLayoutTransitionInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5126,13 +6525,12 @@ size_t vulkan_struct_deep_copy(const VkCopyBufferInfo2* structs, uint32_t count, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImageCopy2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSubresourceHostMemcpySize* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5157,7 +6555,7 @@ size_t vulkan_struct_deep_copy(const VkImageCopy2* structs, uint32_t count, uint } template <> -size_t vulkan_struct_deep_copy(const VkCopyImageInfo2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkHostImageCopyDevicePerformanceQuery* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5177,13 +6575,12 @@ size_t vulkan_struct_deep_copy(const VkCopyImageInfo2* structs, uint32_t count, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkBufferImageCopy2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSubgroupRotateFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5208,7 +6605,7 @@ size_t vulkan_struct_deep_copy(const VkBufferImageCopy2* structs, uint32_t count } template <> -size_t vulkan_struct_deep_copy(const VkCopyBufferToImageInfo2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderFloatControls2Features* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5228,13 +6625,12 @@ size_t vulkan_struct_deep_copy(const VkCopyBufferToImageInfo2* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkCopyImageToBufferInfo2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderExpectAssumeFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5254,13 +6650,12 @@ size_t vulkan_struct_deep_copy(const VkCopyImageToBufferInfo2* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImageBlit2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineCreateFlags2CreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5285,7 +6680,7 @@ size_t vulkan_struct_deep_copy(const VkImageBlit2* structs, uint32_t count, uint } template <> -size_t vulkan_struct_deep_copy(const VkBlitImageInfo2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePushDescriptorProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5305,13 +6700,12 @@ size_t vulkan_struct_deep_copy(const VkBlitImageInfo2* structs, uint32_t count, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImageResolve2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBindDescriptorSetsInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5331,12 +6725,14 @@ size_t vulkan_struct_deep_copy(const VkImageResolve2* structs, uint32_t count, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDescriptorSets, base_struct.descriptorSetCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDynamicOffsets, base_struct.dynamicOffsetCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkResolveImageInfo2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPushConstantsInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5356,13 +6752,13 @@ size_t vulkan_struct_deep_copy(const VkResolveImageInfo2* structs, uint32_t coun out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pValues, base_struct.size, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSubgroupSizeControlFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPushDescriptorSetInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5382,12 +6778,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSubgroupSizeControlFeatures out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDescriptorWrites, base_struct.descriptorWriteCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSubgroupSizeControlProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPushDescriptorSetWithTemplateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5412,7 +6809,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSubgroupSizeControlProperti } template <> -size_t vulkan_struct_deep_copy(const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineProtectedAccessFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5437,7 +6834,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineShaderStageRequiredSubgroupSizeCr } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceInlineUniformBlockFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineRobustnessFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5462,7 +6859,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceInlineUniformBlockFeatures* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceInlineUniformBlockProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineRobustnessProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5487,7 +6884,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceInlineUniformBlockPropertie } template <> -size_t vulkan_struct_deep_copy(const VkWriteDescriptorSetInlineUniformBlock* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineRobustnessCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5507,13 +6904,12 @@ size_t vulkan_struct_deep_copy(const VkWriteDescriptorSetInlineUniformBlock* str out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pData, base_struct.dataSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDescriptorPoolInlineUniformBlockCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLineRasterizationFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5538,7 +6934,7 @@ size_t vulkan_struct_deep_copy(const VkDescriptorPoolInlineUniformBlockCreateInf } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTextureCompressionASTCHDRFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLineRasterizationProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5563,7 +6959,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTextureCompressionASTCHDRFe } template <> -size_t vulkan_struct_deep_copy(const VkRenderingAttachmentInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineRasterizationLineStateCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5588,7 +6984,7 @@ size_t vulkan_struct_deep_copy(const VkRenderingAttachmentInfo* structs, uint32_ } template <> -size_t vulkan_struct_deep_copy(const VkRenderingInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexAttributeDivisorProperties* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5608,15 +7004,12 @@ size_t vulkan_struct_deep_copy(const VkRenderingInfo* structs, uint32_t count, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pColorAttachments, base_struct.colorAttachmentCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDepthAttachment, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStencilAttachment, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineRenderingCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineVertexInputDivisorStateCreateInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5636,13 +7029,13 @@ size_t vulkan_struct_deep_copy(const VkPipelineRenderingCreateInfo* structs, uin out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pColorAttachmentFormats, base_struct.colorAttachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pVertexBindingDivisors, base_struct.vertexBindingDivisorCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDynamicRenderingFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexAttributeDivisorFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5667,7 +7060,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDynamicRenderingFeatures* s } template <> -size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceRenderingInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderingAreaInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5693,7 +7086,7 @@ size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceRenderingInfo* st } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderIntegerDotProductFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDynamicRenderingLocalReadFeatures* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5718,7 +7111,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderIntegerDotProductFeat } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderIntegerDotProductProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderingAttachmentLocationInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5738,12 +7131,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderIntegerDotProductProp out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pColorAttachmentLocations, base_struct.colorAttachmentCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTexelBufferAlignmentProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderingInputAttachmentIndexInfo* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5763,12 +7157,15 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTexelBufferAlignmentPropert out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pColorAttachmentInputIndices, base_struct.colorAttachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDepthInputAttachmentIndex, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStencilInputAttachmentIndex, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkFormatProperties3* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSwapchainCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5788,12 +7185,13 @@ size_t vulkan_struct_deep_copy(const VkFormatProperties3* structs, uint32_t coun out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pQueueFamilyIndices, base_struct.queueFamilyIndexCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance4Features* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPresentInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5813,12 +7211,16 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance4Features* struc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pWaitSemaphores, base_struct.waitSemaphoreCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSwapchains, base_struct.swapchainCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pImageIndices, base_struct.swapchainCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pResults, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance4Properties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageSwapchainCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5843,7 +7245,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance4Properties* str } template <> -size_t vulkan_struct_deep_copy(const VkDeviceBufferMemoryRequirements* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBindImageMemorySwapchainInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5863,13 +7265,12 @@ size_t vulkan_struct_deep_copy(const VkDeviceBufferMemoryRequirements* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCreateInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDeviceImageMemoryRequirements* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAcquireNextImageInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5889,13 +7290,12 @@ size_t vulkan_struct_deep_copy(const VkDeviceImageMemoryRequirements* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCreateInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan14Features* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceGroupPresentCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5920,7 +7320,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan14Features* structs, } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan14Properties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceGroupPresentInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5940,14 +7340,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVulkan14Properties* structs out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCopySrcLayouts, base_struct.copySrcLayoutCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCopyDstLayouts, base_struct.copyDstLayoutCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDeviceMasks, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDeviceQueueGlobalPriorityCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceGroupSwapchainCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5972,7 +7371,7 @@ size_t vulkan_struct_deep_copy(const VkDeviceQueueGlobalPriorityCreateInfo* stru } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceGlobalPriorityQueryFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDisplayModeCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -5997,7 +7396,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceGlobalPriorityQueryFeatures } template <> -size_t vulkan_struct_deep_copy(const VkQueueFamilyGlobalPriorityProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDisplayPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6016,13 +7415,13 @@ size_t vulkan_struct_deep_copy(const VkQueueFamilyGlobalPriorityProperties* stru auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.displayName, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSubgroupRotateFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDisplaySurfaceCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6047,7 +7446,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSubgroupRotateFeature } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderFloatControls2Features* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDisplayPresentInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6072,7 +7471,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderFloatControls2Feature } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderExpectAssumeFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkWin32SurfaceCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6097,7 +7496,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderExpectAssumeFeatures* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLineRasterizationFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkQueueFamilyQueryResultStatusPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6122,7 +7521,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLineRasterizationFeatures* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLineRasterizationProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkQueueFamilyVideoPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6147,7 +7546,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLineRasterizationProperties } template <> -size_t vulkan_struct_deep_copy(const VkPipelineRasterizationLineStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoProfileInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6172,7 +7571,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineRasterizationLineStateCreateInfo* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexAttributeDivisorProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoProfileListInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6192,12 +7591,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexAttributeDivisorPrope out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pProfiles, base_struct.profileCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineVertexInputDivisorStateCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6217,13 +7617,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineVertexInputDivisorStateCreateInfo out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pVertexBindingDivisors, base_struct.vertexBindingDivisorCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexAttributeDivisorFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoFormatInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6248,7 +7647,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexAttributeDivisorFeatu } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceIndexTypeUint8Features* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoFormatPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6273,7 +7672,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceIndexTypeUint8Features* str } template <> -size_t vulkan_struct_deep_copy(const VkMemoryMapInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoPictureResourceInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6298,7 +7697,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryMapInfo* structs, uint32_t count, u } template <> -size_t vulkan_struct_deep_copy(const VkMemoryUnmapInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoReferenceSlotInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6318,12 +7717,13 @@ size_t vulkan_struct_deep_copy(const VkMemoryUnmapInfo* structs, uint32_t count, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPictureResource, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance5Features* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoSessionMemoryRequirementsKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6348,7 +7748,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance5Features* struc } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance5Properties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBindVideoSessionMemoryInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6373,7 +7773,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance5Properties* str } template <> -size_t vulkan_struct_deep_copy(const VkRenderingAreaInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoSessionCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6393,13 +7793,14 @@ size_t vulkan_struct_deep_copy(const VkRenderingAreaInfo* structs, uint32_t coun out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pColorAttachmentFormats, base_struct.colorAttachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pVideoProfile, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdHeaderVersion, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImageSubresource2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoSessionParametersCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6424,7 +7825,7 @@ size_t vulkan_struct_deep_copy(const VkImageSubresource2* structs, uint32_t coun } template <> -size_t vulkan_struct_deep_copy(const VkDeviceImageSubresourceInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoSessionParametersUpdateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6444,14 +7845,12 @@ size_t vulkan_struct_deep_copy(const VkDeviceImageSubresourceInfo* structs, uint out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCreateInfo, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSubresource, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSubresourceLayout2* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoBeginCodingInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6471,12 +7870,13 @@ size_t vulkan_struct_deep_copy(const VkSubresourceLayout2* structs, uint32_t cou out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pReferenceSlots, base_struct.referenceSlotCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineCreateFlags2CreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEndCodingInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6501,7 +7901,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineCreateFlags2CreateInfo* structs, } template <> -size_t vulkan_struct_deep_copy(const VkBufferUsageFlags2CreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoCodingControlInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6526,7 +7926,7 @@ size_t vulkan_struct_deep_copy(const VkBufferUsageFlags2CreateInfo* structs, uin } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePushDescriptorProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6551,7 +7951,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePushDescriptorProperties* s } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDynamicRenderingLocalReadFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeUsageInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6576,7 +7976,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDynamicRenderingLocalReadFe } template <> -size_t vulkan_struct_deep_copy(const VkRenderingAttachmentLocationInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6596,13 +7996,14 @@ size_t vulkan_struct_deep_copy(const VkRenderingAttachmentLocationInfo* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pColorAttachmentLocations, base_struct.colorAttachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSetupReferenceSlot, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pReferenceSlots, base_struct.referenceSlotCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkRenderingInputAttachmentIndexInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264CapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6622,15 +8023,12 @@ size_t vulkan_struct_deep_copy(const VkRenderingInputAttachmentIndexInfo* struct out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pColorAttachmentInputIndices, base_struct.colorAttachmentCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDepthInputAttachmentIndex, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStencilInputAttachmentIndex, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance6Features* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264QualityLevelPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6655,7 +8053,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance6Features* struc } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance6Properties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6680,7 +8078,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance6Properties* str } template <> -size_t vulkan_struct_deep_copy(const VkBindMemoryStatus* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionParametersAddInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6700,13 +8098,14 @@ size_t vulkan_struct_deep_copy(const VkBindMemoryStatus* structs, uint32_t count out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pResult, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdSPSs, base_struct.stdSPSCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdPPSs, base_struct.stdPPSCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkBindDescriptorSetsInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionParametersCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6726,14 +8125,13 @@ size_t vulkan_struct_deep_copy(const VkBindDescriptorSetsInfo* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDescriptorSets, base_struct.descriptorSetCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDynamicOffsets, base_struct.dynamicOffsetCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pParametersAddInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPushConstantsInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionParametersGetInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6753,13 +8151,12 @@ size_t vulkan_struct_deep_copy(const VkPushConstantsInfo* structs, uint32_t coun out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pValues, base_struct.size, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPushDescriptorSetInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionParametersFeedbackInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6779,13 +8176,12 @@ size_t vulkan_struct_deep_copy(const VkPushDescriptorSetInfo* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDescriptorWrites, base_struct.descriptorWriteCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPushDescriptorSetWithTemplateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264NaluSliceInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6805,12 +8201,13 @@ size_t vulkan_struct_deep_copy(const VkPushDescriptorSetWithTemplateInfo* struct out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdSliceHeader, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineProtectedAccessFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264PictureInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6830,12 +8227,14 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineProtectedAccessFeat out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pNaluSliceEntries, base_struct.naluSliceEntryCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdPictureInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineRobustnessFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264DpbSlotInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6855,12 +8254,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineRobustnessFeatures* out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdReferenceInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineRobustnessProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264ProfileInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6885,7 +8285,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineRobustnessPropertie } template <> -size_t vulkan_struct_deep_copy(const VkPipelineRobustnessCreateInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264RateControlInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6910,7 +8310,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineRobustnessCreateInfo* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceHostImageCopyFeatures* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264RateControlLayerInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6935,7 +8335,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceHostImageCopyFeatures* stru } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceHostImageCopyProperties* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264GopRemainingFrameInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6955,14 +8355,12 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceHostImageCopyProperties* st out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCopySrcLayouts, base_struct.copySrcLayoutCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCopyDstLayouts, base_struct.copyDstLayoutCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkMemoryToImageCopy* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeH264ProfileInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -6987,7 +8385,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryToImageCopy* structs, uint32_t coun } template <> -size_t vulkan_struct_deep_copy(const VkImageToMemoryCopy* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeH264CapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7012,7 +8410,7 @@ size_t vulkan_struct_deep_copy(const VkImageToMemoryCopy* structs, uint32_t coun } template <> -size_t vulkan_struct_deep_copy(const VkCopyMemoryToImageInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeH264SessionParametersAddInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7032,13 +8430,14 @@ size_t vulkan_struct_deep_copy(const VkCopyMemoryToImageInfo* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdSPSs, base_struct.stdSPSCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdPPSs, base_struct.stdPPSCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkCopyImageToMemoryInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeH264SessionParametersCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7058,13 +8457,13 @@ size_t vulkan_struct_deep_copy(const VkCopyImageToMemoryInfo* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pParametersAddInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkCopyImageToImageInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeH264PictureInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7084,13 +8483,14 @@ size_t vulkan_struct_deep_copy(const VkCopyImageToImageInfo* structs, uint32_t c out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdPictureInfo, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSliceOffsets, base_struct.sliceCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkHostImageLayoutTransitionInfo* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeH264DpbSlotInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7110,12 +8510,13 @@ size_t vulkan_struct_deep_copy(const VkHostImageLayoutTransitionInfo* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdReferenceInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSubresourceHostMemcpySize* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImportMemoryWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7135,12 +8536,13 @@ size_t vulkan_struct_deep_copy(const VkSubresourceHostMemcpySize* structs, uint3 out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.name, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkHostImageCopyDevicePerformanceQuery* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkExportMemoryWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7160,12 +8562,14 @@ size_t vulkan_struct_deep_copy(const VkHostImageCopyDevicePerformanceQuery* stru out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAttributes, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.name, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSwapchainCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryWin32HandlePropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7185,13 +8589,12 @@ size_t vulkan_struct_deep_copy(const VkSwapchainCreateInfoKHR* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pQueueFamilyIndices, base_struct.queueFamilyIndexCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPresentInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryGetWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7211,16 +8614,12 @@ size_t vulkan_struct_deep_copy(const VkPresentInfoKHR* structs, uint32_t count, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pWaitSemaphores, base_struct.waitSemaphoreCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSwapchains, base_struct.swapchainCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pImageIndices, base_struct.swapchainCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pResults, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImageSwapchainCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImportMemoryFdInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7245,7 +8644,7 @@ size_t vulkan_struct_deep_copy(const VkImageSwapchainCreateInfoKHR* structs, uin } template <> -size_t vulkan_struct_deep_copy(const VkBindImageMemorySwapchainInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryFdPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7270,7 +8669,7 @@ size_t vulkan_struct_deep_copy(const VkBindImageMemorySwapchainInfoKHR* structs, } template <> -size_t vulkan_struct_deep_copy(const VkAcquireNextImageInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryGetFdInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7295,7 +8694,7 @@ size_t vulkan_struct_deep_copy(const VkAcquireNextImageInfoKHR* structs, uint32_ } template <> -size_t vulkan_struct_deep_copy(const VkDeviceGroupPresentCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkWin32KeyedMutexAcquireReleaseInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7315,12 +8714,17 @@ size_t vulkan_struct_deep_copy(const VkDeviceGroupPresentCapabilitiesKHR* struct out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAcquireSyncs, base_struct.acquireCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAcquireKeys, base_struct.acquireCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAcquireTimeouts, base_struct.acquireCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pReleaseSyncs, base_struct.releaseCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pReleaseKeys, base_struct.releaseCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDeviceGroupPresentInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImportSemaphoreWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7340,13 +8744,13 @@ size_t vulkan_struct_deep_copy(const VkDeviceGroupPresentInfoKHR* structs, uint3 out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDeviceMasks, base_struct.swapchainCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.name, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDeviceGroupSwapchainCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkExportSemaphoreWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7366,12 +8770,14 @@ size_t vulkan_struct_deep_copy(const VkDeviceGroupSwapchainCreateInfoKHR* struct out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAttributes, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.name, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDisplayModeCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkD3D12FenceSubmitInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7391,12 +8797,14 @@ size_t vulkan_struct_deep_copy(const VkDisplayModeCreateInfoKHR* structs, uint32 out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pWaitSemaphoreValues, base_struct.waitSemaphoreValuesCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSignalSemaphoreValues, base_struct.signalSemaphoreValuesCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDisplayPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSemaphoreGetWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7415,13 +8823,13 @@ size_t vulkan_struct_deep_copy(const VkDisplayPropertiesKHR* structs, uint32_t c auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pointer(base_struct, base_struct.displayName, 1, i, offset, out_data); + handle_pnext(base_struct, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDisplaySurfaceCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImportSemaphoreFdInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7446,7 +8854,7 @@ size_t vulkan_struct_deep_copy(const VkDisplaySurfaceCreateInfoKHR* structs, uin } template <> -size_t vulkan_struct_deep_copy(const VkDisplayPresentInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSemaphoreGetFdInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7471,7 +8879,7 @@ size_t vulkan_struct_deep_copy(const VkDisplayPresentInfoKHR* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkWin32SurfaceCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPresentRegionKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7490,13 +8898,13 @@ size_t vulkan_struct_deep_copy(const VkWin32SurfaceCreateInfoKHR* structs, uint3 auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRectangles, base_struct.rectangleCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkQueueFamilyQueryResultStatusPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPresentRegionsKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7516,12 +8924,13 @@ size_t vulkan_struct_deep_copy(const VkQueueFamilyQueryResultStatusPropertiesKHR out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRegions, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkQueueFamilyVideoPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSharedPresentSurfaceCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7546,7 +8955,7 @@ size_t vulkan_struct_deep_copy(const VkQueueFamilyVideoPropertiesKHR* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkVideoProfileInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImportFenceWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7566,12 +8975,13 @@ size_t vulkan_struct_deep_copy(const VkVideoProfileInfoKHR* structs, uint32_t co out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.name, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoProfileListInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkExportFenceWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7591,13 +9001,14 @@ size_t vulkan_struct_deep_copy(const VkVideoProfileListInfoKHR* structs, uint32_ out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pProfiles, base_struct.profileCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAttributes, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.name, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkFenceGetWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7622,7 +9033,7 @@ size_t vulkan_struct_deep_copy(const VkVideoCapabilitiesKHR* structs, uint32_t c } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoFormatInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImportFenceFdInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7647,7 +9058,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoFormatInfoKHR* structs } template <> -size_t vulkan_struct_deep_copy(const VkVideoFormatPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkFenceGetFdInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7672,7 +9083,7 @@ size_t vulkan_struct_deep_copy(const VkVideoFormatPropertiesKHR* structs, uint32 } template <> -size_t vulkan_struct_deep_copy(const VkVideoPictureResourceInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePerformanceQueryFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7697,7 +9108,7 @@ size_t vulkan_struct_deep_copy(const VkVideoPictureResourceInfoKHR* structs, uin } template <> -size_t vulkan_struct_deep_copy(const VkVideoReferenceSlotInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePerformanceQueryPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7717,13 +9128,12 @@ size_t vulkan_struct_deep_copy(const VkVideoReferenceSlotInfoKHR* structs, uint3 out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPictureResource, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoSessionMemoryRequirementsKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPerformanceCounterKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7748,7 +9158,7 @@ size_t vulkan_struct_deep_copy(const VkVideoSessionMemoryRequirementsKHR* struct } template <> -size_t vulkan_struct_deep_copy(const VkBindVideoSessionMemoryInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPerformanceCounterDescriptionKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7773,7 +9183,7 @@ size_t vulkan_struct_deep_copy(const VkBindVideoSessionMemoryInfoKHR* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkVideoSessionCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkQueryPoolPerformanceCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7793,14 +9203,13 @@ size_t vulkan_struct_deep_copy(const VkVideoSessionCreateInfoKHR* structs, uint3 out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pVideoProfile, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdHeaderVersion, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCounterIndices, base_struct.counterIndexCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoSessionParametersCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAcquireProfilingLockInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7825,7 +9234,7 @@ size_t vulkan_struct_deep_copy(const VkVideoSessionParametersCreateInfoKHR* stru } template <> -size_t vulkan_struct_deep_copy(const VkVideoSessionParametersUpdateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPerformanceQuerySubmitInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7850,7 +9259,7 @@ size_t vulkan_struct_deep_copy(const VkVideoSessionParametersUpdateInfoKHR* stru } template <> -size_t vulkan_struct_deep_copy(const VkVideoBeginCodingInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSurfaceInfo2KHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7870,13 +9279,12 @@ size_t vulkan_struct_deep_copy(const VkVideoBeginCodingInfoKHR* structs, uint32_ out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pReferenceSlots, base_struct.referenceSlotCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEndCodingInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSurfaceCapabilities2KHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7901,7 +9309,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEndCodingInfoKHR* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkVideoCodingControlInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSurfaceFormat2KHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7926,7 +9334,7 @@ size_t vulkan_struct_deep_copy(const VkVideoCodingControlInfoKHR* structs, uint3 } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDisplayProperties2KHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7951,7 +9359,7 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeCapabilitiesKHR* structs, uint } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeUsageInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDisplayPlaneProperties2KHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7976,7 +9384,7 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeUsageInfoKHR* structs, uint32_ } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDisplayModeProperties2KHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -7996,14 +9404,12 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeInfoKHR* structs, uint32_t cou out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSetupReferenceSlot, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pReferenceSlots, base_struct.referenceSlotCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264CapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDisplayPlaneInfo2KHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8028,7 +9434,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264CapabilitiesKHR* structs, } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264QualityLevelPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDisplayPlaneCapabilities2KHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8053,7 +9459,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264QualityLevelPropertiesKHR* } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderBfloat16FeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8078,7 +9484,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionCreateInfoKHR* stru } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionParametersAddInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePortabilitySubsetFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8098,14 +9504,12 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionParametersAddInfoKH out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdSPSs, base_struct.stdSPSCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdPPSs, base_struct.stdPPSCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionParametersCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePortabilitySubsetPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8125,13 +9529,12 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionParametersCreateInf out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pParametersAddInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionParametersGetInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderClockFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8156,7 +9559,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionParametersGetInfoKH } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionParametersFeedbackInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkFragmentShadingRateAttachmentInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8176,12 +9579,13 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264SessionParametersFeedbackI out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pFragmentShadingRateAttachment, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264NaluSliceInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineFragmentShadingRateStateCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8201,13 +9605,12 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264NaluSliceInfoKHR* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdSliceHeader, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264PictureInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRateFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8227,14 +9630,12 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264PictureInfoKHR* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pNaluSliceEntries, base_struct.naluSliceEntryCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdPictureInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264DpbSlotInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRatePropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8254,13 +9655,12 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264DpbSlotInfoKHR* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdReferenceInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264ProfileInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRateKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8285,7 +9685,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264ProfileInfoKHR* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264RateControlInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderingFragmentShadingRateAttachmentInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8310,7 +9710,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264RateControlInfoKHR* struct } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264RateControlLayerInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderQuadControlFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8335,7 +9735,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264RateControlLayerInfoKHR* s } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264GopRemainingFrameInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSurfaceProtectedCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8360,7 +9760,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264GopRemainingFrameInfoKHR* } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265CapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentWaitFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8385,7 +9785,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265CapabilitiesKHR* structs, } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265SessionCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8410,7 +9810,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265SessionCreateInfoKHR* stru } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265QualityLevelPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8435,7 +9835,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265QualityLevelPropertiesKHR* } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265SessionParametersAddInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineExecutablePropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8455,15 +9855,12 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265SessionParametersAddInfoKH out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdVPSs, base_struct.stdVPSCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdSPSs, base_struct.stdSPSCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdPPSs, base_struct.stdPPSCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265SessionParametersCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineExecutableInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8483,13 +9880,12 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265SessionParametersCreateInf out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pParametersAddInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265SessionParametersGetInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineExecutableStatisticKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8514,7 +9910,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265SessionParametersGetInfoKH } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265SessionParametersFeedbackInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineExecutableInternalRepresentationKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8534,12 +9930,13 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265SessionParametersFeedbackI out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pData, base_struct.dataSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265NaluSliceSegmentInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineLibraryCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8559,13 +9956,13 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265NaluSliceSegmentInfoKHR* s out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdSliceSegmentHeader, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pLibraries, base_struct.libraryCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265PictureInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPresentIdKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8585,14 +9982,13 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265PictureInfoKHR* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pNaluSliceSegmentEntries, base_struct.naluSliceSegmentEntryCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdPictureInfo, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPresentIds, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265DpbSlotInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentIdFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8612,13 +10008,12 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265DpbSlotInfoKHR* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdReferenceInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265ProfileInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8638,12 +10033,14 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265ProfileInfoKHR* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSetupReferenceSlot, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pReferenceSlots, base_struct.referenceSlotCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265RateControlInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8668,7 +10065,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265RateControlInfoKHR* struct } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265RateControlLayerInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkQueryPoolVideoEncodeFeedbackCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8693,7 +10090,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265RateControlLayerInfoKHR* s } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265GopRemainingFrameInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeUsageInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8718,7 +10115,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265GopRemainingFrameInfoKHR* } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeH264ProfileInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeRateControlLayerInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8743,7 +10140,7 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeH264ProfileInfoKHR* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeH264CapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeRateControlInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8763,12 +10160,13 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeH264CapabilitiesKHR* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pLayers, base_struct.layerCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeH264SessionParametersAddInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8788,14 +10186,13 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeH264SessionParametersAddInfoKH out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdSPSs, base_struct.stdSPSCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdPPSs, base_struct.stdPPSCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pVideoProfile, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeH264SessionParametersCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeQualityLevelPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8815,13 +10212,12 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeH264SessionParametersCreateInf out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pParametersAddInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeH264PictureInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeQualityLevelInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8841,14 +10237,12 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeH264PictureInfoKHR* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdPictureInfo, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSliceOffsets, base_struct.sliceCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeH264DpbSlotInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeSessionParametersGetInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8868,13 +10262,12 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeH264DpbSlotInfoKHR* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdReferenceInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImportMemoryWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeSessionParametersFeedbackInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8894,13 +10287,12 @@ size_t vulkan_struct_deep_copy(const VkImportMemoryWin32HandleInfoKHR* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.name, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkExportMemoryWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8920,14 +10312,12 @@ size_t vulkan_struct_deep_copy(const VkExportMemoryWin32HandleInfoKHR* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAttributes, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.name, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkMemoryWin32HandlePropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8952,7 +10342,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryWin32HandlePropertiesKHR* structs, } template <> -size_t vulkan_struct_deep_copy(const VkMemoryGetWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -8977,7 +10367,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryGetWin32HandleInfoKHR* structs, uin } template <> -size_t vulkan_struct_deep_copy(const VkImportMemoryFdInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9002,7 +10392,7 @@ size_t vulkan_struct_deep_copy(const VkImportMemoryFdInfoKHR* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkMemoryFdPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9027,7 +10417,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryFdPropertiesKHR* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkMemoryGetFdInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderUntypedPointersFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9052,7 +10442,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryGetFdInfoKHR* structs, uint32_t cou } template <> -size_t vulkan_struct_deep_copy(const VkWin32KeyedMutexAcquireReleaseInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9072,17 +10462,12 @@ size_t vulkan_struct_deep_copy(const VkWin32KeyedMutexAcquireReleaseInfoKHR* str out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAcquireSyncs, base_struct.acquireCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAcquireKeys, base_struct.acquireCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAcquireTimeouts, base_struct.acquireCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pReleaseSyncs, base_struct.releaseCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pReleaseKeys, base_struct.releaseCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImportSemaphoreWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSurfaceCapabilitiesPresentId2KHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9102,13 +10487,12 @@ size_t vulkan_struct_deep_copy(const VkImportSemaphoreWin32HandleInfoKHR* struct out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.name, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkExportSemaphoreWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPresentId2KHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9128,14 +10512,13 @@ size_t vulkan_struct_deep_copy(const VkExportSemaphoreWin32HandleInfoKHR* struct out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAttributes, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.name, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPresentIds, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkD3D12FenceSubmitInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentId2FeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9155,14 +10538,12 @@ size_t vulkan_struct_deep_copy(const VkD3D12FenceSubmitInfoKHR* structs, uint32_ out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pWaitSemaphoreValues, base_struct.waitSemaphoreValuesCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSignalSemaphoreValues, base_struct.signalSemaphoreValuesCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSemaphoreGetWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSurfaceCapabilitiesPresentWait2KHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9187,7 +10568,7 @@ size_t vulkan_struct_deep_copy(const VkSemaphoreGetWin32HandleInfoKHR* structs, } template <> -size_t vulkan_struct_deep_copy(const VkImportSemaphoreFdInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentWait2FeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9212,7 +10593,7 @@ size_t vulkan_struct_deep_copy(const VkImportSemaphoreFdInfoKHR* structs, uint32 } template <> -size_t vulkan_struct_deep_copy(const VkSemaphoreGetFdInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPresentWait2InfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9237,7 +10618,7 @@ size_t vulkan_struct_deep_copy(const VkSemaphoreGetFdInfoKHR* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkPresentRegionKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9256,13 +10637,13 @@ size_t vulkan_struct_deep_copy(const VkPresentRegionKHR* structs, uint32_t count auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pointer(base_struct, base_struct.pRectangles, base_struct.rectangleCount, i, offset, out_data); + handle_pnext(base_struct, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPresentRegionsKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineBinaryFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9282,13 +10663,12 @@ size_t vulkan_struct_deep_copy(const VkPresentRegionsKHR* structs, uint32_t coun out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pRegions, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSharedPresentSurfaceCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineBinaryPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9313,7 +10693,7 @@ size_t vulkan_struct_deep_copy(const VkSharedPresentSurfaceCapabilitiesKHR* stru } template <> -size_t vulkan_struct_deep_copy(const VkImportFenceWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDevicePipelineBinaryInternalCacheControlKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9333,13 +10713,12 @@ size_t vulkan_struct_deep_copy(const VkImportFenceWin32HandleInfoKHR* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.name, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkExportFenceWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineBinaryKeyKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9359,14 +10738,12 @@ size_t vulkan_struct_deep_copy(const VkExportFenceWin32HandleInfoKHR* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAttributes, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.name, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkFenceGetWin32HandleInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineBinaryDataKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9385,13 +10762,13 @@ size_t vulkan_struct_deep_copy(const VkFenceGetWin32HandleInfoKHR* structs, uint auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pData, base_struct.dataSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImportFenceFdInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineBinaryKeysAndDataKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9410,13 +10787,14 @@ size_t vulkan_struct_deep_copy(const VkImportFenceFdInfoKHR* structs, uint32_t c auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPipelineBinaryKeys, base_struct.binaryCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPipelineBinaryData, base_struct.binaryCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkFenceGetFdInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9441,7 +10819,7 @@ size_t vulkan_struct_deep_copy(const VkFenceGetFdInfoKHR* structs, uint32_t coun } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePerformanceQueryFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineBinaryCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9461,12 +10839,14 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePerformanceQueryFeaturesKHR out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pKeysAndDataInfo, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPipelineCreateInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePerformanceQueryPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineBinaryInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9486,12 +10866,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePerformanceQueryPropertiesK out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPipelineBinaries, base_struct.binaryCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPerformanceCounterKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkReleaseCapturedPipelineDataInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9516,7 +10897,7 @@ size_t vulkan_struct_deep_copy(const VkPerformanceCounterKHR* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkPerformanceCounterDescriptionKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineBinaryDataInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9541,7 +10922,7 @@ size_t vulkan_struct_deep_copy(const VkPerformanceCounterDescriptionKHR* structs } template <> -size_t vulkan_struct_deep_copy(const VkQueryPoolPerformanceCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineBinaryHandlesInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9561,13 +10942,13 @@ size_t vulkan_struct_deep_copy(const VkQueryPoolPerformanceCreateInfoKHR* struct out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCounterIndices, base_struct.counterIndexCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPipelineBinaries, base_struct.pipelineBinaryCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkAcquireProfilingLockInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSurfacePresentModeKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9592,7 +10973,7 @@ size_t vulkan_struct_deep_copy(const VkAcquireProfilingLockInfoKHR* structs, uin } template <> -size_t vulkan_struct_deep_copy(const VkPerformanceQuerySubmitInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSurfacePresentScalingCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9617,7 +10998,7 @@ size_t vulkan_struct_deep_copy(const VkPerformanceQuerySubmitInfoKHR* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSurfaceInfo2KHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSurfacePresentModeCompatibilityKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9637,12 +11018,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSurfaceInfo2KHR* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPresentModes, base_struct.presentModeCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSurfaceCapabilities2KHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9667,7 +11049,7 @@ size_t vulkan_struct_deep_copy(const VkSurfaceCapabilities2KHR* structs, uint32_ } template <> -size_t vulkan_struct_deep_copy(const VkSurfaceFormat2KHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSwapchainPresentFenceInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9687,12 +11069,13 @@ size_t vulkan_struct_deep_copy(const VkSurfaceFormat2KHR* structs, uint32_t coun out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pFences, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDisplayProperties2KHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSwapchainPresentModesCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9712,12 +11095,13 @@ size_t vulkan_struct_deep_copy(const VkDisplayProperties2KHR* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPresentModes, base_struct.presentModeCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDisplayPlaneProperties2KHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSwapchainPresentModeInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9737,12 +11121,13 @@ size_t vulkan_struct_deep_copy(const VkDisplayPlaneProperties2KHR* structs, uint out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPresentModes, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDisplayModeProperties2KHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSwapchainPresentScalingCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9767,7 +11152,7 @@ size_t vulkan_struct_deep_copy(const VkDisplayModeProperties2KHR* structs, uint3 } template <> -size_t vulkan_struct_deep_copy(const VkDisplayPlaneInfo2KHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkReleaseSwapchainImagesInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9787,12 +11172,13 @@ size_t vulkan_struct_deep_copy(const VkDisplayPlaneInfo2KHR* structs, uint32_t c out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pImageIndices, base_struct.imageIndexCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDisplayPlaneCapabilities2KHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCooperativeMatrixPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9817,7 +11203,7 @@ size_t vulkan_struct_deep_copy(const VkDisplayPlaneCapabilities2KHR* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderBfloat16FeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrixFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9842,7 +11228,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderBfloat16FeaturesKHR* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePortabilitySubsetFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrixPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9867,7 +11253,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePortabilitySubsetFeaturesKH } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePortabilitySubsetPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9892,7 +11278,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePortabilitySubsetProperties } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderClockFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9917,7 +11303,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderClockFeaturesKHR* str } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeH265ProfileInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1ProfileInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9942,7 +11328,7 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeH265ProfileInfoKHR* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeH265CapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1CapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9967,7 +11353,7 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeH265CapabilitiesKHR* structs, } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeH265SessionParametersAddInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1SessionParametersCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -9987,15 +11373,13 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeH265SessionParametersAddInfoKH out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdVPSs, base_struct.stdVPSCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdSPSs, base_struct.stdSPSCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdPPSs, base_struct.stdPPSCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdSequenceHeader, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeH265SessionParametersCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1PictureInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10015,13 +11399,15 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeH265SessionParametersCreateInf out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pParametersAddInfo, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdPictureInfo, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTileOffsets, base_struct.tileCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTileSizes, base_struct.tileCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeH265PictureInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1DpbSlotInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10041,14 +11427,13 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeH265PictureInfoKHR* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdPictureInfo, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSliceSegmentOffsets, base_struct.sliceSegmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdReferenceInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeH265DpbSlotInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoEncodeAV1FeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10068,13 +11453,12 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeH265DpbSlotInfoKHR* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdReferenceInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkFragmentShadingRateAttachmentInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1CapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10094,13 +11478,12 @@ size_t vulkan_struct_deep_copy(const VkFragmentShadingRateAttachmentInfoKHR* str out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pFragmentShadingRateAttachment, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineFragmentShadingRateStateCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1QualityLevelPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10125,7 +11508,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineFragmentShadingRateStateCreateInf } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRateFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1SessionCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10150,7 +11533,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRateFeatures } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRatePropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1SessionParametersCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10170,12 +11553,15 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRateProperti out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdSequenceHeader, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdDecoderModelInfo, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdOperatingPoints, base_struct.stdOperatingPointCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRateKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1PictureInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10195,12 +11581,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRateKHR* str out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdPictureInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkRenderingFragmentShadingRateAttachmentInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1DpbSlotInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10220,12 +11607,13 @@ size_t vulkan_struct_deep_copy(const VkRenderingFragmentShadingRateAttachmentInf out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdReferenceInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderQuadControlFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1ProfileInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10250,7 +11638,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderQuadControlFeaturesKH } template <> -size_t vulkan_struct_deep_copy(const VkSurfaceProtectedCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1GopRemainingFrameInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10275,7 +11663,7 @@ size_t vulkan_struct_deep_copy(const VkSurfaceProtectedCapabilitiesKHR* structs, } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentWaitFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1RateControlInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10300,7 +11688,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentWaitFeaturesKHR* str } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1RateControlLayerInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10325,7 +11713,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineExecutablePropertie } template <> -size_t vulkan_struct_deep_copy(const VkPipelineInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoDecodeVP9FeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10350,7 +11738,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineInfoKHR* structs, uint32_t count, } template <> -size_t vulkan_struct_deep_copy(const VkPipelineExecutablePropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeVP9ProfileInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10375,7 +11763,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineExecutablePropertiesKHR* structs, } template <> -size_t vulkan_struct_deep_copy(const VkPipelineExecutableInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeVP9CapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10400,7 +11788,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineExecutableInfoKHR* structs, uint3 } template <> -size_t vulkan_struct_deep_copy(const VkPipelineExecutableStatisticKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoDecodeVP9PictureInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10420,12 +11808,13 @@ size_t vulkan_struct_deep_copy(const VkPipelineExecutableStatisticKHR* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStdPictureInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineExecutableInternalRepresentationKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoMaintenance1FeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10445,13 +11834,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineExecutableInternalRepresentationK out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pData, base_struct.dataSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineLibraryCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoInlineQueryInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10471,13 +11859,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineLibraryCreateInfoKHR* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pLibraries, base_struct.libraryCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPresentIdKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10497,13 +11884,12 @@ size_t vulkan_struct_deep_copy(const VkPresentIdKHR* structs, uint32_t count, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPresentIds, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentIdFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAttachmentFeedbackLoopInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10528,7 +11914,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentIdFeaturesKHR* struc } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCalibratedTimestampInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10548,14 +11934,12 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeInfoKHR* structs, uint32_t cou out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSetupReferenceSlot, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pReferenceSlots, base_struct.referenceSlotCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSetDescriptorBufferOffsetsInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10575,12 +11959,14 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeCapabilitiesKHR* structs, uint out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pBufferIndices, base_struct.setCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pOffsets, base_struct.setCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkQueryPoolVideoEncodeFeedbackCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10605,7 +11991,7 @@ size_t vulkan_struct_deep_copy(const VkQueryPoolVideoEncodeFeedbackCreateInfoKHR } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeUsageInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCopyMemoryIndirectInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10630,7 +12016,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeUsageInfoKHR* structs, uint32_ } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeRateControlLayerInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCopyMemoryToImageIndirectInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10650,12 +12036,13 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeRateControlLayerInfoKHR* struc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pImageSubresources, base_struct.copyCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeRateControlInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10675,13 +12062,12 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeRateControlInfoKHR* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pLayers, base_struct.layerCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10701,13 +12087,12 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoEncodeQualityLevelInfo out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pVideoProfile, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeQualityLevelPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeIntraRefreshCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10732,7 +12117,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeQualityLevelPropertiesKHR* str } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeQualityLevelInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeSessionIntraRefreshCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10757,7 +12142,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeQualityLevelInfoKHR* structs, } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeSessionParametersGetInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeIntraRefreshInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10782,7 +12167,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeSessionParametersGetInfoKHR* s } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeSessionParametersFeedbackInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoReferenceIntraRefreshInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10807,7 +12192,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeSessionParametersFeedbackInfoK } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10832,7 +12217,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShaderBarycentricFe } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeQuantizationMapCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10857,7 +12242,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShaderBarycentricPr } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoFormatQuantizationMapPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10882,7 +12267,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSubgroupUniformContro } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeQuantizationMapInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10907,7 +12292,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceWorkgroupMemoryExplicitLayo } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10932,7 +12317,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingMaintenance1Featu } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10957,7 +12342,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderMaximalReconvergenceF } template <> -size_t vulkan_struct_deep_copy(const VkSurfaceCapabilitiesPresentId2KHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH264QuantizationMapCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -10982,7 +12367,7 @@ size_t vulkan_struct_deep_copy(const VkSurfaceCapabilitiesPresentId2KHR* structs } template <> -size_t vulkan_struct_deep_copy(const VkPresentId2KHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeH265QuantizationMapCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11002,13 +12387,12 @@ size_t vulkan_struct_deep_copy(const VkPresentId2KHR* structs, uint32_t count, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPresentIds, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentId2FeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoFormatH265QuantizationMapPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11033,7 +12417,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentId2FeaturesKHR* stru } template <> -size_t vulkan_struct_deep_copy(const VkSurfaceCapabilitiesPresentWait2KHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1QuantizationMapCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11058,7 +12442,7 @@ size_t vulkan_struct_deep_copy(const VkSurfaceCapabilitiesPresentWait2KHR* struc } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentWait2FeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoFormatAV1QuantizationMapPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11083,7 +12467,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentWait2FeaturesKHR* st } template <> -size_t vulkan_struct_deep_copy(const VkPresentWait2InfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11108,7 +12492,7 @@ size_t vulkan_struct_deep_copy(const VkPresentWait2InfoKHR* structs, uint32_t co } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance7FeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11133,7 +12517,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingPositionFetchFeat } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineBinaryFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance7PropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11158,7 +12542,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineBinaryFeaturesKHR* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineBinaryPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLayeredApiPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11183,7 +12567,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineBinaryPropertiesKHR } template <> -size_t vulkan_struct_deep_copy(const VkDevicePipelineBinaryInternalCacheControlKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLayeredApiPropertiesListKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11203,12 +12587,13 @@ size_t vulkan_struct_deep_copy(const VkDevicePipelineBinaryInternalCacheControlK out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pLayeredApis, base_struct.layeredApiCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineBinaryKeyKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLayeredApiVulkanPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11233,7 +12618,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineBinaryKeyKHR* structs, uint32_t c } template <> -size_t vulkan_struct_deep_copy(const VkPipelineBinaryDataKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryBarrierAccessFlags3KHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11252,13 +12637,13 @@ size_t vulkan_struct_deep_copy(const VkPipelineBinaryDataKHR* structs, uint32_t auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pointer(base_struct, base_struct.pData, base_struct.dataSize, i, offset, out_data); + handle_pnext(base_struct, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineBinaryKeysAndDataKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance8FeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11277,14 +12662,13 @@ size_t vulkan_struct_deep_copy(const VkPipelineBinaryKeysAndDataKHR* structs, ui auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pointer(base_struct, base_struct.pPipelineBinaryKeys, base_struct.binaryCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPipelineBinaryData, base_struct.binaryCount, i, offset, out_data); + handle_pnext(base_struct, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderFmaFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11309,7 +12693,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineCreateInfoKHR* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkPipelineBinaryCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance9FeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11329,14 +12713,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineBinaryCreateInfoKHR* structs, uin out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pKeysAndDataInfo, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPipelineCreateInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineBinaryInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance9PropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11356,13 +12738,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineBinaryInfoKHR* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPipelineBinaries, base_struct.binaryCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkReleaseCapturedPipelineDataInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkQueueFamilyOwnershipTransferPropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11387,7 +12768,7 @@ size_t vulkan_struct_deep_copy(const VkReleaseCapturedPipelineDataInfoKHR* struc } template <> -size_t vulkan_struct_deep_copy(const VkPipelineBinaryDataInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11412,7 +12793,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineBinaryDataInfoKHR* structs, uint3 } template <> -size_t vulkan_struct_deep_copy(const VkPipelineBinaryHandlesInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRobustness2FeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11432,13 +12813,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineBinaryHandlesInfoKHR* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPipelineBinaries, base_struct.pipelineBinaryCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSurfacePresentModeKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRobustness2PropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11463,7 +12843,7 @@ size_t vulkan_struct_deep_copy(const VkSurfacePresentModeKHR* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkSurfacePresentScalingCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11488,7 +12868,7 @@ size_t vulkan_struct_deep_copy(const VkSurfacePresentScalingCapabilitiesKHR* str } template <> -size_t vulkan_struct_deep_copy(const VkSurfacePresentModeCompatibilityKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance10FeaturesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11508,13 +12888,12 @@ size_t vulkan_struct_deep_copy(const VkSurfacePresentModeCompatibilityKHR* struc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPresentModes, base_struct.presentModeCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance10PropertiesKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11539,7 +12918,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSwapchainMaintenance1Featur } template <> -size_t vulkan_struct_deep_copy(const VkSwapchainPresentFenceInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderingEndInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11559,13 +12938,12 @@ size_t vulkan_struct_deep_copy(const VkSwapchainPresentFenceInfoKHR* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pFences, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSwapchainPresentModesCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderingAttachmentFlagsInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11585,13 +12963,12 @@ size_t vulkan_struct_deep_copy(const VkSwapchainPresentModesCreateInfoKHR* struc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPresentModes, base_struct.presentModeCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSwapchainPresentModeInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkResolveImageModeInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11611,13 +12988,12 @@ size_t vulkan_struct_deep_copy(const VkSwapchainPresentModeInfoKHR* structs, uin out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPresentModes, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSwapchainPresentScalingCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDebugReportCallbackCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11642,7 +13018,7 @@ size_t vulkan_struct_deep_copy(const VkSwapchainPresentScalingCreateInfoKHR* str } template <> -size_t vulkan_struct_deep_copy(const VkReleaseSwapchainImagesInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineRasterizationStateRasterizationOrderAMD* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11662,13 +13038,12 @@ size_t vulkan_struct_deep_copy(const VkReleaseSwapchainImagesInfoKHR* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pImageIndices, base_struct.imageIndexCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkCooperativeMatrixPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDebugMarkerObjectNameInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11688,12 +13063,13 @@ size_t vulkan_struct_deep_copy(const VkCooperativeMatrixPropertiesKHR* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pObjectName, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrixFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDebugMarkerObjectTagInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11713,12 +13089,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrixFeaturesKH out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTag, base_struct.tagSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrixPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDebugMarkerMarkerInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11738,12 +13115,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrixProperties out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pMarkerName, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDedicatedAllocationImageCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11768,7 +13146,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceComputeShaderDerivativesFea } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDedicatedAllocationBufferCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11793,7 +13171,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceComputeShaderDerivativesPro } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1ProfileInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDedicatedAllocationMemoryAllocateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11818,7 +13196,7 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1ProfileInfoKHR* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1CapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTransformFeedbackFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11843,7 +13221,7 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1CapabilitiesKHR* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1SessionParametersCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTransformFeedbackPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11863,13 +13241,12 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1SessionParametersCreateInfo out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdSequenceHeader, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1PictureInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineRasterizationStateStreamCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11889,15 +13266,12 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1PictureInfoKHR* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdPictureInfo, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pTileOffsets, base_struct.tileCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pTileSizes, base_struct.tileCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1DpbSlotInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageViewHandleInfoNVX* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11917,13 +13291,12 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1DpbSlotInfoKHR* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdReferenceInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoEncodeAV1FeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageViewAddressPropertiesNVX* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11948,7 +13321,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoEncodeAV1FeaturesKHR* } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1CapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkTextureLODGatherFormatPropertiesAMD* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11973,7 +13346,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1CapabilitiesKHR* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1QualityLevelPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkStreamDescriptorSurfaceCreateInfoGGP* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -11998,7 +13371,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1QualityLevelPropertiesKHR* } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1SessionCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCornerSampledImageFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12023,7 +13396,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1SessionCreateInfoKHR* struc } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1SessionParametersCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkExternalMemoryImageCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12043,15 +13416,12 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1SessionParametersCreateInfo out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdSequenceHeader, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdDecoderModelInfo, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdOperatingPoints, base_struct.stdOperatingPointCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1PictureInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkExportMemoryAllocateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12071,13 +13441,12 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1PictureInfoKHR* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdPictureInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1DpbSlotInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImportMemoryWin32HandleInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12097,13 +13466,12 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1DpbSlotInfoKHR* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdReferenceInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1ProfileInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkExportMemoryWin32HandleInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12123,12 +13491,13 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1ProfileInfoKHR* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAttributes, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1GopRemainingFrameInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkWin32KeyedMutexAcquireReleaseInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12148,12 +13517,17 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1GopRemainingFrameInfoKHR* s out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAcquireSyncs, base_struct.acquireCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAcquireKeys, base_struct.acquireCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAcquireTimeoutMilliseconds, base_struct.acquireCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pReleaseSyncs, base_struct.releaseCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pReleaseKeys, base_struct.releaseCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1RateControlInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkValidationFlagsEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12173,12 +13547,13 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1RateControlInfoKHR* structs out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDisabledValidationChecks, base_struct.disabledValidationCheckCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1RateControlLayerInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkViSurfaceCreateInfoNN* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12203,7 +13578,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1RateControlLayerInfoKHR* st } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoDecodeVP9FeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageViewASTCDecodeModeEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12228,7 +13603,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoDecodeVP9FeaturesKHR* } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeVP9ProfileInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceASTCDecodeFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12253,7 +13628,7 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeVP9ProfileInfoKHR* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeVP9CapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkConditionalRenderingBeginInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12278,7 +13653,7 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeVP9CapabilitiesKHR* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeVP9PictureInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceConditionalRenderingFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12298,13 +13673,12 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeVP9PictureInfoKHR* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdPictureInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoMaintenance1FeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceConditionalRenderingInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12329,7 +13703,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoMaintenance1FeaturesKH } template <> -size_t vulkan_struct_deep_copy(const VkVideoInlineQueryInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineViewportWScalingStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12349,12 +13723,13 @@ size_t vulkan_struct_deep_copy(const VkVideoInlineQueryInfoKHR* structs, uint32_ out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pViewportWScalings, base_struct.viewportCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSurfaceCapabilities2EXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12379,7 +13754,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceUnifiedImageLayoutsFeatures } template <> -size_t vulkan_struct_deep_copy(const VkAttachmentFeedbackLoopInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDisplayPowerInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12404,7 +13779,7 @@ size_t vulkan_struct_deep_copy(const VkAttachmentFeedbackLoopInfoEXT* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkCalibratedTimestampInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceEventInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12429,7 +13804,7 @@ size_t vulkan_struct_deep_copy(const VkCalibratedTimestampInfoKHR* structs, uint } template <> -size_t vulkan_struct_deep_copy(const VkSetDescriptorBufferOffsetsInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDisplayEventInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12449,14 +13824,12 @@ size_t vulkan_struct_deep_copy(const VkSetDescriptorBufferOffsetsInfoEXT* struct out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pBufferIndices, base_struct.setCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pOffsets, base_struct.setCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSwapchainCounterCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12481,7 +13854,7 @@ size_t vulkan_struct_deep_copy(const VkBindDescriptorBufferEmbeddedSamplersInfoE } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeIntraRefreshCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPresentTimesInfoGOOGLE* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12501,12 +13874,13 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeIntraRefreshCapabilitiesKHR* s out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTimes, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeSessionIntraRefreshCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12531,7 +13905,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeSessionIntraRefreshCreateInfoK } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeIntraRefreshInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMultiviewPerViewAttributesInfoNVX* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12556,7 +13930,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeIntraRefreshInfoKHR* structs, } template <> -size_t vulkan_struct_deep_copy(const VkVideoReferenceIntraRefreshInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineViewportSwizzleStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12576,12 +13950,13 @@ size_t vulkan_struct_deep_copy(const VkVideoReferenceIntraRefreshInfoKHR* struct out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pViewportSwizzles, base_struct.viewportCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDiscardRectanglePropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12606,7 +13981,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoEncodeIntraRefreshFeat } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeQuantizationMapCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineDiscardRectangleStateCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12626,12 +14001,13 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeQuantizationMapCapabilitiesKHR out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDiscardRectangles, base_struct.discardRectangleCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoFormatQuantizationMapPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceConservativeRasterizationPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12656,7 +14032,7 @@ size_t vulkan_struct_deep_copy(const VkVideoFormatQuantizationMapPropertiesKHR* } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeQuantizationMapInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineRasterizationConservativeStateCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12681,7 +14057,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeQuantizationMapInfoKHR* struct } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthClipEnableFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12706,7 +14082,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeQuantizationMapSessionParamete } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineRasterizationDepthClipStateCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12731,7 +14107,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoEncodeQuantizationMapF } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH264QuantizationMapCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkHdrMetadataEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12756,7 +14132,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH264QuantizationMapCapabilitie } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeH265QuantizationMapCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12781,7 +14157,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeH265QuantizationMapCapabilitie } template <> -size_t vulkan_struct_deep_copy(const VkVideoFormatH265QuantizationMapPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkIOSSurfaceCreateInfoMVK* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12806,7 +14182,7 @@ size_t vulkan_struct_deep_copy(const VkVideoFormatH265QuantizationMapPropertiesK } template <> -size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1QuantizationMapCapabilitiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMacOSSurfaceCreateInfoMVK* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12831,7 +14207,7 @@ size_t vulkan_struct_deep_copy(const VkVideoEncodeAV1QuantizationMapCapabilities } template <> -size_t vulkan_struct_deep_copy(const VkVideoFormatAV1QuantizationMapPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDebugUtilsLabelEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12851,12 +14227,13 @@ size_t vulkan_struct_deep_copy(const VkVideoFormatAV1QuantizationMapPropertiesKH out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pLabelName, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDebugUtilsObjectNameInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12876,12 +14253,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderRelaxedExtendedInstru out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pObjectName, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance7FeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDebugUtilsMessengerCallbackDataEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12901,12 +14279,17 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance7FeaturesKHR* st out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pMessageIdName, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pMessage, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pQueueLabels, base_struct.queueLabelCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCmdBufLabels, base_struct.cmdBufLabelCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pObjects, base_struct.objectCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance7PropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDebugUtilsMessengerCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12931,7 +14314,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance7PropertiesKHR* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLayeredApiPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDebugUtilsObjectTagInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12951,12 +14334,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLayeredApiPropertiesKHR* st out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTag, base_struct.tagSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLayeredApiPropertiesListKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferUsageANDROID* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -12976,13 +14360,12 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLayeredApiPropertiesListKHR out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pLayeredApis, base_struct.layeredApiCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLayeredApiVulkanPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferPropertiesANDROID* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13007,7 +14390,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLayeredApiVulkanPropertiesK } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance8FeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferFormatPropertiesANDROID* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13032,7 +14415,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance8FeaturesKHR* st } template <> -size_t vulkan_struct_deep_copy(const VkMemoryBarrierAccessFlags3KHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryGetAndroidHardwareBufferInfoANDROID* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13057,7 +14440,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryBarrierAccessFlags3KHR* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance9FeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkExternalFormatANDROID* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13082,7 +14465,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance9FeaturesKHR* st } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance9PropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferFormatProperties2ANDROID* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13107,7 +14490,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMaintenance9PropertiesKHR* } template <> -size_t vulkan_struct_deep_copy(const VkQueueFamilyOwnershipTransferPropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAttachmentSampleCountInfoAMD* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13127,12 +14510,13 @@ size_t vulkan_struct_deep_copy(const VkQueueFamilyOwnershipTransferPropertiesKHR out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pColorAttachmentSamples, base_struct.colorAttachmentCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoMaintenance2FeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSampleLocationsInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13152,12 +14536,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoMaintenance2FeaturesKH out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSampleLocations, base_struct.sampleLocationsCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeH264InlineSessionParametersInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassSampleLocationsBeginInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13177,14 +14562,14 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeH264InlineSessionParametersInf out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdSPS, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdPPS, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAttachmentInitialSampleLocations, base_struct.attachmentInitialSampleLocationsCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPostSubpassSampleLocations, base_struct.postSubpassSampleLocationsCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeH265InlineSessionParametersInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineSampleLocationsStateCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13204,15 +14589,12 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeH265InlineSessionParametersInf out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdVPS, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdSPS, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdPPS, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1InlineSessionParametersInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSampleLocationsPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13232,13 +14614,12 @@ size_t vulkan_struct_deep_copy(const VkVideoDecodeAV1InlineSessionParametersInfo out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStdSequenceHeader, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMultisamplePropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13263,7 +14644,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthClampZeroOneFeaturesKH } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRobustness2FeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13288,7 +14669,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRobustness2FeaturesKHR* str } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRobustness2PropertiesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13313,7 +14694,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRobustness2PropertiesKHR* s } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineColorBlendAdvancedStateCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13338,7 +14719,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentModeFifoLatestReadyF } template <> -size_t vulkan_struct_deep_copy(const VkDebugReportCallbackCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineCoverageToColorStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13363,7 +14744,7 @@ size_t vulkan_struct_deep_copy(const VkDebugReportCallbackCreateInfoEXT* structs } template <> -size_t vulkan_struct_deep_copy(const VkPipelineRasterizationStateRasterizationOrderAMD* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineCoverageModulationStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13383,12 +14764,13 @@ size_t vulkan_struct_deep_copy(const VkPipelineRasterizationStateRasterizationOr out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCoverageModulationTable, base_struct.coverageModulationTableCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDebugMarkerObjectNameInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13408,13 +14790,12 @@ size_t vulkan_struct_deep_copy(const VkDebugMarkerObjectNameInfoEXT* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pObjectName, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDebugMarkerObjectTagInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13434,13 +14815,12 @@ size_t vulkan_struct_deep_copy(const VkDebugMarkerObjectTagInfoEXT* structs, uin out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pTag, base_struct.tagSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDebugMarkerMarkerInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDrmFormatModifierPropertiesListEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13460,13 +14840,13 @@ size_t vulkan_struct_deep_copy(const VkDebugMarkerMarkerInfoEXT* structs, uint32 out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pMarkerName, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDrmFormatModifierProperties, base_struct.drmFormatModifierCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDedicatedAllocationImageCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageDrmFormatModifierInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13486,12 +14866,13 @@ size_t vulkan_struct_deep_copy(const VkDedicatedAllocationImageCreateInfoNV* str out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pQueueFamilyIndices, base_struct.queueFamilyIndexCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDedicatedAllocationBufferCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageDrmFormatModifierListCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13511,12 +14892,13 @@ size_t vulkan_struct_deep_copy(const VkDedicatedAllocationBufferCreateInfoNV* st out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDrmFormatModifiers, base_struct.drmFormatModifierCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDedicatedAllocationMemoryAllocateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageDrmFormatModifierExplicitCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13536,12 +14918,13 @@ size_t vulkan_struct_deep_copy(const VkDedicatedAllocationMemoryAllocateInfoNV* out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPlaneLayouts, base_struct.drmFormatModifierPlaneCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTransformFeedbackFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageDrmFormatModifierPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13566,7 +14949,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTransformFeedbackFeaturesEX } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTransformFeedbackPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDrmFormatModifierPropertiesList2EXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13586,12 +14969,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTransformFeedbackProperties out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDrmFormatModifierProperties, base_struct.drmFormatModifierCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineRasterizationStateStreamCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkValidationCacheCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13611,12 +14995,13 @@ size_t vulkan_struct_deep_copy(const VkPipelineRasterizationStateStreamCreateInf out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pInitialData, base_struct.initialDataSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImageViewHandleInfoNVX* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkShaderModuleValidationCacheCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13641,7 +15026,7 @@ size_t vulkan_struct_deep_copy(const VkImageViewHandleInfoNVX* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkImageViewAddressPropertiesNVX* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkShadingRatePaletteNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13660,13 +15045,13 @@ size_t vulkan_struct_deep_copy(const VkImageViewAddressPropertiesNVX* structs, u auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pShadingRatePaletteEntries, base_struct.shadingRatePaletteEntryCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkTextureLODGatherFormatPropertiesAMD* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineViewportShadingRateImageStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13686,12 +15071,13 @@ size_t vulkan_struct_deep_copy(const VkTextureLODGatherFormatPropertiesAMD* stru out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pShadingRatePalettes, base_struct.viewportCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkStreamDescriptorSurfaceCreateInfoGGP* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShadingRateImageFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13716,7 +15102,7 @@ size_t vulkan_struct_deep_copy(const VkStreamDescriptorSurfaceCreateInfoGGP* str } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCornerSampledImageFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShadingRateImagePropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13741,7 +15127,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCornerSampledImageFeaturesN } template <> -size_t vulkan_struct_deep_copy(const VkExternalMemoryImageCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCoarseSampleOrderCustomNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13760,13 +15146,13 @@ size_t vulkan_struct_deep_copy(const VkExternalMemoryImageCreateInfoNV* structs, auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSampleLocations, base_struct.sampleLocationCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkExportMemoryAllocateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13786,12 +15172,13 @@ size_t vulkan_struct_deep_copy(const VkExportMemoryAllocateInfoNV* structs, uint out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCustomSampleOrders, base_struct.customSampleOrderCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImportMemoryWin32HandleInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRayTracingShaderGroupCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13816,7 +15203,7 @@ size_t vulkan_struct_deep_copy(const VkImportMemoryWin32HandleInfoNV* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkExportMemoryWin32HandleInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRayTracingPipelineCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13836,13 +15223,14 @@ size_t vulkan_struct_deep_copy(const VkExportMemoryWin32HandleInfoNV* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAttributes, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStages, base_struct.stageCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pGroups, base_struct.groupCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkWin32KeyedMutexAcquireReleaseInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkGeometryTrianglesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13862,17 +15250,12 @@ size_t vulkan_struct_deep_copy(const VkWin32KeyedMutexAcquireReleaseInfoNV* stru out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAcquireSyncs, base_struct.acquireCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAcquireKeys, base_struct.acquireCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAcquireTimeoutMilliseconds, base_struct.acquireCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pReleaseSyncs, base_struct.releaseCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pReleaseKeys, base_struct.releaseCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkValidationFlagsEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkGeometryAABBNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13892,13 +15275,12 @@ size_t vulkan_struct_deep_copy(const VkValidationFlagsEXT* structs, uint32_t cou out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDisabledValidationChecks, base_struct.disabledValidationCheckCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkViSurfaceCreateInfoNN* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkGeometryNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13923,7 +15305,7 @@ size_t vulkan_struct_deep_copy(const VkViSurfaceCreateInfoNN* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkImageViewASTCDecodeModeEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAccelerationStructureInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13943,12 +15325,13 @@ size_t vulkan_struct_deep_copy(const VkImageViewASTCDecodeModeEXT* structs, uint out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pGeometries, base_struct.geometryCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceASTCDecodeFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAccelerationStructureCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13973,7 +15356,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceASTCDecodeFeaturesEXT* stru } template <> -size_t vulkan_struct_deep_copy(const VkConditionalRenderingBeginInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBindAccelerationStructureMemoryInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -13993,12 +15376,13 @@ size_t vulkan_struct_deep_copy(const VkConditionalRenderingBeginInfoEXT* structs out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDeviceIndices, base_struct.deviceIndexCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceConditionalRenderingFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkWriteDescriptorSetAccelerationStructureNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14018,12 +15402,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceConditionalRenderingFeature out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAccelerationStructures, base_struct.accelerationStructureCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceConditionalRenderingInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAccelerationStructureMemoryRequirementsInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14048,7 +15433,7 @@ size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceConditionalRender } template <> -size_t vulkan_struct_deep_copy(const VkPipelineViewportWScalingStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14068,13 +15453,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineViewportWScalingStateCreateInfoNV out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pViewportWScalings, base_struct.viewportCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSurfaceCapabilities2EXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14099,7 +15483,7 @@ size_t vulkan_struct_deep_copy(const VkSurfaceCapabilities2EXT* structs, uint32_ } template <> -size_t vulkan_struct_deep_copy(const VkDisplayPowerInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineRepresentativeFragmentTestStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14124,7 +15508,7 @@ size_t vulkan_struct_deep_copy(const VkDisplayPowerInfoEXT* structs, uint32_t co } template <> -size_t vulkan_struct_deep_copy(const VkDeviceEventInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageViewImageFormatInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14149,7 +15533,7 @@ size_t vulkan_struct_deep_copy(const VkDeviceEventInfoEXT* structs, uint32_t cou } template <> -size_t vulkan_struct_deep_copy(const VkDisplayEventInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkFilterCubicImageViewImageFormatPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14174,7 +15558,7 @@ size_t vulkan_struct_deep_copy(const VkDisplayEventInfoEXT* structs, uint32_t co } template <> -size_t vulkan_struct_deep_copy(const VkSwapchainCounterCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImportMemoryHostPointerInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14199,7 +15583,7 @@ size_t vulkan_struct_deep_copy(const VkSwapchainCounterCreateInfoEXT* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkPresentTimesInfoGOOGLE* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryHostPointerPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14219,13 +15603,12 @@ size_t vulkan_struct_deep_copy(const VkPresentTimesInfoGOOGLE* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pTimes, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalMemoryHostPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14250,7 +15633,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewPerViewAttributesP } template <> -size_t vulkan_struct_deep_copy(const VkMultiviewPerViewAttributesInfoNVX* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineCompilerControlCreateInfoAMD* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14275,7 +15658,7 @@ size_t vulkan_struct_deep_copy(const VkMultiviewPerViewAttributesInfoNVX* struct } template <> -size_t vulkan_struct_deep_copy(const VkPipelineViewportSwizzleStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCorePropertiesAMD* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14295,13 +15678,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineViewportSwizzleStateCreateInfoNV* out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pViewportSwizzles, base_struct.viewportCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDiscardRectanglePropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceMemoryOverallocationCreateInfoAMD* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14326,7 +15708,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDiscardRectanglePropertiesE } template <> -size_t vulkan_struct_deep_copy(const VkPipelineDiscardRectangleStateCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14346,13 +15728,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineDiscardRectangleStateCreateInfoEX out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDiscardRectangles, base_struct.discardRectangleCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceConservativeRasterizationPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPresentFrameTokenGGP* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14377,7 +15758,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceConservativeRasterizationPr } template <> -size_t vulkan_struct_deep_copy(const VkPipelineRasterizationConservativeStateCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMeshShaderFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14402,7 +15783,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineRasterizationConservativeStateCre } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthClipEnableFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMeshShaderPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14427,7 +15808,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthClipEnableFeaturesEXT* } template <> -size_t vulkan_struct_deep_copy(const VkPipelineRasterizationDepthClipStateCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderImageFootprintFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14452,7 +15833,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineRasterizationDepthClipStateCreate } template <> -size_t vulkan_struct_deep_copy(const VkHdrMetadataEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineViewportExclusiveScissorStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14472,12 +15853,13 @@ size_t vulkan_struct_deep_copy(const VkHdrMetadataEXT* structs, uint32_t count, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pExclusiveScissors, base_struct.exclusiveScissorCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExclusiveScissorFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14502,7 +15884,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRelaxedLineRasterizationFea } template <> -size_t vulkan_struct_deep_copy(const VkIOSSurfaceCreateInfoMVK* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkQueueFamilyCheckpointPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14527,7 +15909,7 @@ size_t vulkan_struct_deep_copy(const VkIOSSurfaceCreateInfoMVK* structs, uint32_ } template <> -size_t vulkan_struct_deep_copy(const VkMacOSSurfaceCreateInfoMVK* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCheckpointDataNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14552,7 +15934,7 @@ size_t vulkan_struct_deep_copy(const VkMacOSSurfaceCreateInfoMVK* structs, uint3 } template <> -size_t vulkan_struct_deep_copy(const VkDebugUtilsLabelEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkQueueFamilyCheckpointProperties2NV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14572,13 +15954,12 @@ size_t vulkan_struct_deep_copy(const VkDebugUtilsLabelEXT* structs, uint32_t cou out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pLabelName, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDebugUtilsObjectNameInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCheckpointData2NV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14598,13 +15979,12 @@ size_t vulkan_struct_deep_copy(const VkDebugUtilsObjectNameInfoEXT* structs, uin out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pObjectName, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDebugUtilsMessengerCallbackDataEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentTimingFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14624,17 +16004,12 @@ size_t vulkan_struct_deep_copy(const VkDebugUtilsMessengerCallbackDataEXT* struc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pMessageIdName, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pMessage, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pQueueLabels, base_struct.queueLabelCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCmdBufLabels, base_struct.cmdBufLabelCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pObjects, base_struct.objectCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDebugUtilsMessengerCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPresentTimingSurfaceCapabilitiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14659,7 +16034,7 @@ size_t vulkan_struct_deep_copy(const VkDebugUtilsMessengerCreateInfoEXT* structs } template <> -size_t vulkan_struct_deep_copy(const VkDebugUtilsObjectTagInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSwapchainCalibratedTimestampInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14679,13 +16054,12 @@ size_t vulkan_struct_deep_copy(const VkDebugUtilsObjectTagInfoEXT* structs, uint out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pTag, base_struct.tagSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferUsageANDROID* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSwapchainTimingPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14710,7 +16084,7 @@ size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferUsageANDROID* struct } template <> -size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferPropertiesANDROID* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSwapchainTimeDomainPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14730,12 +16104,14 @@ size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferPropertiesANDROID* s out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTimeDomains, base_struct.timeDomainCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTimeDomainIds, base_struct.timeDomainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferFormatPropertiesANDROID* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPastPresentationTimingInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14760,7 +16136,7 @@ size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferFormatPropertiesANDR } template <> -size_t vulkan_struct_deep_copy(const VkMemoryGetAndroidHardwareBufferInfoANDROID* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPastPresentationTimingEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14780,12 +16156,13 @@ size_t vulkan_struct_deep_copy(const VkMemoryGetAndroidHardwareBufferInfoANDROID out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPresentStages, base_struct.presentStageCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkExternalFormatANDROID* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPastPresentationTimingPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14805,12 +16182,13 @@ size_t vulkan_struct_deep_copy(const VkExternalFormatANDROID* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPresentationTimings, base_struct.presentationTimingCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferFormatProperties2ANDROID* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPresentTimingInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14835,7 +16213,7 @@ size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferFormatProperties2AND } template <> -size_t vulkan_struct_deep_copy(const VkAttachmentSampleCountInfoAMD* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPresentTimingsInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14855,13 +16233,13 @@ size_t vulkan_struct_deep_copy(const VkAttachmentSampleCountInfoAMD* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pColorAttachmentSamples, base_struct.colorAttachmentCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTimingInfos, base_struct.swapchainCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSampleLocationsInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14881,13 +16259,12 @@ size_t vulkan_struct_deep_copy(const VkSampleLocationsInfoEXT* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSampleLocations, base_struct.sampleLocationsCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassSampleLocationsBeginInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkInitializePerformanceApiInfoINTEL* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14907,14 +16284,12 @@ size_t vulkan_struct_deep_copy(const VkRenderPassSampleLocationsBeginInfoEXT* st out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAttachmentInitialSampleLocations, base_struct.attachmentInitialSampleLocationsCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPostSubpassSampleLocations, base_struct.postSubpassSampleLocationsCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineSampleLocationsStateCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkQueryPoolPerformanceQueryCreateInfoINTEL* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14939,7 +16314,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineSampleLocationsStateCreateInfoEXT } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSampleLocationsPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPerformanceMarkerInfoINTEL* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14964,7 +16339,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSampleLocationsPropertiesEX } template <> -size_t vulkan_struct_deep_copy(const VkMultisamplePropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPerformanceStreamMarkerInfoINTEL* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -14989,7 +16364,7 @@ size_t vulkan_struct_deep_copy(const VkMultisamplePropertiesEXT* structs, uint32 } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPerformanceOverrideInfoINTEL* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15014,7 +16389,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBlendOperationAdvancedFeatu } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPerformanceConfigurationAcquireInfoINTEL* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15039,7 +16414,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBlendOperationAdvancedPrope } template <> -size_t vulkan_struct_deep_copy(const VkPipelineColorBlendAdvancedStateCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePCIBusInfoPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15064,7 +16439,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineColorBlendAdvancedStateCreateInfo } template <> -size_t vulkan_struct_deep_copy(const VkPipelineCoverageToColorStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDisplayNativeHdrSurfaceCapabilitiesAMD* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15089,7 +16464,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineCoverageToColorStateCreateInfoNV* } template <> -size_t vulkan_struct_deep_copy(const VkPipelineCoverageModulationStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSwapchainDisplayNativeHdrCreateInfoAMD* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15109,13 +16484,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineCoverageModulationStateCreateInfo out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCoverageModulationTable, base_struct.coverageModulationTableCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImagePipeSurfaceCreateInfoFUCHSIA* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15140,7 +16514,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSMBuiltinsPropertiesN } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15165,7 +16539,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* } template <> -size_t vulkan_struct_deep_copy(const VkDrmFormatModifierPropertiesListEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15185,13 +16559,12 @@ size_t vulkan_struct_deep_copy(const VkDrmFormatModifierPropertiesListEXT* struc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDrmFormatModifierProperties, base_struct.drmFormatModifierCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageDrmFormatModifierInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassFragmentDensityMapCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15211,13 +16584,12 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageDrmFormatModifierInfoE out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pQueueFamilyIndices, base_struct.queueFamilyIndexCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImageDrmFormatModifierListCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderingFragmentDensityMapAttachmentInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15237,13 +16609,12 @@ size_t vulkan_struct_deep_copy(const VkImageDrmFormatModifierListCreateInfoEXT* out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDrmFormatModifiers, base_struct.drmFormatModifierCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImageDrmFormatModifierExplicitCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCoreProperties2AMD* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15263,13 +16634,12 @@ size_t vulkan_struct_deep_copy(const VkImageDrmFormatModifierExplicitCreateInfoE out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPlaneLayouts, base_struct.drmFormatModifierPlaneCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImageDrmFormatModifierPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCoherentMemoryFeaturesAMD* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15294,7 +16664,7 @@ size_t vulkan_struct_deep_copy(const VkImageDrmFormatModifierPropertiesEXT* stru } template <> -size_t vulkan_struct_deep_copy(const VkDrmFormatModifierPropertiesList2EXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15314,13 +16684,12 @@ size_t vulkan_struct_deep_copy(const VkDrmFormatModifierPropertiesList2EXT* stru out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDrmFormatModifierProperties, base_struct.drmFormatModifierCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkValidationCacheCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMemoryBudgetPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15340,13 +16709,12 @@ size_t vulkan_struct_deep_copy(const VkValidationCacheCreateInfoEXT* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pInitialData, base_struct.initialDataSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkShaderModuleValidationCacheCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMemoryPriorityFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15371,7 +16739,7 @@ size_t vulkan_struct_deep_copy(const VkShaderModuleValidationCacheCreateInfoEXT* } template <> -size_t vulkan_struct_deep_copy(const VkShadingRatePaletteNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryPriorityAllocateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15390,13 +16758,13 @@ size_t vulkan_struct_deep_copy(const VkShadingRatePaletteNV* structs, uint32_t c auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pointer(base_struct, base_struct.pShadingRatePaletteEntries, base_struct.shadingRatePaletteEntryCount, i, offset, out_data); + handle_pnext(base_struct, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineViewportShadingRateImageStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15416,13 +16784,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineViewportShadingRateImageStateCrea out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pShadingRatePalettes, base_struct.viewportCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShadingRateImageFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15447,7 +16814,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShadingRateImageFeaturesNV* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShadingRateImagePropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBufferDeviceAddressCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15472,7 +16839,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShadingRateImagePropertiesN } template <> -size_t vulkan_struct_deep_copy(const VkCoarseSampleOrderCustomNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkValidationFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15491,13 +16858,15 @@ size_t vulkan_struct_deep_copy(const VkCoarseSampleOrderCustomNV* structs, uint3 auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pointer(base_struct, base_struct.pSampleLocations, base_struct.sampleLocationCount, i, offset, out_data); + handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pEnabledValidationFeatures, base_struct.enabledValidationFeatureCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDisabledValidationFeatures, base_struct.disabledValidationFeatureCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCooperativeMatrixPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15517,13 +16886,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineViewportCoarseSampleOrderStateCre out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCustomSampleOrders, base_struct.customSampleOrderCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkRayTracingShaderGroupCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrixFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15548,7 +16916,7 @@ size_t vulkan_struct_deep_copy(const VkRayTracingShaderGroupCreateInfoNV* struct } template <> -size_t vulkan_struct_deep_copy(const VkRayTracingPipelineCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrixPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15568,14 +16936,12 @@ size_t vulkan_struct_deep_copy(const VkRayTracingPipelineCreateInfoNV* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStages, base_struct.stageCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pGroups, base_struct.groupCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkGeometryTrianglesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCoverageReductionModeFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15600,7 +16966,7 @@ size_t vulkan_struct_deep_copy(const VkGeometryTrianglesNV* structs, uint32_t co } template <> -size_t vulkan_struct_deep_copy(const VkGeometryAABBNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineCoverageReductionStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15625,7 +16991,7 @@ size_t vulkan_struct_deep_copy(const VkGeometryAABBNV* structs, uint32_t count, } template <> -size_t vulkan_struct_deep_copy(const VkGeometryNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkFramebufferMixedSamplesCombinationNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15650,7 +17016,7 @@ size_t vulkan_struct_deep_copy(const VkGeometryNV* structs, uint32_t count, uint } template <> -size_t vulkan_struct_deep_copy(const VkAccelerationStructureInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15670,13 +17036,12 @@ size_t vulkan_struct_deep_copy(const VkAccelerationStructureInfoNV* structs, uin out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pGeometries, base_struct.geometryCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkAccelerationStructureCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15701,7 +17066,7 @@ size_t vulkan_struct_deep_copy(const VkAccelerationStructureCreateInfoNV* struct } template <> -size_t vulkan_struct_deep_copy(const VkBindAccelerationStructureMemoryInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProvokingVertexFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15721,13 +17086,12 @@ size_t vulkan_struct_deep_copy(const VkBindAccelerationStructureMemoryInfoNV* st out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDeviceIndices, base_struct.deviceIndexCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkWriteDescriptorSetAccelerationStructureNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProvokingVertexPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15747,13 +17111,12 @@ size_t vulkan_struct_deep_copy(const VkWriteDescriptorSetAccelerationStructureNV out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAccelerationStructures, base_struct.accelerationStructureCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkAccelerationStructureMemoryRequirementsInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15778,7 +17141,7 @@ size_t vulkan_struct_deep_copy(const VkAccelerationStructureMemoryRequirementsIn } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSurfaceFullScreenExclusiveInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15803,7 +17166,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingPropertiesNV* str } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSurfaceCapabilitiesFullScreenExclusiveEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15828,7 +17191,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRepresentativeFragmentTestF } template <> -size_t vulkan_struct_deep_copy(const VkPipelineRepresentativeFragmentTestStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSurfaceFullScreenExclusiveWin32InfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15853,7 +17216,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineRepresentativeFragmentTestStateCr } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageViewImageFormatInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkHeadlessSurfaceCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15878,7 +17241,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageViewImageFormatInfoEXT } template <> -size_t vulkan_struct_deep_copy(const VkFilterCubicImageViewImageFormatPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15903,7 +17266,7 @@ size_t vulkan_struct_deep_copy(const VkFilterCubicImageViewImageFormatProperties } template <> -size_t vulkan_struct_deep_copy(const VkImportMemoryHostPointerInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15928,7 +17291,7 @@ size_t vulkan_struct_deep_copy(const VkImportMemoryHostPointerInfoEXT* structs, } template <> -size_t vulkan_struct_deep_copy(const VkMemoryHostPointerPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15953,7 +17316,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryHostPointerPropertiesEXT* structs, } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalMemoryHostPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMapMemoryPlacedPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -15978,7 +17341,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalMemoryHostPropertie } template <> -size_t vulkan_struct_deep_copy(const VkPipelineCompilerControlCreateInfoAMD* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryMapPlacedInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16003,7 +17366,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineCompilerControlCreateInfoAMD* str } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCorePropertiesAMD* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16028,7 +17391,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCorePropertiesAMD* st } template <> -size_t vulkan_struct_deep_copy(const VkDeviceMemoryOverallocationCreateInfoAMD* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16053,7 +17416,7 @@ size_t vulkan_struct_deep_copy(const VkDeviceMemoryOverallocationCreateInfoAMD* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16078,7 +17441,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexAttributeDivisorPrope } template <> -size_t vulkan_struct_deep_copy(const VkPresentFrameTokenGGP* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkGraphicsShaderGroupCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16098,12 +17461,15 @@ size_t vulkan_struct_deep_copy(const VkPresentFrameTokenGGP* structs, uint32_t c out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStages, base_struct.stageCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pVertexInputState, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTessellationState, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMeshShaderFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkGraphicsPipelineShaderGroupsCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16123,12 +17489,14 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMeshShaderFeaturesNV* struc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pGroups, base_struct.groupCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPipelines, base_struct.pipelineCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMeshShaderPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkIndirectCommandsLayoutTokenNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16148,12 +17516,14 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMeshShaderPropertiesNV* str out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pIndexTypes, base_struct.indexTypeCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pIndexTypeValues, base_struct.indexTypeCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderImageFootprintFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkIndirectCommandsLayoutCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16173,12 +17543,14 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderImageFootprintFeature out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTokens, base_struct.tokenCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStreamStrides, base_struct.streamCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineViewportExclusiveScissorStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkGeneratedCommandsInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16198,13 +17570,13 @@ size_t vulkan_struct_deep_copy(const VkPipelineViewportExclusiveScissorStateCrea out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pExclusiveScissors, base_struct.exclusiveScissorCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStreams, base_struct.streamCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExclusiveScissorFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkGeneratedCommandsMemoryRequirementsInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16229,7 +17601,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExclusiveScissorFeaturesNV* } template <> -size_t vulkan_struct_deep_copy(const VkQueueFamilyCheckpointPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceInheritedViewportScissorFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16254,7 +17626,7 @@ size_t vulkan_struct_deep_copy(const VkQueueFamilyCheckpointPropertiesNV* struct } template <> -size_t vulkan_struct_deep_copy(const VkCheckpointDataNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceViewportScissorInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16274,12 +17646,13 @@ size_t vulkan_struct_deep_copy(const VkCheckpointDataNV* structs, uint32_t count out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pViewportDepths, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkQueueFamilyCheckpointProperties2NV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16304,7 +17677,7 @@ size_t vulkan_struct_deep_copy(const VkQueueFamilyCheckpointProperties2NV* struc } template <> -size_t vulkan_struct_deep_copy(const VkCheckpointData2NV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassTransformBeginInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16329,7 +17702,7 @@ size_t vulkan_struct_deep_copy(const VkCheckpointData2NV* structs, uint32_t coun } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceRenderPassTransformInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16354,7 +17727,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderIntegerFunctions2Feat } template <> -size_t vulkan_struct_deep_copy(const VkInitializePerformanceApiInfoINTEL* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthBiasControlFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16379,7 +17752,7 @@ size_t vulkan_struct_deep_copy(const VkInitializePerformanceApiInfoINTEL* struct } template <> -size_t vulkan_struct_deep_copy(const VkQueryPoolPerformanceQueryCreateInfoINTEL* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDepthBiasInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16404,7 +17777,7 @@ size_t vulkan_struct_deep_copy(const VkQueryPoolPerformanceQueryCreateInfoINTEL* } template <> -size_t vulkan_struct_deep_copy(const VkPerformanceMarkerInfoINTEL* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDepthBiasRepresentationInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16429,7 +17802,7 @@ size_t vulkan_struct_deep_copy(const VkPerformanceMarkerInfoINTEL* structs, uint } template <> -size_t vulkan_struct_deep_copy(const VkPerformanceStreamMarkerInfoINTEL* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16454,7 +17827,7 @@ size_t vulkan_struct_deep_copy(const VkPerformanceStreamMarkerInfoINTEL* structs } template <> -size_t vulkan_struct_deep_copy(const VkPerformanceOverrideInfoINTEL* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceMemoryReportCallbackDataEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16479,7 +17852,7 @@ size_t vulkan_struct_deep_copy(const VkPerformanceOverrideInfoINTEL* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkPerformanceConfigurationAcquireInfoINTEL* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceDeviceMemoryReportCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16504,7 +17877,7 @@ size_t vulkan_struct_deep_copy(const VkPerformanceConfigurationAcquireInfoINTEL* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePCIBusInfoPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSamplerCustomBorderColorCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16529,7 +17902,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePCIBusInfoPropertiesEXT* st } template <> -size_t vulkan_struct_deep_copy(const VkDisplayNativeHdrSurfaceCapabilitiesAMD* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCustomBorderColorPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16554,7 +17927,7 @@ size_t vulkan_struct_deep_copy(const VkDisplayNativeHdrSurfaceCapabilitiesAMD* s } template <> -size_t vulkan_struct_deep_copy(const VkSwapchainDisplayNativeHdrCreateInfoAMD* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCustomBorderColorFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16579,7 +17952,7 @@ size_t vulkan_struct_deep_copy(const VkSwapchainDisplayNativeHdrCreateInfoAMD* s } template <> -size_t vulkan_struct_deep_copy(const VkImagePipeSurfaceCreateInfoFUCHSIA* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16604,7 +17977,7 @@ size_t vulkan_struct_deep_copy(const VkImagePipeSurfaceCreateInfoFUCHSIA* struct } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentBarrierFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16629,7 +18002,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapFeaturesE } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSurfaceCapabilitiesPresentBarrierNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16654,7 +18027,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapPropertie } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassFragmentDensityMapCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSwapchainPresentBarrierCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16679,7 +18052,7 @@ size_t vulkan_struct_deep_copy(const VkRenderPassFragmentDensityMapCreateInfoEXT } template <> -size_t vulkan_struct_deep_copy(const VkRenderingFragmentDensityMapAttachmentInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDiagnosticsConfigFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16704,7 +18077,7 @@ size_t vulkan_struct_deep_copy(const VkRenderingFragmentDensityMapAttachmentInfo } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCoreProperties2AMD* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceDiagnosticsConfigCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16729,7 +18102,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCoreProperties2AMD* s } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCoherentMemoryFeaturesAMD* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTileShadingFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16754,7 +18127,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCoherentMemoryFeaturesAMD* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTileShadingPropertiesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16779,7 +18152,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderImageAtomicInt64Featu } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMemoryBudgetPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassTileShadingCreateInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16804,7 +18177,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMemoryBudgetPropertiesEXT* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMemoryPriorityFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPerTileBeginInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16829,7 +18202,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMemoryPriorityFeaturesEXT* } template <> -size_t vulkan_struct_deep_copy(const VkMemoryPriorityAllocateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPerTileEndInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16854,7 +18227,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryPriorityAllocateInfoEXT* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDispatchTileInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16879,7 +18252,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDedicatedAllocationImageAli } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkQueryLowLatencySupportNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16904,7 +18277,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBufferDeviceAddressFeatures } template <> -size_t vulkan_struct_deep_copy(const VkBufferDeviceAddressCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorBufferPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16929,7 +18302,7 @@ size_t vulkan_struct_deep_copy(const VkBufferDeviceAddressCreateInfoEXT* structs } template <> -size_t vulkan_struct_deep_copy(const VkValidationFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16949,14 +18322,12 @@ size_t vulkan_struct_deep_copy(const VkValidationFeaturesEXT* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pEnabledValidationFeatures, base_struct.enabledValidationFeatureCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDisabledValidationFeatures, base_struct.disabledValidationFeatureCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkCooperativeMatrixPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorBufferFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -16981,7 +18352,7 @@ size_t vulkan_struct_deep_copy(const VkCooperativeMatrixPropertiesNV* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrixFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorAddressInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17006,7 +18377,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrixFeaturesNV } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrixPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorBufferBindingInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17031,7 +18402,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrixProperties } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCoverageReductionModeFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17056,7 +18427,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCoverageReductionModeFeatur } template <> -size_t vulkan_struct_deep_copy(const VkPipelineCoverageReductionStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorGetInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17076,12 +18447,13 @@ size_t vulkan_struct_deep_copy(const VkPipelineCoverageReductionStateCreateInfoN out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_union(base_struct, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkFramebufferMixedSamplesCombinationNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBufferCaptureDescriptorDataInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17106,7 +18478,7 @@ size_t vulkan_struct_deep_copy(const VkFramebufferMixedSamplesCombinationNV* str } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageCaptureDescriptorDataInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17131,7 +18503,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShaderInterlockFeat } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageViewCaptureDescriptorDataInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17156,7 +18528,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProvokingVertexFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSamplerCaptureDescriptorDataInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17181,7 +18553,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProvokingVertexFeaturesEXT* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProvokingVertexPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkOpaqueCaptureDescriptorDataCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17206,7 +18578,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceProvokingVertexPropertiesEX } template <> -size_t vulkan_struct_deep_copy(const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAccelerationStructureCaptureDescriptorDataInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17231,7 +18603,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineRasterizationProvokingVertexState } template <> -size_t vulkan_struct_deep_copy(const VkSurfaceFullScreenExclusiveInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17256,7 +18628,7 @@ size_t vulkan_struct_deep_copy(const VkSurfaceFullScreenExclusiveInfoEXT* struct } template <> -size_t vulkan_struct_deep_copy(const VkSurfaceCapabilitiesFullScreenExclusiveEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17281,7 +18653,7 @@ size_t vulkan_struct_deep_copy(const VkSurfaceCapabilitiesFullScreenExclusiveEXT } template <> -size_t vulkan_struct_deep_copy(const VkSurfaceFullScreenExclusiveWin32InfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkGraphicsPipelineLibraryCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17306,7 +18678,7 @@ size_t vulkan_struct_deep_copy(const VkSurfaceFullScreenExclusiveWin32InfoEXT* s } template <> -size_t vulkan_struct_deep_copy(const VkHeadlessSurfaceCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17331,7 +18703,7 @@ size_t vulkan_struct_deep_copy(const VkHeadlessSurfaceCreateInfoEXT* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17356,7 +18728,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderAtomicFloatFeaturesEX } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17381,7 +18753,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedDynamicStateFeature } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineFragmentShadingRateEnumStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17406,7 +18778,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMapMemoryPlacedPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAccelerationStructureGeometryMotionTrianglesDataNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17431,7 +18803,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMapMemoryPlacedPropertiesEX } template <> -size_t vulkan_struct_deep_copy(const VkMemoryMapPlacedInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAccelerationStructureMotionInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17456,7 +18828,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryMapPlacedInfoEXT* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingMotionBlurFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17481,7 +18853,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderAtomicFloat2FeaturesE } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17506,7 +18878,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsProp } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17531,7 +18903,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsFeat } template <> -size_t vulkan_struct_deep_copy(const VkGraphicsShaderGroupCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17551,15 +18923,12 @@ size_t vulkan_struct_deep_copy(const VkGraphicsShaderGroupCreateInfoNV* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStages, base_struct.stageCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pVertexInputState, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pTessellationState, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkGraphicsPipelineShaderGroupsCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCopyCommandTransformInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17579,14 +18948,12 @@ size_t vulkan_struct_deep_copy(const VkGraphicsPipelineShaderGroupsCreateInfoNV* out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pGroups, base_struct.groupCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPipelines, base_struct.pipelineCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkIndirectCommandsLayoutTokenNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageCompressionControlFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17606,14 +18973,12 @@ size_t vulkan_struct_deep_copy(const VkIndirectCommandsLayoutTokenNV* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pIndexTypes, base_struct.indexTypeCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pIndexTypeValues, base_struct.indexTypeCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkIndirectCommandsLayoutCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageCompressionControlEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17633,14 +18998,13 @@ size_t vulkan_struct_deep_copy(const VkIndirectCommandsLayoutCreateInfoNV* struc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pTokens, base_struct.tokenCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStreamStrides, base_struct.streamCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pFixedRateFlags, base_struct.compressionControlPlaneCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkGeneratedCommandsInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageCompressionPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17660,13 +19024,12 @@ size_t vulkan_struct_deep_copy(const VkGeneratedCommandsInfoNV* structs, uint32_ out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStreams, base_struct.streamCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkGeneratedCommandsMemoryRequirementsInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17691,7 +19054,7 @@ size_t vulkan_struct_deep_copy(const VkGeneratedCommandsMemoryRequirementsInfoNV } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceInheritedViewportScissorFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevice4444FormatsFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17716,7 +19079,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceInheritedViewportScissorFea } template <> -size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceViewportScissorInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFaultFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17736,13 +19099,12 @@ size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceViewportScissorIn out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pViewportDepths, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceFaultCountsEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17767,7 +19129,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTexelBufferAlignmentFeature } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassTransformBeginInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceFaultInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17787,12 +19149,14 @@ size_t vulkan_struct_deep_copy(const VkRenderPassTransformBeginInfoQCOM* structs out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAddressInfos, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pVendorInfos, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceRenderPassTransformInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17817,7 +19181,7 @@ size_t vulkan_struct_deep_copy(const VkCommandBufferInheritanceRenderPassTransfo } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthBiasControlFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17842,7 +19206,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthBiasControlFeaturesEXT } template <> -size_t vulkan_struct_deep_copy(const VkDepthBiasInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17867,7 +19231,7 @@ size_t vulkan_struct_deep_copy(const VkDepthBiasInfoEXT* structs, uint32_t count } template <> -size_t vulkan_struct_deep_copy(const VkDepthBiasRepresentationInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMutableDescriptorTypeListEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17886,13 +19250,13 @@ size_t vulkan_struct_deep_copy(const VkDepthBiasRepresentationInfoEXT* structs, auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDescriptorTypes, base_struct.descriptorTypeCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMutableDescriptorTypeCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17912,12 +19276,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceMemoryReportFeaturesE out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pMutableDescriptorTypeLists, base_struct.mutableDescriptorTypeListCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDeviceMemoryReportCallbackDataEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17942,7 +19307,7 @@ size_t vulkan_struct_deep_copy(const VkDeviceMemoryReportCallbackDataEXT* struct } template <> -size_t vulkan_struct_deep_copy(const VkDeviceDeviceMemoryReportCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVertexInputBindingDescription2EXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17967,7 +19332,7 @@ size_t vulkan_struct_deep_copy(const VkDeviceDeviceMemoryReportCreateInfoEXT* st } template <> -size_t vulkan_struct_deep_copy(const VkSamplerCustomBorderColorCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVertexInputAttributeDescription2EXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -17992,7 +19357,7 @@ size_t vulkan_struct_deep_copy(const VkSamplerCustomBorderColorCreateInfoEXT* st } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCustomBorderColorPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDrmPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18017,7 +19382,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCustomBorderColorProperties } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCustomBorderColorFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAddressBindingReportFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18042,7 +19407,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCustomBorderColorFeaturesEX } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentBarrierFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceAddressBindingCallbackDataEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18067,7 +19432,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentBarrierFeaturesNV* s } template <> -size_t vulkan_struct_deep_copy(const VkSurfaceCapabilitiesPresentBarrierNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthClipControlFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18092,7 +19457,7 @@ size_t vulkan_struct_deep_copy(const VkSurfaceCapabilitiesPresentBarrierNV* stru } template <> -size_t vulkan_struct_deep_copy(const VkSwapchainPresentBarrierCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineViewportDepthClipControlCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18117,7 +19482,7 @@ size_t vulkan_struct_deep_copy(const VkSwapchainPresentBarrierCreateInfoNV* stru } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDiagnosticsConfigFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18142,7 +19507,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDiagnosticsConfigFeaturesNV } template <> -size_t vulkan_struct_deep_copy(const VkDeviceDiagnosticsConfigCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImportMemoryZirconHandleInfoFUCHSIA* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18167,7 +19532,7 @@ size_t vulkan_struct_deep_copy(const VkDeviceDiagnosticsConfigCreateInfoNV* stru } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTileShadingFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryZirconHandlePropertiesFUCHSIA* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18192,7 +19557,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTileShadingFeaturesQCOM* st } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTileShadingPropertiesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryGetZirconHandleInfoFUCHSIA* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18217,7 +19582,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTileShadingPropertiesQCOM* } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassTileShadingCreateInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImportSemaphoreZirconHandleInfoFUCHSIA* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18242,7 +19607,7 @@ size_t vulkan_struct_deep_copy(const VkRenderPassTileShadingCreateInfoQCOM* stru } template <> -size_t vulkan_struct_deep_copy(const VkPerTileBeginInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSemaphoreGetZirconHandleInfoFUCHSIA* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18267,7 +19632,7 @@ size_t vulkan_struct_deep_copy(const VkPerTileBeginInfoQCOM* structs, uint32_t c } template <> -size_t vulkan_struct_deep_copy(const VkPerTileEndInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18292,7 +19657,7 @@ size_t vulkan_struct_deep_copy(const VkPerTileEndInfoQCOM* structs, uint32_t cou } template <> -size_t vulkan_struct_deep_copy(const VkDispatchTileInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryGetRemoteAddressInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18317,7 +19682,7 @@ size_t vulkan_struct_deep_copy(const VkDispatchTileInfoQCOM* structs, uint32_t c } template <> -size_t vulkan_struct_deep_copy(const VkQueryLowLatencySupportNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18342,7 +19707,7 @@ size_t vulkan_struct_deep_copy(const VkQueryLowLatencySupportNV* structs, uint32 } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFrameBoundaryFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18367,7 +19732,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceGraphicsPipelineLibraryFeat } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkFrameBoundaryEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18387,12 +19752,15 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceGraphicsPipelineLibraryProp out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pImages, base_struct.imageCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pBuffers, base_struct.bufferCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTag, base_struct.tagSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkGraphicsPipelineLibraryCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18417,7 +19785,7 @@ size_t vulkan_struct_deep_copy(const VkGraphicsPipelineLibraryCreateInfoEXT* str } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSubpassResolvePerformanceQueryEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18442,7 +19810,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderEarlyAndLateFragmentT } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMultisampledRenderToSingleSampledInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18467,7 +19835,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRateEnumsFea } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18492,7 +19860,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentShadingRateEnumsPro } template <> -size_t vulkan_struct_deep_copy(const VkPipelineFragmentShadingRateEnumStateCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceColorWriteEnableFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18517,7 +19885,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineFragmentShadingRateEnumStateCreat } template <> -size_t vulkan_struct_deep_copy(const VkAccelerationStructureGeometryMotionTrianglesDataNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineColorWriteCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18537,12 +19905,13 @@ size_t vulkan_struct_deep_copy(const VkAccelerationStructureGeometryMotionTriang out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pColorWriteEnables, base_struct.attachmentCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkAccelerationStructureMotionInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18567,7 +19936,7 @@ size_t vulkan_struct_deep_copy(const VkAccelerationStructureMotionInfoNV* struct } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingMotionBlurFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18592,7 +19961,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingMotionBlurFeature } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeRgbConversionCapabilitiesVALVE* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18617,7 +19986,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceYcbcr2Plane444FormatsFeatur } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeProfileRgbConversionInfoVALVE* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18642,7 +20011,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMap2Features } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkVideoEncodeSessionRgbConversionCreateInfoVALVE* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18667,7 +20036,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMap2Properti } template <> -size_t vulkan_struct_deep_copy(const VkCopyCommandTransformInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageViewMinLodFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18692,7 +20061,7 @@ size_t vulkan_struct_deep_copy(const VkCopyCommandTransformInfoQCOM* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageCompressionControlFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageViewMinLodCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18717,7 +20086,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageCompressionControlFeat } template <> -size_t vulkan_struct_deep_copy(const VkImageCompressionControlEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiDrawFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18737,13 +20106,12 @@ size_t vulkan_struct_deep_copy(const VkImageCompressionControlEXT* structs, uint out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pFixedRateFlags, base_struct.compressionControlPlaneCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImageCompressionPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiDrawPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18768,7 +20136,7 @@ size_t vulkan_struct_deep_copy(const VkImageCompressionPropertiesEXT* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18793,7 +20161,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAttachmentFeedbackLoopLayou } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevice4444FormatsFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderTileImageFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18818,7 +20186,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevice4444FormatsFeaturesEXT* str } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFaultFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderTileImagePropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18843,7 +20211,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFaultFeaturesEXT* structs, } template <> -size_t vulkan_struct_deep_copy(const VkDeviceFaultCountsEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMicromapBuildInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18863,12 +20231,14 @@ size_t vulkan_struct_deep_copy(const VkDeviceFaultCountsEXT* structs, uint32_t c out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pUsageCounts, base_struct.usageCountsCount, i, offset, out_data); + handle_array_of_pointers(base_struct, base_struct.ppUsageCounts, base_struct.usageCountsCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDeviceFaultInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMicromapCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18888,14 +20258,12 @@ size_t vulkan_struct_deep_copy(const VkDeviceFaultInfoEXT* structs, uint32_t cou out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAddressInfos, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pVendorInfos, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceOpacityMicromapFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18920,7 +20288,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRasterizationOrderAttachmen } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceOpacityMicromapPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18945,7 +20313,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMicromapVersionInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18965,12 +20333,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMutableDescriptorTypeFeatur out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pVersionData, 2 * VK_UUID_SIZE, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkMutableDescriptorTypeListEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCopyMicromapToMemoryInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -18989,13 +20358,13 @@ size_t vulkan_struct_deep_copy(const VkMutableDescriptorTypeListEXT* structs, ui auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pointer(base_struct, base_struct.pDescriptorTypes, base_struct.descriptorTypeCount, i, offset, out_data); + handle_pnext(base_struct, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkMutableDescriptorTypeCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCopyMemoryToMicromapInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19015,13 +20384,12 @@ size_t vulkan_struct_deep_copy(const VkMutableDescriptorTypeCreateInfoEXT* struc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pMutableDescriptorTypeLists, base_struct.mutableDescriptorTypeListCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCopyMicromapInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19046,7 +20414,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexInputDynamicStateFeat } template <> -size_t vulkan_struct_deep_copy(const VkVertexInputBindingDescription2EXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMicromapBuildSizesInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19071,7 +20439,7 @@ size_t vulkan_struct_deep_copy(const VkVertexInputBindingDescription2EXT* struct } template <> -size_t vulkan_struct_deep_copy(const VkVertexInputAttributeDescription2EXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAccelerationStructureTrianglesOpacityMicromapEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19091,12 +20459,14 @@ size_t vulkan_struct_deep_copy(const VkVertexInputAttributeDescription2EXT* stru out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pUsageCounts, base_struct.usageCountsCount, i, offset, out_data); + handle_array_of_pointers(base_struct, base_struct.ppUsageCounts, base_struct.usageCountsCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDrmPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDisplacementMicromapFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19121,7 +20491,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDrmPropertiesEXT* structs, } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAddressBindingReportFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDisplacementMicromapPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19146,7 +20516,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAddressBindingReportFeature } template <> -size_t vulkan_struct_deep_copy(const VkDeviceAddressBindingCallbackDataEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAccelerationStructureTrianglesDisplacementMicromapNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19166,12 +20536,14 @@ size_t vulkan_struct_deep_copy(const VkDeviceAddressBindingCallbackDataEXT* stru out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pUsageCounts, base_struct.usageCountsCount, i, offset, out_data); + handle_array_of_pointers(base_struct, base_struct.ppUsageCounts, base_struct.usageCountsCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthClipControlFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19196,7 +20568,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthClipControlFeaturesEXT } template <> -size_t vulkan_struct_deep_copy(const VkPipelineViewportDepthClipControlCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19221,7 +20593,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineViewportDepthClipControlCreateInf } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19246,7 +20618,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePrimitiveTopologyListRestar } template <> -size_t vulkan_struct_deep_copy(const VkImportMemoryZirconHandleInfoFUCHSIA* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19271,7 +20643,7 @@ size_t vulkan_struct_deep_copy(const VkImportMemoryZirconHandleInfoFUCHSIA* stru } template <> -size_t vulkan_struct_deep_copy(const VkMemoryZirconHandlePropertiesFUCHSIA* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSamplerBorderColorComponentMappingCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19296,7 +20668,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryZirconHandlePropertiesFUCHSIA* stru } template <> -size_t vulkan_struct_deep_copy(const VkMemoryGetZirconHandleInfoFUCHSIA* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19321,7 +20693,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryGetZirconHandleInfoFUCHSIA* structs } template <> -size_t vulkan_struct_deep_copy(const VkImportSemaphoreZirconHandleInfoFUCHSIA* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCorePropertiesARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19346,7 +20718,7 @@ size_t vulkan_struct_deep_copy(const VkImportSemaphoreZirconHandleInfoFUCHSIA* s } template <> -size_t vulkan_struct_deep_copy(const VkSemaphoreGetZirconHandleInfoFUCHSIA* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDeviceQueueShaderCoreControlCreateInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19371,7 +20743,7 @@ size_t vulkan_struct_deep_copy(const VkSemaphoreGetZirconHandleInfoFUCHSIA* stru } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSchedulingControlsFeaturesARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19396,7 +20768,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceInvocationMaskFeaturesHUAWE } template <> -size_t vulkan_struct_deep_copy(const VkMemoryGetRemoteAddressInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSchedulingControlsPropertiesARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19421,7 +20793,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryGetRemoteAddressInfoNV* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19446,7 +20818,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalMemoryRDMAFeaturesN } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFrameBoundaryFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageViewSlicedCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19471,7 +20843,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFrameBoundaryFeaturesEXT* s } template <> -size_t vulkan_struct_deep_copy(const VkFrameBoundaryEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19491,15 +20863,12 @@ size_t vulkan_struct_deep_copy(const VkFrameBoundaryEXT* structs, uint32_t count out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pImages, base_struct.imageCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pBuffers, base_struct.bufferCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pTag, base_struct.tagSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorSetBindingReferenceVALVE* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19524,7 +20893,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultisampledRenderToSingleS } template <> -size_t vulkan_struct_deep_copy(const VkSubpassResolvePerformanceQueryEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutHostMappingInfoVALVE* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19549,7 +20918,7 @@ size_t vulkan_struct_deep_copy(const VkSubpassResolvePerformanceQueryEXT* struct } template <> -size_t vulkan_struct_deep_copy(const VkMultisampledRenderToSingleSampledInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19574,7 +20943,7 @@ size_t vulkan_struct_deep_copy(const VkMultisampledRenderToSingleSampledInfoEXT* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRenderPassStripedFeaturesARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19599,7 +20968,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedDynamicState2Featur } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceColorWriteEnableFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRenderPassStripedPropertiesARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19624,7 +20993,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceColorWriteEnableFeaturesEXT } template <> -size_t vulkan_struct_deep_copy(const VkPipelineColorWriteCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassStripeInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19644,13 +21013,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineColorWriteCreateInfoEXT* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pColorWriteEnables, base_struct.attachmentCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassStripeBeginInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19670,12 +21038,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePrimitivesGeneratedQueryFea out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStripeInfos, base_struct.stripeInfoCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageViewMinLodFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassStripeSubmitInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19695,12 +21064,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageViewMinLodFeaturesEXT* out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pStripeSemaphoreInfos, base_struct.stripeSemaphoreInfoCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkImageViewMinLodCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19725,7 +21095,7 @@ size_t vulkan_struct_deep_copy(const VkImageViewMinLodCreateInfoEXT* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiDrawFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19750,7 +21120,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiDrawFeaturesEXT* struc } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiDrawPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassFragmentDensityMapOffsetEndInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19770,12 +21140,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiDrawPropertiesEXT* str out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pFragmentDensityOffsets, base_struct.fragmentDensityOffsetCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19800,7 +21171,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderTileImageFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkComputePipelineIndirectBufferInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19825,7 +21196,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderTileImageFeaturesEXT* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderTileImagePropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineIndirectDeviceAddressInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19850,7 +21221,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderTileImagePropertiesEX } template <> -size_t vulkan_struct_deep_copy(const VkMicromapBuildInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19870,14 +21241,12 @@ size_t vulkan_struct_deep_copy(const VkMicromapBuildInfoEXT* structs, uint32_t c out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pUsageCounts, base_struct.usageCountsCount, i, offset, out_data); - handle_array_of_pointers(base_struct, base_struct.ppUsageCounts, base_struct.usageCountsCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkMicromapCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAccelerationStructureGeometryLinearSweptSpheresDataNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19902,7 +21271,7 @@ size_t vulkan_struct_deep_copy(const VkMicromapCreateInfoEXT* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceOpacityMicromapFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAccelerationStructureGeometrySpheresDataNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19927,7 +21296,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceOpacityMicromapFeaturesEXT* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceOpacityMicromapPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLinearColorAttachmentFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19952,7 +21321,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceOpacityMicromapPropertiesEX } template <> -size_t vulkan_struct_deep_copy(const VkMicromapVersionInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -19972,13 +21341,12 @@ size_t vulkan_struct_deep_copy(const VkMicromapVersionInfoEXT* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pVersionData, 2 * VK_UUID_SIZE, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkCopyMicromapToMemoryInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageViewSampleWeightCreateInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20003,7 +21371,7 @@ size_t vulkan_struct_deep_copy(const VkCopyMicromapToMemoryInfoEXT* structs, uin } template <> -size_t vulkan_struct_deep_copy(const VkCopyMemoryToMicromapInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageProcessingFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20028,7 +21396,7 @@ size_t vulkan_struct_deep_copy(const VkCopyMemoryToMicromapInfoEXT* structs, uin } template <> -size_t vulkan_struct_deep_copy(const VkCopyMicromapInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageProcessingPropertiesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20053,7 +21421,7 @@ size_t vulkan_struct_deep_copy(const VkCopyMicromapInfoEXT* structs, uint32_t co } template <> -size_t vulkan_struct_deep_copy(const VkMicromapBuildSizesInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceNestedCommandBufferFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20078,7 +21446,7 @@ size_t vulkan_struct_deep_copy(const VkMicromapBuildSizesInfoEXT* structs, uint3 } template <> -size_t vulkan_struct_deep_copy(const VkAccelerationStructureTrianglesOpacityMicromapEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceNestedCommandBufferPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20098,14 +21466,12 @@ size_t vulkan_struct_deep_copy(const VkAccelerationStructureTrianglesOpacityMicr out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pUsageCounts, base_struct.usageCountsCount, i, offset, out_data); - handle_array_of_pointers(base_struct, base_struct.ppUsageCounts, base_struct.usageCountsCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDisplacementMicromapFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkExternalMemoryAcquireUnmodifiedEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20130,7 +21496,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDisplacementMicromapFeature } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDisplacementMicromapPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20155,7 +21521,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDisplacementMicromapPropert } template <> -size_t vulkan_struct_deep_copy(const VkAccelerationStructureTrianglesDisplacementMicromapNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedDynamicState3PropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20175,14 +21541,12 @@ size_t vulkan_struct_deep_copy(const VkAccelerationStructureTrianglesDisplacemen out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pUsageCounts, base_struct.usageCountsCount, i, offset, out_data); - handle_array_of_pointers(base_struct, base_struct.ppUsageCounts, base_struct.usageCountsCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20207,7 +21571,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceClusterCullingShaderFeature } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassCreationControlEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20232,7 +21596,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceClusterCullingShaderPropert } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassCreationFeedbackCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20252,12 +21616,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceClusterCullingShaderVrsFeat out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRenderPassFeedback, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassSubpassFeedbackCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20277,12 +21642,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceBorderColorSwizzleFeaturesE out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSubpassFeedback, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkSamplerBorderColorComponentMappingCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDirectDriverLoadingInfoLUNARG* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20307,7 +21673,7 @@ size_t vulkan_struct_deep_copy(const VkSamplerBorderColorComponentMappingCreateI } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDirectDriverLoadingListLUNARG* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20327,12 +21693,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePageableDeviceLocalMemoryFe out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDrivers, base_struct.driverCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCorePropertiesARM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20357,7 +21724,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCorePropertiesARM* st } template <> -size_t vulkan_struct_deep_copy(const VkDeviceQueueShaderCoreControlCreateInfoARM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20382,7 +21749,7 @@ size_t vulkan_struct_deep_copy(const VkDeviceQueueShaderCoreControlCreateInfoARM } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSchedulingControlsFeaturesARM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineShaderStageModuleIdentifierCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20402,12 +21769,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSchedulingControlsFeaturesA out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pIdentifier, base_struct.identifierSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSchedulingControlsPropertiesARM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkShaderModuleIdentifierEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20432,7 +21800,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSchedulingControlsPropertie } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceOpticalFlowFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20457,7 +21825,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageSlicedViewOf3DFeatures } template <> -size_t vulkan_struct_deep_copy(const VkImageViewSlicedCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceOpticalFlowPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20482,7 +21850,7 @@ size_t vulkan_struct_deep_copy(const VkImageViewSlicedCreateInfoEXT* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkOpticalFlowImageFormatInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20507,7 +21875,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorSetHostMappingFea } template <> -size_t vulkan_struct_deep_copy(const VkDescriptorSetBindingReferenceVALVE* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkOpticalFlowImageFormatPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20532,7 +21900,7 @@ size_t vulkan_struct_deep_copy(const VkDescriptorSetBindingReferenceVALVE* struc } template <> -size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutHostMappingInfoVALVE* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkOpticalFlowSessionCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20557,7 +21925,7 @@ size_t vulkan_struct_deep_copy(const VkDescriptorSetLayoutHostMappingInfoVALVE* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkOpticalFlowSessionCreatePrivateDataInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20582,7 +21950,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceNonSeamlessCubeMapFeaturesE } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRenderPassStripedFeaturesARM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkOpticalFlowExecuteInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20602,12 +21970,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRenderPassStripedFeaturesAR out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRenderPassStripedPropertiesARM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLegacyDitheringFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20632,7 +22001,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRenderPassStripedProperties } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassStripeInfoARM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalFormatResolveFeaturesANDROID* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20657,7 +22026,7 @@ size_t vulkan_struct_deep_copy(const VkRenderPassStripeInfoARM* structs, uint32_ } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassStripeBeginInfoARM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalFormatResolvePropertiesANDROID* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20677,13 +22046,12 @@ size_t vulkan_struct_deep_copy(const VkRenderPassStripeBeginInfoARM* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStripeInfos, base_struct.stripeInfoCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassStripeSubmitInfoARM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferFormatResolvePropertiesANDROID* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20703,13 +22071,12 @@ size_t vulkan_struct_deep_copy(const VkRenderPassStripeSubmitInfoARM* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pStripeSemaphoreInfos, base_struct.stripeSemaphoreInfoCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAntiLagFeaturesAMD* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20734,7 +22101,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapOffsetFea } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAntiLagPresentationInfoAMD* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20759,7 +22126,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapOffsetPro } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassFragmentDensityMapOffsetEndInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAntiLagDataAMD* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20779,13 +22146,13 @@ size_t vulkan_struct_deep_copy(const VkRenderPassFragmentDensityMapOffsetEndInfo out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pFragmentDensityOffsets, base_struct.fragmentDensityOffsetCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPresentationInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderObjectFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20810,7 +22177,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsComp } template <> -size_t vulkan_struct_deep_copy(const VkComputePipelineIndirectBufferInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderObjectPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20835,7 +22202,7 @@ size_t vulkan_struct_deep_copy(const VkComputePipelineIndirectBufferInfoNV* stru } template <> -size_t vulkan_struct_deep_copy(const VkPipelineIndirectDeviceAddressInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkShaderCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20855,12 +22222,17 @@ size_t vulkan_struct_deep_copy(const VkPipelineIndirectDeviceAddressInfoNV* stru out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCode, base_struct.codeSize, i, offset, out_data); + handle_pointer(base_struct, base_struct.pName, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSetLayouts, base_struct.setLayoutCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPushConstantRanges, base_struct.pushConstantRangeCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSpecializationInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTilePropertiesFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20885,7 +22257,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingLinearSweptSphere } template <> -size_t vulkan_struct_deep_copy(const VkAccelerationStructureGeometryLinearSweptSpheresDataNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkTilePropertiesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20910,7 +22282,7 @@ size_t vulkan_struct_deep_copy(const VkAccelerationStructureGeometryLinearSweptS } template <> -size_t vulkan_struct_deep_copy(const VkAccelerationStructureGeometrySpheresDataNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAmigoProfilingFeaturesSEC* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20935,7 +22307,7 @@ size_t vulkan_struct_deep_copy(const VkAccelerationStructureGeometrySpheresDataN } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLinearColorAttachmentFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAmigoProfilingSubmitInfoSEC* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20960,7 +22332,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLinearColorAttachmentFeatur } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -20985,7 +22357,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageCompressionControlSwap } template <> -size_t vulkan_struct_deep_copy(const VkImageViewSampleWeightCreateInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21010,7 +22382,7 @@ size_t vulkan_struct_deep_copy(const VkImageViewSampleWeightCreateInfoQCOM* stru } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageProcessingFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21035,7 +22407,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageProcessingFeaturesQCOM } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageProcessingPropertiesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeVectorPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21060,7 +22432,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageProcessingPropertiesQC } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceNestedCommandBufferFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeVectorFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21085,7 +22457,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceNestedCommandBufferFeatures } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceNestedCommandBufferPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCooperativeVectorPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21110,7 +22482,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceNestedCommandBufferProperti } template <> -size_t vulkan_struct_deep_copy(const VkExternalMemoryAcquireUnmodifiedEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkConvertCooperativeVectorMatrixInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21130,12 +22502,13 @@ size_t vulkan_struct_deep_copy(const VkExternalMemoryAcquireUnmodifiedEXT* struc out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDstSize, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21160,7 +22533,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedDynamicState3Featur } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedDynamicState3PropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21185,7 +22558,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedDynamicState3Proper } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21210,7 +22583,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceSubpassMergeFeedbackFeature } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassCreationControlEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21235,7 +22608,7 @@ size_t vulkan_struct_deep_copy(const VkRenderPassCreationControlEXT* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassCreationFeedbackCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkLayerSettingEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21254,14 +22627,15 @@ size_t vulkan_struct_deep_copy(const VkRenderPassCreationFeedbackCreateInfoEXT* auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pRenderPassFeedback, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pLayerName, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSettingName, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pValues, base_struct.valueCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkRenderPassSubpassFeedbackCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkLayerSettingsCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21281,13 +22655,13 @@ size_t vulkan_struct_deep_copy(const VkRenderPassSubpassFeedbackCreateInfoEXT* s out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSubpassFeedback, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSettings, base_struct.settingCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkDirectDriverLoadingInfoLUNARG* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21312,7 +22686,7 @@ size_t vulkan_struct_deep_copy(const VkDirectDriverLoadingInfoLUNARG* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkDirectDriverLoadingListLUNARG* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21332,13 +22706,12 @@ size_t vulkan_struct_deep_copy(const VkDirectDriverLoadingListLUNARG* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDrivers, base_struct.driverCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21363,7 +22736,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderModuleIdentifierFeatu } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21388,7 +22761,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderModuleIdentifierPrope } template <> -size_t vulkan_struct_deep_copy(const VkPipelineShaderStageModuleIdentifierCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkLatencySleepModeInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21408,13 +22781,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineShaderStageModuleIdentifierCreate out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pIdentifier, base_struct.identifierSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkShaderModuleIdentifierEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkLatencySleepInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21439,7 +22811,7 @@ size_t vulkan_struct_deep_copy(const VkShaderModuleIdentifierEXT* structs, uint3 } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceOpticalFlowFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSetLatencyMarkerInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21464,7 +22836,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceOpticalFlowFeaturesNV* stru } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceOpticalFlowPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkLatencyTimingsFrameReportNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21489,7 +22861,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceOpticalFlowPropertiesNV* st } template <> -size_t vulkan_struct_deep_copy(const VkOpticalFlowImageFormatInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkGetLatencyMarkerInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21509,12 +22881,13 @@ size_t vulkan_struct_deep_copy(const VkOpticalFlowImageFormatInfoNV* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTimings, base_struct.timingCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkOpticalFlowImageFormatPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkLatencySubmissionPresentIdNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21539,7 +22912,7 @@ size_t vulkan_struct_deep_copy(const VkOpticalFlowImageFormatPropertiesNV* struc } template <> -size_t vulkan_struct_deep_copy(const VkOpticalFlowSessionCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSwapchainLatencyCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21564,7 +22937,7 @@ size_t vulkan_struct_deep_copy(const VkOpticalFlowSessionCreateInfoNV* structs, } template <> -size_t vulkan_struct_deep_copy(const VkOpticalFlowSessionCreatePrivateDataInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkOutOfBandQueueTypeInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21589,7 +22962,7 @@ size_t vulkan_struct_deep_copy(const VkOpticalFlowSessionCreatePrivateDataInfoNV } template <> -size_t vulkan_struct_deep_copy(const VkOpticalFlowExecuteInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkLatencySurfaceCapabilitiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21609,13 +22982,13 @@ size_t vulkan_struct_deep_copy(const VkOpticalFlowExecuteInfoNV* structs, uint32 out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPresentModes, base_struct.presentModeCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLegacyDitheringFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDataGraphFeaturesARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21640,7 +23013,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLegacyDitheringFeaturesEXT* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalFormatResolveFeaturesANDROID* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelineConstantARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21665,7 +23038,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalFormatResolveFeatur } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalFormatResolvePropertiesANDROID* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelineResourceInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21690,7 +23063,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExternalFormatResolveProper } template <> -size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferFormatResolvePropertiesANDROID* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelineCompilerControlCreateInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21710,12 +23083,13 @@ size_t vulkan_struct_deep_copy(const VkAndroidHardwareBufferFormatResolvePropert out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pVendorOptions, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAntiLagFeaturesAMD* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelineCreateInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21735,12 +23109,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAntiLagFeaturesAMD* structs out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pResourceInfos, base_struct.resourceInfoCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkAntiLagPresentationInfoAMD* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelineShaderModuleCreateInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21760,12 +23135,15 @@ size_t vulkan_struct_deep_copy(const VkAntiLagPresentationInfoAMD* structs, uint out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pName, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSpecializationInfo, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pConstants, base_struct.constantCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkAntiLagDataAMD* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelineSessionCreateInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21785,13 +23163,12 @@ size_t vulkan_struct_deep_copy(const VkAntiLagDataAMD* structs, uint32_t count, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPresentationInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderObjectFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21816,7 +23193,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderObjectFeaturesEXT* st } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderObjectPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelineSessionBindPointRequirementARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21841,7 +23218,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderObjectPropertiesEXT* } template <> -size_t vulkan_struct_deep_copy(const VkShaderCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21861,17 +23238,12 @@ size_t vulkan_struct_deep_copy(const VkShaderCreateInfoEXT* structs, uint32_t co out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pCode, base_struct.codeSize, i, offset, out_data); - handle_pointer(base_struct, base_struct.pName, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSetLayouts, base_struct.setLayoutCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPushConstantRanges, base_struct.pushConstantRangeCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSpecializationInfo, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTilePropertiesFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBindDataGraphPipelineSessionMemoryInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21896,7 +23268,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTilePropertiesFeaturesQCOM* } template <> -size_t vulkan_struct_deep_copy(const VkTilePropertiesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelineInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21921,7 +23293,7 @@ size_t vulkan_struct_deep_copy(const VkTilePropertiesQCOM* structs, uint32_t cou } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAmigoProfilingFeaturesSEC* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelinePropertyQueryResultARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21941,12 +23313,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAmigoProfilingFeaturesSEC* out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pData, base_struct.dataSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkAmigoProfilingSubmitInfoSEC* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelineIdentifierCreateInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21966,12 +23339,13 @@ size_t vulkan_struct_deep_copy(const VkAmigoProfilingSubmitInfoSEC* structs, uin out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pIdentifier, base_struct.identifierSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelineDispatchInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -21996,7 +23370,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewPerViewViewportsFe } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkQueueFamilyDataGraphPropertiesARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22021,7 +23395,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingInvocationReorder } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphProcessingEngineCreateInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22041,12 +23415,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingInvocationReorder out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pProcessingEngines, base_struct.processingEngineCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeVectorPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22071,7 +23446,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeVectorProperties } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeVectorFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkQueueFamilyDataGraphProcessingEnginePropertiesARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22096,7 +23471,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeVectorFeaturesNV } template <> -size_t vulkan_struct_deep_copy(const VkCooperativeVectorPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22121,7 +23496,7 @@ size_t vulkan_struct_deep_copy(const VkCooperativeVectorPropertiesNV* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkConvertCooperativeVectorMatrixInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22141,13 +23516,12 @@ size_t vulkan_struct_deep_copy(const VkConvertCooperativeVectorMatrixInfoNV* str out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDstSize, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22167,12 +23541,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedSparseAddressSpaceF out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPerViewRenderAreas, base_struct.perViewRenderAreaCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePerStageDescriptorSetFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22197,7 +23572,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceExtendedSparseAddressSpaceP } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageProcessing2FeaturesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22222,7 +23597,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLegacyVertexAttributesFeatu } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageProcessing2PropertiesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22247,7 +23622,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLegacyVertexAttributesPrope } template <> -size_t vulkan_struct_deep_copy(const VkLayerSettingEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSamplerBlockMatchWindowCreateInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22266,15 +23641,13 @@ size_t vulkan_struct_deep_copy(const VkLayerSettingEXT* structs, uint32_t count, auto out_structures = reinterpret_cast(out_data); out_structures[i] = base_struct; } - handle_pointer(base_struct, base_struct.pLayerName, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSettingName, 1, i, offset, out_data); - handle_pointer(base_struct, base_struct.pValues, base_struct.valueCount, i, offset, out_data); + handle_pnext(base_struct, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkLayerSettingsCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCubicWeightsFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22294,13 +23667,12 @@ size_t vulkan_struct_deep_copy(const VkLayerSettingsCreateInfoEXT* structs, uint out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSettings, base_struct.settingCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSamplerCubicWeightsCreateInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22325,7 +23697,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCoreBuiltinsFeaturesA } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBlitImageCubicWeightsInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22350,7 +23722,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderCoreBuiltinsPropertie } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceYcbcrDegammaFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22375,7 +23747,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineLibraryGroupHandles } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22400,7 +23772,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDynamicRenderingUnusedAttac } template <> -size_t vulkan_struct_deep_copy(const VkLatencySleepModeInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCubicClampFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22425,7 +23797,7 @@ size_t vulkan_struct_deep_copy(const VkLatencySleepModeInfoNV* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkLatencySleepInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22450,7 +23822,7 @@ size_t vulkan_struct_deep_copy(const VkLatencySleepInfoNV* structs, uint32_t cou } template <> -size_t vulkan_struct_deep_copy(const VkSetLatencyMarkerInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLayeredDriverPropertiesMSFT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22475,7 +23847,7 @@ size_t vulkan_struct_deep_copy(const VkSetLatencyMarkerInfoNV* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkLatencyTimingsFrameReportNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22500,7 +23872,7 @@ size_t vulkan_struct_deep_copy(const VkLatencyTimingsFrameReportNV* structs, uin } template <> -size_t vulkan_struct_deep_copy(const VkGetLatencyMarkerInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTileMemoryHeapFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22520,13 +23892,12 @@ size_t vulkan_struct_deep_copy(const VkGetLatencyMarkerInfoNV* structs, uint32_t out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pTimings, base_struct.timingCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkLatencySubmissionPresentIdNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTileMemoryHeapPropertiesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22551,7 +23922,7 @@ size_t vulkan_struct_deep_copy(const VkLatencySubmissionPresentIdNV* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkSwapchainLatencyCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkTileMemoryRequirementsQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22576,7 +23947,7 @@ size_t vulkan_struct_deep_copy(const VkSwapchainLatencyCreateInfoNV* structs, ui } template <> -size_t vulkan_struct_deep_copy(const VkOutOfBandQueueTypeInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkTileMemoryBindInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22601,7 +23972,7 @@ size_t vulkan_struct_deep_copy(const VkOutOfBandQueueTypeInfoNV* structs, uint32 } template <> -size_t vulkan_struct_deep_copy(const VkLatencySurfaceCapabilitiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkTileMemorySizeInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22621,13 +23992,12 @@ size_t vulkan_struct_deep_copy(const VkLatencySurfaceCapabilitiesNV* structs, ui out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPresentModes, base_struct.presentModeCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDecompressMemoryInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22647,12 +24017,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMultiviewPerViewRenderAreas out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pRegions, base_struct.regionCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMemoryDecompressionFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22672,13 +24043,12 @@ size_t vulkan_struct_deep_copy(const VkMultiviewPerViewRenderAreasRenderPassBegi out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPerViewRenderAreas, base_struct.perViewRenderAreaCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePerStageDescriptorSetFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceMemoryDecompressionPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22703,7 +24073,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePerStageDescriptorSetFeatur } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageProcessing2FeaturesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDisplaySurfaceStereoCreateInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22728,7 +24098,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageProcessing2FeaturesQCO } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageProcessing2PropertiesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDisplayModeStereoPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22753,7 +24123,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageProcessing2PropertiesQ } template <> -size_t vulkan_struct_deep_copy(const VkSamplerBlockMatchWindowCreateInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRawAccessChainsFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22778,7 +24148,7 @@ size_t vulkan_struct_deep_copy(const VkSamplerBlockMatchWindowCreateInfoQCOM* st } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCubicWeightsFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCommandBufferInheritanceFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22803,7 +24173,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCubicWeightsFeaturesQCOM* s } template <> -size_t vulkan_struct_deep_copy(const VkSamplerCubicWeightsCreateInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22828,7 +24198,7 @@ size_t vulkan_struct_deep_copy(const VkSamplerCubicWeightsCreateInfoQCOM* struct } template <> -size_t vulkan_struct_deep_copy(const VkBlitImageCubicWeightsInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22853,7 +24223,7 @@ size_t vulkan_struct_deep_copy(const VkBlitImageCubicWeightsInfoQCOM* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceYcbcrDegammaFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderFloat8FeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22878,7 +24248,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceYcbcrDegammaFeaturesQCOM* s } template <> -size_t vulkan_struct_deep_copy(const VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingValidationFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22903,7 +24273,7 @@ size_t vulkan_struct_deep_copy(const VkSamplerYcbcrConversionYcbcrDegammaCreateI } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCubicClampFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22928,7 +24298,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCubicClampFeaturesQCOM* str } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22953,7 +24323,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceAttachmentFeedbackLoopDynam } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLayeredDriverPropertiesMSFT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPartitionedAccelerationStructureFlagsNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22978,7 +24348,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceLayeredDriverPropertiesMSFT } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkWriteDescriptorSetPartitionedAccelerationStructureNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -22998,12 +24368,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDescriptorPoolOverallocatio out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pAccelerationStructures, base_struct.accelerationStructureCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTileMemoryHeapFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPartitionedAccelerationStructureInstancesInputNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23028,7 +24399,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTileMemoryHeapFeaturesQCOM* } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTileMemoryHeapPropertiesQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBuildPartitionedAccelerationStructureInfoNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23053,7 +24424,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceTileMemoryHeapPropertiesQCO } template <> -size_t vulkan_struct_deep_copy(const VkTileMemoryRequirementsQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkAccelerationStructureBuildSizesInfoKHR* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23078,7 +24449,7 @@ size_t vulkan_struct_deep_copy(const VkTileMemoryRequirementsQCOM* structs, uint } template <> -size_t vulkan_struct_deep_copy(const VkTileMemoryBindInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23103,7 +24474,7 @@ size_t vulkan_struct_deep_copy(const VkTileMemoryBindInfoQCOM* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkTileMemorySizeInfoQCOM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23128,7 +24499,7 @@ size_t vulkan_struct_deep_copy(const VkTileMemorySizeInfoQCOM* structs, uint32_t } template <> -size_t vulkan_struct_deep_copy(const VkDisplaySurfaceStereoCreateInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkGeneratedCommandsMemoryRequirementsInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23153,7 +24524,7 @@ size_t vulkan_struct_deep_copy(const VkDisplaySurfaceStereoCreateInfoNV* structs } template <> -size_t vulkan_struct_deep_copy(const VkDisplayModeStereoPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkIndirectExecutionSetPipelineInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23178,7 +24549,7 @@ size_t vulkan_struct_deep_copy(const VkDisplayModeStereoPropertiesNV* structs, u } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRawAccessChainsFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkIndirectExecutionSetShaderLayoutInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23198,12 +24569,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRawAccessChainsFeaturesNV* out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSetLayouts, base_struct.setLayoutCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCommandBufferInheritanceFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkIndirectExecutionSetShaderInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23223,12 +24595,15 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCommandBufferInheritanceFea out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pInitialShaders, base_struct.shaderCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pSetLayoutInfos, base_struct.shaderCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pPushConstantRanges, base_struct.pushConstantRangeCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkIndirectExecutionSetCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23248,12 +24623,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderAtomicFloat16VectorFe out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_struct_member(base_struct, base_struct.info, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkGeneratedCommandsInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23278,7 +24654,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderReplicatedCompositesF } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderFloat8FeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkWriteIndirectExecutionSetPipelineEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23303,7 +24679,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderFloat8FeaturesEXT* st } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingValidationFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkIndirectCommandsLayoutTokenEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23323,12 +24699,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingValidationFeature out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_union(base_struct, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkIndirectCommandsLayoutCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23348,12 +24725,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePartitionedAccelerationStru out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pTokens, base_struct.tokenCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkGeneratedCommandsPipelineInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23378,7 +24756,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePartitionedAccelerationStru } template <> -size_t vulkan_struct_deep_copy(const VkPartitionedAccelerationStructureFlagsNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkGeneratedCommandsShaderInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23398,12 +24776,13 @@ size_t vulkan_struct_deep_copy(const VkPartitionedAccelerationStructureFlagsNV* out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pShaders, base_struct.shaderCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkWriteDescriptorSetPartitionedAccelerationStructureNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkWriteIndirectExecutionSetShaderEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23423,13 +24802,12 @@ size_t vulkan_struct_deep_copy(const VkWriteDescriptorSetPartitionedAcceleration out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pAccelerationStructures, base_struct.accelerationStructureCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPartitionedAccelerationStructureInstancesInputNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageAlignmentControlFeaturesMESA* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23454,7 +24832,7 @@ size_t vulkan_struct_deep_copy(const VkPartitionedAccelerationStructureInstances } template <> -size_t vulkan_struct_deep_copy(const VkBuildPartitionedAccelerationStructureInfoNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageAlignmentControlPropertiesMESA* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23479,7 +24857,7 @@ size_t vulkan_struct_deep_copy(const VkBuildPartitionedAccelerationStructureInfo } template <> -size_t vulkan_struct_deep_copy(const VkAccelerationStructureBuildSizesInfoKHR* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImageAlignmentControlCreateInfoMESA* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23504,7 +24882,7 @@ size_t vulkan_struct_deep_copy(const VkAccelerationStructureBuildSizesInfoKHR* s } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23529,7 +24907,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsFeat } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23554,7 +24932,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDeviceGeneratedCommandsProp } template <> -size_t vulkan_struct_deep_copy(const VkGeneratedCommandsMemoryRequirementsInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthClampControlFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23579,7 +24957,7 @@ size_t vulkan_struct_deep_copy(const VkGeneratedCommandsMemoryRequirementsInfoEX } template <> -size_t vulkan_struct_deep_copy(const VkIndirectExecutionSetPipelineInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineViewportDepthClampControlCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23599,12 +24977,13 @@ size_t vulkan_struct_deep_copy(const VkIndirectExecutionSetPipelineInfoEXT* stru out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDepthClampRange, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkIndirectExecutionSetShaderLayoutInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceHdrVividFeaturesHUAWEI* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23624,13 +25003,12 @@ size_t vulkan_struct_deep_copy(const VkIndirectExecutionSetShaderLayoutInfoEXT* out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSetLayouts, base_struct.setLayoutCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkIndirectExecutionSetShaderInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkHdrVividDynamicMetadataHUAWEI* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23650,15 +25028,13 @@ size_t vulkan_struct_deep_copy(const VkIndirectExecutionSetShaderInfoEXT* struct out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pInitialShaders, base_struct.shaderCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pSetLayoutInfos, base_struct.shaderCount, i, offset, out_data); - handle_pointer(base_struct, base_struct.pPushConstantRanges, base_struct.pushConstantRangeCount, i, offset, out_data); + handle_pointer(base_struct, base_struct.pDynamicMetadata, base_struct.dynamicMetadataSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkIndirectExecutionSetCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCooperativeMatrixFlexibleDimensionsPropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23678,13 +25054,12 @@ size_t vulkan_struct_deep_copy(const VkIndirectExecutionSetCreateInfoEXT* struct out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_struct_member(base_struct, base_struct.info, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkGeneratedCommandsInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrix2FeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23709,7 +25084,7 @@ size_t vulkan_struct_deep_copy(const VkGeneratedCommandsInfoEXT* structs, uint32 } template <> -size_t vulkan_struct_deep_copy(const VkWriteIndirectExecutionSetPipelineEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrix2PropertiesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23734,7 +25109,7 @@ size_t vulkan_struct_deep_copy(const VkWriteIndirectExecutionSetPipelineEXT* str } template <> -size_t vulkan_struct_deep_copy(const VkIndirectCommandsLayoutTokenEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineOpacityMicromapFeaturesARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23754,13 +25129,12 @@ size_t vulkan_struct_deep_copy(const VkIndirectCommandsLayoutTokenEXT* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_union(base_struct, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkIndirectCommandsLayoutCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkImportMemoryMetalHandleInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23780,13 +25154,12 @@ size_t vulkan_struct_deep_copy(const VkIndirectCommandsLayoutCreateInfoEXT* stru out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pTokens, base_struct.tokenCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkGeneratedCommandsPipelineInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryMetalHandlePropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23811,7 +25184,7 @@ size_t vulkan_struct_deep_copy(const VkGeneratedCommandsPipelineInfoEXT* structs } template <> -size_t vulkan_struct_deep_copy(const VkGeneratedCommandsShaderInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkMemoryGetMetalHandleInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23831,13 +25204,12 @@ size_t vulkan_struct_deep_copy(const VkGeneratedCommandsShaderInfoEXT* structs, out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pShaders, base_struct.shaderCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkWriteIndirectExecutionSetShaderEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePerformanceCountersByRegionFeaturesARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23862,7 +25234,7 @@ size_t vulkan_struct_deep_copy(const VkWriteIndirectExecutionSetShaderEXT* struc } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageAlignmentControlFeaturesMESA* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePerformanceCountersByRegionPropertiesARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23887,7 +25259,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageAlignmentControlFeatur } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageAlignmentControlPropertiesMESA* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPerformanceCounterARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23912,7 +25284,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceImageAlignmentControlProper } template <> -size_t vulkan_struct_deep_copy(const VkImageAlignmentControlCreateInfoMESA* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPerformanceCounterDescriptionARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23937,7 +25309,7 @@ size_t vulkan_struct_deep_copy(const VkImageAlignmentControlCreateInfoMESA* stru } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthClampControlFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkRenderPassPerformanceCountersByRegionBeginInfoARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23957,12 +25329,14 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDepthClampControlFeaturesEX out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCounterAddresses, 1, i, offset, out_data); + handle_pointer(base_struct, base_struct.pCounterIndices, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPipelineViewportDepthClampControlCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -23982,13 +25356,12 @@ size_t vulkan_struct_deep_copy(const VkPipelineViewportDepthClampControlCreateIn out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDepthClampRange, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceHdrVividFeaturesHUAWEI* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFormatPackFeaturesARM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24013,7 +25386,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceHdrVividFeaturesHUAWEI* str } template <> -size_t vulkan_struct_deep_copy(const VkHdrVividDynamicMetadataHUAWEI* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24033,13 +25406,12 @@ size_t vulkan_struct_deep_copy(const VkHdrVividDynamicMetadataHUAWEI* structs, u out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); - handle_pointer(base_struct, base_struct.pDynamicMetadata, base_struct.dynamicMetadataSize, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkCooperativeMatrixFlexibleDimensionsPropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24064,7 +25436,7 @@ size_t vulkan_struct_deep_copy(const VkCooperativeMatrixFlexibleDimensionsProper } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrix2FeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPipelineFragmentDensityMapLayeredCreateInfoVALVE* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24089,7 +25461,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrix2FeaturesN } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrix2PropertiesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkSetPresentConfigNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24114,7 +25486,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCooperativeMatrix2Propertie } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineOpacityMicromapFeaturesARM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentMeteringFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24139,7 +25511,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineOpacityMicromapFeat } template <> -size_t vulkan_struct_deep_copy(const VkImportMemoryMetalHandleInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24164,7 +25536,7 @@ size_t vulkan_struct_deep_copy(const VkImportMemoryMetalHandleInfoEXT* structs, } template <> -size_t vulkan_struct_deep_copy(const VkMemoryMetalHandlePropertiesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShader64BitIndexingFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24189,7 +25561,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryMetalHandlePropertiesEXT* structs, } template <> -size_t vulkan_struct_deep_copy(const VkMemoryGetMetalHandleInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceCustomResolveFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24214,7 +25586,7 @@ size_t vulkan_struct_deep_copy(const VkMemoryGetMetalHandleInfoEXT* structs, uin } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkBeginCustomResolveInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24239,7 +25611,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceVertexAttributeRobustnessFe } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFormatPackFeaturesARM* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkCustomResolveCreateInfoEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24259,12 +25631,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFormatPackFeaturesARM* stru out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pColorAttachmentFormats, base_struct.colorAttachmentCount, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkDataGraphPipelineBuiltinModelCreateInfoQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24284,12 +25657,13 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapLayeredFe out_structures[i] = base_struct; } handle_pnext(base_struct, i, offset, out_data); + handle_pointer(base_struct, base_struct.pOperation, 1, i, offset, out_data); } return offset; } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceDataGraphModelFeaturesQCOM* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24314,7 +25688,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceFragmentDensityMapLayeredPr } template <> -size_t vulkan_struct_deep_copy(const VkPipelineFragmentDensityMapLayeredCreateInfoVALVE* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderLongVectorFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24339,7 +25713,7 @@ size_t vulkan_struct_deep_copy(const VkPipelineFragmentDensityMapLayeredCreateIn } template <> -size_t vulkan_struct_deep_copy(const VkSetPresentConfigNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderLongVectorPropertiesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24364,7 +25738,7 @@ size_t vulkan_struct_deep_copy(const VkSetPresentConfigNV* structs, uint32_t cou } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentMeteringFeaturesNV* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24389,7 +25763,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDevicePresentMeteringFeaturesNV* } template <> -size_t vulkan_struct_deep_copy(const VkRenderingEndInfoEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24414,7 +25788,7 @@ size_t vulkan_struct_deep_copy(const VkRenderingEndInfoEXT* structs, uint32_t co } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkComputeOccupancyPriorityParametersNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); @@ -24439,7 +25813,7 @@ size_t vulkan_struct_deep_copy(const VkPhysicalDeviceZeroInitializeDeviceMemoryF } template <> -size_t vulkan_struct_deep_copy(const VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC* structs, uint32_t count, uint8_t* out_data) +size_t vulkan_struct_deep_copy(const VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV* structs, uint32_t count, uint8_t* out_data) { using struct_type = std::decay_t; constexpr uint32_t struct_size = sizeof(struct_type); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_deep_copy_stype.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_deep_copy_stype.cpp index f68ce0013..4fe85258d 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_deep_copy_stype.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_deep_copy_stype.cpp @@ -101,10 +101,6 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_EVENT_CREATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -113,10 +109,6 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -125,6 +117,30 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_EVENT_CREATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -141,6 +157,34 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -181,34 +225,6 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -217,30 +233,10 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -249,10 +245,6 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -265,10 +257,6 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -353,38 +341,10 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -401,14 +361,6 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -417,18 +369,6 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -485,6 +425,22 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -493,6 +449,50 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -517,41 +517,65 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO: + case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_SUBPASS_END_INFO: + case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: + case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES: + case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES: offset += vulkan_struct_deep_copy( @@ -585,22 +609,10 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -609,26 +621,6 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -637,90 +629,86 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: + case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT: + case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT: + case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: + case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES: + case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO: + case VK_STRUCTURE_TYPE_SUBPASS_END_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: + case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO: + case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO: + case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO: + case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO: + case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: + case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES: + case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -733,10 +721,6 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_MEMORY_BARRIER_2: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -769,14 +753,6 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_BUFFER_COPY_2: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -805,21 +781,53 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_IMAGE_BLIT_2: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2: + case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES: offset += vulkan_struct_deep_copy( @@ -849,61 +857,53 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_RENDERING_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO: + case VK_STRUCTURE_TYPE_IMAGE_BLIT_2: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: + case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES: + case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES: + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3: + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: + case VK_STRUCTURE_TYPE_RENDERING_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES: + case VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS: + case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES: offset += vulkan_struct_deep_copy( @@ -925,113 +925,113 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: + case VK_STRUCTURE_TYPE_MEMORY_MAP_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES: + case VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO: + case VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES: + case VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO: + case VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: + case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_MEMORY_MAP_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO: + case VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_RENDERING_AREA_INFO: + case VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2: + case VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO: + case VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2: + case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO: + case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO: + case VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES: + case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES: + case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES: + case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; case VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO: offset += vulkan_struct_deep_copy( @@ -1065,45 +1065,45 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY: + case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO: + case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO: + case VK_STRUCTURE_TYPE_RENDERING_AREA_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE: + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY: + case VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; case VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR: offset += vulkan_struct_deep_copy( @@ -1289,62 +1289,6 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_INFO_KHR: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -1529,30 +1473,6 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -1689,6 +1609,10 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -1925,6 +1849,22 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_COPY_MEMORY_INDIRECT_INFO_KHR: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INDIRECT_INFO_KHR: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -2009,13 +1949,17 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_MEMORY_BARRIER_ACCESS_FLAGS_3_KHR: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_MEMORY_BARRIER_ACCESS_FLAGS_3_KHR: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR: offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); + reinterpret_cast(pNext), 1, out_ptr); break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR: offset += vulkan_struct_deep_copy( @@ -2029,22 +1973,6 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -2061,6 +1989,26 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_RENDERING_END_INFO_KHR: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -2525,6 +2473,46 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_SWAPCHAIN_TIMING_PROPERTIES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_SWAPCHAIN_TIME_DOMAIN_PROPERTIES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_PROPERTIES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PRESENT_TIMING_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -2797,6 +2785,10 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -2845,6 +2837,58 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_BUFFER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_IMAGE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_IMAGE_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_SAMPLER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -3053,6 +3097,22 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RGB_CONVERSION_CAPABILITIES_VALVE: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_PROFILE_RGB_CONVERSION_INFO_VALVE: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_RGB_CONVERSION_CREATE_INFO_VALVE: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -3517,6 +3577,86 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CREATE_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_CREATE_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENTS_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENT_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_MEMORY_REQUIREMENTS_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_BIND_DATA_GRAPH_PIPELINE_SESSION_MEMORY_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_PROPERTY_QUERY_RESULT_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_DISPATCH_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -3597,6 +3737,18 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_DECOMPRESS_MEMORY_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -3725,6 +3877,14 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -3769,6 +3929,26 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); @@ -3797,18 +3977,58 @@ size_t vulkan_struct_deep_copy_stype(const void* pNext, uint8_t* out_data) offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; - case VK_STRUCTURE_TYPE_RENDERING_END_INFO_EXT: - offset += vulkan_struct_deep_copy( - reinterpret_cast(pNext), 1, out_ptr); - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_BEGIN_CUSTOM_RESOLVE_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_BUILTIN_MODEL_CREATE_INFO_QCOM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_COMPUTE_OCCUPANCY_PRIORITY_PARAMETERS_NV: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV: + offset += vulkan_struct_deep_copy( + reinterpret_cast(pNext), 1, out_ptr); + break; case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR: offset += vulkan_struct_deep_copy( reinterpret_cast(pNext), 1, out_ptr); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_encoders.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_encoders.cpp index 4983e9b26..649875590 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_encoders.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_encoders.cpp @@ -149,7 +149,7 @@ void EncodeStruct(ParameterEncoder* encoder, const StdVideoH264SequenceParameter encoder->EncodeUInt32Value(value.frame_crop_top_offset); encoder->EncodeUInt32Value(value.frame_crop_bottom_offset); encoder->EncodeUInt32Value(value.reserved2); - encoder->EncodeInt32Ptr(value.pOffsetForRefFrame); + encoder->EncodeInt32Array(value.pOffsetForRefFrame, value.num_ref_frames_in_pic_order_cnt_cycle); EncodeStructPtr(encoder, value.pScalingLists); EncodeStructPtr(encoder, value.pSequenceParameterSetVui); } @@ -299,9 +299,9 @@ void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH264ReferenceLi encoder->EncodeUInt8Value(value.refList1ModOpCount); encoder->EncodeUInt8Value(value.refPicMarkingOpCount); encoder->EncodeUInt8Array(value.reserved1, 7); - EncodeStructPtr(encoder, value.pRefList0ModOperations); - EncodeStructPtr(encoder, value.pRefList1ModOperations); - EncodeStructPtr(encoder, value.pRefPicMarkingOperations); + EncodeStructArray(encoder, value.pRefList0ModOperations, value.refList0ModOpCount); + EncodeStructArray(encoder, value.pRefList1ModOperations, value.refList1ModOpCount); + EncodeStructArray(encoder, value.pRefPicMarkingOperations, value.refPicMarkingOpCount); } void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH264PictureInfo& value) @@ -343,509 +343,6 @@ void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH264SliceHeader EncodeStructPtr(encoder, value.pWeightTable); } -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265ProfileTierLevelFlags& value) -{ - encoder->EncodeUInt32Value(value.general_tier_flag); - encoder->EncodeUInt32Value(value.general_progressive_source_flag); - encoder->EncodeUInt32Value(value.general_interlaced_source_flag); - encoder->EncodeUInt32Value(value.general_non_packed_constraint_flag); - encoder->EncodeUInt32Value(value.general_frame_only_constraint_flag); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265ProfileTierLevel& value) -{ - EncodeStruct(encoder, value.flags); - encoder->EncodeEnumValue(value.general_profile_idc); - encoder->EncodeEnumValue(value.general_level_idc); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265DecPicBufMgr& value) -{ - encoder->EncodeUInt32Array(value.max_latency_increase_plus1, STD_VIDEO_H265_SUBLAYERS_LIST_SIZE); - encoder->EncodeUInt8Array(value.max_dec_pic_buffering_minus1, STD_VIDEO_H265_SUBLAYERS_LIST_SIZE); - encoder->EncodeUInt8Array(value.max_num_reorder_pics, STD_VIDEO_H265_SUBLAYERS_LIST_SIZE); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265SubLayerHrdParameters& value) -{ - encoder->EncodeUInt32Array(value.bit_rate_value_minus1, STD_VIDEO_H265_CPB_CNT_LIST_SIZE); - encoder->EncodeUInt32Array(value.cpb_size_value_minus1, STD_VIDEO_H265_CPB_CNT_LIST_SIZE); - encoder->EncodeUInt32Array(value.cpb_size_du_value_minus1, STD_VIDEO_H265_CPB_CNT_LIST_SIZE); - encoder->EncodeUInt32Array(value.bit_rate_du_value_minus1, STD_VIDEO_H265_CPB_CNT_LIST_SIZE); - encoder->EncodeUInt32Value(value.cbr_flag); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265HrdFlags& value) -{ - encoder->EncodeUInt32Value(value.nal_hrd_parameters_present_flag); - encoder->EncodeUInt32Value(value.vcl_hrd_parameters_present_flag); - encoder->EncodeUInt32Value(value.sub_pic_hrd_params_present_flag); - encoder->EncodeUInt32Value(value.sub_pic_cpb_params_in_pic_timing_sei_flag); - encoder->EncodeUInt32Value(value.fixed_pic_rate_general_flag); - encoder->EncodeUInt32Value(value.fixed_pic_rate_within_cvs_flag); - encoder->EncodeUInt32Value(value.low_delay_hrd_flag); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265HrdParameters& value) -{ - EncodeStruct(encoder, value.flags); - encoder->EncodeUInt8Value(value.tick_divisor_minus2); - encoder->EncodeUInt8Value(value.du_cpb_removal_delay_increment_length_minus1); - encoder->EncodeUInt8Value(value.dpb_output_delay_du_length_minus1); - encoder->EncodeUInt8Value(value.bit_rate_scale); - encoder->EncodeUInt8Value(value.cpb_size_scale); - encoder->EncodeUInt8Value(value.cpb_size_du_scale); - encoder->EncodeUInt8Value(value.initial_cpb_removal_delay_length_minus1); - encoder->EncodeUInt8Value(value.au_cpb_removal_delay_length_minus1); - encoder->EncodeUInt8Value(value.dpb_output_delay_length_minus1); - encoder->EncodeUInt8Array(value.cpb_cnt_minus1, STD_VIDEO_H265_SUBLAYERS_LIST_SIZE); - encoder->EncodeUInt16Array(value.elemental_duration_in_tc_minus1, STD_VIDEO_H265_SUBLAYERS_LIST_SIZE); - encoder->EncodeUInt16Array(value.reserved, 3); - EncodeStructPtr(encoder, value.pSubLayerHrdParametersNal); - EncodeStructPtr(encoder, value.pSubLayerHrdParametersVcl); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265VpsFlags& value) -{ - encoder->EncodeUInt32Value(value.vps_temporal_id_nesting_flag); - encoder->EncodeUInt32Value(value.vps_sub_layer_ordering_info_present_flag); - encoder->EncodeUInt32Value(value.vps_timing_info_present_flag); - encoder->EncodeUInt32Value(value.vps_poc_proportional_to_timing_flag); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265VideoParameterSet& value) -{ - EncodeStruct(encoder, value.flags); - encoder->EncodeUInt8Value(value.vps_video_parameter_set_id); - encoder->EncodeUInt8Value(value.vps_max_sub_layers_minus1); - encoder->EncodeUInt8Value(value.reserved1); - encoder->EncodeUInt8Value(value.reserved2); - encoder->EncodeUInt32Value(value.vps_num_units_in_tick); - encoder->EncodeUInt32Value(value.vps_time_scale); - encoder->EncodeUInt32Value(value.vps_num_ticks_poc_diff_one_minus1); - encoder->EncodeUInt32Value(value.reserved3); - EncodeStructPtr(encoder, value.pDecPicBufMgr); - EncodeStructPtr(encoder, value.pHrdParameters); - EncodeStructPtr(encoder, value.pProfileTierLevel); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265ScalingLists& value) -{ - encoder->EncodeUInt82DMatrix(value.ScalingList4x4, STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS, STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS); - encoder->EncodeUInt82DMatrix(value.ScalingList8x8, STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS, STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS); - encoder->EncodeUInt82DMatrix(value.ScalingList16x16, STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS, STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS); - encoder->EncodeUInt82DMatrix(value.ScalingList32x32, STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS, STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS); - encoder->EncodeUInt8Array(value.ScalingListDCCoef16x16, STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS); - encoder->EncodeUInt8Array(value.ScalingListDCCoef32x32, STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265ShortTermRefPicSetFlags& value) -{ - encoder->EncodeUInt32Value(value.inter_ref_pic_set_prediction_flag); - encoder->EncodeUInt32Value(value.delta_rps_sign); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265ShortTermRefPicSet& value) -{ - EncodeStruct(encoder, value.flags); - encoder->EncodeUInt32Value(value.delta_idx_minus1); - encoder->EncodeUInt16Value(value.use_delta_flag); - encoder->EncodeUInt16Value(value.abs_delta_rps_minus1); - encoder->EncodeUInt16Value(value.used_by_curr_pic_flag); - encoder->EncodeUInt16Value(value.used_by_curr_pic_s0_flag); - encoder->EncodeUInt16Value(value.used_by_curr_pic_s1_flag); - encoder->EncodeUInt16Value(value.reserved1); - encoder->EncodeUInt8Value(value.reserved2); - encoder->EncodeUInt8Value(value.reserved3); - encoder->EncodeUInt8Value(value.num_negative_pics); - encoder->EncodeUInt8Value(value.num_positive_pics); - encoder->EncodeUInt16Array(value.delta_poc_s0_minus1, STD_VIDEO_H265_MAX_DPB_SIZE); - encoder->EncodeUInt16Array(value.delta_poc_s1_minus1, STD_VIDEO_H265_MAX_DPB_SIZE); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265LongTermRefPicsSps& value) -{ - encoder->EncodeUInt32Value(value.used_by_curr_pic_lt_sps_flag); - encoder->EncodeUInt32Array(value.lt_ref_pic_poc_lsb_sps, STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265SpsVuiFlags& value) -{ - encoder->EncodeUInt32Value(value.aspect_ratio_info_present_flag); - encoder->EncodeUInt32Value(value.overscan_info_present_flag); - encoder->EncodeUInt32Value(value.overscan_appropriate_flag); - encoder->EncodeUInt32Value(value.video_signal_type_present_flag); - encoder->EncodeUInt32Value(value.video_full_range_flag); - encoder->EncodeUInt32Value(value.colour_description_present_flag); - encoder->EncodeUInt32Value(value.chroma_loc_info_present_flag); - encoder->EncodeUInt32Value(value.neutral_chroma_indication_flag); - encoder->EncodeUInt32Value(value.field_seq_flag); - encoder->EncodeUInt32Value(value.frame_field_info_present_flag); - encoder->EncodeUInt32Value(value.default_display_window_flag); - encoder->EncodeUInt32Value(value.vui_timing_info_present_flag); - encoder->EncodeUInt32Value(value.vui_poc_proportional_to_timing_flag); - encoder->EncodeUInt32Value(value.vui_hrd_parameters_present_flag); - encoder->EncodeUInt32Value(value.bitstream_restriction_flag); - encoder->EncodeUInt32Value(value.tiles_fixed_structure_flag); - encoder->EncodeUInt32Value(value.motion_vectors_over_pic_boundaries_flag); - encoder->EncodeUInt32Value(value.restricted_ref_pic_lists_flag); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265SequenceParameterSetVui& value) -{ - EncodeStruct(encoder, value.flags); - encoder->EncodeEnumValue(value.aspect_ratio_idc); - encoder->EncodeUInt16Value(value.sar_width); - encoder->EncodeUInt16Value(value.sar_height); - encoder->EncodeUInt8Value(value.video_format); - encoder->EncodeUInt8Value(value.colour_primaries); - encoder->EncodeUInt8Value(value.transfer_characteristics); - encoder->EncodeUInt8Value(value.matrix_coeffs); - encoder->EncodeUInt8Value(value.chroma_sample_loc_type_top_field); - encoder->EncodeUInt8Value(value.chroma_sample_loc_type_bottom_field); - encoder->EncodeUInt8Value(value.reserved1); - encoder->EncodeUInt8Value(value.reserved2); - encoder->EncodeUInt16Value(value.def_disp_win_left_offset); - encoder->EncodeUInt16Value(value.def_disp_win_right_offset); - encoder->EncodeUInt16Value(value.def_disp_win_top_offset); - encoder->EncodeUInt16Value(value.def_disp_win_bottom_offset); - encoder->EncodeUInt32Value(value.vui_num_units_in_tick); - encoder->EncodeUInt32Value(value.vui_time_scale); - encoder->EncodeUInt32Value(value.vui_num_ticks_poc_diff_one_minus1); - encoder->EncodeUInt16Value(value.min_spatial_segmentation_idc); - encoder->EncodeUInt16Value(value.reserved3); - encoder->EncodeUInt8Value(value.max_bytes_per_pic_denom); - encoder->EncodeUInt8Value(value.max_bits_per_min_cu_denom); - encoder->EncodeUInt8Value(value.log2_max_mv_length_horizontal); - encoder->EncodeUInt8Value(value.log2_max_mv_length_vertical); - EncodeStructPtr(encoder, value.pHrdParameters); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265PredictorPaletteEntries& value) -{ - encoder->EncodeUInt162DMatrix(value.PredictorPaletteEntries, STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE, STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265SpsFlags& value) -{ - encoder->EncodeUInt32Value(value.sps_temporal_id_nesting_flag); - encoder->EncodeUInt32Value(value.separate_colour_plane_flag); - encoder->EncodeUInt32Value(value.conformance_window_flag); - encoder->EncodeUInt32Value(value.sps_sub_layer_ordering_info_present_flag); - encoder->EncodeUInt32Value(value.scaling_list_enabled_flag); - encoder->EncodeUInt32Value(value.sps_scaling_list_data_present_flag); - encoder->EncodeUInt32Value(value.amp_enabled_flag); - encoder->EncodeUInt32Value(value.sample_adaptive_offset_enabled_flag); - encoder->EncodeUInt32Value(value.pcm_enabled_flag); - encoder->EncodeUInt32Value(value.pcm_loop_filter_disabled_flag); - encoder->EncodeUInt32Value(value.long_term_ref_pics_present_flag); - encoder->EncodeUInt32Value(value.sps_temporal_mvp_enabled_flag); - encoder->EncodeUInt32Value(value.strong_intra_smoothing_enabled_flag); - encoder->EncodeUInt32Value(value.vui_parameters_present_flag); - encoder->EncodeUInt32Value(value.sps_extension_present_flag); - encoder->EncodeUInt32Value(value.sps_range_extension_flag); - encoder->EncodeUInt32Value(value.transform_skip_rotation_enabled_flag); - encoder->EncodeUInt32Value(value.transform_skip_context_enabled_flag); - encoder->EncodeUInt32Value(value.implicit_rdpcm_enabled_flag); - encoder->EncodeUInt32Value(value.explicit_rdpcm_enabled_flag); - encoder->EncodeUInt32Value(value.extended_precision_processing_flag); - encoder->EncodeUInt32Value(value.intra_smoothing_disabled_flag); - encoder->EncodeUInt32Value(value.high_precision_offsets_enabled_flag); - encoder->EncodeUInt32Value(value.persistent_rice_adaptation_enabled_flag); - encoder->EncodeUInt32Value(value.cabac_bypass_alignment_enabled_flag); - encoder->EncodeUInt32Value(value.sps_scc_extension_flag); - encoder->EncodeUInt32Value(value.sps_curr_pic_ref_enabled_flag); - encoder->EncodeUInt32Value(value.palette_mode_enabled_flag); - encoder->EncodeUInt32Value(value.sps_palette_predictor_initializers_present_flag); - encoder->EncodeUInt32Value(value.intra_boundary_filtering_disabled_flag); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265SequenceParameterSet& value) -{ - EncodeStruct(encoder, value.flags); - encoder->EncodeEnumValue(value.chroma_format_idc); - encoder->EncodeUInt32Value(value.pic_width_in_luma_samples); - encoder->EncodeUInt32Value(value.pic_height_in_luma_samples); - encoder->EncodeUInt8Value(value.sps_video_parameter_set_id); - encoder->EncodeUInt8Value(value.sps_max_sub_layers_minus1); - encoder->EncodeUInt8Value(value.sps_seq_parameter_set_id); - encoder->EncodeUInt8Value(value.bit_depth_luma_minus8); - encoder->EncodeUInt8Value(value.bit_depth_chroma_minus8); - encoder->EncodeUInt8Value(value.log2_max_pic_order_cnt_lsb_minus4); - encoder->EncodeUInt8Value(value.log2_min_luma_coding_block_size_minus3); - encoder->EncodeUInt8Value(value.log2_diff_max_min_luma_coding_block_size); - encoder->EncodeUInt8Value(value.log2_min_luma_transform_block_size_minus2); - encoder->EncodeUInt8Value(value.log2_diff_max_min_luma_transform_block_size); - encoder->EncodeUInt8Value(value.max_transform_hierarchy_depth_inter); - encoder->EncodeUInt8Value(value.max_transform_hierarchy_depth_intra); - encoder->EncodeUInt8Value(value.num_short_term_ref_pic_sets); - encoder->EncodeUInt8Value(value.num_long_term_ref_pics_sps); - encoder->EncodeUInt8Value(value.pcm_sample_bit_depth_luma_minus1); - encoder->EncodeUInt8Value(value.pcm_sample_bit_depth_chroma_minus1); - encoder->EncodeUInt8Value(value.log2_min_pcm_luma_coding_block_size_minus3); - encoder->EncodeUInt8Value(value.log2_diff_max_min_pcm_luma_coding_block_size); - encoder->EncodeUInt8Value(value.reserved1); - encoder->EncodeUInt8Value(value.reserved2); - encoder->EncodeUInt8Value(value.palette_max_size); - encoder->EncodeUInt8Value(value.delta_palette_max_predictor_size); - encoder->EncodeUInt8Value(value.motion_vector_resolution_control_idc); - encoder->EncodeUInt8Value(value.sps_num_palette_predictor_initializers_minus1); - encoder->EncodeUInt32Value(value.conf_win_left_offset); - encoder->EncodeUInt32Value(value.conf_win_right_offset); - encoder->EncodeUInt32Value(value.conf_win_top_offset); - encoder->EncodeUInt32Value(value.conf_win_bottom_offset); - EncodeStructPtr(encoder, value.pProfileTierLevel); - EncodeStructPtr(encoder, value.pDecPicBufMgr); - EncodeStructPtr(encoder, value.pScalingLists); - EncodeStructPtr(encoder, value.pShortTermRefPicSet); - EncodeStructPtr(encoder, value.pLongTermRefPicsSps); - EncodeStructPtr(encoder, value.pSequenceParameterSetVui); - EncodeStructPtr(encoder, value.pPredictorPaletteEntries); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265PpsFlags& value) -{ - encoder->EncodeUInt32Value(value.dependent_slice_segments_enabled_flag); - encoder->EncodeUInt32Value(value.output_flag_present_flag); - encoder->EncodeUInt32Value(value.sign_data_hiding_enabled_flag); - encoder->EncodeUInt32Value(value.cabac_init_present_flag); - encoder->EncodeUInt32Value(value.constrained_intra_pred_flag); - encoder->EncodeUInt32Value(value.transform_skip_enabled_flag); - encoder->EncodeUInt32Value(value.cu_qp_delta_enabled_flag); - encoder->EncodeUInt32Value(value.pps_slice_chroma_qp_offsets_present_flag); - encoder->EncodeUInt32Value(value.weighted_pred_flag); - encoder->EncodeUInt32Value(value.weighted_bipred_flag); - encoder->EncodeUInt32Value(value.transquant_bypass_enabled_flag); - encoder->EncodeUInt32Value(value.tiles_enabled_flag); - encoder->EncodeUInt32Value(value.entropy_coding_sync_enabled_flag); - encoder->EncodeUInt32Value(value.uniform_spacing_flag); - encoder->EncodeUInt32Value(value.loop_filter_across_tiles_enabled_flag); - encoder->EncodeUInt32Value(value.pps_loop_filter_across_slices_enabled_flag); - encoder->EncodeUInt32Value(value.deblocking_filter_control_present_flag); - encoder->EncodeUInt32Value(value.deblocking_filter_override_enabled_flag); - encoder->EncodeUInt32Value(value.pps_deblocking_filter_disabled_flag); - encoder->EncodeUInt32Value(value.pps_scaling_list_data_present_flag); - encoder->EncodeUInt32Value(value.lists_modification_present_flag); - encoder->EncodeUInt32Value(value.slice_segment_header_extension_present_flag); - encoder->EncodeUInt32Value(value.pps_extension_present_flag); - encoder->EncodeUInt32Value(value.cross_component_prediction_enabled_flag); - encoder->EncodeUInt32Value(value.chroma_qp_offset_list_enabled_flag); - encoder->EncodeUInt32Value(value.pps_curr_pic_ref_enabled_flag); - encoder->EncodeUInt32Value(value.residual_adaptive_colour_transform_enabled_flag); - encoder->EncodeUInt32Value(value.pps_slice_act_qp_offsets_present_flag); - encoder->EncodeUInt32Value(value.pps_palette_predictor_initializers_present_flag); - encoder->EncodeUInt32Value(value.monochrome_palette_flag); - encoder->EncodeUInt32Value(value.pps_range_extension_flag); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265PictureParameterSet& value) -{ - EncodeStruct(encoder, value.flags); - encoder->EncodeUInt8Value(value.pps_pic_parameter_set_id); - encoder->EncodeUInt8Value(value.pps_seq_parameter_set_id); - encoder->EncodeUInt8Value(value.sps_video_parameter_set_id); - encoder->EncodeUInt8Value(value.num_extra_slice_header_bits); - encoder->EncodeUInt8Value(value.num_ref_idx_l0_default_active_minus1); - encoder->EncodeUInt8Value(value.num_ref_idx_l1_default_active_minus1); - encoder->EncodeInt8Value(value.init_qp_minus26); - encoder->EncodeUInt8Value(value.diff_cu_qp_delta_depth); - encoder->EncodeInt8Value(value.pps_cb_qp_offset); - encoder->EncodeInt8Value(value.pps_cr_qp_offset); - encoder->EncodeInt8Value(value.pps_beta_offset_div2); - encoder->EncodeInt8Value(value.pps_tc_offset_div2); - encoder->EncodeUInt8Value(value.log2_parallel_merge_level_minus2); - encoder->EncodeUInt8Value(value.log2_max_transform_skip_block_size_minus2); - encoder->EncodeUInt8Value(value.diff_cu_chroma_qp_offset_depth); - encoder->EncodeUInt8Value(value.chroma_qp_offset_list_len_minus1); - encoder->EncodeInt8Array(value.cb_qp_offset_list, STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE); - encoder->EncodeInt8Array(value.cr_qp_offset_list, STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE); - encoder->EncodeUInt8Value(value.log2_sao_offset_scale_luma); - encoder->EncodeUInt8Value(value.log2_sao_offset_scale_chroma); - encoder->EncodeInt8Value(value.pps_act_y_qp_offset_plus5); - encoder->EncodeInt8Value(value.pps_act_cb_qp_offset_plus5); - encoder->EncodeInt8Value(value.pps_act_cr_qp_offset_plus3); - encoder->EncodeUInt8Value(value.pps_num_palette_predictor_initializers); - encoder->EncodeUInt8Value(value.luma_bit_depth_entry_minus8); - encoder->EncodeUInt8Value(value.chroma_bit_depth_entry_minus8); - encoder->EncodeUInt8Value(value.num_tile_columns_minus1); - encoder->EncodeUInt8Value(value.num_tile_rows_minus1); - encoder->EncodeUInt8Value(value.reserved1); - encoder->EncodeUInt8Value(value.reserved2); - encoder->EncodeUInt16Array(value.column_width_minus1, STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE); - encoder->EncodeUInt16Array(value.row_height_minus1, STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE); - encoder->EncodeUInt32Value(value.reserved3); - EncodeStructPtr(encoder, value.pScalingLists); - EncodeStructPtr(encoder, value.pPredictorPaletteEntries); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoDecodeH265PictureInfoFlags& value) -{ - encoder->EncodeUInt32Value(value.IrapPicFlag); - encoder->EncodeUInt32Value(value.IdrPicFlag); - encoder->EncodeUInt32Value(value.IsReference); - encoder->EncodeUInt32Value(value.short_term_ref_pic_set_sps_flag); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoDecodeH265PictureInfo& value) -{ - EncodeStruct(encoder, value.flags); - encoder->EncodeUInt8Value(value.sps_video_parameter_set_id); - encoder->EncodeUInt8Value(value.pps_seq_parameter_set_id); - encoder->EncodeUInt8Value(value.pps_pic_parameter_set_id); - encoder->EncodeUInt8Value(value.NumDeltaPocsOfRefRpsIdx); - encoder->EncodeInt32Value(value.PicOrderCntVal); - encoder->EncodeUInt16Value(value.NumBitsForSTRefPicSetInSlice); - encoder->EncodeUInt16Value(value.reserved); - encoder->EncodeUInt8Array(value.RefPicSetStCurrBefore, STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE); - encoder->EncodeUInt8Array(value.RefPicSetStCurrAfter, STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE); - encoder->EncodeUInt8Array(value.RefPicSetLtCurr, STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoDecodeH265ReferenceInfoFlags& value) -{ - encoder->EncodeUInt32Value(value.used_for_long_term_reference); - encoder->EncodeUInt32Value(value.unused_for_reference); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoDecodeH265ReferenceInfo& value) -{ - EncodeStruct(encoder, value.flags); - encoder->EncodeInt32Value(value.PicOrderCntVal); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265WeightTableFlags& value) -{ - encoder->EncodeUInt16Value(value.luma_weight_l0_flag); - encoder->EncodeUInt16Value(value.chroma_weight_l0_flag); - encoder->EncodeUInt16Value(value.luma_weight_l1_flag); - encoder->EncodeUInt16Value(value.chroma_weight_l1_flag); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265WeightTable& value) -{ - EncodeStruct(encoder, value.flags); - encoder->EncodeUInt8Value(value.luma_log2_weight_denom); - encoder->EncodeInt8Value(value.delta_chroma_log2_weight_denom); - encoder->EncodeInt8Array(value.delta_luma_weight_l0, STD_VIDEO_H265_MAX_NUM_LIST_REF); - encoder->EncodeInt8Array(value.luma_offset_l0, STD_VIDEO_H265_MAX_NUM_LIST_REF); - encoder->EncodeInt82DMatrix(value.delta_chroma_weight_l0, STD_VIDEO_H265_MAX_NUM_LIST_REF, STD_VIDEO_H265_MAX_CHROMA_PLANES); - encoder->EncodeInt82DMatrix(value.delta_chroma_offset_l0, STD_VIDEO_H265_MAX_NUM_LIST_REF, STD_VIDEO_H265_MAX_CHROMA_PLANES); - encoder->EncodeInt8Array(value.delta_luma_weight_l1, STD_VIDEO_H265_MAX_NUM_LIST_REF); - encoder->EncodeInt8Array(value.luma_offset_l1, STD_VIDEO_H265_MAX_NUM_LIST_REF); - encoder->EncodeInt82DMatrix(value.delta_chroma_weight_l1, STD_VIDEO_H265_MAX_NUM_LIST_REF, STD_VIDEO_H265_MAX_CHROMA_PLANES); - encoder->EncodeInt82DMatrix(value.delta_chroma_offset_l1, STD_VIDEO_H265_MAX_NUM_LIST_REF, STD_VIDEO_H265_MAX_CHROMA_PLANES); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265LongTermRefPics& value) -{ - encoder->EncodeUInt8Value(value.num_long_term_sps); - encoder->EncodeUInt8Value(value.num_long_term_pics); - encoder->EncodeUInt8Array(value.lt_idx_sps, STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS); - encoder->EncodeUInt8Array(value.poc_lsb_lt, STD_VIDEO_H265_MAX_LONG_TERM_PICS); - encoder->EncodeUInt16Value(value.used_by_curr_pic_lt_flag); - encoder->EncodeUInt8Array(value.delta_poc_msb_present_flag, STD_VIDEO_H265_MAX_DELTA_POC); - encoder->EncodeUInt8Array(value.delta_poc_msb_cycle_lt, STD_VIDEO_H265_MAX_DELTA_POC); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265SliceSegmentHeaderFlags& value) -{ - encoder->EncodeUInt32Value(value.first_slice_segment_in_pic_flag); - encoder->EncodeUInt32Value(value.dependent_slice_segment_flag); - encoder->EncodeUInt32Value(value.slice_sao_luma_flag); - encoder->EncodeUInt32Value(value.slice_sao_chroma_flag); - encoder->EncodeUInt32Value(value.num_ref_idx_active_override_flag); - encoder->EncodeUInt32Value(value.mvd_l1_zero_flag); - encoder->EncodeUInt32Value(value.cabac_init_flag); - encoder->EncodeUInt32Value(value.cu_chroma_qp_offset_enabled_flag); - encoder->EncodeUInt32Value(value.deblocking_filter_override_flag); - encoder->EncodeUInt32Value(value.slice_deblocking_filter_disabled_flag); - encoder->EncodeUInt32Value(value.collocated_from_l0_flag); - encoder->EncodeUInt32Value(value.slice_loop_filter_across_slices_enabled_flag); - encoder->EncodeUInt32Value(value.reserved); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265SliceSegmentHeader& value) -{ - EncodeStruct(encoder, value.flags); - encoder->EncodeEnumValue(value.slice_type); - encoder->EncodeUInt32Value(value.slice_segment_address); - encoder->EncodeUInt8Value(value.collocated_ref_idx); - encoder->EncodeUInt8Value(value.MaxNumMergeCand); - encoder->EncodeInt8Value(value.slice_cb_qp_offset); - encoder->EncodeInt8Value(value.slice_cr_qp_offset); - encoder->EncodeInt8Value(value.slice_beta_offset_div2); - encoder->EncodeInt8Value(value.slice_tc_offset_div2); - encoder->EncodeInt8Value(value.slice_act_y_qp_offset); - encoder->EncodeInt8Value(value.slice_act_cb_qp_offset); - encoder->EncodeInt8Value(value.slice_act_cr_qp_offset); - encoder->EncodeInt8Value(value.slice_qp_delta); - encoder->EncodeUInt16Value(value.reserved1); - EncodeStructPtr(encoder, value.pWeightTable); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265ReferenceListsInfoFlags& value) -{ - encoder->EncodeUInt32Value(value.ref_pic_list_modification_flag_l0); - encoder->EncodeUInt32Value(value.ref_pic_list_modification_flag_l1); - encoder->EncodeUInt32Value(value.reserved); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265ReferenceListsInfo& value) -{ - EncodeStruct(encoder, value.flags); - encoder->EncodeUInt8Value(value.num_ref_idx_l0_active_minus1); - encoder->EncodeUInt8Value(value.num_ref_idx_l1_active_minus1); - encoder->EncodeUInt8Array(value.RefPicList0, STD_VIDEO_H265_MAX_NUM_LIST_REF); - encoder->EncodeUInt8Array(value.RefPicList1, STD_VIDEO_H265_MAX_NUM_LIST_REF); - encoder->EncodeUInt8Array(value.list_entry_l0, STD_VIDEO_H265_MAX_NUM_LIST_REF); - encoder->EncodeUInt8Array(value.list_entry_l1, STD_VIDEO_H265_MAX_NUM_LIST_REF); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265PictureInfoFlags& value) -{ - encoder->EncodeUInt32Value(value.is_reference); - encoder->EncodeUInt32Value(value.IrapPicFlag); - encoder->EncodeUInt32Value(value.used_for_long_term_reference); - encoder->EncodeUInt32Value(value.discardable_flag); - encoder->EncodeUInt32Value(value.cross_layer_bla_flag); - encoder->EncodeUInt32Value(value.pic_output_flag); - encoder->EncodeUInt32Value(value.no_output_of_prior_pics_flag); - encoder->EncodeUInt32Value(value.short_term_ref_pic_set_sps_flag); - encoder->EncodeUInt32Value(value.slice_temporal_mvp_enabled_flag); - encoder->EncodeUInt32Value(value.reserved); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265PictureInfo& value) -{ - EncodeStruct(encoder, value.flags); - encoder->EncodeEnumValue(value.pic_type); - encoder->EncodeUInt8Value(value.sps_video_parameter_set_id); - encoder->EncodeUInt8Value(value.pps_seq_parameter_set_id); - encoder->EncodeUInt8Value(value.pps_pic_parameter_set_id); - encoder->EncodeUInt8Value(value.short_term_ref_pic_set_idx); - encoder->EncodeInt32Value(value.PicOrderCntVal); - encoder->EncodeUInt8Value(value.TemporalId); - encoder->EncodeUInt8Array(value.reserved1, 7); - EncodeStructPtr(encoder, value.pRefLists); - EncodeStructPtr(encoder, value.pShortTermRefPicSet); - EncodeStructPtr(encoder, value.pLongTermRefPics); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265ReferenceInfoFlags& value) -{ - encoder->EncodeUInt32Value(value.used_for_long_term_reference); - encoder->EncodeUInt32Value(value.unused_for_reference); - encoder->EncodeUInt32Value(value.reserved); -} - -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265ReferenceInfo& value) -{ - EncodeStruct(encoder, value.flags); - encoder->EncodeEnumValue(value.pic_type); - encoder->EncodeInt32Value(value.PicOrderCntVal); - encoder->EncodeUInt8Value(value.TemporalId); -} - void EncodeStruct(ParameterEncoder* encoder, const StdVideoVP9ColorConfigFlags& value) { encoder->EncodeUInt32Value(value.color_range); @@ -1070,10 +567,10 @@ void EncodeStruct(ParameterEncoder* encoder, const StdVideoAV1TileInfo& value) encoder->EncodeUInt16Value(value.context_update_tile_id); encoder->EncodeUInt8Value(value.tile_size_bytes_minus_1); encoder->EncodeUInt8Array(value.reserved1, 7); - encoder->EncodeUInt16Ptr(value.pMiColStarts); - encoder->EncodeUInt16Ptr(value.pMiRowStarts); - encoder->EncodeUInt16Ptr(value.pWidthInSbsMinus1); - encoder->EncodeUInt16Ptr(value.pHeightInSbsMinus1); + encoder->EncodeUInt16Array(value.pMiColStarts, value.TileCols); + encoder->EncodeUInt16Array(value.pMiRowStarts, value.TileRows); + encoder->EncodeUInt16Array(value.pWidthInSbsMinus1, value.TileCols); + encoder->EncodeUInt16Array(value.pHeightInSbsMinus1, value.TileRows); } void EncodeStruct(ParameterEncoder* encoder, const StdVideoAV1CDEF& value) @@ -1375,30 +872,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkBufferMemoryBarrier& value) encoder->EncodeUInt64Value(value.size); } -void EncodeStruct(ParameterEncoder* encoder, const VkDispatchIndirectCommand& value) -{ - encoder->EncodeUInt32Value(value.x); - encoder->EncodeUInt32Value(value.y); - encoder->EncodeUInt32Value(value.z); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkDrawIndexedIndirectCommand& value) -{ - encoder->EncodeUInt32Value(value.indexCount); - encoder->EncodeUInt32Value(value.instanceCount); - encoder->EncodeUInt32Value(value.firstIndex); - encoder->EncodeInt32Value(value.vertexOffset); - encoder->EncodeUInt32Value(value.firstInstance); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkDrawIndirectCommand& value) -{ - encoder->EncodeUInt32Value(value.vertexCount); - encoder->EncodeUInt32Value(value.instanceCount); - encoder->EncodeUInt32Value(value.firstVertex); - encoder->EncodeUInt32Value(value.firstInstance); -} - void EncodeStruct(ParameterEncoder* encoder, const VkImageSubresourceRange& value) { encoder->EncodeFlagsValue(value.aspectMask); @@ -1425,20 +898,11 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImageMemoryBarrier& value) void EncodeStruct(ParameterEncoder* encoder, const VkMemoryBarrier& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.srcAccessMask); encoder->EncodeFlagsValue(value.dstAccessMask); } -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCacheHeaderVersionOne& value) -{ - encoder->EncodeUInt32Value(value.headerSize); - encoder->EncodeEnumValue(value.headerVersion); - encoder->EncodeUInt32Value(value.vendorID); - encoder->EncodeUInt32Value(value.deviceID); - encoder->EncodeUInt8Array(value.pipelineCacheUUID, VK_UUID_SIZE); -} - void EncodeStruct(ParameterEncoder* encoder, const VkAllocationCallbacks& value) { encoder->EncodeVoidPtr(value.pUserData); @@ -1452,7 +916,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkAllocationCallbacks& value) void EncodeStruct(ParameterEncoder* encoder, const VkApplicationInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeString(value.pApplicationName); encoder->EncodeUInt32Value(value.applicationVersion); encoder->EncodeString(value.pEngineName); @@ -1761,7 +1225,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkSubmitInfo& value) void EncodeStruct(ParameterEncoder* encoder, const VkMappedMemoryRange& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.memory); encoder->EncodeUInt64Value(value.offset); encoder->EncodeUInt64Value(value.size); @@ -1875,13 +1339,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreCreateInfo& value) encoder->EncodeFlagsValue(value.flags); } -void EncodeStruct(ParameterEncoder* encoder, const VkEventCreateInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); -} - void EncodeStruct(ParameterEncoder* encoder, const VkQueryPoolCreateInfo& value) { encoder->EncodeEnumValue(value.sType); @@ -1904,17 +1361,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkBufferCreateInfo& value) encoder->EncodeUInt32Array(value.pQueueFamilyIndices, value.queueFamilyIndexCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkBufferViewCreateInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeVulkanHandleValue(value.buffer); - encoder->EncodeEnumValue(value.format); - encoder->EncodeUInt64Value(value.offset); - encoder->EncodeUInt64Value(value.range); -} - void EncodeStruct(ParameterEncoder* encoder, const VkImageCreateInfo& value) { encoder->EncodeEnumValue(value.sType); @@ -1963,32 +1409,137 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImageViewCreateInfo& value) EncodeStruct(encoder, value.subresourceRange); } -void EncodeStruct(ParameterEncoder* encoder, const VkShaderModuleCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkCommandPoolCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); - encoder->EncodeSizeTValue(value.codeSize); - encoder->EncodeUInt32Array(value.pCode, value.codeSize / 4); + encoder->EncodeUInt32Value(value.queueFamilyIndex); } -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCacheCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferAllocateInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeSizeTValue(value.initialDataSize); - encoder->EncodeVoidArray(value.pInitialData, value.initialDataSize); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.commandPool); + encoder->EncodeEnumValue(value.level); + encoder->EncodeUInt32Value(value.commandBufferCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkSpecializationMapEntry& value) +void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferInheritanceInfo& value) { - encoder->EncodeUInt32Value(value.constantID); - encoder->EncodeUInt32Value(value.offset); - encoder->EncodeSizeTValue(value.size); + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.renderPass); + encoder->EncodeUInt32Value(value.subpass); + encoder->EncodeVulkanHandleValue(value.framebuffer); + encoder->EncodeUInt32Value(value.occlusionQueryEnable); + encoder->EncodeFlagsValue(value.queryFlags); + encoder->EncodeFlagsValue(value.pipelineStatistics); } -void EncodeStruct(ParameterEncoder* encoder, const VkSpecializationInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferBeginInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + EncodeStructPtr(encoder, value.pInheritanceInfo); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkBufferCopy& value) +{ + encoder->EncodeUInt64Value(value.srcOffset); + encoder->EncodeUInt64Value(value.dstOffset); + encoder->EncodeUInt64Value(value.size); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkImageSubresourceLayers& value) +{ + encoder->EncodeFlagsValue(value.aspectMask); + encoder->EncodeUInt32Value(value.mipLevel); + encoder->EncodeUInt32Value(value.baseArrayLayer); + encoder->EncodeUInt32Value(value.layerCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkBufferImageCopy& value) +{ + encoder->EncodeUInt64Value(value.bufferOffset); + encoder->EncodeUInt32Value(value.bufferRowLength); + encoder->EncodeUInt32Value(value.bufferImageHeight); + EncodeStruct(encoder, value.imageSubresource); + EncodeStruct(encoder, value.imageOffset); + EncodeStruct(encoder, value.imageExtent); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkImageCopy& value) +{ + EncodeStruct(encoder, value.srcSubresource); + EncodeStruct(encoder, value.srcOffset); + EncodeStruct(encoder, value.dstSubresource); + EncodeStruct(encoder, value.dstOffset); + EncodeStruct(encoder, value.extent); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDispatchIndirectCommand& value) +{ + encoder->EncodeUInt32Value(value.x); + encoder->EncodeUInt32Value(value.y); + encoder->EncodeUInt32Value(value.z); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCacheHeaderVersionOne& value) +{ + encoder->EncodeUInt32Value(value.headerSize); + encoder->EncodeEnumValue(value.headerVersion); + encoder->EncodeUInt32Value(value.vendorID); + encoder->EncodeUInt32Value(value.deviceID); + encoder->EncodeUInt8Array(value.pipelineCacheUUID, VK_UUID_SIZE); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkEventCreateInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkBufferViewCreateInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeVulkanHandleValue(value.buffer); + encoder->EncodeEnumValue(value.format); + encoder->EncodeUInt64Value(value.offset); + encoder->EncodeUInt64Value(value.range); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkShaderModuleCreateInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeSizeTValue(value.codeSize); + encoder->EncodeUInt32Array(value.pCode, value.codeSize / 4); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCacheCreateInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeSizeTValue(value.initialDataSize); + encoder->EncodeVoidArray(value.pInitialData, value.initialDataSize); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkSpecializationMapEntry& value) +{ + encoder->EncodeUInt32Value(value.constantID); + encoder->EncodeUInt32Value(value.offset); + encoder->EncodeSizeTValue(value.size); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkSpecializationInfo& value) { encoder->EncodeUInt32Value(value.mapEntryCount); EncodeStructArray(encoder, value.pMapEntries, value.mapEntryCount); @@ -2018,6 +1569,126 @@ void EncodeStruct(ParameterEncoder* encoder, const VkComputePipelineCreateInfo& encoder->EncodeInt32Value(value.basePipelineIndex); } +void EncodeStruct(ParameterEncoder* encoder, const VkPushConstantRange& value) +{ + encoder->EncodeFlagsValue(value.stageFlags); + encoder->EncodeUInt32Value(value.offset); + encoder->EncodeUInt32Value(value.size); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineLayoutCreateInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeUInt32Value(value.setLayoutCount); + encoder->EncodeVulkanHandleArray(value.pSetLayouts, value.setLayoutCount); + encoder->EncodeUInt32Value(value.pushConstantRangeCount); + EncodeStructArray(encoder, value.pPushConstantRanges, value.pushConstantRangeCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkSamplerCreateInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeEnumValue(value.magFilter); + encoder->EncodeEnumValue(value.minFilter); + encoder->EncodeEnumValue(value.mipmapMode); + encoder->EncodeEnumValue(value.addressModeU); + encoder->EncodeEnumValue(value.addressModeV); + encoder->EncodeEnumValue(value.addressModeW); + encoder->EncodeFloatValue(value.mipLodBias); + encoder->EncodeUInt32Value(value.anisotropyEnable); + encoder->EncodeFloatValue(value.maxAnisotropy); + encoder->EncodeUInt32Value(value.compareEnable); + encoder->EncodeEnumValue(value.compareOp); + encoder->EncodeFloatValue(value.minLod); + encoder->EncodeFloatValue(value.maxLod); + encoder->EncodeEnumValue(value.borderColor); + encoder->EncodeUInt32Value(value.unnormalizedCoordinates); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkCopyDescriptorSet& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.srcSet); + encoder->EncodeUInt32Value(value.srcBinding); + encoder->EncodeUInt32Value(value.srcArrayElement); + encoder->EncodeVulkanHandleValue(value.dstSet); + encoder->EncodeUInt32Value(value.dstBinding); + encoder->EncodeUInt32Value(value.dstArrayElement); + encoder->EncodeUInt32Value(value.descriptorCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorBufferInfo& value) +{ + encoder->EncodeVulkanHandleValue(value.buffer); + encoder->EncodeUInt64Value(value.offset); + encoder->EncodeUInt64Value(value.range); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorPoolSize& value) +{ + encoder->EncodeEnumValue(value.type); + encoder->EncodeUInt32Value(value.descriptorCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorPoolCreateInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeUInt32Value(value.maxSets); + encoder->EncodeUInt32Value(value.poolSizeCount); + EncodeStructArray(encoder, value.pPoolSizes, value.poolSizeCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetAllocateInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.descriptorPool); + encoder->EncodeUInt32Value(value.descriptorSetCount); + encoder->EncodeVulkanHandleArray(value.pSetLayouts, value.descriptorSetCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetLayoutBinding& value) +{ + encoder->EncodeUInt32Value(value.binding); + encoder->EncodeEnumValue(value.descriptorType); + encoder->EncodeUInt32Value(value.descriptorCount); + encoder->EncodeFlagsValue(value.stageFlags); + encoder->EncodeVulkanHandleArray(value.pImmutableSamplers, value.descriptorCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetLayoutCreateInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeUInt32Value(value.bindingCount); + EncodeStructArray(encoder, value.pBindings, value.bindingCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDrawIndexedIndirectCommand& value) +{ + encoder->EncodeUInt32Value(value.indexCount); + encoder->EncodeUInt32Value(value.instanceCount); + encoder->EncodeUInt32Value(value.firstIndex); + encoder->EncodeInt32Value(value.vertexOffset); + encoder->EncodeUInt32Value(value.firstInstance); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDrawIndirectCommand& value) +{ + encoder->EncodeUInt32Value(value.vertexCount); + encoder->EncodeUInt32Value(value.instanceCount); + encoder->EncodeUInt32Value(value.firstVertex); + encoder->EncodeUInt32Value(value.firstInstance); +} + void EncodeStruct(ParameterEncoder* encoder, const VkVertexInputBindingDescription& value) { encoder->EncodeUInt32Value(value.binding); @@ -2047,7 +1718,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineVertexInputStateCre void EncodeStruct(ParameterEncoder* encoder, const VkPipelineInputAssemblyStateCreateInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeEnumValue(value.topology); encoder->EncodeUInt32Value(value.primitiveRestartEnable); @@ -2126,7 +1797,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkStencilOpState& value) void EncodeStruct(ParameterEncoder* encoder, const VkPipelineDepthStencilStateCreateInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeUInt32Value(value.depthTestEnable); encoder->EncodeUInt32Value(value.depthWriteEnable); @@ -2166,7 +1837,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineColorBlendStateCrea void EncodeStruct(ParameterEncoder* encoder, const VkPipelineDynamicStateCreateInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeUInt32Value(value.dynamicStateCount); encoder->EncodeEnumArray(value.pDynamicStates, value.dynamicStateCount); @@ -2176,126 +1847,23 @@ void EncodeStruct(ParameterEncoder* encoder, const VkGraphicsPipelineCreateInfo& { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeUInt32Value(value.stageCount); - EncodeStructArray(encoder, value.pStages, value.stageCount); - EncodeStructPtr(encoder, value.pVertexInputState); - EncodeStructPtr(encoder, value.pInputAssemblyState); - EncodeStructPtr(encoder, value.pTessellationState); - EncodeStructPtr(encoder, value.pViewportState); - EncodeStructPtr(encoder, value.pRasterizationState); - EncodeStructPtr(encoder, value.pMultisampleState); - EncodeStructPtr(encoder, value.pDepthStencilState); - EncodeStructPtr(encoder, value.pColorBlendState); - EncodeStructPtr(encoder, value.pDynamicState); - encoder->EncodeVulkanHandleValue(value.layout); - encoder->EncodeVulkanHandleValue(value.renderPass); - encoder->EncodeUInt32Value(value.subpass); - encoder->EncodeVulkanHandleValue(value.basePipelineHandle); - encoder->EncodeInt32Value(value.basePipelineIndex); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkPushConstantRange& value) -{ - encoder->EncodeFlagsValue(value.stageFlags); - encoder->EncodeUInt32Value(value.offset); - encoder->EncodeUInt32Value(value.size); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineLayoutCreateInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeUInt32Value(value.setLayoutCount); - encoder->EncodeVulkanHandleArray(value.pSetLayouts, value.setLayoutCount); - encoder->EncodeUInt32Value(value.pushConstantRangeCount); - EncodeStructArray(encoder, value.pPushConstantRanges, value.pushConstantRangeCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkSamplerCreateInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeEnumValue(value.magFilter); - encoder->EncodeEnumValue(value.minFilter); - encoder->EncodeEnumValue(value.mipmapMode); - encoder->EncodeEnumValue(value.addressModeU); - encoder->EncodeEnumValue(value.addressModeV); - encoder->EncodeEnumValue(value.addressModeW); - encoder->EncodeFloatValue(value.mipLodBias); - encoder->EncodeUInt32Value(value.anisotropyEnable); - encoder->EncodeFloatValue(value.maxAnisotropy); - encoder->EncodeUInt32Value(value.compareEnable); - encoder->EncodeEnumValue(value.compareOp); - encoder->EncodeFloatValue(value.minLod); - encoder->EncodeFloatValue(value.maxLod); - encoder->EncodeEnumValue(value.borderColor); - encoder->EncodeUInt32Value(value.unnormalizedCoordinates); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkCopyDescriptorSet& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeVulkanHandleValue(value.srcSet); - encoder->EncodeUInt32Value(value.srcBinding); - encoder->EncodeUInt32Value(value.srcArrayElement); - encoder->EncodeVulkanHandleValue(value.dstSet); - encoder->EncodeUInt32Value(value.dstBinding); - encoder->EncodeUInt32Value(value.dstArrayElement); - encoder->EncodeUInt32Value(value.descriptorCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorBufferInfo& value) -{ - encoder->EncodeVulkanHandleValue(value.buffer); - encoder->EncodeUInt64Value(value.offset); - encoder->EncodeUInt64Value(value.range); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorPoolSize& value) -{ - encoder->EncodeEnumValue(value.type); - encoder->EncodeUInt32Value(value.descriptorCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorPoolCreateInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeUInt32Value(value.maxSets); - encoder->EncodeUInt32Value(value.poolSizeCount); - EncodeStructArray(encoder, value.pPoolSizes, value.poolSizeCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetAllocateInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeVulkanHandleValue(value.descriptorPool); - encoder->EncodeUInt32Value(value.descriptorSetCount); - encoder->EncodeVulkanHandleArray(value.pSetLayouts, value.descriptorSetCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetLayoutBinding& value) -{ - encoder->EncodeUInt32Value(value.binding); - encoder->EncodeEnumValue(value.descriptorType); - encoder->EncodeUInt32Value(value.descriptorCount); - encoder->EncodeFlagsValue(value.stageFlags); - encoder->EncodeVulkanHandleArray(value.pImmutableSamplers, value.descriptorCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetLayoutCreateInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeUInt32Value(value.bindingCount); - EncodeStructArray(encoder, value.pBindings, value.bindingCount); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeUInt32Value(value.stageCount); + EncodeStructArray(encoder, value.pStages, value.stageCount); + EncodeStructPtr(encoder, value.pVertexInputState); + EncodeStructPtr(encoder, value.pInputAssemblyState); + EncodeStructPtr(encoder, value.pTessellationState); + EncodeStructPtr(encoder, value.pViewportState); + EncodeStructPtr(encoder, value.pRasterizationState); + EncodeStructPtr(encoder, value.pMultisampleState); + EncodeStructPtr(encoder, value.pDepthStencilState); + EncodeStructPtr(encoder, value.pColorBlendState); + EncodeStructPtr(encoder, value.pDynamicState); + encoder->EncodeVulkanHandleValue(value.layout); + encoder->EncodeVulkanHandleValue(value.renderPass); + encoder->EncodeUInt32Value(value.subpass); + encoder->EncodeVulkanHandleValue(value.basePipelineHandle); + encoder->EncodeInt32Value(value.basePipelineIndex); } void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentDescription& value) @@ -2368,68 +1936,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassCreateInfo& value EncodeStructArray(encoder, value.pDependencies, value.dependencyCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkCommandPoolCreateInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeUInt32Value(value.queueFamilyIndex); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferAllocateInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeVulkanHandleValue(value.commandPool); - encoder->EncodeEnumValue(value.level); - encoder->EncodeUInt32Value(value.commandBufferCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferInheritanceInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeVulkanHandleValue(value.renderPass); - encoder->EncodeUInt32Value(value.subpass); - encoder->EncodeVulkanHandleValue(value.framebuffer); - encoder->EncodeUInt32Value(value.occlusionQueryEnable); - encoder->EncodeFlagsValue(value.queryFlags); - encoder->EncodeFlagsValue(value.pipelineStatistics); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferBeginInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - EncodeStructPtr(encoder, value.pInheritanceInfo); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkBufferCopy& value) -{ - encoder->EncodeUInt64Value(value.srcOffset); - encoder->EncodeUInt64Value(value.dstOffset); - encoder->EncodeUInt64Value(value.size); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkImageSubresourceLayers& value) -{ - encoder->EncodeFlagsValue(value.aspectMask); - encoder->EncodeUInt32Value(value.mipLevel); - encoder->EncodeUInt32Value(value.baseArrayLayer); - encoder->EncodeUInt32Value(value.layerCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkBufferImageCopy& value) -{ - encoder->EncodeUInt64Value(value.bufferOffset); - encoder->EncodeUInt32Value(value.bufferRowLength); - encoder->EncodeUInt32Value(value.bufferImageHeight); - EncodeStruct(encoder, value.imageSubresource); - EncodeStruct(encoder, value.imageOffset); - EncodeStruct(encoder, value.imageExtent); -} - void EncodeStruct(ParameterEncoder* encoder, const VkClearDepthStencilValue& value) { encoder->EncodeFloatValue(value.depth); @@ -2458,15 +1964,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImageBlit& value) EncodeStructArray(encoder, value.dstOffsets, 2); } -void EncodeStruct(ParameterEncoder* encoder, const VkImageCopy& value) -{ - EncodeStruct(encoder, value.srcSubresource); - EncodeStruct(encoder, value.srcOffset); - EncodeStruct(encoder, value.dstSubresource); - EncodeStruct(encoder, value.dstOffset); - EncodeStruct(encoder, value.extent); -} - void EncodeStruct(ParameterEncoder* encoder, const VkImageResolve& value) { EncodeStruct(encoder, value.srcSubresource); @@ -2487,16 +1984,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassBeginInfo& value) EncodeStructArray(encoder, value.pClearValues, value.clearValueCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSubgroupProperties& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.subgroupSize); - encoder->EncodeFlagsValue(value.supportedStages); - encoder->EncodeFlagsValue(value.supportedOperations); - encoder->EncodeUInt32Value(value.quadOperationsInAllStages); -} - void EncodeStruct(ParameterEncoder* encoder, const VkBindBufferMemoryInfo& value) { encoder->EncodeEnumValue(value.sType); @@ -2515,16 +2002,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkBindImageMemoryInfo& value) encoder->EncodeUInt64Value(value.memoryOffset); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevice16BitStorageFeatures& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.storageBuffer16BitAccess); - encoder->EncodeUInt32Value(value.uniformAndStorageBuffer16BitAccess); - encoder->EncodeUInt32Value(value.storagePushConstant16); - encoder->EncodeUInt32Value(value.storageInputOutput16); -} - void EncodeStruct(ParameterEncoder* encoder, const VkMemoryDedicatedRequirements& value) { encoder->EncodeEnumValue(value.sType); @@ -2549,15 +2026,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkMemoryAllocateFlagsInfo& va encoder->EncodeUInt32Value(value.deviceMask); } -void EncodeStruct(ParameterEncoder* encoder, const VkDeviceGroupRenderPassBeginInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.deviceMask); - encoder->EncodeUInt32Value(value.deviceRenderAreaCount); - EncodeStructArray(encoder, value.pDeviceRenderAreas, value.deviceRenderAreaCount); -} - void EncodeStruct(ParameterEncoder* encoder, const VkDeviceGroupCommandBufferBeginInfo& value) { encoder->EncodeEnumValue(value.sType); @@ -2606,7 +2074,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkBindImageMemoryDeviceGroupI void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceGroupProperties& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.physicalDeviceCount); encoder->EncodeVulkanHandleArray(value.physicalDevices, value.physicalDeviceCount); encoder->EncodeUInt32Value(value.subsetAllocation); @@ -2623,7 +2091,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDeviceGroupDeviceCreateInfo void EncodeStruct(ParameterEncoder* encoder, const VkBufferMemoryRequirementsInfo2& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.buffer); } @@ -2637,7 +2105,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImageMemoryRequirementsInfo void EncodeStruct(ParameterEncoder* encoder, const VkImageSparseMemoryRequirementsInfo2& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.image); } @@ -2651,7 +2119,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkMemoryRequirements2& value) void EncodeStruct(ParameterEncoder* encoder, const VkSparseImageMemoryRequirements2& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStruct(encoder, value.memoryRequirements); } @@ -2711,14 +2179,14 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMemoryPropert void EncodeStruct(ParameterEncoder* encoder, const VkSparseImageFormatProperties2& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStruct(encoder, value.properties); } void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSparseImageFormatInfo2& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.format); encoder->EncodeEnumValue(value.type); encoder->EncodeEnumValue(value.samples); @@ -2726,156 +2194,198 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSparseImageFo encoder->EncodeEnumValue(value.tiling); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePointClippingProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkImageViewUsageCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.pointClippingBehavior); + encoder->EncodeFlagsValue(value.usage); } -void EncodeStruct(ParameterEncoder* encoder, const VkInputAttachmentAspectReference& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceProtectedMemoryFeatures& value) { - encoder->EncodeUInt32Value(value.subpass); - encoder->EncodeUInt32Value(value.inputAttachmentIndex); - encoder->EncodeFlagsValue(value.aspectMask); + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.protectedMemory); } -void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassInputAttachmentAspectCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceProtectedMemoryProperties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.aspectReferenceCount); - EncodeStructArray(encoder, value.pAspectReferences, value.aspectReferenceCount); + encoder->EncodeUInt32Value(value.protectedNoFault); } -void EncodeStruct(ParameterEncoder* encoder, const VkImageViewUsageCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDeviceQueueInfo2& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeUInt32Value(value.queueFamilyIndex); + encoder->EncodeUInt32Value(value.queueIndex); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkProtectedSubmitInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.usage); + encoder->EncodeUInt32Value(value.protectedSubmit); } -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineTessellationDomainOriginStateCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkBindImagePlaneMemoryInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.domainOrigin); + encoder->EncodeEnumValue(value.planeAspect); } -void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassMultiviewCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkImagePlaneMemoryRequirementsInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.subpassCount); - encoder->EncodeUInt32Array(value.pViewMasks, value.subpassCount); - encoder->EncodeUInt32Value(value.dependencyCount); - encoder->EncodeInt32Array(value.pViewOffsets, value.dependencyCount); - encoder->EncodeUInt32Value(value.correlationMaskCount); - encoder->EncodeUInt32Array(value.pCorrelationMasks, value.correlationMaskCount); + encoder->EncodeEnumValue(value.planeAspect); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMultiviewFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkExternalMemoryProperties& value) +{ + encoder->EncodeFlagsValue(value.externalMemoryFeatures); + encoder->EncodeFlagsValue(value.exportFromImportedHandleTypes); + encoder->EncodeFlagsValue(value.compatibleHandleTypes); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExternalImageFormatInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.multiview); - encoder->EncodeUInt32Value(value.multiviewGeometryShader); - encoder->EncodeUInt32Value(value.multiviewTessellationShader); + encoder->EncodeEnumValue(value.handleType); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMultiviewProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkExternalImageFormatProperties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.maxMultiviewViewCount); - encoder->EncodeUInt32Value(value.maxMultiviewInstanceIndex); + EncodeStruct(encoder, value.externalMemoryProperties); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVariablePointersFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExternalBufferInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.variablePointersStorageBuffer); - encoder->EncodeUInt32Value(value.variablePointers); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeFlagsValue(value.usage); + encoder->EncodeEnumValue(value.handleType); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceProtectedMemoryFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkExternalBufferProperties& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + EncodeStruct(encoder, value.externalMemoryProperties); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceIDProperties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.protectedMemory); + encoder->EncodeUInt8Array(value.deviceUUID, VK_UUID_SIZE); + encoder->EncodeUInt8Array(value.driverUUID, VK_UUID_SIZE); + encoder->EncodeUInt8Array(value.deviceLUID, VK_LUID_SIZE); + encoder->EncodeUInt32Value(value.deviceNodeMask); + encoder->EncodeUInt32Value(value.deviceLUIDValid); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceProtectedMemoryProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkExternalMemoryImageCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.protectedNoFault); + encoder->EncodeFlagsValue(value.handleTypes); } -void EncodeStruct(ParameterEncoder* encoder, const VkDeviceQueueInfo2& value) +void EncodeStruct(ParameterEncoder* encoder, const VkExternalMemoryBufferCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeUInt32Value(value.queueFamilyIndex); - encoder->EncodeUInt32Value(value.queueIndex); + encoder->EncodeFlagsValue(value.handleTypes); } -void EncodeStruct(ParameterEncoder* encoder, const VkProtectedSubmitInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkExportMemoryAllocateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.protectedSubmit); + encoder->EncodeFlagsValue(value.handleTypes); } -void EncodeStruct(ParameterEncoder* encoder, const VkSamplerYcbcrConversionCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExternalFenceInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeEnumValue(value.handleType); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkExternalFenceProperties& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlagsValue(value.exportFromImportedHandleTypes); + encoder->EncodeFlagsValue(value.compatibleHandleTypes); + encoder->EncodeFlagsValue(value.externalFenceFeatures); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkExportFenceCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.format); - encoder->EncodeEnumValue(value.ycbcrModel); - encoder->EncodeEnumValue(value.ycbcrRange); - EncodeStruct(encoder, value.components); - encoder->EncodeEnumValue(value.xChromaOffset); - encoder->EncodeEnumValue(value.yChromaOffset); - encoder->EncodeEnumValue(value.chromaFilter); - encoder->EncodeUInt32Value(value.forceExplicitReconstruction); + encoder->EncodeFlagsValue(value.handleTypes); } -void EncodeStruct(ParameterEncoder* encoder, const VkSamplerYcbcrConversionInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkExportSemaphoreCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeVulkanHandleValue(value.conversion); + encoder->EncodeFlagsValue(value.handleTypes); } -void EncodeStruct(ParameterEncoder* encoder, const VkBindImagePlaneMemoryInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExternalSemaphoreInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeEnumValue(value.handleType); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkExternalSemaphoreProperties& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.planeAspect); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlagsValue(value.exportFromImportedHandleTypes); + encoder->EncodeFlagsValue(value.compatibleHandleTypes); + encoder->EncodeFlagsValue(value.externalSemaphoreFeatures); } -void EncodeStruct(ParameterEncoder* encoder, const VkImagePlaneMemoryRequirementsInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSubgroupProperties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.planeAspect); + encoder->EncodeUInt32Value(value.subgroupSize); + encoder->EncodeFlagsValue(value.supportedStages); + encoder->EncodeFlagsValue(value.supportedOperations); + encoder->EncodeUInt32Value(value.quadOperationsInAllStages); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSamplerYcbcrConversionFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevice16BitStorageFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.samplerYcbcrConversion); + encoder->EncodeUInt32Value(value.storageBuffer16BitAccess); + encoder->EncodeUInt32Value(value.uniformAndStorageBuffer16BitAccess); + encoder->EncodeUInt32Value(value.storagePushConstant16); + encoder->EncodeUInt32Value(value.storageInputOutput16); } -void EncodeStruct(ParameterEncoder* encoder, const VkSamplerYcbcrConversionImageFormatProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVariablePointersFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.combinedImageSamplerDescriptorCount); + encoder->EncodeUInt32Value(value.variablePointersStorageBuffer); + encoder->EncodeUInt32Value(value.variablePointers); } void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorUpdateTemplateEntry& value) @@ -2891,7 +2401,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorUpdateTemplateEnt void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorUpdateTemplateCreateInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeUInt32Value(value.descriptorUpdateEntryCount); EncodeStructArray(encoder, value.pDescriptorUpdateEntries, value.descriptorUpdateEntryCount); @@ -2902,134 +2412,121 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorUpdateTemplateCre encoder->EncodeUInt32Value(value.set); } -void EncodeStruct(ParameterEncoder* encoder, const VkExternalMemoryProperties& value) -{ - encoder->EncodeFlagsValue(value.externalMemoryFeatures); - encoder->EncodeFlagsValue(value.exportFromImportedHandleTypes); - encoder->EncodeFlagsValue(value.compatibleHandleTypes); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExternalImageFormatInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.handleType); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkExternalImageFormatProperties& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - EncodeStruct(encoder, value.externalMemoryProperties); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExternalBufferInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance3Properties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeFlagsValue(value.usage); - encoder->EncodeEnumValue(value.handleType); + encoder->EncodeUInt32Value(value.maxPerSetDescriptors); + encoder->EncodeUInt64Value(value.maxMemoryAllocationSize); } -void EncodeStruct(ParameterEncoder* encoder, const VkExternalBufferProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetLayoutSupport& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - EncodeStruct(encoder, value.externalMemoryProperties); + encoder->EncodeUInt32Value(value.supported); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceIDProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkSamplerYcbcrConversionCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt8Array(value.deviceUUID, VK_UUID_SIZE); - encoder->EncodeUInt8Array(value.driverUUID, VK_UUID_SIZE); - encoder->EncodeUInt8Array(value.deviceLUID, VK_LUID_SIZE); - encoder->EncodeUInt32Value(value.deviceNodeMask); - encoder->EncodeUInt32Value(value.deviceLUIDValid); + encoder->EncodeEnumValue(value.format); + encoder->EncodeEnumValue(value.ycbcrModel); + encoder->EncodeEnumValue(value.ycbcrRange); + EncodeStruct(encoder, value.components); + encoder->EncodeEnumValue(value.xChromaOffset); + encoder->EncodeEnumValue(value.yChromaOffset); + encoder->EncodeEnumValue(value.chromaFilter); + encoder->EncodeUInt32Value(value.forceExplicitReconstruction); } -void EncodeStruct(ParameterEncoder* encoder, const VkExternalMemoryImageCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkSamplerYcbcrConversionInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.handleTypes); + encoder->EncodeVulkanHandleValue(value.conversion); } -void EncodeStruct(ParameterEncoder* encoder, const VkExternalMemoryBufferCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSamplerYcbcrConversionFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.handleTypes); + encoder->EncodeUInt32Value(value.samplerYcbcrConversion); } -void EncodeStruct(ParameterEncoder* encoder, const VkExportMemoryAllocateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkSamplerYcbcrConversionImageFormatProperties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.handleTypes); + encoder->EncodeUInt32Value(value.combinedImageSamplerDescriptorCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExternalFenceInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDeviceGroupRenderPassBeginInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.handleType); + encoder->EncodeUInt32Value(value.deviceMask); + encoder->EncodeUInt32Value(value.deviceRenderAreaCount); + EncodeStructArray(encoder, value.pDeviceRenderAreas, value.deviceRenderAreaCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkExternalFenceProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePointClippingProperties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.exportFromImportedHandleTypes); - encoder->EncodeFlagsValue(value.compatibleHandleTypes); - encoder->EncodeFlagsValue(value.externalFenceFeatures); + encoder->EncodeEnumValue(value.pointClippingBehavior); } -void EncodeStruct(ParameterEncoder* encoder, const VkExportFenceCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkInputAttachmentAspectReference& value) { - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.handleTypes); + encoder->EncodeUInt32Value(value.subpass); + encoder->EncodeUInt32Value(value.inputAttachmentIndex); + encoder->EncodeFlagsValue(value.aspectMask); } -void EncodeStruct(ParameterEncoder* encoder, const VkExportSemaphoreCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassInputAttachmentAspectCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.handleTypes); + encoder->EncodeUInt32Value(value.aspectReferenceCount); + EncodeStructArray(encoder, value.pAspectReferences, value.aspectReferenceCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExternalSemaphoreInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineTessellationDomainOriginStateCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.handleType); + encoder->EncodeEnumValue(value.domainOrigin); } -void EncodeStruct(ParameterEncoder* encoder, const VkExternalSemaphoreProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassMultiviewCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.exportFromImportedHandleTypes); - encoder->EncodeFlagsValue(value.compatibleHandleTypes); - encoder->EncodeFlagsValue(value.externalSemaphoreFeatures); + encoder->EncodeUInt32Value(value.subpassCount); + encoder->EncodeUInt32Array(value.pViewMasks, value.subpassCount); + encoder->EncodeUInt32Value(value.dependencyCount); + encoder->EncodeInt32Array(value.pViewOffsets, value.dependencyCount); + encoder->EncodeUInt32Value(value.correlationMaskCount); + encoder->EncodeUInt32Array(value.pCorrelationMasks, value.correlationMaskCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance3Properties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMultiviewFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.maxPerSetDescriptors); - encoder->EncodeUInt64Value(value.maxMemoryAllocationSize); + encoder->EncodeUInt32Value(value.multiview); + encoder->EncodeUInt32Value(value.multiviewGeometryShader); + encoder->EncodeUInt32Value(value.multiviewTessellationShader); } -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetLayoutSupport& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMultiviewProperties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.supported); + encoder->EncodeUInt32Value(value.maxMultiviewViewCount); + encoder->EncodeUInt32Value(value.maxMultiviewInstanceIndex); } void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderDrawParametersFeatures& value) @@ -3205,106 +2702,126 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImageFormatListCreateInfo& encoder->EncodeEnumArray(value.pViewFormats, value.viewFormatCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentDescription2& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDriverProperties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeEnumValue(value.format); - encoder->EncodeEnumValue(value.samples); - encoder->EncodeEnumValue(value.loadOp); - encoder->EncodeEnumValue(value.storeOp); - encoder->EncodeEnumValue(value.stencilLoadOp); - encoder->EncodeEnumValue(value.stencilStoreOp); - encoder->EncodeEnumValue(value.initialLayout); - encoder->EncodeEnumValue(value.finalLayout); + encoder->EncodeEnumValue(value.driverID); + encoder->EncodeString(value.driverName); + encoder->EncodeString(value.driverInfo); + EncodeStruct(encoder, value.conformanceVersion); } -void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentReference2& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkanMemoryModelFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.attachment); - encoder->EncodeEnumValue(value.layout); - encoder->EncodeFlagsValue(value.aspectMask); + encoder->EncodeUInt32Value(value.vulkanMemoryModel); + encoder->EncodeUInt32Value(value.vulkanMemoryModelDeviceScope); + encoder->EncodeUInt32Value(value.vulkanMemoryModelAvailabilityVisibilityChains); } -void EncodeStruct(ParameterEncoder* encoder, const VkSubpassDescription2& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceHostQueryResetFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeEnumValue(value.pipelineBindPoint); - encoder->EncodeUInt32Value(value.viewMask); - encoder->EncodeUInt32Value(value.inputAttachmentCount); - EncodeStructArray(encoder, value.pInputAttachments, value.inputAttachmentCount); - encoder->EncodeUInt32Value(value.colorAttachmentCount); - EncodeStructArray(encoder, value.pColorAttachments, value.colorAttachmentCount); - EncodeStructArray(encoder, value.pResolveAttachments, value.colorAttachmentCount); - EncodeStructPtr(encoder, value.pDepthStencilAttachment); - encoder->EncodeUInt32Value(value.preserveAttachmentCount); - encoder->EncodeUInt32Array(value.pPreserveAttachments, value.preserveAttachmentCount); + encoder->EncodeUInt32Value(value.hostQueryReset); } -void EncodeStruct(ParameterEncoder* encoder, const VkSubpassDependency2& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTimelineSemaphoreFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.srcSubpass); - encoder->EncodeUInt32Value(value.dstSubpass); - encoder->EncodeFlagsValue(value.srcStageMask); - encoder->EncodeFlagsValue(value.dstStageMask); - encoder->EncodeFlagsValue(value.srcAccessMask); - encoder->EncodeFlagsValue(value.dstAccessMask); - encoder->EncodeFlagsValue(value.dependencyFlags); - encoder->EncodeInt32Value(value.viewOffset); + encoder->EncodeUInt32Value(value.timelineSemaphore); } -void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassCreateInfo2& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTimelineSemaphoreProperties& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt64Value(value.maxTimelineSemaphoreValueDifference); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreTypeCreateInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeEnumValue(value.semaphoreType); + encoder->EncodeUInt64Value(value.initialValue); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkTimelineSemaphoreSubmitInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.waitSemaphoreValueCount); + encoder->EncodeUInt64Array(value.pWaitSemaphoreValues, value.waitSemaphoreValueCount); + encoder->EncodeUInt32Value(value.signalSemaphoreValueCount); + encoder->EncodeUInt64Array(value.pSignalSemaphoreValues, value.signalSemaphoreValueCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreWaitInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); - encoder->EncodeUInt32Value(value.attachmentCount); - EncodeStructArray(encoder, value.pAttachments, value.attachmentCount); - encoder->EncodeUInt32Value(value.subpassCount); - EncodeStructArray(encoder, value.pSubpasses, value.subpassCount); - encoder->EncodeUInt32Value(value.dependencyCount); - EncodeStructArray(encoder, value.pDependencies, value.dependencyCount); - encoder->EncodeUInt32Value(value.correlatedViewMaskCount); - encoder->EncodeUInt32Array(value.pCorrelatedViewMasks, value.correlatedViewMaskCount); + encoder->EncodeUInt32Value(value.semaphoreCount); + encoder->EncodeVulkanHandleArray(value.pSemaphores, value.semaphoreCount); + encoder->EncodeUInt64Array(value.pValues, value.semaphoreCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkSubpassBeginInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreSignalInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.semaphore); + encoder->EncodeUInt64Value(value.value); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceBufferDeviceAddressFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.contents); + encoder->EncodeUInt32Value(value.bufferDeviceAddress); + encoder->EncodeUInt32Value(value.bufferDeviceAddressCaptureReplay); + encoder->EncodeUInt32Value(value.bufferDeviceAddressMultiDevice); } -void EncodeStruct(ParameterEncoder* encoder, const VkSubpassEndInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkBufferDeviceAddressInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.buffer); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkBufferOpaqueCaptureAddressCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt64Value(value.opaqueCaptureAddress); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevice8BitStorageFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkMemoryOpaqueCaptureAddressAllocateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.storageBuffer8BitAccess); - encoder->EncodeUInt32Value(value.uniformAndStorageBuffer8BitAccess); - encoder->EncodeUInt32Value(value.storagePushConstant8); + encoder->EncodeUInt64Value(value.opaqueCaptureAddress); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDriverProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDeviceMemoryOpaqueCaptureAddressInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.memory); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevice8BitStorageFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.driverID); - encoder->EncodeString(value.driverName); - encoder->EncodeString(value.driverInfo); - EncodeStruct(encoder, value.conformanceVersion); + encoder->EncodeUInt32Value(value.storageBuffer8BitAccess); + encoder->EncodeUInt32Value(value.uniformAndStorageBuffer8BitAccess); + encoder->EncodeUInt32Value(value.storagePushConstant8); } void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderAtomicInt64Features& value) @@ -3424,25 +2941,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetVariableDescri encoder->EncodeUInt32Value(value.maxVariableDescriptorCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkSubpassDescriptionDepthStencilResolve& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.depthResolveMode); - encoder->EncodeEnumValue(value.stencilResolveMode); - EncodeStructPtr(encoder, value.pDepthStencilResolveAttachment); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDepthStencilResolveProperties& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.supportedDepthResolveModes); - encoder->EncodeFlagsValue(value.supportedStencilResolveModes); - encoder->EncodeUInt32Value(value.independentResolveNone); - encoder->EncodeUInt32Value(value.independentResolve); -} - void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceScalarBlockLayoutFeatures& value) { encoder->EncodeEnumValue(value.sType); @@ -3450,13 +2948,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceScalarBlockLa encoder->EncodeUInt32Value(value.scalarBlockLayout); } -void EncodeStruct(ParameterEncoder* encoder, const VkImageStencilUsageCreateInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.stencilUsage); -} - void EncodeStruct(ParameterEncoder* encoder, const VkSamplerReductionModeCreateInfo& value) { encoder->EncodeEnumValue(value.sType); @@ -3472,179 +2963,185 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSamplerFilter encoder->EncodeUInt32Value(value.filterMinmaxImageComponentMapping); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkanMemoryModelFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceUniformBufferStandardLayoutFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.vulkanMemoryModel); - encoder->EncodeUInt32Value(value.vulkanMemoryModelDeviceScope); - encoder->EncodeUInt32Value(value.vulkanMemoryModelAvailabilityVisibilityChains); + encoder->EncodeUInt32Value(value.uniformBufferStandardLayout); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceImagelessFramebufferFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.imagelessFramebuffer); + encoder->EncodeUInt32Value(value.shaderSubgroupExtendedTypes); } -void EncodeStruct(ParameterEncoder* encoder, const VkFramebufferAttachmentImageInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentDescription2& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); - encoder->EncodeFlagsValue(value.usage); - encoder->EncodeUInt32Value(value.width); - encoder->EncodeUInt32Value(value.height); - encoder->EncodeUInt32Value(value.layerCount); - encoder->EncodeUInt32Value(value.viewFormatCount); - encoder->EncodeEnumArray(value.pViewFormats, value.viewFormatCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkFramebufferAttachmentsCreateInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.attachmentImageInfoCount); - EncodeStructArray(encoder, value.pAttachmentImageInfos, value.attachmentImageInfoCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassAttachmentBeginInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.attachmentCount); - encoder->EncodeVulkanHandleArray(value.pAttachments, value.attachmentCount); + encoder->EncodeEnumValue(value.format); + encoder->EncodeEnumValue(value.samples); + encoder->EncodeEnumValue(value.loadOp); + encoder->EncodeEnumValue(value.storeOp); + encoder->EncodeEnumValue(value.stencilLoadOp); + encoder->EncodeEnumValue(value.stencilStoreOp); + encoder->EncodeEnumValue(value.initialLayout); + encoder->EncodeEnumValue(value.finalLayout); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceUniformBufferStandardLayoutFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentReference2& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.uniformBufferStandardLayout); + encoder->EncodeUInt32Value(value.attachment); + encoder->EncodeEnumValue(value.layout); + encoder->EncodeFlagsValue(value.aspectMask); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkSubpassDescription2& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.shaderSubgroupExtendedTypes); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeEnumValue(value.pipelineBindPoint); + encoder->EncodeUInt32Value(value.viewMask); + encoder->EncodeUInt32Value(value.inputAttachmentCount); + EncodeStructArray(encoder, value.pInputAttachments, value.inputAttachmentCount); + encoder->EncodeUInt32Value(value.colorAttachmentCount); + EncodeStructArray(encoder, value.pColorAttachments, value.colorAttachmentCount); + EncodeStructArray(encoder, value.pResolveAttachments, value.colorAttachmentCount); + EncodeStructPtr(encoder, value.pDepthStencilAttachment); + encoder->EncodeUInt32Value(value.preserveAttachmentCount); + encoder->EncodeUInt32Array(value.pPreserveAttachments, value.preserveAttachmentCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkSubpassDependency2& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.separateDepthStencilLayouts); + encoder->EncodeUInt32Value(value.srcSubpass); + encoder->EncodeUInt32Value(value.dstSubpass); + encoder->EncodeFlagsValue(value.srcStageMask); + encoder->EncodeFlagsValue(value.dstStageMask); + encoder->EncodeFlagsValue(value.srcAccessMask); + encoder->EncodeFlagsValue(value.dstAccessMask); + encoder->EncodeFlagsValue(value.dependencyFlags); + encoder->EncodeInt32Value(value.viewOffset); } -void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentReferenceStencilLayout& value) +void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassCreateInfo2& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.stencilLayout); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeUInt32Value(value.attachmentCount); + EncodeStructArray(encoder, value.pAttachments, value.attachmentCount); + encoder->EncodeUInt32Value(value.subpassCount); + EncodeStructArray(encoder, value.pSubpasses, value.subpassCount); + encoder->EncodeUInt32Value(value.dependencyCount); + EncodeStructArray(encoder, value.pDependencies, value.dependencyCount); + encoder->EncodeUInt32Value(value.correlatedViewMaskCount); + encoder->EncodeUInt32Array(value.pCorrelatedViewMasks, value.correlatedViewMaskCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentDescriptionStencilLayout& value) +void EncodeStruct(ParameterEncoder* encoder, const VkSubpassBeginInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.stencilInitialLayout); - encoder->EncodeEnumValue(value.stencilFinalLayout); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeEnumValue(value.contents); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceHostQueryResetFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkSubpassEndInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.hostQueryReset); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTimelineSemaphoreFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkSubpassDescriptionDepthStencilResolve& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.timelineSemaphore); + encoder->EncodeEnumValue(value.depthResolveMode); + encoder->EncodeEnumValue(value.stencilResolveMode); + EncodeStructPtr(encoder, value.pDepthStencilResolveAttachment); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTimelineSemaphoreProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDepthStencilResolveProperties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt64Value(value.maxTimelineSemaphoreValueDifference); + encoder->EncodeFlagsValue(value.supportedDepthResolveModes); + encoder->EncodeFlagsValue(value.supportedStencilResolveModes); + encoder->EncodeUInt32Value(value.independentResolveNone); + encoder->EncodeUInt32Value(value.independentResolve); } -void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreTypeCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkImageStencilUsageCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.semaphoreType); - encoder->EncodeUInt64Value(value.initialValue); + encoder->EncodeFlagsValue(value.stencilUsage); } -void EncodeStruct(ParameterEncoder* encoder, const VkTimelineSemaphoreSubmitInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceImagelessFramebufferFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.waitSemaphoreValueCount); - encoder->EncodeUInt64Array(value.pWaitSemaphoreValues, value.waitSemaphoreValueCount); - encoder->EncodeUInt32Value(value.signalSemaphoreValueCount); - encoder->EncodeUInt64Array(value.pSignalSemaphoreValues, value.signalSemaphoreValueCount); + encoder->EncodeUInt32Value(value.imagelessFramebuffer); } -void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreWaitInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkFramebufferAttachmentImageInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); - encoder->EncodeUInt32Value(value.semaphoreCount); - encoder->EncodeVulkanHandleArray(value.pSemaphores, value.semaphoreCount); - encoder->EncodeUInt64Array(value.pValues, value.semaphoreCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreSignalInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeVulkanHandleValue(value.semaphore); - encoder->EncodeUInt64Value(value.value); + encoder->EncodeFlagsValue(value.usage); + encoder->EncodeUInt32Value(value.width); + encoder->EncodeUInt32Value(value.height); + encoder->EncodeUInt32Value(value.layerCount); + encoder->EncodeUInt32Value(value.viewFormatCount); + encoder->EncodeEnumArray(value.pViewFormats, value.viewFormatCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceBufferDeviceAddressFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkFramebufferAttachmentsCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.bufferDeviceAddress); - encoder->EncodeUInt32Value(value.bufferDeviceAddressCaptureReplay); - encoder->EncodeUInt32Value(value.bufferDeviceAddressMultiDevice); + encoder->EncodeUInt32Value(value.attachmentImageInfoCount); + EncodeStructArray(encoder, value.pAttachmentImageInfos, value.attachmentImageInfoCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkBufferDeviceAddressInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassAttachmentBeginInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeVulkanHandleValue(value.buffer); + encoder->EncodeUInt32Value(value.attachmentCount); + encoder->EncodeVulkanHandleArray(value.pAttachments, value.attachmentCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkBufferOpaqueCaptureAddressCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt64Value(value.opaqueCaptureAddress); + encoder->EncodeUInt32Value(value.separateDepthStencilLayouts); } -void EncodeStruct(ParameterEncoder* encoder, const VkMemoryOpaqueCaptureAddressAllocateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentReferenceStencilLayout& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt64Value(value.opaqueCaptureAddress); + encoder->EncodeEnumValue(value.stencilLayout); } -void EncodeStruct(ParameterEncoder* encoder, const VkDeviceMemoryOpaqueCaptureAddressInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentDescriptionStencilLayout& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeVulkanHandleValue(value.memory); + encoder->EncodeEnumValue(value.stencilInitialLayout); + encoder->EncodeEnumValue(value.stencilFinalLayout); } void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkan13Features& value) @@ -3719,32 +3216,10 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkan13Prope encoder->EncodeUInt64Value(value.maxBufferSize); } -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCreationFeedback& value) -{ - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeUInt64Value(value.duration); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCreationFeedbackCreateInfo& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - EncodeStructPtr(encoder, value.pPipelineCreationFeedback); - encoder->EncodeUInt32Value(value.pipelineStageCreationFeedbackCount); - EncodeStructArray(encoder, value.pPipelineStageCreationFeedbacks, value.pipelineStageCreationFeedbackCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderTerminateInvocationFeatures& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.shaderTerminateInvocation); -} - void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceToolProperties& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeString(value.name); encoder->EncodeString(value.version); encoder->EncodeFlagsValue(value.purposes); @@ -3752,13 +3227,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceToolPropertie encoder->EncodeString(value.layer); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.shaderDemoteToHelperInvocation); -} - void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePrivateDataFeatures& value) { encoder->EncodeEnumValue(value.sType); @@ -3776,17 +3244,10 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDevicePrivateDataCreateInfo void EncodeStruct(ParameterEncoder* encoder, const VkPrivateDataSlotCreateInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePipelineCreationCacheControlFeatures& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.pipelineCreationCacheControl); -} - void EncodeStruct(ParameterEncoder* encoder, const VkMemoryBarrier2& value) { encoder->EncodeEnumValue(value.sType); @@ -3831,7 +3292,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImageMemoryBarrier2& value) void EncodeStruct(ParameterEncoder* encoder, const VkDependencyInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.dependencyFlags); encoder->EncodeUInt32Value(value.memoryBarrierCount); EncodeStructArray(encoder, value.pMemoryBarriers, value.memoryBarrierCount); @@ -3844,7 +3305,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDependencyInfo& value) void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreSubmitInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.semaphore); encoder->EncodeUInt64Value(value.value); encoder->EncodeFlags64Value(value.stageMask); @@ -3866,37 +3327,23 @@ void EncodeStruct(ParameterEncoder* encoder, const VkSubmitInfo2& value) encoder->EncodeFlagsValue(value.flags); encoder->EncodeUInt32Value(value.waitSemaphoreInfoCount); EncodeStructArray(encoder, value.pWaitSemaphoreInfos, value.waitSemaphoreInfoCount); - encoder->EncodeUInt32Value(value.commandBufferInfoCount); - EncodeStructArray(encoder, value.pCommandBufferInfos, value.commandBufferInfoCount); - encoder->EncodeUInt32Value(value.signalSemaphoreInfoCount); - EncodeStructArray(encoder, value.pSignalSemaphoreInfos, value.signalSemaphoreInfoCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSynchronization2Features& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.synchronization2); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.shaderZeroInitializeWorkgroupMemory); + encoder->EncodeUInt32Value(value.commandBufferInfoCount); + EncodeStructArray(encoder, value.pCommandBufferInfos, value.commandBufferInfoCount); + encoder->EncodeUInt32Value(value.signalSemaphoreInfoCount); + EncodeStructArray(encoder, value.pSignalSemaphoreInfos, value.signalSemaphoreInfoCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceImageRobustnessFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSynchronization2Features& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.robustImageAccess); + encoder->EncodeUInt32Value(value.synchronization2); } void EncodeStruct(ParameterEncoder* encoder, const VkBufferCopy2& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt64Value(value.srcOffset); encoder->EncodeUInt64Value(value.dstOffset); encoder->EncodeUInt64Value(value.size); @@ -3905,7 +3352,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkBufferCopy2& value) void EncodeStruct(ParameterEncoder* encoder, const VkCopyBufferInfo2& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.srcBuffer); encoder->EncodeVulkanHandleValue(value.dstBuffer); encoder->EncodeUInt32Value(value.regionCount); @@ -3915,7 +3362,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkCopyBufferInfo2& value) void EncodeStruct(ParameterEncoder* encoder, const VkImageCopy2& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStruct(encoder, value.srcSubresource); EncodeStruct(encoder, value.srcOffset); EncodeStruct(encoder, value.dstSubresource); @@ -3926,7 +3373,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImageCopy2& value) void EncodeStruct(ParameterEncoder* encoder, const VkCopyImageInfo2& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.srcImage); encoder->EncodeEnumValue(value.srcImageLayout); encoder->EncodeVulkanHandleValue(value.dstImage); @@ -3950,7 +3397,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkBufferImageCopy2& value) void EncodeStruct(ParameterEncoder* encoder, const VkCopyBufferToImageInfo2& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.srcBuffer); encoder->EncodeVulkanHandleValue(value.dstImage); encoder->EncodeEnumValue(value.dstImageLayout); @@ -3961,7 +3408,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkCopyBufferToImageInfo2& val void EncodeStruct(ParameterEncoder* encoder, const VkCopyImageToBufferInfo2& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.srcImage); encoder->EncodeEnumValue(value.srcImageLayout); encoder->EncodeVulkanHandleValue(value.dstBuffer); @@ -3969,175 +3416,158 @@ void EncodeStruct(ParameterEncoder* encoder, const VkCopyImageToBufferInfo2& val EncodeStructArray(encoder, value.pRegions, value.regionCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkImageBlit2& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTextureCompressionASTCHDRFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - EncodeStruct(encoder, value.srcSubresource); - EncodeStructArray(encoder, value.srcOffsets, 2); - EncodeStruct(encoder, value.dstSubresource); - EncodeStructArray(encoder, value.dstOffsets, 2); + encoder->EncodeUInt32Value(value.textureCompressionASTC_HDR); } -void EncodeStruct(ParameterEncoder* encoder, const VkBlitImageInfo2& value) +void EncodeStruct(ParameterEncoder* encoder, const VkFormatProperties3& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeVulkanHandleValue(value.srcImage); - encoder->EncodeEnumValue(value.srcImageLayout); - encoder->EncodeVulkanHandleValue(value.dstImage); - encoder->EncodeEnumValue(value.dstImageLayout); - encoder->EncodeUInt32Value(value.regionCount); - EncodeStructArray(encoder, value.pRegions, value.regionCount); - encoder->EncodeEnumValue(value.filter); + encoder->EncodeFlags64Value(value.linearTilingFeatures); + encoder->EncodeFlags64Value(value.optimalTilingFeatures); + encoder->EncodeFlags64Value(value.bufferFeatures); } -void EncodeStruct(ParameterEncoder* encoder, const VkImageResolve2& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance4Features& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - EncodeStruct(encoder, value.srcSubresource); - EncodeStruct(encoder, value.srcOffset); - EncodeStruct(encoder, value.dstSubresource); - EncodeStruct(encoder, value.dstOffset); - EncodeStruct(encoder, value.extent); + encoder->EncodeUInt32Value(value.maintenance4); } -void EncodeStruct(ParameterEncoder* encoder, const VkResolveImageInfo2& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance4Properties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeVulkanHandleValue(value.srcImage); - encoder->EncodeEnumValue(value.srcImageLayout); - encoder->EncodeVulkanHandleValue(value.dstImage); - encoder->EncodeEnumValue(value.dstImageLayout); - encoder->EncodeUInt32Value(value.regionCount); - EncodeStructArray(encoder, value.pRegions, value.regionCount); + encoder->EncodeUInt64Value(value.maxBufferSize); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSubgroupSizeControlFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDeviceBufferMemoryRequirements& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + EncodeStructPtr(encoder, value.pCreateInfo); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDeviceImageMemoryRequirements& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + EncodeStructPtr(encoder, value.pCreateInfo); + encoder->EncodeEnumValue(value.planeAspect); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCreationFeedback& value) +{ + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeUInt64Value(value.duration); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCreationFeedbackCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.subgroupSizeControl); - encoder->EncodeUInt32Value(value.computeFullSubgroups); + EncodeStructPtr(encoder, value.pPipelineCreationFeedback); + encoder->EncodeUInt32Value(value.pipelineStageCreationFeedbackCount); + EncodeStructArray(encoder, value.pPipelineStageCreationFeedbacks, value.pipelineStageCreationFeedbackCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSubgroupSizeControlProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderTerminateInvocationFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.minSubgroupSize); - encoder->EncodeUInt32Value(value.maxSubgroupSize); - encoder->EncodeUInt32Value(value.maxComputeWorkgroupSubgroups); - encoder->EncodeFlagsValue(value.requiredSubgroupSizeStages); + encoder->EncodeUInt32Value(value.shaderTerminateInvocation); } -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.requiredSubgroupSize); + encoder->EncodeUInt32Value(value.shaderDemoteToHelperInvocation); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceInlineUniformBlockFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePipelineCreationCacheControlFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.inlineUniformBlock); - encoder->EncodeUInt32Value(value.descriptorBindingInlineUniformBlockUpdateAfterBind); + encoder->EncodeUInt32Value(value.pipelineCreationCacheControl); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceInlineUniformBlockProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.maxInlineUniformBlockSize); - encoder->EncodeUInt32Value(value.maxPerStageDescriptorInlineUniformBlocks); - encoder->EncodeUInt32Value(value.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks); - encoder->EncodeUInt32Value(value.maxDescriptorSetInlineUniformBlocks); - encoder->EncodeUInt32Value(value.maxDescriptorSetUpdateAfterBindInlineUniformBlocks); + encoder->EncodeUInt32Value(value.shaderZeroInitializeWorkgroupMemory); } -void EncodeStruct(ParameterEncoder* encoder, const VkWriteDescriptorSetInlineUniformBlock& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceImageRobustnessFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.dataSize); - encoder->EncodeVoidArray(value.pData, value.dataSize); + encoder->EncodeUInt32Value(value.robustImageAccess); } -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorPoolInlineUniformBlockCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSubgroupSizeControlFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.maxInlineUniformBlockBindings); + encoder->EncodeUInt32Value(value.subgroupSizeControl); + encoder->EncodeUInt32Value(value.computeFullSubgroups); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTextureCompressionASTCHDRFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSubgroupSizeControlProperties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.textureCompressionASTC_HDR); + encoder->EncodeUInt32Value(value.minSubgroupSize); + encoder->EncodeUInt32Value(value.maxSubgroupSize); + encoder->EncodeUInt32Value(value.maxComputeWorkgroupSubgroups); + encoder->EncodeFlagsValue(value.requiredSubgroupSizeStages); } -void EncodeStruct(ParameterEncoder* encoder, const VkRenderingAttachmentInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeVulkanHandleValue(value.imageView); - encoder->EncodeEnumValue(value.imageLayout); - encoder->EncodeEnumValue(value.resolveMode); - encoder->EncodeVulkanHandleValue(value.resolveImageView); - encoder->EncodeEnumValue(value.resolveImageLayout); - encoder->EncodeEnumValue(value.loadOp); - encoder->EncodeEnumValue(value.storeOp); - EncodeStruct(encoder, value.clearValue); + encoder->EncodeUInt32Value(value.requiredSubgroupSize); } -void EncodeStruct(ParameterEncoder* encoder, const VkRenderingInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceInlineUniformBlockFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - EncodeStruct(encoder, value.renderArea); - encoder->EncodeUInt32Value(value.layerCount); - encoder->EncodeUInt32Value(value.viewMask); - encoder->EncodeUInt32Value(value.colorAttachmentCount); - EncodeStructArray(encoder, value.pColorAttachments, value.colorAttachmentCount); - EncodeStructPtr(encoder, value.pDepthAttachment); - EncodeStructPtr(encoder, value.pStencilAttachment); + encoder->EncodeUInt32Value(value.inlineUniformBlock); + encoder->EncodeUInt32Value(value.descriptorBindingInlineUniformBlockUpdateAfterBind); } -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineRenderingCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceInlineUniformBlockProperties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.viewMask); - encoder->EncodeUInt32Value(value.colorAttachmentCount); - encoder->EncodeEnumArray(value.pColorAttachmentFormats, value.colorAttachmentCount); - encoder->EncodeEnumValue(value.depthAttachmentFormat); - encoder->EncodeEnumValue(value.stencilAttachmentFormat); + encoder->EncodeUInt32Value(value.maxInlineUniformBlockSize); + encoder->EncodeUInt32Value(value.maxPerStageDescriptorInlineUniformBlocks); + encoder->EncodeUInt32Value(value.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks); + encoder->EncodeUInt32Value(value.maxDescriptorSetInlineUniformBlocks); + encoder->EncodeUInt32Value(value.maxDescriptorSetUpdateAfterBindInlineUniformBlocks); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDynamicRenderingFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkWriteDescriptorSetInlineUniformBlock& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.dynamicRendering); + encoder->EncodeUInt32Value(value.dataSize); + encoder->EncodeVoidArray(value.pData, value.dataSize); } -void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferInheritanceRenderingInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorPoolInlineUniformBlockCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeUInt32Value(value.viewMask); - encoder->EncodeUInt32Value(value.colorAttachmentCount); - encoder->EncodeEnumArray(value.pColorAttachmentFormats, value.colorAttachmentCount); - encoder->EncodeEnumValue(value.depthAttachmentFormat); - encoder->EncodeEnumValue(value.stencilAttachmentFormat); - encoder->EncodeEnumValue(value.rasterizationSamples); + encoder->EncodeUInt32Value(value.maxInlineUniformBlockBindings); } void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderIntegerDotProductFeatures& value) @@ -4193,42 +3623,109 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTexelBufferAl encoder->EncodeUInt32Value(value.uniformTexelBufferOffsetSingleTexelAlignment); } -void EncodeStruct(ParameterEncoder* encoder, const VkFormatProperties3& value) +void EncodeStruct(ParameterEncoder* encoder, const VkImageBlit2& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlags64Value(value.linearTilingFeatures); - encoder->EncodeFlags64Value(value.optimalTilingFeatures); - encoder->EncodeFlags64Value(value.bufferFeatures); + EncodeStruct(encoder, value.srcSubresource); + EncodeStructArray(encoder, value.srcOffsets, 2); + EncodeStruct(encoder, value.dstSubresource); + EncodeStructArray(encoder, value.dstOffsets, 2); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance4Features& value) +void EncodeStruct(ParameterEncoder* encoder, const VkBlitImageInfo2& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.maintenance4); + encoder->EncodeVulkanHandleValue(value.srcImage); + encoder->EncodeEnumValue(value.srcImageLayout); + encoder->EncodeVulkanHandleValue(value.dstImage); + encoder->EncodeEnumValue(value.dstImageLayout); + encoder->EncodeUInt32Value(value.regionCount); + EncodeStructArray(encoder, value.pRegions, value.regionCount); + encoder->EncodeEnumValue(value.filter); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance4Properties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkImageResolve2& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + EncodeStruct(encoder, value.srcSubresource); + EncodeStruct(encoder, value.srcOffset); + EncodeStruct(encoder, value.dstSubresource); + EncodeStruct(encoder, value.dstOffset); + EncodeStruct(encoder, value.extent); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkResolveImageInfo2& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt64Value(value.maxBufferSize); + encoder->EncodeVulkanHandleValue(value.srcImage); + encoder->EncodeEnumValue(value.srcImageLayout); + encoder->EncodeVulkanHandleValue(value.dstImage); + encoder->EncodeEnumValue(value.dstImageLayout); + encoder->EncodeUInt32Value(value.regionCount); + EncodeStructArray(encoder, value.pRegions, value.regionCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkDeviceBufferMemoryRequirements& value) +void EncodeStruct(ParameterEncoder* encoder, const VkRenderingAttachmentInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - EncodeStructPtr(encoder, value.pCreateInfo); + encoder->EncodeVulkanHandleValue(value.imageView); + encoder->EncodeEnumValue(value.imageLayout); + encoder->EncodeEnumValue(value.resolveMode); + encoder->EncodeVulkanHandleValue(value.resolveImageView); + encoder->EncodeEnumValue(value.resolveImageLayout); + encoder->EncodeEnumValue(value.loadOp); + encoder->EncodeEnumValue(value.storeOp); + EncodeStruct(encoder, value.clearValue); } -void EncodeStruct(ParameterEncoder* encoder, const VkDeviceImageMemoryRequirements& value) +void EncodeStruct(ParameterEncoder* encoder, const VkRenderingInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - EncodeStructPtr(encoder, value.pCreateInfo); - encoder->EncodeEnumValue(value.planeAspect); + encoder->EncodeFlagsValue(value.flags); + EncodeStruct(encoder, value.renderArea); + encoder->EncodeUInt32Value(value.layerCount); + encoder->EncodeUInt32Value(value.viewMask); + encoder->EncodeUInt32Value(value.colorAttachmentCount); + EncodeStructArray(encoder, value.pColorAttachments, value.colorAttachmentCount); + EncodeStructPtr(encoder, value.pDepthAttachment); + EncodeStructPtr(encoder, value.pStencilAttachment); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineRenderingCreateInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.viewMask); + encoder->EncodeUInt32Value(value.colorAttachmentCount); + encoder->EncodeEnumArray(value.pColorAttachmentFormats, value.colorAttachmentCount); + encoder->EncodeEnumValue(value.depthAttachmentFormat); + encoder->EncodeEnumValue(value.stencilAttachmentFormat); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDynamicRenderingFeatures& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.dynamicRendering); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferInheritanceRenderingInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeUInt32Value(value.viewMask); + encoder->EncodeUInt32Value(value.colorAttachmentCount); + encoder->EncodeEnumArray(value.pColorAttachmentFormats, value.colorAttachmentCount); + encoder->EncodeEnumValue(value.depthAttachmentFormat); + encoder->EncodeEnumValue(value.stencilAttachmentFormat); + encoder->EncodeEnumValue(value.rasterizationSamples); } void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkan14Features& value) @@ -4311,231 +3808,193 @@ void EncodeStruct(ParameterEncoder* encoder, const VkQueueFamilyGlobalPriorityPr encoder->EncodeEnumArray(value.priorities, VK_MAX_GLOBAL_PRIORITY_SIZE); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderSubgroupRotateFeatures& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.shaderSubgroupRotate); - encoder->EncodeUInt32Value(value.shaderSubgroupRotateClustered); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderFloatControls2Features& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.shaderFloatControls2); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderExpectAssumeFeatures& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.shaderExpectAssume); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLineRasterizationFeatures& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.rectangularLines); - encoder->EncodeUInt32Value(value.bresenhamLines); - encoder->EncodeUInt32Value(value.smoothLines); - encoder->EncodeUInt32Value(value.stippledRectangularLines); - encoder->EncodeUInt32Value(value.stippledBresenhamLines); - encoder->EncodeUInt32Value(value.stippledSmoothLines); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLineRasterizationProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceIndexTypeUint8Features& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.lineSubPixelPrecisionBits); + encoder->EncodeUInt32Value(value.indexTypeUint8); } -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineRasterizationLineStateCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkMemoryMapInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.lineRasterizationMode); - encoder->EncodeUInt32Value(value.stippledLineEnable); - encoder->EncodeUInt32Value(value.lineStippleFactor); - encoder->EncodeUInt16Value(value.lineStipplePattern); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeVulkanHandleValue(value.memory); + encoder->EncodeUInt64Value(value.offset); + encoder->EncodeUInt64Value(value.size); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVertexAttributeDivisorProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkMemoryUnmapInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.maxVertexAttribDivisor); - encoder->EncodeUInt32Value(value.supportsNonZeroFirstInstance); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVertexInputBindingDivisorDescription& value) -{ - encoder->EncodeUInt32Value(value.binding); - encoder->EncodeUInt32Value(value.divisor); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeVulkanHandleValue(value.memory); } -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineVertexInputDivisorStateCreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance5Features& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.vertexBindingDivisorCount); - EncodeStructArray(encoder, value.pVertexBindingDivisors, value.vertexBindingDivisorCount); + encoder->EncodeUInt32Value(value.maintenance5); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVertexAttributeDivisorFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance5Properties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.vertexAttributeInstanceRateDivisor); - encoder->EncodeUInt32Value(value.vertexAttributeInstanceRateZeroDivisor); + encoder->EncodeUInt32Value(value.earlyFragmentMultisampleCoverageAfterSampleCounting); + encoder->EncodeUInt32Value(value.earlyFragmentSampleMaskTestBeforeSampleCounting); + encoder->EncodeUInt32Value(value.depthStencilSwizzleOneSupport); + encoder->EncodeUInt32Value(value.polygonModePointSize); + encoder->EncodeUInt32Value(value.nonStrictSinglePixelWideLinesUseParallelogram); + encoder->EncodeUInt32Value(value.nonStrictWideLinesUseParallelogram); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceIndexTypeUint8Features& value) +void EncodeStruct(ParameterEncoder* encoder, const VkImageSubresource2& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.indexTypeUint8); + EncodePNextStructIfValid(encoder, value.pNext); + EncodeStruct(encoder, value.imageSubresource); } -void EncodeStruct(ParameterEncoder* encoder, const VkMemoryMapInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDeviceImageSubresourceInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeVulkanHandleValue(value.memory); - encoder->EncodeUInt64Value(value.offset); - encoder->EncodeUInt64Value(value.size); + EncodePNextStructIfValid(encoder, value.pNext); + EncodeStructPtr(encoder, value.pCreateInfo); + EncodeStructPtr(encoder, value.pSubresource); } -void EncodeStruct(ParameterEncoder* encoder, const VkMemoryUnmapInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkSubresourceLayout2& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeVulkanHandleValue(value.memory); + EncodeStruct(encoder, value.subresourceLayout); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance5Features& value) +void EncodeStruct(ParameterEncoder* encoder, const VkBufferUsageFlags2CreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.maintenance5); + encoder->EncodeFlags64Value(value.usage); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance5Properties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance6Features& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.earlyFragmentMultisampleCoverageAfterSampleCounting); - encoder->EncodeUInt32Value(value.earlyFragmentSampleMaskTestBeforeSampleCounting); - encoder->EncodeUInt32Value(value.depthStencilSwizzleOneSupport); - encoder->EncodeUInt32Value(value.polygonModePointSize); - encoder->EncodeUInt32Value(value.nonStrictSinglePixelWideLinesUseParallelogram); - encoder->EncodeUInt32Value(value.nonStrictWideLinesUseParallelogram); + encoder->EncodeUInt32Value(value.maintenance6); } -void EncodeStruct(ParameterEncoder* encoder, const VkRenderingAreaInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance6Properties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.viewMask); - encoder->EncodeUInt32Value(value.colorAttachmentCount); - encoder->EncodeEnumArray(value.pColorAttachmentFormats, value.colorAttachmentCount); - encoder->EncodeEnumValue(value.depthAttachmentFormat); - encoder->EncodeEnumValue(value.stencilAttachmentFormat); + encoder->EncodeUInt32Value(value.blockTexelViewCompatibleMultipleLayers); + encoder->EncodeUInt32Value(value.maxCombinedImageSamplerDescriptorCount); + encoder->EncodeUInt32Value(value.fragmentShadingRateClampCombinerInputs); } -void EncodeStruct(ParameterEncoder* encoder, const VkImageSubresource2& value) +void EncodeStruct(ParameterEncoder* encoder, const VkBindMemoryStatus& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - EncodeStruct(encoder, value.imageSubresource); + encoder->EncodeEnumPtr(value.pResult); } -void EncodeStruct(ParameterEncoder* encoder, const VkDeviceImageSubresourceInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceHostImageCopyFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - EncodeStructPtr(encoder, value.pCreateInfo); - EncodeStructPtr(encoder, value.pSubresource); + encoder->EncodeUInt32Value(value.hostImageCopy); } -void EncodeStruct(ParameterEncoder* encoder, const VkSubresourceLayout2& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceHostImageCopyProperties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - EncodeStruct(encoder, value.subresourceLayout); + encoder->EncodeUInt32Value(value.copySrcLayoutCount); + encoder->EncodeEnumArray(value.pCopySrcLayouts, value.copySrcLayoutCount); + encoder->EncodeUInt32Value(value.copyDstLayoutCount); + encoder->EncodeEnumArray(value.pCopyDstLayouts, value.copyDstLayoutCount); + encoder->EncodeUInt8Array(value.optimalTilingLayoutUUID, VK_UUID_SIZE); + encoder->EncodeUInt32Value(value.identicalMemoryTypeRequirements); } -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCreateFlags2CreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkCopyImageToImageInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlags64Value(value.flags); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeVulkanHandleValue(value.srcImage); + encoder->EncodeEnumValue(value.srcImageLayout); + encoder->EncodeVulkanHandleValue(value.dstImage); + encoder->EncodeEnumValue(value.dstImageLayout); + encoder->EncodeUInt32Value(value.regionCount); + EncodeStructArray(encoder, value.pRegions, value.regionCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkBufferUsageFlags2CreateInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkHostImageLayoutTransitionInfo& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlags64Value(value.usage); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.image); + encoder->EncodeEnumValue(value.oldLayout); + encoder->EncodeEnumValue(value.newLayout); + EncodeStruct(encoder, value.subresourceRange); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePushDescriptorProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkSubresourceHostMemcpySize& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.maxPushDescriptors); + encoder->EncodeUInt64Value(value.size); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDynamicRenderingLocalReadFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkHostImageCopyDevicePerformanceQuery& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.dynamicRenderingLocalRead); + encoder->EncodeUInt32Value(value.optimalDeviceAccess); + encoder->EncodeUInt32Value(value.identicalMemoryLayout); } -void EncodeStruct(ParameterEncoder* encoder, const VkRenderingAttachmentLocationInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderSubgroupRotateFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.colorAttachmentCount); - encoder->EncodeUInt32Array(value.pColorAttachmentLocations, value.colorAttachmentCount); + encoder->EncodeUInt32Value(value.shaderSubgroupRotate); + encoder->EncodeUInt32Value(value.shaderSubgroupRotateClustered); } -void EncodeStruct(ParameterEncoder* encoder, const VkRenderingInputAttachmentIndexInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderFloatControls2Features& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.colorAttachmentCount); - encoder->EncodeUInt32Array(value.pColorAttachmentInputIndices, value.colorAttachmentCount); - encoder->EncodeUInt32Ptr(value.pDepthInputAttachmentIndex); - encoder->EncodeUInt32Ptr(value.pStencilInputAttachmentIndex); + encoder->EncodeUInt32Value(value.shaderFloatControls2); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance6Features& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderExpectAssumeFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.maintenance6); + encoder->EncodeUInt32Value(value.shaderExpectAssume); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance6Properties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCreateFlags2CreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.blockTexelViewCompatibleMultipleLayers); - encoder->EncodeUInt32Value(value.maxCombinedImageSamplerDescriptorCount); - encoder->EncodeUInt32Value(value.fragmentShadingRateClampCombinerInputs); + encoder->EncodeFlags64Value(value.flags); } -void EncodeStruct(ParameterEncoder* encoder, const VkBindMemoryStatus& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePushDescriptorProperties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumPtr(value.pResult); + encoder->EncodeUInt32Value(value.maxPushDescriptors); } void EncodeStruct(ParameterEncoder* encoder, const VkBindDescriptorSetsInfo& value) @@ -4607,61 +4066,99 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineRobustnessCreateInf encoder->EncodeEnumValue(value.images); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceHostImageCopyFeatures& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLineRasterizationFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.hostImageCopy); + encoder->EncodeUInt32Value(value.rectangularLines); + encoder->EncodeUInt32Value(value.bresenhamLines); + encoder->EncodeUInt32Value(value.smoothLines); + encoder->EncodeUInt32Value(value.stippledRectangularLines); + encoder->EncodeUInt32Value(value.stippledBresenhamLines); + encoder->EncodeUInt32Value(value.stippledSmoothLines); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceHostImageCopyProperties& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLineRasterizationProperties& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.copySrcLayoutCount); - encoder->EncodeEnumArray(value.pCopySrcLayouts, value.copySrcLayoutCount); - encoder->EncodeUInt32Value(value.copyDstLayoutCount); - encoder->EncodeEnumArray(value.pCopyDstLayouts, value.copyDstLayoutCount); - encoder->EncodeUInt8Array(value.optimalTilingLayoutUUID, VK_UUID_SIZE); - encoder->EncodeUInt32Value(value.identicalMemoryTypeRequirements); + encoder->EncodeUInt32Value(value.lineSubPixelPrecisionBits); } -void EncodeStruct(ParameterEncoder* encoder, const VkCopyImageToImageInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineRasterizationLineStateCreateInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeVulkanHandleValue(value.srcImage); - encoder->EncodeEnumValue(value.srcImageLayout); - encoder->EncodeVulkanHandleValue(value.dstImage); - encoder->EncodeEnumValue(value.dstImageLayout); - encoder->EncodeUInt32Value(value.regionCount); - EncodeStructArray(encoder, value.pRegions, value.regionCount); + encoder->EncodeEnumValue(value.lineRasterizationMode); + encoder->EncodeUInt32Value(value.stippledLineEnable); + encoder->EncodeUInt32Value(value.lineStippleFactor); + encoder->EncodeUInt16Value(value.lineStipplePattern); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVertexAttributeDivisorProperties& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.maxVertexAttribDivisor); + encoder->EncodeUInt32Value(value.supportsNonZeroFirstInstance); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkVertexInputBindingDivisorDescription& value) +{ + encoder->EncodeUInt32Value(value.binding); + encoder->EncodeUInt32Value(value.divisor); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineVertexInputDivisorStateCreateInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.vertexBindingDivisorCount); + EncodeStructArray(encoder, value.pVertexBindingDivisors, value.vertexBindingDivisorCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVertexAttributeDivisorFeatures& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.vertexAttributeInstanceRateDivisor); + encoder->EncodeUInt32Value(value.vertexAttributeInstanceRateZeroDivisor); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkRenderingAreaInfo& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeUInt32Value(value.viewMask); + encoder->EncodeUInt32Value(value.colorAttachmentCount); + encoder->EncodeEnumArray(value.pColorAttachmentFormats, value.colorAttachmentCount); + encoder->EncodeEnumValue(value.depthAttachmentFormat); + encoder->EncodeEnumValue(value.stencilAttachmentFormat); } -void EncodeStruct(ParameterEncoder* encoder, const VkHostImageLayoutTransitionInfo& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDynamicRenderingLocalReadFeatures& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeVulkanHandleValue(value.image); - encoder->EncodeEnumValue(value.oldLayout); - encoder->EncodeEnumValue(value.newLayout); - EncodeStruct(encoder, value.subresourceRange); + encoder->EncodeUInt32Value(value.dynamicRenderingLocalRead); } -void EncodeStruct(ParameterEncoder* encoder, const VkSubresourceHostMemcpySize& value) +void EncodeStruct(ParameterEncoder* encoder, const VkRenderingAttachmentLocationInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt64Value(value.size); + encoder->EncodeUInt32Value(value.colorAttachmentCount); + encoder->EncodeUInt32Array(value.pColorAttachmentLocations, value.colorAttachmentCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkHostImageCopyDevicePerformanceQuery& value) +void EncodeStruct(ParameterEncoder* encoder, const VkRenderingInputAttachmentIndexInfo& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.optimalDeviceAccess); - encoder->EncodeUInt32Value(value.identicalMemoryLayout); + encoder->EncodeUInt32Value(value.colorAttachmentCount); + encoder->EncodeUInt32Array(value.pColorAttachmentInputIndices, value.colorAttachmentCount); + encoder->EncodeUInt32Ptr(value.pDepthInputAttachmentIndex); + encoder->EncodeUInt32Ptr(value.pStencilInputAttachmentIndex); } void EncodeStruct(ParameterEncoder* encoder, const VkSurfaceCapabilitiesKHR& value) @@ -4736,7 +4233,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkBindImageMemorySwapchainInf void EncodeStruct(ParameterEncoder* encoder, const VkAcquireNextImageInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.swapchain); encoder->EncodeUInt64Value(value.timeout); encoder->EncodeVulkanHandleValue(value.semaphore); @@ -4747,7 +4244,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkAcquireNextImageInfoKHR& va void EncodeStruct(ParameterEncoder* encoder, const VkDeviceGroupPresentCapabilitiesKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Array(value.presentMask, VK_MAX_DEVICE_GROUP_SIZE); encoder->EncodeFlagsValue(value.modes); } @@ -4777,7 +4274,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDisplayModeParametersKHR& v void EncodeStruct(ParameterEncoder* encoder, const VkDisplayModeCreateInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); EncodeStruct(encoder, value.parameters); } @@ -4844,7 +4341,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDisplayPresentInfoKHR& valu void EncodeStruct(ParameterEncoder* encoder, const VkXlibSurfaceCreateInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeVoidPtr(value.dpy); encoder->EncodeSizeTValue(value.window); @@ -4853,7 +4350,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkXlibSurfaceCreateInfoKHR& v void EncodeStruct(ParameterEncoder* encoder, const VkXcbSurfaceCreateInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeVoidPtr(value.connection); encoder->EncodeUInt32Value(value.window); @@ -4862,7 +4359,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkXcbSurfaceCreateInfoKHR& va void EncodeStruct(ParameterEncoder* encoder, const VkWaylandSurfaceCreateInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeVoidPtr(value.display); encoder->EncodeVoidPtr(value.surface); @@ -4871,7 +4368,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkWaylandSurfaceCreateInfoKHR void EncodeStruct(ParameterEncoder* encoder, const VkAndroidSurfaceCreateInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeVoidPtr(value.window); } @@ -4879,7 +4376,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkAndroidSurfaceCreateInfoKHR void EncodeStruct(ParameterEncoder* encoder, const VkWin32SurfaceCreateInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeVoidPtr(value.hinstance); encoder->EncodeVoidPtr(value.hwnd); @@ -4954,7 +4451,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkVideoFormatPropertiesKHR& v void EncodeStruct(ParameterEncoder* encoder, const VkVideoPictureResourceInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStruct(encoder, value.codedOffset); EncodeStruct(encoder, value.codedExtent); encoder->EncodeUInt32Value(value.baseArrayLayer); @@ -4972,7 +4469,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkVideoReferenceSlotInfoKHR& void EncodeStruct(ParameterEncoder* encoder, const VkVideoSessionMemoryRequirementsKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.memoryBindIndex); EncodeStruct(encoder, value.memoryRequirements); } @@ -4980,7 +4477,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkVideoSessionMemoryRequireme void EncodeStruct(ParameterEncoder* encoder, const VkBindVideoSessionMemoryInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.memoryBindIndex); encoder->EncodeVulkanHandleValue(value.memory); encoder->EncodeUInt64Value(value.memoryOffset); @@ -5032,7 +4529,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkVideoBeginCodingInfoKHR& va void EncodeStruct(ParameterEncoder* encoder, const VkVideoEndCodingInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); } @@ -5160,7 +4657,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH264SessionParam void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH264NaluSliceInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeInt32Value(value.constantQp); EncodeStructPtr(encoder, value.pStdSliceHeader); } @@ -5229,171 +4726,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH264GopRemaining encoder->EncodeUInt32Value(value.gopRemainingB); } -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265CapabilitiesKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeEnumValue(value.maxLevelIdc); - encoder->EncodeUInt32Value(value.maxSliceSegmentCount); - EncodeStruct(encoder, value.maxTiles); - encoder->EncodeFlagsValue(value.ctbSizes); - encoder->EncodeFlagsValue(value.transformBlockSizes); - encoder->EncodeUInt32Value(value.maxPPictureL0ReferenceCount); - encoder->EncodeUInt32Value(value.maxBPictureL0ReferenceCount); - encoder->EncodeUInt32Value(value.maxL1ReferenceCount); - encoder->EncodeUInt32Value(value.maxSubLayerCount); - encoder->EncodeUInt32Value(value.expectDyadicTemporalSubLayerPattern); - encoder->EncodeInt32Value(value.minQp); - encoder->EncodeInt32Value(value.maxQp); - encoder->EncodeUInt32Value(value.prefersGopRemainingFrames); - encoder->EncodeUInt32Value(value.requiresGopRemainingFrames); - encoder->EncodeFlagsValue(value.stdSyntaxFlags); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265SessionCreateInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.useMaxLevelIdc); - encoder->EncodeEnumValue(value.maxLevelIdc); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265QpKHR& value) -{ - encoder->EncodeInt32Value(value.qpI); - encoder->EncodeInt32Value(value.qpP); - encoder->EncodeInt32Value(value.qpB); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265QualityLevelPropertiesKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.preferredRateControlFlags); - encoder->EncodeUInt32Value(value.preferredGopFrameCount); - encoder->EncodeUInt32Value(value.preferredIdrPeriod); - encoder->EncodeUInt32Value(value.preferredConsecutiveBFrameCount); - encoder->EncodeUInt32Value(value.preferredSubLayerCount); - EncodeStruct(encoder, value.preferredConstantQp); - encoder->EncodeUInt32Value(value.preferredMaxL0ReferenceCount); - encoder->EncodeUInt32Value(value.preferredMaxL1ReferenceCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265SessionParametersAddInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.stdVPSCount); - EncodeStructArray(encoder, value.pStdVPSs, value.stdVPSCount); - encoder->EncodeUInt32Value(value.stdSPSCount); - EncodeStructArray(encoder, value.pStdSPSs, value.stdSPSCount); - encoder->EncodeUInt32Value(value.stdPPSCount); - EncodeStructArray(encoder, value.pStdPPSs, value.stdPPSCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265SessionParametersCreateInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.maxStdVPSCount); - encoder->EncodeUInt32Value(value.maxStdSPSCount); - encoder->EncodeUInt32Value(value.maxStdPPSCount); - EncodeStructPtr(encoder, value.pParametersAddInfo); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265SessionParametersGetInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.writeStdVPS); - encoder->EncodeUInt32Value(value.writeStdSPS); - encoder->EncodeUInt32Value(value.writeStdPPS); - encoder->EncodeUInt32Value(value.stdVPSId); - encoder->EncodeUInt32Value(value.stdSPSId); - encoder->EncodeUInt32Value(value.stdPPSId); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265SessionParametersFeedbackInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.hasStdVPSOverrides); - encoder->EncodeUInt32Value(value.hasStdSPSOverrides); - encoder->EncodeUInt32Value(value.hasStdPPSOverrides); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265NaluSliceSegmentInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeInt32Value(value.constantQp); - EncodeStructPtr(encoder, value.pStdSliceSegmentHeader); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265PictureInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.naluSliceSegmentEntryCount); - EncodeStructArray(encoder, value.pNaluSliceSegmentEntries, value.naluSliceSegmentEntryCount); - EncodeStructPtr(encoder, value.pStdPictureInfo); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265DpbSlotInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - EncodeStructPtr(encoder, value.pStdReferenceInfo); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265ProfileInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.stdProfileIdc); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265RateControlInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - encoder->EncodeUInt32Value(value.gopFrameCount); - encoder->EncodeUInt32Value(value.idrPeriod); - encoder->EncodeUInt32Value(value.consecutiveBFrameCount); - encoder->EncodeUInt32Value(value.subLayerCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265FrameSizeKHR& value) -{ - encoder->EncodeUInt32Value(value.frameISize); - encoder->EncodeUInt32Value(value.framePSize); - encoder->EncodeUInt32Value(value.frameBSize); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265RateControlLayerInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.useMinQp); - EncodeStruct(encoder, value.minQp); - encoder->EncodeUInt32Value(value.useMaxQp); - EncodeStruct(encoder, value.maxQp); - encoder->EncodeUInt32Value(value.useMaxFrameSize); - EncodeStruct(encoder, value.maxFrameSize); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265GopRemainingFrameInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.useGopRemainingFrames); - encoder->EncodeUInt32Value(value.gopRemainingI); - encoder->EncodeUInt32Value(value.gopRemainingP); - encoder->EncodeUInt32Value(value.gopRemainingB); -} - void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH264ProfileInfoKHR& value) { encoder->EncodeEnumValue(value.sType); @@ -5466,14 +4798,14 @@ void EncodeStruct(ParameterEncoder* encoder, const VkExportMemoryWin32HandleInfo void EncodeStruct(ParameterEncoder* encoder, const VkMemoryWin32HandlePropertiesKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.memoryTypeBits); } void EncodeStruct(ParameterEncoder* encoder, const VkMemoryGetWin32HandleInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.memory); encoder->EncodeEnumValue(value.handleType); } @@ -5489,14 +4821,14 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImportMemoryFdInfoKHR& valu void EncodeStruct(ParameterEncoder* encoder, const VkMemoryFdPropertiesKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.memoryTypeBits); } void EncodeStruct(ParameterEncoder* encoder, const VkMemoryGetFdInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.memory); encoder->EncodeEnumValue(value.handleType); } @@ -5517,7 +4849,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkWin32KeyedMutexAcquireRelea void EncodeStruct(ParameterEncoder* encoder, const VkImportSemaphoreWin32HandleInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.semaphore); encoder->EncodeFlagsValue(value.flags); encoder->EncodeEnumValue(value.handleType); @@ -5547,7 +4879,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkD3D12FenceSubmitInfoKHR& va void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreGetWin32HandleInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.semaphore); encoder->EncodeEnumValue(value.handleType); } @@ -5555,7 +4887,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreGetWin32HandleInfo void EncodeStruct(ParameterEncoder* encoder, const VkImportSemaphoreFdInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.semaphore); encoder->EncodeFlagsValue(value.flags); encoder->EncodeEnumValue(value.handleType); @@ -5565,7 +4897,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImportSemaphoreFdInfoKHR& v void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreGetFdInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.semaphore); encoder->EncodeEnumValue(value.handleType); } @@ -5601,7 +4933,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkSharedPresentSurfaceCapabil void EncodeStruct(ParameterEncoder* encoder, const VkImportFenceWin32HandleInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.fence); encoder->EncodeFlagsValue(value.flags); encoder->EncodeEnumValue(value.handleType); @@ -5621,7 +4953,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkExportFenceWin32HandleInfoK void EncodeStruct(ParameterEncoder* encoder, const VkFenceGetWin32HandleInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.fence); encoder->EncodeEnumValue(value.handleType); } @@ -5629,7 +4961,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkFenceGetWin32HandleInfoKHR& void EncodeStruct(ParameterEncoder* encoder, const VkImportFenceFdInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.fence); encoder->EncodeFlagsValue(value.flags); encoder->EncodeEnumValue(value.handleType); @@ -5639,7 +4971,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImportFenceFdInfoKHR& value void EncodeStruct(ParameterEncoder* encoder, const VkFenceGetFdInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.fence); encoder->EncodeEnumValue(value.handleType); } @@ -5662,7 +4994,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePerformanceQu void EncodeStruct(ParameterEncoder* encoder, const VkPerformanceCounterKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.unit); encoder->EncodeEnumValue(value.scope); encoder->EncodeEnumValue(value.storage); @@ -5672,7 +5004,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPerformanceCounterKHR& valu void EncodeStruct(ParameterEncoder* encoder, const VkPerformanceCounterDescriptionKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeString(value.name); encoder->EncodeString(value.category); @@ -5691,7 +5023,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkQueryPoolPerformanceCreateI void EncodeStruct(ParameterEncoder* encoder, const VkAcquireProfilingLockInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeUInt64Value(value.timeout); } @@ -5727,14 +5059,14 @@ void EncodeStruct(ParameterEncoder* encoder, const VkSurfaceFormat2KHR& value) void EncodeStruct(ParameterEncoder* encoder, const VkDisplayProperties2KHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStruct(encoder, value.displayProperties); } void EncodeStruct(ParameterEncoder* encoder, const VkDisplayPlaneProperties2KHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStruct(encoder, value.displayPlaneProperties); } @@ -5748,7 +5080,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDisplayModeProperties2KHR& void EncodeStruct(ParameterEncoder* encoder, const VkDisplayPlaneInfo2KHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.mode); encoder->EncodeUInt32Value(value.planeIndex); } @@ -5756,7 +5088,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDisplayPlaneInfo2KHR& value void EncodeStruct(ParameterEncoder* encoder, const VkDisplayPlaneCapabilities2KHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStruct(encoder, value.capabilities); } @@ -5805,58 +5137,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderClockFe encoder->EncodeUInt32Value(value.shaderDeviceClock); } -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH265ProfileInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.stdProfileIdc); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH265CapabilitiesKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.maxLevelIdc); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH265SessionParametersAddInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.stdVPSCount); - EncodeStructArray(encoder, value.pStdVPSs, value.stdVPSCount); - encoder->EncodeUInt32Value(value.stdSPSCount); - EncodeStructArray(encoder, value.pStdSPSs, value.stdSPSCount); - encoder->EncodeUInt32Value(value.stdPPSCount); - EncodeStructArray(encoder, value.pStdPPSs, value.stdPPSCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH265SessionParametersCreateInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.maxStdVPSCount); - encoder->EncodeUInt32Value(value.maxStdSPSCount); - encoder->EncodeUInt32Value(value.maxStdPPSCount); - EncodeStructPtr(encoder, value.pParametersAddInfo); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH265PictureInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - EncodeStructPtr(encoder, value.pStdPictureInfo); - encoder->EncodeUInt32Value(value.sliceSegmentCount); - encoder->EncodeUInt32Array(value.pSliceSegmentOffsets, value.sliceSegmentCount); -} - -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH265DpbSlotInfoKHR& value) -{ - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - EncodeStructPtr(encoder, value.pStdReferenceInfo); -} - void EncodeStruct(ParameterEncoder* encoder, const VkFragmentShadingRateAttachmentInfoKHR& value) { encoder->EncodeEnumValue(value.sType); @@ -5908,7 +5188,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceFragmentShadi void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceFragmentShadingRateKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.sampleCounts); EncodeStruct(encoder, value.fragmentSize); } @@ -5953,14 +5233,14 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePipelineExecu void EncodeStruct(ParameterEncoder* encoder, const VkPipelineInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.pipeline); } void EncodeStruct(ParameterEncoder* encoder, const VkPipelineExecutablePropertiesKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.stages); encoder->EncodeString(value.name); encoder->EncodeString(value.description); @@ -5970,7 +5250,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineExecutablePropertie void EncodeStruct(ParameterEncoder* encoder, const VkPipelineExecutableInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.pipeline); encoder->EncodeUInt32Value(value.executableIndex); } @@ -5978,7 +5258,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineExecutableInfoKHR& void EncodeStruct(ParameterEncoder* encoder, const VkPipelineExecutableStatisticKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeString(value.name); encoder->EncodeString(value.description); encoder->EncodeEnumValue(value.format); @@ -5988,7 +5268,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineExecutableStatistic void EncodeStruct(ParameterEncoder* encoder, const VkPipelineExecutableInternalRepresentationKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeString(value.name); encoder->EncodeString(value.description); encoder->EncodeUInt32Value(value.isText); @@ -6088,7 +5368,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeRateControlInfoK void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStructPtr(encoder, value.pVideoProfile); encoder->EncodeUInt32Value(value.qualityLevel); } @@ -6179,6 +5459,13 @@ void EncodeStruct(ParameterEncoder* encoder, const VkTraceRaysIndirectCommand2KH encoder->EncodeUInt32Value(value.depth); } +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderUntypedPointersFeaturesKHR& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.shaderUntypedPointers); +} + void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR& value) { encoder->EncodeEnumValue(value.sType); @@ -6225,7 +5512,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePresentWait2F void EncodeStruct(ParameterEncoder* encoder, const VkPresentWait2InfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt64Value(value.presentId); encoder->EncodeUInt64Value(value.timeout); } @@ -6265,7 +5552,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDevicePipelineBinaryInterna void EncodeStruct(ParameterEncoder* encoder, const VkPipelineBinaryKeyKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.keySize); encoder->EncodeUInt8Array(value.key, VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR); } @@ -6286,13 +5573,13 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineBinaryKeysAndDataKH void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCreateInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); } void EncodeStruct(ParameterEncoder* encoder, const VkPipelineBinaryCreateInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStructPtr(encoder, value.pKeysAndDataInfo); encoder->EncodeVulkanHandleValue(value.pipeline); EncodeStructPtr(encoder, value.pPipelineCreateInfo); @@ -6309,21 +5596,21 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineBinaryInfoKHR& valu void EncodeStruct(ParameterEncoder* encoder, const VkReleaseCapturedPipelineDataInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.pipeline); } void EncodeStruct(ParameterEncoder* encoder, const VkPipelineBinaryDataInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.pipelineBinary); } void EncodeStruct(ParameterEncoder* encoder, const VkPipelineBinaryHandlesInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.pipelineBinaryCount); encoder->EncodeVulkanHandleArray(value.pPipelineBinaries, value.pipelineBinaryCount); } @@ -6397,7 +5684,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkSwapchainPresentScalingCrea void EncodeStruct(ParameterEncoder* encoder, const VkReleaseSwapchainImagesInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.swapchain); encoder->EncodeUInt32Value(value.imageIndexCount); encoder->EncodeUInt32Array(value.pImageIndices, value.imageIndexCount); @@ -6406,7 +5693,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkReleaseSwapchainImagesInfoK void EncodeStruct(ParameterEncoder* encoder, const VkCooperativeMatrixPropertiesKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.MSize); encoder->EncodeUInt32Value(value.NSize); encoder->EncodeUInt32Value(value.KSize); @@ -6730,6 +6017,67 @@ void EncodeStruct(ParameterEncoder* encoder, const VkBindDescriptorBufferEmbedde encoder->EncodeUInt32Value(value.set); } +void EncodeStruct(ParameterEncoder* encoder, const VkStridedDeviceAddressRangeKHR& value) +{ + encoder->EncodeUInt64Value(value.address); + encoder->EncodeUInt64Value(value.size); + encoder->EncodeUInt64Value(value.stride); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkCopyMemoryIndirectCommandKHR& value) +{ + encoder->EncodeUInt64Value(value.srcAddress); + encoder->EncodeUInt64Value(value.dstAddress); + encoder->EncodeUInt64Value(value.size); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkCopyMemoryIndirectInfoKHR& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlagsValue(value.srcCopyFlags); + encoder->EncodeFlagsValue(value.dstCopyFlags); + encoder->EncodeUInt32Value(value.copyCount); + EncodeStruct(encoder, value.copyAddressRange); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkCopyMemoryToImageIndirectCommandKHR& value) +{ + encoder->EncodeUInt64Value(value.srcAddress); + encoder->EncodeUInt32Value(value.bufferRowLength); + encoder->EncodeUInt32Value(value.bufferImageHeight); + EncodeStruct(encoder, value.imageSubresource); + EncodeStruct(encoder, value.imageOffset); + EncodeStruct(encoder, value.imageExtent); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkCopyMemoryToImageIndirectInfoKHR& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlagsValue(value.srcCopyFlags); + encoder->EncodeUInt32Value(value.copyCount); + EncodeStruct(encoder, value.copyAddressRange); + encoder->EncodeVulkanHandleValue(value.dstImage); + encoder->EncodeEnumValue(value.dstImageLayout); + EncodeStructArray(encoder, value.pImageSubresources, value.copyCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.indirectMemoryCopy); + encoder->EncodeUInt32Value(value.indirectMemoryToImageCopy); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeFlagsValue(value.supportedQueues); +} + void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeIntraRefreshCapabilitiesKHR& value) { encoder->EncodeEnumValue(value.sType); @@ -6897,6 +6245,14 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLayeredApiVul EncodeStruct(encoder, value.properties); } +void EncodeStruct(ParameterEncoder* encoder, const VkMemoryBarrierAccessFlags3KHR& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeFlags64Value(value.srcAccessMask3); + encoder->EncodeFlags64Value(value.dstAccessMask3); +} + void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance8FeaturesKHR& value) { encoder->EncodeEnumValue(value.sType); @@ -6904,12 +6260,13 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance8F encoder->EncodeUInt32Value(value.maintenance8); } -void EncodeStruct(ParameterEncoder* encoder, const VkMemoryBarrierAccessFlags3KHR& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderFmaFeaturesKHR& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlags64Value(value.srcAccessMask3); - encoder->EncodeFlags64Value(value.dstAccessMask3); + encoder->EncodeUInt32Value(value.shaderFmaFloat16); + encoder->EncodeUInt32Value(value.shaderFmaFloat32); + encoder->EncodeUInt32Value(value.shaderFmaFloat64); } void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance9FeaturesKHR& value) @@ -6934,66 +6291,73 @@ void EncodeStruct(ParameterEncoder* encoder, const VkQueueFamilyOwnershipTransfe encoder->EncodeUInt32Value(value.optimalImageTransferToQueueFamilies); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVideoMaintenance2FeaturesKHR& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.videoMaintenance2); + encoder->EncodeUInt32Value(value.depthClampZeroOne); } -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH264InlineSessionParametersInfoKHR& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRobustness2FeaturesKHR& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - EncodeStructPtr(encoder, value.pStdSPS); - EncodeStructPtr(encoder, value.pStdPPS); + encoder->EncodeUInt32Value(value.robustBufferAccess2); + encoder->EncodeUInt32Value(value.robustImageAccess2); + encoder->EncodeUInt32Value(value.nullDescriptor); } -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH265InlineSessionParametersInfoKHR& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRobustness2PropertiesKHR& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - EncodeStructPtr(encoder, value.pStdVPS); - EncodeStructPtr(encoder, value.pStdSPS); - EncodeStructPtr(encoder, value.pStdPPS); + encoder->EncodeUInt64Value(value.robustStorageBufferAccessSizeAlignment); + encoder->EncodeUInt64Value(value.robustUniformBufferAccessSizeAlignment); } -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeAV1InlineSessionParametersInfoKHR& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - EncodeStructPtr(encoder, value.pStdSequenceHeader); + encoder->EncodeUInt32Value(value.presentModeFifoLatestReady); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance10FeaturesKHR& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.depthClampZeroOne); + encoder->EncodeUInt32Value(value.maintenance10); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRobustness2FeaturesKHR& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance10PropertiesKHR& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.robustBufferAccess2); - encoder->EncodeUInt32Value(value.robustImageAccess2); - encoder->EncodeUInt32Value(value.nullDescriptor); + encoder->EncodeUInt32Value(value.rgba4OpaqueBlackSwizzled); + encoder->EncodeUInt32Value(value.resolveSrgbFormatAppliesTransferFunction); + encoder->EncodeUInt32Value(value.resolveSrgbFormatSupportsTransferFunctionControl); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRobustness2PropertiesKHR& value) +void EncodeStruct(ParameterEncoder* encoder, const VkRenderingEndInfoKHR& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt64Value(value.robustStorageBufferAccessSizeAlignment); - encoder->EncodeUInt64Value(value.robustUniformBufferAccessSizeAlignment); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR& value) +void EncodeStruct(ParameterEncoder* encoder, const VkRenderingAttachmentFlagsInfoKHR& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.presentModeFifoLatestReady); + encoder->EncodeFlagsValue(value.flags); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkResolveImageModeInfoKHR& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeEnumValue(value.resolveMode); + encoder->EncodeEnumValue(value.stencilResolveMode); } void EncodeStruct(ParameterEncoder* encoder, const VkDebugReportCallbackCreateInfoEXT& value) @@ -7015,7 +6379,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineRasterizationStateR void EncodeStruct(ParameterEncoder* encoder, const VkDebugMarkerObjectNameInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.objectType); encoder->EncodeUInt64Value(vulkan_wrappers::GetWrappedId(value.object, value.objectType)); encoder->EncodeString(value.pObjectName); @@ -7024,7 +6388,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDebugMarkerObjectNameInfoEX void EncodeStruct(ParameterEncoder* encoder, const VkDebugMarkerObjectTagInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.objectType); encoder->EncodeUInt64Value(vulkan_wrappers::GetWrappedId(value.object, value.objectType)); encoder->EncodeUInt64Value(value.tagName); @@ -7035,7 +6399,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDebugMarkerObjectTagInfoEXT void EncodeStruct(ParameterEncoder* encoder, const VkDebugMarkerMarkerInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeString(value.pMarkerName); encoder->EncodeFloatArray(value.color, 4); } @@ -7097,7 +6461,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineRasterizationStateS void EncodeStruct(ParameterEncoder* encoder, const VkImageViewHandleInfoNVX& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.imageView); encoder->EncodeEnumValue(value.descriptorType); encoder->EncodeVulkanHandleValue(value.sampler); @@ -7106,7 +6470,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImageViewHandleInfoNVX& val void EncodeStruct(ParameterEncoder* encoder, const VkImageViewAddressPropertiesNVX& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt64Value(value.deviceAddress); encoder->EncodeUInt64Value(value.size); } @@ -7141,7 +6505,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkShaderStatisticsInfoAMD& va void EncodeStruct(ParameterEncoder* encoder, const VkStreamDescriptorSurfaceCreateInfoGGP& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeUInt64Value(value.streamDescriptor); } @@ -7215,7 +6579,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkValidationFlagsEXT& value) void EncodeStruct(ParameterEncoder* encoder, const VkViSurfaceCreateInfoNN& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeVoidPtr(value.window); } @@ -7237,7 +6601,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceASTCDecodeFea void EncodeStruct(ParameterEncoder* encoder, const VkConditionalRenderingBeginInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.buffer); encoder->EncodeUInt64Value(value.offset); encoder->EncodeFlagsValue(value.flags); @@ -7276,7 +6640,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineViewportWScalingSta void EncodeStruct(ParameterEncoder* encoder, const VkSurfaceCapabilities2EXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.minImageCount); encoder->EncodeUInt32Value(value.maxImageCount); EncodeStruct(encoder, value.currentExtent); @@ -7293,21 +6657,21 @@ void EncodeStruct(ParameterEncoder* encoder, const VkSurfaceCapabilities2EXT& va void EncodeStruct(ParameterEncoder* encoder, const VkDisplayPowerInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.powerState); } void EncodeStruct(ParameterEncoder* encoder, const VkDeviceEventInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.deviceEvent); } void EncodeStruct(ParameterEncoder* encoder, const VkDisplayEventInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.displayEvent); } @@ -7464,7 +6828,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRelaxedLineRa void EncodeStruct(ParameterEncoder* encoder, const VkIOSSurfaceCreateInfoMVK& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeVoidPtr(value.pView); } @@ -7472,7 +6836,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkIOSSurfaceCreateInfoMVK& va void EncodeStruct(ParameterEncoder* encoder, const VkMacOSSurfaceCreateInfoMVK& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeVoidPtr(value.pView); } @@ -7480,7 +6844,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkMacOSSurfaceCreateInfoMVK& void EncodeStruct(ParameterEncoder* encoder, const VkDebugUtilsLabelEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeString(value.pLabelName); encoder->EncodeFloatArray(value.color, 4); } @@ -7524,7 +6888,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDebugUtilsMessengerCreateIn void EncodeStruct(ParameterEncoder* encoder, const VkDebugUtilsObjectTagInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.objectType); encoder->EncodeUInt64Value(vulkan_wrappers::GetWrappedId(value.objectHandle, value.objectType)); encoder->EncodeUInt64Value(value.tagName); @@ -7571,7 +6935,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImportAndroidHardwareBuffer void EncodeStruct(ParameterEncoder* encoder, const VkMemoryGetAndroidHardwareBufferInfoANDROID& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.memory); } @@ -7665,7 +7029,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSampleLocatio void EncodeStruct(ParameterEncoder* encoder, const VkMultisamplePropertiesEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStruct(encoder, value.maxSampleLocationGridSize); } @@ -7777,7 +7141,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImageDrmFormatModifierExpli void EncodeStruct(ParameterEncoder* encoder, const VkImageDrmFormatModifierPropertiesEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt64Value(value.drmFormatModifier); } @@ -7799,7 +7163,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDrmFormatModifierProperties void EncodeStruct(ParameterEncoder* encoder, const VkValidationCacheCreateInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeSizeTValue(value.initialDataSize); encoder->EncodeVoidArray(value.pInitialData, value.initialDataSize); @@ -7871,7 +7235,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineViewportCoarseSampl void EncodeStruct(ParameterEncoder* encoder, const VkRayTracingShaderGroupCreateInfoNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.type); encoder->EncodeUInt32Value(value.generalShader); encoder->EncodeUInt32Value(value.closestHitShader); @@ -7897,7 +7261,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkRayTracingPipelineCreateInf void EncodeStruct(ParameterEncoder* encoder, const VkGeometryTrianglesNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.vertexData); encoder->EncodeUInt64Value(value.vertexOffset); encoder->EncodeUInt32Value(value.vertexCount); @@ -7914,7 +7278,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkGeometryTrianglesNV& value) void EncodeStruct(ParameterEncoder* encoder, const VkGeometryAABBNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.aabbData); encoder->EncodeUInt32Value(value.numAABBs); encoder->EncodeUInt32Value(value.stride); @@ -7930,7 +7294,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkGeometryDataNV& value) void EncodeStruct(ParameterEncoder* encoder, const VkGeometryNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.geometryType); EncodeStruct(encoder, value.geometry); encoder->EncodeFlagsValue(value.flags); @@ -7939,7 +7303,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkGeometryNV& value) void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureInfoNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.type); encoder->EncodeFlagsValue(value.flags); encoder->EncodeUInt32Value(value.instanceCount); @@ -7958,7 +7322,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureCreate void EncodeStruct(ParameterEncoder* encoder, const VkBindAccelerationStructureMemoryInfoNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.accelerationStructure); encoder->EncodeVulkanHandleValue(value.memory); encoder->EncodeUInt64Value(value.memoryOffset); @@ -7977,7 +7341,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkWriteDescriptorSetAccelerat void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureMemoryRequirementsInfoNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.type); encoder->EncodeVulkanHandleValue(value.accelerationStructure); } @@ -8061,7 +7425,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImportMemoryHostPointerInfo void EncodeStruct(ParameterEncoder* encoder, const VkMemoryHostPointerPropertiesEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.memoryTypeBits); } @@ -8185,7 +7549,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkQueueFamilyCheckpointProper void EncodeStruct(ParameterEncoder* encoder, const VkCheckpointDataNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.stage); encoder->EncodeVoidPtr(value.pCheckpointMarker); } @@ -8200,11 +7564,112 @@ void EncodeStruct(ParameterEncoder* encoder, const VkQueueFamilyCheckpointProper void EncodeStruct(ParameterEncoder* encoder, const VkCheckpointData2NV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlags64Value(value.stage); encoder->EncodeVoidPtr(value.pCheckpointMarker); } +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePresentTimingFeaturesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.presentTiming); + encoder->EncodeUInt32Value(value.presentAtAbsoluteTime); + encoder->EncodeUInt32Value(value.presentAtRelativeTime); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPresentTimingSurfaceCapabilitiesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.presentTimingSupported); + encoder->EncodeUInt32Value(value.presentAtAbsoluteTimeSupported); + encoder->EncodeUInt32Value(value.presentAtRelativeTimeSupported); + encoder->EncodeFlagsValue(value.presentStageQueries); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkSwapchainCalibratedTimestampInfoEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.swapchain); + encoder->EncodeFlagsValue(value.presentStage); + encoder->EncodeUInt64Value(value.timeDomainId); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkSwapchainTimingPropertiesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeUInt64Value(value.refreshDuration); + encoder->EncodeUInt64Value(value.refreshInterval); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkSwapchainTimeDomainPropertiesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeUInt32Value(value.timeDomainCount); + encoder->EncodeEnumArray(value.pTimeDomains, value.timeDomainCount); + encoder->EncodeUInt64Array(value.pTimeDomainIds, value.timeDomainCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPastPresentationTimingInfoEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeVulkanHandleValue(value.swapchain); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPresentStageTimeEXT& value) +{ + encoder->EncodeFlagsValue(value.stage); + encoder->EncodeUInt64Value(value.time); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPastPresentationTimingEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeUInt64Value(value.presentId); + encoder->EncodeUInt64Value(value.targetTime); + encoder->EncodeUInt32Value(value.presentStageCount); + EncodeStructArray(encoder, value.pPresentStages, value.presentStageCount); + encoder->EncodeEnumValue(value.timeDomain); + encoder->EncodeUInt64Value(value.timeDomainId); + encoder->EncodeUInt32Value(value.reportComplete); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPastPresentationTimingPropertiesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeUInt64Value(value.timingPropertiesCounter); + encoder->EncodeUInt64Value(value.timeDomainsCounter); + encoder->EncodeUInt32Value(value.presentationTimingCount); + EncodeStructArray(encoder, value.pPresentationTimings, value.presentationTimingCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPresentTimingInfoEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeUInt64Value(value.targetTime); + encoder->EncodeUInt64Value(value.timeDomainId); + encoder->EncodeFlagsValue(value.presentStageQueries); + encoder->EncodeFlagsValue(value.targetTimeDomainPresentStage); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPresentTimingsInfoEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.swapchainCount); + EncodeStructArray(encoder, value.pTimingInfos, value.swapchainCount); +} + void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL& value) { encoder->EncodeEnumValue(value.sType); @@ -8215,7 +7680,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderInteger void EncodeStruct(ParameterEncoder* encoder, const VkInitializePerformanceApiInfoINTEL& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVoidPtr(value.pUserData); } @@ -8229,21 +7694,21 @@ void EncodeStruct(ParameterEncoder* encoder, const VkQueryPoolPerformanceQueryCr void EncodeStruct(ParameterEncoder* encoder, const VkPerformanceMarkerInfoINTEL& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt64Value(value.marker); } void EncodeStruct(ParameterEncoder* encoder, const VkPerformanceStreamMarkerInfoINTEL& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.marker); } void EncodeStruct(ParameterEncoder* encoder, const VkPerformanceOverrideInfoINTEL& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.type); encoder->EncodeUInt32Value(value.enable); encoder->EncodeUInt64Value(value.parameter); @@ -8252,7 +7717,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPerformanceOverrideInfoINTE void EncodeStruct(ParameterEncoder* encoder, const VkPerformanceConfigurationAcquireInfoINTEL& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.type); } @@ -8283,7 +7748,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkSwapchainDisplayNativeHdrCr void EncodeStruct(ParameterEncoder* encoder, const VkImagePipeSurfaceCreateInfoFUCHSIA& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeUInt32Value(value.imagePipeHandle); } @@ -8291,7 +7756,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImagePipeSurfaceCreateInfoF void EncodeStruct(ParameterEncoder* encoder, const VkMetalSurfaceCreateInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeVoidPtr(value.pLayer); } @@ -8410,7 +7875,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkValidationFeaturesEXT& valu void EncodeStruct(ParameterEncoder* encoder, const VkCooperativeMatrixPropertiesNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.MSize); encoder->EncodeUInt32Value(value.NSize); encoder->EncodeUInt32Value(value.KSize); @@ -8454,7 +7919,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCoverageReductionSt void EncodeStruct(ParameterEncoder* encoder, const VkFramebufferMixedSamplesCombinationNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.coverageReductionMode); encoder->EncodeEnumValue(value.rasterizationSamples); encoder->EncodeFlagsValue(value.depthStencilSamples); @@ -8524,7 +7989,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkSurfaceFullScreenExclusiveW void EncodeStruct(ParameterEncoder* encoder, const VkHeadlessSurfaceCreateInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); } @@ -8619,7 +8084,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDeviceGenerat void EncodeStruct(ParameterEncoder* encoder, const VkGraphicsShaderGroupCreateInfoNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.stageCount); EncodeStructArray(encoder, value.pStages, value.stageCount); EncodeStructPtr(encoder, value.pVertexInputState); @@ -8669,7 +8134,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkIndirectCommandsStreamNV& v void EncodeStruct(ParameterEncoder* encoder, const VkIndirectCommandsLayoutTokenNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.tokenType); encoder->EncodeUInt32Value(value.stream); encoder->EncodeUInt32Value(value.offset); @@ -8688,7 +8153,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkIndirectCommandsLayoutToken void EncodeStruct(ParameterEncoder* encoder, const VkIndirectCommandsLayoutCreateInfoNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeEnumValue(value.pipelineBindPoint); encoder->EncodeUInt32Value(value.tokenCount); @@ -8700,7 +8165,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkIndirectCommandsLayoutCreat void EncodeStruct(ParameterEncoder* encoder, const VkGeneratedCommandsInfoNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.pipelineBindPoint); encoder->EncodeVulkanHandleValue(value.pipeline); encoder->EncodeVulkanHandleValue(value.indirectCommandsLayout); @@ -8719,7 +8184,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkGeneratedCommandsInfoNV& va void EncodeStruct(ParameterEncoder* encoder, const VkGeneratedCommandsMemoryRequirementsInfoNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.pipelineBindPoint); encoder->EncodeVulkanHandleValue(value.pipeline); encoder->EncodeVulkanHandleValue(value.indirectCommandsLayout); @@ -8801,7 +8266,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDeviceMemoryR void EncodeStruct(ParameterEncoder* encoder, const VkDeviceMemoryReportCallbackDataEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeEnumValue(value.type); encoder->EncodeUInt64Value(value.memoryObjectId); @@ -8843,6 +8308,13 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceCustomBorderC encoder->EncodeUInt32Value(value.customBorderColorWithoutFormat); } +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.textureCompressionASTC_3D); +} + void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePresentBarrierFeaturesNV& value) { encoder->EncodeEnumValue(value.sType); @@ -8898,47 +8370,170 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTileShadingFe encoder->EncodeUInt32Value(value.tileShadingImageProcessing); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTileShadingPropertiesQCOM& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTileShadingPropertiesQCOM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.maxApronSize); + encoder->EncodeUInt32Value(value.preferNonCoherent); + EncodeStruct(encoder, value.tileGranularity); + EncodeStruct(encoder, value.maxTileShadingRate); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassTileShadingCreateInfoQCOM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + EncodeStruct(encoder, value.tileApronSize); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPerTileBeginInfoQCOM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPerTileEndInfoQCOM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDispatchTileInfoQCOM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkQueryLowLatencySupportNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeVoidPtr(value.pQueriedLowLatencyData); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDescriptorBufferPropertiesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.combinedImageSamplerDescriptorSingleArray); + encoder->EncodeUInt32Value(value.bufferlessPushDescriptors); + encoder->EncodeUInt32Value(value.allowSamplerImageViewPostSubmitCreation); + encoder->EncodeUInt64Value(value.descriptorBufferOffsetAlignment); + encoder->EncodeUInt32Value(value.maxDescriptorBufferBindings); + encoder->EncodeUInt32Value(value.maxResourceDescriptorBufferBindings); + encoder->EncodeUInt32Value(value.maxSamplerDescriptorBufferBindings); + encoder->EncodeUInt32Value(value.maxEmbeddedImmutableSamplerBindings); + encoder->EncodeUInt32Value(value.maxEmbeddedImmutableSamplers); + encoder->EncodeSizeTValue(value.bufferCaptureReplayDescriptorDataSize); + encoder->EncodeSizeTValue(value.imageCaptureReplayDescriptorDataSize); + encoder->EncodeSizeTValue(value.imageViewCaptureReplayDescriptorDataSize); + encoder->EncodeSizeTValue(value.samplerCaptureReplayDescriptorDataSize); + encoder->EncodeSizeTValue(value.accelerationStructureCaptureReplayDescriptorDataSize); + encoder->EncodeSizeTValue(value.samplerDescriptorSize); + encoder->EncodeSizeTValue(value.combinedImageSamplerDescriptorSize); + encoder->EncodeSizeTValue(value.sampledImageDescriptorSize); + encoder->EncodeSizeTValue(value.storageImageDescriptorSize); + encoder->EncodeSizeTValue(value.uniformTexelBufferDescriptorSize); + encoder->EncodeSizeTValue(value.robustUniformTexelBufferDescriptorSize); + encoder->EncodeSizeTValue(value.storageTexelBufferDescriptorSize); + encoder->EncodeSizeTValue(value.robustStorageTexelBufferDescriptorSize); + encoder->EncodeSizeTValue(value.uniformBufferDescriptorSize); + encoder->EncodeSizeTValue(value.robustUniformBufferDescriptorSize); + encoder->EncodeSizeTValue(value.storageBufferDescriptorSize); + encoder->EncodeSizeTValue(value.robustStorageBufferDescriptorSize); + encoder->EncodeSizeTValue(value.inputAttachmentDescriptorSize); + encoder->EncodeSizeTValue(value.accelerationStructureDescriptorSize); + encoder->EncodeUInt64Value(value.maxSamplerDescriptorBufferRange); + encoder->EncodeUInt64Value(value.maxResourceDescriptorBufferRange); + encoder->EncodeUInt64Value(value.samplerDescriptorBufferAddressSpaceSize); + encoder->EncodeUInt64Value(value.resourceDescriptorBufferAddressSpaceSize); + encoder->EncodeUInt64Value(value.descriptorBufferAddressSpaceSize); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeSizeTValue(value.combinedImageSamplerDensityMapDescriptorSize); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDescriptorBufferFeaturesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.descriptorBuffer); + encoder->EncodeUInt32Value(value.descriptorBufferCaptureReplay); + encoder->EncodeUInt32Value(value.descriptorBufferImageLayoutIgnored); + encoder->EncodeUInt32Value(value.descriptorBufferPushDescriptors); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorAddressInfoEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeUInt64Value(value.address); + encoder->EncodeUInt64Value(value.range); + encoder->EncodeEnumValue(value.format); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorBufferBindingInfoEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt64Value(value.address); + encoder->EncodeFlagsValue(value.usage); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorBufferBindingPushDescriptorBufferHandleEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.buffer); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkBufferCaptureDescriptorDataInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.maxApronSize); - encoder->EncodeUInt32Value(value.preferNonCoherent); - EncodeStruct(encoder, value.tileGranularity); - EncodeStruct(encoder, value.maxTileShadingRate); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.buffer); } -void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassTileShadingCreateInfoQCOM& value) +void EncodeStruct(ParameterEncoder* encoder, const VkImageCaptureDescriptorDataInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeFlagsValue(value.flags); - EncodeStruct(encoder, value.tileApronSize); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.image); } -void EncodeStruct(ParameterEncoder* encoder, const VkPerTileBeginInfoQCOM& value) +void EncodeStruct(ParameterEncoder* encoder, const VkImageViewCaptureDescriptorDataInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.imageView); } -void EncodeStruct(ParameterEncoder* encoder, const VkPerTileEndInfoQCOM& value) +void EncodeStruct(ParameterEncoder* encoder, const VkSamplerCaptureDescriptorDataInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.sampler); } -void EncodeStruct(ParameterEncoder* encoder, const VkDispatchTileInfoQCOM& value) +void EncodeStruct(ParameterEncoder* encoder, const VkOpaqueCaptureDescriptorDataCreateInfoEXT& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); + encoder->EncodeVoidPtr(value.opaqueCaptureDescriptorData); } -void EncodeStruct(ParameterEncoder* encoder, const VkQueryLowLatencySupportNV& value) +void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureCaptureDescriptorDataInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeVoidPtr(value.pQueriedLowLatencyData); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.accelerationStructure); + encoder->EncodeVulkanHandleValue(value.accelerationStructureNV); } void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT& value) @@ -9141,7 +8736,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceFaultFeatures void EncodeStruct(ParameterEncoder* encoder, const VkDeviceFaultCountsEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.addressInfoCount); encoder->EncodeUInt32Value(value.vendorInfoCount); encoder->EncodeUInt64Value(value.vendorBinarySize); @@ -9164,7 +8759,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDeviceFaultVendorInfoEXT& v void EncodeStruct(ParameterEncoder* encoder, const VkDeviceFaultInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeString(value.description); EncodeStructPtr(encoder, value.pAddressInfos); EncodeStructPtr(encoder, value.pVendorInfos); @@ -9205,7 +8800,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRGBA10X6Forma void EncodeStruct(ParameterEncoder* encoder, const VkDirectFBSurfaceCreateInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeVoidPtr(value.dfb); encoder->EncodeVoidPtr(value.surface); @@ -9242,7 +8837,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVertexInputDy void EncodeStruct(ParameterEncoder* encoder, const VkVertexInputBindingDescription2EXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.binding); encoder->EncodeUInt32Value(value.stride); encoder->EncodeEnumValue(value.inputRate); @@ -9252,7 +8847,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkVertexInputBindingDescripti void EncodeStruct(ParameterEncoder* encoder, const VkVertexInputAttributeDescription2EXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.location); encoder->EncodeUInt32Value(value.binding); encoder->EncodeEnumValue(value.format); @@ -9321,14 +8916,14 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImportMemoryZirconHandleInf void EncodeStruct(ParameterEncoder* encoder, const VkMemoryZirconHandlePropertiesFUCHSIA& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.memoryTypeBits); } void EncodeStruct(ParameterEncoder* encoder, const VkMemoryGetZirconHandleInfoFUCHSIA& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.memory); encoder->EncodeEnumValue(value.handleType); } @@ -9336,7 +8931,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkMemoryGetZirconHandleInfoFU void EncodeStruct(ParameterEncoder* encoder, const VkImportSemaphoreZirconHandleInfoFUCHSIA& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.semaphore); encoder->EncodeFlagsValue(value.flags); encoder->EncodeEnumValue(value.handleType); @@ -9346,7 +8941,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImportSemaphoreZirconHandle void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreGetZirconHandleInfoFUCHSIA& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.semaphore); encoder->EncodeEnumValue(value.handleType); } @@ -9361,7 +8956,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceInvocationMas void EncodeStruct(ParameterEncoder* encoder, const VkMemoryGetRemoteAddressInfoNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.memory); encoder->EncodeEnumValue(value.handleType); } @@ -9429,7 +9024,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExtendedDynam void EncodeStruct(ParameterEncoder* encoder, const VkScreenSurfaceCreateInfoQNX& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeVoidPtr(value.context); encoder->EncodeVoidPtr(value.window); @@ -9459,6 +9054,40 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePrimitivesGen encoder->EncodeUInt32Value(value.primitivesGeneratedQueryWithNonZeroStreams); } +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.videoEncodeRgbConversion); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeRgbConversionCapabilitiesVALVE& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeFlagsValue(value.rgbModels); + encoder->EncodeFlagsValue(value.rgbRanges); + encoder->EncodeFlagsValue(value.xChromaOffsets); + encoder->EncodeFlagsValue(value.yChromaOffsets); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeProfileRgbConversionInfoVALVE& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.performEncodeRgbConversion); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeSessionRgbConversionCreateInfoVALVE& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeEnumValue(value.rgbModel); + encoder->EncodeEnumValue(value.rgbRange); + encoder->EncodeEnumValue(value.xChromaOffset); + encoder->EncodeEnumValue(value.yChromaOffset); +} + void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceImageViewMinLodFeaturesEXT& value) { encoder->EncodeEnumValue(value.sType); @@ -9536,7 +9165,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkMicromapUsageEXT& value) void EncodeStruct(ParameterEncoder* encoder, const VkMicromapBuildInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.type); encoder->EncodeFlagsValue(value.flags); encoder->EncodeEnumValue(value.mode); @@ -9553,7 +9182,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkMicromapBuildInfoEXT& value void EncodeStruct(ParameterEncoder* encoder, const VkMicromapCreateInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.createFlags); encoder->EncodeVulkanHandleValue(value.buffer); encoder->EncodeUInt64Value(value.offset); @@ -9582,14 +9211,14 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceOpacityMicrom void EncodeStruct(ParameterEncoder* encoder, const VkMicromapVersionInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt8Array(value.pVersionData, 2*VK_UUID_SIZE); } void EncodeStruct(ParameterEncoder* encoder, const VkCopyMicromapToMemoryInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.src); EncodeStruct(encoder, value.dst); encoder->EncodeEnumValue(value.mode); @@ -9598,7 +9227,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkCopyMicromapToMemoryInfoEXT void EncodeStruct(ParameterEncoder* encoder, const VkCopyMemoryToMicromapInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStruct(encoder, value.src); encoder->EncodeVulkanHandleValue(value.dst); encoder->EncodeEnumValue(value.mode); @@ -9607,7 +9236,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkCopyMemoryToMicromapInfoEXT void EncodeStruct(ParameterEncoder* encoder, const VkCopyMicromapInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.src); encoder->EncodeVulkanHandleValue(value.dst); encoder->EncodeEnumValue(value.mode); @@ -9616,7 +9245,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkCopyMicromapInfoEXT& value) void EncodeStruct(ParameterEncoder* encoder, const VkMicromapBuildSizesInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt64Value(value.micromapSize); encoder->EncodeUInt64Value(value.buildScratchSize); encoder->EncodeUInt32Value(value.discardable); @@ -9782,7 +9411,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDescriptorSet void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetBindingReferenceVALVE& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.descriptorSetLayout); encoder->EncodeUInt32Value(value.binding); } @@ -9790,7 +9419,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetBindingReferen void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetLayoutHostMappingInfoVALVE& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeSizeTValue(value.descriptorOffset); encoder->EncodeUInt32Value(value.descriptorSize); } @@ -9820,7 +9449,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRenderPassStr void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassStripeInfoARM& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStruct(encoder, value.stripeArea); } @@ -9883,7 +9512,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkComputePipelineIndirectBuff void EncodeStruct(ParameterEncoder* encoder, const VkPipelineIndirectDeviceAddressInfoNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.pipelineBindPoint); encoder->EncodeVulkanHandleValue(value.pipeline); } @@ -10104,7 +9733,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassSubpassFeedbackCr void EncodeStruct(ParameterEncoder* encoder, const VkDirectDriverLoadingInfoLUNARG& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeFunctionPtr(value.pfnGetInstanceProcAddr); } @@ -10143,7 +9772,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineShaderStageModuleId void EncodeStruct(ParameterEncoder* encoder, const VkShaderModuleIdentifierEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.identifierSize); encoder->EncodeUInt8Array(value.identifier, VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT); } @@ -10182,7 +9811,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkOpticalFlowImageFormatInfoN void EncodeStruct(ParameterEncoder* encoder, const VkOpticalFlowImageFormatPropertiesNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.format); } @@ -10213,7 +9842,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkOpticalFlowSessionCreatePri void EncodeStruct(ParameterEncoder* encoder, const VkOpticalFlowExecuteInfoNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeFlagsValue(value.flags); encoder->EncodeUInt32Value(value.regionCount); EncodeStructArray(encoder, value.pRegions, value.regionCount); @@ -10259,7 +9888,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceAntiLagFeatur void EncodeStruct(ParameterEncoder* encoder, const VkAntiLagPresentationInfoAMD& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.stage); encoder->EncodeUInt64Value(value.frameIndex); } @@ -10267,7 +9896,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkAntiLagPresentationInfoAMD& void EncodeStruct(ParameterEncoder* encoder, const VkAntiLagDataAMD& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.mode); encoder->EncodeUInt32Value(value.maxFPS); EncodeStructPtr(encoder, value.pPresentationInfo); @@ -10322,7 +9951,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTilePropertie void EncodeStruct(ParameterEncoder* encoder, const VkTilePropertiesQCOM& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStruct(encoder, value.tileSize); EncodeStruct(encoder, value.apronSize); EncodeStruct(encoder, value.origin); @@ -10378,197 +10007,374 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceCooperativeVe { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.cooperativeVector); - encoder->EncodeUInt32Value(value.cooperativeVectorTraining); + encoder->EncodeUInt32Value(value.cooperativeVector); + encoder->EncodeUInt32Value(value.cooperativeVectorTraining); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkCooperativeVectorPropertiesNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeEnumValue(value.inputType); + encoder->EncodeEnumValue(value.inputInterpretation); + encoder->EncodeEnumValue(value.matrixInterpretation); + encoder->EncodeEnumValue(value.biasInterpretation); + encoder->EncodeEnumValue(value.resultType); + encoder->EncodeUInt32Value(value.transpose); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkConvertCooperativeVectorMatrixInfoNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeSizeTValue(value.srcSize); + EncodeStruct(encoder, value.srcData); + encoder->EncodeSizeTPtr(value.pDstSize); + EncodeStruct(encoder, value.dstData); + encoder->EncodeEnumValue(value.srcComponentType); + encoder->EncodeEnumValue(value.dstComponentType); + encoder->EncodeUInt32Value(value.numRows); + encoder->EncodeUInt32Value(value.numColumns); + encoder->EncodeEnumValue(value.srcLayout); + encoder->EncodeSizeTValue(value.srcStride); + encoder->EncodeEnumValue(value.dstLayout); + encoder->EncodeSizeTValue(value.dstStride); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.extendedSparseAddressSpace); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt64Value(value.extendedSparseAddressSpaceSize); + encoder->EncodeFlagsValue(value.extendedSparseImageUsageFlags); + encoder->EncodeFlagsValue(value.extendedSparseBufferUsageFlags); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.legacyVertexAttributes); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.nativeUnalignedPerformance); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkLayerSettingsCreateInfoEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.settingCount); + EncodeStructArray(encoder, value.pSettings, value.settingCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.shaderCoreBuiltins); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt64Value(value.shaderCoreMask); + encoder->EncodeUInt32Value(value.shaderCoreCount); + encoder->EncodeUInt32Value(value.shaderWarpsPerCore); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.pipelineLibraryGroupHandles); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.dynamicRenderingUnusedAttachments); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkLatencySleepModeInfoNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeUInt32Value(value.lowLatencyMode); + encoder->EncodeUInt32Value(value.lowLatencyBoost); + encoder->EncodeUInt32Value(value.minimumIntervalUs); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkLatencySleepInfoNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.signalSemaphore); + encoder->EncodeUInt64Value(value.value); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkSetLatencyMarkerInfoNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeUInt64Value(value.presentID); + encoder->EncodeEnumValue(value.marker); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkLatencyTimingsFrameReportNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeUInt64Value(value.presentID); + encoder->EncodeUInt64Value(value.inputSampleTimeUs); + encoder->EncodeUInt64Value(value.simStartTimeUs); + encoder->EncodeUInt64Value(value.simEndTimeUs); + encoder->EncodeUInt64Value(value.renderSubmitStartTimeUs); + encoder->EncodeUInt64Value(value.renderSubmitEndTimeUs); + encoder->EncodeUInt64Value(value.presentStartTimeUs); + encoder->EncodeUInt64Value(value.presentEndTimeUs); + encoder->EncodeUInt64Value(value.driverStartTimeUs); + encoder->EncodeUInt64Value(value.driverEndTimeUs); + encoder->EncodeUInt64Value(value.osRenderQueueStartTimeUs); + encoder->EncodeUInt64Value(value.osRenderQueueEndTimeUs); + encoder->EncodeUInt64Value(value.gpuRenderStartTimeUs); + encoder->EncodeUInt64Value(value.gpuRenderEndTimeUs); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkGetLatencyMarkerInfoNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeUInt32Value(value.timingCount); + EncodeStructArray(encoder, value.pTimings, value.timingCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkLatencySubmissionPresentIdNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt64Value(value.presentID); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkSwapchainLatencyCreateInfoNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.latencyModeEnable); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkOutOfBandQueueTypeInfoNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeEnumValue(value.queueType); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkLatencySurfaceCapabilitiesNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.presentModeCount); + encoder->EncodeEnumArray(value.pPresentModes, value.presentModeCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDataGraphFeaturesARM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.dataGraph); + encoder->EncodeUInt32Value(value.dataGraphUpdateAfterBind); + encoder->EncodeUInt32Value(value.dataGraphSpecializationConstants); + encoder->EncodeUInt32Value(value.dataGraphDescriptorBuffer); + encoder->EncodeUInt32Value(value.dataGraphShaderModule); } -void EncodeStruct(ParameterEncoder* encoder, const VkCooperativeVectorPropertiesNV& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineConstantARM& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.inputType); - encoder->EncodeEnumValue(value.inputInterpretation); - encoder->EncodeEnumValue(value.matrixInterpretation); - encoder->EncodeEnumValue(value.biasInterpretation); - encoder->EncodeEnumValue(value.resultType); - encoder->EncodeUInt32Value(value.transpose); + encoder->EncodeUInt32Value(value.id); + encoder->EncodeVoidPtr(value.pConstantData); } -void EncodeStruct(ParameterEncoder* encoder, const VkConvertCooperativeVectorMatrixInfoNV& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineResourceInfoARM& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeSizeTValue(value.srcSize); - EncodeStruct(encoder, value.srcData); - encoder->EncodeSizeTPtr(value.pDstSize); - EncodeStruct(encoder, value.dstData); - encoder->EncodeEnumValue(value.srcComponentType); - encoder->EncodeEnumValue(value.dstComponentType); - encoder->EncodeUInt32Value(value.numRows); - encoder->EncodeUInt32Value(value.numColumns); - encoder->EncodeEnumValue(value.srcLayout); - encoder->EncodeSizeTValue(value.srcStride); - encoder->EncodeEnumValue(value.dstLayout); - encoder->EncodeSizeTValue(value.dstStride); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeUInt32Value(value.descriptorSet); + encoder->EncodeUInt32Value(value.binding); + encoder->EncodeUInt32Value(value.arrayElement); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineCompilerControlCreateInfoARM& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.extendedSparseAddressSpace); + encoder->EncodeString(value.pVendorOptions); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineCreateInfoARM& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt64Value(value.extendedSparseAddressSpaceSize); - encoder->EncodeFlagsValue(value.extendedSparseImageUsageFlags); - encoder->EncodeFlagsValue(value.extendedSparseBufferUsageFlags); + encoder->EncodeFlags64Value(value.flags); + encoder->EncodeVulkanHandleValue(value.layout); + encoder->EncodeUInt32Value(value.resourceInfoCount); + EncodeStructArray(encoder, value.pResourceInfos, value.resourceInfoCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineShaderModuleCreateInfoARM& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.legacyVertexAttributes); + encoder->EncodeVulkanHandleValue(value.module); + encoder->EncodeString(value.pName); + EncodeStructPtr(encoder, value.pSpecializationInfo); + encoder->EncodeUInt32Value(value.constantCount); + EncodeStructArray(encoder, value.pConstants, value.constantCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineSessionCreateInfoARM& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.nativeUnalignedPerformance); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlags64Value(value.flags); + encoder->EncodeVulkanHandleValue(value.dataGraphPipeline); } -void EncodeStruct(ParameterEncoder* encoder, const VkLayerSettingEXT& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineSessionBindPointRequirementsInfoARM& value) { - encoder->EncodeString(value.pLayerName); - encoder->EncodeString(value.pSettingName); - encoder->EncodeEnumValue(value.type); - encoder->EncodeUInt32Value(value.valueCount); - encoder->EncodeVoidArray(value.pValues, value.valueCount); + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.session); } -void EncodeStruct(ParameterEncoder* encoder, const VkLayerSettingsCreateInfoEXT& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineSessionBindPointRequirementARM& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.settingCount); - EncodeStructArray(encoder, value.pSettings, value.settingCount); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeEnumValue(value.bindPoint); + encoder->EncodeEnumValue(value.bindPointType); + encoder->EncodeUInt32Value(value.numObjects); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineSessionMemoryRequirementsInfoARM& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.shaderCoreBuiltins); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.session); + encoder->EncodeEnumValue(value.bindPoint); + encoder->EncodeUInt32Value(value.objectIndex); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM& value) +void EncodeStruct(ParameterEncoder* encoder, const VkBindDataGraphPipelineSessionMemoryInfoARM& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt64Value(value.shaderCoreMask); - encoder->EncodeUInt32Value(value.shaderCoreCount); - encoder->EncodeUInt32Value(value.shaderWarpsPerCore); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.session); + encoder->EncodeEnumValue(value.bindPoint); + encoder->EncodeUInt32Value(value.objectIndex); + encoder->EncodeVulkanHandleValue(value.memory); + encoder->EncodeUInt64Value(value.memoryOffset); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineInfoARM& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.pipelineLibraryGroupHandles); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeVulkanHandleValue(value.dataGraphPipeline); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelinePropertyQueryResultARM& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.dynamicRenderingUnusedAttachments); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeEnumValue(value.property); + encoder->EncodeUInt32Value(value.isText); + encoder->EncodeSizeTValue(value.dataSize); + encoder->EncodeVoidArray(value.pData, value.dataSize); } -void EncodeStruct(ParameterEncoder* encoder, const VkLatencySleepModeInfoNV& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineIdentifierCreateInfoARM& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.lowLatencyMode); - encoder->EncodeUInt32Value(value.lowLatencyBoost); - encoder->EncodeUInt32Value(value.minimumIntervalUs); + encoder->EncodeUInt32Value(value.identifierSize); + encoder->EncodeUInt8Array(value.pIdentifier, value.identifierSize); } -void EncodeStruct(ParameterEncoder* encoder, const VkLatencySleepInfoNV& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineDispatchInfoARM& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeVulkanHandleValue(value.signalSemaphore); - encoder->EncodeUInt64Value(value.value); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlags64Value(value.flags); } -void EncodeStruct(ParameterEncoder* encoder, const VkSetLatencyMarkerInfoNV& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDataGraphProcessingEngineARM& value) { - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt64Value(value.presentID); - encoder->EncodeEnumValue(value.marker); + encoder->EncodeEnumValue(value.type); + encoder->EncodeUInt32Value(value.isForeign); } -void EncodeStruct(ParameterEncoder* encoder, const VkLatencyTimingsFrameReportNV& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDataGraphOperationSupportARM& value) { - encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt64Value(value.presentID); - encoder->EncodeUInt64Value(value.inputSampleTimeUs); - encoder->EncodeUInt64Value(value.simStartTimeUs); - encoder->EncodeUInt64Value(value.simEndTimeUs); - encoder->EncodeUInt64Value(value.renderSubmitStartTimeUs); - encoder->EncodeUInt64Value(value.renderSubmitEndTimeUs); - encoder->EncodeUInt64Value(value.presentStartTimeUs); - encoder->EncodeUInt64Value(value.presentEndTimeUs); - encoder->EncodeUInt64Value(value.driverStartTimeUs); - encoder->EncodeUInt64Value(value.driverEndTimeUs); - encoder->EncodeUInt64Value(value.osRenderQueueStartTimeUs); - encoder->EncodeUInt64Value(value.osRenderQueueEndTimeUs); - encoder->EncodeUInt64Value(value.gpuRenderStartTimeUs); - encoder->EncodeUInt64Value(value.gpuRenderEndTimeUs); + encoder->EncodeEnumValue(value.operationType); + encoder->EncodeString(value.name); + encoder->EncodeUInt32Value(value.version); } -void EncodeStruct(ParameterEncoder* encoder, const VkGetLatencyMarkerInfoNV& value) +void EncodeStruct(ParameterEncoder* encoder, const VkQueueFamilyDataGraphPropertiesARM& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.timingCount); - EncodeStructArray(encoder, value.pTimings, value.timingCount); + EncodePNextStructIfValid(encoder, value.pNext); + EncodeStruct(encoder, value.engine); + EncodeStruct(encoder, value.operation); } -void EncodeStruct(ParameterEncoder* encoder, const VkLatencySubmissionPresentIdNV& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphProcessingEngineCreateInfoARM& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt64Value(value.presentID); + encoder->EncodeUInt32Value(value.processingEngineCount); + EncodeStructArray(encoder, value.pProcessingEngines, value.processingEngineCount); } -void EncodeStruct(ParameterEncoder* encoder, const VkSwapchainLatencyCreateInfoNV& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.latencyModeEnable); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeUInt32Value(value.queueFamilyIndex); + encoder->EncodeEnumValue(value.engineType); } -void EncodeStruct(ParameterEncoder* encoder, const VkOutOfBandQueueTypeInfoNV& value) +void EncodeStruct(ParameterEncoder* encoder, const VkQueueFamilyDataGraphProcessingEnginePropertiesARM& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); - encoder->EncodeEnumValue(value.queueType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlagsValue(value.foreignSemaphoreHandleTypes); + encoder->EncodeFlagsValue(value.foreignMemoryHandleTypes); } -void EncodeStruct(ParameterEncoder* encoder, const VkLatencySurfaceCapabilitiesNV& value) +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.presentModeCount); - encoder->EncodeEnumArray(value.pPresentModes, value.presentModeCount); + encoder->EncodeUInt32Value(value.dimension); + encoder->EncodeUInt32Value(value.zeroCount); + encoder->EncodeUInt32Value(value.groupSize); } void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM& value) @@ -10717,6 +10523,38 @@ void EncodeStruct(ParameterEncoder* encoder, const VkTileMemorySizeInfoQCOM& val encoder->EncodeUInt64Value(value.size); } +void EncodeStruct(ParameterEncoder* encoder, const VkDecompressMemoryRegionEXT& value) +{ + encoder->EncodeUInt64Value(value.srcAddress); + encoder->EncodeUInt64Value(value.dstAddress); + encoder->EncodeUInt64Value(value.compressedSize); + encoder->EncodeUInt64Value(value.decompressedSize); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDecompressMemoryInfoEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlags64Value(value.decompressionMethod); + encoder->EncodeUInt32Value(value.regionCount); + EncodeStructArray(encoder, value.pRegions, value.regionCount); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMemoryDecompressionFeaturesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.memoryDecompression); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMemoryDecompressionPropertiesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeFlags64Value(value.decompressionMethods); + encoder->EncodeUInt64Value(value.maxDecompressionIndirectCount); +} + void EncodeStruct(ParameterEncoder* encoder, const VkDisplaySurfaceStereoCreateInfoNV& value) { encoder->EncodeEnumValue(value.sType); @@ -10856,7 +10694,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPartitionedAccelerationStru void EncodeStruct(ParameterEncoder* encoder, const VkBuildPartitionedAccelerationStructureInfoNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStruct(encoder, value.input); encoder->EncodeUInt64Value(value.srcAccelerationStructureData); encoder->EncodeUInt64Value(value.dstAccelerationStructureData); @@ -10868,7 +10706,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkBuildPartitionedAcceleratio void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureBuildSizesInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt64Value(value.accelerationStructureSize); encoder->EncodeUInt64Value(value.updateScratchSize); encoder->EncodeUInt64Value(value.buildScratchSize); @@ -10913,7 +10751,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkGeneratedCommandsMemoryRequ void EncodeStruct(ParameterEncoder* encoder, const VkIndirectExecutionSetPipelineInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.initialPipeline); encoder->EncodeUInt32Value(value.maxPipelineCount); } @@ -10921,7 +10759,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkIndirectExecutionSetPipelin void EncodeStruct(ParameterEncoder* encoder, const VkIndirectExecutionSetShaderLayoutInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.setLayoutCount); encoder->EncodeVulkanHandleArray(value.pSetLayouts, value.setLayoutCount); } @@ -10929,7 +10767,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkIndirectExecutionSetShaderL void EncodeStruct(ParameterEncoder* encoder, const VkIndirectExecutionSetShaderInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.shaderCount); encoder->EncodeVulkanHandleArray(value.pInitialShaders, value.shaderCount); EncodeStructArray(encoder, value.pSetLayoutInfos, value.shaderCount); @@ -10957,7 +10795,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkGeneratedCommandsInfoEXT& v void EncodeStruct(ParameterEncoder* encoder, const VkWriteIndirectExecutionSetPipelineEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.index); encoder->EncodeVulkanHandleValue(value.pipeline); } @@ -11034,7 +10872,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkGeneratedCommandsShaderInfo void EncodeStruct(ParameterEncoder* encoder, const VkWriteIndirectExecutionSetShaderEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.index); encoder->EncodeVulkanHandleValue(value.shader); } @@ -11060,6 +10898,21 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImageAlignmentControlCreate encoder->EncodeUInt32Value(value.maximumRequestedAlignment); } +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeEnumValue(value.rayTracingInvocationReorderReorderingHint); + encoder->EncodeUInt32Value(value.maxShaderBindingTableRecordIndex); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.rayTracingInvocationReorder); +} + void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDepthClampControlFeaturesEXT& value) { encoder->EncodeEnumValue(value.sType); @@ -11093,7 +10946,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkHdrVividDynamicMetadataHUAW void EncodeStruct(ParameterEncoder* encoder, const VkCooperativeMatrixFlexibleDimensionsPropertiesNV& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.MGranularity); encoder->EncodeUInt32Value(value.NGranularity); encoder->EncodeUInt32Value(value.KGranularity); @@ -11146,18 +10999,62 @@ void EncodeStruct(ParameterEncoder* encoder, const VkImportMemoryMetalHandleInfo void EncodeStruct(ParameterEncoder* encoder, const VkMemoryMetalHandlePropertiesEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.memoryTypeBits); } void EncodeStruct(ParameterEncoder* encoder, const VkMemoryGetMetalHandleInfoEXT& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.memory); encoder->EncodeEnumValue(value.handleType); } +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePerformanceCountersByRegionFeaturesARM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.performanceCountersByRegion); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePerformanceCountersByRegionPropertiesARM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.maxPerRegionPerformanceCounters); + EncodeStruct(encoder, value.performanceCounterRegionSize); + encoder->EncodeUInt32Value(value.rowStrideAlignment); + encoder->EncodeUInt32Value(value.regionAlignment); + encoder->EncodeUInt32Value(value.identityTransformOrder); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPerformanceCounterARM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeUInt32Value(value.counterID); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPerformanceCounterDescriptionARM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFlagsValue(value.flags); + encoder->EncodeString(value.name); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassPerformanceCountersByRegionBeginInfoARM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.counterAddressCount); + encoder->EncodeUInt64Ptr(value.pCounterAddresses); + encoder->EncodeUInt32Value(value.serializeRegions); + encoder->EncodeUInt32Value(value.counterIndexCount); + encoder->EncodeUInt32Ptr(value.pCounterIndices); +} + void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT& value) { encoder->EncodeEnumValue(value.sType); @@ -11208,17 +11105,79 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePresentMeteri encoder->EncodeUInt32Value(value.presentMetering); } -void EncodeStruct(ParameterEncoder* encoder, const VkRenderingEndInfoEXT& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.zeroInitializeDeviceMemory); } -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT& value) +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShader64BitIndexingFeaturesEXT& value) { encoder->EncodeEnumValue(value.sType); EncodePNextStruct(encoder, value.pNext); - encoder->EncodeUInt32Value(value.zeroInitializeDeviceMemory); + encoder->EncodeUInt32Value(value.shader64BitIndexing); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceCustomResolveFeaturesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.customResolve); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkBeginCustomResolveInfoEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkCustomResolveCreateInfoEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.customResolve); + encoder->EncodeUInt32Value(value.colorAttachmentCount); + encoder->EncodeEnumArray(value.pColorAttachmentFormats, value.colorAttachmentCount); + encoder->EncodeEnumValue(value.depthAttachmentFormat); + encoder->EncodeEnumValue(value.stencilAttachmentFormat); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCacheHeaderVersionDataGraphQCOM& value) +{ + encoder->EncodeUInt32Value(value.headerSize); + encoder->EncodeEnumValue(value.headerVersion); + encoder->EncodeEnumValue(value.cacheType); + encoder->EncodeUInt32Value(value.cacheVersion); + encoder->EncodeUInt32Array(value.toolchainVersion, VK_DATA_GRAPH_MODEL_TOOLCHAIN_VERSION_LENGTH_QCOM); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineBuiltinModelCreateInfoQCOM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + EncodeStructPtr(encoder, value.pOperation); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDataGraphModelFeaturesQCOM& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.dataGraphModel); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderLongVectorFeaturesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.longVector); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderLongVectorPropertiesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.maxVectorComponents); } void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC& value) @@ -11228,6 +11187,28 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePipelineCache encoder->EncodeUInt32Value(value.pipelineCacheIncrementalMode); } +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.shaderUniformBufferUnsizedArray); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkComputeOccupancyPriorityParametersNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStructIfValid(encoder, value.pNext); + encoder->EncodeFloatValue(value.occupancyPriority); + encoder->EncodeFloatValue(value.occupancyThrottling); +} + +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV& value) +{ + encoder->EncodeEnumValue(value.sType); + EncodePNextStruct(encoder, value.pNext); + encoder->EncodeUInt32Value(value.computeOccupancyPriority); +} + void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureBuildRangeInfoKHR& value) { encoder->EncodeUInt32Value(value.primitiveCount); @@ -11252,7 +11233,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureGeomet void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureGeometryAabbsDataKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStruct(encoder, value.data); encoder->EncodeUInt64Value(value.stride); } @@ -11260,7 +11241,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureGeomet void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureGeometryInstancesDataKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.arrayOfPointers); EncodeStruct(encoder, value.data); } @@ -11268,7 +11249,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureGeomet void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureBuildGeometryInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.type); encoder->EncodeFlagsValue(value.flags); encoder->EncodeEnumValue(value.mode); @@ -11328,21 +11309,21 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceAccelerationS void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureDeviceAddressInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.accelerationStructure); } void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureVersionInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt8Array(value.pVersionData, 2*VK_UUID_SIZE); } void EncodeStruct(ParameterEncoder* encoder, const VkCopyAccelerationStructureToMemoryInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.src); EncodeStruct(encoder, value.dst); encoder->EncodeEnumValue(value.mode); @@ -11351,7 +11332,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkCopyAccelerationStructureTo void EncodeStruct(ParameterEncoder* encoder, const VkCopyMemoryToAccelerationStructureInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); EncodeStruct(encoder, value.src); encoder->EncodeVulkanHandleValue(value.dst); encoder->EncodeEnumValue(value.mode); @@ -11360,7 +11341,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkCopyMemoryToAccelerationStr void EncodeStruct(ParameterEncoder* encoder, const VkCopyAccelerationStructureInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeVulkanHandleValue(value.src); encoder->EncodeVulkanHandleValue(value.dst); encoder->EncodeEnumValue(value.mode); @@ -11369,7 +11350,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkCopyAccelerationStructureIn void EncodeStruct(ParameterEncoder* encoder, const VkRayTracingShaderGroupCreateInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeEnumValue(value.type); encoder->EncodeUInt32Value(value.generalShader); encoder->EncodeUInt32Value(value.closestHitShader); @@ -11381,7 +11362,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkRayTracingShaderGroupCreate void EncodeStruct(ParameterEncoder* encoder, const VkRayTracingPipelineInterfaceCreateInfoKHR& value) { encoder->EncodeEnumValue(value.sType); - EncodePNextStruct(encoder, value.pNext); + EncodePNextStructIfValid(encoder, value.pNext); encoder->EncodeUInt32Value(value.maxPipelineRayPayloadSize); encoder->EncodeUInt32Value(value.maxPipelineRayHitAttributeSize); } diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_encoders.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_encoders.h index 190ee68cd..d914358b0 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_encoders.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_encoders.h @@ -72,40 +72,6 @@ void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH264ReferenceLi void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH264PictureInfo& value); void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH264ReferenceInfo& value); void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH264SliceHeader& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265ProfileTierLevelFlags& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265ProfileTierLevel& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265DecPicBufMgr& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265SubLayerHrdParameters& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265HrdFlags& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265HrdParameters& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265VpsFlags& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265VideoParameterSet& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265ScalingLists& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265ShortTermRefPicSetFlags& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265ShortTermRefPicSet& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265LongTermRefPicsSps& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265SpsVuiFlags& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265SequenceParameterSetVui& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265PredictorPaletteEntries& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265SpsFlags& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265SequenceParameterSet& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265PpsFlags& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoH265PictureParameterSet& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoDecodeH265PictureInfoFlags& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoDecodeH265PictureInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoDecodeH265ReferenceInfoFlags& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoDecodeH265ReferenceInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265WeightTableFlags& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265WeightTable& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265LongTermRefPics& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265SliceSegmentHeaderFlags& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265SliceSegmentHeader& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265ReferenceListsInfoFlags& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265ReferenceListsInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265PictureInfoFlags& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265PictureInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265ReferenceInfoFlags& value); -void EncodeStruct(ParameterEncoder* encoder, const StdVideoEncodeH265ReferenceInfo& value); void EncodeStruct(ParameterEncoder* encoder, const StdVideoVP9ColorConfigFlags& value); void EncodeStruct(ParameterEncoder* encoder, const StdVideoVP9ColorConfig& value); void EncodeStruct(ParameterEncoder* encoder, const StdVideoVP9LoopFilterFlags& value); @@ -150,13 +116,9 @@ void EncodeStruct(ParameterEncoder* encoder, const VkOffset2D& value); void EncodeStruct(ParameterEncoder* encoder, const VkOffset3D& value); void EncodeStruct(ParameterEncoder* encoder, const VkRect2D& value); void EncodeStruct(ParameterEncoder* encoder, const VkBufferMemoryBarrier& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDispatchIndirectCommand& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDrawIndexedIndirectCommand& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDrawIndirectCommand& value); void EncodeStruct(ParameterEncoder* encoder, const VkImageSubresourceRange& value); void EncodeStruct(ParameterEncoder* encoder, const VkImageMemoryBarrier& value); void EncodeStruct(ParameterEncoder* encoder, const VkMemoryBarrier& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCacheHeaderVersionOne& value); void EncodeStruct(ParameterEncoder* encoder, const VkAllocationCallbacks& value); void EncodeStruct(ParameterEncoder* encoder, const VkApplicationInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkFormatProperties& value); @@ -189,20 +151,42 @@ void EncodeStruct(ParameterEncoder* encoder, const VkSparseImageFormatProperties void EncodeStruct(ParameterEncoder* encoder, const VkSparseImageMemoryRequirements& value); void EncodeStruct(ParameterEncoder* encoder, const VkFenceCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkEventCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkQueryPoolCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkBufferCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkBufferViewCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkImageCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkSubresourceLayout& value); void EncodeStruct(ParameterEncoder* encoder, const VkComponentMapping& value); void EncodeStruct(ParameterEncoder* encoder, const VkImageViewCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkCommandPoolCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferAllocateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferInheritanceInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferBeginInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkBufferCopy& value); +void EncodeStruct(ParameterEncoder* encoder, const VkImageSubresourceLayers& value); +void EncodeStruct(ParameterEncoder* encoder, const VkBufferImageCopy& value); +void EncodeStruct(ParameterEncoder* encoder, const VkImageCopy& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDispatchIndirectCommand& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCacheHeaderVersionOne& value); +void EncodeStruct(ParameterEncoder* encoder, const VkEventCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkBufferViewCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkShaderModuleCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCacheCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkSpecializationMapEntry& value); void EncodeStruct(ParameterEncoder* encoder, const VkSpecializationInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPipelineShaderStageCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkComputePipelineCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPushConstantRange& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineLayoutCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSamplerCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkCopyDescriptorSet& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorBufferInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorPoolSize& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorPoolCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetAllocateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetLayoutBinding& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetLayoutCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDrawIndexedIndirectCommand& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDrawIndirectCommand& value); void EncodeStruct(ParameterEncoder* encoder, const VkVertexInputBindingDescription& value); void EncodeStruct(ParameterEncoder* encoder, const VkVertexInputAttributeDescription& value); void EncodeStruct(ParameterEncoder* encoder, const VkPipelineVertexInputStateCreateInfo& value); @@ -218,44 +202,23 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPipelineColorBlendAttachmen void EncodeStruct(ParameterEncoder* encoder, const VkPipelineColorBlendStateCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPipelineDynamicStateCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkGraphicsPipelineCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPushConstantRange& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineLayoutCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkSamplerCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkCopyDescriptorSet& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorBufferInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorPoolSize& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorPoolCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetAllocateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetLayoutBinding& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetLayoutCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentDescription& value); void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentReference& value); void EncodeStruct(ParameterEncoder* encoder, const VkFramebufferCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkSubpassDescription& value); void EncodeStruct(ParameterEncoder* encoder, const VkSubpassDependency& value); void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkCommandPoolCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferAllocateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferInheritanceInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferBeginInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkBufferCopy& value); -void EncodeStruct(ParameterEncoder* encoder, const VkImageSubresourceLayers& value); -void EncodeStruct(ParameterEncoder* encoder, const VkBufferImageCopy& value); void EncodeStruct(ParameterEncoder* encoder, const VkClearDepthStencilValue& value); void EncodeStruct(ParameterEncoder* encoder, const VkClearAttachment& value); void EncodeStruct(ParameterEncoder* encoder, const VkClearRect& value); void EncodeStruct(ParameterEncoder* encoder, const VkImageBlit& value); -void EncodeStruct(ParameterEncoder* encoder, const VkImageCopy& value); void EncodeStruct(ParameterEncoder* encoder, const VkImageResolve& value); void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassBeginInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSubgroupProperties& value); void EncodeStruct(ParameterEncoder* encoder, const VkBindBufferMemoryInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkBindImageMemoryInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevice16BitStorageFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkMemoryDedicatedRequirements& value); void EncodeStruct(ParameterEncoder* encoder, const VkMemoryDedicatedAllocateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkMemoryAllocateFlagsInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDeviceGroupRenderPassBeginInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkDeviceGroupCommandBufferBeginInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkDeviceGroupSubmitInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkDeviceGroupBindSparseInfo& value); @@ -277,27 +240,13 @@ void EncodeStruct(ParameterEncoder* encoder, const VkQueueFamilyProperties2& val void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMemoryProperties2& value); void EncodeStruct(ParameterEncoder* encoder, const VkSparseImageFormatProperties2& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSparseImageFormatInfo2& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePointClippingProperties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkInputAttachmentAspectReference& value); -void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassInputAttachmentAspectCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkImageViewUsageCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineTessellationDomainOriginStateCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassMultiviewCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMultiviewFeatures& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMultiviewProperties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVariablePointersFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceProtectedMemoryFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceProtectedMemoryProperties& value); void EncodeStruct(ParameterEncoder* encoder, const VkDeviceQueueInfo2& value); void EncodeStruct(ParameterEncoder* encoder, const VkProtectedSubmitInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkSamplerYcbcrConversionCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkSamplerYcbcrConversionInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkBindImagePlaneMemoryInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkImagePlaneMemoryRequirementsInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSamplerYcbcrConversionFeatures& value); -void EncodeStruct(ParameterEncoder* encoder, const VkSamplerYcbcrConversionImageFormatProperties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorUpdateTemplateEntry& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorUpdateTemplateCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkExternalMemoryProperties& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExternalImageFormatInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkExternalImageFormatProperties& value); @@ -313,8 +262,25 @@ void EncodeStruct(ParameterEncoder* encoder, const VkExportFenceCreateInfo& valu void EncodeStruct(ParameterEncoder* encoder, const VkExportSemaphoreCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExternalSemaphoreInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkExternalSemaphoreProperties& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSubgroupProperties& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevice16BitStorageFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVariablePointersFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorUpdateTemplateEntry& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorUpdateTemplateCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance3Properties& value); void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetLayoutSupport& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSamplerYcbcrConversionCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSamplerYcbcrConversionInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSamplerYcbcrConversionFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSamplerYcbcrConversionImageFormatProperties& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDeviceGroupRenderPassBeginInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePointClippingProperties& value); +void EncodeStruct(ParameterEncoder* encoder, const VkInputAttachmentAspectReference& value); +void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassInputAttachmentAspectCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineTessellationDomainOriginStateCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassMultiviewCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMultiviewFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMultiviewProperties& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderDrawParametersFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkan11Features& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkan11Properties& value); @@ -322,15 +288,21 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkan12Featu void EncodeStruct(ParameterEncoder* encoder, const VkConformanceVersion& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkan12Properties& value); void EncodeStruct(ParameterEncoder* encoder, const VkImageFormatListCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentDescription2& value); -void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentReference2& value); -void EncodeStruct(ParameterEncoder* encoder, const VkSubpassDescription2& value); -void EncodeStruct(ParameterEncoder* encoder, const VkSubpassDependency2& value); -void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassCreateInfo2& value); -void EncodeStruct(ParameterEncoder* encoder, const VkSubpassBeginInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkSubpassEndInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevice8BitStorageFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDriverProperties& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkanMemoryModelFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceHostQueryResetFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTimelineSemaphoreFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTimelineSemaphoreProperties& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreTypeCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkTimelineSemaphoreSubmitInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreWaitInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreSignalInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceBufferDeviceAddressFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkBufferDeviceAddressInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkBufferOpaqueCaptureAddressCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkMemoryOpaqueCaptureAddressAllocateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDeviceMemoryOpaqueCaptureAddressInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevice8BitStorageFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderAtomicInt64Features& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderFloat16Int8Features& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceFloatControlsProperties& value); @@ -339,45 +311,34 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDescriptorInd void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDescriptorIndexingProperties& value); void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetVariableDescriptorCountAllocateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorSetVariableDescriptorCountLayoutSupport& value); -void EncodeStruct(ParameterEncoder* encoder, const VkSubpassDescriptionDepthStencilResolve& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDepthStencilResolveProperties& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceScalarBlockLayoutFeatures& value); -void EncodeStruct(ParameterEncoder* encoder, const VkImageStencilUsageCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkSamplerReductionModeCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSamplerFilterMinmaxProperties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkanMemoryModelFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceUniformBufferStandardLayoutFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentDescription2& value); +void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentReference2& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSubpassDescription2& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSubpassDependency2& value); +void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassCreateInfo2& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSubpassBeginInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSubpassEndInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSubpassDescriptionDepthStencilResolve& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDepthStencilResolveProperties& value); +void EncodeStruct(ParameterEncoder* encoder, const VkImageStencilUsageCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceImagelessFramebufferFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkFramebufferAttachmentImageInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkFramebufferAttachmentsCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassAttachmentBeginInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceUniformBufferStandardLayoutFeatures& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentReferenceStencilLayout& value); void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentDescriptionStencilLayout& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceHostQueryResetFeatures& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTimelineSemaphoreFeatures& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTimelineSemaphoreProperties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreTypeCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkTimelineSemaphoreSubmitInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreWaitInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreSignalInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceBufferDeviceAddressFeatures& value); -void EncodeStruct(ParameterEncoder* encoder, const VkBufferDeviceAddressInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkBufferOpaqueCaptureAddressCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkMemoryOpaqueCaptureAddressAllocateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDeviceMemoryOpaqueCaptureAddressInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkan13Features& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkan13Properties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCreationFeedback& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCreationFeedbackCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderTerminateInvocationFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceToolProperties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePrivateDataFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkDevicePrivateDataCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPrivateDataSlotCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePipelineCreationCacheControlFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkMemoryBarrier2& value); void EncodeStruct(ParameterEncoder* encoder, const VkBufferMemoryBarrier2& value); void EncodeStruct(ParameterEncoder* encoder, const VkImageMemoryBarrier2& value); @@ -386,8 +347,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkSemaphoreSubmitInfo& value) void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferSubmitInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkSubmitInfo2& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSynchronization2Features& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceImageRobustnessFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkBufferCopy2& value); void EncodeStruct(ParameterEncoder* encoder, const VkCopyBufferInfo2& value); void EncodeStruct(ParameterEncoder* encoder, const VkImageCopy2& value); @@ -395,10 +354,19 @@ void EncodeStruct(ParameterEncoder* encoder, const VkCopyImageInfo2& value); void EncodeStruct(ParameterEncoder* encoder, const VkBufferImageCopy2& value); void EncodeStruct(ParameterEncoder* encoder, const VkCopyBufferToImageInfo2& value); void EncodeStruct(ParameterEncoder* encoder, const VkCopyImageToBufferInfo2& value); -void EncodeStruct(ParameterEncoder* encoder, const VkImageBlit2& value); -void EncodeStruct(ParameterEncoder* encoder, const VkBlitImageInfo2& value); -void EncodeStruct(ParameterEncoder* encoder, const VkImageResolve2& value); -void EncodeStruct(ParameterEncoder* encoder, const VkResolveImageInfo2& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTextureCompressionASTCHDRFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkFormatProperties3& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance4Features& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance4Properties& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDeviceBufferMemoryRequirements& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDeviceImageMemoryRequirements& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCreationFeedback& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCreationFeedbackCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderTerminateInvocationFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePipelineCreationCacheControlFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceImageRobustnessFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSubgroupSizeControlFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceSubgroupSizeControlProperties& value); void EncodeStruct(ParameterEncoder* encoder, const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo& value); @@ -406,53 +374,46 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceInlineUniform void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceInlineUniformBlockProperties& value); void EncodeStruct(ParameterEncoder* encoder, const VkWriteDescriptorSetInlineUniformBlock& value); void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorPoolInlineUniformBlockCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTextureCompressionASTCHDRFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderIntegerDotProductFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderIntegerDotProductProperties& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTexelBufferAlignmentProperties& value); +void EncodeStruct(ParameterEncoder* encoder, const VkImageBlit2& value); +void EncodeStruct(ParameterEncoder* encoder, const VkBlitImageInfo2& value); +void EncodeStruct(ParameterEncoder* encoder, const VkImageResolve2& value); +void EncodeStruct(ParameterEncoder* encoder, const VkResolveImageInfo2& value); void EncodeStruct(ParameterEncoder* encoder, const VkRenderingAttachmentInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkRenderingInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPipelineRenderingCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDynamicRenderingFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkCommandBufferInheritanceRenderingInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderIntegerDotProductFeatures& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderIntegerDotProductProperties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTexelBufferAlignmentProperties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkFormatProperties3& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance4Features& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance4Properties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDeviceBufferMemoryRequirements& value); -void EncodeStruct(ParameterEncoder* encoder, const VkDeviceImageMemoryRequirements& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkan14Features& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVulkan14Properties& value); void EncodeStruct(ParameterEncoder* encoder, const VkDeviceQueueGlobalPriorityCreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceGlobalPriorityQueryFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkQueueFamilyGlobalPriorityProperties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderSubgroupRotateFeatures& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderFloatControls2Features& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderExpectAssumeFeatures& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLineRasterizationFeatures& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLineRasterizationProperties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineRasterizationLineStateCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVertexAttributeDivisorProperties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVertexInputBindingDivisorDescription& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineVertexInputDivisorStateCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVertexAttributeDivisorFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceIndexTypeUint8Features& value); void EncodeStruct(ParameterEncoder* encoder, const VkMemoryMapInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkMemoryUnmapInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance5Features& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance5Properties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkRenderingAreaInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkImageSubresource2& value); void EncodeStruct(ParameterEncoder* encoder, const VkDeviceImageSubresourceInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkSubresourceLayout2& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCreateFlags2CreateInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkBufferUsageFlags2CreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePushDescriptorProperties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDynamicRenderingLocalReadFeatures& value); -void EncodeStruct(ParameterEncoder* encoder, const VkRenderingAttachmentLocationInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkRenderingInputAttachmentIndexInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance6Features& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance6Properties& value); void EncodeStruct(ParameterEncoder* encoder, const VkBindMemoryStatus& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceHostImageCopyFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceHostImageCopyProperties& value); +void EncodeStruct(ParameterEncoder* encoder, const VkCopyImageToImageInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkHostImageLayoutTransitionInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSubresourceHostMemcpySize& value); +void EncodeStruct(ParameterEncoder* encoder, const VkHostImageCopyDevicePerformanceQuery& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderSubgroupRotateFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderFloatControls2Features& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderExpectAssumeFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCreateFlags2CreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePushDescriptorProperties& value); void EncodeStruct(ParameterEncoder* encoder, const VkBindDescriptorSetsInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPushConstantsInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkPushDescriptorSetInfo& value); @@ -460,12 +421,17 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePipelineProte void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePipelineRobustnessFeatures& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePipelineRobustnessProperties& value); void EncodeStruct(ParameterEncoder* encoder, const VkPipelineRobustnessCreateInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceHostImageCopyFeatures& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceHostImageCopyProperties& value); -void EncodeStruct(ParameterEncoder* encoder, const VkCopyImageToImageInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkHostImageLayoutTransitionInfo& value); -void EncodeStruct(ParameterEncoder* encoder, const VkSubresourceHostMemcpySize& value); -void EncodeStruct(ParameterEncoder* encoder, const VkHostImageCopyDevicePerformanceQuery& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLineRasterizationFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLineRasterizationProperties& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineRasterizationLineStateCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVertexAttributeDivisorProperties& value); +void EncodeStruct(ParameterEncoder* encoder, const VkVertexInputBindingDivisorDescription& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineVertexInputDivisorStateCreateInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVertexAttributeDivisorFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkRenderingAreaInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDynamicRenderingLocalReadFeatures& value); +void EncodeStruct(ParameterEncoder* encoder, const VkRenderingAttachmentLocationInfo& value); +void EncodeStruct(ParameterEncoder* encoder, const VkRenderingInputAttachmentIndexInfo& value); void EncodeStruct(ParameterEncoder* encoder, const VkSurfaceCapabilitiesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkSurfaceFormatKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkSwapchainCreateInfoKHR& value); @@ -525,22 +491,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH264RateControlI void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH264FrameSizeKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH264RateControlLayerInfoKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH264GopRemainingFrameInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265CapabilitiesKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265SessionCreateInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265QpKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265QualityLevelPropertiesKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265SessionParametersAddInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265SessionParametersCreateInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265SessionParametersGetInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265SessionParametersFeedbackInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265NaluSliceSegmentInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265PictureInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265DpbSlotInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265ProfileInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265RateControlInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265FrameSizeKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265RateControlLayerInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeH265GopRemainingFrameInfoKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH264ProfileInfoKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH264CapabilitiesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH264SessionParametersAddInfoKHR& value); @@ -589,12 +539,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderBfloat1 void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePortabilitySubsetFeaturesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePortabilitySubsetPropertiesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderClockFeaturesKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH265ProfileInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH265CapabilitiesKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH265SessionParametersAddInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH265SessionParametersCreateInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH265PictureInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH265DpbSlotInfoKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkFragmentShadingRateAttachmentInfoKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPipelineFragmentShadingRateStateCreateInfoKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceFragmentShadingRateFeaturesKHR& value); @@ -630,6 +574,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderSubgrou void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkTraceRaysIndirectCommand2KHR& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderUntypedPointersFeaturesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkSurfaceCapabilitiesPresentId2KHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPresentId2KHR& value); @@ -693,6 +638,13 @@ void EncodeStruct(ParameterEncoder* encoder, const VkAttachmentFeedbackLoopInfoE void EncodeStruct(ParameterEncoder* encoder, const VkCalibratedTimestampInfoKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkSetDescriptorBufferOffsetsInfoEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkBindDescriptorBufferEmbeddedSamplersInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkStridedDeviceAddressRangeKHR& value); +void EncodeStruct(ParameterEncoder* encoder, const VkCopyMemoryIndirectCommandKHR& value); +void EncodeStruct(ParameterEncoder* encoder, const VkCopyMemoryIndirectInfoKHR& value); +void EncodeStruct(ParameterEncoder* encoder, const VkCopyMemoryToImageIndirectCommandKHR& value); +void EncodeStruct(ParameterEncoder* encoder, const VkCopyMemoryToImageIndirectInfoKHR& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeIntraRefreshCapabilitiesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeSessionIntraRefreshCreateInfoKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeIntraRefreshInfoKHR& value); @@ -714,19 +666,21 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance7P void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLayeredApiPropertiesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLayeredApiPropertiesListKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLayeredApiVulkanPropertiesKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance8FeaturesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkMemoryBarrierAccessFlags3KHR& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance8FeaturesKHR& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderFmaFeaturesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance9FeaturesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance9PropertiesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkQueueFamilyOwnershipTransferPropertiesKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVideoMaintenance2FeaturesKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH264InlineSessionParametersInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeH265InlineSessionParametersInfoKHR& value); -void EncodeStruct(ParameterEncoder* encoder, const VkVideoDecodeAV1InlineSessionParametersInfoKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRobustness2FeaturesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRobustness2PropertiesKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance10FeaturesKHR& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMaintenance10PropertiesKHR& value); +void EncodeStruct(ParameterEncoder* encoder, const VkRenderingEndInfoKHR& value); +void EncodeStruct(ParameterEncoder* encoder, const VkRenderingAttachmentFlagsInfoKHR& value); +void EncodeStruct(ParameterEncoder* encoder, const VkResolveImageModeInfoKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkDebugReportCallbackCreateInfoEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPipelineRasterizationStateRasterizationOrderAMD& value); void EncodeStruct(ParameterEncoder* encoder, const VkDebugMarkerObjectNameInfoEXT& value); @@ -866,6 +820,17 @@ void EncodeStruct(ParameterEncoder* encoder, const VkQueueFamilyCheckpointProper void EncodeStruct(ParameterEncoder* encoder, const VkCheckpointDataNV& value); void EncodeStruct(ParameterEncoder* encoder, const VkQueueFamilyCheckpointProperties2NV& value); void EncodeStruct(ParameterEncoder* encoder, const VkCheckpointData2NV& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePresentTimingFeaturesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPresentTimingSurfaceCapabilitiesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSwapchainCalibratedTimestampInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSwapchainTimingPropertiesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSwapchainTimeDomainPropertiesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPastPresentationTimingInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPresentStageTimeEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPastPresentationTimingEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPastPresentationTimingPropertiesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPresentTimingInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPresentTimingsInfoEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL& value); void EncodeStruct(ParameterEncoder* encoder, const VkInitializePerformanceApiInfoINTEL& value); void EncodeStruct(ParameterEncoder* encoder, const VkQueryPoolPerformanceQueryCreateInfoINTEL& value); @@ -940,6 +905,7 @@ void EncodeStruct(ParameterEncoder* encoder, const VkDeviceDeviceMemoryReportCre void EncodeStruct(ParameterEncoder* encoder, const VkSamplerCustomBorderColorCreateInfoEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceCustomBorderColorPropertiesEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceCustomBorderColorFeaturesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePresentBarrierFeaturesNV& value); void EncodeStruct(ParameterEncoder* encoder, const VkSurfaceCapabilitiesPresentBarrierNV& value); void EncodeStruct(ParameterEncoder* encoder, const VkSwapchainPresentBarrierCreateInfoNV& value); @@ -952,6 +918,18 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPerTileBeginInfoQCOM& value void EncodeStruct(ParameterEncoder* encoder, const VkPerTileEndInfoQCOM& value); void EncodeStruct(ParameterEncoder* encoder, const VkDispatchTileInfoQCOM& value); void EncodeStruct(ParameterEncoder* encoder, const VkQueryLowLatencySupportNV& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDescriptorBufferPropertiesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDescriptorBufferFeaturesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorAddressInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorBufferBindingInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDescriptorBufferBindingPushDescriptorBufferHandleEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkBufferCaptureDescriptorDataInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkImageCaptureDescriptorDataInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkImageViewCaptureDescriptorDataInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkSamplerCaptureDescriptorDataInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkOpaqueCaptureDescriptorDataCreateInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureCaptureDescriptorDataInfoEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkGraphicsPipelineLibraryCreateInfoEXT& value); @@ -1013,6 +991,10 @@ void EncodeStruct(ParameterEncoder* encoder, const VkScreenSurfaceCreateInfoQNX& void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceColorWriteEnableFeaturesEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPipelineColorWriteCreateInfoEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE& value); +void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeRgbConversionCapabilitiesVALVE& value); +void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeProfileRgbConversionInfoVALVE& value); +void EncodeStruct(ParameterEncoder* encoder, const VkVideoEncodeSessionRgbConversionCreateInfoVALVE& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceImageViewMinLodFeaturesEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkImageViewMinLodCreateInfoEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMultiDrawFeaturesEXT& value); @@ -1125,7 +1107,6 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExtendedSpars void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT& value); -void EncodeStruct(ParameterEncoder* encoder, const VkLayerSettingEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkLayerSettingsCreateInfoEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM& value); @@ -1140,6 +1121,28 @@ void EncodeStruct(ParameterEncoder* encoder, const VkLatencySubmissionPresentIdN void EncodeStruct(ParameterEncoder* encoder, const VkSwapchainLatencyCreateInfoNV& value); void EncodeStruct(ParameterEncoder* encoder, const VkOutOfBandQueueTypeInfoNV& value); void EncodeStruct(ParameterEncoder* encoder, const VkLatencySurfaceCapabilitiesNV& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDataGraphFeaturesARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineConstantARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineResourceInfoARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineCompilerControlCreateInfoARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineCreateInfoARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineShaderModuleCreateInfoARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineSessionCreateInfoARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineSessionBindPointRequirementsInfoARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineSessionBindPointRequirementARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineSessionMemoryRequirementsInfoARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkBindDataGraphPipelineSessionMemoryInfoARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineInfoARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelinePropertyQueryResultARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineIdentifierCreateInfoARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineDispatchInfoARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDataGraphProcessingEngineARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDataGraphOperationSupportARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkQueueFamilyDataGraphPropertiesARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphProcessingEngineCreateInfoARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkQueueFamilyDataGraphProcessingEnginePropertiesARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM& value); void EncodeStruct(ParameterEncoder* encoder, const VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePerStageDescriptorSetFeaturesNV& value); @@ -1160,6 +1163,10 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceTileMemoryHea void EncodeStruct(ParameterEncoder* encoder, const VkTileMemoryRequirementsQCOM& value); void EncodeStruct(ParameterEncoder* encoder, const VkTileMemoryBindInfoQCOM& value); void EncodeStruct(ParameterEncoder* encoder, const VkTileMemorySizeInfoQCOM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDecompressMemoryRegionEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDecompressMemoryInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMemoryDecompressionFeaturesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceMemoryDecompressionPropertiesEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkDisplaySurfaceStereoCreateInfoNV& value); void EncodeStruct(ParameterEncoder* encoder, const VkDisplayModeStereoPropertiesNV& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRawAccessChainsFeaturesNV& value); @@ -1202,6 +1209,8 @@ void EncodeStruct(ParameterEncoder* encoder, const VkWriteIndirectExecutionSetSh void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceImageAlignmentControlFeaturesMESA& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceImageAlignmentControlPropertiesMESA& value); void EncodeStruct(ParameterEncoder* encoder, const VkImageAlignmentControlCreateInfoMESA& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDepthClampControlFeaturesEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPipelineViewportDepthClampControlCreateInfoEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceHdrVividFeaturesHUAWEI& value); @@ -1213,6 +1222,11 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePipelineOpaci void EncodeStruct(ParameterEncoder* encoder, const VkImportMemoryMetalHandleInfoEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkMemoryMetalHandlePropertiesEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkMemoryGetMetalHandleInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePerformanceCountersByRegionFeaturesARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePerformanceCountersByRegionPropertiesARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPerformanceCounterARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPerformanceCounterDescriptionARM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkRenderPassPerformanceCountersByRegionBeginInfoARM& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceFormatPackFeaturesARM& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE& value); @@ -1220,9 +1234,20 @@ void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceFragmentDensi void EncodeStruct(ParameterEncoder* encoder, const VkPipelineFragmentDensityMapLayeredCreateInfoVALVE& value); void EncodeStruct(ParameterEncoder* encoder, const VkSetPresentConfigNV& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePresentMeteringFeaturesNV& value); -void EncodeStruct(ParameterEncoder* encoder, const VkRenderingEndInfoEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShader64BitIndexingFeaturesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceCustomResolveFeaturesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkBeginCustomResolveInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkCustomResolveCreateInfoEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPipelineCacheHeaderVersionDataGraphQCOM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkDataGraphPipelineBuiltinModelCreateInfoQCOM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceDataGraphModelFeaturesQCOM& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderLongVectorFeaturesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderLongVectorPropertiesEXT& value); void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT& value); +void EncodeStruct(ParameterEncoder* encoder, const VkComputeOccupancyPriorityParametersNV& value); +void EncodeStruct(ParameterEncoder* encoder, const VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV& value); void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureBuildRangeInfoKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureGeometryTrianglesDataKHR& value); void EncodeStruct(ParameterEncoder* encoder, const VkAccelerationStructureGeometryAabbsDataKHR& value); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_mappers.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_mappers.cpp index b52ac894c..b53c72bf9 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_mappers.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_mappers.cpp @@ -190,16 +190,6 @@ void MapStructHandles(Decoded_VkBindSparseInfo* wrapper, const CommonObjectInfoT } } -void MapStructHandles(Decoded_VkBufferViewCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table) -{ - if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) - { - VkBufferViewCreateInfo* value = wrapper->decoded_value; - - value->buffer = handle_mapping::MapHandle(wrapper->buffer, object_info_table, &CommonObjectInfoTable::GetVkBufferInfo); - } -} - void MapStructHandles(Decoded_VkImageCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table) { if (wrapper != nullptr) @@ -226,68 +216,92 @@ void MapStructHandles(Decoded_VkImageViewCreateInfo* wrapper, const CommonObject } } -void MapStructHandles(Decoded_VkShaderModuleCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table) +void MapStructHandles(Decoded_VkCommandBufferAllocateInfo* wrapper, const CommonObjectInfoTable& object_info_table) { - if (wrapper != nullptr) + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkCommandBufferAllocateInfo* value = wrapper->decoded_value; + + value->commandPool = handle_mapping::MapHandle(wrapper->commandPool, object_info_table, &CommonObjectInfoTable::GetVkCommandPoolInfo); + } +} + +void MapStructHandles(Decoded_VkCommandBufferInheritanceInfo* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) { + VkCommandBufferInheritanceInfo* value = wrapper->decoded_value; + if (wrapper->pNext) { MapPNextStructHandles(wrapper->pNext, object_info_table); } + + value->renderPass = handle_mapping::MapHandle(wrapper->renderPass, object_info_table, &CommonObjectInfoTable::GetVkRenderPassInfo); + + value->framebuffer = handle_mapping::MapHandle(wrapper->framebuffer, object_info_table, &CommonObjectInfoTable::GetVkFramebufferInfo); } } -void MapStructHandles(Decoded_VkPipelineShaderStageCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table) +void MapStructHandles(Decoded_VkCommandBufferBeginInfo* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if (wrapper != nullptr) + { + MapStructArrayHandles(wrapper->pInheritanceInfo->GetMetaStructPointer(), 1, object_info_table); + } +} + +void MapStructHandles(Decoded_VkBufferViewCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) { - VkPipelineShaderStageCreateInfo* value = wrapper->decoded_value; + VkBufferViewCreateInfo* value = wrapper->decoded_value; + + value->buffer = handle_mapping::MapHandle(wrapper->buffer, object_info_table, &CommonObjectInfoTable::GetVkBufferInfo); + } +} +void MapStructHandles(Decoded_VkShaderModuleCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if (wrapper != nullptr) + { if (wrapper->pNext) { MapPNextStructHandles(wrapper->pNext, object_info_table); } - - value->module = handle_mapping::MapHandle(wrapper->module, object_info_table, &CommonObjectInfoTable::GetVkShaderModuleInfo); } } -void MapStructHandles(Decoded_VkComputePipelineCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table) +void MapStructHandles(Decoded_VkPipelineShaderStageCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) { - VkComputePipelineCreateInfo* value = wrapper->decoded_value; + VkPipelineShaderStageCreateInfo* value = wrapper->decoded_value; if (wrapper->pNext) { MapPNextStructHandles(wrapper->pNext, object_info_table); } - MapStructHandles(wrapper->stage, object_info_table); - - value->layout = handle_mapping::MapHandle(wrapper->layout, object_info_table, &CommonObjectInfoTable::GetVkPipelineLayoutInfo); - - value->basePipelineHandle = handle_mapping::MapHandle(wrapper->basePipelineHandle, object_info_table, &CommonObjectInfoTable::GetVkPipelineInfo); + value->module = handle_mapping::MapHandle(wrapper->module, object_info_table, &CommonObjectInfoTable::GetVkShaderModuleInfo); } } -void MapStructHandles(Decoded_VkGraphicsPipelineCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table) +void MapStructHandles(Decoded_VkComputePipelineCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) { - VkGraphicsPipelineCreateInfo* value = wrapper->decoded_value; + VkComputePipelineCreateInfo* value = wrapper->decoded_value; if (wrapper->pNext) { MapPNextStructHandles(wrapper->pNext, object_info_table); } - MapStructArrayHandles(wrapper->pStages->GetMetaStructPointer(), wrapper->pStages->GetLength(), object_info_table); + MapStructHandles(wrapper->stage, object_info_table); value->layout = handle_mapping::MapHandle(wrapper->layout, object_info_table, &CommonObjectInfoTable::GetVkPipelineLayoutInfo); - value->renderPass = handle_mapping::MapHandle(wrapper->renderPass, object_info_table, &CommonObjectInfoTable::GetVkRenderPassInfo); - value->basePipelineHandle = handle_mapping::MapHandle(wrapper->basePipelineHandle, object_info_table, &CommonObjectInfoTable::GetVkPipelineInfo); } } @@ -365,50 +379,36 @@ void MapStructHandles(Decoded_VkDescriptorSetLayoutCreateInfo* wrapper, const Co } } -void MapStructHandles(Decoded_VkFramebufferCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table) -{ - if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) - { - VkFramebufferCreateInfo* value = wrapper->decoded_value; - - value->renderPass = handle_mapping::MapHandle(wrapper->renderPass, object_info_table, &CommonObjectInfoTable::GetVkRenderPassInfo); - - value->pAttachments = handle_mapping::MapHandleArray(&wrapper->pAttachments, object_info_table, &CommonObjectInfoTable::GetVkImageViewInfo); - } -} - -void MapStructHandles(Decoded_VkCommandBufferAllocateInfo* wrapper, const CommonObjectInfoTable& object_info_table) -{ - if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) - { - VkCommandBufferAllocateInfo* value = wrapper->decoded_value; - - value->commandPool = handle_mapping::MapHandle(wrapper->commandPool, object_info_table, &CommonObjectInfoTable::GetVkCommandPoolInfo); - } -} - -void MapStructHandles(Decoded_VkCommandBufferInheritanceInfo* wrapper, const CommonObjectInfoTable& object_info_table) +void MapStructHandles(Decoded_VkGraphicsPipelineCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) { - VkCommandBufferInheritanceInfo* value = wrapper->decoded_value; + VkGraphicsPipelineCreateInfo* value = wrapper->decoded_value; if (wrapper->pNext) { MapPNextStructHandles(wrapper->pNext, object_info_table); } + MapStructArrayHandles(wrapper->pStages->GetMetaStructPointer(), wrapper->pStages->GetLength(), object_info_table); + + value->layout = handle_mapping::MapHandle(wrapper->layout, object_info_table, &CommonObjectInfoTable::GetVkPipelineLayoutInfo); + value->renderPass = handle_mapping::MapHandle(wrapper->renderPass, object_info_table, &CommonObjectInfoTable::GetVkRenderPassInfo); - value->framebuffer = handle_mapping::MapHandle(wrapper->framebuffer, object_info_table, &CommonObjectInfoTable::GetVkFramebufferInfo); + value->basePipelineHandle = handle_mapping::MapHandle(wrapper->basePipelineHandle, object_info_table, &CommonObjectInfoTable::GetVkPipelineInfo); } } -void MapStructHandles(Decoded_VkCommandBufferBeginInfo* wrapper, const CommonObjectInfoTable& object_info_table) +void MapStructHandles(Decoded_VkFramebufferCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table) { - if (wrapper != nullptr) + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) { - MapStructArrayHandles(wrapper->pInheritanceInfo->GetMetaStructPointer(), 1, object_info_table); + VkFramebufferCreateInfo* value = wrapper->decoded_value; + + value->renderPass = handle_mapping::MapHandle(wrapper->renderPass, object_info_table, &CommonObjectInfoTable::GetVkRenderPassInfo); + + value->pAttachments = handle_mapping::MapHandleArray(&wrapper->pAttachments, object_info_table, &CommonObjectInfoTable::GetVkImageViewInfo); } } @@ -518,16 +518,6 @@ void MapStructHandles(Decoded_VkImageSparseMemoryRequirementsInfo2* wrapper, con } } -void MapStructHandles(Decoded_VkSamplerYcbcrConversionInfo* wrapper, const CommonObjectInfoTable& object_info_table) -{ - if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) - { - VkSamplerYcbcrConversionInfo* value = wrapper->decoded_value; - - value->conversion = handle_mapping::MapHandle(wrapper->conversion, object_info_table, &CommonObjectInfoTable::GetVkSamplerYcbcrConversionInfo); - } -} - void MapStructHandles(Decoded_VkDescriptorUpdateTemplateCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) @@ -540,13 +530,13 @@ void MapStructHandles(Decoded_VkDescriptorUpdateTemplateCreateInfo* wrapper, con } } -void MapStructHandles(Decoded_VkRenderPassAttachmentBeginInfo* wrapper, const CommonObjectInfoTable& object_info_table) +void MapStructHandles(Decoded_VkSamplerYcbcrConversionInfo* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) { - VkRenderPassAttachmentBeginInfo* value = wrapper->decoded_value; + VkSamplerYcbcrConversionInfo* value = wrapper->decoded_value; - value->pAttachments = handle_mapping::MapHandleArray(&wrapper->pAttachments, object_info_table, &CommonObjectInfoTable::GetVkImageViewInfo); + value->conversion = handle_mapping::MapHandle(wrapper->conversion, object_info_table, &CommonObjectInfoTable::GetVkSamplerYcbcrConversionInfo); } } @@ -590,6 +580,16 @@ void MapStructHandles(Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo* wrapper, c } } +void MapStructHandles(Decoded_VkRenderPassAttachmentBeginInfo* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkRenderPassAttachmentBeginInfo* value = wrapper->decoded_value; + + value->pAttachments = handle_mapping::MapHandleArray(&wrapper->pAttachments, object_info_table, &CommonObjectInfoTable::GetVkImageViewInfo); + } +} + void MapStructHandles(Decoded_VkBufferMemoryBarrier2* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) @@ -710,6 +710,14 @@ void MapStructHandles(Decoded_VkCopyImageToBufferInfo2* wrapper, const CommonObj } } +void MapStructHandles(Decoded_VkDeviceImageMemoryRequirements* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if (wrapper != nullptr) + { + MapStructArrayHandles(wrapper->pCreateInfo->GetMetaStructPointer(), 1, object_info_table); + } +} + void MapStructHandles(Decoded_VkBlitImageInfo2* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) @@ -763,14 +771,6 @@ void MapStructHandles(Decoded_VkRenderingInfo* wrapper, const CommonObjectInfoTa } } -void MapStructHandles(Decoded_VkDeviceImageMemoryRequirements* wrapper, const CommonObjectInfoTable& object_info_table) -{ - if (wrapper != nullptr) - { - MapStructArrayHandles(wrapper->pCreateInfo->GetMetaStructPointer(), 1, object_info_table); - } -} - void MapStructHandles(Decoded_VkMemoryMapInfo* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) @@ -799,6 +799,28 @@ void MapStructHandles(Decoded_VkDeviceImageSubresourceInfo* wrapper, const Commo } } +void MapStructHandles(Decoded_VkCopyImageToImageInfo* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkCopyImageToImageInfo* value = wrapper->decoded_value; + + value->srcImage = handle_mapping::MapHandle(wrapper->srcImage, object_info_table, &CommonObjectInfoTable::GetVkImageInfo); + + value->dstImage = handle_mapping::MapHandle(wrapper->dstImage, object_info_table, &CommonObjectInfoTable::GetVkImageInfo); + } +} + +void MapStructHandles(Decoded_VkHostImageLayoutTransitionInfo* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkHostImageLayoutTransitionInfo* value = wrapper->decoded_value; + + value->image = handle_mapping::MapHandle(wrapper->image, object_info_table, &CommonObjectInfoTable::GetVkImageInfo); + } +} + void MapStructHandles(Decoded_VkBindDescriptorSetsInfo* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) @@ -848,28 +870,6 @@ void MapStructHandles(Decoded_VkPushDescriptorSetInfo* wrapper, const CommonObje } } -void MapStructHandles(Decoded_VkCopyImageToImageInfo* wrapper, const CommonObjectInfoTable& object_info_table) -{ - if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) - { - VkCopyImageToImageInfo* value = wrapper->decoded_value; - - value->srcImage = handle_mapping::MapHandle(wrapper->srcImage, object_info_table, &CommonObjectInfoTable::GetVkImageInfo); - - value->dstImage = handle_mapping::MapHandle(wrapper->dstImage, object_info_table, &CommonObjectInfoTable::GetVkImageInfo); - } -} - -void MapStructHandles(Decoded_VkHostImageLayoutTransitionInfo* wrapper, const CommonObjectInfoTable& object_info_table) -{ - if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) - { - VkHostImageLayoutTransitionInfo* value = wrapper->decoded_value; - - value->image = handle_mapping::MapHandle(wrapper->image, object_info_table, &CommonObjectInfoTable::GetVkImageInfo); - } -} - void MapStructHandles(Decoded_VkSwapchainCreateInfoKHR* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) @@ -1355,6 +1355,17 @@ void MapStructHandles(Decoded_VkVideoInlineQueryInfoKHR* wrapper, const CommonOb } } +void MapStructHandles(Decoded_VkCalibratedTimestampInfoKHR* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if (wrapper != nullptr) + { + if (wrapper->pNext) + { + MapPNextStructHandles(wrapper->pNext, object_info_table); + } + } +} + void MapStructHandles(Decoded_VkSetDescriptorBufferOffsetsInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) @@ -1385,6 +1396,16 @@ void MapStructHandles(Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT* wra } } +void MapStructHandles(Decoded_VkCopyMemoryToImageIndirectInfoKHR* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkCopyMemoryToImageIndirectInfoKHR* value = wrapper->decoded_value; + + value->dstImage = handle_mapping::MapHandle(wrapper->dstImage, object_info_table, &CommonObjectInfoTable::GetVkImageInfo); + } +} + void MapStructHandles(Decoded_VkVideoEncodeQuantizationMapInfoKHR* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) @@ -1605,6 +1626,26 @@ void MapStructHandles(Decoded_VkAccelerationStructureMemoryRequirementsInfoNV* w } } +void MapStructHandles(Decoded_VkSwapchainCalibratedTimestampInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkSwapchainCalibratedTimestampInfoEXT* value = wrapper->decoded_value; + + value->swapchain = handle_mapping::MapHandle(wrapper->swapchain, object_info_table, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); + } +} + +void MapStructHandles(Decoded_VkPastPresentationTimingInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkPastPresentationTimingInfoEXT* value = wrapper->decoded_value; + + value->swapchain = handle_mapping::MapHandle(wrapper->swapchain, object_info_table, &CommonObjectInfoTable::GetVkSwapchainKHRInfo); + } +} + void MapStructHandles(Decoded_VkRenderingFragmentDensityMapAttachmentInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) @@ -1695,6 +1736,79 @@ void MapStructHandles(Decoded_VkGeneratedCommandsMemoryRequirementsInfoNV* wrapp } } +void MapStructHandles(Decoded_VkDescriptorBufferBindingInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if (wrapper != nullptr) + { + if (wrapper->pNext) + { + MapPNextStructHandles(wrapper->pNext, object_info_table); + } + } +} + +void MapStructHandles(Decoded_VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* value = wrapper->decoded_value; + + value->buffer = handle_mapping::MapHandle(wrapper->buffer, object_info_table, &CommonObjectInfoTable::GetVkBufferInfo); + } +} + +void MapStructHandles(Decoded_VkBufferCaptureDescriptorDataInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkBufferCaptureDescriptorDataInfoEXT* value = wrapper->decoded_value; + + value->buffer = handle_mapping::MapHandle(wrapper->buffer, object_info_table, &CommonObjectInfoTable::GetVkBufferInfo); + } +} + +void MapStructHandles(Decoded_VkImageCaptureDescriptorDataInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkImageCaptureDescriptorDataInfoEXT* value = wrapper->decoded_value; + + value->image = handle_mapping::MapHandle(wrapper->image, object_info_table, &CommonObjectInfoTable::GetVkImageInfo); + } +} + +void MapStructHandles(Decoded_VkImageViewCaptureDescriptorDataInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkImageViewCaptureDescriptorDataInfoEXT* value = wrapper->decoded_value; + + value->imageView = handle_mapping::MapHandle(wrapper->imageView, object_info_table, &CommonObjectInfoTable::GetVkImageViewInfo); + } +} + +void MapStructHandles(Decoded_VkSamplerCaptureDescriptorDataInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkSamplerCaptureDescriptorDataInfoEXT* value = wrapper->decoded_value; + + value->sampler = handle_mapping::MapHandle(wrapper->sampler, object_info_table, &CommonObjectInfoTable::GetVkSamplerInfo); + } +} + +void MapStructHandles(Decoded_VkAccelerationStructureCaptureDescriptorDataInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkAccelerationStructureCaptureDescriptorDataInfoEXT* value = wrapper->decoded_value; + + value->accelerationStructure = handle_mapping::MapHandle(wrapper->accelerationStructure, object_info_table, &CommonObjectInfoTable::GetVkAccelerationStructureKHRInfo); + + value->accelerationStructureNV = handle_mapping::MapHandle(wrapper->accelerationStructureNV, object_info_table, &CommonObjectInfoTable::GetVkAccelerationStructureNVInfo); + } +} + void MapStructHandles(Decoded_VkMemoryGetZirconHandleInfoFUCHSIA* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) @@ -1867,6 +1981,83 @@ void MapStructHandles(Decoded_VkLatencySleepInfoNV* wrapper, const CommonObjectI } } +void MapStructHandles(Decoded_VkDataGraphPipelineCreateInfoARM* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkDataGraphPipelineCreateInfoARM* value = wrapper->decoded_value; + + if (wrapper->pNext) + { + MapPNextStructHandles(wrapper->pNext, object_info_table); + } + + value->layout = handle_mapping::MapHandle(wrapper->layout, object_info_table, &CommonObjectInfoTable::GetVkPipelineLayoutInfo); + } +} + +void MapStructHandles(Decoded_VkDataGraphPipelineShaderModuleCreateInfoARM* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkDataGraphPipelineShaderModuleCreateInfoARM* value = wrapper->decoded_value; + + value->module = handle_mapping::MapHandle(wrapper->module, object_info_table, &CommonObjectInfoTable::GetVkShaderModuleInfo); + } +} + +void MapStructHandles(Decoded_VkDataGraphPipelineSessionCreateInfoARM* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkDataGraphPipelineSessionCreateInfoARM* value = wrapper->decoded_value; + + value->dataGraphPipeline = handle_mapping::MapHandle(wrapper->dataGraphPipeline, object_info_table, &CommonObjectInfoTable::GetVkPipelineInfo); + } +} + +void MapStructHandles(Decoded_VkDataGraphPipelineSessionBindPointRequirementsInfoARM* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkDataGraphPipelineSessionBindPointRequirementsInfoARM* value = wrapper->decoded_value; + + value->session = handle_mapping::MapHandle(wrapper->session, object_info_table, &CommonObjectInfoTable::GetVkDataGraphPipelineSessionARMInfo); + } +} + +void MapStructHandles(Decoded_VkDataGraphPipelineSessionMemoryRequirementsInfoARM* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkDataGraphPipelineSessionMemoryRequirementsInfoARM* value = wrapper->decoded_value; + + value->session = handle_mapping::MapHandle(wrapper->session, object_info_table, &CommonObjectInfoTable::GetVkDataGraphPipelineSessionARMInfo); + } +} + +void MapStructHandles(Decoded_VkBindDataGraphPipelineSessionMemoryInfoARM* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkBindDataGraphPipelineSessionMemoryInfoARM* value = wrapper->decoded_value; + + value->session = handle_mapping::MapHandle(wrapper->session, object_info_table, &CommonObjectInfoTable::GetVkDataGraphPipelineSessionARMInfo); + + value->memory = handle_mapping::MapHandle(wrapper->memory, object_info_table, &CommonObjectInfoTable::GetVkDeviceMemoryInfo); + } +} + +void MapStructHandles(Decoded_VkDataGraphPipelineInfoARM* wrapper, const CommonObjectInfoTable& object_info_table) +{ + if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) + { + VkDataGraphPipelineInfoARM* value = wrapper->decoded_value; + + value->dataGraphPipeline = handle_mapping::MapHandle(wrapper->dataGraphPipeline, object_info_table, &CommonObjectInfoTable::GetVkPipelineInfo); + } +} + void MapStructHandles(Decoded_VkTileMemoryBindInfoQCOM* wrapper, const CommonObjectInfoTable& object_info_table) { if ((wrapper != nullptr) && (wrapper->decoded_value != nullptr)) @@ -2123,9 +2314,15 @@ void MapPNextStructHandles(PNextNode* pnext, const CommonObjectInfoTable& object case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR: MapStructHandles(reinterpret_cast(wrapper), object_info_table); break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM: + MapStructHandles(reinterpret_cast(wrapper), object_info_table); + break; case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV: MapStructHandles(reinterpret_cast(wrapper), object_info_table); break; + case VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT: + MapStructHandles(reinterpret_cast(wrapper), object_info_table); + break; case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO: MapStructHandles(reinterpret_cast(wrapper), object_info_table); break; @@ -2177,6 +2374,9 @@ void MapPNextStructHandles(PNextNode* pnext, const CommonObjectInfoTable& object case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT: MapStructHandles(reinterpret_cast(wrapper), object_info_table); break; + case VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT: + MapStructHandles(reinterpret_cast(wrapper), object_info_table); + break; case VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_KHR: MapStructHandles(reinterpret_cast(wrapper), object_info_table); break; @@ -2270,6 +2470,78 @@ void AddStructHandles(format::HandleId parent_id, const Decoded_VkPipelineBinary } } +void PushRecaptureStructHandleIds(const Decoded_VkPhysicalDeviceGroupProperties* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + consumer->PushRecaptureHandleIds(id_wrapper->physicalDevices.GetPointer(), id_wrapper->physicalDevices.GetLength()); + } +} + +void PushRecaptureStructHandleIds(const Decoded_VkDisplayPropertiesKHR* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + consumer->PushRecaptureHandleId(&id_wrapper->display); + } +} + +void PushRecaptureStructHandleIds(const Decoded_VkDisplayPlanePropertiesKHR* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + consumer->PushRecaptureHandleId(&id_wrapper->currentDisplay); + } +} + +void PushRecaptureStructHandleIds(const Decoded_VkDisplayModePropertiesKHR* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + consumer->PushRecaptureHandleId(&id_wrapper->displayMode); + } +} + +void PushRecaptureStructHandleIds(const Decoded_VkDisplayProperties2KHR* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + PushRecaptureStructHandleIds(id_wrapper->displayProperties, consumer); + } +} + +void PushRecaptureStructHandleIds(const Decoded_VkDisplayPlaneProperties2KHR* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + PushRecaptureStructHandleIds(id_wrapper->displayPlaneProperties, consumer); + } +} + +void PushRecaptureStructHandleIds(const Decoded_VkDisplayModeProperties2KHR* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + PushRecaptureStructHandleIds(id_wrapper->displayModeProperties, consumer); + } +} + +void PushRecaptureStructHandleIds(const Decoded_VkPipelineBinaryHandlesInfoKHR* id_wrapper, CommonConsumerBase* consumer) +{ + GFXRECON_ASSERT(consumer != nullptr); + if (consumer->IsRecapture() && id_wrapper != nullptr) + { + consumer->PushRecaptureHandleIds(id_wrapper->pPipelineBinaries.GetPointer(), id_wrapper->pPipelineBinaries.GetLength()); + } +} + void SetStructHandleLengths(Decoded_VkPhysicalDeviceGroupProperties* wrapper) { if (wrapper != nullptr) diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_mappers.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_mappers.h index f94febeca..163097fad 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_mappers.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_mappers.h @@ -30,6 +30,7 @@ #ifndef GFXRECON_GENERATED_VULKAN_STRUCT_HANDLE_MAPPERS_H #define GFXRECON_GENERATED_VULKAN_STRUCT_HANDLE_MAPPERS_H +#include "decode/common_consumer_base.h" #include "decode/common_object_info_table.h" #include "decode/vulkan_pnext_node.h" #include "format/platform_types.h" @@ -73,20 +74,24 @@ void MapStructHandles(Decoded_VkSparseImageMemoryBindInfo* wrapper, const Common void MapStructHandles(Decoded_VkBindSparseInfo* wrapper, const CommonObjectInfoTable& object_info_table); -void MapStructHandles(Decoded_VkBufferViewCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); - void MapStructHandles(Decoded_VkImageCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkImageViewCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); +void MapStructHandles(Decoded_VkCommandBufferAllocateInfo* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkCommandBufferInheritanceInfo* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkCommandBufferBeginInfo* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkBufferViewCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); + void MapStructHandles(Decoded_VkShaderModuleCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkPipelineShaderStageCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkComputePipelineCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); -void MapStructHandles(Decoded_VkGraphicsPipelineCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); - void MapStructHandles(Decoded_VkPipelineLayoutCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkSamplerCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); @@ -101,13 +106,9 @@ void MapStructHandles(Decoded_VkDescriptorSetLayoutBinding* wrapper, const Commo void MapStructHandles(Decoded_VkDescriptorSetLayoutCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); -void MapStructHandles(Decoded_VkFramebufferCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); - -void MapStructHandles(Decoded_VkCommandBufferAllocateInfo* wrapper, const CommonObjectInfoTable& object_info_table); - -void MapStructHandles(Decoded_VkCommandBufferInheritanceInfo* wrapper, const CommonObjectInfoTable& object_info_table); +void MapStructHandles(Decoded_VkGraphicsPipelineCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); -void MapStructHandles(Decoded_VkCommandBufferBeginInfo* wrapper, const CommonObjectInfoTable& object_info_table); +void MapStructHandles(Decoded_VkFramebufferCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkRenderPassBeginInfo* wrapper, const CommonObjectInfoTable& object_info_table); @@ -127,11 +128,9 @@ void MapStructHandles(Decoded_VkImageMemoryRequirementsInfo2* wrapper, const Com void MapStructHandles(Decoded_VkImageSparseMemoryRequirementsInfo2* wrapper, const CommonObjectInfoTable& object_info_table); -void MapStructHandles(Decoded_VkSamplerYcbcrConversionInfo* wrapper, const CommonObjectInfoTable& object_info_table); - void MapStructHandles(Decoded_VkDescriptorUpdateTemplateCreateInfo* wrapper, const CommonObjectInfoTable& object_info_table); -void MapStructHandles(Decoded_VkRenderPassAttachmentBeginInfo* wrapper, const CommonObjectInfoTable& object_info_table); +void MapStructHandles(Decoded_VkSamplerYcbcrConversionInfo* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkSemaphoreWaitInfo* wrapper, const CommonObjectInfoTable& object_info_table); @@ -141,6 +140,8 @@ void MapStructHandles(Decoded_VkBufferDeviceAddressInfo* wrapper, const CommonOb void MapStructHandles(Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo* wrapper, const CommonObjectInfoTable& object_info_table); +void MapStructHandles(Decoded_VkRenderPassAttachmentBeginInfo* wrapper, const CommonObjectInfoTable& object_info_table); + void MapStructHandles(Decoded_VkBufferMemoryBarrier2* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkImageMemoryBarrier2* wrapper, const CommonObjectInfoTable& object_info_table); @@ -161,6 +162,8 @@ void MapStructHandles(Decoded_VkCopyBufferToImageInfo2* wrapper, const CommonObj void MapStructHandles(Decoded_VkCopyImageToBufferInfo2* wrapper, const CommonObjectInfoTable& object_info_table); +void MapStructHandles(Decoded_VkDeviceImageMemoryRequirements* wrapper, const CommonObjectInfoTable& object_info_table); + void MapStructHandles(Decoded_VkBlitImageInfo2* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkResolveImageInfo2* wrapper, const CommonObjectInfoTable& object_info_table); @@ -169,24 +172,22 @@ void MapStructHandles(Decoded_VkRenderingAttachmentInfo* wrapper, const CommonOb void MapStructHandles(Decoded_VkRenderingInfo* wrapper, const CommonObjectInfoTable& object_info_table); -void MapStructHandles(Decoded_VkDeviceImageMemoryRequirements* wrapper, const CommonObjectInfoTable& object_info_table); - void MapStructHandles(Decoded_VkMemoryMapInfo* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkMemoryUnmapInfo* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkDeviceImageSubresourceInfo* wrapper, const CommonObjectInfoTable& object_info_table); +void MapStructHandles(Decoded_VkCopyImageToImageInfo* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkHostImageLayoutTransitionInfo* wrapper, const CommonObjectInfoTable& object_info_table); + void MapStructHandles(Decoded_VkBindDescriptorSetsInfo* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkPushConstantsInfo* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkPushDescriptorSetInfo* wrapper, const CommonObjectInfoTable& object_info_table); -void MapStructHandles(Decoded_VkCopyImageToImageInfo* wrapper, const CommonObjectInfoTable& object_info_table); - -void MapStructHandles(Decoded_VkHostImageLayoutTransitionInfo* wrapper, const CommonObjectInfoTable& object_info_table); - void MapStructHandles(Decoded_VkSwapchainCreateInfoKHR* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkPresentInfoKHR* wrapper, const CommonObjectInfoTable& object_info_table); @@ -277,10 +278,14 @@ void MapStructHandles(Decoded_VkReleaseSwapchainImagesInfoKHR* wrapper, const Co void MapStructHandles(Decoded_VkVideoInlineQueryInfoKHR* wrapper, const CommonObjectInfoTable& object_info_table); +void MapStructHandles(Decoded_VkCalibratedTimestampInfoKHR* wrapper, const CommonObjectInfoTable& object_info_table); + void MapStructHandles(Decoded_VkSetDescriptorBufferOffsetsInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table); +void MapStructHandles(Decoded_VkCopyMemoryToImageIndirectInfoKHR* wrapper, const CommonObjectInfoTable& object_info_table); + void MapStructHandles(Decoded_VkVideoEncodeQuantizationMapInfoKHR* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkDebugMarkerObjectNameInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table); @@ -323,6 +328,10 @@ void MapStructHandles(Decoded_VkWriteDescriptorSetAccelerationStructureNV* wrapp void MapStructHandles(Decoded_VkAccelerationStructureMemoryRequirementsInfoNV* wrapper, const CommonObjectInfoTable& object_info_table); +void MapStructHandles(Decoded_VkSwapchainCalibratedTimestampInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkPastPresentationTimingInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table); + void MapStructHandles(Decoded_VkRenderingFragmentDensityMapAttachmentInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkGraphicsShaderGroupCreateInfoNV* wrapper, const CommonObjectInfoTable& object_info_table); @@ -339,6 +348,20 @@ void MapStructHandles(Decoded_VkGeneratedCommandsInfoNV* wrapper, const CommonOb void MapStructHandles(Decoded_VkGeneratedCommandsMemoryRequirementsInfoNV* wrapper, const CommonObjectInfoTable& object_info_table); +void MapStructHandles(Decoded_VkDescriptorBufferBindingInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkBufferCaptureDescriptorDataInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkImageCaptureDescriptorDataInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkImageViewCaptureDescriptorDataInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkSamplerCaptureDescriptorDataInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkAccelerationStructureCaptureDescriptorDataInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table); + void MapStructHandles(Decoded_VkMemoryGetZirconHandleInfoFUCHSIA* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkImportSemaphoreZirconHandleInfoFUCHSIA* wrapper, const CommonObjectInfoTable& object_info_table); @@ -373,6 +396,20 @@ void MapStructHandles(Decoded_VkShaderCreateInfoEXT* wrapper, const CommonObject void MapStructHandles(Decoded_VkLatencySleepInfoNV* wrapper, const CommonObjectInfoTable& object_info_table); +void MapStructHandles(Decoded_VkDataGraphPipelineCreateInfoARM* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkDataGraphPipelineShaderModuleCreateInfoARM* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkDataGraphPipelineSessionCreateInfoARM* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkDataGraphPipelineSessionBindPointRequirementsInfoARM* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkDataGraphPipelineSessionMemoryRequirementsInfoARM* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkBindDataGraphPipelineSessionMemoryInfoARM* wrapper, const CommonObjectInfoTable& object_info_table); + +void MapStructHandles(Decoded_VkDataGraphPipelineInfoARM* wrapper, const CommonObjectInfoTable& object_info_table); + void MapStructHandles(Decoded_VkTileMemoryBindInfoQCOM* wrapper, const CommonObjectInfoTable& object_info_table); void MapStructHandles(Decoded_VkGeneratedCommandsMemoryRequirementsInfoEXT* wrapper, const CommonObjectInfoTable& object_info_table); @@ -431,6 +468,22 @@ void AddStructHandles(format::HandleId parent_id, const Decoded_VkDisplayModePro void AddStructHandles(format::HandleId parent_id, const Decoded_VkPipelineBinaryHandlesInfoKHR* id_wrapper, const VkPipelineBinaryHandlesInfoKHR* handle_struct, CommonObjectInfoTable* object_info_table); +void PushRecaptureStructHandleIds(const Decoded_VkPhysicalDeviceGroupProperties* id_wrapper, CommonConsumerBase* consumer); + +void PushRecaptureStructHandleIds(const Decoded_VkDisplayPropertiesKHR* id_wrapper, CommonConsumerBase* consumer); + +void PushRecaptureStructHandleIds(const Decoded_VkDisplayPlanePropertiesKHR* id_wrapper, CommonConsumerBase* consumer); + +void PushRecaptureStructHandleIds(const Decoded_VkDisplayModePropertiesKHR* id_wrapper, CommonConsumerBase* consumer); + +void PushRecaptureStructHandleIds(const Decoded_VkDisplayProperties2KHR* id_wrapper, CommonConsumerBase* consumer); + +void PushRecaptureStructHandleIds(const Decoded_VkDisplayPlaneProperties2KHR* id_wrapper, CommonConsumerBase* consumer); + +void PushRecaptureStructHandleIds(const Decoded_VkDisplayModeProperties2KHR* id_wrapper, CommonConsumerBase* consumer); + +void PushRecaptureStructHandleIds(const Decoded_VkPipelineBinaryHandlesInfoKHR* id_wrapper, CommonConsumerBase* consumer); + void SetStructHandleLengths(Decoded_VkPhysicalDeviceGroupProperties* wrapper); void SetStructHandleLengths(Decoded_VkPipelineBinaryHandlesInfoKHR* wrapper); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_wrappers.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_wrappers.cpp index 19f344599..09499de41 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_wrappers.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_wrappers.cpp @@ -126,10 +126,6 @@ void UnwrapStructHandles(VkBindSparseInfo* value, HandleUnwrapMemory* unwrap_mem } } -void UnwrapStructHandles(VkBufferViewCreateInfo* value, HandleUnwrapMemory* unwrap_memory) -{ -} - void UnwrapStructHandles(VkImageCreateInfo* value, HandleUnwrapMemory* unwrap_memory) { if (value != nullptr) @@ -152,7 +148,11 @@ void UnwrapStructHandles(VkImageViewCreateInfo* value, HandleUnwrapMemory* unwra } } -void UnwrapStructHandles(VkShaderModuleCreateInfo* value, HandleUnwrapMemory* unwrap_memory) +void UnwrapStructHandles(VkCommandBufferAllocateInfo* value, HandleUnwrapMemory* unwrap_memory) +{ +} + +void UnwrapStructHandles(VkCommandBufferInheritanceInfo* value, HandleUnwrapMemory* unwrap_memory) { if (value != nullptr) { @@ -163,7 +163,19 @@ void UnwrapStructHandles(VkShaderModuleCreateInfo* value, HandleUnwrapMemory* un } } -void UnwrapStructHandles(VkPipelineShaderStageCreateInfo* value, HandleUnwrapMemory* unwrap_memory) +void UnwrapStructHandles(VkCommandBufferBeginInfo* value, HandleUnwrapMemory* unwrap_memory) +{ + if (value != nullptr) + { + value->pInheritanceInfo = UnwrapStructPtrHandles(value->pInheritanceInfo, unwrap_memory); + } +} + +void UnwrapStructHandles(VkBufferViewCreateInfo* value, HandleUnwrapMemory* unwrap_memory) +{ +} + +void UnwrapStructHandles(VkShaderModuleCreateInfo* value, HandleUnwrapMemory* unwrap_memory) { if (value != nullptr) { @@ -174,7 +186,7 @@ void UnwrapStructHandles(VkPipelineShaderStageCreateInfo* value, HandleUnwrapMem } } -void UnwrapStructHandles(VkComputePipelineCreateInfo* value, HandleUnwrapMemory* unwrap_memory) +void UnwrapStructHandles(VkPipelineShaderStageCreateInfo* value, HandleUnwrapMemory* unwrap_memory) { if (value != nullptr) { @@ -182,11 +194,10 @@ void UnwrapStructHandles(VkComputePipelineCreateInfo* value, HandleUnwrapMemory* { value->pNext = UnwrapPNextStructHandles(value->pNext, unwrap_memory); } - UnwrapStructHandles(&value->stage, unwrap_memory); } } -void UnwrapStructHandles(VkGraphicsPipelineCreateInfo* value, HandleUnwrapMemory* unwrap_memory) +void UnwrapStructHandles(VkComputePipelineCreateInfo* value, HandleUnwrapMemory* unwrap_memory) { if (value != nullptr) { @@ -194,7 +205,7 @@ void UnwrapStructHandles(VkGraphicsPipelineCreateInfo* value, HandleUnwrapMemory { value->pNext = UnwrapPNextStructHandles(value->pNext, unwrap_memory); } - value->pStages = UnwrapStructArrayHandles(value->pStages, value->stageCount, unwrap_memory); + UnwrapStructHandles(&value->stage, unwrap_memory); } } @@ -237,15 +248,7 @@ void UnwrapStructHandles(VkDescriptorSetLayoutCreateInfo* value, HandleUnwrapMem } } -void UnwrapStructHandles(VkFramebufferCreateInfo* value, HandleUnwrapMemory* unwrap_memory) -{ -} - -void UnwrapStructHandles(VkCommandBufferAllocateInfo* value, HandleUnwrapMemory* unwrap_memory) -{ -} - -void UnwrapStructHandles(VkCommandBufferInheritanceInfo* value, HandleUnwrapMemory* unwrap_memory) +void UnwrapStructHandles(VkGraphicsPipelineCreateInfo* value, HandleUnwrapMemory* unwrap_memory) { if (value != nullptr) { @@ -253,15 +256,12 @@ void UnwrapStructHandles(VkCommandBufferInheritanceInfo* value, HandleUnwrapMemo { value->pNext = UnwrapPNextStructHandles(value->pNext, unwrap_memory); } + value->pStages = UnwrapStructArrayHandles(value->pStages, value->stageCount, unwrap_memory); } } -void UnwrapStructHandles(VkCommandBufferBeginInfo* value, HandleUnwrapMemory* unwrap_memory) +void UnwrapStructHandles(VkFramebufferCreateInfo* value, HandleUnwrapMemory* unwrap_memory) { - if (value != nullptr) - { - value->pInheritanceInfo = UnwrapStructPtrHandles(value->pInheritanceInfo, unwrap_memory); - } } void UnwrapStructHandles(VkRenderPassBeginInfo* value, HandleUnwrapMemory* unwrap_memory) @@ -314,15 +314,11 @@ void UnwrapStructHandles(VkImageSparseMemoryRequirementsInfo2* value, HandleUnwr { } -void UnwrapStructHandles(VkSamplerYcbcrConversionInfo* value, HandleUnwrapMemory* unwrap_memory) -{ -} - void UnwrapStructHandles(VkDescriptorUpdateTemplateCreateInfo* value, HandleUnwrapMemory* unwrap_memory) { } -void UnwrapStructHandles(VkRenderPassAttachmentBeginInfo* value, HandleUnwrapMemory* unwrap_memory) +void UnwrapStructHandles(VkSamplerYcbcrConversionInfo* value, HandleUnwrapMemory* unwrap_memory) { } @@ -342,6 +338,10 @@ void UnwrapStructHandles(VkDeviceMemoryOpaqueCaptureAddressInfo* value, HandleUn { } +void UnwrapStructHandles(VkRenderPassAttachmentBeginInfo* value, HandleUnwrapMemory* unwrap_memory) +{ +} + void UnwrapStructHandles(VkBufferMemoryBarrier2* value, HandleUnwrapMemory* unwrap_memory) { } @@ -404,6 +404,14 @@ void UnwrapStructHandles(VkCopyImageToBufferInfo2* value, HandleUnwrapMemory* un { } +void UnwrapStructHandles(VkDeviceImageMemoryRequirements* value, HandleUnwrapMemory* unwrap_memory) +{ + if (value != nullptr) + { + value->pCreateInfo = UnwrapStructPtrHandles(value->pCreateInfo, unwrap_memory); + } +} + void UnwrapStructHandles(VkBlitImageInfo2* value, HandleUnwrapMemory* unwrap_memory) { } @@ -430,14 +438,6 @@ void UnwrapStructHandles(VkRenderingInfo* value, HandleUnwrapMemory* unwrap_memo } } -void UnwrapStructHandles(VkDeviceImageMemoryRequirements* value, HandleUnwrapMemory* unwrap_memory) -{ - if (value != nullptr) - { - value->pCreateInfo = UnwrapStructPtrHandles(value->pCreateInfo, unwrap_memory); - } -} - void UnwrapStructHandles(VkMemoryMapInfo* value, HandleUnwrapMemory* unwrap_memory) { } @@ -454,6 +454,14 @@ void UnwrapStructHandles(VkDeviceImageSubresourceInfo* value, HandleUnwrapMemory } } +void UnwrapStructHandles(VkCopyImageToImageInfo* value, HandleUnwrapMemory* unwrap_memory) +{ +} + +void UnwrapStructHandles(VkHostImageLayoutTransitionInfo* value, HandleUnwrapMemory* unwrap_memory) +{ +} + void UnwrapStructHandles(VkBindDescriptorSetsInfo* value, HandleUnwrapMemory* unwrap_memory) { if (value != nullptr) @@ -488,14 +496,6 @@ void UnwrapStructHandles(VkPushDescriptorSetInfo* value, HandleUnwrapMemory* unw } } -void UnwrapStructHandles(VkCopyImageToImageInfo* value, HandleUnwrapMemory* unwrap_memory) -{ -} - -void UnwrapStructHandles(VkHostImageLayoutTransitionInfo* value, HandleUnwrapMemory* unwrap_memory) -{ -} - void UnwrapStructHandles(VkSwapchainCreateInfoKHR* value, HandleUnwrapMemory* unwrap_memory) { } @@ -723,6 +723,17 @@ void UnwrapStructHandles(VkVideoInlineQueryInfoKHR* value, HandleUnwrapMemory* u { } +void UnwrapStructHandles(VkCalibratedTimestampInfoKHR* value, HandleUnwrapMemory* unwrap_memory) +{ + if (value != nullptr) + { + if (value->pNext != nullptr) + { + value->pNext = UnwrapPNextStructHandles(value->pNext, unwrap_memory); + } + } +} + void UnwrapStructHandles(VkSetDescriptorBufferOffsetsInfoEXT* value, HandleUnwrapMemory* unwrap_memory) { if (value != nullptr) @@ -745,6 +756,10 @@ void UnwrapStructHandles(VkBindDescriptorBufferEmbeddedSamplersInfoEXT* value, H } } +void UnwrapStructHandles(VkCopyMemoryToImageIndirectInfoKHR* value, HandleUnwrapMemory* unwrap_memory) +{ +} + void UnwrapStructHandles(VkVideoEncodeQuantizationMapInfoKHR* value, HandleUnwrapMemory* unwrap_memory) { } @@ -850,6 +865,14 @@ void UnwrapStructHandles(VkAccelerationStructureMemoryRequirementsInfoNV* value, { } +void UnwrapStructHandles(VkSwapchainCalibratedTimestampInfoEXT* value, HandleUnwrapMemory* unwrap_memory) +{ +} + +void UnwrapStructHandles(VkPastPresentationTimingInfoEXT* value, HandleUnwrapMemory* unwrap_memory) +{ +} + void UnwrapStructHandles(VkRenderingFragmentDensityMapAttachmentInfoEXT* value, HandleUnwrapMemory* unwrap_memory) { } @@ -898,6 +921,41 @@ void UnwrapStructHandles(VkGeneratedCommandsMemoryRequirementsInfoNV* value, Han { } +void UnwrapStructHandles(VkDescriptorBufferBindingInfoEXT* value, HandleUnwrapMemory* unwrap_memory) +{ + if (value != nullptr) + { + if (value->pNext != nullptr) + { + value->pNext = UnwrapPNextStructHandles(value->pNext, unwrap_memory); + } + } +} + +void UnwrapStructHandles(VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* value, HandleUnwrapMemory* unwrap_memory) +{ +} + +void UnwrapStructHandles(VkBufferCaptureDescriptorDataInfoEXT* value, HandleUnwrapMemory* unwrap_memory) +{ +} + +void UnwrapStructHandles(VkImageCaptureDescriptorDataInfoEXT* value, HandleUnwrapMemory* unwrap_memory) +{ +} + +void UnwrapStructHandles(VkImageViewCaptureDescriptorDataInfoEXT* value, HandleUnwrapMemory* unwrap_memory) +{ +} + +void UnwrapStructHandles(VkSamplerCaptureDescriptorDataInfoEXT* value, HandleUnwrapMemory* unwrap_memory) +{ +} + +void UnwrapStructHandles(VkAccelerationStructureCaptureDescriptorDataInfoEXT* value, HandleUnwrapMemory* unwrap_memory) +{ +} + void UnwrapStructHandles(VkMemoryGetZirconHandleInfoFUCHSIA* value, HandleUnwrapMemory* unwrap_memory) { } @@ -970,6 +1028,41 @@ void UnwrapStructHandles(VkLatencySleepInfoNV* value, HandleUnwrapMemory* unwrap { } +void UnwrapStructHandles(VkDataGraphPipelineCreateInfoARM* value, HandleUnwrapMemory* unwrap_memory) +{ + if (value != nullptr) + { + if (value->pNext != nullptr) + { + value->pNext = UnwrapPNextStructHandles(value->pNext, unwrap_memory); + } + } +} + +void UnwrapStructHandles(VkDataGraphPipelineShaderModuleCreateInfoARM* value, HandleUnwrapMemory* unwrap_memory) +{ +} + +void UnwrapStructHandles(VkDataGraphPipelineSessionCreateInfoARM* value, HandleUnwrapMemory* unwrap_memory) +{ +} + +void UnwrapStructHandles(VkDataGraphPipelineSessionBindPointRequirementsInfoARM* value, HandleUnwrapMemory* unwrap_memory) +{ +} + +void UnwrapStructHandles(VkDataGraphPipelineSessionMemoryRequirementsInfoARM* value, HandleUnwrapMemory* unwrap_memory) +{ +} + +void UnwrapStructHandles(VkBindDataGraphPipelineSessionMemoryInfoARM* value, HandleUnwrapMemory* unwrap_memory) +{ +} + +void UnwrapStructHandles(VkDataGraphPipelineInfoARM* value, HandleUnwrapMemory* unwrap_memory) +{ +} + void UnwrapStructHandles(VkTileMemoryBindInfoQCOM* value, HandleUnwrapMemory* unwrap_memory) { } @@ -1197,9 +1290,30 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_BUILTIN_MODEL_CREATE_INFO_QCOM: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -1221,6 +1335,9 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_DEPTH_BIAS_REPRESENTATION_INFO_EXT: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -1482,6 +1599,9 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -1560,6 +1680,9 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMMAND_BUFFER_INHERITANCE_FEATURES_NV: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -1596,6 +1719,12 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_PROPERTIES_NV: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -1614,6 +1743,15 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -1635,6 +1773,15 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -1899,6 +2046,12 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -1944,6 +2097,12 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2022,6 +2181,12 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2082,6 +2247,9 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2124,9 +2292,15 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2193,6 +2367,9 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2247,6 +2424,9 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2262,6 +2442,12 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2310,6 +2496,12 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2340,6 +2532,9 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2406,12 +2601,12 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUANTIZATION_MAP_FEATURES_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2580,6 +2775,12 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; + case VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2634,6 +2835,9 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2652,6 +2856,9 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2664,6 +2871,9 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2745,6 +2955,9 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2796,9 +3009,6 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2817,9 +3027,6 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2832,27 +3039,6 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; case VK_STRUCTURE_TYPE_VIDEO_DECODE_USAGE_INFO_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -2943,54 +3129,18 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_GET_INFO_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUANTIZATION_MAP_CAPABILITIES_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR: - copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); - break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_INFO_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_PROFILE_RGB_CONVERSION_INFO_VALVE: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -3006,9 +3156,15 @@ VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMe case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RGB_CONVERSION_CAPABILITIES_VALVE: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_INTRA_REFRESH_CREATE_INFO_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_RGB_CONVERSION_CREATE_INFO_VALVE: + copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); + break; case VK_STRUCTURE_TYPE_VIDEO_ENCODE_USAGE_INFO_KHR: copy = reinterpret_cast(MakeUnwrapStructs(reinterpret_cast(base), 1, unwrap_memory)); break; @@ -3080,8 +3236,12 @@ const void* UnwrapPNextStructHandles(const void* value, HandleUnwrapMemory* unwr return UnwrapStructPtrHandles(reinterpret_cast(base), unwrap_memory); case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR: return UnwrapStructPtrHandles(reinterpret_cast(base), unwrap_memory); + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM: + return UnwrapStructPtrHandles(reinterpret_cast(base), unwrap_memory); case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV: return UnwrapStructPtrHandles(reinterpret_cast(base), unwrap_memory); + case VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT: + return UnwrapStructPtrHandles(reinterpret_cast(base), unwrap_memory); case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO: return UnwrapStructPtrHandles(reinterpret_cast(base), unwrap_memory); case VK_STRUCTURE_TYPE_FRAME_BOUNDARY_EXT: @@ -3116,6 +3276,8 @@ const void* UnwrapPNextStructHandles(const void* value, HandleUnwrapMemory* unwr return UnwrapStructPtrHandles(reinterpret_cast(base), unwrap_memory); case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT: return UnwrapStructPtrHandles(reinterpret_cast(base), unwrap_memory); + case VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT: + return UnwrapStructPtrHandles(reinterpret_cast(base), unwrap_memory); case VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_KHR: return UnwrapStructPtrHandles(reinterpret_cast(base), unwrap_memory); case VK_STRUCTURE_TYPE_TILE_MEMORY_BIND_INFO_QCOM: diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_wrappers.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_wrappers.h index 9c24bf5eb..72798f0eb 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_wrappers.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_handle_wrappers.h @@ -73,20 +73,24 @@ void UnwrapStructHandles(VkSparseImageMemoryBindInfo* value, HandleUnwrapMemory* void UnwrapStructHandles(VkBindSparseInfo* value, HandleUnwrapMemory* unwrap_memory); -void UnwrapStructHandles(VkBufferViewCreateInfo* value, HandleUnwrapMemory* unwrap_memory); - void UnwrapStructHandles(VkImageCreateInfo* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkImageViewCreateInfo* value, HandleUnwrapMemory* unwrap_memory); +void UnwrapStructHandles(VkCommandBufferAllocateInfo* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkCommandBufferInheritanceInfo* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkCommandBufferBeginInfo* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkBufferViewCreateInfo* value, HandleUnwrapMemory* unwrap_memory); + void UnwrapStructHandles(VkShaderModuleCreateInfo* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkPipelineShaderStageCreateInfo* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkComputePipelineCreateInfo* value, HandleUnwrapMemory* unwrap_memory); -void UnwrapStructHandles(VkGraphicsPipelineCreateInfo* value, HandleUnwrapMemory* unwrap_memory); - void UnwrapStructHandles(VkPipelineLayoutCreateInfo* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkSamplerCreateInfo* value, HandleUnwrapMemory* unwrap_memory); @@ -101,13 +105,9 @@ void UnwrapStructHandles(VkDescriptorSetLayoutBinding* value, HandleUnwrapMemory void UnwrapStructHandles(VkDescriptorSetLayoutCreateInfo* value, HandleUnwrapMemory* unwrap_memory); -void UnwrapStructHandles(VkFramebufferCreateInfo* value, HandleUnwrapMemory* unwrap_memory); - -void UnwrapStructHandles(VkCommandBufferAllocateInfo* value, HandleUnwrapMemory* unwrap_memory); - -void UnwrapStructHandles(VkCommandBufferInheritanceInfo* value, HandleUnwrapMemory* unwrap_memory); +void UnwrapStructHandles(VkGraphicsPipelineCreateInfo* value, HandleUnwrapMemory* unwrap_memory); -void UnwrapStructHandles(VkCommandBufferBeginInfo* value, HandleUnwrapMemory* unwrap_memory); +void UnwrapStructHandles(VkFramebufferCreateInfo* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkRenderPassBeginInfo* value, HandleUnwrapMemory* unwrap_memory); @@ -127,11 +127,9 @@ void UnwrapStructHandles(VkImageMemoryRequirementsInfo2* value, HandleUnwrapMemo void UnwrapStructHandles(VkImageSparseMemoryRequirementsInfo2* value, HandleUnwrapMemory* unwrap_memory); -void UnwrapStructHandles(VkSamplerYcbcrConversionInfo* value, HandleUnwrapMemory* unwrap_memory); - void UnwrapStructHandles(VkDescriptorUpdateTemplateCreateInfo* value, HandleUnwrapMemory* unwrap_memory); -void UnwrapStructHandles(VkRenderPassAttachmentBeginInfo* value, HandleUnwrapMemory* unwrap_memory); +void UnwrapStructHandles(VkSamplerYcbcrConversionInfo* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkSemaphoreWaitInfo* value, HandleUnwrapMemory* unwrap_memory); @@ -141,6 +139,8 @@ void UnwrapStructHandles(VkBufferDeviceAddressInfo* value, HandleUnwrapMemory* u void UnwrapStructHandles(VkDeviceMemoryOpaqueCaptureAddressInfo* value, HandleUnwrapMemory* unwrap_memory); +void UnwrapStructHandles(VkRenderPassAttachmentBeginInfo* value, HandleUnwrapMemory* unwrap_memory); + void UnwrapStructHandles(VkBufferMemoryBarrier2* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkImageMemoryBarrier2* value, HandleUnwrapMemory* unwrap_memory); @@ -161,6 +161,8 @@ void UnwrapStructHandles(VkCopyBufferToImageInfo2* value, HandleUnwrapMemory* un void UnwrapStructHandles(VkCopyImageToBufferInfo2* value, HandleUnwrapMemory* unwrap_memory); +void UnwrapStructHandles(VkDeviceImageMemoryRequirements* value, HandleUnwrapMemory* unwrap_memory); + void UnwrapStructHandles(VkBlitImageInfo2* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkResolveImageInfo2* value, HandleUnwrapMemory* unwrap_memory); @@ -169,24 +171,22 @@ void UnwrapStructHandles(VkRenderingAttachmentInfo* value, HandleUnwrapMemory* u void UnwrapStructHandles(VkRenderingInfo* value, HandleUnwrapMemory* unwrap_memory); -void UnwrapStructHandles(VkDeviceImageMemoryRequirements* value, HandleUnwrapMemory* unwrap_memory); - void UnwrapStructHandles(VkMemoryMapInfo* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkMemoryUnmapInfo* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkDeviceImageSubresourceInfo* value, HandleUnwrapMemory* unwrap_memory); +void UnwrapStructHandles(VkCopyImageToImageInfo* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkHostImageLayoutTransitionInfo* value, HandleUnwrapMemory* unwrap_memory); + void UnwrapStructHandles(VkBindDescriptorSetsInfo* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkPushConstantsInfo* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkPushDescriptorSetInfo* value, HandleUnwrapMemory* unwrap_memory); -void UnwrapStructHandles(VkCopyImageToImageInfo* value, HandleUnwrapMemory* unwrap_memory); - -void UnwrapStructHandles(VkHostImageLayoutTransitionInfo* value, HandleUnwrapMemory* unwrap_memory); - void UnwrapStructHandles(VkSwapchainCreateInfoKHR* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkPresentInfoKHR* value, HandleUnwrapMemory* unwrap_memory); @@ -277,10 +277,14 @@ void UnwrapStructHandles(VkReleaseSwapchainImagesInfoKHR* value, HandleUnwrapMem void UnwrapStructHandles(VkVideoInlineQueryInfoKHR* value, HandleUnwrapMemory* unwrap_memory); +void UnwrapStructHandles(VkCalibratedTimestampInfoKHR* value, HandleUnwrapMemory* unwrap_memory); + void UnwrapStructHandles(VkSetDescriptorBufferOffsetsInfoEXT* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkBindDescriptorBufferEmbeddedSamplersInfoEXT* value, HandleUnwrapMemory* unwrap_memory); +void UnwrapStructHandles(VkCopyMemoryToImageIndirectInfoKHR* value, HandleUnwrapMemory* unwrap_memory); + void UnwrapStructHandles(VkVideoEncodeQuantizationMapInfoKHR* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkDebugMarkerObjectNameInfoEXT* value, HandleUnwrapMemory* unwrap_memory); @@ -323,6 +327,10 @@ void UnwrapStructHandles(VkWriteDescriptorSetAccelerationStructureNV* value, Han void UnwrapStructHandles(VkAccelerationStructureMemoryRequirementsInfoNV* value, HandleUnwrapMemory* unwrap_memory); +void UnwrapStructHandles(VkSwapchainCalibratedTimestampInfoEXT* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkPastPresentationTimingInfoEXT* value, HandleUnwrapMemory* unwrap_memory); + void UnwrapStructHandles(VkRenderingFragmentDensityMapAttachmentInfoEXT* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkGraphicsShaderGroupCreateInfoNV* value, HandleUnwrapMemory* unwrap_memory); @@ -339,6 +347,20 @@ void UnwrapStructHandles(VkGeneratedCommandsInfoNV* value, HandleUnwrapMemory* u void UnwrapStructHandles(VkGeneratedCommandsMemoryRequirementsInfoNV* value, HandleUnwrapMemory* unwrap_memory); +void UnwrapStructHandles(VkDescriptorBufferBindingInfoEXT* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkBufferCaptureDescriptorDataInfoEXT* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkImageCaptureDescriptorDataInfoEXT* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkImageViewCaptureDescriptorDataInfoEXT* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkSamplerCaptureDescriptorDataInfoEXT* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkAccelerationStructureCaptureDescriptorDataInfoEXT* value, HandleUnwrapMemory* unwrap_memory); + void UnwrapStructHandles(VkMemoryGetZirconHandleInfoFUCHSIA* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkImportSemaphoreZirconHandleInfoFUCHSIA* value, HandleUnwrapMemory* unwrap_memory); @@ -373,6 +395,20 @@ void UnwrapStructHandles(VkShaderCreateInfoEXT* value, HandleUnwrapMemory* unwra void UnwrapStructHandles(VkLatencySleepInfoNV* value, HandleUnwrapMemory* unwrap_memory); +void UnwrapStructHandles(VkDataGraphPipelineCreateInfoARM* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkDataGraphPipelineShaderModuleCreateInfoARM* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkDataGraphPipelineSessionCreateInfoARM* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkDataGraphPipelineSessionBindPointRequirementsInfoARM* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkDataGraphPipelineSessionMemoryRequirementsInfoARM* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkBindDataGraphPipelineSessionMemoryInfoARM* value, HandleUnwrapMemory* unwrap_memory); + +void UnwrapStructHandles(VkDataGraphPipelineInfoARM* value, HandleUnwrapMemory* unwrap_memory); + void UnwrapStructHandles(VkTileMemoryBindInfoQCOM* value, HandleUnwrapMemory* unwrap_memory); void UnwrapStructHandles(VkGeneratedCommandsMemoryRequirementsInfoEXT* value, HandleUnwrapMemory* unwrap_memory); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_to_json.cpp b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_to_json.cpp index 939c01d5e..8a0004288 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_to_json.cpp +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_to_json.cpp @@ -479,3585 +479,3312 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH264 } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265ProfileTierLevelFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9ColorConfigFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265ProfileTierLevelFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265ProfileTierLevelFlags& meta_struct = *data; + const StdVideoVP9ColorConfigFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoVP9ColorConfigFlags& meta_struct = *data; - FieldToJson(jdata["general_tier_flag"], decoded_value.general_tier_flag, options); - FieldToJson(jdata["general_progressive_source_flag"], decoded_value.general_progressive_source_flag, options); - FieldToJson(jdata["general_interlaced_source_flag"], decoded_value.general_interlaced_source_flag, options); - FieldToJson(jdata["general_non_packed_constraint_flag"], decoded_value.general_non_packed_constraint_flag, options); - FieldToJson(jdata["general_frame_only_constraint_flag"], decoded_value.general_frame_only_constraint_flag, options); + FieldToJson(jdata["color_range"], decoded_value.color_range, options); + FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265ProfileTierLevel* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9ColorConfig* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265ProfileTierLevel& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265ProfileTierLevel& meta_struct = *data; + const StdVideoVP9ColorConfig& decoded_value = *data->decoded_value; + const Decoded_StdVideoVP9ColorConfig& meta_struct = *data; FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["general_profile_idc"], decoded_value.general_profile_idc, options); - FieldToJson(jdata["general_level_idc"], decoded_value.general_level_idc, options); + FieldToJson(jdata["BitDepth"], decoded_value.BitDepth, options); + FieldToJson(jdata["subsampling_x"], decoded_value.subsampling_x, options); + FieldToJson(jdata["subsampling_y"], decoded_value.subsampling_y, options); + FieldToJson(jdata["reserved1"], decoded_value.reserved1, options); + FieldToJson(jdata["color_space"], decoded_value.color_space, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265DecPicBufMgr* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9LoopFilterFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265DecPicBufMgr& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265DecPicBufMgr& meta_struct = *data; + const StdVideoVP9LoopFilterFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoVP9LoopFilterFlags& meta_struct = *data; - FieldToJson(jdata["max_latency_increase_plus1"], &meta_struct.max_latency_increase_plus1, options); - FieldToJson(jdata["max_dec_pic_buffering_minus1"], &meta_struct.max_dec_pic_buffering_minus1, options); - FieldToJson(jdata["max_num_reorder_pics"], &meta_struct.max_num_reorder_pics, options); + FieldToJson(jdata["loop_filter_delta_enabled"], decoded_value.loop_filter_delta_enabled, options); + FieldToJson(jdata["loop_filter_delta_update"], decoded_value.loop_filter_delta_update, options); + FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265SubLayerHrdParameters* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9LoopFilter* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265SubLayerHrdParameters& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265SubLayerHrdParameters& meta_struct = *data; + const StdVideoVP9LoopFilter& decoded_value = *data->decoded_value; + const Decoded_StdVideoVP9LoopFilter& meta_struct = *data; - FieldToJson(jdata["bit_rate_value_minus1"], &meta_struct.bit_rate_value_minus1, options); - FieldToJson(jdata["cpb_size_value_minus1"], &meta_struct.cpb_size_value_minus1, options); - FieldToJson(jdata["cpb_size_du_value_minus1"], &meta_struct.cpb_size_du_value_minus1, options); - FieldToJson(jdata["bit_rate_du_value_minus1"], &meta_struct.bit_rate_du_value_minus1, options); - FieldToJson(jdata["cbr_flag"], decoded_value.cbr_flag, options); + FieldToJson(jdata["flags"], meta_struct.flags, options); + FieldToJson(jdata["loop_filter_level"], decoded_value.loop_filter_level, options); + FieldToJson(jdata["loop_filter_sharpness"], decoded_value.loop_filter_sharpness, options); + FieldToJson(jdata["update_ref_delta"], decoded_value.update_ref_delta, options); + FieldToJson(jdata["loop_filter_ref_deltas"], &meta_struct.loop_filter_ref_deltas, options); + FieldToJson(jdata["update_mode_delta"], decoded_value.update_mode_delta, options); + FieldToJson(jdata["loop_filter_mode_deltas"], &meta_struct.loop_filter_mode_deltas, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265HrdFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9SegmentationFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265HrdFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265HrdFlags& meta_struct = *data; + const StdVideoVP9SegmentationFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoVP9SegmentationFlags& meta_struct = *data; - FieldToJson(jdata["nal_hrd_parameters_present_flag"], decoded_value.nal_hrd_parameters_present_flag, options); - FieldToJson(jdata["vcl_hrd_parameters_present_flag"], decoded_value.vcl_hrd_parameters_present_flag, options); - FieldToJson(jdata["sub_pic_hrd_params_present_flag"], decoded_value.sub_pic_hrd_params_present_flag, options); - FieldToJson(jdata["sub_pic_cpb_params_in_pic_timing_sei_flag"], decoded_value.sub_pic_cpb_params_in_pic_timing_sei_flag, options); - FieldToJson(jdata["fixed_pic_rate_general_flag"], decoded_value.fixed_pic_rate_general_flag, options); - FieldToJson(jdata["fixed_pic_rate_within_cvs_flag"], decoded_value.fixed_pic_rate_within_cvs_flag, options); - FieldToJson(jdata["low_delay_hrd_flag"], decoded_value.low_delay_hrd_flag, options); + FieldToJson(jdata["segmentation_update_map"], decoded_value.segmentation_update_map, options); + FieldToJson(jdata["segmentation_temporal_update"], decoded_value.segmentation_temporal_update, options); + FieldToJson(jdata["segmentation_update_data"], decoded_value.segmentation_update_data, options); + FieldToJson(jdata["segmentation_abs_or_delta_update"], decoded_value.segmentation_abs_or_delta_update, options); + FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265HrdParameters* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9Segmentation* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265HrdParameters& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265HrdParameters& meta_struct = *data; + const StdVideoVP9Segmentation& decoded_value = *data->decoded_value; + const Decoded_StdVideoVP9Segmentation& meta_struct = *data; FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["tick_divisor_minus2"], decoded_value.tick_divisor_minus2, options); - FieldToJson(jdata["du_cpb_removal_delay_increment_length_minus1"], decoded_value.du_cpb_removal_delay_increment_length_minus1, options); - FieldToJson(jdata["dpb_output_delay_du_length_minus1"], decoded_value.dpb_output_delay_du_length_minus1, options); - FieldToJson(jdata["bit_rate_scale"], decoded_value.bit_rate_scale, options); - FieldToJson(jdata["cpb_size_scale"], decoded_value.cpb_size_scale, options); - FieldToJson(jdata["cpb_size_du_scale"], decoded_value.cpb_size_du_scale, options); - FieldToJson(jdata["initial_cpb_removal_delay_length_minus1"], decoded_value.initial_cpb_removal_delay_length_minus1, options); - FieldToJson(jdata["au_cpb_removal_delay_length_minus1"], decoded_value.au_cpb_removal_delay_length_minus1, options); - FieldToJson(jdata["dpb_output_delay_length_minus1"], decoded_value.dpb_output_delay_length_minus1, options); - FieldToJson(jdata["cpb_cnt_minus1"], &meta_struct.cpb_cnt_minus1, options); - FieldToJson(jdata["elemental_duration_in_tc_minus1"], &meta_struct.elemental_duration_in_tc_minus1, options); - FieldToJson(jdata["reserved"], &meta_struct.reserved, options); - FieldToJson(jdata["pSubLayerHrdParametersNal"], meta_struct.pSubLayerHrdParametersNal, options); - FieldToJson(jdata["pSubLayerHrdParametersVcl"], meta_struct.pSubLayerHrdParametersVcl, options); + FieldToJson(jdata["segmentation_tree_probs"], &meta_struct.segmentation_tree_probs, options); + FieldToJson(jdata["segmentation_pred_prob"], &meta_struct.segmentation_pred_prob, options); + FieldToJson(jdata["FeatureEnabled"], &meta_struct.FeatureEnabled, options); + FieldToJson(jdata["FeatureData"], &meta_struct.FeatureData, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265VpsFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeVP9PictureInfoFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265VpsFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265VpsFlags& meta_struct = *data; + const StdVideoDecodeVP9PictureInfoFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoDecodeVP9PictureInfoFlags& meta_struct = *data; - FieldToJson(jdata["vps_temporal_id_nesting_flag"], decoded_value.vps_temporal_id_nesting_flag, options); - FieldToJson(jdata["vps_sub_layer_ordering_info_present_flag"], decoded_value.vps_sub_layer_ordering_info_present_flag, options); - FieldToJson(jdata["vps_timing_info_present_flag"], decoded_value.vps_timing_info_present_flag, options); - FieldToJson(jdata["vps_poc_proportional_to_timing_flag"], decoded_value.vps_poc_proportional_to_timing_flag, options); + FieldToJson(jdata["error_resilient_mode"], decoded_value.error_resilient_mode, options); + FieldToJson(jdata["intra_only"], decoded_value.intra_only, options); + FieldToJson(jdata["allow_high_precision_mv"], decoded_value.allow_high_precision_mv, options); + FieldToJson(jdata["refresh_frame_context"], decoded_value.refresh_frame_context, options); + FieldToJson(jdata["frame_parallel_decoding_mode"], decoded_value.frame_parallel_decoding_mode, options); + FieldToJson(jdata["segmentation_enabled"], decoded_value.segmentation_enabled, options); + FieldToJson(jdata["show_frame"], decoded_value.show_frame, options); + FieldToJson(jdata["UsePrevFrameMvs"], decoded_value.UsePrevFrameMvs, options); + FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265VideoParameterSet* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeVP9PictureInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265VideoParameterSet& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265VideoParameterSet& meta_struct = *data; + const StdVideoDecodeVP9PictureInfo& decoded_value = *data->decoded_value; + const Decoded_StdVideoDecodeVP9PictureInfo& meta_struct = *data; FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["vps_video_parameter_set_id"], decoded_value.vps_video_parameter_set_id, options); - FieldToJson(jdata["vps_max_sub_layers_minus1"], decoded_value.vps_max_sub_layers_minus1, options); - FieldToJson(jdata["reserved1"], decoded_value.reserved1, options); - FieldToJson(jdata["reserved2"], decoded_value.reserved2, options); - FieldToJson(jdata["vps_num_units_in_tick"], decoded_value.vps_num_units_in_tick, options); - FieldToJson(jdata["vps_time_scale"], decoded_value.vps_time_scale, options); - FieldToJson(jdata["vps_num_ticks_poc_diff_one_minus1"], decoded_value.vps_num_ticks_poc_diff_one_minus1, options); - FieldToJson(jdata["reserved3"], decoded_value.reserved3, options); - FieldToJson(jdata["pDecPicBufMgr"], meta_struct.pDecPicBufMgr, options); - FieldToJson(jdata["pHrdParameters"], meta_struct.pHrdParameters, options); - FieldToJson(jdata["pProfileTierLevel"], meta_struct.pProfileTierLevel, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265ScalingLists* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const StdVideoH265ScalingLists& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265ScalingLists& meta_struct = *data; - - FieldToJson(jdata["ScalingList4x4"], &meta_struct.ScalingList4x4, options); - FieldToJson(jdata["ScalingList8x8"], &meta_struct.ScalingList8x8, options); - FieldToJson(jdata["ScalingList16x16"], &meta_struct.ScalingList16x16, options); - FieldToJson(jdata["ScalingList32x32"], &meta_struct.ScalingList32x32, options); - FieldToJson(jdata["ScalingListDCCoef16x16"], &meta_struct.ScalingListDCCoef16x16, options); - FieldToJson(jdata["ScalingListDCCoef32x32"], &meta_struct.ScalingListDCCoef32x32, options); + FieldToJson(jdata["profile"], decoded_value.profile, options); + FieldToJson(jdata["frame_type"], decoded_value.frame_type, options); + FieldToJson(jdata["frame_context_idx"], decoded_value.frame_context_idx, options); + FieldToJson(jdata["reset_frame_context"], decoded_value.reset_frame_context, options); + FieldToJson(jdata["refresh_frame_flags"], decoded_value.refresh_frame_flags, options); + FieldToJson(jdata["ref_frame_sign_bias_mask"], decoded_value.ref_frame_sign_bias_mask, options); + FieldToJson(jdata["interpolation_filter"], decoded_value.interpolation_filter, options); + FieldToJson(jdata["base_q_idx"], decoded_value.base_q_idx, options); + FieldToJson(jdata["delta_q_y_dc"], decoded_value.delta_q_y_dc, options); + FieldToJson(jdata["delta_q_uv_dc"], decoded_value.delta_q_uv_dc, options); + FieldToJson(jdata["delta_q_uv_ac"], decoded_value.delta_q_uv_ac, options); + FieldToJson(jdata["tile_cols_log2"], decoded_value.tile_cols_log2, options); + FieldToJson(jdata["tile_rows_log2"], decoded_value.tile_rows_log2, options); + FieldToJson(jdata["reserved1"], &meta_struct.reserved1, options); + FieldToJson(jdata["pColorConfig"], meta_struct.pColorConfig, options); + FieldToJson(jdata["pLoopFilter"], meta_struct.pLoopFilter, options); + FieldToJson(jdata["pSegmentation"], meta_struct.pSegmentation, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265ShortTermRefPicSetFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1ColorConfigFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265ShortTermRefPicSetFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265ShortTermRefPicSetFlags& meta_struct = *data; + const StdVideoAV1ColorConfigFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1ColorConfigFlags& meta_struct = *data; - FieldToJson(jdata["inter_ref_pic_set_prediction_flag"], decoded_value.inter_ref_pic_set_prediction_flag, options); - FieldToJson(jdata["delta_rps_sign"], decoded_value.delta_rps_sign, options); + FieldToJson(jdata["mono_chrome"], decoded_value.mono_chrome, options); + FieldToJson(jdata["color_range"], decoded_value.color_range, options); + FieldToJson(jdata["separate_uv_delta_q"], decoded_value.separate_uv_delta_q, options); + FieldToJson(jdata["color_description_present_flag"], decoded_value.color_description_present_flag, options); + FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265ShortTermRefPicSet* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1ColorConfig* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265ShortTermRefPicSet& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265ShortTermRefPicSet& meta_struct = *data; + const StdVideoAV1ColorConfig& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1ColorConfig& meta_struct = *data; FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["delta_idx_minus1"], decoded_value.delta_idx_minus1, options); - FieldToJson(jdata["use_delta_flag"], decoded_value.use_delta_flag, options); - FieldToJson(jdata["abs_delta_rps_minus1"], decoded_value.abs_delta_rps_minus1, options); - FieldToJson(jdata["used_by_curr_pic_flag"], decoded_value.used_by_curr_pic_flag, options); - FieldToJson(jdata["used_by_curr_pic_s0_flag"], decoded_value.used_by_curr_pic_s0_flag, options); - FieldToJson(jdata["used_by_curr_pic_s1_flag"], decoded_value.used_by_curr_pic_s1_flag, options); + FieldToJson(jdata["BitDepth"], decoded_value.BitDepth, options); + FieldToJson(jdata["subsampling_x"], decoded_value.subsampling_x, options); + FieldToJson(jdata["subsampling_y"], decoded_value.subsampling_y, options); FieldToJson(jdata["reserved1"], decoded_value.reserved1, options); - FieldToJson(jdata["reserved2"], decoded_value.reserved2, options); - FieldToJson(jdata["reserved3"], decoded_value.reserved3, options); - FieldToJson(jdata["num_negative_pics"], decoded_value.num_negative_pics, options); - FieldToJson(jdata["num_positive_pics"], decoded_value.num_positive_pics, options); - FieldToJson(jdata["delta_poc_s0_minus1"], &meta_struct.delta_poc_s0_minus1, options); - FieldToJson(jdata["delta_poc_s1_minus1"], &meta_struct.delta_poc_s1_minus1, options); + FieldToJson(jdata["color_primaries"], decoded_value.color_primaries, options); + FieldToJson(jdata["transfer_characteristics"], decoded_value.transfer_characteristics, options); + FieldToJson(jdata["matrix_coefficients"], decoded_value.matrix_coefficients, options); + FieldToJson(jdata["chroma_sample_position"], decoded_value.chroma_sample_position, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265LongTermRefPicsSps* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1TimingInfoFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265LongTermRefPicsSps& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265LongTermRefPicsSps& meta_struct = *data; + const StdVideoAV1TimingInfoFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1TimingInfoFlags& meta_struct = *data; - FieldToJson(jdata["used_by_curr_pic_lt_sps_flag"], decoded_value.used_by_curr_pic_lt_sps_flag, options); - FieldToJson(jdata["lt_ref_pic_poc_lsb_sps"], &meta_struct.lt_ref_pic_poc_lsb_sps, options); + FieldToJson(jdata["equal_picture_interval"], decoded_value.equal_picture_interval, options); + FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265SpsVuiFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1TimingInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265SpsVuiFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265SpsVuiFlags& meta_struct = *data; + const StdVideoAV1TimingInfo& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1TimingInfo& meta_struct = *data; - FieldToJson(jdata["aspect_ratio_info_present_flag"], decoded_value.aspect_ratio_info_present_flag, options); - FieldToJson(jdata["overscan_info_present_flag"], decoded_value.overscan_info_present_flag, options); - FieldToJson(jdata["overscan_appropriate_flag"], decoded_value.overscan_appropriate_flag, options); - FieldToJson(jdata["video_signal_type_present_flag"], decoded_value.video_signal_type_present_flag, options); - FieldToJson(jdata["video_full_range_flag"], decoded_value.video_full_range_flag, options); - FieldToJson(jdata["colour_description_present_flag"], decoded_value.colour_description_present_flag, options); - FieldToJson(jdata["chroma_loc_info_present_flag"], decoded_value.chroma_loc_info_present_flag, options); - FieldToJson(jdata["neutral_chroma_indication_flag"], decoded_value.neutral_chroma_indication_flag, options); - FieldToJson(jdata["field_seq_flag"], decoded_value.field_seq_flag, options); - FieldToJson(jdata["frame_field_info_present_flag"], decoded_value.frame_field_info_present_flag, options); - FieldToJson(jdata["default_display_window_flag"], decoded_value.default_display_window_flag, options); - FieldToJson(jdata["vui_timing_info_present_flag"], decoded_value.vui_timing_info_present_flag, options); - FieldToJson(jdata["vui_poc_proportional_to_timing_flag"], decoded_value.vui_poc_proportional_to_timing_flag, options); - FieldToJson(jdata["vui_hrd_parameters_present_flag"], decoded_value.vui_hrd_parameters_present_flag, options); - FieldToJson(jdata["bitstream_restriction_flag"], decoded_value.bitstream_restriction_flag, options); - FieldToJson(jdata["tiles_fixed_structure_flag"], decoded_value.tiles_fixed_structure_flag, options); - FieldToJson(jdata["motion_vectors_over_pic_boundaries_flag"], decoded_value.motion_vectors_over_pic_boundaries_flag, options); - FieldToJson(jdata["restricted_ref_pic_lists_flag"], decoded_value.restricted_ref_pic_lists_flag, options); + FieldToJson(jdata["flags"], meta_struct.flags, options); + FieldToJson(jdata["num_units_in_display_tick"], decoded_value.num_units_in_display_tick, options); + FieldToJson(jdata["time_scale"], decoded_value.time_scale, options); + FieldToJson(jdata["num_ticks_per_picture_minus_1"], decoded_value.num_ticks_per_picture_minus_1, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265SequenceParameterSetVui* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1SequenceHeaderFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265SequenceParameterSetVui& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265SequenceParameterSetVui& meta_struct = *data; + const StdVideoAV1SequenceHeaderFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1SequenceHeaderFlags& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["aspect_ratio_idc"], decoded_value.aspect_ratio_idc, options); - FieldToJson(jdata["sar_width"], decoded_value.sar_width, options); - FieldToJson(jdata["sar_height"], decoded_value.sar_height, options); - FieldToJson(jdata["video_format"], decoded_value.video_format, options); - FieldToJson(jdata["colour_primaries"], decoded_value.colour_primaries, options); - FieldToJson(jdata["transfer_characteristics"], decoded_value.transfer_characteristics, options); - FieldToJson(jdata["matrix_coeffs"], decoded_value.matrix_coeffs, options); - FieldToJson(jdata["chroma_sample_loc_type_top_field"], decoded_value.chroma_sample_loc_type_top_field, options); - FieldToJson(jdata["chroma_sample_loc_type_bottom_field"], decoded_value.chroma_sample_loc_type_bottom_field, options); - FieldToJson(jdata["reserved1"], decoded_value.reserved1, options); - FieldToJson(jdata["reserved2"], decoded_value.reserved2, options); - FieldToJson(jdata["def_disp_win_left_offset"], decoded_value.def_disp_win_left_offset, options); - FieldToJson(jdata["def_disp_win_right_offset"], decoded_value.def_disp_win_right_offset, options); - FieldToJson(jdata["def_disp_win_top_offset"], decoded_value.def_disp_win_top_offset, options); - FieldToJson(jdata["def_disp_win_bottom_offset"], decoded_value.def_disp_win_bottom_offset, options); - FieldToJson(jdata["vui_num_units_in_tick"], decoded_value.vui_num_units_in_tick, options); - FieldToJson(jdata["vui_time_scale"], decoded_value.vui_time_scale, options); - FieldToJson(jdata["vui_num_ticks_poc_diff_one_minus1"], decoded_value.vui_num_ticks_poc_diff_one_minus1, options); - FieldToJson(jdata["min_spatial_segmentation_idc"], decoded_value.min_spatial_segmentation_idc, options); - FieldToJson(jdata["reserved3"], decoded_value.reserved3, options); - FieldToJson(jdata["max_bytes_per_pic_denom"], decoded_value.max_bytes_per_pic_denom, options); - FieldToJson(jdata["max_bits_per_min_cu_denom"], decoded_value.max_bits_per_min_cu_denom, options); - FieldToJson(jdata["log2_max_mv_length_horizontal"], decoded_value.log2_max_mv_length_horizontal, options); - FieldToJson(jdata["log2_max_mv_length_vertical"], decoded_value.log2_max_mv_length_vertical, options); - FieldToJson(jdata["pHrdParameters"], meta_struct.pHrdParameters, options); + FieldToJson(jdata["still_picture"], decoded_value.still_picture, options); + FieldToJson(jdata["reduced_still_picture_header"], decoded_value.reduced_still_picture_header, options); + FieldToJson(jdata["use_128x128_superblock"], decoded_value.use_128x128_superblock, options); + FieldToJson(jdata["enable_filter_intra"], decoded_value.enable_filter_intra, options); + FieldToJson(jdata["enable_intra_edge_filter"], decoded_value.enable_intra_edge_filter, options); + FieldToJson(jdata["enable_interintra_compound"], decoded_value.enable_interintra_compound, options); + FieldToJson(jdata["enable_masked_compound"], decoded_value.enable_masked_compound, options); + FieldToJson(jdata["enable_warped_motion"], decoded_value.enable_warped_motion, options); + FieldToJson(jdata["enable_dual_filter"], decoded_value.enable_dual_filter, options); + FieldToJson(jdata["enable_order_hint"], decoded_value.enable_order_hint, options); + FieldToJson(jdata["enable_jnt_comp"], decoded_value.enable_jnt_comp, options); + FieldToJson(jdata["enable_ref_frame_mvs"], decoded_value.enable_ref_frame_mvs, options); + FieldToJson(jdata["frame_id_numbers_present_flag"], decoded_value.frame_id_numbers_present_flag, options); + FieldToJson(jdata["enable_superres"], decoded_value.enable_superres, options); + FieldToJson(jdata["enable_cdef"], decoded_value.enable_cdef, options); + FieldToJson(jdata["enable_restoration"], decoded_value.enable_restoration, options); + FieldToJson(jdata["film_grain_params_present"], decoded_value.film_grain_params_present, options); + FieldToJson(jdata["timing_info_present_flag"], decoded_value.timing_info_present_flag, options); + FieldToJson(jdata["initial_display_delay_present_flag"], decoded_value.initial_display_delay_present_flag, options); + FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265PredictorPaletteEntries* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1SequenceHeader* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265PredictorPaletteEntries& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265PredictorPaletteEntries& meta_struct = *data; + const StdVideoAV1SequenceHeader& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1SequenceHeader& meta_struct = *data; - FieldToJson(jdata["PredictorPaletteEntries"], &meta_struct.PredictorPaletteEntries, options); + FieldToJson(jdata["flags"], meta_struct.flags, options); + FieldToJson(jdata["seq_profile"], decoded_value.seq_profile, options); + FieldToJson(jdata["frame_width_bits_minus_1"], decoded_value.frame_width_bits_minus_1, options); + FieldToJson(jdata["frame_height_bits_minus_1"], decoded_value.frame_height_bits_minus_1, options); + FieldToJson(jdata["max_frame_width_minus_1"], decoded_value.max_frame_width_minus_1, options); + FieldToJson(jdata["max_frame_height_minus_1"], decoded_value.max_frame_height_minus_1, options); + FieldToJson(jdata["delta_frame_id_length_minus_2"], decoded_value.delta_frame_id_length_minus_2, options); + FieldToJson(jdata["additional_frame_id_length_minus_1"], decoded_value.additional_frame_id_length_minus_1, options); + FieldToJson(jdata["order_hint_bits_minus_1"], decoded_value.order_hint_bits_minus_1, options); + FieldToJson(jdata["seq_force_integer_mv"], decoded_value.seq_force_integer_mv, options); + FieldToJson(jdata["seq_force_screen_content_tools"], decoded_value.seq_force_screen_content_tools, options); + FieldToJson(jdata["reserved1"], &meta_struct.reserved1, options); + FieldToJson(jdata["pColorConfig"], meta_struct.pColorConfig, options); + FieldToJson(jdata["pTimingInfo"], meta_struct.pTimingInfo, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265SpsFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1LoopFilterFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265SpsFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265SpsFlags& meta_struct = *data; + const StdVideoAV1LoopFilterFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1LoopFilterFlags& meta_struct = *data; - FieldToJson(jdata["sps_temporal_id_nesting_flag"], decoded_value.sps_temporal_id_nesting_flag, options); - FieldToJson(jdata["separate_colour_plane_flag"], decoded_value.separate_colour_plane_flag, options); - FieldToJson(jdata["conformance_window_flag"], decoded_value.conformance_window_flag, options); - FieldToJson(jdata["sps_sub_layer_ordering_info_present_flag"], decoded_value.sps_sub_layer_ordering_info_present_flag, options); - FieldToJson(jdata["scaling_list_enabled_flag"], decoded_value.scaling_list_enabled_flag, options); - FieldToJson(jdata["sps_scaling_list_data_present_flag"], decoded_value.sps_scaling_list_data_present_flag, options); - FieldToJson(jdata["amp_enabled_flag"], decoded_value.amp_enabled_flag, options); - FieldToJson(jdata["sample_adaptive_offset_enabled_flag"], decoded_value.sample_adaptive_offset_enabled_flag, options); - FieldToJson(jdata["pcm_enabled_flag"], decoded_value.pcm_enabled_flag, options); - FieldToJson(jdata["pcm_loop_filter_disabled_flag"], decoded_value.pcm_loop_filter_disabled_flag, options); - FieldToJson(jdata["long_term_ref_pics_present_flag"], decoded_value.long_term_ref_pics_present_flag, options); - FieldToJson(jdata["sps_temporal_mvp_enabled_flag"], decoded_value.sps_temporal_mvp_enabled_flag, options); - FieldToJson(jdata["strong_intra_smoothing_enabled_flag"], decoded_value.strong_intra_smoothing_enabled_flag, options); - FieldToJson(jdata["vui_parameters_present_flag"], decoded_value.vui_parameters_present_flag, options); - FieldToJson(jdata["sps_extension_present_flag"], decoded_value.sps_extension_present_flag, options); - FieldToJson(jdata["sps_range_extension_flag"], decoded_value.sps_range_extension_flag, options); - FieldToJson(jdata["transform_skip_rotation_enabled_flag"], decoded_value.transform_skip_rotation_enabled_flag, options); - FieldToJson(jdata["transform_skip_context_enabled_flag"], decoded_value.transform_skip_context_enabled_flag, options); - FieldToJson(jdata["implicit_rdpcm_enabled_flag"], decoded_value.implicit_rdpcm_enabled_flag, options); - FieldToJson(jdata["explicit_rdpcm_enabled_flag"], decoded_value.explicit_rdpcm_enabled_flag, options); - FieldToJson(jdata["extended_precision_processing_flag"], decoded_value.extended_precision_processing_flag, options); - FieldToJson(jdata["intra_smoothing_disabled_flag"], decoded_value.intra_smoothing_disabled_flag, options); - FieldToJson(jdata["high_precision_offsets_enabled_flag"], decoded_value.high_precision_offsets_enabled_flag, options); - FieldToJson(jdata["persistent_rice_adaptation_enabled_flag"], decoded_value.persistent_rice_adaptation_enabled_flag, options); - FieldToJson(jdata["cabac_bypass_alignment_enabled_flag"], decoded_value.cabac_bypass_alignment_enabled_flag, options); - FieldToJson(jdata["sps_scc_extension_flag"], decoded_value.sps_scc_extension_flag, options); - FieldToJson(jdata["sps_curr_pic_ref_enabled_flag"], decoded_value.sps_curr_pic_ref_enabled_flag, options); - FieldToJson(jdata["palette_mode_enabled_flag"], decoded_value.palette_mode_enabled_flag, options); - FieldToJson(jdata["sps_palette_predictor_initializers_present_flag"], decoded_value.sps_palette_predictor_initializers_present_flag, options); - FieldToJson(jdata["intra_boundary_filtering_disabled_flag"], decoded_value.intra_boundary_filtering_disabled_flag, options); + FieldToJson(jdata["loop_filter_delta_enabled"], decoded_value.loop_filter_delta_enabled, options); + FieldToJson(jdata["loop_filter_delta_update"], decoded_value.loop_filter_delta_update, options); + FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265SequenceParameterSet* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1LoopFilter* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265SequenceParameterSet& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265SequenceParameterSet& meta_struct = *data; + const StdVideoAV1LoopFilter& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1LoopFilter& meta_struct = *data; FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["chroma_format_idc"], decoded_value.chroma_format_idc, options); - FieldToJson(jdata["pic_width_in_luma_samples"], decoded_value.pic_width_in_luma_samples, options); - FieldToJson(jdata["pic_height_in_luma_samples"], decoded_value.pic_height_in_luma_samples, options); - FieldToJson(jdata["sps_video_parameter_set_id"], decoded_value.sps_video_parameter_set_id, options); - FieldToJson(jdata["sps_max_sub_layers_minus1"], decoded_value.sps_max_sub_layers_minus1, options); - FieldToJson(jdata["sps_seq_parameter_set_id"], decoded_value.sps_seq_parameter_set_id, options); - FieldToJson(jdata["bit_depth_luma_minus8"], decoded_value.bit_depth_luma_minus8, options); - FieldToJson(jdata["bit_depth_chroma_minus8"], decoded_value.bit_depth_chroma_minus8, options); - FieldToJson(jdata["log2_max_pic_order_cnt_lsb_minus4"], decoded_value.log2_max_pic_order_cnt_lsb_minus4, options); - FieldToJson(jdata["log2_min_luma_coding_block_size_minus3"], decoded_value.log2_min_luma_coding_block_size_minus3, options); - FieldToJson(jdata["log2_diff_max_min_luma_coding_block_size"], decoded_value.log2_diff_max_min_luma_coding_block_size, options); - FieldToJson(jdata["log2_min_luma_transform_block_size_minus2"], decoded_value.log2_min_luma_transform_block_size_minus2, options); - FieldToJson(jdata["log2_diff_max_min_luma_transform_block_size"], decoded_value.log2_diff_max_min_luma_transform_block_size, options); - FieldToJson(jdata["max_transform_hierarchy_depth_inter"], decoded_value.max_transform_hierarchy_depth_inter, options); - FieldToJson(jdata["max_transform_hierarchy_depth_intra"], decoded_value.max_transform_hierarchy_depth_intra, options); - FieldToJson(jdata["num_short_term_ref_pic_sets"], decoded_value.num_short_term_ref_pic_sets, options); - FieldToJson(jdata["num_long_term_ref_pics_sps"], decoded_value.num_long_term_ref_pics_sps, options); - FieldToJson(jdata["pcm_sample_bit_depth_luma_minus1"], decoded_value.pcm_sample_bit_depth_luma_minus1, options); - FieldToJson(jdata["pcm_sample_bit_depth_chroma_minus1"], decoded_value.pcm_sample_bit_depth_chroma_minus1, options); - FieldToJson(jdata["log2_min_pcm_luma_coding_block_size_minus3"], decoded_value.log2_min_pcm_luma_coding_block_size_minus3, options); - FieldToJson(jdata["log2_diff_max_min_pcm_luma_coding_block_size"], decoded_value.log2_diff_max_min_pcm_luma_coding_block_size, options); - FieldToJson(jdata["reserved1"], decoded_value.reserved1, options); - FieldToJson(jdata["reserved2"], decoded_value.reserved2, options); - FieldToJson(jdata["palette_max_size"], decoded_value.palette_max_size, options); - FieldToJson(jdata["delta_palette_max_predictor_size"], decoded_value.delta_palette_max_predictor_size, options); - FieldToJson(jdata["motion_vector_resolution_control_idc"], decoded_value.motion_vector_resolution_control_idc, options); - FieldToJson(jdata["sps_num_palette_predictor_initializers_minus1"], decoded_value.sps_num_palette_predictor_initializers_minus1, options); - FieldToJson(jdata["conf_win_left_offset"], decoded_value.conf_win_left_offset, options); - FieldToJson(jdata["conf_win_right_offset"], decoded_value.conf_win_right_offset, options); - FieldToJson(jdata["conf_win_top_offset"], decoded_value.conf_win_top_offset, options); - FieldToJson(jdata["conf_win_bottom_offset"], decoded_value.conf_win_bottom_offset, options); - FieldToJson(jdata["pProfileTierLevel"], meta_struct.pProfileTierLevel, options); - FieldToJson(jdata["pDecPicBufMgr"], meta_struct.pDecPicBufMgr, options); - FieldToJson(jdata["pScalingLists"], meta_struct.pScalingLists, options); - FieldToJson(jdata["pShortTermRefPicSet"], meta_struct.pShortTermRefPicSet, options); - FieldToJson(jdata["pLongTermRefPicsSps"], meta_struct.pLongTermRefPicsSps, options); - FieldToJson(jdata["pSequenceParameterSetVui"], meta_struct.pSequenceParameterSetVui, options); - FieldToJson(jdata["pPredictorPaletteEntries"], meta_struct.pPredictorPaletteEntries, options); + FieldToJson(jdata["loop_filter_level"], &meta_struct.loop_filter_level, options); + FieldToJson(jdata["loop_filter_sharpness"], decoded_value.loop_filter_sharpness, options); + FieldToJson(jdata["update_ref_delta"], decoded_value.update_ref_delta, options); + FieldToJson(jdata["loop_filter_ref_deltas"], &meta_struct.loop_filter_ref_deltas, options); + FieldToJson(jdata["update_mode_delta"], decoded_value.update_mode_delta, options); + FieldToJson(jdata["loop_filter_mode_deltas"], &meta_struct.loop_filter_mode_deltas, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265PpsFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1QuantizationFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265PpsFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265PpsFlags& meta_struct = *data; + const StdVideoAV1QuantizationFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1QuantizationFlags& meta_struct = *data; - FieldToJson(jdata["dependent_slice_segments_enabled_flag"], decoded_value.dependent_slice_segments_enabled_flag, options); - FieldToJson(jdata["output_flag_present_flag"], decoded_value.output_flag_present_flag, options); - FieldToJson(jdata["sign_data_hiding_enabled_flag"], decoded_value.sign_data_hiding_enabled_flag, options); - FieldToJson(jdata["cabac_init_present_flag"], decoded_value.cabac_init_present_flag, options); - FieldToJson(jdata["constrained_intra_pred_flag"], decoded_value.constrained_intra_pred_flag, options); - FieldToJson(jdata["transform_skip_enabled_flag"], decoded_value.transform_skip_enabled_flag, options); - FieldToJson(jdata["cu_qp_delta_enabled_flag"], decoded_value.cu_qp_delta_enabled_flag, options); - FieldToJson(jdata["pps_slice_chroma_qp_offsets_present_flag"], decoded_value.pps_slice_chroma_qp_offsets_present_flag, options); - FieldToJson(jdata["weighted_pred_flag"], decoded_value.weighted_pred_flag, options); - FieldToJson(jdata["weighted_bipred_flag"], decoded_value.weighted_bipred_flag, options); - FieldToJson(jdata["transquant_bypass_enabled_flag"], decoded_value.transquant_bypass_enabled_flag, options); - FieldToJson(jdata["tiles_enabled_flag"], decoded_value.tiles_enabled_flag, options); - FieldToJson(jdata["entropy_coding_sync_enabled_flag"], decoded_value.entropy_coding_sync_enabled_flag, options); - FieldToJson(jdata["uniform_spacing_flag"], decoded_value.uniform_spacing_flag, options); - FieldToJson(jdata["loop_filter_across_tiles_enabled_flag"], decoded_value.loop_filter_across_tiles_enabled_flag, options); - FieldToJson(jdata["pps_loop_filter_across_slices_enabled_flag"], decoded_value.pps_loop_filter_across_slices_enabled_flag, options); - FieldToJson(jdata["deblocking_filter_control_present_flag"], decoded_value.deblocking_filter_control_present_flag, options); - FieldToJson(jdata["deblocking_filter_override_enabled_flag"], decoded_value.deblocking_filter_override_enabled_flag, options); - FieldToJson(jdata["pps_deblocking_filter_disabled_flag"], decoded_value.pps_deblocking_filter_disabled_flag, options); - FieldToJson(jdata["pps_scaling_list_data_present_flag"], decoded_value.pps_scaling_list_data_present_flag, options); - FieldToJson(jdata["lists_modification_present_flag"], decoded_value.lists_modification_present_flag, options); - FieldToJson(jdata["slice_segment_header_extension_present_flag"], decoded_value.slice_segment_header_extension_present_flag, options); - FieldToJson(jdata["pps_extension_present_flag"], decoded_value.pps_extension_present_flag, options); - FieldToJson(jdata["cross_component_prediction_enabled_flag"], decoded_value.cross_component_prediction_enabled_flag, options); - FieldToJson(jdata["chroma_qp_offset_list_enabled_flag"], decoded_value.chroma_qp_offset_list_enabled_flag, options); - FieldToJson(jdata["pps_curr_pic_ref_enabled_flag"], decoded_value.pps_curr_pic_ref_enabled_flag, options); - FieldToJson(jdata["residual_adaptive_colour_transform_enabled_flag"], decoded_value.residual_adaptive_colour_transform_enabled_flag, options); - FieldToJson(jdata["pps_slice_act_qp_offsets_present_flag"], decoded_value.pps_slice_act_qp_offsets_present_flag, options); - FieldToJson(jdata["pps_palette_predictor_initializers_present_flag"], decoded_value.pps_palette_predictor_initializers_present_flag, options); - FieldToJson(jdata["monochrome_palette_flag"], decoded_value.monochrome_palette_flag, options); - FieldToJson(jdata["pps_range_extension_flag"], decoded_value.pps_range_extension_flag, options); + FieldToJson(jdata["using_qmatrix"], decoded_value.using_qmatrix, options); + FieldToJson(jdata["diff_uv_delta"], decoded_value.diff_uv_delta, options); + FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265PictureParameterSet* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1Quantization* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoH265PictureParameterSet& decoded_value = *data->decoded_value; - const Decoded_StdVideoH265PictureParameterSet& meta_struct = *data; + const StdVideoAV1Quantization& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1Quantization& meta_struct = *data; FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["pps_pic_parameter_set_id"], decoded_value.pps_pic_parameter_set_id, options); - FieldToJson(jdata["pps_seq_parameter_set_id"], decoded_value.pps_seq_parameter_set_id, options); - FieldToJson(jdata["sps_video_parameter_set_id"], decoded_value.sps_video_parameter_set_id, options); - FieldToJson(jdata["num_extra_slice_header_bits"], decoded_value.num_extra_slice_header_bits, options); - FieldToJson(jdata["num_ref_idx_l0_default_active_minus1"], decoded_value.num_ref_idx_l0_default_active_minus1, options); - FieldToJson(jdata["num_ref_idx_l1_default_active_minus1"], decoded_value.num_ref_idx_l1_default_active_minus1, options); - FieldToJson(jdata["init_qp_minus26"], decoded_value.init_qp_minus26, options); - FieldToJson(jdata["diff_cu_qp_delta_depth"], decoded_value.diff_cu_qp_delta_depth, options); - FieldToJson(jdata["pps_cb_qp_offset"], decoded_value.pps_cb_qp_offset, options); - FieldToJson(jdata["pps_cr_qp_offset"], decoded_value.pps_cr_qp_offset, options); - FieldToJson(jdata["pps_beta_offset_div2"], decoded_value.pps_beta_offset_div2, options); - FieldToJson(jdata["pps_tc_offset_div2"], decoded_value.pps_tc_offset_div2, options); - FieldToJson(jdata["log2_parallel_merge_level_minus2"], decoded_value.log2_parallel_merge_level_minus2, options); - FieldToJson(jdata["log2_max_transform_skip_block_size_minus2"], decoded_value.log2_max_transform_skip_block_size_minus2, options); - FieldToJson(jdata["diff_cu_chroma_qp_offset_depth"], decoded_value.diff_cu_chroma_qp_offset_depth, options); - FieldToJson(jdata["chroma_qp_offset_list_len_minus1"], decoded_value.chroma_qp_offset_list_len_minus1, options); - FieldToJson(jdata["cb_qp_offset_list"], &meta_struct.cb_qp_offset_list, options); - FieldToJson(jdata["cr_qp_offset_list"], &meta_struct.cr_qp_offset_list, options); - FieldToJson(jdata["log2_sao_offset_scale_luma"], decoded_value.log2_sao_offset_scale_luma, options); - FieldToJson(jdata["log2_sao_offset_scale_chroma"], decoded_value.log2_sao_offset_scale_chroma, options); - FieldToJson(jdata["pps_act_y_qp_offset_plus5"], decoded_value.pps_act_y_qp_offset_plus5, options); - FieldToJson(jdata["pps_act_cb_qp_offset_plus5"], decoded_value.pps_act_cb_qp_offset_plus5, options); - FieldToJson(jdata["pps_act_cr_qp_offset_plus3"], decoded_value.pps_act_cr_qp_offset_plus3, options); - FieldToJson(jdata["pps_num_palette_predictor_initializers"], decoded_value.pps_num_palette_predictor_initializers, options); - FieldToJson(jdata["luma_bit_depth_entry_minus8"], decoded_value.luma_bit_depth_entry_minus8, options); - FieldToJson(jdata["chroma_bit_depth_entry_minus8"], decoded_value.chroma_bit_depth_entry_minus8, options); - FieldToJson(jdata["num_tile_columns_minus1"], decoded_value.num_tile_columns_minus1, options); - FieldToJson(jdata["num_tile_rows_minus1"], decoded_value.num_tile_rows_minus1, options); - FieldToJson(jdata["reserved1"], decoded_value.reserved1, options); - FieldToJson(jdata["reserved2"], decoded_value.reserved2, options); - FieldToJson(jdata["column_width_minus1"], &meta_struct.column_width_minus1, options); - FieldToJson(jdata["row_height_minus1"], &meta_struct.row_height_minus1, options); - FieldToJson(jdata["reserved3"], decoded_value.reserved3, options); - FieldToJson(jdata["pScalingLists"], meta_struct.pScalingLists, options); - FieldToJson(jdata["pPredictorPaletteEntries"], meta_struct.pPredictorPaletteEntries, options); + FieldToJson(jdata["base_q_idx"], decoded_value.base_q_idx, options); + FieldToJson(jdata["DeltaQYDc"], decoded_value.DeltaQYDc, options); + FieldToJson(jdata["DeltaQUDc"], decoded_value.DeltaQUDc, options); + FieldToJson(jdata["DeltaQUAc"], decoded_value.DeltaQUAc, options); + FieldToJson(jdata["DeltaQVDc"], decoded_value.DeltaQVDc, options); + FieldToJson(jdata["DeltaQVAc"], decoded_value.DeltaQVAc, options); + FieldToJson(jdata["qm_y"], decoded_value.qm_y, options); + FieldToJson(jdata["qm_u"], decoded_value.qm_u, options); + FieldToJson(jdata["qm_v"], decoded_value.qm_v, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeH265PictureInfoFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1Segmentation* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoDecodeH265PictureInfoFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoDecodeH265PictureInfoFlags& meta_struct = *data; + const StdVideoAV1Segmentation& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1Segmentation& meta_struct = *data; - FieldToJson(jdata["IrapPicFlag"], decoded_value.IrapPicFlag, options); - FieldToJson(jdata["IdrPicFlag"], decoded_value.IdrPicFlag, options); - FieldToJson(jdata["IsReference"], decoded_value.IsReference, options); - FieldToJson(jdata["short_term_ref_pic_set_sps_flag"], decoded_value.short_term_ref_pic_set_sps_flag, options); + FieldToJson(jdata["FeatureEnabled"], &meta_struct.FeatureEnabled, options); + FieldToJson(jdata["FeatureData"], &meta_struct.FeatureData, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeH265PictureInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1TileInfoFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoDecodeH265PictureInfo& decoded_value = *data->decoded_value; - const Decoded_StdVideoDecodeH265PictureInfo& meta_struct = *data; + const StdVideoAV1TileInfoFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1TileInfoFlags& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["sps_video_parameter_set_id"], decoded_value.sps_video_parameter_set_id, options); - FieldToJson(jdata["pps_seq_parameter_set_id"], decoded_value.pps_seq_parameter_set_id, options); - FieldToJson(jdata["pps_pic_parameter_set_id"], decoded_value.pps_pic_parameter_set_id, options); - FieldToJson(jdata["NumDeltaPocsOfRefRpsIdx"], decoded_value.NumDeltaPocsOfRefRpsIdx, options); - FieldToJson(jdata["PicOrderCntVal"], decoded_value.PicOrderCntVal, options); - FieldToJson(jdata["NumBitsForSTRefPicSetInSlice"], decoded_value.NumBitsForSTRefPicSetInSlice, options); + FieldToJson(jdata["uniform_tile_spacing_flag"], decoded_value.uniform_tile_spacing_flag, options); FieldToJson(jdata["reserved"], decoded_value.reserved, options); - FieldToJson(jdata["RefPicSetStCurrBefore"], &meta_struct.RefPicSetStCurrBefore, options); - FieldToJson(jdata["RefPicSetStCurrAfter"], &meta_struct.RefPicSetStCurrAfter, options); - FieldToJson(jdata["RefPicSetLtCurr"], &meta_struct.RefPicSetLtCurr, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeH265ReferenceInfoFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1TileInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoDecodeH265ReferenceInfoFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoDecodeH265ReferenceInfoFlags& meta_struct = *data; - - FieldToJson(jdata["used_for_long_term_reference"], decoded_value.used_for_long_term_reference, options); - FieldToJson(jdata["unused_for_reference"], decoded_value.unused_for_reference, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeH265ReferenceInfo* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const StdVideoDecodeH265ReferenceInfo& decoded_value = *data->decoded_value; - const Decoded_StdVideoDecodeH265ReferenceInfo& meta_struct = *data; + const StdVideoAV1TileInfo& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1TileInfo& meta_struct = *data; FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["PicOrderCntVal"], decoded_value.PicOrderCntVal, options); + FieldToJson(jdata["TileCols"], decoded_value.TileCols, options); + FieldToJson(jdata["TileRows"], decoded_value.TileRows, options); + FieldToJson(jdata["context_update_tile_id"], decoded_value.context_update_tile_id, options); + FieldToJson(jdata["tile_size_bytes_minus_1"], decoded_value.tile_size_bytes_minus_1, options); + FieldToJson(jdata["reserved1"], &meta_struct.reserved1, options); + FieldToJson(jdata["pMiColStarts"], meta_struct.pMiColStarts, options); + FieldToJson(jdata["pMiRowStarts"], meta_struct.pMiRowStarts, options); + FieldToJson(jdata["pWidthInSbsMinus1"], meta_struct.pWidthInSbsMinus1, options); + FieldToJson(jdata["pHeightInSbsMinus1"], meta_struct.pHeightInSbsMinus1, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265WeightTableFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1CDEF* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeH265WeightTableFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeH265WeightTableFlags& meta_struct = *data; + const StdVideoAV1CDEF& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1CDEF& meta_struct = *data; - FieldToJson(jdata["luma_weight_l0_flag"], decoded_value.luma_weight_l0_flag, options); - FieldToJson(jdata["chroma_weight_l0_flag"], decoded_value.chroma_weight_l0_flag, options); - FieldToJson(jdata["luma_weight_l1_flag"], decoded_value.luma_weight_l1_flag, options); - FieldToJson(jdata["chroma_weight_l1_flag"], decoded_value.chroma_weight_l1_flag, options); + FieldToJson(jdata["cdef_damping_minus_3"], decoded_value.cdef_damping_minus_3, options); + FieldToJson(jdata["cdef_bits"], decoded_value.cdef_bits, options); + FieldToJson(jdata["cdef_y_pri_strength"], &meta_struct.cdef_y_pri_strength, options); + FieldToJson(jdata["cdef_y_sec_strength"], &meta_struct.cdef_y_sec_strength, options); + FieldToJson(jdata["cdef_uv_pri_strength"], &meta_struct.cdef_uv_pri_strength, options); + FieldToJson(jdata["cdef_uv_sec_strength"], &meta_struct.cdef_uv_sec_strength, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265WeightTable* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1LoopRestoration* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeH265WeightTable& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeH265WeightTable& meta_struct = *data; + const StdVideoAV1LoopRestoration& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1LoopRestoration& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["luma_log2_weight_denom"], decoded_value.luma_log2_weight_denom, options); - FieldToJson(jdata["delta_chroma_log2_weight_denom"], decoded_value.delta_chroma_log2_weight_denom, options); - FieldToJson(jdata["delta_luma_weight_l0"], &meta_struct.delta_luma_weight_l0, options); - FieldToJson(jdata["luma_offset_l0"], &meta_struct.luma_offset_l0, options); - FieldToJson(jdata["delta_chroma_weight_l0"], &meta_struct.delta_chroma_weight_l0, options); - FieldToJson(jdata["delta_chroma_offset_l0"], &meta_struct.delta_chroma_offset_l0, options); - FieldToJson(jdata["delta_luma_weight_l1"], &meta_struct.delta_luma_weight_l1, options); - FieldToJson(jdata["luma_offset_l1"], &meta_struct.luma_offset_l1, options); - FieldToJson(jdata["delta_chroma_weight_l1"], &meta_struct.delta_chroma_weight_l1, options); - FieldToJson(jdata["delta_chroma_offset_l1"], &meta_struct.delta_chroma_offset_l1, options); + FieldToJson(jdata["FrameRestorationType"], &meta_struct.FrameRestorationType, options); + FieldToJson(jdata["LoopRestorationSize"], &meta_struct.LoopRestorationSize, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265LongTermRefPics* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1GlobalMotion* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeH265LongTermRefPics& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeH265LongTermRefPics& meta_struct = *data; + const StdVideoAV1GlobalMotion& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1GlobalMotion& meta_struct = *data; - FieldToJson(jdata["num_long_term_sps"], decoded_value.num_long_term_sps, options); - FieldToJson(jdata["num_long_term_pics"], decoded_value.num_long_term_pics, options); - FieldToJson(jdata["lt_idx_sps"], &meta_struct.lt_idx_sps, options); - FieldToJson(jdata["poc_lsb_lt"], &meta_struct.poc_lsb_lt, options); - FieldToJson(jdata["used_by_curr_pic_lt_flag"], decoded_value.used_by_curr_pic_lt_flag, options); - FieldToJson(jdata["delta_poc_msb_present_flag"], &meta_struct.delta_poc_msb_present_flag, options); - FieldToJson(jdata["delta_poc_msb_cycle_lt"], &meta_struct.delta_poc_msb_cycle_lt, options); + FieldToJson(jdata["GmType"], &meta_struct.GmType, options); + FieldToJson(jdata["gm_params"], &meta_struct.gm_params, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265SliceSegmentHeaderFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1FilmGrainFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeH265SliceSegmentHeaderFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeH265SliceSegmentHeaderFlags& meta_struct = *data; + const StdVideoAV1FilmGrainFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1FilmGrainFlags& meta_struct = *data; - FieldToJson(jdata["first_slice_segment_in_pic_flag"], decoded_value.first_slice_segment_in_pic_flag, options); - FieldToJson(jdata["dependent_slice_segment_flag"], decoded_value.dependent_slice_segment_flag, options); - FieldToJson(jdata["slice_sao_luma_flag"], decoded_value.slice_sao_luma_flag, options); - FieldToJson(jdata["slice_sao_chroma_flag"], decoded_value.slice_sao_chroma_flag, options); - FieldToJson(jdata["num_ref_idx_active_override_flag"], decoded_value.num_ref_idx_active_override_flag, options); - FieldToJson(jdata["mvd_l1_zero_flag"], decoded_value.mvd_l1_zero_flag, options); - FieldToJson(jdata["cabac_init_flag"], decoded_value.cabac_init_flag, options); - FieldToJson(jdata["cu_chroma_qp_offset_enabled_flag"], decoded_value.cu_chroma_qp_offset_enabled_flag, options); - FieldToJson(jdata["deblocking_filter_override_flag"], decoded_value.deblocking_filter_override_flag, options); - FieldToJson(jdata["slice_deblocking_filter_disabled_flag"], decoded_value.slice_deblocking_filter_disabled_flag, options); - FieldToJson(jdata["collocated_from_l0_flag"], decoded_value.collocated_from_l0_flag, options); - FieldToJson(jdata["slice_loop_filter_across_slices_enabled_flag"], decoded_value.slice_loop_filter_across_slices_enabled_flag, options); + FieldToJson(jdata["chroma_scaling_from_luma"], decoded_value.chroma_scaling_from_luma, options); + FieldToJson(jdata["overlap_flag"], decoded_value.overlap_flag, options); + FieldToJson(jdata["clip_to_restricted_range"], decoded_value.clip_to_restricted_range, options); + FieldToJson(jdata["update_grain"], decoded_value.update_grain, options); FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265SliceSegmentHeader* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1FilmGrain* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeH265SliceSegmentHeader& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeH265SliceSegmentHeader& meta_struct = *data; + const StdVideoAV1FilmGrain& decoded_value = *data->decoded_value; + const Decoded_StdVideoAV1FilmGrain& meta_struct = *data; FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["slice_type"], decoded_value.slice_type, options); - FieldToJson(jdata["slice_segment_address"], decoded_value.slice_segment_address, options); - FieldToJson(jdata["collocated_ref_idx"], decoded_value.collocated_ref_idx, options); - FieldToJson(jdata["MaxNumMergeCand"], decoded_value.MaxNumMergeCand, options); - FieldToJson(jdata["slice_cb_qp_offset"], decoded_value.slice_cb_qp_offset, options); - FieldToJson(jdata["slice_cr_qp_offset"], decoded_value.slice_cr_qp_offset, options); - FieldToJson(jdata["slice_beta_offset_div2"], decoded_value.slice_beta_offset_div2, options); - FieldToJson(jdata["slice_tc_offset_div2"], decoded_value.slice_tc_offset_div2, options); - FieldToJson(jdata["slice_act_y_qp_offset"], decoded_value.slice_act_y_qp_offset, options); - FieldToJson(jdata["slice_act_cb_qp_offset"], decoded_value.slice_act_cb_qp_offset, options); - FieldToJson(jdata["slice_act_cr_qp_offset"], decoded_value.slice_act_cr_qp_offset, options); - FieldToJson(jdata["slice_qp_delta"], decoded_value.slice_qp_delta, options); - FieldToJson(jdata["reserved1"], decoded_value.reserved1, options); - FieldToJson(jdata["pWeightTable"], meta_struct.pWeightTable, options); + FieldToJson(jdata["grain_scaling_minus_8"], decoded_value.grain_scaling_minus_8, options); + FieldToJson(jdata["ar_coeff_lag"], decoded_value.ar_coeff_lag, options); + FieldToJson(jdata["ar_coeff_shift_minus_6"], decoded_value.ar_coeff_shift_minus_6, options); + FieldToJson(jdata["grain_scale_shift"], decoded_value.grain_scale_shift, options); + FieldToJson(jdata["grain_seed"], decoded_value.grain_seed, options); + FieldToJson(jdata["film_grain_params_ref_idx"], decoded_value.film_grain_params_ref_idx, options); + FieldToJson(jdata["num_y_points"], decoded_value.num_y_points, options); + FieldToJson(jdata["point_y_value"], &meta_struct.point_y_value, options); + FieldToJson(jdata["point_y_scaling"], &meta_struct.point_y_scaling, options); + FieldToJson(jdata["num_cb_points"], decoded_value.num_cb_points, options); + FieldToJson(jdata["point_cb_value"], &meta_struct.point_cb_value, options); + FieldToJson(jdata["point_cb_scaling"], &meta_struct.point_cb_scaling, options); + FieldToJson(jdata["num_cr_points"], decoded_value.num_cr_points, options); + FieldToJson(jdata["point_cr_value"], &meta_struct.point_cr_value, options); + FieldToJson(jdata["point_cr_scaling"], &meta_struct.point_cr_scaling, options); + FieldToJson(jdata["ar_coeffs_y_plus_128"], &meta_struct.ar_coeffs_y_plus_128, options); + FieldToJson(jdata["ar_coeffs_cb_plus_128"], &meta_struct.ar_coeffs_cb_plus_128, options); + FieldToJson(jdata["ar_coeffs_cr_plus_128"], &meta_struct.ar_coeffs_cr_plus_128, options); + FieldToJson(jdata["cb_mult"], decoded_value.cb_mult, options); + FieldToJson(jdata["cb_luma_mult"], decoded_value.cb_luma_mult, options); + FieldToJson(jdata["cb_offset"], decoded_value.cb_offset, options); + FieldToJson(jdata["cr_mult"], decoded_value.cr_mult, options); + FieldToJson(jdata["cr_luma_mult"], decoded_value.cr_luma_mult, options); + FieldToJson(jdata["cr_offset"], decoded_value.cr_offset, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265ReferenceListsInfoFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeAV1PictureInfoFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeH265ReferenceListsInfoFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeH265ReferenceListsInfoFlags& meta_struct = *data; + const StdVideoDecodeAV1PictureInfoFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoDecodeAV1PictureInfoFlags& meta_struct = *data; - FieldToJson(jdata["ref_pic_list_modification_flag_l0"], decoded_value.ref_pic_list_modification_flag_l0, options); - FieldToJson(jdata["ref_pic_list_modification_flag_l1"], decoded_value.ref_pic_list_modification_flag_l1, options); + FieldToJson(jdata["error_resilient_mode"], decoded_value.error_resilient_mode, options); + FieldToJson(jdata["disable_cdf_update"], decoded_value.disable_cdf_update, options); + FieldToJson(jdata["use_superres"], decoded_value.use_superres, options); + FieldToJson(jdata["render_and_frame_size_different"], decoded_value.render_and_frame_size_different, options); + FieldToJson(jdata["allow_screen_content_tools"], decoded_value.allow_screen_content_tools, options); + FieldToJson(jdata["is_filter_switchable"], decoded_value.is_filter_switchable, options); + FieldToJson(jdata["force_integer_mv"], decoded_value.force_integer_mv, options); + FieldToJson(jdata["frame_size_override_flag"], decoded_value.frame_size_override_flag, options); + FieldToJson(jdata["buffer_removal_time_present_flag"], decoded_value.buffer_removal_time_present_flag, options); + FieldToJson(jdata["allow_intrabc"], decoded_value.allow_intrabc, options); + FieldToJson(jdata["frame_refs_short_signaling"], decoded_value.frame_refs_short_signaling, options); + FieldToJson(jdata["allow_high_precision_mv"], decoded_value.allow_high_precision_mv, options); + FieldToJson(jdata["is_motion_mode_switchable"], decoded_value.is_motion_mode_switchable, options); + FieldToJson(jdata["use_ref_frame_mvs"], decoded_value.use_ref_frame_mvs, options); + FieldToJson(jdata["disable_frame_end_update_cdf"], decoded_value.disable_frame_end_update_cdf, options); + FieldToJson(jdata["allow_warped_motion"], decoded_value.allow_warped_motion, options); + FieldToJson(jdata["reduced_tx_set"], decoded_value.reduced_tx_set, options); + FieldToJson(jdata["reference_select"], decoded_value.reference_select, options); + FieldToJson(jdata["skip_mode_present"], decoded_value.skip_mode_present, options); + FieldToJson(jdata["delta_q_present"], decoded_value.delta_q_present, options); + FieldToJson(jdata["delta_lf_present"], decoded_value.delta_lf_present, options); + FieldToJson(jdata["delta_lf_multi"], decoded_value.delta_lf_multi, options); + FieldToJson(jdata["segmentation_enabled"], decoded_value.segmentation_enabled, options); + FieldToJson(jdata["segmentation_update_map"], decoded_value.segmentation_update_map, options); + FieldToJson(jdata["segmentation_temporal_update"], decoded_value.segmentation_temporal_update, options); + FieldToJson(jdata["segmentation_update_data"], decoded_value.segmentation_update_data, options); + FieldToJson(jdata["UsesLr"], decoded_value.UsesLr, options); + FieldToJson(jdata["usesChromaLr"], decoded_value.usesChromaLr, options); + FieldToJson(jdata["apply_grain"], decoded_value.apply_grain, options); FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265ReferenceListsInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeAV1PictureInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeH265ReferenceListsInfo& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeH265ReferenceListsInfo& meta_struct = *data; + const StdVideoDecodeAV1PictureInfo& decoded_value = *data->decoded_value; + const Decoded_StdVideoDecodeAV1PictureInfo& meta_struct = *data; FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["num_ref_idx_l0_active_minus1"], decoded_value.num_ref_idx_l0_active_minus1, options); - FieldToJson(jdata["num_ref_idx_l1_active_minus1"], decoded_value.num_ref_idx_l1_active_minus1, options); - FieldToJson(jdata["RefPicList0"], &meta_struct.RefPicList0, options); - FieldToJson(jdata["RefPicList1"], &meta_struct.RefPicList1, options); - FieldToJson(jdata["list_entry_l0"], &meta_struct.list_entry_l0, options); - FieldToJson(jdata["list_entry_l1"], &meta_struct.list_entry_l1, options); + FieldToJson(jdata["frame_type"], decoded_value.frame_type, options); + FieldToJson(jdata["current_frame_id"], decoded_value.current_frame_id, options); + FieldToJson(jdata["OrderHint"], decoded_value.OrderHint, options); + FieldToJson(jdata["primary_ref_frame"], decoded_value.primary_ref_frame, options); + FieldToJson(jdata["refresh_frame_flags"], decoded_value.refresh_frame_flags, options); + FieldToJson(jdata["reserved1"], decoded_value.reserved1, options); + FieldToJson(jdata["interpolation_filter"], decoded_value.interpolation_filter, options); + FieldToJson(jdata["TxMode"], decoded_value.TxMode, options); + FieldToJson(jdata["delta_q_res"], decoded_value.delta_q_res, options); + FieldToJson(jdata["delta_lf_res"], decoded_value.delta_lf_res, options); + FieldToJson(jdata["SkipModeFrame"], &meta_struct.SkipModeFrame, options); + FieldToJson(jdata["coded_denom"], decoded_value.coded_denom, options); + FieldToJson(jdata["reserved2"], &meta_struct.reserved2, options); + FieldToJson(jdata["OrderHints"], &meta_struct.OrderHints, options); + FieldToJson(jdata["expectedFrameId"], &meta_struct.expectedFrameId, options); + FieldToJson(jdata["pTileInfo"], meta_struct.pTileInfo, options); + FieldToJson(jdata["pQuantization"], meta_struct.pQuantization, options); + FieldToJson(jdata["pSegmentation"], meta_struct.pSegmentation, options); + FieldToJson(jdata["pLoopFilter"], meta_struct.pLoopFilter, options); + FieldToJson(jdata["pCDEF"], meta_struct.pCDEF, options); + FieldToJson(jdata["pLoopRestoration"], meta_struct.pLoopRestoration, options); + FieldToJson(jdata["pGlobalMotion"], meta_struct.pGlobalMotion, options); + FieldToJson(jdata["pFilmGrain"], meta_struct.pFilmGrain, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265PictureInfoFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeAV1ReferenceInfoFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeH265PictureInfoFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeH265PictureInfoFlags& meta_struct = *data; + const StdVideoDecodeAV1ReferenceInfoFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoDecodeAV1ReferenceInfoFlags& meta_struct = *data; - FieldToJson(jdata["is_reference"], decoded_value.is_reference, options); - FieldToJson(jdata["IrapPicFlag"], decoded_value.IrapPicFlag, options); - FieldToJson(jdata["used_for_long_term_reference"], decoded_value.used_for_long_term_reference, options); - FieldToJson(jdata["discardable_flag"], decoded_value.discardable_flag, options); - FieldToJson(jdata["cross_layer_bla_flag"], decoded_value.cross_layer_bla_flag, options); - FieldToJson(jdata["pic_output_flag"], decoded_value.pic_output_flag, options); - FieldToJson(jdata["no_output_of_prior_pics_flag"], decoded_value.no_output_of_prior_pics_flag, options); - FieldToJson(jdata["short_term_ref_pic_set_sps_flag"], decoded_value.short_term_ref_pic_set_sps_flag, options); - FieldToJson(jdata["slice_temporal_mvp_enabled_flag"], decoded_value.slice_temporal_mvp_enabled_flag, options); + FieldToJson(jdata["disable_frame_end_update_cdf"], decoded_value.disable_frame_end_update_cdf, options); + FieldToJson(jdata["segmentation_enabled"], decoded_value.segmentation_enabled, options); FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265PictureInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeAV1ReferenceInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeH265PictureInfo& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeH265PictureInfo& meta_struct = *data; + const StdVideoDecodeAV1ReferenceInfo& decoded_value = *data->decoded_value; + const Decoded_StdVideoDecodeAV1ReferenceInfo& meta_struct = *data; FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["pic_type"], decoded_value.pic_type, options); - FieldToJson(jdata["sps_video_parameter_set_id"], decoded_value.sps_video_parameter_set_id, options); - FieldToJson(jdata["pps_seq_parameter_set_id"], decoded_value.pps_seq_parameter_set_id, options); - FieldToJson(jdata["pps_pic_parameter_set_id"], decoded_value.pps_pic_parameter_set_id, options); - FieldToJson(jdata["short_term_ref_pic_set_idx"], decoded_value.short_term_ref_pic_set_idx, options); - FieldToJson(jdata["PicOrderCntVal"], decoded_value.PicOrderCntVal, options); - FieldToJson(jdata["TemporalId"], decoded_value.TemporalId, options); - FieldToJson(jdata["reserved1"], &meta_struct.reserved1, options); - FieldToJson(jdata["pRefLists"], meta_struct.pRefLists, options); - FieldToJson(jdata["pShortTermRefPicSet"], meta_struct.pShortTermRefPicSet, options); - FieldToJson(jdata["pLongTermRefPics"], meta_struct.pLongTermRefPics, options); + FieldToJson(jdata["frame_type"], decoded_value.frame_type, options); + FieldToJson(jdata["RefFrameSignBias"], decoded_value.RefFrameSignBias, options); + FieldToJson(jdata["OrderHint"], decoded_value.OrderHint, options); + FieldToJson(jdata["SavedOrderHints"], &meta_struct.SavedOrderHints, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265ReferenceInfoFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1ExtensionHeader* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeH265ReferenceInfoFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeH265ReferenceInfoFlags& meta_struct = *data; + const StdVideoEncodeAV1ExtensionHeader& decoded_value = *data->decoded_value; + const Decoded_StdVideoEncodeAV1ExtensionHeader& meta_struct = *data; - FieldToJson(jdata["used_for_long_term_reference"], decoded_value.used_for_long_term_reference, options); - FieldToJson(jdata["unused_for_reference"], decoded_value.unused_for_reference, options); - FieldToJson(jdata["reserved"], decoded_value.reserved, options); + FieldToJson(jdata["temporal_id"], decoded_value.temporal_id, options); + FieldToJson(jdata["spatial_id"], decoded_value.spatial_id, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265ReferenceInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1DecoderModelInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeH265ReferenceInfo& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeH265ReferenceInfo& meta_struct = *data; + const StdVideoEncodeAV1DecoderModelInfo& decoded_value = *data->decoded_value; + const Decoded_StdVideoEncodeAV1DecoderModelInfo& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["pic_type"], decoded_value.pic_type, options); - FieldToJson(jdata["PicOrderCntVal"], decoded_value.PicOrderCntVal, options); - FieldToJson(jdata["TemporalId"], decoded_value.TemporalId, options); + FieldToJson(jdata["buffer_delay_length_minus_1"], decoded_value.buffer_delay_length_minus_1, options); + FieldToJson(jdata["buffer_removal_time_length_minus_1"], decoded_value.buffer_removal_time_length_minus_1, options); + FieldToJson(jdata["frame_presentation_time_length_minus_1"], decoded_value.frame_presentation_time_length_minus_1, options); + FieldToJson(jdata["reserved1"], decoded_value.reserved1, options); + FieldToJson(jdata["num_units_in_decoding_tick"], decoded_value.num_units_in_decoding_tick, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9ColorConfigFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1OperatingPointInfoFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoVP9ColorConfigFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoVP9ColorConfigFlags& meta_struct = *data; + const StdVideoEncodeAV1OperatingPointInfoFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoEncodeAV1OperatingPointInfoFlags& meta_struct = *data; - FieldToJson(jdata["color_range"], decoded_value.color_range, options); + FieldToJson(jdata["decoder_model_present_for_this_op"], decoded_value.decoder_model_present_for_this_op, options); + FieldToJson(jdata["low_delay_mode_flag"], decoded_value.low_delay_mode_flag, options); + FieldToJson(jdata["initial_display_delay_present_for_this_op"], decoded_value.initial_display_delay_present_for_this_op, options); FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9ColorConfig* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1OperatingPointInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoVP9ColorConfig& decoded_value = *data->decoded_value; - const Decoded_StdVideoVP9ColorConfig& meta_struct = *data; + const StdVideoEncodeAV1OperatingPointInfo& decoded_value = *data->decoded_value; + const Decoded_StdVideoEncodeAV1OperatingPointInfo& meta_struct = *data; FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["BitDepth"], decoded_value.BitDepth, options); - FieldToJson(jdata["subsampling_x"], decoded_value.subsampling_x, options); - FieldToJson(jdata["subsampling_y"], decoded_value.subsampling_y, options); - FieldToJson(jdata["reserved1"], decoded_value.reserved1, options); - FieldToJson(jdata["color_space"], decoded_value.color_space, options); + FieldToJson(jdata["operating_point_idc"], decoded_value.operating_point_idc, options); + FieldToJson(jdata["seq_level_idx"], decoded_value.seq_level_idx, options); + FieldToJson(jdata["seq_tier"], decoded_value.seq_tier, options); + FieldToJson(jdata["decoder_buffer_delay"], decoded_value.decoder_buffer_delay, options); + FieldToJson(jdata["encoder_buffer_delay"], decoded_value.encoder_buffer_delay, options); + FieldToJson(jdata["initial_display_delay_minus_1"], decoded_value.initial_display_delay_minus_1, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9LoopFilterFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1PictureInfoFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoVP9LoopFilterFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoVP9LoopFilterFlags& meta_struct = *data; + const StdVideoEncodeAV1PictureInfoFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoEncodeAV1PictureInfoFlags& meta_struct = *data; - FieldToJson(jdata["loop_filter_delta_enabled"], decoded_value.loop_filter_delta_enabled, options); - FieldToJson(jdata["loop_filter_delta_update"], decoded_value.loop_filter_delta_update, options); + FieldToJson(jdata["error_resilient_mode"], decoded_value.error_resilient_mode, options); + FieldToJson(jdata["disable_cdf_update"], decoded_value.disable_cdf_update, options); + FieldToJson(jdata["use_superres"], decoded_value.use_superres, options); + FieldToJson(jdata["render_and_frame_size_different"], decoded_value.render_and_frame_size_different, options); + FieldToJson(jdata["allow_screen_content_tools"], decoded_value.allow_screen_content_tools, options); + FieldToJson(jdata["is_filter_switchable"], decoded_value.is_filter_switchable, options); + FieldToJson(jdata["force_integer_mv"], decoded_value.force_integer_mv, options); + FieldToJson(jdata["frame_size_override_flag"], decoded_value.frame_size_override_flag, options); + FieldToJson(jdata["buffer_removal_time_present_flag"], decoded_value.buffer_removal_time_present_flag, options); + FieldToJson(jdata["allow_intrabc"], decoded_value.allow_intrabc, options); + FieldToJson(jdata["frame_refs_short_signaling"], decoded_value.frame_refs_short_signaling, options); + FieldToJson(jdata["allow_high_precision_mv"], decoded_value.allow_high_precision_mv, options); + FieldToJson(jdata["is_motion_mode_switchable"], decoded_value.is_motion_mode_switchable, options); + FieldToJson(jdata["use_ref_frame_mvs"], decoded_value.use_ref_frame_mvs, options); + FieldToJson(jdata["disable_frame_end_update_cdf"], decoded_value.disable_frame_end_update_cdf, options); + FieldToJson(jdata["allow_warped_motion"], decoded_value.allow_warped_motion, options); + FieldToJson(jdata["reduced_tx_set"], decoded_value.reduced_tx_set, options); + FieldToJson(jdata["skip_mode_present"], decoded_value.skip_mode_present, options); + FieldToJson(jdata["delta_q_present"], decoded_value.delta_q_present, options); + FieldToJson(jdata["delta_lf_present"], decoded_value.delta_lf_present, options); + FieldToJson(jdata["delta_lf_multi"], decoded_value.delta_lf_multi, options); + FieldToJson(jdata["segmentation_enabled"], decoded_value.segmentation_enabled, options); + FieldToJson(jdata["segmentation_update_map"], decoded_value.segmentation_update_map, options); + FieldToJson(jdata["segmentation_temporal_update"], decoded_value.segmentation_temporal_update, options); + FieldToJson(jdata["segmentation_update_data"], decoded_value.segmentation_update_data, options); + FieldToJson(jdata["UsesLr"], decoded_value.UsesLr, options); + FieldToJson(jdata["usesChromaLr"], decoded_value.usesChromaLr, options); + FieldToJson(jdata["show_frame"], decoded_value.show_frame, options); + FieldToJson(jdata["showable_frame"], decoded_value.showable_frame, options); FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9LoopFilter* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1PictureInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoVP9LoopFilter& decoded_value = *data->decoded_value; - const Decoded_StdVideoVP9LoopFilter& meta_struct = *data; + const StdVideoEncodeAV1PictureInfo& decoded_value = *data->decoded_value; + const Decoded_StdVideoEncodeAV1PictureInfo& meta_struct = *data; FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["loop_filter_level"], decoded_value.loop_filter_level, options); - FieldToJson(jdata["loop_filter_sharpness"], decoded_value.loop_filter_sharpness, options); - FieldToJson(jdata["update_ref_delta"], decoded_value.update_ref_delta, options); - FieldToJson(jdata["loop_filter_ref_deltas"], &meta_struct.loop_filter_ref_deltas, options); - FieldToJson(jdata["update_mode_delta"], decoded_value.update_mode_delta, options); - FieldToJson(jdata["loop_filter_mode_deltas"], &meta_struct.loop_filter_mode_deltas, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9SegmentationFlags* data, const JsonOptions& options) + FieldToJson(jdata["frame_type"], decoded_value.frame_type, options); + FieldToJson(jdata["frame_presentation_time"], decoded_value.frame_presentation_time, options); + FieldToJson(jdata["current_frame_id"], decoded_value.current_frame_id, options); + FieldToJson(jdata["order_hint"], decoded_value.order_hint, options); + FieldToJson(jdata["primary_ref_frame"], decoded_value.primary_ref_frame, options); + FieldToJson(jdata["refresh_frame_flags"], decoded_value.refresh_frame_flags, options); + FieldToJson(jdata["coded_denom"], decoded_value.coded_denom, options); + FieldToJson(jdata["render_width_minus_1"], decoded_value.render_width_minus_1, options); + FieldToJson(jdata["render_height_minus_1"], decoded_value.render_height_minus_1, options); + FieldToJson(jdata["interpolation_filter"], decoded_value.interpolation_filter, options); + FieldToJson(jdata["TxMode"], decoded_value.TxMode, options); + FieldToJson(jdata["delta_q_res"], decoded_value.delta_q_res, options); + FieldToJson(jdata["delta_lf_res"], decoded_value.delta_lf_res, options); + FieldToJson(jdata["ref_order_hint"], &meta_struct.ref_order_hint, options); + FieldToJson(jdata["ref_frame_idx"], &meta_struct.ref_frame_idx, options); + FieldToJson(jdata["reserved1"], &meta_struct.reserved1, options); + FieldToJson(jdata["delta_frame_id_minus_1"], &meta_struct.delta_frame_id_minus_1, options); + FieldToJson(jdata["pTileInfo"], meta_struct.pTileInfo, options); + FieldToJson(jdata["pQuantization"], meta_struct.pQuantization, options); + FieldToJson(jdata["pSegmentation"], meta_struct.pSegmentation, options); + FieldToJson(jdata["pLoopFilter"], meta_struct.pLoopFilter, options); + FieldToJson(jdata["pCDEF"], meta_struct.pCDEF, options); + FieldToJson(jdata["pLoopRestoration"], meta_struct.pLoopRestoration, options); + FieldToJson(jdata["pGlobalMotion"], meta_struct.pGlobalMotion, options); + FieldToJson(jdata["pExtensionHeader"], meta_struct.pExtensionHeader, options); + FieldToJson(jdata["pBufferRemovalTimes"], meta_struct.pBufferRemovalTimes, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1ReferenceInfoFlags* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoVP9SegmentationFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoVP9SegmentationFlags& meta_struct = *data; + const StdVideoEncodeAV1ReferenceInfoFlags& decoded_value = *data->decoded_value; + const Decoded_StdVideoEncodeAV1ReferenceInfoFlags& meta_struct = *data; - FieldToJson(jdata["segmentation_update_map"], decoded_value.segmentation_update_map, options); - FieldToJson(jdata["segmentation_temporal_update"], decoded_value.segmentation_temporal_update, options); - FieldToJson(jdata["segmentation_update_data"], decoded_value.segmentation_update_data, options); - FieldToJson(jdata["segmentation_abs_or_delta_update"], decoded_value.segmentation_abs_or_delta_update, options); + FieldToJson(jdata["disable_frame_end_update_cdf"], decoded_value.disable_frame_end_update_cdf, options); + FieldToJson(jdata["segmentation_enabled"], decoded_value.segmentation_enabled, options); FieldToJson(jdata["reserved"], decoded_value.reserved, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9Segmentation* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1ReferenceInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoVP9Segmentation& decoded_value = *data->decoded_value; - const Decoded_StdVideoVP9Segmentation& meta_struct = *data; + const StdVideoEncodeAV1ReferenceInfo& decoded_value = *data->decoded_value; + const Decoded_StdVideoEncodeAV1ReferenceInfo& meta_struct = *data; FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["segmentation_tree_probs"], &meta_struct.segmentation_tree_probs, options); - FieldToJson(jdata["segmentation_pred_prob"], &meta_struct.segmentation_pred_prob, options); - FieldToJson(jdata["FeatureEnabled"], &meta_struct.FeatureEnabled, options); - FieldToJson(jdata["FeatureData"], &meta_struct.FeatureData, options); + FieldToJson(jdata["RefFrameId"], decoded_value.RefFrameId, options); + FieldToJson(jdata["frame_type"], decoded_value.frame_type, options); + FieldToJson(jdata["OrderHint"], decoded_value.OrderHint, options); + FieldToJson(jdata["reserved1"], &meta_struct.reserved1, options); + FieldToJson(jdata["pExtensionHeader"], meta_struct.pExtensionHeader, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeVP9PictureInfoFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExtent2D* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoDecodeVP9PictureInfoFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoDecodeVP9PictureInfoFlags& meta_struct = *data; + const VkExtent2D& decoded_value = *data->decoded_value; + const Decoded_VkExtent2D& meta_struct = *data; - FieldToJson(jdata["error_resilient_mode"], decoded_value.error_resilient_mode, options); - FieldToJson(jdata["intra_only"], decoded_value.intra_only, options); - FieldToJson(jdata["allow_high_precision_mv"], decoded_value.allow_high_precision_mv, options); - FieldToJson(jdata["refresh_frame_context"], decoded_value.refresh_frame_context, options); - FieldToJson(jdata["frame_parallel_decoding_mode"], decoded_value.frame_parallel_decoding_mode, options); - FieldToJson(jdata["segmentation_enabled"], decoded_value.segmentation_enabled, options); - FieldToJson(jdata["show_frame"], decoded_value.show_frame, options); - FieldToJson(jdata["UsePrevFrameMvs"], decoded_value.UsePrevFrameMvs, options); - FieldToJson(jdata["reserved"], decoded_value.reserved, options); + FieldToJson(jdata["width"], decoded_value.width, options); + FieldToJson(jdata["height"], decoded_value.height, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeVP9PictureInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExtent3D* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoDecodeVP9PictureInfo& decoded_value = *data->decoded_value; - const Decoded_StdVideoDecodeVP9PictureInfo& meta_struct = *data; + const VkExtent3D& decoded_value = *data->decoded_value; + const Decoded_VkExtent3D& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["profile"], decoded_value.profile, options); - FieldToJson(jdata["frame_type"], decoded_value.frame_type, options); - FieldToJson(jdata["frame_context_idx"], decoded_value.frame_context_idx, options); - FieldToJson(jdata["reset_frame_context"], decoded_value.reset_frame_context, options); - FieldToJson(jdata["refresh_frame_flags"], decoded_value.refresh_frame_flags, options); - FieldToJson(jdata["ref_frame_sign_bias_mask"], decoded_value.ref_frame_sign_bias_mask, options); - FieldToJson(jdata["interpolation_filter"], decoded_value.interpolation_filter, options); - FieldToJson(jdata["base_q_idx"], decoded_value.base_q_idx, options); - FieldToJson(jdata["delta_q_y_dc"], decoded_value.delta_q_y_dc, options); - FieldToJson(jdata["delta_q_uv_dc"], decoded_value.delta_q_uv_dc, options); - FieldToJson(jdata["delta_q_uv_ac"], decoded_value.delta_q_uv_ac, options); - FieldToJson(jdata["tile_cols_log2"], decoded_value.tile_cols_log2, options); - FieldToJson(jdata["tile_rows_log2"], decoded_value.tile_rows_log2, options); - FieldToJson(jdata["reserved1"], &meta_struct.reserved1, options); - FieldToJson(jdata["pColorConfig"], meta_struct.pColorConfig, options); - FieldToJson(jdata["pLoopFilter"], meta_struct.pLoopFilter, options); - FieldToJson(jdata["pSegmentation"], meta_struct.pSegmentation, options); + FieldToJson(jdata["width"], decoded_value.width, options); + FieldToJson(jdata["height"], decoded_value.height, options); + FieldToJson(jdata["depth"], decoded_value.depth, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1ColorConfigFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOffset2D* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1ColorConfigFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1ColorConfigFlags& meta_struct = *data; + const VkOffset2D& decoded_value = *data->decoded_value; + const Decoded_VkOffset2D& meta_struct = *data; - FieldToJson(jdata["mono_chrome"], decoded_value.mono_chrome, options); - FieldToJson(jdata["color_range"], decoded_value.color_range, options); - FieldToJson(jdata["separate_uv_delta_q"], decoded_value.separate_uv_delta_q, options); - FieldToJson(jdata["color_description_present_flag"], decoded_value.color_description_present_flag, options); - FieldToJson(jdata["reserved"], decoded_value.reserved, options); + FieldToJson(jdata["x"], decoded_value.x, options); + FieldToJson(jdata["y"], decoded_value.y, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1ColorConfig* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOffset3D* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1ColorConfig& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1ColorConfig& meta_struct = *data; + const VkOffset3D& decoded_value = *data->decoded_value; + const Decoded_VkOffset3D& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["BitDepth"], decoded_value.BitDepth, options); - FieldToJson(jdata["subsampling_x"], decoded_value.subsampling_x, options); - FieldToJson(jdata["subsampling_y"], decoded_value.subsampling_y, options); - FieldToJson(jdata["reserved1"], decoded_value.reserved1, options); - FieldToJson(jdata["color_primaries"], decoded_value.color_primaries, options); - FieldToJson(jdata["transfer_characteristics"], decoded_value.transfer_characteristics, options); - FieldToJson(jdata["matrix_coefficients"], decoded_value.matrix_coefficients, options); - FieldToJson(jdata["chroma_sample_position"], decoded_value.chroma_sample_position, options); + FieldToJson(jdata["x"], decoded_value.x, options); + FieldToJson(jdata["y"], decoded_value.y, options); + FieldToJson(jdata["z"], decoded_value.z, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1TimingInfoFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRect2D* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1TimingInfoFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1TimingInfoFlags& meta_struct = *data; + const VkRect2D& decoded_value = *data->decoded_value; + const Decoded_VkRect2D& meta_struct = *data; - FieldToJson(jdata["equal_picture_interval"], decoded_value.equal_picture_interval, options); - FieldToJson(jdata["reserved"], decoded_value.reserved, options); + FieldToJson(jdata["offset"], meta_struct.offset, options); + FieldToJson(jdata["extent"], meta_struct.extent, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1TimingInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferMemoryBarrier* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1TimingInfo& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1TimingInfo& meta_struct = *data; + const VkBufferMemoryBarrier& decoded_value = *data->decoded_value; + const Decoded_VkBufferMemoryBarrier& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["num_units_in_display_tick"], decoded_value.num_units_in_display_tick, options); - FieldToJson(jdata["time_scale"], decoded_value.time_scale, options); - FieldToJson(jdata["num_ticks_per_picture_minus_1"], decoded_value.num_ticks_per_picture_minus_1, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkAccessFlags_t(),jdata["srcAccessMask"], decoded_value.srcAccessMask, options); + FieldToJson(VkAccessFlags_t(),jdata["dstAccessMask"], decoded_value.dstAccessMask, options); + FieldToJson(jdata["srcQueueFamilyIndex"], decoded_value.srcQueueFamilyIndex, options); + FieldToJson(jdata["dstQueueFamilyIndex"], decoded_value.dstQueueFamilyIndex, options); + HandleToJson(jdata["buffer"], meta_struct.buffer, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1SequenceHeaderFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSubresourceRange* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1SequenceHeaderFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1SequenceHeaderFlags& meta_struct = *data; + const VkImageSubresourceRange& decoded_value = *data->decoded_value; + const Decoded_VkImageSubresourceRange& meta_struct = *data; - FieldToJson(jdata["still_picture"], decoded_value.still_picture, options); - FieldToJson(jdata["reduced_still_picture_header"], decoded_value.reduced_still_picture_header, options); - FieldToJson(jdata["use_128x128_superblock"], decoded_value.use_128x128_superblock, options); - FieldToJson(jdata["enable_filter_intra"], decoded_value.enable_filter_intra, options); - FieldToJson(jdata["enable_intra_edge_filter"], decoded_value.enable_intra_edge_filter, options); - FieldToJson(jdata["enable_interintra_compound"], decoded_value.enable_interintra_compound, options); - FieldToJson(jdata["enable_masked_compound"], decoded_value.enable_masked_compound, options); - FieldToJson(jdata["enable_warped_motion"], decoded_value.enable_warped_motion, options); - FieldToJson(jdata["enable_dual_filter"], decoded_value.enable_dual_filter, options); - FieldToJson(jdata["enable_order_hint"], decoded_value.enable_order_hint, options); - FieldToJson(jdata["enable_jnt_comp"], decoded_value.enable_jnt_comp, options); - FieldToJson(jdata["enable_ref_frame_mvs"], decoded_value.enable_ref_frame_mvs, options); - FieldToJson(jdata["frame_id_numbers_present_flag"], decoded_value.frame_id_numbers_present_flag, options); - FieldToJson(jdata["enable_superres"], decoded_value.enable_superres, options); - FieldToJson(jdata["enable_cdef"], decoded_value.enable_cdef, options); - FieldToJson(jdata["enable_restoration"], decoded_value.enable_restoration, options); - FieldToJson(jdata["film_grain_params_present"], decoded_value.film_grain_params_present, options); - FieldToJson(jdata["timing_info_present_flag"], decoded_value.timing_info_present_flag, options); - FieldToJson(jdata["initial_display_delay_present_flag"], decoded_value.initial_display_delay_present_flag, options); - FieldToJson(jdata["reserved"], decoded_value.reserved, options); + FieldToJson(VkImageAspectFlags_t(),jdata["aspectMask"], decoded_value.aspectMask, options); + FieldToJson(jdata["baseMipLevel"], decoded_value.baseMipLevel, options); + FieldToJson(jdata["levelCount"], decoded_value.levelCount, options); + FieldToJson(jdata["baseArrayLayer"], decoded_value.baseArrayLayer, options); + FieldToJson(jdata["layerCount"], decoded_value.layerCount, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1SequenceHeader* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageMemoryBarrier* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1SequenceHeader& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1SequenceHeader& meta_struct = *data; + const VkImageMemoryBarrier& decoded_value = *data->decoded_value; + const Decoded_VkImageMemoryBarrier& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["seq_profile"], decoded_value.seq_profile, options); - FieldToJson(jdata["frame_width_bits_minus_1"], decoded_value.frame_width_bits_minus_1, options); - FieldToJson(jdata["frame_height_bits_minus_1"], decoded_value.frame_height_bits_minus_1, options); - FieldToJson(jdata["max_frame_width_minus_1"], decoded_value.max_frame_width_minus_1, options); - FieldToJson(jdata["max_frame_height_minus_1"], decoded_value.max_frame_height_minus_1, options); - FieldToJson(jdata["delta_frame_id_length_minus_2"], decoded_value.delta_frame_id_length_minus_2, options); - FieldToJson(jdata["additional_frame_id_length_minus_1"], decoded_value.additional_frame_id_length_minus_1, options); - FieldToJson(jdata["order_hint_bits_minus_1"], decoded_value.order_hint_bits_minus_1, options); - FieldToJson(jdata["seq_force_integer_mv"], decoded_value.seq_force_integer_mv, options); - FieldToJson(jdata["seq_force_screen_content_tools"], decoded_value.seq_force_screen_content_tools, options); - FieldToJson(jdata["reserved1"], &meta_struct.reserved1, options); - FieldToJson(jdata["pColorConfig"], meta_struct.pColorConfig, options); - FieldToJson(jdata["pTimingInfo"], meta_struct.pTimingInfo, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkAccessFlags_t(),jdata["srcAccessMask"], decoded_value.srcAccessMask, options); + FieldToJson(VkAccessFlags_t(),jdata["dstAccessMask"], decoded_value.dstAccessMask, options); + FieldToJson(jdata["oldLayout"], decoded_value.oldLayout, options); + FieldToJson(jdata["newLayout"], decoded_value.newLayout, options); + FieldToJson(jdata["srcQueueFamilyIndex"], decoded_value.srcQueueFamilyIndex, options); + FieldToJson(jdata["dstQueueFamilyIndex"], decoded_value.dstQueueFamilyIndex, options); + HandleToJson(jdata["image"], meta_struct.image, options); + FieldToJson(jdata["subresourceRange"], meta_struct.subresourceRange, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1LoopFilterFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryBarrier* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1LoopFilterFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1LoopFilterFlags& meta_struct = *data; + const VkMemoryBarrier& decoded_value = *data->decoded_value; + const Decoded_VkMemoryBarrier& meta_struct = *data; - FieldToJson(jdata["loop_filter_delta_enabled"], decoded_value.loop_filter_delta_enabled, options); - FieldToJson(jdata["loop_filter_delta_update"], decoded_value.loop_filter_delta_update, options); - FieldToJson(jdata["reserved"], decoded_value.reserved, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkAccessFlags_t(),jdata["srcAccessMask"], decoded_value.srcAccessMask, options); + FieldToJson(VkAccessFlags_t(),jdata["dstAccessMask"], decoded_value.dstAccessMask, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1LoopFilter* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAllocationCallbacks* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1LoopFilter& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1LoopFilter& meta_struct = *data; + const VkAllocationCallbacks& decoded_value = *data->decoded_value; + const Decoded_VkAllocationCallbacks& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["loop_filter_level"], &meta_struct.loop_filter_level, options); - FieldToJson(jdata["loop_filter_sharpness"], decoded_value.loop_filter_sharpness, options); - FieldToJson(jdata["update_ref_delta"], decoded_value.update_ref_delta, options); - FieldToJson(jdata["loop_filter_ref_deltas"], &meta_struct.loop_filter_ref_deltas, options); - FieldToJson(jdata["update_mode_delta"], decoded_value.update_mode_delta, options); - FieldToJson(jdata["loop_filter_mode_deltas"], &meta_struct.loop_filter_mode_deltas, options); + FieldToJson(jdata["pUserData"], to_hex_variable_width(meta_struct.pUserData), options); + FieldToJson(jdata["pfnAllocation"], to_hex_variable_width(meta_struct.pfnAllocation), options); + FieldToJson(jdata["pfnReallocation"], to_hex_variable_width(meta_struct.pfnReallocation), options); + FieldToJson(jdata["pfnFree"], to_hex_variable_width(meta_struct.pfnFree), options); + FieldToJson(jdata["pfnInternalAllocation"], to_hex_variable_width(meta_struct.pfnInternalAllocation), options); + FieldToJson(jdata["pfnInternalFree"], to_hex_variable_width(meta_struct.pfnInternalFree), options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1QuantizationFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkApplicationInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1QuantizationFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1QuantizationFlags& meta_struct = *data; - - FieldToJson(jdata["using_qmatrix"], decoded_value.using_qmatrix, options); - FieldToJson(jdata["diff_uv_delta"], decoded_value.diff_uv_delta, options); - FieldToJson(jdata["reserved"], decoded_value.reserved, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1Quantization* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const StdVideoAV1Quantization& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1Quantization& meta_struct = *data; - - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["base_q_idx"], decoded_value.base_q_idx, options); - FieldToJson(jdata["DeltaQYDc"], decoded_value.DeltaQYDc, options); - FieldToJson(jdata["DeltaQUDc"], decoded_value.DeltaQUDc, options); - FieldToJson(jdata["DeltaQUAc"], decoded_value.DeltaQUAc, options); - FieldToJson(jdata["DeltaQVDc"], decoded_value.DeltaQVDc, options); - FieldToJson(jdata["DeltaQVAc"], decoded_value.DeltaQVAc, options); - FieldToJson(jdata["qm_y"], decoded_value.qm_y, options); - FieldToJson(jdata["qm_u"], decoded_value.qm_u, options); - FieldToJson(jdata["qm_v"], decoded_value.qm_v, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1Segmentation* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const StdVideoAV1Segmentation& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1Segmentation& meta_struct = *data; - - FieldToJson(jdata["FeatureEnabled"], &meta_struct.FeatureEnabled, options); - FieldToJson(jdata["FeatureData"], &meta_struct.FeatureData, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1TileInfoFlags* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const StdVideoAV1TileInfoFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1TileInfoFlags& meta_struct = *data; + const VkApplicationInfo& decoded_value = *data->decoded_value; + const Decoded_VkApplicationInfo& meta_struct = *data; - FieldToJson(jdata["uniform_tile_spacing_flag"], decoded_value.uniform_tile_spacing_flag, options); - FieldToJson(jdata["reserved"], decoded_value.reserved, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["pApplicationName"], &meta_struct.pApplicationName, options); + FieldToJson(jdata["applicationVersion"], decoded_value.applicationVersion, options); + FieldToJson(jdata["pEngineName"], &meta_struct.pEngineName, options); + FieldToJson(jdata["engineVersion"], decoded_value.engineVersion, options); + FieldToJson(jdata["apiVersion"], decoded_value.apiVersion, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1TileInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFormatProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1TileInfo& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1TileInfo& meta_struct = *data; + const VkFormatProperties& decoded_value = *data->decoded_value; + const Decoded_VkFormatProperties& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["TileCols"], decoded_value.TileCols, options); - FieldToJson(jdata["TileRows"], decoded_value.TileRows, options); - FieldToJson(jdata["context_update_tile_id"], decoded_value.context_update_tile_id, options); - FieldToJson(jdata["tile_size_bytes_minus_1"], decoded_value.tile_size_bytes_minus_1, options); - FieldToJson(jdata["reserved1"], &meta_struct.reserved1, options); - FieldToJson(jdata["pMiColStarts"], meta_struct.pMiColStarts, options); - FieldToJson(jdata["pMiRowStarts"], meta_struct.pMiRowStarts, options); - FieldToJson(jdata["pWidthInSbsMinus1"], meta_struct.pWidthInSbsMinus1, options); - FieldToJson(jdata["pHeightInSbsMinus1"], meta_struct.pHeightInSbsMinus1, options); + FieldToJson(VkFormatFeatureFlags_t(),jdata["linearTilingFeatures"], decoded_value.linearTilingFeatures, options); + FieldToJson(VkFormatFeatureFlags_t(),jdata["optimalTilingFeatures"], decoded_value.optimalTilingFeatures, options); + FieldToJson(VkFormatFeatureFlags_t(),jdata["bufferFeatures"], decoded_value.bufferFeatures, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1CDEF* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageFormatProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1CDEF& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1CDEF& meta_struct = *data; + const VkImageFormatProperties& decoded_value = *data->decoded_value; + const Decoded_VkImageFormatProperties& meta_struct = *data; - FieldToJson(jdata["cdef_damping_minus_3"], decoded_value.cdef_damping_minus_3, options); - FieldToJson(jdata["cdef_bits"], decoded_value.cdef_bits, options); - FieldToJson(jdata["cdef_y_pri_strength"], &meta_struct.cdef_y_pri_strength, options); - FieldToJson(jdata["cdef_y_sec_strength"], &meta_struct.cdef_y_sec_strength, options); - FieldToJson(jdata["cdef_uv_pri_strength"], &meta_struct.cdef_uv_pri_strength, options); - FieldToJson(jdata["cdef_uv_sec_strength"], &meta_struct.cdef_uv_sec_strength, options); + FieldToJson(jdata["maxExtent"], meta_struct.maxExtent, options); + FieldToJson(jdata["maxMipLevels"], decoded_value.maxMipLevels, options); + FieldToJson(jdata["maxArrayLayers"], decoded_value.maxArrayLayers, options); + FieldToJson(VkSampleCountFlags_t(),jdata["sampleCounts"], decoded_value.sampleCounts, options); + FieldToJson(jdata["maxResourceSize"], decoded_value.maxResourceSize, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1LoopRestoration* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkInstanceCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1LoopRestoration& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1LoopRestoration& meta_struct = *data; + const VkInstanceCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkInstanceCreateInfo& meta_struct = *data; - FieldToJson(jdata["FrameRestorationType"], &meta_struct.FrameRestorationType, options); - FieldToJson(jdata["LoopRestorationSize"], &meta_struct.LoopRestorationSize, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkInstanceCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["pApplicationInfo"], meta_struct.pApplicationInfo, options); + FieldToJson(jdata["enabledLayerCount"], decoded_value.enabledLayerCount, options); + FieldToJson(jdata["ppEnabledLayerNames"], &meta_struct.ppEnabledLayerNames, options); + FieldToJson(jdata["enabledExtensionCount"], decoded_value.enabledExtensionCount, options); + FieldToJson(jdata["ppEnabledExtensionNames"], &meta_struct.ppEnabledExtensionNames, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1GlobalMotion* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryHeap* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1GlobalMotion& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1GlobalMotion& meta_struct = *data; + const VkMemoryHeap& decoded_value = *data->decoded_value; + const Decoded_VkMemoryHeap& meta_struct = *data; - FieldToJson(jdata["GmType"], &meta_struct.GmType, options); - FieldToJson(jdata["gm_params"], &meta_struct.gm_params, options); + FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(VkMemoryHeapFlags_t(),jdata["flags"], decoded_value.flags, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1FilmGrainFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryType* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1FilmGrainFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1FilmGrainFlags& meta_struct = *data; + const VkMemoryType& decoded_value = *data->decoded_value; + const Decoded_VkMemoryType& meta_struct = *data; - FieldToJson(jdata["chroma_scaling_from_luma"], decoded_value.chroma_scaling_from_luma, options); - FieldToJson(jdata["overlap_flag"], decoded_value.overlap_flag, options); - FieldToJson(jdata["clip_to_restricted_range"], decoded_value.clip_to_restricted_range, options); - FieldToJson(jdata["update_grain"], decoded_value.update_grain, options); - FieldToJson(jdata["reserved"], decoded_value.reserved, options); + FieldToJson(VkMemoryPropertyFlags_t(),jdata["propertyFlags"], decoded_value.propertyFlags, options); + FieldToJson(jdata["heapIndex"], decoded_value.heapIndex, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoAV1FilmGrain* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoAV1FilmGrain& decoded_value = *data->decoded_value; - const Decoded_StdVideoAV1FilmGrain& meta_struct = *data; + const VkPhysicalDeviceFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFeatures& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["grain_scaling_minus_8"], decoded_value.grain_scaling_minus_8, options); - FieldToJson(jdata["ar_coeff_lag"], decoded_value.ar_coeff_lag, options); - FieldToJson(jdata["ar_coeff_shift_minus_6"], decoded_value.ar_coeff_shift_minus_6, options); - FieldToJson(jdata["grain_scale_shift"], decoded_value.grain_scale_shift, options); - FieldToJson(jdata["grain_seed"], decoded_value.grain_seed, options); - FieldToJson(jdata["film_grain_params_ref_idx"], decoded_value.film_grain_params_ref_idx, options); - FieldToJson(jdata["num_y_points"], decoded_value.num_y_points, options); - FieldToJson(jdata["point_y_value"], &meta_struct.point_y_value, options); - FieldToJson(jdata["point_y_scaling"], &meta_struct.point_y_scaling, options); - FieldToJson(jdata["num_cb_points"], decoded_value.num_cb_points, options); - FieldToJson(jdata["point_cb_value"], &meta_struct.point_cb_value, options); - FieldToJson(jdata["point_cb_scaling"], &meta_struct.point_cb_scaling, options); - FieldToJson(jdata["num_cr_points"], decoded_value.num_cr_points, options); - FieldToJson(jdata["point_cr_value"], &meta_struct.point_cr_value, options); - FieldToJson(jdata["point_cr_scaling"], &meta_struct.point_cr_scaling, options); - FieldToJson(jdata["ar_coeffs_y_plus_128"], &meta_struct.ar_coeffs_y_plus_128, options); - FieldToJson(jdata["ar_coeffs_cb_plus_128"], &meta_struct.ar_coeffs_cb_plus_128, options); - FieldToJson(jdata["ar_coeffs_cr_plus_128"], &meta_struct.ar_coeffs_cr_plus_128, options); - FieldToJson(jdata["cb_mult"], decoded_value.cb_mult, options); - FieldToJson(jdata["cb_luma_mult"], decoded_value.cb_luma_mult, options); - FieldToJson(jdata["cb_offset"], decoded_value.cb_offset, options); - FieldToJson(jdata["cr_mult"], decoded_value.cr_mult, options); - FieldToJson(jdata["cr_luma_mult"], decoded_value.cr_luma_mult, options); - FieldToJson(jdata["cr_offset"], decoded_value.cr_offset, options); + jdata["robustBufferAccess"] = static_cast(decoded_value.robustBufferAccess); + jdata["fullDrawIndexUint32"] = static_cast(decoded_value.fullDrawIndexUint32); + jdata["imageCubeArray"] = static_cast(decoded_value.imageCubeArray); + jdata["independentBlend"] = static_cast(decoded_value.independentBlend); + jdata["geometryShader"] = static_cast(decoded_value.geometryShader); + jdata["tessellationShader"] = static_cast(decoded_value.tessellationShader); + jdata["sampleRateShading"] = static_cast(decoded_value.sampleRateShading); + jdata["dualSrcBlend"] = static_cast(decoded_value.dualSrcBlend); + jdata["logicOp"] = static_cast(decoded_value.logicOp); + jdata["multiDrawIndirect"] = static_cast(decoded_value.multiDrawIndirect); + jdata["drawIndirectFirstInstance"] = static_cast(decoded_value.drawIndirectFirstInstance); + jdata["depthClamp"] = static_cast(decoded_value.depthClamp); + jdata["depthBiasClamp"] = static_cast(decoded_value.depthBiasClamp); + jdata["fillModeNonSolid"] = static_cast(decoded_value.fillModeNonSolid); + jdata["depthBounds"] = static_cast(decoded_value.depthBounds); + jdata["wideLines"] = static_cast(decoded_value.wideLines); + jdata["largePoints"] = static_cast(decoded_value.largePoints); + jdata["alphaToOne"] = static_cast(decoded_value.alphaToOne); + jdata["multiViewport"] = static_cast(decoded_value.multiViewport); + jdata["samplerAnisotropy"] = static_cast(decoded_value.samplerAnisotropy); + jdata["textureCompressionETC2"] = static_cast(decoded_value.textureCompressionETC2); + jdata["textureCompressionASTC_LDR"] = static_cast(decoded_value.textureCompressionASTC_LDR); + jdata["textureCompressionBC"] = static_cast(decoded_value.textureCompressionBC); + jdata["occlusionQueryPrecise"] = static_cast(decoded_value.occlusionQueryPrecise); + jdata["pipelineStatisticsQuery"] = static_cast(decoded_value.pipelineStatisticsQuery); + jdata["vertexPipelineStoresAndAtomics"] = static_cast(decoded_value.vertexPipelineStoresAndAtomics); + jdata["fragmentStoresAndAtomics"] = static_cast(decoded_value.fragmentStoresAndAtomics); + jdata["shaderTessellationAndGeometryPointSize"] = static_cast(decoded_value.shaderTessellationAndGeometryPointSize); + jdata["shaderImageGatherExtended"] = static_cast(decoded_value.shaderImageGatherExtended); + jdata["shaderStorageImageExtendedFormats"] = static_cast(decoded_value.shaderStorageImageExtendedFormats); + jdata["shaderStorageImageMultisample"] = static_cast(decoded_value.shaderStorageImageMultisample); + jdata["shaderStorageImageReadWithoutFormat"] = static_cast(decoded_value.shaderStorageImageReadWithoutFormat); + jdata["shaderStorageImageWriteWithoutFormat"] = static_cast(decoded_value.shaderStorageImageWriteWithoutFormat); + jdata["shaderUniformBufferArrayDynamicIndexing"] = static_cast(decoded_value.shaderUniformBufferArrayDynamicIndexing); + jdata["shaderSampledImageArrayDynamicIndexing"] = static_cast(decoded_value.shaderSampledImageArrayDynamicIndexing); + jdata["shaderStorageBufferArrayDynamicIndexing"] = static_cast(decoded_value.shaderStorageBufferArrayDynamicIndexing); + jdata["shaderStorageImageArrayDynamicIndexing"] = static_cast(decoded_value.shaderStorageImageArrayDynamicIndexing); + jdata["shaderClipDistance"] = static_cast(decoded_value.shaderClipDistance); + jdata["shaderCullDistance"] = static_cast(decoded_value.shaderCullDistance); + jdata["shaderFloat64"] = static_cast(decoded_value.shaderFloat64); + jdata["shaderInt64"] = static_cast(decoded_value.shaderInt64); + jdata["shaderInt16"] = static_cast(decoded_value.shaderInt16); + jdata["shaderResourceResidency"] = static_cast(decoded_value.shaderResourceResidency); + jdata["shaderResourceMinLod"] = static_cast(decoded_value.shaderResourceMinLod); + jdata["sparseBinding"] = static_cast(decoded_value.sparseBinding); + jdata["sparseResidencyBuffer"] = static_cast(decoded_value.sparseResidencyBuffer); + jdata["sparseResidencyImage2D"] = static_cast(decoded_value.sparseResidencyImage2D); + jdata["sparseResidencyImage3D"] = static_cast(decoded_value.sparseResidencyImage3D); + jdata["sparseResidency2Samples"] = static_cast(decoded_value.sparseResidency2Samples); + jdata["sparseResidency4Samples"] = static_cast(decoded_value.sparseResidency4Samples); + jdata["sparseResidency8Samples"] = static_cast(decoded_value.sparseResidency8Samples); + jdata["sparseResidency16Samples"] = static_cast(decoded_value.sparseResidency16Samples); + jdata["sparseResidencyAliased"] = static_cast(decoded_value.sparseResidencyAliased); + jdata["variableMultisampleRate"] = static_cast(decoded_value.variableMultisampleRate); + jdata["inheritedQueries"] = static_cast(decoded_value.inheritedQueries); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeAV1PictureInfoFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLimits* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoDecodeAV1PictureInfoFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoDecodeAV1PictureInfoFlags& meta_struct = *data; - - FieldToJson(jdata["error_resilient_mode"], decoded_value.error_resilient_mode, options); - FieldToJson(jdata["disable_cdf_update"], decoded_value.disable_cdf_update, options); - FieldToJson(jdata["use_superres"], decoded_value.use_superres, options); - FieldToJson(jdata["render_and_frame_size_different"], decoded_value.render_and_frame_size_different, options); - FieldToJson(jdata["allow_screen_content_tools"], decoded_value.allow_screen_content_tools, options); - FieldToJson(jdata["is_filter_switchable"], decoded_value.is_filter_switchable, options); - FieldToJson(jdata["force_integer_mv"], decoded_value.force_integer_mv, options); - FieldToJson(jdata["frame_size_override_flag"], decoded_value.frame_size_override_flag, options); - FieldToJson(jdata["buffer_removal_time_present_flag"], decoded_value.buffer_removal_time_present_flag, options); - FieldToJson(jdata["allow_intrabc"], decoded_value.allow_intrabc, options); - FieldToJson(jdata["frame_refs_short_signaling"], decoded_value.frame_refs_short_signaling, options); - FieldToJson(jdata["allow_high_precision_mv"], decoded_value.allow_high_precision_mv, options); - FieldToJson(jdata["is_motion_mode_switchable"], decoded_value.is_motion_mode_switchable, options); - FieldToJson(jdata["use_ref_frame_mvs"], decoded_value.use_ref_frame_mvs, options); - FieldToJson(jdata["disable_frame_end_update_cdf"], decoded_value.disable_frame_end_update_cdf, options); - FieldToJson(jdata["allow_warped_motion"], decoded_value.allow_warped_motion, options); - FieldToJson(jdata["reduced_tx_set"], decoded_value.reduced_tx_set, options); - FieldToJson(jdata["reference_select"], decoded_value.reference_select, options); - FieldToJson(jdata["skip_mode_present"], decoded_value.skip_mode_present, options); - FieldToJson(jdata["delta_q_present"], decoded_value.delta_q_present, options); - FieldToJson(jdata["delta_lf_present"], decoded_value.delta_lf_present, options); - FieldToJson(jdata["delta_lf_multi"], decoded_value.delta_lf_multi, options); - FieldToJson(jdata["segmentation_enabled"], decoded_value.segmentation_enabled, options); - FieldToJson(jdata["segmentation_update_map"], decoded_value.segmentation_update_map, options); - FieldToJson(jdata["segmentation_temporal_update"], decoded_value.segmentation_temporal_update, options); - FieldToJson(jdata["segmentation_update_data"], decoded_value.segmentation_update_data, options); - FieldToJson(jdata["UsesLr"], decoded_value.UsesLr, options); - FieldToJson(jdata["usesChromaLr"], decoded_value.usesChromaLr, options); - FieldToJson(jdata["apply_grain"], decoded_value.apply_grain, options); - FieldToJson(jdata["reserved"], decoded_value.reserved, options); - } -} + const VkPhysicalDeviceLimits& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceLimits& meta_struct = *data; -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeAV1PictureInfo* data, const JsonOptions& options) + FieldToJson(jdata["maxImageDimension1D"], decoded_value.maxImageDimension1D, options); + FieldToJson(jdata["maxImageDimension2D"], decoded_value.maxImageDimension2D, options); + FieldToJson(jdata["maxImageDimension3D"], decoded_value.maxImageDimension3D, options); + FieldToJson(jdata["maxImageDimensionCube"], decoded_value.maxImageDimensionCube, options); + FieldToJson(jdata["maxImageArrayLayers"], decoded_value.maxImageArrayLayers, options); + FieldToJson(jdata["maxTexelBufferElements"], decoded_value.maxTexelBufferElements, options); + FieldToJson(jdata["maxUniformBufferRange"], decoded_value.maxUniformBufferRange, options); + FieldToJson(jdata["maxStorageBufferRange"], decoded_value.maxStorageBufferRange, options); + FieldToJson(jdata["maxPushConstantsSize"], decoded_value.maxPushConstantsSize, options); + FieldToJson(jdata["maxMemoryAllocationCount"], decoded_value.maxMemoryAllocationCount, options); + FieldToJson(jdata["maxSamplerAllocationCount"], decoded_value.maxSamplerAllocationCount, options); + FieldToJson(jdata["bufferImageGranularity"], decoded_value.bufferImageGranularity, options); + FieldToJson(jdata["sparseAddressSpaceSize"], decoded_value.sparseAddressSpaceSize, options); + FieldToJson(jdata["maxBoundDescriptorSets"], decoded_value.maxBoundDescriptorSets, options); + FieldToJson(jdata["maxPerStageDescriptorSamplers"], decoded_value.maxPerStageDescriptorSamplers, options); + FieldToJson(jdata["maxPerStageDescriptorUniformBuffers"], decoded_value.maxPerStageDescriptorUniformBuffers, options); + FieldToJson(jdata["maxPerStageDescriptorStorageBuffers"], decoded_value.maxPerStageDescriptorStorageBuffers, options); + FieldToJson(jdata["maxPerStageDescriptorSampledImages"], decoded_value.maxPerStageDescriptorSampledImages, options); + FieldToJson(jdata["maxPerStageDescriptorStorageImages"], decoded_value.maxPerStageDescriptorStorageImages, options); + FieldToJson(jdata["maxPerStageDescriptorInputAttachments"], decoded_value.maxPerStageDescriptorInputAttachments, options); + FieldToJson(jdata["maxPerStageResources"], decoded_value.maxPerStageResources, options); + FieldToJson(jdata["maxDescriptorSetSamplers"], decoded_value.maxDescriptorSetSamplers, options); + FieldToJson(jdata["maxDescriptorSetUniformBuffers"], decoded_value.maxDescriptorSetUniformBuffers, options); + FieldToJson(jdata["maxDescriptorSetUniformBuffersDynamic"], decoded_value.maxDescriptorSetUniformBuffersDynamic, options); + FieldToJson(jdata["maxDescriptorSetStorageBuffers"], decoded_value.maxDescriptorSetStorageBuffers, options); + FieldToJson(jdata["maxDescriptorSetStorageBuffersDynamic"], decoded_value.maxDescriptorSetStorageBuffersDynamic, options); + FieldToJson(jdata["maxDescriptorSetSampledImages"], decoded_value.maxDescriptorSetSampledImages, options); + FieldToJson(jdata["maxDescriptorSetStorageImages"], decoded_value.maxDescriptorSetStorageImages, options); + FieldToJson(jdata["maxDescriptorSetInputAttachments"], decoded_value.maxDescriptorSetInputAttachments, options); + FieldToJson(jdata["maxVertexInputAttributes"], decoded_value.maxVertexInputAttributes, options); + FieldToJson(jdata["maxVertexInputBindings"], decoded_value.maxVertexInputBindings, options); + FieldToJson(jdata["maxVertexInputAttributeOffset"], decoded_value.maxVertexInputAttributeOffset, options); + FieldToJson(jdata["maxVertexInputBindingStride"], decoded_value.maxVertexInputBindingStride, options); + FieldToJson(jdata["maxVertexOutputComponents"], decoded_value.maxVertexOutputComponents, options); + FieldToJson(jdata["maxTessellationGenerationLevel"], decoded_value.maxTessellationGenerationLevel, options); + FieldToJson(jdata["maxTessellationPatchSize"], decoded_value.maxTessellationPatchSize, options); + FieldToJson(jdata["maxTessellationControlPerVertexInputComponents"], decoded_value.maxTessellationControlPerVertexInputComponents, options); + FieldToJson(jdata["maxTessellationControlPerVertexOutputComponents"], decoded_value.maxTessellationControlPerVertexOutputComponents, options); + FieldToJson(jdata["maxTessellationControlPerPatchOutputComponents"], decoded_value.maxTessellationControlPerPatchOutputComponents, options); + FieldToJson(jdata["maxTessellationControlTotalOutputComponents"], decoded_value.maxTessellationControlTotalOutputComponents, options); + FieldToJson(jdata["maxTessellationEvaluationInputComponents"], decoded_value.maxTessellationEvaluationInputComponents, options); + FieldToJson(jdata["maxTessellationEvaluationOutputComponents"], decoded_value.maxTessellationEvaluationOutputComponents, options); + FieldToJson(jdata["maxGeometryShaderInvocations"], decoded_value.maxGeometryShaderInvocations, options); + FieldToJson(jdata["maxGeometryInputComponents"], decoded_value.maxGeometryInputComponents, options); + FieldToJson(jdata["maxGeometryOutputComponents"], decoded_value.maxGeometryOutputComponents, options); + FieldToJson(jdata["maxGeometryOutputVertices"], decoded_value.maxGeometryOutputVertices, options); + FieldToJson(jdata["maxGeometryTotalOutputComponents"], decoded_value.maxGeometryTotalOutputComponents, options); + FieldToJson(jdata["maxFragmentInputComponents"], decoded_value.maxFragmentInputComponents, options); + FieldToJson(jdata["maxFragmentOutputAttachments"], decoded_value.maxFragmentOutputAttachments, options); + FieldToJson(jdata["maxFragmentDualSrcAttachments"], decoded_value.maxFragmentDualSrcAttachments, options); + FieldToJson(jdata["maxFragmentCombinedOutputResources"], decoded_value.maxFragmentCombinedOutputResources, options); + FieldToJson(jdata["maxComputeSharedMemorySize"], decoded_value.maxComputeSharedMemorySize, options); + FieldToJson(jdata["maxComputeWorkGroupCount"], &meta_struct.maxComputeWorkGroupCount, options); + FieldToJson(jdata["maxComputeWorkGroupInvocations"], decoded_value.maxComputeWorkGroupInvocations, options); + FieldToJson(jdata["maxComputeWorkGroupSize"], &meta_struct.maxComputeWorkGroupSize, options); + FieldToJson(jdata["subPixelPrecisionBits"], decoded_value.subPixelPrecisionBits, options); + FieldToJson(jdata["subTexelPrecisionBits"], decoded_value.subTexelPrecisionBits, options); + FieldToJson(jdata["mipmapPrecisionBits"], decoded_value.mipmapPrecisionBits, options); + FieldToJson(jdata["maxDrawIndexedIndexValue"], decoded_value.maxDrawIndexedIndexValue, options); + FieldToJson(jdata["maxDrawIndirectCount"], decoded_value.maxDrawIndirectCount, options); + FieldToJson(jdata["maxSamplerLodBias"], decoded_value.maxSamplerLodBias, options); + FieldToJson(jdata["maxSamplerAnisotropy"], decoded_value.maxSamplerAnisotropy, options); + FieldToJson(jdata["maxViewports"], decoded_value.maxViewports, options); + FieldToJson(jdata["maxViewportDimensions"], &meta_struct.maxViewportDimensions, options); + FieldToJson(jdata["viewportBoundsRange"], &meta_struct.viewportBoundsRange, options); + FieldToJson(jdata["viewportSubPixelBits"], decoded_value.viewportSubPixelBits, options); + FieldToJson(jdata["minMemoryMapAlignment"], decoded_value.minMemoryMapAlignment, options); + FieldToJson(jdata["minTexelBufferOffsetAlignment"], decoded_value.minTexelBufferOffsetAlignment, options); + FieldToJson(jdata["minUniformBufferOffsetAlignment"], decoded_value.minUniformBufferOffsetAlignment, options); + FieldToJson(jdata["minStorageBufferOffsetAlignment"], decoded_value.minStorageBufferOffsetAlignment, options); + FieldToJson(jdata["minTexelOffset"], decoded_value.minTexelOffset, options); + FieldToJson(jdata["maxTexelOffset"], decoded_value.maxTexelOffset, options); + FieldToJson(jdata["minTexelGatherOffset"], decoded_value.minTexelGatherOffset, options); + FieldToJson(jdata["maxTexelGatherOffset"], decoded_value.maxTexelGatherOffset, options); + FieldToJson(jdata["minInterpolationOffset"], decoded_value.minInterpolationOffset, options); + FieldToJson(jdata["maxInterpolationOffset"], decoded_value.maxInterpolationOffset, options); + FieldToJson(jdata["subPixelInterpolationOffsetBits"], decoded_value.subPixelInterpolationOffsetBits, options); + FieldToJson(jdata["maxFramebufferWidth"], decoded_value.maxFramebufferWidth, options); + FieldToJson(jdata["maxFramebufferHeight"], decoded_value.maxFramebufferHeight, options); + FieldToJson(jdata["maxFramebufferLayers"], decoded_value.maxFramebufferLayers, options); + FieldToJson(VkSampleCountFlags_t(),jdata["framebufferColorSampleCounts"], decoded_value.framebufferColorSampleCounts, options); + FieldToJson(VkSampleCountFlags_t(),jdata["framebufferDepthSampleCounts"], decoded_value.framebufferDepthSampleCounts, options); + FieldToJson(VkSampleCountFlags_t(),jdata["framebufferStencilSampleCounts"], decoded_value.framebufferStencilSampleCounts, options); + FieldToJson(VkSampleCountFlags_t(),jdata["framebufferNoAttachmentsSampleCounts"], decoded_value.framebufferNoAttachmentsSampleCounts, options); + FieldToJson(jdata["maxColorAttachments"], decoded_value.maxColorAttachments, options); + FieldToJson(VkSampleCountFlags_t(),jdata["sampledImageColorSampleCounts"], decoded_value.sampledImageColorSampleCounts, options); + FieldToJson(VkSampleCountFlags_t(),jdata["sampledImageIntegerSampleCounts"], decoded_value.sampledImageIntegerSampleCounts, options); + FieldToJson(VkSampleCountFlags_t(),jdata["sampledImageDepthSampleCounts"], decoded_value.sampledImageDepthSampleCounts, options); + FieldToJson(VkSampleCountFlags_t(),jdata["sampledImageStencilSampleCounts"], decoded_value.sampledImageStencilSampleCounts, options); + FieldToJson(VkSampleCountFlags_t(),jdata["storageImageSampleCounts"], decoded_value.storageImageSampleCounts, options); + FieldToJson(jdata["maxSampleMaskWords"], decoded_value.maxSampleMaskWords, options); + jdata["timestampComputeAndGraphics"] = static_cast(decoded_value.timestampComputeAndGraphics); + FieldToJson(jdata["timestampPeriod"], decoded_value.timestampPeriod, options); + FieldToJson(jdata["maxClipDistances"], decoded_value.maxClipDistances, options); + FieldToJson(jdata["maxCullDistances"], decoded_value.maxCullDistances, options); + FieldToJson(jdata["maxCombinedClipAndCullDistances"], decoded_value.maxCombinedClipAndCullDistances, options); + FieldToJson(jdata["discreteQueuePriorities"], decoded_value.discreteQueuePriorities, options); + FieldToJson(jdata["pointSizeRange"], &meta_struct.pointSizeRange, options); + FieldToJson(jdata["lineWidthRange"], &meta_struct.lineWidthRange, options); + FieldToJson(jdata["pointSizeGranularity"], decoded_value.pointSizeGranularity, options); + FieldToJson(jdata["lineWidthGranularity"], decoded_value.lineWidthGranularity, options); + jdata["strictLines"] = static_cast(decoded_value.strictLines); + jdata["standardSampleLocations"] = static_cast(decoded_value.standardSampleLocations); + FieldToJson(jdata["optimalBufferCopyOffsetAlignment"], decoded_value.optimalBufferCopyOffsetAlignment, options); + FieldToJson(jdata["optimalBufferCopyRowPitchAlignment"], decoded_value.optimalBufferCopyRowPitchAlignment, options); + FieldToJson(jdata["nonCoherentAtomSize"], decoded_value.nonCoherentAtomSize, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMemoryProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoDecodeAV1PictureInfo& decoded_value = *data->decoded_value; - const Decoded_StdVideoDecodeAV1PictureInfo& meta_struct = *data; + const VkPhysicalDeviceMemoryProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMemoryProperties& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["frame_type"], decoded_value.frame_type, options); - FieldToJson(jdata["current_frame_id"], decoded_value.current_frame_id, options); - FieldToJson(jdata["OrderHint"], decoded_value.OrderHint, options); - FieldToJson(jdata["primary_ref_frame"], decoded_value.primary_ref_frame, options); - FieldToJson(jdata["refresh_frame_flags"], decoded_value.refresh_frame_flags, options); - FieldToJson(jdata["reserved1"], decoded_value.reserved1, options); - FieldToJson(jdata["interpolation_filter"], decoded_value.interpolation_filter, options); - FieldToJson(jdata["TxMode"], decoded_value.TxMode, options); - FieldToJson(jdata["delta_q_res"], decoded_value.delta_q_res, options); - FieldToJson(jdata["delta_lf_res"], decoded_value.delta_lf_res, options); - FieldToJson(jdata["SkipModeFrame"], &meta_struct.SkipModeFrame, options); - FieldToJson(jdata["coded_denom"], decoded_value.coded_denom, options); - FieldToJson(jdata["reserved2"], &meta_struct.reserved2, options); - FieldToJson(jdata["OrderHints"], &meta_struct.OrderHints, options); - FieldToJson(jdata["expectedFrameId"], &meta_struct.expectedFrameId, options); - FieldToJson(jdata["pTileInfo"], meta_struct.pTileInfo, options); - FieldToJson(jdata["pQuantization"], meta_struct.pQuantization, options); - FieldToJson(jdata["pSegmentation"], meta_struct.pSegmentation, options); - FieldToJson(jdata["pLoopFilter"], meta_struct.pLoopFilter, options); - FieldToJson(jdata["pCDEF"], meta_struct.pCDEF, options); - FieldToJson(jdata["pLoopRestoration"], meta_struct.pLoopRestoration, options); - FieldToJson(jdata["pGlobalMotion"], meta_struct.pGlobalMotion, options); - FieldToJson(jdata["pFilmGrain"], meta_struct.pFilmGrain, options); + FieldToJson(jdata["memoryTypeCount"], decoded_value.memoryTypeCount, options); + FieldToJson(jdata["memoryTypes"], meta_struct.memoryTypes, options); + FieldToJson(jdata["memoryHeapCount"], decoded_value.memoryHeapCount, options); + FieldToJson(jdata["memoryHeaps"], meta_struct.memoryHeaps, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeAV1ReferenceInfoFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSparseProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoDecodeAV1ReferenceInfoFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoDecodeAV1ReferenceInfoFlags& meta_struct = *data; + const VkPhysicalDeviceSparseProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSparseProperties& meta_struct = *data; - FieldToJson(jdata["disable_frame_end_update_cdf"], decoded_value.disable_frame_end_update_cdf, options); - FieldToJson(jdata["segmentation_enabled"], decoded_value.segmentation_enabled, options); - FieldToJson(jdata["reserved"], decoded_value.reserved, options); + jdata["residencyStandard2DBlockShape"] = static_cast(decoded_value.residencyStandard2DBlockShape); + jdata["residencyStandard2DMultisampleBlockShape"] = static_cast(decoded_value.residencyStandard2DMultisampleBlockShape); + jdata["residencyStandard3DBlockShape"] = static_cast(decoded_value.residencyStandard3DBlockShape); + jdata["residencyAlignedMipSize"] = static_cast(decoded_value.residencyAlignedMipSize); + jdata["residencyNonResidentStrict"] = static_cast(decoded_value.residencyNonResidentStrict); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeAV1ReferenceInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoDecodeAV1ReferenceInfo& decoded_value = *data->decoded_value; - const Decoded_StdVideoDecodeAV1ReferenceInfo& meta_struct = *data; + const VkPhysicalDeviceProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceProperties& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["frame_type"], decoded_value.frame_type, options); - FieldToJson(jdata["RefFrameSignBias"], decoded_value.RefFrameSignBias, options); - FieldToJson(jdata["OrderHint"], decoded_value.OrderHint, options); - FieldToJson(jdata["SavedOrderHints"], &meta_struct.SavedOrderHints, options); + FieldToJson(jdata["apiVersion"], decoded_value.apiVersion, options); + FieldToJson(jdata["driverVersion"], decoded_value.driverVersion, options); + FieldToJson(jdata["vendorID"], decoded_value.vendorID, options); + FieldToJson(jdata["deviceID"], decoded_value.deviceID, options); + FieldToJson(jdata["deviceType"], decoded_value.deviceType, options); + FieldToJson(jdata["deviceName"], &meta_struct.deviceName, options); + FieldToJson(jdata["pipelineCacheUUID"], uuid_to_string(sizeof(decoded_value.pipelineCacheUUID), decoded_value.pipelineCacheUUID), options); + FieldToJson(jdata["limits"], meta_struct.limits, options); + FieldToJson(jdata["sparseProperties"], meta_struct.sparseProperties, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1ExtensionHeader* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeAV1ExtensionHeader& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeAV1ExtensionHeader& meta_struct = *data; + const VkQueueFamilyProperties& decoded_value = *data->decoded_value; + const Decoded_VkQueueFamilyProperties& meta_struct = *data; - FieldToJson(jdata["temporal_id"], decoded_value.temporal_id, options); - FieldToJson(jdata["spatial_id"], decoded_value.spatial_id, options); + FieldToJson(VkQueueFlags_t(),jdata["queueFlags"], decoded_value.queueFlags, options); + FieldToJson(jdata["queueCount"], decoded_value.queueCount, options); + FieldToJson(jdata["timestampValidBits"], decoded_value.timestampValidBits, options); + FieldToJson(jdata["minImageTransferGranularity"], meta_struct.minImageTransferGranularity, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1DecoderModelInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceQueueCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeAV1DecoderModelInfo& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeAV1DecoderModelInfo& meta_struct = *data; + const VkDeviceQueueCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkDeviceQueueCreateInfo& meta_struct = *data; - FieldToJson(jdata["buffer_delay_length_minus_1"], decoded_value.buffer_delay_length_minus_1, options); - FieldToJson(jdata["buffer_removal_time_length_minus_1"], decoded_value.buffer_removal_time_length_minus_1, options); - FieldToJson(jdata["frame_presentation_time_length_minus_1"], decoded_value.frame_presentation_time_length_minus_1, options); - FieldToJson(jdata["reserved1"], decoded_value.reserved1, options); - FieldToJson(jdata["num_units_in_decoding_tick"], decoded_value.num_units_in_decoding_tick, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkDeviceQueueCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["queueFamilyIndex"], decoded_value.queueFamilyIndex, options); + FieldToJson(jdata["queueCount"], decoded_value.queueCount, options); + FieldToJson(jdata["pQueuePriorities"], meta_struct.pQueuePriorities, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1OperatingPointInfoFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeAV1OperatingPointInfoFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeAV1OperatingPointInfoFlags& meta_struct = *data; + const VkDeviceCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkDeviceCreateInfo& meta_struct = *data; - FieldToJson(jdata["decoder_model_present_for_this_op"], decoded_value.decoder_model_present_for_this_op, options); - FieldToJson(jdata["low_delay_mode_flag"], decoded_value.low_delay_mode_flag, options); - FieldToJson(jdata["initial_display_delay_present_for_this_op"], decoded_value.initial_display_delay_present_for_this_op, options); - FieldToJson(jdata["reserved"], decoded_value.reserved, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkDeviceCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["queueCreateInfoCount"], decoded_value.queueCreateInfoCount, options); + FieldToJson(jdata["pQueueCreateInfos"], meta_struct.pQueueCreateInfos, options); + FieldToJson(jdata["enabledLayerCount"], decoded_value.enabledLayerCount, options); + FieldToJson(jdata["ppEnabledLayerNames"], &meta_struct.ppEnabledLayerNames, options); + FieldToJson(jdata["enabledExtensionCount"], decoded_value.enabledExtensionCount, options); + FieldToJson(jdata["ppEnabledExtensionNames"], &meta_struct.ppEnabledExtensionNames, options); + FieldToJson(jdata["pEnabledFeatures"], meta_struct.pEnabledFeatures, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1OperatingPointInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExtensionProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeAV1OperatingPointInfo& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeAV1OperatingPointInfo& meta_struct = *data; + const VkExtensionProperties& decoded_value = *data->decoded_value; + const Decoded_VkExtensionProperties& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["operating_point_idc"], decoded_value.operating_point_idc, options); - FieldToJson(jdata["seq_level_idx"], decoded_value.seq_level_idx, options); - FieldToJson(jdata["seq_tier"], decoded_value.seq_tier, options); - FieldToJson(jdata["decoder_buffer_delay"], decoded_value.decoder_buffer_delay, options); - FieldToJson(jdata["encoder_buffer_delay"], decoded_value.encoder_buffer_delay, options); - FieldToJson(jdata["initial_display_delay_minus_1"], decoded_value.initial_display_delay_minus_1, options); + FieldToJson(jdata["extensionName"], &meta_struct.extensionName, options); + FieldToJson(jdata["specVersion"], decoded_value.specVersion, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1PictureInfoFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLayerProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeAV1PictureInfoFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeAV1PictureInfoFlags& meta_struct = *data; + const VkLayerProperties& decoded_value = *data->decoded_value; + const Decoded_VkLayerProperties& meta_struct = *data; - FieldToJson(jdata["error_resilient_mode"], decoded_value.error_resilient_mode, options); - FieldToJson(jdata["disable_cdf_update"], decoded_value.disable_cdf_update, options); - FieldToJson(jdata["use_superres"], decoded_value.use_superres, options); - FieldToJson(jdata["render_and_frame_size_different"], decoded_value.render_and_frame_size_different, options); - FieldToJson(jdata["allow_screen_content_tools"], decoded_value.allow_screen_content_tools, options); - FieldToJson(jdata["is_filter_switchable"], decoded_value.is_filter_switchable, options); - FieldToJson(jdata["force_integer_mv"], decoded_value.force_integer_mv, options); - FieldToJson(jdata["frame_size_override_flag"], decoded_value.frame_size_override_flag, options); - FieldToJson(jdata["buffer_removal_time_present_flag"], decoded_value.buffer_removal_time_present_flag, options); - FieldToJson(jdata["allow_intrabc"], decoded_value.allow_intrabc, options); - FieldToJson(jdata["frame_refs_short_signaling"], decoded_value.frame_refs_short_signaling, options); - FieldToJson(jdata["allow_high_precision_mv"], decoded_value.allow_high_precision_mv, options); - FieldToJson(jdata["is_motion_mode_switchable"], decoded_value.is_motion_mode_switchable, options); - FieldToJson(jdata["use_ref_frame_mvs"], decoded_value.use_ref_frame_mvs, options); - FieldToJson(jdata["disable_frame_end_update_cdf"], decoded_value.disable_frame_end_update_cdf, options); - FieldToJson(jdata["allow_warped_motion"], decoded_value.allow_warped_motion, options); - FieldToJson(jdata["reduced_tx_set"], decoded_value.reduced_tx_set, options); - FieldToJson(jdata["skip_mode_present"], decoded_value.skip_mode_present, options); - FieldToJson(jdata["delta_q_present"], decoded_value.delta_q_present, options); - FieldToJson(jdata["delta_lf_present"], decoded_value.delta_lf_present, options); - FieldToJson(jdata["delta_lf_multi"], decoded_value.delta_lf_multi, options); - FieldToJson(jdata["segmentation_enabled"], decoded_value.segmentation_enabled, options); - FieldToJson(jdata["segmentation_update_map"], decoded_value.segmentation_update_map, options); - FieldToJson(jdata["segmentation_temporal_update"], decoded_value.segmentation_temporal_update, options); - FieldToJson(jdata["segmentation_update_data"], decoded_value.segmentation_update_data, options); - FieldToJson(jdata["UsesLr"], decoded_value.UsesLr, options); - FieldToJson(jdata["usesChromaLr"], decoded_value.usesChromaLr, options); - FieldToJson(jdata["show_frame"], decoded_value.show_frame, options); - FieldToJson(jdata["showable_frame"], decoded_value.showable_frame, options); - FieldToJson(jdata["reserved"], decoded_value.reserved, options); + FieldToJson(jdata["layerName"], &meta_struct.layerName, options); + FieldToJson(jdata["specVersion"], decoded_value.specVersion, options); + FieldToJson(jdata["implementationVersion"], decoded_value.implementationVersion, options); + FieldToJson(jdata["description"], &meta_struct.description, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1PictureInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubmitInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeAV1PictureInfo& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeAV1PictureInfo& meta_struct = *data; + const VkSubmitInfo& decoded_value = *data->decoded_value; + const Decoded_VkSubmitInfo& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["frame_type"], decoded_value.frame_type, options); - FieldToJson(jdata["frame_presentation_time"], decoded_value.frame_presentation_time, options); - FieldToJson(jdata["current_frame_id"], decoded_value.current_frame_id, options); - FieldToJson(jdata["order_hint"], decoded_value.order_hint, options); - FieldToJson(jdata["primary_ref_frame"], decoded_value.primary_ref_frame, options); - FieldToJson(jdata["refresh_frame_flags"], decoded_value.refresh_frame_flags, options); - FieldToJson(jdata["coded_denom"], decoded_value.coded_denom, options); - FieldToJson(jdata["render_width_minus_1"], decoded_value.render_width_minus_1, options); - FieldToJson(jdata["render_height_minus_1"], decoded_value.render_height_minus_1, options); - FieldToJson(jdata["interpolation_filter"], decoded_value.interpolation_filter, options); - FieldToJson(jdata["TxMode"], decoded_value.TxMode, options); - FieldToJson(jdata["delta_q_res"], decoded_value.delta_q_res, options); - FieldToJson(jdata["delta_lf_res"], decoded_value.delta_lf_res, options); - FieldToJson(jdata["ref_order_hint"], &meta_struct.ref_order_hint, options); - FieldToJson(jdata["ref_frame_idx"], &meta_struct.ref_frame_idx, options); - FieldToJson(jdata["reserved1"], &meta_struct.reserved1, options); - FieldToJson(jdata["delta_frame_id_minus_1"], &meta_struct.delta_frame_id_minus_1, options); - FieldToJson(jdata["pTileInfo"], meta_struct.pTileInfo, options); - FieldToJson(jdata["pQuantization"], meta_struct.pQuantization, options); - FieldToJson(jdata["pSegmentation"], meta_struct.pSegmentation, options); - FieldToJson(jdata["pLoopFilter"], meta_struct.pLoopFilter, options); - FieldToJson(jdata["pCDEF"], meta_struct.pCDEF, options); - FieldToJson(jdata["pLoopRestoration"], meta_struct.pLoopRestoration, options); - FieldToJson(jdata["pGlobalMotion"], meta_struct.pGlobalMotion, options); - FieldToJson(jdata["pExtensionHeader"], meta_struct.pExtensionHeader, options); - FieldToJson(jdata["pBufferRemovalTimes"], meta_struct.pBufferRemovalTimes, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["waitSemaphoreCount"], decoded_value.waitSemaphoreCount, options); + HandleToJson(jdata["pWaitSemaphores"], &meta_struct.pWaitSemaphores, options); + FieldToJson(jdata["pWaitDstStageMask"], meta_struct.pWaitDstStageMask, options); + FieldToJson(jdata["commandBufferCount"], decoded_value.commandBufferCount, options); + HandleToJson(jdata["pCommandBuffers"], &meta_struct.pCommandBuffers, options); + FieldToJson(jdata["signalSemaphoreCount"], decoded_value.signalSemaphoreCount, options); + HandleToJson(jdata["pSignalSemaphores"], &meta_struct.pSignalSemaphores, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1ReferenceInfoFlags* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMappedMemoryRange* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeAV1ReferenceInfoFlags& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeAV1ReferenceInfoFlags& meta_struct = *data; + const VkMappedMemoryRange& decoded_value = *data->decoded_value; + const Decoded_VkMappedMemoryRange& meta_struct = *data; - FieldToJson(jdata["disable_frame_end_update_cdf"], decoded_value.disable_frame_end_update_cdf, options); - FieldToJson(jdata["segmentation_enabled"], decoded_value.segmentation_enabled, options); - FieldToJson(jdata["reserved"], decoded_value.reserved, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeAV1ReferenceInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryAllocateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const StdVideoEncodeAV1ReferenceInfo& decoded_value = *data->decoded_value; - const Decoded_StdVideoEncodeAV1ReferenceInfo& meta_struct = *data; + const VkMemoryAllocateInfo& decoded_value = *data->decoded_value; + const Decoded_VkMemoryAllocateInfo& meta_struct = *data; - FieldToJson(jdata["flags"], meta_struct.flags, options); - FieldToJson(jdata["RefFrameId"], decoded_value.RefFrameId, options); - FieldToJson(jdata["frame_type"], decoded_value.frame_type, options); - FieldToJson(jdata["OrderHint"], decoded_value.OrderHint, options); - FieldToJson(jdata["reserved1"], &meta_struct.reserved1, options); - FieldToJson(jdata["pExtensionHeader"], meta_struct.pExtensionHeader, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["allocationSize"], decoded_value.allocationSize, options); + FieldToJson(jdata["memoryTypeIndex"], decoded_value.memoryTypeIndex, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExtent2D* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryRequirements* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExtent2D& decoded_value = *data->decoded_value; - const Decoded_VkExtent2D& meta_struct = *data; + const VkMemoryRequirements& decoded_value = *data->decoded_value; + const Decoded_VkMemoryRequirements& meta_struct = *data; - FieldToJson(jdata["width"], decoded_value.width, options); - FieldToJson(jdata["height"], decoded_value.height, options); + FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["alignment"], decoded_value.alignment, options); + FieldToJson(jdata["memoryTypeBits"], decoded_value.memoryTypeBits, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExtent3D* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseMemoryBind* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExtent3D& decoded_value = *data->decoded_value; - const Decoded_VkExtent3D& meta_struct = *data; + const VkSparseMemoryBind& decoded_value = *data->decoded_value; + const Decoded_VkSparseMemoryBind& meta_struct = *data; - FieldToJson(jdata["width"], decoded_value.width, options); - FieldToJson(jdata["height"], decoded_value.height, options); - FieldToJson(jdata["depth"], decoded_value.depth, options); + FieldToJson(jdata["resourceOffset"], decoded_value.resourceOffset, options); + FieldToJson(jdata["size"], decoded_value.size, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["memoryOffset"], decoded_value.memoryOffset, options); + FieldToJson(VkSparseMemoryBindFlags_t(),jdata["flags"], decoded_value.flags, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOffset2D* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseBufferMemoryBindInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkOffset2D& decoded_value = *data->decoded_value; - const Decoded_VkOffset2D& meta_struct = *data; + const VkSparseBufferMemoryBindInfo& decoded_value = *data->decoded_value; + const Decoded_VkSparseBufferMemoryBindInfo& meta_struct = *data; - FieldToJson(jdata["x"], decoded_value.x, options); - FieldToJson(jdata["y"], decoded_value.y, options); + HandleToJson(jdata["buffer"], meta_struct.buffer, options); + FieldToJson(jdata["bindCount"], decoded_value.bindCount, options); + FieldToJson(jdata["pBinds"], meta_struct.pBinds, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOffset3D* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageOpaqueMemoryBindInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkOffset3D& decoded_value = *data->decoded_value; - const Decoded_VkOffset3D& meta_struct = *data; + const VkSparseImageOpaqueMemoryBindInfo& decoded_value = *data->decoded_value; + const Decoded_VkSparseImageOpaqueMemoryBindInfo& meta_struct = *data; - FieldToJson(jdata["x"], decoded_value.x, options); - FieldToJson(jdata["y"], decoded_value.y, options); - FieldToJson(jdata["z"], decoded_value.z, options); + HandleToJson(jdata["image"], meta_struct.image, options); + FieldToJson(jdata["bindCount"], decoded_value.bindCount, options); + FieldToJson(jdata["pBinds"], meta_struct.pBinds, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRect2D* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSubresource* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRect2D& decoded_value = *data->decoded_value; - const Decoded_VkRect2D& meta_struct = *data; + const VkImageSubresource& decoded_value = *data->decoded_value; + const Decoded_VkImageSubresource& meta_struct = *data; - FieldToJson(jdata["offset"], meta_struct.offset, options); - FieldToJson(jdata["extent"], meta_struct.extent, options); + FieldToJson(VkImageAspectFlags_t(),jdata["aspectMask"], decoded_value.aspectMask, options); + FieldToJson(jdata["mipLevel"], decoded_value.mipLevel, options); + FieldToJson(jdata["arrayLayer"], decoded_value.arrayLayer, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferMemoryBarrier* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageMemoryBind* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBufferMemoryBarrier& decoded_value = *data->decoded_value; - const Decoded_VkBufferMemoryBarrier& meta_struct = *data; + const VkSparseImageMemoryBind& decoded_value = *data->decoded_value; + const Decoded_VkSparseImageMemoryBind& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkAccessFlags_t(),jdata["srcAccessMask"], decoded_value.srcAccessMask, options); - FieldToJson(VkAccessFlags_t(),jdata["dstAccessMask"], decoded_value.dstAccessMask, options); - FieldToJson(jdata["srcQueueFamilyIndex"], decoded_value.srcQueueFamilyIndex, options); - FieldToJson(jdata["dstQueueFamilyIndex"], decoded_value.dstQueueFamilyIndex, options); - HandleToJson(jdata["buffer"], meta_struct.buffer, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); - FieldToJson(jdata["size"], decoded_value.size, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["subresource"], meta_struct.subresource, options); + FieldToJson(jdata["offset"], meta_struct.offset, options); + FieldToJson(jdata["extent"], meta_struct.extent, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["memoryOffset"], decoded_value.memoryOffset, options); + FieldToJson(VkSparseMemoryBindFlags_t(),jdata["flags"], decoded_value.flags, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDispatchIndirectCommand* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageMemoryBindInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDispatchIndirectCommand& decoded_value = *data->decoded_value; - const Decoded_VkDispatchIndirectCommand& meta_struct = *data; + const VkSparseImageMemoryBindInfo& decoded_value = *data->decoded_value; + const Decoded_VkSparseImageMemoryBindInfo& meta_struct = *data; - FieldToJson(jdata["x"], decoded_value.x, options); - FieldToJson(jdata["y"], decoded_value.y, options); - FieldToJson(jdata["z"], decoded_value.z, options); + HandleToJson(jdata["image"], meta_struct.image, options); + FieldToJson(jdata["bindCount"], decoded_value.bindCount, options); + FieldToJson(jdata["pBinds"], meta_struct.pBinds, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrawIndexedIndirectCommand* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindSparseInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDrawIndexedIndirectCommand& decoded_value = *data->decoded_value; - const Decoded_VkDrawIndexedIndirectCommand& meta_struct = *data; + const VkBindSparseInfo& decoded_value = *data->decoded_value; + const Decoded_VkBindSparseInfo& meta_struct = *data; - FieldToJson(jdata["indexCount"], decoded_value.indexCount, options); - FieldToJson(jdata["instanceCount"], decoded_value.instanceCount, options); - FieldToJson(jdata["firstIndex"], decoded_value.firstIndex, options); - FieldToJson(jdata["vertexOffset"], decoded_value.vertexOffset, options); - FieldToJson(jdata["firstInstance"], decoded_value.firstInstance, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["waitSemaphoreCount"], decoded_value.waitSemaphoreCount, options); + HandleToJson(jdata["pWaitSemaphores"], &meta_struct.pWaitSemaphores, options); + FieldToJson(jdata["bufferBindCount"], decoded_value.bufferBindCount, options); + FieldToJson(jdata["pBufferBinds"], meta_struct.pBufferBinds, options); + FieldToJson(jdata["imageOpaqueBindCount"], decoded_value.imageOpaqueBindCount, options); + FieldToJson(jdata["pImageOpaqueBinds"], meta_struct.pImageOpaqueBinds, options); + FieldToJson(jdata["imageBindCount"], decoded_value.imageBindCount, options); + FieldToJson(jdata["pImageBinds"], meta_struct.pImageBinds, options); + FieldToJson(jdata["signalSemaphoreCount"], decoded_value.signalSemaphoreCount, options); + HandleToJson(jdata["pSignalSemaphores"], &meta_struct.pSignalSemaphores, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrawIndirectCommand* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageFormatProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDrawIndirectCommand& decoded_value = *data->decoded_value; - const Decoded_VkDrawIndirectCommand& meta_struct = *data; + const VkSparseImageFormatProperties& decoded_value = *data->decoded_value; + const Decoded_VkSparseImageFormatProperties& meta_struct = *data; - FieldToJson(jdata["vertexCount"], decoded_value.vertexCount, options); - FieldToJson(jdata["instanceCount"], decoded_value.instanceCount, options); - FieldToJson(jdata["firstVertex"], decoded_value.firstVertex, options); - FieldToJson(jdata["firstInstance"], decoded_value.firstInstance, options); + FieldToJson(VkImageAspectFlags_t(),jdata["aspectMask"], decoded_value.aspectMask, options); + FieldToJson(jdata["imageGranularity"], meta_struct.imageGranularity, options); + FieldToJson(VkSparseImageFormatFlags_t(),jdata["flags"], decoded_value.flags, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSubresourceRange* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageMemoryRequirements* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageSubresourceRange& decoded_value = *data->decoded_value; - const Decoded_VkImageSubresourceRange& meta_struct = *data; + const VkSparseImageMemoryRequirements& decoded_value = *data->decoded_value; + const Decoded_VkSparseImageMemoryRequirements& meta_struct = *data; - FieldToJson(VkImageAspectFlags_t(),jdata["aspectMask"], decoded_value.aspectMask, options); - FieldToJson(jdata["baseMipLevel"], decoded_value.baseMipLevel, options); - FieldToJson(jdata["levelCount"], decoded_value.levelCount, options); - FieldToJson(jdata["baseArrayLayer"], decoded_value.baseArrayLayer, options); - FieldToJson(jdata["layerCount"], decoded_value.layerCount, options); + FieldToJson(jdata["formatProperties"], meta_struct.formatProperties, options); + FieldToJson(jdata["imageMipTailFirstLod"], decoded_value.imageMipTailFirstLod, options); + FieldToJson(jdata["imageMipTailSize"], decoded_value.imageMipTailSize, options); + FieldToJson(jdata["imageMipTailOffset"], decoded_value.imageMipTailOffset, options); + FieldToJson(jdata["imageMipTailStride"], decoded_value.imageMipTailStride, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageMemoryBarrier* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFenceCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageMemoryBarrier& decoded_value = *data->decoded_value; - const Decoded_VkImageMemoryBarrier& meta_struct = *data; + const VkFenceCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkFenceCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkAccessFlags_t(),jdata["srcAccessMask"], decoded_value.srcAccessMask, options); - FieldToJson(VkAccessFlags_t(),jdata["dstAccessMask"], decoded_value.dstAccessMask, options); - FieldToJson(jdata["oldLayout"], decoded_value.oldLayout, options); - FieldToJson(jdata["newLayout"], decoded_value.newLayout, options); - FieldToJson(jdata["srcQueueFamilyIndex"], decoded_value.srcQueueFamilyIndex, options); - FieldToJson(jdata["dstQueueFamilyIndex"], decoded_value.dstQueueFamilyIndex, options); - HandleToJson(jdata["image"], meta_struct.image, options); - FieldToJson(jdata["subresourceRange"], meta_struct.subresourceRange, options); + FieldToJson(VkFenceCreateFlags_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryBarrier* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryBarrier& decoded_value = *data->decoded_value; - const Decoded_VkMemoryBarrier& meta_struct = *data; + const VkSemaphoreCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkSemaphoreCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkAccessFlags_t(),jdata["srcAccessMask"], decoded_value.srcAccessMask, options); - FieldToJson(VkAccessFlags_t(),jdata["dstAccessMask"], decoded_value.dstAccessMask, options); + FieldToJson(VkSemaphoreCreateFlags_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCacheHeaderVersionOne* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkPipelineCacheHeaderVersionOne& decoded_value = *data->decoded_value; - const Decoded_VkPipelineCacheHeaderVersionOne& meta_struct = *data; - - FieldToJson(jdata["headerSize"], decoded_value.headerSize, options); - FieldToJson(jdata["headerVersion"], decoded_value.headerVersion, options); - FieldToJson(jdata["vendorID"], decoded_value.vendorID, options); - FieldToJson(jdata["deviceID"], decoded_value.deviceID, options); - FieldToJson(jdata["pipelineCacheUUID"], uuid_to_string(sizeof(decoded_value.pipelineCacheUUID), decoded_value.pipelineCacheUUID), options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAllocationCallbacks* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkAllocationCallbacks& decoded_value = *data->decoded_value; - const Decoded_VkAllocationCallbacks& meta_struct = *data; - - FieldToJson(jdata["pUserData"], to_hex_variable_width(meta_struct.pUserData), options); - FieldToJson(jdata["pfnAllocation"], to_hex_variable_width(meta_struct.pfnAllocation), options); - FieldToJson(jdata["pfnReallocation"], to_hex_variable_width(meta_struct.pfnReallocation), options); - FieldToJson(jdata["pfnFree"], to_hex_variable_width(meta_struct.pfnFree), options); - FieldToJson(jdata["pfnInternalAllocation"], to_hex_variable_width(meta_struct.pfnInternalAllocation), options); - FieldToJson(jdata["pfnInternalFree"], to_hex_variable_width(meta_struct.pfnInternalFree), options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkApplicationInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueryPoolCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkApplicationInfo& decoded_value = *data->decoded_value; - const Decoded_VkApplicationInfo& meta_struct = *data; + const VkQueryPoolCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkQueryPoolCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pApplicationName"], &meta_struct.pApplicationName, options); - FieldToJson(jdata["applicationVersion"], decoded_value.applicationVersion, options); - FieldToJson(jdata["pEngineName"], &meta_struct.pEngineName, options); - FieldToJson(jdata["engineVersion"], decoded_value.engineVersion, options); - FieldToJson(jdata["apiVersion"], decoded_value.apiVersion, options); + FieldToJson(VkQueryPoolCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["queryType"], decoded_value.queryType, options); + FieldToJson(jdata["queryCount"], decoded_value.queryCount, options); + FieldToJson(VkQueryPipelineStatisticFlags_t(),jdata["pipelineStatistics"], decoded_value.pipelineStatistics, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFormatProperties* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkFormatProperties& decoded_value = *data->decoded_value; - const Decoded_VkFormatProperties& meta_struct = *data; - - FieldToJson(VkFormatFeatureFlags_t(),jdata["linearTilingFeatures"], decoded_value.linearTilingFeatures, options); - FieldToJson(VkFormatFeatureFlags_t(),jdata["optimalTilingFeatures"], decoded_value.optimalTilingFeatures, options); - FieldToJson(VkFormatFeatureFlags_t(),jdata["bufferFeatures"], decoded_value.bufferFeatures, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageFormatProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageFormatProperties& decoded_value = *data->decoded_value; - const Decoded_VkImageFormatProperties& meta_struct = *data; + const VkBufferCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkBufferCreateInfo& meta_struct = *data; - FieldToJson(jdata["maxExtent"], meta_struct.maxExtent, options); - FieldToJson(jdata["maxMipLevels"], decoded_value.maxMipLevels, options); - FieldToJson(jdata["maxArrayLayers"], decoded_value.maxArrayLayers, options); - FieldToJson(VkSampleCountFlags_t(),jdata["sampleCounts"], decoded_value.sampleCounts, options); - FieldToJson(jdata["maxResourceSize"], decoded_value.maxResourceSize, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkBufferCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(VkBufferUsageFlags_t(),jdata["usage"], decoded_value.usage, options); + FieldToJson(jdata["sharingMode"], decoded_value.sharingMode, options); + FieldToJson(jdata["queueFamilyIndexCount"], decoded_value.queueFamilyIndexCount, options); + FieldToJson(jdata["pQueueFamilyIndices"], meta_struct.pQueueFamilyIndices, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkInstanceCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkInstanceCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkInstanceCreateInfo& meta_struct = *data; + const VkImageCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkImageCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkInstanceCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["pApplicationInfo"], meta_struct.pApplicationInfo, options); - FieldToJson(jdata["enabledLayerCount"], decoded_value.enabledLayerCount, options); - FieldToJson(jdata["ppEnabledLayerNames"], &meta_struct.ppEnabledLayerNames, options); - FieldToJson(jdata["enabledExtensionCount"], decoded_value.enabledExtensionCount, options); - FieldToJson(jdata["ppEnabledExtensionNames"], &meta_struct.ppEnabledExtensionNames, options); + FieldToJson(VkImageCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["imageType"], decoded_value.imageType, options); + FieldToJson(jdata["format"], decoded_value.format, options); + FieldToJson(jdata["extent"], meta_struct.extent, options); + FieldToJson(jdata["mipLevels"], decoded_value.mipLevels, options); + FieldToJson(jdata["arrayLayers"], decoded_value.arrayLayers, options); + FieldToJson(jdata["samples"], decoded_value.samples, options); + FieldToJson(jdata["tiling"], decoded_value.tiling, options); + FieldToJson(VkImageUsageFlags_t(),jdata["usage"], decoded_value.usage, options); + FieldToJson(jdata["sharingMode"], decoded_value.sharingMode, options); + FieldToJson(jdata["queueFamilyIndexCount"], decoded_value.queueFamilyIndexCount, options); + FieldToJson(jdata["pQueueFamilyIndices"], meta_struct.pQueueFamilyIndices, options); + FieldToJson(jdata["initialLayout"], decoded_value.initialLayout, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryHeap* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubresourceLayout* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryHeap& decoded_value = *data->decoded_value; - const Decoded_VkMemoryHeap& meta_struct = *data; + const VkSubresourceLayout& decoded_value = *data->decoded_value; + const Decoded_VkSubresourceLayout& meta_struct = *data; + FieldToJson(jdata["offset"], decoded_value.offset, options); FieldToJson(jdata["size"], decoded_value.size, options); - FieldToJson(VkMemoryHeapFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["rowPitch"], decoded_value.rowPitch, options); + FieldToJson(jdata["arrayPitch"], decoded_value.arrayPitch, options); + FieldToJson(jdata["depthPitch"], decoded_value.depthPitch, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryType* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkComponentMapping* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryType& decoded_value = *data->decoded_value; - const Decoded_VkMemoryType& meta_struct = *data; + const VkComponentMapping& decoded_value = *data->decoded_value; + const Decoded_VkComponentMapping& meta_struct = *data; - FieldToJson(VkMemoryPropertyFlags_t(),jdata["propertyFlags"], decoded_value.propertyFlags, options); - FieldToJson(jdata["heapIndex"], decoded_value.heapIndex, options); + FieldToJson(jdata["r"], decoded_value.r, options); + FieldToJson(jdata["g"], decoded_value.g, options); + FieldToJson(jdata["b"], decoded_value.b, options); + FieldToJson(jdata["a"], decoded_value.a, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFeatures& meta_struct = *data; + const VkImageViewCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkImageViewCreateInfo& meta_struct = *data; - jdata["robustBufferAccess"] = static_cast(decoded_value.robustBufferAccess); - jdata["fullDrawIndexUint32"] = static_cast(decoded_value.fullDrawIndexUint32); - jdata["imageCubeArray"] = static_cast(decoded_value.imageCubeArray); - jdata["independentBlend"] = static_cast(decoded_value.independentBlend); - jdata["geometryShader"] = static_cast(decoded_value.geometryShader); - jdata["tessellationShader"] = static_cast(decoded_value.tessellationShader); - jdata["sampleRateShading"] = static_cast(decoded_value.sampleRateShading); - jdata["dualSrcBlend"] = static_cast(decoded_value.dualSrcBlend); - jdata["logicOp"] = static_cast(decoded_value.logicOp); - jdata["multiDrawIndirect"] = static_cast(decoded_value.multiDrawIndirect); - jdata["drawIndirectFirstInstance"] = static_cast(decoded_value.drawIndirectFirstInstance); - jdata["depthClamp"] = static_cast(decoded_value.depthClamp); - jdata["depthBiasClamp"] = static_cast(decoded_value.depthBiasClamp); - jdata["fillModeNonSolid"] = static_cast(decoded_value.fillModeNonSolid); - jdata["depthBounds"] = static_cast(decoded_value.depthBounds); - jdata["wideLines"] = static_cast(decoded_value.wideLines); - jdata["largePoints"] = static_cast(decoded_value.largePoints); - jdata["alphaToOne"] = static_cast(decoded_value.alphaToOne); - jdata["multiViewport"] = static_cast(decoded_value.multiViewport); - jdata["samplerAnisotropy"] = static_cast(decoded_value.samplerAnisotropy); - jdata["textureCompressionETC2"] = static_cast(decoded_value.textureCompressionETC2); - jdata["textureCompressionASTC_LDR"] = static_cast(decoded_value.textureCompressionASTC_LDR); - jdata["textureCompressionBC"] = static_cast(decoded_value.textureCompressionBC); - jdata["occlusionQueryPrecise"] = static_cast(decoded_value.occlusionQueryPrecise); - jdata["pipelineStatisticsQuery"] = static_cast(decoded_value.pipelineStatisticsQuery); - jdata["vertexPipelineStoresAndAtomics"] = static_cast(decoded_value.vertexPipelineStoresAndAtomics); - jdata["fragmentStoresAndAtomics"] = static_cast(decoded_value.fragmentStoresAndAtomics); - jdata["shaderTessellationAndGeometryPointSize"] = static_cast(decoded_value.shaderTessellationAndGeometryPointSize); - jdata["shaderImageGatherExtended"] = static_cast(decoded_value.shaderImageGatherExtended); - jdata["shaderStorageImageExtendedFormats"] = static_cast(decoded_value.shaderStorageImageExtendedFormats); - jdata["shaderStorageImageMultisample"] = static_cast(decoded_value.shaderStorageImageMultisample); - jdata["shaderStorageImageReadWithoutFormat"] = static_cast(decoded_value.shaderStorageImageReadWithoutFormat); - jdata["shaderStorageImageWriteWithoutFormat"] = static_cast(decoded_value.shaderStorageImageWriteWithoutFormat); - jdata["shaderUniformBufferArrayDynamicIndexing"] = static_cast(decoded_value.shaderUniformBufferArrayDynamicIndexing); - jdata["shaderSampledImageArrayDynamicIndexing"] = static_cast(decoded_value.shaderSampledImageArrayDynamicIndexing); - jdata["shaderStorageBufferArrayDynamicIndexing"] = static_cast(decoded_value.shaderStorageBufferArrayDynamicIndexing); - jdata["shaderStorageImageArrayDynamicIndexing"] = static_cast(decoded_value.shaderStorageImageArrayDynamicIndexing); - jdata["shaderClipDistance"] = static_cast(decoded_value.shaderClipDistance); - jdata["shaderCullDistance"] = static_cast(decoded_value.shaderCullDistance); - jdata["shaderFloat64"] = static_cast(decoded_value.shaderFloat64); - jdata["shaderInt64"] = static_cast(decoded_value.shaderInt64); - jdata["shaderInt16"] = static_cast(decoded_value.shaderInt16); - jdata["shaderResourceResidency"] = static_cast(decoded_value.shaderResourceResidency); - jdata["shaderResourceMinLod"] = static_cast(decoded_value.shaderResourceMinLod); - jdata["sparseBinding"] = static_cast(decoded_value.sparseBinding); - jdata["sparseResidencyBuffer"] = static_cast(decoded_value.sparseResidencyBuffer); - jdata["sparseResidencyImage2D"] = static_cast(decoded_value.sparseResidencyImage2D); - jdata["sparseResidencyImage3D"] = static_cast(decoded_value.sparseResidencyImage3D); - jdata["sparseResidency2Samples"] = static_cast(decoded_value.sparseResidency2Samples); - jdata["sparseResidency4Samples"] = static_cast(decoded_value.sparseResidency4Samples); - jdata["sparseResidency8Samples"] = static_cast(decoded_value.sparseResidency8Samples); - jdata["sparseResidency16Samples"] = static_cast(decoded_value.sparseResidency16Samples); - jdata["sparseResidencyAliased"] = static_cast(decoded_value.sparseResidencyAliased); - jdata["variableMultisampleRate"] = static_cast(decoded_value.variableMultisampleRate); - jdata["inheritedQueries"] = static_cast(decoded_value.inheritedQueries); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkImageViewCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["image"], meta_struct.image, options); + FieldToJson(jdata["viewType"], decoded_value.viewType, options); + FieldToJson(jdata["format"], decoded_value.format, options); + FieldToJson(jdata["components"], meta_struct.components, options); + FieldToJson(jdata["subresourceRange"], meta_struct.subresourceRange, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLimits* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandPoolCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceLimits& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceLimits& meta_struct = *data; + const VkCommandPoolCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkCommandPoolCreateInfo& meta_struct = *data; - FieldToJson(jdata["maxImageDimension1D"], decoded_value.maxImageDimension1D, options); - FieldToJson(jdata["maxImageDimension2D"], decoded_value.maxImageDimension2D, options); - FieldToJson(jdata["maxImageDimension3D"], decoded_value.maxImageDimension3D, options); - FieldToJson(jdata["maxImageDimensionCube"], decoded_value.maxImageDimensionCube, options); - FieldToJson(jdata["maxImageArrayLayers"], decoded_value.maxImageArrayLayers, options); - FieldToJson(jdata["maxTexelBufferElements"], decoded_value.maxTexelBufferElements, options); - FieldToJson(jdata["maxUniformBufferRange"], decoded_value.maxUniformBufferRange, options); - FieldToJson(jdata["maxStorageBufferRange"], decoded_value.maxStorageBufferRange, options); - FieldToJson(jdata["maxPushConstantsSize"], decoded_value.maxPushConstantsSize, options); - FieldToJson(jdata["maxMemoryAllocationCount"], decoded_value.maxMemoryAllocationCount, options); - FieldToJson(jdata["maxSamplerAllocationCount"], decoded_value.maxSamplerAllocationCount, options); - FieldToJson(jdata["bufferImageGranularity"], decoded_value.bufferImageGranularity, options); - FieldToJson(jdata["sparseAddressSpaceSize"], decoded_value.sparseAddressSpaceSize, options); - FieldToJson(jdata["maxBoundDescriptorSets"], decoded_value.maxBoundDescriptorSets, options); - FieldToJson(jdata["maxPerStageDescriptorSamplers"], decoded_value.maxPerStageDescriptorSamplers, options); - FieldToJson(jdata["maxPerStageDescriptorUniformBuffers"], decoded_value.maxPerStageDescriptorUniformBuffers, options); - FieldToJson(jdata["maxPerStageDescriptorStorageBuffers"], decoded_value.maxPerStageDescriptorStorageBuffers, options); - FieldToJson(jdata["maxPerStageDescriptorSampledImages"], decoded_value.maxPerStageDescriptorSampledImages, options); - FieldToJson(jdata["maxPerStageDescriptorStorageImages"], decoded_value.maxPerStageDescriptorStorageImages, options); - FieldToJson(jdata["maxPerStageDescriptorInputAttachments"], decoded_value.maxPerStageDescriptorInputAttachments, options); - FieldToJson(jdata["maxPerStageResources"], decoded_value.maxPerStageResources, options); - FieldToJson(jdata["maxDescriptorSetSamplers"], decoded_value.maxDescriptorSetSamplers, options); - FieldToJson(jdata["maxDescriptorSetUniformBuffers"], decoded_value.maxDescriptorSetUniformBuffers, options); - FieldToJson(jdata["maxDescriptorSetUniformBuffersDynamic"], decoded_value.maxDescriptorSetUniformBuffersDynamic, options); - FieldToJson(jdata["maxDescriptorSetStorageBuffers"], decoded_value.maxDescriptorSetStorageBuffers, options); - FieldToJson(jdata["maxDescriptorSetStorageBuffersDynamic"], decoded_value.maxDescriptorSetStorageBuffersDynamic, options); - FieldToJson(jdata["maxDescriptorSetSampledImages"], decoded_value.maxDescriptorSetSampledImages, options); - FieldToJson(jdata["maxDescriptorSetStorageImages"], decoded_value.maxDescriptorSetStorageImages, options); - FieldToJson(jdata["maxDescriptorSetInputAttachments"], decoded_value.maxDescriptorSetInputAttachments, options); - FieldToJson(jdata["maxVertexInputAttributes"], decoded_value.maxVertexInputAttributes, options); - FieldToJson(jdata["maxVertexInputBindings"], decoded_value.maxVertexInputBindings, options); - FieldToJson(jdata["maxVertexInputAttributeOffset"], decoded_value.maxVertexInputAttributeOffset, options); - FieldToJson(jdata["maxVertexInputBindingStride"], decoded_value.maxVertexInputBindingStride, options); - FieldToJson(jdata["maxVertexOutputComponents"], decoded_value.maxVertexOutputComponents, options); - FieldToJson(jdata["maxTessellationGenerationLevel"], decoded_value.maxTessellationGenerationLevel, options); - FieldToJson(jdata["maxTessellationPatchSize"], decoded_value.maxTessellationPatchSize, options); - FieldToJson(jdata["maxTessellationControlPerVertexInputComponents"], decoded_value.maxTessellationControlPerVertexInputComponents, options); - FieldToJson(jdata["maxTessellationControlPerVertexOutputComponents"], decoded_value.maxTessellationControlPerVertexOutputComponents, options); - FieldToJson(jdata["maxTessellationControlPerPatchOutputComponents"], decoded_value.maxTessellationControlPerPatchOutputComponents, options); - FieldToJson(jdata["maxTessellationControlTotalOutputComponents"], decoded_value.maxTessellationControlTotalOutputComponents, options); - FieldToJson(jdata["maxTessellationEvaluationInputComponents"], decoded_value.maxTessellationEvaluationInputComponents, options); - FieldToJson(jdata["maxTessellationEvaluationOutputComponents"], decoded_value.maxTessellationEvaluationOutputComponents, options); - FieldToJson(jdata["maxGeometryShaderInvocations"], decoded_value.maxGeometryShaderInvocations, options); - FieldToJson(jdata["maxGeometryInputComponents"], decoded_value.maxGeometryInputComponents, options); - FieldToJson(jdata["maxGeometryOutputComponents"], decoded_value.maxGeometryOutputComponents, options); - FieldToJson(jdata["maxGeometryOutputVertices"], decoded_value.maxGeometryOutputVertices, options); - FieldToJson(jdata["maxGeometryTotalOutputComponents"], decoded_value.maxGeometryTotalOutputComponents, options); - FieldToJson(jdata["maxFragmentInputComponents"], decoded_value.maxFragmentInputComponents, options); - FieldToJson(jdata["maxFragmentOutputAttachments"], decoded_value.maxFragmentOutputAttachments, options); - FieldToJson(jdata["maxFragmentDualSrcAttachments"], decoded_value.maxFragmentDualSrcAttachments, options); - FieldToJson(jdata["maxFragmentCombinedOutputResources"], decoded_value.maxFragmentCombinedOutputResources, options); - FieldToJson(jdata["maxComputeSharedMemorySize"], decoded_value.maxComputeSharedMemorySize, options); - FieldToJson(jdata["maxComputeWorkGroupCount"], &meta_struct.maxComputeWorkGroupCount, options); - FieldToJson(jdata["maxComputeWorkGroupInvocations"], decoded_value.maxComputeWorkGroupInvocations, options); - FieldToJson(jdata["maxComputeWorkGroupSize"], &meta_struct.maxComputeWorkGroupSize, options); - FieldToJson(jdata["subPixelPrecisionBits"], decoded_value.subPixelPrecisionBits, options); - FieldToJson(jdata["subTexelPrecisionBits"], decoded_value.subTexelPrecisionBits, options); - FieldToJson(jdata["mipmapPrecisionBits"], decoded_value.mipmapPrecisionBits, options); - FieldToJson(jdata["maxDrawIndexedIndexValue"], decoded_value.maxDrawIndexedIndexValue, options); - FieldToJson(jdata["maxDrawIndirectCount"], decoded_value.maxDrawIndirectCount, options); - FieldToJson(jdata["maxSamplerLodBias"], decoded_value.maxSamplerLodBias, options); - FieldToJson(jdata["maxSamplerAnisotropy"], decoded_value.maxSamplerAnisotropy, options); - FieldToJson(jdata["maxViewports"], decoded_value.maxViewports, options); - FieldToJson(jdata["maxViewportDimensions"], &meta_struct.maxViewportDimensions, options); - FieldToJson(jdata["viewportBoundsRange"], &meta_struct.viewportBoundsRange, options); - FieldToJson(jdata["viewportSubPixelBits"], decoded_value.viewportSubPixelBits, options); - FieldToJson(jdata["minMemoryMapAlignment"], decoded_value.minMemoryMapAlignment, options); - FieldToJson(jdata["minTexelBufferOffsetAlignment"], decoded_value.minTexelBufferOffsetAlignment, options); - FieldToJson(jdata["minUniformBufferOffsetAlignment"], decoded_value.minUniformBufferOffsetAlignment, options); - FieldToJson(jdata["minStorageBufferOffsetAlignment"], decoded_value.minStorageBufferOffsetAlignment, options); - FieldToJson(jdata["minTexelOffset"], decoded_value.minTexelOffset, options); - FieldToJson(jdata["maxTexelOffset"], decoded_value.maxTexelOffset, options); - FieldToJson(jdata["minTexelGatherOffset"], decoded_value.minTexelGatherOffset, options); - FieldToJson(jdata["maxTexelGatherOffset"], decoded_value.maxTexelGatherOffset, options); - FieldToJson(jdata["minInterpolationOffset"], decoded_value.minInterpolationOffset, options); - FieldToJson(jdata["maxInterpolationOffset"], decoded_value.maxInterpolationOffset, options); - FieldToJson(jdata["subPixelInterpolationOffsetBits"], decoded_value.subPixelInterpolationOffsetBits, options); - FieldToJson(jdata["maxFramebufferWidth"], decoded_value.maxFramebufferWidth, options); - FieldToJson(jdata["maxFramebufferHeight"], decoded_value.maxFramebufferHeight, options); - FieldToJson(jdata["maxFramebufferLayers"], decoded_value.maxFramebufferLayers, options); - FieldToJson(VkSampleCountFlags_t(),jdata["framebufferColorSampleCounts"], decoded_value.framebufferColorSampleCounts, options); - FieldToJson(VkSampleCountFlags_t(),jdata["framebufferDepthSampleCounts"], decoded_value.framebufferDepthSampleCounts, options); - FieldToJson(VkSampleCountFlags_t(),jdata["framebufferStencilSampleCounts"], decoded_value.framebufferStencilSampleCounts, options); - FieldToJson(VkSampleCountFlags_t(),jdata["framebufferNoAttachmentsSampleCounts"], decoded_value.framebufferNoAttachmentsSampleCounts, options); - FieldToJson(jdata["maxColorAttachments"], decoded_value.maxColorAttachments, options); - FieldToJson(VkSampleCountFlags_t(),jdata["sampledImageColorSampleCounts"], decoded_value.sampledImageColorSampleCounts, options); - FieldToJson(VkSampleCountFlags_t(),jdata["sampledImageIntegerSampleCounts"], decoded_value.sampledImageIntegerSampleCounts, options); - FieldToJson(VkSampleCountFlags_t(),jdata["sampledImageDepthSampleCounts"], decoded_value.sampledImageDepthSampleCounts, options); - FieldToJson(VkSampleCountFlags_t(),jdata["sampledImageStencilSampleCounts"], decoded_value.sampledImageStencilSampleCounts, options); - FieldToJson(VkSampleCountFlags_t(),jdata["storageImageSampleCounts"], decoded_value.storageImageSampleCounts, options); - FieldToJson(jdata["maxSampleMaskWords"], decoded_value.maxSampleMaskWords, options); - jdata["timestampComputeAndGraphics"] = static_cast(decoded_value.timestampComputeAndGraphics); - FieldToJson(jdata["timestampPeriod"], decoded_value.timestampPeriod, options); - FieldToJson(jdata["maxClipDistances"], decoded_value.maxClipDistances, options); - FieldToJson(jdata["maxCullDistances"], decoded_value.maxCullDistances, options); - FieldToJson(jdata["maxCombinedClipAndCullDistances"], decoded_value.maxCombinedClipAndCullDistances, options); - FieldToJson(jdata["discreteQueuePriorities"], decoded_value.discreteQueuePriorities, options); - FieldToJson(jdata["pointSizeRange"], &meta_struct.pointSizeRange, options); - FieldToJson(jdata["lineWidthRange"], &meta_struct.lineWidthRange, options); - FieldToJson(jdata["pointSizeGranularity"], decoded_value.pointSizeGranularity, options); - FieldToJson(jdata["lineWidthGranularity"], decoded_value.lineWidthGranularity, options); - jdata["strictLines"] = static_cast(decoded_value.strictLines); - jdata["standardSampleLocations"] = static_cast(decoded_value.standardSampleLocations); - FieldToJson(jdata["optimalBufferCopyOffsetAlignment"], decoded_value.optimalBufferCopyOffsetAlignment, options); - FieldToJson(jdata["optimalBufferCopyRowPitchAlignment"], decoded_value.optimalBufferCopyRowPitchAlignment, options); - FieldToJson(jdata["nonCoherentAtomSize"], decoded_value.nonCoherentAtomSize, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkCommandPoolCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["queueFamilyIndex"], decoded_value.queueFamilyIndex, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMemoryProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferAllocateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMemoryProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMemoryProperties& meta_struct = *data; + const VkCommandBufferAllocateInfo& decoded_value = *data->decoded_value; + const Decoded_VkCommandBufferAllocateInfo& meta_struct = *data; - FieldToJson(jdata["memoryTypeCount"], decoded_value.memoryTypeCount, options); - FieldToJson(jdata["memoryTypes"], meta_struct.memoryTypes, options); - FieldToJson(jdata["memoryHeapCount"], decoded_value.memoryHeapCount, options); - FieldToJson(jdata["memoryHeaps"], meta_struct.memoryHeaps, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["commandPool"], meta_struct.commandPool, options); + FieldToJson(jdata["level"], decoded_value.level, options); + FieldToJson(jdata["commandBufferCount"], decoded_value.commandBufferCount, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSparseProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferInheritanceInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSparseProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSparseProperties& meta_struct = *data; + const VkCommandBufferInheritanceInfo& decoded_value = *data->decoded_value; + const Decoded_VkCommandBufferInheritanceInfo& meta_struct = *data; - jdata["residencyStandard2DBlockShape"] = static_cast(decoded_value.residencyStandard2DBlockShape); - jdata["residencyStandard2DMultisampleBlockShape"] = static_cast(decoded_value.residencyStandard2DMultisampleBlockShape); - jdata["residencyStandard3DBlockShape"] = static_cast(decoded_value.residencyStandard3DBlockShape); - jdata["residencyAlignedMipSize"] = static_cast(decoded_value.residencyAlignedMipSize); - jdata["residencyNonResidentStrict"] = static_cast(decoded_value.residencyNonResidentStrict); + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["renderPass"], meta_struct.renderPass, options); + FieldToJson(jdata["subpass"], decoded_value.subpass, options); + HandleToJson(jdata["framebuffer"], meta_struct.framebuffer, options); + jdata["occlusionQueryEnable"] = static_cast(decoded_value.occlusionQueryEnable); + FieldToJson(VkQueryControlFlags_t(),jdata["queryFlags"], decoded_value.queryFlags, options); + FieldToJson(VkQueryPipelineStatisticFlags_t(),jdata["pipelineStatistics"], decoded_value.pipelineStatistics, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferBeginInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceProperties& meta_struct = *data; + const VkCommandBufferBeginInfo& decoded_value = *data->decoded_value; + const Decoded_VkCommandBufferBeginInfo& meta_struct = *data; - FieldToJson(jdata["apiVersion"], decoded_value.apiVersion, options); - FieldToJson(jdata["driverVersion"], decoded_value.driverVersion, options); - FieldToJson(jdata["vendorID"], decoded_value.vendorID, options); - FieldToJson(jdata["deviceID"], decoded_value.deviceID, options); - FieldToJson(jdata["deviceType"], decoded_value.deviceType, options); - FieldToJson(jdata["deviceName"], &meta_struct.deviceName, options); - FieldToJson(jdata["pipelineCacheUUID"], uuid_to_string(sizeof(decoded_value.pipelineCacheUUID), decoded_value.pipelineCacheUUID), options); - FieldToJson(jdata["limits"], meta_struct.limits, options); - FieldToJson(jdata["sparseProperties"], meta_struct.sparseProperties, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkCommandBufferUsageFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["pInheritanceInfo"], meta_struct.pInheritanceInfo, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferCopy* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkQueueFamilyProperties& decoded_value = *data->decoded_value; - const Decoded_VkQueueFamilyProperties& meta_struct = *data; + const VkBufferCopy& decoded_value = *data->decoded_value; + const Decoded_VkBufferCopy& meta_struct = *data; - FieldToJson(VkQueueFlags_t(),jdata["queueFlags"], decoded_value.queueFlags, options); - FieldToJson(jdata["queueCount"], decoded_value.queueCount, options); - FieldToJson(jdata["timestampValidBits"], decoded_value.timestampValidBits, options); - FieldToJson(jdata["minImageTransferGranularity"], meta_struct.minImageTransferGranularity, options); + FieldToJson(jdata["srcOffset"], decoded_value.srcOffset, options); + FieldToJson(jdata["dstOffset"], decoded_value.dstOffset, options); + FieldToJson(jdata["size"], decoded_value.size, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceQueueCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSubresourceLayers* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceQueueCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkDeviceQueueCreateInfo& meta_struct = *data; + const VkImageSubresourceLayers& decoded_value = *data->decoded_value; + const Decoded_VkImageSubresourceLayers& meta_struct = *data; + + FieldToJson(VkImageAspectFlags_t(),jdata["aspectMask"], decoded_value.aspectMask, options); + FieldToJson(jdata["mipLevel"], decoded_value.mipLevel, options); + FieldToJson(jdata["baseArrayLayer"], decoded_value.baseArrayLayer, options); + FieldToJson(jdata["layerCount"], decoded_value.layerCount, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferImageCopy* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkBufferImageCopy& decoded_value = *data->decoded_value; + const Decoded_VkBufferImageCopy& meta_struct = *data; + + FieldToJson(jdata["bufferOffset"], decoded_value.bufferOffset, options); + FieldToJson(jdata["bufferRowLength"], decoded_value.bufferRowLength, options); + FieldToJson(jdata["bufferImageHeight"], decoded_value.bufferImageHeight, options); + FieldToJson(jdata["imageSubresource"], meta_struct.imageSubresource, options); + FieldToJson(jdata["imageOffset"], meta_struct.imageOffset, options); + FieldToJson(jdata["imageExtent"], meta_struct.imageExtent, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCopy* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkImageCopy& decoded_value = *data->decoded_value; + const Decoded_VkImageCopy& meta_struct = *data; + + FieldToJson(jdata["srcSubresource"], meta_struct.srcSubresource, options); + FieldToJson(jdata["srcOffset"], meta_struct.srcOffset, options); + FieldToJson(jdata["dstSubresource"], meta_struct.dstSubresource, options); + FieldToJson(jdata["dstOffset"], meta_struct.dstOffset, options); + FieldToJson(jdata["extent"], meta_struct.extent, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDispatchIndirectCommand* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkDispatchIndirectCommand& decoded_value = *data->decoded_value; + const Decoded_VkDispatchIndirectCommand& meta_struct = *data; + + FieldToJson(jdata["x"], decoded_value.x, options); + FieldToJson(jdata["y"], decoded_value.y, options); + FieldToJson(jdata["z"], decoded_value.z, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCacheHeaderVersionOne* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPipelineCacheHeaderVersionOne& decoded_value = *data->decoded_value; + const Decoded_VkPipelineCacheHeaderVersionOne& meta_struct = *data; + + FieldToJson(jdata["headerSize"], decoded_value.headerSize, options); + FieldToJson(jdata["headerVersion"], decoded_value.headerVersion, options); + FieldToJson(jdata["vendorID"], decoded_value.vendorID, options); + FieldToJson(jdata["deviceID"], decoded_value.deviceID, options); + FieldToJson(jdata["pipelineCacheUUID"], uuid_to_string(sizeof(decoded_value.pipelineCacheUUID), decoded_value.pipelineCacheUUID), options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkEventCreateInfo* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkEventCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkEventCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDeviceQueueCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["queueFamilyIndex"], decoded_value.queueFamilyIndex, options); - FieldToJson(jdata["queueCount"], decoded_value.queueCount, options); - FieldToJson(jdata["pQueuePriorities"], meta_struct.pQueuePriorities, options); + FieldToJson(VkEventCreateFlags_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferViewCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkDeviceCreateInfo& meta_struct = *data; + const VkBufferViewCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkBufferViewCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDeviceCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["queueCreateInfoCount"], decoded_value.queueCreateInfoCount, options); - FieldToJson(jdata["pQueueCreateInfos"], meta_struct.pQueueCreateInfos, options); - FieldToJson(jdata["enabledLayerCount"], decoded_value.enabledLayerCount, options); - FieldToJson(jdata["ppEnabledLayerNames"], &meta_struct.ppEnabledLayerNames, options); - FieldToJson(jdata["enabledExtensionCount"], decoded_value.enabledExtensionCount, options); - FieldToJson(jdata["ppEnabledExtensionNames"], &meta_struct.ppEnabledExtensionNames, options); - FieldToJson(jdata["pEnabledFeatures"], meta_struct.pEnabledFeatures, options); + FieldToJson(VkBufferViewCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["buffer"], meta_struct.buffer, options); + FieldToJson(jdata["format"], decoded_value.format, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(jdata["range"], decoded_value.range, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExtensionProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSpecializationMapEntry* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExtensionProperties& decoded_value = *data->decoded_value; - const Decoded_VkExtensionProperties& meta_struct = *data; + const VkSpecializationMapEntry& decoded_value = *data->decoded_value; + const Decoded_VkSpecializationMapEntry& meta_struct = *data; - FieldToJson(jdata["extensionName"], &meta_struct.extensionName, options); - FieldToJson(jdata["specVersion"], decoded_value.specVersion, options); + FieldToJson(jdata["constantID"], decoded_value.constantID, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(jdata["size"], decoded_value.size, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLayerProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSpecializationInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkLayerProperties& decoded_value = *data->decoded_value; - const Decoded_VkLayerProperties& meta_struct = *data; + const VkSpecializationInfo& decoded_value = *data->decoded_value; + const Decoded_VkSpecializationInfo& meta_struct = *data; - FieldToJson(jdata["layerName"], &meta_struct.layerName, options); - FieldToJson(jdata["specVersion"], decoded_value.specVersion, options); - FieldToJson(jdata["implementationVersion"], decoded_value.implementationVersion, options); - FieldToJson(jdata["description"], &meta_struct.description, options); + FieldToJson(jdata["mapEntryCount"], decoded_value.mapEntryCount, options); + FieldToJson(jdata["pMapEntries"], meta_struct.pMapEntries, options); + FieldToJson(jdata["dataSize"], decoded_value.dataSize, options); + FieldToJson(jdata["pData"], meta_struct.pData, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubmitInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineShaderStageCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSubmitInfo& decoded_value = *data->decoded_value; - const Decoded_VkSubmitInfo& meta_struct = *data; + const VkPipelineShaderStageCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineShaderStageCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["waitSemaphoreCount"], decoded_value.waitSemaphoreCount, options); - HandleToJson(jdata["pWaitSemaphores"], &meta_struct.pWaitSemaphores, options); - FieldToJson(jdata["pWaitDstStageMask"], meta_struct.pWaitDstStageMask, options); - FieldToJson(jdata["commandBufferCount"], decoded_value.commandBufferCount, options); - HandleToJson(jdata["pCommandBuffers"], &meta_struct.pCommandBuffers, options); - FieldToJson(jdata["signalSemaphoreCount"], decoded_value.signalSemaphoreCount, options); - HandleToJson(jdata["pSignalSemaphores"], &meta_struct.pSignalSemaphores, options); + FieldToJson(VkPipelineShaderStageCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["stage"], decoded_value.stage, options); + HandleToJson(jdata["module"], meta_struct.module, options); + FieldToJson(jdata["pName"], &meta_struct.pName, options); + FieldToJson(jdata["pSpecializationInfo"], meta_struct.pSpecializationInfo, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMappedMemoryRange* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkComputePipelineCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMappedMemoryRange& decoded_value = *data->decoded_value; - const Decoded_VkMappedMemoryRange& meta_struct = *data; + const VkComputePipelineCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkComputePipelineCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(VkPipelineCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["stage"], meta_struct.stage, options); + HandleToJson(jdata["layout"], meta_struct.layout, options); + HandleToJson(jdata["basePipelineHandle"], meta_struct.basePipelineHandle, options); + FieldToJson(jdata["basePipelineIndex"], decoded_value.basePipelineIndex, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPushConstantRange* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPushConstantRange& decoded_value = *data->decoded_value; + const Decoded_VkPushConstantRange& meta_struct = *data; + + FieldToJson(VkShaderStageFlags_t(),jdata["stageFlags"], decoded_value.stageFlags, options); FieldToJson(jdata["offset"], decoded_value.offset, options); FieldToJson(jdata["size"], decoded_value.size, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineLayoutCreateInfo* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPipelineLayoutCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineLayoutCreateInfo& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkPipelineLayoutCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["setLayoutCount"], decoded_value.setLayoutCount, options); + HandleToJson(jdata["pSetLayouts"], &meta_struct.pSetLayouts, options); + FieldToJson(jdata["pushConstantRangeCount"], decoded_value.pushConstantRangeCount, options); + FieldToJson(jdata["pPushConstantRanges"], meta_struct.pPushConstantRanges, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryAllocateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryAllocateInfo& decoded_value = *data->decoded_value; - const Decoded_VkMemoryAllocateInfo& meta_struct = *data; + const VkSamplerCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkSamplerCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["allocationSize"], decoded_value.allocationSize, options); - FieldToJson(jdata["memoryTypeIndex"], decoded_value.memoryTypeIndex, options); + FieldToJson(VkSamplerCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["magFilter"], decoded_value.magFilter, options); + FieldToJson(jdata["minFilter"], decoded_value.minFilter, options); + FieldToJson(jdata["mipmapMode"], decoded_value.mipmapMode, options); + FieldToJson(jdata["addressModeU"], decoded_value.addressModeU, options); + FieldToJson(jdata["addressModeV"], decoded_value.addressModeV, options); + FieldToJson(jdata["addressModeW"], decoded_value.addressModeW, options); + FieldToJson(jdata["mipLodBias"], decoded_value.mipLodBias, options); + jdata["anisotropyEnable"] = static_cast(decoded_value.anisotropyEnable); + FieldToJson(jdata["maxAnisotropy"], decoded_value.maxAnisotropy, options); + jdata["compareEnable"] = static_cast(decoded_value.compareEnable); + FieldToJson(jdata["compareOp"], decoded_value.compareOp, options); + FieldToJson(jdata["minLod"], decoded_value.minLod, options); + FieldToJson(jdata["maxLod"], decoded_value.maxLod, options); + FieldToJson(jdata["borderColor"], decoded_value.borderColor, options); + jdata["unnormalizedCoordinates"] = static_cast(decoded_value.unnormalizedCoordinates); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryRequirements* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyDescriptorSet* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryRequirements& decoded_value = *data->decoded_value; - const Decoded_VkMemoryRequirements& meta_struct = *data; + const VkCopyDescriptorSet& decoded_value = *data->decoded_value; + const Decoded_VkCopyDescriptorSet& meta_struct = *data; - FieldToJson(jdata["size"], decoded_value.size, options); - FieldToJson(jdata["alignment"], decoded_value.alignment, options); - FieldToJson(jdata["memoryTypeBits"], decoded_value.memoryTypeBits, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["srcSet"], meta_struct.srcSet, options); + FieldToJson(jdata["srcBinding"], decoded_value.srcBinding, options); + FieldToJson(jdata["srcArrayElement"], decoded_value.srcArrayElement, options); + HandleToJson(jdata["dstSet"], meta_struct.dstSet, options); + FieldToJson(jdata["dstBinding"], decoded_value.dstBinding, options); + FieldToJson(jdata["dstArrayElement"], decoded_value.dstArrayElement, options); + FieldToJson(jdata["descriptorCount"], decoded_value.descriptorCount, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseMemoryBind* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorBufferInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSparseMemoryBind& decoded_value = *data->decoded_value; - const Decoded_VkSparseMemoryBind& meta_struct = *data; + const VkDescriptorBufferInfo& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorBufferInfo& meta_struct = *data; - FieldToJson(jdata["resourceOffset"], decoded_value.resourceOffset, options); - FieldToJson(jdata["size"], decoded_value.size, options); - HandleToJson(jdata["memory"], meta_struct.memory, options); - FieldToJson(jdata["memoryOffset"], decoded_value.memoryOffset, options); - FieldToJson(VkSparseMemoryBindFlags_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["buffer"], meta_struct.buffer, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(jdata["range"], decoded_value.range, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseBufferMemoryBindInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorPoolSize* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSparseBufferMemoryBindInfo& decoded_value = *data->decoded_value; - const Decoded_VkSparseBufferMemoryBindInfo& meta_struct = *data; + const VkDescriptorPoolSize& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorPoolSize& meta_struct = *data; - HandleToJson(jdata["buffer"], meta_struct.buffer, options); - FieldToJson(jdata["bindCount"], decoded_value.bindCount, options); - FieldToJson(jdata["pBinds"], meta_struct.pBinds, options); + FieldToJson(jdata["type"], decoded_value.type, options); + FieldToJson(jdata["descriptorCount"], decoded_value.descriptorCount, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageOpaqueMemoryBindInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorPoolCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSparseImageOpaqueMemoryBindInfo& decoded_value = *data->decoded_value; - const Decoded_VkSparseImageOpaqueMemoryBindInfo& meta_struct = *data; + const VkDescriptorPoolCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorPoolCreateInfo& meta_struct = *data; - HandleToJson(jdata["image"], meta_struct.image, options); - FieldToJson(jdata["bindCount"], decoded_value.bindCount, options); - FieldToJson(jdata["pBinds"], meta_struct.pBinds, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkDescriptorPoolCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["maxSets"], decoded_value.maxSets, options); + FieldToJson(jdata["poolSizeCount"], decoded_value.poolSizeCount, options); + FieldToJson(jdata["pPoolSizes"], meta_struct.pPoolSizes, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSubresource* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetAllocateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageSubresource& decoded_value = *data->decoded_value; - const Decoded_VkImageSubresource& meta_struct = *data; + const VkDescriptorSetAllocateInfo& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorSetAllocateInfo& meta_struct = *data; - FieldToJson(VkImageAspectFlags_t(),jdata["aspectMask"], decoded_value.aspectMask, options); - FieldToJson(jdata["mipLevel"], decoded_value.mipLevel, options); - FieldToJson(jdata["arrayLayer"], decoded_value.arrayLayer, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["descriptorPool"], meta_struct.descriptorPool, options); + FieldToJson(jdata["descriptorSetCount"], decoded_value.descriptorSetCount, options); + HandleToJson(jdata["pSetLayouts"], &meta_struct.pSetLayouts, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageMemoryBind* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutBinding* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSparseImageMemoryBind& decoded_value = *data->decoded_value; - const Decoded_VkSparseImageMemoryBind& meta_struct = *data; + const VkDescriptorSetLayoutBinding& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorSetLayoutBinding& meta_struct = *data; - FieldToJson(jdata["subresource"], meta_struct.subresource, options); - FieldToJson(jdata["offset"], meta_struct.offset, options); - FieldToJson(jdata["extent"], meta_struct.extent, options); - HandleToJson(jdata["memory"], meta_struct.memory, options); - FieldToJson(jdata["memoryOffset"], decoded_value.memoryOffset, options); - FieldToJson(VkSparseMemoryBindFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["binding"], decoded_value.binding, options); + FieldToJson(jdata["descriptorType"], decoded_value.descriptorType, options); + FieldToJson(jdata["descriptorCount"], decoded_value.descriptorCount, options); + FieldToJson(VkShaderStageFlags_t(),jdata["stageFlags"], decoded_value.stageFlags, options); + HandleToJson(jdata["pImmutableSamplers"], &meta_struct.pImmutableSamplers, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageMemoryBindInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSparseImageMemoryBindInfo& decoded_value = *data->decoded_value; - const Decoded_VkSparseImageMemoryBindInfo& meta_struct = *data; + const VkDescriptorSetLayoutCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorSetLayoutCreateInfo& meta_struct = *data; - HandleToJson(jdata["image"], meta_struct.image, options); - FieldToJson(jdata["bindCount"], decoded_value.bindCount, options); - FieldToJson(jdata["pBinds"], meta_struct.pBinds, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkDescriptorSetLayoutCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["bindingCount"], decoded_value.bindingCount, options); + FieldToJson(jdata["pBindings"], meta_struct.pBindings, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindSparseInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrawIndexedIndirectCommand* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindSparseInfo& decoded_value = *data->decoded_value; - const Decoded_VkBindSparseInfo& meta_struct = *data; + const VkDrawIndexedIndirectCommand& decoded_value = *data->decoded_value; + const Decoded_VkDrawIndexedIndirectCommand& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["waitSemaphoreCount"], decoded_value.waitSemaphoreCount, options); - HandleToJson(jdata["pWaitSemaphores"], &meta_struct.pWaitSemaphores, options); - FieldToJson(jdata["bufferBindCount"], decoded_value.bufferBindCount, options); - FieldToJson(jdata["pBufferBinds"], meta_struct.pBufferBinds, options); - FieldToJson(jdata["imageOpaqueBindCount"], decoded_value.imageOpaqueBindCount, options); - FieldToJson(jdata["pImageOpaqueBinds"], meta_struct.pImageOpaqueBinds, options); - FieldToJson(jdata["imageBindCount"], decoded_value.imageBindCount, options); - FieldToJson(jdata["pImageBinds"], meta_struct.pImageBinds, options); - FieldToJson(jdata["signalSemaphoreCount"], decoded_value.signalSemaphoreCount, options); - HandleToJson(jdata["pSignalSemaphores"], &meta_struct.pSignalSemaphores, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["indexCount"], decoded_value.indexCount, options); + FieldToJson(jdata["instanceCount"], decoded_value.instanceCount, options); + FieldToJson(jdata["firstIndex"], decoded_value.firstIndex, options); + FieldToJson(jdata["vertexOffset"], decoded_value.vertexOffset, options); + FieldToJson(jdata["firstInstance"], decoded_value.firstInstance, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageFormatProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrawIndirectCommand* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSparseImageFormatProperties& decoded_value = *data->decoded_value; - const Decoded_VkSparseImageFormatProperties& meta_struct = *data; + const VkDrawIndirectCommand& decoded_value = *data->decoded_value; + const Decoded_VkDrawIndirectCommand& meta_struct = *data; - FieldToJson(VkImageAspectFlags_t(),jdata["aspectMask"], decoded_value.aspectMask, options); - FieldToJson(jdata["imageGranularity"], meta_struct.imageGranularity, options); - FieldToJson(VkSparseImageFormatFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["vertexCount"], decoded_value.vertexCount, options); + FieldToJson(jdata["instanceCount"], decoded_value.instanceCount, options); + FieldToJson(jdata["firstVertex"], decoded_value.firstVertex, options); + FieldToJson(jdata["firstInstance"], decoded_value.firstInstance, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageMemoryRequirements* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVertexInputBindingDescription* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSparseImageMemoryRequirements& decoded_value = *data->decoded_value; - const Decoded_VkSparseImageMemoryRequirements& meta_struct = *data; + const VkVertexInputBindingDescription& decoded_value = *data->decoded_value; + const Decoded_VkVertexInputBindingDescription& meta_struct = *data; - FieldToJson(jdata["formatProperties"], meta_struct.formatProperties, options); - FieldToJson(jdata["imageMipTailFirstLod"], decoded_value.imageMipTailFirstLod, options); - FieldToJson(jdata["imageMipTailSize"], decoded_value.imageMipTailSize, options); - FieldToJson(jdata["imageMipTailOffset"], decoded_value.imageMipTailOffset, options); - FieldToJson(jdata["imageMipTailStride"], decoded_value.imageMipTailStride, options); + FieldToJson(jdata["binding"], decoded_value.binding, options); + FieldToJson(jdata["stride"], decoded_value.stride, options); + FieldToJson(jdata["inputRate"], decoded_value.inputRate, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFenceCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVertexInputAttributeDescription* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkFenceCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkFenceCreateInfo& meta_struct = *data; + const VkVertexInputAttributeDescription& decoded_value = *data->decoded_value; + const Decoded_VkVertexInputAttributeDescription& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkFenceCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["location"], decoded_value.location, options); + FieldToJson(jdata["binding"], decoded_value.binding, options); + FieldToJson(jdata["format"], decoded_value.format, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineVertexInputStateCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSemaphoreCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkSemaphoreCreateInfo& meta_struct = *data; + const VkPipelineVertexInputStateCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineVertexInputStateCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkSemaphoreCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(VkPipelineVertexInputStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["vertexBindingDescriptionCount"], decoded_value.vertexBindingDescriptionCount, options); + FieldToJson(jdata["pVertexBindingDescriptions"], meta_struct.pVertexBindingDescriptions, options); + FieldToJson(jdata["vertexAttributeDescriptionCount"], decoded_value.vertexAttributeDescriptionCount, options); + FieldToJson(jdata["pVertexAttributeDescriptions"], meta_struct.pVertexAttributeDescriptions, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkEventCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineInputAssemblyStateCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkEventCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkEventCreateInfo& meta_struct = *data; + const VkPipelineInputAssemblyStateCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineInputAssemblyStateCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkEventCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(VkPipelineInputAssemblyStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["topology"], decoded_value.topology, options); + jdata["primitiveRestartEnable"] = static_cast(decoded_value.primitiveRestartEnable); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueryPoolCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineTessellationStateCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkQueryPoolCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkQueryPoolCreateInfo& meta_struct = *data; + const VkPipelineTessellationStateCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineTessellationStateCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkQueryPoolCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["queryType"], decoded_value.queryType, options); - FieldToJson(jdata["queryCount"], decoded_value.queryCount, options); - FieldToJson(VkQueryPipelineStatisticFlags_t(),jdata["pipelineStatistics"], decoded_value.pipelineStatistics, options); + FieldToJson(VkPipelineTessellationStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["patchControlPoints"], decoded_value.patchControlPoints, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkViewport* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBufferCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkBufferCreateInfo& meta_struct = *data; + const VkViewport& decoded_value = *data->decoded_value; + const Decoded_VkViewport& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkBufferCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["size"], decoded_value.size, options); - FieldToJson(VkBufferUsageFlags_t(),jdata["usage"], decoded_value.usage, options); - FieldToJson(jdata["sharingMode"], decoded_value.sharingMode, options); - FieldToJson(jdata["queueFamilyIndexCount"], decoded_value.queueFamilyIndexCount, options); - FieldToJson(jdata["pQueueFamilyIndices"], meta_struct.pQueueFamilyIndices, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["x"], decoded_value.x, options); + FieldToJson(jdata["y"], decoded_value.y, options); + FieldToJson(jdata["width"], decoded_value.width, options); + FieldToJson(jdata["height"], decoded_value.height, options); + FieldToJson(jdata["minDepth"], decoded_value.minDepth, options); + FieldToJson(jdata["maxDepth"], decoded_value.maxDepth, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferViewCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportStateCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBufferViewCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkBufferViewCreateInfo& meta_struct = *data; + const VkPipelineViewportStateCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineViewportStateCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkBufferViewCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - HandleToJson(jdata["buffer"], meta_struct.buffer, options); - FieldToJson(jdata["format"], decoded_value.format, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); - FieldToJson(jdata["range"], decoded_value.range, options); + FieldToJson(VkPipelineViewportStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["viewportCount"], decoded_value.viewportCount, options); + FieldToJson(jdata["pViewports"], meta_struct.pViewports, options); + FieldToJson(jdata["scissorCount"], decoded_value.scissorCount, options); + FieldToJson(jdata["pScissors"], meta_struct.pScissors, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationStateCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkImageCreateInfo& meta_struct = *data; + const VkPipelineRasterizationStateCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineRasterizationStateCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkImageCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["imageType"], decoded_value.imageType, options); - FieldToJson(jdata["format"], decoded_value.format, options); - FieldToJson(jdata["extent"], meta_struct.extent, options); - FieldToJson(jdata["mipLevels"], decoded_value.mipLevels, options); - FieldToJson(jdata["arrayLayers"], decoded_value.arrayLayers, options); - FieldToJson(jdata["samples"], decoded_value.samples, options); - FieldToJson(jdata["tiling"], decoded_value.tiling, options); - FieldToJson(VkImageUsageFlags_t(),jdata["usage"], decoded_value.usage, options); - FieldToJson(jdata["sharingMode"], decoded_value.sharingMode, options); - FieldToJson(jdata["queueFamilyIndexCount"], decoded_value.queueFamilyIndexCount, options); - FieldToJson(jdata["pQueueFamilyIndices"], meta_struct.pQueueFamilyIndices, options); - FieldToJson(jdata["initialLayout"], decoded_value.initialLayout, options); + FieldToJson(VkPipelineRasterizationStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + jdata["depthClampEnable"] = static_cast(decoded_value.depthClampEnable); + jdata["rasterizerDiscardEnable"] = static_cast(decoded_value.rasterizerDiscardEnable); + FieldToJson(jdata["polygonMode"], decoded_value.polygonMode, options); + FieldToJson(VkCullModeFlags_t(),jdata["cullMode"], decoded_value.cullMode, options); + FieldToJson(jdata["frontFace"], decoded_value.frontFace, options); + jdata["depthBiasEnable"] = static_cast(decoded_value.depthBiasEnable); + FieldToJson(jdata["depthBiasConstantFactor"], decoded_value.depthBiasConstantFactor, options); + FieldToJson(jdata["depthBiasClamp"], decoded_value.depthBiasClamp, options); + FieldToJson(jdata["depthBiasSlopeFactor"], decoded_value.depthBiasSlopeFactor, options); + FieldToJson(jdata["lineWidth"], decoded_value.lineWidth, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubresourceLayout* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineMultisampleStateCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSubresourceLayout& decoded_value = *data->decoded_value; - const Decoded_VkSubresourceLayout& meta_struct = *data; + const VkPipelineMultisampleStateCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineMultisampleStateCreateInfo& meta_struct = *data; - FieldToJson(jdata["offset"], decoded_value.offset, options); - FieldToJson(jdata["size"], decoded_value.size, options); - FieldToJson(jdata["rowPitch"], decoded_value.rowPitch, options); - FieldToJson(jdata["arrayPitch"], decoded_value.arrayPitch, options); - FieldToJson(jdata["depthPitch"], decoded_value.depthPitch, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkPipelineMultisampleStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["rasterizationSamples"], decoded_value.rasterizationSamples, options); + jdata["sampleShadingEnable"] = static_cast(decoded_value.sampleShadingEnable); + FieldToJson(jdata["minSampleShading"], decoded_value.minSampleShading, options); + FieldToJson(jdata["pSampleMask"], meta_struct.pSampleMask, options); + jdata["alphaToCoverageEnable"] = static_cast(decoded_value.alphaToCoverageEnable); + jdata["alphaToOneEnable"] = static_cast(decoded_value.alphaToOneEnable); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkComponentMapping* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkStencilOpState* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkComponentMapping& decoded_value = *data->decoded_value; - const Decoded_VkComponentMapping& meta_struct = *data; + const VkStencilOpState& decoded_value = *data->decoded_value; + const Decoded_VkStencilOpState& meta_struct = *data; - FieldToJson(jdata["r"], decoded_value.r, options); - FieldToJson(jdata["g"], decoded_value.g, options); - FieldToJson(jdata["b"], decoded_value.b, options); - FieldToJson(jdata["a"], decoded_value.a, options); + FieldToJson(jdata["failOp"], decoded_value.failOp, options); + FieldToJson(jdata["passOp"], decoded_value.passOp, options); + FieldToJson(jdata["depthFailOp"], decoded_value.depthFailOp, options); + FieldToJson(jdata["compareOp"], decoded_value.compareOp, options); + FieldToJson(jdata["compareMask"], decoded_value.compareMask, options); + FieldToJson(jdata["writeMask"], decoded_value.writeMask, options); + FieldToJson(jdata["reference"], decoded_value.reference, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineDepthStencilStateCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageViewCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkImageViewCreateInfo& meta_struct = *data; + const VkPipelineDepthStencilStateCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineDepthStencilStateCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkImageViewCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - HandleToJson(jdata["image"], meta_struct.image, options); - FieldToJson(jdata["viewType"], decoded_value.viewType, options); - FieldToJson(jdata["format"], decoded_value.format, options); - FieldToJson(jdata["components"], meta_struct.components, options); - FieldToJson(jdata["subresourceRange"], meta_struct.subresourceRange, options); + FieldToJson(VkPipelineDepthStencilStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + jdata["depthTestEnable"] = static_cast(decoded_value.depthTestEnable); + jdata["depthWriteEnable"] = static_cast(decoded_value.depthWriteEnable); + FieldToJson(jdata["depthCompareOp"], decoded_value.depthCompareOp, options); + jdata["depthBoundsTestEnable"] = static_cast(decoded_value.depthBoundsTestEnable); + jdata["stencilTestEnable"] = static_cast(decoded_value.stencilTestEnable); + FieldToJson(jdata["front"], meta_struct.front, options); + FieldToJson(jdata["back"], meta_struct.back, options); + FieldToJson(jdata["minDepthBounds"], decoded_value.minDepthBounds, options); + FieldToJson(jdata["maxDepthBounds"], decoded_value.maxDepthBounds, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSpecializationMapEntry* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineColorBlendAttachmentState* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSpecializationMapEntry& decoded_value = *data->decoded_value; - const Decoded_VkSpecializationMapEntry& meta_struct = *data; + const VkPipelineColorBlendAttachmentState& decoded_value = *data->decoded_value; + const Decoded_VkPipelineColorBlendAttachmentState& meta_struct = *data; - FieldToJson(jdata["constantID"], decoded_value.constantID, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); - FieldToJson(jdata["size"], decoded_value.size, options); + jdata["blendEnable"] = static_cast(decoded_value.blendEnable); + FieldToJson(jdata["srcColorBlendFactor"], decoded_value.srcColorBlendFactor, options); + FieldToJson(jdata["dstColorBlendFactor"], decoded_value.dstColorBlendFactor, options); + FieldToJson(jdata["colorBlendOp"], decoded_value.colorBlendOp, options); + FieldToJson(jdata["srcAlphaBlendFactor"], decoded_value.srcAlphaBlendFactor, options); + FieldToJson(jdata["dstAlphaBlendFactor"], decoded_value.dstAlphaBlendFactor, options); + FieldToJson(jdata["alphaBlendOp"], decoded_value.alphaBlendOp, options); + FieldToJson(VkColorComponentFlags_t(),jdata["colorWriteMask"], decoded_value.colorWriteMask, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSpecializationInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineColorBlendStateCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSpecializationInfo& decoded_value = *data->decoded_value; - const Decoded_VkSpecializationInfo& meta_struct = *data; + const VkPipelineColorBlendStateCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineColorBlendStateCreateInfo& meta_struct = *data; - FieldToJson(jdata["mapEntryCount"], decoded_value.mapEntryCount, options); - FieldToJson(jdata["pMapEntries"], meta_struct.pMapEntries, options); - FieldToJson(jdata["dataSize"], decoded_value.dataSize, options); - FieldToJson(jdata["pData"], meta_struct.pData, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkPipelineColorBlendStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + jdata["logicOpEnable"] = static_cast(decoded_value.logicOpEnable); + FieldToJson(jdata["logicOp"], decoded_value.logicOp, options); + FieldToJson(jdata["attachmentCount"], decoded_value.attachmentCount, options); + FieldToJson(jdata["pAttachments"], meta_struct.pAttachments, options); + FieldToJson(jdata["blendConstants"], &meta_struct.blendConstants, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineShaderStageCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineDynamicStateCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineShaderStageCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineShaderStageCreateInfo& meta_struct = *data; + const VkPipelineDynamicStateCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineDynamicStateCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineShaderStageCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["stage"], decoded_value.stage, options); - HandleToJson(jdata["module"], meta_struct.module, options); - FieldToJson(jdata["pName"], &meta_struct.pName, options); - FieldToJson(jdata["pSpecializationInfo"], meta_struct.pSpecializationInfo, options); + FieldToJson(VkPipelineDynamicStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["dynamicStateCount"], decoded_value.dynamicStateCount, options); + FieldToJson(jdata["pDynamicStates"], meta_struct.pDynamicStates, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkComputePipelineCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGraphicsPipelineCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkComputePipelineCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkComputePipelineCreateInfo& meta_struct = *data; + const VkGraphicsPipelineCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkGraphicsPipelineCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); FieldToJson(VkPipelineCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["stage"], meta_struct.stage, options); + FieldToJson(jdata["stageCount"], decoded_value.stageCount, options); + FieldToJson(jdata["pStages"], meta_struct.pStages, options); + FieldToJson(jdata["pVertexInputState"], meta_struct.pVertexInputState, options); + FieldToJson(jdata["pInputAssemblyState"], meta_struct.pInputAssemblyState, options); + FieldToJson(jdata["pTessellationState"], meta_struct.pTessellationState, options); + FieldToJson(jdata["pViewportState"], meta_struct.pViewportState, options); + FieldToJson(jdata["pRasterizationState"], meta_struct.pRasterizationState, options); + FieldToJson(jdata["pMultisampleState"], meta_struct.pMultisampleState, options); + FieldToJson(jdata["pDepthStencilState"], meta_struct.pDepthStencilState, options); + FieldToJson(jdata["pColorBlendState"], meta_struct.pColorBlendState, options); + FieldToJson(jdata["pDynamicState"], meta_struct.pDynamicState, options); HandleToJson(jdata["layout"], meta_struct.layout, options); + HandleToJson(jdata["renderPass"], meta_struct.renderPass, options); + FieldToJson(jdata["subpass"], decoded_value.subpass, options); HandleToJson(jdata["basePipelineHandle"], meta_struct.basePipelineHandle, options); FieldToJson(jdata["basePipelineIndex"], decoded_value.basePipelineIndex, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVertexInputBindingDescription* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkVertexInputBindingDescription& decoded_value = *data->decoded_value; - const Decoded_VkVertexInputBindingDescription& meta_struct = *data; - - FieldToJson(jdata["binding"], decoded_value.binding, options); - FieldToJson(jdata["stride"], decoded_value.stride, options); - FieldToJson(jdata["inputRate"], decoded_value.inputRate, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVertexInputAttributeDescription* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentDescription* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVertexInputAttributeDescription& decoded_value = *data->decoded_value; - const Decoded_VkVertexInputAttributeDescription& meta_struct = *data; + const VkAttachmentDescription& decoded_value = *data->decoded_value; + const Decoded_VkAttachmentDescription& meta_struct = *data; - FieldToJson(jdata["location"], decoded_value.location, options); - FieldToJson(jdata["binding"], decoded_value.binding, options); + FieldToJson(VkAttachmentDescriptionFlags_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["format"], decoded_value.format, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineVertexInputStateCreateInfo* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkPipelineVertexInputStateCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineVertexInputStateCreateInfo& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineVertexInputStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["vertexBindingDescriptionCount"], decoded_value.vertexBindingDescriptionCount, options); - FieldToJson(jdata["pVertexBindingDescriptions"], meta_struct.pVertexBindingDescriptions, options); - FieldToJson(jdata["vertexAttributeDescriptionCount"], decoded_value.vertexAttributeDescriptionCount, options); - FieldToJson(jdata["pVertexAttributeDescriptions"], meta_struct.pVertexAttributeDescriptions, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["samples"], decoded_value.samples, options); + FieldToJson(jdata["loadOp"], decoded_value.loadOp, options); + FieldToJson(jdata["storeOp"], decoded_value.storeOp, options); + FieldToJson(jdata["stencilLoadOp"], decoded_value.stencilLoadOp, options); + FieldToJson(jdata["stencilStoreOp"], decoded_value.stencilStoreOp, options); + FieldToJson(jdata["initialLayout"], decoded_value.initialLayout, options); + FieldToJson(jdata["finalLayout"], decoded_value.finalLayout, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineInputAssemblyStateCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentReference* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineInputAssemblyStateCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineInputAssemblyStateCreateInfo& meta_struct = *data; + const VkAttachmentReference& decoded_value = *data->decoded_value; + const Decoded_VkAttachmentReference& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineInputAssemblyStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["topology"], decoded_value.topology, options); - jdata["primitiveRestartEnable"] = static_cast(decoded_value.primitiveRestartEnable); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["attachment"], decoded_value.attachment, options); + FieldToJson(jdata["layout"], decoded_value.layout, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineTessellationStateCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFramebufferCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineTessellationStateCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineTessellationStateCreateInfo& meta_struct = *data; + const VkFramebufferCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkFramebufferCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineTessellationStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["patchControlPoints"], decoded_value.patchControlPoints, options); + FieldToJson(VkFramebufferCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["renderPass"], meta_struct.renderPass, options); + FieldToJson(jdata["attachmentCount"], decoded_value.attachmentCount, options); + HandleToJson(jdata["pAttachments"], &meta_struct.pAttachments, options); + FieldToJson(jdata["width"], decoded_value.width, options); + FieldToJson(jdata["height"], decoded_value.height, options); + FieldToJson(jdata["layers"], decoded_value.layers, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkViewport* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassDescription* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkViewport& decoded_value = *data->decoded_value; - const Decoded_VkViewport& meta_struct = *data; + const VkSubpassDescription& decoded_value = *data->decoded_value; + const Decoded_VkSubpassDescription& meta_struct = *data; - FieldToJson(jdata["x"], decoded_value.x, options); - FieldToJson(jdata["y"], decoded_value.y, options); - FieldToJson(jdata["width"], decoded_value.width, options); - FieldToJson(jdata["height"], decoded_value.height, options); - FieldToJson(jdata["minDepth"], decoded_value.minDepth, options); - FieldToJson(jdata["maxDepth"], decoded_value.maxDepth, options); + FieldToJson(VkSubpassDescriptionFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["pipelineBindPoint"], decoded_value.pipelineBindPoint, options); + FieldToJson(jdata["inputAttachmentCount"], decoded_value.inputAttachmentCount, options); + FieldToJson(jdata["pInputAttachments"], meta_struct.pInputAttachments, options); + FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); + FieldToJson(jdata["pColorAttachments"], meta_struct.pColorAttachments, options); + FieldToJson(jdata["pResolveAttachments"], meta_struct.pResolveAttachments, options); + FieldToJson(jdata["pDepthStencilAttachment"], meta_struct.pDepthStencilAttachment, options); + FieldToJson(jdata["preserveAttachmentCount"], decoded_value.preserveAttachmentCount, options); + FieldToJson(jdata["pPreserveAttachments"], meta_struct.pPreserveAttachments, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportStateCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassDependency* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineViewportStateCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineViewportStateCreateInfo& meta_struct = *data; + const VkSubpassDependency& decoded_value = *data->decoded_value; + const Decoded_VkSubpassDependency& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineViewportStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["viewportCount"], decoded_value.viewportCount, options); - FieldToJson(jdata["pViewports"], meta_struct.pViewports, options); - FieldToJson(jdata["scissorCount"], decoded_value.scissorCount, options); - FieldToJson(jdata["pScissors"], meta_struct.pScissors, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["srcSubpass"], decoded_value.srcSubpass, options); + FieldToJson(jdata["dstSubpass"], decoded_value.dstSubpass, options); + FieldToJson(VkPipelineStageFlags_t(),jdata["srcStageMask"], decoded_value.srcStageMask, options); + FieldToJson(VkPipelineStageFlags_t(),jdata["dstStageMask"], decoded_value.dstStageMask, options); + FieldToJson(VkAccessFlags_t(),jdata["srcAccessMask"], decoded_value.srcAccessMask, options); + FieldToJson(VkAccessFlags_t(),jdata["dstAccessMask"], decoded_value.dstAccessMask, options); + FieldToJson(VkDependencyFlags_t(),jdata["dependencyFlags"], decoded_value.dependencyFlags, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationStateCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineRasterizationStateCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineRasterizationStateCreateInfo& meta_struct = *data; + const VkRenderPassCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineRasterizationStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - jdata["depthClampEnable"] = static_cast(decoded_value.depthClampEnable); - jdata["rasterizerDiscardEnable"] = static_cast(decoded_value.rasterizerDiscardEnable); - FieldToJson(jdata["polygonMode"], decoded_value.polygonMode, options); - FieldToJson(VkCullModeFlags_t(),jdata["cullMode"], decoded_value.cullMode, options); - FieldToJson(jdata["frontFace"], decoded_value.frontFace, options); - jdata["depthBiasEnable"] = static_cast(decoded_value.depthBiasEnable); - FieldToJson(jdata["depthBiasConstantFactor"], decoded_value.depthBiasConstantFactor, options); - FieldToJson(jdata["depthBiasClamp"], decoded_value.depthBiasClamp, options); - FieldToJson(jdata["depthBiasSlopeFactor"], decoded_value.depthBiasSlopeFactor, options); - FieldToJson(jdata["lineWidth"], decoded_value.lineWidth, options); + FieldToJson(VkRenderPassCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["attachmentCount"], decoded_value.attachmentCount, options); + FieldToJson(jdata["pAttachments"], meta_struct.pAttachments, options); + FieldToJson(jdata["subpassCount"], decoded_value.subpassCount, options); + FieldToJson(jdata["pSubpasses"], meta_struct.pSubpasses, options); + FieldToJson(jdata["dependencyCount"], decoded_value.dependencyCount, options); + FieldToJson(jdata["pDependencies"], meta_struct.pDependencies, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineMultisampleStateCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkClearDepthStencilValue* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineMultisampleStateCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineMultisampleStateCreateInfo& meta_struct = *data; + const VkClearDepthStencilValue& decoded_value = *data->decoded_value; + const Decoded_VkClearDepthStencilValue& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineMultisampleStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["rasterizationSamples"], decoded_value.rasterizationSamples, options); - jdata["sampleShadingEnable"] = static_cast(decoded_value.sampleShadingEnable); - FieldToJson(jdata["minSampleShading"], decoded_value.minSampleShading, options); - FieldToJson(jdata["pSampleMask"], meta_struct.pSampleMask, options); - jdata["alphaToCoverageEnable"] = static_cast(decoded_value.alphaToCoverageEnable); - jdata["alphaToOneEnable"] = static_cast(decoded_value.alphaToOneEnable); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["depth"], decoded_value.depth, options); + FieldToJson(jdata["stencil"], decoded_value.stencil, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkStencilOpState* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkClearAttachment* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkStencilOpState& decoded_value = *data->decoded_value; - const Decoded_VkStencilOpState& meta_struct = *data; + const VkClearAttachment& decoded_value = *data->decoded_value; + const Decoded_VkClearAttachment& meta_struct = *data; - FieldToJson(jdata["failOp"], decoded_value.failOp, options); - FieldToJson(jdata["passOp"], decoded_value.passOp, options); - FieldToJson(jdata["depthFailOp"], decoded_value.depthFailOp, options); - FieldToJson(jdata["compareOp"], decoded_value.compareOp, options); - FieldToJson(jdata["compareMask"], decoded_value.compareMask, options); - FieldToJson(jdata["writeMask"], decoded_value.writeMask, options); - FieldToJson(jdata["reference"], decoded_value.reference, options); + FieldToJson(VkImageAspectFlags_t(),jdata["aspectMask"], decoded_value.aspectMask, options); + FieldToJson(jdata["colorAttachment"], decoded_value.colorAttachment, options); + FieldToJson(jdata["clearValue"], meta_struct.clearValue, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineDepthStencilStateCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkClearRect* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineDepthStencilStateCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineDepthStencilStateCreateInfo& meta_struct = *data; + const VkClearRect& decoded_value = *data->decoded_value; + const Decoded_VkClearRect& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineDepthStencilStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - jdata["depthTestEnable"] = static_cast(decoded_value.depthTestEnable); - jdata["depthWriteEnable"] = static_cast(decoded_value.depthWriteEnable); - FieldToJson(jdata["depthCompareOp"], decoded_value.depthCompareOp, options); - jdata["depthBoundsTestEnable"] = static_cast(decoded_value.depthBoundsTestEnable); - jdata["stencilTestEnable"] = static_cast(decoded_value.stencilTestEnable); - FieldToJson(jdata["front"], meta_struct.front, options); - FieldToJson(jdata["back"], meta_struct.back, options); - FieldToJson(jdata["minDepthBounds"], decoded_value.minDepthBounds, options); - FieldToJson(jdata["maxDepthBounds"], decoded_value.maxDepthBounds, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["rect"], meta_struct.rect, options); + FieldToJson(jdata["baseArrayLayer"], decoded_value.baseArrayLayer, options); + FieldToJson(jdata["layerCount"], decoded_value.layerCount, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineColorBlendAttachmentState* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageBlit* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineColorBlendAttachmentState& decoded_value = *data->decoded_value; - const Decoded_VkPipelineColorBlendAttachmentState& meta_struct = *data; + const VkImageBlit& decoded_value = *data->decoded_value; + const Decoded_VkImageBlit& meta_struct = *data; - jdata["blendEnable"] = static_cast(decoded_value.blendEnable); - FieldToJson(jdata["srcColorBlendFactor"], decoded_value.srcColorBlendFactor, options); - FieldToJson(jdata["dstColorBlendFactor"], decoded_value.dstColorBlendFactor, options); - FieldToJson(jdata["colorBlendOp"], decoded_value.colorBlendOp, options); - FieldToJson(jdata["srcAlphaBlendFactor"], decoded_value.srcAlphaBlendFactor, options); - FieldToJson(jdata["dstAlphaBlendFactor"], decoded_value.dstAlphaBlendFactor, options); - FieldToJson(jdata["alphaBlendOp"], decoded_value.alphaBlendOp, options); - FieldToJson(VkColorComponentFlags_t(),jdata["colorWriteMask"], decoded_value.colorWriteMask, options); + FieldToJson(jdata["srcSubresource"], meta_struct.srcSubresource, options); + FieldToJson(jdata["srcOffsets"], meta_struct.srcOffsets, options); + FieldToJson(jdata["dstSubresource"], meta_struct.dstSubresource, options); + FieldToJson(jdata["dstOffsets"], meta_struct.dstOffsets, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineColorBlendStateCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageResolve* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineColorBlendStateCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineColorBlendStateCreateInfo& meta_struct = *data; + const VkImageResolve& decoded_value = *data->decoded_value; + const Decoded_VkImageResolve& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineColorBlendStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - jdata["logicOpEnable"] = static_cast(decoded_value.logicOpEnable); - FieldToJson(jdata["logicOp"], decoded_value.logicOp, options); - FieldToJson(jdata["attachmentCount"], decoded_value.attachmentCount, options); - FieldToJson(jdata["pAttachments"], meta_struct.pAttachments, options); - FieldToJson(jdata["blendConstants"], &meta_struct.blendConstants, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["srcSubresource"], meta_struct.srcSubresource, options); + FieldToJson(jdata["srcOffset"], meta_struct.srcOffset, options); + FieldToJson(jdata["dstSubresource"], meta_struct.dstSubresource, options); + FieldToJson(jdata["dstOffset"], meta_struct.dstOffset, options); + FieldToJson(jdata["extent"], meta_struct.extent, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineDynamicStateCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassBeginInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineDynamicStateCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineDynamicStateCreateInfo& meta_struct = *data; + const VkRenderPassBeginInfo& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassBeginInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineDynamicStateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["dynamicStateCount"], decoded_value.dynamicStateCount, options); - FieldToJson(jdata["pDynamicStates"], meta_struct.pDynamicStates, options); + HandleToJson(jdata["renderPass"], meta_struct.renderPass, options); + HandleToJson(jdata["framebuffer"], meta_struct.framebuffer, options); + FieldToJson(jdata["renderArea"], meta_struct.renderArea, options); + FieldToJson(jdata["clearValueCount"], decoded_value.clearValueCount, options); + FieldToJson(jdata["pClearValues"], meta_struct.pClearValues, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGraphicsPipelineCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindBufferMemoryInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkGraphicsPipelineCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkGraphicsPipelineCreateInfo& meta_struct = *data; + const VkBindBufferMemoryInfo& decoded_value = *data->decoded_value; + const Decoded_VkBindBufferMemoryInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["stageCount"], decoded_value.stageCount, options); - FieldToJson(jdata["pStages"], meta_struct.pStages, options); - FieldToJson(jdata["pVertexInputState"], meta_struct.pVertexInputState, options); - FieldToJson(jdata["pInputAssemblyState"], meta_struct.pInputAssemblyState, options); - FieldToJson(jdata["pTessellationState"], meta_struct.pTessellationState, options); - FieldToJson(jdata["pViewportState"], meta_struct.pViewportState, options); - FieldToJson(jdata["pRasterizationState"], meta_struct.pRasterizationState, options); - FieldToJson(jdata["pMultisampleState"], meta_struct.pMultisampleState, options); - FieldToJson(jdata["pDepthStencilState"], meta_struct.pDepthStencilState, options); - FieldToJson(jdata["pColorBlendState"], meta_struct.pColorBlendState, options); - FieldToJson(jdata["pDynamicState"], meta_struct.pDynamicState, options); - HandleToJson(jdata["layout"], meta_struct.layout, options); - HandleToJson(jdata["renderPass"], meta_struct.renderPass, options); - FieldToJson(jdata["subpass"], decoded_value.subpass, options); - HandleToJson(jdata["basePipelineHandle"], meta_struct.basePipelineHandle, options); - FieldToJson(jdata["basePipelineIndex"], decoded_value.basePipelineIndex, options); + HandleToJson(jdata["buffer"], meta_struct.buffer, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["memoryOffset"], decoded_value.memoryOffset, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPushConstantRange* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindImageMemoryInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPushConstantRange& decoded_value = *data->decoded_value; - const Decoded_VkPushConstantRange& meta_struct = *data; + const VkBindImageMemoryInfo& decoded_value = *data->decoded_value; + const Decoded_VkBindImageMemoryInfo& meta_struct = *data; - FieldToJson(VkShaderStageFlags_t(),jdata["stageFlags"], decoded_value.stageFlags, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); - FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["image"], meta_struct.image, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["memoryOffset"], decoded_value.memoryOffset, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineLayoutCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryDedicatedRequirements* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineLayoutCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineLayoutCreateInfo& meta_struct = *data; + const VkMemoryDedicatedRequirements& decoded_value = *data->decoded_value; + const Decoded_VkMemoryDedicatedRequirements& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineLayoutCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["setLayoutCount"], decoded_value.setLayoutCount, options); - HandleToJson(jdata["pSetLayouts"], &meta_struct.pSetLayouts, options); - FieldToJson(jdata["pushConstantRangeCount"], decoded_value.pushConstantRangeCount, options); - FieldToJson(jdata["pPushConstantRanges"], meta_struct.pPushConstantRanges, options); + jdata["prefersDedicatedAllocation"] = static_cast(decoded_value.prefersDedicatedAllocation); + jdata["requiresDedicatedAllocation"] = static_cast(decoded_value.requiresDedicatedAllocation); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryDedicatedAllocateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSamplerCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkSamplerCreateInfo& meta_struct = *data; + const VkMemoryDedicatedAllocateInfo& decoded_value = *data->decoded_value; + const Decoded_VkMemoryDedicatedAllocateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkSamplerCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["magFilter"], decoded_value.magFilter, options); - FieldToJson(jdata["minFilter"], decoded_value.minFilter, options); - FieldToJson(jdata["mipmapMode"], decoded_value.mipmapMode, options); - FieldToJson(jdata["addressModeU"], decoded_value.addressModeU, options); - FieldToJson(jdata["addressModeV"], decoded_value.addressModeV, options); - FieldToJson(jdata["addressModeW"], decoded_value.addressModeW, options); - FieldToJson(jdata["mipLodBias"], decoded_value.mipLodBias, options); - jdata["anisotropyEnable"] = static_cast(decoded_value.anisotropyEnable); - FieldToJson(jdata["maxAnisotropy"], decoded_value.maxAnisotropy, options); - jdata["compareEnable"] = static_cast(decoded_value.compareEnable); - FieldToJson(jdata["compareOp"], decoded_value.compareOp, options); - FieldToJson(jdata["minLod"], decoded_value.minLod, options); - FieldToJson(jdata["maxLod"], decoded_value.maxLod, options); - FieldToJson(jdata["borderColor"], decoded_value.borderColor, options); - jdata["unnormalizedCoordinates"] = static_cast(decoded_value.unnormalizedCoordinates); + HandleToJson(jdata["image"], meta_struct.image, options); + HandleToJson(jdata["buffer"], meta_struct.buffer, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyDescriptorSet* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryAllocateFlagsInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCopyDescriptorSet& decoded_value = *data->decoded_value; - const Decoded_VkCopyDescriptorSet& meta_struct = *data; + const VkMemoryAllocateFlagsInfo& decoded_value = *data->decoded_value; + const Decoded_VkMemoryAllocateFlagsInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["srcSet"], meta_struct.srcSet, options); - FieldToJson(jdata["srcBinding"], decoded_value.srcBinding, options); - FieldToJson(jdata["srcArrayElement"], decoded_value.srcArrayElement, options); - HandleToJson(jdata["dstSet"], meta_struct.dstSet, options); - FieldToJson(jdata["dstBinding"], decoded_value.dstBinding, options); - FieldToJson(jdata["dstArrayElement"], decoded_value.dstArrayElement, options); - FieldToJson(jdata["descriptorCount"], decoded_value.descriptorCount, options); + FieldToJson(VkMemoryAllocateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["deviceMask"], decoded_value.deviceMask, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorBufferInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupCommandBufferBeginInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorBufferInfo& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorBufferInfo& meta_struct = *data; + const VkDeviceGroupCommandBufferBeginInfo& decoded_value = *data->decoded_value; + const Decoded_VkDeviceGroupCommandBufferBeginInfo& meta_struct = *data; - HandleToJson(jdata["buffer"], meta_struct.buffer, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); - FieldToJson(jdata["range"], decoded_value.range, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["deviceMask"], decoded_value.deviceMask, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorPoolSize* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupSubmitInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorPoolSize& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorPoolSize& meta_struct = *data; + const VkDeviceGroupSubmitInfo& decoded_value = *data->decoded_value; + const Decoded_VkDeviceGroupSubmitInfo& meta_struct = *data; - FieldToJson(jdata["type"], decoded_value.type, options); - FieldToJson(jdata["descriptorCount"], decoded_value.descriptorCount, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["waitSemaphoreCount"], decoded_value.waitSemaphoreCount, options); + FieldToJson(jdata["pWaitSemaphoreDeviceIndices"], meta_struct.pWaitSemaphoreDeviceIndices, options); + FieldToJson(jdata["commandBufferCount"], decoded_value.commandBufferCount, options); + FieldToJson(jdata["pCommandBufferDeviceMasks"], meta_struct.pCommandBufferDeviceMasks, options); + FieldToJson(jdata["signalSemaphoreCount"], decoded_value.signalSemaphoreCount, options); + FieldToJson(jdata["pSignalSemaphoreDeviceIndices"], meta_struct.pSignalSemaphoreDeviceIndices, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorPoolCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupBindSparseInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorPoolCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorPoolCreateInfo& meta_struct = *data; + const VkDeviceGroupBindSparseInfo& decoded_value = *data->decoded_value; + const Decoded_VkDeviceGroupBindSparseInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDescriptorPoolCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["maxSets"], decoded_value.maxSets, options); - FieldToJson(jdata["poolSizeCount"], decoded_value.poolSizeCount, options); - FieldToJson(jdata["pPoolSizes"], meta_struct.pPoolSizes, options); + FieldToJson(jdata["resourceDeviceIndex"], decoded_value.resourceDeviceIndex, options); + FieldToJson(jdata["memoryDeviceIndex"], decoded_value.memoryDeviceIndex, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetAllocateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindBufferMemoryDeviceGroupInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorSetAllocateInfo& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorSetAllocateInfo& meta_struct = *data; + const VkBindBufferMemoryDeviceGroupInfo& decoded_value = *data->decoded_value; + const Decoded_VkBindBufferMemoryDeviceGroupInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["descriptorPool"], meta_struct.descriptorPool, options); - FieldToJson(jdata["descriptorSetCount"], decoded_value.descriptorSetCount, options); - HandleToJson(jdata["pSetLayouts"], &meta_struct.pSetLayouts, options); + FieldToJson(jdata["deviceIndexCount"], decoded_value.deviceIndexCount, options); + FieldToJson(jdata["pDeviceIndices"], meta_struct.pDeviceIndices, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutBinding* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindImageMemoryDeviceGroupInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorSetLayoutBinding& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorSetLayoutBinding& meta_struct = *data; + const VkBindImageMemoryDeviceGroupInfo& decoded_value = *data->decoded_value; + const Decoded_VkBindImageMemoryDeviceGroupInfo& meta_struct = *data; - FieldToJson(jdata["binding"], decoded_value.binding, options); - FieldToJson(jdata["descriptorType"], decoded_value.descriptorType, options); - FieldToJson(jdata["descriptorCount"], decoded_value.descriptorCount, options); - FieldToJson(VkShaderStageFlags_t(),jdata["stageFlags"], decoded_value.stageFlags, options); - HandleToJson(jdata["pImmutableSamplers"], &meta_struct.pImmutableSamplers, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["deviceIndexCount"], decoded_value.deviceIndexCount, options); + FieldToJson(jdata["pDeviceIndices"], meta_struct.pDeviceIndices, options); + FieldToJson(jdata["splitInstanceBindRegionCount"], decoded_value.splitInstanceBindRegionCount, options); + FieldToJson(jdata["pSplitInstanceBindRegions"], meta_struct.pSplitInstanceBindRegions, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceGroupProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorSetLayoutCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorSetLayoutCreateInfo& meta_struct = *data; + const VkPhysicalDeviceGroupProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceGroupProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDescriptorSetLayoutCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["bindingCount"], decoded_value.bindingCount, options); - FieldToJson(jdata["pBindings"], meta_struct.pBindings, options); + FieldToJson(jdata["physicalDeviceCount"], decoded_value.physicalDeviceCount, options); + HandleToJson(jdata["physicalDevices"], &meta_struct.physicalDevices, options); + jdata["subsetAllocation"] = static_cast(decoded_value.subsetAllocation); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentDescription* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupDeviceCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAttachmentDescription& decoded_value = *data->decoded_value; - const Decoded_VkAttachmentDescription& meta_struct = *data; + const VkDeviceGroupDeviceCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkDeviceGroupDeviceCreateInfo& meta_struct = *data; - FieldToJson(VkAttachmentDescriptionFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["format"], decoded_value.format, options); - FieldToJson(jdata["samples"], decoded_value.samples, options); - FieldToJson(jdata["loadOp"], decoded_value.loadOp, options); - FieldToJson(jdata["storeOp"], decoded_value.storeOp, options); - FieldToJson(jdata["stencilLoadOp"], decoded_value.stencilLoadOp, options); - FieldToJson(jdata["stencilStoreOp"], decoded_value.stencilStoreOp, options); - FieldToJson(jdata["initialLayout"], decoded_value.initialLayout, options); - FieldToJson(jdata["finalLayout"], decoded_value.finalLayout, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["physicalDeviceCount"], decoded_value.physicalDeviceCount, options); + HandleToJson(jdata["pPhysicalDevices"], &meta_struct.pPhysicalDevices, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentReference* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferMemoryRequirementsInfo2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAttachmentReference& decoded_value = *data->decoded_value; - const Decoded_VkAttachmentReference& meta_struct = *data; + const VkBufferMemoryRequirementsInfo2& decoded_value = *data->decoded_value; + const Decoded_VkBufferMemoryRequirementsInfo2& meta_struct = *data; - FieldToJson(jdata["attachment"], decoded_value.attachment, options); - FieldToJson(jdata["layout"], decoded_value.layout, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["buffer"], meta_struct.buffer, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFramebufferCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageMemoryRequirementsInfo2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkFramebufferCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkFramebufferCreateInfo& meta_struct = *data; + const VkImageMemoryRequirementsInfo2& decoded_value = *data->decoded_value; + const Decoded_VkImageMemoryRequirementsInfo2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkFramebufferCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - HandleToJson(jdata["renderPass"], meta_struct.renderPass, options); - FieldToJson(jdata["attachmentCount"], decoded_value.attachmentCount, options); - HandleToJson(jdata["pAttachments"], &meta_struct.pAttachments, options); - FieldToJson(jdata["width"], decoded_value.width, options); - FieldToJson(jdata["height"], decoded_value.height, options); - FieldToJson(jdata["layers"], decoded_value.layers, options); + HandleToJson(jdata["image"], meta_struct.image, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassDescription* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSparseMemoryRequirementsInfo2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSubpassDescription& decoded_value = *data->decoded_value; - const Decoded_VkSubpassDescription& meta_struct = *data; + const VkImageSparseMemoryRequirementsInfo2& decoded_value = *data->decoded_value; + const Decoded_VkImageSparseMemoryRequirementsInfo2& meta_struct = *data; - FieldToJson(VkSubpassDescriptionFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["pipelineBindPoint"], decoded_value.pipelineBindPoint, options); - FieldToJson(jdata["inputAttachmentCount"], decoded_value.inputAttachmentCount, options); - FieldToJson(jdata["pInputAttachments"], meta_struct.pInputAttachments, options); - FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); - FieldToJson(jdata["pColorAttachments"], meta_struct.pColorAttachments, options); - FieldToJson(jdata["pResolveAttachments"], meta_struct.pResolveAttachments, options); - FieldToJson(jdata["pDepthStencilAttachment"], meta_struct.pDepthStencilAttachment, options); - FieldToJson(jdata["preserveAttachmentCount"], decoded_value.preserveAttachmentCount, options); - FieldToJson(jdata["pPreserveAttachments"], meta_struct.pPreserveAttachments, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["image"], meta_struct.image, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassDependency* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryRequirements2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSubpassDependency& decoded_value = *data->decoded_value; - const Decoded_VkSubpassDependency& meta_struct = *data; + const VkMemoryRequirements2& decoded_value = *data->decoded_value; + const Decoded_VkMemoryRequirements2& meta_struct = *data; - FieldToJson(jdata["srcSubpass"], decoded_value.srcSubpass, options); - FieldToJson(jdata["dstSubpass"], decoded_value.dstSubpass, options); - FieldToJson(VkPipelineStageFlags_t(),jdata["srcStageMask"], decoded_value.srcStageMask, options); - FieldToJson(VkPipelineStageFlags_t(),jdata["dstStageMask"], decoded_value.dstStageMask, options); - FieldToJson(VkAccessFlags_t(),jdata["srcAccessMask"], decoded_value.srcAccessMask, options); - FieldToJson(VkAccessFlags_t(),jdata["dstAccessMask"], decoded_value.dstAccessMask, options); - FieldToJson(VkDependencyFlags_t(),jdata["dependencyFlags"], decoded_value.dependencyFlags, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["memoryRequirements"], meta_struct.memoryRequirements, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageMemoryRequirements2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassCreateInfo& meta_struct = *data; + const VkSparseImageMemoryRequirements2& decoded_value = *data->decoded_value; + const Decoded_VkSparseImageMemoryRequirements2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkRenderPassCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["attachmentCount"], decoded_value.attachmentCount, options); - FieldToJson(jdata["pAttachments"], meta_struct.pAttachments, options); - FieldToJson(jdata["subpassCount"], decoded_value.subpassCount, options); - FieldToJson(jdata["pSubpasses"], meta_struct.pSubpasses, options); - FieldToJson(jdata["dependencyCount"], decoded_value.dependencyCount, options); - FieldToJson(jdata["pDependencies"], meta_struct.pDependencies, options); + FieldToJson(jdata["memoryRequirements"], meta_struct.memoryRequirements, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandPoolCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFeatures2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCommandPoolCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkCommandPoolCreateInfo& meta_struct = *data; + const VkPhysicalDeviceFeatures2& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFeatures2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkCommandPoolCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["queueFamilyIndex"], decoded_value.queueFamilyIndex, options); + FieldToJson(jdata["features"], meta_struct.features, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferAllocateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceProperties2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCommandBufferAllocateInfo& decoded_value = *data->decoded_value; - const Decoded_VkCommandBufferAllocateInfo& meta_struct = *data; + const VkPhysicalDeviceProperties2& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceProperties2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["commandPool"], meta_struct.commandPool, options); - FieldToJson(jdata["level"], decoded_value.level, options); - FieldToJson(jdata["commandBufferCount"], decoded_value.commandBufferCount, options); + FieldToJson(jdata["properties"], meta_struct.properties, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferInheritanceInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFormatProperties2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCommandBufferInheritanceInfo& decoded_value = *data->decoded_value; - const Decoded_VkCommandBufferInheritanceInfo& meta_struct = *data; + const VkFormatProperties2& decoded_value = *data->decoded_value; + const Decoded_VkFormatProperties2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["renderPass"], meta_struct.renderPass, options); - FieldToJson(jdata["subpass"], decoded_value.subpass, options); - HandleToJson(jdata["framebuffer"], meta_struct.framebuffer, options); - jdata["occlusionQueryEnable"] = static_cast(decoded_value.occlusionQueryEnable); - FieldToJson(VkQueryControlFlags_t(),jdata["queryFlags"], decoded_value.queryFlags, options); - FieldToJson(VkQueryPipelineStatisticFlags_t(),jdata["pipelineStatistics"], decoded_value.pipelineStatistics, options); + FieldToJson(jdata["formatProperties"], meta_struct.formatProperties, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferBeginInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageFormatProperties2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCommandBufferBeginInfo& decoded_value = *data->decoded_value; - const Decoded_VkCommandBufferBeginInfo& meta_struct = *data; + const VkImageFormatProperties2& decoded_value = *data->decoded_value; + const Decoded_VkImageFormatProperties2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkCommandBufferUsageFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["pInheritanceInfo"], meta_struct.pInheritanceInfo, options); + FieldToJson(jdata["imageFormatProperties"], meta_struct.imageFormatProperties, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferCopy* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageFormatInfo2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBufferCopy& decoded_value = *data->decoded_value; - const Decoded_VkBufferCopy& meta_struct = *data; + const VkPhysicalDeviceImageFormatInfo2& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceImageFormatInfo2& meta_struct = *data; - FieldToJson(jdata["srcOffset"], decoded_value.srcOffset, options); - FieldToJson(jdata["dstOffset"], decoded_value.dstOffset, options); - FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["format"], decoded_value.format, options); + FieldToJson(jdata["type"], decoded_value.type, options); + FieldToJson(jdata["tiling"], decoded_value.tiling, options); + FieldToJson(VkImageUsageFlags_t(),jdata["usage"], decoded_value.usage, options); + FieldToJson(VkImageCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSubresourceLayers* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyProperties2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageSubresourceLayers& decoded_value = *data->decoded_value; - const Decoded_VkImageSubresourceLayers& meta_struct = *data; + const VkQueueFamilyProperties2& decoded_value = *data->decoded_value; + const Decoded_VkQueueFamilyProperties2& meta_struct = *data; - FieldToJson(VkImageAspectFlags_t(),jdata["aspectMask"], decoded_value.aspectMask, options); - FieldToJson(jdata["mipLevel"], decoded_value.mipLevel, options); - FieldToJson(jdata["baseArrayLayer"], decoded_value.baseArrayLayer, options); - FieldToJson(jdata["layerCount"], decoded_value.layerCount, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["queueFamilyProperties"], meta_struct.queueFamilyProperties, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferImageCopy* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMemoryProperties2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBufferImageCopy& decoded_value = *data->decoded_value; - const Decoded_VkBufferImageCopy& meta_struct = *data; + const VkPhysicalDeviceMemoryProperties2& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMemoryProperties2& meta_struct = *data; - FieldToJson(jdata["bufferOffset"], decoded_value.bufferOffset, options); - FieldToJson(jdata["bufferRowLength"], decoded_value.bufferRowLength, options); - FieldToJson(jdata["bufferImageHeight"], decoded_value.bufferImageHeight, options); - FieldToJson(jdata["imageSubresource"], meta_struct.imageSubresource, options); - FieldToJson(jdata["imageOffset"], meta_struct.imageOffset, options); - FieldToJson(jdata["imageExtent"], meta_struct.imageExtent, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["memoryProperties"], meta_struct.memoryProperties, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkClearDepthStencilValue* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageFormatProperties2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkClearDepthStencilValue& decoded_value = *data->decoded_value; - const Decoded_VkClearDepthStencilValue& meta_struct = *data; + const VkSparseImageFormatProperties2& decoded_value = *data->decoded_value; + const Decoded_VkSparseImageFormatProperties2& meta_struct = *data; - FieldToJson(jdata["depth"], decoded_value.depth, options); - FieldToJson(jdata["stencil"], decoded_value.stencil, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["properties"], meta_struct.properties, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkClearAttachment* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSparseImageFormatInfo2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkClearAttachment& decoded_value = *data->decoded_value; - const Decoded_VkClearAttachment& meta_struct = *data; + const VkPhysicalDeviceSparseImageFormatInfo2& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSparseImageFormatInfo2& meta_struct = *data; - FieldToJson(VkImageAspectFlags_t(),jdata["aspectMask"], decoded_value.aspectMask, options); - FieldToJson(jdata["colorAttachment"], decoded_value.colorAttachment, options); - FieldToJson(jdata["clearValue"], meta_struct.clearValue, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["format"], decoded_value.format, options); + FieldToJson(jdata["type"], decoded_value.type, options); + FieldToJson(jdata["samples"], decoded_value.samples, options); + FieldToJson(VkImageUsageFlags_t(),jdata["usage"], decoded_value.usage, options); + FieldToJson(jdata["tiling"], decoded_value.tiling, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkClearRect* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewUsageCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkClearRect& decoded_value = *data->decoded_value; - const Decoded_VkClearRect& meta_struct = *data; + const VkImageViewUsageCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkImageViewUsageCreateInfo& meta_struct = *data; - FieldToJson(jdata["rect"], meta_struct.rect, options); - FieldToJson(jdata["baseArrayLayer"], decoded_value.baseArrayLayer, options); - FieldToJson(jdata["layerCount"], decoded_value.layerCount, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkImageUsageFlags_t(),jdata["usage"], decoded_value.usage, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageBlit* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceProtectedMemoryFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageBlit& decoded_value = *data->decoded_value; - const Decoded_VkImageBlit& meta_struct = *data; + const VkPhysicalDeviceProtectedMemoryFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceProtectedMemoryFeatures& meta_struct = *data; - FieldToJson(jdata["srcSubresource"], meta_struct.srcSubresource, options); - FieldToJson(jdata["srcOffsets"], meta_struct.srcOffsets, options); - FieldToJson(jdata["dstSubresource"], meta_struct.dstSubresource, options); - FieldToJson(jdata["dstOffsets"], meta_struct.dstOffsets, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["protectedMemory"] = static_cast(decoded_value.protectedMemory); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCopy* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceProtectedMemoryProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageCopy& decoded_value = *data->decoded_value; - const Decoded_VkImageCopy& meta_struct = *data; + const VkPhysicalDeviceProtectedMemoryProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceProtectedMemoryProperties& meta_struct = *data; - FieldToJson(jdata["srcSubresource"], meta_struct.srcSubresource, options); - FieldToJson(jdata["srcOffset"], meta_struct.srcOffset, options); - FieldToJson(jdata["dstSubresource"], meta_struct.dstSubresource, options); - FieldToJson(jdata["dstOffset"], meta_struct.dstOffset, options); - FieldToJson(jdata["extent"], meta_struct.extent, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["protectedNoFault"] = static_cast(decoded_value.protectedNoFault); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageResolve* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceQueueInfo2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageResolve& decoded_value = *data->decoded_value; - const Decoded_VkImageResolve& meta_struct = *data; + const VkDeviceQueueInfo2& decoded_value = *data->decoded_value; + const Decoded_VkDeviceQueueInfo2& meta_struct = *data; - FieldToJson(jdata["srcSubresource"], meta_struct.srcSubresource, options); - FieldToJson(jdata["srcOffset"], meta_struct.srcOffset, options); - FieldToJson(jdata["dstSubresource"], meta_struct.dstSubresource, options); - FieldToJson(jdata["dstOffset"], meta_struct.dstOffset, options); - FieldToJson(jdata["extent"], meta_struct.extent, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkDeviceQueueCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["queueFamilyIndex"], decoded_value.queueFamilyIndex, options); + FieldToJson(jdata["queueIndex"], decoded_value.queueIndex, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassBeginInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkProtectedSubmitInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassBeginInfo& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassBeginInfo& meta_struct = *data; + const VkProtectedSubmitInfo& decoded_value = *data->decoded_value; + const Decoded_VkProtectedSubmitInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["renderPass"], meta_struct.renderPass, options); - HandleToJson(jdata["framebuffer"], meta_struct.framebuffer, options); - FieldToJson(jdata["renderArea"], meta_struct.renderArea, options); - FieldToJson(jdata["clearValueCount"], decoded_value.clearValueCount, options); - FieldToJson(jdata["pClearValues"], meta_struct.pClearValues, options); + jdata["protectedSubmit"] = static_cast(decoded_value.protectedSubmit); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSubgroupProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindImagePlaneMemoryInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSubgroupProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSubgroupProperties& meta_struct = *data; + const VkBindImagePlaneMemoryInfo& decoded_value = *data->decoded_value; + const Decoded_VkBindImagePlaneMemoryInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["subgroupSize"], decoded_value.subgroupSize, options); - FieldToJson(VkShaderStageFlags_t(),jdata["supportedStages"], decoded_value.supportedStages, options); - FieldToJson(VkSubgroupFeatureFlags_t(),jdata["supportedOperations"], decoded_value.supportedOperations, options); - jdata["quadOperationsInAllStages"] = static_cast(decoded_value.quadOperationsInAllStages); + FieldToJson(jdata["planeAspect"], decoded_value.planeAspect, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindBufferMemoryInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImagePlaneMemoryRequirementsInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindBufferMemoryInfo& decoded_value = *data->decoded_value; - const Decoded_VkBindBufferMemoryInfo& meta_struct = *data; + const VkImagePlaneMemoryRequirementsInfo& decoded_value = *data->decoded_value; + const Decoded_VkImagePlaneMemoryRequirementsInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["buffer"], meta_struct.buffer, options); - HandleToJson(jdata["memory"], meta_struct.memory, options); - FieldToJson(jdata["memoryOffset"], decoded_value.memoryOffset, options); + FieldToJson(jdata["planeAspect"], decoded_value.planeAspect, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindImageMemoryInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalMemoryProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindImageMemoryInfo& decoded_value = *data->decoded_value; - const Decoded_VkBindImageMemoryInfo& meta_struct = *data; + const VkExternalMemoryProperties& decoded_value = *data->decoded_value; + const Decoded_VkExternalMemoryProperties& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["image"], meta_struct.image, options); - HandleToJson(jdata["memory"], meta_struct.memory, options); - FieldToJson(jdata["memoryOffset"], decoded_value.memoryOffset, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(VkExternalMemoryFeatureFlags_t(),jdata["externalMemoryFeatures"], decoded_value.externalMemoryFeatures, options); + FieldToJson(VkExternalMemoryHandleTypeFlags_t(),jdata["exportFromImportedHandleTypes"], decoded_value.exportFromImportedHandleTypes, options); + FieldToJson(VkExternalMemoryHandleTypeFlags_t(),jdata["compatibleHandleTypes"], decoded_value.compatibleHandleTypes, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevice16BitStorageFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalImageFormatInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevice16BitStorageFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevice16BitStorageFeatures& meta_struct = *data; + const VkPhysicalDeviceExternalImageFormatInfo& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExternalImageFormatInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["storageBuffer16BitAccess"] = static_cast(decoded_value.storageBuffer16BitAccess); - jdata["uniformAndStorageBuffer16BitAccess"] = static_cast(decoded_value.uniformAndStorageBuffer16BitAccess); - jdata["storagePushConstant16"] = static_cast(decoded_value.storagePushConstant16); - jdata["storageInputOutput16"] = static_cast(decoded_value.storageInputOutput16); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryDedicatedRequirements* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalImageFormatProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryDedicatedRequirements& decoded_value = *data->decoded_value; - const Decoded_VkMemoryDedicatedRequirements& meta_struct = *data; + const VkExternalImageFormatProperties& decoded_value = *data->decoded_value; + const Decoded_VkExternalImageFormatProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["prefersDedicatedAllocation"] = static_cast(decoded_value.prefersDedicatedAllocation); - jdata["requiresDedicatedAllocation"] = static_cast(decoded_value.requiresDedicatedAllocation); + FieldToJson(jdata["externalMemoryProperties"], meta_struct.externalMemoryProperties, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryDedicatedAllocateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalBufferInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryDedicatedAllocateInfo& decoded_value = *data->decoded_value; - const Decoded_VkMemoryDedicatedAllocateInfo& meta_struct = *data; + const VkPhysicalDeviceExternalBufferInfo& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExternalBufferInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["image"], meta_struct.image, options); - HandleToJson(jdata["buffer"], meta_struct.buffer, options); + FieldToJson(VkBufferCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(VkBufferUsageFlags_t(),jdata["usage"], decoded_value.usage, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryAllocateFlagsInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalBufferProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryAllocateFlagsInfo& decoded_value = *data->decoded_value; - const Decoded_VkMemoryAllocateFlagsInfo& meta_struct = *data; + const VkExternalBufferProperties& decoded_value = *data->decoded_value; + const Decoded_VkExternalBufferProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkMemoryAllocateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["deviceMask"], decoded_value.deviceMask, options); + FieldToJson(jdata["externalMemoryProperties"], meta_struct.externalMemoryProperties, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupRenderPassBeginInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceIDProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceGroupRenderPassBeginInfo& decoded_value = *data->decoded_value; - const Decoded_VkDeviceGroupRenderPassBeginInfo& meta_struct = *data; + const VkPhysicalDeviceIDProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceIDProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["deviceMask"], decoded_value.deviceMask, options); - FieldToJson(jdata["deviceRenderAreaCount"], decoded_value.deviceRenderAreaCount, options); - FieldToJson(jdata["pDeviceRenderAreas"], meta_struct.pDeviceRenderAreas, options); + FieldToJson(jdata["deviceUUID"], uuid_to_string(sizeof(decoded_value.deviceUUID), decoded_value.deviceUUID), options); + FieldToJson(jdata["driverUUID"], uuid_to_string(sizeof(decoded_value.driverUUID), decoded_value.driverUUID), options); + FieldToJson(jdata["deviceLUID"], uuid_to_string(sizeof(decoded_value.deviceLUID), decoded_value.deviceLUID), options); + FieldToJson(jdata["deviceNodeMask"], decoded_value.deviceNodeMask, options); + jdata["deviceLUIDValid"] = static_cast(decoded_value.deviceLUIDValid); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupCommandBufferBeginInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalMemoryImageCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceGroupCommandBufferBeginInfo& decoded_value = *data->decoded_value; - const Decoded_VkDeviceGroupCommandBufferBeginInfo& meta_struct = *data; + const VkExternalMemoryImageCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkExternalMemoryImageCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["deviceMask"], decoded_value.deviceMask, options); + FieldToJson(VkExternalMemoryHandleTypeFlags_t(),jdata["handleTypes"], decoded_value.handleTypes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupSubmitInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalMemoryBufferCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceGroupSubmitInfo& decoded_value = *data->decoded_value; - const Decoded_VkDeviceGroupSubmitInfo& meta_struct = *data; + const VkExternalMemoryBufferCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkExternalMemoryBufferCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["waitSemaphoreCount"], decoded_value.waitSemaphoreCount, options); - FieldToJson(jdata["pWaitSemaphoreDeviceIndices"], meta_struct.pWaitSemaphoreDeviceIndices, options); - FieldToJson(jdata["commandBufferCount"], decoded_value.commandBufferCount, options); - FieldToJson(jdata["pCommandBufferDeviceMasks"], meta_struct.pCommandBufferDeviceMasks, options); - FieldToJson(jdata["signalSemaphoreCount"], decoded_value.signalSemaphoreCount, options); - FieldToJson(jdata["pSignalSemaphoreDeviceIndices"], meta_struct.pSignalSemaphoreDeviceIndices, options); + FieldToJson(VkExternalMemoryHandleTypeFlags_t(),jdata["handleTypes"], decoded_value.handleTypes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupBindSparseInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportMemoryAllocateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceGroupBindSparseInfo& decoded_value = *data->decoded_value; - const Decoded_VkDeviceGroupBindSparseInfo& meta_struct = *data; + const VkExportMemoryAllocateInfo& decoded_value = *data->decoded_value; + const Decoded_VkExportMemoryAllocateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["resourceDeviceIndex"], decoded_value.resourceDeviceIndex, options); - FieldToJson(jdata["memoryDeviceIndex"], decoded_value.memoryDeviceIndex, options); + FieldToJson(VkExternalMemoryHandleTypeFlags_t(),jdata["handleTypes"], decoded_value.handleTypes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindBufferMemoryDeviceGroupInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalFenceInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindBufferMemoryDeviceGroupInfo& decoded_value = *data->decoded_value; - const Decoded_VkBindBufferMemoryDeviceGroupInfo& meta_struct = *data; + const VkPhysicalDeviceExternalFenceInfo& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExternalFenceInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["deviceIndexCount"], decoded_value.deviceIndexCount, options); - FieldToJson(jdata["pDeviceIndices"], meta_struct.pDeviceIndices, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindImageMemoryDeviceGroupInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalFenceProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindImageMemoryDeviceGroupInfo& decoded_value = *data->decoded_value; - const Decoded_VkBindImageMemoryDeviceGroupInfo& meta_struct = *data; + const VkExternalFenceProperties& decoded_value = *data->decoded_value; + const Decoded_VkExternalFenceProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["deviceIndexCount"], decoded_value.deviceIndexCount, options); - FieldToJson(jdata["pDeviceIndices"], meta_struct.pDeviceIndices, options); - FieldToJson(jdata["splitInstanceBindRegionCount"], decoded_value.splitInstanceBindRegionCount, options); - FieldToJson(jdata["pSplitInstanceBindRegions"], meta_struct.pSplitInstanceBindRegions, options); + FieldToJson(VkExternalFenceHandleTypeFlags_t(),jdata["exportFromImportedHandleTypes"], decoded_value.exportFromImportedHandleTypes, options); + FieldToJson(VkExternalFenceHandleTypeFlags_t(),jdata["compatibleHandleTypes"], decoded_value.compatibleHandleTypes, options); + FieldToJson(VkExternalFenceFeatureFlags_t(),jdata["externalFenceFeatures"], decoded_value.externalFenceFeatures, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceGroupProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportFenceCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceGroupProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceGroupProperties& meta_struct = *data; + const VkExportFenceCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkExportFenceCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["physicalDeviceCount"], decoded_value.physicalDeviceCount, options); - HandleToJson(jdata["physicalDevices"], &meta_struct.physicalDevices, options); - jdata["subsetAllocation"] = static_cast(decoded_value.subsetAllocation); + FieldToJson(VkExternalFenceHandleTypeFlags_t(),jdata["handleTypes"], decoded_value.handleTypes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupDeviceCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportSemaphoreCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceGroupDeviceCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkDeviceGroupDeviceCreateInfo& meta_struct = *data; + const VkExportSemaphoreCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkExportSemaphoreCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["physicalDeviceCount"], decoded_value.physicalDeviceCount, options); - HandleToJson(jdata["pPhysicalDevices"], &meta_struct.pPhysicalDevices, options); + FieldToJson(VkExternalSemaphoreHandleTypeFlags_t(),jdata["handleTypes"], decoded_value.handleTypes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferMemoryRequirementsInfo2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalSemaphoreInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBufferMemoryRequirementsInfo2& decoded_value = *data->decoded_value; - const Decoded_VkBufferMemoryRequirementsInfo2& meta_struct = *data; + const VkPhysicalDeviceExternalSemaphoreInfo& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExternalSemaphoreInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["buffer"], meta_struct.buffer, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageMemoryRequirementsInfo2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalSemaphoreProperties* data, const JsonOptions& options) { if (data && data->decoded_value) - { - const VkImageMemoryRequirementsInfo2& decoded_value = *data->decoded_value; - const Decoded_VkImageMemoryRequirementsInfo2& meta_struct = *data; + { + const VkExternalSemaphoreProperties& decoded_value = *data->decoded_value; + const Decoded_VkExternalSemaphoreProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["image"], meta_struct.image, options); + FieldToJson(VkExternalSemaphoreHandleTypeFlags_t(),jdata["exportFromImportedHandleTypes"], decoded_value.exportFromImportedHandleTypes, options); + FieldToJson(VkExternalSemaphoreHandleTypeFlags_t(),jdata["compatibleHandleTypes"], decoded_value.compatibleHandleTypes, options); + FieldToJson(VkExternalSemaphoreFeatureFlags_t(),jdata["externalSemaphoreFeatures"], decoded_value.externalSemaphoreFeatures, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSparseMemoryRequirementsInfo2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSubgroupProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageSparseMemoryRequirementsInfo2& decoded_value = *data->decoded_value; - const Decoded_VkImageSparseMemoryRequirementsInfo2& meta_struct = *data; + const VkPhysicalDeviceSubgroupProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSubgroupProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["image"], meta_struct.image, options); + FieldToJson(jdata["subgroupSize"], decoded_value.subgroupSize, options); + FieldToJson(VkShaderStageFlags_t(),jdata["supportedStages"], decoded_value.supportedStages, options); + FieldToJson(VkSubgroupFeatureFlags_t(),jdata["supportedOperations"], decoded_value.supportedOperations, options); + jdata["quadOperationsInAllStages"] = static_cast(decoded_value.quadOperationsInAllStages); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryRequirements2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevice16BitStorageFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryRequirements2& decoded_value = *data->decoded_value; - const Decoded_VkMemoryRequirements2& meta_struct = *data; + const VkPhysicalDevice16BitStorageFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevice16BitStorageFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["memoryRequirements"], meta_struct.memoryRequirements, options); + jdata["storageBuffer16BitAccess"] = static_cast(decoded_value.storageBuffer16BitAccess); + jdata["uniformAndStorageBuffer16BitAccess"] = static_cast(decoded_value.uniformAndStorageBuffer16BitAccess); + jdata["storagePushConstant16"] = static_cast(decoded_value.storagePushConstant16); + jdata["storageInputOutput16"] = static_cast(decoded_value.storageInputOutput16); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageMemoryRequirements2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVariablePointersFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSparseImageMemoryRequirements2& decoded_value = *data->decoded_value; - const Decoded_VkSparseImageMemoryRequirements2& meta_struct = *data; + const VkPhysicalDeviceVariablePointersFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVariablePointersFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["memoryRequirements"], meta_struct.memoryRequirements, options); + jdata["variablePointersStorageBuffer"] = static_cast(decoded_value.variablePointersStorageBuffer); + jdata["variablePointers"] = static_cast(decoded_value.variablePointers); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFeatures2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorUpdateTemplateEntry* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFeatures2& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFeatures2& meta_struct = *data; + const VkDescriptorUpdateTemplateEntry& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorUpdateTemplateEntry& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["features"], meta_struct.features, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["dstBinding"], decoded_value.dstBinding, options); + FieldToJson(jdata["dstArrayElement"], decoded_value.dstArrayElement, options); + FieldToJson(jdata["descriptorCount"], decoded_value.descriptorCount, options); + FieldToJson(jdata["descriptorType"], decoded_value.descriptorType, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(jdata["stride"], decoded_value.stride, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceProperties2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorUpdateTemplateCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceProperties2& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceProperties2& meta_struct = *data; + const VkDescriptorUpdateTemplateCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorUpdateTemplateCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["properties"], meta_struct.properties, options); + FieldToJson(VkDescriptorUpdateTemplateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["descriptorUpdateEntryCount"], decoded_value.descriptorUpdateEntryCount, options); + FieldToJson(jdata["pDescriptorUpdateEntries"], meta_struct.pDescriptorUpdateEntries, options); + FieldToJson(jdata["templateType"], decoded_value.templateType, options); + HandleToJson(jdata["descriptorSetLayout"], meta_struct.descriptorSetLayout, options); + FieldToJson(jdata["pipelineBindPoint"], decoded_value.pipelineBindPoint, options); + HandleToJson(jdata["pipelineLayout"], meta_struct.pipelineLayout, options); + FieldToJson(jdata["set"], decoded_value.set, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFormatProperties2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance3Properties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkFormatProperties2& decoded_value = *data->decoded_value; - const Decoded_VkFormatProperties2& meta_struct = *data; + const VkPhysicalDeviceMaintenance3Properties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMaintenance3Properties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["formatProperties"], meta_struct.formatProperties, options); + FieldToJson(jdata["maxPerSetDescriptors"], decoded_value.maxPerSetDescriptors, options); + FieldToJson(jdata["maxMemoryAllocationSize"], decoded_value.maxMemoryAllocationSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageFormatProperties2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutSupport* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageFormatProperties2& decoded_value = *data->decoded_value; - const Decoded_VkImageFormatProperties2& meta_struct = *data; + const VkDescriptorSetLayoutSupport& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorSetLayoutSupport& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["imageFormatProperties"], meta_struct.imageFormatProperties, options); + jdata["supported"] = static_cast(decoded_value.supported); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageFormatInfo2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerYcbcrConversionCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceImageFormatInfo2& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceImageFormatInfo2& meta_struct = *data; + const VkSamplerYcbcrConversionCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkSamplerYcbcrConversionCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); FieldToJson(jdata["format"], decoded_value.format, options); - FieldToJson(jdata["type"], decoded_value.type, options); - FieldToJson(jdata["tiling"], decoded_value.tiling, options); - FieldToJson(VkImageUsageFlags_t(),jdata["usage"], decoded_value.usage, options); - FieldToJson(VkImageCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["ycbcrModel"], decoded_value.ycbcrModel, options); + FieldToJson(jdata["ycbcrRange"], decoded_value.ycbcrRange, options); + FieldToJson(jdata["components"], meta_struct.components, options); + FieldToJson(jdata["xChromaOffset"], decoded_value.xChromaOffset, options); + FieldToJson(jdata["yChromaOffset"], decoded_value.yChromaOffset, options); + FieldToJson(jdata["chromaFilter"], decoded_value.chromaFilter, options); + jdata["forceExplicitReconstruction"] = static_cast(decoded_value.forceExplicitReconstruction); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyProperties2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerYcbcrConversionInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkQueueFamilyProperties2& decoded_value = *data->decoded_value; - const Decoded_VkQueueFamilyProperties2& meta_struct = *data; + const VkSamplerYcbcrConversionInfo& decoded_value = *data->decoded_value; + const Decoded_VkSamplerYcbcrConversionInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["queueFamilyProperties"], meta_struct.queueFamilyProperties, options); + HandleToJson(jdata["conversion"], meta_struct.conversion, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMemoryProperties2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMemoryProperties2& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMemoryProperties2& meta_struct = *data; + const VkPhysicalDeviceSamplerYcbcrConversionFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["memoryProperties"], meta_struct.memoryProperties, options); + jdata["samplerYcbcrConversion"] = static_cast(decoded_value.samplerYcbcrConversion); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageFormatProperties2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerYcbcrConversionImageFormatProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSparseImageFormatProperties2& decoded_value = *data->decoded_value; - const Decoded_VkSparseImageFormatProperties2& meta_struct = *data; + const VkSamplerYcbcrConversionImageFormatProperties& decoded_value = *data->decoded_value; + const Decoded_VkSamplerYcbcrConversionImageFormatProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["properties"], meta_struct.properties, options); + FieldToJson(jdata["combinedImageSamplerDescriptorCount"], decoded_value.combinedImageSamplerDescriptorCount, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSparseImageFormatInfo2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupRenderPassBeginInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSparseImageFormatInfo2& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSparseImageFormatInfo2& meta_struct = *data; + const VkDeviceGroupRenderPassBeginInfo& decoded_value = *data->decoded_value; + const Decoded_VkDeviceGroupRenderPassBeginInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["format"], decoded_value.format, options); - FieldToJson(jdata["type"], decoded_value.type, options); - FieldToJson(jdata["samples"], decoded_value.samples, options); - FieldToJson(VkImageUsageFlags_t(),jdata["usage"], decoded_value.usage, options); - FieldToJson(jdata["tiling"], decoded_value.tiling, options); + FieldToJson(jdata["deviceMask"], decoded_value.deviceMask, options); + FieldToJson(jdata["deviceRenderAreaCount"], decoded_value.deviceRenderAreaCount, options); + FieldToJson(jdata["pDeviceRenderAreas"], meta_struct.pDeviceRenderAreas, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } @@ -4102,19 +3829,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassInputA } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewUsageCreateInfo* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkImageViewUsageCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkImageViewUsageCreateInfo& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkImageUsageFlags_t(),jdata["usage"], decoded_value.usage, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); - } -} - void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineTessellationDomainOriginStateCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) @@ -4161,523 +3875,526 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMu } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiviewProperties* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkPhysicalDeviceMultiviewProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMultiviewProperties& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxMultiviewViewCount"], decoded_value.maxMultiviewViewCount, options); - FieldToJson(jdata["maxMultiviewInstanceIndex"], decoded_value.maxMultiviewInstanceIndex, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVariablePointersFeatures* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkPhysicalDeviceVariablePointersFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVariablePointersFeatures& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["variablePointersStorageBuffer"] = static_cast(decoded_value.variablePointersStorageBuffer); - jdata["variablePointers"] = static_cast(decoded_value.variablePointers); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceProtectedMemoryFeatures* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkPhysicalDeviceProtectedMemoryFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceProtectedMemoryFeatures& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["protectedMemory"] = static_cast(decoded_value.protectedMemory); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceProtectedMemoryProperties* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkPhysicalDeviceProtectedMemoryProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceProtectedMemoryProperties& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["protectedNoFault"] = static_cast(decoded_value.protectedNoFault); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceQueueInfo2* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkDeviceQueueInfo2& decoded_value = *data->decoded_value; - const Decoded_VkDeviceQueueInfo2& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDeviceQueueCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["queueFamilyIndex"], decoded_value.queueFamilyIndex, options); - FieldToJson(jdata["queueIndex"], decoded_value.queueIndex, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkProtectedSubmitInfo* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkProtectedSubmitInfo& decoded_value = *data->decoded_value; - const Decoded_VkProtectedSubmitInfo& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["protectedSubmit"] = static_cast(decoded_value.protectedSubmit); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerYcbcrConversionCreateInfo* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkSamplerYcbcrConversionCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkSamplerYcbcrConversionCreateInfo& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["format"], decoded_value.format, options); - FieldToJson(jdata["ycbcrModel"], decoded_value.ycbcrModel, options); - FieldToJson(jdata["ycbcrRange"], decoded_value.ycbcrRange, options); - FieldToJson(jdata["components"], meta_struct.components, options); - FieldToJson(jdata["xChromaOffset"], decoded_value.xChromaOffset, options); - FieldToJson(jdata["yChromaOffset"], decoded_value.yChromaOffset, options); - FieldToJson(jdata["chromaFilter"], decoded_value.chromaFilter, options); - jdata["forceExplicitReconstruction"] = static_cast(decoded_value.forceExplicitReconstruction); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerYcbcrConversionInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiviewProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSamplerYcbcrConversionInfo& decoded_value = *data->decoded_value; - const Decoded_VkSamplerYcbcrConversionInfo& meta_struct = *data; + const VkPhysicalDeviceMultiviewProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMultiviewProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["conversion"], meta_struct.conversion, options); + FieldToJson(jdata["maxMultiviewViewCount"], decoded_value.maxMultiviewViewCount, options); + FieldToJson(jdata["maxMultiviewInstanceIndex"], decoded_value.maxMultiviewInstanceIndex, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindImagePlaneMemoryInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderDrawParametersFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindImagePlaneMemoryInfo& decoded_value = *data->decoded_value; - const Decoded_VkBindImagePlaneMemoryInfo& meta_struct = *data; + const VkPhysicalDeviceShaderDrawParametersFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderDrawParametersFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["planeAspect"], decoded_value.planeAspect, options); + jdata["shaderDrawParameters"] = static_cast(decoded_value.shaderDrawParameters); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImagePlaneMemoryRequirementsInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan11Features* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImagePlaneMemoryRequirementsInfo& decoded_value = *data->decoded_value; - const Decoded_VkImagePlaneMemoryRequirementsInfo& meta_struct = *data; + const VkPhysicalDeviceVulkan11Features& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVulkan11Features& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["planeAspect"], decoded_value.planeAspect, options); + jdata["storageBuffer16BitAccess"] = static_cast(decoded_value.storageBuffer16BitAccess); + jdata["uniformAndStorageBuffer16BitAccess"] = static_cast(decoded_value.uniformAndStorageBuffer16BitAccess); + jdata["storagePushConstant16"] = static_cast(decoded_value.storagePushConstant16); + jdata["storageInputOutput16"] = static_cast(decoded_value.storageInputOutput16); + jdata["multiview"] = static_cast(decoded_value.multiview); + jdata["multiviewGeometryShader"] = static_cast(decoded_value.multiviewGeometryShader); + jdata["multiviewTessellationShader"] = static_cast(decoded_value.multiviewTessellationShader); + jdata["variablePointersStorageBuffer"] = static_cast(decoded_value.variablePointersStorageBuffer); + jdata["variablePointers"] = static_cast(decoded_value.variablePointers); + jdata["protectedMemory"] = static_cast(decoded_value.protectedMemory); + jdata["samplerYcbcrConversion"] = static_cast(decoded_value.samplerYcbcrConversion); + jdata["shaderDrawParameters"] = static_cast(decoded_value.shaderDrawParameters); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan11Properties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSamplerYcbcrConversionFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures& meta_struct = *data; + const VkPhysicalDeviceVulkan11Properties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVulkan11Properties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["samplerYcbcrConversion"] = static_cast(decoded_value.samplerYcbcrConversion); + FieldToJson(jdata["deviceUUID"], uuid_to_string(sizeof(decoded_value.deviceUUID), decoded_value.deviceUUID), options); + FieldToJson(jdata["driverUUID"], uuid_to_string(sizeof(decoded_value.driverUUID), decoded_value.driverUUID), options); + FieldToJson(jdata["deviceLUID"], uuid_to_string(sizeof(decoded_value.deviceLUID), decoded_value.deviceLUID), options); + FieldToJson(jdata["deviceNodeMask"], decoded_value.deviceNodeMask, options); + jdata["deviceLUIDValid"] = static_cast(decoded_value.deviceLUIDValid); + FieldToJson(jdata["subgroupSize"], decoded_value.subgroupSize, options); + FieldToJson(VkShaderStageFlags_t(),jdata["subgroupSupportedStages"], decoded_value.subgroupSupportedStages, options); + FieldToJson(VkSubgroupFeatureFlags_t(),jdata["subgroupSupportedOperations"], decoded_value.subgroupSupportedOperations, options); + jdata["subgroupQuadOperationsInAllStages"] = static_cast(decoded_value.subgroupQuadOperationsInAllStages); + FieldToJson(jdata["pointClippingBehavior"], decoded_value.pointClippingBehavior, options); + FieldToJson(jdata["maxMultiviewViewCount"], decoded_value.maxMultiviewViewCount, options); + FieldToJson(jdata["maxMultiviewInstanceIndex"], decoded_value.maxMultiviewInstanceIndex, options); + jdata["protectedNoFault"] = static_cast(decoded_value.protectedNoFault); + FieldToJson(jdata["maxPerSetDescriptors"], decoded_value.maxPerSetDescriptors, options); + FieldToJson(jdata["maxMemoryAllocationSize"], decoded_value.maxMemoryAllocationSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerYcbcrConversionImageFormatProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan12Features* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSamplerYcbcrConversionImageFormatProperties& decoded_value = *data->decoded_value; - const Decoded_VkSamplerYcbcrConversionImageFormatProperties& meta_struct = *data; + const VkPhysicalDeviceVulkan12Features& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVulkan12Features& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["combinedImageSamplerDescriptorCount"], decoded_value.combinedImageSamplerDescriptorCount, options); + jdata["samplerMirrorClampToEdge"] = static_cast(decoded_value.samplerMirrorClampToEdge); + jdata["drawIndirectCount"] = static_cast(decoded_value.drawIndirectCount); + jdata["storageBuffer8BitAccess"] = static_cast(decoded_value.storageBuffer8BitAccess); + jdata["uniformAndStorageBuffer8BitAccess"] = static_cast(decoded_value.uniformAndStorageBuffer8BitAccess); + jdata["storagePushConstant8"] = static_cast(decoded_value.storagePushConstant8); + jdata["shaderBufferInt64Atomics"] = static_cast(decoded_value.shaderBufferInt64Atomics); + jdata["shaderSharedInt64Atomics"] = static_cast(decoded_value.shaderSharedInt64Atomics); + jdata["shaderFloat16"] = static_cast(decoded_value.shaderFloat16); + jdata["shaderInt8"] = static_cast(decoded_value.shaderInt8); + jdata["descriptorIndexing"] = static_cast(decoded_value.descriptorIndexing); + jdata["shaderInputAttachmentArrayDynamicIndexing"] = static_cast(decoded_value.shaderInputAttachmentArrayDynamicIndexing); + jdata["shaderUniformTexelBufferArrayDynamicIndexing"] = static_cast(decoded_value.shaderUniformTexelBufferArrayDynamicIndexing); + jdata["shaderStorageTexelBufferArrayDynamicIndexing"] = static_cast(decoded_value.shaderStorageTexelBufferArrayDynamicIndexing); + jdata["shaderUniformBufferArrayNonUniformIndexing"] = static_cast(decoded_value.shaderUniformBufferArrayNonUniformIndexing); + jdata["shaderSampledImageArrayNonUniformIndexing"] = static_cast(decoded_value.shaderSampledImageArrayNonUniformIndexing); + jdata["shaderStorageBufferArrayNonUniformIndexing"] = static_cast(decoded_value.shaderStorageBufferArrayNonUniformIndexing); + jdata["shaderStorageImageArrayNonUniformIndexing"] = static_cast(decoded_value.shaderStorageImageArrayNonUniformIndexing); + jdata["shaderInputAttachmentArrayNonUniformIndexing"] = static_cast(decoded_value.shaderInputAttachmentArrayNonUniformIndexing); + jdata["shaderUniformTexelBufferArrayNonUniformIndexing"] = static_cast(decoded_value.shaderUniformTexelBufferArrayNonUniformIndexing); + jdata["shaderStorageTexelBufferArrayNonUniformIndexing"] = static_cast(decoded_value.shaderStorageTexelBufferArrayNonUniformIndexing); + jdata["descriptorBindingUniformBufferUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingUniformBufferUpdateAfterBind); + jdata["descriptorBindingSampledImageUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingSampledImageUpdateAfterBind); + jdata["descriptorBindingStorageImageUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingStorageImageUpdateAfterBind); + jdata["descriptorBindingStorageBufferUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingStorageBufferUpdateAfterBind); + jdata["descriptorBindingUniformTexelBufferUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingUniformTexelBufferUpdateAfterBind); + jdata["descriptorBindingStorageTexelBufferUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingStorageTexelBufferUpdateAfterBind); + jdata["descriptorBindingUpdateUnusedWhilePending"] = static_cast(decoded_value.descriptorBindingUpdateUnusedWhilePending); + jdata["descriptorBindingPartiallyBound"] = static_cast(decoded_value.descriptorBindingPartiallyBound); + jdata["descriptorBindingVariableDescriptorCount"] = static_cast(decoded_value.descriptorBindingVariableDescriptorCount); + jdata["runtimeDescriptorArray"] = static_cast(decoded_value.runtimeDescriptorArray); + jdata["samplerFilterMinmax"] = static_cast(decoded_value.samplerFilterMinmax); + jdata["scalarBlockLayout"] = static_cast(decoded_value.scalarBlockLayout); + jdata["imagelessFramebuffer"] = static_cast(decoded_value.imagelessFramebuffer); + jdata["uniformBufferStandardLayout"] = static_cast(decoded_value.uniformBufferStandardLayout); + jdata["shaderSubgroupExtendedTypes"] = static_cast(decoded_value.shaderSubgroupExtendedTypes); + jdata["separateDepthStencilLayouts"] = static_cast(decoded_value.separateDepthStencilLayouts); + jdata["hostQueryReset"] = static_cast(decoded_value.hostQueryReset); + jdata["timelineSemaphore"] = static_cast(decoded_value.timelineSemaphore); + jdata["bufferDeviceAddress"] = static_cast(decoded_value.bufferDeviceAddress); + jdata["bufferDeviceAddressCaptureReplay"] = static_cast(decoded_value.bufferDeviceAddressCaptureReplay); + jdata["bufferDeviceAddressMultiDevice"] = static_cast(decoded_value.bufferDeviceAddressMultiDevice); + jdata["vulkanMemoryModel"] = static_cast(decoded_value.vulkanMemoryModel); + jdata["vulkanMemoryModelDeviceScope"] = static_cast(decoded_value.vulkanMemoryModelDeviceScope); + jdata["vulkanMemoryModelAvailabilityVisibilityChains"] = static_cast(decoded_value.vulkanMemoryModelAvailabilityVisibilityChains); + jdata["shaderOutputViewportIndex"] = static_cast(decoded_value.shaderOutputViewportIndex); + jdata["shaderOutputLayer"] = static_cast(decoded_value.shaderOutputLayer); + jdata["subgroupBroadcastDynamicId"] = static_cast(decoded_value.subgroupBroadcastDynamicId); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorUpdateTemplateEntry* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkConformanceVersion* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorUpdateTemplateEntry& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorUpdateTemplateEntry& meta_struct = *data; + const VkConformanceVersion& decoded_value = *data->decoded_value; + const Decoded_VkConformanceVersion& meta_struct = *data; - FieldToJson(jdata["dstBinding"], decoded_value.dstBinding, options); - FieldToJson(jdata["dstArrayElement"], decoded_value.dstArrayElement, options); - FieldToJson(jdata["descriptorCount"], decoded_value.descriptorCount, options); - FieldToJson(jdata["descriptorType"], decoded_value.descriptorType, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); - FieldToJson(jdata["stride"], decoded_value.stride, options); + FieldToJson(jdata["major"], decoded_value.major, options); + FieldToJson(jdata["minor"], decoded_value.minor, options); + FieldToJson(jdata["subminor"], decoded_value.subminor, options); + FieldToJson(jdata["patch"], decoded_value.patch, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorUpdateTemplateCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan12Properties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorUpdateTemplateCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorUpdateTemplateCreateInfo& meta_struct = *data; + const VkPhysicalDeviceVulkan12Properties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVulkan12Properties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDescriptorUpdateTemplateCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["descriptorUpdateEntryCount"], decoded_value.descriptorUpdateEntryCount, options); - FieldToJson(jdata["pDescriptorUpdateEntries"], meta_struct.pDescriptorUpdateEntries, options); - FieldToJson(jdata["templateType"], decoded_value.templateType, options); - HandleToJson(jdata["descriptorSetLayout"], meta_struct.descriptorSetLayout, options); - FieldToJson(jdata["pipelineBindPoint"], decoded_value.pipelineBindPoint, options); - HandleToJson(jdata["pipelineLayout"], meta_struct.pipelineLayout, options); - FieldToJson(jdata["set"], decoded_value.set, options); + FieldToJson(jdata["driverID"], decoded_value.driverID, options); + FieldToJson(jdata["driverName"], &meta_struct.driverName, options); + FieldToJson(jdata["driverInfo"], &meta_struct.driverInfo, options); + FieldToJson(jdata["conformanceVersion"], meta_struct.conformanceVersion, options); + FieldToJson(jdata["denormBehaviorIndependence"], decoded_value.denormBehaviorIndependence, options); + FieldToJson(jdata["roundingModeIndependence"], decoded_value.roundingModeIndependence, options); + jdata["shaderSignedZeroInfNanPreserveFloat16"] = static_cast(decoded_value.shaderSignedZeroInfNanPreserveFloat16); + jdata["shaderSignedZeroInfNanPreserveFloat32"] = static_cast(decoded_value.shaderSignedZeroInfNanPreserveFloat32); + jdata["shaderSignedZeroInfNanPreserveFloat64"] = static_cast(decoded_value.shaderSignedZeroInfNanPreserveFloat64); + jdata["shaderDenormPreserveFloat16"] = static_cast(decoded_value.shaderDenormPreserveFloat16); + jdata["shaderDenormPreserveFloat32"] = static_cast(decoded_value.shaderDenormPreserveFloat32); + jdata["shaderDenormPreserveFloat64"] = static_cast(decoded_value.shaderDenormPreserveFloat64); + jdata["shaderDenormFlushToZeroFloat16"] = static_cast(decoded_value.shaderDenormFlushToZeroFloat16); + jdata["shaderDenormFlushToZeroFloat32"] = static_cast(decoded_value.shaderDenormFlushToZeroFloat32); + jdata["shaderDenormFlushToZeroFloat64"] = static_cast(decoded_value.shaderDenormFlushToZeroFloat64); + jdata["shaderRoundingModeRTEFloat16"] = static_cast(decoded_value.shaderRoundingModeRTEFloat16); + jdata["shaderRoundingModeRTEFloat32"] = static_cast(decoded_value.shaderRoundingModeRTEFloat32); + jdata["shaderRoundingModeRTEFloat64"] = static_cast(decoded_value.shaderRoundingModeRTEFloat64); + jdata["shaderRoundingModeRTZFloat16"] = static_cast(decoded_value.shaderRoundingModeRTZFloat16); + jdata["shaderRoundingModeRTZFloat32"] = static_cast(decoded_value.shaderRoundingModeRTZFloat32); + jdata["shaderRoundingModeRTZFloat64"] = static_cast(decoded_value.shaderRoundingModeRTZFloat64); + FieldToJson(jdata["maxUpdateAfterBindDescriptorsInAllPools"], decoded_value.maxUpdateAfterBindDescriptorsInAllPools, options); + jdata["shaderUniformBufferArrayNonUniformIndexingNative"] = static_cast(decoded_value.shaderUniformBufferArrayNonUniformIndexingNative); + jdata["shaderSampledImageArrayNonUniformIndexingNative"] = static_cast(decoded_value.shaderSampledImageArrayNonUniformIndexingNative); + jdata["shaderStorageBufferArrayNonUniformIndexingNative"] = static_cast(decoded_value.shaderStorageBufferArrayNonUniformIndexingNative); + jdata["shaderStorageImageArrayNonUniformIndexingNative"] = static_cast(decoded_value.shaderStorageImageArrayNonUniformIndexingNative); + jdata["shaderInputAttachmentArrayNonUniformIndexingNative"] = static_cast(decoded_value.shaderInputAttachmentArrayNonUniformIndexingNative); + jdata["robustBufferAccessUpdateAfterBind"] = static_cast(decoded_value.robustBufferAccessUpdateAfterBind); + jdata["quadDivergentImplicitLod"] = static_cast(decoded_value.quadDivergentImplicitLod); + FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindSamplers"], decoded_value.maxPerStageDescriptorUpdateAfterBindSamplers, options); + FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindUniformBuffers"], decoded_value.maxPerStageDescriptorUpdateAfterBindUniformBuffers, options); + FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindStorageBuffers"], decoded_value.maxPerStageDescriptorUpdateAfterBindStorageBuffers, options); + FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindSampledImages"], decoded_value.maxPerStageDescriptorUpdateAfterBindSampledImages, options); + FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindStorageImages"], decoded_value.maxPerStageDescriptorUpdateAfterBindStorageImages, options); + FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindInputAttachments"], decoded_value.maxPerStageDescriptorUpdateAfterBindInputAttachments, options); + FieldToJson(jdata["maxPerStageUpdateAfterBindResources"], decoded_value.maxPerStageUpdateAfterBindResources, options); + FieldToJson(jdata["maxDescriptorSetUpdateAfterBindSamplers"], decoded_value.maxDescriptorSetUpdateAfterBindSamplers, options); + FieldToJson(jdata["maxDescriptorSetUpdateAfterBindUniformBuffers"], decoded_value.maxDescriptorSetUpdateAfterBindUniformBuffers, options); + FieldToJson(jdata["maxDescriptorSetUpdateAfterBindUniformBuffersDynamic"], decoded_value.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic, options); + FieldToJson(jdata["maxDescriptorSetUpdateAfterBindStorageBuffers"], decoded_value.maxDescriptorSetUpdateAfterBindStorageBuffers, options); + FieldToJson(jdata["maxDescriptorSetUpdateAfterBindStorageBuffersDynamic"], decoded_value.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic, options); + FieldToJson(jdata["maxDescriptorSetUpdateAfterBindSampledImages"], decoded_value.maxDescriptorSetUpdateAfterBindSampledImages, options); + FieldToJson(jdata["maxDescriptorSetUpdateAfterBindStorageImages"], decoded_value.maxDescriptorSetUpdateAfterBindStorageImages, options); + FieldToJson(jdata["maxDescriptorSetUpdateAfterBindInputAttachments"], decoded_value.maxDescriptorSetUpdateAfterBindInputAttachments, options); + FieldToJson(VkResolveModeFlags_t(),jdata["supportedDepthResolveModes"], decoded_value.supportedDepthResolveModes, options); + FieldToJson(VkResolveModeFlags_t(),jdata["supportedStencilResolveModes"], decoded_value.supportedStencilResolveModes, options); + jdata["independentResolveNone"] = static_cast(decoded_value.independentResolveNone); + jdata["independentResolve"] = static_cast(decoded_value.independentResolve); + jdata["filterMinmaxSingleComponentFormats"] = static_cast(decoded_value.filterMinmaxSingleComponentFormats); + jdata["filterMinmaxImageComponentMapping"] = static_cast(decoded_value.filterMinmaxImageComponentMapping); + FieldToJson(jdata["maxTimelineSemaphoreValueDifference"], decoded_value.maxTimelineSemaphoreValueDifference, options); + FieldToJson(VkSampleCountFlags_t(),jdata["framebufferIntegerColorSampleCounts"], decoded_value.framebufferIntegerColorSampleCounts, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalMemoryProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageFormatListCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExternalMemoryProperties& decoded_value = *data->decoded_value; - const Decoded_VkExternalMemoryProperties& meta_struct = *data; + const VkImageFormatListCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkImageFormatListCreateInfo& meta_struct = *data; - FieldToJson(VkExternalMemoryFeatureFlags_t(),jdata["externalMemoryFeatures"], decoded_value.externalMemoryFeatures, options); - FieldToJson(VkExternalMemoryHandleTypeFlags_t(),jdata["exportFromImportedHandleTypes"], decoded_value.exportFromImportedHandleTypes, options); - FieldToJson(VkExternalMemoryHandleTypeFlags_t(),jdata["compatibleHandleTypes"], decoded_value.compatibleHandleTypes, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["viewFormatCount"], decoded_value.viewFormatCount, options); + FieldToJson(jdata["pViewFormats"], meta_struct.pViewFormats, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalImageFormatInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDriverProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExternalImageFormatInfo& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExternalImageFormatInfo& meta_struct = *data; + const VkPhysicalDeviceDriverProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDriverProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["driverID"], decoded_value.driverID, options); + FieldToJson(jdata["driverName"], &meta_struct.driverName, options); + FieldToJson(jdata["driverInfo"], &meta_struct.driverInfo, options); + FieldToJson(jdata["conformanceVersion"], meta_struct.conformanceVersion, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalImageFormatProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExternalImageFormatProperties& decoded_value = *data->decoded_value; - const Decoded_VkExternalImageFormatProperties& meta_struct = *data; + const VkPhysicalDeviceVulkanMemoryModelFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["externalMemoryProperties"], meta_struct.externalMemoryProperties, options); + jdata["vulkanMemoryModel"] = static_cast(decoded_value.vulkanMemoryModel); + jdata["vulkanMemoryModelDeviceScope"] = static_cast(decoded_value.vulkanMemoryModelDeviceScope); + jdata["vulkanMemoryModelAvailabilityVisibilityChains"] = static_cast(decoded_value.vulkanMemoryModelAvailabilityVisibilityChains); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalBufferInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceHostQueryResetFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExternalBufferInfo& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExternalBufferInfo& meta_struct = *data; + const VkPhysicalDeviceHostQueryResetFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceHostQueryResetFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkBufferCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(VkBufferUsageFlags_t(),jdata["usage"], decoded_value.usage, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); + jdata["hostQueryReset"] = static_cast(decoded_value.hostQueryReset); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalBufferProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExternalBufferProperties& decoded_value = *data->decoded_value; - const Decoded_VkExternalBufferProperties& meta_struct = *data; + const VkPhysicalDeviceTimelineSemaphoreFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["externalMemoryProperties"], meta_struct.externalMemoryProperties, options); + jdata["timelineSemaphore"] = static_cast(decoded_value.timelineSemaphore); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceIDProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTimelineSemaphoreProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceIDProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceIDProperties& meta_struct = *data; + const VkPhysicalDeviceTimelineSemaphoreProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceTimelineSemaphoreProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["deviceUUID"], uuid_to_string(sizeof(decoded_value.deviceUUID), decoded_value.deviceUUID), options); - FieldToJson(jdata["driverUUID"], uuid_to_string(sizeof(decoded_value.driverUUID), decoded_value.driverUUID), options); - FieldToJson(jdata["deviceLUID"], uuid_to_string(sizeof(decoded_value.deviceLUID), decoded_value.deviceLUID), options); - FieldToJson(jdata["deviceNodeMask"], decoded_value.deviceNodeMask, options); - jdata["deviceLUIDValid"] = static_cast(decoded_value.deviceLUIDValid); + FieldToJson(jdata["maxTimelineSemaphoreValueDifference"], decoded_value.maxTimelineSemaphoreValueDifference, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalMemoryImageCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreTypeCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExternalMemoryImageCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkExternalMemoryImageCreateInfo& meta_struct = *data; + const VkSemaphoreTypeCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkSemaphoreTypeCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkExternalMemoryHandleTypeFlags_t(),jdata["handleTypes"], decoded_value.handleTypes, options); + FieldToJson(jdata["semaphoreType"], decoded_value.semaphoreType, options); + FieldToJson(jdata["initialValue"], decoded_value.initialValue, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalMemoryBufferCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTimelineSemaphoreSubmitInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExternalMemoryBufferCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkExternalMemoryBufferCreateInfo& meta_struct = *data; + const VkTimelineSemaphoreSubmitInfo& decoded_value = *data->decoded_value; + const Decoded_VkTimelineSemaphoreSubmitInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkExternalMemoryHandleTypeFlags_t(),jdata["handleTypes"], decoded_value.handleTypes, options); + FieldToJson(jdata["waitSemaphoreValueCount"], decoded_value.waitSemaphoreValueCount, options); + FieldToJson(jdata["pWaitSemaphoreValues"], meta_struct.pWaitSemaphoreValues, options); + FieldToJson(jdata["signalSemaphoreValueCount"], decoded_value.signalSemaphoreValueCount, options); + FieldToJson(jdata["pSignalSemaphoreValues"], meta_struct.pSignalSemaphoreValues, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportMemoryAllocateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreWaitInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExportMemoryAllocateInfo& decoded_value = *data->decoded_value; - const Decoded_VkExportMemoryAllocateInfo& meta_struct = *data; + const VkSemaphoreWaitInfo& decoded_value = *data->decoded_value; + const Decoded_VkSemaphoreWaitInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkExternalMemoryHandleTypeFlags_t(),jdata["handleTypes"], decoded_value.handleTypes, options); + FieldToJson(VkSemaphoreWaitFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["semaphoreCount"], decoded_value.semaphoreCount, options); + HandleToJson(jdata["pSemaphores"], &meta_struct.pSemaphores, options); + FieldToJson(jdata["pValues"], meta_struct.pValues, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalFenceInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreSignalInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExternalFenceInfo& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExternalFenceInfo& meta_struct = *data; + const VkSemaphoreSignalInfo& decoded_value = *data->decoded_value; + const Decoded_VkSemaphoreSignalInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); + HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); + FieldToJson(jdata["value"], decoded_value.value, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalFenceProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExternalFenceProperties& decoded_value = *data->decoded_value; - const Decoded_VkExternalFenceProperties& meta_struct = *data; + const VkPhysicalDeviceBufferDeviceAddressFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkExternalFenceHandleTypeFlags_t(),jdata["exportFromImportedHandleTypes"], decoded_value.exportFromImportedHandleTypes, options); - FieldToJson(VkExternalFenceHandleTypeFlags_t(),jdata["compatibleHandleTypes"], decoded_value.compatibleHandleTypes, options); - FieldToJson(VkExternalFenceFeatureFlags_t(),jdata["externalFenceFeatures"], decoded_value.externalFenceFeatures, options); + jdata["bufferDeviceAddress"] = static_cast(decoded_value.bufferDeviceAddress); + jdata["bufferDeviceAddressCaptureReplay"] = static_cast(decoded_value.bufferDeviceAddressCaptureReplay); + jdata["bufferDeviceAddressMultiDevice"] = static_cast(decoded_value.bufferDeviceAddressMultiDevice); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportFenceCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferDeviceAddressInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExportFenceCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkExportFenceCreateInfo& meta_struct = *data; + const VkBufferDeviceAddressInfo& decoded_value = *data->decoded_value; + const Decoded_VkBufferDeviceAddressInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkExternalFenceHandleTypeFlags_t(),jdata["handleTypes"], decoded_value.handleTypes, options); + HandleToJson(jdata["buffer"], meta_struct.buffer, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportSemaphoreCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferOpaqueCaptureAddressCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExportSemaphoreCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkExportSemaphoreCreateInfo& meta_struct = *data; + const VkBufferOpaqueCaptureAddressCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkBufferOpaqueCaptureAddressCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkExternalSemaphoreHandleTypeFlags_t(),jdata["handleTypes"], decoded_value.handleTypes, options); + FieldToJson(jdata["opaqueCaptureAddress"], decoded_value.opaqueCaptureAddress, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalSemaphoreInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExternalSemaphoreInfo& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExternalSemaphoreInfo& meta_struct = *data; + const VkMemoryOpaqueCaptureAddressAllocateInfo& decoded_value = *data->decoded_value; + const Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["opaqueCaptureAddress"], decoded_value.opaqueCaptureAddress, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalSemaphoreProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExternalSemaphoreProperties& decoded_value = *data->decoded_value; - const Decoded_VkExternalSemaphoreProperties& meta_struct = *data; + const VkDeviceMemoryOpaqueCaptureAddressInfo& decoded_value = *data->decoded_value; + const Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkExternalSemaphoreHandleTypeFlags_t(),jdata["exportFromImportedHandleTypes"], decoded_value.exportFromImportedHandleTypes, options); - FieldToJson(VkExternalSemaphoreHandleTypeFlags_t(),jdata["compatibleHandleTypes"], decoded_value.compatibleHandleTypes, options); - FieldToJson(VkExternalSemaphoreFeatureFlags_t(),jdata["externalSemaphoreFeatures"], decoded_value.externalSemaphoreFeatures, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance3Properties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevice8BitStorageFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMaintenance3Properties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMaintenance3Properties& meta_struct = *data; + const VkPhysicalDevice8BitStorageFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevice8BitStorageFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxPerSetDescriptors"], decoded_value.maxPerSetDescriptors, options); - FieldToJson(jdata["maxMemoryAllocationSize"], decoded_value.maxMemoryAllocationSize, options); + jdata["storageBuffer8BitAccess"] = static_cast(decoded_value.storageBuffer8BitAccess); + jdata["uniformAndStorageBuffer8BitAccess"] = static_cast(decoded_value.uniformAndStorageBuffer8BitAccess); + jdata["storagePushConstant8"] = static_cast(decoded_value.storagePushConstant8); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutSupport* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderAtomicInt64Features* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorSetLayoutSupport& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorSetLayoutSupport& meta_struct = *data; + const VkPhysicalDeviceShaderAtomicInt64Features& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderAtomicInt64Features& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["supported"] = static_cast(decoded_value.supported); + jdata["shaderBufferInt64Atomics"] = static_cast(decoded_value.shaderBufferInt64Atomics); + jdata["shaderSharedInt64Atomics"] = static_cast(decoded_value.shaderSharedInt64Atomics); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderDrawParametersFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderFloat16Int8Features* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderDrawParametersFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderDrawParametersFeatures& meta_struct = *data; + const VkPhysicalDeviceShaderFloat16Int8Features& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderFloat16Int8Features& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderDrawParameters"] = static_cast(decoded_value.shaderDrawParameters); + jdata["shaderFloat16"] = static_cast(decoded_value.shaderFloat16); + jdata["shaderInt8"] = static_cast(decoded_value.shaderInt8); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan11Features* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFloatControlsProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVulkan11Features& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVulkan11Features& meta_struct = *data; + const VkPhysicalDeviceFloatControlsProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFloatControlsProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["storageBuffer16BitAccess"] = static_cast(decoded_value.storageBuffer16BitAccess); - jdata["uniformAndStorageBuffer16BitAccess"] = static_cast(decoded_value.uniformAndStorageBuffer16BitAccess); - jdata["storagePushConstant16"] = static_cast(decoded_value.storagePushConstant16); - jdata["storageInputOutput16"] = static_cast(decoded_value.storageInputOutput16); - jdata["multiview"] = static_cast(decoded_value.multiview); - jdata["multiviewGeometryShader"] = static_cast(decoded_value.multiviewGeometryShader); - jdata["multiviewTessellationShader"] = static_cast(decoded_value.multiviewTessellationShader); - jdata["variablePointersStorageBuffer"] = static_cast(decoded_value.variablePointersStorageBuffer); - jdata["variablePointers"] = static_cast(decoded_value.variablePointers); - jdata["protectedMemory"] = static_cast(decoded_value.protectedMemory); - jdata["samplerYcbcrConversion"] = static_cast(decoded_value.samplerYcbcrConversion); - jdata["shaderDrawParameters"] = static_cast(decoded_value.shaderDrawParameters); + FieldToJson(jdata["denormBehaviorIndependence"], decoded_value.denormBehaviorIndependence, options); + FieldToJson(jdata["roundingModeIndependence"], decoded_value.roundingModeIndependence, options); + jdata["shaderSignedZeroInfNanPreserveFloat16"] = static_cast(decoded_value.shaderSignedZeroInfNanPreserveFloat16); + jdata["shaderSignedZeroInfNanPreserveFloat32"] = static_cast(decoded_value.shaderSignedZeroInfNanPreserveFloat32); + jdata["shaderSignedZeroInfNanPreserveFloat64"] = static_cast(decoded_value.shaderSignedZeroInfNanPreserveFloat64); + jdata["shaderDenormPreserveFloat16"] = static_cast(decoded_value.shaderDenormPreserveFloat16); + jdata["shaderDenormPreserveFloat32"] = static_cast(decoded_value.shaderDenormPreserveFloat32); + jdata["shaderDenormPreserveFloat64"] = static_cast(decoded_value.shaderDenormPreserveFloat64); + jdata["shaderDenormFlushToZeroFloat16"] = static_cast(decoded_value.shaderDenormFlushToZeroFloat16); + jdata["shaderDenormFlushToZeroFloat32"] = static_cast(decoded_value.shaderDenormFlushToZeroFloat32); + jdata["shaderDenormFlushToZeroFloat64"] = static_cast(decoded_value.shaderDenormFlushToZeroFloat64); + jdata["shaderRoundingModeRTEFloat16"] = static_cast(decoded_value.shaderRoundingModeRTEFloat16); + jdata["shaderRoundingModeRTEFloat32"] = static_cast(decoded_value.shaderRoundingModeRTEFloat32); + jdata["shaderRoundingModeRTEFloat64"] = static_cast(decoded_value.shaderRoundingModeRTEFloat64); + jdata["shaderRoundingModeRTZFloat16"] = static_cast(decoded_value.shaderRoundingModeRTZFloat16); + jdata["shaderRoundingModeRTZFloat32"] = static_cast(decoded_value.shaderRoundingModeRTZFloat32); + jdata["shaderRoundingModeRTZFloat64"] = static_cast(decoded_value.shaderRoundingModeRTZFloat64); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan11Properties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutBindingFlagsCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVulkan11Properties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVulkan11Properties& meta_struct = *data; + const VkDescriptorSetLayoutBindingFlagsCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorSetLayoutBindingFlagsCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["deviceUUID"], uuid_to_string(sizeof(decoded_value.deviceUUID), decoded_value.deviceUUID), options); - FieldToJson(jdata["driverUUID"], uuid_to_string(sizeof(decoded_value.driverUUID), decoded_value.driverUUID), options); - FieldToJson(jdata["deviceLUID"], uuid_to_string(sizeof(decoded_value.deviceLUID), decoded_value.deviceLUID), options); - FieldToJson(jdata["deviceNodeMask"], decoded_value.deviceNodeMask, options); - jdata["deviceLUIDValid"] = static_cast(decoded_value.deviceLUIDValid); - FieldToJson(jdata["subgroupSize"], decoded_value.subgroupSize, options); - FieldToJson(VkShaderStageFlags_t(),jdata["subgroupSupportedStages"], decoded_value.subgroupSupportedStages, options); - FieldToJson(VkSubgroupFeatureFlags_t(),jdata["subgroupSupportedOperations"], decoded_value.subgroupSupportedOperations, options); - jdata["subgroupQuadOperationsInAllStages"] = static_cast(decoded_value.subgroupQuadOperationsInAllStages); - FieldToJson(jdata["pointClippingBehavior"], decoded_value.pointClippingBehavior, options); - FieldToJson(jdata["maxMultiviewViewCount"], decoded_value.maxMultiviewViewCount, options); - FieldToJson(jdata["maxMultiviewInstanceIndex"], decoded_value.maxMultiviewInstanceIndex, options); - jdata["protectedNoFault"] = static_cast(decoded_value.protectedNoFault); - FieldToJson(jdata["maxPerSetDescriptors"], decoded_value.maxPerSetDescriptors, options); - FieldToJson(jdata["maxMemoryAllocationSize"], decoded_value.maxMemoryAllocationSize, options); + FieldToJson(jdata["bindingCount"], decoded_value.bindingCount, options); + FieldToJson(jdata["pBindingFlags"], meta_struct.pBindingFlags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan12Features* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDescriptorIndexingFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVulkan12Features& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVulkan12Features& meta_struct = *data; + const VkPhysicalDeviceDescriptorIndexingFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDescriptorIndexingFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["samplerMirrorClampToEdge"] = static_cast(decoded_value.samplerMirrorClampToEdge); - jdata["drawIndirectCount"] = static_cast(decoded_value.drawIndirectCount); - jdata["storageBuffer8BitAccess"] = static_cast(decoded_value.storageBuffer8BitAccess); - jdata["uniformAndStorageBuffer8BitAccess"] = static_cast(decoded_value.uniformAndStorageBuffer8BitAccess); - jdata["storagePushConstant8"] = static_cast(decoded_value.storagePushConstant8); - jdata["shaderBufferInt64Atomics"] = static_cast(decoded_value.shaderBufferInt64Atomics); - jdata["shaderSharedInt64Atomics"] = static_cast(decoded_value.shaderSharedInt64Atomics); - jdata["shaderFloat16"] = static_cast(decoded_value.shaderFloat16); - jdata["shaderInt8"] = static_cast(decoded_value.shaderInt8); - jdata["descriptorIndexing"] = static_cast(decoded_value.descriptorIndexing); jdata["shaderInputAttachmentArrayDynamicIndexing"] = static_cast(decoded_value.shaderInputAttachmentArrayDynamicIndexing); jdata["shaderUniformTexelBufferArrayDynamicIndexing"] = static_cast(decoded_value.shaderUniformTexelBufferArrayDynamicIndexing); jdata["shaderStorageTexelBufferArrayDynamicIndexing"] = static_cast(decoded_value.shaderStorageTexelBufferArrayDynamicIndexing); @@ -4696,72 +4413,20 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVu jdata["descriptorBindingStorageTexelBufferUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingStorageTexelBufferUpdateAfterBind); jdata["descriptorBindingUpdateUnusedWhilePending"] = static_cast(decoded_value.descriptorBindingUpdateUnusedWhilePending); jdata["descriptorBindingPartiallyBound"] = static_cast(decoded_value.descriptorBindingPartiallyBound); - jdata["descriptorBindingVariableDescriptorCount"] = static_cast(decoded_value.descriptorBindingVariableDescriptorCount); - jdata["runtimeDescriptorArray"] = static_cast(decoded_value.runtimeDescriptorArray); - jdata["samplerFilterMinmax"] = static_cast(decoded_value.samplerFilterMinmax); - jdata["scalarBlockLayout"] = static_cast(decoded_value.scalarBlockLayout); - jdata["imagelessFramebuffer"] = static_cast(decoded_value.imagelessFramebuffer); - jdata["uniformBufferStandardLayout"] = static_cast(decoded_value.uniformBufferStandardLayout); - jdata["shaderSubgroupExtendedTypes"] = static_cast(decoded_value.shaderSubgroupExtendedTypes); - jdata["separateDepthStencilLayouts"] = static_cast(decoded_value.separateDepthStencilLayouts); - jdata["hostQueryReset"] = static_cast(decoded_value.hostQueryReset); - jdata["timelineSemaphore"] = static_cast(decoded_value.timelineSemaphore); - jdata["bufferDeviceAddress"] = static_cast(decoded_value.bufferDeviceAddress); - jdata["bufferDeviceAddressCaptureReplay"] = static_cast(decoded_value.bufferDeviceAddressCaptureReplay); - jdata["bufferDeviceAddressMultiDevice"] = static_cast(decoded_value.bufferDeviceAddressMultiDevice); - jdata["vulkanMemoryModel"] = static_cast(decoded_value.vulkanMemoryModel); - jdata["vulkanMemoryModelDeviceScope"] = static_cast(decoded_value.vulkanMemoryModelDeviceScope); - jdata["vulkanMemoryModelAvailabilityVisibilityChains"] = static_cast(decoded_value.vulkanMemoryModelAvailabilityVisibilityChains); - jdata["shaderOutputViewportIndex"] = static_cast(decoded_value.shaderOutputViewportIndex); - jdata["shaderOutputLayer"] = static_cast(decoded_value.shaderOutputLayer); - jdata["subgroupBroadcastDynamicId"] = static_cast(decoded_value.subgroupBroadcastDynamicId); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkConformanceVersion* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkConformanceVersion& decoded_value = *data->decoded_value; - const Decoded_VkConformanceVersion& meta_struct = *data; - - FieldToJson(jdata["major"], decoded_value.major, options); - FieldToJson(jdata["minor"], decoded_value.minor, options); - FieldToJson(jdata["subminor"], decoded_value.subminor, options); - FieldToJson(jdata["patch"], decoded_value.patch, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan12Properties* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkPhysicalDeviceVulkan12Properties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVulkan12Properties& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["driverID"], decoded_value.driverID, options); - FieldToJson(jdata["driverName"], &meta_struct.driverName, options); - FieldToJson(jdata["driverInfo"], &meta_struct.driverInfo, options); - FieldToJson(jdata["conformanceVersion"], meta_struct.conformanceVersion, options); - FieldToJson(jdata["denormBehaviorIndependence"], decoded_value.denormBehaviorIndependence, options); - FieldToJson(jdata["roundingModeIndependence"], decoded_value.roundingModeIndependence, options); - jdata["shaderSignedZeroInfNanPreserveFloat16"] = static_cast(decoded_value.shaderSignedZeroInfNanPreserveFloat16); - jdata["shaderSignedZeroInfNanPreserveFloat32"] = static_cast(decoded_value.shaderSignedZeroInfNanPreserveFloat32); - jdata["shaderSignedZeroInfNanPreserveFloat64"] = static_cast(decoded_value.shaderSignedZeroInfNanPreserveFloat64); - jdata["shaderDenormPreserveFloat16"] = static_cast(decoded_value.shaderDenormPreserveFloat16); - jdata["shaderDenormPreserveFloat32"] = static_cast(decoded_value.shaderDenormPreserveFloat32); - jdata["shaderDenormPreserveFloat64"] = static_cast(decoded_value.shaderDenormPreserveFloat64); - jdata["shaderDenormFlushToZeroFloat16"] = static_cast(decoded_value.shaderDenormFlushToZeroFloat16); - jdata["shaderDenormFlushToZeroFloat32"] = static_cast(decoded_value.shaderDenormFlushToZeroFloat32); - jdata["shaderDenormFlushToZeroFloat64"] = static_cast(decoded_value.shaderDenormFlushToZeroFloat64); - jdata["shaderRoundingModeRTEFloat16"] = static_cast(decoded_value.shaderRoundingModeRTEFloat16); - jdata["shaderRoundingModeRTEFloat32"] = static_cast(decoded_value.shaderRoundingModeRTEFloat32); - jdata["shaderRoundingModeRTEFloat64"] = static_cast(decoded_value.shaderRoundingModeRTEFloat64); - jdata["shaderRoundingModeRTZFloat16"] = static_cast(decoded_value.shaderRoundingModeRTZFloat16); - jdata["shaderRoundingModeRTZFloat32"] = static_cast(decoded_value.shaderRoundingModeRTZFloat32); - jdata["shaderRoundingModeRTZFloat64"] = static_cast(decoded_value.shaderRoundingModeRTZFloat64); + jdata["descriptorBindingVariableDescriptorCount"] = static_cast(decoded_value.descriptorBindingVariableDescriptorCount); + jdata["runtimeDescriptorArray"] = static_cast(decoded_value.runtimeDescriptorArray); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDescriptorIndexingProperties* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceDescriptorIndexingProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDescriptorIndexingProperties& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); FieldToJson(jdata["maxUpdateAfterBindDescriptorsInAllPools"], decoded_value.maxUpdateAfterBindDescriptorsInAllPools, options); jdata["shaderUniformBufferArrayNonUniformIndexingNative"] = static_cast(decoded_value.shaderUniformBufferArrayNonUniformIndexingNative); jdata["shaderSampledImageArrayNonUniformIndexingNative"] = static_cast(decoded_value.shaderSampledImageArrayNonUniformIndexingNative); @@ -4785,28 +4450,99 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVu FieldToJson(jdata["maxDescriptorSetUpdateAfterBindSampledImages"], decoded_value.maxDescriptorSetUpdateAfterBindSampledImages, options); FieldToJson(jdata["maxDescriptorSetUpdateAfterBindStorageImages"], decoded_value.maxDescriptorSetUpdateAfterBindStorageImages, options); FieldToJson(jdata["maxDescriptorSetUpdateAfterBindInputAttachments"], decoded_value.maxDescriptorSetUpdateAfterBindInputAttachments, options); - FieldToJson(VkResolveModeFlags_t(),jdata["supportedDepthResolveModes"], decoded_value.supportedDepthResolveModes, options); - FieldToJson(VkResolveModeFlags_t(),jdata["supportedStencilResolveModes"], decoded_value.supportedStencilResolveModes, options); - jdata["independentResolveNone"] = static_cast(decoded_value.independentResolveNone); - jdata["independentResolve"] = static_cast(decoded_value.independentResolve); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetVariableDescriptorCountAllocateInfo* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkDescriptorSetVariableDescriptorCountAllocateInfo& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorSetVariableDescriptorCountAllocateInfo& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["descriptorSetCount"], decoded_value.descriptorSetCount, options); + FieldToJson(jdata["pDescriptorCounts"], meta_struct.pDescriptorCounts, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetVariableDescriptorCountLayoutSupport* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkDescriptorSetVariableDescriptorCountLayoutSupport& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorSetVariableDescriptorCountLayoutSupport& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["maxVariableDescriptorCount"], decoded_value.maxVariableDescriptorCount, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceScalarBlockLayoutFeatures* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceScalarBlockLayoutFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceScalarBlockLayoutFeatures& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["scalarBlockLayout"] = static_cast(decoded_value.scalarBlockLayout); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerReductionModeCreateInfo* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkSamplerReductionModeCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkSamplerReductionModeCreateInfo& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["reductionMode"], decoded_value.reductionMode, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSamplerFilterMinmaxProperties* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceSamplerFilterMinmaxProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSamplerFilterMinmaxProperties& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); jdata["filterMinmaxSingleComponentFormats"] = static_cast(decoded_value.filterMinmaxSingleComponentFormats); jdata["filterMinmaxImageComponentMapping"] = static_cast(decoded_value.filterMinmaxImageComponentMapping); - FieldToJson(jdata["maxTimelineSemaphoreValueDifference"], decoded_value.maxTimelineSemaphoreValueDifference, options); - FieldToJson(VkSampleCountFlags_t(),jdata["framebufferIntegerColorSampleCounts"], decoded_value.framebufferIntegerColorSampleCounts, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageFormatListCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageFormatListCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkImageFormatListCreateInfo& meta_struct = *data; + const VkPhysicalDeviceUniformBufferStandardLayoutFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["viewFormatCount"], decoded_value.viewFormatCount, options); - FieldToJson(jdata["pViewFormats"], meta_struct.pViewFormats, options); + jdata["uniformBufferStandardLayout"] = static_cast(decoded_value.uniformBufferStandardLayout); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["shaderSubgroupExtendedTypes"] = static_cast(decoded_value.shaderSubgroupExtendedTypes); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } @@ -4936,673 +4672,625 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassEndInfo* } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevice8BitStorageFeatures* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkPhysicalDevice8BitStorageFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevice8BitStorageFeatures& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["storageBuffer8BitAccess"] = static_cast(decoded_value.storageBuffer8BitAccess); - jdata["uniformAndStorageBuffer8BitAccess"] = static_cast(decoded_value.uniformAndStorageBuffer8BitAccess); - jdata["storagePushConstant8"] = static_cast(decoded_value.storagePushConstant8); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDriverProperties* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkPhysicalDeviceDriverProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDriverProperties& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["driverID"], decoded_value.driverID, options); - FieldToJson(jdata["driverName"], &meta_struct.driverName, options); - FieldToJson(jdata["driverInfo"], &meta_struct.driverInfo, options); - FieldToJson(jdata["conformanceVersion"], meta_struct.conformanceVersion, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderAtomicInt64Features* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkPhysicalDeviceShaderAtomicInt64Features& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderAtomicInt64Features& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderBufferInt64Atomics"] = static_cast(decoded_value.shaderBufferInt64Atomics); - jdata["shaderSharedInt64Atomics"] = static_cast(decoded_value.shaderSharedInt64Atomics); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderFloat16Int8Features* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassDescriptionDepthStencilResolve* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderFloat16Int8Features& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderFloat16Int8Features& meta_struct = *data; + const VkSubpassDescriptionDepthStencilResolve& decoded_value = *data->decoded_value; + const Decoded_VkSubpassDescriptionDepthStencilResolve& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderFloat16"] = static_cast(decoded_value.shaderFloat16); - jdata["shaderInt8"] = static_cast(decoded_value.shaderInt8); + FieldToJson(jdata["depthResolveMode"], decoded_value.depthResolveMode, options); + FieldToJson(jdata["stencilResolveMode"], decoded_value.stencilResolveMode, options); + FieldToJson(jdata["pDepthStencilResolveAttachment"], meta_struct.pDepthStencilResolveAttachment, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFloatControlsProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDepthStencilResolveProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFloatControlsProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFloatControlsProperties& meta_struct = *data; + const VkPhysicalDeviceDepthStencilResolveProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDepthStencilResolveProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["denormBehaviorIndependence"], decoded_value.denormBehaviorIndependence, options); - FieldToJson(jdata["roundingModeIndependence"], decoded_value.roundingModeIndependence, options); - jdata["shaderSignedZeroInfNanPreserveFloat16"] = static_cast(decoded_value.shaderSignedZeroInfNanPreserveFloat16); - jdata["shaderSignedZeroInfNanPreserveFloat32"] = static_cast(decoded_value.shaderSignedZeroInfNanPreserveFloat32); - jdata["shaderSignedZeroInfNanPreserveFloat64"] = static_cast(decoded_value.shaderSignedZeroInfNanPreserveFloat64); - jdata["shaderDenormPreserveFloat16"] = static_cast(decoded_value.shaderDenormPreserveFloat16); - jdata["shaderDenormPreserveFloat32"] = static_cast(decoded_value.shaderDenormPreserveFloat32); - jdata["shaderDenormPreserveFloat64"] = static_cast(decoded_value.shaderDenormPreserveFloat64); - jdata["shaderDenormFlushToZeroFloat16"] = static_cast(decoded_value.shaderDenormFlushToZeroFloat16); - jdata["shaderDenormFlushToZeroFloat32"] = static_cast(decoded_value.shaderDenormFlushToZeroFloat32); - jdata["shaderDenormFlushToZeroFloat64"] = static_cast(decoded_value.shaderDenormFlushToZeroFloat64); - jdata["shaderRoundingModeRTEFloat16"] = static_cast(decoded_value.shaderRoundingModeRTEFloat16); - jdata["shaderRoundingModeRTEFloat32"] = static_cast(decoded_value.shaderRoundingModeRTEFloat32); - jdata["shaderRoundingModeRTEFloat64"] = static_cast(decoded_value.shaderRoundingModeRTEFloat64); - jdata["shaderRoundingModeRTZFloat16"] = static_cast(decoded_value.shaderRoundingModeRTZFloat16); - jdata["shaderRoundingModeRTZFloat32"] = static_cast(decoded_value.shaderRoundingModeRTZFloat32); - jdata["shaderRoundingModeRTZFloat64"] = static_cast(decoded_value.shaderRoundingModeRTZFloat64); + FieldToJson(VkResolveModeFlags_t(),jdata["supportedDepthResolveModes"], decoded_value.supportedDepthResolveModes, options); + FieldToJson(VkResolveModeFlags_t(),jdata["supportedStencilResolveModes"], decoded_value.supportedStencilResolveModes, options); + jdata["independentResolveNone"] = static_cast(decoded_value.independentResolveNone); + jdata["independentResolve"] = static_cast(decoded_value.independentResolve); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutBindingFlagsCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageStencilUsageCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorSetLayoutBindingFlagsCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorSetLayoutBindingFlagsCreateInfo& meta_struct = *data; + const VkImageStencilUsageCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkImageStencilUsageCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["bindingCount"], decoded_value.bindingCount, options); - FieldToJson(jdata["pBindingFlags"], meta_struct.pBindingFlags, options); + FieldToJson(VkImageUsageFlags_t(),jdata["stencilUsage"], decoded_value.stencilUsage, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDescriptorIndexingFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImagelessFramebufferFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDescriptorIndexingFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDescriptorIndexingFeatures& meta_struct = *data; + const VkPhysicalDeviceImagelessFramebufferFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceImagelessFramebufferFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderInputAttachmentArrayDynamicIndexing"] = static_cast(decoded_value.shaderInputAttachmentArrayDynamicIndexing); - jdata["shaderUniformTexelBufferArrayDynamicIndexing"] = static_cast(decoded_value.shaderUniformTexelBufferArrayDynamicIndexing); - jdata["shaderStorageTexelBufferArrayDynamicIndexing"] = static_cast(decoded_value.shaderStorageTexelBufferArrayDynamicIndexing); - jdata["shaderUniformBufferArrayNonUniformIndexing"] = static_cast(decoded_value.shaderUniformBufferArrayNonUniformIndexing); - jdata["shaderSampledImageArrayNonUniformIndexing"] = static_cast(decoded_value.shaderSampledImageArrayNonUniformIndexing); - jdata["shaderStorageBufferArrayNonUniformIndexing"] = static_cast(decoded_value.shaderStorageBufferArrayNonUniformIndexing); - jdata["shaderStorageImageArrayNonUniformIndexing"] = static_cast(decoded_value.shaderStorageImageArrayNonUniformIndexing); - jdata["shaderInputAttachmentArrayNonUniformIndexing"] = static_cast(decoded_value.shaderInputAttachmentArrayNonUniformIndexing); - jdata["shaderUniformTexelBufferArrayNonUniformIndexing"] = static_cast(decoded_value.shaderUniformTexelBufferArrayNonUniformIndexing); - jdata["shaderStorageTexelBufferArrayNonUniformIndexing"] = static_cast(decoded_value.shaderStorageTexelBufferArrayNonUniformIndexing); - jdata["descriptorBindingUniformBufferUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingUniformBufferUpdateAfterBind); - jdata["descriptorBindingSampledImageUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingSampledImageUpdateAfterBind); - jdata["descriptorBindingStorageImageUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingStorageImageUpdateAfterBind); - jdata["descriptorBindingStorageBufferUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingStorageBufferUpdateAfterBind); - jdata["descriptorBindingUniformTexelBufferUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingUniformTexelBufferUpdateAfterBind); - jdata["descriptorBindingStorageTexelBufferUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingStorageTexelBufferUpdateAfterBind); - jdata["descriptorBindingUpdateUnusedWhilePending"] = static_cast(decoded_value.descriptorBindingUpdateUnusedWhilePending); - jdata["descriptorBindingPartiallyBound"] = static_cast(decoded_value.descriptorBindingPartiallyBound); - jdata["descriptorBindingVariableDescriptorCount"] = static_cast(decoded_value.descriptorBindingVariableDescriptorCount); - jdata["runtimeDescriptorArray"] = static_cast(decoded_value.runtimeDescriptorArray); + jdata["imagelessFramebuffer"] = static_cast(decoded_value.imagelessFramebuffer); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDescriptorIndexingProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFramebufferAttachmentImageInfo* data, const JsonOptions& options) { if (data && data->decoded_value) - { - const VkPhysicalDeviceDescriptorIndexingProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDescriptorIndexingProperties& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxUpdateAfterBindDescriptorsInAllPools"], decoded_value.maxUpdateAfterBindDescriptorsInAllPools, options); - jdata["shaderUniformBufferArrayNonUniformIndexingNative"] = static_cast(decoded_value.shaderUniformBufferArrayNonUniformIndexingNative); - jdata["shaderSampledImageArrayNonUniformIndexingNative"] = static_cast(decoded_value.shaderSampledImageArrayNonUniformIndexingNative); - jdata["shaderStorageBufferArrayNonUniformIndexingNative"] = static_cast(decoded_value.shaderStorageBufferArrayNonUniformIndexingNative); - jdata["shaderStorageImageArrayNonUniformIndexingNative"] = static_cast(decoded_value.shaderStorageImageArrayNonUniformIndexingNative); - jdata["shaderInputAttachmentArrayNonUniformIndexingNative"] = static_cast(decoded_value.shaderInputAttachmentArrayNonUniformIndexingNative); - jdata["robustBufferAccessUpdateAfterBind"] = static_cast(decoded_value.robustBufferAccessUpdateAfterBind); - jdata["quadDivergentImplicitLod"] = static_cast(decoded_value.quadDivergentImplicitLod); - FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindSamplers"], decoded_value.maxPerStageDescriptorUpdateAfterBindSamplers, options); - FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindUniformBuffers"], decoded_value.maxPerStageDescriptorUpdateAfterBindUniformBuffers, options); - FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindStorageBuffers"], decoded_value.maxPerStageDescriptorUpdateAfterBindStorageBuffers, options); - FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindSampledImages"], decoded_value.maxPerStageDescriptorUpdateAfterBindSampledImages, options); - FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindStorageImages"], decoded_value.maxPerStageDescriptorUpdateAfterBindStorageImages, options); - FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindInputAttachments"], decoded_value.maxPerStageDescriptorUpdateAfterBindInputAttachments, options); - FieldToJson(jdata["maxPerStageUpdateAfterBindResources"], decoded_value.maxPerStageUpdateAfterBindResources, options); - FieldToJson(jdata["maxDescriptorSetUpdateAfterBindSamplers"], decoded_value.maxDescriptorSetUpdateAfterBindSamplers, options); - FieldToJson(jdata["maxDescriptorSetUpdateAfterBindUniformBuffers"], decoded_value.maxDescriptorSetUpdateAfterBindUniformBuffers, options); - FieldToJson(jdata["maxDescriptorSetUpdateAfterBindUniformBuffersDynamic"], decoded_value.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic, options); - FieldToJson(jdata["maxDescriptorSetUpdateAfterBindStorageBuffers"], decoded_value.maxDescriptorSetUpdateAfterBindStorageBuffers, options); - FieldToJson(jdata["maxDescriptorSetUpdateAfterBindStorageBuffersDynamic"], decoded_value.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic, options); - FieldToJson(jdata["maxDescriptorSetUpdateAfterBindSampledImages"], decoded_value.maxDescriptorSetUpdateAfterBindSampledImages, options); - FieldToJson(jdata["maxDescriptorSetUpdateAfterBindStorageImages"], decoded_value.maxDescriptorSetUpdateAfterBindStorageImages, options); - FieldToJson(jdata["maxDescriptorSetUpdateAfterBindInputAttachments"], decoded_value.maxDescriptorSetUpdateAfterBindInputAttachments, options); + { + const VkFramebufferAttachmentImageInfo& decoded_value = *data->decoded_value; + const Decoded_VkFramebufferAttachmentImageInfo& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkImageCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(VkImageUsageFlags_t(),jdata["usage"], decoded_value.usage, options); + FieldToJson(jdata["width"], decoded_value.width, options); + FieldToJson(jdata["height"], decoded_value.height, options); + FieldToJson(jdata["layerCount"], decoded_value.layerCount, options); + FieldToJson(jdata["viewFormatCount"], decoded_value.viewFormatCount, options); + FieldToJson(jdata["pViewFormats"], meta_struct.pViewFormats, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetVariableDescriptorCountAllocateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFramebufferAttachmentsCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorSetVariableDescriptorCountAllocateInfo& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorSetVariableDescriptorCountAllocateInfo& meta_struct = *data; + const VkFramebufferAttachmentsCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkFramebufferAttachmentsCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["descriptorSetCount"], decoded_value.descriptorSetCount, options); - FieldToJson(jdata["pDescriptorCounts"], meta_struct.pDescriptorCounts, options); + FieldToJson(jdata["attachmentImageInfoCount"], decoded_value.attachmentImageInfoCount, options); + FieldToJson(jdata["pAttachmentImageInfos"], meta_struct.pAttachmentImageInfos, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetVariableDescriptorCountLayoutSupport* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassAttachmentBeginInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorSetVariableDescriptorCountLayoutSupport& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorSetVariableDescriptorCountLayoutSupport& meta_struct = *data; + const VkRenderPassAttachmentBeginInfo& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassAttachmentBeginInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxVariableDescriptorCount"], decoded_value.maxVariableDescriptorCount, options); + FieldToJson(jdata["attachmentCount"], decoded_value.attachmentCount, options); + HandleToJson(jdata["pAttachments"], &meta_struct.pAttachments, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassDescriptionDepthStencilResolve* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSubpassDescriptionDepthStencilResolve& decoded_value = *data->decoded_value; - const Decoded_VkSubpassDescriptionDepthStencilResolve& meta_struct = *data; + const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["depthResolveMode"], decoded_value.depthResolveMode, options); - FieldToJson(jdata["stencilResolveMode"], decoded_value.stencilResolveMode, options); - FieldToJson(jdata["pDepthStencilResolveAttachment"], meta_struct.pDepthStencilResolveAttachment, options); + jdata["separateDepthStencilLayouts"] = static_cast(decoded_value.separateDepthStencilLayouts); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDepthStencilResolveProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentReferenceStencilLayout* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDepthStencilResolveProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDepthStencilResolveProperties& meta_struct = *data; + const VkAttachmentReferenceStencilLayout& decoded_value = *data->decoded_value; + const Decoded_VkAttachmentReferenceStencilLayout& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkResolveModeFlags_t(),jdata["supportedDepthResolveModes"], decoded_value.supportedDepthResolveModes, options); - FieldToJson(VkResolveModeFlags_t(),jdata["supportedStencilResolveModes"], decoded_value.supportedStencilResolveModes, options); - jdata["independentResolveNone"] = static_cast(decoded_value.independentResolveNone); - jdata["independentResolve"] = static_cast(decoded_value.independentResolve); + FieldToJson(jdata["stencilLayout"], decoded_value.stencilLayout, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceScalarBlockLayoutFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentDescriptionStencilLayout* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceScalarBlockLayoutFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceScalarBlockLayoutFeatures& meta_struct = *data; + const VkAttachmentDescriptionStencilLayout& decoded_value = *data->decoded_value; + const Decoded_VkAttachmentDescriptionStencilLayout& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["scalarBlockLayout"] = static_cast(decoded_value.scalarBlockLayout); + FieldToJson(jdata["stencilInitialLayout"], decoded_value.stencilInitialLayout, options); + FieldToJson(jdata["stencilFinalLayout"], decoded_value.stencilFinalLayout, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageStencilUsageCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan13Features* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageStencilUsageCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkImageStencilUsageCreateInfo& meta_struct = *data; + const VkPhysicalDeviceVulkan13Features& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVulkan13Features& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkImageUsageFlags_t(),jdata["stencilUsage"], decoded_value.stencilUsage, options); + jdata["robustImageAccess"] = static_cast(decoded_value.robustImageAccess); + jdata["inlineUniformBlock"] = static_cast(decoded_value.inlineUniformBlock); + jdata["descriptorBindingInlineUniformBlockUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingInlineUniformBlockUpdateAfterBind); + jdata["pipelineCreationCacheControl"] = static_cast(decoded_value.pipelineCreationCacheControl); + jdata["privateData"] = static_cast(decoded_value.privateData); + jdata["shaderDemoteToHelperInvocation"] = static_cast(decoded_value.shaderDemoteToHelperInvocation); + jdata["shaderTerminateInvocation"] = static_cast(decoded_value.shaderTerminateInvocation); + jdata["subgroupSizeControl"] = static_cast(decoded_value.subgroupSizeControl); + jdata["computeFullSubgroups"] = static_cast(decoded_value.computeFullSubgroups); + jdata["synchronization2"] = static_cast(decoded_value.synchronization2); + jdata["textureCompressionASTC_HDR"] = static_cast(decoded_value.textureCompressionASTC_HDR); + jdata["shaderZeroInitializeWorkgroupMemory"] = static_cast(decoded_value.shaderZeroInitializeWorkgroupMemory); + jdata["dynamicRendering"] = static_cast(decoded_value.dynamicRendering); + jdata["shaderIntegerDotProduct"] = static_cast(decoded_value.shaderIntegerDotProduct); + jdata["maintenance4"] = static_cast(decoded_value.maintenance4); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerReductionModeCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan13Properties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSamplerReductionModeCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkSamplerReductionModeCreateInfo& meta_struct = *data; + const VkPhysicalDeviceVulkan13Properties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVulkan13Properties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["reductionMode"], decoded_value.reductionMode, options); + FieldToJson(jdata["minSubgroupSize"], decoded_value.minSubgroupSize, options); + FieldToJson(jdata["maxSubgroupSize"], decoded_value.maxSubgroupSize, options); + FieldToJson(jdata["maxComputeWorkgroupSubgroups"], decoded_value.maxComputeWorkgroupSubgroups, options); + FieldToJson(VkShaderStageFlags_t(),jdata["requiredSubgroupSizeStages"], decoded_value.requiredSubgroupSizeStages, options); + FieldToJson(jdata["maxInlineUniformBlockSize"], decoded_value.maxInlineUniformBlockSize, options); + FieldToJson(jdata["maxPerStageDescriptorInlineUniformBlocks"], decoded_value.maxPerStageDescriptorInlineUniformBlocks, options); + FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks"], decoded_value.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks, options); + FieldToJson(jdata["maxDescriptorSetInlineUniformBlocks"], decoded_value.maxDescriptorSetInlineUniformBlocks, options); + FieldToJson(jdata["maxDescriptorSetUpdateAfterBindInlineUniformBlocks"], decoded_value.maxDescriptorSetUpdateAfterBindInlineUniformBlocks, options); + FieldToJson(jdata["maxInlineUniformTotalSize"], decoded_value.maxInlineUniformTotalSize, options); + jdata["integerDotProduct8BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct8BitUnsignedAccelerated); + jdata["integerDotProduct8BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct8BitSignedAccelerated); + jdata["integerDotProduct8BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct8BitMixedSignednessAccelerated); + jdata["integerDotProduct4x8BitPackedUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct4x8BitPackedUnsignedAccelerated); + jdata["integerDotProduct4x8BitPackedSignedAccelerated"] = static_cast(decoded_value.integerDotProduct4x8BitPackedSignedAccelerated); + jdata["integerDotProduct4x8BitPackedMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct4x8BitPackedMixedSignednessAccelerated); + jdata["integerDotProduct16BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct16BitUnsignedAccelerated); + jdata["integerDotProduct16BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct16BitSignedAccelerated); + jdata["integerDotProduct16BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct16BitMixedSignednessAccelerated); + jdata["integerDotProduct32BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct32BitUnsignedAccelerated); + jdata["integerDotProduct32BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct32BitSignedAccelerated); + jdata["integerDotProduct32BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct32BitMixedSignednessAccelerated); + jdata["integerDotProduct64BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct64BitUnsignedAccelerated); + jdata["integerDotProduct64BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct64BitSignedAccelerated); + jdata["integerDotProduct64BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct64BitMixedSignednessAccelerated); + jdata["integerDotProductAccumulatingSaturating8BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated); + jdata["integerDotProductAccumulatingSaturating8BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating8BitSignedAccelerated); + jdata["integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated); + jdata["integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated); + jdata["integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated); + jdata["integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated); + jdata["integerDotProductAccumulatingSaturating16BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated); + jdata["integerDotProductAccumulatingSaturating16BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating16BitSignedAccelerated); + jdata["integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated); + jdata["integerDotProductAccumulatingSaturating32BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated); + jdata["integerDotProductAccumulatingSaturating32BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating32BitSignedAccelerated); + jdata["integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated); + jdata["integerDotProductAccumulatingSaturating64BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated); + jdata["integerDotProductAccumulatingSaturating64BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating64BitSignedAccelerated); + jdata["integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated); + FieldToJson(jdata["storageTexelBufferOffsetAlignmentBytes"], decoded_value.storageTexelBufferOffsetAlignmentBytes, options); + jdata["storageTexelBufferOffsetSingleTexelAlignment"] = static_cast(decoded_value.storageTexelBufferOffsetSingleTexelAlignment); + FieldToJson(jdata["uniformTexelBufferOffsetAlignmentBytes"], decoded_value.uniformTexelBufferOffsetAlignmentBytes, options); + jdata["uniformTexelBufferOffsetSingleTexelAlignment"] = static_cast(decoded_value.uniformTexelBufferOffsetSingleTexelAlignment); + FieldToJson(jdata["maxBufferSize"], decoded_value.maxBufferSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSamplerFilterMinmaxProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceToolProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSamplerFilterMinmaxProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSamplerFilterMinmaxProperties& meta_struct = *data; + const VkPhysicalDeviceToolProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceToolProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["filterMinmaxSingleComponentFormats"] = static_cast(decoded_value.filterMinmaxSingleComponentFormats); - jdata["filterMinmaxImageComponentMapping"] = static_cast(decoded_value.filterMinmaxImageComponentMapping); + FieldToJson(jdata["name"], &meta_struct.name, options); + FieldToJson(jdata["version"], &meta_struct.version, options); + FieldToJson(VkToolPurposeFlags_t(),jdata["purposes"], decoded_value.purposes, options); + FieldToJson(jdata["description"], &meta_struct.description, options); + FieldToJson(jdata["layer"], &meta_struct.layer, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePrivateDataFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVulkanMemoryModelFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures& meta_struct = *data; + const VkPhysicalDevicePrivateDataFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePrivateDataFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["vulkanMemoryModel"] = static_cast(decoded_value.vulkanMemoryModel); - jdata["vulkanMemoryModelDeviceScope"] = static_cast(decoded_value.vulkanMemoryModelDeviceScope); - jdata["vulkanMemoryModelAvailabilityVisibilityChains"] = static_cast(decoded_value.vulkanMemoryModelAvailabilityVisibilityChains); + jdata["privateData"] = static_cast(decoded_value.privateData); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImagelessFramebufferFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDevicePrivateDataCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceImagelessFramebufferFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceImagelessFramebufferFeatures& meta_struct = *data; + const VkDevicePrivateDataCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkDevicePrivateDataCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["imagelessFramebuffer"] = static_cast(decoded_value.imagelessFramebuffer); + FieldToJson(jdata["privateDataSlotRequestCount"], decoded_value.privateDataSlotRequestCount, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFramebufferAttachmentImageInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPrivateDataSlotCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkFramebufferAttachmentImageInfo& decoded_value = *data->decoded_value; - const Decoded_VkFramebufferAttachmentImageInfo& meta_struct = *data; + const VkPrivateDataSlotCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPrivateDataSlotCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkImageCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(VkImageUsageFlags_t(),jdata["usage"], decoded_value.usage, options); - FieldToJson(jdata["width"], decoded_value.width, options); - FieldToJson(jdata["height"], decoded_value.height, options); - FieldToJson(jdata["layerCount"], decoded_value.layerCount, options); - FieldToJson(jdata["viewFormatCount"], decoded_value.viewFormatCount, options); - FieldToJson(jdata["pViewFormats"], meta_struct.pViewFormats, options); + FieldToJson(VkPrivateDataSlotCreateFlags_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFramebufferAttachmentsCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryBarrier2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkFramebufferAttachmentsCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkFramebufferAttachmentsCreateInfo& meta_struct = *data; + const VkMemoryBarrier2& decoded_value = *data->decoded_value; + const Decoded_VkMemoryBarrier2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["attachmentImageInfoCount"], decoded_value.attachmentImageInfoCount, options); - FieldToJson(jdata["pAttachmentImageInfos"], meta_struct.pAttachmentImageInfos, options); + FieldToJson(VkPipelineStageFlags2_t(),jdata["srcStageMask"], decoded_value.srcStageMask, options); + FieldToJson(VkAccessFlags2_t(),jdata["srcAccessMask"], decoded_value.srcAccessMask, options); + FieldToJson(VkPipelineStageFlags2_t(),jdata["dstStageMask"], decoded_value.dstStageMask, options); + FieldToJson(VkAccessFlags2_t(),jdata["dstAccessMask"], decoded_value.dstAccessMask, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassAttachmentBeginInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferMemoryBarrier2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassAttachmentBeginInfo& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassAttachmentBeginInfo& meta_struct = *data; + const VkBufferMemoryBarrier2& decoded_value = *data->decoded_value; + const Decoded_VkBufferMemoryBarrier2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["attachmentCount"], decoded_value.attachmentCount, options); - HandleToJson(jdata["pAttachments"], &meta_struct.pAttachments, options); + FieldToJson(VkPipelineStageFlags2_t(),jdata["srcStageMask"], decoded_value.srcStageMask, options); + FieldToJson(VkAccessFlags2_t(),jdata["srcAccessMask"], decoded_value.srcAccessMask, options); + FieldToJson(VkPipelineStageFlags2_t(),jdata["dstStageMask"], decoded_value.dstStageMask, options); + FieldToJson(VkAccessFlags2_t(),jdata["dstAccessMask"], decoded_value.dstAccessMask, options); + FieldToJson(jdata["srcQueueFamilyIndex"], decoded_value.srcQueueFamilyIndex, options); + FieldToJson(jdata["dstQueueFamilyIndex"], decoded_value.dstQueueFamilyIndex, options); + HandleToJson(jdata["buffer"], meta_struct.buffer, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(jdata["size"], decoded_value.size, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageMemoryBarrier2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceUniformBufferStandardLayoutFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures& meta_struct = *data; + const VkImageMemoryBarrier2& decoded_value = *data->decoded_value; + const Decoded_VkImageMemoryBarrier2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["uniformBufferStandardLayout"] = static_cast(decoded_value.uniformBufferStandardLayout); + FieldToJson(VkPipelineStageFlags2_t(),jdata["srcStageMask"], decoded_value.srcStageMask, options); + FieldToJson(VkAccessFlags2_t(),jdata["srcAccessMask"], decoded_value.srcAccessMask, options); + FieldToJson(VkPipelineStageFlags2_t(),jdata["dstStageMask"], decoded_value.dstStageMask, options); + FieldToJson(VkAccessFlags2_t(),jdata["dstAccessMask"], decoded_value.dstAccessMask, options); + FieldToJson(jdata["oldLayout"], decoded_value.oldLayout, options); + FieldToJson(jdata["newLayout"], decoded_value.newLayout, options); + FieldToJson(jdata["srcQueueFamilyIndex"], decoded_value.srcQueueFamilyIndex, options); + FieldToJson(jdata["dstQueueFamilyIndex"], decoded_value.dstQueueFamilyIndex, options); + HandleToJson(jdata["image"], meta_struct.image, options); + FieldToJson(jdata["subresourceRange"], meta_struct.subresourceRange, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDependencyInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures& meta_struct = *data; + const VkDependencyInfo& decoded_value = *data->decoded_value; + const Decoded_VkDependencyInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderSubgroupExtendedTypes"] = static_cast(decoded_value.shaderSubgroupExtendedTypes); + FieldToJson(VkDependencyFlags_t(),jdata["dependencyFlags"], decoded_value.dependencyFlags, options); + FieldToJson(jdata["memoryBarrierCount"], decoded_value.memoryBarrierCount, options); + FieldToJson(jdata["pMemoryBarriers"], meta_struct.pMemoryBarriers, options); + FieldToJson(jdata["bufferMemoryBarrierCount"], decoded_value.bufferMemoryBarrierCount, options); + FieldToJson(jdata["pBufferMemoryBarriers"], meta_struct.pBufferMemoryBarriers, options); + FieldToJson(jdata["imageMemoryBarrierCount"], decoded_value.imageMemoryBarrierCount, options); + FieldToJson(jdata["pImageMemoryBarriers"], meta_struct.pImageMemoryBarriers, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreSubmitInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures& meta_struct = *data; + const VkSemaphoreSubmitInfo& decoded_value = *data->decoded_value; + const Decoded_VkSemaphoreSubmitInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["separateDepthStencilLayouts"] = static_cast(decoded_value.separateDepthStencilLayouts); + HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); + FieldToJson(jdata["value"], decoded_value.value, options); + FieldToJson(VkPipelineStageFlags2_t(),jdata["stageMask"], decoded_value.stageMask, options); + FieldToJson(jdata["deviceIndex"], decoded_value.deviceIndex, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentReferenceStencilLayout* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferSubmitInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAttachmentReferenceStencilLayout& decoded_value = *data->decoded_value; - const Decoded_VkAttachmentReferenceStencilLayout& meta_struct = *data; + const VkCommandBufferSubmitInfo& decoded_value = *data->decoded_value; + const Decoded_VkCommandBufferSubmitInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stencilLayout"], decoded_value.stencilLayout, options); + HandleToJson(jdata["commandBuffer"], meta_struct.commandBuffer, options); + FieldToJson(jdata["deviceMask"], decoded_value.deviceMask, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentDescriptionStencilLayout* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubmitInfo2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAttachmentDescriptionStencilLayout& decoded_value = *data->decoded_value; - const Decoded_VkAttachmentDescriptionStencilLayout& meta_struct = *data; + const VkSubmitInfo2& decoded_value = *data->decoded_value; + const Decoded_VkSubmitInfo2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stencilInitialLayout"], decoded_value.stencilInitialLayout, options); - FieldToJson(jdata["stencilFinalLayout"], decoded_value.stencilFinalLayout, options); + FieldToJson(VkSubmitFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["waitSemaphoreInfoCount"], decoded_value.waitSemaphoreInfoCount, options); + FieldToJson(jdata["pWaitSemaphoreInfos"], meta_struct.pWaitSemaphoreInfos, options); + FieldToJson(jdata["commandBufferInfoCount"], decoded_value.commandBufferInfoCount, options); + FieldToJson(jdata["pCommandBufferInfos"], meta_struct.pCommandBufferInfos, options); + FieldToJson(jdata["signalSemaphoreInfoCount"], decoded_value.signalSemaphoreInfoCount, options); + FieldToJson(jdata["pSignalSemaphoreInfos"], meta_struct.pSignalSemaphoreInfos, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceHostQueryResetFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSynchronization2Features* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceHostQueryResetFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceHostQueryResetFeatures& meta_struct = *data; + const VkPhysicalDeviceSynchronization2Features& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSynchronization2Features& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["hostQueryReset"] = static_cast(decoded_value.hostQueryReset); + jdata["synchronization2"] = static_cast(decoded_value.synchronization2); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferCopy2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceTimelineSemaphoreFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures& meta_struct = *data; + const VkBufferCopy2& decoded_value = *data->decoded_value; + const Decoded_VkBufferCopy2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["timelineSemaphore"] = static_cast(decoded_value.timelineSemaphore); + FieldToJson(jdata["srcOffset"], decoded_value.srcOffset, options); + FieldToJson(jdata["dstOffset"], decoded_value.dstOffset, options); + FieldToJson(jdata["size"], decoded_value.size, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTimelineSemaphoreProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyBufferInfo2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceTimelineSemaphoreProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceTimelineSemaphoreProperties& meta_struct = *data; + const VkCopyBufferInfo2& decoded_value = *data->decoded_value; + const Decoded_VkCopyBufferInfo2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxTimelineSemaphoreValueDifference"], decoded_value.maxTimelineSemaphoreValueDifference, options); + HandleToJson(jdata["srcBuffer"], meta_struct.srcBuffer, options); + HandleToJson(jdata["dstBuffer"], meta_struct.dstBuffer, options); + FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); + FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreTypeCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCopy2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSemaphoreTypeCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkSemaphoreTypeCreateInfo& meta_struct = *data; + const VkImageCopy2& decoded_value = *data->decoded_value; + const Decoded_VkImageCopy2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["semaphoreType"], decoded_value.semaphoreType, options); - FieldToJson(jdata["initialValue"], decoded_value.initialValue, options); + FieldToJson(jdata["srcSubresource"], meta_struct.srcSubresource, options); + FieldToJson(jdata["srcOffset"], meta_struct.srcOffset, options); + FieldToJson(jdata["dstSubresource"], meta_struct.dstSubresource, options); + FieldToJson(jdata["dstOffset"], meta_struct.dstOffset, options); + FieldToJson(jdata["extent"], meta_struct.extent, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTimelineSemaphoreSubmitInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyImageInfo2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkTimelineSemaphoreSubmitInfo& decoded_value = *data->decoded_value; - const Decoded_VkTimelineSemaphoreSubmitInfo& meta_struct = *data; + const VkCopyImageInfo2& decoded_value = *data->decoded_value; + const Decoded_VkCopyImageInfo2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["waitSemaphoreValueCount"], decoded_value.waitSemaphoreValueCount, options); - FieldToJson(jdata["pWaitSemaphoreValues"], meta_struct.pWaitSemaphoreValues, options); - FieldToJson(jdata["signalSemaphoreValueCount"], decoded_value.signalSemaphoreValueCount, options); - FieldToJson(jdata["pSignalSemaphoreValues"], meta_struct.pSignalSemaphoreValues, options); + HandleToJson(jdata["srcImage"], meta_struct.srcImage, options); + FieldToJson(jdata["srcImageLayout"], decoded_value.srcImageLayout, options); + HandleToJson(jdata["dstImage"], meta_struct.dstImage, options); + FieldToJson(jdata["dstImageLayout"], decoded_value.dstImageLayout, options); + FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); + FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreWaitInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferImageCopy2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSemaphoreWaitInfo& decoded_value = *data->decoded_value; - const Decoded_VkSemaphoreWaitInfo& meta_struct = *data; + const VkBufferImageCopy2& decoded_value = *data->decoded_value; + const Decoded_VkBufferImageCopy2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkSemaphoreWaitFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["semaphoreCount"], decoded_value.semaphoreCount, options); - HandleToJson(jdata["pSemaphores"], &meta_struct.pSemaphores, options); - FieldToJson(jdata["pValues"], meta_struct.pValues, options); + FieldToJson(jdata["bufferOffset"], decoded_value.bufferOffset, options); + FieldToJson(jdata["bufferRowLength"], decoded_value.bufferRowLength, options); + FieldToJson(jdata["bufferImageHeight"], decoded_value.bufferImageHeight, options); + FieldToJson(jdata["imageSubresource"], meta_struct.imageSubresource, options); + FieldToJson(jdata["imageOffset"], meta_struct.imageOffset, options); + FieldToJson(jdata["imageExtent"], meta_struct.imageExtent, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreSignalInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyBufferToImageInfo2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSemaphoreSignalInfo& decoded_value = *data->decoded_value; - const Decoded_VkSemaphoreSignalInfo& meta_struct = *data; + const VkCopyBufferToImageInfo2& decoded_value = *data->decoded_value; + const Decoded_VkCopyBufferToImageInfo2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); - FieldToJson(jdata["value"], decoded_value.value, options); + HandleToJson(jdata["srcBuffer"], meta_struct.srcBuffer, options); + HandleToJson(jdata["dstImage"], meta_struct.dstImage, options); + FieldToJson(jdata["dstImageLayout"], decoded_value.dstImageLayout, options); + FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); + FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyImageToBufferInfo2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceBufferDeviceAddressFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures& meta_struct = *data; + const VkCopyImageToBufferInfo2& decoded_value = *data->decoded_value; + const Decoded_VkCopyImageToBufferInfo2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["bufferDeviceAddress"] = static_cast(decoded_value.bufferDeviceAddress); - jdata["bufferDeviceAddressCaptureReplay"] = static_cast(decoded_value.bufferDeviceAddressCaptureReplay); - jdata["bufferDeviceAddressMultiDevice"] = static_cast(decoded_value.bufferDeviceAddressMultiDevice); + HandleToJson(jdata["srcImage"], meta_struct.srcImage, options); + FieldToJson(jdata["srcImageLayout"], decoded_value.srcImageLayout, options); + HandleToJson(jdata["dstBuffer"], meta_struct.dstBuffer, options); + FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); + FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferDeviceAddressInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBufferDeviceAddressInfo& decoded_value = *data->decoded_value; - const Decoded_VkBufferDeviceAddressInfo& meta_struct = *data; + const VkPhysicalDeviceTextureCompressionASTCHDRFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["buffer"], meta_struct.buffer, options); + jdata["textureCompressionASTC_HDR"] = static_cast(decoded_value.textureCompressionASTC_HDR); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferOpaqueCaptureAddressCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFormatProperties3* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBufferOpaqueCaptureAddressCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkBufferOpaqueCaptureAddressCreateInfo& meta_struct = *data; + const VkFormatProperties3& decoded_value = *data->decoded_value; + const Decoded_VkFormatProperties3& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["opaqueCaptureAddress"], decoded_value.opaqueCaptureAddress, options); + FieldToJson(VkFormatFeatureFlags2_t(),jdata["linearTilingFeatures"], decoded_value.linearTilingFeatures, options); + FieldToJson(VkFormatFeatureFlags2_t(),jdata["optimalTilingFeatures"], decoded_value.optimalTilingFeatures, options); + FieldToJson(VkFormatFeatureFlags2_t(),jdata["bufferFeatures"], decoded_value.bufferFeatures, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance4Features* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryOpaqueCaptureAddressAllocateInfo& decoded_value = *data->decoded_value; - const Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo& meta_struct = *data; + const VkPhysicalDeviceMaintenance4Features& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMaintenance4Features& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["opaqueCaptureAddress"], decoded_value.opaqueCaptureAddress, options); + jdata["maintenance4"] = static_cast(decoded_value.maintenance4); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance4Properties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceMemoryOpaqueCaptureAddressInfo& decoded_value = *data->decoded_value; - const Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo& meta_struct = *data; + const VkPhysicalDeviceMaintenance4Properties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMaintenance4Properties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["maxBufferSize"], decoded_value.maxBufferSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan13Features* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceBufferMemoryRequirements* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVulkan13Features& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVulkan13Features& meta_struct = *data; + const VkDeviceBufferMemoryRequirements& decoded_value = *data->decoded_value; + const Decoded_VkDeviceBufferMemoryRequirements& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["robustImageAccess"] = static_cast(decoded_value.robustImageAccess); - jdata["inlineUniformBlock"] = static_cast(decoded_value.inlineUniformBlock); - jdata["descriptorBindingInlineUniformBlockUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingInlineUniformBlockUpdateAfterBind); - jdata["pipelineCreationCacheControl"] = static_cast(decoded_value.pipelineCreationCacheControl); - jdata["privateData"] = static_cast(decoded_value.privateData); - jdata["shaderDemoteToHelperInvocation"] = static_cast(decoded_value.shaderDemoteToHelperInvocation); - jdata["shaderTerminateInvocation"] = static_cast(decoded_value.shaderTerminateInvocation); - jdata["subgroupSizeControl"] = static_cast(decoded_value.subgroupSizeControl); - jdata["computeFullSubgroups"] = static_cast(decoded_value.computeFullSubgroups); - jdata["synchronization2"] = static_cast(decoded_value.synchronization2); - jdata["textureCompressionASTC_HDR"] = static_cast(decoded_value.textureCompressionASTC_HDR); - jdata["shaderZeroInitializeWorkgroupMemory"] = static_cast(decoded_value.shaderZeroInitializeWorkgroupMemory); - jdata["dynamicRendering"] = static_cast(decoded_value.dynamicRendering); - jdata["shaderIntegerDotProduct"] = static_cast(decoded_value.shaderIntegerDotProduct); - jdata["maintenance4"] = static_cast(decoded_value.maintenance4); + FieldToJson(jdata["pCreateInfo"], meta_struct.pCreateInfo, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan13Properties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceImageMemoryRequirements* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVulkan13Properties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVulkan13Properties& meta_struct = *data; + const VkDeviceImageMemoryRequirements& decoded_value = *data->decoded_value; + const Decoded_VkDeviceImageMemoryRequirements& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["minSubgroupSize"], decoded_value.minSubgroupSize, options); - FieldToJson(jdata["maxSubgroupSize"], decoded_value.maxSubgroupSize, options); - FieldToJson(jdata["maxComputeWorkgroupSubgroups"], decoded_value.maxComputeWorkgroupSubgroups, options); - FieldToJson(VkShaderStageFlags_t(),jdata["requiredSubgroupSizeStages"], decoded_value.requiredSubgroupSizeStages, options); - FieldToJson(jdata["maxInlineUniformBlockSize"], decoded_value.maxInlineUniformBlockSize, options); - FieldToJson(jdata["maxPerStageDescriptorInlineUniformBlocks"], decoded_value.maxPerStageDescriptorInlineUniformBlocks, options); - FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks"], decoded_value.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks, options); - FieldToJson(jdata["maxDescriptorSetInlineUniformBlocks"], decoded_value.maxDescriptorSetInlineUniformBlocks, options); - FieldToJson(jdata["maxDescriptorSetUpdateAfterBindInlineUniformBlocks"], decoded_value.maxDescriptorSetUpdateAfterBindInlineUniformBlocks, options); - FieldToJson(jdata["maxInlineUniformTotalSize"], decoded_value.maxInlineUniformTotalSize, options); - jdata["integerDotProduct8BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct8BitUnsignedAccelerated); - jdata["integerDotProduct8BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct8BitSignedAccelerated); - jdata["integerDotProduct8BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct8BitMixedSignednessAccelerated); - jdata["integerDotProduct4x8BitPackedUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct4x8BitPackedUnsignedAccelerated); - jdata["integerDotProduct4x8BitPackedSignedAccelerated"] = static_cast(decoded_value.integerDotProduct4x8BitPackedSignedAccelerated); - jdata["integerDotProduct4x8BitPackedMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct4x8BitPackedMixedSignednessAccelerated); - jdata["integerDotProduct16BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct16BitUnsignedAccelerated); - jdata["integerDotProduct16BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct16BitSignedAccelerated); - jdata["integerDotProduct16BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct16BitMixedSignednessAccelerated); - jdata["integerDotProduct32BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct32BitUnsignedAccelerated); - jdata["integerDotProduct32BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct32BitSignedAccelerated); - jdata["integerDotProduct32BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct32BitMixedSignednessAccelerated); - jdata["integerDotProduct64BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct64BitUnsignedAccelerated); - jdata["integerDotProduct64BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct64BitSignedAccelerated); - jdata["integerDotProduct64BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct64BitMixedSignednessAccelerated); - jdata["integerDotProductAccumulatingSaturating8BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated); - jdata["integerDotProductAccumulatingSaturating8BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating8BitSignedAccelerated); - jdata["integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated); - jdata["integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated); - jdata["integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated); - jdata["integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated); - jdata["integerDotProductAccumulatingSaturating16BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated); - jdata["integerDotProductAccumulatingSaturating16BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating16BitSignedAccelerated); - jdata["integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated); - jdata["integerDotProductAccumulatingSaturating32BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated); - jdata["integerDotProductAccumulatingSaturating32BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating32BitSignedAccelerated); - jdata["integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated); - jdata["integerDotProductAccumulatingSaturating64BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated); - jdata["integerDotProductAccumulatingSaturating64BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating64BitSignedAccelerated); - jdata["integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated); - FieldToJson(jdata["storageTexelBufferOffsetAlignmentBytes"], decoded_value.storageTexelBufferOffsetAlignmentBytes, options); - jdata["storageTexelBufferOffsetSingleTexelAlignment"] = static_cast(decoded_value.storageTexelBufferOffsetSingleTexelAlignment); - FieldToJson(jdata["uniformTexelBufferOffsetAlignmentBytes"], decoded_value.uniformTexelBufferOffsetAlignmentBytes, options); - jdata["uniformTexelBufferOffsetSingleTexelAlignment"] = static_cast(decoded_value.uniformTexelBufferOffsetSingleTexelAlignment); - FieldToJson(jdata["maxBufferSize"], decoded_value.maxBufferSize, options); + FieldToJson(jdata["pCreateInfo"], meta_struct.pCreateInfo, options); + FieldToJson(jdata["planeAspect"], decoded_value.planeAspect, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } @@ -5627,950 +5315,953 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCreation const Decoded_VkPipelineCreationFeedbackCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pPipelineCreationFeedback"], meta_struct.pPipelineCreationFeedback, options); - FieldToJson(jdata["pipelineStageCreationFeedbackCount"], decoded_value.pipelineStageCreationFeedbackCount, options); - FieldToJson(jdata["pPipelineStageCreationFeedbacks"], meta_struct.pPipelineStageCreationFeedbacks, options); + FieldToJson(jdata["pPipelineCreationFeedback"], meta_struct.pPipelineCreationFeedback, options); + FieldToJson(jdata["pipelineStageCreationFeedbackCount"], decoded_value.pipelineStageCreationFeedbackCount, options); + FieldToJson(jdata["pPipelineStageCreationFeedbacks"], meta_struct.pPipelineStageCreationFeedbacks, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceShaderTerminateInvocationFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["shaderTerminateInvocation"] = static_cast(decoded_value.shaderTerminateInvocation); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["shaderDemoteToHelperInvocation"] = static_cast(decoded_value.shaderDemoteToHelperInvocation); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderTerminateInvocationFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures& meta_struct = *data; + const VkPhysicalDevicePipelineCreationCacheControlFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderTerminateInvocation"] = static_cast(decoded_value.shaderTerminateInvocation); + jdata["pipelineCreationCacheControl"] = static_cast(decoded_value.pipelineCreationCacheControl); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceToolProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceToolProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceToolProperties& meta_struct = *data; + const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["name"], &meta_struct.name, options); - FieldToJson(jdata["version"], &meta_struct.version, options); - FieldToJson(VkToolPurposeFlags_t(),jdata["purposes"], decoded_value.purposes, options); - FieldToJson(jdata["description"], &meta_struct.description, options); - FieldToJson(jdata["layer"], &meta_struct.layer, options); + jdata["shaderZeroInitializeWorkgroupMemory"] = static_cast(decoded_value.shaderZeroInitializeWorkgroupMemory); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageRobustnessFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures& meta_struct = *data; + const VkPhysicalDeviceImageRobustnessFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceImageRobustnessFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderDemoteToHelperInvocation"] = static_cast(decoded_value.shaderDemoteToHelperInvocation); + jdata["robustImageAccess"] = static_cast(decoded_value.robustImageAccess); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePrivateDataFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSubgroupSizeControlFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePrivateDataFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePrivateDataFeatures& meta_struct = *data; + const VkPhysicalDeviceSubgroupSizeControlFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSubgroupSizeControlFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["privateData"] = static_cast(decoded_value.privateData); + jdata["subgroupSizeControl"] = static_cast(decoded_value.subgroupSizeControl); + jdata["computeFullSubgroups"] = static_cast(decoded_value.computeFullSubgroups); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDevicePrivateDataCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSubgroupSizeControlProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDevicePrivateDataCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkDevicePrivateDataCreateInfo& meta_struct = *data; + const VkPhysicalDeviceSubgroupSizeControlProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSubgroupSizeControlProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["privateDataSlotRequestCount"], decoded_value.privateDataSlotRequestCount, options); + FieldToJson(jdata["minSubgroupSize"], decoded_value.minSubgroupSize, options); + FieldToJson(jdata["maxSubgroupSize"], decoded_value.maxSubgroupSize, options); + FieldToJson(jdata["maxComputeWorkgroupSubgroups"], decoded_value.maxComputeWorkgroupSubgroups, options); + FieldToJson(VkShaderStageFlags_t(),jdata["requiredSubgroupSizeStages"], decoded_value.requiredSubgroupSizeStages, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPrivateDataSlotCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPrivateDataSlotCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPrivateDataSlotCreateInfo& meta_struct = *data; + const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPrivateDataSlotCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["requiredSubgroupSize"], decoded_value.requiredSubgroupSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceInlineUniformBlockFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePipelineCreationCacheControlFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures& meta_struct = *data; + const VkPhysicalDeviceInlineUniformBlockFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceInlineUniformBlockFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["pipelineCreationCacheControl"] = static_cast(decoded_value.pipelineCreationCacheControl); + jdata["inlineUniformBlock"] = static_cast(decoded_value.inlineUniformBlock); + jdata["descriptorBindingInlineUniformBlockUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingInlineUniformBlockUpdateAfterBind); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryBarrier2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceInlineUniformBlockProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryBarrier2& decoded_value = *data->decoded_value; - const Decoded_VkMemoryBarrier2& meta_struct = *data; + const VkPhysicalDeviceInlineUniformBlockProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceInlineUniformBlockProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineStageFlags2_t(),jdata["srcStageMask"], decoded_value.srcStageMask, options); - FieldToJson(VkAccessFlags2_t(),jdata["srcAccessMask"], decoded_value.srcAccessMask, options); - FieldToJson(VkPipelineStageFlags2_t(),jdata["dstStageMask"], decoded_value.dstStageMask, options); - FieldToJson(VkAccessFlags2_t(),jdata["dstAccessMask"], decoded_value.dstAccessMask, options); + FieldToJson(jdata["maxInlineUniformBlockSize"], decoded_value.maxInlineUniformBlockSize, options); + FieldToJson(jdata["maxPerStageDescriptorInlineUniformBlocks"], decoded_value.maxPerStageDescriptorInlineUniformBlocks, options); + FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks"], decoded_value.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks, options); + FieldToJson(jdata["maxDescriptorSetInlineUniformBlocks"], decoded_value.maxDescriptorSetInlineUniformBlocks, options); + FieldToJson(jdata["maxDescriptorSetUpdateAfterBindInlineUniformBlocks"], decoded_value.maxDescriptorSetUpdateAfterBindInlineUniformBlocks, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferMemoryBarrier2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWriteDescriptorSetInlineUniformBlock* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBufferMemoryBarrier2& decoded_value = *data->decoded_value; - const Decoded_VkBufferMemoryBarrier2& meta_struct = *data; + const VkWriteDescriptorSetInlineUniformBlock& decoded_value = *data->decoded_value; + const Decoded_VkWriteDescriptorSetInlineUniformBlock& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineStageFlags2_t(),jdata["srcStageMask"], decoded_value.srcStageMask, options); - FieldToJson(VkAccessFlags2_t(),jdata["srcAccessMask"], decoded_value.srcAccessMask, options); - FieldToJson(VkPipelineStageFlags2_t(),jdata["dstStageMask"], decoded_value.dstStageMask, options); - FieldToJson(VkAccessFlags2_t(),jdata["dstAccessMask"], decoded_value.dstAccessMask, options); - FieldToJson(jdata["srcQueueFamilyIndex"], decoded_value.srcQueueFamilyIndex, options); - FieldToJson(jdata["dstQueueFamilyIndex"], decoded_value.dstQueueFamilyIndex, options); - HandleToJson(jdata["buffer"], meta_struct.buffer, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); - FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["dataSize"], decoded_value.dataSize, options); + FieldToJson(jdata["pData"], meta_struct.pData, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageMemoryBarrier2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorPoolInlineUniformBlockCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageMemoryBarrier2& decoded_value = *data->decoded_value; - const Decoded_VkImageMemoryBarrier2& meta_struct = *data; + const VkDescriptorPoolInlineUniformBlockCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorPoolInlineUniformBlockCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineStageFlags2_t(),jdata["srcStageMask"], decoded_value.srcStageMask, options); - FieldToJson(VkAccessFlags2_t(),jdata["srcAccessMask"], decoded_value.srcAccessMask, options); - FieldToJson(VkPipelineStageFlags2_t(),jdata["dstStageMask"], decoded_value.dstStageMask, options); - FieldToJson(VkAccessFlags2_t(),jdata["dstAccessMask"], decoded_value.dstAccessMask, options); - FieldToJson(jdata["oldLayout"], decoded_value.oldLayout, options); - FieldToJson(jdata["newLayout"], decoded_value.newLayout, options); - FieldToJson(jdata["srcQueueFamilyIndex"], decoded_value.srcQueueFamilyIndex, options); - FieldToJson(jdata["dstQueueFamilyIndex"], decoded_value.dstQueueFamilyIndex, options); - HandleToJson(jdata["image"], meta_struct.image, options); - FieldToJson(jdata["subresourceRange"], meta_struct.subresourceRange, options); + FieldToJson(jdata["maxInlineUniformBlockBindings"], decoded_value.maxInlineUniformBlockBindings, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDependencyInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDependencyInfo& decoded_value = *data->decoded_value; - const Decoded_VkDependencyInfo& meta_struct = *data; + const VkPhysicalDeviceShaderIntegerDotProductFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDependencyFlags_t(),jdata["dependencyFlags"], decoded_value.dependencyFlags, options); - FieldToJson(jdata["memoryBarrierCount"], decoded_value.memoryBarrierCount, options); - FieldToJson(jdata["pMemoryBarriers"], meta_struct.pMemoryBarriers, options); - FieldToJson(jdata["bufferMemoryBarrierCount"], decoded_value.bufferMemoryBarrierCount, options); - FieldToJson(jdata["pBufferMemoryBarriers"], meta_struct.pBufferMemoryBarriers, options); - FieldToJson(jdata["imageMemoryBarrierCount"], decoded_value.imageMemoryBarrierCount, options); - FieldToJson(jdata["pImageMemoryBarriers"], meta_struct.pImageMemoryBarriers, options); + jdata["shaderIntegerDotProduct"] = static_cast(decoded_value.shaderIntegerDotProduct); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreSubmitInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSemaphoreSubmitInfo& decoded_value = *data->decoded_value; - const Decoded_VkSemaphoreSubmitInfo& meta_struct = *data; + const VkPhysicalDeviceShaderIntegerDotProductProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); - FieldToJson(jdata["value"], decoded_value.value, options); - FieldToJson(VkPipelineStageFlags2_t(),jdata["stageMask"], decoded_value.stageMask, options); - FieldToJson(jdata["deviceIndex"], decoded_value.deviceIndex, options); + jdata["integerDotProduct8BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct8BitUnsignedAccelerated); + jdata["integerDotProduct8BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct8BitSignedAccelerated); + jdata["integerDotProduct8BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct8BitMixedSignednessAccelerated); + jdata["integerDotProduct4x8BitPackedUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct4x8BitPackedUnsignedAccelerated); + jdata["integerDotProduct4x8BitPackedSignedAccelerated"] = static_cast(decoded_value.integerDotProduct4x8BitPackedSignedAccelerated); + jdata["integerDotProduct4x8BitPackedMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct4x8BitPackedMixedSignednessAccelerated); + jdata["integerDotProduct16BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct16BitUnsignedAccelerated); + jdata["integerDotProduct16BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct16BitSignedAccelerated); + jdata["integerDotProduct16BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct16BitMixedSignednessAccelerated); + jdata["integerDotProduct32BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct32BitUnsignedAccelerated); + jdata["integerDotProduct32BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct32BitSignedAccelerated); + jdata["integerDotProduct32BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct32BitMixedSignednessAccelerated); + jdata["integerDotProduct64BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct64BitUnsignedAccelerated); + jdata["integerDotProduct64BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct64BitSignedAccelerated); + jdata["integerDotProduct64BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct64BitMixedSignednessAccelerated); + jdata["integerDotProductAccumulatingSaturating8BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated); + jdata["integerDotProductAccumulatingSaturating8BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating8BitSignedAccelerated); + jdata["integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated); + jdata["integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated); + jdata["integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated); + jdata["integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated); + jdata["integerDotProductAccumulatingSaturating16BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated); + jdata["integerDotProductAccumulatingSaturating16BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating16BitSignedAccelerated); + jdata["integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated); + jdata["integerDotProductAccumulatingSaturating32BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated); + jdata["integerDotProductAccumulatingSaturating32BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating32BitSignedAccelerated); + jdata["integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated); + jdata["integerDotProductAccumulatingSaturating64BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated); + jdata["integerDotProductAccumulatingSaturating64BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating64BitSignedAccelerated); + jdata["integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferSubmitInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCommandBufferSubmitInfo& decoded_value = *data->decoded_value; - const Decoded_VkCommandBufferSubmitInfo& meta_struct = *data; + const VkPhysicalDeviceTexelBufferAlignmentProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["commandBuffer"], meta_struct.commandBuffer, options); - FieldToJson(jdata["deviceMask"], decoded_value.deviceMask, options); + FieldToJson(jdata["storageTexelBufferOffsetAlignmentBytes"], decoded_value.storageTexelBufferOffsetAlignmentBytes, options); + jdata["storageTexelBufferOffsetSingleTexelAlignment"] = static_cast(decoded_value.storageTexelBufferOffsetSingleTexelAlignment); + FieldToJson(jdata["uniformTexelBufferOffsetAlignmentBytes"], decoded_value.uniformTexelBufferOffsetAlignmentBytes, options); + jdata["uniformTexelBufferOffsetSingleTexelAlignment"] = static_cast(decoded_value.uniformTexelBufferOffsetSingleTexelAlignment); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubmitInfo2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageBlit2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSubmitInfo2& decoded_value = *data->decoded_value; - const Decoded_VkSubmitInfo2& meta_struct = *data; + const VkImageBlit2& decoded_value = *data->decoded_value; + const Decoded_VkImageBlit2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkSubmitFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["waitSemaphoreInfoCount"], decoded_value.waitSemaphoreInfoCount, options); - FieldToJson(jdata["pWaitSemaphoreInfos"], meta_struct.pWaitSemaphoreInfos, options); - FieldToJson(jdata["commandBufferInfoCount"], decoded_value.commandBufferInfoCount, options); - FieldToJson(jdata["pCommandBufferInfos"], meta_struct.pCommandBufferInfos, options); - FieldToJson(jdata["signalSemaphoreInfoCount"], decoded_value.signalSemaphoreInfoCount, options); - FieldToJson(jdata["pSignalSemaphoreInfos"], meta_struct.pSignalSemaphoreInfos, options); + FieldToJson(jdata["srcSubresource"], meta_struct.srcSubresource, options); + FieldToJson(jdata["srcOffsets"], meta_struct.srcOffsets, options); + FieldToJson(jdata["dstSubresource"], meta_struct.dstSubresource, options); + FieldToJson(jdata["dstOffsets"], meta_struct.dstOffsets, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSynchronization2Features* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBlitImageInfo2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSynchronization2Features& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSynchronization2Features& meta_struct = *data; + const VkBlitImageInfo2& decoded_value = *data->decoded_value; + const Decoded_VkBlitImageInfo2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["synchronization2"] = static_cast(decoded_value.synchronization2); + HandleToJson(jdata["srcImage"], meta_struct.srcImage, options); + FieldToJson(jdata["srcImageLayout"], decoded_value.srcImageLayout, options); + HandleToJson(jdata["dstImage"], meta_struct.dstImage, options); + FieldToJson(jdata["dstImageLayout"], decoded_value.dstImageLayout, options); + FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); + FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); + FieldToJson(jdata["filter"], decoded_value.filter, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageResolve2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures& meta_struct = *data; + const VkImageResolve2& decoded_value = *data->decoded_value; + const Decoded_VkImageResolve2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderZeroInitializeWorkgroupMemory"] = static_cast(decoded_value.shaderZeroInitializeWorkgroupMemory); + FieldToJson(jdata["srcSubresource"], meta_struct.srcSubresource, options); + FieldToJson(jdata["srcOffset"], meta_struct.srcOffset, options); + FieldToJson(jdata["dstSubresource"], meta_struct.dstSubresource, options); + FieldToJson(jdata["dstOffset"], meta_struct.dstOffset, options); + FieldToJson(jdata["extent"], meta_struct.extent, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageRobustnessFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkResolveImageInfo2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceImageRobustnessFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceImageRobustnessFeatures& meta_struct = *data; + const VkResolveImageInfo2& decoded_value = *data->decoded_value; + const Decoded_VkResolveImageInfo2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["robustImageAccess"] = static_cast(decoded_value.robustImageAccess); + HandleToJson(jdata["srcImage"], meta_struct.srcImage, options); + FieldToJson(jdata["srcImageLayout"], decoded_value.srcImageLayout, options); + HandleToJson(jdata["dstImage"], meta_struct.dstImage, options); + FieldToJson(jdata["dstImageLayout"], decoded_value.dstImageLayout, options); + FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); + FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferCopy2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingAttachmentInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBufferCopy2& decoded_value = *data->decoded_value; - const Decoded_VkBufferCopy2& meta_struct = *data; + const VkRenderingAttachmentInfo& decoded_value = *data->decoded_value; + const Decoded_VkRenderingAttachmentInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["srcOffset"], decoded_value.srcOffset, options); - FieldToJson(jdata["dstOffset"], decoded_value.dstOffset, options); - FieldToJson(jdata["size"], decoded_value.size, options); + HandleToJson(jdata["imageView"], meta_struct.imageView, options); + FieldToJson(jdata["imageLayout"], decoded_value.imageLayout, options); + FieldToJson(jdata["resolveMode"], decoded_value.resolveMode, options); + HandleToJson(jdata["resolveImageView"], meta_struct.resolveImageView, options); + FieldToJson(jdata["resolveImageLayout"], decoded_value.resolveImageLayout, options); + FieldToJson(jdata["loadOp"], decoded_value.loadOp, options); + FieldToJson(jdata["storeOp"], decoded_value.storeOp, options); + FieldToJson(jdata["clearValue"], meta_struct.clearValue, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyBufferInfo2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCopyBufferInfo2& decoded_value = *data->decoded_value; - const Decoded_VkCopyBufferInfo2& meta_struct = *data; + const VkRenderingInfo& decoded_value = *data->decoded_value; + const Decoded_VkRenderingInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["srcBuffer"], meta_struct.srcBuffer, options); - HandleToJson(jdata["dstBuffer"], meta_struct.dstBuffer, options); - FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); - FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); + FieldToJson(VkRenderingFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["renderArea"], meta_struct.renderArea, options); + FieldToJson(jdata["layerCount"], decoded_value.layerCount, options); + FieldToJson(jdata["viewMask"], decoded_value.viewMask, options); + FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); + FieldToJson(jdata["pColorAttachments"], meta_struct.pColorAttachments, options); + FieldToJson(jdata["pDepthAttachment"], meta_struct.pDepthAttachment, options); + FieldToJson(jdata["pStencilAttachment"], meta_struct.pStencilAttachment, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCopy2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRenderingCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageCopy2& decoded_value = *data->decoded_value; - const Decoded_VkImageCopy2& meta_struct = *data; + const VkPipelineRenderingCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineRenderingCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["srcSubresource"], meta_struct.srcSubresource, options); - FieldToJson(jdata["srcOffset"], meta_struct.srcOffset, options); - FieldToJson(jdata["dstSubresource"], meta_struct.dstSubresource, options); - FieldToJson(jdata["dstOffset"], meta_struct.dstOffset, options); - FieldToJson(jdata["extent"], meta_struct.extent, options); + FieldToJson(jdata["viewMask"], decoded_value.viewMask, options); + FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); + FieldToJson(jdata["pColorAttachmentFormats"], meta_struct.pColorAttachmentFormats, options); + FieldToJson(jdata["depthAttachmentFormat"], decoded_value.depthAttachmentFormat, options); + FieldToJson(jdata["stencilAttachmentFormat"], decoded_value.stencilAttachmentFormat, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyImageInfo2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDynamicRenderingFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCopyImageInfo2& decoded_value = *data->decoded_value; - const Decoded_VkCopyImageInfo2& meta_struct = *data; + const VkPhysicalDeviceDynamicRenderingFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDynamicRenderingFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["srcImage"], meta_struct.srcImage, options); - FieldToJson(jdata["srcImageLayout"], decoded_value.srcImageLayout, options); - HandleToJson(jdata["dstImage"], meta_struct.dstImage, options); - FieldToJson(jdata["dstImageLayout"], decoded_value.dstImageLayout, options); - FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); - FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); + jdata["dynamicRendering"] = static_cast(decoded_value.dynamicRendering); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferImageCopy2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferInheritanceRenderingInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBufferImageCopy2& decoded_value = *data->decoded_value; - const Decoded_VkBufferImageCopy2& meta_struct = *data; + const VkCommandBufferInheritanceRenderingInfo& decoded_value = *data->decoded_value; + const Decoded_VkCommandBufferInheritanceRenderingInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["bufferOffset"], decoded_value.bufferOffset, options); - FieldToJson(jdata["bufferRowLength"], decoded_value.bufferRowLength, options); - FieldToJson(jdata["bufferImageHeight"], decoded_value.bufferImageHeight, options); - FieldToJson(jdata["imageSubresource"], meta_struct.imageSubresource, options); - FieldToJson(jdata["imageOffset"], meta_struct.imageOffset, options); - FieldToJson(jdata["imageExtent"], meta_struct.imageExtent, options); + FieldToJson(VkRenderingFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["viewMask"], decoded_value.viewMask, options); + FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); + FieldToJson(jdata["pColorAttachmentFormats"], meta_struct.pColorAttachmentFormats, options); + FieldToJson(jdata["depthAttachmentFormat"], decoded_value.depthAttachmentFormat, options); + FieldToJson(jdata["stencilAttachmentFormat"], decoded_value.stencilAttachmentFormat, options); + FieldToJson(jdata["rasterizationSamples"], decoded_value.rasterizationSamples, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyBufferToImageInfo2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan14Features* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCopyBufferToImageInfo2& decoded_value = *data->decoded_value; - const Decoded_VkCopyBufferToImageInfo2& meta_struct = *data; + const VkPhysicalDeviceVulkan14Features& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVulkan14Features& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["srcBuffer"], meta_struct.srcBuffer, options); - HandleToJson(jdata["dstImage"], meta_struct.dstImage, options); - FieldToJson(jdata["dstImageLayout"], decoded_value.dstImageLayout, options); - FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); - FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); + jdata["globalPriorityQuery"] = static_cast(decoded_value.globalPriorityQuery); + jdata["shaderSubgroupRotate"] = static_cast(decoded_value.shaderSubgroupRotate); + jdata["shaderSubgroupRotateClustered"] = static_cast(decoded_value.shaderSubgroupRotateClustered); + jdata["shaderFloatControls2"] = static_cast(decoded_value.shaderFloatControls2); + jdata["shaderExpectAssume"] = static_cast(decoded_value.shaderExpectAssume); + jdata["rectangularLines"] = static_cast(decoded_value.rectangularLines); + jdata["bresenhamLines"] = static_cast(decoded_value.bresenhamLines); + jdata["smoothLines"] = static_cast(decoded_value.smoothLines); + jdata["stippledRectangularLines"] = static_cast(decoded_value.stippledRectangularLines); + jdata["stippledBresenhamLines"] = static_cast(decoded_value.stippledBresenhamLines); + jdata["stippledSmoothLines"] = static_cast(decoded_value.stippledSmoothLines); + jdata["vertexAttributeInstanceRateDivisor"] = static_cast(decoded_value.vertexAttributeInstanceRateDivisor); + jdata["vertexAttributeInstanceRateZeroDivisor"] = static_cast(decoded_value.vertexAttributeInstanceRateZeroDivisor); + jdata["indexTypeUint8"] = static_cast(decoded_value.indexTypeUint8); + jdata["dynamicRenderingLocalRead"] = static_cast(decoded_value.dynamicRenderingLocalRead); + jdata["maintenance5"] = static_cast(decoded_value.maintenance5); + jdata["maintenance6"] = static_cast(decoded_value.maintenance6); + jdata["pipelineProtectedAccess"] = static_cast(decoded_value.pipelineProtectedAccess); + jdata["pipelineRobustness"] = static_cast(decoded_value.pipelineRobustness); + jdata["hostImageCopy"] = static_cast(decoded_value.hostImageCopy); + jdata["pushDescriptor"] = static_cast(decoded_value.pushDescriptor); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyImageToBufferInfo2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan14Properties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCopyImageToBufferInfo2& decoded_value = *data->decoded_value; - const Decoded_VkCopyImageToBufferInfo2& meta_struct = *data; + const VkPhysicalDeviceVulkan14Properties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVulkan14Properties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["srcImage"], meta_struct.srcImage, options); - FieldToJson(jdata["srcImageLayout"], decoded_value.srcImageLayout, options); - HandleToJson(jdata["dstBuffer"], meta_struct.dstBuffer, options); - FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); - FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); + FieldToJson(jdata["lineSubPixelPrecisionBits"], decoded_value.lineSubPixelPrecisionBits, options); + FieldToJson(jdata["maxVertexAttribDivisor"], decoded_value.maxVertexAttribDivisor, options); + jdata["supportsNonZeroFirstInstance"] = static_cast(decoded_value.supportsNonZeroFirstInstance); + FieldToJson(jdata["maxPushDescriptors"], decoded_value.maxPushDescriptors, options); + jdata["dynamicRenderingLocalReadDepthStencilAttachments"] = static_cast(decoded_value.dynamicRenderingLocalReadDepthStencilAttachments); + jdata["dynamicRenderingLocalReadMultisampledAttachments"] = static_cast(decoded_value.dynamicRenderingLocalReadMultisampledAttachments); + jdata["earlyFragmentMultisampleCoverageAfterSampleCounting"] = static_cast(decoded_value.earlyFragmentMultisampleCoverageAfterSampleCounting); + jdata["earlyFragmentSampleMaskTestBeforeSampleCounting"] = static_cast(decoded_value.earlyFragmentSampleMaskTestBeforeSampleCounting); + jdata["depthStencilSwizzleOneSupport"] = static_cast(decoded_value.depthStencilSwizzleOneSupport); + jdata["polygonModePointSize"] = static_cast(decoded_value.polygonModePointSize); + jdata["nonStrictSinglePixelWideLinesUseParallelogram"] = static_cast(decoded_value.nonStrictSinglePixelWideLinesUseParallelogram); + jdata["nonStrictWideLinesUseParallelogram"] = static_cast(decoded_value.nonStrictWideLinesUseParallelogram); + jdata["blockTexelViewCompatibleMultipleLayers"] = static_cast(decoded_value.blockTexelViewCompatibleMultipleLayers); + FieldToJson(jdata["maxCombinedImageSamplerDescriptorCount"], decoded_value.maxCombinedImageSamplerDescriptorCount, options); + jdata["fragmentShadingRateClampCombinerInputs"] = static_cast(decoded_value.fragmentShadingRateClampCombinerInputs); + FieldToJson(jdata["defaultRobustnessStorageBuffers"], decoded_value.defaultRobustnessStorageBuffers, options); + FieldToJson(jdata["defaultRobustnessUniformBuffers"], decoded_value.defaultRobustnessUniformBuffers, options); + FieldToJson(jdata["defaultRobustnessVertexInputs"], decoded_value.defaultRobustnessVertexInputs, options); + FieldToJson(jdata["defaultRobustnessImages"], decoded_value.defaultRobustnessImages, options); + FieldToJson(jdata["copySrcLayoutCount"], decoded_value.copySrcLayoutCount, options); + FieldToJson(jdata["pCopySrcLayouts"], meta_struct.pCopySrcLayouts, options); + FieldToJson(jdata["copyDstLayoutCount"], decoded_value.copyDstLayoutCount, options); + FieldToJson(jdata["pCopyDstLayouts"], meta_struct.pCopyDstLayouts, options); + FieldToJson(jdata["optimalTilingLayoutUUID"], uuid_to_string(sizeof(decoded_value.optimalTilingLayoutUUID), decoded_value.optimalTilingLayoutUUID), options); + jdata["identicalMemoryTypeRequirements"] = static_cast(decoded_value.identicalMemoryTypeRequirements); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageBlit2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceQueueGlobalPriorityCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageBlit2& decoded_value = *data->decoded_value; - const Decoded_VkImageBlit2& meta_struct = *data; + const VkDeviceQueueGlobalPriorityCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkDeviceQueueGlobalPriorityCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["srcSubresource"], meta_struct.srcSubresource, options); - FieldToJson(jdata["srcOffsets"], meta_struct.srcOffsets, options); - FieldToJson(jdata["dstSubresource"], meta_struct.dstSubresource, options); - FieldToJson(jdata["dstOffsets"], meta_struct.dstOffsets, options); + FieldToJson(jdata["globalPriority"], decoded_value.globalPriority, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBlitImageInfo2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceGlobalPriorityQueryFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBlitImageInfo2& decoded_value = *data->decoded_value; - const Decoded_VkBlitImageInfo2& meta_struct = *data; + const VkPhysicalDeviceGlobalPriorityQueryFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceGlobalPriorityQueryFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["srcImage"], meta_struct.srcImage, options); - FieldToJson(jdata["srcImageLayout"], decoded_value.srcImageLayout, options); - HandleToJson(jdata["dstImage"], meta_struct.dstImage, options); - FieldToJson(jdata["dstImageLayout"], decoded_value.dstImageLayout, options); - FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); - FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); - FieldToJson(jdata["filter"], decoded_value.filter, options); + jdata["globalPriorityQuery"] = static_cast(decoded_value.globalPriorityQuery); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageResolve2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyGlobalPriorityProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageResolve2& decoded_value = *data->decoded_value; - const Decoded_VkImageResolve2& meta_struct = *data; + const VkQueueFamilyGlobalPriorityProperties& decoded_value = *data->decoded_value; + const Decoded_VkQueueFamilyGlobalPriorityProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["srcSubresource"], meta_struct.srcSubresource, options); - FieldToJson(jdata["srcOffset"], meta_struct.srcOffset, options); - FieldToJson(jdata["dstSubresource"], meta_struct.dstSubresource, options); - FieldToJson(jdata["dstOffset"], meta_struct.dstOffset, options); - FieldToJson(jdata["extent"], meta_struct.extent, options); + FieldToJson(jdata["priorityCount"], decoded_value.priorityCount, options); + FieldToJson(jdata["priorities"], &meta_struct.priorities, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkResolveImageInfo2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceIndexTypeUint8Features* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkResolveImageInfo2& decoded_value = *data->decoded_value; - const Decoded_VkResolveImageInfo2& meta_struct = *data; + const VkPhysicalDeviceIndexTypeUint8Features& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceIndexTypeUint8Features& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["srcImage"], meta_struct.srcImage, options); - FieldToJson(jdata["srcImageLayout"], decoded_value.srcImageLayout, options); - HandleToJson(jdata["dstImage"], meta_struct.dstImage, options); - FieldToJson(jdata["dstImageLayout"], decoded_value.dstImageLayout, options); - FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); - FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); + jdata["indexTypeUint8"] = static_cast(decoded_value.indexTypeUint8); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSubgroupSizeControlFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryMapInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSubgroupSizeControlFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSubgroupSizeControlFeatures& meta_struct = *data; + const VkMemoryMapInfo& decoded_value = *data->decoded_value; + const Decoded_VkMemoryMapInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["subgroupSizeControl"] = static_cast(decoded_value.subgroupSizeControl); - jdata["computeFullSubgroups"] = static_cast(decoded_value.computeFullSubgroups); + FieldToJson(VkMemoryMapFlags_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(jdata["size"], decoded_value.size, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSubgroupSizeControlProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryUnmapInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSubgroupSizeControlProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSubgroupSizeControlProperties& meta_struct = *data; + const VkMemoryUnmapInfo& decoded_value = *data->decoded_value; + const Decoded_VkMemoryUnmapInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["minSubgroupSize"], decoded_value.minSubgroupSize, options); - FieldToJson(jdata["maxSubgroupSize"], decoded_value.maxSubgroupSize, options); - FieldToJson(jdata["maxComputeWorkgroupSubgroups"], decoded_value.maxComputeWorkgroupSubgroups, options); - FieldToJson(VkShaderStageFlags_t(),jdata["requiredSubgroupSizeStages"], decoded_value.requiredSubgroupSizeStages, options); + FieldToJson(VkMemoryUnmapFlags_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance5Features* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo& meta_struct = *data; + const VkPhysicalDeviceMaintenance5Features& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMaintenance5Features& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["requiredSubgroupSize"], decoded_value.requiredSubgroupSize, options); + jdata["maintenance5"] = static_cast(decoded_value.maintenance5); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceInlineUniformBlockFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance5Properties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceInlineUniformBlockFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceInlineUniformBlockFeatures& meta_struct = *data; + const VkPhysicalDeviceMaintenance5Properties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMaintenance5Properties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["inlineUniformBlock"] = static_cast(decoded_value.inlineUniformBlock); - jdata["descriptorBindingInlineUniformBlockUpdateAfterBind"] = static_cast(decoded_value.descriptorBindingInlineUniformBlockUpdateAfterBind); + jdata["earlyFragmentMultisampleCoverageAfterSampleCounting"] = static_cast(decoded_value.earlyFragmentMultisampleCoverageAfterSampleCounting); + jdata["earlyFragmentSampleMaskTestBeforeSampleCounting"] = static_cast(decoded_value.earlyFragmentSampleMaskTestBeforeSampleCounting); + jdata["depthStencilSwizzleOneSupport"] = static_cast(decoded_value.depthStencilSwizzleOneSupport); + jdata["polygonModePointSize"] = static_cast(decoded_value.polygonModePointSize); + jdata["nonStrictSinglePixelWideLinesUseParallelogram"] = static_cast(decoded_value.nonStrictSinglePixelWideLinesUseParallelogram); + jdata["nonStrictWideLinesUseParallelogram"] = static_cast(decoded_value.nonStrictWideLinesUseParallelogram); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceInlineUniformBlockProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSubresource2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceInlineUniformBlockProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceInlineUniformBlockProperties& meta_struct = *data; + const VkImageSubresource2& decoded_value = *data->decoded_value; + const Decoded_VkImageSubresource2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxInlineUniformBlockSize"], decoded_value.maxInlineUniformBlockSize, options); - FieldToJson(jdata["maxPerStageDescriptorInlineUniformBlocks"], decoded_value.maxPerStageDescriptorInlineUniformBlocks, options); - FieldToJson(jdata["maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks"], decoded_value.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks, options); - FieldToJson(jdata["maxDescriptorSetInlineUniformBlocks"], decoded_value.maxDescriptorSetInlineUniformBlocks, options); - FieldToJson(jdata["maxDescriptorSetUpdateAfterBindInlineUniformBlocks"], decoded_value.maxDescriptorSetUpdateAfterBindInlineUniformBlocks, options); + FieldToJson(jdata["imageSubresource"], meta_struct.imageSubresource, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWriteDescriptorSetInlineUniformBlock* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceImageSubresourceInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkWriteDescriptorSetInlineUniformBlock& decoded_value = *data->decoded_value; - const Decoded_VkWriteDescriptorSetInlineUniformBlock& meta_struct = *data; + const VkDeviceImageSubresourceInfo& decoded_value = *data->decoded_value; + const Decoded_VkDeviceImageSubresourceInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["dataSize"], decoded_value.dataSize, options); - FieldToJson(jdata["pData"], meta_struct.pData, options); + FieldToJson(jdata["pCreateInfo"], meta_struct.pCreateInfo, options); + FieldToJson(jdata["pSubresource"], meta_struct.pSubresource, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorPoolInlineUniformBlockCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubresourceLayout2* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorPoolInlineUniformBlockCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorPoolInlineUniformBlockCreateInfo& meta_struct = *data; + const VkSubresourceLayout2& decoded_value = *data->decoded_value; + const Decoded_VkSubresourceLayout2& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxInlineUniformBlockBindings"], decoded_value.maxInlineUniformBlockBindings, options); + FieldToJson(jdata["subresourceLayout"], meta_struct.subresourceLayout, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferUsageFlags2CreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceTextureCompressionASTCHDRFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures& meta_struct = *data; + const VkBufferUsageFlags2CreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkBufferUsageFlags2CreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["textureCompressionASTC_HDR"] = static_cast(decoded_value.textureCompressionASTC_HDR); + FieldToJson(VkBufferUsageFlags2_t(),jdata["usage"], decoded_value.usage, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingAttachmentInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance6Features* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderingAttachmentInfo& decoded_value = *data->decoded_value; - const Decoded_VkRenderingAttachmentInfo& meta_struct = *data; + const VkPhysicalDeviceMaintenance6Features& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMaintenance6Features& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["imageView"], meta_struct.imageView, options); - FieldToJson(jdata["imageLayout"], decoded_value.imageLayout, options); - FieldToJson(jdata["resolveMode"], decoded_value.resolveMode, options); - HandleToJson(jdata["resolveImageView"], meta_struct.resolveImageView, options); - FieldToJson(jdata["resolveImageLayout"], decoded_value.resolveImageLayout, options); - FieldToJson(jdata["loadOp"], decoded_value.loadOp, options); - FieldToJson(jdata["storeOp"], decoded_value.storeOp, options); - FieldToJson(jdata["clearValue"], meta_struct.clearValue, options); + jdata["maintenance6"] = static_cast(decoded_value.maintenance6); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance6Properties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderingInfo& decoded_value = *data->decoded_value; - const Decoded_VkRenderingInfo& meta_struct = *data; + const VkPhysicalDeviceMaintenance6Properties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMaintenance6Properties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkRenderingFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["renderArea"], meta_struct.renderArea, options); - FieldToJson(jdata["layerCount"], decoded_value.layerCount, options); - FieldToJson(jdata["viewMask"], decoded_value.viewMask, options); - FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); - FieldToJson(jdata["pColorAttachments"], meta_struct.pColorAttachments, options); - FieldToJson(jdata["pDepthAttachment"], meta_struct.pDepthAttachment, options); - FieldToJson(jdata["pStencilAttachment"], meta_struct.pStencilAttachment, options); + jdata["blockTexelViewCompatibleMultipleLayers"] = static_cast(decoded_value.blockTexelViewCompatibleMultipleLayers); + FieldToJson(jdata["maxCombinedImageSamplerDescriptorCount"], decoded_value.maxCombinedImageSamplerDescriptorCount, options); + jdata["fragmentShadingRateClampCombinerInputs"] = static_cast(decoded_value.fragmentShadingRateClampCombinerInputs); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRenderingCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindMemoryStatus* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineRenderingCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineRenderingCreateInfo& meta_struct = *data; + const VkBindMemoryStatus& decoded_value = *data->decoded_value; + const Decoded_VkBindMemoryStatus& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["viewMask"], decoded_value.viewMask, options); - FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); - FieldToJson(jdata["pColorAttachmentFormats"], meta_struct.pColorAttachmentFormats, options); - FieldToJson(jdata["depthAttachmentFormat"], decoded_value.depthAttachmentFormat, options); - FieldToJson(jdata["stencilAttachmentFormat"], decoded_value.stencilAttachmentFormat, options); + FieldToJson(jdata["pResult"], meta_struct.pResult, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDynamicRenderingFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceHostImageCopyFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDynamicRenderingFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDynamicRenderingFeatures& meta_struct = *data; + const VkPhysicalDeviceHostImageCopyFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceHostImageCopyFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["dynamicRendering"] = static_cast(decoded_value.dynamicRendering); + jdata["hostImageCopy"] = static_cast(decoded_value.hostImageCopy); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferInheritanceRenderingInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceHostImageCopyProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCommandBufferInheritanceRenderingInfo& decoded_value = *data->decoded_value; - const Decoded_VkCommandBufferInheritanceRenderingInfo& meta_struct = *data; + const VkPhysicalDeviceHostImageCopyProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceHostImageCopyProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkRenderingFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["viewMask"], decoded_value.viewMask, options); - FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); - FieldToJson(jdata["pColorAttachmentFormats"], meta_struct.pColorAttachmentFormats, options); - FieldToJson(jdata["depthAttachmentFormat"], decoded_value.depthAttachmentFormat, options); - FieldToJson(jdata["stencilAttachmentFormat"], decoded_value.stencilAttachmentFormat, options); - FieldToJson(jdata["rasterizationSamples"], decoded_value.rasterizationSamples, options); + FieldToJson(jdata["copySrcLayoutCount"], decoded_value.copySrcLayoutCount, options); + FieldToJson(jdata["pCopySrcLayouts"], meta_struct.pCopySrcLayouts, options); + FieldToJson(jdata["copyDstLayoutCount"], decoded_value.copyDstLayoutCount, options); + FieldToJson(jdata["pCopyDstLayouts"], meta_struct.pCopyDstLayouts, options); + FieldToJson(jdata["optimalTilingLayoutUUID"], uuid_to_string(sizeof(decoded_value.optimalTilingLayoutUUID), decoded_value.optimalTilingLayoutUUID), options); + jdata["identicalMemoryTypeRequirements"] = static_cast(decoded_value.identicalMemoryTypeRequirements); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyImageToImageInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderIntegerDotProductFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures& meta_struct = *data; + const VkCopyImageToImageInfo& decoded_value = *data->decoded_value; + const Decoded_VkCopyImageToImageInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderIntegerDotProduct"] = static_cast(decoded_value.shaderIntegerDotProduct); + FieldToJson(VkHostImageCopyFlags_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["srcImage"], meta_struct.srcImage, options); + FieldToJson(jdata["srcImageLayout"], decoded_value.srcImageLayout, options); + HandleToJson(jdata["dstImage"], meta_struct.dstImage, options); + FieldToJson(jdata["dstImageLayout"], decoded_value.dstImageLayout, options); + FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); + FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkHostImageLayoutTransitionInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderIntegerDotProductProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties& meta_struct = *data; + const VkHostImageLayoutTransitionInfo& decoded_value = *data->decoded_value; + const Decoded_VkHostImageLayoutTransitionInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["integerDotProduct8BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct8BitUnsignedAccelerated); - jdata["integerDotProduct8BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct8BitSignedAccelerated); - jdata["integerDotProduct8BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct8BitMixedSignednessAccelerated); - jdata["integerDotProduct4x8BitPackedUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct4x8BitPackedUnsignedAccelerated); - jdata["integerDotProduct4x8BitPackedSignedAccelerated"] = static_cast(decoded_value.integerDotProduct4x8BitPackedSignedAccelerated); - jdata["integerDotProduct4x8BitPackedMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct4x8BitPackedMixedSignednessAccelerated); - jdata["integerDotProduct16BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct16BitUnsignedAccelerated); - jdata["integerDotProduct16BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct16BitSignedAccelerated); - jdata["integerDotProduct16BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct16BitMixedSignednessAccelerated); - jdata["integerDotProduct32BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct32BitUnsignedAccelerated); - jdata["integerDotProduct32BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct32BitSignedAccelerated); - jdata["integerDotProduct32BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct32BitMixedSignednessAccelerated); - jdata["integerDotProduct64BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProduct64BitUnsignedAccelerated); - jdata["integerDotProduct64BitSignedAccelerated"] = static_cast(decoded_value.integerDotProduct64BitSignedAccelerated); - jdata["integerDotProduct64BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProduct64BitMixedSignednessAccelerated); - jdata["integerDotProductAccumulatingSaturating8BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated); - jdata["integerDotProductAccumulatingSaturating8BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating8BitSignedAccelerated); - jdata["integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated); - jdata["integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated); - jdata["integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated); - jdata["integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated); - jdata["integerDotProductAccumulatingSaturating16BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated); - jdata["integerDotProductAccumulatingSaturating16BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating16BitSignedAccelerated); - jdata["integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated); - jdata["integerDotProductAccumulatingSaturating32BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated); - jdata["integerDotProductAccumulatingSaturating32BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating32BitSignedAccelerated); - jdata["integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated); - jdata["integerDotProductAccumulatingSaturating64BitUnsignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated); - jdata["integerDotProductAccumulatingSaturating64BitSignedAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating64BitSignedAccelerated); - jdata["integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated"] = static_cast(decoded_value.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated); + HandleToJson(jdata["image"], meta_struct.image, options); + FieldToJson(jdata["oldLayout"], decoded_value.oldLayout, options); + FieldToJson(jdata["newLayout"], decoded_value.newLayout, options); + FieldToJson(jdata["subresourceRange"], meta_struct.subresourceRange, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubresourceHostMemcpySize* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceTexelBufferAlignmentProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties& meta_struct = *data; + const VkSubresourceHostMemcpySize& decoded_value = *data->decoded_value; + const Decoded_VkSubresourceHostMemcpySize& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["storageTexelBufferOffsetAlignmentBytes"], decoded_value.storageTexelBufferOffsetAlignmentBytes, options); - jdata["storageTexelBufferOffsetSingleTexelAlignment"] = static_cast(decoded_value.storageTexelBufferOffsetSingleTexelAlignment); - FieldToJson(jdata["uniformTexelBufferOffsetAlignmentBytes"], decoded_value.uniformTexelBufferOffsetAlignmentBytes, options); - jdata["uniformTexelBufferOffsetSingleTexelAlignment"] = static_cast(decoded_value.uniformTexelBufferOffsetSingleTexelAlignment); + FieldToJson(jdata["size"], decoded_value.size, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFormatProperties3* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkHostImageCopyDevicePerformanceQuery* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkFormatProperties3& decoded_value = *data->decoded_value; - const Decoded_VkFormatProperties3& meta_struct = *data; + const VkHostImageCopyDevicePerformanceQuery& decoded_value = *data->decoded_value; + const Decoded_VkHostImageCopyDevicePerformanceQuery& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkFormatFeatureFlags2_t(),jdata["linearTilingFeatures"], decoded_value.linearTilingFeatures, options); - FieldToJson(VkFormatFeatureFlags2_t(),jdata["optimalTilingFeatures"], decoded_value.optimalTilingFeatures, options); - FieldToJson(VkFormatFeatureFlags2_t(),jdata["bufferFeatures"], decoded_value.bufferFeatures, options); + jdata["optimalDeviceAccess"] = static_cast(decoded_value.optimalDeviceAccess); + jdata["identicalMemoryLayout"] = static_cast(decoded_value.identicalMemoryLayout); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance4Features* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMaintenance4Features& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMaintenance4Features& meta_struct = *data; + const VkPhysicalDeviceShaderSubgroupRotateFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["maintenance4"] = static_cast(decoded_value.maintenance4); + jdata["shaderSubgroupRotate"] = static_cast(decoded_value.shaderSubgroupRotate); + jdata["shaderSubgroupRotateClustered"] = static_cast(decoded_value.shaderSubgroupRotateClustered); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance4Properties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderFloatControls2Features* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMaintenance4Properties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMaintenance4Properties& meta_struct = *data; + const VkPhysicalDeviceShaderFloatControls2Features& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderFloatControls2Features& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxBufferSize"], decoded_value.maxBufferSize, options); + jdata["shaderFloatControls2"] = static_cast(decoded_value.shaderFloatControls2); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceBufferMemoryRequirements* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceBufferMemoryRequirements& decoded_value = *data->decoded_value; - const Decoded_VkDeviceBufferMemoryRequirements& meta_struct = *data; + const VkPhysicalDeviceShaderExpectAssumeFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pCreateInfo"], meta_struct.pCreateInfo, options); + jdata["shaderExpectAssume"] = static_cast(decoded_value.shaderExpectAssume); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceImageMemoryRequirements* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCreateFlags2CreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceImageMemoryRequirements& decoded_value = *data->decoded_value; - const Decoded_VkDeviceImageMemoryRequirements& meta_struct = *data; + const VkPipelineCreateFlags2CreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineCreateFlags2CreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pCreateInfo"], meta_struct.pCreateInfo, options); - FieldToJson(jdata["planeAspect"], decoded_value.planeAspect, options); + FieldToJson(VkPipelineCreateFlags2_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan14Features* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePushDescriptorProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVulkan14Features& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVulkan14Features& meta_struct = *data; + const VkPhysicalDevicePushDescriptorProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePushDescriptorProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["globalPriorityQuery"] = static_cast(decoded_value.globalPriorityQuery); - jdata["shaderSubgroupRotate"] = static_cast(decoded_value.shaderSubgroupRotate); - jdata["shaderSubgroupRotateClustered"] = static_cast(decoded_value.shaderSubgroupRotateClustered); - jdata["shaderFloatControls2"] = static_cast(decoded_value.shaderFloatControls2); - jdata["shaderExpectAssume"] = static_cast(decoded_value.shaderExpectAssume); - jdata["rectangularLines"] = static_cast(decoded_value.rectangularLines); - jdata["bresenhamLines"] = static_cast(decoded_value.bresenhamLines); - jdata["smoothLines"] = static_cast(decoded_value.smoothLines); - jdata["stippledRectangularLines"] = static_cast(decoded_value.stippledRectangularLines); - jdata["stippledBresenhamLines"] = static_cast(decoded_value.stippledBresenhamLines); - jdata["stippledSmoothLines"] = static_cast(decoded_value.stippledSmoothLines); - jdata["vertexAttributeInstanceRateDivisor"] = static_cast(decoded_value.vertexAttributeInstanceRateDivisor); - jdata["vertexAttributeInstanceRateZeroDivisor"] = static_cast(decoded_value.vertexAttributeInstanceRateZeroDivisor); - jdata["indexTypeUint8"] = static_cast(decoded_value.indexTypeUint8); - jdata["dynamicRenderingLocalRead"] = static_cast(decoded_value.dynamicRenderingLocalRead); - jdata["maintenance5"] = static_cast(decoded_value.maintenance5); - jdata["maintenance6"] = static_cast(decoded_value.maintenance6); - jdata["pipelineProtectedAccess"] = static_cast(decoded_value.pipelineProtectedAccess); - jdata["pipelineRobustness"] = static_cast(decoded_value.pipelineRobustness); - jdata["hostImageCopy"] = static_cast(decoded_value.hostImageCopy); - jdata["pushDescriptor"] = static_cast(decoded_value.pushDescriptor); + FieldToJson(jdata["maxPushDescriptors"], decoded_value.maxPushDescriptors, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan14Properties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindDescriptorSetsInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVulkan14Properties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVulkan14Properties& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["lineSubPixelPrecisionBits"], decoded_value.lineSubPixelPrecisionBits, options); - FieldToJson(jdata["maxVertexAttribDivisor"], decoded_value.maxVertexAttribDivisor, options); - jdata["supportsNonZeroFirstInstance"] = static_cast(decoded_value.supportsNonZeroFirstInstance); - FieldToJson(jdata["maxPushDescriptors"], decoded_value.maxPushDescriptors, options); - jdata["dynamicRenderingLocalReadDepthStencilAttachments"] = static_cast(decoded_value.dynamicRenderingLocalReadDepthStencilAttachments); - jdata["dynamicRenderingLocalReadMultisampledAttachments"] = static_cast(decoded_value.dynamicRenderingLocalReadMultisampledAttachments); - jdata["earlyFragmentMultisampleCoverageAfterSampleCounting"] = static_cast(decoded_value.earlyFragmentMultisampleCoverageAfterSampleCounting); - jdata["earlyFragmentSampleMaskTestBeforeSampleCounting"] = static_cast(decoded_value.earlyFragmentSampleMaskTestBeforeSampleCounting); - jdata["depthStencilSwizzleOneSupport"] = static_cast(decoded_value.depthStencilSwizzleOneSupport); - jdata["polygonModePointSize"] = static_cast(decoded_value.polygonModePointSize); - jdata["nonStrictSinglePixelWideLinesUseParallelogram"] = static_cast(decoded_value.nonStrictSinglePixelWideLinesUseParallelogram); - jdata["nonStrictWideLinesUseParallelogram"] = static_cast(decoded_value.nonStrictWideLinesUseParallelogram); - jdata["blockTexelViewCompatibleMultipleLayers"] = static_cast(decoded_value.blockTexelViewCompatibleMultipleLayers); - FieldToJson(jdata["maxCombinedImageSamplerDescriptorCount"], decoded_value.maxCombinedImageSamplerDescriptorCount, options); - jdata["fragmentShadingRateClampCombinerInputs"] = static_cast(decoded_value.fragmentShadingRateClampCombinerInputs); - FieldToJson(jdata["defaultRobustnessStorageBuffers"], decoded_value.defaultRobustnessStorageBuffers, options); - FieldToJson(jdata["defaultRobustnessUniformBuffers"], decoded_value.defaultRobustnessUniformBuffers, options); - FieldToJson(jdata["defaultRobustnessVertexInputs"], decoded_value.defaultRobustnessVertexInputs, options); - FieldToJson(jdata["defaultRobustnessImages"], decoded_value.defaultRobustnessImages, options); - FieldToJson(jdata["copySrcLayoutCount"], decoded_value.copySrcLayoutCount, options); - FieldToJson(jdata["pCopySrcLayouts"], meta_struct.pCopySrcLayouts, options); - FieldToJson(jdata["copyDstLayoutCount"], decoded_value.copyDstLayoutCount, options); - FieldToJson(jdata["pCopyDstLayouts"], meta_struct.pCopyDstLayouts, options); - FieldToJson(jdata["optimalTilingLayoutUUID"], uuid_to_string(sizeof(decoded_value.optimalTilingLayoutUUID), decoded_value.optimalTilingLayoutUUID), options); - jdata["identicalMemoryTypeRequirements"] = static_cast(decoded_value.identicalMemoryTypeRequirements); + const VkBindDescriptorSetsInfo& decoded_value = *data->decoded_value; + const Decoded_VkBindDescriptorSetsInfo& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkShaderStageFlags_t(),jdata["stageFlags"], decoded_value.stageFlags, options); + HandleToJson(jdata["layout"], meta_struct.layout, options); + FieldToJson(jdata["firstSet"], decoded_value.firstSet, options); + FieldToJson(jdata["descriptorSetCount"], decoded_value.descriptorSetCount, options); + HandleToJson(jdata["pDescriptorSets"], &meta_struct.pDescriptorSets, options); + FieldToJson(jdata["dynamicOffsetCount"], decoded_value.dynamicOffsetCount, options); + FieldToJson(jdata["pDynamicOffsets"], meta_struct.pDynamicOffsets, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceQueueGlobalPriorityCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPushConstantsInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceQueueGlobalPriorityCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkDeviceQueueGlobalPriorityCreateInfo& meta_struct = *data; + const VkPushConstantsInfo& decoded_value = *data->decoded_value; + const Decoded_VkPushConstantsInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["globalPriority"], decoded_value.globalPriority, options); + HandleToJson(jdata["layout"], meta_struct.layout, options); + FieldToJson(VkShaderStageFlags_t(),jdata["stageFlags"], decoded_value.stageFlags, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["pValues"], meta_struct.pValues, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceGlobalPriorityQueryFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPushDescriptorSetInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceGlobalPriorityQueryFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceGlobalPriorityQueryFeatures& meta_struct = *data; + const VkPushDescriptorSetInfo& decoded_value = *data->decoded_value; + const Decoded_VkPushDescriptorSetInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["globalPriorityQuery"] = static_cast(decoded_value.globalPriorityQuery); + FieldToJson(VkShaderStageFlags_t(),jdata["stageFlags"], decoded_value.stageFlags, options); + HandleToJson(jdata["layout"], meta_struct.layout, options); + FieldToJson(jdata["set"], decoded_value.set, options); + FieldToJson(jdata["descriptorWriteCount"], decoded_value.descriptorWriteCount, options); + FieldToJson(jdata["pDescriptorWrites"], meta_struct.pDescriptorWrites, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyGlobalPriorityProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineProtectedAccessFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkQueueFamilyGlobalPriorityProperties& decoded_value = *data->decoded_value; - const Decoded_VkQueueFamilyGlobalPriorityProperties& meta_struct = *data; + const VkPhysicalDevicePipelineProtectedAccessFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePipelineProtectedAccessFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["priorityCount"], decoded_value.priorityCount, options); - FieldToJson(jdata["priorities"], &meta_struct.priorities, options); + jdata["pipelineProtectedAccess"] = static_cast(decoded_value.pipelineProtectedAccess); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineRobustnessFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderSubgroupRotateFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures& meta_struct = *data; + const VkPhysicalDevicePipelineRobustnessFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePipelineRobustnessFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderSubgroupRotate"] = static_cast(decoded_value.shaderSubgroupRotate); - jdata["shaderSubgroupRotateClustered"] = static_cast(decoded_value.shaderSubgroupRotateClustered); + jdata["pipelineRobustness"] = static_cast(decoded_value.pipelineRobustness); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderFloatControls2Features* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineRobustnessProperties* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderFloatControls2Features& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderFloatControls2Features& meta_struct = *data; + const VkPhysicalDevicePipelineRobustnessProperties& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePipelineRobustnessProperties& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderFloatControls2"] = static_cast(decoded_value.shaderFloatControls2); + FieldToJson(jdata["defaultRobustnessStorageBuffers"], decoded_value.defaultRobustnessStorageBuffers, options); + FieldToJson(jdata["defaultRobustnessUniformBuffers"], decoded_value.defaultRobustnessUniformBuffers, options); + FieldToJson(jdata["defaultRobustnessVertexInputs"], decoded_value.defaultRobustnessVertexInputs, options); + FieldToJson(jdata["defaultRobustnessImages"], decoded_value.defaultRobustnessImages, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRobustnessCreateInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderExpectAssumeFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures& meta_struct = *data; + const VkPipelineRobustnessCreateInfo& decoded_value = *data->decoded_value; + const Decoded_VkPipelineRobustnessCreateInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderExpectAssume"] = static_cast(decoded_value.shaderExpectAssume); + FieldToJson(jdata["storageBuffers"], decoded_value.storageBuffers, options); + FieldToJson(jdata["uniformBuffers"], decoded_value.uniformBuffers, options); + FieldToJson(jdata["vertexInputs"], decoded_value.vertexInputs, options); + FieldToJson(jdata["images"], decoded_value.images, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } @@ -6676,10395 +6367,10528 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVe } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceIndexTypeUint8Features* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingAreaInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceIndexTypeUint8Features& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceIndexTypeUint8Features& meta_struct = *data; + const VkRenderingAreaInfo& decoded_value = *data->decoded_value; + const Decoded_VkRenderingAreaInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["indexTypeUint8"] = static_cast(decoded_value.indexTypeUint8); + FieldToJson(jdata["viewMask"], decoded_value.viewMask, options); + FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); + FieldToJson(jdata["pColorAttachmentFormats"], meta_struct.pColorAttachmentFormats, options); + FieldToJson(jdata["depthAttachmentFormat"], decoded_value.depthAttachmentFormat, options); + FieldToJson(jdata["stencilAttachmentFormat"], decoded_value.stencilAttachmentFormat, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryMapInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryMapInfo& decoded_value = *data->decoded_value; - const Decoded_VkMemoryMapInfo& meta_struct = *data; + const VkPhysicalDeviceDynamicRenderingLocalReadFeatures& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkMemoryMapFlags_t(),jdata["flags"], decoded_value.flags, options); - HandleToJson(jdata["memory"], meta_struct.memory, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); - FieldToJson(jdata["size"], decoded_value.size, options); + jdata["dynamicRenderingLocalRead"] = static_cast(decoded_value.dynamicRenderingLocalRead); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryUnmapInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingAttachmentLocationInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryUnmapInfo& decoded_value = *data->decoded_value; - const Decoded_VkMemoryUnmapInfo& meta_struct = *data; + const VkRenderingAttachmentLocationInfo& decoded_value = *data->decoded_value; + const Decoded_VkRenderingAttachmentLocationInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkMemoryUnmapFlags_t(),jdata["flags"], decoded_value.flags, options); - HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); + FieldToJson(jdata["pColorAttachmentLocations"], meta_struct.pColorAttachmentLocations, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance5Features* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingInputAttachmentIndexInfo* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMaintenance5Features& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMaintenance5Features& meta_struct = *data; + const VkRenderingInputAttachmentIndexInfo& decoded_value = *data->decoded_value; + const Decoded_VkRenderingInputAttachmentIndexInfo& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["maintenance5"] = static_cast(decoded_value.maintenance5); + FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); + FieldToJson(jdata["pColorAttachmentInputIndices"], meta_struct.pColorAttachmentInputIndices, options); + FieldToJson(jdata["pDepthInputAttachmentIndex"], meta_struct.pDepthInputAttachmentIndex, options); + FieldToJson(jdata["pStencilInputAttachmentIndex"], meta_struct.pStencilInputAttachmentIndex, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance5Properties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilitiesKHR* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkSurfaceCapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkSurfaceCapabilitiesKHR& meta_struct = *data; + + FieldToJson(jdata["minImageCount"], decoded_value.minImageCount, options); + FieldToJson(jdata["maxImageCount"], decoded_value.maxImageCount, options); + FieldToJson(jdata["currentExtent"], meta_struct.currentExtent, options); + FieldToJson(jdata["minImageExtent"], meta_struct.minImageExtent, options); + FieldToJson(jdata["maxImageExtent"], meta_struct.maxImageExtent, options); + FieldToJson(jdata["maxImageArrayLayers"], decoded_value.maxImageArrayLayers, options); + FieldToJson(VkSurfaceTransformFlagsKHR_t(),jdata["supportedTransforms"], decoded_value.supportedTransforms, options); + FieldToJson(jdata["currentTransform"], decoded_value.currentTransform, options); + FieldToJson(VkCompositeAlphaFlagsKHR_t(),jdata["supportedCompositeAlpha"], decoded_value.supportedCompositeAlpha, options); + FieldToJson(VkImageUsageFlags_t(),jdata["supportedUsageFlags"], decoded_value.supportedUsageFlags, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceFormatKHR* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkSurfaceFormatKHR& decoded_value = *data->decoded_value; + const Decoded_VkSurfaceFormatKHR& meta_struct = *data; + + FieldToJson(jdata["format"], decoded_value.format, options); + FieldToJson(jdata["colorSpace"], decoded_value.colorSpace, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainCreateInfoKHR* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkSwapchainCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkSwapchainCreateInfoKHR& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkSwapchainCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["surface"], meta_struct.surface, options); + FieldToJson(jdata["minImageCount"], decoded_value.minImageCount, options); + FieldToJson(jdata["imageFormat"], decoded_value.imageFormat, options); + FieldToJson(jdata["imageColorSpace"], decoded_value.imageColorSpace, options); + FieldToJson(jdata["imageExtent"], meta_struct.imageExtent, options); + FieldToJson(jdata["imageArrayLayers"], decoded_value.imageArrayLayers, options); + FieldToJson(VkImageUsageFlags_t(),jdata["imageUsage"], decoded_value.imageUsage, options); + FieldToJson(jdata["imageSharingMode"], decoded_value.imageSharingMode, options); + FieldToJson(jdata["queueFamilyIndexCount"], decoded_value.queueFamilyIndexCount, options); + FieldToJson(jdata["pQueueFamilyIndices"], meta_struct.pQueueFamilyIndices, options); + FieldToJson(jdata["preTransform"], decoded_value.preTransform, options); + FieldToJson(jdata["compositeAlpha"], decoded_value.compositeAlpha, options); + FieldToJson(jdata["presentMode"], decoded_value.presentMode, options); + jdata["clipped"] = static_cast(decoded_value.clipped); + HandleToJson(jdata["oldSwapchain"], meta_struct.oldSwapchain, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentInfoKHR* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPresentInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkPresentInfoKHR& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["waitSemaphoreCount"], decoded_value.waitSemaphoreCount, options); + HandleToJson(jdata["pWaitSemaphores"], &meta_struct.pWaitSemaphores, options); + FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); + HandleToJson(jdata["pSwapchains"], &meta_struct.pSwapchains, options); + FieldToJson(jdata["pImageIndices"], meta_struct.pImageIndices, options); + FieldToJson(jdata["pResults"], meta_struct.pResults, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSwapchainCreateInfoKHR* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkImageSwapchainCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkImageSwapchainCreateInfoKHR& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["swapchain"], meta_struct.swapchain, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindImageMemorySwapchainInfoKHR* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkBindImageMemorySwapchainInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkBindImageMemorySwapchainInfoKHR& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["swapchain"], meta_struct.swapchain, options); + FieldToJson(jdata["imageIndex"], decoded_value.imageIndex, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAcquireNextImageInfoKHR* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkAcquireNextImageInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkAcquireNextImageInfoKHR& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["swapchain"], meta_struct.swapchain, options); + FieldToJson(jdata["timeout"], decoded_value.timeout, options); + HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); + HandleToJson(jdata["fence"], meta_struct.fence, options); + FieldToJson(jdata["deviceMask"], decoded_value.deviceMask, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupPresentCapabilitiesKHR* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkDeviceGroupPresentCapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkDeviceGroupPresentCapabilitiesKHR& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["presentMask"], &meta_struct.presentMask, options); + FieldToJson(VkDeviceGroupPresentModeFlagsKHR_t(),jdata["modes"], decoded_value.modes, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupPresentInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMaintenance5Properties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMaintenance5Properties& meta_struct = *data; + const VkDeviceGroupPresentInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkDeviceGroupPresentInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["earlyFragmentMultisampleCoverageAfterSampleCounting"] = static_cast(decoded_value.earlyFragmentMultisampleCoverageAfterSampleCounting); - jdata["earlyFragmentSampleMaskTestBeforeSampleCounting"] = static_cast(decoded_value.earlyFragmentSampleMaskTestBeforeSampleCounting); - jdata["depthStencilSwizzleOneSupport"] = static_cast(decoded_value.depthStencilSwizzleOneSupport); - jdata["polygonModePointSize"] = static_cast(decoded_value.polygonModePointSize); - jdata["nonStrictSinglePixelWideLinesUseParallelogram"] = static_cast(decoded_value.nonStrictSinglePixelWideLinesUseParallelogram); - jdata["nonStrictWideLinesUseParallelogram"] = static_cast(decoded_value.nonStrictWideLinesUseParallelogram); + FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); + FieldToJson(jdata["pDeviceMasks"], meta_struct.pDeviceMasks, options); + FieldToJson(jdata["mode"], decoded_value.mode, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingAreaInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupSwapchainCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderingAreaInfo& decoded_value = *data->decoded_value; - const Decoded_VkRenderingAreaInfo& meta_struct = *data; + const VkDeviceGroupSwapchainCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkDeviceGroupSwapchainCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["viewMask"], decoded_value.viewMask, options); - FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); - FieldToJson(jdata["pColorAttachmentFormats"], meta_struct.pColorAttachmentFormats, options); - FieldToJson(jdata["depthAttachmentFormat"], decoded_value.depthAttachmentFormat, options); - FieldToJson(jdata["stencilAttachmentFormat"], decoded_value.stencilAttachmentFormat, options); + FieldToJson(VkDeviceGroupPresentModeFlagsKHR_t(),jdata["modes"], decoded_value.modes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSubresource2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayModeParametersKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageSubresource2& decoded_value = *data->decoded_value; - const Decoded_VkImageSubresource2& meta_struct = *data; + const VkDisplayModeParametersKHR& decoded_value = *data->decoded_value; + const Decoded_VkDisplayModeParametersKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["imageSubresource"], meta_struct.imageSubresource, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["visibleRegion"], meta_struct.visibleRegion, options); + FieldToJson(jdata["refreshRate"], decoded_value.refreshRate, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceImageSubresourceInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayModeCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceImageSubresourceInfo& decoded_value = *data->decoded_value; - const Decoded_VkDeviceImageSubresourceInfo& meta_struct = *data; + const VkDisplayModeCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkDisplayModeCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pCreateInfo"], meta_struct.pCreateInfo, options); - FieldToJson(jdata["pSubresource"], meta_struct.pSubresource, options); + FieldToJson(VkDisplayModeCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["parameters"], meta_struct.parameters, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubresourceLayout2* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayModePropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSubresourceLayout2& decoded_value = *data->decoded_value; - const Decoded_VkSubresourceLayout2& meta_struct = *data; + const VkDisplayModePropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkDisplayModePropertiesKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["subresourceLayout"], meta_struct.subresourceLayout, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + HandleToJson(jdata["displayMode"], meta_struct.displayMode, options); + FieldToJson(jdata["parameters"], meta_struct.parameters, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCreateFlags2CreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPlaneCapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineCreateFlags2CreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineCreateFlags2CreateInfo& meta_struct = *data; + const VkDisplayPlaneCapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkDisplayPlaneCapabilitiesKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineCreateFlags2_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(VkDisplayPlaneAlphaFlagsKHR_t(),jdata["supportedAlpha"], decoded_value.supportedAlpha, options); + FieldToJson(jdata["minSrcPosition"], meta_struct.minSrcPosition, options); + FieldToJson(jdata["maxSrcPosition"], meta_struct.maxSrcPosition, options); + FieldToJson(jdata["minSrcExtent"], meta_struct.minSrcExtent, options); + FieldToJson(jdata["maxSrcExtent"], meta_struct.maxSrcExtent, options); + FieldToJson(jdata["minDstPosition"], meta_struct.minDstPosition, options); + FieldToJson(jdata["maxDstPosition"], meta_struct.maxDstPosition, options); + FieldToJson(jdata["minDstExtent"], meta_struct.minDstExtent, options); + FieldToJson(jdata["maxDstExtent"], meta_struct.maxDstExtent, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferUsageFlags2CreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPlanePropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBufferUsageFlags2CreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkBufferUsageFlags2CreateInfo& meta_struct = *data; + const VkDisplayPlanePropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkDisplayPlanePropertiesKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkBufferUsageFlags2_t(),jdata["usage"], decoded_value.usage, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + HandleToJson(jdata["currentDisplay"], meta_struct.currentDisplay, options); + FieldToJson(jdata["currentStackIndex"], decoded_value.currentStackIndex, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePushDescriptorProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePushDescriptorProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePushDescriptorProperties& meta_struct = *data; + const VkDisplayPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkDisplayPropertiesKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxPushDescriptors"], decoded_value.maxPushDescriptors, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + HandleToJson(jdata["display"], meta_struct.display, options); + FieldToJson(jdata["displayName"], &meta_struct.displayName, options); + FieldToJson(jdata["physicalDimensions"], meta_struct.physicalDimensions, options); + FieldToJson(jdata["physicalResolution"], meta_struct.physicalResolution, options); + FieldToJson(VkSurfaceTransformFlagsKHR_t(),jdata["supportedTransforms"], decoded_value.supportedTransforms, options); + jdata["planeReorderPossible"] = static_cast(decoded_value.planeReorderPossible); + jdata["persistentContent"] = static_cast(decoded_value.persistentContent); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplaySurfaceCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDynamicRenderingLocalReadFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures& meta_struct = *data; + const VkDisplaySurfaceCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkDisplaySurfaceCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["dynamicRenderingLocalRead"] = static_cast(decoded_value.dynamicRenderingLocalRead); + FieldToJson(VkDisplaySurfaceCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["displayMode"], meta_struct.displayMode, options); + FieldToJson(jdata["planeIndex"], decoded_value.planeIndex, options); + FieldToJson(jdata["planeStackIndex"], decoded_value.planeStackIndex, options); + FieldToJson(jdata["transform"], decoded_value.transform, options); + FieldToJson(jdata["globalAlpha"], decoded_value.globalAlpha, options); + FieldToJson(jdata["alphaMode"], decoded_value.alphaMode, options); + FieldToJson(jdata["imageExtent"], meta_struct.imageExtent, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingAttachmentLocationInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPresentInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderingAttachmentLocationInfo& decoded_value = *data->decoded_value; - const Decoded_VkRenderingAttachmentLocationInfo& meta_struct = *data; + const VkDisplayPresentInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkDisplayPresentInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); - FieldToJson(jdata["pColorAttachmentLocations"], meta_struct.pColorAttachmentLocations, options); + FieldToJson(jdata["srcRect"], meta_struct.srcRect, options); + FieldToJson(jdata["dstRect"], meta_struct.dstRect, options); + jdata["persistent"] = static_cast(decoded_value.persistent); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingInputAttachmentIndexInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkXlibSurfaceCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderingInputAttachmentIndexInfo& decoded_value = *data->decoded_value; - const Decoded_VkRenderingInputAttachmentIndexInfo& meta_struct = *data; + const VkXlibSurfaceCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkXlibSurfaceCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); - FieldToJson(jdata["pColorAttachmentInputIndices"], meta_struct.pColorAttachmentInputIndices, options); - FieldToJson(jdata["pDepthInputAttachmentIndex"], meta_struct.pDepthInputAttachmentIndex, options); - FieldToJson(jdata["pStencilInputAttachmentIndex"], meta_struct.pStencilInputAttachmentIndex, options); + FieldToJson(VkXlibSurfaceCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["dpy"], meta_struct.dpy, options); + FieldToJson(jdata["window"], decoded_value.window, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance6Features* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkXcbSurfaceCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMaintenance6Features& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMaintenance6Features& meta_struct = *data; + const VkXcbSurfaceCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkXcbSurfaceCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["maintenance6"] = static_cast(decoded_value.maintenance6); + FieldToJson(VkXcbSurfaceCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["connection"], meta_struct.connection, options); + FieldToJson(jdata["window"], decoded_value.window, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance6Properties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWaylandSurfaceCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMaintenance6Properties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMaintenance6Properties& meta_struct = *data; + const VkWaylandSurfaceCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkWaylandSurfaceCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["blockTexelViewCompatibleMultipleLayers"] = static_cast(decoded_value.blockTexelViewCompatibleMultipleLayers); - FieldToJson(jdata["maxCombinedImageSamplerDescriptorCount"], decoded_value.maxCombinedImageSamplerDescriptorCount, options); - jdata["fragmentShadingRateClampCombinerInputs"] = static_cast(decoded_value.fragmentShadingRateClampCombinerInputs); + FieldToJson(VkWaylandSurfaceCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["display"], meta_struct.display, options); + FieldToJson(jdata["surface"], meta_struct.surface, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindMemoryStatus* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAndroidSurfaceCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindMemoryStatus& decoded_value = *data->decoded_value; - const Decoded_VkBindMemoryStatus& meta_struct = *data; + const VkAndroidSurfaceCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkAndroidSurfaceCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pResult"], meta_struct.pResult, options); + FieldToJson(VkAndroidSurfaceCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["window"], meta_struct.window, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindDescriptorSetsInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWin32SurfaceCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindDescriptorSetsInfo& decoded_value = *data->decoded_value; - const Decoded_VkBindDescriptorSetsInfo& meta_struct = *data; + const VkWin32SurfaceCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkWin32SurfaceCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkShaderStageFlags_t(),jdata["stageFlags"], decoded_value.stageFlags, options); - HandleToJson(jdata["layout"], meta_struct.layout, options); - FieldToJson(jdata["firstSet"], decoded_value.firstSet, options); - FieldToJson(jdata["descriptorSetCount"], decoded_value.descriptorSetCount, options); - HandleToJson(jdata["pDescriptorSets"], &meta_struct.pDescriptorSets, options); - FieldToJson(jdata["dynamicOffsetCount"], decoded_value.dynamicOffsetCount, options); - FieldToJson(jdata["pDynamicOffsets"], meta_struct.pDynamicOffsets, options); + FieldToJson(VkWin32SurfaceCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["hinstance"], meta_struct.hinstance, options); + FieldToJson(jdata["hwnd"], meta_struct.hwnd, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPushConstantsInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyQueryResultStatusPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPushConstantsInfo& decoded_value = *data->decoded_value; - const Decoded_VkPushConstantsInfo& meta_struct = *data; + const VkQueueFamilyQueryResultStatusPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkQueueFamilyQueryResultStatusPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["layout"], meta_struct.layout, options); - FieldToJson(VkShaderStageFlags_t(),jdata["stageFlags"], decoded_value.stageFlags, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); - FieldToJson(jdata["size"], decoded_value.size, options); - FieldToJson(jdata["pValues"], meta_struct.pValues, options); + jdata["queryResultStatusSupport"] = static_cast(decoded_value.queryResultStatusSupport); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPushDescriptorSetInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyVideoPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPushDescriptorSetInfo& decoded_value = *data->decoded_value; - const Decoded_VkPushDescriptorSetInfo& meta_struct = *data; + const VkQueueFamilyVideoPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkQueueFamilyVideoPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkShaderStageFlags_t(),jdata["stageFlags"], decoded_value.stageFlags, options); - HandleToJson(jdata["layout"], meta_struct.layout, options); - FieldToJson(jdata["set"], decoded_value.set, options); - FieldToJson(jdata["descriptorWriteCount"], decoded_value.descriptorWriteCount, options); - FieldToJson(jdata["pDescriptorWrites"], meta_struct.pDescriptorWrites, options); + FieldToJson(VkVideoCodecOperationFlagsKHR_t(),jdata["videoCodecOperations"], decoded_value.videoCodecOperations, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineProtectedAccessFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoProfileInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePipelineProtectedAccessFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePipelineProtectedAccessFeatures& meta_struct = *data; + const VkVideoProfileInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoProfileInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["pipelineProtectedAccess"] = static_cast(decoded_value.pipelineProtectedAccess); + FieldToJson(jdata["videoCodecOperation"], decoded_value.videoCodecOperation, options); + FieldToJson(VkVideoChromaSubsamplingFlagsKHR_t(),jdata["chromaSubsampling"], decoded_value.chromaSubsampling, options); + FieldToJson(VkVideoComponentBitDepthFlagsKHR_t(),jdata["lumaBitDepth"], decoded_value.lumaBitDepth, options); + FieldToJson(VkVideoComponentBitDepthFlagsKHR_t(),jdata["chromaBitDepth"], decoded_value.chromaBitDepth, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineRobustnessFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoProfileListInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePipelineRobustnessFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePipelineRobustnessFeatures& meta_struct = *data; + const VkVideoProfileListInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoProfileListInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["pipelineRobustness"] = static_cast(decoded_value.pipelineRobustness); + FieldToJson(jdata["profileCount"], decoded_value.profileCount, options); + FieldToJson(jdata["pProfiles"], meta_struct.pProfiles, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineRobustnessProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoCapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePipelineRobustnessProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePipelineRobustnessProperties& meta_struct = *data; + const VkVideoCapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoCapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["defaultRobustnessStorageBuffers"], decoded_value.defaultRobustnessStorageBuffers, options); - FieldToJson(jdata["defaultRobustnessUniformBuffers"], decoded_value.defaultRobustnessUniformBuffers, options); - FieldToJson(jdata["defaultRobustnessVertexInputs"], decoded_value.defaultRobustnessVertexInputs, options); - FieldToJson(jdata["defaultRobustnessImages"], decoded_value.defaultRobustnessImages, options); + FieldToJson(VkVideoCapabilityFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["minBitstreamBufferOffsetAlignment"], decoded_value.minBitstreamBufferOffsetAlignment, options); + FieldToJson(jdata["minBitstreamBufferSizeAlignment"], decoded_value.minBitstreamBufferSizeAlignment, options); + FieldToJson(jdata["pictureAccessGranularity"], meta_struct.pictureAccessGranularity, options); + FieldToJson(jdata["minCodedExtent"], meta_struct.minCodedExtent, options); + FieldToJson(jdata["maxCodedExtent"], meta_struct.maxCodedExtent, options); + FieldToJson(jdata["maxDpbSlots"], decoded_value.maxDpbSlots, options); + FieldToJson(jdata["maxActiveReferencePictures"], decoded_value.maxActiveReferencePictures, options); + FieldToJson(jdata["stdHeaderVersion"], meta_struct.stdHeaderVersion, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRobustnessCreateInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoFormatInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineRobustnessCreateInfo& decoded_value = *data->decoded_value; - const Decoded_VkPipelineRobustnessCreateInfo& meta_struct = *data; + const VkPhysicalDeviceVideoFormatInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVideoFormatInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["storageBuffers"], decoded_value.storageBuffers, options); - FieldToJson(jdata["uniformBuffers"], decoded_value.uniformBuffers, options); - FieldToJson(jdata["vertexInputs"], decoded_value.vertexInputs, options); - FieldToJson(jdata["images"], decoded_value.images, options); + FieldToJson(VkImageUsageFlags_t(),jdata["imageUsage"], decoded_value.imageUsage, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceHostImageCopyFeatures* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoFormatPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceHostImageCopyFeatures& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceHostImageCopyFeatures& meta_struct = *data; + const VkVideoFormatPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoFormatPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["hostImageCopy"] = static_cast(decoded_value.hostImageCopy); + FieldToJson(jdata["format"], decoded_value.format, options); + FieldToJson(jdata["componentMapping"], meta_struct.componentMapping, options); + FieldToJson(VkImageCreateFlags_t(),jdata["imageCreateFlags"], decoded_value.imageCreateFlags, options); + FieldToJson(jdata["imageType"], decoded_value.imageType, options); + FieldToJson(jdata["imageTiling"], decoded_value.imageTiling, options); + FieldToJson(VkImageUsageFlags_t(),jdata["imageUsageFlags"], decoded_value.imageUsageFlags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceHostImageCopyProperties* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoPictureResourceInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceHostImageCopyProperties& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceHostImageCopyProperties& meta_struct = *data; + const VkVideoPictureResourceInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoPictureResourceInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["copySrcLayoutCount"], decoded_value.copySrcLayoutCount, options); - FieldToJson(jdata["pCopySrcLayouts"], meta_struct.pCopySrcLayouts, options); - FieldToJson(jdata["copyDstLayoutCount"], decoded_value.copyDstLayoutCount, options); - FieldToJson(jdata["pCopyDstLayouts"], meta_struct.pCopyDstLayouts, options); - FieldToJson(jdata["optimalTilingLayoutUUID"], uuid_to_string(sizeof(decoded_value.optimalTilingLayoutUUID), decoded_value.optimalTilingLayoutUUID), options); - jdata["identicalMemoryTypeRequirements"] = static_cast(decoded_value.identicalMemoryTypeRequirements); + FieldToJson(jdata["codedOffset"], meta_struct.codedOffset, options); + FieldToJson(jdata["codedExtent"], meta_struct.codedExtent, options); + FieldToJson(jdata["baseArrayLayer"], decoded_value.baseArrayLayer, options); + HandleToJson(jdata["imageViewBinding"], meta_struct.imageViewBinding, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyImageToImageInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoReferenceSlotInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCopyImageToImageInfo& decoded_value = *data->decoded_value; - const Decoded_VkCopyImageToImageInfo& meta_struct = *data; + const VkVideoReferenceSlotInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoReferenceSlotInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkHostImageCopyFlags_t(),jdata["flags"], decoded_value.flags, options); - HandleToJson(jdata["srcImage"], meta_struct.srcImage, options); - FieldToJson(jdata["srcImageLayout"], decoded_value.srcImageLayout, options); - HandleToJson(jdata["dstImage"], meta_struct.dstImage, options); - FieldToJson(jdata["dstImageLayout"], decoded_value.dstImageLayout, options); - FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); - FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); + FieldToJson(jdata["slotIndex"], decoded_value.slotIndex, options); + FieldToJson(jdata["pPictureResource"], meta_struct.pPictureResource, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkHostImageLayoutTransitionInfo* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoSessionMemoryRequirementsKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkHostImageLayoutTransitionInfo& decoded_value = *data->decoded_value; - const Decoded_VkHostImageLayoutTransitionInfo& meta_struct = *data; + const VkVideoSessionMemoryRequirementsKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoSessionMemoryRequirementsKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["image"], meta_struct.image, options); - FieldToJson(jdata["oldLayout"], decoded_value.oldLayout, options); - FieldToJson(jdata["newLayout"], decoded_value.newLayout, options); - FieldToJson(jdata["subresourceRange"], meta_struct.subresourceRange, options); + FieldToJson(jdata["memoryBindIndex"], decoded_value.memoryBindIndex, options); + FieldToJson(jdata["memoryRequirements"], meta_struct.memoryRequirements, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubresourceHostMemcpySize* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindVideoSessionMemoryInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSubresourceHostMemcpySize& decoded_value = *data->decoded_value; - const Decoded_VkSubresourceHostMemcpySize& meta_struct = *data; + const VkBindVideoSessionMemoryInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkBindVideoSessionMemoryInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["memoryBindIndex"], decoded_value.memoryBindIndex, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["memoryOffset"], decoded_value.memoryOffset, options); + FieldToJson(jdata["memorySize"], decoded_value.memorySize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkHostImageCopyDevicePerformanceQuery* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoSessionCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkHostImageCopyDevicePerformanceQuery& decoded_value = *data->decoded_value; - const Decoded_VkHostImageCopyDevicePerformanceQuery& meta_struct = *data; + const VkVideoSessionCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoSessionCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["optimalDeviceAccess"] = static_cast(decoded_value.optimalDeviceAccess); - jdata["identicalMemoryLayout"] = static_cast(decoded_value.identicalMemoryLayout); + FieldToJson(jdata["queueFamilyIndex"], decoded_value.queueFamilyIndex, options); + FieldToJson(VkVideoSessionCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["pVideoProfile"], meta_struct.pVideoProfile, options); + FieldToJson(jdata["pictureFormat"], decoded_value.pictureFormat, options); + FieldToJson(jdata["maxCodedExtent"], meta_struct.maxCodedExtent, options); + FieldToJson(jdata["referencePictureFormat"], decoded_value.referencePictureFormat, options); + FieldToJson(jdata["maxDpbSlots"], decoded_value.maxDpbSlots, options); + FieldToJson(jdata["maxActiveReferencePictures"], decoded_value.maxActiveReferencePictures, options); + FieldToJson(jdata["pStdHeaderVersion"], meta_struct.pStdHeaderVersion, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoSessionParametersCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfaceCapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkSurfaceCapabilitiesKHR& meta_struct = *data; + const VkVideoSessionParametersCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoSessionParametersCreateInfoKHR& meta_struct = *data; - FieldToJson(jdata["minImageCount"], decoded_value.minImageCount, options); - FieldToJson(jdata["maxImageCount"], decoded_value.maxImageCount, options); - FieldToJson(jdata["currentExtent"], meta_struct.currentExtent, options); - FieldToJson(jdata["minImageExtent"], meta_struct.minImageExtent, options); - FieldToJson(jdata["maxImageExtent"], meta_struct.maxImageExtent, options); - FieldToJson(jdata["maxImageArrayLayers"], decoded_value.maxImageArrayLayers, options); - FieldToJson(VkSurfaceTransformFlagsKHR_t(),jdata["supportedTransforms"], decoded_value.supportedTransforms, options); - FieldToJson(jdata["currentTransform"], decoded_value.currentTransform, options); - FieldToJson(VkCompositeAlphaFlagsKHR_t(),jdata["supportedCompositeAlpha"], decoded_value.supportedCompositeAlpha, options); - FieldToJson(VkImageUsageFlags_t(),jdata["supportedUsageFlags"], decoded_value.supportedUsageFlags, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkVideoSessionParametersCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["videoSessionParametersTemplate"], meta_struct.videoSessionParametersTemplate, options); + HandleToJson(jdata["videoSession"], meta_struct.videoSession, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceFormatKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoSessionParametersUpdateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfaceFormatKHR& decoded_value = *data->decoded_value; - const Decoded_VkSurfaceFormatKHR& meta_struct = *data; + const VkVideoSessionParametersUpdateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoSessionParametersUpdateInfoKHR& meta_struct = *data; - FieldToJson(jdata["format"], decoded_value.format, options); - FieldToJson(jdata["colorSpace"], decoded_value.colorSpace, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["updateSequenceCount"], decoded_value.updateSequenceCount, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoBeginCodingInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSwapchainCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkSwapchainCreateInfoKHR& meta_struct = *data; + const VkVideoBeginCodingInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoBeginCodingInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkSwapchainCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - HandleToJson(jdata["surface"], meta_struct.surface, options); - FieldToJson(jdata["minImageCount"], decoded_value.minImageCount, options); - FieldToJson(jdata["imageFormat"], decoded_value.imageFormat, options); - FieldToJson(jdata["imageColorSpace"], decoded_value.imageColorSpace, options); - FieldToJson(jdata["imageExtent"], meta_struct.imageExtent, options); - FieldToJson(jdata["imageArrayLayers"], decoded_value.imageArrayLayers, options); - FieldToJson(VkImageUsageFlags_t(),jdata["imageUsage"], decoded_value.imageUsage, options); - FieldToJson(jdata["imageSharingMode"], decoded_value.imageSharingMode, options); - FieldToJson(jdata["queueFamilyIndexCount"], decoded_value.queueFamilyIndexCount, options); - FieldToJson(jdata["pQueueFamilyIndices"], meta_struct.pQueueFamilyIndices, options); - FieldToJson(jdata["preTransform"], decoded_value.preTransform, options); - FieldToJson(jdata["compositeAlpha"], decoded_value.compositeAlpha, options); - FieldToJson(jdata["presentMode"], decoded_value.presentMode, options); - jdata["clipped"] = static_cast(decoded_value.clipped); - HandleToJson(jdata["oldSwapchain"], meta_struct.oldSwapchain, options); + FieldToJson(VkVideoBeginCodingFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["videoSession"], meta_struct.videoSession, options); + HandleToJson(jdata["videoSessionParameters"], meta_struct.videoSessionParameters, options); + FieldToJson(jdata["referenceSlotCount"], decoded_value.referenceSlotCount, options); + FieldToJson(jdata["pReferenceSlots"], meta_struct.pReferenceSlots, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEndCodingInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPresentInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkPresentInfoKHR& meta_struct = *data; + const VkVideoEndCodingInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEndCodingInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["waitSemaphoreCount"], decoded_value.waitSemaphoreCount, options); - HandleToJson(jdata["pWaitSemaphores"], &meta_struct.pWaitSemaphores, options); - FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); - HandleToJson(jdata["pSwapchains"], &meta_struct.pSwapchains, options); - FieldToJson(jdata["pImageIndices"], meta_struct.pImageIndices, options); - FieldToJson(jdata["pResults"], meta_struct.pResults, options); + FieldToJson(VkVideoEndCodingFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSwapchainCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoCodingControlInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageSwapchainCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkImageSwapchainCreateInfoKHR& meta_struct = *data; + const VkVideoCodingControlInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoCodingControlInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["swapchain"], meta_struct.swapchain, options); + FieldToJson(VkVideoCodingControlFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindImageMemorySwapchainInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeCapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindImageMemorySwapchainInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkBindImageMemorySwapchainInfoKHR& meta_struct = *data; + const VkVideoDecodeCapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeCapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["swapchain"], meta_struct.swapchain, options); - FieldToJson(jdata["imageIndex"], decoded_value.imageIndex, options); + FieldToJson(VkVideoDecodeCapabilityFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAcquireNextImageInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeUsageInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAcquireNextImageInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkAcquireNextImageInfoKHR& meta_struct = *data; + const VkVideoDecodeUsageInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeUsageInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["swapchain"], meta_struct.swapchain, options); - FieldToJson(jdata["timeout"], decoded_value.timeout, options); - HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); - HandleToJson(jdata["fence"], meta_struct.fence, options); - FieldToJson(jdata["deviceMask"], decoded_value.deviceMask, options); + FieldToJson(VkVideoDecodeUsageFlagsKHR_t(),jdata["videoUsageHints"], decoded_value.videoUsageHints, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupPresentCapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceGroupPresentCapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkDeviceGroupPresentCapabilitiesKHR& meta_struct = *data; + const VkVideoDecodeInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["presentMask"], &meta_struct.presentMask, options); - FieldToJson(VkDeviceGroupPresentModeFlagsKHR_t(),jdata["modes"], decoded_value.modes, options); + FieldToJson(VkVideoDecodeFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["srcBuffer"], meta_struct.srcBuffer, options); + FieldToJson(jdata["srcBufferOffset"], decoded_value.srcBufferOffset, options); + FieldToJson(jdata["srcBufferRange"], decoded_value.srcBufferRange, options); + FieldToJson(jdata["dstPictureResource"], meta_struct.dstPictureResource, options); + FieldToJson(jdata["pSetupReferenceSlot"], meta_struct.pSetupReferenceSlot, options); + FieldToJson(jdata["referenceSlotCount"], decoded_value.referenceSlotCount, options); + FieldToJson(jdata["pReferenceSlots"], meta_struct.pReferenceSlots, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupPresentInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264CapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceGroupPresentInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkDeviceGroupPresentInfoKHR& meta_struct = *data; + const VkVideoEncodeH264CapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264CapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); - FieldToJson(jdata["pDeviceMasks"], meta_struct.pDeviceMasks, options); - FieldToJson(jdata["mode"], decoded_value.mode, options); + FieldToJson(VkVideoEncodeH264CapabilityFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["maxLevelIdc"], decoded_value.maxLevelIdc, options); + FieldToJson(jdata["maxSliceCount"], decoded_value.maxSliceCount, options); + FieldToJson(jdata["maxPPictureL0ReferenceCount"], decoded_value.maxPPictureL0ReferenceCount, options); + FieldToJson(jdata["maxBPictureL0ReferenceCount"], decoded_value.maxBPictureL0ReferenceCount, options); + FieldToJson(jdata["maxL1ReferenceCount"], decoded_value.maxL1ReferenceCount, options); + FieldToJson(jdata["maxTemporalLayerCount"], decoded_value.maxTemporalLayerCount, options); + jdata["expectDyadicTemporalLayerPattern"] = static_cast(decoded_value.expectDyadicTemporalLayerPattern); + FieldToJson(jdata["minQp"], decoded_value.minQp, options); + FieldToJson(jdata["maxQp"], decoded_value.maxQp, options); + jdata["prefersGopRemainingFrames"] = static_cast(decoded_value.prefersGopRemainingFrames); + jdata["requiresGopRemainingFrames"] = static_cast(decoded_value.requiresGopRemainingFrames); + FieldToJson(VkVideoEncodeH264StdFlagsKHR_t(),jdata["stdSyntaxFlags"], decoded_value.stdSyntaxFlags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupSwapchainCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264QpKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceGroupSwapchainCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkDeviceGroupSwapchainCreateInfoKHR& meta_struct = *data; + const VkVideoEncodeH264QpKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264QpKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDeviceGroupPresentModeFlagsKHR_t(),jdata["modes"], decoded_value.modes, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["qpI"], decoded_value.qpI, options); + FieldToJson(jdata["qpP"], decoded_value.qpP, options); + FieldToJson(jdata["qpB"], decoded_value.qpB, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayModeParametersKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264QualityLevelPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayModeParametersKHR& decoded_value = *data->decoded_value; - const Decoded_VkDisplayModeParametersKHR& meta_struct = *data; + const VkVideoEncodeH264QualityLevelPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264QualityLevelPropertiesKHR& meta_struct = *data; - FieldToJson(jdata["visibleRegion"], meta_struct.visibleRegion, options); - FieldToJson(jdata["refreshRate"], decoded_value.refreshRate, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkVideoEncodeH264RateControlFlagsKHR_t(),jdata["preferredRateControlFlags"], decoded_value.preferredRateControlFlags, options); + FieldToJson(jdata["preferredGopFrameCount"], decoded_value.preferredGopFrameCount, options); + FieldToJson(jdata["preferredIdrPeriod"], decoded_value.preferredIdrPeriod, options); + FieldToJson(jdata["preferredConsecutiveBFrameCount"], decoded_value.preferredConsecutiveBFrameCount, options); + FieldToJson(jdata["preferredTemporalLayerCount"], decoded_value.preferredTemporalLayerCount, options); + FieldToJson(jdata["preferredConstantQp"], meta_struct.preferredConstantQp, options); + FieldToJson(jdata["preferredMaxL0ReferenceCount"], decoded_value.preferredMaxL0ReferenceCount, options); + FieldToJson(jdata["preferredMaxL1ReferenceCount"], decoded_value.preferredMaxL1ReferenceCount, options); + jdata["preferredStdEntropyCodingModeFlag"] = static_cast(decoded_value.preferredStdEntropyCodingModeFlag); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayModeCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264SessionCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayModeCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkDisplayModeCreateInfoKHR& meta_struct = *data; + const VkVideoEncodeH264SessionCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264SessionCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDisplayModeCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["parameters"], meta_struct.parameters, options); + jdata["useMaxLevelIdc"] = static_cast(decoded_value.useMaxLevelIdc); + FieldToJson(jdata["maxLevelIdc"], decoded_value.maxLevelIdc, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayModePropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264SessionParametersAddInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayModePropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkDisplayModePropertiesKHR& meta_struct = *data; + const VkVideoEncodeH264SessionParametersAddInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264SessionParametersAddInfoKHR& meta_struct = *data; - HandleToJson(jdata["displayMode"], meta_struct.displayMode, options); - FieldToJson(jdata["parameters"], meta_struct.parameters, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["stdSPSCount"], decoded_value.stdSPSCount, options); + FieldToJson(jdata["pStdSPSs"], meta_struct.pStdSPSs, options); + FieldToJson(jdata["stdPPSCount"], decoded_value.stdPPSCount, options); + FieldToJson(jdata["pStdPPSs"], meta_struct.pStdPPSs, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPlaneCapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264SessionParametersCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayPlaneCapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkDisplayPlaneCapabilitiesKHR& meta_struct = *data; + const VkVideoEncodeH264SessionParametersCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264SessionParametersCreateInfoKHR& meta_struct = *data; - FieldToJson(VkDisplayPlaneAlphaFlagsKHR_t(),jdata["supportedAlpha"], decoded_value.supportedAlpha, options); - FieldToJson(jdata["minSrcPosition"], meta_struct.minSrcPosition, options); - FieldToJson(jdata["maxSrcPosition"], meta_struct.maxSrcPosition, options); - FieldToJson(jdata["minSrcExtent"], meta_struct.minSrcExtent, options); - FieldToJson(jdata["maxSrcExtent"], meta_struct.maxSrcExtent, options); - FieldToJson(jdata["minDstPosition"], meta_struct.minDstPosition, options); - FieldToJson(jdata["maxDstPosition"], meta_struct.maxDstPosition, options); - FieldToJson(jdata["minDstExtent"], meta_struct.minDstExtent, options); - FieldToJson(jdata["maxDstExtent"], meta_struct.maxDstExtent, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["maxStdSPSCount"], decoded_value.maxStdSPSCount, options); + FieldToJson(jdata["maxStdPPSCount"], decoded_value.maxStdPPSCount, options); + FieldToJson(jdata["pParametersAddInfo"], meta_struct.pParametersAddInfo, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPlanePropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264SessionParametersGetInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayPlanePropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkDisplayPlanePropertiesKHR& meta_struct = *data; + const VkVideoEncodeH264SessionParametersGetInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264SessionParametersGetInfoKHR& meta_struct = *data; - HandleToJson(jdata["currentDisplay"], meta_struct.currentDisplay, options); - FieldToJson(jdata["currentStackIndex"], decoded_value.currentStackIndex, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["writeStdSPS"] = static_cast(decoded_value.writeStdSPS); + jdata["writeStdPPS"] = static_cast(decoded_value.writeStdPPS); + FieldToJson(jdata["stdSPSId"], decoded_value.stdSPSId, options); + FieldToJson(jdata["stdPPSId"], decoded_value.stdPPSId, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264SessionParametersFeedbackInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkDisplayPropertiesKHR& meta_struct = *data; + const VkVideoEncodeH264SessionParametersFeedbackInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264SessionParametersFeedbackInfoKHR& meta_struct = *data; - HandleToJson(jdata["display"], meta_struct.display, options); - FieldToJson(jdata["displayName"], &meta_struct.displayName, options); - FieldToJson(jdata["physicalDimensions"], meta_struct.physicalDimensions, options); - FieldToJson(jdata["physicalResolution"], meta_struct.physicalResolution, options); - FieldToJson(VkSurfaceTransformFlagsKHR_t(),jdata["supportedTransforms"], decoded_value.supportedTransforms, options); - jdata["planeReorderPossible"] = static_cast(decoded_value.planeReorderPossible); - jdata["persistentContent"] = static_cast(decoded_value.persistentContent); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["hasStdSPSOverrides"] = static_cast(decoded_value.hasStdSPSOverrides); + jdata["hasStdPPSOverrides"] = static_cast(decoded_value.hasStdPPSOverrides); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplaySurfaceCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264NaluSliceInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplaySurfaceCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkDisplaySurfaceCreateInfoKHR& meta_struct = *data; + const VkVideoEncodeH264NaluSliceInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264NaluSliceInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDisplaySurfaceCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - HandleToJson(jdata["displayMode"], meta_struct.displayMode, options); - FieldToJson(jdata["planeIndex"], decoded_value.planeIndex, options); - FieldToJson(jdata["planeStackIndex"], decoded_value.planeStackIndex, options); - FieldToJson(jdata["transform"], decoded_value.transform, options); - FieldToJson(jdata["globalAlpha"], decoded_value.globalAlpha, options); - FieldToJson(jdata["alphaMode"], decoded_value.alphaMode, options); - FieldToJson(jdata["imageExtent"], meta_struct.imageExtent, options); + FieldToJson(jdata["constantQp"], decoded_value.constantQp, options); + FieldToJson(jdata["pStdSliceHeader"], meta_struct.pStdSliceHeader, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPresentInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264PictureInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayPresentInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkDisplayPresentInfoKHR& meta_struct = *data; + const VkVideoEncodeH264PictureInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264PictureInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["srcRect"], meta_struct.srcRect, options); - FieldToJson(jdata["dstRect"], meta_struct.dstRect, options); - jdata["persistent"] = static_cast(decoded_value.persistent); + FieldToJson(jdata["naluSliceEntryCount"], decoded_value.naluSliceEntryCount, options); + FieldToJson(jdata["pNaluSliceEntries"], meta_struct.pNaluSliceEntries, options); + FieldToJson(jdata["pStdPictureInfo"], meta_struct.pStdPictureInfo, options); + jdata["generatePrefixNalu"] = static_cast(decoded_value.generatePrefixNalu); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkXlibSurfaceCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264DpbSlotInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkXlibSurfaceCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkXlibSurfaceCreateInfoKHR& meta_struct = *data; + const VkVideoEncodeH264DpbSlotInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264DpbSlotInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkXlibSurfaceCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["dpy"], meta_struct.dpy, options); - FieldToJson(jdata["window"], decoded_value.window, options); + FieldToJson(jdata["pStdReferenceInfo"], meta_struct.pStdReferenceInfo, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkXcbSurfaceCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264ProfileInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkXcbSurfaceCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkXcbSurfaceCreateInfoKHR& meta_struct = *data; + const VkVideoEncodeH264ProfileInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264ProfileInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkXcbSurfaceCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["connection"], meta_struct.connection, options); - FieldToJson(jdata["window"], decoded_value.window, options); + FieldToJson(jdata["stdProfileIdc"], decoded_value.stdProfileIdc, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWaylandSurfaceCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264RateControlInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkWaylandSurfaceCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkWaylandSurfaceCreateInfoKHR& meta_struct = *data; + const VkVideoEncodeH264RateControlInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264RateControlInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkWaylandSurfaceCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["display"], meta_struct.display, options); - FieldToJson(jdata["surface"], meta_struct.surface, options); + FieldToJson(VkVideoEncodeH264RateControlFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["gopFrameCount"], decoded_value.gopFrameCount, options); + FieldToJson(jdata["idrPeriod"], decoded_value.idrPeriod, options); + FieldToJson(jdata["consecutiveBFrameCount"], decoded_value.consecutiveBFrameCount, options); + FieldToJson(jdata["temporalLayerCount"], decoded_value.temporalLayerCount, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAndroidSurfaceCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264FrameSizeKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAndroidSurfaceCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkAndroidSurfaceCreateInfoKHR& meta_struct = *data; + const VkVideoEncodeH264FrameSizeKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264FrameSizeKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkAndroidSurfaceCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["window"], meta_struct.window, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["frameISize"], decoded_value.frameISize, options); + FieldToJson(jdata["framePSize"], decoded_value.framePSize, options); + FieldToJson(jdata["frameBSize"], decoded_value.frameBSize, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWin32SurfaceCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264RateControlLayerInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkWin32SurfaceCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkWin32SurfaceCreateInfoKHR& meta_struct = *data; + const VkVideoEncodeH264RateControlLayerInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264RateControlLayerInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkWin32SurfaceCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["hinstance"], meta_struct.hinstance, options); - FieldToJson(jdata["hwnd"], meta_struct.hwnd, options); + jdata["useMinQp"] = static_cast(decoded_value.useMinQp); + FieldToJson(jdata["minQp"], meta_struct.minQp, options); + jdata["useMaxQp"] = static_cast(decoded_value.useMaxQp); + FieldToJson(jdata["maxQp"], meta_struct.maxQp, options); + jdata["useMaxFrameSize"] = static_cast(decoded_value.useMaxFrameSize); + FieldToJson(jdata["maxFrameSize"], meta_struct.maxFrameSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyQueryResultStatusPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264GopRemainingFrameInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkQueueFamilyQueryResultStatusPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkQueueFamilyQueryResultStatusPropertiesKHR& meta_struct = *data; + const VkVideoEncodeH264GopRemainingFrameInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264GopRemainingFrameInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["queryResultStatusSupport"] = static_cast(decoded_value.queryResultStatusSupport); + jdata["useGopRemainingFrames"] = static_cast(decoded_value.useGopRemainingFrames); + FieldToJson(jdata["gopRemainingI"], decoded_value.gopRemainingI, options); + FieldToJson(jdata["gopRemainingP"], decoded_value.gopRemainingP, options); + FieldToJson(jdata["gopRemainingB"], decoded_value.gopRemainingB, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyVideoPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264ProfileInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkQueueFamilyVideoPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkQueueFamilyVideoPropertiesKHR& meta_struct = *data; + const VkVideoDecodeH264ProfileInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeH264ProfileInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoCodecOperationFlagsKHR_t(),jdata["videoCodecOperations"], decoded_value.videoCodecOperations, options); + FieldToJson(jdata["stdProfileIdc"], decoded_value.stdProfileIdc, options); + FieldToJson(jdata["pictureLayout"], decoded_value.pictureLayout, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoProfileInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264CapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoProfileInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoProfileInfoKHR& meta_struct = *data; + const VkVideoDecodeH264CapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeH264CapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["videoCodecOperation"], decoded_value.videoCodecOperation, options); - FieldToJson(VkVideoChromaSubsamplingFlagsKHR_t(),jdata["chromaSubsampling"], decoded_value.chromaSubsampling, options); - FieldToJson(VkVideoComponentBitDepthFlagsKHR_t(),jdata["lumaBitDepth"], decoded_value.lumaBitDepth, options); - FieldToJson(VkVideoComponentBitDepthFlagsKHR_t(),jdata["chromaBitDepth"], decoded_value.chromaBitDepth, options); + FieldToJson(jdata["maxLevelIdc"], decoded_value.maxLevelIdc, options); + FieldToJson(jdata["fieldOffsetGranularity"], meta_struct.fieldOffsetGranularity, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoProfileListInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264SessionParametersAddInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoProfileListInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoProfileListInfoKHR& meta_struct = *data; + const VkVideoDecodeH264SessionParametersAddInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeH264SessionParametersAddInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["profileCount"], decoded_value.profileCount, options); - FieldToJson(jdata["pProfiles"], meta_struct.pProfiles, options); + FieldToJson(jdata["stdSPSCount"], decoded_value.stdSPSCount, options); + FieldToJson(jdata["pStdSPSs"], meta_struct.pStdSPSs, options); + FieldToJson(jdata["stdPPSCount"], decoded_value.stdPPSCount, options); + FieldToJson(jdata["pStdPPSs"], meta_struct.pStdPPSs, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoCapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264SessionParametersCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoCapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoCapabilitiesKHR& meta_struct = *data; + const VkVideoDecodeH264SessionParametersCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeH264SessionParametersCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoCapabilityFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["minBitstreamBufferOffsetAlignment"], decoded_value.minBitstreamBufferOffsetAlignment, options); - FieldToJson(jdata["minBitstreamBufferSizeAlignment"], decoded_value.minBitstreamBufferSizeAlignment, options); - FieldToJson(jdata["pictureAccessGranularity"], meta_struct.pictureAccessGranularity, options); - FieldToJson(jdata["minCodedExtent"], meta_struct.minCodedExtent, options); - FieldToJson(jdata["maxCodedExtent"], meta_struct.maxCodedExtent, options); - FieldToJson(jdata["maxDpbSlots"], decoded_value.maxDpbSlots, options); - FieldToJson(jdata["maxActiveReferencePictures"], decoded_value.maxActiveReferencePictures, options); - FieldToJson(jdata["stdHeaderVersion"], meta_struct.stdHeaderVersion, options); + FieldToJson(jdata["maxStdSPSCount"], decoded_value.maxStdSPSCount, options); + FieldToJson(jdata["maxStdPPSCount"], decoded_value.maxStdPPSCount, options); + FieldToJson(jdata["pParametersAddInfo"], meta_struct.pParametersAddInfo, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoFormatInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264PictureInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVideoFormatInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVideoFormatInfoKHR& meta_struct = *data; + const VkVideoDecodeH264PictureInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeH264PictureInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkImageUsageFlags_t(),jdata["imageUsage"], decoded_value.imageUsage, options); + FieldToJson(jdata["pStdPictureInfo"], meta_struct.pStdPictureInfo, options); + FieldToJson(jdata["sliceCount"], decoded_value.sliceCount, options); + FieldToJson(jdata["pSliceOffsets"], meta_struct.pSliceOffsets, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoFormatPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264DpbSlotInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoFormatPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoFormatPropertiesKHR& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["format"], decoded_value.format, options); - FieldToJson(jdata["componentMapping"], meta_struct.componentMapping, options); - FieldToJson(VkImageCreateFlags_t(),jdata["imageCreateFlags"], decoded_value.imageCreateFlags, options); - FieldToJson(jdata["imageType"], decoded_value.imageType, options); - FieldToJson(jdata["imageTiling"], decoded_value.imageTiling, options); - FieldToJson(VkImageUsageFlags_t(),jdata["imageUsageFlags"], decoded_value.imageUsageFlags, options); + const VkVideoDecodeH264DpbSlotInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeH264DpbSlotInfoKHR& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["pStdReferenceInfo"], meta_struct.pStdReferenceInfo, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoPictureResourceInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportMemoryWin32HandleInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoPictureResourceInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoPictureResourceInfoKHR& meta_struct = *data; + const VkImportMemoryWin32HandleInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkImportMemoryWin32HandleInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["codedOffset"], meta_struct.codedOffset, options); - FieldToJson(jdata["codedExtent"], meta_struct.codedExtent, options); - FieldToJson(jdata["baseArrayLayer"], decoded_value.baseArrayLayer, options); - HandleToJson(jdata["imageViewBinding"], meta_struct.imageViewBinding, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["handle"], meta_struct.handle, options); + FieldToJson(jdata["name"], &meta_struct.name, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoReferenceSlotInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportMemoryWin32HandleInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoReferenceSlotInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoReferenceSlotInfoKHR& meta_struct = *data; + const VkExportMemoryWin32HandleInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkExportMemoryWin32HandleInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["slotIndex"], decoded_value.slotIndex, options); - FieldToJson(jdata["pPictureResource"], meta_struct.pPictureResource, options); + FieldToJson(jdata["pAttributes"], meta_struct.pAttributes, options); + FieldToJson(jdata["dwAccess"], decoded_value.dwAccess, options); + FieldToJson(jdata["name"], &meta_struct.name, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoSessionMemoryRequirementsKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryWin32HandlePropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoSessionMemoryRequirementsKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoSessionMemoryRequirementsKHR& meta_struct = *data; + const VkMemoryWin32HandlePropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkMemoryWin32HandlePropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["memoryBindIndex"], decoded_value.memoryBindIndex, options); - FieldToJson(jdata["memoryRequirements"], meta_struct.memoryRequirements, options); + FieldToJson(jdata["memoryTypeBits"], decoded_value.memoryTypeBits, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindVideoSessionMemoryInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryGetWin32HandleInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindVideoSessionMemoryInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkBindVideoSessionMemoryInfoKHR& meta_struct = *data; + const VkMemoryGetWin32HandleInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkMemoryGetWin32HandleInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["memoryBindIndex"], decoded_value.memoryBindIndex, options); HandleToJson(jdata["memory"], meta_struct.memory, options); - FieldToJson(jdata["memoryOffset"], decoded_value.memoryOffset, options); - FieldToJson(jdata["memorySize"], decoded_value.memorySize, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoSessionCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportMemoryFdInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoSessionCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoSessionCreateInfoKHR& meta_struct = *data; + const VkImportMemoryFdInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkImportMemoryFdInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["queueFamilyIndex"], decoded_value.queueFamilyIndex, options); - FieldToJson(VkVideoSessionCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["pVideoProfile"], meta_struct.pVideoProfile, options); - FieldToJson(jdata["pictureFormat"], decoded_value.pictureFormat, options); - FieldToJson(jdata["maxCodedExtent"], meta_struct.maxCodedExtent, options); - FieldToJson(jdata["referencePictureFormat"], decoded_value.referencePictureFormat, options); - FieldToJson(jdata["maxDpbSlots"], decoded_value.maxDpbSlots, options); - FieldToJson(jdata["maxActiveReferencePictures"], decoded_value.maxActiveReferencePictures, options); - FieldToJson(jdata["pStdHeaderVersion"], meta_struct.pStdHeaderVersion, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["fd"], decoded_value.fd, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoSessionParametersCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryFdPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoSessionParametersCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoSessionParametersCreateInfoKHR& meta_struct = *data; + const VkMemoryFdPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkMemoryFdPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoSessionParametersCreateFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - HandleToJson(jdata["videoSessionParametersTemplate"], meta_struct.videoSessionParametersTemplate, options); - HandleToJson(jdata["videoSession"], meta_struct.videoSession, options); + FieldToJson(jdata["memoryTypeBits"], decoded_value.memoryTypeBits, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoSessionParametersUpdateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryGetFdInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoSessionParametersUpdateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoSessionParametersUpdateInfoKHR& meta_struct = *data; + const VkMemoryGetFdInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkMemoryGetFdInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["updateSequenceCount"], decoded_value.updateSequenceCount, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoBeginCodingInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWin32KeyedMutexAcquireReleaseInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoBeginCodingInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoBeginCodingInfoKHR& meta_struct = *data; + const VkWin32KeyedMutexAcquireReleaseInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkWin32KeyedMutexAcquireReleaseInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoBeginCodingFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - HandleToJson(jdata["videoSession"], meta_struct.videoSession, options); - HandleToJson(jdata["videoSessionParameters"], meta_struct.videoSessionParameters, options); - FieldToJson(jdata["referenceSlotCount"], decoded_value.referenceSlotCount, options); - FieldToJson(jdata["pReferenceSlots"], meta_struct.pReferenceSlots, options); + FieldToJson(jdata["acquireCount"], decoded_value.acquireCount, options); + HandleToJson(jdata["pAcquireSyncs"], &meta_struct.pAcquireSyncs, options); + FieldToJson(jdata["pAcquireKeys"], meta_struct.pAcquireKeys, options); + FieldToJson(jdata["pAcquireTimeouts"], meta_struct.pAcquireTimeouts, options); + FieldToJson(jdata["releaseCount"], decoded_value.releaseCount, options); + HandleToJson(jdata["pReleaseSyncs"], &meta_struct.pReleaseSyncs, options); + FieldToJson(jdata["pReleaseKeys"], meta_struct.pReleaseKeys, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEndCodingInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportSemaphoreWin32HandleInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEndCodingInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEndCodingInfoKHR& meta_struct = *data; + const VkImportSemaphoreWin32HandleInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkImportSemaphoreWin32HandleInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEndCodingFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); + FieldToJson(VkSemaphoreImportFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["handle"], meta_struct.handle, options); + FieldToJson(jdata["name"], &meta_struct.name, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoCodingControlInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportSemaphoreWin32HandleInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoCodingControlInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoCodingControlInfoKHR& meta_struct = *data; + const VkExportSemaphoreWin32HandleInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkExportSemaphoreWin32HandleInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoCodingControlFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["pAttributes"], meta_struct.pAttributes, options); + FieldToJson(jdata["dwAccess"], decoded_value.dwAccess, options); + FieldToJson(jdata["name"], &meta_struct.name, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeCapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkD3D12FenceSubmitInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeCapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeCapabilitiesKHR& meta_struct = *data; + const VkD3D12FenceSubmitInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkD3D12FenceSubmitInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoDecodeCapabilityFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["waitSemaphoreValuesCount"], decoded_value.waitSemaphoreValuesCount, options); + FieldToJson(jdata["pWaitSemaphoreValues"], meta_struct.pWaitSemaphoreValues, options); + FieldToJson(jdata["signalSemaphoreValuesCount"], decoded_value.signalSemaphoreValuesCount, options); + FieldToJson(jdata["pSignalSemaphoreValues"], meta_struct.pSignalSemaphoreValues, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeUsageInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreGetWin32HandleInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeUsageInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeUsageInfoKHR& meta_struct = *data; + const VkSemaphoreGetWin32HandleInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkSemaphoreGetWin32HandleInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoDecodeUsageFlagsKHR_t(),jdata["videoUsageHints"], decoded_value.videoUsageHints, options); + HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportSemaphoreFdInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeInfoKHR& meta_struct = *data; + const VkImportSemaphoreFdInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkImportSemaphoreFdInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoDecodeFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - HandleToJson(jdata["srcBuffer"], meta_struct.srcBuffer, options); - FieldToJson(jdata["srcBufferOffset"], decoded_value.srcBufferOffset, options); - FieldToJson(jdata["srcBufferRange"], decoded_value.srcBufferRange, options); - FieldToJson(jdata["dstPictureResource"], meta_struct.dstPictureResource, options); - FieldToJson(jdata["pSetupReferenceSlot"], meta_struct.pSetupReferenceSlot, options); - FieldToJson(jdata["referenceSlotCount"], decoded_value.referenceSlotCount, options); - FieldToJson(jdata["pReferenceSlots"], meta_struct.pReferenceSlots, options); + HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); + FieldToJson(VkSemaphoreImportFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["fd"], decoded_value.fd, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264CapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreGetFdInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264CapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264CapabilitiesKHR& meta_struct = *data; + const VkSemaphoreGetFdInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkSemaphoreGetFdInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeH264CapabilityFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["maxLevelIdc"], decoded_value.maxLevelIdc, options); - FieldToJson(jdata["maxSliceCount"], decoded_value.maxSliceCount, options); - FieldToJson(jdata["maxPPictureL0ReferenceCount"], decoded_value.maxPPictureL0ReferenceCount, options); - FieldToJson(jdata["maxBPictureL0ReferenceCount"], decoded_value.maxBPictureL0ReferenceCount, options); - FieldToJson(jdata["maxL1ReferenceCount"], decoded_value.maxL1ReferenceCount, options); - FieldToJson(jdata["maxTemporalLayerCount"], decoded_value.maxTemporalLayerCount, options); - jdata["expectDyadicTemporalLayerPattern"] = static_cast(decoded_value.expectDyadicTemporalLayerPattern); - FieldToJson(jdata["minQp"], decoded_value.minQp, options); - FieldToJson(jdata["maxQp"], decoded_value.maxQp, options); - jdata["prefersGopRemainingFrames"] = static_cast(decoded_value.prefersGopRemainingFrames); - jdata["requiresGopRemainingFrames"] = static_cast(decoded_value.requiresGopRemainingFrames); - FieldToJson(VkVideoEncodeH264StdFlagsKHR_t(),jdata["stdSyntaxFlags"], decoded_value.stdSyntaxFlags, options); + HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264QpKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRectLayerKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264QpKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264QpKHR& meta_struct = *data; + const VkRectLayerKHR& decoded_value = *data->decoded_value; + const Decoded_VkRectLayerKHR& meta_struct = *data; - FieldToJson(jdata["qpI"], decoded_value.qpI, options); - FieldToJson(jdata["qpP"], decoded_value.qpP, options); - FieldToJson(jdata["qpB"], decoded_value.qpB, options); + FieldToJson(jdata["offset"], meta_struct.offset, options); + FieldToJson(jdata["extent"], meta_struct.extent, options); + FieldToJson(jdata["layer"], decoded_value.layer, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264QualityLevelPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentRegionKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264QualityLevelPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264QualityLevelPropertiesKHR& meta_struct = *data; + const VkPresentRegionKHR& decoded_value = *data->decoded_value; + const Decoded_VkPresentRegionKHR& meta_struct = *data; + + FieldToJson(jdata["rectangleCount"], decoded_value.rectangleCount, options); + FieldToJson(jdata["pRectangles"], meta_struct.pRectangles, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentRegionsKHR* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPresentRegionsKHR& decoded_value = *data->decoded_value; + const Decoded_VkPresentRegionsKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeH264RateControlFlagsKHR_t(),jdata["preferredRateControlFlags"], decoded_value.preferredRateControlFlags, options); - FieldToJson(jdata["preferredGopFrameCount"], decoded_value.preferredGopFrameCount, options); - FieldToJson(jdata["preferredIdrPeriod"], decoded_value.preferredIdrPeriod, options); - FieldToJson(jdata["preferredConsecutiveBFrameCount"], decoded_value.preferredConsecutiveBFrameCount, options); - FieldToJson(jdata["preferredTemporalLayerCount"], decoded_value.preferredTemporalLayerCount, options); - FieldToJson(jdata["preferredConstantQp"], meta_struct.preferredConstantQp, options); - FieldToJson(jdata["preferredMaxL0ReferenceCount"], decoded_value.preferredMaxL0ReferenceCount, options); - FieldToJson(jdata["preferredMaxL1ReferenceCount"], decoded_value.preferredMaxL1ReferenceCount, options); - jdata["preferredStdEntropyCodingModeFlag"] = static_cast(decoded_value.preferredStdEntropyCodingModeFlag); + FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); + FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264SessionCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSharedPresentSurfaceCapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264SessionCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264SessionCreateInfoKHR& meta_struct = *data; + const VkSharedPresentSurfaceCapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkSharedPresentSurfaceCapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["useMaxLevelIdc"] = static_cast(decoded_value.useMaxLevelIdc); - FieldToJson(jdata["maxLevelIdc"], decoded_value.maxLevelIdc, options); + FieldToJson(VkImageUsageFlags_t(),jdata["sharedPresentSupportedUsageFlags"], decoded_value.sharedPresentSupportedUsageFlags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264SessionParametersAddInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportFenceWin32HandleInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264SessionParametersAddInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264SessionParametersAddInfoKHR& meta_struct = *data; + const VkImportFenceWin32HandleInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkImportFenceWin32HandleInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stdSPSCount"], decoded_value.stdSPSCount, options); - FieldToJson(jdata["pStdSPSs"], meta_struct.pStdSPSs, options); - FieldToJson(jdata["stdPPSCount"], decoded_value.stdPPSCount, options); - FieldToJson(jdata["pStdPPSs"], meta_struct.pStdPPSs, options); + HandleToJson(jdata["fence"], meta_struct.fence, options); + FieldToJson(VkFenceImportFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["handle"], meta_struct.handle, options); + FieldToJson(jdata["name"], &meta_struct.name, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264SessionParametersCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportFenceWin32HandleInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264SessionParametersCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264SessionParametersCreateInfoKHR& meta_struct = *data; + const VkExportFenceWin32HandleInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkExportFenceWin32HandleInfoKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxStdSPSCount"], decoded_value.maxStdSPSCount, options); - FieldToJson(jdata["maxStdPPSCount"], decoded_value.maxStdPPSCount, options); - FieldToJson(jdata["pParametersAddInfo"], meta_struct.pParametersAddInfo, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["pAttributes"], meta_struct.pAttributes, options); + FieldToJson(jdata["dwAccess"], decoded_value.dwAccess, options); + FieldToJson(jdata["name"], &meta_struct.name, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264SessionParametersGetInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFenceGetWin32HandleInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264SessionParametersGetInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264SessionParametersGetInfoKHR& meta_struct = *data; + const VkFenceGetWin32HandleInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkFenceGetWin32HandleInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["writeStdSPS"] = static_cast(decoded_value.writeStdSPS); - jdata["writeStdPPS"] = static_cast(decoded_value.writeStdPPS); - FieldToJson(jdata["stdSPSId"], decoded_value.stdSPSId, options); - FieldToJson(jdata["stdPPSId"], decoded_value.stdPPSId, options); + HandleToJson(jdata["fence"], meta_struct.fence, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264SessionParametersFeedbackInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportFenceFdInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264SessionParametersFeedbackInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264SessionParametersFeedbackInfoKHR& meta_struct = *data; + const VkImportFenceFdInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkImportFenceFdInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["hasStdSPSOverrides"] = static_cast(decoded_value.hasStdSPSOverrides); - jdata["hasStdPPSOverrides"] = static_cast(decoded_value.hasStdPPSOverrides); + HandleToJson(jdata["fence"], meta_struct.fence, options); + FieldToJson(VkFenceImportFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["fd"], decoded_value.fd, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264NaluSliceInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFenceGetFdInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264NaluSliceInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264NaluSliceInfoKHR& meta_struct = *data; + const VkFenceGetFdInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkFenceGetFdInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["constantQp"], decoded_value.constantQp, options); - FieldToJson(jdata["pStdSliceHeader"], meta_struct.pStdSliceHeader, options); + HandleToJson(jdata["fence"], meta_struct.fence, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264PictureInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePerformanceQueryFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264PictureInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264PictureInfoKHR& meta_struct = *data; + const VkPhysicalDevicePerformanceQueryFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePerformanceQueryFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["naluSliceEntryCount"], decoded_value.naluSliceEntryCount, options); - FieldToJson(jdata["pNaluSliceEntries"], meta_struct.pNaluSliceEntries, options); - FieldToJson(jdata["pStdPictureInfo"], meta_struct.pStdPictureInfo, options); - jdata["generatePrefixNalu"] = static_cast(decoded_value.generatePrefixNalu); + jdata["performanceCounterQueryPools"] = static_cast(decoded_value.performanceCounterQueryPools); + jdata["performanceCounterMultipleQueryPools"] = static_cast(decoded_value.performanceCounterMultipleQueryPools); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264DpbSlotInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePerformanceQueryPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264DpbSlotInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264DpbSlotInfoKHR& meta_struct = *data; + const VkPhysicalDevicePerformanceQueryPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePerformanceQueryPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdReferenceInfo"], meta_struct.pStdReferenceInfo, options); + jdata["allowCommandBufferQueryCopies"] = static_cast(decoded_value.allowCommandBufferQueryCopies); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264ProfileInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceCounterKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264ProfileInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264ProfileInfoKHR& meta_struct = *data; + const VkPerformanceCounterKHR& decoded_value = *data->decoded_value; + const Decoded_VkPerformanceCounterKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stdProfileIdc"], decoded_value.stdProfileIdc, options); + FieldToJson(jdata["unit"], decoded_value.unit, options); + FieldToJson(jdata["scope"], decoded_value.scope, options); + FieldToJson(jdata["storage"], decoded_value.storage, options); + FieldToJson(jdata["uuid"], uuid_to_string(sizeof(decoded_value.uuid), decoded_value.uuid), options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264RateControlInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceCounterDescriptionKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264RateControlInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264RateControlInfoKHR& meta_struct = *data; + const VkPerformanceCounterDescriptionKHR& decoded_value = *data->decoded_value; + const Decoded_VkPerformanceCounterDescriptionKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeH264RateControlFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["gopFrameCount"], decoded_value.gopFrameCount, options); - FieldToJson(jdata["idrPeriod"], decoded_value.idrPeriod, options); - FieldToJson(jdata["consecutiveBFrameCount"], decoded_value.consecutiveBFrameCount, options); - FieldToJson(jdata["temporalLayerCount"], decoded_value.temporalLayerCount, options); + FieldToJson(VkPerformanceCounterDescriptionFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["name"], &meta_struct.name, options); + FieldToJson(jdata["category"], &meta_struct.category, options); + FieldToJson(jdata["description"], &meta_struct.description, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264FrameSizeKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueryPoolPerformanceCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264FrameSizeKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264FrameSizeKHR& meta_struct = *data; + const VkQueryPoolPerformanceCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkQueryPoolPerformanceCreateInfoKHR& meta_struct = *data; - FieldToJson(jdata["frameISize"], decoded_value.frameISize, options); - FieldToJson(jdata["framePSize"], decoded_value.framePSize, options); - FieldToJson(jdata["frameBSize"], decoded_value.frameBSize, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["queueFamilyIndex"], decoded_value.queueFamilyIndex, options); + FieldToJson(jdata["counterIndexCount"], decoded_value.counterIndexCount, options); + FieldToJson(jdata["pCounterIndices"], meta_struct.pCounterIndices, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264RateControlLayerInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAcquireProfilingLockInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264RateControlLayerInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264RateControlLayerInfoKHR& meta_struct = *data; + const VkAcquireProfilingLockInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkAcquireProfilingLockInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["useMinQp"] = static_cast(decoded_value.useMinQp); - FieldToJson(jdata["minQp"], meta_struct.minQp, options); - jdata["useMaxQp"] = static_cast(decoded_value.useMaxQp); - FieldToJson(jdata["maxQp"], meta_struct.maxQp, options); - jdata["useMaxFrameSize"] = static_cast(decoded_value.useMaxFrameSize); - FieldToJson(jdata["maxFrameSize"], meta_struct.maxFrameSize, options); + FieldToJson(VkAcquireProfilingLockFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["timeout"], decoded_value.timeout, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264GopRemainingFrameInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceQuerySubmitInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264GopRemainingFrameInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264GopRemainingFrameInfoKHR& meta_struct = *data; + const VkPerformanceQuerySubmitInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkPerformanceQuerySubmitInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["useGopRemainingFrames"] = static_cast(decoded_value.useGopRemainingFrames); - FieldToJson(jdata["gopRemainingI"], decoded_value.gopRemainingI, options); - FieldToJson(jdata["gopRemainingP"], decoded_value.gopRemainingP, options); - FieldToJson(jdata["gopRemainingB"], decoded_value.gopRemainingB, options); + FieldToJson(jdata["counterPassIndex"], decoded_value.counterPassIndex, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265CapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSurfaceInfo2KHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265CapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265CapabilitiesKHR& meta_struct = *data; + const VkPhysicalDeviceSurfaceInfo2KHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSurfaceInfo2KHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeH265CapabilityFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["maxLevelIdc"], decoded_value.maxLevelIdc, options); - FieldToJson(jdata["maxSliceSegmentCount"], decoded_value.maxSliceSegmentCount, options); - FieldToJson(jdata["maxTiles"], meta_struct.maxTiles, options); - FieldToJson(VkVideoEncodeH265CtbSizeFlagsKHR_t(),jdata["ctbSizes"], decoded_value.ctbSizes, options); - FieldToJson(VkVideoEncodeH265TransformBlockSizeFlagsKHR_t(),jdata["transformBlockSizes"], decoded_value.transformBlockSizes, options); - FieldToJson(jdata["maxPPictureL0ReferenceCount"], decoded_value.maxPPictureL0ReferenceCount, options); - FieldToJson(jdata["maxBPictureL0ReferenceCount"], decoded_value.maxBPictureL0ReferenceCount, options); - FieldToJson(jdata["maxL1ReferenceCount"], decoded_value.maxL1ReferenceCount, options); - FieldToJson(jdata["maxSubLayerCount"], decoded_value.maxSubLayerCount, options); - jdata["expectDyadicTemporalSubLayerPattern"] = static_cast(decoded_value.expectDyadicTemporalSubLayerPattern); - FieldToJson(jdata["minQp"], decoded_value.minQp, options); - FieldToJson(jdata["maxQp"], decoded_value.maxQp, options); - jdata["prefersGopRemainingFrames"] = static_cast(decoded_value.prefersGopRemainingFrames); - jdata["requiresGopRemainingFrames"] = static_cast(decoded_value.requiresGopRemainingFrames); - FieldToJson(VkVideoEncodeH265StdFlagsKHR_t(),jdata["stdSyntaxFlags"], decoded_value.stdSyntaxFlags, options); + HandleToJson(jdata["surface"], meta_struct.surface, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265SessionCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilities2KHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265SessionCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265SessionCreateInfoKHR& meta_struct = *data; + const VkSurfaceCapabilities2KHR& decoded_value = *data->decoded_value; + const Decoded_VkSurfaceCapabilities2KHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["useMaxLevelIdc"] = static_cast(decoded_value.useMaxLevelIdc); - FieldToJson(jdata["maxLevelIdc"], decoded_value.maxLevelIdc, options); + FieldToJson(jdata["surfaceCapabilities"], meta_struct.surfaceCapabilities, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265QpKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceFormat2KHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265QpKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265QpKHR& meta_struct = *data; + const VkSurfaceFormat2KHR& decoded_value = *data->decoded_value; + const Decoded_VkSurfaceFormat2KHR& meta_struct = *data; - FieldToJson(jdata["qpI"], decoded_value.qpI, options); - FieldToJson(jdata["qpP"], decoded_value.qpP, options); - FieldToJson(jdata["qpB"], decoded_value.qpB, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["surfaceFormat"], meta_struct.surfaceFormat, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265QualityLevelPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayProperties2KHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265QualityLevelPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265QualityLevelPropertiesKHR& meta_struct = *data; + const VkDisplayProperties2KHR& decoded_value = *data->decoded_value; + const Decoded_VkDisplayProperties2KHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeH265RateControlFlagsKHR_t(),jdata["preferredRateControlFlags"], decoded_value.preferredRateControlFlags, options); - FieldToJson(jdata["preferredGopFrameCount"], decoded_value.preferredGopFrameCount, options); - FieldToJson(jdata["preferredIdrPeriod"], decoded_value.preferredIdrPeriod, options); - FieldToJson(jdata["preferredConsecutiveBFrameCount"], decoded_value.preferredConsecutiveBFrameCount, options); - FieldToJson(jdata["preferredSubLayerCount"], decoded_value.preferredSubLayerCount, options); - FieldToJson(jdata["preferredConstantQp"], meta_struct.preferredConstantQp, options); - FieldToJson(jdata["preferredMaxL0ReferenceCount"], decoded_value.preferredMaxL0ReferenceCount, options); - FieldToJson(jdata["preferredMaxL1ReferenceCount"], decoded_value.preferredMaxL1ReferenceCount, options); + FieldToJson(jdata["displayProperties"], meta_struct.displayProperties, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265SessionParametersAddInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPlaneProperties2KHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265SessionParametersAddInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265SessionParametersAddInfoKHR& meta_struct = *data; + const VkDisplayPlaneProperties2KHR& decoded_value = *data->decoded_value; + const Decoded_VkDisplayPlaneProperties2KHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stdVPSCount"], decoded_value.stdVPSCount, options); - FieldToJson(jdata["pStdVPSs"], meta_struct.pStdVPSs, options); - FieldToJson(jdata["stdSPSCount"], decoded_value.stdSPSCount, options); - FieldToJson(jdata["pStdSPSs"], meta_struct.pStdSPSs, options); - FieldToJson(jdata["stdPPSCount"], decoded_value.stdPPSCount, options); - FieldToJson(jdata["pStdPPSs"], meta_struct.pStdPPSs, options); + FieldToJson(jdata["displayPlaneProperties"], meta_struct.displayPlaneProperties, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265SessionParametersCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayModeProperties2KHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265SessionParametersCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265SessionParametersCreateInfoKHR& meta_struct = *data; + const VkDisplayModeProperties2KHR& decoded_value = *data->decoded_value; + const Decoded_VkDisplayModeProperties2KHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxStdVPSCount"], decoded_value.maxStdVPSCount, options); - FieldToJson(jdata["maxStdSPSCount"], decoded_value.maxStdSPSCount, options); - FieldToJson(jdata["maxStdPPSCount"], decoded_value.maxStdPPSCount, options); - FieldToJson(jdata["pParametersAddInfo"], meta_struct.pParametersAddInfo, options); + FieldToJson(jdata["displayModeProperties"], meta_struct.displayModeProperties, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265SessionParametersGetInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPlaneInfo2KHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265SessionParametersGetInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265SessionParametersGetInfoKHR& meta_struct = *data; + const VkDisplayPlaneInfo2KHR& decoded_value = *data->decoded_value; + const Decoded_VkDisplayPlaneInfo2KHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["writeStdVPS"] = static_cast(decoded_value.writeStdVPS); - jdata["writeStdSPS"] = static_cast(decoded_value.writeStdSPS); - jdata["writeStdPPS"] = static_cast(decoded_value.writeStdPPS); - FieldToJson(jdata["stdVPSId"], decoded_value.stdVPSId, options); - FieldToJson(jdata["stdSPSId"], decoded_value.stdSPSId, options); - FieldToJson(jdata["stdPPSId"], decoded_value.stdPPSId, options); + HandleToJson(jdata["mode"], meta_struct.mode, options); + FieldToJson(jdata["planeIndex"], decoded_value.planeIndex, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265SessionParametersFeedbackInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPlaneCapabilities2KHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265SessionParametersFeedbackInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265SessionParametersFeedbackInfoKHR& meta_struct = *data; + const VkDisplayPlaneCapabilities2KHR& decoded_value = *data->decoded_value; + const Decoded_VkDisplayPlaneCapabilities2KHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["hasStdVPSOverrides"] = static_cast(decoded_value.hasStdVPSOverrides); - jdata["hasStdSPSOverrides"] = static_cast(decoded_value.hasStdSPSOverrides); - jdata["hasStdPPSOverrides"] = static_cast(decoded_value.hasStdPPSOverrides); + FieldToJson(jdata["capabilities"], meta_struct.capabilities, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265NaluSliceSegmentInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderBfloat16FeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265NaluSliceSegmentInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265NaluSliceSegmentInfoKHR& meta_struct = *data; + const VkPhysicalDeviceShaderBfloat16FeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderBfloat16FeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["constantQp"], decoded_value.constantQp, options); - FieldToJson(jdata["pStdSliceSegmentHeader"], meta_struct.pStdSliceSegmentHeader, options); + jdata["shaderBFloat16Type"] = static_cast(decoded_value.shaderBFloat16Type); + jdata["shaderBFloat16DotProduct"] = static_cast(decoded_value.shaderBFloat16DotProduct); + jdata["shaderBFloat16CooperativeMatrix"] = static_cast(decoded_value.shaderBFloat16CooperativeMatrix); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265PictureInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePortabilitySubsetFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265PictureInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265PictureInfoKHR& meta_struct = *data; + const VkPhysicalDevicePortabilitySubsetFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePortabilitySubsetFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["naluSliceSegmentEntryCount"], decoded_value.naluSliceSegmentEntryCount, options); - FieldToJson(jdata["pNaluSliceSegmentEntries"], meta_struct.pNaluSliceSegmentEntries, options); - FieldToJson(jdata["pStdPictureInfo"], meta_struct.pStdPictureInfo, options); + jdata["constantAlphaColorBlendFactors"] = static_cast(decoded_value.constantAlphaColorBlendFactors); + jdata["events"] = static_cast(decoded_value.events); + jdata["imageViewFormatReinterpretation"] = static_cast(decoded_value.imageViewFormatReinterpretation); + jdata["imageViewFormatSwizzle"] = static_cast(decoded_value.imageViewFormatSwizzle); + jdata["imageView2DOn3DImage"] = static_cast(decoded_value.imageView2DOn3DImage); + jdata["multisampleArrayImage"] = static_cast(decoded_value.multisampleArrayImage); + jdata["mutableComparisonSamplers"] = static_cast(decoded_value.mutableComparisonSamplers); + jdata["pointPolygons"] = static_cast(decoded_value.pointPolygons); + jdata["samplerMipLodBias"] = static_cast(decoded_value.samplerMipLodBias); + jdata["separateStencilMaskRef"] = static_cast(decoded_value.separateStencilMaskRef); + jdata["shaderSampleRateInterpolationFunctions"] = static_cast(decoded_value.shaderSampleRateInterpolationFunctions); + jdata["tessellationIsolines"] = static_cast(decoded_value.tessellationIsolines); + jdata["tessellationPointMode"] = static_cast(decoded_value.tessellationPointMode); + jdata["triangleFans"] = static_cast(decoded_value.triangleFans); + jdata["vertexAttributeAccessBeyondStride"] = static_cast(decoded_value.vertexAttributeAccessBeyondStride); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265DpbSlotInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePortabilitySubsetPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265DpbSlotInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265DpbSlotInfoKHR& meta_struct = *data; + const VkPhysicalDevicePortabilitySubsetPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePortabilitySubsetPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdReferenceInfo"], meta_struct.pStdReferenceInfo, options); + FieldToJson(jdata["minVertexInputBindingStrideAlignment"], decoded_value.minVertexInputBindingStrideAlignment, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265ProfileInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderClockFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265ProfileInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265ProfileInfoKHR& meta_struct = *data; + const VkPhysicalDeviceShaderClockFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderClockFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stdProfileIdc"], decoded_value.stdProfileIdc, options); + jdata["shaderSubgroupClock"] = static_cast(decoded_value.shaderSubgroupClock); + jdata["shaderDeviceClock"] = static_cast(decoded_value.shaderDeviceClock); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265RateControlInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFragmentShadingRateAttachmentInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265RateControlInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265RateControlInfoKHR& meta_struct = *data; + const VkFragmentShadingRateAttachmentInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkFragmentShadingRateAttachmentInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeH265RateControlFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["gopFrameCount"], decoded_value.gopFrameCount, options); - FieldToJson(jdata["idrPeriod"], decoded_value.idrPeriod, options); - FieldToJson(jdata["consecutiveBFrameCount"], decoded_value.consecutiveBFrameCount, options); - FieldToJson(jdata["subLayerCount"], decoded_value.subLayerCount, options); + FieldToJson(jdata["pFragmentShadingRateAttachment"], meta_struct.pFragmentShadingRateAttachment, options); + FieldToJson(jdata["shadingRateAttachmentTexelSize"], meta_struct.shadingRateAttachmentTexelSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265FrameSizeKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineFragmentShadingRateStateCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265FrameSizeKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265FrameSizeKHR& meta_struct = *data; + const VkPipelineFragmentShadingRateStateCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkPipelineFragmentShadingRateStateCreateInfoKHR& meta_struct = *data; - FieldToJson(jdata["frameISize"], decoded_value.frameISize, options); - FieldToJson(jdata["framePSize"], decoded_value.framePSize, options); - FieldToJson(jdata["frameBSize"], decoded_value.frameBSize, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["fragmentSize"], meta_struct.fragmentSize, options); + FieldToJson(jdata["combinerOps"], &meta_struct.combinerOps, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265RateControlLayerInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShadingRateFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) - { - const VkVideoEncodeH265RateControlLayerInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265RateControlLayerInfoKHR& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["useMinQp"] = static_cast(decoded_value.useMinQp); - FieldToJson(jdata["minQp"], meta_struct.minQp, options); - jdata["useMaxQp"] = static_cast(decoded_value.useMaxQp); - FieldToJson(jdata["maxQp"], meta_struct.maxQp, options); - jdata["useMaxFrameSize"] = static_cast(decoded_value.useMaxFrameSize); - FieldToJson(jdata["maxFrameSize"], meta_struct.maxFrameSize, options); + { + const VkPhysicalDeviceFragmentShadingRateFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFragmentShadingRateFeaturesKHR& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["pipelineFragmentShadingRate"] = static_cast(decoded_value.pipelineFragmentShadingRate); + jdata["primitiveFragmentShadingRate"] = static_cast(decoded_value.primitiveFragmentShadingRate); + jdata["attachmentFragmentShadingRate"] = static_cast(decoded_value.attachmentFragmentShadingRate); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265GopRemainingFrameInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShadingRatePropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265GopRemainingFrameInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265GopRemainingFrameInfoKHR& meta_struct = *data; + const VkPhysicalDeviceFragmentShadingRatePropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFragmentShadingRatePropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["useGopRemainingFrames"] = static_cast(decoded_value.useGopRemainingFrames); - FieldToJson(jdata["gopRemainingI"], decoded_value.gopRemainingI, options); - FieldToJson(jdata["gopRemainingP"], decoded_value.gopRemainingP, options); - FieldToJson(jdata["gopRemainingB"], decoded_value.gopRemainingB, options); + FieldToJson(jdata["minFragmentShadingRateAttachmentTexelSize"], meta_struct.minFragmentShadingRateAttachmentTexelSize, options); + FieldToJson(jdata["maxFragmentShadingRateAttachmentTexelSize"], meta_struct.maxFragmentShadingRateAttachmentTexelSize, options); + FieldToJson(jdata["maxFragmentShadingRateAttachmentTexelSizeAspectRatio"], decoded_value.maxFragmentShadingRateAttachmentTexelSizeAspectRatio, options); + jdata["primitiveFragmentShadingRateWithMultipleViewports"] = static_cast(decoded_value.primitiveFragmentShadingRateWithMultipleViewports); + jdata["layeredShadingRateAttachments"] = static_cast(decoded_value.layeredShadingRateAttachments); + jdata["fragmentShadingRateNonTrivialCombinerOps"] = static_cast(decoded_value.fragmentShadingRateNonTrivialCombinerOps); + FieldToJson(jdata["maxFragmentSize"], meta_struct.maxFragmentSize, options); + FieldToJson(jdata["maxFragmentSizeAspectRatio"], decoded_value.maxFragmentSizeAspectRatio, options); + FieldToJson(jdata["maxFragmentShadingRateCoverageSamples"], decoded_value.maxFragmentShadingRateCoverageSamples, options); + FieldToJson(jdata["maxFragmentShadingRateRasterizationSamples"], decoded_value.maxFragmentShadingRateRasterizationSamples, options); + jdata["fragmentShadingRateWithShaderDepthStencilWrites"] = static_cast(decoded_value.fragmentShadingRateWithShaderDepthStencilWrites); + jdata["fragmentShadingRateWithSampleMask"] = static_cast(decoded_value.fragmentShadingRateWithSampleMask); + jdata["fragmentShadingRateWithShaderSampleMask"] = static_cast(decoded_value.fragmentShadingRateWithShaderSampleMask); + jdata["fragmentShadingRateWithConservativeRasterization"] = static_cast(decoded_value.fragmentShadingRateWithConservativeRasterization); + jdata["fragmentShadingRateWithFragmentShaderInterlock"] = static_cast(decoded_value.fragmentShadingRateWithFragmentShaderInterlock); + jdata["fragmentShadingRateWithCustomSampleLocations"] = static_cast(decoded_value.fragmentShadingRateWithCustomSampleLocations); + jdata["fragmentShadingRateStrictMultiplyCombiner"] = static_cast(decoded_value.fragmentShadingRateStrictMultiplyCombiner); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264ProfileInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShadingRateKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeH264ProfileInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeH264ProfileInfoKHR& meta_struct = *data; + const VkPhysicalDeviceFragmentShadingRateKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFragmentShadingRateKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stdProfileIdc"], decoded_value.stdProfileIdc, options); - FieldToJson(jdata["pictureLayout"], decoded_value.pictureLayout, options); + FieldToJson(VkSampleCountFlags_t(),jdata["sampleCounts"], decoded_value.sampleCounts, options); + FieldToJson(jdata["fragmentSize"], meta_struct.fragmentSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264CapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingFragmentShadingRateAttachmentInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeH264CapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeH264CapabilitiesKHR& meta_struct = *data; + const VkRenderingFragmentShadingRateAttachmentInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkRenderingFragmentShadingRateAttachmentInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxLevelIdc"], decoded_value.maxLevelIdc, options); - FieldToJson(jdata["fieldOffsetGranularity"], meta_struct.fieldOffsetGranularity, options); + HandleToJson(jdata["imageView"], meta_struct.imageView, options); + FieldToJson(jdata["imageLayout"], decoded_value.imageLayout, options); + FieldToJson(jdata["shadingRateAttachmentTexelSize"], meta_struct.shadingRateAttachmentTexelSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264SessionParametersAddInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderQuadControlFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeH264SessionParametersAddInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeH264SessionParametersAddInfoKHR& meta_struct = *data; + const VkPhysicalDeviceShaderQuadControlFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderQuadControlFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stdSPSCount"], decoded_value.stdSPSCount, options); - FieldToJson(jdata["pStdSPSs"], meta_struct.pStdSPSs, options); - FieldToJson(jdata["stdPPSCount"], decoded_value.stdPPSCount, options); - FieldToJson(jdata["pStdPPSs"], meta_struct.pStdPPSs, options); + jdata["shaderQuadControl"] = static_cast(decoded_value.shaderQuadControl); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264SessionParametersCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceProtectedCapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeH264SessionParametersCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeH264SessionParametersCreateInfoKHR& meta_struct = *data; + const VkSurfaceProtectedCapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkSurfaceProtectedCapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxStdSPSCount"], decoded_value.maxStdSPSCount, options); - FieldToJson(jdata["maxStdPPSCount"], decoded_value.maxStdPPSCount, options); - FieldToJson(jdata["pParametersAddInfo"], meta_struct.pParametersAddInfo, options); + jdata["supportsProtected"] = static_cast(decoded_value.supportsProtected); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264PictureInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentWaitFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeH264PictureInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeH264PictureInfoKHR& meta_struct = *data; + const VkPhysicalDevicePresentWaitFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePresentWaitFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdPictureInfo"], meta_struct.pStdPictureInfo, options); - FieldToJson(jdata["sliceCount"], decoded_value.sliceCount, options); - FieldToJson(jdata["pSliceOffsets"], meta_struct.pSliceOffsets, options); + jdata["presentWait"] = static_cast(decoded_value.presentWait); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264DpbSlotInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeH264DpbSlotInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeH264DpbSlotInfoKHR& meta_struct = *data; + const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdReferenceInfo"], meta_struct.pStdReferenceInfo, options); + jdata["pipelineExecutableInfo"] = static_cast(decoded_value.pipelineExecutableInfo); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportMemoryWin32HandleInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImportMemoryWin32HandleInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkImportMemoryWin32HandleInfoKHR& meta_struct = *data; + const VkPipelineInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkPipelineInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); - FieldToJson(jdata["handle"], meta_struct.handle, options); - FieldToJson(jdata["name"], &meta_struct.name, options); + HandleToJson(jdata["pipeline"], meta_struct.pipeline, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportMemoryWin32HandleInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineExecutablePropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExportMemoryWin32HandleInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkExportMemoryWin32HandleInfoKHR& meta_struct = *data; + const VkPipelineExecutablePropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPipelineExecutablePropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pAttributes"], meta_struct.pAttributes, options); - FieldToJson(jdata["dwAccess"], decoded_value.dwAccess, options); + FieldToJson(VkShaderStageFlags_t(),jdata["stages"], decoded_value.stages, options); FieldToJson(jdata["name"], &meta_struct.name, options); + FieldToJson(jdata["description"], &meta_struct.description, options); + FieldToJson(jdata["subgroupSize"], decoded_value.subgroupSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryWin32HandlePropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineExecutableInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryWin32HandlePropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkMemoryWin32HandlePropertiesKHR& meta_struct = *data; + const VkPipelineExecutableInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkPipelineExecutableInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["memoryTypeBits"], decoded_value.memoryTypeBits, options); + HandleToJson(jdata["pipeline"], meta_struct.pipeline, options); + FieldToJson(jdata["executableIndex"], decoded_value.executableIndex, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryGetWin32HandleInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineExecutableInternalRepresentationKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryGetWin32HandleInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkMemoryGetWin32HandleInfoKHR& meta_struct = *data; + const VkPipelineExecutableInternalRepresentationKHR& decoded_value = *data->decoded_value; + const Decoded_VkPipelineExecutableInternalRepresentationKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["memory"], meta_struct.memory, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["name"], &meta_struct.name, options); + FieldToJson(jdata["description"], &meta_struct.description, options); + jdata["isText"] = static_cast(decoded_value.isText); + FieldToJson(jdata["dataSize"], decoded_value.dataSize, options); + FieldToJson(jdata["pData"], meta_struct.pData, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportMemoryFdInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineLibraryCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImportMemoryFdInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkImportMemoryFdInfoKHR& meta_struct = *data; + const VkPipelineLibraryCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkPipelineLibraryCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); - FieldToJson(jdata["fd"], decoded_value.fd, options); + FieldToJson(jdata["libraryCount"], decoded_value.libraryCount, options); + HandleToJson(jdata["pLibraries"], &meta_struct.pLibraries, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryFdPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentIdKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryFdPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkMemoryFdPropertiesKHR& meta_struct = *data; + const VkPresentIdKHR& decoded_value = *data->decoded_value; + const Decoded_VkPresentIdKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["memoryTypeBits"], decoded_value.memoryTypeBits, options); + FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); + FieldToJson(jdata["pPresentIds"], meta_struct.pPresentIds, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryGetFdInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentIdFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryGetFdInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkMemoryGetFdInfoKHR& meta_struct = *data; + const VkPhysicalDevicePresentIdFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePresentIdFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["memory"], meta_struct.memory, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); + jdata["presentId"] = static_cast(decoded_value.presentId); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWin32KeyedMutexAcquireReleaseInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkWin32KeyedMutexAcquireReleaseInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkWin32KeyedMutexAcquireReleaseInfoKHR& meta_struct = *data; + const VkVideoEncodeInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["acquireCount"], decoded_value.acquireCount, options); - HandleToJson(jdata["pAcquireSyncs"], &meta_struct.pAcquireSyncs, options); - FieldToJson(jdata["pAcquireKeys"], meta_struct.pAcquireKeys, options); - FieldToJson(jdata["pAcquireTimeouts"], meta_struct.pAcquireTimeouts, options); - FieldToJson(jdata["releaseCount"], decoded_value.releaseCount, options); - HandleToJson(jdata["pReleaseSyncs"], &meta_struct.pReleaseSyncs, options); - FieldToJson(jdata["pReleaseKeys"], meta_struct.pReleaseKeys, options); + FieldToJson(VkVideoEncodeFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["dstBuffer"], meta_struct.dstBuffer, options); + FieldToJson(jdata["dstBufferOffset"], decoded_value.dstBufferOffset, options); + FieldToJson(jdata["dstBufferRange"], decoded_value.dstBufferRange, options); + FieldToJson(jdata["srcPictureResource"], meta_struct.srcPictureResource, options); + FieldToJson(jdata["pSetupReferenceSlot"], meta_struct.pSetupReferenceSlot, options); + FieldToJson(jdata["referenceSlotCount"], decoded_value.referenceSlotCount, options); + FieldToJson(jdata["pReferenceSlots"], meta_struct.pReferenceSlots, options); + FieldToJson(jdata["precedingExternallyEncodedBytes"], decoded_value.precedingExternallyEncodedBytes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportSemaphoreWin32HandleInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeCapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImportSemaphoreWin32HandleInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkImportSemaphoreWin32HandleInfoKHR& meta_struct = *data; + const VkVideoEncodeCapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeCapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); - FieldToJson(VkSemaphoreImportFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); - FieldToJson(jdata["handle"], meta_struct.handle, options); - FieldToJson(jdata["name"], &meta_struct.name, options); + FieldToJson(VkVideoEncodeCapabilityFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(VkVideoEncodeRateControlModeFlagsKHR_t(),jdata["rateControlModes"], decoded_value.rateControlModes, options); + FieldToJson(jdata["maxRateControlLayers"], decoded_value.maxRateControlLayers, options); + FieldToJson(jdata["maxBitrate"], decoded_value.maxBitrate, options); + FieldToJson(jdata["maxQualityLevels"], decoded_value.maxQualityLevels, options); + FieldToJson(jdata["encodeInputPictureGranularity"], meta_struct.encodeInputPictureGranularity, options); + FieldToJson(VkVideoEncodeFeedbackFlagsKHR_t(),jdata["supportedEncodeFeedbackFlags"], decoded_value.supportedEncodeFeedbackFlags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportSemaphoreWin32HandleInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueryPoolVideoEncodeFeedbackCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExportSemaphoreWin32HandleInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkExportSemaphoreWin32HandleInfoKHR& meta_struct = *data; + const VkQueryPoolVideoEncodeFeedbackCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkQueryPoolVideoEncodeFeedbackCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pAttributes"], meta_struct.pAttributes, options); - FieldToJson(jdata["dwAccess"], decoded_value.dwAccess, options); - FieldToJson(jdata["name"], &meta_struct.name, options); + FieldToJson(VkVideoEncodeFeedbackFlagsKHR_t(),jdata["encodeFeedbackFlags"], decoded_value.encodeFeedbackFlags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkD3D12FenceSubmitInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeUsageInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkD3D12FenceSubmitInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkD3D12FenceSubmitInfoKHR& meta_struct = *data; + const VkVideoEncodeUsageInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeUsageInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["waitSemaphoreValuesCount"], decoded_value.waitSemaphoreValuesCount, options); - FieldToJson(jdata["pWaitSemaphoreValues"], meta_struct.pWaitSemaphoreValues, options); - FieldToJson(jdata["signalSemaphoreValuesCount"], decoded_value.signalSemaphoreValuesCount, options); - FieldToJson(jdata["pSignalSemaphoreValues"], meta_struct.pSignalSemaphoreValues, options); + FieldToJson(VkVideoEncodeUsageFlagsKHR_t(),jdata["videoUsageHints"], decoded_value.videoUsageHints, options); + FieldToJson(VkVideoEncodeContentFlagsKHR_t(),jdata["videoContentHints"], decoded_value.videoContentHints, options); + FieldToJson(jdata["tuningMode"], decoded_value.tuningMode, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreGetWin32HandleInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeRateControlLayerInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSemaphoreGetWin32HandleInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkSemaphoreGetWin32HandleInfoKHR& meta_struct = *data; + const VkVideoEncodeRateControlLayerInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeRateControlLayerInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["averageBitrate"], decoded_value.averageBitrate, options); + FieldToJson(jdata["maxBitrate"], decoded_value.maxBitrate, options); + FieldToJson(jdata["frameRateNumerator"], decoded_value.frameRateNumerator, options); + FieldToJson(jdata["frameRateDenominator"], decoded_value.frameRateDenominator, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportSemaphoreFdInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeRateControlInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImportSemaphoreFdInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkImportSemaphoreFdInfoKHR& meta_struct = *data; + const VkVideoEncodeRateControlInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeRateControlInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); - FieldToJson(VkSemaphoreImportFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); - FieldToJson(jdata["fd"], decoded_value.fd, options); + FieldToJson(VkVideoEncodeRateControlFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["rateControlMode"], decoded_value.rateControlMode, options); + FieldToJson(jdata["layerCount"], decoded_value.layerCount, options); + FieldToJson(jdata["pLayers"], meta_struct.pLayers, options); + FieldToJson(jdata["virtualBufferSizeInMs"], decoded_value.virtualBufferSizeInMs, options); + FieldToJson(jdata["initialVirtualBufferSizeInMs"], decoded_value.initialVirtualBufferSizeInMs, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreGetFdInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSemaphoreGetFdInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkSemaphoreGetFdInfoKHR& meta_struct = *data; + const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["pVideoProfile"], meta_struct.pVideoProfile, options); + FieldToJson(jdata["qualityLevel"], decoded_value.qualityLevel, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRectLayerKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeQualityLevelPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRectLayerKHR& decoded_value = *data->decoded_value; - const Decoded_VkRectLayerKHR& meta_struct = *data; + const VkVideoEncodeQualityLevelPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeQualityLevelPropertiesKHR& meta_struct = *data; - FieldToJson(jdata["offset"], meta_struct.offset, options); - FieldToJson(jdata["extent"], meta_struct.extent, options); - FieldToJson(jdata["layer"], decoded_value.layer, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["preferredRateControlMode"], decoded_value.preferredRateControlMode, options); + FieldToJson(jdata["preferredRateControlLayerCount"], decoded_value.preferredRateControlLayerCount, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentRegionKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeQualityLevelInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPresentRegionKHR& decoded_value = *data->decoded_value; - const Decoded_VkPresentRegionKHR& meta_struct = *data; + const VkVideoEncodeQualityLevelInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeQualityLevelInfoKHR& meta_struct = *data; - FieldToJson(jdata["rectangleCount"], decoded_value.rectangleCount, options); - FieldToJson(jdata["pRectangles"], meta_struct.pRectangles, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["qualityLevel"], decoded_value.qualityLevel, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentRegionsKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeSessionParametersGetInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPresentRegionsKHR& decoded_value = *data->decoded_value; - const Decoded_VkPresentRegionsKHR& meta_struct = *data; + const VkVideoEncodeSessionParametersGetInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeSessionParametersGetInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); - FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); + HandleToJson(jdata["videoSessionParameters"], meta_struct.videoSessionParameters, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSharedPresentSurfaceCapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeSessionParametersFeedbackInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSharedPresentSurfaceCapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkSharedPresentSurfaceCapabilitiesKHR& meta_struct = *data; + const VkVideoEncodeSessionParametersFeedbackInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeSessionParametersFeedbackInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkImageUsageFlags_t(),jdata["sharedPresentSupportedUsageFlags"], decoded_value.sharedPresentSupportedUsageFlags, options); + jdata["hasOverrides"] = static_cast(decoded_value.hasOverrides); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportFenceWin32HandleInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImportFenceWin32HandleInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkImportFenceWin32HandleInfoKHR& meta_struct = *data; + const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["fence"], meta_struct.fence, options); - FieldToJson(VkFenceImportFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); - FieldToJson(jdata["handle"], meta_struct.handle, options); - FieldToJson(jdata["name"], &meta_struct.name, options); + jdata["fragmentShaderBarycentric"] = static_cast(decoded_value.fragmentShaderBarycentric); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportFenceWin32HandleInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExportFenceWin32HandleInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkExportFenceWin32HandleInfoKHR& meta_struct = *data; + const VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pAttributes"], meta_struct.pAttributes, options); - FieldToJson(jdata["dwAccess"], decoded_value.dwAccess, options); - FieldToJson(jdata["name"], &meta_struct.name, options); + jdata["triStripVertexOrderIndependentOfProvokingVertex"] = static_cast(decoded_value.triStripVertexOrderIndependentOfProvokingVertex); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFenceGetWin32HandleInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkFenceGetWin32HandleInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkFenceGetWin32HandleInfoKHR& meta_struct = *data; + const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["fence"], meta_struct.fence, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); + jdata["shaderSubgroupUniformControlFlow"] = static_cast(decoded_value.shaderSubgroupUniformControlFlow); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportFenceFdInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImportFenceFdInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkImportFenceFdInfoKHR& meta_struct = *data; + const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["fence"], meta_struct.fence, options); - FieldToJson(VkFenceImportFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); - FieldToJson(jdata["fd"], decoded_value.fd, options); + jdata["workgroupMemoryExplicitLayout"] = static_cast(decoded_value.workgroupMemoryExplicitLayout); + jdata["workgroupMemoryExplicitLayoutScalarBlockLayout"] = static_cast(decoded_value.workgroupMemoryExplicitLayoutScalarBlockLayout); + jdata["workgroupMemoryExplicitLayout8BitAccess"] = static_cast(decoded_value.workgroupMemoryExplicitLayout8BitAccess); + jdata["workgroupMemoryExplicitLayout16BitAccess"] = static_cast(decoded_value.workgroupMemoryExplicitLayout16BitAccess); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFenceGetFdInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkFenceGetFdInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkFenceGetFdInfoKHR& meta_struct = *data; + const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["fence"], meta_struct.fence, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); + jdata["rayTracingMaintenance1"] = static_cast(decoded_value.rayTracingMaintenance1); + jdata["rayTracingPipelineTraceRaysIndirect2"] = static_cast(decoded_value.rayTracingPipelineTraceRaysIndirect2); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePerformanceQueryFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTraceRaysIndirectCommand2KHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePerformanceQueryFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePerformanceQueryFeaturesKHR& meta_struct = *data; + const VkTraceRaysIndirectCommand2KHR& decoded_value = *data->decoded_value; + const Decoded_VkTraceRaysIndirectCommand2KHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["performanceCounterQueryPools"] = static_cast(decoded_value.performanceCounterQueryPools); - jdata["performanceCounterMultipleQueryPools"] = static_cast(decoded_value.performanceCounterMultipleQueryPools); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["raygenShaderRecordAddress"], to_hex_variable_width(decoded_value.raygenShaderRecordAddress), options); + FieldToJson(jdata["raygenShaderRecordSize"], decoded_value.raygenShaderRecordSize, options); + FieldToJson(jdata["missShaderBindingTableAddress"], to_hex_variable_width(decoded_value.missShaderBindingTableAddress), options); + FieldToJson(jdata["missShaderBindingTableSize"], decoded_value.missShaderBindingTableSize, options); + FieldToJson(jdata["missShaderBindingTableStride"], decoded_value.missShaderBindingTableStride, options); + FieldToJson(jdata["hitShaderBindingTableAddress"], to_hex_variable_width(decoded_value.hitShaderBindingTableAddress), options); + FieldToJson(jdata["hitShaderBindingTableSize"], decoded_value.hitShaderBindingTableSize, options); + FieldToJson(jdata["hitShaderBindingTableStride"], decoded_value.hitShaderBindingTableStride, options); + FieldToJson(jdata["callableShaderBindingTableAddress"], to_hex_variable_width(decoded_value.callableShaderBindingTableAddress), options); + FieldToJson(jdata["callableShaderBindingTableSize"], decoded_value.callableShaderBindingTableSize, options); + FieldToJson(jdata["callableShaderBindingTableStride"], decoded_value.callableShaderBindingTableStride, options); + FieldToJson(jdata["width"], decoded_value.width, options); + FieldToJson(jdata["height"], decoded_value.height, options); + FieldToJson(jdata["depth"], decoded_value.depth, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePerformanceQueryPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePerformanceQueryPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePerformanceQueryPropertiesKHR& meta_struct = *data; + const VkPhysicalDeviceShaderUntypedPointersFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["allowCommandBufferQueryCopies"] = static_cast(decoded_value.allowCommandBufferQueryCopies); + jdata["shaderUntypedPointers"] = static_cast(decoded_value.shaderUntypedPointers); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceCounterKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPerformanceCounterKHR& decoded_value = *data->decoded_value; - const Decoded_VkPerformanceCounterKHR& meta_struct = *data; + const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["unit"], decoded_value.unit, options); - FieldToJson(jdata["scope"], decoded_value.scope, options); - FieldToJson(jdata["storage"], decoded_value.storage, options); - FieldToJson(jdata["uuid"], uuid_to_string(sizeof(decoded_value.uuid), decoded_value.uuid), options); + jdata["shaderMaximalReconvergence"] = static_cast(decoded_value.shaderMaximalReconvergence); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceCounterDescriptionKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilitiesPresentId2KHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPerformanceCounterDescriptionKHR& decoded_value = *data->decoded_value; - const Decoded_VkPerformanceCounterDescriptionKHR& meta_struct = *data; + const VkSurfaceCapabilitiesPresentId2KHR& decoded_value = *data->decoded_value; + const Decoded_VkSurfaceCapabilitiesPresentId2KHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPerformanceCounterDescriptionFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["name"], &meta_struct.name, options); - FieldToJson(jdata["category"], &meta_struct.category, options); - FieldToJson(jdata["description"], &meta_struct.description, options); + jdata["presentId2Supported"] = static_cast(decoded_value.presentId2Supported); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueryPoolPerformanceCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentId2KHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkQueryPoolPerformanceCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkQueryPoolPerformanceCreateInfoKHR& meta_struct = *data; + const VkPresentId2KHR& decoded_value = *data->decoded_value; + const Decoded_VkPresentId2KHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["queueFamilyIndex"], decoded_value.queueFamilyIndex, options); - FieldToJson(jdata["counterIndexCount"], decoded_value.counterIndexCount, options); - FieldToJson(jdata["pCounterIndices"], meta_struct.pCounterIndices, options); + FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); + FieldToJson(jdata["pPresentIds"], meta_struct.pPresentIds, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAcquireProfilingLockInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentId2FeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAcquireProfilingLockInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkAcquireProfilingLockInfoKHR& meta_struct = *data; + const VkPhysicalDevicePresentId2FeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePresentId2FeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkAcquireProfilingLockFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["timeout"], decoded_value.timeout, options); + jdata["presentId2"] = static_cast(decoded_value.presentId2); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceQuerySubmitInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilitiesPresentWait2KHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPerformanceQuerySubmitInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkPerformanceQuerySubmitInfoKHR& meta_struct = *data; + const VkSurfaceCapabilitiesPresentWait2KHR& decoded_value = *data->decoded_value; + const Decoded_VkSurfaceCapabilitiesPresentWait2KHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["counterPassIndex"], decoded_value.counterPassIndex, options); + jdata["presentWait2Supported"] = static_cast(decoded_value.presentWait2Supported); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSurfaceInfo2KHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentWait2FeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSurfaceInfo2KHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSurfaceInfo2KHR& meta_struct = *data; + const VkPhysicalDevicePresentWait2FeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePresentWait2FeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["surface"], meta_struct.surface, options); + jdata["presentWait2"] = static_cast(decoded_value.presentWait2); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilities2KHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentWait2InfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfaceCapabilities2KHR& decoded_value = *data->decoded_value; - const Decoded_VkSurfaceCapabilities2KHR& meta_struct = *data; + const VkPresentWait2InfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkPresentWait2InfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["surfaceCapabilities"], meta_struct.surfaceCapabilities, options); + FieldToJson(jdata["presentId"], decoded_value.presentId, options); + FieldToJson(jdata["timeout"], decoded_value.timeout, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceFormat2KHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfaceFormat2KHR& decoded_value = *data->decoded_value; - const Decoded_VkSurfaceFormat2KHR& meta_struct = *data; + const VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["surfaceFormat"], meta_struct.surfaceFormat, options); + jdata["rayTracingPositionFetch"] = static_cast(decoded_value.rayTracingPositionFetch); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayProperties2KHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineBinaryFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayProperties2KHR& decoded_value = *data->decoded_value; - const Decoded_VkDisplayProperties2KHR& meta_struct = *data; + const VkPhysicalDevicePipelineBinaryFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePipelineBinaryFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["displayProperties"], meta_struct.displayProperties, options); + jdata["pipelineBinaries"] = static_cast(decoded_value.pipelineBinaries); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPlaneProperties2KHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineBinaryPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayPlaneProperties2KHR& decoded_value = *data->decoded_value; - const Decoded_VkDisplayPlaneProperties2KHR& meta_struct = *data; + const VkPhysicalDevicePipelineBinaryPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePipelineBinaryPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["displayPlaneProperties"], meta_struct.displayPlaneProperties, options); + jdata["pipelineBinaryInternalCache"] = static_cast(decoded_value.pipelineBinaryInternalCache); + jdata["pipelineBinaryInternalCacheControl"] = static_cast(decoded_value.pipelineBinaryInternalCacheControl); + jdata["pipelineBinaryPrefersInternalCache"] = static_cast(decoded_value.pipelineBinaryPrefersInternalCache); + jdata["pipelineBinaryPrecompiledInternalCache"] = static_cast(decoded_value.pipelineBinaryPrecompiledInternalCache); + jdata["pipelineBinaryCompressedData"] = static_cast(decoded_value.pipelineBinaryCompressedData); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayModeProperties2KHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDevicePipelineBinaryInternalCacheControlKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayModeProperties2KHR& decoded_value = *data->decoded_value; - const Decoded_VkDisplayModeProperties2KHR& meta_struct = *data; + const VkDevicePipelineBinaryInternalCacheControlKHR& decoded_value = *data->decoded_value; + const Decoded_VkDevicePipelineBinaryInternalCacheControlKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["displayModeProperties"], meta_struct.displayModeProperties, options); + jdata["disableInternalCache"] = static_cast(decoded_value.disableInternalCache); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPlaneInfo2KHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineBinaryKeyKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayPlaneInfo2KHR& decoded_value = *data->decoded_value; - const Decoded_VkDisplayPlaneInfo2KHR& meta_struct = *data; + const VkPipelineBinaryKeyKHR& decoded_value = *data->decoded_value; + const Decoded_VkPipelineBinaryKeyKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["mode"], meta_struct.mode, options); - FieldToJson(jdata["planeIndex"], decoded_value.planeIndex, options); + FieldToJson(jdata["keySize"], decoded_value.keySize, options); + FieldToJson(jdata["key"], &meta_struct.key, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPlaneCapabilities2KHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineBinaryDataKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayPlaneCapabilities2KHR& decoded_value = *data->decoded_value; - const Decoded_VkDisplayPlaneCapabilities2KHR& meta_struct = *data; + const VkPipelineBinaryDataKHR& decoded_value = *data->decoded_value; + const Decoded_VkPipelineBinaryDataKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["capabilities"], meta_struct.capabilities, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["dataSize"], decoded_value.dataSize, options); + FieldToJson(jdata["pData"], meta_struct.pData, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderBfloat16FeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineBinaryKeysAndDataKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderBfloat16FeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderBfloat16FeaturesKHR& meta_struct = *data; + const VkPipelineBinaryKeysAndDataKHR& decoded_value = *data->decoded_value; + const Decoded_VkPipelineBinaryKeysAndDataKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderBFloat16Type"] = static_cast(decoded_value.shaderBFloat16Type); - jdata["shaderBFloat16DotProduct"] = static_cast(decoded_value.shaderBFloat16DotProduct); - jdata["shaderBFloat16CooperativeMatrix"] = static_cast(decoded_value.shaderBFloat16CooperativeMatrix); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["binaryCount"], decoded_value.binaryCount, options); + FieldToJson(jdata["pPipelineBinaryKeys"], meta_struct.pPipelineBinaryKeys, options); + FieldToJson(jdata["pPipelineBinaryData"], meta_struct.pPipelineBinaryData, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePortabilitySubsetFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePortabilitySubsetFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePortabilitySubsetFeaturesKHR& meta_struct = *data; + const VkPipelineCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkPipelineCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["constantAlphaColorBlendFactors"] = static_cast(decoded_value.constantAlphaColorBlendFactors); - jdata["events"] = static_cast(decoded_value.events); - jdata["imageViewFormatReinterpretation"] = static_cast(decoded_value.imageViewFormatReinterpretation); - jdata["imageViewFormatSwizzle"] = static_cast(decoded_value.imageViewFormatSwizzle); - jdata["imageView2DOn3DImage"] = static_cast(decoded_value.imageView2DOn3DImage); - jdata["multisampleArrayImage"] = static_cast(decoded_value.multisampleArrayImage); - jdata["mutableComparisonSamplers"] = static_cast(decoded_value.mutableComparisonSamplers); - jdata["pointPolygons"] = static_cast(decoded_value.pointPolygons); - jdata["samplerMipLodBias"] = static_cast(decoded_value.samplerMipLodBias); - jdata["separateStencilMaskRef"] = static_cast(decoded_value.separateStencilMaskRef); - jdata["shaderSampleRateInterpolationFunctions"] = static_cast(decoded_value.shaderSampleRateInterpolationFunctions); - jdata["tessellationIsolines"] = static_cast(decoded_value.tessellationIsolines); - jdata["tessellationPointMode"] = static_cast(decoded_value.tessellationPointMode); - jdata["triangleFans"] = static_cast(decoded_value.triangleFans); - jdata["vertexAttributeAccessBeyondStride"] = static_cast(decoded_value.vertexAttributeAccessBeyondStride); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePortabilitySubsetPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineBinaryCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePortabilitySubsetPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePortabilitySubsetPropertiesKHR& meta_struct = *data; + const VkPipelineBinaryCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkPipelineBinaryCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["minVertexInputBindingStrideAlignment"], decoded_value.minVertexInputBindingStrideAlignment, options); + FieldToJson(jdata["pKeysAndDataInfo"], meta_struct.pKeysAndDataInfo, options); + HandleToJson(jdata["pipeline"], meta_struct.pipeline, options); + FieldToJson(jdata["pPipelineCreateInfo"], meta_struct.pPipelineCreateInfo, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderClockFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineBinaryInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderClockFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderClockFeaturesKHR& meta_struct = *data; + const VkPipelineBinaryInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkPipelineBinaryInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderSubgroupClock"] = static_cast(decoded_value.shaderSubgroupClock); - jdata["shaderDeviceClock"] = static_cast(decoded_value.shaderDeviceClock); + FieldToJson(jdata["binaryCount"], decoded_value.binaryCount, options); + HandleToJson(jdata["pPipelineBinaries"], &meta_struct.pPipelineBinaries, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH265ProfileInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkReleaseCapturedPipelineDataInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeH265ProfileInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeH265ProfileInfoKHR& meta_struct = *data; + const VkReleaseCapturedPipelineDataInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkReleaseCapturedPipelineDataInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stdProfileIdc"], decoded_value.stdProfileIdc, options); + HandleToJson(jdata["pipeline"], meta_struct.pipeline, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH265CapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineBinaryDataInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeH265CapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeH265CapabilitiesKHR& meta_struct = *data; + const VkPipelineBinaryDataInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkPipelineBinaryDataInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxLevelIdc"], decoded_value.maxLevelIdc, options); + HandleToJson(jdata["pipelineBinary"], meta_struct.pipelineBinary, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH265SessionParametersAddInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineBinaryHandlesInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeH265SessionParametersAddInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeH265SessionParametersAddInfoKHR& meta_struct = *data; + const VkPipelineBinaryHandlesInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkPipelineBinaryHandlesInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stdVPSCount"], decoded_value.stdVPSCount, options); - FieldToJson(jdata["pStdVPSs"], meta_struct.pStdVPSs, options); - FieldToJson(jdata["stdSPSCount"], decoded_value.stdSPSCount, options); - FieldToJson(jdata["pStdSPSs"], meta_struct.pStdSPSs, options); - FieldToJson(jdata["stdPPSCount"], decoded_value.stdPPSCount, options); - FieldToJson(jdata["pStdPPSs"], meta_struct.pStdPPSs, options); + FieldToJson(jdata["pipelineBinaryCount"], decoded_value.pipelineBinaryCount, options); + HandleToJson(jdata["pPipelineBinaries"], &meta_struct.pPipelineBinaries, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH265SessionParametersCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfacePresentModeKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeH265SessionParametersCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeH265SessionParametersCreateInfoKHR& meta_struct = *data; + const VkSurfacePresentModeKHR& decoded_value = *data->decoded_value; + const Decoded_VkSurfacePresentModeKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxStdVPSCount"], decoded_value.maxStdVPSCount, options); - FieldToJson(jdata["maxStdSPSCount"], decoded_value.maxStdSPSCount, options); - FieldToJson(jdata["maxStdPPSCount"], decoded_value.maxStdPPSCount, options); - FieldToJson(jdata["pParametersAddInfo"], meta_struct.pParametersAddInfo, options); + FieldToJson(jdata["presentMode"], decoded_value.presentMode, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH265PictureInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfacePresentScalingCapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeH265PictureInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeH265PictureInfoKHR& meta_struct = *data; + const VkSurfacePresentScalingCapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkSurfacePresentScalingCapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdPictureInfo"], meta_struct.pStdPictureInfo, options); - FieldToJson(jdata["sliceSegmentCount"], decoded_value.sliceSegmentCount, options); - FieldToJson(jdata["pSliceSegmentOffsets"], meta_struct.pSliceSegmentOffsets, options); + FieldToJson(VkPresentScalingFlagsKHR_t(),jdata["supportedPresentScaling"], decoded_value.supportedPresentScaling, options); + FieldToJson(VkPresentGravityFlagsKHR_t(),jdata["supportedPresentGravityX"], decoded_value.supportedPresentGravityX, options); + FieldToJson(VkPresentGravityFlagsKHR_t(),jdata["supportedPresentGravityY"], decoded_value.supportedPresentGravityY, options); + FieldToJson(jdata["minScaledImageExtent"], meta_struct.minScaledImageExtent, options); + FieldToJson(jdata["maxScaledImageExtent"], meta_struct.maxScaledImageExtent, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH265DpbSlotInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfacePresentModeCompatibilityKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeH265DpbSlotInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeH265DpbSlotInfoKHR& meta_struct = *data; + const VkSurfacePresentModeCompatibilityKHR& decoded_value = *data->decoded_value; + const Decoded_VkSurfacePresentModeCompatibilityKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdReferenceInfo"], meta_struct.pStdReferenceInfo, options); + FieldToJson(jdata["presentModeCount"], decoded_value.presentModeCount, options); + FieldToJson(jdata["pPresentModes"], meta_struct.pPresentModes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFragmentShadingRateAttachmentInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkFragmentShadingRateAttachmentInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkFragmentShadingRateAttachmentInfoKHR& meta_struct = *data; + const VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pFragmentShadingRateAttachment"], meta_struct.pFragmentShadingRateAttachment, options); - FieldToJson(jdata["shadingRateAttachmentTexelSize"], meta_struct.shadingRateAttachmentTexelSize, options); + jdata["swapchainMaintenance1"] = static_cast(decoded_value.swapchainMaintenance1); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineFragmentShadingRateStateCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainPresentFenceInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineFragmentShadingRateStateCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkPipelineFragmentShadingRateStateCreateInfoKHR& meta_struct = *data; + const VkSwapchainPresentFenceInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkSwapchainPresentFenceInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["fragmentSize"], meta_struct.fragmentSize, options); - FieldToJson(jdata["combinerOps"], &meta_struct.combinerOps, options); + FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); + HandleToJson(jdata["pFences"], &meta_struct.pFences, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShadingRateFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainPresentModesCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFragmentShadingRateFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFragmentShadingRateFeaturesKHR& meta_struct = *data; + const VkSwapchainPresentModesCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkSwapchainPresentModesCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["pipelineFragmentShadingRate"] = static_cast(decoded_value.pipelineFragmentShadingRate); - jdata["primitiveFragmentShadingRate"] = static_cast(decoded_value.primitiveFragmentShadingRate); - jdata["attachmentFragmentShadingRate"] = static_cast(decoded_value.attachmentFragmentShadingRate); + FieldToJson(jdata["presentModeCount"], decoded_value.presentModeCount, options); + FieldToJson(jdata["pPresentModes"], meta_struct.pPresentModes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShadingRatePropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainPresentModeInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFragmentShadingRatePropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFragmentShadingRatePropertiesKHR& meta_struct = *data; + const VkSwapchainPresentModeInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkSwapchainPresentModeInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["minFragmentShadingRateAttachmentTexelSize"], meta_struct.minFragmentShadingRateAttachmentTexelSize, options); - FieldToJson(jdata["maxFragmentShadingRateAttachmentTexelSize"], meta_struct.maxFragmentShadingRateAttachmentTexelSize, options); - FieldToJson(jdata["maxFragmentShadingRateAttachmentTexelSizeAspectRatio"], decoded_value.maxFragmentShadingRateAttachmentTexelSizeAspectRatio, options); - jdata["primitiveFragmentShadingRateWithMultipleViewports"] = static_cast(decoded_value.primitiveFragmentShadingRateWithMultipleViewports); - jdata["layeredShadingRateAttachments"] = static_cast(decoded_value.layeredShadingRateAttachments); - jdata["fragmentShadingRateNonTrivialCombinerOps"] = static_cast(decoded_value.fragmentShadingRateNonTrivialCombinerOps); - FieldToJson(jdata["maxFragmentSize"], meta_struct.maxFragmentSize, options); - FieldToJson(jdata["maxFragmentSizeAspectRatio"], decoded_value.maxFragmentSizeAspectRatio, options); - FieldToJson(jdata["maxFragmentShadingRateCoverageSamples"], decoded_value.maxFragmentShadingRateCoverageSamples, options); - FieldToJson(jdata["maxFragmentShadingRateRasterizationSamples"], decoded_value.maxFragmentShadingRateRasterizationSamples, options); - jdata["fragmentShadingRateWithShaderDepthStencilWrites"] = static_cast(decoded_value.fragmentShadingRateWithShaderDepthStencilWrites); - jdata["fragmentShadingRateWithSampleMask"] = static_cast(decoded_value.fragmentShadingRateWithSampleMask); - jdata["fragmentShadingRateWithShaderSampleMask"] = static_cast(decoded_value.fragmentShadingRateWithShaderSampleMask); - jdata["fragmentShadingRateWithConservativeRasterization"] = static_cast(decoded_value.fragmentShadingRateWithConservativeRasterization); - jdata["fragmentShadingRateWithFragmentShaderInterlock"] = static_cast(decoded_value.fragmentShadingRateWithFragmentShaderInterlock); - jdata["fragmentShadingRateWithCustomSampleLocations"] = static_cast(decoded_value.fragmentShadingRateWithCustomSampleLocations); - jdata["fragmentShadingRateStrictMultiplyCombiner"] = static_cast(decoded_value.fragmentShadingRateStrictMultiplyCombiner); + FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); + FieldToJson(jdata["pPresentModes"], meta_struct.pPresentModes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShadingRateKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainPresentScalingCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFragmentShadingRateKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFragmentShadingRateKHR& meta_struct = *data; + const VkSwapchainPresentScalingCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkSwapchainPresentScalingCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkSampleCountFlags_t(),jdata["sampleCounts"], decoded_value.sampleCounts, options); - FieldToJson(jdata["fragmentSize"], meta_struct.fragmentSize, options); + FieldToJson(VkPresentScalingFlagsKHR_t(),jdata["scalingBehavior"], decoded_value.scalingBehavior, options); + FieldToJson(VkPresentGravityFlagsKHR_t(),jdata["presentGravityX"], decoded_value.presentGravityX, options); + FieldToJson(VkPresentGravityFlagsKHR_t(),jdata["presentGravityY"], decoded_value.presentGravityY, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingFragmentShadingRateAttachmentInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkReleaseSwapchainImagesInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderingFragmentShadingRateAttachmentInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkRenderingFragmentShadingRateAttachmentInfoKHR& meta_struct = *data; + const VkReleaseSwapchainImagesInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkReleaseSwapchainImagesInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["imageView"], meta_struct.imageView, options); - FieldToJson(jdata["imageLayout"], decoded_value.imageLayout, options); - FieldToJson(jdata["shadingRateAttachmentTexelSize"], meta_struct.shadingRateAttachmentTexelSize, options); + HandleToJson(jdata["swapchain"], meta_struct.swapchain, options); + FieldToJson(jdata["imageIndexCount"], decoded_value.imageIndexCount, options); + FieldToJson(jdata["pImageIndices"], meta_struct.pImageIndices, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderQuadControlFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCooperativeMatrixPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderQuadControlFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderQuadControlFeaturesKHR& meta_struct = *data; + const VkCooperativeMatrixPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkCooperativeMatrixPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderQuadControl"] = static_cast(decoded_value.shaderQuadControl); + FieldToJson(jdata["MSize"], decoded_value.MSize, options); + FieldToJson(jdata["NSize"], decoded_value.NSize, options); + FieldToJson(jdata["KSize"], decoded_value.KSize, options); + FieldToJson(jdata["AType"], decoded_value.AType, options); + FieldToJson(jdata["BType"], decoded_value.BType, options); + FieldToJson(jdata["CType"], decoded_value.CType, options); + FieldToJson(jdata["ResultType"], decoded_value.ResultType, options); + jdata["saturatingAccumulation"] = static_cast(decoded_value.saturatingAccumulation); + FieldToJson(jdata["scope"], decoded_value.scope, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceProtectedCapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfaceProtectedCapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkSurfaceProtectedCapabilitiesKHR& meta_struct = *data; + const VkPhysicalDeviceCooperativeMatrixFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["supportsProtected"] = static_cast(decoded_value.supportsProtected); + jdata["cooperativeMatrix"] = static_cast(decoded_value.cooperativeMatrix); + jdata["cooperativeMatrixRobustBufferAccess"] = static_cast(decoded_value.cooperativeMatrixRobustBufferAccess); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentWaitFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePresentWaitFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePresentWaitFeaturesKHR& meta_struct = *data; + const VkPhysicalDeviceCooperativeMatrixPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["presentWait"] = static_cast(decoded_value.presentWait); + FieldToJson(VkShaderStageFlags_t(),jdata["cooperativeMatrixSupportedStages"], decoded_value.cooperativeMatrixSupportedStages, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR& meta_struct = *data; + const VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["pipelineExecutableInfo"] = static_cast(decoded_value.pipelineExecutableInfo); + jdata["computeDerivativeGroupQuads"] = static_cast(decoded_value.computeDerivativeGroupQuads); + jdata["computeDerivativeGroupLinear"] = static_cast(decoded_value.computeDerivativeGroupLinear); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkPipelineInfoKHR& meta_struct = *data; + const VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["pipeline"], meta_struct.pipeline, options); + jdata["meshAndTaskShaderDerivatives"] = static_cast(decoded_value.meshAndTaskShaderDerivatives); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineExecutablePropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeAV1ProfileInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineExecutablePropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPipelineExecutablePropertiesKHR& meta_struct = *data; + const VkVideoDecodeAV1ProfileInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeAV1ProfileInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkShaderStageFlags_t(),jdata["stages"], decoded_value.stages, options); - FieldToJson(jdata["name"], &meta_struct.name, options); - FieldToJson(jdata["description"], &meta_struct.description, options); - FieldToJson(jdata["subgroupSize"], decoded_value.subgroupSize, options); + FieldToJson(jdata["stdProfile"], decoded_value.stdProfile, options); + jdata["filmGrainSupport"] = static_cast(decoded_value.filmGrainSupport); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineExecutableInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeAV1CapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineExecutableInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkPipelineExecutableInfoKHR& meta_struct = *data; + const VkVideoDecodeAV1CapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeAV1CapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["pipeline"], meta_struct.pipeline, options); - FieldToJson(jdata["executableIndex"], decoded_value.executableIndex, options); + FieldToJson(jdata["maxLevel"], decoded_value.maxLevel, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineExecutableInternalRepresentationKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeAV1SessionParametersCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineExecutableInternalRepresentationKHR& decoded_value = *data->decoded_value; - const Decoded_VkPipelineExecutableInternalRepresentationKHR& meta_struct = *data; + const VkVideoDecodeAV1SessionParametersCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeAV1SessionParametersCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["name"], &meta_struct.name, options); - FieldToJson(jdata["description"], &meta_struct.description, options); - jdata["isText"] = static_cast(decoded_value.isText); - FieldToJson(jdata["dataSize"], decoded_value.dataSize, options); - FieldToJson(jdata["pData"], meta_struct.pData, options); + FieldToJson(jdata["pStdSequenceHeader"], meta_struct.pStdSequenceHeader, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineLibraryCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeAV1PictureInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineLibraryCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkPipelineLibraryCreateInfoKHR& meta_struct = *data; + const VkVideoDecodeAV1PictureInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeAV1PictureInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["libraryCount"], decoded_value.libraryCount, options); - HandleToJson(jdata["pLibraries"], &meta_struct.pLibraries, options); + FieldToJson(jdata["pStdPictureInfo"], meta_struct.pStdPictureInfo, options); + FieldToJson(jdata["referenceNameSlotIndices"], &meta_struct.referenceNameSlotIndices, options); + FieldToJson(jdata["frameHeaderOffset"], decoded_value.frameHeaderOffset, options); + FieldToJson(jdata["tileCount"], decoded_value.tileCount, options); + FieldToJson(jdata["pTileOffsets"], meta_struct.pTileOffsets, options); + FieldToJson(jdata["pTileSizes"], meta_struct.pTileSizes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentIdKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeAV1DpbSlotInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPresentIdKHR& decoded_value = *data->decoded_value; - const Decoded_VkPresentIdKHR& meta_struct = *data; + const VkVideoDecodeAV1DpbSlotInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeAV1DpbSlotInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); - FieldToJson(jdata["pPresentIds"], meta_struct.pPresentIds, options); + FieldToJson(jdata["pStdReferenceInfo"], meta_struct.pStdReferenceInfo, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentIdFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoEncodeAV1FeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePresentIdFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePresentIdFeaturesKHR& meta_struct = *data; + const VkPhysicalDeviceVideoEncodeAV1FeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVideoEncodeAV1FeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["presentId"] = static_cast(decoded_value.presentId); + jdata["videoEncodeAV1"] = static_cast(decoded_value.videoEncodeAV1); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1CapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeInfoKHR& meta_struct = *data; + const VkVideoEncodeAV1CapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeAV1CapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - HandleToJson(jdata["dstBuffer"], meta_struct.dstBuffer, options); - FieldToJson(jdata["dstBufferOffset"], decoded_value.dstBufferOffset, options); - FieldToJson(jdata["dstBufferRange"], decoded_value.dstBufferRange, options); - FieldToJson(jdata["srcPictureResource"], meta_struct.srcPictureResource, options); - FieldToJson(jdata["pSetupReferenceSlot"], meta_struct.pSetupReferenceSlot, options); - FieldToJson(jdata["referenceSlotCount"], decoded_value.referenceSlotCount, options); - FieldToJson(jdata["pReferenceSlots"], meta_struct.pReferenceSlots, options); - FieldToJson(jdata["precedingExternallyEncodedBytes"], decoded_value.precedingExternallyEncodedBytes, options); + FieldToJson(VkVideoEncodeAV1CapabilityFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["maxLevel"], decoded_value.maxLevel, options); + FieldToJson(jdata["codedPictureAlignment"], meta_struct.codedPictureAlignment, options); + FieldToJson(jdata["maxTiles"], meta_struct.maxTiles, options); + FieldToJson(jdata["minTileSize"], meta_struct.minTileSize, options); + FieldToJson(jdata["maxTileSize"], meta_struct.maxTileSize, options); + FieldToJson(VkVideoEncodeAV1SuperblockSizeFlagsKHR_t(),jdata["superblockSizes"], decoded_value.superblockSizes, options); + FieldToJson(jdata["maxSingleReferenceCount"], decoded_value.maxSingleReferenceCount, options); + FieldToJson(jdata["singleReferenceNameMask"], decoded_value.singleReferenceNameMask, options); + FieldToJson(jdata["maxUnidirectionalCompoundReferenceCount"], decoded_value.maxUnidirectionalCompoundReferenceCount, options); + FieldToJson(jdata["maxUnidirectionalCompoundGroup1ReferenceCount"], decoded_value.maxUnidirectionalCompoundGroup1ReferenceCount, options); + FieldToJson(jdata["unidirectionalCompoundReferenceNameMask"], decoded_value.unidirectionalCompoundReferenceNameMask, options); + FieldToJson(jdata["maxBidirectionalCompoundReferenceCount"], decoded_value.maxBidirectionalCompoundReferenceCount, options); + FieldToJson(jdata["maxBidirectionalCompoundGroup1ReferenceCount"], decoded_value.maxBidirectionalCompoundGroup1ReferenceCount, options); + FieldToJson(jdata["maxBidirectionalCompoundGroup2ReferenceCount"], decoded_value.maxBidirectionalCompoundGroup2ReferenceCount, options); + FieldToJson(jdata["bidirectionalCompoundReferenceNameMask"], decoded_value.bidirectionalCompoundReferenceNameMask, options); + FieldToJson(jdata["maxTemporalLayerCount"], decoded_value.maxTemporalLayerCount, options); + FieldToJson(jdata["maxSpatialLayerCount"], decoded_value.maxSpatialLayerCount, options); + FieldToJson(jdata["maxOperatingPoints"], decoded_value.maxOperatingPoints, options); + FieldToJson(jdata["minQIndex"], decoded_value.minQIndex, options); + FieldToJson(jdata["maxQIndex"], decoded_value.maxQIndex, options); + jdata["prefersGopRemainingFrames"] = static_cast(decoded_value.prefersGopRemainingFrames); + jdata["requiresGopRemainingFrames"] = static_cast(decoded_value.requiresGopRemainingFrames); + FieldToJson(VkVideoEncodeAV1StdFlagsKHR_t(),jdata["stdSyntaxFlags"], decoded_value.stdSyntaxFlags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeCapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1QIndexKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeCapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeCapabilitiesKHR& meta_struct = *data; + const VkVideoEncodeAV1QIndexKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeAV1QIndexKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeCapabilityFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(VkVideoEncodeRateControlModeFlagsKHR_t(),jdata["rateControlModes"], decoded_value.rateControlModes, options); - FieldToJson(jdata["maxRateControlLayers"], decoded_value.maxRateControlLayers, options); - FieldToJson(jdata["maxBitrate"], decoded_value.maxBitrate, options); - FieldToJson(jdata["maxQualityLevels"], decoded_value.maxQualityLevels, options); - FieldToJson(jdata["encodeInputPictureGranularity"], meta_struct.encodeInputPictureGranularity, options); - FieldToJson(VkVideoEncodeFeedbackFlagsKHR_t(),jdata["supportedEncodeFeedbackFlags"], decoded_value.supportedEncodeFeedbackFlags, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["intraQIndex"], decoded_value.intraQIndex, options); + FieldToJson(jdata["predictiveQIndex"], decoded_value.predictiveQIndex, options); + FieldToJson(jdata["bipredictiveQIndex"], decoded_value.bipredictiveQIndex, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueryPoolVideoEncodeFeedbackCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1QualityLevelPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkQueryPoolVideoEncodeFeedbackCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkQueryPoolVideoEncodeFeedbackCreateInfoKHR& meta_struct = *data; + const VkVideoEncodeAV1QualityLevelPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeAV1QualityLevelPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeFeedbackFlagsKHR_t(),jdata["encodeFeedbackFlags"], decoded_value.encodeFeedbackFlags, options); + FieldToJson(VkVideoEncodeAV1RateControlFlagsKHR_t(),jdata["preferredRateControlFlags"], decoded_value.preferredRateControlFlags, options); + FieldToJson(jdata["preferredGopFrameCount"], decoded_value.preferredGopFrameCount, options); + FieldToJson(jdata["preferredKeyFramePeriod"], decoded_value.preferredKeyFramePeriod, options); + FieldToJson(jdata["preferredConsecutiveBipredictiveFrameCount"], decoded_value.preferredConsecutiveBipredictiveFrameCount, options); + FieldToJson(jdata["preferredTemporalLayerCount"], decoded_value.preferredTemporalLayerCount, options); + FieldToJson(jdata["preferredConstantQIndex"], meta_struct.preferredConstantQIndex, options); + FieldToJson(jdata["preferredMaxSingleReferenceCount"], decoded_value.preferredMaxSingleReferenceCount, options); + FieldToJson(jdata["preferredSingleReferenceNameMask"], decoded_value.preferredSingleReferenceNameMask, options); + FieldToJson(jdata["preferredMaxUnidirectionalCompoundReferenceCount"], decoded_value.preferredMaxUnidirectionalCompoundReferenceCount, options); + FieldToJson(jdata["preferredMaxUnidirectionalCompoundGroup1ReferenceCount"], decoded_value.preferredMaxUnidirectionalCompoundGroup1ReferenceCount, options); + FieldToJson(jdata["preferredUnidirectionalCompoundReferenceNameMask"], decoded_value.preferredUnidirectionalCompoundReferenceNameMask, options); + FieldToJson(jdata["preferredMaxBidirectionalCompoundReferenceCount"], decoded_value.preferredMaxBidirectionalCompoundReferenceCount, options); + FieldToJson(jdata["preferredMaxBidirectionalCompoundGroup1ReferenceCount"], decoded_value.preferredMaxBidirectionalCompoundGroup1ReferenceCount, options); + FieldToJson(jdata["preferredMaxBidirectionalCompoundGroup2ReferenceCount"], decoded_value.preferredMaxBidirectionalCompoundGroup2ReferenceCount, options); + FieldToJson(jdata["preferredBidirectionalCompoundReferenceNameMask"], decoded_value.preferredBidirectionalCompoundReferenceNameMask, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeUsageInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1SessionCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeUsageInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeUsageInfoKHR& meta_struct = *data; + const VkVideoEncodeAV1SessionCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeAV1SessionCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeUsageFlagsKHR_t(),jdata["videoUsageHints"], decoded_value.videoUsageHints, options); - FieldToJson(VkVideoEncodeContentFlagsKHR_t(),jdata["videoContentHints"], decoded_value.videoContentHints, options); - FieldToJson(jdata["tuningMode"], decoded_value.tuningMode, options); + jdata["useMaxLevel"] = static_cast(decoded_value.useMaxLevel); + FieldToJson(jdata["maxLevel"], decoded_value.maxLevel, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeRateControlLayerInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1SessionParametersCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeRateControlLayerInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeRateControlLayerInfoKHR& meta_struct = *data; + const VkVideoEncodeAV1SessionParametersCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeAV1SessionParametersCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["averageBitrate"], decoded_value.averageBitrate, options); - FieldToJson(jdata["maxBitrate"], decoded_value.maxBitrate, options); - FieldToJson(jdata["frameRateNumerator"], decoded_value.frameRateNumerator, options); - FieldToJson(jdata["frameRateDenominator"], decoded_value.frameRateDenominator, options); + FieldToJson(jdata["pStdSequenceHeader"], meta_struct.pStdSequenceHeader, options); + FieldToJson(jdata["pStdDecoderModelInfo"], meta_struct.pStdDecoderModelInfo, options); + FieldToJson(jdata["stdOperatingPointCount"], decoded_value.stdOperatingPointCount, options); + FieldToJson(jdata["pStdOperatingPoints"], meta_struct.pStdOperatingPoints, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeRateControlInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1PictureInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeRateControlInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeRateControlInfoKHR& meta_struct = *data; + const VkVideoEncodeAV1PictureInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeAV1PictureInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeRateControlFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["rateControlMode"], decoded_value.rateControlMode, options); - FieldToJson(jdata["layerCount"], decoded_value.layerCount, options); - FieldToJson(jdata["pLayers"], meta_struct.pLayers, options); - FieldToJson(jdata["virtualBufferSizeInMs"], decoded_value.virtualBufferSizeInMs, options); - FieldToJson(jdata["initialVirtualBufferSizeInMs"], decoded_value.initialVirtualBufferSizeInMs, options); + FieldToJson(jdata["predictionMode"], decoded_value.predictionMode, options); + FieldToJson(jdata["rateControlGroup"], decoded_value.rateControlGroup, options); + FieldToJson(jdata["constantQIndex"], decoded_value.constantQIndex, options); + FieldToJson(jdata["pStdPictureInfo"], meta_struct.pStdPictureInfo, options); + FieldToJson(jdata["referenceNameSlotIndices"], &meta_struct.referenceNameSlotIndices, options); + jdata["primaryReferenceCdfOnly"] = static_cast(decoded_value.primaryReferenceCdfOnly); + jdata["generateObuExtensionHeader"] = static_cast(decoded_value.generateObuExtensionHeader); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1DpbSlotInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR& meta_struct = *data; + const VkVideoEncodeAV1DpbSlotInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeAV1DpbSlotInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pVideoProfile"], meta_struct.pVideoProfile, options); - FieldToJson(jdata["qualityLevel"], decoded_value.qualityLevel, options); + FieldToJson(jdata["pStdReferenceInfo"], meta_struct.pStdReferenceInfo, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeQualityLevelPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1ProfileInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeQualityLevelPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeQualityLevelPropertiesKHR& meta_struct = *data; + const VkVideoEncodeAV1ProfileInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeAV1ProfileInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["preferredRateControlMode"], decoded_value.preferredRateControlMode, options); - FieldToJson(jdata["preferredRateControlLayerCount"], decoded_value.preferredRateControlLayerCount, options); + FieldToJson(jdata["stdProfile"], decoded_value.stdProfile, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeQualityLevelInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1FrameSizeKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeQualityLevelInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeQualityLevelInfoKHR& meta_struct = *data; + const VkVideoEncodeAV1FrameSizeKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeAV1FrameSizeKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["qualityLevel"], decoded_value.qualityLevel, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["intraFrameSize"], decoded_value.intraFrameSize, options); + FieldToJson(jdata["predictiveFrameSize"], decoded_value.predictiveFrameSize, options); + FieldToJson(jdata["bipredictiveFrameSize"], decoded_value.bipredictiveFrameSize, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeSessionParametersGetInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1GopRemainingFrameInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeSessionParametersGetInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeSessionParametersGetInfoKHR& meta_struct = *data; + const VkVideoEncodeAV1GopRemainingFrameInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeAV1GopRemainingFrameInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["videoSessionParameters"], meta_struct.videoSessionParameters, options); + jdata["useGopRemainingFrames"] = static_cast(decoded_value.useGopRemainingFrames); + FieldToJson(jdata["gopRemainingIntra"], decoded_value.gopRemainingIntra, options); + FieldToJson(jdata["gopRemainingPredictive"], decoded_value.gopRemainingPredictive, options); + FieldToJson(jdata["gopRemainingBipredictive"], decoded_value.gopRemainingBipredictive, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeSessionParametersFeedbackInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1RateControlInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeSessionParametersFeedbackInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeSessionParametersFeedbackInfoKHR& meta_struct = *data; + const VkVideoEncodeAV1RateControlInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeAV1RateControlInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["hasOverrides"] = static_cast(decoded_value.hasOverrides); + FieldToJson(VkVideoEncodeAV1RateControlFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["gopFrameCount"], decoded_value.gopFrameCount, options); + FieldToJson(jdata["keyFramePeriod"], decoded_value.keyFramePeriod, options); + FieldToJson(jdata["consecutiveBipredictiveFrameCount"], decoded_value.consecutiveBipredictiveFrameCount, options); + FieldToJson(jdata["temporalLayerCount"], decoded_value.temporalLayerCount, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1RateControlLayerInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR& meta_struct = *data; + const VkVideoEncodeAV1RateControlLayerInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeAV1RateControlLayerInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["fragmentShaderBarycentric"] = static_cast(decoded_value.fragmentShaderBarycentric); + jdata["useMinQIndex"] = static_cast(decoded_value.useMinQIndex); + FieldToJson(jdata["minQIndex"], meta_struct.minQIndex, options); + jdata["useMaxQIndex"] = static_cast(decoded_value.useMaxQIndex); + FieldToJson(jdata["maxQIndex"], meta_struct.maxQIndex, options); + jdata["useMaxFrameSize"] = static_cast(decoded_value.useMaxFrameSize); + FieldToJson(jdata["maxFrameSize"], meta_struct.maxFrameSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoDecodeVP9FeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR& meta_struct = *data; + const VkPhysicalDeviceVideoDecodeVP9FeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVideoDecodeVP9FeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["triStripVertexOrderIndependentOfProvokingVertex"] = static_cast(decoded_value.triStripVertexOrderIndependentOfProvokingVertex); + jdata["videoDecodeVP9"] = static_cast(decoded_value.videoDecodeVP9); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeVP9ProfileInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR& meta_struct = *data; + const VkVideoDecodeVP9ProfileInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeVP9ProfileInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderSubgroupUniformControlFlow"] = static_cast(decoded_value.shaderSubgroupUniformControlFlow); + FieldToJson(jdata["stdProfile"], decoded_value.stdProfile, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeVP9CapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR& meta_struct = *data; + const VkVideoDecodeVP9CapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeVP9CapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["workgroupMemoryExplicitLayout"] = static_cast(decoded_value.workgroupMemoryExplicitLayout); - jdata["workgroupMemoryExplicitLayoutScalarBlockLayout"] = static_cast(decoded_value.workgroupMemoryExplicitLayoutScalarBlockLayout); - jdata["workgroupMemoryExplicitLayout8BitAccess"] = static_cast(decoded_value.workgroupMemoryExplicitLayout8BitAccess); - jdata["workgroupMemoryExplicitLayout16BitAccess"] = static_cast(decoded_value.workgroupMemoryExplicitLayout16BitAccess); + FieldToJson(jdata["maxLevel"], decoded_value.maxLevel, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeVP9PictureInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR& meta_struct = *data; + const VkVideoDecodeVP9PictureInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoDecodeVP9PictureInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["rayTracingMaintenance1"] = static_cast(decoded_value.rayTracingMaintenance1); - jdata["rayTracingPipelineTraceRaysIndirect2"] = static_cast(decoded_value.rayTracingPipelineTraceRaysIndirect2); + FieldToJson(jdata["pStdPictureInfo"], meta_struct.pStdPictureInfo, options); + FieldToJson(jdata["referenceNameSlotIndices"], &meta_struct.referenceNameSlotIndices, options); + FieldToJson(jdata["uncompressedHeaderOffset"], decoded_value.uncompressedHeaderOffset, options); + FieldToJson(jdata["compressedHeaderOffset"], decoded_value.compressedHeaderOffset, options); + FieldToJson(jdata["tilesOffset"], decoded_value.tilesOffset, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTraceRaysIndirectCommand2KHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoMaintenance1FeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkTraceRaysIndirectCommand2KHR& decoded_value = *data->decoded_value; - const Decoded_VkTraceRaysIndirectCommand2KHR& meta_struct = *data; + const VkPhysicalDeviceVideoMaintenance1FeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVideoMaintenance1FeaturesKHR& meta_struct = *data; - FieldToJson(jdata["raygenShaderRecordAddress"], to_hex_variable_width(decoded_value.raygenShaderRecordAddress), options); - FieldToJson(jdata["raygenShaderRecordSize"], decoded_value.raygenShaderRecordSize, options); - FieldToJson(jdata["missShaderBindingTableAddress"], to_hex_variable_width(decoded_value.missShaderBindingTableAddress), options); - FieldToJson(jdata["missShaderBindingTableSize"], decoded_value.missShaderBindingTableSize, options); - FieldToJson(jdata["missShaderBindingTableStride"], decoded_value.missShaderBindingTableStride, options); - FieldToJson(jdata["hitShaderBindingTableAddress"], to_hex_variable_width(decoded_value.hitShaderBindingTableAddress), options); - FieldToJson(jdata["hitShaderBindingTableSize"], decoded_value.hitShaderBindingTableSize, options); - FieldToJson(jdata["hitShaderBindingTableStride"], decoded_value.hitShaderBindingTableStride, options); - FieldToJson(jdata["callableShaderBindingTableAddress"], to_hex_variable_width(decoded_value.callableShaderBindingTableAddress), options); - FieldToJson(jdata["callableShaderBindingTableSize"], decoded_value.callableShaderBindingTableSize, options); - FieldToJson(jdata["callableShaderBindingTableStride"], decoded_value.callableShaderBindingTableStride, options); - FieldToJson(jdata["width"], decoded_value.width, options); - FieldToJson(jdata["height"], decoded_value.height, options); - FieldToJson(jdata["depth"], decoded_value.depth, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["videoMaintenance1"] = static_cast(decoded_value.videoMaintenance1); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoInlineQueryInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR& meta_struct = *data; + const VkVideoInlineQueryInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoInlineQueryInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderMaximalReconvergence"] = static_cast(decoded_value.shaderMaximalReconvergence); + HandleToJson(jdata["queryPool"], meta_struct.queryPool, options); + FieldToJson(jdata["firstQuery"], decoded_value.firstQuery, options); + FieldToJson(jdata["queryCount"], decoded_value.queryCount, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilitiesPresentId2KHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfaceCapabilitiesPresentId2KHR& decoded_value = *data->decoded_value; - const Decoded_VkSurfaceCapabilitiesPresentId2KHR& meta_struct = *data; + const VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["presentId2Supported"] = static_cast(decoded_value.presentId2Supported); + jdata["unifiedImageLayouts"] = static_cast(decoded_value.unifiedImageLayouts); + jdata["unifiedImageLayoutsVideo"] = static_cast(decoded_value.unifiedImageLayoutsVideo); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentId2KHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentFeedbackLoopInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPresentId2KHR& decoded_value = *data->decoded_value; - const Decoded_VkPresentId2KHR& meta_struct = *data; + const VkAttachmentFeedbackLoopInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkAttachmentFeedbackLoopInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); - FieldToJson(jdata["pPresentIds"], meta_struct.pPresentIds, options); + jdata["feedbackLoopEnable"] = static_cast(decoded_value.feedbackLoopEnable); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentId2FeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCalibratedTimestampInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePresentId2FeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePresentId2FeaturesKHR& meta_struct = *data; + const VkCalibratedTimestampInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkCalibratedTimestampInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["presentId2"] = static_cast(decoded_value.presentId2); + FieldToJson(jdata["timeDomain"], decoded_value.timeDomain, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilitiesPresentWait2KHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSetDescriptorBufferOffsetsInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfaceCapabilitiesPresentWait2KHR& decoded_value = *data->decoded_value; - const Decoded_VkSurfaceCapabilitiesPresentWait2KHR& meta_struct = *data; + const VkSetDescriptorBufferOffsetsInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkSetDescriptorBufferOffsetsInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["presentWait2Supported"] = static_cast(decoded_value.presentWait2Supported); + FieldToJson(VkShaderStageFlags_t(),jdata["stageFlags"], decoded_value.stageFlags, options); + HandleToJson(jdata["layout"], meta_struct.layout, options); + FieldToJson(jdata["firstSet"], decoded_value.firstSet, options); + FieldToJson(jdata["setCount"], decoded_value.setCount, options); + FieldToJson(jdata["pBufferIndices"], meta_struct.pBufferIndices, options); + FieldToJson(jdata["pOffsets"], meta_struct.pOffsets, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentWait2FeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePresentWait2FeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePresentWait2FeaturesKHR& meta_struct = *data; + const VkBindDescriptorBufferEmbeddedSamplersInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["presentWait2"] = static_cast(decoded_value.presentWait2); + FieldToJson(VkShaderStageFlags_t(),jdata["stageFlags"], decoded_value.stageFlags, options); + HandleToJson(jdata["layout"], meta_struct.layout, options); + FieldToJson(jdata["set"], decoded_value.set, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentWait2InfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkStridedDeviceAddressRangeKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPresentWait2InfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkPresentWait2InfoKHR& meta_struct = *data; + const VkStridedDeviceAddressRangeKHR& decoded_value = *data->decoded_value; + const Decoded_VkStridedDeviceAddressRangeKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["presentId"], decoded_value.presentId, options); - FieldToJson(jdata["timeout"], decoded_value.timeout, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["address"], to_hex_variable_width(decoded_value.address), options); + FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["stride"], decoded_value.stride, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyMemoryIndirectCommandKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR& meta_struct = *data; + const VkCopyMemoryIndirectCommandKHR& decoded_value = *data->decoded_value; + const Decoded_VkCopyMemoryIndirectCommandKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["rayTracingPositionFetch"] = static_cast(decoded_value.rayTracingPositionFetch); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["srcAddress"], to_hex_variable_width(decoded_value.srcAddress), options); + FieldToJson(jdata["dstAddress"], to_hex_variable_width(decoded_value.dstAddress), options); + FieldToJson(jdata["size"], decoded_value.size, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineBinaryFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyMemoryIndirectInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePipelineBinaryFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePipelineBinaryFeaturesKHR& meta_struct = *data; + const VkCopyMemoryIndirectInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkCopyMemoryIndirectInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["pipelineBinaries"] = static_cast(decoded_value.pipelineBinaries); + FieldToJson(VkAddressCopyFlagsKHR_t(),jdata["srcCopyFlags"], decoded_value.srcCopyFlags, options); + FieldToJson(VkAddressCopyFlagsKHR_t(),jdata["dstCopyFlags"], decoded_value.dstCopyFlags, options); + FieldToJson(jdata["copyCount"], decoded_value.copyCount, options); + FieldToJson(jdata["copyAddressRange"], meta_struct.copyAddressRange, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineBinaryPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyMemoryToImageIndirectCommandKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePipelineBinaryPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePipelineBinaryPropertiesKHR& meta_struct = *data; + const VkCopyMemoryToImageIndirectCommandKHR& decoded_value = *data->decoded_value; + const Decoded_VkCopyMemoryToImageIndirectCommandKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["pipelineBinaryInternalCache"] = static_cast(decoded_value.pipelineBinaryInternalCache); - jdata["pipelineBinaryInternalCacheControl"] = static_cast(decoded_value.pipelineBinaryInternalCacheControl); - jdata["pipelineBinaryPrefersInternalCache"] = static_cast(decoded_value.pipelineBinaryPrefersInternalCache); - jdata["pipelineBinaryPrecompiledInternalCache"] = static_cast(decoded_value.pipelineBinaryPrecompiledInternalCache); - jdata["pipelineBinaryCompressedData"] = static_cast(decoded_value.pipelineBinaryCompressedData); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["srcAddress"], to_hex_variable_width(decoded_value.srcAddress), options); + FieldToJson(jdata["bufferRowLength"], decoded_value.bufferRowLength, options); + FieldToJson(jdata["bufferImageHeight"], decoded_value.bufferImageHeight, options); + FieldToJson(jdata["imageSubresource"], meta_struct.imageSubresource, options); + FieldToJson(jdata["imageOffset"], meta_struct.imageOffset, options); + FieldToJson(jdata["imageExtent"], meta_struct.imageExtent, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDevicePipelineBinaryInternalCacheControlKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyMemoryToImageIndirectInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDevicePipelineBinaryInternalCacheControlKHR& decoded_value = *data->decoded_value; - const Decoded_VkDevicePipelineBinaryInternalCacheControlKHR& meta_struct = *data; + const VkCopyMemoryToImageIndirectInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkCopyMemoryToImageIndirectInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["disableInternalCache"] = static_cast(decoded_value.disableInternalCache); + FieldToJson(VkAddressCopyFlagsKHR_t(),jdata["srcCopyFlags"], decoded_value.srcCopyFlags, options); + FieldToJson(jdata["copyCount"], decoded_value.copyCount, options); + FieldToJson(jdata["copyAddressRange"], meta_struct.copyAddressRange, options); + HandleToJson(jdata["dstImage"], meta_struct.dstImage, options); + FieldToJson(jdata["dstImageLayout"], decoded_value.dstImageLayout, options); + FieldToJson(jdata["pImageSubresources"], meta_struct.pImageSubresources, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineBinaryKeyKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineBinaryKeyKHR& decoded_value = *data->decoded_value; - const Decoded_VkPipelineBinaryKeyKHR& meta_struct = *data; + const VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["keySize"], decoded_value.keySize, options); - FieldToJson(jdata["key"], &meta_struct.key, options); + jdata["indirectMemoryCopy"] = static_cast(decoded_value.indirectMemoryCopy); + jdata["indirectMemoryToImageCopy"] = static_cast(decoded_value.indirectMemoryToImageCopy); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineBinaryDataKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineBinaryDataKHR& decoded_value = *data->decoded_value; - const Decoded_VkPipelineBinaryDataKHR& meta_struct = *data; + const VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR& meta_struct = *data; - FieldToJson(jdata["dataSize"], decoded_value.dataSize, options); - FieldToJson(jdata["pData"], meta_struct.pData, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkQueueFlags_t(),jdata["supportedQueues"], decoded_value.supportedQueues, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineBinaryKeysAndDataKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeIntraRefreshCapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineBinaryKeysAndDataKHR& decoded_value = *data->decoded_value; - const Decoded_VkPipelineBinaryKeysAndDataKHR& meta_struct = *data; + const VkVideoEncodeIntraRefreshCapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeIntraRefreshCapabilitiesKHR& meta_struct = *data; - FieldToJson(jdata["binaryCount"], decoded_value.binaryCount, options); - FieldToJson(jdata["pPipelineBinaryKeys"], meta_struct.pPipelineBinaryKeys, options); - FieldToJson(jdata["pPipelineBinaryData"], meta_struct.pPipelineBinaryData, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkVideoEncodeIntraRefreshModeFlagsKHR_t(),jdata["intraRefreshModes"], decoded_value.intraRefreshModes, options); + FieldToJson(jdata["maxIntraRefreshCycleDuration"], decoded_value.maxIntraRefreshCycleDuration, options); + FieldToJson(jdata["maxIntraRefreshActiveReferencePictures"], decoded_value.maxIntraRefreshActiveReferencePictures, options); + jdata["partitionIndependentIntraRefreshRegions"] = static_cast(decoded_value.partitionIndependentIntraRefreshRegions); + jdata["nonRectangularIntraRefreshRegions"] = static_cast(decoded_value.nonRectangularIntraRefreshRegions); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeSessionIntraRefreshCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkPipelineCreateInfoKHR& meta_struct = *data; + const VkVideoEncodeSessionIntraRefreshCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeSessionIntraRefreshCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["intraRefreshMode"], decoded_value.intraRefreshMode, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineBinaryCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeIntraRefreshInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineBinaryCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkPipelineBinaryCreateInfoKHR& meta_struct = *data; + const VkVideoEncodeIntraRefreshInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeIntraRefreshInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pKeysAndDataInfo"], meta_struct.pKeysAndDataInfo, options); - HandleToJson(jdata["pipeline"], meta_struct.pipeline, options); - FieldToJson(jdata["pPipelineCreateInfo"], meta_struct.pPipelineCreateInfo, options); + FieldToJson(jdata["intraRefreshCycleDuration"], decoded_value.intraRefreshCycleDuration, options); + FieldToJson(jdata["intraRefreshIndex"], decoded_value.intraRefreshIndex, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineBinaryInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoReferenceIntraRefreshInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineBinaryInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkPipelineBinaryInfoKHR& meta_struct = *data; + const VkVideoReferenceIntraRefreshInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoReferenceIntraRefreshInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["binaryCount"], decoded_value.binaryCount, options); - HandleToJson(jdata["pPipelineBinaries"], &meta_struct.pPipelineBinaries, options); + FieldToJson(jdata["dirtyIntraRefreshRegions"], decoded_value.dirtyIntraRefreshRegions, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkReleaseCapturedPipelineDataInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkReleaseCapturedPipelineDataInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkReleaseCapturedPipelineDataInfoKHR& meta_struct = *data; + const VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["pipeline"], meta_struct.pipeline, options); + jdata["videoEncodeIntraRefresh"] = static_cast(decoded_value.videoEncodeIntraRefresh); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineBinaryDataInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeQuantizationMapCapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineBinaryDataInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkPipelineBinaryDataInfoKHR& meta_struct = *data; + const VkVideoEncodeQuantizationMapCapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeQuantizationMapCapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["pipelineBinary"], meta_struct.pipelineBinary, options); + FieldToJson(jdata["maxQuantizationMapExtent"], meta_struct.maxQuantizationMapExtent, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineBinaryHandlesInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoFormatQuantizationMapPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineBinaryHandlesInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkPipelineBinaryHandlesInfoKHR& meta_struct = *data; + const VkVideoFormatQuantizationMapPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoFormatQuantizationMapPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pipelineBinaryCount"], decoded_value.pipelineBinaryCount, options); - HandleToJson(jdata["pPipelineBinaries"], &meta_struct.pPipelineBinaries, options); + FieldToJson(jdata["quantizationMapTexelSize"], meta_struct.quantizationMapTexelSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfacePresentModeKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeQuantizationMapInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfacePresentModeKHR& decoded_value = *data->decoded_value; - const Decoded_VkSurfacePresentModeKHR& meta_struct = *data; + const VkVideoEncodeQuantizationMapInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeQuantizationMapInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["presentMode"], decoded_value.presentMode, options); + HandleToJson(jdata["quantizationMap"], meta_struct.quantizationMap, options); + FieldToJson(jdata["quantizationMapExtent"], meta_struct.quantizationMapExtent, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfacePresentScalingCapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfacePresentScalingCapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkSurfacePresentScalingCapabilitiesKHR& meta_struct = *data; + const VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPresentScalingFlagsKHR_t(),jdata["supportedPresentScaling"], decoded_value.supportedPresentScaling, options); - FieldToJson(VkPresentGravityFlagsKHR_t(),jdata["supportedPresentGravityX"], decoded_value.supportedPresentGravityX, options); - FieldToJson(VkPresentGravityFlagsKHR_t(),jdata["supportedPresentGravityY"], decoded_value.supportedPresentGravityY, options); - FieldToJson(jdata["minScaledImageExtent"], meta_struct.minScaledImageExtent, options); - FieldToJson(jdata["maxScaledImageExtent"], meta_struct.maxScaledImageExtent, options); + FieldToJson(jdata["quantizationMapTexelSize"], meta_struct.quantizationMapTexelSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfacePresentModeCompatibilityKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfacePresentModeCompatibilityKHR& decoded_value = *data->decoded_value; - const Decoded_VkSurfacePresentModeCompatibilityKHR& meta_struct = *data; + const VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["presentModeCount"], decoded_value.presentModeCount, options); - FieldToJson(jdata["pPresentModes"], meta_struct.pPresentModes, options); + jdata["videoEncodeQuantizationMap"] = static_cast(decoded_value.videoEncodeQuantizationMap); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264QuantizationMapCapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR& meta_struct = *data; + const VkVideoEncodeH264QuantizationMapCapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH264QuantizationMapCapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["swapchainMaintenance1"] = static_cast(decoded_value.swapchainMaintenance1); + FieldToJson(jdata["minQpDelta"], decoded_value.minQpDelta, options); + FieldToJson(jdata["maxQpDelta"], decoded_value.maxQpDelta, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainPresentFenceInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265QuantizationMapCapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSwapchainPresentFenceInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkSwapchainPresentFenceInfoKHR& meta_struct = *data; + const VkVideoEncodeH265QuantizationMapCapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeH265QuantizationMapCapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); - HandleToJson(jdata["pFences"], &meta_struct.pFences, options); + FieldToJson(jdata["minQpDelta"], decoded_value.minQpDelta, options); + FieldToJson(jdata["maxQpDelta"], decoded_value.maxQpDelta, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainPresentModesCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoFormatH265QuantizationMapPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSwapchainPresentModesCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkSwapchainPresentModesCreateInfoKHR& meta_struct = *data; + const VkVideoFormatH265QuantizationMapPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoFormatH265QuantizationMapPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["presentModeCount"], decoded_value.presentModeCount, options); - FieldToJson(jdata["pPresentModes"], meta_struct.pPresentModes, options); + FieldToJson(VkVideoEncodeH265CtbSizeFlagsKHR_t(),jdata["compatibleCtbSizes"], decoded_value.compatibleCtbSizes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainPresentModeInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1QuantizationMapCapabilitiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSwapchainPresentModeInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkSwapchainPresentModeInfoKHR& meta_struct = *data; + const VkVideoEncodeAV1QuantizationMapCapabilitiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeAV1QuantizationMapCapabilitiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); - FieldToJson(jdata["pPresentModes"], meta_struct.pPresentModes, options); + FieldToJson(jdata["minQIndexDelta"], decoded_value.minQIndexDelta, options); + FieldToJson(jdata["maxQIndexDelta"], decoded_value.maxQIndexDelta, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainPresentScalingCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoFormatAV1QuantizationMapPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSwapchainPresentScalingCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkSwapchainPresentScalingCreateInfoKHR& meta_struct = *data; + const VkVideoFormatAV1QuantizationMapPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkVideoFormatAV1QuantizationMapPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPresentScalingFlagsKHR_t(),jdata["scalingBehavior"], decoded_value.scalingBehavior, options); - FieldToJson(VkPresentGravityFlagsKHR_t(),jdata["presentGravityX"], decoded_value.presentGravityX, options); - FieldToJson(VkPresentGravityFlagsKHR_t(),jdata["presentGravityY"], decoded_value.presentGravityY, options); + FieldToJson(VkVideoEncodeAV1SuperblockSizeFlagsKHR_t(),jdata["compatibleSuperblockSizes"], decoded_value.compatibleSuperblockSizes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkReleaseSwapchainImagesInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkReleaseSwapchainImagesInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkReleaseSwapchainImagesInfoKHR& meta_struct = *data; + const VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["swapchain"], meta_struct.swapchain, options); - FieldToJson(jdata["imageIndexCount"], decoded_value.imageIndexCount, options); - FieldToJson(jdata["pImageIndices"], meta_struct.pImageIndices, options); + jdata["shaderRelaxedExtendedInstruction"] = static_cast(decoded_value.shaderRelaxedExtendedInstruction); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCooperativeMatrixPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance7FeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCooperativeMatrixPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkCooperativeMatrixPropertiesKHR& meta_struct = *data; + const VkPhysicalDeviceMaintenance7FeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMaintenance7FeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["MSize"], decoded_value.MSize, options); - FieldToJson(jdata["NSize"], decoded_value.NSize, options); - FieldToJson(jdata["KSize"], decoded_value.KSize, options); - FieldToJson(jdata["AType"], decoded_value.AType, options); - FieldToJson(jdata["BType"], decoded_value.BType, options); - FieldToJson(jdata["CType"], decoded_value.CType, options); - FieldToJson(jdata["ResultType"], decoded_value.ResultType, options); - jdata["saturatingAccumulation"] = static_cast(decoded_value.saturatingAccumulation); - FieldToJson(jdata["scope"], decoded_value.scope, options); + jdata["maintenance7"] = static_cast(decoded_value.maintenance7); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance7PropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceCooperativeMatrixFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesKHR& meta_struct = *data; + const VkPhysicalDeviceMaintenance7PropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMaintenance7PropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["cooperativeMatrix"] = static_cast(decoded_value.cooperativeMatrix); - jdata["cooperativeMatrixRobustBufferAccess"] = static_cast(decoded_value.cooperativeMatrixRobustBufferAccess); + jdata["robustFragmentShadingRateAttachmentAccess"] = static_cast(decoded_value.robustFragmentShadingRateAttachmentAccess); + jdata["separateDepthStencilAttachmentAccess"] = static_cast(decoded_value.separateDepthStencilAttachmentAccess); + FieldToJson(jdata["maxDescriptorSetTotalUniformBuffersDynamic"], decoded_value.maxDescriptorSetTotalUniformBuffersDynamic, options); + FieldToJson(jdata["maxDescriptorSetTotalStorageBuffersDynamic"], decoded_value.maxDescriptorSetTotalStorageBuffersDynamic, options); + FieldToJson(jdata["maxDescriptorSetTotalBuffersDynamic"], decoded_value.maxDescriptorSetTotalBuffersDynamic, options); + FieldToJson(jdata["maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic"], decoded_value.maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic, options); + FieldToJson(jdata["maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic"], decoded_value.maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic, options); + FieldToJson(jdata["maxDescriptorSetUpdateAfterBindTotalBuffersDynamic"], decoded_value.maxDescriptorSetUpdateAfterBindTotalBuffersDynamic, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLayeredApiPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceCooperativeMatrixPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesKHR& meta_struct = *data; + const VkPhysicalDeviceLayeredApiPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceLayeredApiPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkShaderStageFlags_t(),jdata["cooperativeMatrixSupportedStages"], decoded_value.cooperativeMatrixSupportedStages, options); + FieldToJson(jdata["vendorID"], decoded_value.vendorID, options); + FieldToJson(jdata["deviceID"], decoded_value.deviceID, options); + FieldToJson(jdata["layeredAPI"], decoded_value.layeredAPI, options); + FieldToJson(jdata["deviceName"], &meta_struct.deviceName, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLayeredApiPropertiesListKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR& meta_struct = *data; + const VkPhysicalDeviceLayeredApiPropertiesListKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceLayeredApiPropertiesListKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["computeDerivativeGroupQuads"] = static_cast(decoded_value.computeDerivativeGroupQuads); - jdata["computeDerivativeGroupLinear"] = static_cast(decoded_value.computeDerivativeGroupLinear); + FieldToJson(jdata["layeredApiCount"], decoded_value.layeredApiCount, options); + FieldToJson(jdata["pLayeredApis"], meta_struct.pLayeredApis, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR& meta_struct = *data; + const VkPhysicalDeviceLayeredApiVulkanPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["meshAndTaskShaderDerivatives"] = static_cast(decoded_value.meshAndTaskShaderDerivatives); + FieldToJson(jdata["properties"], meta_struct.properties, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeAV1ProfileInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryBarrierAccessFlags3KHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeAV1ProfileInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeAV1ProfileInfoKHR& meta_struct = *data; + const VkMemoryBarrierAccessFlags3KHR& decoded_value = *data->decoded_value; + const Decoded_VkMemoryBarrierAccessFlags3KHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stdProfile"], decoded_value.stdProfile, options); - jdata["filmGrainSupport"] = static_cast(decoded_value.filmGrainSupport); + FieldToJson(VkAccessFlags3KHR_t(),jdata["srcAccessMask3"], decoded_value.srcAccessMask3, options); + FieldToJson(VkAccessFlags3KHR_t(),jdata["dstAccessMask3"], decoded_value.dstAccessMask3, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeAV1CapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeAV1CapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeAV1CapabilitiesKHR& meta_struct = *data; + const VkPhysicalDeviceMaintenance8FeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxLevel"], decoded_value.maxLevel, options); + jdata["maintenance8"] = static_cast(decoded_value.maintenance8); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeAV1SessionParametersCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderFmaFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeAV1SessionParametersCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeAV1SessionParametersCreateInfoKHR& meta_struct = *data; + const VkPhysicalDeviceShaderFmaFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderFmaFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdSequenceHeader"], meta_struct.pStdSequenceHeader, options); + jdata["shaderFmaFloat16"] = static_cast(decoded_value.shaderFmaFloat16); + jdata["shaderFmaFloat32"] = static_cast(decoded_value.shaderFmaFloat32); + jdata["shaderFmaFloat64"] = static_cast(decoded_value.shaderFmaFloat64); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeAV1PictureInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance9FeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeAV1PictureInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeAV1PictureInfoKHR& meta_struct = *data; + const VkPhysicalDeviceMaintenance9FeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMaintenance9FeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdPictureInfo"], meta_struct.pStdPictureInfo, options); - FieldToJson(jdata["referenceNameSlotIndices"], &meta_struct.referenceNameSlotIndices, options); - FieldToJson(jdata["frameHeaderOffset"], decoded_value.frameHeaderOffset, options); - FieldToJson(jdata["tileCount"], decoded_value.tileCount, options); - FieldToJson(jdata["pTileOffsets"], meta_struct.pTileOffsets, options); - FieldToJson(jdata["pTileSizes"], meta_struct.pTileSizes, options); + jdata["maintenance9"] = static_cast(decoded_value.maintenance9); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeAV1DpbSlotInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance9PropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeAV1DpbSlotInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeAV1DpbSlotInfoKHR& meta_struct = *data; + const VkPhysicalDeviceMaintenance9PropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMaintenance9PropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdReferenceInfo"], meta_struct.pStdReferenceInfo, options); + jdata["image2DViewOf3DSparse"] = static_cast(decoded_value.image2DViewOf3DSparse); + FieldToJson(jdata["defaultVertexAttributeValue"], decoded_value.defaultVertexAttributeValue, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoEncodeAV1FeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyOwnershipTransferPropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVideoEncodeAV1FeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVideoEncodeAV1FeaturesKHR& meta_struct = *data; + const VkQueueFamilyOwnershipTransferPropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkQueueFamilyOwnershipTransferPropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["videoEncodeAV1"] = static_cast(decoded_value.videoEncodeAV1); + FieldToJson(jdata["optimalImageTransferToQueueFamilies"], decoded_value.optimalImageTransferToQueueFamilies, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1CapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeAV1CapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeAV1CapabilitiesKHR& meta_struct = *data; + const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeAV1CapabilityFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["maxLevel"], decoded_value.maxLevel, options); - FieldToJson(jdata["codedPictureAlignment"], meta_struct.codedPictureAlignment, options); - FieldToJson(jdata["maxTiles"], meta_struct.maxTiles, options); - FieldToJson(jdata["minTileSize"], meta_struct.minTileSize, options); - FieldToJson(jdata["maxTileSize"], meta_struct.maxTileSize, options); - FieldToJson(VkVideoEncodeAV1SuperblockSizeFlagsKHR_t(),jdata["superblockSizes"], decoded_value.superblockSizes, options); - FieldToJson(jdata["maxSingleReferenceCount"], decoded_value.maxSingleReferenceCount, options); - FieldToJson(jdata["singleReferenceNameMask"], decoded_value.singleReferenceNameMask, options); - FieldToJson(jdata["maxUnidirectionalCompoundReferenceCount"], decoded_value.maxUnidirectionalCompoundReferenceCount, options); - FieldToJson(jdata["maxUnidirectionalCompoundGroup1ReferenceCount"], decoded_value.maxUnidirectionalCompoundGroup1ReferenceCount, options); - FieldToJson(jdata["unidirectionalCompoundReferenceNameMask"], decoded_value.unidirectionalCompoundReferenceNameMask, options); - FieldToJson(jdata["maxBidirectionalCompoundReferenceCount"], decoded_value.maxBidirectionalCompoundReferenceCount, options); - FieldToJson(jdata["maxBidirectionalCompoundGroup1ReferenceCount"], decoded_value.maxBidirectionalCompoundGroup1ReferenceCount, options); - FieldToJson(jdata["maxBidirectionalCompoundGroup2ReferenceCount"], decoded_value.maxBidirectionalCompoundGroup2ReferenceCount, options); - FieldToJson(jdata["bidirectionalCompoundReferenceNameMask"], decoded_value.bidirectionalCompoundReferenceNameMask, options); - FieldToJson(jdata["maxTemporalLayerCount"], decoded_value.maxTemporalLayerCount, options); - FieldToJson(jdata["maxSpatialLayerCount"], decoded_value.maxSpatialLayerCount, options); - FieldToJson(jdata["maxOperatingPoints"], decoded_value.maxOperatingPoints, options); - FieldToJson(jdata["minQIndex"], decoded_value.minQIndex, options); - FieldToJson(jdata["maxQIndex"], decoded_value.maxQIndex, options); - jdata["prefersGopRemainingFrames"] = static_cast(decoded_value.prefersGopRemainingFrames); - jdata["requiresGopRemainingFrames"] = static_cast(decoded_value.requiresGopRemainingFrames); - FieldToJson(VkVideoEncodeAV1StdFlagsKHR_t(),jdata["stdSyntaxFlags"], decoded_value.stdSyntaxFlags, options); + jdata["depthClampZeroOne"] = static_cast(decoded_value.depthClampZeroOne); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1QIndexKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRobustness2FeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeAV1QIndexKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeAV1QIndexKHR& meta_struct = *data; + const VkPhysicalDeviceRobustness2FeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRobustness2FeaturesKHR& meta_struct = *data; - FieldToJson(jdata["intraQIndex"], decoded_value.intraQIndex, options); - FieldToJson(jdata["predictiveQIndex"], decoded_value.predictiveQIndex, options); - FieldToJson(jdata["bipredictiveQIndex"], decoded_value.bipredictiveQIndex, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["robustBufferAccess2"] = static_cast(decoded_value.robustBufferAccess2); + jdata["robustImageAccess2"] = static_cast(decoded_value.robustImageAccess2); + jdata["nullDescriptor"] = static_cast(decoded_value.nullDescriptor); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1QualityLevelPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRobustness2PropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeAV1QualityLevelPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeAV1QualityLevelPropertiesKHR& meta_struct = *data; + const VkPhysicalDeviceRobustness2PropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRobustness2PropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeAV1RateControlFlagsKHR_t(),jdata["preferredRateControlFlags"], decoded_value.preferredRateControlFlags, options); - FieldToJson(jdata["preferredGopFrameCount"], decoded_value.preferredGopFrameCount, options); - FieldToJson(jdata["preferredKeyFramePeriod"], decoded_value.preferredKeyFramePeriod, options); - FieldToJson(jdata["preferredConsecutiveBipredictiveFrameCount"], decoded_value.preferredConsecutiveBipredictiveFrameCount, options); - FieldToJson(jdata["preferredTemporalLayerCount"], decoded_value.preferredTemporalLayerCount, options); - FieldToJson(jdata["preferredConstantQIndex"], meta_struct.preferredConstantQIndex, options); - FieldToJson(jdata["preferredMaxSingleReferenceCount"], decoded_value.preferredMaxSingleReferenceCount, options); - FieldToJson(jdata["preferredSingleReferenceNameMask"], decoded_value.preferredSingleReferenceNameMask, options); - FieldToJson(jdata["preferredMaxUnidirectionalCompoundReferenceCount"], decoded_value.preferredMaxUnidirectionalCompoundReferenceCount, options); - FieldToJson(jdata["preferredMaxUnidirectionalCompoundGroup1ReferenceCount"], decoded_value.preferredMaxUnidirectionalCompoundGroup1ReferenceCount, options); - FieldToJson(jdata["preferredUnidirectionalCompoundReferenceNameMask"], decoded_value.preferredUnidirectionalCompoundReferenceNameMask, options); - FieldToJson(jdata["preferredMaxBidirectionalCompoundReferenceCount"], decoded_value.preferredMaxBidirectionalCompoundReferenceCount, options); - FieldToJson(jdata["preferredMaxBidirectionalCompoundGroup1ReferenceCount"], decoded_value.preferredMaxBidirectionalCompoundGroup1ReferenceCount, options); - FieldToJson(jdata["preferredMaxBidirectionalCompoundGroup2ReferenceCount"], decoded_value.preferredMaxBidirectionalCompoundGroup2ReferenceCount, options); - FieldToJson(jdata["preferredBidirectionalCompoundReferenceNameMask"], decoded_value.preferredBidirectionalCompoundReferenceNameMask, options); + FieldToJson(jdata["robustStorageBufferAccessSizeAlignment"], decoded_value.robustStorageBufferAccessSizeAlignment, options); + FieldToJson(jdata["robustUniformBufferAccessSizeAlignment"], decoded_value.robustUniformBufferAccessSizeAlignment, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1SessionCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeAV1SessionCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeAV1SessionCreateInfoKHR& meta_struct = *data; + const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["useMaxLevel"] = static_cast(decoded_value.useMaxLevel); - FieldToJson(jdata["maxLevel"], decoded_value.maxLevel, options); + jdata["presentModeFifoLatestReady"] = static_cast(decoded_value.presentModeFifoLatestReady); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1SessionParametersCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance10FeaturesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeAV1SessionParametersCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeAV1SessionParametersCreateInfoKHR& meta_struct = *data; + const VkPhysicalDeviceMaintenance10FeaturesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMaintenance10FeaturesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdSequenceHeader"], meta_struct.pStdSequenceHeader, options); - FieldToJson(jdata["pStdDecoderModelInfo"], meta_struct.pStdDecoderModelInfo, options); - FieldToJson(jdata["stdOperatingPointCount"], decoded_value.stdOperatingPointCount, options); - FieldToJson(jdata["pStdOperatingPoints"], meta_struct.pStdOperatingPoints, options); + jdata["maintenance10"] = static_cast(decoded_value.maintenance10); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1PictureInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance10PropertiesKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeAV1PictureInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeAV1PictureInfoKHR& meta_struct = *data; + const VkPhysicalDeviceMaintenance10PropertiesKHR& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMaintenance10PropertiesKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["predictionMode"], decoded_value.predictionMode, options); - FieldToJson(jdata["rateControlGroup"], decoded_value.rateControlGroup, options); - FieldToJson(jdata["constantQIndex"], decoded_value.constantQIndex, options); - FieldToJson(jdata["pStdPictureInfo"], meta_struct.pStdPictureInfo, options); - FieldToJson(jdata["referenceNameSlotIndices"], &meta_struct.referenceNameSlotIndices, options); - jdata["primaryReferenceCdfOnly"] = static_cast(decoded_value.primaryReferenceCdfOnly); - jdata["generateObuExtensionHeader"] = static_cast(decoded_value.generateObuExtensionHeader); + jdata["rgba4OpaqueBlackSwizzled"] = static_cast(decoded_value.rgba4OpaqueBlackSwizzled); + jdata["resolveSrgbFormatAppliesTransferFunction"] = static_cast(decoded_value.resolveSrgbFormatAppliesTransferFunction); + jdata["resolveSrgbFormatSupportsTransferFunctionControl"] = static_cast(decoded_value.resolveSrgbFormatSupportsTransferFunctionControl); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1DpbSlotInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingEndInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeAV1DpbSlotInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeAV1DpbSlotInfoKHR& meta_struct = *data; + const VkRenderingEndInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkRenderingEndInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdReferenceInfo"], meta_struct.pStdReferenceInfo, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1ProfileInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingAttachmentFlagsInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeAV1ProfileInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeAV1ProfileInfoKHR& meta_struct = *data; + const VkRenderingAttachmentFlagsInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkRenderingAttachmentFlagsInfoKHR& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stdProfile"], decoded_value.stdProfile, options); + FieldToJson(VkRenderingAttachmentFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1FrameSizeKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkResolveImageModeInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeAV1FrameSizeKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeAV1FrameSizeKHR& meta_struct = *data; + const VkResolveImageModeInfoKHR& decoded_value = *data->decoded_value; + const Decoded_VkResolveImageModeInfoKHR& meta_struct = *data; - FieldToJson(jdata["intraFrameSize"], decoded_value.intraFrameSize, options); - FieldToJson(jdata["predictiveFrameSize"], decoded_value.predictiveFrameSize, options); - FieldToJson(jdata["bipredictiveFrameSize"], decoded_value.bipredictiveFrameSize, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkResolveImageFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["resolveMode"], decoded_value.resolveMode, options); + FieldToJson(jdata["stencilResolveMode"], decoded_value.stencilResolveMode, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1GopRemainingFrameInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugReportCallbackCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeAV1GopRemainingFrameInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeAV1GopRemainingFrameInfoKHR& meta_struct = *data; + const VkDebugReportCallbackCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDebugReportCallbackCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["useGopRemainingFrames"] = static_cast(decoded_value.useGopRemainingFrames); - FieldToJson(jdata["gopRemainingIntra"], decoded_value.gopRemainingIntra, options); - FieldToJson(jdata["gopRemainingPredictive"], decoded_value.gopRemainingPredictive, options); - FieldToJson(jdata["gopRemainingBipredictive"], decoded_value.gopRemainingBipredictive, options); + FieldToJson(VkDebugReportFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["pfnCallback"], to_hex_variable_width(meta_struct.pfnCallback), options); + FieldToJson(jdata["pUserData"], to_hex_variable_width(meta_struct.pUserData), options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1RateControlInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationStateRasterizationOrderAMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeAV1RateControlInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeAV1RateControlInfoKHR& meta_struct = *data; + const VkPipelineRasterizationStateRasterizationOrderAMD& decoded_value = *data->decoded_value; + const Decoded_VkPipelineRasterizationStateRasterizationOrderAMD& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeAV1RateControlFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["gopFrameCount"], decoded_value.gopFrameCount, options); - FieldToJson(jdata["keyFramePeriod"], decoded_value.keyFramePeriod, options); - FieldToJson(jdata["consecutiveBipredictiveFrameCount"], decoded_value.consecutiveBipredictiveFrameCount, options); - FieldToJson(jdata["temporalLayerCount"], decoded_value.temporalLayerCount, options); + FieldToJson(jdata["rasterizationOrder"], decoded_value.rasterizationOrder, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1RateControlLayerInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugMarkerObjectNameInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeAV1RateControlLayerInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeAV1RateControlLayerInfoKHR& meta_struct = *data; + const VkDebugMarkerObjectNameInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDebugMarkerObjectNameInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["useMinQIndex"] = static_cast(decoded_value.useMinQIndex); - FieldToJson(jdata["minQIndex"], meta_struct.minQIndex, options); - jdata["useMaxQIndex"] = static_cast(decoded_value.useMaxQIndex); - FieldToJson(jdata["maxQIndex"], meta_struct.maxQIndex, options); - jdata["useMaxFrameSize"] = static_cast(decoded_value.useMaxFrameSize); - FieldToJson(jdata["maxFrameSize"], meta_struct.maxFrameSize, options); + FieldToJson(jdata["objectType"], decoded_value.objectType, options); + FieldToJson(jdata["object"], decoded_value.object, options); + FieldToJson(jdata["pObjectName"], &meta_struct.pObjectName, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoDecodeVP9FeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugMarkerObjectTagInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVideoDecodeVP9FeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVideoDecodeVP9FeaturesKHR& meta_struct = *data; + const VkDebugMarkerObjectTagInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDebugMarkerObjectTagInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["videoDecodeVP9"] = static_cast(decoded_value.videoDecodeVP9); + FieldToJson(jdata["objectType"], decoded_value.objectType, options); + FieldToJson(jdata["object"], decoded_value.object, options); + FieldToJson(jdata["tagName"], decoded_value.tagName, options); + FieldToJson(jdata["tagSize"], decoded_value.tagSize, options); + FieldToJson(jdata["pTag"], meta_struct.pTag, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeVP9ProfileInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugMarkerMarkerInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeVP9ProfileInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeVP9ProfileInfoKHR& meta_struct = *data; + const VkDebugMarkerMarkerInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDebugMarkerMarkerInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stdProfile"], decoded_value.stdProfile, options); + FieldToJson(jdata["pMarkerName"], &meta_struct.pMarkerName, options); + FieldToJson(jdata["color"], &meta_struct.color, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeVP9CapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDedicatedAllocationImageCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeVP9CapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeVP9CapabilitiesKHR& meta_struct = *data; + const VkDedicatedAllocationImageCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkDedicatedAllocationImageCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxLevel"], decoded_value.maxLevel, options); + jdata["dedicatedAllocation"] = static_cast(decoded_value.dedicatedAllocation); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeVP9PictureInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDedicatedAllocationBufferCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeVP9PictureInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeVP9PictureInfoKHR& meta_struct = *data; + const VkDedicatedAllocationBufferCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkDedicatedAllocationBufferCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdPictureInfo"], meta_struct.pStdPictureInfo, options); - FieldToJson(jdata["referenceNameSlotIndices"], &meta_struct.referenceNameSlotIndices, options); - FieldToJson(jdata["uncompressedHeaderOffset"], decoded_value.uncompressedHeaderOffset, options); - FieldToJson(jdata["compressedHeaderOffset"], decoded_value.compressedHeaderOffset, options); - FieldToJson(jdata["tilesOffset"], decoded_value.tilesOffset, options); + jdata["dedicatedAllocation"] = static_cast(decoded_value.dedicatedAllocation); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoMaintenance1FeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDedicatedAllocationMemoryAllocateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVideoMaintenance1FeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVideoMaintenance1FeaturesKHR& meta_struct = *data; + const VkDedicatedAllocationMemoryAllocateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkDedicatedAllocationMemoryAllocateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["videoMaintenance1"] = static_cast(decoded_value.videoMaintenance1); + HandleToJson(jdata["image"], meta_struct.image, options); + HandleToJson(jdata["buffer"], meta_struct.buffer, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoInlineQueryInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTransformFeedbackFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoInlineQueryInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoInlineQueryInfoKHR& meta_struct = *data; + const VkPhysicalDeviceTransformFeedbackFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceTransformFeedbackFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["queryPool"], meta_struct.queryPool, options); - FieldToJson(jdata["firstQuery"], decoded_value.firstQuery, options); - FieldToJson(jdata["queryCount"], decoded_value.queryCount, options); + jdata["transformFeedback"] = static_cast(decoded_value.transformFeedback); + jdata["geometryStreams"] = static_cast(decoded_value.geometryStreams); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTransformFeedbackPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR& meta_struct = *data; + const VkPhysicalDeviceTransformFeedbackPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceTransformFeedbackPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["unifiedImageLayouts"] = static_cast(decoded_value.unifiedImageLayouts); - jdata["unifiedImageLayoutsVideo"] = static_cast(decoded_value.unifiedImageLayoutsVideo); + FieldToJson(jdata["maxTransformFeedbackStreams"], decoded_value.maxTransformFeedbackStreams, options); + FieldToJson(jdata["maxTransformFeedbackBuffers"], decoded_value.maxTransformFeedbackBuffers, options); + FieldToJson(jdata["maxTransformFeedbackBufferSize"], decoded_value.maxTransformFeedbackBufferSize, options); + FieldToJson(jdata["maxTransformFeedbackStreamDataSize"], decoded_value.maxTransformFeedbackStreamDataSize, options); + FieldToJson(jdata["maxTransformFeedbackBufferDataSize"], decoded_value.maxTransformFeedbackBufferDataSize, options); + FieldToJson(jdata["maxTransformFeedbackBufferDataStride"], decoded_value.maxTransformFeedbackBufferDataStride, options); + jdata["transformFeedbackQueries"] = static_cast(decoded_value.transformFeedbackQueries); + jdata["transformFeedbackStreamsLinesTriangles"] = static_cast(decoded_value.transformFeedbackStreamsLinesTriangles); + jdata["transformFeedbackRasterizationStreamSelect"] = static_cast(decoded_value.transformFeedbackRasterizationStreamSelect); + jdata["transformFeedbackDraw"] = static_cast(decoded_value.transformFeedbackDraw); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentFeedbackLoopInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationStateStreamCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAttachmentFeedbackLoopInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkAttachmentFeedbackLoopInfoEXT& meta_struct = *data; + const VkPipelineRasterizationStateStreamCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPipelineRasterizationStateStreamCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["feedbackLoopEnable"] = static_cast(decoded_value.feedbackLoopEnable); + FieldToJson(VkPipelineRasterizationStateStreamCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["rasterizationStream"], decoded_value.rasterizationStream, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCalibratedTimestampInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewHandleInfoNVX* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCalibratedTimestampInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkCalibratedTimestampInfoKHR& meta_struct = *data; + const VkImageViewHandleInfoNVX& decoded_value = *data->decoded_value; + const Decoded_VkImageViewHandleInfoNVX& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["timeDomain"], decoded_value.timeDomain, options); + HandleToJson(jdata["imageView"], meta_struct.imageView, options); + FieldToJson(jdata["descriptorType"], decoded_value.descriptorType, options); + HandleToJson(jdata["sampler"], meta_struct.sampler, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSetDescriptorBufferOffsetsInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewAddressPropertiesNVX* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSetDescriptorBufferOffsetsInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkSetDescriptorBufferOffsetsInfoEXT& meta_struct = *data; + const VkImageViewAddressPropertiesNVX& decoded_value = *data->decoded_value; + const Decoded_VkImageViewAddressPropertiesNVX& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkShaderStageFlags_t(),jdata["stageFlags"], decoded_value.stageFlags, options); - HandleToJson(jdata["layout"], meta_struct.layout, options); - FieldToJson(jdata["firstSet"], decoded_value.firstSet, options); - FieldToJson(jdata["setCount"], decoded_value.setCount, options); - FieldToJson(jdata["pBufferIndices"], meta_struct.pBufferIndices, options); - FieldToJson(jdata["pOffsets"], meta_struct.pOffsets, options); + FieldToJson(jdata["deviceAddress"], to_hex_variable_width(decoded_value.deviceAddress), options); + FieldToJson(jdata["size"], decoded_value.size, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTextureLODGatherFormatPropertiesAMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindDescriptorBufferEmbeddedSamplersInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT& meta_struct = *data; + const VkTextureLODGatherFormatPropertiesAMD& decoded_value = *data->decoded_value; + const Decoded_VkTextureLODGatherFormatPropertiesAMD& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkShaderStageFlags_t(),jdata["stageFlags"], decoded_value.stageFlags, options); - HandleToJson(jdata["layout"], meta_struct.layout, options); - FieldToJson(jdata["set"], decoded_value.set, options); + jdata["supportsTextureGatherLODBiasAMD"] = static_cast(decoded_value.supportsTextureGatherLODBiasAMD); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeIntraRefreshCapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkShaderResourceUsageAMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeIntraRefreshCapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeIntraRefreshCapabilitiesKHR& meta_struct = *data; + const VkShaderResourceUsageAMD& decoded_value = *data->decoded_value; + const Decoded_VkShaderResourceUsageAMD& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeIntraRefreshModeFlagsKHR_t(),jdata["intraRefreshModes"], decoded_value.intraRefreshModes, options); - FieldToJson(jdata["maxIntraRefreshCycleDuration"], decoded_value.maxIntraRefreshCycleDuration, options); - FieldToJson(jdata["maxIntraRefreshActiveReferencePictures"], decoded_value.maxIntraRefreshActiveReferencePictures, options); - jdata["partitionIndependentIntraRefreshRegions"] = static_cast(decoded_value.partitionIndependentIntraRefreshRegions); - jdata["nonRectangularIntraRefreshRegions"] = static_cast(decoded_value.nonRectangularIntraRefreshRegions); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["numUsedVgprs"], decoded_value.numUsedVgprs, options); + FieldToJson(jdata["numUsedSgprs"], decoded_value.numUsedSgprs, options); + FieldToJson(jdata["ldsSizePerLocalWorkGroup"], decoded_value.ldsSizePerLocalWorkGroup, options); + FieldToJson(jdata["ldsUsageSizeInBytes"], decoded_value.ldsUsageSizeInBytes, options); + FieldToJson(jdata["scratchMemUsageInBytes"], decoded_value.scratchMemUsageInBytes, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeSessionIntraRefreshCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkShaderStatisticsInfoAMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeSessionIntraRefreshCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeSessionIntraRefreshCreateInfoKHR& meta_struct = *data; + const VkShaderStatisticsInfoAMD& decoded_value = *data->decoded_value; + const Decoded_VkShaderStatisticsInfoAMD& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["intraRefreshMode"], decoded_value.intraRefreshMode, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(VkShaderStageFlags_t(),jdata["shaderStageMask"], decoded_value.shaderStageMask, options); + FieldToJson(jdata["resourceUsage"], meta_struct.resourceUsage, options); + FieldToJson(jdata["numPhysicalVgprs"], decoded_value.numPhysicalVgprs, options); + FieldToJson(jdata["numPhysicalSgprs"], decoded_value.numPhysicalSgprs, options); + FieldToJson(jdata["numAvailableVgprs"], decoded_value.numAvailableVgprs, options); + FieldToJson(jdata["numAvailableSgprs"], decoded_value.numAvailableSgprs, options); + FieldToJson(jdata["computeWorkGroupSize"], &meta_struct.computeWorkGroupSize, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeIntraRefreshInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkStreamDescriptorSurfaceCreateInfoGGP* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeIntraRefreshInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeIntraRefreshInfoKHR& meta_struct = *data; + const VkStreamDescriptorSurfaceCreateInfoGGP& decoded_value = *data->decoded_value; + const Decoded_VkStreamDescriptorSurfaceCreateInfoGGP& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["intraRefreshCycleDuration"], decoded_value.intraRefreshCycleDuration, options); - FieldToJson(jdata["intraRefreshIndex"], decoded_value.intraRefreshIndex, options); + FieldToJson(VkStreamDescriptorSurfaceCreateFlagsGGP_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["streamDescriptor"], decoded_value.streamDescriptor, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoReferenceIntraRefreshInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCornerSampledImageFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoReferenceIntraRefreshInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoReferenceIntraRefreshInfoKHR& meta_struct = *data; + const VkPhysicalDeviceCornerSampledImageFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceCornerSampledImageFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["dirtyIntraRefreshRegions"], decoded_value.dirtyIntraRefreshRegions, options); + jdata["cornerSampledImage"] = static_cast(decoded_value.cornerSampledImage); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalImageFormatPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR& meta_struct = *data; + const VkExternalImageFormatPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkExternalImageFormatPropertiesNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["videoEncodeIntraRefresh"] = static_cast(decoded_value.videoEncodeIntraRefresh); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["imageFormatProperties"], meta_struct.imageFormatProperties, options); + FieldToJson(VkExternalMemoryFeatureFlagsNV_t(),jdata["externalMemoryFeatures"], decoded_value.externalMemoryFeatures, options); + FieldToJson(VkExternalMemoryHandleTypeFlagsNV_t(),jdata["exportFromImportedHandleTypes"], decoded_value.exportFromImportedHandleTypes, options); + FieldToJson(VkExternalMemoryHandleTypeFlagsNV_t(),jdata["compatibleHandleTypes"], decoded_value.compatibleHandleTypes, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeQuantizationMapCapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalMemoryImageCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeQuantizationMapCapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeQuantizationMapCapabilitiesKHR& meta_struct = *data; + const VkExternalMemoryImageCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkExternalMemoryImageCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxQuantizationMapExtent"], meta_struct.maxQuantizationMapExtent, options); + FieldToJson(VkExternalMemoryHandleTypeFlagsNV_t(),jdata["handleTypes"], decoded_value.handleTypes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoFormatQuantizationMapPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportMemoryAllocateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoFormatQuantizationMapPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoFormatQuantizationMapPropertiesKHR& meta_struct = *data; + const VkExportMemoryAllocateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkExportMemoryAllocateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["quantizationMapTexelSize"], meta_struct.quantizationMapTexelSize, options); + FieldToJson(VkExternalMemoryHandleTypeFlagsNV_t(),jdata["handleTypes"], decoded_value.handleTypes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeQuantizationMapInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportMemoryWin32HandleInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeQuantizationMapInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeQuantizationMapInfoKHR& meta_struct = *data; + const VkImportMemoryWin32HandleInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkImportMemoryWin32HandleInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["quantizationMap"], meta_struct.quantizationMap, options); - FieldToJson(jdata["quantizationMapExtent"], meta_struct.quantizationMapExtent, options); + FieldToJson(VkExternalMemoryHandleTypeFlagsNV_t(),jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["handle"], meta_struct.handle, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportMemoryWin32HandleInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR& meta_struct = *data; + const VkExportMemoryWin32HandleInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkExportMemoryWin32HandleInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["quantizationMapTexelSize"], meta_struct.quantizationMapTexelSize, options); + FieldToJson(jdata["pAttributes"], meta_struct.pAttributes, options); + FieldToJson(jdata["dwAccess"], decoded_value.dwAccess, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWin32KeyedMutexAcquireReleaseInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR& meta_struct = *data; + const VkWin32KeyedMutexAcquireReleaseInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkWin32KeyedMutexAcquireReleaseInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["videoEncodeQuantizationMap"] = static_cast(decoded_value.videoEncodeQuantizationMap); + FieldToJson(jdata["acquireCount"], decoded_value.acquireCount, options); + HandleToJson(jdata["pAcquireSyncs"], &meta_struct.pAcquireSyncs, options); + FieldToJson(jdata["pAcquireKeys"], meta_struct.pAcquireKeys, options); + FieldToJson(jdata["pAcquireTimeoutMilliseconds"], meta_struct.pAcquireTimeoutMilliseconds, options); + FieldToJson(jdata["releaseCount"], decoded_value.releaseCount, options); + HandleToJson(jdata["pReleaseSyncs"], &meta_struct.pReleaseSyncs, options); + FieldToJson(jdata["pReleaseKeys"], meta_struct.pReleaseKeys, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264QuantizationMapCapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkValidationFlagsEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH264QuantizationMapCapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH264QuantizationMapCapabilitiesKHR& meta_struct = *data; + const VkValidationFlagsEXT& decoded_value = *data->decoded_value; + const Decoded_VkValidationFlagsEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["minQpDelta"], decoded_value.minQpDelta, options); - FieldToJson(jdata["maxQpDelta"], decoded_value.maxQpDelta, options); + FieldToJson(jdata["disabledValidationCheckCount"], decoded_value.disabledValidationCheckCount, options); + FieldToJson(jdata["pDisabledValidationChecks"], meta_struct.pDisabledValidationChecks, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265QuantizationMapCapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkViSurfaceCreateInfoNN* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeH265QuantizationMapCapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeH265QuantizationMapCapabilitiesKHR& meta_struct = *data; + const VkViSurfaceCreateInfoNN& decoded_value = *data->decoded_value; + const Decoded_VkViSurfaceCreateInfoNN& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["minQpDelta"], decoded_value.minQpDelta, options); - FieldToJson(jdata["maxQpDelta"], decoded_value.maxQpDelta, options); + FieldToJson(VkViSurfaceCreateFlagsNN_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["window"], meta_struct.window, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoFormatH265QuantizationMapPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewASTCDecodeModeEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoFormatH265QuantizationMapPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoFormatH265QuantizationMapPropertiesKHR& meta_struct = *data; + const VkImageViewASTCDecodeModeEXT& decoded_value = *data->decoded_value; + const Decoded_VkImageViewASTCDecodeModeEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeH265CtbSizeFlagsKHR_t(),jdata["compatibleCtbSizes"], decoded_value.compatibleCtbSizes, options); + FieldToJson(jdata["decodeMode"], decoded_value.decodeMode, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeAV1QuantizationMapCapabilitiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceASTCDecodeFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoEncodeAV1QuantizationMapCapabilitiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoEncodeAV1QuantizationMapCapabilitiesKHR& meta_struct = *data; + const VkPhysicalDeviceASTCDecodeFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceASTCDecodeFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["minQIndexDelta"], decoded_value.minQIndexDelta, options); - FieldToJson(jdata["maxQIndexDelta"], decoded_value.maxQIndexDelta, options); + jdata["decodeModeSharedExponent"] = static_cast(decoded_value.decodeModeSharedExponent); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoFormatAV1QuantizationMapPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkConditionalRenderingBeginInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoFormatAV1QuantizationMapPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoFormatAV1QuantizationMapPropertiesKHR& meta_struct = *data; + const VkConditionalRenderingBeginInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkConditionalRenderingBeginInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkVideoEncodeAV1SuperblockSizeFlagsKHR_t(),jdata["compatibleSuperblockSizes"], decoded_value.compatibleSuperblockSizes, options); + HandleToJson(jdata["buffer"], meta_struct.buffer, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(VkConditionalRenderingFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceConditionalRenderingFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR& meta_struct = *data; + const VkPhysicalDeviceConditionalRenderingFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceConditionalRenderingFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderRelaxedExtendedInstruction"] = static_cast(decoded_value.shaderRelaxedExtendedInstruction); + jdata["conditionalRendering"] = static_cast(decoded_value.conditionalRendering); + jdata["inheritedConditionalRendering"] = static_cast(decoded_value.inheritedConditionalRendering); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance7FeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferInheritanceConditionalRenderingInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMaintenance7FeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMaintenance7FeaturesKHR& meta_struct = *data; + const VkCommandBufferInheritanceConditionalRenderingInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkCommandBufferInheritanceConditionalRenderingInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["maintenance7"] = static_cast(decoded_value.maintenance7); + jdata["conditionalRenderingEnable"] = static_cast(decoded_value.conditionalRenderingEnable); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance7PropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkViewportWScalingNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMaintenance7PropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMaintenance7PropertiesKHR& meta_struct = *data; + const VkViewportWScalingNV& decoded_value = *data->decoded_value; + const Decoded_VkViewportWScalingNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["robustFragmentShadingRateAttachmentAccess"] = static_cast(decoded_value.robustFragmentShadingRateAttachmentAccess); - jdata["separateDepthStencilAttachmentAccess"] = static_cast(decoded_value.separateDepthStencilAttachmentAccess); - FieldToJson(jdata["maxDescriptorSetTotalUniformBuffersDynamic"], decoded_value.maxDescriptorSetTotalUniformBuffersDynamic, options); - FieldToJson(jdata["maxDescriptorSetTotalStorageBuffersDynamic"], decoded_value.maxDescriptorSetTotalStorageBuffersDynamic, options); - FieldToJson(jdata["maxDescriptorSetTotalBuffersDynamic"], decoded_value.maxDescriptorSetTotalBuffersDynamic, options); - FieldToJson(jdata["maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic"], decoded_value.maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic, options); - FieldToJson(jdata["maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic"], decoded_value.maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic, options); - FieldToJson(jdata["maxDescriptorSetUpdateAfterBindTotalBuffersDynamic"], decoded_value.maxDescriptorSetUpdateAfterBindTotalBuffersDynamic, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["xcoeff"], decoded_value.xcoeff, options); + FieldToJson(jdata["ycoeff"], decoded_value.ycoeff, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLayeredApiPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportWScalingStateCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceLayeredApiPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceLayeredApiPropertiesKHR& meta_struct = *data; + const VkPipelineViewportWScalingStateCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkPipelineViewportWScalingStateCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["vendorID"], decoded_value.vendorID, options); - FieldToJson(jdata["deviceID"], decoded_value.deviceID, options); - FieldToJson(jdata["layeredAPI"], decoded_value.layeredAPI, options); - FieldToJson(jdata["deviceName"], &meta_struct.deviceName, options); + jdata["viewportWScalingEnable"] = static_cast(decoded_value.viewportWScalingEnable); + FieldToJson(jdata["viewportCount"], decoded_value.viewportCount, options); + FieldToJson(jdata["pViewportWScalings"], meta_struct.pViewportWScalings, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLayeredApiPropertiesListKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilities2EXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceLayeredApiPropertiesListKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceLayeredApiPropertiesListKHR& meta_struct = *data; + const VkSurfaceCapabilities2EXT& decoded_value = *data->decoded_value; + const Decoded_VkSurfaceCapabilities2EXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["layeredApiCount"], decoded_value.layeredApiCount, options); - FieldToJson(jdata["pLayeredApis"], meta_struct.pLayeredApis, options); + FieldToJson(jdata["minImageCount"], decoded_value.minImageCount, options); + FieldToJson(jdata["maxImageCount"], decoded_value.maxImageCount, options); + FieldToJson(jdata["currentExtent"], meta_struct.currentExtent, options); + FieldToJson(jdata["minImageExtent"], meta_struct.minImageExtent, options); + FieldToJson(jdata["maxImageExtent"], meta_struct.maxImageExtent, options); + FieldToJson(jdata["maxImageArrayLayers"], decoded_value.maxImageArrayLayers, options); + FieldToJson(VkSurfaceTransformFlagsKHR_t(),jdata["supportedTransforms"], decoded_value.supportedTransforms, options); + FieldToJson(jdata["currentTransform"], decoded_value.currentTransform, options); + FieldToJson(VkCompositeAlphaFlagsKHR_t(),jdata["supportedCompositeAlpha"], decoded_value.supportedCompositeAlpha, options); + FieldToJson(VkImageUsageFlags_t(),jdata["supportedUsageFlags"], decoded_value.supportedUsageFlags, options); + FieldToJson(VkSurfaceCounterFlagsEXT_t(),jdata["supportedSurfaceCounters"], decoded_value.supportedSurfaceCounters, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPowerInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceLayeredApiVulkanPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR& meta_struct = *data; + const VkDisplayPowerInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDisplayPowerInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["properties"], meta_struct.properties, options); + FieldToJson(jdata["powerState"], decoded_value.powerState, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceEventInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMaintenance8FeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR& meta_struct = *data; + const VkDeviceEventInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDeviceEventInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["maintenance8"] = static_cast(decoded_value.maintenance8); + FieldToJson(jdata["deviceEvent"], decoded_value.deviceEvent, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryBarrierAccessFlags3KHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayEventInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryBarrierAccessFlags3KHR& decoded_value = *data->decoded_value; - const Decoded_VkMemoryBarrierAccessFlags3KHR& meta_struct = *data; + const VkDisplayEventInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDisplayEventInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkAccessFlags3KHR_t(),jdata["srcAccessMask3"], decoded_value.srcAccessMask3, options); - FieldToJson(VkAccessFlags3KHR_t(),jdata["dstAccessMask3"], decoded_value.dstAccessMask3, options); + FieldToJson(jdata["displayEvent"], decoded_value.displayEvent, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance9FeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainCounterCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMaintenance9FeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMaintenance9FeaturesKHR& meta_struct = *data; + const VkSwapchainCounterCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkSwapchainCounterCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["maintenance9"] = static_cast(decoded_value.maintenance9); + FieldToJson(VkSurfaceCounterFlagsEXT_t(),jdata["surfaceCounters"], decoded_value.surfaceCounters, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance9PropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRefreshCycleDurationGOOGLE* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMaintenance9PropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMaintenance9PropertiesKHR& meta_struct = *data; + const VkRefreshCycleDurationGOOGLE& decoded_value = *data->decoded_value; + const Decoded_VkRefreshCycleDurationGOOGLE& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["image2DViewOf3DSparse"] = static_cast(decoded_value.image2DViewOf3DSparse); - FieldToJson(jdata["defaultVertexAttributeValue"], decoded_value.defaultVertexAttributeValue, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["refreshDuration"], decoded_value.refreshDuration, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyOwnershipTransferPropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPastPresentationTimingGOOGLE* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkQueueFamilyOwnershipTransferPropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkQueueFamilyOwnershipTransferPropertiesKHR& meta_struct = *data; + const VkPastPresentationTimingGOOGLE& decoded_value = *data->decoded_value; + const Decoded_VkPastPresentationTimingGOOGLE& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["optimalImageTransferToQueueFamilies"], decoded_value.optimalImageTransferToQueueFamilies, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["presentID"], decoded_value.presentID, options); + FieldToJson(jdata["desiredPresentTime"], decoded_value.desiredPresentTime, options); + FieldToJson(jdata["actualPresentTime"], decoded_value.actualPresentTime, options); + FieldToJson(jdata["earliestPresentTime"], decoded_value.earliestPresentTime, options); + FieldToJson(jdata["presentMargin"], decoded_value.presentMargin, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoMaintenance2FeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentTimeGOOGLE* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVideoMaintenance2FeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVideoMaintenance2FeaturesKHR& meta_struct = *data; + const VkPresentTimeGOOGLE& decoded_value = *data->decoded_value; + const Decoded_VkPresentTimeGOOGLE& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["videoMaintenance2"] = static_cast(decoded_value.videoMaintenance2); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["presentID"], decoded_value.presentID, options); + FieldToJson(jdata["desiredPresentTime"], decoded_value.desiredPresentTime, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264InlineSessionParametersInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentTimesInfoGOOGLE* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeH264InlineSessionParametersInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeH264InlineSessionParametersInfoKHR& meta_struct = *data; + const VkPresentTimesInfoGOOGLE& decoded_value = *data->decoded_value; + const Decoded_VkPresentTimesInfoGOOGLE& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdSPS"], meta_struct.pStdSPS, options); - FieldToJson(jdata["pStdPPS"], meta_struct.pStdPPS, options); + FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); + FieldToJson(jdata["pTimes"], meta_struct.pTimes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH265InlineSessionParametersInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeH265InlineSessionParametersInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeH265InlineSessionParametersInfoKHR& meta_struct = *data; + const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdVPS"], meta_struct.pStdVPS, options); - FieldToJson(jdata["pStdSPS"], meta_struct.pStdSPS, options); - FieldToJson(jdata["pStdPPS"], meta_struct.pStdPPS, options); + jdata["perViewPositionAllComponents"] = static_cast(decoded_value.perViewPositionAllComponents); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeAV1InlineSessionParametersInfoKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMultiviewPerViewAttributesInfoNVX* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVideoDecodeAV1InlineSessionParametersInfoKHR& decoded_value = *data->decoded_value; - const Decoded_VkVideoDecodeAV1InlineSessionParametersInfoKHR& meta_struct = *data; + const VkMultiviewPerViewAttributesInfoNVX& decoded_value = *data->decoded_value; + const Decoded_VkMultiviewPerViewAttributesInfoNVX& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pStdSequenceHeader"], meta_struct.pStdSequenceHeader, options); + jdata["perViewAttributes"] = static_cast(decoded_value.perViewAttributes); + jdata["perViewAttributesPositionXOnly"] = static_cast(decoded_value.perViewAttributesPositionXOnly); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkViewportSwizzleNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR& meta_struct = *data; + const VkViewportSwizzleNV& decoded_value = *data->decoded_value; + const Decoded_VkViewportSwizzleNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["depthClampZeroOne"] = static_cast(decoded_value.depthClampZeroOne); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["x"], decoded_value.x, options); + FieldToJson(jdata["y"], decoded_value.y, options); + FieldToJson(jdata["z"], decoded_value.z, options); + FieldToJson(jdata["w"], decoded_value.w, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRobustness2FeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportSwizzleStateCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRobustness2FeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRobustness2FeaturesKHR& meta_struct = *data; + const VkPipelineViewportSwizzleStateCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkPipelineViewportSwizzleStateCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["robustBufferAccess2"] = static_cast(decoded_value.robustBufferAccess2); - jdata["robustImageAccess2"] = static_cast(decoded_value.robustImageAccess2); - jdata["nullDescriptor"] = static_cast(decoded_value.nullDescriptor); + FieldToJson(VkPipelineViewportSwizzleStateCreateFlagsNV_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["viewportCount"], decoded_value.viewportCount, options); + FieldToJson(jdata["pViewportSwizzles"], meta_struct.pViewportSwizzles, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRobustness2PropertiesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDiscardRectanglePropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRobustness2PropertiesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRobustness2PropertiesKHR& meta_struct = *data; + const VkPhysicalDeviceDiscardRectanglePropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDiscardRectanglePropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["robustStorageBufferAccessSizeAlignment"], decoded_value.robustStorageBufferAccessSizeAlignment, options); - FieldToJson(jdata["robustUniformBufferAccessSizeAlignment"], decoded_value.robustUniformBufferAccessSizeAlignment, options); + FieldToJson(jdata["maxDiscardRectangles"], decoded_value.maxDiscardRectangles, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineDiscardRectangleStateCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR& meta_struct = *data; + const VkPipelineDiscardRectangleStateCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPipelineDiscardRectangleStateCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["presentModeFifoLatestReady"] = static_cast(decoded_value.presentModeFifoLatestReady); + FieldToJson(VkPipelineDiscardRectangleStateCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["discardRectangleMode"], decoded_value.discardRectangleMode, options); + FieldToJson(jdata["discardRectangleCount"], decoded_value.discardRectangleCount, options); + FieldToJson(jdata["pDiscardRectangles"], meta_struct.pDiscardRectangles, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugReportCallbackCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceConservativeRasterizationPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDebugReportCallbackCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDebugReportCallbackCreateInfoEXT& meta_struct = *data; + const VkPhysicalDeviceConservativeRasterizationPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceConservativeRasterizationPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDebugReportFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["pfnCallback"], to_hex_variable_width(meta_struct.pfnCallback), options); - FieldToJson(jdata["pUserData"], to_hex_variable_width(meta_struct.pUserData), options); + FieldToJson(jdata["primitiveOverestimationSize"], decoded_value.primitiveOverestimationSize, options); + FieldToJson(jdata["maxExtraPrimitiveOverestimationSize"], decoded_value.maxExtraPrimitiveOverestimationSize, options); + FieldToJson(jdata["extraPrimitiveOverestimationSizeGranularity"], decoded_value.extraPrimitiveOverestimationSizeGranularity, options); + jdata["primitiveUnderestimation"] = static_cast(decoded_value.primitiveUnderestimation); + jdata["conservativePointAndLineRasterization"] = static_cast(decoded_value.conservativePointAndLineRasterization); + jdata["degenerateTrianglesRasterized"] = static_cast(decoded_value.degenerateTrianglesRasterized); + jdata["degenerateLinesRasterized"] = static_cast(decoded_value.degenerateLinesRasterized); + jdata["fullyCoveredFragmentShaderInputVariable"] = static_cast(decoded_value.fullyCoveredFragmentShaderInputVariable); + jdata["conservativeRasterizationPostDepthCoverage"] = static_cast(decoded_value.conservativeRasterizationPostDepthCoverage); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationStateRasterizationOrderAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationConservativeStateCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineRasterizationStateRasterizationOrderAMD& decoded_value = *data->decoded_value; - const Decoded_VkPipelineRasterizationStateRasterizationOrderAMD& meta_struct = *data; + const VkPipelineRasterizationConservativeStateCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPipelineRasterizationConservativeStateCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["rasterizationOrder"], decoded_value.rasterizationOrder, options); + FieldToJson(VkPipelineRasterizationConservativeStateCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["conservativeRasterizationMode"], decoded_value.conservativeRasterizationMode, options); + FieldToJson(jdata["extraPrimitiveOverestimationSize"], decoded_value.extraPrimitiveOverestimationSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugMarkerObjectNameInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDepthClipEnableFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDebugMarkerObjectNameInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDebugMarkerObjectNameInfoEXT& meta_struct = *data; + const VkPhysicalDeviceDepthClipEnableFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDepthClipEnableFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["objectType"], decoded_value.objectType, options); - FieldToJson(jdata["object"], decoded_value.object, options); - FieldToJson(jdata["pObjectName"], &meta_struct.pObjectName, options); + jdata["depthClipEnable"] = static_cast(decoded_value.depthClipEnable); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugMarkerObjectTagInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationDepthClipStateCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDebugMarkerObjectTagInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDebugMarkerObjectTagInfoEXT& meta_struct = *data; + const VkPipelineRasterizationDepthClipStateCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPipelineRasterizationDepthClipStateCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["objectType"], decoded_value.objectType, options); - FieldToJson(jdata["object"], decoded_value.object, options); - FieldToJson(jdata["tagName"], decoded_value.tagName, options); - FieldToJson(jdata["tagSize"], decoded_value.tagSize, options); - FieldToJson(jdata["pTag"], meta_struct.pTag, options); + FieldToJson(VkPipelineRasterizationDepthClipStateCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + jdata["depthClipEnable"] = static_cast(decoded_value.depthClipEnable); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugMarkerMarkerInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkXYColorEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDebugMarkerMarkerInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDebugMarkerMarkerInfoEXT& meta_struct = *data; + const VkXYColorEXT& decoded_value = *data->decoded_value; + const Decoded_VkXYColorEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pMarkerName"], &meta_struct.pMarkerName, options); - FieldToJson(jdata["color"], &meta_struct.color, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["x"], decoded_value.x, options); + FieldToJson(jdata["y"], decoded_value.y, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDedicatedAllocationImageCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkHdrMetadataEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDedicatedAllocationImageCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkDedicatedAllocationImageCreateInfoNV& meta_struct = *data; + const VkHdrMetadataEXT& decoded_value = *data->decoded_value; + const Decoded_VkHdrMetadataEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["dedicatedAllocation"] = static_cast(decoded_value.dedicatedAllocation); + FieldToJson(jdata["displayPrimaryRed"], meta_struct.displayPrimaryRed, options); + FieldToJson(jdata["displayPrimaryGreen"], meta_struct.displayPrimaryGreen, options); + FieldToJson(jdata["displayPrimaryBlue"], meta_struct.displayPrimaryBlue, options); + FieldToJson(jdata["whitePoint"], meta_struct.whitePoint, options); + FieldToJson(jdata["maxLuminance"], decoded_value.maxLuminance, options); + FieldToJson(jdata["minLuminance"], decoded_value.minLuminance, options); + FieldToJson(jdata["maxContentLightLevel"], decoded_value.maxContentLightLevel, options); + FieldToJson(jdata["maxFrameAverageLightLevel"], decoded_value.maxFrameAverageLightLevel, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDedicatedAllocationBufferCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDedicatedAllocationBufferCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkDedicatedAllocationBufferCreateInfoNV& meta_struct = *data; + const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["dedicatedAllocation"] = static_cast(decoded_value.dedicatedAllocation); + jdata["relaxedLineRasterization"] = static_cast(decoded_value.relaxedLineRasterization); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDedicatedAllocationMemoryAllocateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkIOSSurfaceCreateInfoMVK* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDedicatedAllocationMemoryAllocateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkDedicatedAllocationMemoryAllocateInfoNV& meta_struct = *data; + const VkIOSSurfaceCreateInfoMVK& decoded_value = *data->decoded_value; + const Decoded_VkIOSSurfaceCreateInfoMVK& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["image"], meta_struct.image, options); - HandleToJson(jdata["buffer"], meta_struct.buffer, options); + FieldToJson(VkIOSSurfaceCreateFlagsMVK_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["pView"], meta_struct.pView, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTransformFeedbackFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMacOSSurfaceCreateInfoMVK* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceTransformFeedbackFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceTransformFeedbackFeaturesEXT& meta_struct = *data; + const VkMacOSSurfaceCreateInfoMVK& decoded_value = *data->decoded_value; + const Decoded_VkMacOSSurfaceCreateInfoMVK& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["transformFeedback"] = static_cast(decoded_value.transformFeedback); - jdata["geometryStreams"] = static_cast(decoded_value.geometryStreams); + FieldToJson(VkMacOSSurfaceCreateFlagsMVK_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["pView"], meta_struct.pView, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTransformFeedbackPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugUtilsLabelEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceTransformFeedbackPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceTransformFeedbackPropertiesEXT& meta_struct = *data; + const VkDebugUtilsLabelEXT& decoded_value = *data->decoded_value; + const Decoded_VkDebugUtilsLabelEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxTransformFeedbackStreams"], decoded_value.maxTransformFeedbackStreams, options); - FieldToJson(jdata["maxTransformFeedbackBuffers"], decoded_value.maxTransformFeedbackBuffers, options); - FieldToJson(jdata["maxTransformFeedbackBufferSize"], decoded_value.maxTransformFeedbackBufferSize, options); - FieldToJson(jdata["maxTransformFeedbackStreamDataSize"], decoded_value.maxTransformFeedbackStreamDataSize, options); - FieldToJson(jdata["maxTransformFeedbackBufferDataSize"], decoded_value.maxTransformFeedbackBufferDataSize, options); - FieldToJson(jdata["maxTransformFeedbackBufferDataStride"], decoded_value.maxTransformFeedbackBufferDataStride, options); - jdata["transformFeedbackQueries"] = static_cast(decoded_value.transformFeedbackQueries); - jdata["transformFeedbackStreamsLinesTriangles"] = static_cast(decoded_value.transformFeedbackStreamsLinesTriangles); - jdata["transformFeedbackRasterizationStreamSelect"] = static_cast(decoded_value.transformFeedbackRasterizationStreamSelect); - jdata["transformFeedbackDraw"] = static_cast(decoded_value.transformFeedbackDraw); + FieldToJson(jdata["pLabelName"], &meta_struct.pLabelName, options); + FieldToJson(jdata["color"], &meta_struct.color, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationStateStreamCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugUtilsObjectNameInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineRasterizationStateStreamCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkPipelineRasterizationStateStreamCreateInfoEXT& meta_struct = *data; + const VkDebugUtilsObjectNameInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDebugUtilsObjectNameInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineRasterizationStateStreamCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["rasterizationStream"], decoded_value.rasterizationStream, options); + FieldToJson(jdata["objectType"], decoded_value.objectType, options); + HandleToJson(jdata["objectHandle"], meta_struct.objectHandle, options); + FieldToJson(jdata["pObjectName"], &meta_struct.pObjectName, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewHandleInfoNVX* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugUtilsMessengerCallbackDataEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageViewHandleInfoNVX& decoded_value = *data->decoded_value; - const Decoded_VkImageViewHandleInfoNVX& meta_struct = *data; + const VkDebugUtilsMessengerCallbackDataEXT& decoded_value = *data->decoded_value; + const Decoded_VkDebugUtilsMessengerCallbackDataEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["imageView"], meta_struct.imageView, options); - FieldToJson(jdata["descriptorType"], decoded_value.descriptorType, options); - HandleToJson(jdata["sampler"], meta_struct.sampler, options); + FieldToJson(VkDebugUtilsMessengerCallbackDataFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["pMessageIdName"], &meta_struct.pMessageIdName, options); + FieldToJson(jdata["messageIdNumber"], decoded_value.messageIdNumber, options); + FieldToJson(jdata["pMessage"], &meta_struct.pMessage, options); + FieldToJson(jdata["queueLabelCount"], decoded_value.queueLabelCount, options); + FieldToJson(jdata["pQueueLabels"], meta_struct.pQueueLabels, options); + FieldToJson(jdata["cmdBufLabelCount"], decoded_value.cmdBufLabelCount, options); + FieldToJson(jdata["pCmdBufLabels"], meta_struct.pCmdBufLabels, options); + FieldToJson(jdata["objectCount"], decoded_value.objectCount, options); + FieldToJson(jdata["pObjects"], meta_struct.pObjects, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewAddressPropertiesNVX* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugUtilsMessengerCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageViewAddressPropertiesNVX& decoded_value = *data->decoded_value; - const Decoded_VkImageViewAddressPropertiesNVX& meta_struct = *data; + const VkDebugUtilsMessengerCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDebugUtilsMessengerCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["deviceAddress"], to_hex_variable_width(decoded_value.deviceAddress), options); - FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(VkDebugUtilsMessengerCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(VkDebugUtilsMessageSeverityFlagsEXT_t(),jdata["messageSeverity"], decoded_value.messageSeverity, options); + FieldToJson(VkDebugUtilsMessageTypeFlagsEXT_t(),jdata["messageType"], decoded_value.messageType, options); + FieldToJson(jdata["pfnUserCallback"], to_hex_variable_width(meta_struct.pfnUserCallback), options); + FieldToJson(jdata["pUserData"], to_hex_variable_width(meta_struct.pUserData), options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTextureLODGatherFormatPropertiesAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugUtilsObjectTagInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkTextureLODGatherFormatPropertiesAMD& decoded_value = *data->decoded_value; - const Decoded_VkTextureLODGatherFormatPropertiesAMD& meta_struct = *data; + const VkDebugUtilsObjectTagInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDebugUtilsObjectTagInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["supportsTextureGatherLODBiasAMD"] = static_cast(decoded_value.supportsTextureGatherLODBiasAMD); + FieldToJson(jdata["objectType"], decoded_value.objectType, options); + HandleToJson(jdata["objectHandle"], meta_struct.objectHandle, options); + FieldToJson(jdata["tagName"], decoded_value.tagName, options); + FieldToJson(jdata["tagSize"], decoded_value.tagSize, options); + FieldToJson(jdata["pTag"], meta_struct.pTag, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkShaderResourceUsageAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAndroidHardwareBufferUsageANDROID* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkShaderResourceUsageAMD& decoded_value = *data->decoded_value; - const Decoded_VkShaderResourceUsageAMD& meta_struct = *data; + const VkAndroidHardwareBufferUsageANDROID& decoded_value = *data->decoded_value; + const Decoded_VkAndroidHardwareBufferUsageANDROID& meta_struct = *data; - FieldToJson(jdata["numUsedVgprs"], decoded_value.numUsedVgprs, options); - FieldToJson(jdata["numUsedSgprs"], decoded_value.numUsedSgprs, options); - FieldToJson(jdata["ldsSizePerLocalWorkGroup"], decoded_value.ldsSizePerLocalWorkGroup, options); - FieldToJson(jdata["ldsUsageSizeInBytes"], decoded_value.ldsUsageSizeInBytes, options); - FieldToJson(jdata["scratchMemUsageInBytes"], decoded_value.scratchMemUsageInBytes, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["androidHardwareBufferUsage"], decoded_value.androidHardwareBufferUsage, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkShaderStatisticsInfoAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAndroidHardwareBufferPropertiesANDROID* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkShaderStatisticsInfoAMD& decoded_value = *data->decoded_value; - const Decoded_VkShaderStatisticsInfoAMD& meta_struct = *data; + const VkAndroidHardwareBufferPropertiesANDROID& decoded_value = *data->decoded_value; + const Decoded_VkAndroidHardwareBufferPropertiesANDROID& meta_struct = *data; - FieldToJson(VkShaderStageFlags_t(),jdata["shaderStageMask"], decoded_value.shaderStageMask, options); - FieldToJson(jdata["resourceUsage"], meta_struct.resourceUsage, options); - FieldToJson(jdata["numPhysicalVgprs"], decoded_value.numPhysicalVgprs, options); - FieldToJson(jdata["numPhysicalSgprs"], decoded_value.numPhysicalSgprs, options); - FieldToJson(jdata["numAvailableVgprs"], decoded_value.numAvailableVgprs, options); - FieldToJson(jdata["numAvailableSgprs"], decoded_value.numAvailableSgprs, options); - FieldToJson(jdata["computeWorkGroupSize"], &meta_struct.computeWorkGroupSize, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["allocationSize"], decoded_value.allocationSize, options); + FieldToJson(jdata["memoryTypeBits"], decoded_value.memoryTypeBits, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkStreamDescriptorSurfaceCreateInfoGGP* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAndroidHardwareBufferFormatPropertiesANDROID* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkStreamDescriptorSurfaceCreateInfoGGP& decoded_value = *data->decoded_value; - const Decoded_VkStreamDescriptorSurfaceCreateInfoGGP& meta_struct = *data; + const VkAndroidHardwareBufferFormatPropertiesANDROID& decoded_value = *data->decoded_value; + const Decoded_VkAndroidHardwareBufferFormatPropertiesANDROID& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkStreamDescriptorSurfaceCreateFlagsGGP_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["streamDescriptor"], decoded_value.streamDescriptor, options); + FieldToJson(jdata["format"], decoded_value.format, options); + FieldToJson(jdata["externalFormat"], decoded_value.externalFormat, options); + FieldToJson(VkFormatFeatureFlags_t(),jdata["formatFeatures"], decoded_value.formatFeatures, options); + FieldToJson(jdata["samplerYcbcrConversionComponents"], meta_struct.samplerYcbcrConversionComponents, options); + FieldToJson(jdata["suggestedYcbcrModel"], decoded_value.suggestedYcbcrModel, options); + FieldToJson(jdata["suggestedYcbcrRange"], decoded_value.suggestedYcbcrRange, options); + FieldToJson(jdata["suggestedXChromaOffset"], decoded_value.suggestedXChromaOffset, options); + FieldToJson(jdata["suggestedYChromaOffset"], decoded_value.suggestedYChromaOffset, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCornerSampledImageFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportAndroidHardwareBufferInfoANDROID* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceCornerSampledImageFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceCornerSampledImageFeaturesNV& meta_struct = *data; + const VkImportAndroidHardwareBufferInfoANDROID& decoded_value = *data->decoded_value; + const Decoded_VkImportAndroidHardwareBufferInfoANDROID& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["cornerSampledImage"] = static_cast(decoded_value.cornerSampledImage); + FieldToJson(jdata["buffer"], meta_struct.buffer, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalImageFormatPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryGetAndroidHardwareBufferInfoANDROID* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExternalImageFormatPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkExternalImageFormatPropertiesNV& meta_struct = *data; - - FieldToJson(jdata["imageFormatProperties"], meta_struct.imageFormatProperties, options); - FieldToJson(VkExternalMemoryFeatureFlagsNV_t(),jdata["externalMemoryFeatures"], decoded_value.externalMemoryFeatures, options); - FieldToJson(VkExternalMemoryHandleTypeFlagsNV_t(),jdata["exportFromImportedHandleTypes"], decoded_value.exportFromImportedHandleTypes, options); - FieldToJson(VkExternalMemoryHandleTypeFlagsNV_t(),jdata["compatibleHandleTypes"], decoded_value.compatibleHandleTypes, options); + const VkMemoryGetAndroidHardwareBufferInfoANDROID& decoded_value = *data->decoded_value; + const Decoded_VkMemoryGetAndroidHardwareBufferInfoANDROID& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalMemoryImageCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalFormatANDROID* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExternalMemoryImageCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkExternalMemoryImageCreateInfoNV& meta_struct = *data; + const VkExternalFormatANDROID& decoded_value = *data->decoded_value; + const Decoded_VkExternalFormatANDROID& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkExternalMemoryHandleTypeFlagsNV_t(),jdata["handleTypes"], decoded_value.handleTypes, options); + FieldToJson(jdata["externalFormat"], decoded_value.externalFormat, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportMemoryAllocateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAndroidHardwareBufferFormatProperties2ANDROID* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExportMemoryAllocateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkExportMemoryAllocateInfoNV& meta_struct = *data; + const VkAndroidHardwareBufferFormatProperties2ANDROID& decoded_value = *data->decoded_value; + const Decoded_VkAndroidHardwareBufferFormatProperties2ANDROID& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkExternalMemoryHandleTypeFlagsNV_t(),jdata["handleTypes"], decoded_value.handleTypes, options); + FieldToJson(jdata["format"], decoded_value.format, options); + FieldToJson(jdata["externalFormat"], decoded_value.externalFormat, options); + FieldToJson(VkFormatFeatureFlags2_t(),jdata["formatFeatures"], decoded_value.formatFeatures, options); + FieldToJson(jdata["samplerYcbcrConversionComponents"], meta_struct.samplerYcbcrConversionComponents, options); + FieldToJson(jdata["suggestedYcbcrModel"], decoded_value.suggestedYcbcrModel, options); + FieldToJson(jdata["suggestedYcbcrRange"], decoded_value.suggestedYcbcrRange, options); + FieldToJson(jdata["suggestedXChromaOffset"], decoded_value.suggestedXChromaOffset, options); + FieldToJson(jdata["suggestedYChromaOffset"], decoded_value.suggestedYChromaOffset, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportMemoryWin32HandleInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentSampleCountInfoAMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImportMemoryWin32HandleInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkImportMemoryWin32HandleInfoNV& meta_struct = *data; + const VkAttachmentSampleCountInfoAMD& decoded_value = *data->decoded_value; + const Decoded_VkAttachmentSampleCountInfoAMD& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkExternalMemoryHandleTypeFlagsNV_t(),jdata["handleType"], decoded_value.handleType, options); - FieldToJson(jdata["handle"], meta_struct.handle, options); + FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); + FieldToJson(jdata["pColorAttachmentSamples"], meta_struct.pColorAttachmentSamples, options); + FieldToJson(jdata["depthStencilAttachmentSamples"], decoded_value.depthStencilAttachmentSamples, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportMemoryWin32HandleInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSampleLocationEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExportMemoryWin32HandleInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkExportMemoryWin32HandleInfoNV& meta_struct = *data; + const VkSampleLocationEXT& decoded_value = *data->decoded_value; + const Decoded_VkSampleLocationEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pAttributes"], meta_struct.pAttributes, options); - FieldToJson(jdata["dwAccess"], decoded_value.dwAccess, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["x"], decoded_value.x, options); + FieldToJson(jdata["y"], decoded_value.y, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWin32KeyedMutexAcquireReleaseInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSampleLocationsInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkWin32KeyedMutexAcquireReleaseInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkWin32KeyedMutexAcquireReleaseInfoNV& meta_struct = *data; + const VkSampleLocationsInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkSampleLocationsInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["acquireCount"], decoded_value.acquireCount, options); - HandleToJson(jdata["pAcquireSyncs"], &meta_struct.pAcquireSyncs, options); - FieldToJson(jdata["pAcquireKeys"], meta_struct.pAcquireKeys, options); - FieldToJson(jdata["pAcquireTimeoutMilliseconds"], meta_struct.pAcquireTimeoutMilliseconds, options); - FieldToJson(jdata["releaseCount"], decoded_value.releaseCount, options); - HandleToJson(jdata["pReleaseSyncs"], &meta_struct.pReleaseSyncs, options); - FieldToJson(jdata["pReleaseKeys"], meta_struct.pReleaseKeys, options); + FieldToJson(jdata["sampleLocationsPerPixel"], decoded_value.sampleLocationsPerPixel, options); + FieldToJson(jdata["sampleLocationGridSize"], meta_struct.sampleLocationGridSize, options); + FieldToJson(jdata["sampleLocationsCount"], decoded_value.sampleLocationsCount, options); + FieldToJson(jdata["pSampleLocations"], meta_struct.pSampleLocations, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkValidationFlagsEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentSampleLocationsEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkValidationFlagsEXT& decoded_value = *data->decoded_value; - const Decoded_VkValidationFlagsEXT& meta_struct = *data; + const VkAttachmentSampleLocationsEXT& decoded_value = *data->decoded_value; + const Decoded_VkAttachmentSampleLocationsEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["disabledValidationCheckCount"], decoded_value.disabledValidationCheckCount, options); - FieldToJson(jdata["pDisabledValidationChecks"], meta_struct.pDisabledValidationChecks, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["attachmentIndex"], decoded_value.attachmentIndex, options); + FieldToJson(jdata["sampleLocationsInfo"], meta_struct.sampleLocationsInfo, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkViSurfaceCreateInfoNN* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassSampleLocationsEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkViSurfaceCreateInfoNN& decoded_value = *data->decoded_value; - const Decoded_VkViSurfaceCreateInfoNN& meta_struct = *data; + const VkSubpassSampleLocationsEXT& decoded_value = *data->decoded_value; + const Decoded_VkSubpassSampleLocationsEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkViSurfaceCreateFlagsNN_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["window"], meta_struct.window, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["subpassIndex"], decoded_value.subpassIndex, options); + FieldToJson(jdata["sampleLocationsInfo"], meta_struct.sampleLocationsInfo, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewASTCDecodeModeEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassSampleLocationsBeginInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageViewASTCDecodeModeEXT& decoded_value = *data->decoded_value; - const Decoded_VkImageViewASTCDecodeModeEXT& meta_struct = *data; + const VkRenderPassSampleLocationsBeginInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassSampleLocationsBeginInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["decodeMode"], decoded_value.decodeMode, options); + FieldToJson(jdata["attachmentInitialSampleLocationsCount"], decoded_value.attachmentInitialSampleLocationsCount, options); + FieldToJson(jdata["pAttachmentInitialSampleLocations"], meta_struct.pAttachmentInitialSampleLocations, options); + FieldToJson(jdata["postSubpassSampleLocationsCount"], decoded_value.postSubpassSampleLocationsCount, options); + FieldToJson(jdata["pPostSubpassSampleLocations"], meta_struct.pPostSubpassSampleLocations, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceASTCDecodeFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineSampleLocationsStateCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceASTCDecodeFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceASTCDecodeFeaturesEXT& meta_struct = *data; + const VkPipelineSampleLocationsStateCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPipelineSampleLocationsStateCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["decodeModeSharedExponent"] = static_cast(decoded_value.decodeModeSharedExponent); + jdata["sampleLocationsEnable"] = static_cast(decoded_value.sampleLocationsEnable); + FieldToJson(jdata["sampleLocationsInfo"], meta_struct.sampleLocationsInfo, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkConditionalRenderingBeginInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSampleLocationsPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkConditionalRenderingBeginInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkConditionalRenderingBeginInfoEXT& meta_struct = *data; + const VkPhysicalDeviceSampleLocationsPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSampleLocationsPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["buffer"], meta_struct.buffer, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); - FieldToJson(VkConditionalRenderingFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(VkSampleCountFlags_t(),jdata["sampleLocationSampleCounts"], decoded_value.sampleLocationSampleCounts, options); + FieldToJson(jdata["maxSampleLocationGridSize"], meta_struct.maxSampleLocationGridSize, options); + FieldToJson(jdata["sampleLocationCoordinateRange"], &meta_struct.sampleLocationCoordinateRange, options); + FieldToJson(jdata["sampleLocationSubPixelBits"], decoded_value.sampleLocationSubPixelBits, options); + jdata["variableSampleLocations"] = static_cast(decoded_value.variableSampleLocations); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceConditionalRenderingFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMultisamplePropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceConditionalRenderingFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceConditionalRenderingFeaturesEXT& meta_struct = *data; + const VkMultisamplePropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkMultisamplePropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["conditionalRendering"] = static_cast(decoded_value.conditionalRendering); - jdata["inheritedConditionalRendering"] = static_cast(decoded_value.inheritedConditionalRendering); + FieldToJson(jdata["maxSampleLocationGridSize"], meta_struct.maxSampleLocationGridSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferInheritanceConditionalRenderingInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCommandBufferInheritanceConditionalRenderingInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkCommandBufferInheritanceConditionalRenderingInfoEXT& meta_struct = *data; + const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["conditionalRenderingEnable"] = static_cast(decoded_value.conditionalRenderingEnable); + jdata["advancedBlendCoherentOperations"] = static_cast(decoded_value.advancedBlendCoherentOperations); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkViewportWScalingNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkViewportWScalingNV& decoded_value = *data->decoded_value; - const Decoded_VkViewportWScalingNV& meta_struct = *data; + const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT& meta_struct = *data; - FieldToJson(jdata["xcoeff"], decoded_value.xcoeff, options); - FieldToJson(jdata["ycoeff"], decoded_value.ycoeff, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["advancedBlendMaxColorAttachments"], decoded_value.advancedBlendMaxColorAttachments, options); + jdata["advancedBlendIndependentBlend"] = static_cast(decoded_value.advancedBlendIndependentBlend); + jdata["advancedBlendNonPremultipliedSrcColor"] = static_cast(decoded_value.advancedBlendNonPremultipliedSrcColor); + jdata["advancedBlendNonPremultipliedDstColor"] = static_cast(decoded_value.advancedBlendNonPremultipliedDstColor); + jdata["advancedBlendCorrelatedOverlap"] = static_cast(decoded_value.advancedBlendCorrelatedOverlap); + jdata["advancedBlendAllOperations"] = static_cast(decoded_value.advancedBlendAllOperations); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportWScalingStateCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineColorBlendAdvancedStateCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineViewportWScalingStateCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkPipelineViewportWScalingStateCreateInfoNV& meta_struct = *data; + const VkPipelineColorBlendAdvancedStateCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPipelineColorBlendAdvancedStateCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["viewportWScalingEnable"] = static_cast(decoded_value.viewportWScalingEnable); - FieldToJson(jdata["viewportCount"], decoded_value.viewportCount, options); - FieldToJson(jdata["pViewportWScalings"], meta_struct.pViewportWScalings, options); + jdata["srcPremultiplied"] = static_cast(decoded_value.srcPremultiplied); + jdata["dstPremultiplied"] = static_cast(decoded_value.dstPremultiplied); + FieldToJson(jdata["blendOverlap"], decoded_value.blendOverlap, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilities2EXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCoverageToColorStateCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfaceCapabilities2EXT& decoded_value = *data->decoded_value; - const Decoded_VkSurfaceCapabilities2EXT& meta_struct = *data; + const VkPipelineCoverageToColorStateCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkPipelineCoverageToColorStateCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["minImageCount"], decoded_value.minImageCount, options); - FieldToJson(jdata["maxImageCount"], decoded_value.maxImageCount, options); - FieldToJson(jdata["currentExtent"], meta_struct.currentExtent, options); - FieldToJson(jdata["minImageExtent"], meta_struct.minImageExtent, options); - FieldToJson(jdata["maxImageExtent"], meta_struct.maxImageExtent, options); - FieldToJson(jdata["maxImageArrayLayers"], decoded_value.maxImageArrayLayers, options); - FieldToJson(VkSurfaceTransformFlagsKHR_t(),jdata["supportedTransforms"], decoded_value.supportedTransforms, options); - FieldToJson(jdata["currentTransform"], decoded_value.currentTransform, options); - FieldToJson(VkCompositeAlphaFlagsKHR_t(),jdata["supportedCompositeAlpha"], decoded_value.supportedCompositeAlpha, options); - FieldToJson(VkImageUsageFlags_t(),jdata["supportedUsageFlags"], decoded_value.supportedUsageFlags, options); - FieldToJson(VkSurfaceCounterFlagsEXT_t(),jdata["supportedSurfaceCounters"], decoded_value.supportedSurfaceCounters, options); + FieldToJson(VkPipelineCoverageToColorStateCreateFlagsNV_t(),jdata["flags"], decoded_value.flags, options); + jdata["coverageToColorEnable"] = static_cast(decoded_value.coverageToColorEnable); + FieldToJson(jdata["coverageToColorLocation"], decoded_value.coverageToColorLocation, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayPowerInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCoverageModulationStateCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayPowerInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDisplayPowerInfoEXT& meta_struct = *data; + const VkPipelineCoverageModulationStateCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkPipelineCoverageModulationStateCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["powerState"], decoded_value.powerState, options); + FieldToJson(VkPipelineCoverageModulationStateCreateFlagsNV_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["coverageModulationMode"], decoded_value.coverageModulationMode, options); + jdata["coverageModulationTableEnable"] = static_cast(decoded_value.coverageModulationTableEnable); + FieldToJson(jdata["coverageModulationTableCount"], decoded_value.coverageModulationTableCount, options); + FieldToJson(jdata["pCoverageModulationTable"], meta_struct.pCoverageModulationTable, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceEventInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceEventInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDeviceEventInfoEXT& meta_struct = *data; + const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["deviceEvent"], decoded_value.deviceEvent, options); + FieldToJson(jdata["shaderSMCount"], decoded_value.shaderSMCount, options); + FieldToJson(jdata["shaderWarpsPerSM"], decoded_value.shaderWarpsPerSM, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayEventInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayEventInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDisplayEventInfoEXT& meta_struct = *data; + const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["displayEvent"], decoded_value.displayEvent, options); + jdata["shaderSMBuiltins"] = static_cast(decoded_value.shaderSMBuiltins); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainCounterCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrmFormatModifierPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSwapchainCounterCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkSwapchainCounterCreateInfoEXT& meta_struct = *data; + const VkDrmFormatModifierPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkDrmFormatModifierPropertiesEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkSurfaceCounterFlagsEXT_t(),jdata["surfaceCounters"], decoded_value.surfaceCounters, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["drmFormatModifier"], decoded_value.drmFormatModifier, options); + FieldToJson(jdata["drmFormatModifierPlaneCount"], decoded_value.drmFormatModifierPlaneCount, options); + FieldToJson(VkFormatFeatureFlags_t(),jdata["drmFormatModifierTilingFeatures"], decoded_value.drmFormatModifierTilingFeatures, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRefreshCycleDurationGOOGLE* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrmFormatModifierPropertiesListEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRefreshCycleDurationGOOGLE& decoded_value = *data->decoded_value; - const Decoded_VkRefreshCycleDurationGOOGLE& meta_struct = *data; + const VkDrmFormatModifierPropertiesListEXT& decoded_value = *data->decoded_value; + const Decoded_VkDrmFormatModifierPropertiesListEXT& meta_struct = *data; - FieldToJson(jdata["refreshDuration"], decoded_value.refreshDuration, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["drmFormatModifierCount"], decoded_value.drmFormatModifierCount, options); + FieldToJson(jdata["pDrmFormatModifierProperties"], meta_struct.pDrmFormatModifierProperties, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPastPresentationTimingGOOGLE* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageDrmFormatModifierInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPastPresentationTimingGOOGLE& decoded_value = *data->decoded_value; - const Decoded_VkPastPresentationTimingGOOGLE& meta_struct = *data; + const VkPhysicalDeviceImageDrmFormatModifierInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceImageDrmFormatModifierInfoEXT& meta_struct = *data; - FieldToJson(jdata["presentID"], decoded_value.presentID, options); - FieldToJson(jdata["desiredPresentTime"], decoded_value.desiredPresentTime, options); - FieldToJson(jdata["actualPresentTime"], decoded_value.actualPresentTime, options); - FieldToJson(jdata["earliestPresentTime"], decoded_value.earliestPresentTime, options); - FieldToJson(jdata["presentMargin"], decoded_value.presentMargin, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["drmFormatModifier"], decoded_value.drmFormatModifier, options); + FieldToJson(jdata["sharingMode"], decoded_value.sharingMode, options); + FieldToJson(jdata["queueFamilyIndexCount"], decoded_value.queueFamilyIndexCount, options); + FieldToJson(jdata["pQueueFamilyIndices"], meta_struct.pQueueFamilyIndices, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentTimeGOOGLE* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageDrmFormatModifierListCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPresentTimeGOOGLE& decoded_value = *data->decoded_value; - const Decoded_VkPresentTimeGOOGLE& meta_struct = *data; + const VkImageDrmFormatModifierListCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkImageDrmFormatModifierListCreateInfoEXT& meta_struct = *data; - FieldToJson(jdata["presentID"], decoded_value.presentID, options); - FieldToJson(jdata["desiredPresentTime"], decoded_value.desiredPresentTime, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["drmFormatModifierCount"], decoded_value.drmFormatModifierCount, options); + FieldToJson(jdata["pDrmFormatModifiers"], meta_struct.pDrmFormatModifiers, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentTimesInfoGOOGLE* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageDrmFormatModifierExplicitCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPresentTimesInfoGOOGLE& decoded_value = *data->decoded_value; - const Decoded_VkPresentTimesInfoGOOGLE& meta_struct = *data; + const VkImageDrmFormatModifierExplicitCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkImageDrmFormatModifierExplicitCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); - FieldToJson(jdata["pTimes"], meta_struct.pTimes, options); + FieldToJson(jdata["drmFormatModifier"], decoded_value.drmFormatModifier, options); + FieldToJson(jdata["drmFormatModifierPlaneCount"], decoded_value.drmFormatModifierPlaneCount, options); + FieldToJson(jdata["pPlaneLayouts"], meta_struct.pPlaneLayouts, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageDrmFormatModifierPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX& meta_struct = *data; + const VkImageDrmFormatModifierPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkImageDrmFormatModifierPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["perViewPositionAllComponents"] = static_cast(decoded_value.perViewPositionAllComponents); + FieldToJson(jdata["drmFormatModifier"], decoded_value.drmFormatModifier, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMultiviewPerViewAttributesInfoNVX* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrmFormatModifierProperties2EXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMultiviewPerViewAttributesInfoNVX& decoded_value = *data->decoded_value; - const Decoded_VkMultiviewPerViewAttributesInfoNVX& meta_struct = *data; + const VkDrmFormatModifierProperties2EXT& decoded_value = *data->decoded_value; + const Decoded_VkDrmFormatModifierProperties2EXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["perViewAttributes"] = static_cast(decoded_value.perViewAttributes); - jdata["perViewAttributesPositionXOnly"] = static_cast(decoded_value.perViewAttributesPositionXOnly); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["drmFormatModifier"], decoded_value.drmFormatModifier, options); + FieldToJson(jdata["drmFormatModifierPlaneCount"], decoded_value.drmFormatModifierPlaneCount, options); + FieldToJson(VkFormatFeatureFlags2_t(),jdata["drmFormatModifierTilingFeatures"], decoded_value.drmFormatModifierTilingFeatures, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkViewportSwizzleNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrmFormatModifierPropertiesList2EXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkViewportSwizzleNV& decoded_value = *data->decoded_value; - const Decoded_VkViewportSwizzleNV& meta_struct = *data; + const VkDrmFormatModifierPropertiesList2EXT& decoded_value = *data->decoded_value; + const Decoded_VkDrmFormatModifierPropertiesList2EXT& meta_struct = *data; - FieldToJson(jdata["x"], decoded_value.x, options); - FieldToJson(jdata["y"], decoded_value.y, options); - FieldToJson(jdata["z"], decoded_value.z, options); - FieldToJson(jdata["w"], decoded_value.w, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["drmFormatModifierCount"], decoded_value.drmFormatModifierCount, options); + FieldToJson(jdata["pDrmFormatModifierProperties"], meta_struct.pDrmFormatModifierProperties, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportSwizzleStateCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkValidationCacheCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineViewportSwizzleStateCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkPipelineViewportSwizzleStateCreateInfoNV& meta_struct = *data; + const VkValidationCacheCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkValidationCacheCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineViewportSwizzleStateCreateFlagsNV_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["viewportCount"], decoded_value.viewportCount, options); - FieldToJson(jdata["pViewportSwizzles"], meta_struct.pViewportSwizzles, options); + FieldToJson(VkValidationCacheCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["initialDataSize"], decoded_value.initialDataSize, options); + FieldToJson(jdata["pInitialData"], meta_struct.pInitialData, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDiscardRectanglePropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkShaderModuleValidationCacheCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDiscardRectanglePropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDiscardRectanglePropertiesEXT& meta_struct = *data; + const VkShaderModuleValidationCacheCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkShaderModuleValidationCacheCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxDiscardRectangles"], decoded_value.maxDiscardRectangles, options); + HandleToJson(jdata["validationCache"], meta_struct.validationCache, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineDiscardRectangleStateCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkShadingRatePaletteNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineDiscardRectangleStateCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkPipelineDiscardRectangleStateCreateInfoEXT& meta_struct = *data; + const VkShadingRatePaletteNV& decoded_value = *data->decoded_value; + const Decoded_VkShadingRatePaletteNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineDiscardRectangleStateCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["discardRectangleMode"], decoded_value.discardRectangleMode, options); - FieldToJson(jdata["discardRectangleCount"], decoded_value.discardRectangleCount, options); - FieldToJson(jdata["pDiscardRectangles"], meta_struct.pDiscardRectangles, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["shadingRatePaletteEntryCount"], decoded_value.shadingRatePaletteEntryCount, options); + FieldToJson(jdata["pShadingRatePaletteEntries"], meta_struct.pShadingRatePaletteEntries, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceConservativeRasterizationPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportShadingRateImageStateCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceConservativeRasterizationPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceConservativeRasterizationPropertiesEXT& meta_struct = *data; + const VkPipelineViewportShadingRateImageStateCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkPipelineViewportShadingRateImageStateCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["primitiveOverestimationSize"], decoded_value.primitiveOverestimationSize, options); - FieldToJson(jdata["maxExtraPrimitiveOverestimationSize"], decoded_value.maxExtraPrimitiveOverestimationSize, options); - FieldToJson(jdata["extraPrimitiveOverestimationSizeGranularity"], decoded_value.extraPrimitiveOverestimationSizeGranularity, options); - jdata["primitiveUnderestimation"] = static_cast(decoded_value.primitiveUnderestimation); - jdata["conservativePointAndLineRasterization"] = static_cast(decoded_value.conservativePointAndLineRasterization); - jdata["degenerateTrianglesRasterized"] = static_cast(decoded_value.degenerateTrianglesRasterized); - jdata["degenerateLinesRasterized"] = static_cast(decoded_value.degenerateLinesRasterized); - jdata["fullyCoveredFragmentShaderInputVariable"] = static_cast(decoded_value.fullyCoveredFragmentShaderInputVariable); - jdata["conservativeRasterizationPostDepthCoverage"] = static_cast(decoded_value.conservativeRasterizationPostDepthCoverage); + jdata["shadingRateImageEnable"] = static_cast(decoded_value.shadingRateImageEnable); + FieldToJson(jdata["viewportCount"], decoded_value.viewportCount, options); + FieldToJson(jdata["pShadingRatePalettes"], meta_struct.pShadingRatePalettes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationConservativeStateCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShadingRateImageFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineRasterizationConservativeStateCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkPipelineRasterizationConservativeStateCreateInfoEXT& meta_struct = *data; + const VkPhysicalDeviceShadingRateImageFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShadingRateImageFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineRasterizationConservativeStateCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["conservativeRasterizationMode"], decoded_value.conservativeRasterizationMode, options); - FieldToJson(jdata["extraPrimitiveOverestimationSize"], decoded_value.extraPrimitiveOverestimationSize, options); + jdata["shadingRateImage"] = static_cast(decoded_value.shadingRateImage); + jdata["shadingRateCoarseSampleOrder"] = static_cast(decoded_value.shadingRateCoarseSampleOrder); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDepthClipEnableFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShadingRateImagePropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDepthClipEnableFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDepthClipEnableFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceShadingRateImagePropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShadingRateImagePropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["depthClipEnable"] = static_cast(decoded_value.depthClipEnable); + FieldToJson(jdata["shadingRateTexelSize"], meta_struct.shadingRateTexelSize, options); + FieldToJson(jdata["shadingRatePaletteSize"], decoded_value.shadingRatePaletteSize, options); + FieldToJson(jdata["shadingRateMaxCoarseSamples"], decoded_value.shadingRateMaxCoarseSamples, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationDepthClipStateCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCoarseSampleLocationNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineRasterizationDepthClipStateCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkPipelineRasterizationDepthClipStateCreateInfoEXT& meta_struct = *data; + const VkCoarseSampleLocationNV& decoded_value = *data->decoded_value; + const Decoded_VkCoarseSampleLocationNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineRasterizationDepthClipStateCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - jdata["depthClipEnable"] = static_cast(decoded_value.depthClipEnable); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["pixelX"], decoded_value.pixelX, options); + FieldToJson(jdata["pixelY"], decoded_value.pixelY, options); + FieldToJson(jdata["sample"], decoded_value.sample, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkXYColorEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCoarseSampleOrderCustomNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkXYColorEXT& decoded_value = *data->decoded_value; - const Decoded_VkXYColorEXT& meta_struct = *data; + const VkCoarseSampleOrderCustomNV& decoded_value = *data->decoded_value; + const Decoded_VkCoarseSampleOrderCustomNV& meta_struct = *data; - FieldToJson(jdata["x"], decoded_value.x, options); - FieldToJson(jdata["y"], decoded_value.y, options); + FieldToJson(jdata["shadingRate"], decoded_value.shadingRate, options); + FieldToJson(jdata["sampleCount"], decoded_value.sampleCount, options); + FieldToJson(jdata["sampleLocationCount"], decoded_value.sampleLocationCount, options); + FieldToJson(jdata["pSampleLocations"], meta_struct.pSampleLocations, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkHdrMetadataEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkHdrMetadataEXT& decoded_value = *data->decoded_value; - const Decoded_VkHdrMetadataEXT& meta_struct = *data; + const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["displayPrimaryRed"], meta_struct.displayPrimaryRed, options); - FieldToJson(jdata["displayPrimaryGreen"], meta_struct.displayPrimaryGreen, options); - FieldToJson(jdata["displayPrimaryBlue"], meta_struct.displayPrimaryBlue, options); - FieldToJson(jdata["whitePoint"], meta_struct.whitePoint, options); - FieldToJson(jdata["maxLuminance"], decoded_value.maxLuminance, options); - FieldToJson(jdata["minLuminance"], decoded_value.minLuminance, options); - FieldToJson(jdata["maxContentLightLevel"], decoded_value.maxContentLightLevel, options); - FieldToJson(jdata["maxFrameAverageLightLevel"], decoded_value.maxFrameAverageLightLevel, options); + FieldToJson(jdata["sampleOrderType"], decoded_value.sampleOrderType, options); + FieldToJson(jdata["customSampleOrderCount"], decoded_value.customSampleOrderCount, options); + FieldToJson(jdata["pCustomSampleOrders"], meta_struct.pCustomSampleOrders, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRayTracingShaderGroupCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG& meta_struct = *data; + const VkRayTracingShaderGroupCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkRayTracingShaderGroupCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["relaxedLineRasterization"] = static_cast(decoded_value.relaxedLineRasterization); + FieldToJson(jdata["type"], decoded_value.type, options); + FieldToJson(jdata["generalShader"], decoded_value.generalShader, options); + FieldToJson(jdata["closestHitShader"], decoded_value.closestHitShader, options); + FieldToJson(jdata["anyHitShader"], decoded_value.anyHitShader, options); + FieldToJson(jdata["intersectionShader"], decoded_value.intersectionShader, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkIOSSurfaceCreateInfoMVK* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRayTracingPipelineCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkIOSSurfaceCreateInfoMVK& decoded_value = *data->decoded_value; - const Decoded_VkIOSSurfaceCreateInfoMVK& meta_struct = *data; + const VkRayTracingPipelineCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkRayTracingPipelineCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkIOSSurfaceCreateFlagsMVK_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["pView"], meta_struct.pView, options); + FieldToJson(VkPipelineCreateFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["stageCount"], decoded_value.stageCount, options); + FieldToJson(jdata["pStages"], meta_struct.pStages, options); + FieldToJson(jdata["groupCount"], decoded_value.groupCount, options); + FieldToJson(jdata["pGroups"], meta_struct.pGroups, options); + FieldToJson(jdata["maxRecursionDepth"], decoded_value.maxRecursionDepth, options); + HandleToJson(jdata["layout"], meta_struct.layout, options); + HandleToJson(jdata["basePipelineHandle"], meta_struct.basePipelineHandle, options); + FieldToJson(jdata["basePipelineIndex"], decoded_value.basePipelineIndex, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMacOSSurfaceCreateInfoMVK* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGeometryTrianglesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMacOSSurfaceCreateInfoMVK& decoded_value = *data->decoded_value; - const Decoded_VkMacOSSurfaceCreateInfoMVK& meta_struct = *data; + const VkGeometryTrianglesNV& decoded_value = *data->decoded_value; + const Decoded_VkGeometryTrianglesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkMacOSSurfaceCreateFlagsMVK_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["pView"], meta_struct.pView, options); + HandleToJson(jdata["vertexData"], meta_struct.vertexData, options); + FieldToJson(jdata["vertexOffset"], decoded_value.vertexOffset, options); + FieldToJson(jdata["vertexCount"], decoded_value.vertexCount, options); + FieldToJson(jdata["vertexStride"], decoded_value.vertexStride, options); + FieldToJson(jdata["vertexFormat"], decoded_value.vertexFormat, options); + HandleToJson(jdata["indexData"], meta_struct.indexData, options); + FieldToJson(jdata["indexOffset"], decoded_value.indexOffset, options); + FieldToJson(jdata["indexCount"], decoded_value.indexCount, options); + FieldToJson(jdata["indexType"], decoded_value.indexType, options); + HandleToJson(jdata["transformData"], meta_struct.transformData, options); + FieldToJson(jdata["transformOffset"], decoded_value.transformOffset, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugUtilsLabelEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGeometryAABBNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDebugUtilsLabelEXT& decoded_value = *data->decoded_value; - const Decoded_VkDebugUtilsLabelEXT& meta_struct = *data; + const VkGeometryAABBNV& decoded_value = *data->decoded_value; + const Decoded_VkGeometryAABBNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pLabelName"], &meta_struct.pLabelName, options); - FieldToJson(jdata["color"], &meta_struct.color, options); + HandleToJson(jdata["aabbData"], meta_struct.aabbData, options); + FieldToJson(jdata["numAABBs"], decoded_value.numAABBs, options); + FieldToJson(jdata["stride"], decoded_value.stride, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugUtilsObjectNameInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGeometryDataNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDebugUtilsObjectNameInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDebugUtilsObjectNameInfoEXT& meta_struct = *data; + const VkGeometryDataNV& decoded_value = *data->decoded_value; + const Decoded_VkGeometryDataNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["objectType"], decoded_value.objectType, options); - HandleToJson(jdata["objectHandle"], meta_struct.objectHandle, options); - FieldToJson(jdata["pObjectName"], &meta_struct.pObjectName, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["triangles"], meta_struct.triangles, options); + FieldToJson(jdata["aabbs"], meta_struct.aabbs, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugUtilsMessengerCallbackDataEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGeometryNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDebugUtilsMessengerCallbackDataEXT& decoded_value = *data->decoded_value; - const Decoded_VkDebugUtilsMessengerCallbackDataEXT& meta_struct = *data; + const VkGeometryNV& decoded_value = *data->decoded_value; + const Decoded_VkGeometryNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDebugUtilsMessengerCallbackDataFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["pMessageIdName"], &meta_struct.pMessageIdName, options); - FieldToJson(jdata["messageIdNumber"], decoded_value.messageIdNumber, options); - FieldToJson(jdata["pMessage"], &meta_struct.pMessage, options); - FieldToJson(jdata["queueLabelCount"], decoded_value.queueLabelCount, options); - FieldToJson(jdata["pQueueLabels"], meta_struct.pQueueLabels, options); - FieldToJson(jdata["cmdBufLabelCount"], decoded_value.cmdBufLabelCount, options); - FieldToJson(jdata["pCmdBufLabels"], meta_struct.pCmdBufLabels, options); - FieldToJson(jdata["objectCount"], decoded_value.objectCount, options); - FieldToJson(jdata["pObjects"], meta_struct.pObjects, options); + FieldToJson(jdata["geometryType"], decoded_value.geometryType, options); + FieldToJson(jdata["geometry"], meta_struct.geometry, options); + FieldToJson(VkGeometryFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugUtilsMessengerCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDebugUtilsMessengerCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDebugUtilsMessengerCreateInfoEXT& meta_struct = *data; + const VkAccelerationStructureInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkAccelerationStructureInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDebugUtilsMessengerCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(VkDebugUtilsMessageSeverityFlagsEXT_t(),jdata["messageSeverity"], decoded_value.messageSeverity, options); - FieldToJson(VkDebugUtilsMessageTypeFlagsEXT_t(),jdata["messageType"], decoded_value.messageType, options); - FieldToJson(jdata["pfnUserCallback"], to_hex_variable_width(meta_struct.pfnUserCallback), options); - FieldToJson(jdata["pUserData"], to_hex_variable_width(meta_struct.pUserData), options); + FieldToJson(jdata["type"], decoded_value.type, options); + FieldToJson(VkBuildAccelerationStructureFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["instanceCount"], decoded_value.instanceCount, options); + FieldToJson(jdata["geometryCount"], decoded_value.geometryCount, options); + FieldToJson(jdata["pGeometries"], meta_struct.pGeometries, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugUtilsObjectTagInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDebugUtilsObjectTagInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDebugUtilsObjectTagInfoEXT& meta_struct = *data; + const VkAccelerationStructureCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkAccelerationStructureCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["objectType"], decoded_value.objectType, options); - HandleToJson(jdata["objectHandle"], meta_struct.objectHandle, options); - FieldToJson(jdata["tagName"], decoded_value.tagName, options); - FieldToJson(jdata["tagSize"], decoded_value.tagSize, options); - FieldToJson(jdata["pTag"], meta_struct.pTag, options); + FieldToJson(jdata["compactedSize"], decoded_value.compactedSize, options); + FieldToJson(jdata["info"], meta_struct.info, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAndroidHardwareBufferUsageANDROID* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindAccelerationStructureMemoryInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAndroidHardwareBufferUsageANDROID& decoded_value = *data->decoded_value; - const Decoded_VkAndroidHardwareBufferUsageANDROID& meta_struct = *data; + const VkBindAccelerationStructureMemoryInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkBindAccelerationStructureMemoryInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["androidHardwareBufferUsage"], decoded_value.androidHardwareBufferUsage, options); + HandleToJson(jdata["accelerationStructure"], meta_struct.accelerationStructure, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["memoryOffset"], decoded_value.memoryOffset, options); + FieldToJson(jdata["deviceIndexCount"], decoded_value.deviceIndexCount, options); + FieldToJson(jdata["pDeviceIndices"], meta_struct.pDeviceIndices, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAndroidHardwareBufferPropertiesANDROID* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWriteDescriptorSetAccelerationStructureNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAndroidHardwareBufferPropertiesANDROID& decoded_value = *data->decoded_value; - const Decoded_VkAndroidHardwareBufferPropertiesANDROID& meta_struct = *data; + const VkWriteDescriptorSetAccelerationStructureNV& decoded_value = *data->decoded_value; + const Decoded_VkWriteDescriptorSetAccelerationStructureNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["allocationSize"], decoded_value.allocationSize, options); - FieldToJson(jdata["memoryTypeBits"], decoded_value.memoryTypeBits, options); + FieldToJson(jdata["accelerationStructureCount"], decoded_value.accelerationStructureCount, options); + HandleToJson(jdata["pAccelerationStructures"], &meta_struct.pAccelerationStructures, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAndroidHardwareBufferFormatPropertiesANDROID* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureMemoryRequirementsInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAndroidHardwareBufferFormatPropertiesANDROID& decoded_value = *data->decoded_value; - const Decoded_VkAndroidHardwareBufferFormatPropertiesANDROID& meta_struct = *data; + const VkAccelerationStructureMemoryRequirementsInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkAccelerationStructureMemoryRequirementsInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["format"], decoded_value.format, options); - FieldToJson(jdata["externalFormat"], decoded_value.externalFormat, options); - FieldToJson(VkFormatFeatureFlags_t(),jdata["formatFeatures"], decoded_value.formatFeatures, options); - FieldToJson(jdata["samplerYcbcrConversionComponents"], meta_struct.samplerYcbcrConversionComponents, options); - FieldToJson(jdata["suggestedYcbcrModel"], decoded_value.suggestedYcbcrModel, options); - FieldToJson(jdata["suggestedYcbcrRange"], decoded_value.suggestedYcbcrRange, options); - FieldToJson(jdata["suggestedXChromaOffset"], decoded_value.suggestedXChromaOffset, options); - FieldToJson(jdata["suggestedYChromaOffset"], decoded_value.suggestedYChromaOffset, options); + FieldToJson(jdata["type"], decoded_value.type, options); + HandleToJson(jdata["accelerationStructure"], meta_struct.accelerationStructure, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportAndroidHardwareBufferInfoANDROID* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImportAndroidHardwareBufferInfoANDROID& decoded_value = *data->decoded_value; - const Decoded_VkImportAndroidHardwareBufferInfoANDROID& meta_struct = *data; + const VkPhysicalDeviceRayTracingPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRayTracingPropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["buffer"], meta_struct.buffer, options); + FieldToJson(jdata["shaderGroupHandleSize"], decoded_value.shaderGroupHandleSize, options); + FieldToJson(jdata["maxRecursionDepth"], decoded_value.maxRecursionDepth, options); + FieldToJson(jdata["maxShaderGroupStride"], decoded_value.maxShaderGroupStride, options); + FieldToJson(jdata["shaderGroupBaseAlignment"], decoded_value.shaderGroupBaseAlignment, options); + FieldToJson(jdata["maxGeometryCount"], decoded_value.maxGeometryCount, options); + FieldToJson(jdata["maxInstanceCount"], decoded_value.maxInstanceCount, options); + FieldToJson(jdata["maxTriangleCount"], decoded_value.maxTriangleCount, options); + FieldToJson(jdata["maxDescriptorSetAccelerationStructures"], decoded_value.maxDescriptorSetAccelerationStructures, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryGetAndroidHardwareBufferInfoANDROID* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTransformMatrixKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryGetAndroidHardwareBufferInfoANDROID& decoded_value = *data->decoded_value; - const Decoded_VkMemoryGetAndroidHardwareBufferInfoANDROID& meta_struct = *data; + const VkTransformMatrixKHR& decoded_value = *data->decoded_value; + const Decoded_VkTransformMatrixKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["memory"], meta_struct.memory, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["matrix"], &meta_struct.matrix, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalFormatANDROID* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAabbPositionsKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExternalFormatANDROID& decoded_value = *data->decoded_value; - const Decoded_VkExternalFormatANDROID& meta_struct = *data; + const VkAabbPositionsKHR& decoded_value = *data->decoded_value; + const Decoded_VkAabbPositionsKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["externalFormat"], decoded_value.externalFormat, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["minX"], decoded_value.minX, options); + FieldToJson(jdata["minY"], decoded_value.minY, options); + FieldToJson(jdata["minZ"], decoded_value.minZ, options); + FieldToJson(jdata["maxX"], decoded_value.maxX, options); + FieldToJson(jdata["maxY"], decoded_value.maxY, options); + FieldToJson(jdata["maxZ"], decoded_value.maxZ, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAndroidHardwareBufferFormatProperties2ANDROID* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureInstanceKHR* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAndroidHardwareBufferFormatProperties2ANDROID& decoded_value = *data->decoded_value; - const Decoded_VkAndroidHardwareBufferFormatProperties2ANDROID& meta_struct = *data; + const VkAccelerationStructureInstanceKHR& decoded_value = *data->decoded_value; + const Decoded_VkAccelerationStructureInstanceKHR& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["format"], decoded_value.format, options); - FieldToJson(jdata["externalFormat"], decoded_value.externalFormat, options); - FieldToJson(VkFormatFeatureFlags2_t(),jdata["formatFeatures"], decoded_value.formatFeatures, options); - FieldToJson(jdata["samplerYcbcrConversionComponents"], meta_struct.samplerYcbcrConversionComponents, options); - FieldToJson(jdata["suggestedYcbcrModel"], decoded_value.suggestedYcbcrModel, options); - FieldToJson(jdata["suggestedYcbcrRange"], decoded_value.suggestedYcbcrRange, options); - FieldToJson(jdata["suggestedXChromaOffset"], decoded_value.suggestedXChromaOffset, options); - FieldToJson(jdata["suggestedYChromaOffset"], decoded_value.suggestedYChromaOffset, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["transform"], meta_struct.transform, options); + FieldToJson(jdata["instanceCustomIndex"], decoded_value.instanceCustomIndex, options); + FieldToJson(jdata["mask"], decoded_value.mask, options); + FieldToJson(jdata["instanceShaderBindingTableRecordOffset"], decoded_value.instanceShaderBindingTableRecordOffset, options); + FieldToJson(VkGeometryInstanceFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["accelerationStructureReference"], decoded_value.accelerationStructureReference, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentSampleCountInfoAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAttachmentSampleCountInfoAMD& decoded_value = *data->decoded_value; - const Decoded_VkAttachmentSampleCountInfoAMD& meta_struct = *data; + const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); - FieldToJson(jdata["pColorAttachmentSamples"], meta_struct.pColorAttachmentSamples, options); - FieldToJson(jdata["depthStencilAttachmentSamples"], decoded_value.depthStencilAttachmentSamples, options); + jdata["representativeFragmentTest"] = static_cast(decoded_value.representativeFragmentTest); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSampleLocationEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRepresentativeFragmentTestStateCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSampleLocationEXT& decoded_value = *data->decoded_value; - const Decoded_VkSampleLocationEXT& meta_struct = *data; + const VkPipelineRepresentativeFragmentTestStateCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkPipelineRepresentativeFragmentTestStateCreateInfoNV& meta_struct = *data; - FieldToJson(jdata["x"], decoded_value.x, options); - FieldToJson(jdata["y"], decoded_value.y, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["representativeFragmentTestEnable"] = static_cast(decoded_value.representativeFragmentTestEnable); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSampleLocationsInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageViewImageFormatInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSampleLocationsInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkSampleLocationsInfoEXT& meta_struct = *data; + const VkPhysicalDeviceImageViewImageFormatInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceImageViewImageFormatInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["sampleLocationsPerPixel"], decoded_value.sampleLocationsPerPixel, options); - FieldToJson(jdata["sampleLocationGridSize"], meta_struct.sampleLocationGridSize, options); - FieldToJson(jdata["sampleLocationsCount"], decoded_value.sampleLocationsCount, options); - FieldToJson(jdata["pSampleLocations"], meta_struct.pSampleLocations, options); + FieldToJson(jdata["imageViewType"], decoded_value.imageViewType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentSampleLocationsEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFilterCubicImageViewImageFormatPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAttachmentSampleLocationsEXT& decoded_value = *data->decoded_value; - const Decoded_VkAttachmentSampleLocationsEXT& meta_struct = *data; + const VkFilterCubicImageViewImageFormatPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkFilterCubicImageViewImageFormatPropertiesEXT& meta_struct = *data; - FieldToJson(jdata["attachmentIndex"], decoded_value.attachmentIndex, options); - FieldToJson(jdata["sampleLocationsInfo"], meta_struct.sampleLocationsInfo, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["filterCubic"] = static_cast(decoded_value.filterCubic); + jdata["filterCubicMinmax"] = static_cast(decoded_value.filterCubicMinmax); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassSampleLocationsEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportMemoryHostPointerInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSubpassSampleLocationsEXT& decoded_value = *data->decoded_value; - const Decoded_VkSubpassSampleLocationsEXT& meta_struct = *data; + const VkImportMemoryHostPointerInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkImportMemoryHostPointerInfoEXT& meta_struct = *data; - FieldToJson(jdata["subpassIndex"], decoded_value.subpassIndex, options); - FieldToJson(jdata["sampleLocationsInfo"], meta_struct.sampleLocationsInfo, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["pHostPointer"], meta_struct.pHostPointer, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassSampleLocationsBeginInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryHostPointerPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassSampleLocationsBeginInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassSampleLocationsBeginInfoEXT& meta_struct = *data; + const VkMemoryHostPointerPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkMemoryHostPointerPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["attachmentInitialSampleLocationsCount"], decoded_value.attachmentInitialSampleLocationsCount, options); - FieldToJson(jdata["pAttachmentInitialSampleLocations"], meta_struct.pAttachmentInitialSampleLocations, options); - FieldToJson(jdata["postSubpassSampleLocationsCount"], decoded_value.postSubpassSampleLocationsCount, options); - FieldToJson(jdata["pPostSubpassSampleLocations"], meta_struct.pPostSubpassSampleLocations, options); + FieldToJson(jdata["memoryTypeBits"], decoded_value.memoryTypeBits, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineSampleLocationsStateCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalMemoryHostPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineSampleLocationsStateCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkPipelineSampleLocationsStateCreateInfoEXT& meta_struct = *data; + const VkPhysicalDeviceExternalMemoryHostPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExternalMemoryHostPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["sampleLocationsEnable"] = static_cast(decoded_value.sampleLocationsEnable); - FieldToJson(jdata["sampleLocationsInfo"], meta_struct.sampleLocationsInfo, options); + FieldToJson(jdata["minImportedHostPointerAlignment"], decoded_value.minImportedHostPointerAlignment, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSampleLocationsPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCompilerControlCreateInfoAMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSampleLocationsPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSampleLocationsPropertiesEXT& meta_struct = *data; + const VkPipelineCompilerControlCreateInfoAMD& decoded_value = *data->decoded_value; + const Decoded_VkPipelineCompilerControlCreateInfoAMD& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkSampleCountFlags_t(),jdata["sampleLocationSampleCounts"], decoded_value.sampleLocationSampleCounts, options); - FieldToJson(jdata["maxSampleLocationGridSize"], meta_struct.maxSampleLocationGridSize, options); - FieldToJson(jdata["sampleLocationCoordinateRange"], &meta_struct.sampleLocationCoordinateRange, options); - FieldToJson(jdata["sampleLocationSubPixelBits"], decoded_value.sampleLocationSubPixelBits, options); - jdata["variableSampleLocations"] = static_cast(decoded_value.variableSampleLocations); + FieldToJson(VkPipelineCompilerControlFlagsAMD_t(),jdata["compilerControlFlags"], decoded_value.compilerControlFlags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMultisamplePropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderCorePropertiesAMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMultisamplePropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkMultisamplePropertiesEXT& meta_struct = *data; + const VkPhysicalDeviceShaderCorePropertiesAMD& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderCorePropertiesAMD& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxSampleLocationGridSize"], meta_struct.maxSampleLocationGridSize, options); + FieldToJson(jdata["shaderEngineCount"], decoded_value.shaderEngineCount, options); + FieldToJson(jdata["shaderArraysPerEngineCount"], decoded_value.shaderArraysPerEngineCount, options); + FieldToJson(jdata["computeUnitsPerShaderArray"], decoded_value.computeUnitsPerShaderArray, options); + FieldToJson(jdata["simdPerComputeUnit"], decoded_value.simdPerComputeUnit, options); + FieldToJson(jdata["wavefrontsPerSimd"], decoded_value.wavefrontsPerSimd, options); + FieldToJson(jdata["wavefrontSize"], decoded_value.wavefrontSize, options); + FieldToJson(jdata["sgprsPerSimd"], decoded_value.sgprsPerSimd, options); + FieldToJson(jdata["minSgprAllocation"], decoded_value.minSgprAllocation, options); + FieldToJson(jdata["maxSgprAllocation"], decoded_value.maxSgprAllocation, options); + FieldToJson(jdata["sgprAllocationGranularity"], decoded_value.sgprAllocationGranularity, options); + FieldToJson(jdata["vgprsPerSimd"], decoded_value.vgprsPerSimd, options); + FieldToJson(jdata["minVgprAllocation"], decoded_value.minVgprAllocation, options); + FieldToJson(jdata["maxVgprAllocation"], decoded_value.maxVgprAllocation, options); + FieldToJson(jdata["vgprAllocationGranularity"], decoded_value.vgprAllocationGranularity, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceMemoryOverallocationCreateInfoAMD* data, const JsonOptions& options) { if (data && data->decoded_value) - { - const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT& meta_struct = *data; + { + const VkDeviceMemoryOverallocationCreateInfoAMD& decoded_value = *data->decoded_value; + const Decoded_VkDeviceMemoryOverallocationCreateInfoAMD& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["advancedBlendCoherentOperations"] = static_cast(decoded_value.advancedBlendCoherentOperations); + FieldToJson(jdata["overallocationBehavior"], decoded_value.overallocationBehavior, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT& meta_struct = *data; + const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["advancedBlendMaxColorAttachments"], decoded_value.advancedBlendMaxColorAttachments, options); - jdata["advancedBlendIndependentBlend"] = static_cast(decoded_value.advancedBlendIndependentBlend); - jdata["advancedBlendNonPremultipliedSrcColor"] = static_cast(decoded_value.advancedBlendNonPremultipliedSrcColor); - jdata["advancedBlendNonPremultipliedDstColor"] = static_cast(decoded_value.advancedBlendNonPremultipliedDstColor); - jdata["advancedBlendCorrelatedOverlap"] = static_cast(decoded_value.advancedBlendCorrelatedOverlap); - jdata["advancedBlendAllOperations"] = static_cast(decoded_value.advancedBlendAllOperations); + FieldToJson(jdata["maxVertexAttribDivisor"], decoded_value.maxVertexAttribDivisor, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineColorBlendAdvancedStateCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentFrameTokenGGP* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineColorBlendAdvancedStateCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkPipelineColorBlendAdvancedStateCreateInfoEXT& meta_struct = *data; + const VkPresentFrameTokenGGP& decoded_value = *data->decoded_value; + const Decoded_VkPresentFrameTokenGGP& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["srcPremultiplied"] = static_cast(decoded_value.srcPremultiplied); - jdata["dstPremultiplied"] = static_cast(decoded_value.dstPremultiplied); - FieldToJson(jdata["blendOverlap"], decoded_value.blendOverlap, options); + FieldToJson(jdata["frameToken"], decoded_value.frameToken, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCoverageToColorStateCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMeshShaderFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineCoverageToColorStateCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkPipelineCoverageToColorStateCreateInfoNV& meta_struct = *data; + const VkPhysicalDeviceMeshShaderFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMeshShaderFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineCoverageToColorStateCreateFlagsNV_t(),jdata["flags"], decoded_value.flags, options); - jdata["coverageToColorEnable"] = static_cast(decoded_value.coverageToColorEnable); - FieldToJson(jdata["coverageToColorLocation"], decoded_value.coverageToColorLocation, options); + jdata["taskShader"] = static_cast(decoded_value.taskShader); + jdata["meshShader"] = static_cast(decoded_value.meshShader); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCoverageModulationStateCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMeshShaderPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineCoverageModulationStateCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkPipelineCoverageModulationStateCreateInfoNV& meta_struct = *data; + const VkPhysicalDeviceMeshShaderPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMeshShaderPropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineCoverageModulationStateCreateFlagsNV_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["coverageModulationMode"], decoded_value.coverageModulationMode, options); - jdata["coverageModulationTableEnable"] = static_cast(decoded_value.coverageModulationTableEnable); - FieldToJson(jdata["coverageModulationTableCount"], decoded_value.coverageModulationTableCount, options); - FieldToJson(jdata["pCoverageModulationTable"], meta_struct.pCoverageModulationTable, options); + FieldToJson(jdata["maxDrawMeshTasksCount"], decoded_value.maxDrawMeshTasksCount, options); + FieldToJson(jdata["maxTaskWorkGroupInvocations"], decoded_value.maxTaskWorkGroupInvocations, options); + FieldToJson(jdata["maxTaskWorkGroupSize"], &meta_struct.maxTaskWorkGroupSize, options); + FieldToJson(jdata["maxTaskTotalMemorySize"], decoded_value.maxTaskTotalMemorySize, options); + FieldToJson(jdata["maxTaskOutputCount"], decoded_value.maxTaskOutputCount, options); + FieldToJson(jdata["maxMeshWorkGroupInvocations"], decoded_value.maxMeshWorkGroupInvocations, options); + FieldToJson(jdata["maxMeshWorkGroupSize"], &meta_struct.maxMeshWorkGroupSize, options); + FieldToJson(jdata["maxMeshTotalMemorySize"], decoded_value.maxMeshTotalMemorySize, options); + FieldToJson(jdata["maxMeshOutputVertices"], decoded_value.maxMeshOutputVertices, options); + FieldToJson(jdata["maxMeshOutputPrimitives"], decoded_value.maxMeshOutputPrimitives, options); + FieldToJson(jdata["maxMeshMultiviewViewCount"], decoded_value.maxMeshMultiviewViewCount, options); + FieldToJson(jdata["meshOutputPerVertexGranularity"], decoded_value.meshOutputPerVertexGranularity, options); + FieldToJson(jdata["meshOutputPerPrimitiveGranularity"], decoded_value.meshOutputPerPrimitiveGranularity, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrawMeshTasksIndirectCommandNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV& meta_struct = *data; + const VkDrawMeshTasksIndirectCommandNV& decoded_value = *data->decoded_value; + const Decoded_VkDrawMeshTasksIndirectCommandNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["shaderSMCount"], decoded_value.shaderSMCount, options); - FieldToJson(jdata["shaderWarpsPerSM"], decoded_value.shaderWarpsPerSM, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["taskCount"], decoded_value.taskCount, options); + FieldToJson(jdata["firstTask"], decoded_value.firstTask, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderImageFootprintFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV& meta_struct = *data; + const VkPhysicalDeviceShaderImageFootprintFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderImageFootprintFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderSMBuiltins"] = static_cast(decoded_value.shaderSMBuiltins); + jdata["imageFootprint"] = static_cast(decoded_value.imageFootprint); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrmFormatModifierPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportExclusiveScissorStateCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDrmFormatModifierPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkDrmFormatModifierPropertiesEXT& meta_struct = *data; + const VkPipelineViewportExclusiveScissorStateCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkPipelineViewportExclusiveScissorStateCreateInfoNV& meta_struct = *data; - FieldToJson(jdata["drmFormatModifier"], decoded_value.drmFormatModifier, options); - FieldToJson(jdata["drmFormatModifierPlaneCount"], decoded_value.drmFormatModifierPlaneCount, options); - FieldToJson(VkFormatFeatureFlags_t(),jdata["drmFormatModifierTilingFeatures"], decoded_value.drmFormatModifierTilingFeatures, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["exclusiveScissorCount"], decoded_value.exclusiveScissorCount, options); + FieldToJson(jdata["pExclusiveScissors"], meta_struct.pExclusiveScissors, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrmFormatModifierPropertiesListEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExclusiveScissorFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDrmFormatModifierPropertiesListEXT& decoded_value = *data->decoded_value; - const Decoded_VkDrmFormatModifierPropertiesListEXT& meta_struct = *data; + const VkPhysicalDeviceExclusiveScissorFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExclusiveScissorFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["drmFormatModifierCount"], decoded_value.drmFormatModifierCount, options); - FieldToJson(jdata["pDrmFormatModifierProperties"], meta_struct.pDrmFormatModifierProperties, options); + jdata["exclusiveScissor"] = static_cast(decoded_value.exclusiveScissor); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageDrmFormatModifierInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyCheckpointPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceImageDrmFormatModifierInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceImageDrmFormatModifierInfoEXT& meta_struct = *data; + const VkQueueFamilyCheckpointPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkQueueFamilyCheckpointPropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["drmFormatModifier"], decoded_value.drmFormatModifier, options); - FieldToJson(jdata["sharingMode"], decoded_value.sharingMode, options); - FieldToJson(jdata["queueFamilyIndexCount"], decoded_value.queueFamilyIndexCount, options); - FieldToJson(jdata["pQueueFamilyIndices"], meta_struct.pQueueFamilyIndices, options); + FieldToJson(VkPipelineStageFlags_t(),jdata["checkpointExecutionStageMask"], decoded_value.checkpointExecutionStageMask, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageDrmFormatModifierListCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCheckpointDataNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageDrmFormatModifierListCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkImageDrmFormatModifierListCreateInfoEXT& meta_struct = *data; + const VkCheckpointDataNV& decoded_value = *data->decoded_value; + const Decoded_VkCheckpointDataNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["drmFormatModifierCount"], decoded_value.drmFormatModifierCount, options); - FieldToJson(jdata["pDrmFormatModifiers"], meta_struct.pDrmFormatModifiers, options); + FieldToJson(jdata["stage"], decoded_value.stage, options); + FieldToJson(jdata["pCheckpointMarker"], meta_struct.pCheckpointMarker, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageDrmFormatModifierExplicitCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyCheckpointProperties2NV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageDrmFormatModifierExplicitCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkImageDrmFormatModifierExplicitCreateInfoEXT& meta_struct = *data; + const VkQueueFamilyCheckpointProperties2NV& decoded_value = *data->decoded_value; + const Decoded_VkQueueFamilyCheckpointProperties2NV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["drmFormatModifier"], decoded_value.drmFormatModifier, options); - FieldToJson(jdata["drmFormatModifierPlaneCount"], decoded_value.drmFormatModifierPlaneCount, options); - FieldToJson(jdata["pPlaneLayouts"], meta_struct.pPlaneLayouts, options); + FieldToJson(VkPipelineStageFlags2_t(),jdata["checkpointExecutionStageMask"], decoded_value.checkpointExecutionStageMask, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageDrmFormatModifierPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCheckpointData2NV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageDrmFormatModifierPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkImageDrmFormatModifierPropertiesEXT& meta_struct = *data; + const VkCheckpointData2NV& decoded_value = *data->decoded_value; + const Decoded_VkCheckpointData2NV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["drmFormatModifier"], decoded_value.drmFormatModifier, options); + FieldToJson(VkPipelineStageFlags2_t(),jdata["stage"], decoded_value.stage, options); + FieldToJson(jdata["pCheckpointMarker"], meta_struct.pCheckpointMarker, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrmFormatModifierProperties2EXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentTimingFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDrmFormatModifierProperties2EXT& decoded_value = *data->decoded_value; - const Decoded_VkDrmFormatModifierProperties2EXT& meta_struct = *data; + const VkPhysicalDevicePresentTimingFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePresentTimingFeaturesEXT& meta_struct = *data; - FieldToJson(jdata["drmFormatModifier"], decoded_value.drmFormatModifier, options); - FieldToJson(jdata["drmFormatModifierPlaneCount"], decoded_value.drmFormatModifierPlaneCount, options); - FieldToJson(VkFormatFeatureFlags2_t(),jdata["drmFormatModifierTilingFeatures"], decoded_value.drmFormatModifierTilingFeatures, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["presentTiming"] = static_cast(decoded_value.presentTiming); + jdata["presentAtAbsoluteTime"] = static_cast(decoded_value.presentAtAbsoluteTime); + jdata["presentAtRelativeTime"] = static_cast(decoded_value.presentAtRelativeTime); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrmFormatModifierPropertiesList2EXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentTimingSurfaceCapabilitiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDrmFormatModifierPropertiesList2EXT& decoded_value = *data->decoded_value; - const Decoded_VkDrmFormatModifierPropertiesList2EXT& meta_struct = *data; + const VkPresentTimingSurfaceCapabilitiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPresentTimingSurfaceCapabilitiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["drmFormatModifierCount"], decoded_value.drmFormatModifierCount, options); - FieldToJson(jdata["pDrmFormatModifierProperties"], meta_struct.pDrmFormatModifierProperties, options); + jdata["presentTimingSupported"] = static_cast(decoded_value.presentTimingSupported); + jdata["presentAtAbsoluteTimeSupported"] = static_cast(decoded_value.presentAtAbsoluteTimeSupported); + jdata["presentAtRelativeTimeSupported"] = static_cast(decoded_value.presentAtRelativeTimeSupported); + FieldToJson(VkPresentStageFlagsEXT_t(),jdata["presentStageQueries"], decoded_value.presentStageQueries, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkValidationCacheCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainCalibratedTimestampInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkValidationCacheCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkValidationCacheCreateInfoEXT& meta_struct = *data; + const VkSwapchainCalibratedTimestampInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkSwapchainCalibratedTimestampInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkValidationCacheCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["initialDataSize"], decoded_value.initialDataSize, options); - FieldToJson(jdata["pInitialData"], meta_struct.pInitialData, options); + HandleToJson(jdata["swapchain"], meta_struct.swapchain, options); + FieldToJson(VkPresentStageFlagsEXT_t(),jdata["presentStage"], decoded_value.presentStage, options); + FieldToJson(jdata["timeDomainId"], decoded_value.timeDomainId, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkShaderModuleValidationCacheCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainTimingPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkShaderModuleValidationCacheCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkShaderModuleValidationCacheCreateInfoEXT& meta_struct = *data; + const VkSwapchainTimingPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkSwapchainTimingPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["validationCache"], meta_struct.validationCache, options); + FieldToJson(jdata["refreshDuration"], decoded_value.refreshDuration, options); + FieldToJson(jdata["refreshInterval"], decoded_value.refreshInterval, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkShadingRatePaletteNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainTimeDomainPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkShadingRatePaletteNV& decoded_value = *data->decoded_value; - const Decoded_VkShadingRatePaletteNV& meta_struct = *data; + const VkSwapchainTimeDomainPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkSwapchainTimeDomainPropertiesEXT& meta_struct = *data; - FieldToJson(jdata["shadingRatePaletteEntryCount"], decoded_value.shadingRatePaletteEntryCount, options); - FieldToJson(jdata["pShadingRatePaletteEntries"], meta_struct.pShadingRatePaletteEntries, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["timeDomainCount"], decoded_value.timeDomainCount, options); + FieldToJson(jdata["pTimeDomains"], meta_struct.pTimeDomains, options); + FieldToJson(jdata["pTimeDomainIds"], meta_struct.pTimeDomainIds, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportShadingRateImageStateCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPastPresentationTimingInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineViewportShadingRateImageStateCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkPipelineViewportShadingRateImageStateCreateInfoNV& meta_struct = *data; + const VkPastPresentationTimingInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPastPresentationTimingInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shadingRateImageEnable"] = static_cast(decoded_value.shadingRateImageEnable); - FieldToJson(jdata["viewportCount"], decoded_value.viewportCount, options); - FieldToJson(jdata["pShadingRatePalettes"], meta_struct.pShadingRatePalettes, options); + FieldToJson(VkPastPresentationTimingFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["swapchain"], meta_struct.swapchain, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShadingRateImageFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentStageTimeEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShadingRateImageFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShadingRateImageFeaturesNV& meta_struct = *data; + const VkPresentStageTimeEXT& decoded_value = *data->decoded_value; + const Decoded_VkPresentStageTimeEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shadingRateImage"] = static_cast(decoded_value.shadingRateImage); - jdata["shadingRateCoarseSampleOrder"] = static_cast(decoded_value.shadingRateCoarseSampleOrder); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(VkPresentStageFlagsEXT_t(),jdata["stage"], decoded_value.stage, options); + FieldToJson(jdata["time"], decoded_value.time, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShadingRateImagePropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPastPresentationTimingEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShadingRateImagePropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShadingRateImagePropertiesNV& meta_struct = *data; + const VkPastPresentationTimingEXT& decoded_value = *data->decoded_value; + const Decoded_VkPastPresentationTimingEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["shadingRateTexelSize"], meta_struct.shadingRateTexelSize, options); - FieldToJson(jdata["shadingRatePaletteSize"], decoded_value.shadingRatePaletteSize, options); - FieldToJson(jdata["shadingRateMaxCoarseSamples"], decoded_value.shadingRateMaxCoarseSamples, options); + FieldToJson(jdata["presentId"], decoded_value.presentId, options); + FieldToJson(jdata["targetTime"], decoded_value.targetTime, options); + FieldToJson(jdata["presentStageCount"], decoded_value.presentStageCount, options); + FieldToJson(jdata["pPresentStages"], meta_struct.pPresentStages, options); + FieldToJson(jdata["timeDomain"], decoded_value.timeDomain, options); + FieldToJson(jdata["timeDomainId"], decoded_value.timeDomainId, options); + jdata["reportComplete"] = static_cast(decoded_value.reportComplete); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCoarseSampleLocationNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPastPresentationTimingPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCoarseSampleLocationNV& decoded_value = *data->decoded_value; - const Decoded_VkCoarseSampleLocationNV& meta_struct = *data; + const VkPastPresentationTimingPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPastPresentationTimingPropertiesEXT& meta_struct = *data; - FieldToJson(jdata["pixelX"], decoded_value.pixelX, options); - FieldToJson(jdata["pixelY"], decoded_value.pixelY, options); - FieldToJson(jdata["sample"], decoded_value.sample, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["timingPropertiesCounter"], decoded_value.timingPropertiesCounter, options); + FieldToJson(jdata["timeDomainsCounter"], decoded_value.timeDomainsCounter, options); + FieldToJson(jdata["presentationTimingCount"], decoded_value.presentationTimingCount, options); + FieldToJson(jdata["pPresentationTimings"], meta_struct.pPresentationTimings, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCoarseSampleOrderCustomNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentTimingInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCoarseSampleOrderCustomNV& decoded_value = *data->decoded_value; - const Decoded_VkCoarseSampleOrderCustomNV& meta_struct = *data; + const VkPresentTimingInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPresentTimingInfoEXT& meta_struct = *data; - FieldToJson(jdata["shadingRate"], decoded_value.shadingRate, options); - FieldToJson(jdata["sampleCount"], decoded_value.sampleCount, options); - FieldToJson(jdata["sampleLocationCount"], decoded_value.sampleLocationCount, options); - FieldToJson(jdata["pSampleLocations"], meta_struct.pSampleLocations, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkPresentTimingInfoFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["targetTime"], decoded_value.targetTime, options); + FieldToJson(jdata["timeDomainId"], decoded_value.timeDomainId, options); + FieldToJson(VkPresentStageFlagsEXT_t(),jdata["presentStageQueries"], decoded_value.presentStageQueries, options); + FieldToJson(VkPresentStageFlagsEXT_t(),jdata["targetTimeDomainPresentStage"], decoded_value.targetTimeDomainPresentStage, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentTimingsInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV& meta_struct = *data; + const VkPresentTimingsInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPresentTimingsInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["sampleOrderType"], decoded_value.sampleOrderType, options); - FieldToJson(jdata["customSampleOrderCount"], decoded_value.customSampleOrderCount, options); - FieldToJson(jdata["pCustomSampleOrders"], meta_struct.pCustomSampleOrders, options); + FieldToJson(jdata["swapchainCount"], decoded_value.swapchainCount, options); + FieldToJson(jdata["pTimingInfos"], meta_struct.pTimingInfos, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRayTracingShaderGroupCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRayTracingShaderGroupCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkRayTracingShaderGroupCreateInfoNV& meta_struct = *data; + const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["type"], decoded_value.type, options); - FieldToJson(jdata["generalShader"], decoded_value.generalShader, options); - FieldToJson(jdata["closestHitShader"], decoded_value.closestHitShader, options); - FieldToJson(jdata["anyHitShader"], decoded_value.anyHitShader, options); - FieldToJson(jdata["intersectionShader"], decoded_value.intersectionShader, options); + jdata["shaderIntegerFunctions2"] = static_cast(decoded_value.shaderIntegerFunctions2); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRayTracingPipelineCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkInitializePerformanceApiInfoINTEL* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRayTracingPipelineCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkRayTracingPipelineCreateInfoNV& meta_struct = *data; + const VkInitializePerformanceApiInfoINTEL& decoded_value = *data->decoded_value; + const Decoded_VkInitializePerformanceApiInfoINTEL& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineCreateFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["stageCount"], decoded_value.stageCount, options); - FieldToJson(jdata["pStages"], meta_struct.pStages, options); - FieldToJson(jdata["groupCount"], decoded_value.groupCount, options); - FieldToJson(jdata["pGroups"], meta_struct.pGroups, options); - FieldToJson(jdata["maxRecursionDepth"], decoded_value.maxRecursionDepth, options); - HandleToJson(jdata["layout"], meta_struct.layout, options); - HandleToJson(jdata["basePipelineHandle"], meta_struct.basePipelineHandle, options); - FieldToJson(jdata["basePipelineIndex"], decoded_value.basePipelineIndex, options); + FieldToJson(jdata["pUserData"], to_hex_variable_width(meta_struct.pUserData), options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGeometryTrianglesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueryPoolPerformanceQueryCreateInfoINTEL* data, const JsonOptions& options) { if (data && data->decoded_value) - { - const VkGeometryTrianglesNV& decoded_value = *data->decoded_value; - const Decoded_VkGeometryTrianglesNV& meta_struct = *data; + { + const VkQueryPoolPerformanceQueryCreateInfoINTEL& decoded_value = *data->decoded_value; + const Decoded_VkQueryPoolPerformanceQueryCreateInfoINTEL& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["vertexData"], meta_struct.vertexData, options); - FieldToJson(jdata["vertexOffset"], decoded_value.vertexOffset, options); - FieldToJson(jdata["vertexCount"], decoded_value.vertexCount, options); - FieldToJson(jdata["vertexStride"], decoded_value.vertexStride, options); - FieldToJson(jdata["vertexFormat"], decoded_value.vertexFormat, options); - HandleToJson(jdata["indexData"], meta_struct.indexData, options); - FieldToJson(jdata["indexOffset"], decoded_value.indexOffset, options); - FieldToJson(jdata["indexCount"], decoded_value.indexCount, options); - FieldToJson(jdata["indexType"], decoded_value.indexType, options); - HandleToJson(jdata["transformData"], meta_struct.transformData, options); - FieldToJson(jdata["transformOffset"], decoded_value.transformOffset, options); + FieldToJson(jdata["performanceCountersSampling"], decoded_value.performanceCountersSampling, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGeometryAABBNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceMarkerInfoINTEL* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkGeometryAABBNV& decoded_value = *data->decoded_value; - const Decoded_VkGeometryAABBNV& meta_struct = *data; + const VkPerformanceMarkerInfoINTEL& decoded_value = *data->decoded_value; + const Decoded_VkPerformanceMarkerInfoINTEL& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["aabbData"], meta_struct.aabbData, options); - FieldToJson(jdata["numAABBs"], decoded_value.numAABBs, options); - FieldToJson(jdata["stride"], decoded_value.stride, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(jdata["marker"], decoded_value.marker, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGeometryDataNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceStreamMarkerInfoINTEL* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkGeometryDataNV& decoded_value = *data->decoded_value; - const Decoded_VkGeometryDataNV& meta_struct = *data; + const VkPerformanceStreamMarkerInfoINTEL& decoded_value = *data->decoded_value; + const Decoded_VkPerformanceStreamMarkerInfoINTEL& meta_struct = *data; - FieldToJson(jdata["triangles"], meta_struct.triangles, options); - FieldToJson(jdata["aabbs"], meta_struct.aabbs, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["marker"], decoded_value.marker, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGeometryNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceOverrideInfoINTEL* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkGeometryNV& decoded_value = *data->decoded_value; - const Decoded_VkGeometryNV& meta_struct = *data; + const VkPerformanceOverrideInfoINTEL& decoded_value = *data->decoded_value; + const Decoded_VkPerformanceOverrideInfoINTEL& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["geometryType"], decoded_value.geometryType, options); - FieldToJson(jdata["geometry"], meta_struct.geometry, options); - FieldToJson(VkGeometryFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["type"], decoded_value.type, options); + jdata["enable"] = static_cast(decoded_value.enable); + FieldToJson(jdata["parameter"], decoded_value.parameter, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceConfigurationAcquireInfoINTEL* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAccelerationStructureInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkAccelerationStructureInfoNV& meta_struct = *data; + const VkPerformanceConfigurationAcquireInfoINTEL& decoded_value = *data->decoded_value; + const Decoded_VkPerformanceConfigurationAcquireInfoINTEL& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); FieldToJson(jdata["type"], decoded_value.type, options); - FieldToJson(VkBuildAccelerationStructureFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["instanceCount"], decoded_value.instanceCount, options); - FieldToJson(jdata["geometryCount"], decoded_value.geometryCount, options); - FieldToJson(jdata["pGeometries"], meta_struct.pGeometries, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePCIBusInfoPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAccelerationStructureCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkAccelerationStructureCreateInfoNV& meta_struct = *data; + const VkPhysicalDevicePCIBusInfoPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePCIBusInfoPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["compactedSize"], decoded_value.compactedSize, options); - FieldToJson(jdata["info"], meta_struct.info, options); + FieldToJson(jdata["pciDomain"], decoded_value.pciDomain, options); + FieldToJson(jdata["pciBus"], decoded_value.pciBus, options); + FieldToJson(jdata["pciDevice"], decoded_value.pciDevice, options); + FieldToJson(jdata["pciFunction"], decoded_value.pciFunction, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindAccelerationStructureMemoryInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayNativeHdrSurfaceCapabilitiesAMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindAccelerationStructureMemoryInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkBindAccelerationStructureMemoryInfoNV& meta_struct = *data; + const VkDisplayNativeHdrSurfaceCapabilitiesAMD& decoded_value = *data->decoded_value; + const Decoded_VkDisplayNativeHdrSurfaceCapabilitiesAMD& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["accelerationStructure"], meta_struct.accelerationStructure, options); - HandleToJson(jdata["memory"], meta_struct.memory, options); - FieldToJson(jdata["memoryOffset"], decoded_value.memoryOffset, options); - FieldToJson(jdata["deviceIndexCount"], decoded_value.deviceIndexCount, options); - FieldToJson(jdata["pDeviceIndices"], meta_struct.pDeviceIndices, options); + jdata["localDimmingSupport"] = static_cast(decoded_value.localDimmingSupport); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWriteDescriptorSetAccelerationStructureNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainDisplayNativeHdrCreateInfoAMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkWriteDescriptorSetAccelerationStructureNV& decoded_value = *data->decoded_value; - const Decoded_VkWriteDescriptorSetAccelerationStructureNV& meta_struct = *data; + const VkSwapchainDisplayNativeHdrCreateInfoAMD& decoded_value = *data->decoded_value; + const Decoded_VkSwapchainDisplayNativeHdrCreateInfoAMD& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["accelerationStructureCount"], decoded_value.accelerationStructureCount, options); - HandleToJson(jdata["pAccelerationStructures"], &meta_struct.pAccelerationStructures, options); + jdata["localDimmingEnable"] = static_cast(decoded_value.localDimmingEnable); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureMemoryRequirementsInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImagePipeSurfaceCreateInfoFUCHSIA* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAccelerationStructureMemoryRequirementsInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkAccelerationStructureMemoryRequirementsInfoNV& meta_struct = *data; + const VkImagePipeSurfaceCreateInfoFUCHSIA& decoded_value = *data->decoded_value; + const Decoded_VkImagePipeSurfaceCreateInfoFUCHSIA& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["type"], decoded_value.type, options); - HandleToJson(jdata["accelerationStructure"], meta_struct.accelerationStructure, options); + FieldToJson(VkImagePipeSurfaceCreateFlagsFUCHSIA_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["imagePipeHandle"], decoded_value.imagePipeHandle, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMetalSurfaceCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRayTracingPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRayTracingPropertiesNV& meta_struct = *data; + const VkMetalSurfaceCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkMetalSurfaceCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["shaderGroupHandleSize"], decoded_value.shaderGroupHandleSize, options); - FieldToJson(jdata["maxRecursionDepth"], decoded_value.maxRecursionDepth, options); - FieldToJson(jdata["maxShaderGroupStride"], decoded_value.maxShaderGroupStride, options); - FieldToJson(jdata["shaderGroupBaseAlignment"], decoded_value.shaderGroupBaseAlignment, options); - FieldToJson(jdata["maxGeometryCount"], decoded_value.maxGeometryCount, options); - FieldToJson(jdata["maxInstanceCount"], decoded_value.maxInstanceCount, options); - FieldToJson(jdata["maxTriangleCount"], decoded_value.maxTriangleCount, options); - FieldToJson(jdata["maxDescriptorSetAccelerationStructures"], decoded_value.maxDescriptorSetAccelerationStructures, options); + FieldToJson(VkMetalSurfaceCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["pLayer"], meta_struct.pLayer, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTransformMatrixKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentDensityMapFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkTransformMatrixKHR& decoded_value = *data->decoded_value; - const Decoded_VkTransformMatrixKHR& meta_struct = *data; + const VkPhysicalDeviceFragmentDensityMapFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFragmentDensityMapFeaturesEXT& meta_struct = *data; - FieldToJson(jdata["matrix"], &meta_struct.matrix, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["fragmentDensityMap"] = static_cast(decoded_value.fragmentDensityMap); + jdata["fragmentDensityMapDynamic"] = static_cast(decoded_value.fragmentDensityMapDynamic); + jdata["fragmentDensityMapNonSubsampledImages"] = static_cast(decoded_value.fragmentDensityMapNonSubsampledImages); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAabbPositionsKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentDensityMapPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAabbPositionsKHR& decoded_value = *data->decoded_value; - const Decoded_VkAabbPositionsKHR& meta_struct = *data; + const VkPhysicalDeviceFragmentDensityMapPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFragmentDensityMapPropertiesEXT& meta_struct = *data; - FieldToJson(jdata["minX"], decoded_value.minX, options); - FieldToJson(jdata["minY"], decoded_value.minY, options); - FieldToJson(jdata["minZ"], decoded_value.minZ, options); - FieldToJson(jdata["maxX"], decoded_value.maxX, options); - FieldToJson(jdata["maxY"], decoded_value.maxY, options); - FieldToJson(jdata["maxZ"], decoded_value.maxZ, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["minFragmentDensityTexelSize"], meta_struct.minFragmentDensityTexelSize, options); + FieldToJson(jdata["maxFragmentDensityTexelSize"], meta_struct.maxFragmentDensityTexelSize, options); + jdata["fragmentDensityInvocations"] = static_cast(decoded_value.fragmentDensityInvocations); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureInstanceKHR* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassFragmentDensityMapCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAccelerationStructureInstanceKHR& decoded_value = *data->decoded_value; - const Decoded_VkAccelerationStructureInstanceKHR& meta_struct = *data; + const VkRenderPassFragmentDensityMapCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassFragmentDensityMapCreateInfoEXT& meta_struct = *data; - FieldToJson(jdata["transform"], meta_struct.transform, options); - FieldToJson(jdata["instanceCustomIndex"], decoded_value.instanceCustomIndex, options); - FieldToJson(jdata["mask"], decoded_value.mask, options); - FieldToJson(jdata["instanceShaderBindingTableRecordOffset"], decoded_value.instanceShaderBindingTableRecordOffset, options); - FieldToJson(VkGeometryInstanceFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["accelerationStructureReference"], decoded_value.accelerationStructureReference, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["fragmentDensityMapAttachment"], meta_struct.fragmentDensityMapAttachment, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingFragmentDensityMapAttachmentInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV& meta_struct = *data; + const VkRenderingFragmentDensityMapAttachmentInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkRenderingFragmentDensityMapAttachmentInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["representativeFragmentTest"] = static_cast(decoded_value.representativeFragmentTest); + HandleToJson(jdata["imageView"], meta_struct.imageView, options); + FieldToJson(jdata["imageLayout"], decoded_value.imageLayout, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRepresentativeFragmentTestStateCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderCoreProperties2AMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineRepresentativeFragmentTestStateCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkPipelineRepresentativeFragmentTestStateCreateInfoNV& meta_struct = *data; + const VkPhysicalDeviceShaderCoreProperties2AMD& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderCoreProperties2AMD& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["representativeFragmentTestEnable"] = static_cast(decoded_value.representativeFragmentTestEnable); + FieldToJson(VkShaderCorePropertiesFlagsAMD_t(),jdata["shaderCoreFeatures"], decoded_value.shaderCoreFeatures, options); + FieldToJson(jdata["activeComputeUnitCount"], decoded_value.activeComputeUnitCount, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageViewImageFormatInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCoherentMemoryFeaturesAMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceImageViewImageFormatInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceImageViewImageFormatInfoEXT& meta_struct = *data; + const VkPhysicalDeviceCoherentMemoryFeaturesAMD& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceCoherentMemoryFeaturesAMD& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["imageViewType"], decoded_value.imageViewType, options); + jdata["deviceCoherentMemory"] = static_cast(decoded_value.deviceCoherentMemory); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFilterCubicImageViewImageFormatPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkFilterCubicImageViewImageFormatPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkFilterCubicImageViewImageFormatPropertiesEXT& meta_struct = *data; + const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["filterCubic"] = static_cast(decoded_value.filterCubic); - jdata["filterCubicMinmax"] = static_cast(decoded_value.filterCubicMinmax); + jdata["shaderImageInt64Atomics"] = static_cast(decoded_value.shaderImageInt64Atomics); + jdata["sparseImageInt64Atomics"] = static_cast(decoded_value.sparseImageInt64Atomics); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportMemoryHostPointerInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMemoryBudgetPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImportMemoryHostPointerInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkImportMemoryHostPointerInfoEXT& meta_struct = *data; + const VkPhysicalDeviceMemoryBudgetPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMemoryBudgetPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); - FieldToJson(jdata["pHostPointer"], meta_struct.pHostPointer, options); + FieldToJson(jdata["heapBudget"], &meta_struct.heapBudget, options); + FieldToJson(jdata["heapUsage"], &meta_struct.heapUsage, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryHostPointerPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMemoryPriorityFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryHostPointerPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkMemoryHostPointerPropertiesEXT& meta_struct = *data; + const VkPhysicalDeviceMemoryPriorityFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMemoryPriorityFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["memoryTypeBits"], decoded_value.memoryTypeBits, options); + jdata["memoryPriority"] = static_cast(decoded_value.memoryPriority); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalMemoryHostPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryPriorityAllocateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExternalMemoryHostPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExternalMemoryHostPropertiesEXT& meta_struct = *data; + const VkMemoryPriorityAllocateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkMemoryPriorityAllocateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["minImportedHostPointerAlignment"], decoded_value.minImportedHostPointerAlignment, options); + FieldToJson(jdata["priority"], decoded_value.priority, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCompilerControlCreateInfoAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineCompilerControlCreateInfoAMD& decoded_value = *data->decoded_value; - const Decoded_VkPipelineCompilerControlCreateInfoAMD& meta_struct = *data; + const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineCompilerControlFlagsAMD_t(),jdata["compilerControlFlags"], decoded_value.compilerControlFlags, options); + jdata["dedicatedAllocationImageAliasing"] = static_cast(decoded_value.dedicatedAllocationImageAliasing); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderCorePropertiesAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderCorePropertiesAMD& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderCorePropertiesAMD& meta_struct = *data; + const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["shaderEngineCount"], decoded_value.shaderEngineCount, options); - FieldToJson(jdata["shaderArraysPerEngineCount"], decoded_value.shaderArraysPerEngineCount, options); - FieldToJson(jdata["computeUnitsPerShaderArray"], decoded_value.computeUnitsPerShaderArray, options); - FieldToJson(jdata["simdPerComputeUnit"], decoded_value.simdPerComputeUnit, options); - FieldToJson(jdata["wavefrontsPerSimd"], decoded_value.wavefrontsPerSimd, options); - FieldToJson(jdata["wavefrontSize"], decoded_value.wavefrontSize, options); - FieldToJson(jdata["sgprsPerSimd"], decoded_value.sgprsPerSimd, options); - FieldToJson(jdata["minSgprAllocation"], decoded_value.minSgprAllocation, options); - FieldToJson(jdata["maxSgprAllocation"], decoded_value.maxSgprAllocation, options); - FieldToJson(jdata["sgprAllocationGranularity"], decoded_value.sgprAllocationGranularity, options); - FieldToJson(jdata["vgprsPerSimd"], decoded_value.vgprsPerSimd, options); - FieldToJson(jdata["minVgprAllocation"], decoded_value.minVgprAllocation, options); - FieldToJson(jdata["maxVgprAllocation"], decoded_value.maxVgprAllocation, options); - FieldToJson(jdata["vgprAllocationGranularity"], decoded_value.vgprAllocationGranularity, options); + jdata["bufferDeviceAddress"] = static_cast(decoded_value.bufferDeviceAddress); + jdata["bufferDeviceAddressCaptureReplay"] = static_cast(decoded_value.bufferDeviceAddressCaptureReplay); + jdata["bufferDeviceAddressMultiDevice"] = static_cast(decoded_value.bufferDeviceAddressMultiDevice); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferDeviceAddressCreateInfoEXT* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkBufferDeviceAddressCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkBufferDeviceAddressCreateInfoEXT& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["deviceAddress"], to_hex_variable_width(decoded_value.deviceAddress), options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceMemoryOverallocationCreateInfoAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkValidationFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceMemoryOverallocationCreateInfoAMD& decoded_value = *data->decoded_value; - const Decoded_VkDeviceMemoryOverallocationCreateInfoAMD& meta_struct = *data; + const VkValidationFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkValidationFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["overallocationBehavior"], decoded_value.overallocationBehavior, options); + FieldToJson(jdata["enabledValidationFeatureCount"], decoded_value.enabledValidationFeatureCount, options); + FieldToJson(jdata["pEnabledValidationFeatures"], meta_struct.pEnabledValidationFeatures, options); + FieldToJson(jdata["disabledValidationFeatureCount"], decoded_value.disabledValidationFeatureCount, options); + FieldToJson(jdata["pDisabledValidationFeatures"], meta_struct.pDisabledValidationFeatures, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCooperativeMatrixPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT& meta_struct = *data; + const VkCooperativeMatrixPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkCooperativeMatrixPropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxVertexAttribDivisor"], decoded_value.maxVertexAttribDivisor, options); + FieldToJson(jdata["MSize"], decoded_value.MSize, options); + FieldToJson(jdata["NSize"], decoded_value.NSize, options); + FieldToJson(jdata["KSize"], decoded_value.KSize, options); + FieldToJson(jdata["AType"], decoded_value.AType, options); + FieldToJson(jdata["BType"], decoded_value.BType, options); + FieldToJson(jdata["CType"], decoded_value.CType, options); + FieldToJson(jdata["DType"], decoded_value.DType, options); + FieldToJson(jdata["scope"], decoded_value.scope, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentFrameTokenGGP* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPresentFrameTokenGGP& decoded_value = *data->decoded_value; - const Decoded_VkPresentFrameTokenGGP& meta_struct = *data; + const VkPhysicalDeviceCooperativeMatrixFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["frameToken"], decoded_value.frameToken, options); + jdata["cooperativeMatrix"] = static_cast(decoded_value.cooperativeMatrix); + jdata["cooperativeMatrixRobustBufferAccess"] = static_cast(decoded_value.cooperativeMatrixRobustBufferAccess); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMeshShaderFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMeshShaderFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMeshShaderFeaturesNV& meta_struct = *data; + const VkPhysicalDeviceCooperativeMatrixPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["taskShader"] = static_cast(decoded_value.taskShader); - jdata["meshShader"] = static_cast(decoded_value.meshShader); + FieldToJson(VkShaderStageFlags_t(),jdata["cooperativeMatrixSupportedStages"], decoded_value.cooperativeMatrixSupportedStages, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMeshShaderPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCoverageReductionModeFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMeshShaderPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMeshShaderPropertiesNV& meta_struct = *data; + const VkPhysicalDeviceCoverageReductionModeFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceCoverageReductionModeFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxDrawMeshTasksCount"], decoded_value.maxDrawMeshTasksCount, options); - FieldToJson(jdata["maxTaskWorkGroupInvocations"], decoded_value.maxTaskWorkGroupInvocations, options); - FieldToJson(jdata["maxTaskWorkGroupSize"], &meta_struct.maxTaskWorkGroupSize, options); - FieldToJson(jdata["maxTaskTotalMemorySize"], decoded_value.maxTaskTotalMemorySize, options); - FieldToJson(jdata["maxTaskOutputCount"], decoded_value.maxTaskOutputCount, options); - FieldToJson(jdata["maxMeshWorkGroupInvocations"], decoded_value.maxMeshWorkGroupInvocations, options); - FieldToJson(jdata["maxMeshWorkGroupSize"], &meta_struct.maxMeshWorkGroupSize, options); - FieldToJson(jdata["maxMeshTotalMemorySize"], decoded_value.maxMeshTotalMemorySize, options); - FieldToJson(jdata["maxMeshOutputVertices"], decoded_value.maxMeshOutputVertices, options); - FieldToJson(jdata["maxMeshOutputPrimitives"], decoded_value.maxMeshOutputPrimitives, options); - FieldToJson(jdata["maxMeshMultiviewViewCount"], decoded_value.maxMeshMultiviewViewCount, options); - FieldToJson(jdata["meshOutputPerVertexGranularity"], decoded_value.meshOutputPerVertexGranularity, options); - FieldToJson(jdata["meshOutputPerPrimitiveGranularity"], decoded_value.meshOutputPerPrimitiveGranularity, options); + jdata["coverageReductionMode"] = static_cast(decoded_value.coverageReductionMode); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrawMeshTasksIndirectCommandNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCoverageReductionStateCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDrawMeshTasksIndirectCommandNV& decoded_value = *data->decoded_value; - const Decoded_VkDrawMeshTasksIndirectCommandNV& meta_struct = *data; + const VkPipelineCoverageReductionStateCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkPipelineCoverageReductionStateCreateInfoNV& meta_struct = *data; - FieldToJson(jdata["taskCount"], decoded_value.taskCount, options); - FieldToJson(jdata["firstTask"], decoded_value.firstTask, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkPipelineCoverageReductionStateCreateFlagsNV_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["coverageReductionMode"], decoded_value.coverageReductionMode, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderImageFootprintFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFramebufferMixedSamplesCombinationNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderImageFootprintFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderImageFootprintFeaturesNV& meta_struct = *data; + const VkFramebufferMixedSamplesCombinationNV& decoded_value = *data->decoded_value; + const Decoded_VkFramebufferMixedSamplesCombinationNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["imageFootprint"] = static_cast(decoded_value.imageFootprint); + FieldToJson(jdata["coverageReductionMode"], decoded_value.coverageReductionMode, options); + FieldToJson(jdata["rasterizationSamples"], decoded_value.rasterizationSamples, options); + FieldToJson(VkSampleCountFlags_t(),jdata["depthStencilSamples"], decoded_value.depthStencilSamples, options); + FieldToJson(VkSampleCountFlags_t(),jdata["colorSamples"], decoded_value.colorSamples, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportExclusiveScissorStateCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineViewportExclusiveScissorStateCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkPipelineViewportExclusiveScissorStateCreateInfoNV& meta_struct = *data; + const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["exclusiveScissorCount"], decoded_value.exclusiveScissorCount, options); - FieldToJson(jdata["pExclusiveScissors"], meta_struct.pExclusiveScissors, options); + jdata["fragmentShaderSampleInterlock"] = static_cast(decoded_value.fragmentShaderSampleInterlock); + jdata["fragmentShaderPixelInterlock"] = static_cast(decoded_value.fragmentShaderPixelInterlock); + jdata["fragmentShaderShadingRateInterlock"] = static_cast(decoded_value.fragmentShaderShadingRateInterlock); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExclusiveScissorFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExclusiveScissorFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExclusiveScissorFeaturesNV& meta_struct = *data; + const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["exclusiveScissor"] = static_cast(decoded_value.exclusiveScissor); + jdata["ycbcrImageArrays"] = static_cast(decoded_value.ycbcrImageArrays); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyCheckpointPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceProvokingVertexFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkQueueFamilyCheckpointPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkQueueFamilyCheckpointPropertiesNV& meta_struct = *data; + const VkPhysicalDeviceProvokingVertexFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceProvokingVertexFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineStageFlags_t(),jdata["checkpointExecutionStageMask"], decoded_value.checkpointExecutionStageMask, options); + jdata["provokingVertexLast"] = static_cast(decoded_value.provokingVertexLast); + jdata["transformFeedbackPreservesProvokingVertex"] = static_cast(decoded_value.transformFeedbackPreservesProvokingVertex); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCheckpointDataNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceProvokingVertexPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCheckpointDataNV& decoded_value = *data->decoded_value; - const Decoded_VkCheckpointDataNV& meta_struct = *data; + const VkPhysicalDeviceProvokingVertexPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceProvokingVertexPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stage"], decoded_value.stage, options); - FieldToJson(jdata["pCheckpointMarker"], meta_struct.pCheckpointMarker, options); + jdata["provokingVertexModePerPipeline"] = static_cast(decoded_value.provokingVertexModePerPipeline); + jdata["transformFeedbackPreservesTriangleFanProvokingVertex"] = static_cast(decoded_value.transformFeedbackPreservesTriangleFanProvokingVertex); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyCheckpointProperties2NV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkQueueFamilyCheckpointProperties2NV& decoded_value = *data->decoded_value; - const Decoded_VkQueueFamilyCheckpointProperties2NV& meta_struct = *data; + const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineStageFlags2_t(),jdata["checkpointExecutionStageMask"], decoded_value.checkpointExecutionStageMask, options); + FieldToJson(jdata["provokingVertexMode"], decoded_value.provokingVertexMode, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCheckpointData2NV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceFullScreenExclusiveInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCheckpointData2NV& decoded_value = *data->decoded_value; - const Decoded_VkCheckpointData2NV& meta_struct = *data; + const VkSurfaceFullScreenExclusiveInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkSurfaceFullScreenExclusiveInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineStageFlags2_t(),jdata["stage"], decoded_value.stage, options); - FieldToJson(jdata["pCheckpointMarker"], meta_struct.pCheckpointMarker, options); + FieldToJson(jdata["fullScreenExclusive"], decoded_value.fullScreenExclusive, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilitiesFullScreenExclusiveEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL& meta_struct = *data; + const VkSurfaceCapabilitiesFullScreenExclusiveEXT& decoded_value = *data->decoded_value; + const Decoded_VkSurfaceCapabilitiesFullScreenExclusiveEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderIntegerFunctions2"] = static_cast(decoded_value.shaderIntegerFunctions2); + jdata["fullScreenExclusiveSupported"] = static_cast(decoded_value.fullScreenExclusiveSupported); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkInitializePerformanceApiInfoINTEL* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceFullScreenExclusiveWin32InfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkInitializePerformanceApiInfoINTEL& decoded_value = *data->decoded_value; - const Decoded_VkInitializePerformanceApiInfoINTEL& meta_struct = *data; + const VkSurfaceFullScreenExclusiveWin32InfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkSurfaceFullScreenExclusiveWin32InfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pUserData"], to_hex_variable_width(meta_struct.pUserData), options); + FieldToJson(jdata["hmonitor"], meta_struct.hmonitor, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueryPoolPerformanceQueryCreateInfoINTEL* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkHeadlessSurfaceCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkQueryPoolPerformanceQueryCreateInfoINTEL& decoded_value = *data->decoded_value; - const Decoded_VkQueryPoolPerformanceQueryCreateInfoINTEL& meta_struct = *data; + const VkHeadlessSurfaceCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkHeadlessSurfaceCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["performanceCountersSampling"], decoded_value.performanceCountersSampling, options); + FieldToJson(VkHeadlessSurfaceCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceMarkerInfoINTEL* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPerformanceMarkerInfoINTEL& decoded_value = *data->decoded_value; - const Decoded_VkPerformanceMarkerInfoINTEL& meta_struct = *data; + const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["marker"], decoded_value.marker, options); + jdata["shaderBufferFloat32Atomics"] = static_cast(decoded_value.shaderBufferFloat32Atomics); + jdata["shaderBufferFloat32AtomicAdd"] = static_cast(decoded_value.shaderBufferFloat32AtomicAdd); + jdata["shaderBufferFloat64Atomics"] = static_cast(decoded_value.shaderBufferFloat64Atomics); + jdata["shaderBufferFloat64AtomicAdd"] = static_cast(decoded_value.shaderBufferFloat64AtomicAdd); + jdata["shaderSharedFloat32Atomics"] = static_cast(decoded_value.shaderSharedFloat32Atomics); + jdata["shaderSharedFloat32AtomicAdd"] = static_cast(decoded_value.shaderSharedFloat32AtomicAdd); + jdata["shaderSharedFloat64Atomics"] = static_cast(decoded_value.shaderSharedFloat64Atomics); + jdata["shaderSharedFloat64AtomicAdd"] = static_cast(decoded_value.shaderSharedFloat64AtomicAdd); + jdata["shaderImageFloat32Atomics"] = static_cast(decoded_value.shaderImageFloat32Atomics); + jdata["shaderImageFloat32AtomicAdd"] = static_cast(decoded_value.shaderImageFloat32AtomicAdd); + jdata["sparseImageFloat32Atomics"] = static_cast(decoded_value.sparseImageFloat32Atomics); + jdata["sparseImageFloat32AtomicAdd"] = static_cast(decoded_value.sparseImageFloat32AtomicAdd); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceStreamMarkerInfoINTEL* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPerformanceStreamMarkerInfoINTEL& decoded_value = *data->decoded_value; - const Decoded_VkPerformanceStreamMarkerInfoINTEL& meta_struct = *data; + const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["marker"], decoded_value.marker, options); + jdata["extendedDynamicState"] = static_cast(decoded_value.extendedDynamicState); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceOverrideInfoINTEL* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPerformanceOverrideInfoINTEL& decoded_value = *data->decoded_value; - const Decoded_VkPerformanceOverrideInfoINTEL& meta_struct = *data; + const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["type"], decoded_value.type, options); - jdata["enable"] = static_cast(decoded_value.enable); - FieldToJson(jdata["parameter"], decoded_value.parameter, options); + jdata["memoryMapPlaced"] = static_cast(decoded_value.memoryMapPlaced); + jdata["memoryMapRangePlaced"] = static_cast(decoded_value.memoryMapRangePlaced); + jdata["memoryUnmapReserve"] = static_cast(decoded_value.memoryUnmapReserve); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceConfigurationAcquireInfoINTEL* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPerformanceConfigurationAcquireInfoINTEL& decoded_value = *data->decoded_value; - const Decoded_VkPerformanceConfigurationAcquireInfoINTEL& meta_struct = *data; + const VkPhysicalDeviceMapMemoryPlacedPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["type"], decoded_value.type, options); + FieldToJson(jdata["minPlacedMemoryMapAlignment"], decoded_value.minPlacedMemoryMapAlignment, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePCIBusInfoPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryMapPlacedInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePCIBusInfoPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePCIBusInfoPropertiesEXT& meta_struct = *data; + const VkMemoryMapPlacedInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkMemoryMapPlacedInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pciDomain"], decoded_value.pciDomain, options); - FieldToJson(jdata["pciBus"], decoded_value.pciBus, options); - FieldToJson(jdata["pciDevice"], decoded_value.pciDevice, options); - FieldToJson(jdata["pciFunction"], decoded_value.pciFunction, options); + FieldToJson(jdata["pPlacedAddress"], meta_struct.pPlacedAddress, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayNativeHdrSurfaceCapabilitiesAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDisplayNativeHdrSurfaceCapabilitiesAMD& decoded_value = *data->decoded_value; - const Decoded_VkDisplayNativeHdrSurfaceCapabilitiesAMD& meta_struct = *data; + const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["localDimmingSupport"] = static_cast(decoded_value.localDimmingSupport); + jdata["shaderBufferFloat16Atomics"] = static_cast(decoded_value.shaderBufferFloat16Atomics); + jdata["shaderBufferFloat16AtomicAdd"] = static_cast(decoded_value.shaderBufferFloat16AtomicAdd); + jdata["shaderBufferFloat16AtomicMinMax"] = static_cast(decoded_value.shaderBufferFloat16AtomicMinMax); + jdata["shaderBufferFloat32AtomicMinMax"] = static_cast(decoded_value.shaderBufferFloat32AtomicMinMax); + jdata["shaderBufferFloat64AtomicMinMax"] = static_cast(decoded_value.shaderBufferFloat64AtomicMinMax); + jdata["shaderSharedFloat16Atomics"] = static_cast(decoded_value.shaderSharedFloat16Atomics); + jdata["shaderSharedFloat16AtomicAdd"] = static_cast(decoded_value.shaderSharedFloat16AtomicAdd); + jdata["shaderSharedFloat16AtomicMinMax"] = static_cast(decoded_value.shaderSharedFloat16AtomicMinMax); + jdata["shaderSharedFloat32AtomicMinMax"] = static_cast(decoded_value.shaderSharedFloat32AtomicMinMax); + jdata["shaderSharedFloat64AtomicMinMax"] = static_cast(decoded_value.shaderSharedFloat64AtomicMinMax); + jdata["shaderImageFloat32AtomicMinMax"] = static_cast(decoded_value.shaderImageFloat32AtomicMinMax); + jdata["sparseImageFloat32AtomicMinMax"] = static_cast(decoded_value.sparseImageFloat32AtomicMinMax); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainDisplayNativeHdrCreateInfoAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSwapchainDisplayNativeHdrCreateInfoAMD& decoded_value = *data->decoded_value; - const Decoded_VkSwapchainDisplayNativeHdrCreateInfoAMD& meta_struct = *data; + const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["localDimmingEnable"] = static_cast(decoded_value.localDimmingEnable); + FieldToJson(jdata["maxGraphicsShaderGroupCount"], decoded_value.maxGraphicsShaderGroupCount, options); + FieldToJson(jdata["maxIndirectSequenceCount"], decoded_value.maxIndirectSequenceCount, options); + FieldToJson(jdata["maxIndirectCommandsTokenCount"], decoded_value.maxIndirectCommandsTokenCount, options); + FieldToJson(jdata["maxIndirectCommandsStreamCount"], decoded_value.maxIndirectCommandsStreamCount, options); + FieldToJson(jdata["maxIndirectCommandsTokenOffset"], decoded_value.maxIndirectCommandsTokenOffset, options); + FieldToJson(jdata["maxIndirectCommandsStreamStride"], decoded_value.maxIndirectCommandsStreamStride, options); + FieldToJson(jdata["minSequencesCountBufferOffsetAlignment"], decoded_value.minSequencesCountBufferOffsetAlignment, options); + FieldToJson(jdata["minSequencesIndexBufferOffsetAlignment"], decoded_value.minSequencesIndexBufferOffsetAlignment, options); + FieldToJson(jdata["minIndirectCommandsBufferOffsetAlignment"], decoded_value.minIndirectCommandsBufferOffsetAlignment, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImagePipeSurfaceCreateInfoFUCHSIA* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImagePipeSurfaceCreateInfoFUCHSIA& decoded_value = *data->decoded_value; - const Decoded_VkImagePipeSurfaceCreateInfoFUCHSIA& meta_struct = *data; + const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkImagePipeSurfaceCreateFlagsFUCHSIA_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["imagePipeHandle"], decoded_value.imagePipeHandle, options); + jdata["deviceGeneratedCommands"] = static_cast(decoded_value.deviceGeneratedCommands); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMetalSurfaceCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGraphicsShaderGroupCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMetalSurfaceCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkMetalSurfaceCreateInfoEXT& meta_struct = *data; + const VkGraphicsShaderGroupCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkGraphicsShaderGroupCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkMetalSurfaceCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["pLayer"], meta_struct.pLayer, options); + FieldToJson(jdata["stageCount"], decoded_value.stageCount, options); + FieldToJson(jdata["pStages"], meta_struct.pStages, options); + FieldToJson(jdata["pVertexInputState"], meta_struct.pVertexInputState, options); + FieldToJson(jdata["pTessellationState"], meta_struct.pTessellationState, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentDensityMapFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGraphicsPipelineShaderGroupsCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFragmentDensityMapFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFragmentDensityMapFeaturesEXT& meta_struct = *data; + const VkGraphicsPipelineShaderGroupsCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkGraphicsPipelineShaderGroupsCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["fragmentDensityMap"] = static_cast(decoded_value.fragmentDensityMap); - jdata["fragmentDensityMapDynamic"] = static_cast(decoded_value.fragmentDensityMapDynamic); - jdata["fragmentDensityMapNonSubsampledImages"] = static_cast(decoded_value.fragmentDensityMapNonSubsampledImages); + FieldToJson(jdata["groupCount"], decoded_value.groupCount, options); + FieldToJson(jdata["pGroups"], meta_struct.pGroups, options); + FieldToJson(jdata["pipelineCount"], decoded_value.pipelineCount, options); + HandleToJson(jdata["pPipelines"], &meta_struct.pPipelines, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentDensityMapPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindShaderGroupIndirectCommandNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFragmentDensityMapPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFragmentDensityMapPropertiesEXT& meta_struct = *data; + const VkBindShaderGroupIndirectCommandNV& decoded_value = *data->decoded_value; + const Decoded_VkBindShaderGroupIndirectCommandNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["minFragmentDensityTexelSize"], meta_struct.minFragmentDensityTexelSize, options); - FieldToJson(jdata["maxFragmentDensityTexelSize"], meta_struct.maxFragmentDensityTexelSize, options); - jdata["fragmentDensityInvocations"] = static_cast(decoded_value.fragmentDensityInvocations); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["groupIndex"], decoded_value.groupIndex, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassFragmentDensityMapCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindIndexBufferIndirectCommandNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassFragmentDensityMapCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassFragmentDensityMapCreateInfoEXT& meta_struct = *data; + const VkBindIndexBufferIndirectCommandNV& decoded_value = *data->decoded_value; + const Decoded_VkBindIndexBufferIndirectCommandNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["fragmentDensityMapAttachment"], meta_struct.fragmentDensityMapAttachment, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["bufferAddress"], to_hex_variable_width(decoded_value.bufferAddress), options); + FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["indexType"], decoded_value.indexType, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingFragmentDensityMapAttachmentInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindVertexBufferIndirectCommandNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderingFragmentDensityMapAttachmentInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkRenderingFragmentDensityMapAttachmentInfoEXT& meta_struct = *data; + const VkBindVertexBufferIndirectCommandNV& decoded_value = *data->decoded_value; + const Decoded_VkBindVertexBufferIndirectCommandNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["imageView"], meta_struct.imageView, options); - FieldToJson(jdata["imageLayout"], decoded_value.imageLayout, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["bufferAddress"], to_hex_variable_width(decoded_value.bufferAddress), options); + FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["stride"], decoded_value.stride, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderCoreProperties2AMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSetStateFlagsIndirectCommandNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderCoreProperties2AMD& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderCoreProperties2AMD& meta_struct = *data; + const VkSetStateFlagsIndirectCommandNV& decoded_value = *data->decoded_value; + const Decoded_VkSetStateFlagsIndirectCommandNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkShaderCorePropertiesFlagsAMD_t(),jdata["shaderCoreFeatures"], decoded_value.shaderCoreFeatures, options); - FieldToJson(jdata["activeComputeUnitCount"], decoded_value.activeComputeUnitCount, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["data"], decoded_value.data, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCoherentMemoryFeaturesAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkIndirectCommandsStreamNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceCoherentMemoryFeaturesAMD& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceCoherentMemoryFeaturesAMD& meta_struct = *data; + const VkIndirectCommandsStreamNV& decoded_value = *data->decoded_value; + const Decoded_VkIndirectCommandsStreamNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["deviceCoherentMemory"] = static_cast(decoded_value.deviceCoherentMemory); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + HandleToJson(jdata["buffer"], meta_struct.buffer, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkIndirectCommandsLayoutTokenNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT& meta_struct = *data; + const VkIndirectCommandsLayoutTokenNV& decoded_value = *data->decoded_value; + const Decoded_VkIndirectCommandsLayoutTokenNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderImageInt64Atomics"] = static_cast(decoded_value.shaderImageInt64Atomics); - jdata["sparseImageInt64Atomics"] = static_cast(decoded_value.sparseImageInt64Atomics); + FieldToJson(jdata["tokenType"], decoded_value.tokenType, options); + FieldToJson(jdata["stream"], decoded_value.stream, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(jdata["vertexBindingUnit"], decoded_value.vertexBindingUnit, options); + jdata["vertexDynamicStride"] = static_cast(decoded_value.vertexDynamicStride); + HandleToJson(jdata["pushconstantPipelineLayout"], meta_struct.pushconstantPipelineLayout, options); + FieldToJson(VkShaderStageFlags_t(),jdata["pushconstantShaderStageFlags"], decoded_value.pushconstantShaderStageFlags, options); + FieldToJson(jdata["pushconstantOffset"], decoded_value.pushconstantOffset, options); + FieldToJson(jdata["pushconstantSize"], decoded_value.pushconstantSize, options); + FieldToJson(VkIndirectStateFlagsNV_t(),jdata["indirectStateFlags"], decoded_value.indirectStateFlags, options); + FieldToJson(jdata["indexTypeCount"], decoded_value.indexTypeCount, options); + FieldToJson(jdata["pIndexTypes"], meta_struct.pIndexTypes, options); + FieldToJson(jdata["pIndexTypeValues"], meta_struct.pIndexTypeValues, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMemoryBudgetPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkIndirectCommandsLayoutCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMemoryBudgetPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMemoryBudgetPropertiesEXT& meta_struct = *data; + const VkIndirectCommandsLayoutCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkIndirectCommandsLayoutCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["heapBudget"], &meta_struct.heapBudget, options); - FieldToJson(jdata["heapUsage"], &meta_struct.heapUsage, options); + FieldToJson(VkIndirectCommandsLayoutUsageFlagsNV_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["pipelineBindPoint"], decoded_value.pipelineBindPoint, options); + FieldToJson(jdata["tokenCount"], decoded_value.tokenCount, options); + FieldToJson(jdata["pTokens"], meta_struct.pTokens, options); + FieldToJson(jdata["streamCount"], decoded_value.streamCount, options); + FieldToJson(jdata["pStreamStrides"], meta_struct.pStreamStrides, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMemoryPriorityFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGeneratedCommandsInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMemoryPriorityFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMemoryPriorityFeaturesEXT& meta_struct = *data; + const VkGeneratedCommandsInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkGeneratedCommandsInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["memoryPriority"] = static_cast(decoded_value.memoryPriority); + FieldToJson(jdata["pipelineBindPoint"], decoded_value.pipelineBindPoint, options); + HandleToJson(jdata["pipeline"], meta_struct.pipeline, options); + HandleToJson(jdata["indirectCommandsLayout"], meta_struct.indirectCommandsLayout, options); + FieldToJson(jdata["streamCount"], decoded_value.streamCount, options); + FieldToJson(jdata["pStreams"], meta_struct.pStreams, options); + FieldToJson(jdata["sequencesCount"], decoded_value.sequencesCount, options); + HandleToJson(jdata["preprocessBuffer"], meta_struct.preprocessBuffer, options); + FieldToJson(jdata["preprocessOffset"], decoded_value.preprocessOffset, options); + FieldToJson(jdata["preprocessSize"], decoded_value.preprocessSize, options); + HandleToJson(jdata["sequencesCountBuffer"], meta_struct.sequencesCountBuffer, options); + FieldToJson(jdata["sequencesCountOffset"], decoded_value.sequencesCountOffset, options); + HandleToJson(jdata["sequencesIndexBuffer"], meta_struct.sequencesIndexBuffer, options); + FieldToJson(jdata["sequencesIndexOffset"], decoded_value.sequencesIndexOffset, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryPriorityAllocateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGeneratedCommandsMemoryRequirementsInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryPriorityAllocateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkMemoryPriorityAllocateInfoEXT& meta_struct = *data; + const VkGeneratedCommandsMemoryRequirementsInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkGeneratedCommandsMemoryRequirementsInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["priority"], decoded_value.priority, options); + FieldToJson(jdata["pipelineBindPoint"], decoded_value.pipelineBindPoint, options); + HandleToJson(jdata["pipeline"], meta_struct.pipeline, options); + HandleToJson(jdata["indirectCommandsLayout"], meta_struct.indirectCommandsLayout, options); + FieldToJson(jdata["maxSequencesCount"], decoded_value.maxSequencesCount, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceInheritedViewportScissorFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV& meta_struct = *data; + const VkPhysicalDeviceInheritedViewportScissorFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceInheritedViewportScissorFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["dedicatedAllocationImageAliasing"] = static_cast(decoded_value.dedicatedAllocationImageAliasing); + jdata["inheritedViewportScissor2D"] = static_cast(decoded_value.inheritedViewportScissor2D); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferInheritanceViewportScissorInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT& meta_struct = *data; + const VkCommandBufferInheritanceViewportScissorInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkCommandBufferInheritanceViewportScissorInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["bufferDeviceAddress"] = static_cast(decoded_value.bufferDeviceAddress); - jdata["bufferDeviceAddressCaptureReplay"] = static_cast(decoded_value.bufferDeviceAddressCaptureReplay); - jdata["bufferDeviceAddressMultiDevice"] = static_cast(decoded_value.bufferDeviceAddressMultiDevice); + jdata["viewportScissor2D"] = static_cast(decoded_value.viewportScissor2D); + FieldToJson(jdata["viewportDepthCount"], decoded_value.viewportDepthCount, options); + FieldToJson(jdata["pViewportDepths"], meta_struct.pViewportDepths, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferDeviceAddressCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBufferDeviceAddressCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkBufferDeviceAddressCreateInfoEXT& meta_struct = *data; + const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["deviceAddress"], to_hex_variable_width(decoded_value.deviceAddress), options); + jdata["texelBufferAlignment"] = static_cast(decoded_value.texelBufferAlignment); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkValidationFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassTransformBeginInfoQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkValidationFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkValidationFeaturesEXT& meta_struct = *data; + const VkRenderPassTransformBeginInfoQCOM& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassTransformBeginInfoQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["enabledValidationFeatureCount"], decoded_value.enabledValidationFeatureCount, options); - FieldToJson(jdata["pEnabledValidationFeatures"], meta_struct.pEnabledValidationFeatures, options); - FieldToJson(jdata["disabledValidationFeatureCount"], decoded_value.disabledValidationFeatureCount, options); - FieldToJson(jdata["pDisabledValidationFeatures"], meta_struct.pDisabledValidationFeatures, options); + FieldToJson(jdata["transform"], decoded_value.transform, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCooperativeMatrixPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferInheritanceRenderPassTransformInfoQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCooperativeMatrixPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkCooperativeMatrixPropertiesNV& meta_struct = *data; + const VkCommandBufferInheritanceRenderPassTransformInfoQCOM& decoded_value = *data->decoded_value; + const Decoded_VkCommandBufferInheritanceRenderPassTransformInfoQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["MSize"], decoded_value.MSize, options); - FieldToJson(jdata["NSize"], decoded_value.NSize, options); - FieldToJson(jdata["KSize"], decoded_value.KSize, options); - FieldToJson(jdata["AType"], decoded_value.AType, options); - FieldToJson(jdata["BType"], decoded_value.BType, options); - FieldToJson(jdata["CType"], decoded_value.CType, options); - FieldToJson(jdata["DType"], decoded_value.DType, options); - FieldToJson(jdata["scope"], decoded_value.scope, options); + FieldToJson(jdata["transform"], decoded_value.transform, options); + FieldToJson(jdata["renderArea"], meta_struct.renderArea, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDepthBiasControlFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceCooperativeMatrixFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceCooperativeMatrixFeaturesNV& meta_struct = *data; + const VkPhysicalDeviceDepthBiasControlFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDepthBiasControlFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["cooperativeMatrix"] = static_cast(decoded_value.cooperativeMatrix); - jdata["cooperativeMatrixRobustBufferAccess"] = static_cast(decoded_value.cooperativeMatrixRobustBufferAccess); + jdata["depthBiasControl"] = static_cast(decoded_value.depthBiasControl); + jdata["leastRepresentableValueForceUnormRepresentation"] = static_cast(decoded_value.leastRepresentableValueForceUnormRepresentation); + jdata["floatRepresentation"] = static_cast(decoded_value.floatRepresentation); + jdata["depthBiasExact"] = static_cast(decoded_value.depthBiasExact); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDepthBiasInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceCooperativeMatrixPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceCooperativeMatrixPropertiesNV& meta_struct = *data; + const VkDepthBiasInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDepthBiasInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkShaderStageFlags_t(),jdata["cooperativeMatrixSupportedStages"], decoded_value.cooperativeMatrixSupportedStages, options); + FieldToJson(jdata["depthBiasConstantFactor"], decoded_value.depthBiasConstantFactor, options); + FieldToJson(jdata["depthBiasClamp"], decoded_value.depthBiasClamp, options); + FieldToJson(jdata["depthBiasSlopeFactor"], decoded_value.depthBiasSlopeFactor, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCoverageReductionModeFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDepthBiasRepresentationInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceCoverageReductionModeFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceCoverageReductionModeFeaturesNV& meta_struct = *data; + const VkDepthBiasRepresentationInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDepthBiasRepresentationInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["coverageReductionMode"] = static_cast(decoded_value.coverageReductionMode); + FieldToJson(jdata["depthBiasRepresentation"], decoded_value.depthBiasRepresentation, options); + jdata["depthBiasExact"] = static_cast(decoded_value.depthBiasExact); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCoverageReductionStateCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineCoverageReductionStateCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkPipelineCoverageReductionStateCreateInfoNV& meta_struct = *data; + const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPipelineCoverageReductionStateCreateFlagsNV_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["coverageReductionMode"], decoded_value.coverageReductionMode, options); + jdata["deviceMemoryReport"] = static_cast(decoded_value.deviceMemoryReport); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFramebufferMixedSamplesCombinationNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceMemoryReportCallbackDataEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkFramebufferMixedSamplesCombinationNV& decoded_value = *data->decoded_value; - const Decoded_VkFramebufferMixedSamplesCombinationNV& meta_struct = *data; + const VkDeviceMemoryReportCallbackDataEXT& decoded_value = *data->decoded_value; + const Decoded_VkDeviceMemoryReportCallbackDataEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["coverageReductionMode"], decoded_value.coverageReductionMode, options); - FieldToJson(jdata["rasterizationSamples"], decoded_value.rasterizationSamples, options); - FieldToJson(VkSampleCountFlags_t(),jdata["depthStencilSamples"], decoded_value.depthStencilSamples, options); - FieldToJson(VkSampleCountFlags_t(),jdata["colorSamples"], decoded_value.colorSamples, options); + FieldToJson(VkDeviceMemoryReportFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["type"], decoded_value.type, options); + FieldToJson(jdata["memoryObjectId"], decoded_value.memoryObjectId, options); + FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["objectType"], decoded_value.objectType, options); + FieldToJson(jdata["objectHandle"], decoded_value.objectHandle, options); + FieldToJson(jdata["heapIndex"], decoded_value.heapIndex, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceDeviceMemoryReportCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT& meta_struct = *data; + const VkDeviceDeviceMemoryReportCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDeviceDeviceMemoryReportCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["fragmentShaderSampleInterlock"] = static_cast(decoded_value.fragmentShaderSampleInterlock); - jdata["fragmentShaderPixelInterlock"] = static_cast(decoded_value.fragmentShaderPixelInterlock); - jdata["fragmentShaderShadingRateInterlock"] = static_cast(decoded_value.fragmentShaderShadingRateInterlock); + FieldToJson(VkDeviceMemoryReportFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["pfnUserCallback"], to_hex_variable_width(meta_struct.pfnUserCallback), options); + FieldToJson(jdata["pUserData"], to_hex_variable_width(meta_struct.pUserData), options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerCustomBorderColorCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT& meta_struct = *data; + const VkSamplerCustomBorderColorCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkSamplerCustomBorderColorCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["ycbcrImageArrays"] = static_cast(decoded_value.ycbcrImageArrays); + FieldToJson(jdata["customBorderColor"], meta_struct.customBorderColor, options); + FieldToJson(jdata["format"], decoded_value.format, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceProvokingVertexFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCustomBorderColorPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceProvokingVertexFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceProvokingVertexFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceCustomBorderColorPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceCustomBorderColorPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["provokingVertexLast"] = static_cast(decoded_value.provokingVertexLast); - jdata["transformFeedbackPreservesProvokingVertex"] = static_cast(decoded_value.transformFeedbackPreservesProvokingVertex); + FieldToJson(jdata["maxCustomBorderColorSamplers"], decoded_value.maxCustomBorderColorSamplers, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceProvokingVertexPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCustomBorderColorFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceProvokingVertexPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceProvokingVertexPropertiesEXT& meta_struct = *data; + const VkPhysicalDeviceCustomBorderColorFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceCustomBorderColorFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["provokingVertexModePerPipeline"] = static_cast(decoded_value.provokingVertexModePerPipeline); - jdata["transformFeedbackPreservesTriangleFanProvokingVertex"] = static_cast(decoded_value.transformFeedbackPreservesTriangleFanProvokingVertex); + jdata["customBorderColors"] = static_cast(decoded_value.customBorderColors); + jdata["customBorderColorWithoutFormat"] = static_cast(decoded_value.customBorderColorWithoutFormat); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkPipelineRasterizationProvokingVertexStateCreateInfoEXT& meta_struct = *data; + const VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["provokingVertexMode"], decoded_value.provokingVertexMode, options); + jdata["textureCompressionASTC_3D"] = static_cast(decoded_value.textureCompressionASTC_3D); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceFullScreenExclusiveInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentBarrierFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfaceFullScreenExclusiveInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkSurfaceFullScreenExclusiveInfoEXT& meta_struct = *data; + const VkPhysicalDevicePresentBarrierFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePresentBarrierFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["fullScreenExclusive"], decoded_value.fullScreenExclusive, options); + jdata["presentBarrier"] = static_cast(decoded_value.presentBarrier); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilitiesFullScreenExclusiveEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilitiesPresentBarrierNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfaceCapabilitiesFullScreenExclusiveEXT& decoded_value = *data->decoded_value; - const Decoded_VkSurfaceCapabilitiesFullScreenExclusiveEXT& meta_struct = *data; + const VkSurfaceCapabilitiesPresentBarrierNV& decoded_value = *data->decoded_value; + const Decoded_VkSurfaceCapabilitiesPresentBarrierNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["fullScreenExclusiveSupported"] = static_cast(decoded_value.fullScreenExclusiveSupported); + jdata["presentBarrierSupported"] = static_cast(decoded_value.presentBarrierSupported); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceFullScreenExclusiveWin32InfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainPresentBarrierCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfaceFullScreenExclusiveWin32InfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkSurfaceFullScreenExclusiveWin32InfoEXT& meta_struct = *data; + const VkSwapchainPresentBarrierCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkSwapchainPresentBarrierCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["hmonitor"], meta_struct.hmonitor, options); + jdata["presentBarrierEnable"] = static_cast(decoded_value.presentBarrierEnable); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkHeadlessSurfaceCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDiagnosticsConfigFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkHeadlessSurfaceCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkHeadlessSurfaceCreateInfoEXT& meta_struct = *data; + const VkPhysicalDeviceDiagnosticsConfigFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDiagnosticsConfigFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkHeadlessSurfaceCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + jdata["diagnosticsConfig"] = static_cast(decoded_value.diagnosticsConfig); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceDiagnosticsConfigCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT& meta_struct = *data; + const VkDeviceDiagnosticsConfigCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkDeviceDiagnosticsConfigCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderBufferFloat32Atomics"] = static_cast(decoded_value.shaderBufferFloat32Atomics); - jdata["shaderBufferFloat32AtomicAdd"] = static_cast(decoded_value.shaderBufferFloat32AtomicAdd); - jdata["shaderBufferFloat64Atomics"] = static_cast(decoded_value.shaderBufferFloat64Atomics); - jdata["shaderBufferFloat64AtomicAdd"] = static_cast(decoded_value.shaderBufferFloat64AtomicAdd); - jdata["shaderSharedFloat32Atomics"] = static_cast(decoded_value.shaderSharedFloat32Atomics); - jdata["shaderSharedFloat32AtomicAdd"] = static_cast(decoded_value.shaderSharedFloat32AtomicAdd); - jdata["shaderSharedFloat64Atomics"] = static_cast(decoded_value.shaderSharedFloat64Atomics); - jdata["shaderSharedFloat64AtomicAdd"] = static_cast(decoded_value.shaderSharedFloat64AtomicAdd); - jdata["shaderImageFloat32Atomics"] = static_cast(decoded_value.shaderImageFloat32Atomics); - jdata["shaderImageFloat32AtomicAdd"] = static_cast(decoded_value.shaderImageFloat32AtomicAdd); - jdata["sparseImageFloat32Atomics"] = static_cast(decoded_value.sparseImageFloat32Atomics); - jdata["sparseImageFloat32AtomicAdd"] = static_cast(decoded_value.sparseImageFloat32AtomicAdd); + FieldToJson(VkDeviceDiagnosticsConfigFlagsNV_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTileShadingFeaturesQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceTileShadingFeaturesQCOM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceTileShadingFeaturesQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["extendedDynamicState"] = static_cast(decoded_value.extendedDynamicState); + jdata["tileShading"] = static_cast(decoded_value.tileShading); + jdata["tileShadingFragmentStage"] = static_cast(decoded_value.tileShadingFragmentStage); + jdata["tileShadingColorAttachments"] = static_cast(decoded_value.tileShadingColorAttachments); + jdata["tileShadingDepthAttachments"] = static_cast(decoded_value.tileShadingDepthAttachments); + jdata["tileShadingStencilAttachments"] = static_cast(decoded_value.tileShadingStencilAttachments); + jdata["tileShadingInputAttachments"] = static_cast(decoded_value.tileShadingInputAttachments); + jdata["tileShadingSampledAttachments"] = static_cast(decoded_value.tileShadingSampledAttachments); + jdata["tileShadingPerTileDraw"] = static_cast(decoded_value.tileShadingPerTileDraw); + jdata["tileShadingPerTileDispatch"] = static_cast(decoded_value.tileShadingPerTileDispatch); + jdata["tileShadingDispatchTile"] = static_cast(decoded_value.tileShadingDispatchTile); + jdata["tileShadingApron"] = static_cast(decoded_value.tileShadingApron); + jdata["tileShadingAnisotropicApron"] = static_cast(decoded_value.tileShadingAnisotropicApron); + jdata["tileShadingAtomicOps"] = static_cast(decoded_value.tileShadingAtomicOps); + jdata["tileShadingImageProcessing"] = static_cast(decoded_value.tileShadingImageProcessing); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTileShadingPropertiesQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceTileShadingPropertiesQCOM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceTileShadingPropertiesQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["memoryMapPlaced"] = static_cast(decoded_value.memoryMapPlaced); - jdata["memoryMapRangePlaced"] = static_cast(decoded_value.memoryMapRangePlaced); - jdata["memoryUnmapReserve"] = static_cast(decoded_value.memoryUnmapReserve); + FieldToJson(jdata["maxApronSize"], decoded_value.maxApronSize, options); + jdata["preferNonCoherent"] = static_cast(decoded_value.preferNonCoherent); + FieldToJson(jdata["tileGranularity"], meta_struct.tileGranularity, options); + FieldToJson(jdata["maxTileShadingRate"], meta_struct.maxTileShadingRate, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassTileShadingCreateInfoQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMapMemoryPlacedPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMapMemoryPlacedPropertiesEXT& meta_struct = *data; + const VkRenderPassTileShadingCreateInfoQCOM& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassTileShadingCreateInfoQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["minPlacedMemoryMapAlignment"], decoded_value.minPlacedMemoryMapAlignment, options); + FieldToJson(VkTileShadingRenderPassFlagsQCOM_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["tileApronSize"], meta_struct.tileApronSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryMapPlacedInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerTileBeginInfoQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryMapPlacedInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkMemoryMapPlacedInfoEXT& meta_struct = *data; + const VkPerTileBeginInfoQCOM& decoded_value = *data->decoded_value; + const Decoded_VkPerTileBeginInfoQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pPlacedAddress"], meta_struct.pPlacedAddress, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerTileEndInfoQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT& meta_struct = *data; + const VkPerTileEndInfoQCOM& decoded_value = *data->decoded_value; + const Decoded_VkPerTileEndInfoQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderBufferFloat16Atomics"] = static_cast(decoded_value.shaderBufferFloat16Atomics); - jdata["shaderBufferFloat16AtomicAdd"] = static_cast(decoded_value.shaderBufferFloat16AtomicAdd); - jdata["shaderBufferFloat16AtomicMinMax"] = static_cast(decoded_value.shaderBufferFloat16AtomicMinMax); - jdata["shaderBufferFloat32AtomicMinMax"] = static_cast(decoded_value.shaderBufferFloat32AtomicMinMax); - jdata["shaderBufferFloat64AtomicMinMax"] = static_cast(decoded_value.shaderBufferFloat64AtomicMinMax); - jdata["shaderSharedFloat16Atomics"] = static_cast(decoded_value.shaderSharedFloat16Atomics); - jdata["shaderSharedFloat16AtomicAdd"] = static_cast(decoded_value.shaderSharedFloat16AtomicAdd); - jdata["shaderSharedFloat16AtomicMinMax"] = static_cast(decoded_value.shaderSharedFloat16AtomicMinMax); - jdata["shaderSharedFloat32AtomicMinMax"] = static_cast(decoded_value.shaderSharedFloat32AtomicMinMax); - jdata["shaderSharedFloat64AtomicMinMax"] = static_cast(decoded_value.shaderSharedFloat64AtomicMinMax); - jdata["shaderImageFloat32AtomicMinMax"] = static_cast(decoded_value.shaderImageFloat32AtomicMinMax); - jdata["sparseImageFloat32AtomicMinMax"] = static_cast(decoded_value.sparseImageFloat32AtomicMinMax); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDispatchTileInfoQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV& meta_struct = *data; + const VkDispatchTileInfoQCOM& decoded_value = *data->decoded_value; + const Decoded_VkDispatchTileInfoQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxGraphicsShaderGroupCount"], decoded_value.maxGraphicsShaderGroupCount, options); - FieldToJson(jdata["maxIndirectSequenceCount"], decoded_value.maxIndirectSequenceCount, options); - FieldToJson(jdata["maxIndirectCommandsTokenCount"], decoded_value.maxIndirectCommandsTokenCount, options); - FieldToJson(jdata["maxIndirectCommandsStreamCount"], decoded_value.maxIndirectCommandsStreamCount, options); - FieldToJson(jdata["maxIndirectCommandsTokenOffset"], decoded_value.maxIndirectCommandsTokenOffset, options); - FieldToJson(jdata["maxIndirectCommandsStreamStride"], decoded_value.maxIndirectCommandsStreamStride, options); - FieldToJson(jdata["minSequencesCountBufferOffsetAlignment"], decoded_value.minSequencesCountBufferOffsetAlignment, options); - FieldToJson(jdata["minSequencesIndexBufferOffsetAlignment"], decoded_value.minSequencesIndexBufferOffsetAlignment, options); - FieldToJson(jdata["minIndirectCommandsBufferOffsetAlignment"], decoded_value.minIndirectCommandsBufferOffsetAlignment, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueryLowLatencySupportNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV& meta_struct = *data; + const VkQueryLowLatencySupportNV& decoded_value = *data->decoded_value; + const Decoded_VkQueryLowLatencySupportNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["deviceGeneratedCommands"] = static_cast(decoded_value.deviceGeneratedCommands); + FieldToJson(jdata["pQueriedLowLatencyData"], meta_struct.pQueriedLowLatencyData, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGraphicsShaderGroupCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDescriptorBufferPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkGraphicsShaderGroupCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkGraphicsShaderGroupCreateInfoNV& meta_struct = *data; + const VkPhysicalDeviceDescriptorBufferPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDescriptorBufferPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stageCount"], decoded_value.stageCount, options); - FieldToJson(jdata["pStages"], meta_struct.pStages, options); - FieldToJson(jdata["pVertexInputState"], meta_struct.pVertexInputState, options); - FieldToJson(jdata["pTessellationState"], meta_struct.pTessellationState, options); + jdata["combinedImageSamplerDescriptorSingleArray"] = static_cast(decoded_value.combinedImageSamplerDescriptorSingleArray); + jdata["bufferlessPushDescriptors"] = static_cast(decoded_value.bufferlessPushDescriptors); + jdata["allowSamplerImageViewPostSubmitCreation"] = static_cast(decoded_value.allowSamplerImageViewPostSubmitCreation); + FieldToJson(jdata["descriptorBufferOffsetAlignment"], decoded_value.descriptorBufferOffsetAlignment, options); + FieldToJson(jdata["maxDescriptorBufferBindings"], decoded_value.maxDescriptorBufferBindings, options); + FieldToJson(jdata["maxResourceDescriptorBufferBindings"], decoded_value.maxResourceDescriptorBufferBindings, options); + FieldToJson(jdata["maxSamplerDescriptorBufferBindings"], decoded_value.maxSamplerDescriptorBufferBindings, options); + FieldToJson(jdata["maxEmbeddedImmutableSamplerBindings"], decoded_value.maxEmbeddedImmutableSamplerBindings, options); + FieldToJson(jdata["maxEmbeddedImmutableSamplers"], decoded_value.maxEmbeddedImmutableSamplers, options); + FieldToJson(jdata["bufferCaptureReplayDescriptorDataSize"], decoded_value.bufferCaptureReplayDescriptorDataSize, options); + FieldToJson(jdata["imageCaptureReplayDescriptorDataSize"], decoded_value.imageCaptureReplayDescriptorDataSize, options); + FieldToJson(jdata["imageViewCaptureReplayDescriptorDataSize"], decoded_value.imageViewCaptureReplayDescriptorDataSize, options); + FieldToJson(jdata["samplerCaptureReplayDescriptorDataSize"], decoded_value.samplerCaptureReplayDescriptorDataSize, options); + FieldToJson(jdata["accelerationStructureCaptureReplayDescriptorDataSize"], decoded_value.accelerationStructureCaptureReplayDescriptorDataSize, options); + FieldToJson(jdata["samplerDescriptorSize"], decoded_value.samplerDescriptorSize, options); + FieldToJson(jdata["combinedImageSamplerDescriptorSize"], decoded_value.combinedImageSamplerDescriptorSize, options); + FieldToJson(jdata["sampledImageDescriptorSize"], decoded_value.sampledImageDescriptorSize, options); + FieldToJson(jdata["storageImageDescriptorSize"], decoded_value.storageImageDescriptorSize, options); + FieldToJson(jdata["uniformTexelBufferDescriptorSize"], decoded_value.uniformTexelBufferDescriptorSize, options); + FieldToJson(jdata["robustUniformTexelBufferDescriptorSize"], decoded_value.robustUniformTexelBufferDescriptorSize, options); + FieldToJson(jdata["storageTexelBufferDescriptorSize"], decoded_value.storageTexelBufferDescriptorSize, options); + FieldToJson(jdata["robustStorageTexelBufferDescriptorSize"], decoded_value.robustStorageTexelBufferDescriptorSize, options); + FieldToJson(jdata["uniformBufferDescriptorSize"], decoded_value.uniformBufferDescriptorSize, options); + FieldToJson(jdata["robustUniformBufferDescriptorSize"], decoded_value.robustUniformBufferDescriptorSize, options); + FieldToJson(jdata["storageBufferDescriptorSize"], decoded_value.storageBufferDescriptorSize, options); + FieldToJson(jdata["robustStorageBufferDescriptorSize"], decoded_value.robustStorageBufferDescriptorSize, options); + FieldToJson(jdata["inputAttachmentDescriptorSize"], decoded_value.inputAttachmentDescriptorSize, options); + FieldToJson(jdata["accelerationStructureDescriptorSize"], decoded_value.accelerationStructureDescriptorSize, options); + FieldToJson(jdata["maxSamplerDescriptorBufferRange"], decoded_value.maxSamplerDescriptorBufferRange, options); + FieldToJson(jdata["maxResourceDescriptorBufferRange"], decoded_value.maxResourceDescriptorBufferRange, options); + FieldToJson(jdata["samplerDescriptorBufferAddressSpaceSize"], decoded_value.samplerDescriptorBufferAddressSpaceSize, options); + FieldToJson(jdata["resourceDescriptorBufferAddressSpaceSize"], decoded_value.resourceDescriptorBufferAddressSpaceSize, options); + FieldToJson(jdata["descriptorBufferAddressSpaceSize"], decoded_value.descriptorBufferAddressSpaceSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGraphicsPipelineShaderGroupsCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkGraphicsPipelineShaderGroupsCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkGraphicsPipelineShaderGroupsCreateInfoNV& meta_struct = *data; + const VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["groupCount"], decoded_value.groupCount, options); - FieldToJson(jdata["pGroups"], meta_struct.pGroups, options); - FieldToJson(jdata["pipelineCount"], decoded_value.pipelineCount, options); - HandleToJson(jdata["pPipelines"], &meta_struct.pPipelines, options); + FieldToJson(jdata["combinedImageSamplerDensityMapDescriptorSize"], decoded_value.combinedImageSamplerDensityMapDescriptorSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindShaderGroupIndirectCommandNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDescriptorBufferFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindShaderGroupIndirectCommandNV& decoded_value = *data->decoded_value; - const Decoded_VkBindShaderGroupIndirectCommandNV& meta_struct = *data; + const VkPhysicalDeviceDescriptorBufferFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDescriptorBufferFeaturesEXT& meta_struct = *data; - FieldToJson(jdata["groupIndex"], decoded_value.groupIndex, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["descriptorBuffer"] = static_cast(decoded_value.descriptorBuffer); + jdata["descriptorBufferCaptureReplay"] = static_cast(decoded_value.descriptorBufferCaptureReplay); + jdata["descriptorBufferImageLayoutIgnored"] = static_cast(decoded_value.descriptorBufferImageLayoutIgnored); + jdata["descriptorBufferPushDescriptors"] = static_cast(decoded_value.descriptorBufferPushDescriptors); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindIndexBufferIndirectCommandNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorAddressInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindIndexBufferIndirectCommandNV& decoded_value = *data->decoded_value; - const Decoded_VkBindIndexBufferIndirectCommandNV& meta_struct = *data; + const VkDescriptorAddressInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorAddressInfoEXT& meta_struct = *data; - FieldToJson(jdata["bufferAddress"], to_hex_variable_width(decoded_value.bufferAddress), options); - FieldToJson(jdata["size"], decoded_value.size, options); - FieldToJson(jdata["indexType"], decoded_value.indexType, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["address"], to_hex_variable_width(decoded_value.address), options); + FieldToJson(jdata["range"], decoded_value.range, options); + FieldToJson(jdata["format"], decoded_value.format, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindVertexBufferIndirectCommandNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorBufferBindingInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindVertexBufferIndirectCommandNV& decoded_value = *data->decoded_value; - const Decoded_VkBindVertexBufferIndirectCommandNV& meta_struct = *data; + const VkDescriptorBufferBindingInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorBufferBindingInfoEXT& meta_struct = *data; - FieldToJson(jdata["bufferAddress"], to_hex_variable_width(decoded_value.bufferAddress), options); - FieldToJson(jdata["size"], decoded_value.size, options); - FieldToJson(jdata["stride"], decoded_value.stride, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["address"], to_hex_variable_width(decoded_value.address), options); + FieldToJson(VkBufferUsageFlags_t(),jdata["usage"], decoded_value.usage, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSetStateFlagsIndirectCommandNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSetStateFlagsIndirectCommandNV& decoded_value = *data->decoded_value; - const Decoded_VkSetStateFlagsIndirectCommandNV& meta_struct = *data; + const VkDescriptorBufferBindingPushDescriptorBufferHandleEXT& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorBufferBindingPushDescriptorBufferHandleEXT& meta_struct = *data; - FieldToJson(jdata["data"], decoded_value.data, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["buffer"], meta_struct.buffer, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkIndirectCommandsStreamNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferCaptureDescriptorDataInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkIndirectCommandsStreamNV& decoded_value = *data->decoded_value; - const Decoded_VkIndirectCommandsStreamNV& meta_struct = *data; + const VkBufferCaptureDescriptorDataInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkBufferCaptureDescriptorDataInfoEXT& meta_struct = *data; + FieldToJson(jdata["sType"], decoded_value.sType, options); HandleToJson(jdata["buffer"], meta_struct.buffer, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkIndirectCommandsLayoutTokenNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCaptureDescriptorDataInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkIndirectCommandsLayoutTokenNV& decoded_value = *data->decoded_value; - const Decoded_VkIndirectCommandsLayoutTokenNV& meta_struct = *data; + const VkImageCaptureDescriptorDataInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkImageCaptureDescriptorDataInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["tokenType"], decoded_value.tokenType, options); - FieldToJson(jdata["stream"], decoded_value.stream, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); - FieldToJson(jdata["vertexBindingUnit"], decoded_value.vertexBindingUnit, options); - jdata["vertexDynamicStride"] = static_cast(decoded_value.vertexDynamicStride); - HandleToJson(jdata["pushconstantPipelineLayout"], meta_struct.pushconstantPipelineLayout, options); - FieldToJson(VkShaderStageFlags_t(),jdata["pushconstantShaderStageFlags"], decoded_value.pushconstantShaderStageFlags, options); - FieldToJson(jdata["pushconstantOffset"], decoded_value.pushconstantOffset, options); - FieldToJson(jdata["pushconstantSize"], decoded_value.pushconstantSize, options); - FieldToJson(VkIndirectStateFlagsNV_t(),jdata["indirectStateFlags"], decoded_value.indirectStateFlags, options); - FieldToJson(jdata["indexTypeCount"], decoded_value.indexTypeCount, options); - FieldToJson(jdata["pIndexTypes"], meta_struct.pIndexTypes, options); - FieldToJson(jdata["pIndexTypeValues"], meta_struct.pIndexTypeValues, options); + HandleToJson(jdata["image"], meta_struct.image, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkIndirectCommandsLayoutCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewCaptureDescriptorDataInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkIndirectCommandsLayoutCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkIndirectCommandsLayoutCreateInfoNV& meta_struct = *data; + const VkImageViewCaptureDescriptorDataInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkImageViewCaptureDescriptorDataInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkIndirectCommandsLayoutUsageFlagsNV_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["pipelineBindPoint"], decoded_value.pipelineBindPoint, options); - FieldToJson(jdata["tokenCount"], decoded_value.tokenCount, options); - FieldToJson(jdata["pTokens"], meta_struct.pTokens, options); - FieldToJson(jdata["streamCount"], decoded_value.streamCount, options); - FieldToJson(jdata["pStreamStrides"], meta_struct.pStreamStrides, options); + HandleToJson(jdata["imageView"], meta_struct.imageView, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGeneratedCommandsInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerCaptureDescriptorDataInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkGeneratedCommandsInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkGeneratedCommandsInfoNV& meta_struct = *data; + const VkSamplerCaptureDescriptorDataInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkSamplerCaptureDescriptorDataInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pipelineBindPoint"], decoded_value.pipelineBindPoint, options); - HandleToJson(jdata["pipeline"], meta_struct.pipeline, options); - HandleToJson(jdata["indirectCommandsLayout"], meta_struct.indirectCommandsLayout, options); - FieldToJson(jdata["streamCount"], decoded_value.streamCount, options); - FieldToJson(jdata["pStreams"], meta_struct.pStreams, options); - FieldToJson(jdata["sequencesCount"], decoded_value.sequencesCount, options); - HandleToJson(jdata["preprocessBuffer"], meta_struct.preprocessBuffer, options); - FieldToJson(jdata["preprocessOffset"], decoded_value.preprocessOffset, options); - FieldToJson(jdata["preprocessSize"], decoded_value.preprocessSize, options); - HandleToJson(jdata["sequencesCountBuffer"], meta_struct.sequencesCountBuffer, options); - FieldToJson(jdata["sequencesCountOffset"], decoded_value.sequencesCountOffset, options); - HandleToJson(jdata["sequencesIndexBuffer"], meta_struct.sequencesIndexBuffer, options); - FieldToJson(jdata["sequencesIndexOffset"], decoded_value.sequencesIndexOffset, options); + HandleToJson(jdata["sampler"], meta_struct.sampler, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGeneratedCommandsMemoryRequirementsInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOpaqueCaptureDescriptorDataCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkGeneratedCommandsMemoryRequirementsInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkGeneratedCommandsMemoryRequirementsInfoNV& meta_struct = *data; + const VkOpaqueCaptureDescriptorDataCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkOpaqueCaptureDescriptorDataCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pipelineBindPoint"], decoded_value.pipelineBindPoint, options); - HandleToJson(jdata["pipeline"], meta_struct.pipeline, options); - HandleToJson(jdata["indirectCommandsLayout"], meta_struct.indirectCommandsLayout, options); - FieldToJson(jdata["maxSequencesCount"], decoded_value.maxSequencesCount, options); + FieldToJson(jdata["opaqueCaptureDescriptorData"], meta_struct.opaqueCaptureDescriptorData, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceInheritedViewportScissorFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureCaptureDescriptorDataInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceInheritedViewportScissorFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceInheritedViewportScissorFeaturesNV& meta_struct = *data; + const VkAccelerationStructureCaptureDescriptorDataInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkAccelerationStructureCaptureDescriptorDataInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["inheritedViewportScissor2D"] = static_cast(decoded_value.inheritedViewportScissor2D); + HandleToJson(jdata["accelerationStructure"], meta_struct.accelerationStructure, options); + HandleToJson(jdata["accelerationStructureNV"], meta_struct.accelerationStructureNV, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferInheritanceViewportScissorInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCommandBufferInheritanceViewportScissorInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkCommandBufferInheritanceViewportScissorInfoNV& meta_struct = *data; + const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["viewportScissor2D"] = static_cast(decoded_value.viewportScissor2D); - FieldToJson(jdata["viewportDepthCount"], decoded_value.viewportDepthCount, options); - FieldToJson(jdata["pViewportDepths"], meta_struct.pViewportDepths, options); + jdata["graphicsPipelineLibrary"] = static_cast(decoded_value.graphicsPipelineLibrary); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["texelBufferAlignment"] = static_cast(decoded_value.texelBufferAlignment); + jdata["graphicsPipelineLibraryFastLinking"] = static_cast(decoded_value.graphicsPipelineLibraryFastLinking); + jdata["graphicsPipelineLibraryIndependentInterpolationDecoration"] = static_cast(decoded_value.graphicsPipelineLibraryIndependentInterpolationDecoration); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassTransformBeginInfoQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGraphicsPipelineLibraryCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassTransformBeginInfoQCOM& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassTransformBeginInfoQCOM& meta_struct = *data; + const VkGraphicsPipelineLibraryCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkGraphicsPipelineLibraryCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["transform"], decoded_value.transform, options); + FieldToJson(VkGraphicsPipelineLibraryFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferInheritanceRenderPassTransformInfoQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCommandBufferInheritanceRenderPassTransformInfoQCOM& decoded_value = *data->decoded_value; - const Decoded_VkCommandBufferInheritanceRenderPassTransformInfoQCOM& meta_struct = *data; + const VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["transform"], decoded_value.transform, options); - FieldToJson(jdata["renderArea"], meta_struct.renderArea, options); + jdata["shaderEarlyAndLateFragmentTests"] = static_cast(decoded_value.shaderEarlyAndLateFragmentTests); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDepthBiasControlFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDepthBiasControlFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDepthBiasControlFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["depthBiasControl"] = static_cast(decoded_value.depthBiasControl); - jdata["leastRepresentableValueForceUnormRepresentation"] = static_cast(decoded_value.leastRepresentableValueForceUnormRepresentation); - jdata["floatRepresentation"] = static_cast(decoded_value.floatRepresentation); - jdata["depthBiasExact"] = static_cast(decoded_value.depthBiasExact); + jdata["fragmentShadingRateEnums"] = static_cast(decoded_value.fragmentShadingRateEnums); + jdata["supersampleFragmentShadingRates"] = static_cast(decoded_value.supersampleFragmentShadingRates); + jdata["noInvocationFragmentShadingRates"] = static_cast(decoded_value.noInvocationFragmentShadingRates); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDepthBiasInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDepthBiasInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDepthBiasInfoEXT& meta_struct = *data; + const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["depthBiasConstantFactor"], decoded_value.depthBiasConstantFactor, options); - FieldToJson(jdata["depthBiasClamp"], decoded_value.depthBiasClamp, options); - FieldToJson(jdata["depthBiasSlopeFactor"], decoded_value.depthBiasSlopeFactor, options); + FieldToJson(jdata["maxFragmentShadingRateInvocationCount"], decoded_value.maxFragmentShadingRateInvocationCount, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDepthBiasRepresentationInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineFragmentShadingRateEnumStateCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDepthBiasRepresentationInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDepthBiasRepresentationInfoEXT& meta_struct = *data; + const VkPipelineFragmentShadingRateEnumStateCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkPipelineFragmentShadingRateEnumStateCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["depthBiasRepresentation"], decoded_value.depthBiasRepresentation, options); - jdata["depthBiasExact"] = static_cast(decoded_value.depthBiasExact); + FieldToJson(jdata["shadingRateType"], decoded_value.shadingRateType, options); + FieldToJson(jdata["shadingRate"], decoded_value.shadingRate, options); + FieldToJson(jdata["combinerOps"], &meta_struct.combinerOps, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureGeometryMotionTrianglesDataNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT& meta_struct = *data; + const VkAccelerationStructureGeometryMotionTrianglesDataNV& decoded_value = *data->decoded_value; + const Decoded_VkAccelerationStructureGeometryMotionTrianglesDataNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["deviceMemoryReport"] = static_cast(decoded_value.deviceMemoryReport); + FieldToJson(jdata["vertexData"], meta_struct.vertexData, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceMemoryReportCallbackDataEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureMotionInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceMemoryReportCallbackDataEXT& decoded_value = *data->decoded_value; - const Decoded_VkDeviceMemoryReportCallbackDataEXT& meta_struct = *data; + const VkAccelerationStructureMotionInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkAccelerationStructureMotionInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDeviceMemoryReportFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["type"], decoded_value.type, options); - FieldToJson(jdata["memoryObjectId"], decoded_value.memoryObjectId, options); - FieldToJson(jdata["size"], decoded_value.size, options); - FieldToJson(jdata["objectType"], decoded_value.objectType, options); - FieldToJson(jdata["objectHandle"], decoded_value.objectHandle, options); - FieldToJson(jdata["heapIndex"], decoded_value.heapIndex, options); + FieldToJson(jdata["maxInstances"], decoded_value.maxInstances, options); + FieldToJson(VkAccelerationStructureMotionInfoFlagsNV_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceDeviceMemoryReportCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureMatrixMotionInstanceNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceDeviceMemoryReportCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDeviceDeviceMemoryReportCreateInfoEXT& meta_struct = *data; + const VkAccelerationStructureMatrixMotionInstanceNV& decoded_value = *data->decoded_value; + const Decoded_VkAccelerationStructureMatrixMotionInstanceNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDeviceMemoryReportFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["pfnUserCallback"], to_hex_variable_width(meta_struct.pfnUserCallback), options); - FieldToJson(jdata["pUserData"], to_hex_variable_width(meta_struct.pUserData), options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["transformT0"], meta_struct.transformT0, options); + FieldToJson(jdata["transformT1"], meta_struct.transformT1, options); + FieldToJson(jdata["instanceCustomIndex"], decoded_value.instanceCustomIndex, options); + FieldToJson(jdata["mask"], decoded_value.mask, options); + FieldToJson(jdata["instanceShaderBindingTableRecordOffset"], decoded_value.instanceShaderBindingTableRecordOffset, options); + FieldToJson(VkGeometryInstanceFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["accelerationStructureReference"], decoded_value.accelerationStructureReference, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerCustomBorderColorCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSRTDataNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSamplerCustomBorderColorCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkSamplerCustomBorderColorCreateInfoEXT& meta_struct = *data; + const VkSRTDataNV& decoded_value = *data->decoded_value; + const Decoded_VkSRTDataNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["customBorderColor"], meta_struct.customBorderColor, options); - FieldToJson(jdata["format"], decoded_value.format, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["sx"], decoded_value.sx, options); + FieldToJson(jdata["a"], decoded_value.a, options); + FieldToJson(jdata["b"], decoded_value.b, options); + FieldToJson(jdata["pvx"], decoded_value.pvx, options); + FieldToJson(jdata["sy"], decoded_value.sy, options); + FieldToJson(jdata["c"], decoded_value.c, options); + FieldToJson(jdata["pvy"], decoded_value.pvy, options); + FieldToJson(jdata["sz"], decoded_value.sz, options); + FieldToJson(jdata["pvz"], decoded_value.pvz, options); + FieldToJson(jdata["qx"], decoded_value.qx, options); + FieldToJson(jdata["qy"], decoded_value.qy, options); + FieldToJson(jdata["qz"], decoded_value.qz, options); + FieldToJson(jdata["qw"], decoded_value.qw, options); + FieldToJson(jdata["tx"], decoded_value.tx, options); + FieldToJson(jdata["ty"], decoded_value.ty, options); + FieldToJson(jdata["tz"], decoded_value.tz, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCustomBorderColorPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureSRTMotionInstanceNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceCustomBorderColorPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceCustomBorderColorPropertiesEXT& meta_struct = *data; + const VkAccelerationStructureSRTMotionInstanceNV& decoded_value = *data->decoded_value; + const Decoded_VkAccelerationStructureSRTMotionInstanceNV& meta_struct = *data; + + FieldToJson(jdata["transformT0"], meta_struct.transformT0, options); + FieldToJson(jdata["transformT1"], meta_struct.transformT1, options); + FieldToJson(jdata["instanceCustomIndex"], decoded_value.instanceCustomIndex, options); + FieldToJson(jdata["mask"], decoded_value.mask, options); + FieldToJson(jdata["instanceShaderBindingTableRecordOffset"], decoded_value.instanceShaderBindingTableRecordOffset, options); + FieldToJson(VkGeometryInstanceFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["accelerationStructureReference"], decoded_value.accelerationStructureReference, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingMotionBlurFeaturesNV* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceRayTracingMotionBlurFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRayTracingMotionBlurFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxCustomBorderColorSamplers"], decoded_value.maxCustomBorderColorSamplers, options); + jdata["rayTracingMotionBlur"] = static_cast(decoded_value.rayTracingMotionBlur); + jdata["rayTracingMotionBlurPipelineTraceRaysIndirect"] = static_cast(decoded_value.rayTracingMotionBlurPipelineTraceRaysIndirect); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCustomBorderColorFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceCustomBorderColorFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceCustomBorderColorFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["customBorderColors"] = static_cast(decoded_value.customBorderColors); - jdata["customBorderColorWithoutFormat"] = static_cast(decoded_value.customBorderColorWithoutFormat); + jdata["ycbcr2plane444Formats"] = static_cast(decoded_value.ycbcr2plane444Formats); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentBarrierFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePresentBarrierFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePresentBarrierFeaturesNV& meta_struct = *data; + const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["presentBarrier"] = static_cast(decoded_value.presentBarrier); + jdata["fragmentDensityMapDeferred"] = static_cast(decoded_value.fragmentDensityMapDeferred); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilitiesPresentBarrierNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSurfaceCapabilitiesPresentBarrierNV& decoded_value = *data->decoded_value; - const Decoded_VkSurfaceCapabilitiesPresentBarrierNV& meta_struct = *data; + const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["presentBarrierSupported"] = static_cast(decoded_value.presentBarrierSupported); + jdata["subsampledLoads"] = static_cast(decoded_value.subsampledLoads); + jdata["subsampledCoarseReconstructionEarlyAccess"] = static_cast(decoded_value.subsampledCoarseReconstructionEarlyAccess); + FieldToJson(jdata["maxSubsampledArrayLayers"], decoded_value.maxSubsampledArrayLayers, options); + FieldToJson(jdata["maxDescriptorSetSubsampledSamplers"], decoded_value.maxDescriptorSetSubsampledSamplers, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainPresentBarrierCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyCommandTransformInfoQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSwapchainPresentBarrierCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkSwapchainPresentBarrierCreateInfoNV& meta_struct = *data; + const VkCopyCommandTransformInfoQCOM& decoded_value = *data->decoded_value; + const Decoded_VkCopyCommandTransformInfoQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["presentBarrierEnable"] = static_cast(decoded_value.presentBarrierEnable); + FieldToJson(jdata["transform"], decoded_value.transform, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDiagnosticsConfigFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageCompressionControlFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDiagnosticsConfigFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDiagnosticsConfigFeaturesNV& meta_struct = *data; + const VkPhysicalDeviceImageCompressionControlFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceImageCompressionControlFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["diagnosticsConfig"] = static_cast(decoded_value.diagnosticsConfig); + jdata["imageCompressionControl"] = static_cast(decoded_value.imageCompressionControl); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceDiagnosticsConfigCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCompressionControlEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceDiagnosticsConfigCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkDeviceDiagnosticsConfigCreateInfoNV& meta_struct = *data; + const VkImageCompressionControlEXT& decoded_value = *data->decoded_value; + const Decoded_VkImageCompressionControlEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDeviceDiagnosticsConfigFlagsNV_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(VkImageCompressionFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["compressionControlPlaneCount"], decoded_value.compressionControlPlaneCount, options); + FieldToJson(jdata["pFixedRateFlags"], meta_struct.pFixedRateFlags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTileShadingFeaturesQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCompressionPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceTileShadingFeaturesQCOM& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceTileShadingFeaturesQCOM& meta_struct = *data; + const VkImageCompressionPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkImageCompressionPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["tileShading"] = static_cast(decoded_value.tileShading); - jdata["tileShadingFragmentStage"] = static_cast(decoded_value.tileShadingFragmentStage); - jdata["tileShadingColorAttachments"] = static_cast(decoded_value.tileShadingColorAttachments); - jdata["tileShadingDepthAttachments"] = static_cast(decoded_value.tileShadingDepthAttachments); - jdata["tileShadingStencilAttachments"] = static_cast(decoded_value.tileShadingStencilAttachments); - jdata["tileShadingInputAttachments"] = static_cast(decoded_value.tileShadingInputAttachments); - jdata["tileShadingSampledAttachments"] = static_cast(decoded_value.tileShadingSampledAttachments); - jdata["tileShadingPerTileDraw"] = static_cast(decoded_value.tileShadingPerTileDraw); - jdata["tileShadingPerTileDispatch"] = static_cast(decoded_value.tileShadingPerTileDispatch); - jdata["tileShadingDispatchTile"] = static_cast(decoded_value.tileShadingDispatchTile); - jdata["tileShadingApron"] = static_cast(decoded_value.tileShadingApron); - jdata["tileShadingAnisotropicApron"] = static_cast(decoded_value.tileShadingAnisotropicApron); - jdata["tileShadingAtomicOps"] = static_cast(decoded_value.tileShadingAtomicOps); - jdata["tileShadingImageProcessing"] = static_cast(decoded_value.tileShadingImageProcessing); + FieldToJson(VkImageCompressionFlagsEXT_t(),jdata["imageCompressionFlags"], decoded_value.imageCompressionFlags, options); + FieldToJson(VkImageCompressionFixedRateFlagsEXT_t(),jdata["imageCompressionFixedRateFlags"], decoded_value.imageCompressionFixedRateFlags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTileShadingPropertiesQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceTileShadingPropertiesQCOM& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceTileShadingPropertiesQCOM& meta_struct = *data; + const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxApronSize"], decoded_value.maxApronSize, options); - jdata["preferNonCoherent"] = static_cast(decoded_value.preferNonCoherent); - FieldToJson(jdata["tileGranularity"], meta_struct.tileGranularity, options); - FieldToJson(jdata["maxTileShadingRate"], meta_struct.maxTileShadingRate, options); + jdata["attachmentFeedbackLoopLayout"] = static_cast(decoded_value.attachmentFeedbackLoopLayout); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassTileShadingCreateInfoQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevice4444FormatsFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassTileShadingCreateInfoQCOM& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassTileShadingCreateInfoQCOM& meta_struct = *data; + const VkPhysicalDevice4444FormatsFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevice4444FormatsFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkTileShadingRenderPassFlagsQCOM_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["tileApronSize"], meta_struct.tileApronSize, options); + jdata["formatA4R4G4B4"] = static_cast(decoded_value.formatA4R4G4B4); + jdata["formatA4B4G4R4"] = static_cast(decoded_value.formatA4B4G4R4); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerTileBeginInfoQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFaultFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPerTileBeginInfoQCOM& decoded_value = *data->decoded_value; - const Decoded_VkPerTileBeginInfoQCOM& meta_struct = *data; + const VkPhysicalDeviceFaultFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFaultFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["deviceFault"] = static_cast(decoded_value.deviceFault); + jdata["deviceFaultVendorBinary"] = static_cast(decoded_value.deviceFaultVendorBinary); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerTileEndInfoQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceFaultCountsEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPerTileEndInfoQCOM& decoded_value = *data->decoded_value; - const Decoded_VkPerTileEndInfoQCOM& meta_struct = *data; + const VkDeviceFaultCountsEXT& decoded_value = *data->decoded_value; + const Decoded_VkDeviceFaultCountsEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["addressInfoCount"], decoded_value.addressInfoCount, options); + FieldToJson(jdata["vendorInfoCount"], decoded_value.vendorInfoCount, options); + FieldToJson(jdata["vendorBinarySize"], decoded_value.vendorBinarySize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDispatchTileInfoQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceFaultAddressInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDispatchTileInfoQCOM& decoded_value = *data->decoded_value; - const Decoded_VkDispatchTileInfoQCOM& meta_struct = *data; + const VkDeviceFaultAddressInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDeviceFaultAddressInfoEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["addressType"], decoded_value.addressType, options); + FieldToJson(jdata["reportedAddress"], to_hex_variable_width(decoded_value.reportedAddress), options); + FieldToJson(jdata["addressPrecision"], decoded_value.addressPrecision, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueryLowLatencySupportNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceFaultVendorInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkQueryLowLatencySupportNV& decoded_value = *data->decoded_value; - const Decoded_VkQueryLowLatencySupportNV& meta_struct = *data; + const VkDeviceFaultVendorInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDeviceFaultVendorInfoEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pQueriedLowLatencyData"], meta_struct.pQueriedLowLatencyData, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["description"], &meta_struct.description, options); + FieldToJson(jdata["vendorFaultCode"], decoded_value.vendorFaultCode, options); + FieldToJson(jdata["vendorFaultData"], decoded_value.vendorFaultData, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceFaultInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT& meta_struct = *data; + const VkDeviceFaultInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDeviceFaultInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["graphicsPipelineLibrary"] = static_cast(decoded_value.graphicsPipelineLibrary); + FieldToJson(jdata["description"], &meta_struct.description, options); + FieldToJson(jdata["pAddressInfos"], meta_struct.pAddressInfos, options); + FieldToJson(jdata["pVendorInfos"], meta_struct.pVendorInfos, options); + FieldToJson(jdata["pVendorBinaryData"], meta_struct.pVendorBinaryData, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceFaultVendorBinaryHeaderVersionOneEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT& meta_struct = *data; + const VkDeviceFaultVendorBinaryHeaderVersionOneEXT& decoded_value = *data->decoded_value; + const Decoded_VkDeviceFaultVendorBinaryHeaderVersionOneEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["graphicsPipelineLibraryFastLinking"] = static_cast(decoded_value.graphicsPipelineLibraryFastLinking); - jdata["graphicsPipelineLibraryIndependentInterpolationDecoration"] = static_cast(decoded_value.graphicsPipelineLibraryIndependentInterpolationDecoration); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["headerSize"], decoded_value.headerSize, options); + FieldToJson(jdata["headerVersion"], decoded_value.headerVersion, options); + FieldToJson(jdata["vendorID"], decoded_value.vendorID, options); + FieldToJson(jdata["deviceID"], decoded_value.deviceID, options); + FieldToJson(jdata["driverVersion"], decoded_value.driverVersion, options); + FieldToJson(jdata["pipelineCacheUUID"], uuid_to_string(sizeof(decoded_value.pipelineCacheUUID), decoded_value.pipelineCacheUUID), options); + FieldToJson(jdata["applicationNameOffset"], decoded_value.applicationNameOffset, options); + FieldToJson(jdata["applicationVersion"], decoded_value.applicationVersion, options); + FieldToJson(jdata["engineNameOffset"], decoded_value.engineNameOffset, options); + FieldToJson(jdata["engineVersion"], decoded_value.engineVersion, options); + FieldToJson(jdata["apiVersion"], decoded_value.apiVersion, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGraphicsPipelineLibraryCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkGraphicsPipelineLibraryCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkGraphicsPipelineLibraryCreateInfoEXT& meta_struct = *data; + const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkGraphicsPipelineLibraryFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + jdata["rasterizationOrderColorAttachmentAccess"] = static_cast(decoded_value.rasterizationOrderColorAttachmentAccess); + jdata["rasterizationOrderDepthAttachmentAccess"] = static_cast(decoded_value.rasterizationOrderDepthAttachmentAccess); + jdata["rasterizationOrderStencilAttachmentAccess"] = static_cast(decoded_value.rasterizationOrderStencilAttachmentAccess); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD& meta_struct = *data; + const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderEarlyAndLateFragmentTests"] = static_cast(decoded_value.shaderEarlyAndLateFragmentTests); + jdata["formatRgba10x6WithoutYCbCrSampler"] = static_cast(decoded_value.formatRgba10x6WithoutYCbCrSampler); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDirectFBSurfaceCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV& meta_struct = *data; + const VkDirectFBSurfaceCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDirectFBSurfaceCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["fragmentShadingRateEnums"] = static_cast(decoded_value.fragmentShadingRateEnums); - jdata["supersampleFragmentShadingRates"] = static_cast(decoded_value.supersampleFragmentShadingRates); - jdata["noInvocationFragmentShadingRates"] = static_cast(decoded_value.noInvocationFragmentShadingRates); + FieldToJson(VkDirectFBSurfaceCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["dfb"], meta_struct.dfb, options); + FieldToJson(jdata["surface"], meta_struct.surface, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV& meta_struct = *data; + const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxFragmentShadingRateInvocationCount"], decoded_value.maxFragmentShadingRateInvocationCount, options); + jdata["mutableDescriptorType"] = static_cast(decoded_value.mutableDescriptorType); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineFragmentShadingRateEnumStateCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMutableDescriptorTypeListEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineFragmentShadingRateEnumStateCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkPipelineFragmentShadingRateEnumStateCreateInfoNV& meta_struct = *data; + const VkMutableDescriptorTypeListEXT& decoded_value = *data->decoded_value; + const Decoded_VkMutableDescriptorTypeListEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["shadingRateType"], decoded_value.shadingRateType, options); - FieldToJson(jdata["shadingRate"], decoded_value.shadingRate, options); - FieldToJson(jdata["combinerOps"], &meta_struct.combinerOps, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["descriptorTypeCount"], decoded_value.descriptorTypeCount, options); + FieldToJson(jdata["pDescriptorTypes"], meta_struct.pDescriptorTypes, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureGeometryMotionTrianglesDataNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMutableDescriptorTypeCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAccelerationStructureGeometryMotionTrianglesDataNV& decoded_value = *data->decoded_value; - const Decoded_VkAccelerationStructureGeometryMotionTrianglesDataNV& meta_struct = *data; + const VkMutableDescriptorTypeCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkMutableDescriptorTypeCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["vertexData"], meta_struct.vertexData, options); + FieldToJson(jdata["mutableDescriptorTypeListCount"], decoded_value.mutableDescriptorTypeListCount, options); + FieldToJson(jdata["pMutableDescriptorTypeLists"], meta_struct.pMutableDescriptorTypeLists, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureMotionInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAccelerationStructureMotionInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkAccelerationStructureMotionInfoNV& meta_struct = *data; + const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxInstances"], decoded_value.maxInstances, options); - FieldToJson(VkAccelerationStructureMotionInfoFlagsNV_t(),jdata["flags"], decoded_value.flags, options); + jdata["vertexInputDynamicState"] = static_cast(decoded_value.vertexInputDynamicState); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureMatrixMotionInstanceNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVertexInputBindingDescription2EXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAccelerationStructureMatrixMotionInstanceNV& decoded_value = *data->decoded_value; - const Decoded_VkAccelerationStructureMatrixMotionInstanceNV& meta_struct = *data; + const VkVertexInputBindingDescription2EXT& decoded_value = *data->decoded_value; + const Decoded_VkVertexInputBindingDescription2EXT& meta_struct = *data; - FieldToJson(jdata["transformT0"], meta_struct.transformT0, options); - FieldToJson(jdata["transformT1"], meta_struct.transformT1, options); - FieldToJson(jdata["instanceCustomIndex"], decoded_value.instanceCustomIndex, options); - FieldToJson(jdata["mask"], decoded_value.mask, options); - FieldToJson(jdata["instanceShaderBindingTableRecordOffset"], decoded_value.instanceShaderBindingTableRecordOffset, options); - FieldToJson(VkGeometryInstanceFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["accelerationStructureReference"], decoded_value.accelerationStructureReference, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["binding"], decoded_value.binding, options); + FieldToJson(jdata["stride"], decoded_value.stride, options); + FieldToJson(jdata["inputRate"], decoded_value.inputRate, options); + FieldToJson(jdata["divisor"], decoded_value.divisor, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSRTDataNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVertexInputAttributeDescription2EXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSRTDataNV& decoded_value = *data->decoded_value; - const Decoded_VkSRTDataNV& meta_struct = *data; + const VkVertexInputAttributeDescription2EXT& decoded_value = *data->decoded_value; + const Decoded_VkVertexInputAttributeDescription2EXT& meta_struct = *data; - FieldToJson(jdata["sx"], decoded_value.sx, options); - FieldToJson(jdata["a"], decoded_value.a, options); - FieldToJson(jdata["b"], decoded_value.b, options); - FieldToJson(jdata["pvx"], decoded_value.pvx, options); - FieldToJson(jdata["sy"], decoded_value.sy, options); - FieldToJson(jdata["c"], decoded_value.c, options); - FieldToJson(jdata["pvy"], decoded_value.pvy, options); - FieldToJson(jdata["sz"], decoded_value.sz, options); - FieldToJson(jdata["pvz"], decoded_value.pvz, options); - FieldToJson(jdata["qx"], decoded_value.qx, options); - FieldToJson(jdata["qy"], decoded_value.qy, options); - FieldToJson(jdata["qz"], decoded_value.qz, options); - FieldToJson(jdata["qw"], decoded_value.qw, options); - FieldToJson(jdata["tx"], decoded_value.tx, options); - FieldToJson(jdata["ty"], decoded_value.ty, options); - FieldToJson(jdata["tz"], decoded_value.tz, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["location"], decoded_value.location, options); + FieldToJson(jdata["binding"], decoded_value.binding, options); + FieldToJson(jdata["format"], decoded_value.format, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureSRTMotionInstanceNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDrmPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAccelerationStructureSRTMotionInstanceNV& decoded_value = *data->decoded_value; - const Decoded_VkAccelerationStructureSRTMotionInstanceNV& meta_struct = *data; + const VkPhysicalDeviceDrmPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDrmPropertiesEXT& meta_struct = *data; - FieldToJson(jdata["transformT0"], meta_struct.transformT0, options); - FieldToJson(jdata["transformT1"], meta_struct.transformT1, options); - FieldToJson(jdata["instanceCustomIndex"], decoded_value.instanceCustomIndex, options); - FieldToJson(jdata["mask"], decoded_value.mask, options); - FieldToJson(jdata["instanceShaderBindingTableRecordOffset"], decoded_value.instanceShaderBindingTableRecordOffset, options); - FieldToJson(VkGeometryInstanceFlagsKHR_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["accelerationStructureReference"], decoded_value.accelerationStructureReference, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["hasPrimary"] = static_cast(decoded_value.hasPrimary); + jdata["hasRender"] = static_cast(decoded_value.hasRender); + FieldToJson(jdata["primaryMajor"], decoded_value.primaryMajor, options); + FieldToJson(jdata["primaryMinor"], decoded_value.primaryMinor, options); + FieldToJson(jdata["renderMajor"], decoded_value.renderMajor, options); + FieldToJson(jdata["renderMinor"], decoded_value.renderMinor, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingMotionBlurFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceAddressBindingReportFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRayTracingMotionBlurFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRayTracingMotionBlurFeaturesNV& meta_struct = *data; + const VkPhysicalDeviceAddressBindingReportFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceAddressBindingReportFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["rayTracingMotionBlur"] = static_cast(decoded_value.rayTracingMotionBlur); - jdata["rayTracingMotionBlurPipelineTraceRaysIndirect"] = static_cast(decoded_value.rayTracingMotionBlurPipelineTraceRaysIndirect); + jdata["reportAddressBinding"] = static_cast(decoded_value.reportAddressBinding); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceAddressBindingCallbackDataEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT& meta_struct = *data; + const VkDeviceAddressBindingCallbackDataEXT& decoded_value = *data->decoded_value; + const Decoded_VkDeviceAddressBindingCallbackDataEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["ycbcr2plane444Formats"] = static_cast(decoded_value.ycbcr2plane444Formats); + FieldToJson(VkDeviceAddressBindingFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["baseAddress"], to_hex_variable_width(decoded_value.baseAddress), options); + FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["bindingType"], decoded_value.bindingType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDepthClipControlFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceDepthClipControlFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDepthClipControlFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["fragmentDensityMapDeferred"] = static_cast(decoded_value.fragmentDensityMapDeferred); + jdata["depthClipControl"] = static_cast(decoded_value.depthClipControl); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportDepthClipControlCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT& meta_struct = *data; + const VkPipelineViewportDepthClipControlCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPipelineViewportDepthClipControlCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["subsampledLoads"] = static_cast(decoded_value.subsampledLoads); - jdata["subsampledCoarseReconstructionEarlyAccess"] = static_cast(decoded_value.subsampledCoarseReconstructionEarlyAccess); - FieldToJson(jdata["maxSubsampledArrayLayers"], decoded_value.maxSubsampledArrayLayers, options); - FieldToJson(jdata["maxDescriptorSetSubsampledSamplers"], decoded_value.maxDescriptorSetSubsampledSamplers, options); + jdata["negativeOneToOne"] = static_cast(decoded_value.negativeOneToOne); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyCommandTransformInfoQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCopyCommandTransformInfoQCOM& decoded_value = *data->decoded_value; - const Decoded_VkCopyCommandTransformInfoQCOM& meta_struct = *data; + const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["transform"], decoded_value.transform, options); + jdata["primitiveTopologyListRestart"] = static_cast(decoded_value.primitiveTopologyListRestart); + jdata["primitiveTopologyPatchListRestart"] = static_cast(decoded_value.primitiveTopologyPatchListRestart); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageCompressionControlFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportMemoryZirconHandleInfoFUCHSIA* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceImageCompressionControlFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceImageCompressionControlFeaturesEXT& meta_struct = *data; + const VkImportMemoryZirconHandleInfoFUCHSIA& decoded_value = *data->decoded_value; + const Decoded_VkImportMemoryZirconHandleInfoFUCHSIA& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["imageCompressionControl"] = static_cast(decoded_value.imageCompressionControl); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["handle"], decoded_value.handle, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCompressionControlEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryZirconHandlePropertiesFUCHSIA* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageCompressionControlEXT& decoded_value = *data->decoded_value; - const Decoded_VkImageCompressionControlEXT& meta_struct = *data; + const VkMemoryZirconHandlePropertiesFUCHSIA& decoded_value = *data->decoded_value; + const Decoded_VkMemoryZirconHandlePropertiesFUCHSIA& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkImageCompressionFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["compressionControlPlaneCount"], decoded_value.compressionControlPlaneCount, options); - FieldToJson(jdata["pFixedRateFlags"], meta_struct.pFixedRateFlags, options); + FieldToJson(jdata["memoryTypeBits"], decoded_value.memoryTypeBits, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCompressionPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryGetZirconHandleInfoFUCHSIA* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageCompressionPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkImageCompressionPropertiesEXT& meta_struct = *data; + const VkMemoryGetZirconHandleInfoFUCHSIA& decoded_value = *data->decoded_value; + const Decoded_VkMemoryGetZirconHandleInfoFUCHSIA& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkImageCompressionFlagsEXT_t(),jdata["imageCompressionFlags"], decoded_value.imageCompressionFlags, options); - FieldToJson(VkImageCompressionFixedRateFlagsEXT_t(),jdata["imageCompressionFixedRateFlags"], decoded_value.imageCompressionFixedRateFlags, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportSemaphoreZirconHandleInfoFUCHSIA* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT& meta_struct = *data; + const VkImportSemaphoreZirconHandleInfoFUCHSIA& decoded_value = *data->decoded_value; + const Decoded_VkImportSemaphoreZirconHandleInfoFUCHSIA& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["attachmentFeedbackLoopLayout"] = static_cast(decoded_value.attachmentFeedbackLoopLayout); + HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); + FieldToJson(VkSemaphoreImportFlags_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["zirconHandle"], decoded_value.zirconHandle, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevice4444FormatsFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreGetZirconHandleInfoFUCHSIA* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevice4444FormatsFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevice4444FormatsFeaturesEXT& meta_struct = *data; + const VkSemaphoreGetZirconHandleInfoFUCHSIA& decoded_value = *data->decoded_value; + const Decoded_VkSemaphoreGetZirconHandleInfoFUCHSIA& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["formatA4R4G4B4"] = static_cast(decoded_value.formatA4R4G4B4); - jdata["formatA4B4G4R4"] = static_cast(decoded_value.formatA4B4G4R4); + HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFaultFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceInvocationMaskFeaturesHUAWEI* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFaultFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFaultFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceInvocationMaskFeaturesHUAWEI& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["deviceFault"] = static_cast(decoded_value.deviceFault); - jdata["deviceFaultVendorBinary"] = static_cast(decoded_value.deviceFaultVendorBinary); + jdata["invocationMask"] = static_cast(decoded_value.invocationMask); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceFaultCountsEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryGetRemoteAddressInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceFaultCountsEXT& decoded_value = *data->decoded_value; - const Decoded_VkDeviceFaultCountsEXT& meta_struct = *data; + const VkMemoryGetRemoteAddressInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkMemoryGetRemoteAddressInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["addressInfoCount"], decoded_value.addressInfoCount, options); - FieldToJson(jdata["vendorInfoCount"], decoded_value.vendorInfoCount, options); - FieldToJson(jdata["vendorBinarySize"], decoded_value.vendorBinarySize, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["handleType"], decoded_value.handleType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceFaultAddressInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalMemoryRDMAFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceFaultAddressInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDeviceFaultAddressInfoEXT& meta_struct = *data; + const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExternalMemoryRDMAFeaturesNV& meta_struct = *data; - FieldToJson(jdata["addressType"], decoded_value.addressType, options); - FieldToJson(jdata["reportedAddress"], to_hex_variable_width(decoded_value.reportedAddress), options); - FieldToJson(jdata["addressPrecision"], decoded_value.addressPrecision, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["externalMemoryRDMA"] = static_cast(decoded_value.externalMemoryRDMA); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceFaultVendorInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFrameBoundaryFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceFaultVendorInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDeviceFaultVendorInfoEXT& meta_struct = *data; + const VkPhysicalDeviceFrameBoundaryFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFrameBoundaryFeaturesEXT& meta_struct = *data; - FieldToJson(jdata["description"], &meta_struct.description, options); - FieldToJson(jdata["vendorFaultCode"], decoded_value.vendorFaultCode, options); - FieldToJson(jdata["vendorFaultData"], decoded_value.vendorFaultData, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["frameBoundary"] = static_cast(decoded_value.frameBoundary); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceFaultInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFrameBoundaryEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceFaultInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDeviceFaultInfoEXT& meta_struct = *data; + const VkFrameBoundaryEXT& decoded_value = *data->decoded_value; + const Decoded_VkFrameBoundaryEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["description"], &meta_struct.description, options); - FieldToJson(jdata["pAddressInfos"], meta_struct.pAddressInfos, options); - FieldToJson(jdata["pVendorInfos"], meta_struct.pVendorInfos, options); - FieldToJson(jdata["pVendorBinaryData"], meta_struct.pVendorBinaryData, options); + FieldToJson(VkFrameBoundaryFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["frameID"], decoded_value.frameID, options); + FieldToJson(jdata["imageCount"], decoded_value.imageCount, options); + HandleToJson(jdata["pImages"], &meta_struct.pImages, options); + FieldToJson(jdata["bufferCount"], decoded_value.bufferCount, options); + HandleToJson(jdata["pBuffers"], &meta_struct.pBuffers, options); + FieldToJson(jdata["tagName"], decoded_value.tagName, options); + FieldToJson(jdata["tagSize"], decoded_value.tagSize, options); + FieldToJson(jdata["pTag"], meta_struct.pTag, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceFaultVendorBinaryHeaderVersionOneEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceFaultVendorBinaryHeaderVersionOneEXT& decoded_value = *data->decoded_value; - const Decoded_VkDeviceFaultVendorBinaryHeaderVersionOneEXT& meta_struct = *data; + const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT& meta_struct = *data; - FieldToJson(jdata["headerSize"], decoded_value.headerSize, options); - FieldToJson(jdata["headerVersion"], decoded_value.headerVersion, options); - FieldToJson(jdata["vendorID"], decoded_value.vendorID, options); - FieldToJson(jdata["deviceID"], decoded_value.deviceID, options); - FieldToJson(jdata["driverVersion"], decoded_value.driverVersion, options); - FieldToJson(jdata["pipelineCacheUUID"], uuid_to_string(sizeof(decoded_value.pipelineCacheUUID), decoded_value.pipelineCacheUUID), options); - FieldToJson(jdata["applicationNameOffset"], decoded_value.applicationNameOffset, options); - FieldToJson(jdata["applicationVersion"], decoded_value.applicationVersion, options); - FieldToJson(jdata["engineNameOffset"], decoded_value.engineNameOffset, options); - FieldToJson(jdata["engineVersion"], decoded_value.engineVersion, options); - FieldToJson(jdata["apiVersion"], decoded_value.apiVersion, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["multisampledRenderToSingleSampled"] = static_cast(decoded_value.multisampledRenderToSingleSampled); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassResolvePerformanceQueryEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT& meta_struct = *data; + const VkSubpassResolvePerformanceQueryEXT& decoded_value = *data->decoded_value; + const Decoded_VkSubpassResolvePerformanceQueryEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["rasterizationOrderColorAttachmentAccess"] = static_cast(decoded_value.rasterizationOrderColorAttachmentAccess); - jdata["rasterizationOrderDepthAttachmentAccess"] = static_cast(decoded_value.rasterizationOrderDepthAttachmentAccess); - jdata["rasterizationOrderStencilAttachmentAccess"] = static_cast(decoded_value.rasterizationOrderStencilAttachmentAccess); + jdata["optimal"] = static_cast(decoded_value.optimal); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMultisampledRenderToSingleSampledInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT& meta_struct = *data; + const VkMultisampledRenderToSingleSampledInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkMultisampledRenderToSingleSampledInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["formatRgba10x6WithoutYCbCrSampler"] = static_cast(decoded_value.formatRgba10x6WithoutYCbCrSampler); + jdata["multisampledRenderToSingleSampledEnable"] = static_cast(decoded_value.multisampledRenderToSingleSampledEnable); + FieldToJson(jdata["rasterizationSamples"], decoded_value.rasterizationSamples, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDirectFBSurfaceCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDirectFBSurfaceCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkDirectFBSurfaceCreateInfoEXT& meta_struct = *data; + const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDirectFBSurfaceCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["dfb"], meta_struct.dfb, options); - FieldToJson(jdata["surface"], meta_struct.surface, options); + jdata["extendedDynamicState2"] = static_cast(decoded_value.extendedDynamicState2); + jdata["extendedDynamicState2LogicOp"] = static_cast(decoded_value.extendedDynamicState2LogicOp); + jdata["extendedDynamicState2PatchControlPoints"] = static_cast(decoded_value.extendedDynamicState2PatchControlPoints); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkScreenSurfaceCreateInfoQNX* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT& meta_struct = *data; + const VkScreenSurfaceCreateInfoQNX& decoded_value = *data->decoded_value; + const Decoded_VkScreenSurfaceCreateInfoQNX& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["mutableDescriptorType"] = static_cast(decoded_value.mutableDescriptorType); + FieldToJson(VkScreenSurfaceCreateFlagsQNX_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["context"], meta_struct.context, options); + FieldToJson(jdata["window"], meta_struct.window, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMutableDescriptorTypeListEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceColorWriteEnableFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMutableDescriptorTypeListEXT& decoded_value = *data->decoded_value; - const Decoded_VkMutableDescriptorTypeListEXT& meta_struct = *data; + const VkPhysicalDeviceColorWriteEnableFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceColorWriteEnableFeaturesEXT& meta_struct = *data; - FieldToJson(jdata["descriptorTypeCount"], decoded_value.descriptorTypeCount, options); - FieldToJson(jdata["pDescriptorTypes"], meta_struct.pDescriptorTypes, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["colorWriteEnable"] = static_cast(decoded_value.colorWriteEnable); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMutableDescriptorTypeCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineColorWriteCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMutableDescriptorTypeCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkMutableDescriptorTypeCreateInfoEXT& meta_struct = *data; + const VkPipelineColorWriteCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPipelineColorWriteCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["mutableDescriptorTypeListCount"], decoded_value.mutableDescriptorTypeListCount, options); - FieldToJson(jdata["pMutableDescriptorTypeLists"], meta_struct.pMutableDescriptorTypeLists, options); + FieldToJson(jdata["attachmentCount"], decoded_value.attachmentCount, options); + FieldToJson(jdata["pColorWriteEnables"], meta_struct.pColorWriteEnables, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT& meta_struct = *data; + const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["vertexInputDynamicState"] = static_cast(decoded_value.vertexInputDynamicState); + jdata["primitivesGeneratedQuery"] = static_cast(decoded_value.primitivesGeneratedQuery); + jdata["primitivesGeneratedQueryWithRasterizerDiscard"] = static_cast(decoded_value.primitivesGeneratedQueryWithRasterizerDiscard); + jdata["primitivesGeneratedQueryWithNonZeroStreams"] = static_cast(decoded_value.primitivesGeneratedQueryWithNonZeroStreams); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVertexInputBindingDescription2EXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVertexInputBindingDescription2EXT& decoded_value = *data->decoded_value; - const Decoded_VkVertexInputBindingDescription2EXT& meta_struct = *data; + const VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["binding"], decoded_value.binding, options); - FieldToJson(jdata["stride"], decoded_value.stride, options); - FieldToJson(jdata["inputRate"], decoded_value.inputRate, options); - FieldToJson(jdata["divisor"], decoded_value.divisor, options); + jdata["videoEncodeRgbConversion"] = static_cast(decoded_value.videoEncodeRgbConversion); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVertexInputAttributeDescription2EXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeRgbConversionCapabilitiesVALVE* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkVertexInputAttributeDescription2EXT& decoded_value = *data->decoded_value; - const Decoded_VkVertexInputAttributeDescription2EXT& meta_struct = *data; + const VkVideoEncodeRgbConversionCapabilitiesVALVE& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeRgbConversionCapabilitiesVALVE& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["location"], decoded_value.location, options); - FieldToJson(jdata["binding"], decoded_value.binding, options); - FieldToJson(jdata["format"], decoded_value.format, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(VkVideoEncodeRgbModelConversionFlagsVALVE_t(),jdata["rgbModels"], decoded_value.rgbModels, options); + FieldToJson(VkVideoEncodeRgbRangeCompressionFlagsVALVE_t(),jdata["rgbRanges"], decoded_value.rgbRanges, options); + FieldToJson(VkVideoEncodeRgbChromaOffsetFlagsVALVE_t(),jdata["xChromaOffsets"], decoded_value.xChromaOffsets, options); + FieldToJson(VkVideoEncodeRgbChromaOffsetFlagsVALVE_t(),jdata["yChromaOffsets"], decoded_value.yChromaOffsets, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDrmPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeProfileRgbConversionInfoVALVE* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDrmPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDrmPropertiesEXT& meta_struct = *data; + const VkVideoEncodeProfileRgbConversionInfoVALVE& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeProfileRgbConversionInfoVALVE& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["hasPrimary"] = static_cast(decoded_value.hasPrimary); - jdata["hasRender"] = static_cast(decoded_value.hasRender); - FieldToJson(jdata["primaryMajor"], decoded_value.primaryMajor, options); - FieldToJson(jdata["primaryMinor"], decoded_value.primaryMinor, options); - FieldToJson(jdata["renderMajor"], decoded_value.renderMajor, options); - FieldToJson(jdata["renderMinor"], decoded_value.renderMinor, options); + jdata["performEncodeRgbConversion"] = static_cast(decoded_value.performEncodeRgbConversion); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceAddressBindingReportFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeSessionRgbConversionCreateInfoVALVE* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceAddressBindingReportFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceAddressBindingReportFeaturesEXT& meta_struct = *data; + const VkVideoEncodeSessionRgbConversionCreateInfoVALVE& decoded_value = *data->decoded_value; + const Decoded_VkVideoEncodeSessionRgbConversionCreateInfoVALVE& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["reportAddressBinding"] = static_cast(decoded_value.reportAddressBinding); + FieldToJson(jdata["rgbModel"], decoded_value.rgbModel, options); + FieldToJson(jdata["rgbRange"], decoded_value.rgbRange, options); + FieldToJson(jdata["xChromaOffset"], decoded_value.xChromaOffset, options); + FieldToJson(jdata["yChromaOffset"], decoded_value.yChromaOffset, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceAddressBindingCallbackDataEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageViewMinLodFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceAddressBindingCallbackDataEXT& decoded_value = *data->decoded_value; - const Decoded_VkDeviceAddressBindingCallbackDataEXT& meta_struct = *data; + const VkPhysicalDeviceImageViewMinLodFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceImageViewMinLodFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDeviceAddressBindingFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["baseAddress"], to_hex_variable_width(decoded_value.baseAddress), options); - FieldToJson(jdata["size"], decoded_value.size, options); - FieldToJson(jdata["bindingType"], decoded_value.bindingType, options); + jdata["minLod"] = static_cast(decoded_value.minLod); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDepthClipControlFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewMinLodCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDepthClipControlFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDepthClipControlFeaturesEXT& meta_struct = *data; + const VkImageViewMinLodCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkImageViewMinLodCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["depthClipControl"] = static_cast(decoded_value.depthClipControl); + FieldToJson(jdata["minLod"], decoded_value.minLod, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportDepthClipControlCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiDrawFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineViewportDepthClipControlCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkPipelineViewportDepthClipControlCreateInfoEXT& meta_struct = *data; + const VkPhysicalDeviceMultiDrawFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMultiDrawFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["negativeOneToOne"] = static_cast(decoded_value.negativeOneToOne); + jdata["multiDraw"] = static_cast(decoded_value.multiDraw); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiDrawPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceMultiDrawPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMultiDrawPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["primitiveTopologyListRestart"] = static_cast(decoded_value.primitiveTopologyListRestart); - jdata["primitiveTopologyPatchListRestart"] = static_cast(decoded_value.primitiveTopologyPatchListRestart); + FieldToJson(jdata["maxMultiDrawCount"], decoded_value.maxMultiDrawCount, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportMemoryZirconHandleInfoFUCHSIA* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMultiDrawInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImportMemoryZirconHandleInfoFUCHSIA& decoded_value = *data->decoded_value; - const Decoded_VkImportMemoryZirconHandleInfoFUCHSIA& meta_struct = *data; + const VkMultiDrawInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkMultiDrawInfoEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); - FieldToJson(jdata["handle"], decoded_value.handle, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["firstVertex"], decoded_value.firstVertex, options); + FieldToJson(jdata["vertexCount"], decoded_value.vertexCount, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryZirconHandlePropertiesFUCHSIA* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMultiDrawIndexedInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryZirconHandlePropertiesFUCHSIA& decoded_value = *data->decoded_value; - const Decoded_VkMemoryZirconHandlePropertiesFUCHSIA& meta_struct = *data; + const VkMultiDrawIndexedInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkMultiDrawIndexedInfoEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["memoryTypeBits"], decoded_value.memoryTypeBits, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["firstIndex"], decoded_value.firstIndex, options); + FieldToJson(jdata["indexCount"], decoded_value.indexCount, options); + FieldToJson(jdata["vertexOffset"], decoded_value.vertexOffset, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryGetZirconHandleInfoFUCHSIA* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryGetZirconHandleInfoFUCHSIA& decoded_value = *data->decoded_value; - const Decoded_VkMemoryGetZirconHandleInfoFUCHSIA& meta_struct = *data; + const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["memory"], meta_struct.memory, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); + jdata["image2DViewOf3D"] = static_cast(decoded_value.image2DViewOf3D); + jdata["sampler2DViewOf3D"] = static_cast(decoded_value.sampler2DViewOf3D); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportSemaphoreZirconHandleInfoFUCHSIA* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderTileImageFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImportSemaphoreZirconHandleInfoFUCHSIA& decoded_value = *data->decoded_value; - const Decoded_VkImportSemaphoreZirconHandleInfoFUCHSIA& meta_struct = *data; + const VkPhysicalDeviceShaderTileImageFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderTileImageFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); - FieldToJson(VkSemaphoreImportFlags_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); - FieldToJson(jdata["zirconHandle"], decoded_value.zirconHandle, options); + jdata["shaderTileImageColorReadAccess"] = static_cast(decoded_value.shaderTileImageColorReadAccess); + jdata["shaderTileImageDepthReadAccess"] = static_cast(decoded_value.shaderTileImageDepthReadAccess); + jdata["shaderTileImageStencilReadAccess"] = static_cast(decoded_value.shaderTileImageStencilReadAccess); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreGetZirconHandleInfoFUCHSIA* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderTileImagePropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSemaphoreGetZirconHandleInfoFUCHSIA& decoded_value = *data->decoded_value; - const Decoded_VkSemaphoreGetZirconHandleInfoFUCHSIA& meta_struct = *data; + const VkPhysicalDeviceShaderTileImagePropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderTileImagePropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["semaphore"], meta_struct.semaphore, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); + jdata["shaderTileImageCoherentReadAccelerated"] = static_cast(decoded_value.shaderTileImageCoherentReadAccelerated); + jdata["shaderTileImageReadSampleFromPixelRateInvocation"] = static_cast(decoded_value.shaderTileImageReadSampleFromPixelRateInvocation); + jdata["shaderTileImageReadFromHelperInvocation"] = static_cast(decoded_value.shaderTileImageReadFromHelperInvocation); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceInvocationMaskFeaturesHUAWEI* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMicromapUsageEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceInvocationMaskFeaturesHUAWEI& meta_struct = *data; + const VkMicromapUsageEXT& decoded_value = *data->decoded_value; + const Decoded_VkMicromapUsageEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["invocationMask"] = static_cast(decoded_value.invocationMask); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["count"], decoded_value.count, options); + FieldToJson(jdata["subdivisionLevel"], decoded_value.subdivisionLevel, options); + FieldToJson(jdata["format"], decoded_value.format, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryGetRemoteAddressInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMicromapBuildInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMemoryGetRemoteAddressInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkMemoryGetRemoteAddressInfoNV& meta_struct = *data; + const VkMicromapBuildInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkMicromapBuildInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["memory"], meta_struct.memory, options); - FieldToJson(jdata["handleType"], decoded_value.handleType, options); + FieldToJson(jdata["type"], decoded_value.type, options); + FieldToJson(VkBuildMicromapFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["mode"], decoded_value.mode, options); + HandleToJson(jdata["dstMicromap"], meta_struct.dstMicromap, options); + FieldToJson(jdata["usageCountsCount"], decoded_value.usageCountsCount, options); + FieldToJson(jdata["pUsageCounts"], meta_struct.pUsageCounts, options); + FieldToJson(jdata["ppUsageCounts"], meta_struct.ppUsageCounts, options); + FieldToJson(jdata["data"], meta_struct.data, options); + FieldToJson(jdata["scratchData"], meta_struct.scratchData, options); + FieldToJson(jdata["triangleArray"], meta_struct.triangleArray, options); + FieldToJson(jdata["triangleArrayStride"], decoded_value.triangleArrayStride, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalMemoryRDMAFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMicromapCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExternalMemoryRDMAFeaturesNV& meta_struct = *data; + const VkMicromapCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkMicromapCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["externalMemoryRDMA"] = static_cast(decoded_value.externalMemoryRDMA); + FieldToJson(VkMicromapCreateFlagsEXT_t(),jdata["createFlags"], decoded_value.createFlags, options); + HandleToJson(jdata["buffer"], meta_struct.buffer, options); + FieldToJson(jdata["offset"], decoded_value.offset, options); + FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["type"], decoded_value.type, options); + FieldToJson(jdata["deviceAddress"], to_hex_variable_width(decoded_value.deviceAddress), options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFrameBoundaryFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceOpacityMicromapFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFrameBoundaryFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFrameBoundaryFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceOpacityMicromapFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceOpacityMicromapFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["frameBoundary"] = static_cast(decoded_value.frameBoundary); + jdata["micromap"] = static_cast(decoded_value.micromap); + jdata["micromapCaptureReplay"] = static_cast(decoded_value.micromapCaptureReplay); + jdata["micromapHostCommands"] = static_cast(decoded_value.micromapHostCommands); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFrameBoundaryEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceOpacityMicromapPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkFrameBoundaryEXT& decoded_value = *data->decoded_value; - const Decoded_VkFrameBoundaryEXT& meta_struct = *data; + const VkPhysicalDeviceOpacityMicromapPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceOpacityMicromapPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkFrameBoundaryFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["frameID"], decoded_value.frameID, options); - FieldToJson(jdata["imageCount"], decoded_value.imageCount, options); - HandleToJson(jdata["pImages"], &meta_struct.pImages, options); - FieldToJson(jdata["bufferCount"], decoded_value.bufferCount, options); - HandleToJson(jdata["pBuffers"], &meta_struct.pBuffers, options); - FieldToJson(jdata["tagName"], decoded_value.tagName, options); - FieldToJson(jdata["tagSize"], decoded_value.tagSize, options); - FieldToJson(jdata["pTag"], meta_struct.pTag, options); + FieldToJson(jdata["maxOpacity2StateSubdivisionLevel"], decoded_value.maxOpacity2StateSubdivisionLevel, options); + FieldToJson(jdata["maxOpacity4StateSubdivisionLevel"], decoded_value.maxOpacity4StateSubdivisionLevel, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMicromapVersionInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT& meta_struct = *data; + const VkMicromapVersionInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkMicromapVersionInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["multisampledRenderToSingleSampled"] = static_cast(decoded_value.multisampledRenderToSingleSampled); + FieldToJson(jdata["pVersionData"], meta_struct.pVersionData, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassResolvePerformanceQueryEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyMicromapToMemoryInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSubpassResolvePerformanceQueryEXT& decoded_value = *data->decoded_value; - const Decoded_VkSubpassResolvePerformanceQueryEXT& meta_struct = *data; + const VkCopyMicromapToMemoryInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkCopyMicromapToMemoryInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["optimal"] = static_cast(decoded_value.optimal); + HandleToJson(jdata["src"], meta_struct.src, options); + FieldToJson(jdata["dst"], meta_struct.dst, options); + FieldToJson(jdata["mode"], decoded_value.mode, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMultisampledRenderToSingleSampledInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyMemoryToMicromapInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMultisampledRenderToSingleSampledInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkMultisampledRenderToSingleSampledInfoEXT& meta_struct = *data; + const VkCopyMemoryToMicromapInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkCopyMemoryToMicromapInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["multisampledRenderToSingleSampledEnable"] = static_cast(decoded_value.multisampledRenderToSingleSampledEnable); - FieldToJson(jdata["rasterizationSamples"], decoded_value.rasterizationSamples, options); + FieldToJson(jdata["src"], meta_struct.src, options); + HandleToJson(jdata["dst"], meta_struct.dst, options); + FieldToJson(jdata["mode"], decoded_value.mode, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyMicromapInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT& meta_struct = *data; - - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["extendedDynamicState2"] = static_cast(decoded_value.extendedDynamicState2); - jdata["extendedDynamicState2LogicOp"] = static_cast(decoded_value.extendedDynamicState2LogicOp); - jdata["extendedDynamicState2PatchControlPoints"] = static_cast(decoded_value.extendedDynamicState2PatchControlPoints); + const VkCopyMicromapInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkCopyMicromapInfoEXT& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["src"], meta_struct.src, options); + HandleToJson(jdata["dst"], meta_struct.dst, options); + FieldToJson(jdata["mode"], decoded_value.mode, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkScreenSurfaceCreateInfoQNX* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMicromapBuildSizesInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkScreenSurfaceCreateInfoQNX& decoded_value = *data->decoded_value; - const Decoded_VkScreenSurfaceCreateInfoQNX& meta_struct = *data; + const VkMicromapBuildSizesInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkMicromapBuildSizesInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkScreenSurfaceCreateFlagsQNX_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["context"], meta_struct.context, options); - FieldToJson(jdata["window"], meta_struct.window, options); + FieldToJson(jdata["micromapSize"], decoded_value.micromapSize, options); + FieldToJson(jdata["buildScratchSize"], decoded_value.buildScratchSize, options); + jdata["discardable"] = static_cast(decoded_value.discardable); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceColorWriteEnableFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureTrianglesOpacityMicromapEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceColorWriteEnableFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceColorWriteEnableFeaturesEXT& meta_struct = *data; + const VkAccelerationStructureTrianglesOpacityMicromapEXT& decoded_value = *data->decoded_value; + const Decoded_VkAccelerationStructureTrianglesOpacityMicromapEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["colorWriteEnable"] = static_cast(decoded_value.colorWriteEnable); + FieldToJson(jdata["indexType"], decoded_value.indexType, options); + FieldToJson(jdata["indexBuffer"], meta_struct.indexBuffer, options); + FieldToJson(jdata["indexStride"], decoded_value.indexStride, options); + FieldToJson(jdata["baseTriangle"], decoded_value.baseTriangle, options); + FieldToJson(jdata["usageCountsCount"], decoded_value.usageCountsCount, options); + FieldToJson(jdata["pUsageCounts"], meta_struct.pUsageCounts, options); + FieldToJson(jdata["ppUsageCounts"], meta_struct.ppUsageCounts, options); + HandleToJson(jdata["micromap"], meta_struct.micromap, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineColorWriteCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMicromapTriangleEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineColorWriteCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkPipelineColorWriteCreateInfoEXT& meta_struct = *data; + const VkMicromapTriangleEXT& decoded_value = *data->decoded_value; + const Decoded_VkMicromapTriangleEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["attachmentCount"], decoded_value.attachmentCount, options); - FieldToJson(jdata["pColorWriteEnables"], meta_struct.pColorWriteEnables, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["dataOffset"], decoded_value.dataOffset, options); + FieldToJson(jdata["subdivisionLevel"], decoded_value.subdivisionLevel, options); + FieldToJson(jdata["format"], decoded_value.format, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDisplacementMicromapFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceDisplacementMicromapFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDisplacementMicromapFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["primitivesGeneratedQuery"] = static_cast(decoded_value.primitivesGeneratedQuery); - jdata["primitivesGeneratedQueryWithRasterizerDiscard"] = static_cast(decoded_value.primitivesGeneratedQueryWithRasterizerDiscard); - jdata["primitivesGeneratedQueryWithNonZeroStreams"] = static_cast(decoded_value.primitivesGeneratedQueryWithNonZeroStreams); + jdata["displacementMicromap"] = static_cast(decoded_value.displacementMicromap); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageViewMinLodFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDisplacementMicromapPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceImageViewMinLodFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceImageViewMinLodFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceDisplacementMicromapPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDisplacementMicromapPropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["minLod"] = static_cast(decoded_value.minLod); + FieldToJson(jdata["maxDisplacementMicromapSubdivisionLevel"], decoded_value.maxDisplacementMicromapSubdivisionLevel, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewMinLodCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureTrianglesDisplacementMicromapNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageViewMinLodCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkImageViewMinLodCreateInfoEXT& meta_struct = *data; + const VkAccelerationStructureTrianglesDisplacementMicromapNV& decoded_value = *data->decoded_value; + const Decoded_VkAccelerationStructureTrianglesDisplacementMicromapNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["minLod"], decoded_value.minLod, options); + FieldToJson(jdata["displacementBiasAndScaleFormat"], decoded_value.displacementBiasAndScaleFormat, options); + FieldToJson(jdata["displacementVectorFormat"], decoded_value.displacementVectorFormat, options); + FieldToJson(jdata["displacementBiasAndScaleBuffer"], meta_struct.displacementBiasAndScaleBuffer, options); + FieldToJson(jdata["displacementBiasAndScaleStride"], decoded_value.displacementBiasAndScaleStride, options); + FieldToJson(jdata["displacementVectorBuffer"], meta_struct.displacementVectorBuffer, options); + FieldToJson(jdata["displacementVectorStride"], decoded_value.displacementVectorStride, options); + FieldToJson(jdata["displacedMicromapPrimitiveFlags"], meta_struct.displacedMicromapPrimitiveFlags, options); + FieldToJson(jdata["displacedMicromapPrimitiveFlagsStride"], decoded_value.displacedMicromapPrimitiveFlagsStride, options); + FieldToJson(jdata["indexType"], decoded_value.indexType, options); + FieldToJson(jdata["indexBuffer"], meta_struct.indexBuffer, options); + FieldToJson(jdata["indexStride"], decoded_value.indexStride, options); + FieldToJson(jdata["baseTriangle"], decoded_value.baseTriangle, options); + FieldToJson(jdata["usageCountsCount"], decoded_value.usageCountsCount, options); + FieldToJson(jdata["pUsageCounts"], meta_struct.pUsageCounts, options); + FieldToJson(jdata["ppUsageCounts"], meta_struct.ppUsageCounts, options); + HandleToJson(jdata["micromap"], meta_struct.micromap, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiDrawFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMultiDrawFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMultiDrawFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["multiDraw"] = static_cast(decoded_value.multiDraw); + jdata["clustercullingShader"] = static_cast(decoded_value.clustercullingShader); + jdata["multiviewClusterCullingShader"] = static_cast(decoded_value.multiviewClusterCullingShader); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiDrawPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMultiDrawPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMultiDrawPropertiesEXT& meta_struct = *data; + const VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxMultiDrawCount"], decoded_value.maxMultiDrawCount, options); + FieldToJson(jdata["maxWorkGroupCount"], &meta_struct.maxWorkGroupCount, options); + FieldToJson(jdata["maxWorkGroupSize"], &meta_struct.maxWorkGroupSize, options); + FieldToJson(jdata["maxOutputClusterCount"], decoded_value.maxOutputClusterCount, options); + FieldToJson(jdata["indirectBufferOffsetAlignment"], decoded_value.indirectBufferOffsetAlignment, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMultiDrawInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMultiDrawInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkMultiDrawInfoEXT& meta_struct = *data; + const VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI& meta_struct = *data; - FieldToJson(jdata["firstVertex"], decoded_value.firstVertex, options); - FieldToJson(jdata["vertexCount"], decoded_value.vertexCount, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["clusterShadingRate"] = static_cast(decoded_value.clusterShadingRate); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMultiDrawIndexedInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMultiDrawIndexedInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkMultiDrawIndexedInfoEXT& meta_struct = *data; + const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT& meta_struct = *data; - FieldToJson(jdata["firstIndex"], decoded_value.firstIndex, options); - FieldToJson(jdata["indexCount"], decoded_value.indexCount, options); - FieldToJson(jdata["vertexOffset"], decoded_value.vertexOffset, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["borderColorSwizzle"] = static_cast(decoded_value.borderColorSwizzle); + jdata["borderColorSwizzleFromImage"] = static_cast(decoded_value.borderColorSwizzleFromImage); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerBorderColorComponentMappingCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT& meta_struct = *data; + const VkSamplerBorderColorComponentMappingCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkSamplerBorderColorComponentMappingCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["image2DViewOf3D"] = static_cast(decoded_value.image2DViewOf3D); - jdata["sampler2DViewOf3D"] = static_cast(decoded_value.sampler2DViewOf3D); + FieldToJson(jdata["components"], meta_struct.components, options); + jdata["srgb"] = static_cast(decoded_value.srgb); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderTileImageFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderTileImageFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderTileImageFeaturesEXT& meta_struct = *data; + const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderTileImageColorReadAccess"] = static_cast(decoded_value.shaderTileImageColorReadAccess); - jdata["shaderTileImageDepthReadAccess"] = static_cast(decoded_value.shaderTileImageDepthReadAccess); - jdata["shaderTileImageStencilReadAccess"] = static_cast(decoded_value.shaderTileImageStencilReadAccess); + jdata["pageableDeviceLocalMemory"] = static_cast(decoded_value.pageableDeviceLocalMemory); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderTileImagePropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderCorePropertiesARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderTileImagePropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderTileImagePropertiesEXT& meta_struct = *data; + const VkPhysicalDeviceShaderCorePropertiesARM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderCorePropertiesARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderTileImageCoherentReadAccelerated"] = static_cast(decoded_value.shaderTileImageCoherentReadAccelerated); - jdata["shaderTileImageReadSampleFromPixelRateInvocation"] = static_cast(decoded_value.shaderTileImageReadSampleFromPixelRateInvocation); - jdata["shaderTileImageReadFromHelperInvocation"] = static_cast(decoded_value.shaderTileImageReadFromHelperInvocation); + FieldToJson(jdata["pixelRate"], decoded_value.pixelRate, options); + FieldToJson(jdata["texelRate"], decoded_value.texelRate, options); + FieldToJson(jdata["fmaRate"], decoded_value.fmaRate, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMicromapUsageEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceQueueShaderCoreControlCreateInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMicromapUsageEXT& decoded_value = *data->decoded_value; - const Decoded_VkMicromapUsageEXT& meta_struct = *data; + const VkDeviceQueueShaderCoreControlCreateInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkDeviceQueueShaderCoreControlCreateInfoARM& meta_struct = *data; - FieldToJson(jdata["count"], decoded_value.count, options); - FieldToJson(jdata["subdivisionLevel"], decoded_value.subdivisionLevel, options); - FieldToJson(jdata["format"], decoded_value.format, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["shaderCoreCount"], decoded_value.shaderCoreCount, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMicromapBuildInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSchedulingControlsFeaturesARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMicromapBuildInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkMicromapBuildInfoEXT& meta_struct = *data; + const VkPhysicalDeviceSchedulingControlsFeaturesARM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSchedulingControlsFeaturesARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["type"], decoded_value.type, options); - FieldToJson(VkBuildMicromapFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["mode"], decoded_value.mode, options); - HandleToJson(jdata["dstMicromap"], meta_struct.dstMicromap, options); - FieldToJson(jdata["usageCountsCount"], decoded_value.usageCountsCount, options); - FieldToJson(jdata["pUsageCounts"], meta_struct.pUsageCounts, options); - FieldToJson(jdata["ppUsageCounts"], meta_struct.ppUsageCounts, options); - FieldToJson(jdata["data"], meta_struct.data, options); - FieldToJson(jdata["scratchData"], meta_struct.scratchData, options); - FieldToJson(jdata["triangleArray"], meta_struct.triangleArray, options); - FieldToJson(jdata["triangleArrayStride"], decoded_value.triangleArrayStride, options); + jdata["schedulingControls"] = static_cast(decoded_value.schedulingControls); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMicromapCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSchedulingControlsPropertiesARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMicromapCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkMicromapCreateInfoEXT& meta_struct = *data; + const VkPhysicalDeviceSchedulingControlsPropertiesARM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSchedulingControlsPropertiesARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkMicromapCreateFlagsEXT_t(),jdata["createFlags"], decoded_value.createFlags, options); - HandleToJson(jdata["buffer"], meta_struct.buffer, options); - FieldToJson(jdata["offset"], decoded_value.offset, options); - FieldToJson(jdata["size"], decoded_value.size, options); - FieldToJson(jdata["type"], decoded_value.type, options); - FieldToJson(jdata["deviceAddress"], to_hex_variable_width(decoded_value.deviceAddress), options); + FieldToJson(VkPhysicalDeviceSchedulingControlsFlagsARM_t(),jdata["schedulingControlsFlags"], decoded_value.schedulingControlsFlags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceOpacityMicromapFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceOpacityMicromapFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceOpacityMicromapFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["micromap"] = static_cast(decoded_value.micromap); - jdata["micromapCaptureReplay"] = static_cast(decoded_value.micromapCaptureReplay); - jdata["micromapHostCommands"] = static_cast(decoded_value.micromapHostCommands); + jdata["imageSlicedViewOf3D"] = static_cast(decoded_value.imageSlicedViewOf3D); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceOpacityMicromapPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewSlicedCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceOpacityMicromapPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceOpacityMicromapPropertiesEXT& meta_struct = *data; + const VkImageViewSlicedCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkImageViewSlicedCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxOpacity2StateSubdivisionLevel"], decoded_value.maxOpacity2StateSubdivisionLevel, options); - FieldToJson(jdata["maxOpacity4StateSubdivisionLevel"], decoded_value.maxOpacity4StateSubdivisionLevel, options); + FieldToJson(jdata["sliceOffset"], decoded_value.sliceOffset, options); + FieldToJson(jdata["sliceCount"], decoded_value.sliceCount, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMicromapVersionInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMicromapVersionInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkMicromapVersionInfoEXT& meta_struct = *data; + const VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pVersionData"], meta_struct.pVersionData, options); + jdata["descriptorSetHostMapping"] = static_cast(decoded_value.descriptorSetHostMapping); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyMicromapToMemoryInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetBindingReferenceVALVE* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCopyMicromapToMemoryInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkCopyMicromapToMemoryInfoEXT& meta_struct = *data; + const VkDescriptorSetBindingReferenceVALVE& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorSetBindingReferenceVALVE& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["src"], meta_struct.src, options); - FieldToJson(jdata["dst"], meta_struct.dst, options); - FieldToJson(jdata["mode"], decoded_value.mode, options); + HandleToJson(jdata["descriptorSetLayout"], meta_struct.descriptorSetLayout, options); + FieldToJson(jdata["binding"], decoded_value.binding, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyMemoryToMicromapInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutHostMappingInfoVALVE* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCopyMemoryToMicromapInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkCopyMemoryToMicromapInfoEXT& meta_struct = *data; + const VkDescriptorSetLayoutHostMappingInfoVALVE& decoded_value = *data->decoded_value; + const Decoded_VkDescriptorSetLayoutHostMappingInfoVALVE& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["src"], meta_struct.src, options); - HandleToJson(jdata["dst"], meta_struct.dst, options); - FieldToJson(jdata["mode"], decoded_value.mode, options); + FieldToJson(jdata["descriptorOffset"], decoded_value.descriptorOffset, options); + FieldToJson(jdata["descriptorSize"], decoded_value.descriptorSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyMicromapInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCopyMicromapInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkCopyMicromapInfoEXT& meta_struct = *data; + const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["src"], meta_struct.src, options); - HandleToJson(jdata["dst"], meta_struct.dst, options); - FieldToJson(jdata["mode"], decoded_value.mode, options); + jdata["nonSeamlessCubeMap"] = static_cast(decoded_value.nonSeamlessCubeMap); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMicromapBuildSizesInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRenderPassStripedFeaturesARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMicromapBuildSizesInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkMicromapBuildSizesInfoEXT& meta_struct = *data; + const VkPhysicalDeviceRenderPassStripedFeaturesARM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRenderPassStripedFeaturesARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["micromapSize"], decoded_value.micromapSize, options); - FieldToJson(jdata["buildScratchSize"], decoded_value.buildScratchSize, options); - jdata["discardable"] = static_cast(decoded_value.discardable); + jdata["renderPassStriped"] = static_cast(decoded_value.renderPassStriped); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureTrianglesOpacityMicromapEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRenderPassStripedPropertiesARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAccelerationStructureTrianglesOpacityMicromapEXT& decoded_value = *data->decoded_value; - const Decoded_VkAccelerationStructureTrianglesOpacityMicromapEXT& meta_struct = *data; + const VkPhysicalDeviceRenderPassStripedPropertiesARM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRenderPassStripedPropertiesARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["indexType"], decoded_value.indexType, options); - FieldToJson(jdata["indexBuffer"], meta_struct.indexBuffer, options); - FieldToJson(jdata["indexStride"], decoded_value.indexStride, options); - FieldToJson(jdata["baseTriangle"], decoded_value.baseTriangle, options); - FieldToJson(jdata["usageCountsCount"], decoded_value.usageCountsCount, options); - FieldToJson(jdata["pUsageCounts"], meta_struct.pUsageCounts, options); - FieldToJson(jdata["ppUsageCounts"], meta_struct.ppUsageCounts, options); - HandleToJson(jdata["micromap"], meta_struct.micromap, options); + FieldToJson(jdata["renderPassStripeGranularity"], meta_struct.renderPassStripeGranularity, options); + FieldToJson(jdata["maxRenderPassStripes"], decoded_value.maxRenderPassStripes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMicromapTriangleEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassStripeInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkMicromapTriangleEXT& decoded_value = *data->decoded_value; - const Decoded_VkMicromapTriangleEXT& meta_struct = *data; + const VkRenderPassStripeInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassStripeInfoARM& meta_struct = *data; - FieldToJson(jdata["dataOffset"], decoded_value.dataOffset, options); - FieldToJson(jdata["subdivisionLevel"], decoded_value.subdivisionLevel, options); - FieldToJson(jdata["format"], decoded_value.format, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["stripeArea"], meta_struct.stripeArea, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDisplacementMicromapFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassStripeBeginInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDisplacementMicromapFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDisplacementMicromapFeaturesNV& meta_struct = *data; + const VkRenderPassStripeBeginInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassStripeBeginInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["displacementMicromap"] = static_cast(decoded_value.displacementMicromap); + FieldToJson(jdata["stripeInfoCount"], decoded_value.stripeInfoCount, options); + FieldToJson(jdata["pStripeInfos"], meta_struct.pStripeInfos, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDisplacementMicromapPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassStripeSubmitInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDisplacementMicromapPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDisplacementMicromapPropertiesNV& meta_struct = *data; + const VkRenderPassStripeSubmitInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassStripeSubmitInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxDisplacementMicromapSubdivisionLevel"], decoded_value.maxDisplacementMicromapSubdivisionLevel, options); + FieldToJson(jdata["stripeSemaphoreInfoCount"], decoded_value.stripeSemaphoreInfoCount, options); + FieldToJson(jdata["pStripeSemaphoreInfos"], meta_struct.pStripeSemaphoreInfos, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureTrianglesDisplacementMicromapNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAccelerationStructureTrianglesDisplacementMicromapNV& decoded_value = *data->decoded_value; - const Decoded_VkAccelerationStructureTrianglesDisplacementMicromapNV& meta_struct = *data; + const VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["displacementBiasAndScaleFormat"], decoded_value.displacementBiasAndScaleFormat, options); - FieldToJson(jdata["displacementVectorFormat"], decoded_value.displacementVectorFormat, options); - FieldToJson(jdata["displacementBiasAndScaleBuffer"], meta_struct.displacementBiasAndScaleBuffer, options); - FieldToJson(jdata["displacementBiasAndScaleStride"], decoded_value.displacementBiasAndScaleStride, options); - FieldToJson(jdata["displacementVectorBuffer"], meta_struct.displacementVectorBuffer, options); - FieldToJson(jdata["displacementVectorStride"], decoded_value.displacementVectorStride, options); - FieldToJson(jdata["displacedMicromapPrimitiveFlags"], meta_struct.displacedMicromapPrimitiveFlags, options); - FieldToJson(jdata["displacedMicromapPrimitiveFlagsStride"], decoded_value.displacedMicromapPrimitiveFlagsStride, options); - FieldToJson(jdata["indexType"], decoded_value.indexType, options); - FieldToJson(jdata["indexBuffer"], meta_struct.indexBuffer, options); - FieldToJson(jdata["indexStride"], decoded_value.indexStride, options); - FieldToJson(jdata["baseTriangle"], decoded_value.baseTriangle, options); - FieldToJson(jdata["usageCountsCount"], decoded_value.usageCountsCount, options); - FieldToJson(jdata["pUsageCounts"], meta_struct.pUsageCounts, options); - FieldToJson(jdata["ppUsageCounts"], meta_struct.ppUsageCounts, options); - HandleToJson(jdata["micromap"], meta_struct.micromap, options); + jdata["fragmentDensityMapOffset"] = static_cast(decoded_value.fragmentDensityMapOffset); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI& meta_struct = *data; + const VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["clustercullingShader"] = static_cast(decoded_value.clustercullingShader); - jdata["multiviewClusterCullingShader"] = static_cast(decoded_value.multiviewClusterCullingShader); + FieldToJson(jdata["fragmentDensityOffsetGranularity"], meta_struct.fragmentDensityOffsetGranularity, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassFragmentDensityMapOffsetEndInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI& meta_struct = *data; + const VkRenderPassFragmentDensityMapOffsetEndInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassFragmentDensityMapOffsetEndInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxWorkGroupCount"], &meta_struct.maxWorkGroupCount, options); - FieldToJson(jdata["maxWorkGroupSize"], &meta_struct.maxWorkGroupSize, options); - FieldToJson(jdata["maxOutputClusterCount"], decoded_value.maxOutputClusterCount, options); - FieldToJson(jdata["indirectBufferOffsetAlignment"], decoded_value.indirectBufferOffsetAlignment, options); + FieldToJson(jdata["fragmentDensityOffsetCount"], decoded_value.fragmentDensityOffsetCount, options); + FieldToJson(jdata["pFragmentDensityOffsets"], meta_struct.pFragmentDensityOffsets, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI& meta_struct = *data; + const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["clusterShadingRate"] = static_cast(decoded_value.clusterShadingRate); + jdata["deviceGeneratedCompute"] = static_cast(decoded_value.deviceGeneratedCompute); + jdata["deviceGeneratedComputePipelines"] = static_cast(decoded_value.deviceGeneratedComputePipelines); + jdata["deviceGeneratedComputeCaptureReplay"] = static_cast(decoded_value.deviceGeneratedComputeCaptureReplay); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkComputePipelineIndirectBufferInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT& meta_struct = *data; + const VkComputePipelineIndirectBufferInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkComputePipelineIndirectBufferInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["borderColorSwizzle"] = static_cast(decoded_value.borderColorSwizzle); - jdata["borderColorSwizzleFromImage"] = static_cast(decoded_value.borderColorSwizzleFromImage); + FieldToJson(jdata["deviceAddress"], to_hex_variable_width(decoded_value.deviceAddress), options); + FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["pipelineDeviceAddressCaptureReplay"], to_hex_variable_width(decoded_value.pipelineDeviceAddressCaptureReplay), options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerBorderColorComponentMappingCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineIndirectDeviceAddressInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSamplerBorderColorComponentMappingCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkSamplerBorderColorComponentMappingCreateInfoEXT& meta_struct = *data; + const VkPipelineIndirectDeviceAddressInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkPipelineIndirectDeviceAddressInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["components"], meta_struct.components, options); - jdata["srgb"] = static_cast(decoded_value.srgb); + FieldToJson(jdata["pipelineBindPoint"], decoded_value.pipelineBindPoint, options); + HandleToJson(jdata["pipeline"], meta_struct.pipeline, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindPipelineIndirectCommandNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT& meta_struct = *data; + const VkBindPipelineIndirectCommandNV& decoded_value = *data->decoded_value; + const Decoded_VkBindPipelineIndirectCommandNV& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["pageableDeviceLocalMemory"] = static_cast(decoded_value.pageableDeviceLocalMemory); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["pipelineAddress"], to_hex_variable_width(decoded_value.pipelineAddress), options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderCorePropertiesARM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderCorePropertiesARM& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderCorePropertiesARM& meta_struct = *data; + const VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pixelRate"], decoded_value.pixelRate, options); - FieldToJson(jdata["texelRate"], decoded_value.texelRate, options); - FieldToJson(jdata["fmaRate"], decoded_value.fmaRate, options); + jdata["spheres"] = static_cast(decoded_value.spheres); + jdata["linearSweptSpheres"] = static_cast(decoded_value.linearSweptSpheres); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceQueueShaderCoreControlCreateInfoARM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureGeometryLinearSweptSpheresDataNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDeviceQueueShaderCoreControlCreateInfoARM& decoded_value = *data->decoded_value; - const Decoded_VkDeviceQueueShaderCoreControlCreateInfoARM& meta_struct = *data; + const VkAccelerationStructureGeometryLinearSweptSpheresDataNV& decoded_value = *data->decoded_value; + const Decoded_VkAccelerationStructureGeometryLinearSweptSpheresDataNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["shaderCoreCount"], decoded_value.shaderCoreCount, options); + FieldToJson(jdata["vertexFormat"], decoded_value.vertexFormat, options); + FieldToJson(jdata["vertexData"], meta_struct.vertexData, options); + FieldToJson(jdata["vertexStride"], decoded_value.vertexStride, options); + FieldToJson(jdata["radiusFormat"], decoded_value.radiusFormat, options); + FieldToJson(jdata["radiusData"], meta_struct.radiusData, options); + FieldToJson(jdata["radiusStride"], decoded_value.radiusStride, options); + FieldToJson(jdata["indexType"], decoded_value.indexType, options); + FieldToJson(jdata["indexData"], meta_struct.indexData, options); + FieldToJson(jdata["indexStride"], decoded_value.indexStride, options); + FieldToJson(jdata["indexingMode"], decoded_value.indexingMode, options); + FieldToJson(jdata["endCapsMode"], decoded_value.endCapsMode, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSchedulingControlsFeaturesARM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureGeometrySpheresDataNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSchedulingControlsFeaturesARM& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSchedulingControlsFeaturesARM& meta_struct = *data; + const VkAccelerationStructureGeometrySpheresDataNV& decoded_value = *data->decoded_value; + const Decoded_VkAccelerationStructureGeometrySpheresDataNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["schedulingControls"] = static_cast(decoded_value.schedulingControls); + FieldToJson(jdata["vertexFormat"], decoded_value.vertexFormat, options); + FieldToJson(jdata["vertexData"], meta_struct.vertexData, options); + FieldToJson(jdata["vertexStride"], decoded_value.vertexStride, options); + FieldToJson(jdata["radiusFormat"], decoded_value.radiusFormat, options); + FieldToJson(jdata["radiusData"], meta_struct.radiusData, options); + FieldToJson(jdata["radiusStride"], decoded_value.radiusStride, options); + FieldToJson(jdata["indexType"], decoded_value.indexType, options); + FieldToJson(jdata["indexData"], meta_struct.indexData, options); + FieldToJson(jdata["indexStride"], decoded_value.indexStride, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSchedulingControlsPropertiesARM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLinearColorAttachmentFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSchedulingControlsPropertiesARM& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSchedulingControlsPropertiesARM& meta_struct = *data; + const VkPhysicalDeviceLinearColorAttachmentFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceLinearColorAttachmentFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkPhysicalDeviceSchedulingControlsFlagsARM_t(),jdata["schedulingControlsFlags"], decoded_value.schedulingControlsFlags, options); + jdata["linearColorAttachment"] = static_cast(decoded_value.linearColorAttachment); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["imageSlicedViewOf3D"] = static_cast(decoded_value.imageSlicedViewOf3D); + jdata["imageCompressionControlSwapchain"] = static_cast(decoded_value.imageCompressionControlSwapchain); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewSlicedCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewSampleWeightCreateInfoQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageViewSlicedCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkImageViewSlicedCreateInfoEXT& meta_struct = *data; + const VkImageViewSampleWeightCreateInfoQCOM& decoded_value = *data->decoded_value; + const Decoded_VkImageViewSampleWeightCreateInfoQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["sliceOffset"], decoded_value.sliceOffset, options); - FieldToJson(jdata["sliceCount"], decoded_value.sliceCount, options); + FieldToJson(jdata["filterCenter"], meta_struct.filterCenter, options); + FieldToJson(jdata["filterSize"], meta_struct.filterSize, options); + FieldToJson(jdata["numPhases"], decoded_value.numPhases, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageProcessingFeaturesQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE& meta_struct = *data; + const VkPhysicalDeviceImageProcessingFeaturesQCOM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceImageProcessingFeaturesQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["descriptorSetHostMapping"] = static_cast(decoded_value.descriptorSetHostMapping); + jdata["textureSampleWeighted"] = static_cast(decoded_value.textureSampleWeighted); + jdata["textureBoxFilter"] = static_cast(decoded_value.textureBoxFilter); + jdata["textureBlockMatch"] = static_cast(decoded_value.textureBlockMatch); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetBindingReferenceVALVE* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageProcessingPropertiesQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorSetBindingReferenceVALVE& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorSetBindingReferenceVALVE& meta_struct = *data; + const VkPhysicalDeviceImageProcessingPropertiesQCOM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceImageProcessingPropertiesQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["descriptorSetLayout"], meta_struct.descriptorSetLayout, options); - FieldToJson(jdata["binding"], decoded_value.binding, options); + FieldToJson(jdata["maxWeightFilterPhases"], decoded_value.maxWeightFilterPhases, options); + FieldToJson(jdata["maxWeightFilterDimension"], meta_struct.maxWeightFilterDimension, options); + FieldToJson(jdata["maxBlockMatchRegion"], meta_struct.maxBlockMatchRegion, options); + FieldToJson(jdata["maxBoxFilterBlockSize"], meta_struct.maxBoxFilterBlockSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutHostMappingInfoVALVE* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceNestedCommandBufferFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDescriptorSetLayoutHostMappingInfoVALVE& decoded_value = *data->decoded_value; - const Decoded_VkDescriptorSetLayoutHostMappingInfoVALVE& meta_struct = *data; + const VkPhysicalDeviceNestedCommandBufferFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceNestedCommandBufferFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["descriptorOffset"], decoded_value.descriptorOffset, options); - FieldToJson(jdata["descriptorSize"], decoded_value.descriptorSize, options); + jdata["nestedCommandBuffer"] = static_cast(decoded_value.nestedCommandBuffer); + jdata["nestedCommandBufferRendering"] = static_cast(decoded_value.nestedCommandBufferRendering); + jdata["nestedCommandBufferSimultaneousUse"] = static_cast(decoded_value.nestedCommandBufferSimultaneousUse); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceNestedCommandBufferPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceNestedCommandBufferPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceNestedCommandBufferPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["nonSeamlessCubeMap"] = static_cast(decoded_value.nonSeamlessCubeMap); + FieldToJson(jdata["maxCommandBufferNestingLevel"], decoded_value.maxCommandBufferNestingLevel, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRenderPassStripedFeaturesARM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalMemoryAcquireUnmodifiedEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRenderPassStripedFeaturesARM& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRenderPassStripedFeaturesARM& meta_struct = *data; + const VkExternalMemoryAcquireUnmodifiedEXT& decoded_value = *data->decoded_value; + const Decoded_VkExternalMemoryAcquireUnmodifiedEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["renderPassStriped"] = static_cast(decoded_value.renderPassStriped); + jdata["acquireUnmodifiedMemory"] = static_cast(decoded_value.acquireUnmodifiedMemory); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRenderPassStripedPropertiesARM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRenderPassStripedPropertiesARM& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRenderPassStripedPropertiesARM& meta_struct = *data; + const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["renderPassStripeGranularity"], meta_struct.renderPassStripeGranularity, options); - FieldToJson(jdata["maxRenderPassStripes"], decoded_value.maxRenderPassStripes, options); + jdata["extendedDynamicState3TessellationDomainOrigin"] = static_cast(decoded_value.extendedDynamicState3TessellationDomainOrigin); + jdata["extendedDynamicState3DepthClampEnable"] = static_cast(decoded_value.extendedDynamicState3DepthClampEnable); + jdata["extendedDynamicState3PolygonMode"] = static_cast(decoded_value.extendedDynamicState3PolygonMode); + jdata["extendedDynamicState3RasterizationSamples"] = static_cast(decoded_value.extendedDynamicState3RasterizationSamples); + jdata["extendedDynamicState3SampleMask"] = static_cast(decoded_value.extendedDynamicState3SampleMask); + jdata["extendedDynamicState3AlphaToCoverageEnable"] = static_cast(decoded_value.extendedDynamicState3AlphaToCoverageEnable); + jdata["extendedDynamicState3AlphaToOneEnable"] = static_cast(decoded_value.extendedDynamicState3AlphaToOneEnable); + jdata["extendedDynamicState3LogicOpEnable"] = static_cast(decoded_value.extendedDynamicState3LogicOpEnable); + jdata["extendedDynamicState3ColorBlendEnable"] = static_cast(decoded_value.extendedDynamicState3ColorBlendEnable); + jdata["extendedDynamicState3ColorBlendEquation"] = static_cast(decoded_value.extendedDynamicState3ColorBlendEquation); + jdata["extendedDynamicState3ColorWriteMask"] = static_cast(decoded_value.extendedDynamicState3ColorWriteMask); + jdata["extendedDynamicState3RasterizationStream"] = static_cast(decoded_value.extendedDynamicState3RasterizationStream); + jdata["extendedDynamicState3ConservativeRasterizationMode"] = static_cast(decoded_value.extendedDynamicState3ConservativeRasterizationMode); + jdata["extendedDynamicState3ExtraPrimitiveOverestimationSize"] = static_cast(decoded_value.extendedDynamicState3ExtraPrimitiveOverestimationSize); + jdata["extendedDynamicState3DepthClipEnable"] = static_cast(decoded_value.extendedDynamicState3DepthClipEnable); + jdata["extendedDynamicState3SampleLocationsEnable"] = static_cast(decoded_value.extendedDynamicState3SampleLocationsEnable); + jdata["extendedDynamicState3ColorBlendAdvanced"] = static_cast(decoded_value.extendedDynamicState3ColorBlendAdvanced); + jdata["extendedDynamicState3ProvokingVertexMode"] = static_cast(decoded_value.extendedDynamicState3ProvokingVertexMode); + jdata["extendedDynamicState3LineRasterizationMode"] = static_cast(decoded_value.extendedDynamicState3LineRasterizationMode); + jdata["extendedDynamicState3LineStippleEnable"] = static_cast(decoded_value.extendedDynamicState3LineStippleEnable); + jdata["extendedDynamicState3DepthClipNegativeOneToOne"] = static_cast(decoded_value.extendedDynamicState3DepthClipNegativeOneToOne); + jdata["extendedDynamicState3ViewportWScalingEnable"] = static_cast(decoded_value.extendedDynamicState3ViewportWScalingEnable); + jdata["extendedDynamicState3ViewportSwizzle"] = static_cast(decoded_value.extendedDynamicState3ViewportSwizzle); + jdata["extendedDynamicState3CoverageToColorEnable"] = static_cast(decoded_value.extendedDynamicState3CoverageToColorEnable); + jdata["extendedDynamicState3CoverageToColorLocation"] = static_cast(decoded_value.extendedDynamicState3CoverageToColorLocation); + jdata["extendedDynamicState3CoverageModulationMode"] = static_cast(decoded_value.extendedDynamicState3CoverageModulationMode); + jdata["extendedDynamicState3CoverageModulationTableEnable"] = static_cast(decoded_value.extendedDynamicState3CoverageModulationTableEnable); + jdata["extendedDynamicState3CoverageModulationTable"] = static_cast(decoded_value.extendedDynamicState3CoverageModulationTable); + jdata["extendedDynamicState3CoverageReductionMode"] = static_cast(decoded_value.extendedDynamicState3CoverageReductionMode); + jdata["extendedDynamicState3RepresentativeFragmentTestEnable"] = static_cast(decoded_value.extendedDynamicState3RepresentativeFragmentTestEnable); + jdata["extendedDynamicState3ShadingRateImageEnable"] = static_cast(decoded_value.extendedDynamicState3ShadingRateImageEnable); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassStripeInfoARM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassStripeInfoARM& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassStripeInfoARM& meta_struct = *data; + const VkPhysicalDeviceExtendedDynamicState3PropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stripeArea"], meta_struct.stripeArea, options); + jdata["dynamicPrimitiveTopologyUnrestricted"] = static_cast(decoded_value.dynamicPrimitiveTopologyUnrestricted); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassStripeBeginInfoARM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkColorBlendEquationEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassStripeBeginInfoARM& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassStripeBeginInfoARM& meta_struct = *data; + const VkColorBlendEquationEXT& decoded_value = *data->decoded_value; + const Decoded_VkColorBlendEquationEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stripeInfoCount"], decoded_value.stripeInfoCount, options); - FieldToJson(jdata["pStripeInfos"], meta_struct.pStripeInfos, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["srcColorBlendFactor"], decoded_value.srcColorBlendFactor, options); + FieldToJson(jdata["dstColorBlendFactor"], decoded_value.dstColorBlendFactor, options); + FieldToJson(jdata["colorBlendOp"], decoded_value.colorBlendOp, options); + FieldToJson(jdata["srcAlphaBlendFactor"], decoded_value.srcAlphaBlendFactor, options); + FieldToJson(jdata["dstAlphaBlendFactor"], decoded_value.dstAlphaBlendFactor, options); + FieldToJson(jdata["alphaBlendOp"], decoded_value.alphaBlendOp, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassStripeSubmitInfoARM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkColorBlendAdvancedEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassStripeSubmitInfoARM& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassStripeSubmitInfoARM& meta_struct = *data; + const VkColorBlendAdvancedEXT& decoded_value = *data->decoded_value; + const Decoded_VkColorBlendAdvancedEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stripeSemaphoreInfoCount"], decoded_value.stripeSemaphoreInfoCount, options); - FieldToJson(jdata["pStripeSemaphoreInfos"], meta_struct.pStripeSemaphoreInfos, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["advancedBlendOp"], decoded_value.advancedBlendOp, options); + jdata["srcPremultiplied"] = static_cast(decoded_value.srcPremultiplied); + jdata["dstPremultiplied"] = static_cast(decoded_value.dstPremultiplied); + FieldToJson(jdata["blendOverlap"], decoded_value.blendOverlap, options); + jdata["clampResults"] = static_cast(decoded_value.clampResults); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["fragmentDensityMapOffset"] = static_cast(decoded_value.fragmentDensityMapOffset); + jdata["subpassMergeFeedback"] = static_cast(decoded_value.subpassMergeFeedback); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassCreationControlEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT& meta_struct = *data; + const VkRenderPassCreationControlEXT& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassCreationControlEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["fragmentDensityOffsetGranularity"], meta_struct.fragmentDensityOffsetGranularity, options); + jdata["disallowMerging"] = static_cast(decoded_value.disallowMerging); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassFragmentDensityMapOffsetEndInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassCreationFeedbackInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassFragmentDensityMapOffsetEndInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassFragmentDensityMapOffsetEndInfoEXT& meta_struct = *data; + const VkRenderPassCreationFeedbackInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassCreationFeedbackInfoEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["fragmentDensityOffsetCount"], decoded_value.fragmentDensityOffsetCount, options); - FieldToJson(jdata["pFragmentDensityOffsets"], meta_struct.pFragmentDensityOffsets, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["postMergeSubpassCount"], decoded_value.postMergeSubpassCount, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassCreationFeedbackCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV& meta_struct = *data; + const VkRenderPassCreationFeedbackCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassCreationFeedbackCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["deviceGeneratedCompute"] = static_cast(decoded_value.deviceGeneratedCompute); - jdata["deviceGeneratedComputePipelines"] = static_cast(decoded_value.deviceGeneratedComputePipelines); - jdata["deviceGeneratedComputeCaptureReplay"] = static_cast(decoded_value.deviceGeneratedComputeCaptureReplay); + FieldToJson(jdata["pRenderPassFeedback"], meta_struct.pRenderPassFeedback, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkComputePipelineIndirectBufferInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassSubpassFeedbackInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkComputePipelineIndirectBufferInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkComputePipelineIndirectBufferInfoNV& meta_struct = *data; + const VkRenderPassSubpassFeedbackInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassSubpassFeedbackInfoEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["deviceAddress"], to_hex_variable_width(decoded_value.deviceAddress), options); - FieldToJson(jdata["size"], decoded_value.size, options); - FieldToJson(jdata["pipelineDeviceAddressCaptureReplay"], to_hex_variable_width(decoded_value.pipelineDeviceAddressCaptureReplay), options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["subpassMergeStatus"], decoded_value.subpassMergeStatus, options); + FieldToJson(jdata["description"], &meta_struct.description, options); + FieldToJson(jdata["postMergeIndex"], decoded_value.postMergeIndex, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineIndirectDeviceAddressInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassSubpassFeedbackCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineIndirectDeviceAddressInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkPipelineIndirectDeviceAddressInfoNV& meta_struct = *data; + const VkRenderPassSubpassFeedbackCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassSubpassFeedbackCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pipelineBindPoint"], decoded_value.pipelineBindPoint, options); - HandleToJson(jdata["pipeline"], meta_struct.pipeline, options); + FieldToJson(jdata["pSubpassFeedback"], meta_struct.pSubpassFeedback, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindPipelineIndirectCommandNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDirectDriverLoadingInfoLUNARG* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkBindPipelineIndirectCommandNV& decoded_value = *data->decoded_value; - const Decoded_VkBindPipelineIndirectCommandNV& meta_struct = *data; + const VkDirectDriverLoadingInfoLUNARG& decoded_value = *data->decoded_value; + const Decoded_VkDirectDriverLoadingInfoLUNARG& meta_struct = *data; - FieldToJson(jdata["pipelineAddress"], to_hex_variable_width(decoded_value.pipelineAddress), options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkDirectDriverLoadingFlagsLUNARG_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["pfnGetInstanceProcAddr"], to_hex_variable_width(meta_struct.pfnGetInstanceProcAddr), options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDirectDriverLoadingListLUNARG* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV& meta_struct = *data; + const VkDirectDriverLoadingListLUNARG& decoded_value = *data->decoded_value; + const Decoded_VkDirectDriverLoadingListLUNARG& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["spheres"] = static_cast(decoded_value.spheres); - jdata["linearSweptSpheres"] = static_cast(decoded_value.linearSweptSpheres); + FieldToJson(jdata["mode"], decoded_value.mode, options); + FieldToJson(jdata["driverCount"], decoded_value.driverCount, options); + FieldToJson(jdata["pDrivers"], meta_struct.pDrivers, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureGeometryLinearSweptSpheresDataNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAccelerationStructureGeometryLinearSweptSpheresDataNV& decoded_value = *data->decoded_value; - const Decoded_VkAccelerationStructureGeometryLinearSweptSpheresDataNV& meta_struct = *data; + const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["vertexFormat"], decoded_value.vertexFormat, options); - FieldToJson(jdata["vertexData"], meta_struct.vertexData, options); - FieldToJson(jdata["vertexStride"], decoded_value.vertexStride, options); - FieldToJson(jdata["radiusFormat"], decoded_value.radiusFormat, options); - FieldToJson(jdata["radiusData"], meta_struct.radiusData, options); - FieldToJson(jdata["radiusStride"], decoded_value.radiusStride, options); - FieldToJson(jdata["indexType"], decoded_value.indexType, options); - FieldToJson(jdata["indexData"], meta_struct.indexData, options); - FieldToJson(jdata["indexStride"], decoded_value.indexStride, options); - FieldToJson(jdata["indexingMode"], decoded_value.indexingMode, options); - FieldToJson(jdata["endCapsMode"], decoded_value.endCapsMode, options); + jdata["shaderModuleIdentifier"] = static_cast(decoded_value.shaderModuleIdentifier); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureGeometrySpheresDataNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAccelerationStructureGeometrySpheresDataNV& decoded_value = *data->decoded_value; - const Decoded_VkAccelerationStructureGeometrySpheresDataNV& meta_struct = *data; + const VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["vertexFormat"], decoded_value.vertexFormat, options); - FieldToJson(jdata["vertexData"], meta_struct.vertexData, options); - FieldToJson(jdata["vertexStride"], decoded_value.vertexStride, options); - FieldToJson(jdata["radiusFormat"], decoded_value.radiusFormat, options); - FieldToJson(jdata["radiusData"], meta_struct.radiusData, options); - FieldToJson(jdata["radiusStride"], decoded_value.radiusStride, options); - FieldToJson(jdata["indexType"], decoded_value.indexType, options); - FieldToJson(jdata["indexData"], meta_struct.indexData, options); - FieldToJson(jdata["indexStride"], decoded_value.indexStride, options); + FieldToJson(jdata["shaderModuleIdentifierAlgorithmUUID"], uuid_to_string(sizeof(decoded_value.shaderModuleIdentifierAlgorithmUUID), decoded_value.shaderModuleIdentifierAlgorithmUUID), options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLinearColorAttachmentFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineShaderStageModuleIdentifierCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceLinearColorAttachmentFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceLinearColorAttachmentFeaturesNV& meta_struct = *data; + const VkPipelineShaderStageModuleIdentifierCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkPipelineShaderStageModuleIdentifierCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["linearColorAttachment"] = static_cast(decoded_value.linearColorAttachment); + FieldToJson(jdata["identifierSize"], decoded_value.identifierSize, options); + FieldToJson(jdata["pIdentifier"], meta_struct.pIdentifier, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkShaderModuleIdentifierEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT& meta_struct = *data; + const VkShaderModuleIdentifierEXT& decoded_value = *data->decoded_value; + const Decoded_VkShaderModuleIdentifierEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["imageCompressionControlSwapchain"] = static_cast(decoded_value.imageCompressionControlSwapchain); + FieldToJson(jdata["identifierSize"], decoded_value.identifierSize, options); + FieldToJson(jdata["identifier"], &meta_struct.identifier, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewSampleWeightCreateInfoQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceOpticalFlowFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageViewSampleWeightCreateInfoQCOM& decoded_value = *data->decoded_value; - const Decoded_VkImageViewSampleWeightCreateInfoQCOM& meta_struct = *data; + const VkPhysicalDeviceOpticalFlowFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceOpticalFlowFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["filterCenter"], meta_struct.filterCenter, options); - FieldToJson(jdata["filterSize"], meta_struct.filterSize, options); - FieldToJson(jdata["numPhases"], decoded_value.numPhases, options); + jdata["opticalFlow"] = static_cast(decoded_value.opticalFlow); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageProcessingFeaturesQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceOpticalFlowPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceImageProcessingFeaturesQCOM& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceImageProcessingFeaturesQCOM& meta_struct = *data; + const VkPhysicalDeviceOpticalFlowPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceOpticalFlowPropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["textureSampleWeighted"] = static_cast(decoded_value.textureSampleWeighted); - jdata["textureBoxFilter"] = static_cast(decoded_value.textureBoxFilter); - jdata["textureBlockMatch"] = static_cast(decoded_value.textureBlockMatch); + FieldToJson(VkOpticalFlowGridSizeFlagsNV_t(),jdata["supportedOutputGridSizes"], decoded_value.supportedOutputGridSizes, options); + FieldToJson(VkOpticalFlowGridSizeFlagsNV_t(),jdata["supportedHintGridSizes"], decoded_value.supportedHintGridSizes, options); + jdata["hintSupported"] = static_cast(decoded_value.hintSupported); + jdata["costSupported"] = static_cast(decoded_value.costSupported); + jdata["bidirectionalFlowSupported"] = static_cast(decoded_value.bidirectionalFlowSupported); + jdata["globalFlowSupported"] = static_cast(decoded_value.globalFlowSupported); + FieldToJson(jdata["minWidth"], decoded_value.minWidth, options); + FieldToJson(jdata["minHeight"], decoded_value.minHeight, options); + FieldToJson(jdata["maxWidth"], decoded_value.maxWidth, options); + FieldToJson(jdata["maxHeight"], decoded_value.maxHeight, options); + FieldToJson(jdata["maxNumRegionsOfInterest"], decoded_value.maxNumRegionsOfInterest, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageProcessingPropertiesQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOpticalFlowImageFormatInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceImageProcessingPropertiesQCOM& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceImageProcessingPropertiesQCOM& meta_struct = *data; + const VkOpticalFlowImageFormatInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkOpticalFlowImageFormatInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxWeightFilterPhases"], decoded_value.maxWeightFilterPhases, options); - FieldToJson(jdata["maxWeightFilterDimension"], meta_struct.maxWeightFilterDimension, options); - FieldToJson(jdata["maxBlockMatchRegion"], meta_struct.maxBlockMatchRegion, options); - FieldToJson(jdata["maxBoxFilterBlockSize"], meta_struct.maxBoxFilterBlockSize, options); + FieldToJson(VkOpticalFlowUsageFlagsNV_t(),jdata["usage"], decoded_value.usage, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceNestedCommandBufferFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOpticalFlowImageFormatPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceNestedCommandBufferFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceNestedCommandBufferFeaturesEXT& meta_struct = *data; + const VkOpticalFlowImageFormatPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkOpticalFlowImageFormatPropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["nestedCommandBuffer"] = static_cast(decoded_value.nestedCommandBuffer); - jdata["nestedCommandBufferRendering"] = static_cast(decoded_value.nestedCommandBufferRendering); - jdata["nestedCommandBufferSimultaneousUse"] = static_cast(decoded_value.nestedCommandBufferSimultaneousUse); + FieldToJson(jdata["format"], decoded_value.format, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceNestedCommandBufferPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOpticalFlowSessionCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceNestedCommandBufferPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceNestedCommandBufferPropertiesEXT& meta_struct = *data; + const VkOpticalFlowSessionCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkOpticalFlowSessionCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maxCommandBufferNestingLevel"], decoded_value.maxCommandBufferNestingLevel, options); + FieldToJson(jdata["width"], decoded_value.width, options); + FieldToJson(jdata["height"], decoded_value.height, options); + FieldToJson(jdata["imageFormat"], decoded_value.imageFormat, options); + FieldToJson(jdata["flowVectorFormat"], decoded_value.flowVectorFormat, options); + FieldToJson(jdata["costFormat"], decoded_value.costFormat, options); + FieldToJson(VkOpticalFlowGridSizeFlagsNV_t(),jdata["outputGridSize"], decoded_value.outputGridSize, options); + FieldToJson(VkOpticalFlowGridSizeFlagsNV_t(),jdata["hintGridSize"], decoded_value.hintGridSize, options); + FieldToJson(jdata["performanceLevel"], decoded_value.performanceLevel, options); + FieldToJson(VkOpticalFlowSessionCreateFlagsNV_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalMemoryAcquireUnmodifiedEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOpticalFlowSessionCreatePrivateDataInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkExternalMemoryAcquireUnmodifiedEXT& decoded_value = *data->decoded_value; - const Decoded_VkExternalMemoryAcquireUnmodifiedEXT& meta_struct = *data; + const VkOpticalFlowSessionCreatePrivateDataInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkOpticalFlowSessionCreatePrivateDataInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["acquireUnmodifiedMemory"] = static_cast(decoded_value.acquireUnmodifiedMemory); + FieldToJson(jdata["id"], decoded_value.id, options); + FieldToJson(jdata["size"], decoded_value.size, options); + FieldToJson(jdata["pPrivateData"], meta_struct.pPrivateData, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOpticalFlowExecuteInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT& meta_struct = *data; + const VkOpticalFlowExecuteInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkOpticalFlowExecuteInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["extendedDynamicState3TessellationDomainOrigin"] = static_cast(decoded_value.extendedDynamicState3TessellationDomainOrigin); - jdata["extendedDynamicState3DepthClampEnable"] = static_cast(decoded_value.extendedDynamicState3DepthClampEnable); - jdata["extendedDynamicState3PolygonMode"] = static_cast(decoded_value.extendedDynamicState3PolygonMode); - jdata["extendedDynamicState3RasterizationSamples"] = static_cast(decoded_value.extendedDynamicState3RasterizationSamples); - jdata["extendedDynamicState3SampleMask"] = static_cast(decoded_value.extendedDynamicState3SampleMask); - jdata["extendedDynamicState3AlphaToCoverageEnable"] = static_cast(decoded_value.extendedDynamicState3AlphaToCoverageEnable); - jdata["extendedDynamicState3AlphaToOneEnable"] = static_cast(decoded_value.extendedDynamicState3AlphaToOneEnable); - jdata["extendedDynamicState3LogicOpEnable"] = static_cast(decoded_value.extendedDynamicState3LogicOpEnable); - jdata["extendedDynamicState3ColorBlendEnable"] = static_cast(decoded_value.extendedDynamicState3ColorBlendEnable); - jdata["extendedDynamicState3ColorBlendEquation"] = static_cast(decoded_value.extendedDynamicState3ColorBlendEquation); - jdata["extendedDynamicState3ColorWriteMask"] = static_cast(decoded_value.extendedDynamicState3ColorWriteMask); - jdata["extendedDynamicState3RasterizationStream"] = static_cast(decoded_value.extendedDynamicState3RasterizationStream); - jdata["extendedDynamicState3ConservativeRasterizationMode"] = static_cast(decoded_value.extendedDynamicState3ConservativeRasterizationMode); - jdata["extendedDynamicState3ExtraPrimitiveOverestimationSize"] = static_cast(decoded_value.extendedDynamicState3ExtraPrimitiveOverestimationSize); - jdata["extendedDynamicState3DepthClipEnable"] = static_cast(decoded_value.extendedDynamicState3DepthClipEnable); - jdata["extendedDynamicState3SampleLocationsEnable"] = static_cast(decoded_value.extendedDynamicState3SampleLocationsEnable); - jdata["extendedDynamicState3ColorBlendAdvanced"] = static_cast(decoded_value.extendedDynamicState3ColorBlendAdvanced); - jdata["extendedDynamicState3ProvokingVertexMode"] = static_cast(decoded_value.extendedDynamicState3ProvokingVertexMode); - jdata["extendedDynamicState3LineRasterizationMode"] = static_cast(decoded_value.extendedDynamicState3LineRasterizationMode); - jdata["extendedDynamicState3LineStippleEnable"] = static_cast(decoded_value.extendedDynamicState3LineStippleEnable); - jdata["extendedDynamicState3DepthClipNegativeOneToOne"] = static_cast(decoded_value.extendedDynamicState3DepthClipNegativeOneToOne); - jdata["extendedDynamicState3ViewportWScalingEnable"] = static_cast(decoded_value.extendedDynamicState3ViewportWScalingEnable); - jdata["extendedDynamicState3ViewportSwizzle"] = static_cast(decoded_value.extendedDynamicState3ViewportSwizzle); - jdata["extendedDynamicState3CoverageToColorEnable"] = static_cast(decoded_value.extendedDynamicState3CoverageToColorEnable); - jdata["extendedDynamicState3CoverageToColorLocation"] = static_cast(decoded_value.extendedDynamicState3CoverageToColorLocation); - jdata["extendedDynamicState3CoverageModulationMode"] = static_cast(decoded_value.extendedDynamicState3CoverageModulationMode); - jdata["extendedDynamicState3CoverageModulationTableEnable"] = static_cast(decoded_value.extendedDynamicState3CoverageModulationTableEnable); - jdata["extendedDynamicState3CoverageModulationTable"] = static_cast(decoded_value.extendedDynamicState3CoverageModulationTable); - jdata["extendedDynamicState3CoverageReductionMode"] = static_cast(decoded_value.extendedDynamicState3CoverageReductionMode); - jdata["extendedDynamicState3RepresentativeFragmentTestEnable"] = static_cast(decoded_value.extendedDynamicState3RepresentativeFragmentTestEnable); - jdata["extendedDynamicState3ShadingRateImageEnable"] = static_cast(decoded_value.extendedDynamicState3ShadingRateImageEnable); + FieldToJson(VkOpticalFlowExecuteFlagsNV_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); + FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLegacyDitheringFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExtendedDynamicState3PropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExtendedDynamicState3PropertiesEXT& meta_struct = *data; + const VkPhysicalDeviceLegacyDitheringFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceLegacyDitheringFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["dynamicPrimitiveTopologyUnrestricted"] = static_cast(decoded_value.dynamicPrimitiveTopologyUnrestricted); + jdata["legacyDithering"] = static_cast(decoded_value.legacyDithering); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkColorBlendEquationEXT* data, const JsonOptions& options) -{ - if (data && data->decoded_value) - { - const VkColorBlendEquationEXT& decoded_value = *data->decoded_value; - const Decoded_VkColorBlendEquationEXT& meta_struct = *data; - - FieldToJson(jdata["srcColorBlendFactor"], decoded_value.srcColorBlendFactor, options); - FieldToJson(jdata["dstColorBlendFactor"], decoded_value.dstColorBlendFactor, options); - FieldToJson(jdata["colorBlendOp"], decoded_value.colorBlendOp, options); - FieldToJson(jdata["srcAlphaBlendFactor"], decoded_value.srcAlphaBlendFactor, options); - FieldToJson(jdata["dstAlphaBlendFactor"], decoded_value.dstAlphaBlendFactor, options); - FieldToJson(jdata["alphaBlendOp"], decoded_value.alphaBlendOp, options); - } -} - -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkColorBlendAdvancedEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalFormatResolveFeaturesANDROID* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkColorBlendAdvancedEXT& decoded_value = *data->decoded_value; - const Decoded_VkColorBlendAdvancedEXT& meta_struct = *data; + const VkPhysicalDeviceExternalFormatResolveFeaturesANDROID& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExternalFormatResolveFeaturesANDROID& meta_struct = *data; - FieldToJson(jdata["advancedBlendOp"], decoded_value.advancedBlendOp, options); - jdata["srcPremultiplied"] = static_cast(decoded_value.srcPremultiplied); - jdata["dstPremultiplied"] = static_cast(decoded_value.dstPremultiplied); - FieldToJson(jdata["blendOverlap"], decoded_value.blendOverlap, options); - jdata["clampResults"] = static_cast(decoded_value.clampResults); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["externalFormatResolve"] = static_cast(decoded_value.externalFormatResolve); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalFormatResolvePropertiesANDROID* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceExternalFormatResolvePropertiesANDROID& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExternalFormatResolvePropertiesANDROID& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["subpassMergeFeedback"] = static_cast(decoded_value.subpassMergeFeedback); + jdata["nullColorAttachmentWithExternalFormatResolve"] = static_cast(decoded_value.nullColorAttachmentWithExternalFormatResolve); + FieldToJson(jdata["externalFormatResolveChromaOffsetX"], decoded_value.externalFormatResolveChromaOffsetX, options); + FieldToJson(jdata["externalFormatResolveChromaOffsetY"], decoded_value.externalFormatResolveChromaOffsetY, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassCreationControlEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAndroidHardwareBufferFormatResolvePropertiesANDROID* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassCreationControlEXT& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassCreationControlEXT& meta_struct = *data; + const VkAndroidHardwareBufferFormatResolvePropertiesANDROID& decoded_value = *data->decoded_value; + const Decoded_VkAndroidHardwareBufferFormatResolvePropertiesANDROID& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["disallowMerging"] = static_cast(decoded_value.disallowMerging); + FieldToJson(jdata["colorAttachmentFormat"], decoded_value.colorAttachmentFormat, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassCreationFeedbackInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceAntiLagFeaturesAMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassCreationFeedbackInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassCreationFeedbackInfoEXT& meta_struct = *data; + const VkPhysicalDeviceAntiLagFeaturesAMD& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceAntiLagFeaturesAMD& meta_struct = *data; - FieldToJson(jdata["postMergeSubpassCount"], decoded_value.postMergeSubpassCount, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["antiLag"] = static_cast(decoded_value.antiLag); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassCreationFeedbackCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAntiLagPresentationInfoAMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassCreationFeedbackCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassCreationFeedbackCreateInfoEXT& meta_struct = *data; + const VkAntiLagPresentationInfoAMD& decoded_value = *data->decoded_value; + const Decoded_VkAntiLagPresentationInfoAMD& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pRenderPassFeedback"], meta_struct.pRenderPassFeedback, options); + FieldToJson(jdata["stage"], decoded_value.stage, options); + FieldToJson(jdata["frameIndex"], decoded_value.frameIndex, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassSubpassFeedbackInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAntiLagDataAMD* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassSubpassFeedbackInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassSubpassFeedbackInfoEXT& meta_struct = *data; + const VkAntiLagDataAMD& decoded_value = *data->decoded_value; + const Decoded_VkAntiLagDataAMD& meta_struct = *data; - FieldToJson(jdata["subpassMergeStatus"], decoded_value.subpassMergeStatus, options); - FieldToJson(jdata["description"], &meta_struct.description, options); - FieldToJson(jdata["postMergeIndex"], decoded_value.postMergeIndex, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["mode"], decoded_value.mode, options); + FieldToJson(jdata["maxFPS"], decoded_value.maxFPS, options); + FieldToJson(jdata["pPresentationInfo"], meta_struct.pPresentationInfo, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassSubpassFeedbackCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderObjectFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderPassSubpassFeedbackCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkRenderPassSubpassFeedbackCreateInfoEXT& meta_struct = *data; + const VkPhysicalDeviceShaderObjectFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderObjectFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["pSubpassFeedback"], meta_struct.pSubpassFeedback, options); + jdata["shaderObject"] = static_cast(decoded_value.shaderObject); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDirectDriverLoadingInfoLUNARG* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderObjectPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDirectDriverLoadingInfoLUNARG& decoded_value = *data->decoded_value; - const Decoded_VkDirectDriverLoadingInfoLUNARG& meta_struct = *data; + const VkPhysicalDeviceShaderObjectPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderObjectPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkDirectDriverLoadingFlagsLUNARG_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["pfnGetInstanceProcAddr"], to_hex_variable_width(meta_struct.pfnGetInstanceProcAddr), options); + FieldToJson(jdata["shaderBinaryUUID"], uuid_to_string(sizeof(decoded_value.shaderBinaryUUID), decoded_value.shaderBinaryUUID), options); + FieldToJson(jdata["shaderBinaryVersion"], decoded_value.shaderBinaryVersion, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDirectDriverLoadingListLUNARG* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkShaderCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDirectDriverLoadingListLUNARG& decoded_value = *data->decoded_value; - const Decoded_VkDirectDriverLoadingListLUNARG& meta_struct = *data; + const VkShaderCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkShaderCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["mode"], decoded_value.mode, options); - FieldToJson(jdata["driverCount"], decoded_value.driverCount, options); - FieldToJson(jdata["pDrivers"], meta_struct.pDrivers, options); + FieldToJson(VkShaderCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["stage"], decoded_value.stage, options); + FieldToJson(VkShaderStageFlags_t(),jdata["nextStage"], decoded_value.nextStage, options); + FieldToJson(jdata["codeType"], decoded_value.codeType, options); + FieldToJson(jdata["codeSize"], decoded_value.codeSize, options); + FieldToJson(jdata["pCode"], meta_struct.pCode, options); + FieldToJson(jdata["pName"], &meta_struct.pName, options); + FieldToJson(jdata["setLayoutCount"], decoded_value.setLayoutCount, options); + HandleToJson(jdata["pSetLayouts"], &meta_struct.pSetLayouts, options); + FieldToJson(jdata["pushConstantRangeCount"], decoded_value.pushConstantRangeCount, options); + FieldToJson(jdata["pPushConstantRanges"], meta_struct.pPushConstantRanges, options); + FieldToJson(jdata["pSpecializationInfo"], meta_struct.pSpecializationInfo, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDepthClampRangeEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT& meta_struct = *data; + const VkDepthClampRangeEXT& decoded_value = *data->decoded_value; + const Decoded_VkDepthClampRangeEXT& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderModuleIdentifier"] = static_cast(decoded_value.shaderModuleIdentifier); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["minDepthClamp"], decoded_value.minDepthClamp, options); + FieldToJson(jdata["maxDepthClamp"], decoded_value.maxDepthClamp, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTilePropertiesFeaturesQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT& meta_struct = *data; + const VkPhysicalDeviceTilePropertiesFeaturesQCOM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceTilePropertiesFeaturesQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["shaderModuleIdentifierAlgorithmUUID"], uuid_to_string(sizeof(decoded_value.shaderModuleIdentifierAlgorithmUUID), decoded_value.shaderModuleIdentifierAlgorithmUUID), options); + jdata["tileProperties"] = static_cast(decoded_value.tileProperties); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineShaderStageModuleIdentifierCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTilePropertiesQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPipelineShaderStageModuleIdentifierCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkPipelineShaderStageModuleIdentifierCreateInfoEXT& meta_struct = *data; + const VkTilePropertiesQCOM& decoded_value = *data->decoded_value; + const Decoded_VkTilePropertiesQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["identifierSize"], decoded_value.identifierSize, options); - FieldToJson(jdata["pIdentifier"], meta_struct.pIdentifier, options); + FieldToJson(jdata["tileSize"], meta_struct.tileSize, options); + FieldToJson(jdata["apronSize"], meta_struct.apronSize, options); + FieldToJson(jdata["origin"], meta_struct.origin, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkShaderModuleIdentifierEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceAmigoProfilingFeaturesSEC* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkShaderModuleIdentifierEXT& decoded_value = *data->decoded_value; - const Decoded_VkShaderModuleIdentifierEXT& meta_struct = *data; + const VkPhysicalDeviceAmigoProfilingFeaturesSEC& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceAmigoProfilingFeaturesSEC& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["identifierSize"], decoded_value.identifierSize, options); - FieldToJson(jdata["identifier"], &meta_struct.identifier, options); + jdata["amigoProfiling"] = static_cast(decoded_value.amigoProfiling); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceOpticalFlowFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAmigoProfilingSubmitInfoSEC* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceOpticalFlowFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceOpticalFlowFeaturesNV& meta_struct = *data; + const VkAmigoProfilingSubmitInfoSEC& decoded_value = *data->decoded_value; + const Decoded_VkAmigoProfilingSubmitInfoSEC& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["opticalFlow"] = static_cast(decoded_value.opticalFlow); + FieldToJson(jdata["firstDrawTimestamp"], decoded_value.firstDrawTimestamp, options); + FieldToJson(jdata["swapBufferTimestamp"], decoded_value.swapBufferTimestamp, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceOpticalFlowPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceOpticalFlowPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceOpticalFlowPropertiesNV& meta_struct = *data; + const VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkOpticalFlowGridSizeFlagsNV_t(),jdata["supportedOutputGridSizes"], decoded_value.supportedOutputGridSizes, options); - FieldToJson(VkOpticalFlowGridSizeFlagsNV_t(),jdata["supportedHintGridSizes"], decoded_value.supportedHintGridSizes, options); - jdata["hintSupported"] = static_cast(decoded_value.hintSupported); - jdata["costSupported"] = static_cast(decoded_value.costSupported); - jdata["bidirectionalFlowSupported"] = static_cast(decoded_value.bidirectionalFlowSupported); - jdata["globalFlowSupported"] = static_cast(decoded_value.globalFlowSupported); - FieldToJson(jdata["minWidth"], decoded_value.minWidth, options); - FieldToJson(jdata["minHeight"], decoded_value.minHeight, options); - FieldToJson(jdata["maxWidth"], decoded_value.maxWidth, options); - FieldToJson(jdata["maxHeight"], decoded_value.maxHeight, options); - FieldToJson(jdata["maxNumRegionsOfInterest"], decoded_value.maxNumRegionsOfInterest, options); + jdata["multiviewPerViewViewports"] = static_cast(decoded_value.multiviewPerViewViewports); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOpticalFlowImageFormatInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkOpticalFlowImageFormatInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkOpticalFlowImageFormatInfoNV& meta_struct = *data; + const VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkOpticalFlowUsageFlagsNV_t(),jdata["usage"], decoded_value.usage, options); + FieldToJson(jdata["rayTracingInvocationReorderReorderingHint"], decoded_value.rayTracingInvocationReorderReorderingHint, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOpticalFlowImageFormatPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkOpticalFlowImageFormatPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkOpticalFlowImageFormatPropertiesNV& meta_struct = *data; + const VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["format"], decoded_value.format, options); + jdata["rayTracingInvocationReorder"] = static_cast(decoded_value.rayTracingInvocationReorder); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOpticalFlowSessionCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCooperativeVectorPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkOpticalFlowSessionCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkOpticalFlowSessionCreateInfoNV& meta_struct = *data; + const VkPhysicalDeviceCooperativeVectorPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceCooperativeVectorPropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["width"], decoded_value.width, options); - FieldToJson(jdata["height"], decoded_value.height, options); - FieldToJson(jdata["imageFormat"], decoded_value.imageFormat, options); - FieldToJson(jdata["flowVectorFormat"], decoded_value.flowVectorFormat, options); - FieldToJson(jdata["costFormat"], decoded_value.costFormat, options); - FieldToJson(VkOpticalFlowGridSizeFlagsNV_t(),jdata["outputGridSize"], decoded_value.outputGridSize, options); - FieldToJson(VkOpticalFlowGridSizeFlagsNV_t(),jdata["hintGridSize"], decoded_value.hintGridSize, options); - FieldToJson(jdata["performanceLevel"], decoded_value.performanceLevel, options); - FieldToJson(VkOpticalFlowSessionCreateFlagsNV_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(VkShaderStageFlags_t(),jdata["cooperativeVectorSupportedStages"], decoded_value.cooperativeVectorSupportedStages, options); + jdata["cooperativeVectorTrainingFloat16Accumulation"] = static_cast(decoded_value.cooperativeVectorTrainingFloat16Accumulation); + jdata["cooperativeVectorTrainingFloat32Accumulation"] = static_cast(decoded_value.cooperativeVectorTrainingFloat32Accumulation); + FieldToJson(jdata["maxCooperativeVectorComponents"], decoded_value.maxCooperativeVectorComponents, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOpticalFlowSessionCreatePrivateDataInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCooperativeVectorFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkOpticalFlowSessionCreatePrivateDataInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkOpticalFlowSessionCreatePrivateDataInfoNV& meta_struct = *data; + const VkPhysicalDeviceCooperativeVectorFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceCooperativeVectorFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["id"], decoded_value.id, options); - FieldToJson(jdata["size"], decoded_value.size, options); - FieldToJson(jdata["pPrivateData"], meta_struct.pPrivateData, options); + jdata["cooperativeVector"] = static_cast(decoded_value.cooperativeVector); + jdata["cooperativeVectorTraining"] = static_cast(decoded_value.cooperativeVectorTraining); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOpticalFlowExecuteInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCooperativeVectorPropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkOpticalFlowExecuteInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkOpticalFlowExecuteInfoNV& meta_struct = *data; + const VkCooperativeVectorPropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkCooperativeVectorPropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkOpticalFlowExecuteFlagsNV_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); - FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); + FieldToJson(jdata["inputType"], decoded_value.inputType, options); + FieldToJson(jdata["inputInterpretation"], decoded_value.inputInterpretation, options); + FieldToJson(jdata["matrixInterpretation"], decoded_value.matrixInterpretation, options); + FieldToJson(jdata["biasInterpretation"], decoded_value.biasInterpretation, options); + FieldToJson(jdata["resultType"], decoded_value.resultType, options); + jdata["transpose"] = static_cast(decoded_value.transpose); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLegacyDitheringFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkConvertCooperativeVectorMatrixInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceLegacyDitheringFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceLegacyDitheringFeaturesEXT& meta_struct = *data; + const VkConvertCooperativeVectorMatrixInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkConvertCooperativeVectorMatrixInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["legacyDithering"] = static_cast(decoded_value.legacyDithering); + FieldToJson(jdata["srcSize"], decoded_value.srcSize, options); + FieldToJson(jdata["srcData"], meta_struct.srcData, options); + FieldToJson(jdata["pDstSize"], meta_struct.pDstSize, options); + FieldToJson(jdata["dstData"], meta_struct.dstData, options); + FieldToJson(jdata["srcComponentType"], decoded_value.srcComponentType, options); + FieldToJson(jdata["dstComponentType"], decoded_value.dstComponentType, options); + FieldToJson(jdata["numRows"], decoded_value.numRows, options); + FieldToJson(jdata["numColumns"], decoded_value.numColumns, options); + FieldToJson(jdata["srcLayout"], decoded_value.srcLayout, options); + FieldToJson(jdata["srcStride"], decoded_value.srcStride, options); + FieldToJson(jdata["dstLayout"], decoded_value.dstLayout, options); + FieldToJson(jdata["dstStride"], decoded_value.dstStride, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalFormatResolveFeaturesANDROID* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExternalFormatResolveFeaturesANDROID& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExternalFormatResolveFeaturesANDROID& meta_struct = *data; + const VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["externalFormatResolve"] = static_cast(decoded_value.externalFormatResolve); + jdata["extendedSparseAddressSpace"] = static_cast(decoded_value.extendedSparseAddressSpace); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalFormatResolvePropertiesANDROID* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExternalFormatResolvePropertiesANDROID& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExternalFormatResolvePropertiesANDROID& meta_struct = *data; + const VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["nullColorAttachmentWithExternalFormatResolve"] = static_cast(decoded_value.nullColorAttachmentWithExternalFormatResolve); - FieldToJson(jdata["externalFormatResolveChromaOffsetX"], decoded_value.externalFormatResolveChromaOffsetX, options); - FieldToJson(jdata["externalFormatResolveChromaOffsetY"], decoded_value.externalFormatResolveChromaOffsetY, options); + FieldToJson(jdata["extendedSparseAddressSpaceSize"], decoded_value.extendedSparseAddressSpaceSize, options); + FieldToJson(VkImageUsageFlags_t(),jdata["extendedSparseImageUsageFlags"], decoded_value.extendedSparseImageUsageFlags, options); + FieldToJson(VkBufferUsageFlags_t(),jdata["extendedSparseBufferUsageFlags"], decoded_value.extendedSparseBufferUsageFlags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAndroidHardwareBufferFormatResolvePropertiesANDROID* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAndroidHardwareBufferFormatResolvePropertiesANDROID& decoded_value = *data->decoded_value; - const Decoded_VkAndroidHardwareBufferFormatResolvePropertiesANDROID& meta_struct = *data; + const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["colorAttachmentFormat"], decoded_value.colorAttachmentFormat, options); + jdata["legacyVertexAttributes"] = static_cast(decoded_value.legacyVertexAttributes); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceAntiLagFeaturesAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceAntiLagFeaturesAMD& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceAntiLagFeaturesAMD& meta_struct = *data; + const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["antiLag"] = static_cast(decoded_value.antiLag); + jdata["nativeUnalignedPerformance"] = static_cast(decoded_value.nativeUnalignedPerformance); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAntiLagPresentationInfoAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLayerSettingsCreateInfoEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAntiLagPresentationInfoAMD& decoded_value = *data->decoded_value; - const Decoded_VkAntiLagPresentationInfoAMD& meta_struct = *data; + const VkLayerSettingsCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkLayerSettingsCreateInfoEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["stage"], decoded_value.stage, options); - FieldToJson(jdata["frameIndex"], decoded_value.frameIndex, options); + FieldToJson(jdata["settingCount"], decoded_value.settingCount, options); + FieldToJson(jdata["pSettings"], meta_struct.pSettings, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAntiLagDataAMD* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAntiLagDataAMD& decoded_value = *data->decoded_value; - const Decoded_VkAntiLagDataAMD& meta_struct = *data; + const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["mode"], decoded_value.mode, options); - FieldToJson(jdata["maxFPS"], decoded_value.maxFPS, options); - FieldToJson(jdata["pPresentationInfo"], meta_struct.pPresentationInfo, options); + jdata["shaderCoreBuiltins"] = static_cast(decoded_value.shaderCoreBuiltins); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderObjectFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderObjectFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderObjectFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderObject"] = static_cast(decoded_value.shaderObject); + FieldToJson(jdata["shaderCoreMask"], decoded_value.shaderCoreMask, options); + FieldToJson(jdata["shaderCoreCount"], decoded_value.shaderCoreCount, options); + FieldToJson(jdata["shaderWarpsPerCore"], decoded_value.shaderWarpsPerCore, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderObjectPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderObjectPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderObjectPropertiesEXT& meta_struct = *data; + const VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["shaderBinaryUUID"], uuid_to_string(sizeof(decoded_value.shaderBinaryUUID), decoded_value.shaderBinaryUUID), options); - FieldToJson(jdata["shaderBinaryVersion"], decoded_value.shaderBinaryVersion, options); + jdata["pipelineLibraryGroupHandles"] = static_cast(decoded_value.pipelineLibraryGroupHandles); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkShaderCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkShaderCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkShaderCreateInfoEXT& meta_struct = *data; + const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkShaderCreateFlagsEXT_t(),jdata["flags"], decoded_value.flags, options); - FieldToJson(jdata["stage"], decoded_value.stage, options); - FieldToJson(VkShaderStageFlags_t(),jdata["nextStage"], decoded_value.nextStage, options); - FieldToJson(jdata["codeType"], decoded_value.codeType, options); - FieldToJson(jdata["codeSize"], decoded_value.codeSize, options); - FieldToJson(jdata["pCode"], meta_struct.pCode, options); - FieldToJson(jdata["pName"], &meta_struct.pName, options); - FieldToJson(jdata["setLayoutCount"], decoded_value.setLayoutCount, options); - HandleToJson(jdata["pSetLayouts"], &meta_struct.pSetLayouts, options); - FieldToJson(jdata["pushConstantRangeCount"], decoded_value.pushConstantRangeCount, options); - FieldToJson(jdata["pPushConstantRanges"], meta_struct.pPushConstantRanges, options); - FieldToJson(jdata["pSpecializationInfo"], meta_struct.pSpecializationInfo, options); + jdata["dynamicRenderingUnusedAttachments"] = static_cast(decoded_value.dynamicRenderingUnusedAttachments); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDepthClampRangeEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLatencySleepModeInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkDepthClampRangeEXT& decoded_value = *data->decoded_value; - const Decoded_VkDepthClampRangeEXT& meta_struct = *data; + const VkLatencySleepModeInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkLatencySleepModeInfoNV& meta_struct = *data; - FieldToJson(jdata["minDepthClamp"], decoded_value.minDepthClamp, options); - FieldToJson(jdata["maxDepthClamp"], decoded_value.maxDepthClamp, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["lowLatencyMode"] = static_cast(decoded_value.lowLatencyMode); + jdata["lowLatencyBoost"] = static_cast(decoded_value.lowLatencyBoost); + FieldToJson(jdata["minimumIntervalUs"], decoded_value.minimumIntervalUs, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTilePropertiesFeaturesQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLatencySleepInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceTilePropertiesFeaturesQCOM& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceTilePropertiesFeaturesQCOM& meta_struct = *data; + const VkLatencySleepInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkLatencySleepInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["tileProperties"] = static_cast(decoded_value.tileProperties); + HandleToJson(jdata["signalSemaphore"], meta_struct.signalSemaphore, options); + FieldToJson(jdata["value"], decoded_value.value, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTilePropertiesQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSetLatencyMarkerInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkTilePropertiesQCOM& decoded_value = *data->decoded_value; - const Decoded_VkTilePropertiesQCOM& meta_struct = *data; + const VkSetLatencyMarkerInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkSetLatencyMarkerInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["tileSize"], meta_struct.tileSize, options); - FieldToJson(jdata["apronSize"], meta_struct.apronSize, options); - FieldToJson(jdata["origin"], meta_struct.origin, options); + FieldToJson(jdata["presentID"], decoded_value.presentID, options); + FieldToJson(jdata["marker"], decoded_value.marker, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceAmigoProfilingFeaturesSEC* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLatencyTimingsFrameReportNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceAmigoProfilingFeaturesSEC& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceAmigoProfilingFeaturesSEC& meta_struct = *data; + const VkLatencyTimingsFrameReportNV& decoded_value = *data->decoded_value; + const Decoded_VkLatencyTimingsFrameReportNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["amigoProfiling"] = static_cast(decoded_value.amigoProfiling); + FieldToJson(jdata["presentID"], decoded_value.presentID, options); + FieldToJson(jdata["inputSampleTimeUs"], decoded_value.inputSampleTimeUs, options); + FieldToJson(jdata["simStartTimeUs"], decoded_value.simStartTimeUs, options); + FieldToJson(jdata["simEndTimeUs"], decoded_value.simEndTimeUs, options); + FieldToJson(jdata["renderSubmitStartTimeUs"], decoded_value.renderSubmitStartTimeUs, options); + FieldToJson(jdata["renderSubmitEndTimeUs"], decoded_value.renderSubmitEndTimeUs, options); + FieldToJson(jdata["presentStartTimeUs"], decoded_value.presentStartTimeUs, options); + FieldToJson(jdata["presentEndTimeUs"], decoded_value.presentEndTimeUs, options); + FieldToJson(jdata["driverStartTimeUs"], decoded_value.driverStartTimeUs, options); + FieldToJson(jdata["driverEndTimeUs"], decoded_value.driverEndTimeUs, options); + FieldToJson(jdata["osRenderQueueStartTimeUs"], decoded_value.osRenderQueueStartTimeUs, options); + FieldToJson(jdata["osRenderQueueEndTimeUs"], decoded_value.osRenderQueueEndTimeUs, options); + FieldToJson(jdata["gpuRenderStartTimeUs"], decoded_value.gpuRenderStartTimeUs, options); + FieldToJson(jdata["gpuRenderEndTimeUs"], decoded_value.gpuRenderEndTimeUs, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAmigoProfilingSubmitInfoSEC* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGetLatencyMarkerInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkAmigoProfilingSubmitInfoSEC& decoded_value = *data->decoded_value; - const Decoded_VkAmigoProfilingSubmitInfoSEC& meta_struct = *data; + const VkGetLatencyMarkerInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkGetLatencyMarkerInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["firstDrawTimestamp"], decoded_value.firstDrawTimestamp, options); - FieldToJson(jdata["swapBufferTimestamp"], decoded_value.swapBufferTimestamp, options); + FieldToJson(jdata["timingCount"], decoded_value.timingCount, options); + FieldToJson(jdata["pTimings"], meta_struct.pTimings, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLatencySubmissionPresentIdNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM& meta_struct = *data; + const VkLatencySubmissionPresentIdNV& decoded_value = *data->decoded_value; + const Decoded_VkLatencySubmissionPresentIdNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["multiviewPerViewViewports"] = static_cast(decoded_value.multiviewPerViewViewports); + FieldToJson(jdata["presentID"], decoded_value.presentID, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainLatencyCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV& meta_struct = *data; + const VkSwapchainLatencyCreateInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkSwapchainLatencyCreateInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["rayTracingInvocationReorderReorderingHint"], decoded_value.rayTracingInvocationReorderReorderingHint, options); + jdata["latencyModeEnable"] = static_cast(decoded_value.latencyModeEnable); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOutOfBandQueueTypeInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV& meta_struct = *data; + const VkOutOfBandQueueTypeInfoNV& decoded_value = *data->decoded_value; + const Decoded_VkOutOfBandQueueTypeInfoNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["rayTracingInvocationReorder"] = static_cast(decoded_value.rayTracingInvocationReorder); + FieldToJson(jdata["queueType"], decoded_value.queueType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCooperativeVectorPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLatencySurfaceCapabilitiesNV* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceCooperativeVectorPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceCooperativeVectorPropertiesNV& meta_struct = *data; + const VkLatencySurfaceCapabilitiesNV& decoded_value = *data->decoded_value; + const Decoded_VkLatencySurfaceCapabilitiesNV& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(VkShaderStageFlags_t(),jdata["cooperativeVectorSupportedStages"], decoded_value.cooperativeVectorSupportedStages, options); - jdata["cooperativeVectorTrainingFloat16Accumulation"] = static_cast(decoded_value.cooperativeVectorTrainingFloat16Accumulation); - jdata["cooperativeVectorTrainingFloat32Accumulation"] = static_cast(decoded_value.cooperativeVectorTrainingFloat32Accumulation); - FieldToJson(jdata["maxCooperativeVectorComponents"], decoded_value.maxCooperativeVectorComponents, options); + FieldToJson(jdata["presentModeCount"], decoded_value.presentModeCount, options); + FieldToJson(jdata["pPresentModes"], meta_struct.pPresentModes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCooperativeVectorFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDataGraphFeaturesARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceCooperativeVectorFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceCooperativeVectorFeaturesNV& meta_struct = *data; + const VkPhysicalDeviceDataGraphFeaturesARM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDataGraphFeaturesARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["cooperativeVector"] = static_cast(decoded_value.cooperativeVector); - jdata["cooperativeVectorTraining"] = static_cast(decoded_value.cooperativeVectorTraining); + jdata["dataGraph"] = static_cast(decoded_value.dataGraph); + jdata["dataGraphUpdateAfterBind"] = static_cast(decoded_value.dataGraphUpdateAfterBind); + jdata["dataGraphSpecializationConstants"] = static_cast(decoded_value.dataGraphSpecializationConstants); + jdata["dataGraphDescriptorBuffer"] = static_cast(decoded_value.dataGraphDescriptorBuffer); + jdata["dataGraphShaderModule"] = static_cast(decoded_value.dataGraphShaderModule); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCooperativeVectorPropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineConstantARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkCooperativeVectorPropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkCooperativeVectorPropertiesNV& meta_struct = *data; + const VkDataGraphPipelineConstantARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelineConstantARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["inputType"], decoded_value.inputType, options); - FieldToJson(jdata["inputInterpretation"], decoded_value.inputInterpretation, options); - FieldToJson(jdata["matrixInterpretation"], decoded_value.matrixInterpretation, options); - FieldToJson(jdata["biasInterpretation"], decoded_value.biasInterpretation, options); - FieldToJson(jdata["resultType"], decoded_value.resultType, options); - jdata["transpose"] = static_cast(decoded_value.transpose); + FieldToJson(jdata["id"], decoded_value.id, options); + FieldToJson(jdata["pConstantData"], meta_struct.pConstantData, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkConvertCooperativeVectorMatrixInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineResourceInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkConvertCooperativeVectorMatrixInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkConvertCooperativeVectorMatrixInfoNV& meta_struct = *data; + const VkDataGraphPipelineResourceInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelineResourceInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["srcSize"], decoded_value.srcSize, options); - FieldToJson(jdata["srcData"], meta_struct.srcData, options); - FieldToJson(jdata["pDstSize"], meta_struct.pDstSize, options); - FieldToJson(jdata["dstData"], meta_struct.dstData, options); - FieldToJson(jdata["srcComponentType"], decoded_value.srcComponentType, options); - FieldToJson(jdata["dstComponentType"], decoded_value.dstComponentType, options); - FieldToJson(jdata["numRows"], decoded_value.numRows, options); - FieldToJson(jdata["numColumns"], decoded_value.numColumns, options); - FieldToJson(jdata["srcLayout"], decoded_value.srcLayout, options); - FieldToJson(jdata["srcStride"], decoded_value.srcStride, options); - FieldToJson(jdata["dstLayout"], decoded_value.dstLayout, options); - FieldToJson(jdata["dstStride"], decoded_value.dstStride, options); + FieldToJson(jdata["descriptorSet"], decoded_value.descriptorSet, options); + FieldToJson(jdata["binding"], decoded_value.binding, options); + FieldToJson(jdata["arrayElement"], decoded_value.arrayElement, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineCompilerControlCreateInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV& meta_struct = *data; + const VkDataGraphPipelineCompilerControlCreateInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelineCompilerControlCreateInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["extendedSparseAddressSpace"] = static_cast(decoded_value.extendedSparseAddressSpace); + FieldToJson(jdata["pVendorOptions"], &meta_struct.pVendorOptions, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineCreateInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV& meta_struct = *data; + const VkDataGraphPipelineCreateInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelineCreateInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["extendedSparseAddressSpaceSize"], decoded_value.extendedSparseAddressSpaceSize, options); - FieldToJson(VkImageUsageFlags_t(),jdata["extendedSparseImageUsageFlags"], decoded_value.extendedSparseImageUsageFlags, options); - FieldToJson(VkBufferUsageFlags_t(),jdata["extendedSparseBufferUsageFlags"], decoded_value.extendedSparseBufferUsageFlags, options); + FieldToJson(VkPipelineCreateFlags2_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["layout"], meta_struct.layout, options); + FieldToJson(jdata["resourceInfoCount"], decoded_value.resourceInfoCount, options); + FieldToJson(jdata["pResourceInfos"], meta_struct.pResourceInfos, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineShaderModuleCreateInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT& meta_struct = *data; + const VkDataGraphPipelineShaderModuleCreateInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelineShaderModuleCreateInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["legacyVertexAttributes"] = static_cast(decoded_value.legacyVertexAttributes); + HandleToJson(jdata["module"], meta_struct.module, options); + FieldToJson(jdata["pName"], &meta_struct.pName, options); + FieldToJson(jdata["pSpecializationInfo"], meta_struct.pSpecializationInfo, options); + FieldToJson(jdata["constantCount"], decoded_value.constantCount, options); + FieldToJson(jdata["pConstants"], meta_struct.pConstants, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineSessionCreateInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT& meta_struct = *data; + const VkDataGraphPipelineSessionCreateInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelineSessionCreateInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["nativeUnalignedPerformance"] = static_cast(decoded_value.nativeUnalignedPerformance); + FieldToJson(VkDataGraphPipelineSessionCreateFlagsARM_t(),jdata["flags"], decoded_value.flags, options); + HandleToJson(jdata["dataGraphPipeline"], meta_struct.dataGraphPipeline, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLayerSettingEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineSessionBindPointRequirementsInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkLayerSettingEXT& decoded_value = *data->decoded_value; - const Decoded_VkLayerSettingEXT& meta_struct = *data; + const VkDataGraphPipelineSessionBindPointRequirementsInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelineSessionBindPointRequirementsInfoARM& meta_struct = *data; - FieldToJson(jdata["pLayerName"], &meta_struct.pLayerName, options); - FieldToJson(jdata["pSettingName"], &meta_struct.pSettingName, options); - FieldToJson(jdata["type"], decoded_value.type, options); - FieldToJson(jdata["valueCount"], decoded_value.valueCount, options); - FieldToJson(jdata["pValues"], meta_struct.pValues, options); + FieldToJson(jdata["sType"], decoded_value.sType, options); + HandleToJson(jdata["session"], meta_struct.session, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLayerSettingsCreateInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineSessionBindPointRequirementARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkLayerSettingsCreateInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkLayerSettingsCreateInfoEXT& meta_struct = *data; + const VkDataGraphPipelineSessionBindPointRequirementARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelineSessionBindPointRequirementARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["settingCount"], decoded_value.settingCount, options); - FieldToJson(jdata["pSettings"], meta_struct.pSettings, options); + FieldToJson(jdata["bindPoint"], decoded_value.bindPoint, options); + FieldToJson(jdata["bindPointType"], decoded_value.bindPointType, options); + FieldToJson(jdata["numObjects"], decoded_value.numObjects, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineSessionMemoryRequirementsInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM& meta_struct = *data; + const VkDataGraphPipelineSessionMemoryRequirementsInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelineSessionMemoryRequirementsInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["shaderCoreBuiltins"] = static_cast(decoded_value.shaderCoreBuiltins); + HandleToJson(jdata["session"], meta_struct.session, options); + FieldToJson(jdata["bindPoint"], decoded_value.bindPoint, options); + FieldToJson(jdata["objectIndex"], decoded_value.objectIndex, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindDataGraphPipelineSessionMemoryInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM& meta_struct = *data; + const VkBindDataGraphPipelineSessionMemoryInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkBindDataGraphPipelineSessionMemoryInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["shaderCoreMask"], decoded_value.shaderCoreMask, options); - FieldToJson(jdata["shaderCoreCount"], decoded_value.shaderCoreCount, options); - FieldToJson(jdata["shaderWarpsPerCore"], decoded_value.shaderWarpsPerCore, options); + HandleToJson(jdata["session"], meta_struct.session, options); + FieldToJson(jdata["bindPoint"], decoded_value.bindPoint, options); + FieldToJson(jdata["objectIndex"], decoded_value.objectIndex, options); + HandleToJson(jdata["memory"], meta_struct.memory, options); + FieldToJson(jdata["memoryOffset"], decoded_value.memoryOffset, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT& meta_struct = *data; + const VkDataGraphPipelineInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelineInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["pipelineLibraryGroupHandles"] = static_cast(decoded_value.pipelineLibraryGroupHandles); + HandleToJson(jdata["dataGraphPipeline"], meta_struct.dataGraphPipeline, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelinePropertyQueryResultARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT& meta_struct = *data; + const VkDataGraphPipelinePropertyQueryResultARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelinePropertyQueryResultARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["dynamicRenderingUnusedAttachments"] = static_cast(decoded_value.dynamicRenderingUnusedAttachments); + FieldToJson(jdata["property"], decoded_value.property, options); + jdata["isText"] = static_cast(decoded_value.isText); + FieldToJson(jdata["dataSize"], decoded_value.dataSize, options); + FieldToJson(jdata["pData"], meta_struct.pData, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLatencySleepModeInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineIdentifierCreateInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkLatencySleepModeInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkLatencySleepModeInfoNV& meta_struct = *data; + const VkDataGraphPipelineIdentifierCreateInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelineIdentifierCreateInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["lowLatencyMode"] = static_cast(decoded_value.lowLatencyMode); - jdata["lowLatencyBoost"] = static_cast(decoded_value.lowLatencyBoost); - FieldToJson(jdata["minimumIntervalUs"], decoded_value.minimumIntervalUs, options); + FieldToJson(jdata["identifierSize"], decoded_value.identifierSize, options); + FieldToJson(jdata["pIdentifier"], meta_struct.pIdentifier, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLatencySleepInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineDispatchInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkLatencySleepInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkLatencySleepInfoNV& meta_struct = *data; + const VkDataGraphPipelineDispatchInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelineDispatchInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - HandleToJson(jdata["signalSemaphore"], meta_struct.signalSemaphore, options); - FieldToJson(jdata["value"], decoded_value.value, options); + FieldToJson(VkDataGraphPipelineDispatchFlagsARM_t(),jdata["flags"], decoded_value.flags, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSetLatencyMarkerInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDataGraphProcessingEngineARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSetLatencyMarkerInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkSetLatencyMarkerInfoNV& meta_struct = *data; + const VkPhysicalDeviceDataGraphProcessingEngineARM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDataGraphProcessingEngineARM& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["presentID"], decoded_value.presentID, options); - FieldToJson(jdata["marker"], decoded_value.marker, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["type"], decoded_value.type, options); + jdata["isForeign"] = static_cast(decoded_value.isForeign); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLatencyTimingsFrameReportNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDataGraphOperationSupportARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkLatencyTimingsFrameReportNV& decoded_value = *data->decoded_value; - const Decoded_VkLatencyTimingsFrameReportNV& meta_struct = *data; + const VkPhysicalDeviceDataGraphOperationSupportARM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDataGraphOperationSupportARM& meta_struct = *data; - FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["presentID"], decoded_value.presentID, options); - FieldToJson(jdata["inputSampleTimeUs"], decoded_value.inputSampleTimeUs, options); - FieldToJson(jdata["simStartTimeUs"], decoded_value.simStartTimeUs, options); - FieldToJson(jdata["simEndTimeUs"], decoded_value.simEndTimeUs, options); - FieldToJson(jdata["renderSubmitStartTimeUs"], decoded_value.renderSubmitStartTimeUs, options); - FieldToJson(jdata["renderSubmitEndTimeUs"], decoded_value.renderSubmitEndTimeUs, options); - FieldToJson(jdata["presentStartTimeUs"], decoded_value.presentStartTimeUs, options); - FieldToJson(jdata["presentEndTimeUs"], decoded_value.presentEndTimeUs, options); - FieldToJson(jdata["driverStartTimeUs"], decoded_value.driverStartTimeUs, options); - FieldToJson(jdata["driverEndTimeUs"], decoded_value.driverEndTimeUs, options); - FieldToJson(jdata["osRenderQueueStartTimeUs"], decoded_value.osRenderQueueStartTimeUs, options); - FieldToJson(jdata["osRenderQueueEndTimeUs"], decoded_value.osRenderQueueEndTimeUs, options); - FieldToJson(jdata["gpuRenderStartTimeUs"], decoded_value.gpuRenderStartTimeUs, options); - FieldToJson(jdata["gpuRenderEndTimeUs"], decoded_value.gpuRenderEndTimeUs, options); - FieldToJson(jdata["pNext"], meta_struct.pNext, options); + FieldToJson(jdata["operationType"], decoded_value.operationType, options); + FieldToJson(jdata["name"], &meta_struct.name, options); + FieldToJson(jdata["version"], decoded_value.version, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGetLatencyMarkerInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyDataGraphPropertiesARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkGetLatencyMarkerInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkGetLatencyMarkerInfoNV& meta_struct = *data; + const VkQueueFamilyDataGraphPropertiesARM& decoded_value = *data->decoded_value; + const Decoded_VkQueueFamilyDataGraphPropertiesARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["timingCount"], decoded_value.timingCount, options); - FieldToJson(jdata["pTimings"], meta_struct.pTimings, options); + FieldToJson(jdata["engine"], meta_struct.engine, options); + FieldToJson(jdata["operation"], meta_struct.operation, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLatencySubmissionPresentIdNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphProcessingEngineCreateInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkLatencySubmissionPresentIdNV& decoded_value = *data->decoded_value; - const Decoded_VkLatencySubmissionPresentIdNV& meta_struct = *data; + const VkDataGraphProcessingEngineCreateInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphProcessingEngineCreateInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["presentID"], decoded_value.presentID, options); + FieldToJson(jdata["processingEngineCount"], decoded_value.processingEngineCount, options); + FieldToJson(jdata["pProcessingEngines"], meta_struct.pProcessingEngines, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainLatencyCreateInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkSwapchainLatencyCreateInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkSwapchainLatencyCreateInfoNV& meta_struct = *data; + const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["latencyModeEnable"] = static_cast(decoded_value.latencyModeEnable); + FieldToJson(jdata["queueFamilyIndex"], decoded_value.queueFamilyIndex, options); + FieldToJson(jdata["engineType"], decoded_value.engineType, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOutOfBandQueueTypeInfoNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyDataGraphProcessingEnginePropertiesARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkOutOfBandQueueTypeInfoNV& decoded_value = *data->decoded_value; - const Decoded_VkOutOfBandQueueTypeInfoNV& meta_struct = *data; + const VkQueueFamilyDataGraphProcessingEnginePropertiesARM& decoded_value = *data->decoded_value; + const Decoded_VkQueueFamilyDataGraphProcessingEnginePropertiesARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["queueType"], decoded_value.queueType, options); + FieldToJson(VkExternalSemaphoreHandleTypeFlags_t(),jdata["foreignSemaphoreHandleTypes"], decoded_value.foreignSemaphoreHandleTypes, options); + FieldToJson(VkExternalMemoryHandleTypeFlags_t(),jdata["foreignMemoryHandleTypes"], decoded_value.foreignMemoryHandleTypes, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLatencySurfaceCapabilitiesNV* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkLatencySurfaceCapabilitiesNV& decoded_value = *data->decoded_value; - const Decoded_VkLatencySurfaceCapabilitiesNV& meta_struct = *data; + const VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["presentModeCount"], decoded_value.presentModeCount, options); - FieldToJson(jdata["pPresentModes"], meta_struct.pPresentModes, options); + FieldToJson(jdata["dimension"], decoded_value.dimension, options); + FieldToJson(jdata["zeroCount"], decoded_value.zeroCount, options); + FieldToJson(jdata["groupSize"], decoded_value.groupSize, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } @@ -17335,6 +17159,62 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTileMemorySizeIn } } +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDecompressMemoryRegionEXT* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkDecompressMemoryRegionEXT& decoded_value = *data->decoded_value; + const Decoded_VkDecompressMemoryRegionEXT& meta_struct = *data; + + FieldToJson(jdata["srcAddress"], to_hex_variable_width(decoded_value.srcAddress), options); + FieldToJson(jdata["dstAddress"], to_hex_variable_width(decoded_value.dstAddress), options); + FieldToJson(jdata["compressedSize"], decoded_value.compressedSize, options); + FieldToJson(jdata["decompressedSize"], decoded_value.decompressedSize, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDecompressMemoryInfoEXT* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkDecompressMemoryInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkDecompressMemoryInfoEXT& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkMemoryDecompressionMethodFlagsEXT_t(),jdata["decompressionMethod"], decoded_value.decompressionMethod, options); + FieldToJson(jdata["regionCount"], decoded_value.regionCount, options); + FieldToJson(jdata["pRegions"], meta_struct.pRegions, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMemoryDecompressionFeaturesEXT* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceMemoryDecompressionFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMemoryDecompressionFeaturesEXT& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["memoryDecompression"] = static_cast(decoded_value.memoryDecompression); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMemoryDecompressionPropertiesEXT* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceMemoryDecompressionPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceMemoryDecompressionPropertiesEXT& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkMemoryDecompressionMethodFlagsEXT_t(),jdata["decompressionMethods"], decoded_value.decompressionMethods, options); + FieldToJson(jdata["maxDecompressionIndirectCount"], decoded_value.maxDecompressionIndirectCount, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplaySurfaceStereoCreateInfoNV* data, const JsonOptions& options) { if (data && data->decoded_value) @@ -17891,41 +17771,68 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWriteIndirectExe } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageAlignmentControlFeaturesMESA* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageAlignmentControlFeaturesMESA* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceImageAlignmentControlFeaturesMESA& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceImageAlignmentControlFeaturesMESA& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["imageAlignmentControl"] = static_cast(decoded_value.imageAlignmentControl); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageAlignmentControlPropertiesMESA* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceImageAlignmentControlPropertiesMESA& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceImageAlignmentControlPropertiesMESA& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["supportedImageAlignmentMask"], decoded_value.supportedImageAlignmentMask, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageAlignmentControlCreateInfoMESA* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceImageAlignmentControlFeaturesMESA& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceImageAlignmentControlFeaturesMESA& meta_struct = *data; + const VkImageAlignmentControlCreateInfoMESA& decoded_value = *data->decoded_value; + const Decoded_VkImageAlignmentControlCreateInfoMESA& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["imageAlignmentControl"] = static_cast(decoded_value.imageAlignmentControl); + FieldToJson(jdata["maximumRequestedAlignment"], decoded_value.maximumRequestedAlignment, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageAlignmentControlPropertiesMESA* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceImageAlignmentControlPropertiesMESA& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceImageAlignmentControlPropertiesMESA& meta_struct = *data; + const VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["supportedImageAlignmentMask"], decoded_value.supportedImageAlignmentMask, options); + FieldToJson(jdata["rayTracingInvocationReorderReorderingHint"], decoded_value.rayTracingInvocationReorderReorderingHint, options); + FieldToJson(jdata["maxShaderBindingTableRecordIndex"], decoded_value.maxShaderBindingTableRecordIndex, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageAlignmentControlCreateInfoMESA* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkImageAlignmentControlCreateInfoMESA& decoded_value = *data->decoded_value; - const Decoded_VkImageAlignmentControlCreateInfoMESA& meta_struct = *data; + const VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - FieldToJson(jdata["maximumRequestedAlignment"], decoded_value.maximumRequestedAlignment, options); + jdata["rayTracingInvocationReorder"] = static_cast(decoded_value.rayTracingInvocationReorder); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } @@ -18094,6 +18001,80 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryGetMetalHa } } +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDevicePerformanceCountersByRegionFeaturesARM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["performanceCountersByRegion"] = static_cast(decoded_value.performanceCountersByRegion); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDevicePerformanceCountersByRegionPropertiesARM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["maxPerRegionPerformanceCounters"], decoded_value.maxPerRegionPerformanceCounters, options); + FieldToJson(jdata["performanceCounterRegionSize"], meta_struct.performanceCounterRegionSize, options); + FieldToJson(jdata["rowStrideAlignment"], decoded_value.rowStrideAlignment, options); + FieldToJson(jdata["regionAlignment"], decoded_value.regionAlignment, options); + jdata["identityTransformOrder"] = static_cast(decoded_value.identityTransformOrder); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceCounterARM* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPerformanceCounterARM& decoded_value = *data->decoded_value; + const Decoded_VkPerformanceCounterARM& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["counterID"], decoded_value.counterID, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceCounterDescriptionARM* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPerformanceCounterDescriptionARM& decoded_value = *data->decoded_value; + const Decoded_VkPerformanceCounterDescriptionARM& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(VkPerformanceCounterDescriptionFlagsARM_t(),jdata["flags"], decoded_value.flags, options); + FieldToJson(jdata["name"], &meta_struct.name, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassPerformanceCountersByRegionBeginInfoARM* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkRenderPassPerformanceCountersByRegionBeginInfoARM& decoded_value = *data->decoded_value; + const Decoded_VkRenderPassPerformanceCountersByRegionBeginInfoARM& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["counterAddressCount"], decoded_value.counterAddressCount, options); + FieldToJson(jdata["pCounterAddresses"], meta_struct.pCounterAddresses, options); + jdata["serializeRegions"] = static_cast(decoded_value.serializeRegions); + FieldToJson(jdata["counterIndexCount"], decoded_value.counterIndexCount, options); + FieldToJson(jdata["pCounterIndices"], meta_struct.pCounterIndices, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) @@ -18186,27 +18167,137 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePr } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingEndInfoEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkRenderingEndInfoEXT& decoded_value = *data->decoded_value; - const Decoded_VkRenderingEndInfoEXT& meta_struct = *data; + const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["zeroInitializeDeviceMemory"] = static_cast(decoded_value.zeroInitializeDeviceMemory); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* data, const JsonOptions& options) +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShader64BitIndexingFeaturesEXT* data, const JsonOptions& options) { if (data && data->decoded_value) { - const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT& decoded_value = *data->decoded_value; - const Decoded_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT& meta_struct = *data; + const VkPhysicalDeviceShader64BitIndexingFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShader64BitIndexingFeaturesEXT& meta_struct = *data; FieldToJson(jdata["sType"], decoded_value.sType, options); - jdata["zeroInitializeDeviceMemory"] = static_cast(decoded_value.zeroInitializeDeviceMemory); + jdata["shader64BitIndexing"] = static_cast(decoded_value.shader64BitIndexing); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCustomResolveFeaturesEXT* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceCustomResolveFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceCustomResolveFeaturesEXT& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["customResolve"] = static_cast(decoded_value.customResolve); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBeginCustomResolveInfoEXT* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkBeginCustomResolveInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkBeginCustomResolveInfoEXT& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCustomResolveCreateInfoEXT* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkCustomResolveCreateInfoEXT& decoded_value = *data->decoded_value; + const Decoded_VkCustomResolveCreateInfoEXT& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["customResolve"] = static_cast(decoded_value.customResolve); + FieldToJson(jdata["colorAttachmentCount"], decoded_value.colorAttachmentCount, options); + FieldToJson(jdata["pColorAttachmentFormats"], meta_struct.pColorAttachmentFormats, options); + FieldToJson(jdata["depthAttachmentFormat"], decoded_value.depthAttachmentFormat, options); + FieldToJson(jdata["stencilAttachmentFormat"], decoded_value.stencilAttachmentFormat, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCacheHeaderVersionDataGraphQCOM* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPipelineCacheHeaderVersionDataGraphQCOM& decoded_value = *data->decoded_value; + const Decoded_VkPipelineCacheHeaderVersionDataGraphQCOM& meta_struct = *data; + + FieldToJson(jdata["headerSize"], decoded_value.headerSize, options); + FieldToJson(jdata["headerVersion"], decoded_value.headerVersion, options); + FieldToJson(jdata["cacheType"], decoded_value.cacheType, options); + FieldToJson(jdata["cacheVersion"], decoded_value.cacheVersion, options); + FieldToJson(jdata["toolchainVersion"], &meta_struct.toolchainVersion, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineBuiltinModelCreateInfoQCOM* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkDataGraphPipelineBuiltinModelCreateInfoQCOM& decoded_value = *data->decoded_value; + const Decoded_VkDataGraphPipelineBuiltinModelCreateInfoQCOM& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["pOperation"], meta_struct.pOperation, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDataGraphModelFeaturesQCOM* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceDataGraphModelFeaturesQCOM& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceDataGraphModelFeaturesQCOM& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["dataGraphModel"] = static_cast(decoded_value.dataGraphModel); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderLongVectorFeaturesEXT* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceShaderLongVectorFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderLongVectorFeaturesEXT& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["longVector"] = static_cast(decoded_value.longVector); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderLongVectorPropertiesEXT* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceShaderLongVectorPropertiesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderLongVectorPropertiesEXT& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["maxVectorComponents"], decoded_value.maxVectorComponents, options); FieldToJson(jdata["pNext"], meta_struct.pNext, options); } } @@ -18224,6 +18315,46 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePi } } +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["shaderUniformBufferUnsizedArray"] = static_cast(decoded_value.shaderUniformBufferUnsizedArray); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkComputeOccupancyPriorityParametersNV* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkComputeOccupancyPriorityParametersNV& decoded_value = *data->decoded_value; + const Decoded_VkComputeOccupancyPriorityParametersNV& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + FieldToJson(jdata["occupancyPriority"], decoded_value.occupancyPriority, options); + FieldToJson(jdata["occupancyThrottling"], decoded_value.occupancyThrottling, options); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV* data, const JsonOptions& options) +{ + if (data && data->decoded_value) + { + const VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV& decoded_value = *data->decoded_value; + const Decoded_VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV& meta_struct = *data; + + FieldToJson(jdata["sType"], decoded_value.sType, options); + jdata["computeOccupancyPriority"] = static_cast(decoded_value.computeOccupancyPriority); + FieldToJson(jdata["pNext"], meta_struct.pNext, options); + } +} + void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureBuildRangeInfoKHR* data, const JsonOptions& options) { if (data && data->decoded_value) @@ -18865,6 +18996,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -18872,6 +19010,48 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_BUILTIN_MODEL_CREATE_INFO_QCOM: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -18921,6 +19101,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -19530,6 +19717,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -19712,6 +19906,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -19796,6 +19997,20 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -19824,16 +20039,37 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM: { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); FieldToJson(jdata, pnext, options); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM: { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); FieldToJson(jdata, pnext, options); break; } @@ -19887,6 +20123,27 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -20503,6 +20760,20 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -20608,6 +20879,20 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -20790,6 +21075,20 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -20930,6 +21229,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -21028,6 +21334,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -21035,6 +21348,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -21189,6 +21509,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -21315,6 +21642,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -21350,6 +21684,20 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -21462,6 +21810,20 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -21532,6 +21894,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -21686,16 +22055,16 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE: { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); FieldToJson(jdata, pnext, options); break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR: + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR: { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); FieldToJson(jdata, pnext, options); break; } @@ -22092,6 +22461,20 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + + case VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -22218,6 +22601,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -22260,6 +22650,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -22288,6 +22685,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -22477,6 +22881,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -22596,13 +23007,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -22645,13 +23049,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_KHR: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -22680,55 +23077,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_DECODE_USAGE_INFO_KHR: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -22939,48 +23287,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUANTIZATION_MAP_CAPABILITIES_KHR: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -22988,65 +23294,23 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR: - { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); - FieldToJson(jdata, pnext, options); - break; - } - - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR: + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR: { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); FieldToJson(jdata, pnext, options); break; } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR: + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_INFO_KHR: { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); FieldToJson(jdata, pnext, options); break; } - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_INFO_KHR: + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_PROFILE_RGB_CONVERSION_INFO_VALVE: { - const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); FieldToJson(jdata, pnext, options); break; } @@ -23086,6 +23350,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RGB_CONVERSION_CAPABILITIES_VALVE: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_INTRA_REFRESH_CREATE_INFO_KHR: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); @@ -23093,6 +23364,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const PNextNode* data, const Jso break; } + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_RGB_CONVERSION_CREATE_INFO_VALVE: + { + const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); + FieldToJson(jdata, pnext, options); + break; + } + case VK_STRUCTURE_TYPE_VIDEO_ENCODE_USAGE_INFO_KHR: { const auto* pnext = reinterpret_cast(data->GetMetaStructPointer()); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_to_json.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_to_json.h index cfee7af18..b05e07e68 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_to_json.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_struct_to_json.h @@ -58,40 +58,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH264 void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH264PictureInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH264ReferenceInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH264SliceHeader* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265ProfileTierLevelFlags* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265ProfileTierLevel* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265DecPicBufMgr* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265SubLayerHrdParameters* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265HrdFlags* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265HrdParameters* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265VpsFlags* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265VideoParameterSet* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265ScalingLists* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265ShortTermRefPicSetFlags* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265ShortTermRefPicSet* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265LongTermRefPicsSps* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265SpsVuiFlags* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265SequenceParameterSetVui* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265PredictorPaletteEntries* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265SpsFlags* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265SequenceParameterSet* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265PpsFlags* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoH265PictureParameterSet* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeH265PictureInfoFlags* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeH265PictureInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeH265ReferenceInfoFlags* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoDecodeH265ReferenceInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265WeightTableFlags* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265WeightTable* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265LongTermRefPics* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265SliceSegmentHeaderFlags* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265SliceSegmentHeader* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265ReferenceListsInfoFlags* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265ReferenceListsInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265PictureInfoFlags* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265PictureInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265ReferenceInfoFlags* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoEncodeH265ReferenceInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9ColorConfigFlags* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9ColorConfig* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_StdVideoVP9LoopFilterFlags* data, const util::JsonOptions& options = util::JsonOptions()); @@ -136,13 +102,9 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOffset2D* data, void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOffset3D* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRect2D* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferMemoryBarrier* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDispatchIndirectCommand* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrawIndexedIndirectCommand* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrawIndirectCommand* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSubresourceRange* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageMemoryBarrier* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryBarrier* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCacheHeaderVersionOne* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAllocationCallbacks* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkApplicationInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFormatProperties* data, const util::JsonOptions& options = util::JsonOptions()); @@ -175,18 +137,40 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageForma void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageMemoryRequirements* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFenceCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkEventCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueryPoolCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferViewCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubresourceLayout* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkComponentMapping* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandPoolCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferAllocateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferInheritanceInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferBeginInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferCopy* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSubresourceLayers* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferImageCopy* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCopy* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDispatchIndirectCommand* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCacheHeaderVersionOne* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkEventCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferViewCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSpecializationMapEntry* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSpecializationInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineShaderStageCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkComputePipelineCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPushConstantRange* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineLayoutCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyDescriptorSet* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorBufferInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorPoolSize* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorPoolCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetAllocateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutBinding* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrawIndexedIndirectCommand* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDrawIndirectCommand* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVertexInputBindingDescription* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVertexInputAttributeDescription* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineVertexInputStateCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); @@ -202,44 +186,23 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineColorBle void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineColorBlendStateCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineDynamicStateCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGraphicsPipelineCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPushConstantRange* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineLayoutCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyDescriptorSet* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorBufferInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorPoolSize* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorPoolCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetAllocateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutBinding* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentDescription* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentReference* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFramebufferCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassDescription* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassDependency* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandPoolCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferAllocateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferInheritanceInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferBeginInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferCopy* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSubresourceLayers* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferImageCopy* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkClearDepthStencilValue* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkClearAttachment* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkClearRect* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageBlit* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCopy* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageResolve* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassBeginInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSubgroupProperties* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindBufferMemoryInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindImageMemoryInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevice16BitStorageFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryDedicatedRequirements* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryDedicatedAllocateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryAllocateFlagsInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupRenderPassBeginInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupCommandBufferBeginInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupSubmitInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupBindSparseInfo* data, const util::JsonOptions& options = util::JsonOptions()); @@ -261,27 +224,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyPrope void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMemoryProperties2* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSparseImageFormatProperties2* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSparseImageFormatInfo2* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePointClippingProperties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkInputAttachmentAspectReference* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassInputAttachmentAspectCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewUsageCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineTessellationDomainOriginStateCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassMultiviewCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiviewFeatures* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiviewProperties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVariablePointersFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceProtectedMemoryFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceProtectedMemoryProperties* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceQueueInfo2* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkProtectedSubmitInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerYcbcrConversionCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerYcbcrConversionInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindImagePlaneMemoryInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImagePlaneMemoryRequirementsInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerYcbcrConversionImageFormatProperties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorUpdateTemplateEntry* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorUpdateTemplateCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalMemoryProperties* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalImageFormatInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalImageFormatProperties* data, const util::JsonOptions& options = util::JsonOptions()); @@ -297,8 +246,25 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportFenceCreat void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExportSemaphoreCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExternalSemaphoreInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkExternalSemaphoreProperties* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSubgroupProperties* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevice16BitStorageFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVariablePointersFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorUpdateTemplateEntry* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorUpdateTemplateCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance3Properties* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetLayoutSupport* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerYcbcrConversionCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerYcbcrConversionInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSamplerYcbcrConversionFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerYcbcrConversionImageFormatProperties* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceGroupRenderPassBeginInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePointClippingProperties* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkInputAttachmentAspectReference* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassInputAttachmentAspectCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineTessellationDomainOriginStateCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassMultiviewCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiviewFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiviewProperties* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderDrawParametersFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan11Features* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan11Properties* data, const util::JsonOptions& options = util::JsonOptions()); @@ -306,15 +272,21 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVu void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkConformanceVersion* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan12Properties* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageFormatListCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentDescription2* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentReference2* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassDescription2* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassDependency2* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassCreateInfo2* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassBeginInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassEndInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevice8BitStorageFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDriverProperties* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceHostQueryResetFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTimelineSemaphoreProperties* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreTypeCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTimelineSemaphoreSubmitInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreWaitInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreSignalInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferDeviceAddressInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferOpaqueCaptureAddressCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevice8BitStorageFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderAtomicInt64Features* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderFloat16Int8Features* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFloatControlsProperties* data, const util::JsonOptions& options = util::JsonOptions()); @@ -323,45 +295,34 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDe void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDescriptorIndexingProperties* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetVariableDescriptorCountAllocateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorSetVariableDescriptorCountLayoutSupport* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassDescriptionDepthStencilResolve* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDepthStencilResolveProperties* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceScalarBlockLayoutFeatures* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageStencilUsageCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerReductionModeCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSamplerFilterMinmaxProperties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkanMemoryModelFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentDescription2* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentReference2* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassDescription2* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassDependency2* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassCreateInfo2* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassBeginInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassEndInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubpassDescriptionDepthStencilResolve* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDepthStencilResolveProperties* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageStencilUsageCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImagelessFramebufferFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFramebufferAttachmentImageInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFramebufferAttachmentsCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassAttachmentBeginInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceUniformBufferStandardLayoutFeatures* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentReferenceStencilLayout* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentDescriptionStencilLayout* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceHostQueryResetFeatures* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTimelineSemaphoreFeatures* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTimelineSemaphoreProperties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreTypeCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTimelineSemaphoreSubmitInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreWaitInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreSignalInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceBufferDeviceAddressFeatures* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferDeviceAddressInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferOpaqueCaptureAddressCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryOpaqueCaptureAddressAllocateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceMemoryOpaqueCaptureAddressInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan13Features* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan13Properties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCreationFeedback* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCreationFeedbackCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceToolProperties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePrivateDataFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDevicePrivateDataCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPrivateDataSlotCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryBarrier2* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferMemoryBarrier2* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageMemoryBarrier2* data, const util::JsonOptions& options = util::JsonOptions()); @@ -370,8 +331,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSemaphoreSubmitI void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferSubmitInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubmitInfo2* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSynchronization2Features* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageRobustnessFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferCopy2* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyBufferInfo2* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCopy2* data, const util::JsonOptions& options = util::JsonOptions()); @@ -379,10 +338,19 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyImageInfo2* void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferImageCopy2* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyBufferToImageInfo2* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyImageToBufferInfo2* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageBlit2* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBlitImageInfo2* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageResolve2* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkResolveImageInfo2* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFormatProperties3* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance4Features* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance4Properties* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceBufferMemoryRequirements* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceImageMemoryRequirements* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCreationFeedback* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCreationFeedbackCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderTerminateInvocationFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineCreationCacheControlFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageRobustnessFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSubgroupSizeControlFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSubgroupSizeControlProperties* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineShaderStageRequiredSubgroupSizeCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); @@ -390,53 +358,46 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceIn void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceInlineUniformBlockProperties* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWriteDescriptorSetInlineUniformBlock* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorPoolInlineUniformBlockCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTextureCompressionASTCHDRFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageBlit2* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBlitImageInfo2* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageResolve2* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkResolveImageInfo2* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingAttachmentInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRenderingCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDynamicRenderingFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCommandBufferInheritanceRenderingInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderIntegerDotProductFeatures* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderIntegerDotProductProperties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTexelBufferAlignmentProperties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFormatProperties3* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance4Features* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance4Properties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceBufferMemoryRequirements* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceImageMemoryRequirements* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan14Features* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVulkan14Properties* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceQueueGlobalPriorityCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceGlobalPriorityQueryFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyGlobalPriorityProperties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderFloatControls2Features* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLineRasterizationFeatures* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLineRasterizationProperties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationLineStateCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVertexAttributeDivisorProperties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVertexInputBindingDivisorDescription* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineVertexInputDivisorStateCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVertexAttributeDivisorFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceIndexTypeUint8Features* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryMapInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryUnmapInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance5Features* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance5Properties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingAreaInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageSubresource2* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceImageSubresourceInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubresourceLayout2* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCreateFlags2CreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferUsageFlags2CreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePushDescriptorProperties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingAttachmentLocationInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingInputAttachmentIndexInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance6Features* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance6Properties* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindMemoryStatus* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceHostImageCopyFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceHostImageCopyProperties* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyImageToImageInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkHostImageLayoutTransitionInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubresourceHostMemcpySize* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkHostImageCopyDevicePerformanceQuery* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderSubgroupRotateFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderFloatControls2Features* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderExpectAssumeFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCreateFlags2CreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePushDescriptorProperties* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindDescriptorSetsInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPushConstantsInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPushDescriptorSetInfo* data, const util::JsonOptions& options = util::JsonOptions()); @@ -444,12 +405,17 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePi void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineRobustnessFeatures* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineRobustnessProperties* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRobustnessCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceHostImageCopyFeatures* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceHostImageCopyProperties* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyImageToImageInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkHostImageLayoutTransitionInfo* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSubresourceHostMemcpySize* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkHostImageCopyDevicePerformanceQuery* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLineRasterizationFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLineRasterizationProperties* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationLineStateCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVertexAttributeDivisorProperties* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVertexInputBindingDivisorDescription* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineVertexInputDivisorStateCreateInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVertexAttributeDivisorFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingAreaInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDynamicRenderingLocalReadFeatures* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingAttachmentLocationInfo* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingInputAttachmentIndexInfo* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilitiesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceFormatKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainCreateInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); @@ -509,22 +475,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264R void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264FrameSizeKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264RateControlLayerInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH264GopRemainingFrameInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265CapabilitiesKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265SessionCreateInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265QpKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265QualityLevelPropertiesKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265SessionParametersAddInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265SessionParametersCreateInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265SessionParametersGetInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265SessionParametersFeedbackInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265NaluSliceSegmentInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265PictureInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265DpbSlotInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265ProfileInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265RateControlInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265FrameSizeKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265RateControlLayerInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeH265GopRemainingFrameInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264ProfileInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264CapabilitiesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264SessionParametersAddInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); @@ -573,12 +523,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSh void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePortabilitySubsetFeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePortabilitySubsetPropertiesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderClockFeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH265ProfileInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH265CapabilitiesKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH265SessionParametersAddInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH265SessionParametersCreateInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH265PictureInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH265DpbSlotInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkFragmentShadingRateAttachmentInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineFragmentShadingRateStateCreateInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentShadingRateFeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); @@ -613,6 +557,7 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceSh void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTraceRaysIndirectCommand2KHR* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderUntypedPointersFeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilitiesPresentId2KHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentId2KHR* data, const util::JsonOptions& options = util::JsonOptions()); @@ -676,6 +621,13 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAttachmentFeedba void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCalibratedTimestampInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSetDescriptorBufferOffsetsInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindDescriptorBufferEmbeddedSamplersInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkStridedDeviceAddressRangeKHR* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyMemoryIndirectCommandKHR* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyMemoryIndirectInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyMemoryToImageIndirectCommandKHR* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCopyMemoryToImageIndirectInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeIntraRefreshCapabilitiesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeSessionIntraRefreshCreateInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeIntraRefreshInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); @@ -697,19 +649,21 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMa void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLayeredApiPropertiesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLayeredApiPropertiesListKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLayeredApiVulkanPropertiesKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryBarrierAccessFlags3KHR* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance8FeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderFmaFeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance9FeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance9PropertiesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyOwnershipTransferPropertiesKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoMaintenance2FeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH264InlineSessionParametersInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeH265InlineSessionParametersInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoDecodeAV1InlineSessionParametersInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRobustness2FeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRobustness2PropertiesKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance10FeaturesKHR* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMaintenance10PropertiesKHR* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingEndInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingAttachmentFlagsInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkResolveImageModeInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugReportCallbackCreateInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineRasterizationStateRasterizationOrderAMD* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDebugMarkerObjectNameInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); @@ -849,6 +803,17 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyCheck void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCheckpointDataNV* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyCheckpointProperties2NV* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCheckpointData2NV* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentTimingFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentTimingSurfaceCapabilitiesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainCalibratedTimestampInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainTimingPropertiesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainTimeDomainPropertiesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPastPresentationTimingInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentStageTimeEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPastPresentationTimingEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPastPresentationTimingPropertiesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentTimingInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPresentTimingsInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkInitializePerformanceApiInfoINTEL* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueryPoolPerformanceQueryCreateInfoINTEL* data, const util::JsonOptions& options = util::JsonOptions()); @@ -923,6 +888,7 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDeviceDeviceMemo void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerCustomBorderColorCreateInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCustomBorderColorPropertiesEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCustomBorderColorFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentBarrierFeaturesNV* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSurfaceCapabilitiesPresentBarrierNV* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainPresentBarrierCreateInfoNV* data, const util::JsonOptions& options = util::JsonOptions()); @@ -935,6 +901,18 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerTileBeginInfo void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerTileEndInfoQCOM* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDispatchTileInfoQCOM* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueryLowLatencySupportNV* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDescriptorBufferPropertiesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDescriptorBufferFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorAddressInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorBufferBindingInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDescriptorBufferBindingPushDescriptorBufferHandleEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBufferCaptureDescriptorDataInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageCaptureDescriptorDataInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewCaptureDescriptorDataInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSamplerCaptureDescriptorDataInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOpaqueCaptureDescriptorDataCreateInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureCaptureDescriptorDataInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkGraphicsPipelineLibraryCreateInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); @@ -996,6 +974,10 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkScreenSurfaceCre void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceColorWriteEnableFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineColorWriteCreateInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeRgbConversionCapabilitiesVALVE* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeProfileRgbConversionInfoVALVE* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkVideoEncodeSessionRgbConversionCreateInfoVALVE* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageViewMinLodFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageViewMinLodCreateInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiDrawFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); @@ -1108,7 +1090,6 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceEx void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLayerSettingEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLayerSettingsCreateInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* data, const util::JsonOptions& options = util::JsonOptions()); @@ -1123,6 +1104,28 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLatencySubmissio void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSwapchainLatencyCreateInfoNV* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkOutOfBandQueueTypeInfoNV* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkLatencySurfaceCapabilitiesNV* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDataGraphFeaturesARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineConstantARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineResourceInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineCompilerControlCreateInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineCreateInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineShaderModuleCreateInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineSessionCreateInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineSessionBindPointRequirementsInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineSessionBindPointRequirementARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineSessionMemoryRequirementsInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBindDataGraphPipelineSessionMemoryInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelinePropertyQueryResultARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineIdentifierCreateInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineDispatchInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDataGraphProcessingEngineARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDataGraphOperationSupportARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyDataGraphPropertiesARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphProcessingEngineCreateInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkQueueFamilyDataGraphProcessingEnginePropertiesARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePerStageDescriptorSetFeaturesNV* data, const util::JsonOptions& options = util::JsonOptions()); @@ -1143,6 +1146,10 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceTi void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTileMemoryRequirementsQCOM* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTileMemoryBindInfoQCOM* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkTileMemorySizeInfoQCOM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDecompressMemoryRegionEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDecompressMemoryInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMemoryDecompressionFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceMemoryDecompressionPropertiesEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplaySurfaceStereoCreateInfoNV* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDisplayModeStereoPropertiesNV* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRawAccessChainsFeaturesNV* data, const util::JsonOptions& options = util::JsonOptions()); @@ -1185,6 +1192,8 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkWriteIndirectExe void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageAlignmentControlFeaturesMESA* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceImageAlignmentControlPropertiesMESA* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImageAlignmentControlCreateInfoMESA* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDepthClampControlFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineViewportDepthClampControlCreateInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceHdrVividFeaturesHUAWEI* data, const util::JsonOptions& options = util::JsonOptions()); @@ -1196,6 +1205,11 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePi void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkImportMemoryMetalHandleInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryMetalHandlePropertiesEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkMemoryGetMetalHandleInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePerformanceCountersByRegionFeaturesARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePerformanceCountersByRegionPropertiesARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceCounterARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPerformanceCounterDescriptionARM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderPassPerformanceCountersByRegionBeginInfoARM* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFormatPackFeaturesARM* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE* data, const util::JsonOptions& options = util::JsonOptions()); @@ -1203,9 +1217,20 @@ void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceFr void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineFragmentDensityMapLayeredCreateInfoVALVE* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkSetPresentConfigNV* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePresentMeteringFeaturesNV* data, const util::JsonOptions& options = util::JsonOptions()); -void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkRenderingEndInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShader64BitIndexingFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceCustomResolveFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkBeginCustomResolveInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkCustomResolveCreateInfoEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPipelineCacheHeaderVersionDataGraphQCOM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkDataGraphPipelineBuiltinModelCreateInfoQCOM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceDataGraphModelFeaturesQCOM* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderLongVectorFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderLongVectorPropertiesEXT* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkComputeOccupancyPriorityParametersNV* data, const util::JsonOptions& options = util::JsonOptions()); +void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureBuildRangeInfoKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureGeometryTrianglesDataKHR* data, const util::JsonOptions& options = util::JsonOptions()); void FieldToJson(nlohmann::ordered_json& jdata, const Decoded_VkAccelerationStructureGeometryAabbsDataKHR* data, const util::JsonOptions& options = util::JsonOptions()); diff --git a/third_party/gfxreconstruct/framework/generated/generated_vulkan_stype_util.h b/third_party/gfxreconstruct/framework/generated/generated_vulkan_stype_util.h index c9dd32ad9..ab2f35db1 100644 --- a/third_party/gfxreconstruct/framework/generated/generated_vulkan_stype_util.h +++ b/third_party/gfxreconstruct/framework/generated/generated_vulkan_stype_util.h @@ -63,16 +63,27 @@ template <> constexpr VkStructureType GetSType(){ return V template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BIND_SPARSE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_EVENT_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_EVENT_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO; } @@ -83,28 +94,14 @@ template <> constexpr VkStructureType GetSType constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO; } @@ -126,25 +123,13 @@ template <> constexpr VkStructureType GetSType(){ retu template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO; } @@ -159,23 +144,44 @@ template <> constexpr VkStructureType GetSType(){ retur template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SUBPASS_END_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES; } @@ -184,44 +190,34 @@ template <> constexpr VkStructureType GetSType constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SUBPASS_END_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_MEMORY_BARRIER_2; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2; } @@ -230,8 +226,6 @@ template <> constexpr VkStructureType GetSType(){ return template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SUBMIT_INFO_2; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BUFFER_COPY_2; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_COPY_2; } @@ -239,10 +233,18 @@ template <> constexpr VkStructureType GetSType(){ return VK_ST template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_BLIT_2; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO; } @@ -250,60 +252,35 @@ template <> constexpr VkStructureType GetSType constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_BLIT_2; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDERING_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_MEMORY_MAP_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDERING_AREA_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY; } @@ -314,6 +291,29 @@ template <> constexpr VkStructureType GetSType(){ return template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDERING_AREA_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR; } @@ -364,20 +364,6 @@ template <> constexpr VkStructureType GetSType( template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_GOP_REMAINING_FRAME_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_INFO_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR; } @@ -424,12 +410,6 @@ template <> constexpr VkStructureType GetSType constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR; } @@ -464,6 +444,7 @@ template <> constexpr VkStructureType GetSType constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR; } @@ -523,6 +504,10 @@ template <> constexpr VkStructureType GetSType( template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SET_DESCRIPTOR_BUFFER_OFFSETS_INFO_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COPY_MEMORY_INDIRECT_INFO_KHR; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INDIRECT_INFO_KHR; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_INTRA_REFRESH_CREATE_INFO_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_INFO_KHR; } @@ -544,19 +529,21 @@ template <> constexpr VkStructureType GetSType constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_LIST_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_VULKAN_PROPERTIES_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_MEMORY_BARRIER_ACCESS_FLAGS_3_KHR; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_PROPERTIES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_QUEUE_FAMILY_OWNERSHIP_TRANSFER_PROPERTIES_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_PROPERTIES_KHR; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDERING_END_INFO_KHR; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_FLAGS_INFO_KHR; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RESOLVE_IMAGE_MODE_INFO_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT; } @@ -674,6 +661,16 @@ template <> constexpr VkStructureType GetSType constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SWAPCHAIN_TIMING_PROPERTIES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SWAPCHAIN_TIME_DOMAIN_PROPERTIES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_PROPERTIES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PRESENT_TIMING_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL; } @@ -743,6 +740,7 @@ template <> constexpr VkStructureType GetSType constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_BARRIER_NV; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_BARRIER_CREATE_INFO_NV; } @@ -755,6 +753,19 @@ template <> constexpr VkStructureType GetSType(){ return template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PER_TILE_END_INFO_QCOM; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DISPATCH_TILE_INFO_QCOM; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_QUERY_LOW_LATENCY_SUPPORT_NV; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BUFFER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SAMPLER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT; } @@ -809,6 +820,10 @@ template <> constexpr VkStructureType GetSType(){ template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_RGB_CONVERSION_CAPABILITIES_VALVE; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_PROFILE_RGB_CONVERSION_INFO_VALVE; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_RGB_CONVERSION_CREATE_INFO_VALVE; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT; } @@ -925,6 +940,26 @@ template <> constexpr VkStructureType GetSType() template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SWAPCHAIN_LATENCY_CREATE_INFO_NV; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_OUT_OF_BAND_QUEUE_TYPE_INFO_NV; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_LATENCY_SURFACE_CAPABILITIES_NV; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CREATE_INFO_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_CREATE_INFO_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENTS_INFO_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENT_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_MEMORY_REQUIREMENTS_INFO_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BIND_DATA_GRAPH_PIPELINE_SESSION_MEMORY_INFO_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_INFO_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_PROPERTY_QUERY_RESULT_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_DISPATCH_INFO_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_INFO_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_RENDER_AREAS_RENDER_PASS_BEGIN_INFO_QCOM; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV; } @@ -945,6 +980,9 @@ template <> constexpr VkStructureType GetSType constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_TILE_MEMORY_REQUIREMENTS_QCOM; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_TILE_MEMORY_BIND_INFO_QCOM; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_TILE_MEMORY_SIZE_INFO_QCOM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DECOMPRESS_MEMORY_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DISPLAY_MODE_STEREO_PROPERTIES_NV; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV; } @@ -977,6 +1015,8 @@ template <> constexpr VkStructureType GetSType constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_PROPERTIES_MESA; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HDR_VIVID_FEATURES_HUAWEI; } @@ -988,6 +1028,11 @@ template <> constexpr VkStructureType GetSType constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_IMPORT_MEMORY_METAL_HANDLE_INFO_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_MEMORY_METAL_HANDLE_PROPERTIES_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_MEMORY_GET_METAL_HANDLE_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_PROPERTIES_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_ARM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE; } @@ -995,9 +1040,19 @@ template <> constexpr VkStructureType GetSType constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_DENSITY_MAP_LAYERED_CREATE_INFO_VALVE; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_SET_PRESENT_CONFIG_NV; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_METERING_FEATURES_NV; } -template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_RENDERING_END_INFO_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_BEGIN_CUSTOM_RESOLVE_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_BUILTIN_MODEL_CREATE_INFO_QCOM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_COMPUTE_OCCUPANCY_PRIORITY_PARAMETERS_NV; } +template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR; } template <> constexpr VkStructureType GetSType(){ return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR; } diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_api_call_encoders_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_api_call_encoders_generator.py index a1725286d..d4631e35f 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_api_call_encoders_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_api_call_encoders_generator.py @@ -1,166 +1,160 @@ -#!/usr/bin/python3 -i -# -# Copyright (c) 2019 Valve Corporation -# Copyright (c) 2019-2025 LunarG, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. - -import json -from khronos_base_generator import ValueInfo - -class KhronosApiCallEncodersGenerator(): - """KhronosApiCallEncodersGenerator - Common functions for Api Call Encoding generation - """ - def __init__(self, check_write=None): - if check_write: - self.CHECK_WRITE = check_write - else: - self.CHECK_WRITE = [] - - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_cmd_params: - return True - return False - - def make_encoder_cmd_decl(self, proto, values, is_header): - """Generate function declaration for a command.""" - param_decls = [] - - for value in values: - value_name = value.name - value_type = value.full_type if not value.platform_full_type else value.platform_full_type - - if value.is_array and not value.is_dynamic: - value_name += '[{}]'.format(value.array_capacity) - - param_decl = self.make_aligned_param_decl( - value_type, value_name, self.INDENT_SIZE, - self.genOpts.align_func_param - ) - param_decls.append(param_decl) - - eol = ';' if is_header else '' - if param_decls: - return '{}(\n{}){}'.format(proto, ',\n'.join(param_decls), eol) - - return '{}(){}'.format(proto, eol) - - def make_parameter_encoding( - self, name, values, return_type, indent, omit_output_param - ): - body = '\n' - body += indent + self.make_begin_api_call(name, values) - body += indent + 'if (encoder' - - if self.CHECK_WRITE: - if name in self.CHECK_WRITE: - body += ' && manager->CheckWrite' + name[2:] + '(result' - for value in values: - body += ', ' + value.name - body += ')' - - body += ')\n' - body += indent + '{\n' - indent += ' ' * self.INDENT_SIZE - - for value in values: - method_call = self.make_encoder_method_call( - name, value, values, '', omit_output_param - ) - body += indent + '{};\n'.format(method_call) - - if return_type and return_type != 'void': - method_call = self.make_encoder_method_call( - name, ValueInfo('result', return_type, return_type), [], '' - ) - body += indent + '{};\n'.format(method_call) - - # Determine the appropriate end call: Create handle call, destroy handle call, or general call. - body += indent + self.make_end_api_call(name, values, return_type) - indent = indent[0:-self.INDENT_SIZE] - body += indent + '}\n' - return body - - def get_struct_handle_member_info(self, members): - member_handle_type = None - member_handle_name = None - member_array_length = None - - for member in members: - if self.is_handle(member.base_type): - member_handle_type = member.base_type - member_handle_name = member.name - if member.is_array: - member_array_length = member.array_length - break - elif self.is_struct(member.base_type): - # This can't handle the case where 'member' is an array of structs - member_handle_type, member_handle_name, member_array_length = self.get_struct_handle_member_info( - self.structs_with_handles[member.base_type] - ) - member_handle_name = '{}.{}'.format( - member.name, member_handle_name - ) - - return member_handle_type, member_handle_name, member_array_length - - def make_get_command_handles_expr(self, cmd, values): - """Generate an expression for a get command buffer handles utility function.""" - handle_params = self.get_param_list_handles(values) - if handle_params: - args = [] - for value in handle_params: - if value.array_length: - args.append(value.array_length) - args.append(value.name) - return 'Track{}Handles, {}'.format( - cmd[2:], ', '.join(self.make_unique_list(args)) - ) - else: - return None - - def has_outputs(self, return_value, parameter_values): - for value in parameter_values: - if self.is_output_parameter(value): - return True - return False - - def load_capture_overrides(self, filename): - overrides = json.loads(open(filename, 'r').read()) - self.CAPTURE_OVERRIDES = overrides['functions'] - - def write_api_call_encoders_contents(self, make_cmd_body=None): - body = [] - is_header = not bool(make_cmd_body) - - for cmd in self.get_all_filtered_cmd_names(): - info = self.all_cmd_params[cmd] - return_type = info[0] - proto = info[1] - values = info[2] - - body.append('') - body.append(self.make_encoder_cmd_decl(proto, values, is_header=is_header)) - if make_cmd_body: - body.extend(('{', make_cmd_body(return_type, cmd, values), '}')) - - body.append('') - self.write_lines(body) +#!/usr/bin/python3 -i +# +# Copyright (c) 2019 Valve Corporation +# Copyright (c) 2019-2025 LunarG, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import json +from khronos_base_generator import ValueInfo + +class KhronosApiCallEncodersGenerator(): + """KhronosApiCallEncodersGenerator + Common functions for Api Call Encoding generation + """ + def __init__(self, check_write=None): + if check_write: + self.CHECK_WRITE = check_write + else: + self.CHECK_WRITE = [] + + def make_encoder_cmd_decl(self, proto, values, is_header): + """Generate function declaration for a command.""" + param_decls = [] + + for value in values: + value_name = value.name + value_type = value.full_type if not value.platform_full_type else value.platform_full_type + + if value.is_array and not value.is_dynamic: + value_name += '[{}]'.format(value.array_capacity) + + param_decl = self.make_aligned_param_decl( + value_type, value_name, self.INDENT_SIZE, + self.genOpts.align_func_param + ) + param_decls.append(param_decl) + + eol = ';' if is_header else '' + if param_decls: + return '{}(\n{}){}'.format(proto, ',\n'.join(param_decls), eol) + + return '{}(){}'.format(proto, eol) + + def make_parameter_encoding( + self, name, values, return_type, indent, omit_output_param + ): + body = '\n' + body += indent + self.make_begin_api_call(name, values) + body += indent + 'if (encoder' + + if self.CHECK_WRITE: + if name in self.CHECK_WRITE: + body += ' && manager->CheckWrite' + name[2:] + '(result' + for value in values: + body += ', ' + value.name + body += ')' + + body += ')\n' + body += indent + '{\n' + indent += ' ' * self.INDENT_SIZE + + for value in values: + method_call = self.make_encoder_method_call( + name, value, values, '', omit_output_param + ) + body += indent + '{};\n'.format(method_call) + + if return_type and return_type != 'void': + method_call = self.make_encoder_method_call( + name, ValueInfo('result', return_type, return_type), [], '' + ) + body += indent + '{};\n'.format(method_call) + + # Determine the appropriate end call: Create handle call, destroy handle call, or general call. + body += indent + self.make_end_api_call(name, values, return_type) + indent = indent[0:-self.INDENT_SIZE] + body += indent + '}\n' + return body + + def get_struct_handle_member_info(self, members): + member_handle_type = None + member_handle_name = None + member_array_length = None + + for member in members: + if self.is_handle(member.base_type): + member_handle_type = member.base_type + member_handle_name = member.name + if member.is_array: + member_array_length = member.array_length + break + elif self.is_struct(member.base_type): + # This can't handle the case where 'member' is an array of structs + member_handle_type, member_handle_name, member_array_length = self.get_struct_handle_member_info( + self.structs_with_handles[member.base_type] + ) + member_handle_name = '{}.{}'.format( + member.name, member_handle_name + ) + + return member_handle_type, member_handle_name, member_array_length + + def make_get_command_handles_expr(self, cmd, values): + """Generate an expression for a get command buffer handles utility function.""" + handle_params = self.get_param_list_handles(values) + if handle_params: + args = [] + for value in handle_params: + if value.array_length: + args.append(value.array_length) + args.append(value.name) + return 'Track{}Handles, {}'.format( + cmd[2:], ', '.join(self.make_unique_list(args)) + ) + else: + return None + + def has_outputs(self, return_value, parameter_values): + for value in parameter_values: + if self.is_output_parameter(value): + return True + return False + + def load_capture_overrides(self, filename): + overrides = json.loads(open(filename, 'r').read()) + self.CAPTURE_OVERRIDES = overrides['functions'] + + def write_api_call_encoders_contents(self, make_cmd_body=None): + body = [] + is_header = not bool(make_cmd_body) + + for cmd in self.get_all_filtered_cmd_names(): + info = self.all_cmd_params[cmd] + return_type = info[0] + proto = info[1] + values = info[2] + + body.append('') + body.append(self.make_encoder_cmd_decl(proto, values, is_header=is_header)) + if make_cmd_body: + body.extend(('{', make_cmd_body(return_type, cmd, values), '}')) + + body.append('') + self.write_lines(body) diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_base_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_base_generator.py index 192eb1c8a..cc166d958 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_base_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_base_generator.py @@ -475,8 +475,13 @@ def __init__( # will be replaced by the override value. self.REPLAY_OVERRIDES = {} self.DUMP_RESOURCES_OVERRIDES = {} + self.DUMP_RESOURCES_TRANSFER_API_CALLS = {} self.REPLAY_ASYNC_OVERRIDES = {} + # Add these structs as chainable even though they aren't chainable in the + # spec, in order to handle captures created by some customized versions + # of GFXR + self.ADD_AS_CHAINABLE_STRUCTS = [] # The list of supported subsets self.SUPPORTED_SUBSETS = [] @@ -510,21 +515,22 @@ def __init__( self.encode_types['uint64_t'] = 'UInt64' # Command parameter and struct member data for the current feature - self.struct_names = set() # Set of current API's struct typenames - self.struct_type_names = OrderedDict() # Map of current API's struct type enums - self.all_extended_structs = dict() # Map of all extended struct names - self.feature_extended_structs = dict() # Map of per-feature extended struct names - self.children_structs = dict() # Map of children struct names to lists of child struct names - self.all_struct_members = OrderedDict() # Map of struct names to lists of per-member ValueInfo - self.feature_struct_members = OrderedDict() # Map of per-feature struct names to lists of per-member ValueInfo - self.all_struct_aliases = OrderedDict() # Map of struct names to aliases - self.feature_struct_aliases = OrderedDict() # Map of per-feature struct names to aliases - self.all_union_members = OrderedDict() # Map of union names to lists of per-member ValueInfo - self.feature_union_members = OrderedDict() # Map of per-feature union names to lists of per-member ValueInfo - self.all_union_aliases = OrderedDict() # Map of union names to aliases - self.feature_union_aliases = OrderedDict() # Map of per-feature union names to aliases - self.extension_structs_with_handles = OrderedDict() # Map of extension struct names to a Boolean value indicating that a struct member has a handle type + self.struct_names = set() # Set of current API's struct typenames + self.struct_type_names = OrderedDict() # Map of current API's struct type enums + self.all_extended_structs = dict() # Map of all extended struct names + self.feature_extended_structs = dict() # Map of per-feature extended struct names + self.children_structs = dict() # Map of children struct names to lists of child struct names + self.all_struct_members = OrderedDict() # Map of struct names to lists of per-member ValueInfo + self.feature_struct_members = OrderedDict() # Map of per-feature struct names to lists of per-member ValueInfo + self.all_struct_aliases = OrderedDict() # Map of struct names to aliases + self.feature_struct_aliases = OrderedDict() # Map of per-feature struct names to aliases + self.all_union_members = OrderedDict() # Map of union names to lists of per-member ValueInfo + self.feature_union_members = OrderedDict() # Map of per-feature union names to lists of per-member ValueInfo + self.all_union_aliases = OrderedDict() # Map of union names to aliases + self.feature_union_aliases = OrderedDict() # Map of per-feature union names to aliases + self.extension_structs_with_handles = OrderedDict() # Map of extension struct names to a Boolean value indicating that a struct member has a handle type self.extension_structs_with_handle_ptrs = OrderedDict() # Map of extension struct names to a Boolean value indicating that a struct member with a handle type is a pointer + self.structs_with_null_pnexts = None # Set of structure names whose pNext must be null self.all_cmd_params = OrderedDict() # Map of cmd names to lists of per-parameter ValueInfo self.feature_cmd_params = OrderedDict() # Map of cmd names to lists of per-parameter ValueInfo @@ -690,6 +696,8 @@ def __load_replay_overrides( ) self.DUMP_RESOURCES_OVERRIDES = dump_resources_overrides[ 'functions'] + self.DUMP_RESOURCES_TRANSFER_API_CALLS = dump_resources_overrides[ + 'transfer'] if replay_async_overrides_filename is not None: replay_async_overrides = json.loads( @@ -780,11 +788,8 @@ def get_feature_protect(self, interface): """Intended to be overridden.""" return None - # - # Indicates that the current feature has C++ code to generate. - # The subclass should override this method. def need_feature_generation(self): - """Intended to be overridden. Indicates that the current feature has C++ code to generate. + """Indicates that the current feature has C++ code to generate. The subclass should override this method.""" return False @@ -1565,6 +1570,23 @@ def add_struct_members(self, name, value_info): self.all_struct_members[name] = value_info self.feature_struct_members[name] = value_info + def get_or_create_structs_with_null_pnexts(self): + """Returns the list of structs that must have null pNext pointers.""" + if self.structs_with_null_pnexts is None: + self.structs_with_null_pnexts = self.struct_names.copy() + # The keys in validextensionstructs are base structures that can be extended by structures found in the values. + for struct_extended, extension_structs in self.registry.validextensionstructs.items(): + self.structs_with_null_pnexts.discard(struct_extended) + # The extension structs can appear in any order in the pNext chain, therefore they won't have a mandated + # NULL pNext value as well. + for extension_struct in extension_structs: + self.structs_with_null_pnexts.discard(extension_struct) + return self.structs_with_null_pnexts + + def must_extended_struct_be_null(self, struct_name): + """Determine if a struct must have a null pNext pointer.""" + return struct_name in self.get_or_create_structs_with_null_pnexts() + def genUnion(self, typeinfo, typename, alias): """Method override. Union (e.g. C "union" type) generation. @@ -2153,7 +2175,7 @@ def make_decoded_param_type(self, value): """Create a type to use for a decoded parameter, using the decoder wrapper types for pointers.""" type_name = value.base_type - if ( + if ( self.is_struct(type_name) and type_name in self.all_struct_aliases ): type_name = self.all_struct_aliases[type_name] diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_decode_extended_struct_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_decode_extended_struct_generator.py index d32e96e6c..ba50fd7f3 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_decode_extended_struct_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_decode_extended_struct_generator.py @@ -181,6 +181,9 @@ def write_decode_struct_definition_data(self): current_api_data = self.get_api_data() extended_list = [] + if self.ADD_AS_CHAINABLE_STRUCTS: + extended_list = self.ADD_AS_CHAINABLE_STRUCTS + for struct in self.all_extended_structs: for ext_struct in self.all_extended_structs[struct]: if ext_struct not in extended_list and ext_struct not in self.all_struct_aliases: diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_dispatch_table_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_dispatch_table_generator.py index 22b1e5672..6cfc3f6c4 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_dispatch_table_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_dispatch_table_generator.py @@ -150,12 +150,6 @@ def generateDispatchTable(self, gen_dispatch_key=True): self.generate_load_device_table_func(api_data) self.newline() - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_cmd_params: - return True - return False - def generate_instance_cmd_table(self, api_data): """Generate instance dispatch table structure.""" write( diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_replay_consumer_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_replay_consumer_body_generator.py index 3132d4dfa..098dde658 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_replay_consumer_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_replay_consumer_body_generator.py @@ -87,6 +87,85 @@ def handle_custom_dump_resource_type(self, is_dump_resources, is_override, name, """Method may be overriden. """ return '' + def make_resource_dumper_call(self, api_data, name, values, is_override, is_dump_resources_transfer, return_type, dispatchfunc, arglist, before_command): + is_dr_override = name in self.DUMP_RESOURCES_OVERRIDES + is_dump_resources = self.is_dump_resources_api_call(name) + + call_expr = '' + dump_resource_arglist = '' + if is_override: + for val in values: + if val.is_pointer and self.is_struct(val.base_type): + if is_dr_override: + dump_resource_arglist += val.name + else: + dump_resource_arglist += val.name + '->GetPointer()' + elif self.is_handle(val.base_type): + if val.is_pointer: + if is_dr_override and val.base_type != "VkCommandBuffer": + dump_resource_arglist += val.name + else: + dump_resource_arglist += val.name + '->GetHandlePointer()' + elif self.is_custom_dump_resource_type(is_dump_resources, is_override, name, val): + dump_resource_arglist += self.handle_custom_dump_resource_type(is_dump_resources, is_override, name, val) + else: + dump_resource_arglist += 'in_' + val.name + '->handle' + else: + if val.is_pointer and val.base_type in ["void", "uint32_t"]: + # avoids passing a PointerDecoder* here (which is wrong but compiles fine, yikes) + # -> dump-resource API expects raw void* + dump_resource_arglist += val.name + '->GetPointer()' + else: + dump_resource_arglist += val.name + dump_resource_arglist += ', ' + dump_resource_arglist = dump_resource_arglist[:-2] + else: + if is_dr_override: + for val in values: + if val.is_pointer and not self.is_handle(val.base_type): + if self.is_struct(val.base_type): + dump_resource_arglist += val.name + else: + dump_resource_arglist += 'in_' + val.name + elif self.is_custom_dump_resource_type(is_dump_resources, is_override, name, val): + dump_resource_arglist += self.handle_custom_dump_resource_type(is_dump_resources, is_override, name, val) + elif self.is_handle(val.base_type) and not val.is_pointer: + dump_resource_arglist += 'GetObjectInfoTable().Get' + val.base_type + "Info(" + val.name + ")" + else: + dump_resource_arglist += val.name + dump_resource_arglist += ', ' + dump_resource_arglist = dump_resource_arglist[:-2] + else: + dump_resource_arglist = arglist + + if is_dump_resources_transfer: + if before_command: + dump_resource_arglist += ', true' + else: + dump_resource_arglist += ', false' + + if not before_command: + call_expr += '\n' + + + if not before_command: + call_expr += ' if (options_.dumping_resources)\n' + else: + call_expr += ' if (options_.dumping_resources && options_.dump_resources_before)\n' + + call_expr += ' {\n' + if return_type == api_data.return_type_enum: + call_expr += ' resource_dumper_->Process_{}(call_info, {}, returnValue, {});\n'.format(name, dispatchfunc, dump_resource_arglist) + else: + call_expr += ' resource_dumper_->Process_{}(call_info, {}, {});\n'.format(name, dispatchfunc, dump_resource_arglist) + + call_expr += ' }\n' + + if before_command: + call_expr += '\n' + + return call_expr + def make_consumer_func_body(self, api_data, return_type, name, values): """ Method override. @@ -95,6 +174,7 @@ def make_consumer_func_body(self, api_data, return_type, name, values): body = '' is_override = name in self.REPLAY_OVERRIDES is_dump_resources = self.is_dump_resources_api_call(name) + is_dump_resources_transfer = name in self.DUMP_RESOURCES_TRANSFER_API_CALLS is_skip_offscreen = True @@ -109,7 +189,7 @@ def make_consumer_func_body(self, api_data, return_type, name, values): if is_skip_offscreen: body += self.check_skip_offscreen(values, name) - args, preexpr, postexpr = self.make_body_expression( + args, preexpr, postexpr, push_handleid_expr = self.make_body_expression( api_data, return_type, name, values, is_override ) arglist = ', '.join(args) @@ -133,6 +213,7 @@ def make_consumer_func_body(self, api_data, return_type, name, values): dispatchfunc += '({})->{}'.format(object_name, name[2:]) call_expr = '' + if is_override: if self.is_core_create_command(name, True): call_expr = '{}(returnValue, {})'.format( @@ -153,6 +234,12 @@ def make_consumer_func_body(self, api_data, return_type, name, values): ) body += '\n' body += '\n' + + # Dump resources code generation + if is_dump_resources and is_dump_resources_transfer: + body += self.make_resource_dumper_call(api_data, name, values, is_override, is_dump_resources_transfer, + return_type, dispatchfunc, arglist, True) + if return_type == api_data.return_type_enum: if is_async: body += ' if (UseAsyncOperations())\n' @@ -166,70 +253,18 @@ def make_consumer_func_body(self, api_data, return_type, name, values): body += ' }\n' postexpr = postexpr[1:] # drop async post-expression, don't repeat later + body += push_handleid_expr[0] body += ' {} replay_result = {};\n'.format(api_data.return_type_enum, call_expr) body += ' CheckResult("{}", returnValue, replay_result, call_info);\n'.format(name) else: + body += push_handleid_expr[0] body += ' {};\n'.format(call_expr) + body += push_handleid_expr[1] # Dump resources code generation if is_dump_resources: - is_dr_override = name in self.DUMP_RESOURCES_OVERRIDES - - dump_resource_arglist = '' - if is_override: - for val in values: - if val.is_pointer and self.is_struct(val.base_type): - if is_dr_override: - dump_resource_arglist += val.name - else: - dump_resource_arglist += val.name + '->GetPointer()' - elif self.is_handle(val.base_type): - if val.is_pointer: - if is_dr_override and val.base_type != "VkCommandBuffer": - dump_resource_arglist += val.name - else: - dump_resource_arglist += val.name + '->GetHandlePointer()' - elif self.is_custom_dump_resource_type(is_dump_resources, is_override, name, val): - dump_resource_arglist += self.handle_custom_dump_resource_type(is_dump_resources, is_override, name, val) - else: - dump_resource_arglist += 'in_' + val.name + '->handle' - else: - if val.is_pointer and val.base_type in ["void", "uint32_t"]: - # avoids passing a PointerDecoder* here (which is wrong but compiles fine, yikes) - # -> dump-resource API expects raw void* - dump_resource_arglist += val.name + '->GetPointer()' - else: - dump_resource_arglist += val.name - dump_resource_arglist += ', ' - dump_resource_arglist = dump_resource_arglist[:-2] - else: - if is_dr_override: - for val in values: - if val.is_pointer and not self.is_handle(val.base_type): - if self.is_struct(val.base_type): - dump_resource_arglist += val.name - else: - dump_resource_arglist += 'in_' + val.name - elif self.is_custom_dump_resource_type(is_dump_resources, is_override, name, val): - dump_resource_arglist += self.handle_custom_dump_resource_type(is_dump_resources, is_override, name, val) - elif self.is_handle(val.base_type) and not val.is_pointer: - dump_resource_arglist += 'GetObjectInfoTable().Get' + val.base_type + "Info(" + val.name + ")" - else: - dump_resource_arglist += val.name - dump_resource_arglist += ', ' - dump_resource_arglist = dump_resource_arglist[:-2] - else: - dump_resource_arglist = arglist - - body += '\n' - body += ' if (options_.dumping_resources)\n' - body += ' {\n' - if return_type == api_data.return_type_enum: - body += ' resource_dumper_->Process_{}(call_info, {}, returnValue, {});\n'.format(name, dispatchfunc, dump_resource_arglist) - else: - body += ' resource_dumper_->Process_{}(call_info, {}, {});\n'.format(name, dispatchfunc, dump_resource_arglist) - - body += ' }\n' + body += self.make_resource_dumper_call(api_data, name, values, is_override, is_dump_resources_transfer, + return_type, dispatchfunc, arglist, False) if postexpr: body += '\n' @@ -270,7 +305,7 @@ def generate_replay_consumer_content(self, api_data): cmddef += self.make_dump_resources_func_decl( return_type, '{}ReplayDumpResources::Process_'.format(platform_type) - + cmd, values, cmd in self.DUMP_RESOURCES_OVERRIDES + + cmd, values, cmd in self.DUMP_RESOURCES_OVERRIDES, cmd in self.DUMP_RESOURCES_TRANSFER_API_CALLS ) + '\n' else: cmddef += self.make_consumer_func_decl( @@ -541,6 +576,7 @@ def make_body_expression(self, api_data, return_type, name, values, is_override) ] # Variable declarations for handle mappings, temporary output allocations, and input pointers. postexpr = [ ] # Expressions to add new handles to the handle map and delete temporary allocations. + push_handleid_expr = ["", ""] for value in values: need_initialize_output_pnext_struct = '' @@ -700,6 +736,8 @@ def make_body_expression(self, api_data, return_type, name, values, is_override) length_name, name=value.name ) elif self.is_handle_like(value.base_type): + push_handleid_expr[0] = " PushRecaptureHandleIds({}->GetPointer(), {}->GetLength());\n".format(value.name, value.name) + push_handleid_expr[1] = " ClearRecaptureHandleIds();\n" # Add mappings for the newly created handles. preexpr.append( 'if (!{paramname}->IsNull()) {{ {paramname}->SetHandleLength({}); }}' @@ -812,6 +850,8 @@ def make_body_expression(self, api_data, return_type, name, values, is_override) ) # If this is a struct with handles, we need to add replay mappings for the embedded handles. if value.base_type in self.structs_with_handles: + push_handleid_expr[0] = " PushRecaptureStructArrayHandleIds({paramname}->GetMetaStructPointer(), {paramname}->GetLength(), this);\n".format(paramname=value.name) + push_handleid_expr[1] = " ClearRecaptureHandleIds();\n" if value.base_type in self.structs_with_handle_ptrs: preexpr.append( 'SetStructArrayHandleLengths({paramname}->GetMetaStructPointer(), {paramname}->GetLength());' @@ -836,6 +876,8 @@ def make_body_expression(self, api_data, return_type, name, values, is_override) ) # If this is a struct with handles, we need to add replay mappings for the embedded handles. if value.base_type in self.structs_with_handles: + push_handleid_expr[0] = " PushRecaptureStructArrayHandleIds({paramname}->GetMetaStructPointer(), {paramname}->GetLength(), this);\n".format(paramname=value.name) + push_handleid_expr[1] = " ClearRecaptureHandleIds();\n" if value.base_type in self.structs_with_handle_ptrs: preexpr.append( 'SetStructArrayHandleLengths({paramname}->GetMetaStructPointer(), {paramname}->GetLength());' @@ -913,6 +955,8 @@ def make_body_expression(self, api_data, return_type, name, values, is_override) ) ) elif self.is_handle_like(value.base_type): + push_handleid_expr[0] = " PushRecaptureHandleId({}->GetPointer());\n".format(value.name) + push_handleid_expr[1] = " ClearRecaptureHandleIds();\n" # Add mapping for the newly created handle preexpr.append( 'if (!{paramname}->IsNull()) {{ {paramname}->SetHandleLength(1); }}' @@ -987,6 +1031,8 @@ def make_body_expression(self, api_data, return_type, name, values, is_override) # If this is a struct with handles, we need to add replay mappings for the embedded handles. if value.base_type in self.structs_with_handles: + push_handleid_expr[0] = " PushRecaptureStructHandleIds({}->GetMetaStructPointer(), this);\n".format(value.name) + push_handleid_expr[1] = " ClearRecaptureHandleIds();\n" if need_temp_value: if value.base_type in self.structs_with_handle_ptrs: preexpr.append( @@ -1093,4 +1139,4 @@ def make_body_expression(self, api_data, return_type, name, values, is_override) 'InitializeOutputStruct{}({});'. format(api_data.extended_struct_func_prefix, need_initialize_output_pnext_struct) ) - return args, preexpr, postexpr + return args, preexpr, postexpr, push_handleid_expr diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_struct_encoders_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_struct_encoders_body_generator.py index a4c7a52eb..0b5708252 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_struct_encoders_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_struct_encoders_body_generator.py @@ -33,6 +33,10 @@ def skip_struct_type(self, struct_type): """Override as needed""" return False + def must_extended_struct_be_null(self, struct_type): + """Override as needed""" + return False + def write_encoder_content(self): api_data = self.get_api_data() for struct in self.get_all_filtered_struct_names(): @@ -118,9 +122,14 @@ def makeStructBody(self, api_data, name, values, prefix): for value in values: # pNext fields require special treatment and are not processed by typename if self.is_extended_struct_definition(value): - body += ' Encode{}Struct(encoder, {});\n'.format( - api_data.extended_struct_func_prefix, prefix + value.name - ) + if self.must_extended_struct_be_null(name): + body += ' Encode{}StructIfValid(encoder, {});\n'.format( + api_data.extended_struct_func_prefix, prefix + value.name + ) + else: + body += ' Encode{}Struct(encoder, {});\n'.format( + api_data.extended_struct_func_prefix, prefix + value.name + ) else: method_call = self.make_encoder_method_call( name, value, values, prefix diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_struct_handle_mappers_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_struct_handle_mappers_body_generator.py index 3b8cb3d76..c4c4433d2 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_struct_handle_mappers_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_struct_handle_mappers_body_generator.py @@ -197,6 +197,16 @@ def write_struct_handle_wrapper_content(self): file=self.outFile ) + # Generate push recapture handle ID functions for output structs with handles + for struct in self.output_structs: + self.newline() + write( + self.make_struct_handle_push_for_recapture( + struct, self.structs_with_handles[struct] + ), + file=self.outFile + ) + # Generate handle memory allocation functions for output structs with handles for struct in self.output_structs: if struct in self.structs_with_handle_ptrs: @@ -374,6 +384,59 @@ def make_struct_handle_additions(self, name, members): body += ' }\n' body += '}' return body + + def make_struct_handle_push_for_recapture(self, name, members): + """Generating expressions for pushing struct handle IDs for recapture that are embedded in structs.""" + platform_type = self.get_api_prefix() + + body = 'void PushRecaptureStructHandleIds(const Decoded_{name}* id_wrapper, CommonConsumerBase* consumer)\n'.format( + name=name + ) + body += '{\n' + body += ' GFXRECON_ASSERT(consumer != nullptr);\n' + body += ' if (consumer->IsRecapture() && id_wrapper != nullptr)\n' + body += ' {\n' + + for member in members: + if self.is_extended_struct_definition(member): + func_id = self.get_extended_struct_func_prefix() + body += f' if (id_wrapper->{member.name})\n' + body += ' {\n' + body += f' PushRecapture{func_id}StructHandleIds(id_wrapper->{member.name}->GetPointer(), consumer);\n' + body += ' }\n' + elif self.is_struct(member.base_type): + # This is a struct that includes handles. + if member.is_array: + body += ' PushRecaptureStructArrayHandleIds(id_wrapper->{name}->GetMetaStructPointer(), id_wrapper->{name}->GetLength(), consumer);\n'.format( + member.base_type, name=member.name + ) + elif member.is_pointer: + body += ' PushRecaptureStructArrayHandleIds(id_wrapper->{name}->GetMetaStructPointer(), 1, consumer);\n'.format( + member.base_type, name=member.name + ) + else: + body += ' PushRecaptureStructHandleIds(id_wrapper->{name}, consumer);\n'.format( + name=member.name + ) + else: + # If it is an array or pointer, add with the utility function. + if (member.is_array or member.is_pointer): + if member.is_array: + body += ' consumer->PushRecaptureHandleIds(id_wrapper->{name}.GetPointer(), id_wrapper->{name}.GetLength());\n'.format( + name=member.name + ) + else: + body += ' consumer->PushRecaptureHandleIds(id_wrapper->{name}.GetPointer(), 1);\n'.format( + name=member.name + ) + else: + body += ' consumer->PushRecaptureHandleId(&id_wrapper->{name});\n'.format( + name=member.name + ) + + body += ' }\n' + body += '}' + return body def make_struct_handle_allocations(self, name, members): """Generate expressions to allocate memory for handles created at replay that are embedded in structs. diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_struct_handle_mappers_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_struct_handle_mappers_header_generator.py index 93dbc7657..b4b9803c6 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_struct_handle_mappers_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/khronos_struct_handle_mappers_header_generator.py @@ -94,6 +94,14 @@ def write_struct_handle_mapper_header(self): ) self.newline() + for struct in self.output_structs: + write( + 'void PushRecaptureStructHandleIds(const Decoded_{type}* id_wrapper, CommonConsumerBase* consumer);' + .format(type=struct), + file=self.outFile + ) + self.newline() + for struct in self.output_structs: if struct in self.structs_with_handle_ptrs: write( diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/openxr_generators/gencode.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/openxr_generators/gencode.py index 124dbba89..23601e1d7 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/openxr_generators/gencode.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/openxr_generators/gencode.py @@ -764,7 +764,7 @@ def gen_target(args): file=sys.stderr ) write( - '* options.emitEtensions =', + '* options.emitExtensions =', options.emitExtensions, file=sys.stderr ) diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/openxr_generators/openxr_struct_handle_mappers_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/openxr_generators/openxr_struct_handle_mappers_header_generator.py index 471366cfd..898575f89 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/openxr_generators/openxr_struct_handle_mappers_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/openxr_generators/openxr_struct_handle_mappers_header_generator.py @@ -53,6 +53,7 @@ def __init__( ) self.begin_end_file_data.specific_headers.extend(( + 'decode/common_consumer_base.h', 'decode/common_object_info_table.h', 'decode/openxr_next_node.h', 'format/platform_types.h', diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/blacklists.json b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/blacklists.json index ffeb0bc5d..a3e543d1b 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/blacklists.json +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/blacklists.json @@ -18,7 +18,12 @@ "vkCreateRayTracingPipelinesKHR", "vkCreateExternalComputeQueueNV", "vkDestroyExternalComputeQueueNV", - "vkGetExternalComputeQueueDataNV" + "vkGetExternalComputeQueueDataNV", + "vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT", + "vkGetBufferOpaqueCaptureDescriptorDataEXT", + "vkGetImageOpaqueCaptureDescriptorDataEXT", + "vkGetImageViewOpaqueCaptureDescriptorDataEXT", + "vkGetSamplerOpaqueCaptureDescriptorDataEXT" ], "functions-encoder": [ "vkCreateComputePipelines", @@ -37,6 +42,7 @@ "VkPerformanceValueINTEL", "VkPushDescriptorSetWithTemplateInfo", "VkAccelerationStructureGeometryKHR", + "VkAccelerationStructureDenseGeometryFormatTrianglesDataAMDX", "VkAccelerationStructureMotionInstanceNV", "VkIndirectExecutionSetInfoEXT", "VkIndirectExecutionSetCreateInfoEXT", @@ -45,6 +51,8 @@ "VkCopyMemoryToImageInfo", "VkMemoryToImageCopy", "VkCopyImageToMemoryInfo", - "VkImageToMemoryCopy" + "VkImageToMemoryCopy", + "VkLayerSettingEXT", + "VkDescriptorGetInfoEXT" ] -} \ No newline at end of file +} diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/capture_overrides.json b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/capture_overrides.json index 5d785c6cd..1c593fd1c 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/capture_overrides.json +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/capture_overrides.json @@ -4,6 +4,8 @@ "vkCreateDevice": "manager->OverrideCreateDevice", "vkCreateBuffer": "manager->OverrideCreateBuffer", "vkCreateImage": "manager->OverrideCreateImage", + "vkCreateImageView": "manager->OverrideCreateImageView", + "vkCreateSampler": "manager->OverrideCreateSampler", "vkAllocateMemory": "manager->OverrideAllocateMemory", "vkGetPhysicalDeviceToolPropertiesEXT": "manager->OverrideGetPhysicalDeviceToolPropertiesEXT", "vkCreateAccelerationStructureKHR": "manager->OverrideCreateAccelerationStructureKHR", @@ -17,7 +19,6 @@ "vkCmdWriteAccelerationStructuresPropertiesKHR": "manager->OverrideCmdWriteAccelerationStructuresPropertiesKHR", "vkGetPhysicalDeviceProperties2": "manager->OverrideGetPhysicalDeviceProperties2", "vkGetPhysicalDeviceProperties2KHR": "manager->OverrideGetPhysicalDeviceProperties2", - "vkAllocateCommandBuffers": "manager->OverrideAllocateCommandBuffers", - "vkBeginCommandBuffer": "manager->OverrideBeginCommandBuffer" + "vkAllocateCommandBuffers": "manager->OverrideAllocateCommandBuffers" } } diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/codegen.pyproj b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/codegen.pyproj index 28dc9d982..c06bf64a3 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/codegen.pyproj +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/codegen.pyproj @@ -43,6 +43,7 @@ + diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/dump_resources_overrides.json b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/dump_resources_overrides.json index 13f83a4cf..42ad5ebb3 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/dump_resources_overrides.json +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/dump_resources_overrides.json @@ -15,6 +15,8 @@ "vkCmdEndRendering" : "OverrideCmdEndRendering", "vkCmdEndRenderingKHR" : "OverrideCmdEndRenderingKHR", "vkCmdBindDescriptorSets": "OverrideCmdBindDescriptorSets", + "vkCmdBindDescriptorSets2": "OverrideCmdBindDescriptorSets2", + "vkCmdBindDescriptorSets2KHR": "OverrideCmdBindDescriptorSets2", "vkCmdDispatch": "OverrideCmdDispatch", "vkCmdDispatchIndirect": "OverrideCmdDispatchIndirect", "vkCmdTraceRaysKHR": "OverrideCmdTraceRaysKHR", @@ -37,6 +39,42 @@ "vkCmdBindVertexBuffers2EXT": "OverrideCmdBindVertexBuffers2EXT", "vkCmdBindIndexBuffer2KHR": "OverrideCmdBindIndexBuffer2KHR", "vkEndCommandBuffer": "OverrideEndCommandBuffer", - "vkCmdExecuteCommands": "OverrideCmdExecuteCommands" - } + "vkCmdExecuteCommands": "OverrideCmdExecuteCommands", + "vkCmdCopyBuffer": "OverrideCmdCopyBuffer", + "vkCmdCopyBuffer2": "OverrideCmdCopyBuffer2", + "vkCmdCopyBuffer2KHR": "OverrideCmdCopyBuffer2KHR", + "vkCmdCopyBufferToImage": "OverrideCmdCopyBufferToImage", + "vkCmdCopyBufferToImage2": "OverrideCmdCopyBufferToImage2", + "vkCmdCopyBufferToImage2KHR": "OverrideCmdCopyBufferToImage2KHR", + "vkCmdCopyImage": "OverrideCmdCopyImage", + "vkCmdCopyImage2": "OverrideCmdCopyImage2", + "vkCmdCopyImage2KHR": "OverrideCmdCopyImage2KHR", + "vkCmdCopyImageToBuffer": "OverrideCmdCopyImageToBuffer", + "vkCmdCopyImageToBuffer2": "OverrideCmdCopyImageToBuffer2", + "vkCmdCopyImageToBuffer2KHR": "OverrideCmdCopyImageToBuffer2KHR", + "vkCmdBlitImage": "OverrideCmdBlitImage", + "vkCmdBlitImage2": "OverrideCmdBlitImage2", + "vkCmdBlitImage2KHR": "OverrideCmdBlitImage2KHR", + "vkCmdBuildAccelerationStructuresKHR": "OverrideCmdBuildAccelerationStructuresKHR", + "vkCmdCopyAccelerationStructureKHR": "OverrideCmdCopyAccelerationStructureKHR" + }, + "transfer": [ + "vkCmdCopyBuffer", + "vkCmdCopyBuffer2", + "vkCmdCopyBuffer2KHR", + "vkCmdCopyBufferToImage", + "vkCmdCopyBufferToImage2", + "vkCmdCopyBufferToImage2KHR", + "vkCmdCopyImage", + "vkCmdCopyImage2", + "vkCmdCopyImage2KHR", + "vkCmdCopyImageToBuffer", + "vkCmdCopyImageToBuffer2", + "vkCmdCopyImageToBuffer2KHR", + "vkCmdBlitImage", + "vkCmdBlitImage2", + "vkCmdBlitImage2KHR", + "vkCmdBuildAccelerationStructuresKHR", + "vkCmdCopyAccelerationStructureKHR" + ] } diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/gencode.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/gencode.py index 06efc3d39..61954f7b1 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/gencode.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/gencode.py @@ -82,6 +82,7 @@ from vulkan_command_buffer_util_header_generator import VulkanCommandBufferUtilHeaderGenerator, VulkanCommandBufferUtilHeaderGeneratorOptions from vulkan_dispatch_table_generator import VulkanDispatchTableGenerator, VulkanDispatchTableGeneratorOptions from vulkan_layer_func_table_generator import VulkanLayerFuncTableGenerator, VulkanLayerFuncTableGeneratorOptions +from vulkan_recapture_func_table_generator import VulkanRecaptureFuncTableGenerator, VulkanRecaptureFuncTableGeneratorOptions # Struct Encoders from vulkan_struct_encoders_body_generator import VulkanStructEncodersBodyGenerator, VulkanStructEncodersBodyGeneratorOptions @@ -505,8 +506,11 @@ def make_gen_opts(args): class_name='VulkanReplayDumpResources', base_class_header='vulkan_replay_dump_resources.h', is_override=True, - constructor_args= - 'const VulkanReplayOptions& options, CommonObjectInfoTable* object_info_table', + constructor_args="""const VulkanReplayOptions& options, + CommonObjectInfoTable* object_info_table, + const VulkanPerDeviceAddressTrackers& address_trackers, + const graphics::InstanceDispatchTablesMap& instance_tables, + const graphics::DeviceDispatchTablesMap& device_tables""", filename='generated_vulkan_replay_dump_resources.h', directory=directory, blacklists=None, @@ -655,6 +659,18 @@ def make_gen_opts(args): ) ] + gen_opts['generated_vulkan_recapture_func_table.h'] = [ + VulkanRecaptureFuncTableGenerator, + VulkanRecaptureFuncTableGeneratorOptions( + filename='generated_vulkan_recapture_func_table.h', + directory=directory, + prefix_text=prefix_strings + vk_prefix_strings, + protect_file=True, + protect_feature=False, + extra_headers=extra_headers + ) + ] + # # Struct encoder generators gen_opts['generated_vulkan_struct_encoders.cpp'] = [ @@ -1003,7 +1019,7 @@ def gen_target(args): file=sys.stderr ) write( - '* options.emitEtensions =', + '* options.emitExtensions =', options.emitExtensions, file=sys.stderr ) diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/replay_overrides.json b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/replay_overrides.json index 70ce621f9..54c6326b3 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/replay_overrides.json +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/replay_overrides.json @@ -135,6 +135,7 @@ "vkBindVideoSessionMemoryKHR": "OverrideBindVideoSessionMemoryKHR", "vkCreateShadersEXT": "OverrideCreateShadersEXT", "vkCmdTraceRaysKHR": "OverrideCmdTraceRaysKHR", + "vkCmdTraceRaysIndirectKHR": "OverrideCmdTraceRaysIndirectKHR", "vkCreateAccelerationStructureKHR": "OverrideCreateAccelerationStructureKHR", "vkDestroyAccelerationStructureKHR": "OverrideDestroyAccelerationStructureKHR", "vkCmdBuildAccelerationStructuresKHR": "OverrideCmdBuildAccelerationStructuresKHR", @@ -149,6 +150,27 @@ "vkCreateSamplerYcbcrConversion": "OverrideCreateSamplerYcbcrConversion", "vkCreateSamplerYcbcrConversionKHR": "OverrideCreateSamplerYcbcrConversionKHR", "vkCreatePipelineLayout": "OverrideCreatePipelineLayout", - "vkCreateBufferView": "OverrideCreateBufferView" + "vkCreateBufferView": "OverrideCreateBufferView", + "vkGetDeviceMemoryCommitment": "OverrideGetDeviceMemoryCommitment", + "vkMapMemory2": "OverrideMapMemory2", + "vkMapMemory2KHR": "OverrideMapMemory2", + "vkUnmapMemory2": "OverrideUnmapMemory2", + "vkUnmapMemory2KHR": "OverrideUnmapMemory2", + "vkSetDeviceMemoryPriorityEXT": "OverrideSetDeviceMemoryPriorityEXT", + "vkGetMemoryRemoteAddressNV": "OverrideGetMemoryRemoteAddressNV", + "vkCreateAccelerationStructureNV": "OverrideCreateAccelerationStructureNV", + "vkDestroyAccelerationStructureNV": "OverrideDestroyAccelerationStructureNV", + "vkBindAccelerationStructureMemoryNV": "OverrideBindAccelerationStructureMemoryNV", + "vkGetAccelerationStructureMemoryRequirementsNV": "OverrideGetAccelerationStructureMemoryRequirementsNV", + "vkGetMemoryFdKHR": "OverrideGetMemoryFdKHR", + "vkGetDeviceMemoryOpaqueCaptureAddress": "OverrideGetDeviceMemoryOpaqueCaptureAddress", + "vkGetDeviceMemoryOpaqueCaptureAddressKHR": "OverrideGetDeviceMemoryOpaqueCaptureAddress", + "vkGetPastPresentationTimingGOOGLE": "OverrideGetPastPresentationTimingGOOGLE", + "vkGetRefreshCycleDurationGOOGLE": "OverrideGetRefreshCycleDurationGOOGLE", + "vkGetPhysicalDeviceSurfaceFormatsKHR" : "OverrideGetPhysicalDeviceSurfaceFormatsKHR", + "vkGetPhysicalDeviceSurfaceFormats2KHR" : "OverrideGetPhysicalDeviceSurfaceFormats2KHR", + "vkGetDescriptorEXT": "OverrideGetDescriptorEXT", + "vkCmdBindDescriptorBuffersEXT": "OverrideCmdBindDescriptorBuffersEXT", + "vkCreateSampler": "OverrideCreateSampler" } } \ No newline at end of file diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_api_call_encoders_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_api_call_encoders_header_generator.py index b5795d2ba..58947ce90 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_api_call_encoders_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_api_call_encoders_header_generator.py @@ -83,9 +83,4 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_cmd_params: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_base_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_base_generator.py index d9569ca06..5df787a14 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_base_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_base_generator.py @@ -66,9 +66,6 @@ _remove_extensions = [ "VK_AMDX_shader_enqueue", "VK_ARM_tensors", - "VK_ARM_data_graph", - ## @todo - "VK_EXT_descriptor_buffer", "VK_EXT_metal_objects", "VK_EXT_pipeline_properties", "VK_FUCHSIA_buffer_collection", @@ -81,6 +78,21 @@ "VK_NV_cluster_acceleration_structure", "VK_NV_external_compute_queue", "VK_OHOS_surface", + "VK_OHOS_external_memory", + "VK_OHOS_native_buffer", + "VK_AMDX_dense_geometry_format", + "VK_KHR_video_decode_h265", + "VK_KHR_video_encode_h265", + "VK_KHR_video_maintenance2", +] + +# Exclude *video* extensions from code generation. This excludes all +# generation of struct and enums under these video extensions +# TODO: This should probably behave like _remove_extensions +_remove_video_extensions = [ + "vulkan_video_codec_h265std", + "vulkan_video_codec_h265std_decode", + "vulkan_video_codec_h265std_encode", ] # Turn lists of names/patterns into matching regular expressions. @@ -255,6 +267,9 @@ def __init__( }, 'VkDebugUtilsObjectTagInfoEXT': { 'objectHandle': 'objectType' + }, + 'VkDescriptorGetInfoEXT': { + 'objectHandle': 'objectType' } } @@ -274,6 +289,10 @@ def __init__( ['MapGpuVirtualAddress', 'MapGpuVirtualAddresses', 'gpu_va_map'] } + self.ADD_AS_CHAINABLE_STRUCTS = [ + "VkSurfaceCapabilities2KHR", + ] + self.VIDEO_TREE = None self.generate_video = False @@ -290,13 +309,35 @@ def endFeature(self): """Method override. Generate code for the feature.""" KhronosBaseGenerator.endFeature(self) + def need_feature_generation(self): + """Indicates that the current feature has C++ code to generate.""" + return True + def gen_video_type(self): if not self.VIDEO_TREE: return + # Which video types should be omitted + omit_video_types = set() + + # for all extensions in _remove_video_extensions, collect types + # that should not be omitted. + extensions = self.VIDEO_TREE.find('extensions') + for element in extensions.iter('extension'): + name = element.get('name') + if name in _remove_video_extensions: + for type_element in element.iter('type'): + omit_video_types.add(type_element.get('name')) + types = self.VIDEO_TREE.find('types') for element in types.iter('type'): name = element.get('name') + + # if this type (struct) was in a removed video extension, + # don't process it + if name in omit_video_types: + continue + category = element.get('category') if name and category and (category == 'struct' or category == 'union'): self.struct_names.add(name) @@ -305,6 +346,12 @@ def gen_video_type(self): for element in self.VIDEO_TREE.iter('enums'): group_name = element.get('name') + + # if this enum group was in a removed video extension, + # don't process it + if group_name in omit_video_types: + continue + self.enum_names.add(group_name) enumerants = dict() for elem in element.findall('enum'): @@ -315,7 +362,7 @@ def gen_video_type(self): self.enumEnumerants[group_name] = enumerants def make_dump_resources_func_decl( - self, return_type, name, values, is_override + self, return_type, name, values, is_override, is_transfer ): """make_consumer_decl - return VulkanConsumer class member function declaration. Generate VulkanConsumer class member function declaration. @@ -350,9 +397,15 @@ def make_dump_resources_func_decl( count = value.pointer_count if self.is_struct(type_name): - param_type = 'StructPointerDecoder*'.format( - type_name - ) + if count > 1: + param_type = 'StructPointerDecoder*'.format( + type_name + ) + else: + param_type = 'StructPointerDecoder*'.format( + type_name + ) + elif self.is_handle(type_name) and type_name != 'VkCommandBuffer': param_type = 'HandlePointerDecoder<{}>*'.format(type_name) else: @@ -377,6 +430,10 @@ def make_dump_resources_func_decl( ) param_decls.append(param_decl) + if is_transfer: + param_decl = ' ' * self.INDENT_SIZE + "bool before_command" + param_decls.append(param_decl) + if param_decls: return 'void {}(\n{})'.format(name, ',\n'.join(param_decls)) diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_command_buffer_util_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_command_buffer_util_body_generator.py index 580f275b0..2d98a17f8 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_command_buffer_util_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_command_buffer_util_body_generator.py @@ -121,12 +121,6 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_cmd_params: - return True - return False - def get_arg_list(self, values): args = [] for value in values: diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_command_buffer_util_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_command_buffer_util_header_generator.py index e8c68f339..c517b5605 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_command_buffer_util_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_command_buffer_util_header_generator.py @@ -100,12 +100,6 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_cmd_params: - return True - return False - def get_arg_list(self, values): args = [] for value in values: diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_consumer_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_consumer_header_generator.py index cc58d8d38..4fb7d5714 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_consumer_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_consumer_header_generator.py @@ -99,10 +99,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - - # - # Indicates that the current feature has C++ code to generate. - def need_feature_generation(self): - if self.feature_cmd_params: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_body_generator.py index 4bd0fe875..60dbbd805 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_body_generator.py @@ -600,12 +600,6 @@ def __init__( def writeout(self, *args, **kwargs): write(*args, **kwargs, file=self.outFile) - # - # Indicates that the current feature has C++ code to generate. - def need_feature_generation(self): - if self.feature_cmd_params or self.struct_names: - return True - return False # # Performs C++ code generation for the feature. diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_extension_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_extension_generator.py index 1163fa058..36ac6a5f6 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_extension_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_extension_generator.py @@ -147,11 +147,6 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - def need_feature_generation(self): - if self.struct_names: - return True - return False - def generate_feature(self): structs = self.get_filtered_struct_names() structs.sort() diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_header_generator.py index 9c60f29d9..9612e3b49 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_consumer_header_generator.py @@ -164,13 +164,6 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - # - # Indicates that the current feature has C++ code to generate. - def need_feature_generation(self): - if self.feature_cmd_params or self.struct_names: - return True - return False - def generate_feature(self): """Performs C++ code generation for the feature.""" first = True diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_struct_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_struct_generator.py index 0e70e2451..a0c50e4cc 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_struct_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_cpp_struct_generator.py @@ -190,11 +190,6 @@ def beginFile(self, genOpts): self.is_header = genOpts.is_header self.newline() - def need_feature_generation(self): - if self.struct_names: - return True - return False - def is_union(self, value): if value not in self.registry.typedict: return False @@ -441,7 +436,7 @@ def handleInputArray(self, struct_prefix, arg, num_lengths, lengths, indent, hea structBuild += makeGenVar(strArrayName, None, handleObjectType, locals(), indent, useThis=False) space = (' ' * indent) - + # If pointer and not just static array if not self.isStaticArray(lengths[0]): structBuild += f'{space}if ({struct_prefix}{arg.name} != NULL) {{\n' @@ -494,7 +489,11 @@ def handlePointer(self, struct_prefix, arg, num_lengths, lengths, indent, header local_header.extend(header) local_body.extend(body) arg_name = struct_prefix + arg.name - struct_arg = f'"reinterpret_cast<{arg.platform_full_type}>(" << {arg_name} << ")"' + struct_arg = None + if arg.platform_full_type == 'LPCWSTR': + struct_arg = f'"reinterpret_cast<{arg.platform_full_type}>(" << util::strings::convert_wstring_to_utf8({arg_name}) << ")"' + else: + struct_arg = f'"reinterpret_cast<{arg.platform_full_type}>(" << {arg_name} << ")"' local_body.append(makeOutStructSet(struct_arg, locals(), isFirstArg, isLastArg, indent)) return local_header, local_body @@ -747,7 +746,7 @@ def makeStructDeclBody(self, structName): structBuild += makeGen('std::string variable_name = "NULL";', locals(), indent) space = (' ' * indent) - + if still_is_pointer: structBuild += f'{space}{arg_name}{var_suffix} != NULL) {{' indent = indent + 4 diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_decoder_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_decoder_body_generator.py index eff2d9e3c..02afe358e 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_decoder_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_decoder_body_generator.py @@ -99,9 +99,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_cmd_params: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_decoder_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_decoder_header_generator.py index b4735c828..668f51899 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_decoder_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_decoder_header_generator.py @@ -81,9 +81,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_cmd_params: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_dispatch_table_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_dispatch_table_generator.py index d327c189b..3552c711c 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_dispatch_table_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_dispatch_table_generator.py @@ -59,6 +59,8 @@ def __init__( 'vulkan/vk_layer.h', )) + self.begin_end_file_data.system_headers.append('unordered_map') + self.begin_end_file_data.pre_namespace_code.extend(( '#ifdef WIN32', '#ifdef CreateEvent', @@ -131,11 +133,12 @@ def endFile(self): """Method override.""" KhronosDispatchTableGenerator.generateDispatchTable(self) + write ( + 'using DeviceDispatchTablesMap = std::unordered_map;', + file=self.outFile) + write ( + 'using InstanceDispatchTablesMap = std::unordered_map;\n', + file=self.outFile) + # Finish processing in superclass VulkanBaseGenerator.endFile(self) - - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_cmd_params: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_json_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_json_body_generator.py index cd475a1d0..2c8e6412a 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_json_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_json_body_generator.py @@ -81,10 +81,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - - # - # Indicates that the current feature has C++ code to generate. - def need_feature_generation(self): - if self.feature_struct_members: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_json_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_json_header_generator.py index ebc258a91..6871e8c53 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_json_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_json_header_generator.py @@ -50,7 +50,7 @@ def __init__( protectFeature, extra_headers=extra_headers ) - + self.begin_end_file_data.specific_headers.extend(( 'format/platform_types.h', 'util/json_util.h', @@ -83,10 +83,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - - # - # Indicates that the current feature has C++ code to generate. - def need_feature_generation(self): - if self.feature_struct_members: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_string_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_string_body_generator.py index 96408b662..47b51ae20 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_string_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_string_body_generator.py @@ -80,9 +80,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - # - # Indicates that the current feature has C++ code to generate. - def need_feature_generation(self): - if self.feature_struct_members: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_string_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_string_header_generator.py index 5ecef475d..96d27e3fd 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_string_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_enum_to_string_header_generator.py @@ -50,7 +50,7 @@ def __init__( protect_feature, extra_headers=extra_headers ) - + self.begin_end_file_data.specific_headers.extend(( 'format/platform_types.h', 'util/to_string.h', @@ -80,10 +80,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) # yapf: enable - - # - # Indicates that the current feature has C++ code to generate. - def need_feature_generation(self): - if self.feature_struct_members: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_feature_util_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_feature_util_body_generator.py index 56f9a3e46..dab2df5a1 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_feature_util_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_feature_util_body_generator.py @@ -49,7 +49,7 @@ def __init__( ) self.begin_end_file_data.specific_headers.extend(( - 'decode/vulkan_feature_util.h', + 'graphics/vulkan_feature_util.h', '', 'util/logging.h', '', @@ -57,7 +57,7 @@ def __init__( )) self.begin_end_file_data.namespaces.extend(( 'gfxrecon', - 'decode', + 'graphics', 'feature_util', )) self.begin_end_file_data.common_api_headers = [] @@ -116,9 +116,6 @@ def genStruct(self, typeinfo, typename, alias): for member in self.feature_struct_members[typename]: self.physical_device_features.append(member.name) - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - return False def make_feature_helper(self): """Generate help function for features on replaying at device creation time.""" diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_json_consumer_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_json_consumer_body_generator.py index 64ebd83b4..eb6684bae 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_json_consumer_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_json_consumer_body_generator.py @@ -114,11 +114,7 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_cmd_params: - return True - return False + def is_command_buffer_cmd(self, command): if 'vkCmd' in command: diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_layer_func_table_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_layer_func_table_generator.py index 1b530bfb0..d896b9a81 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_layer_func_table_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_layer_func_table_generator.py @@ -104,9 +104,3 @@ def write_custom_layer_func_table_contents(self, api_data, align_col): # match the scheme used by skip_func_list: align = align_col - len('vk_layerGetPhysicalDeviceProcAddr') write(' { "vk_layerGetPhysicalDeviceProcAddr",%sreinterpret_cast(vulkan_layer::GetPhysicalDeviceProcAddr) },' % (' ' * align), file=self.outFile) - - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_cmd_params: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_pnext_struct_decode_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_pnext_struct_decode_generator.py index e78f8628d..12ff807b3 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_pnext_struct_decode_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_pnext_struct_decode_generator.py @@ -93,9 +93,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_extended_structs: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_pnext_struct_encode_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_pnext_struct_encode_generator.py index 5c7746e26..d36f1d10e 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_pnext_struct_encode_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_pnext_struct_encode_generator.py @@ -84,14 +84,9 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_extended_structs: - return True - return False def get_encode_struct_while_loop_statement(self, current_api_data): """Method Override""" loop = ' while ((base != nullptr) && ((base->sType == VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO) ||\n' loop += ' (base->sType == VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO)))' - return loop \ No newline at end of file + return loop diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_recapture_func_table_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_recapture_func_table_generator.py new file mode 100644 index 000000000..9868551d9 --- /dev/null +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_recapture_func_table_generator.py @@ -0,0 +1,106 @@ +#!/usr/bin/python3 -i +# +# Copyright (c) 2018 Valve Corporation +# Copyright (c) 2018 LunarG, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import sys +from vulkan_base_generator import VulkanBaseGenerator, VulkanBaseGeneratorOptions, write +from khronos_layer_func_table_generator import KhronosLayerFuncTableGenerator + + +class VulkanRecaptureFuncTableGeneratorOptions(VulkanBaseGeneratorOptions): + """Eliminates JSON black_lists and platform_types files, which are not necessary for + function table generation. + Options for Vulkan layer function table C++ code generation. + """ + + def __init__( + self, + filename=None, + directory='.', + prefix_text='', + protect_file=False, + protect_feature=True, + extra_headers=[] + ): + VulkanBaseGeneratorOptions.__init__( + self, + None, + None, + filename, + directory, + prefix_text, + protect_file, + protect_feature, + extra_headers=extra_headers + ) + self.begin_end_file_data.specific_headers.extend(( + 'encode/custom_vulkan_api_call_encoders.h', + 'generated/generated_vulkan_api_call_encoders.h', + 'tools/replay/recapture_vulkan_entry.h', + 'util/defines.h', + )) + self.begin_end_file_data.system_headers.append('unordered_map') + self.begin_end_file_data.namespaces.extend(('gfxrecon', 'vulkan_recapture')) + +class VulkanRecaptureFuncTableGenerator(VulkanBaseGenerator, KhronosLayerFuncTableGenerator): + """LayerFuncTableGenerator - subclass of VulkanBaseGenerator. + Generates C++ function table for the Vulkan API calls exported by the layer. + Generate Vulkan layer function table C++ type declarations. + """ + + def __init__( + self, err_file=sys.stderr, warn_file=sys.stderr, diag_file=sys.stdout + ): + VulkanBaseGenerator.__init__( + self, + err_file=err_file, + warn_file=warn_file, + diag_file=diag_file + ) + + # The trace layer does not currently implement or export the instance version query + self.APICALL_BLACKLIST = ['vkEnumerateInstanceVersion'] + + # These functions are provided directly by the layer, and are not encoded + self.LAYER_FUNCTIONS = [ + 'vkGetInstanceProcAddr', 'vkGetDeviceProcAddr', + 'vkEnumerateInstanceLayerProperties', + 'vkEnumerateDeviceLayerProperties', + 'vkEnumerateInstanceExtensionProperties', + 'vkEnumerateDeviceExtensionProperties' + ] + + def endFile(self): + """Method override.""" + + KhronosLayerFuncTableGenerator.write_layer_func_table_contents(self, self.LAYER_FUNCTIONS, 100, 'Recapture') + self.newline() + + # Finish processing in superclass + VulkanBaseGenerator.endFile(self) + + def write_custom_layer_func_table_contents(self, api_data, align_col): + """ Method override """ + # Manually output the physical device proc address function as its name doesn't + # match the scheme used by skip_func_list: + align = align_col - len('vk_layerGetPhysicalDeviceProcAddr') + write(' { "vk_layerGetPhysicalDeviceProcAddr",%sreinterpret_cast(vulkan_recapture::GetPhysicalDeviceProcAddr) },' % (' ' * align), file=self.outFile) diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_referenced_resource_consumer_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_referenced_resource_consumer_body_generator.py index ed922cf85..011d7513b 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_referenced_resource_consumer_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_referenced_resource_consumer_body_generator.py @@ -140,12 +140,6 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_cmd_params: - return True - return False - def is_handle(self, base_type): """Override method to check for handle type, only matching resource handle types.""" if self.restrict_handles: diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_referenced_resource_consumer_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_referenced_resource_consumer_header_generator.py index 7cc7db241..61d3cfb10 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_referenced_resource_consumer_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_referenced_resource_consumer_header_generator.py @@ -135,11 +135,6 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_cmd_params: - return True - return False def is_handle(self, base_type): """Override method to check for handle type, only matching resource handle types.""" diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_replay_consumer_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_replay_consumer_body_generator.py index fa96ede98..c35c696ea 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_replay_consumer_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_replay_consumer_body_generator.py @@ -117,11 +117,6 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_cmd_params: - return True - return False def is_instance_type(self, typename): ''' Method overide. ''' @@ -281,8 +276,9 @@ def is_allocation_callback_type(self, struct): def is_special_case_value(self, value, is_override): """Method override.""" if (value.base_type == 'VkSurfaceKHR' or - (value.name == 'pSurfaceInfo' and value.base_type != 'VkSurfaceKHR') or - (value.base_type == "VkSwapchainKHR" and not is_override)): + (value.name == 'pSurfaceInfo' and value.base_type != 'VkSurfaceKHR') or + (value.base_type == "VkSwapchainKHR" and not is_override) + or value.base_type == 'VkDebugUtilsObjectNameInfoEXT'): return True return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_replay_dump_resources_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_replay_dump_resources_body_generator.py index 69cbf9f25..857c97791 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_replay_dump_resources_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_replay_dump_resources_body_generator.py @@ -115,14 +115,16 @@ def make_consumer_func_body(self, api_data, return_type, name, values): body = '' is_override = name in self.DUMP_RESOURCES_OVERRIDES + is_transfer = name in self.DUMP_RESOURCES_TRANSFER_API_CALLS if not is_override: - body += ' if (IsRecording(commandBuffer))\n' + body += ' if (IsRecording())\n' body += ' {\n' - body += ' CommandBufferIterator first, last;\n' - body += ' bool found = GetDrawCallActiveCommandBuffers(commandBuffer, first, last);\n' - body += ' if (found)\n' + body += ' const std::vector> dc_contexts = FindDrawCallDumpingContexts(commandBuffer);\n' + body += ' for (auto dc_context : dc_contexts)\n' body += ' {\n' + body += ' CommandBufferIterator first, last;\n' + body += ' dc_context->GetDrawCallActiveCommandBuffers(first, last);\n' body += ' for (CommandBufferIterator it = first; it < last; ++it)\n' body += ' {\n' @@ -133,17 +135,20 @@ def make_consumer_func_body(self, api_data, return_type, name, values): call_expr += '{}, '.format(val.name) dispatchfunc += call_expr - body += ' ' + dispatchfunc[:-2] + ');\n' + body += ' ' + dispatchfunc[:-2] + ');\n' body += ' }\n' body += ' }\n' body += '\n' - body += ' VkCommandBuffer dispatch_rays_command_buffer = GetDispatchRaysCommandBuffer(commandBuffer);\n' - body += ' if (dispatch_rays_command_buffer != VK_NULL_HANDLE)\n' + body += ' const std::vector> dr_contexts = FindDispatchTraceRaysContexts(commandBuffer);\n' + body += ' for (auto dr_context : dr_contexts)\n' body += ' {\n' + body += ' VkCommandBuffer dispatch_rays_command_buffer = dr_context->GetDispatchRaysCommandBuffer();\n' + body += ' if (dispatch_rays_command_buffer != VK_NULL_HANDLE)\n' + body += ' {\n' dispatchfunc = 'func(dispatch_rays_command_buffer, ' + call_expr - body += ' ' + dispatchfunc[:-2] + ');\n' - + body += ' ' + dispatchfunc[:-2] + ');\n' + body += ' }\n' body += ' }\n' body += ' }\n' else: @@ -158,8 +163,12 @@ def make_consumer_func_body(self, api_data, return_type, name, values): else: override_call_expr += '{}, '.format(val.name) - override_call_expr = override_call_expr[:-2] - body += ' if (IsRecording(commandBuffer))\n' + if is_transfer: + override_call_expr += 'before_command' + else: + override_call_expr = override_call_expr[:-2] + + body += ' if (IsRecording())\n' body += ' {\n' body += ' {}({});\n'.format(self.DUMP_RESOURCES_OVERRIDES[name], override_call_expr) body += ' }\n' diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_replay_dump_resources_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_replay_dump_resources_header_generator.py index a9f1c96dd..573da3e8e 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_replay_dump_resources_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_replay_dump_resources_header_generator.py @@ -81,6 +81,7 @@ class VulkanReplayDumpResourcesHeaderGenerator(VulkanBaseGenerator): Generate C++ class declarations for Vulkan parameter processing. """ DUMP_RESOURCES_OVERRIDES = {} + DUMP_RESOURCES_TRANSFER_API_CALLS = {} def __init__( self, err_file=sys.stderr, warn_file=sys.stderr, diag_file=sys.stdout @@ -142,11 +143,6 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_cmd_params: - return True - return False def generate_replay_dump_resources(self): """Performs C++ code generation for replay dump resources.""" @@ -159,7 +155,8 @@ def generate_replay_dump_resources(self): continue decl = self.make_dump_resources_func_decl( - return_type, 'Process_' + cmd, values, cmd in self.DUMP_RESOURCES_OVERRIDES + return_type, 'Process_' + cmd, values, cmd in self.DUMP_RESOURCES_OVERRIDES, + cmd in self.DUMP_RESOURCES_TRANSFER_API_CALLS ) cmddef = decl + ';\n' diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_state_table_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_state_table_header_generator.py index 61d9026dd..a86cfa5af 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_state_table_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_state_table_header_generator.py @@ -78,4 +78,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - # yapf: enable diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_body_generator.py index 93c629173..5dc6b0bfd 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_body_generator.py @@ -87,9 +87,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_struct_members: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_forward_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_forward_generator.py index f375192ac..04ae178fa 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_forward_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_forward_generator.py @@ -84,9 +84,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_struct_members: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_header_generator.py index 087c45dfb..5c0cd389f 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_decoders_header_generator.py @@ -94,8 +94,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_struct_members or self.feature_struct_aliases: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_encoders_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_encoders_header_generator.py index ce06f4676..6a784cfc9 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_encoders_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_encoders_header_generator.py @@ -87,9 +87,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_struct_members: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_mappers_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_mappers_body_generator.py index b10aafcb9..a25544811 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_mappers_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_mappers_body_generator.py @@ -93,9 +93,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_struct_members: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_mappers_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_mappers_header_generator.py index 56f3d8040..ecd41ff64 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_mappers_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_mappers_header_generator.py @@ -53,6 +53,7 @@ def __init__( ) self.begin_end_file_data.specific_headers.extend(( + 'decode/common_consumer_base.h', 'decode/common_object_info_table.h', 'decode/vulkan_pnext_node.h', 'format/platform_types.h', @@ -91,8 +92,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_struct_members: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_wrappers_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_wrappers_body_generator.py index 40c5306e4..cd41e29c8 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_wrappers_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_wrappers_body_generator.py @@ -89,11 +89,6 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - def need_feature_generation(self): - """Indicates that the current feature has C++ code to generate.""" - if self.feature_struct_members: - return True - return False def write_special_case_struct_handling(self): """Method override.""" diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_wrappers_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_wrappers_header_generator.py index ea24a21af..c474e979f 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_wrappers_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_handle_wrappers_header_generator.py @@ -92,9 +92,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - - def need_feature_generation(self): - """Method override. Indicates that the current feature has C++ code to generate.""" - if self.feature_struct_members or self.feature_cmd_params: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_to_json_body_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_to_json_body_generator.py index ed3e27436..2c79fcef1 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_to_json_body_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_to_json_body_generator.py @@ -117,10 +117,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - - # - # Indicates that the current feature has C++ code to generate. - def need_feature_generation(self): - if self.feature_struct_members: - return True - return False diff --git a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_to_json_header_generator.py b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_to_json_header_generator.py index 0aa8523ee..f0670dfd1 100644 --- a/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_to_json_header_generator.py +++ b/third_party/gfxreconstruct/framework/generated/khronos_generators/vulkan_generators/vulkan_struct_to_json_header_generator.py @@ -88,10 +88,3 @@ def endFile(self): # Finish processing in superclass VulkanBaseGenerator.endFile(self) - - # - # Indicates that the current feature has C++ code to generate. - def need_feature_generation(self): - if self.feature_struct_members: - return True - return False diff --git a/third_party/gfxreconstruct/framework/graphics/CMakeLists.txt b/third_party/gfxreconstruct/framework/graphics/CMakeLists.txt index 1f53b0ce5..bd3a9422b 100644 --- a/third_party/gfxreconstruct/framework/graphics/CMakeLists.txt +++ b/third_party/gfxreconstruct/framework/graphics/CMakeLists.txt @@ -62,10 +62,13 @@ target_sources(gfxrecon_graphics ${CMAKE_CURRENT_LIST_DIR}/vulkan_instance_util.cpp ${CMAKE_CURRENT_LIST_DIR}/vulkan_util.h ${CMAKE_CURRENT_LIST_DIR}/vulkan_util.cpp + ${CMAKE_CURRENT_LIST_DIR}/vulkan_feature_util.h + ${CMAKE_CURRENT_LIST_DIR}/vulkan_feature_util.cpp ${CMAKE_CURRENT_LIST_DIR}/vulkan_struct_deep_copy.h ${CMAKE_CURRENT_LIST_DIR}/vulkan_struct_get_pnext.h ${CMAKE_CURRENT_LIST_DIR}/../generated/generated_vulkan_struct_deep_copy.cpp ${CMAKE_CURRENT_LIST_DIR}/../generated/generated_vulkan_struct_deep_copy_stype.cpp + ${CMAKE_CURRENT_LIST_DIR}/../generated/generated_vulkan_feature_util.cpp ${CMAKE_CURRENT_LIST_DIR}/vulkan_struct_extract_handles.h ${CMAKE_CURRENT_LIST_DIR}/vulkan_struct_extract_handles.cpp ${CMAKE_CURRENT_LIST_DIR}/../generated/generated_vulkan_dispatch_table.h diff --git a/third_party/gfxreconstruct/framework/graphics/dx12_util.cpp b/third_party/gfxreconstruct/framework/graphics/dx12_util.cpp index c9234e408..506a32bcc 100644 --- a/third_party/gfxreconstruct/framework/graphics/dx12_util.cpp +++ b/third_party/gfxreconstruct/framework/graphics/dx12_util.cpp @@ -733,7 +733,7 @@ void TrackAdapterDesc(IDXGIAdapter* adapter, graphics::dx12::ActiveAdapterMap& adapters, format::AdapterType type) { - const int64_t packed_luid = (dxgi_desc.AdapterLuid.HighPart << 31) | dxgi_desc.AdapterLuid.LowPart; + const int64_t packed_luid = pack_luid(dxgi_desc.AdapterLuid); if (adapters.count(packed_luid) == 0) { @@ -853,7 +853,7 @@ format::DxgiAdapterDesc* MarkActiveAdapter(ID3D12Device* device, graphics::dx12: // Get the device's parent adapter identifier LUID parent_adapter_luid = device->GetAdapterLuid(); - const int64_t packed_luid = (parent_adapter_luid.HighPart << 31) | parent_adapter_luid.LowPart; + const int64_t packed_luid = pack_luid(parent_adapter_luid); // Mark an adapter as active for (auto& adapter : adapters) @@ -936,7 +936,7 @@ bool GetAdapterAndIndexbyLUID(LUID luid, { bool success = false; - const int64_t packed_luid = (luid.HighPart << 31) | luid.LowPart; + const int64_t packed_luid = pack_luid(luid); auto search = adapters.find(packed_luid); if (search != adapters.end()) @@ -1018,7 +1018,7 @@ bool GetAdapterAndIndexbyDevice(ID3D12Device* device, format::DxgiAdapterDesc* GetAdapterDescByLUID(LUID parent_adapter_luid, graphics::dx12::ActiveAdapterMap& adapters) { - const int64_t packed_luid = (parent_adapter_luid.HighPart << 31) | parent_adapter_luid.LowPart; + const int64_t packed_luid = pack_luid(parent_adapter_luid); format::DxgiAdapterDesc* parent_adapter_desc = nullptr; for (auto& adapter : adapters) { diff --git a/third_party/gfxreconstruct/framework/graphics/dx12_util.h b/third_party/gfxreconstruct/framework/graphics/dx12_util.h index c4824a0c8..bc2ec2461 100644 --- a/third_party/gfxreconstruct/framework/graphics/dx12_util.h +++ b/third_party/gfxreconstruct/framework/graphics/dx12_util.h @@ -33,9 +33,8 @@ #include "util/platform.h" #ifdef WIN32 #include "graphics/dx12_image_renderer.h" -#else -#include "format/platform_types.h" #endif +#include "format/platform_types.h" #include "format/format.h" #ifdef WIN32 diff --git a/third_party/gfxreconstruct/framework/graphics/vulkan_check_buffer_references.cpp b/third_party/gfxreconstruct/framework/graphics/vulkan_check_buffer_references.cpp index 0c7a64b79..1fb21234b 100644 --- a/third_party/gfxreconstruct/framework/graphics/vulkan_check_buffer_references.cpp +++ b/third_party/gfxreconstruct/framework/graphics/vulkan_check_buffer_references.cpp @@ -59,8 +59,7 @@ void populate_shader_stages(const decode::StructPointerDecoder* pCreateInf if (pipeline_info != nullptr && module_info != nullptr) { // extract information about buffer-references, present in shadermodule-info structs - pipeline_info->buffer_reference_infos.insert(pipeline_info->buffer_reference_infos.end(), - module_info->buffer_reference_infos.begin(), + pipeline_info->buffer_reference_infos.insert(module_info->buffer_reference_infos.begin(), module_info->buffer_reference_infos.end()); } @@ -112,8 +111,7 @@ void populate_shader_stages( if (module_info != nullptr) { // extract information about buffer-references, present in shadermodule-info structs - pipeline_info->buffer_reference_infos.insert(pipeline_info->buffer_reference_infos.end(), - module_info->buffer_reference_infos.begin(), + pipeline_info->buffer_reference_infos.insert(module_info->buffer_reference_infos.begin(), module_info->buffer_reference_infos.end()); } diff --git a/third_party/gfxreconstruct/framework/graphics/vulkan_check_buffer_references.h b/third_party/gfxreconstruct/framework/graphics/vulkan_check_buffer_references.h index 8412a8c02..6a32bd5ad 100644 --- a/third_party/gfxreconstruct/framework/graphics/vulkan_check_buffer_references.h +++ b/third_party/gfxreconstruct/framework/graphics/vulkan_check_buffer_references.h @@ -68,7 +68,8 @@ static void vulkan_check_buffer_references(const uint32_t* const spirv_code, siz { if (out_info_struct != nullptr) { - out_info_struct->buffer_reference_infos = spirv_util.GetBufferReferenceInfos(); + const auto& refs = spirv_util.GetBufferReferenceInfos(); + out_info_struct->buffer_reference_infos = { refs.begin(), refs.end() }; } } } diff --git a/third_party/gfxreconstruct/framework/graphics/vulkan_device_util.cpp b/third_party/gfxreconstruct/framework/graphics/vulkan_device_util.cpp index 865764004..647374783 100644 --- a/third_party/gfxreconstruct/framework/graphics/vulkan_device_util.cpp +++ b/third_party/gfxreconstruct/framework/graphics/vulkan_device_util.cpp @@ -194,6 +194,7 @@ VulkanDeviceUtil::EnableRequiredPhysicalDeviceFeatures(const VulkanInstanceUtilI instance_info, instance_table, physical_device, vulkan_1_2_features); } break; + // samplerYcbcrConversion is required for sampling images with external format case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: { @@ -220,6 +221,7 @@ VulkanDeviceUtil::EnableRequiredPhysicalDeviceFeatures(const VulkanInstanceUtilI instance_info, instance_table, physical_device, buffer_address_features); } break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR: { // Enable accelerationStructureCaptureReplay @@ -249,14 +251,15 @@ VulkanDeviceUtil::EnableRequiredPhysicalDeviceFeatures(const VulkanInstanceUtilI accel_struct_features->accelerationStructureCaptureReplay; } break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR: { // Enable rayTracingPipelineShaderGroupHandleCaptureReplay - auto rt_pipeline_features = + auto* rt_pipeline_features = reinterpret_cast(current_struct); rayTracingPipelineShaderGroupHandleCaptureReplay_ptr = - (&rt_pipeline_features->rayTracingPipelineShaderGroupHandleCaptureReplay); + &rt_pipeline_features->rayTracingPipelineShaderGroupHandleCaptureReplay; rayTracingPipelineShaderGroupHandleCaptureReplay_original = rt_pipeline_features->rayTracingPipelineShaderGroupHandleCaptureReplay; @@ -289,6 +292,38 @@ VulkanDeviceUtil::EnableRequiredPhysicalDeviceFeatures(const VulkanInstanceUtilI } } break; + + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT: + { + // Enable descriptorBufferCaptureReplay + auto* desc_buffer_features = + reinterpret_cast(current_struct); + + descriptorBufferCaptureReplay_ptr = &desc_buffer_features->descriptorBufferCaptureReplay; + descriptorBufferCaptureReplay_original = desc_buffer_features->descriptorBufferCaptureReplay; + + if (desc_buffer_features->descriptorBuffer && !desc_buffer_features->descriptorBufferCaptureReplay) + { + VkPhysicalDeviceDescriptorBufferFeaturesEXT supported_features{ + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT, nullptr + }; + GetPhysicalDeviceFeatures(instance_info, instance_table, physical_device, supported_features); + + desc_buffer_features->descriptorBufferCaptureReplay = + supported_features.descriptorBufferCaptureReplay; + } + + result.feature_descriptorBufferCaptureReplay = desc_buffer_features->descriptorBufferCaptureReplay; + + // retrieve descriptor-buffer-properties + result.descriptor_buffer_properties = { + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT, nullptr + }; + GetPhysicalDeviceProperties( + instance_info, instance_table, physical_device, result.descriptor_buffer_properties); + } + break; + default: break; } @@ -344,6 +379,7 @@ void VulkanDeviceUtil::GetReplayDeviceProperties(const VulkanInstanceUtilInfo& if (instance_info.api_version >= VK_MAKE_VERSION(1, 1, 0)) { + // properties needs to match VulkanReplayConsumerBase::SetPhysicalDeviceProperties2. // pNext-chaining VkPhysicalDeviceDriverProperties driver_properties = {}; driver_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES; @@ -351,12 +387,17 @@ void VulkanDeviceUtil::GetReplayDeviceProperties(const VulkanInstanceUtilInfo& VkPhysicalDeviceRayTracingPipelinePropertiesKHR raytracing_properties = {}; raytracing_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR; + VkPhysicalDeviceAccelerationStructurePropertiesKHR acc_str_properties = {}; + acc_str_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR; + + driver_properties.pNext = &acc_str_properties; raytracing_properties.pNext = &driver_properties; device_properties2.pNext = &raytracing_properties; instance_table->GetPhysicalDeviceProperties2(physical_device, &device_properties2); - replay_device_info->raytracing_properties = raytracing_properties; - replay_device_info->driver_properties = driver_properties; + replay_device_info->raytracing_properties = raytracing_properties; + replay_device_info->driver_properties = driver_properties; + replay_device_info->acceleration_structure_properties = acc_str_properties; } else { diff --git a/third_party/gfxreconstruct/framework/graphics/vulkan_device_util.h b/third_party/gfxreconstruct/framework/graphics/vulkan_device_util.h index b1c1c2e84..5535fe06f 100644 --- a/third_party/gfxreconstruct/framework/graphics/vulkan_device_util.h +++ b/third_party/gfxreconstruct/framework/graphics/vulkan_device_util.h @@ -57,8 +57,11 @@ struct VulkanDevicePropertyFeatureInfo VkBool32 feature_bufferDeviceAddressCaptureReplay{ VK_FALSE }; VkBool32 feature_accelerationStructureCaptureReplay{ VK_FALSE }; VkBool32 feature_rayTracingPipelineShaderGroupHandleCaptureReplay{ VK_FALSE }; + VkBool32 feature_descriptorBufferCaptureReplay{ VK_FALSE }; VkBool32 feature_samplerYcbcrConversion{ VK_FALSE }; + + VkPhysicalDeviceDescriptorBufferPropertiesEXT descriptor_buffer_properties; }; class VulkanDeviceUtil @@ -95,7 +98,6 @@ class VulkanDeviceUtil const VkPhysicalDevice physical_device, T* feature_struct); - private: // VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddressCaptureReplay VkBool32* bufferDeviceAddressCaptureReplay_ptr{ nullptr }; VkBool32 bufferDeviceAddressCaptureReplay_original{ VK_FALSE }; @@ -108,6 +110,10 @@ class VulkanDeviceUtil VkBool32* rayTracingPipelineShaderGroupHandleCaptureReplay_ptr{ nullptr }; VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplay_original{ VK_FALSE }; + // VkPhysicalDeviceDescriptorBufferFeaturesEXT::descriptorBufferCaptureReplay + VkBool32* descriptorBufferCaptureReplay_ptr{ nullptr }; + VkBool32 descriptorBufferCaptureReplay_original{ VK_FALSE }; + // VkPhysicalDeviceSamplerYcbcrConversionFeatures VkBool32* samplerYcbcrConversion_ptr{ nullptr }; VkBool32 samplerYcbcrConversion_original{ VK_FALSE }; diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_feature_util.cpp b/third_party/gfxreconstruct/framework/graphics/vulkan_feature_util.cpp similarity index 97% rename from third_party/gfxreconstruct/framework/decode/vulkan_feature_util.cpp rename to third_party/gfxreconstruct/framework/graphics/vulkan_feature_util.cpp index a08410dc9..b1220d264 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_feature_util.cpp +++ b/third_party/gfxreconstruct/framework/graphics/vulkan_feature_util.cpp @@ -20,7 +20,7 @@ ** DEALINGS IN THE SOFTWARE. */ -#include "decode/vulkan_feature_util.h" +#include "graphics/vulkan_feature_util.h" #include "util/logging.h" #include "util/platform.h" @@ -32,7 +32,7 @@ #include GFXRECON_BEGIN_NAMESPACE(gfxrecon) -GFXRECON_BEGIN_NAMESPACE(decode) +GFXRECON_BEGIN_NAMESPACE(graphics) GFXRECON_BEGIN_NAMESPACE(feature_util) // There are some extensions which can be enabled by the application, but can be ignored during replay if @@ -207,7 +207,7 @@ void RemoveExtensionIfUnsupported(const std::vector& prop std::vector* extensions, const char* extension_to_remove) { - if (!feature_util::IsSupportedExtension(properties, extension_to_remove)) + if (!IsSupportedExtension(properties, extension_to_remove)) { auto extension_iter = std::find_if(extensions->begin(), extensions->end(), [&extension_to_remove](const char* extension) { @@ -256,5 +256,5 @@ void RemoveIgnorableExtensions(const std::vector& propert } GFXRECON_END_NAMESPACE(feature_util) -GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(graphics) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/decode/vulkan_feature_util.h b/third_party/gfxreconstruct/framework/graphics/vulkan_feature_util.h similarity index 98% rename from third_party/gfxreconstruct/framework/decode/vulkan_feature_util.h rename to third_party/gfxreconstruct/framework/graphics/vulkan_feature_util.h index fd1693648..fceb806ed 100644 --- a/third_party/gfxreconstruct/framework/decode/vulkan_feature_util.h +++ b/third_party/gfxreconstruct/framework/graphics/vulkan_feature_util.h @@ -30,7 +30,7 @@ #include GFXRECON_BEGIN_NAMESPACE(gfxrecon) -GFXRECON_BEGIN_NAMESPACE(decode) +GFXRECON_BEGIN_NAMESPACE(graphics) GFXRECON_BEGIN_NAMESPACE(feature_util) VkResult GetInstanceLayers(PFN_vkEnumerateInstanceLayerProperties instance_layer_proc, @@ -71,7 +71,7 @@ void CheckUnsupportedFeatures(VkPhysicalDevice physicalDevice, bool remove_unsupported); GFXRECON_END_NAMESPACE(feature_util) -GFXRECON_END_NAMESPACE(decode) +GFXRECON_END_NAMESPACE(graphics) GFXRECON_END_NAMESPACE(gfxrecon) #endif // GFXRECON_DECODE_VULKAN_FEATURE_FILTER_UTIL_H diff --git a/third_party/gfxreconstruct/framework/graphics/vulkan_resources_util.cpp b/third_party/gfxreconstruct/framework/graphics/vulkan_resources_util.cpp index 7720fdfb9..021f07ff9 100644 --- a/third_party/gfxreconstruct/framework/graphics/vulkan_resources_util.cpp +++ b/third_party/gfxreconstruct/framework/graphics/vulkan_resources_util.cpp @@ -21,6 +21,7 @@ ** DEALINGS IN THE SOFTWARE. */ +#include "decode/vulkan_replay_dump_resources_common.h" #include "util/to_string.h" #include "vulkan_util.h" #include "Vulkan-Utility-Libraries/vk_format_utils.h" @@ -107,20 +108,98 @@ void GetFormatAspects(VkFormat format, std::vector* aspec } } -VkImageAspectFlags GetFormatAspectMask(VkFormat format) +void AspectFlagsToFlagBits(VkImageAspectFlags aspect_mask, std::vector& aspects) { + if ((aspect_mask & VK_IMAGE_ASPECT_COLOR_BIT) == VK_IMAGE_ASPECT_COLOR_BIT) + { + aspects.push_back(VK_IMAGE_ASPECT_COLOR_BIT); + } + + if ((aspect_mask & VK_IMAGE_ASPECT_DEPTH_BIT) == VK_IMAGE_ASPECT_DEPTH_BIT) + { + aspects.push_back(VK_IMAGE_ASPECT_DEPTH_BIT); + } + + if ((aspect_mask & VK_IMAGE_ASPECT_STENCIL_BIT) == VK_IMAGE_ASPECT_STENCIL_BIT) + { + aspects.push_back(VK_IMAGE_ASPECT_STENCIL_BIT); + } + + if ((aspect_mask & VK_IMAGE_ASPECT_METADATA_BIT) == VK_IMAGE_ASPECT_METADATA_BIT) + { + aspects.push_back(VK_IMAGE_ASPECT_METADATA_BIT); + } + + if ((aspect_mask & VK_IMAGE_ASPECT_PLANE_0_BIT) == VK_IMAGE_ASPECT_PLANE_0_BIT) + { + aspects.push_back(VK_IMAGE_ASPECT_PLANE_0_BIT); + } + + if ((aspect_mask & VK_IMAGE_ASPECT_PLANE_1_BIT) == VK_IMAGE_ASPECT_PLANE_1_BIT) + { + aspects.push_back(VK_IMAGE_ASPECT_PLANE_1_BIT); + } + + if ((aspect_mask & VK_IMAGE_ASPECT_PLANE_2_BIT) == VK_IMAGE_ASPECT_PLANE_2_BIT) + { + aspects.push_back(VK_IMAGE_ASPECT_PLANE_2_BIT); + } + + if ((aspect_mask & VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT) == VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT) + { + aspects.push_back(VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT); + } + + if ((aspect_mask & VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT) == VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT) + { + aspects.push_back(VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT); + } + + if ((aspect_mask & VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT) == VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT) + { + aspects.push_back(VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT); + } + + if ((aspect_mask & VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT) == VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT) + { + aspects.push_back(VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT); + } + + if ((aspect_mask & VK_IMAGE_ASPECT_PLANE_0_BIT_KHR) == VK_IMAGE_ASPECT_PLANE_0_BIT_KHR) + { + aspects.push_back(VK_IMAGE_ASPECT_PLANE_0_BIT_KHR); + } + + if ((aspect_mask & VK_IMAGE_ASPECT_PLANE_1_BIT_KHR) == VK_IMAGE_ASPECT_PLANE_1_BIT_KHR) + { + aspects.push_back(VK_IMAGE_ASPECT_PLANE_1_BIT_KHR); + } + + if ((aspect_mask & VK_IMAGE_ASPECT_PLANE_2_BIT_KHR) == VK_IMAGE_ASPECT_PLANE_2_BIT_KHR) + { + aspects.push_back(VK_IMAGE_ASPECT_PLANE_2_BIT_KHR); + } +} + +VkImageAspectFlags GetFormatAspects(VkFormat format) +{ + VkImageAspectFlags aspects = VK_IMAGE_ASPECT_NONE; + switch (format) { case VK_FORMAT_D16_UNORM_S8_UINT: case VK_FORMAT_D24_UNORM_S8_UINT: case VK_FORMAT_D32_SFLOAT_S8_UINT: - return VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT; + aspects = VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT; + break; case VK_FORMAT_D16_UNORM: case VK_FORMAT_X8_D24_UNORM_PACK32: case VK_FORMAT_D32_SFLOAT: - return VK_IMAGE_ASPECT_DEPTH_BIT; + aspects = VK_IMAGE_ASPECT_DEPTH_BIT; + break; case VK_FORMAT_S8_UINT: - return VK_IMAGE_ASPECT_STENCIL_BIT; + aspects = VK_IMAGE_ASPECT_STENCIL_BIT; + break; case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM: case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM: case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM: @@ -133,7 +212,8 @@ VkImageAspectFlags GetFormatAspectMask(VkFormat format) case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM: case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM: case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM: - return VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT | VK_IMAGE_ASPECT_PLANE_2_BIT; + aspects = VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT | VK_IMAGE_ASPECT_PLANE_2_BIT; + break; case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM: case VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT: @@ -146,10 +226,14 @@ VkImageAspectFlags GetFormatAspectMask(VkFormat format) case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM: case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM: case VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT: - return VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT; + aspects = VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT; + break; default: - return VK_IMAGE_ASPECT_COLOR_BIT; + aspects = VK_IMAGE_ASPECT_COLOR_BIT; + break; } + + return aspects; } VkFormat GetImageAspectFormat(VkFormat format, VkImageAspectFlagBits aspect) @@ -421,11 +505,10 @@ bool GetTexelCoordinatesFromOffset(VkImageType imageType, VkDeviceSize* current_row_remaining_size_ptr) { bool is_texel_block_size = false; - VkDeviceSize texel_size = 0; + VkDeviceSize texel_size; uint16_t block_width = 0, block_height = 0; - bool result = GetImageTexelSize(format, &texel_size, &is_texel_block_size, &block_width, &block_height); - if (!result) + if (GetImageTexelSize(format, &texel_size, &is_texel_block_size, &block_width, &block_height)) { // The image format is not supported return false; @@ -463,9 +546,9 @@ bool GetTexelCoordinatesFromOffset(VkImageType imageType, if (z >= extent.depth) { // offset_to_subresource_data_start is beyond the range of subresource data. Because current - // Vulakn specification doesn't allow VK_IMAGE_TYPE_3D for array image, so no next array layer + // Vulkan specification doesn't allow VK_IMAGE_TYPE_3D for array image, so no next array layer // exist; - result = false; + return false; } else { @@ -585,7 +668,7 @@ bool GetTexelCoordinatesFromOffset(VkImageType imageType, *current_row_remaining_size_ptr = current_row_remaining_size; } - return result; + return true; } // Get the offset which is relative to the start of subresource data for a location (pointed by texel @@ -812,8 +895,7 @@ VulkanResourcesUtil::~VulkanResourcesUtil() } } -uint64_t VulkanResourcesUtil::GetImageResourceSizesOptimal(VkImage image, - VkFormat format, +uint64_t VulkanResourcesUtil::GetImageResourceSizesOptimal(VkFormat format, VkImageType type, const VkExtent3D& extent, uint32_t mip_levels, @@ -835,11 +917,6 @@ uint64_t VulkanResourcesUtil::GetImageResourceSizesOptimal(VkImage return 0; } - if (mip_levels > 1 + floor(log2(std::max(std::max(extent.width, extent.height), extent.depth)))) - { - GFXRECON_LOG_WARNING_ONCE("%s(): too many mip_levels for extent", __func__); - } - if (subresource_sizes != nullptr) { subresource_sizes->clear(); @@ -1421,6 +1498,7 @@ VkResult VulkanResourcesUtil::ResolveImage(VkCommandBuffer command_buffer, VkImage image, VkFormat format, VkImageType type, + VkImageTiling tiling, const VkExtent3D& extent, uint32_t array_layers, VkImageLayout current_layout, @@ -1431,8 +1509,12 @@ VkResult VulkanResourcesUtil::ResolveImage(VkCommandBuffer command_buffer, VkFormatProperties format_properties{}; instance_table_.GetPhysicalDeviceFormatProperties(physical_device_, format, &format_properties); - if ((format_properties.optimalTilingFeatures & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) != - VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) + if ((tiling == VK_IMAGE_TILING_OPTIMAL && + (format_properties.optimalTilingFeatures & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) != + VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) || + (((tiling == VK_IMAGE_TILING_LINEAR && + (format_properties.linearTilingFeatures & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) != + VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)))) { GFXRECON_LOG_WARNING_ONCE( "Multisampled images that do not support VK_FORMAT_FEATURE_COLOR_ATTACHMENT will not be resolved"); @@ -1495,7 +1577,7 @@ VkResult VulkanResourcesUtil::ResolveImage(VkCommandBuffer command_buffer, if (command_buffer != VK_NULL_HANDLE) { - VkImageAspectFlags aspect_mask = GetFormatAspectMask(format); + VkImageAspectFlags aspect_mask = GetFormatAspects(format); uint32_t num_barriers = 1; VkImageMemoryBarrier memory_barriers[2]; @@ -1736,8 +1818,7 @@ VkResult VulkanResourcesUtil::ReadImageResources(const std::vectorsecond; } - VkImage copy_image = tmp_data[i].resolve_image != VK_NULL_HANDLE ? tmp_data[i].resolve_image : img.image; + VkImage copy_image = img.image; if (img.sample_count != VK_SAMPLE_COUNT_1_BIT) { @@ -1811,6 +1894,7 @@ VkResult VulkanResourcesUtil::ReadImageResources(const std::vector(size)); if (result != VK_SUCCESS) { return result; @@ -2035,7 +2126,7 @@ VkResult VulkanResourcesUtil::ReadFromBufferResource( data.resize(static_cast(size)); InvalidateStagingBuffer(); - util::platform::MemoryCopy(data.data(), size, staging_buffer_.mapped_ptr, size); + util::platform::MemoryCopy(data.data(), static_cast(size), staging_buffer_.mapped_ptr, size); return result; } @@ -2303,14 +2394,172 @@ void UpdateSparseMemoryBindMap(std::map& spars } } +void GetIntersectForSparseImageMemoryBind(const VkSparseImageMemoryBind& old_bind, + const VkSparseImageMemoryBind& new_bind, + std::vector& new_binds, + std::vector& removed_binds) +{ + const VkOffset3D& old_offset = old_bind.offset; + const VkExtent3D& old_extent = old_bind.extent; + const VkOffset3D& new_offset = new_bind.offset; + const VkExtent3D& new_extent = new_bind.extent; + + // If there is no intersection, we can stop + if ((old_offset.x + old_extent.width <= new_offset.x || new_offset.x + new_extent.width <= old_offset.x) || + (old_offset.y + old_extent.height <= new_offset.y || new_offset.y + new_extent.height <= old_offset.y) || + (old_offset.z + old_extent.depth <= new_offset.z || new_offset.z + new_extent.depth <= old_offset.z)) + { + return; + } + + // If there is an intersection, no matter the type, the old binding will have to be removed + removed_binds.push_back(old_offset); + + // Check for each possible "slice" of the old 3D rectangular binding if the binding is overriden or must be kept. + // If the binding must be kept, a new bind structure is added + + if (old_offset.x < new_offset.x) + { + VkSparseImageMemoryBind bind = old_bind; + bind.extent.width = new_offset.x - old_offset.x; + new_binds.push_back(bind); + } + + if (old_offset.x + old_extent.width > new_offset.x + new_extent.width) + { + VkSparseImageMemoryBind bind = old_bind; + bind.offset.x = new_offset.x + new_extent.width; + bind.extent.width = old_offset.x + old_extent.width - bind.offset.x; + new_binds.push_back(bind); + } + + if (old_offset.y < new_offset.y) + { + VkSparseImageMemoryBind bind = old_bind; + bind.offset.x = std::max(new_offset.x, old_offset.x); + bind.extent.width = std::min(new_extent.width, old_offset.x + old_extent.width - bind.offset.x); + bind.extent.height = new_offset.y - old_offset.y; + new_binds.push_back(bind); + } + + if (old_offset.y + old_extent.height > new_offset.y + new_extent.height) + { + VkSparseImageMemoryBind bind = old_bind; + bind.offset.x = std::max(new_offset.x, old_offset.x); + bind.offset.y = new_offset.y + new_extent.height; + bind.extent.width = std::min(new_extent.width, old_offset.x + old_extent.width - bind.offset.x); + bind.extent.height = old_offset.y + old_extent.height - bind.offset.y; + new_binds.push_back(bind); + } + + if (old_offset.z < new_offset.z) + { + VkSparseImageMemoryBind bind = old_bind; + bind.offset.x = std::max(new_offset.x, old_offset.x); + bind.offset.y = std::max(new_offset.y, old_offset.y); + bind.extent.width = std::min(new_extent.width, old_offset.x + old_extent.width - bind.offset.x); + bind.extent.height = std::min(new_extent.height, old_offset.y + old_extent.height - bind.offset.y); + bind.extent.depth = new_offset.z - old_offset.z; + new_binds.push_back(bind); + } + + if (old_offset.z + old_extent.depth > new_offset.z + new_extent.depth) + { + VkSparseImageMemoryBind bind = old_bind; + bind.offset.x = std::max(new_offset.x, old_offset.x); + bind.offset.y = std::max(new_offset.y, old_offset.y); + bind.offset.z = new_offset.z + new_extent.depth; + bind.extent.width = std::min(new_extent.width, old_offset.x + old_extent.width - bind.offset.x); + bind.extent.height = std::min(new_extent.height, old_offset.y + old_extent.height - bind.offset.y); + bind.extent.depth = old_offset.z + old_extent.depth - bind.offset.z; + new_binds.push_back(bind); + } +} + +void UpdateSparseImageMemoryBindMap(VulkanSubresourceSparseImageMemoryBindMap& sparse_image_memory_bind_map, + const VkSparseImageMemoryBind& new_bind) +{ + // First we want to search for bound VkImageSubresource that may intersect with the new range + // (we'll care about later) + // The aspect mask is a bit particular as it is a bit field... + + std::vector intersecting_subresources; + + VkImageSubresource search_key = new_bind.subresource; + search_key.aspectMask = 0; + + auto iterator = sparse_image_memory_bind_map.lower_bound(search_key); + for (; iterator != sparse_image_memory_bind_map.end() && iterator->first.arrayLayer == search_key.arrayLayer && + iterator->first.mipLevel == search_key.mipLevel; + ++iterator) + { + if (iterator->first.aspectMask & new_bind.subresource.aspectMask) + { + intersecting_subresources.push_back(iterator->first); + } + } + + // If there is no intersecting subresource, we can just add the new bind + if (intersecting_subresources.empty()) + { + sparse_image_memory_bind_map[new_bind.subresource][new_bind.offset] = new_bind; + return; + } + + // Otherwise, go over the subresources that needs to be updated + for (VkImageSubresource subresource : intersecting_subresources) + { + // We may need to split the subresource depending on the aspectMask + VkImageAspectFlags aspect_mask = (subresource.aspectMask & new_bind.subresource.aspectMask); + if (aspect_mask != subresource.aspectMask) + { + VkImageSubresource subresource_in = subresource; + subresource_in.aspectMask = aspect_mask; + sparse_image_memory_bind_map[subresource_in] = sparse_image_memory_bind_map[subresource]; + + VkImageSubresource subresource_out = subresource; + subresource_out.aspectMask = subresource.aspectMask ^ aspect_mask; + sparse_image_memory_bind_map[subresource_out] = sparse_image_memory_bind_map[subresource]; + + subresource.aspectMask = aspect_mask; + } + + // Update the bound range depending on the offset and size + + VulkanOffset3DSparseImageMemoryBindMap& bind_map = sparse_image_memory_bind_map[subresource]; + + std::vector new_binds; + std::vector removed_binds; + + for (const auto& elt : bind_map) + { + GetIntersectForSparseImageMemoryBind(elt.second, new_bind, new_binds, removed_binds); + } + + for (const VkOffset3D& offset : removed_binds) + { + bind_map.erase(offset); + } + + for (const VkSparseImageMemoryBind& bind : new_binds) + { + bind_map.insert({ bind.offset, bind }); + } + bind_map.insert({ new_bind.offset, new_bind }); + } +} + bool VulkanResourcesUtil::IsBlitSupported(VkFormat src_format, VkImageTiling src_image_tiling, VkFormat dst_format, VkImageTiling* dst_image_tiling) const { - // Integer formats must match - if ((vkuFormatIsSINT(src_format) != vkuFormatIsSINT(dst_format)) || - (vkuFormatIsUINT(src_format) != vkuFormatIsUINT(dst_format))) + // According to spec: "Integer formats can only be converted to other integer formats with the same signedness." + const bool is_src_sint = vkuFormatIsSINT(src_format) || vkuFormatIsSSCALED(src_format); + const bool is_src_uint = vkuFormatIsUINT(src_format) || vkuFormatIsUSCALED(src_format); + const bool is_dst_sint = vkuFormatIsSINT(dst_format) || vkuFormatIsSSCALED(dst_format); + const bool is_dst_uint = vkuFormatIsUINT(dst_format) || vkuFormatIsUSCALED(dst_format); + if ((is_src_sint != is_dst_sint) || (is_src_uint != is_dst_uint)) { return false; } @@ -2379,8 +2628,10 @@ bool VulkanResourcesUtil::IsScalingSupported(VkFormat src_format, 0, &dst_img_format_props); - if (dst_img_format_props.maxExtent.width < static_cast(static_cast(extent.width) * scale) || - dst_img_format_props.maxExtent.height < static_cast(static_cast(extent.height) * scale)) + const VkExtent3D scaled_extent = graphics::ScaleExtent(extent, scale); + if ((dst_img_format_props.maxExtent.width < scaled_extent.width) || + (dst_img_format_props.maxExtent.height < scaled_extent.height) || + (dst_img_format_props.maxExtent.depth < scaled_extent.depth)) { return false; } @@ -2571,5 +2822,113 @@ VkResult VulkanResourcesUtil::BlitImage(VkCommandBuffer command_buffer, return VK_SUCCESS; } +/** + * @brief Computes the required byte size of host memory referenced by a structure + * for a copy-buffer-to-image or a copy-image-to-buffer operation. + * + * @note Origin: Adapted from Vulkan-ValidationLayers/layers/state_tracker/image_stat.cpp. + * Mirrors the logic used in the Validation Layers to determine how many bytes are + * consumed based on the copy region, image format, and block/texel sizing rules. + * + * @param region The region structure describing the copy (e.g. `VkMemoryToImageCopy`). + * @param array_layers The total number of array layers in the destination image (used when + * layerCount is VK_REMAINING_ARRAY_LAYERS). + * @param format The VkFormat of the destination image. + * + * @return VkDeviceSize The number of bytes that must be available from region.pHostPointer + * to satisfy the copy described by 'region'. + * + * @details + * - Handles depth/stencil special cases per the Vulkan specification. + * - Accounts for block-compressed formats by converting to texel-block units and rounding up for partial blocks. + * - Returns 0 for invalid/empty copies; callers should already have guards for those cases. + */ +template +static VkDeviceSize GetBufferSizeFromCopyImage(const RegionCopy& region, uint32_t array_layers, VkFormat format) +{ + VkDeviceSize buffer_size = 0; + VkExtent3D copy_extent = region.imageExtent; + VkDeviceSize buffer_width = (0 == region.memoryRowLength ? copy_extent.width : region.memoryRowLength); + VkDeviceSize buffer_height = (0 == region.memoryImageHeight ? copy_extent.height : region.memoryImageHeight); + uint32_t layer_count = region.imageSubresource.layerCount != VK_REMAINING_ARRAY_LAYERS + ? region.imageSubresource.layerCount + : array_layers - region.imageSubresource.baseArrayLayer; + // VUID-VkImageCreateInfo-imageType-00961 prevents having both depth and layerCount ever both be greater than 1 + // together. Take max to logic simple. This is the number of 'slices' to copy. + const uint32_t z_copies = std::max(copy_extent.depth, layer_count); + + // Invalid if copy size is 0 and other validation checks will catch it. Returns zero as the caller should have + // fallback already to ignore. + if (copy_extent.width == 0 || copy_extent.height == 0 || copy_extent.depth == 0 || z_copies == 0) + { + return 0; + } + + VkDeviceSize unit_size = 0; + if (region.imageSubresource.aspectMask & (VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_DEPTH_BIT)) + { + // Spec in VkBufferImageCopy section list special cases for each format + if (region.imageSubresource.aspectMask & VK_IMAGE_ASPECT_STENCIL_BIT) + { + unit_size = 1; + } + else + { + // VK_IMAGE_ASPECT_DEPTH_BIT + switch (format) + { + case VK_FORMAT_D16_UNORM: + case VK_FORMAT_D16_UNORM_S8_UINT: + unit_size = 2; + break; + case VK_FORMAT_D32_SFLOAT: + case VK_FORMAT_D32_SFLOAT_S8_UINT: + // packed with the D24 value in the LSBs of the word, and undefined values in the eight MSBs + case VK_FORMAT_X8_D24_UNORM_PACK32: + case VK_FORMAT_D24_UNORM_S8_UINT: + unit_size = 4; + break; + default: + // Any misuse of formats vs aspect mask should be caught before here + return 0; + } + } + } + else + { + // size (bytes) of texel or block + unit_size = vkuFormatElementSizeWithAspect( + format, static_cast(region.imageSubresource.aspectMask)); + } + + if (vkuFormatIsBlockedImage(format)) + { + // Switch to texel block units, rounding up for any partially-used blocks + const VkExtent3D block_extent = vkuFormatTexelBlockExtent(format); + buffer_width = (buffer_width + block_extent.width - 1) / block_extent.width; + buffer_height = (buffer_height + block_extent.height - 1) / block_extent.height; + + copy_extent.width = (copy_extent.width + block_extent.width - 1) / block_extent.width; + copy_extent.height = (copy_extent.height + block_extent.height - 1) / block_extent.height; + copy_extent.depth = (copy_extent.depth + block_extent.depth - 1) / block_extent.depth; + } + + // Calculate buffer offset of final copied byte, + 1. + buffer_size = (z_copies - 1) * buffer_height * buffer_width; // offset to slice + buffer_size += ((copy_extent.height - 1) * buffer_width) + copy_extent.width; // add row,col + buffer_size *= unit_size; // convert to bytes + return buffer_size; +} + +VkDeviceSize GetBufferSizeFromCopyImage(const VkMemoryToImageCopy& region, uint32_t array_layers, VkFormat format) +{ + return GetBufferSizeFromCopyImage(region, array_layers, format); +} + +VkDeviceSize GetBufferSizeFromCopyImage(const VkImageToMemoryCopy& region, uint32_t array_layers, VkFormat format) +{ + return GetBufferSizeFromCopyImage(region, array_layers, format); +} + GFXRECON_END_NAMESPACE(gfxrecon) GFXRECON_END_NAMESPACE(encode) diff --git a/third_party/gfxreconstruct/framework/graphics/vulkan_resources_util.h b/third_party/gfxreconstruct/framework/graphics/vulkan_resources_util.h index 42b425271..4ba4c931c 100644 --- a/third_party/gfxreconstruct/framework/graphics/vulkan_resources_util.h +++ b/third_party/gfxreconstruct/framework/graphics/vulkan_resources_util.h @@ -61,8 +61,8 @@ class VulkanResourcesUtil // resource and the size of the biggest staging buffer necessary is known in advance. VkResult CreateStagingBuffer(VkDeviceSize size); - // Will return the size requirements and offsets for each subresource contained in the specified image. - // Sizes and offsets are calculated in such a way that the each subresource will be tightly packed. + // Will return the size requirements and offsets for each subresource contained for an image with the specified + // attributes. Sizes and offsets are calculated in such a way that the each subresource will be tightly packed. // // The sizes are returned in the subresource_sizes vector and will be in the order: // M0 L0 L1 ... La M1 L0 L1 ... La ... Mm L0 L1 ... La @@ -71,8 +71,7 @@ class VulkanResourcesUtil // all_layers_per_level boolean determines if all array layer per mip map level will be accounted as one. // // Return value is the total size of the image. - uint64_t GetImageResourceSizesOptimal(VkImage image, - VkFormat format, + uint64_t GetImageResourceSizesOptimal(VkFormat format, VkImageType type, const VkExtent3D& extent, uint32_t mip_levels, @@ -230,6 +229,7 @@ class VulkanResourcesUtil VkImage image, VkFormat format, VkImageType type, + VkImageTiling tiling, const VkExtent3D& extent, uint32_t array_layers, VkImageLayout current_layout, @@ -290,7 +290,9 @@ void GetFormatAspects(VkFormat format, std::vector* aspects, bool* combined_depth_stencil = nullptr); -VkImageAspectFlags GetFormatAspectMask(VkFormat format); +void AspectFlagsToFlagBits(VkImageAspectFlags aspect_mask, std::vector& aspects); + +VkImageAspectFlags GetFormatAspects(VkFormat format); VkFormat GetImageAspectFormat(VkFormat format, VkImageAspectFlagBits aspect); @@ -370,6 +372,14 @@ bool GetIntersectForSparseMemoryBind(uint32_t new_bind_resource_of void UpdateSparseMemoryBindMap(std::map& sparse_memory_bind_map, const VkSparseMemoryBind& new_sparse_memory_bind); +void GetIntersectForSparseImageMemoryBind(const VkSparseImageMemoryBind& old_bind, + const VkSparseImageMemoryBind& new_bind, + std::vector& new_binds, + std::vector& removed_binds); + +void UpdateSparseImageMemoryBindMap(VulkanSubresourceSparseImageMemoryBindMap& sparse_image_memory_bind_map, + const VkSparseImageMemoryBind& new_bind); + bool GetImageTexelSize(VkFormat format, VkDeviceSize* texel_size, bool* is_texel_block_size, @@ -413,6 +423,18 @@ bool NextRowTexelCoordinates(VkImageType imageType, uint32_t& z, uint32_t& layer); +/** + * @brief Get the size requirements for a staging buffer to copy image data from a buffer + * @see GetBufferSizeFromCopyImage(RegionCopy&, uint32_t, VkFormat) in `vulkan_resources_util.cpp` + */ +VkDeviceSize GetBufferSizeFromCopyImage(const VkMemoryToImageCopy& region, uint32_t array_layers, VkFormat format); + +/** + * @brief Get the size requirements for a staging buffer to copy image data to a buffer + * @see GetBufferSizeFromCopyImage(RegionCopy&, uint32_t, VkFormat) in `vulkan_resources_util.cpp` + */ +VkDeviceSize GetBufferSizeFromCopyImage(const VkImageToMemoryCopy& region, uint32_t array_layers, VkFormat format); + GFXRECON_END_NAMESPACE(graphics) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/graphics/vulkan_struct_get_pnext.h b/third_party/gfxreconstruct/framework/graphics/vulkan_struct_get_pnext.h index ba1fdfa4f..4aae16c68 100644 --- a/third_party/gfxreconstruct/framework/graphics/vulkan_struct_get_pnext.h +++ b/third_party/gfxreconstruct/framework/graphics/vulkan_struct_get_pnext.h @@ -30,16 +30,24 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(graphics) -template -struct is_vulkan_struct : std::false_type -{}; +//! concept definition for a vulkan-struct +template +concept VulkanStruct = requires(T t) +{ + // sType exists and is accessible + t.sType; + + // check type of sType + requires std::is_same_v; -template -struct is_vulkan_struct : std::is_same -{}; + // pNext exists and is accessible + t.pNext; -template -inline constexpr bool is_vulkan_struct_v = is_vulkan_struct::value; + // check type of pNext + requires std::is_same_v || std::is_same_v || + std::is_same_v || + std::is_same_v; +}; /** * @brief vulkan_struct_get_pnext can be used to retrieve elements of a @@ -53,11 +61,9 @@ inline constexpr bool is_vulkan_struct_v = is_vulkan_struct::value; * @param parent pointer to a const vulkan-structure containing a pNext-chain. * @return a typed const-pointer to a structure found in the pNext-chain or nullptr. */ -template +template static const T* vulkan_struct_get_pnext(const Parent_T* parent) { - static_assert(is_vulkan_struct_v && is_vulkan_struct_v); - if (parent != nullptr) { auto current_struct = reinterpret_cast(parent->pNext); @@ -86,11 +92,9 @@ static const T* vulkan_struct_get_pnext(const Parent_T* parent) * @param parent pointer to a non-const vulkan-structure containing a pNext-chain. * @return a typed pointer to a structure found in the pNext-chain or nullptr. */ -template +template static T* vulkan_struct_get_pnext(Parent_T* parent) { - static_assert(is_vulkan_struct_v && is_vulkan_struct_v); - if (parent != nullptr) { auto current_struct = reinterpret_cast(parent)->pNext; @@ -119,11 +123,9 @@ static T* vulkan_struct_get_pnext(Parent_T* parent) * @param parent pointer to a non-const vulkan-structure containing a pNext-chain. * @return a typed pointer to a structure removed from the pNext-chain or nullptr. */ -template +template static T* vulkan_struct_remove_pnext(Parent_T* parent) { - static_assert(is_vulkan_struct_v && is_vulkan_struct_v); - if (parent != nullptr) { auto prev_struct = reinterpret_cast(parent); @@ -143,6 +145,34 @@ static T* vulkan_struct_remove_pnext(Parent_T* parent) return nullptr; } +/** + * @brief vulkan_struct_add_pnext can be used to add elements into a pNext-chain. + * + * Searches through the parent's pNext-chain to avoid duplicates. Inserts 'pnext_struct' at front of pNext-chain. + * + * @tparam T the structure-type added to the pNext-chain + * @tparam Parent_T implicit type of provided structure + * @param parent pointer to a non-const vulkan-structure containing a pNext-chain. + */ +template +static void vulkan_struct_add_pnext(Parent_T* parent, T* pnext_struct) +{ + // remove potential duplicate + vulkan_struct_remove_pnext(parent); + + if (parent != nullptr && pnext_struct != nullptr) + { + // cast input-pointers to VkBaseOutStructure* + auto* parent_out = reinterpret_cast(parent); + auto* pnext_struct_out = reinterpret_cast(pnext_struct); + + // insert pnext_struct at front of pNext-chain + auto* current_pnext = parent_out->pNext; + parent_out->pNext = pnext_struct_out; + pnext_struct_out->pNext = current_pnext; + } +} + GFXRECON_END_NAMESPACE(graphics) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/graphics/vulkan_util.cpp b/third_party/gfxreconstruct/framework/graphics/vulkan_util.cpp index cff5c32ab..9fa0f02a9 100644 --- a/third_party/gfxreconstruct/framework/graphics/vulkan_util.cpp +++ b/third_party/gfxreconstruct/framework/graphics/vulkan_util.cpp @@ -21,6 +21,7 @@ */ #include "graphics/vulkan_util.h" +#include "graphics/vulkan_struct_get_pnext.h" #include @@ -52,5 +53,66 @@ bool ImageHasUsage(VkImageUsageFlags usage_flags, VkImageUsageFlagBits bit) return (usage_flags & bit) == bit; } +template +std::vector> StripWaitSemaphoresUtil(T* submit_info) +{ + static_assert(std::is_same_v || std::is_same_v); + std::vector> semaphore_wait_infos; + + if constexpr (std::is_same_v) + { + semaphore_wait_infos.resize(submit_info->waitSemaphoreCount); + + for (uint32_t s = 0; s < submit_info->waitSemaphoreCount; ++s) + { + semaphore_wait_infos[s] = { submit_info->pWaitSemaphores[s], 1 }; + } + + if (auto* timeline_info = graphics::vulkan_struct_get_pnext(submit_info)) + { + GFXRECON_ASSERT(submit_info->waitSemaphoreCount == timeline_info->waitSemaphoreValueCount); + + for (uint32_t s = 0; s < timeline_info->waitSemaphoreValueCount; ++s) + { + semaphore_wait_infos[s].second = timeline_info->pWaitSemaphoreValues[s]; + } + + // strip out wait-semaphores from timeline_info-info + timeline_info->waitSemaphoreValueCount = 0; + timeline_info->pWaitSemaphoreValues = nullptr; + } + + // strip out wait-semaphores from submit-info + submit_info->waitSemaphoreCount = 0; + submit_info->pWaitSemaphores = nullptr; + } + + if constexpr (std::is_same_v) + { + semaphore_wait_infos.resize(submit_info->waitSemaphoreInfoCount); + + for (uint32_t s = 0; s < submit_info->waitSemaphoreInfoCount; ++s) + { + semaphore_wait_infos[s] = { submit_info->pWaitSemaphoreInfos[s].semaphore, + submit_info->pWaitSemaphoreInfos[s].value }; + } + + // strip out wait-semaphores from submit-info + submit_info->waitSemaphoreInfoCount = 0; + submit_info->pWaitSemaphoreInfos = nullptr; + } + return semaphore_wait_infos; +} + +std::vector> StripWaitSemaphores(VkSubmitInfo* submit_info) +{ + return StripWaitSemaphoresUtil(submit_info); +} + +std::vector> StripWaitSemaphores(VkSubmitInfo2* submit_info) +{ + return StripWaitSemaphoresUtil(submit_info); +} + GFXRECON_END_NAMESPACE(graphics) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/graphics/vulkan_util.h b/third_party/gfxreconstruct/framework/graphics/vulkan_util.h index 27889fa4f..57080cf52 100644 --- a/third_party/gfxreconstruct/framework/graphics/vulkan_util.h +++ b/third_party/gfxreconstruct/framework/graphics/vulkan_util.h @@ -75,8 +75,51 @@ static inline void copy_dispatch_table_from_device(VkDevice device, VkCommandBuf *reinterpret_cast(handle) = *reinterpret_cast(device); } +/** + * @brief StripWaitSemaphores can be used to remove all wait-semaphores for a provided VkSubmitInfo. + * Respective pointer in submit_info will be set to nullptr and count to zero. + * + * @param submit_info a provided VkSubmitInfo(2) struct + * @return an array of Semaphores that have been stripped/removed from submit_info + */ +std::vector> StripWaitSemaphores(VkSubmitInfo* submit_info); +std::vector> StripWaitSemaphores(VkSubmitInfo2* submit_info); + [[maybe_unused]] static const char* kVulkanVrFrameDelimiterString = "vr-marker,frame_end,type,application"; +/** + * @brief Scales a VkExtent3D to the provided mip map level + * + * @param[in] extent The VkExtent3D to scale + * @param[in] level The mip map level + * @return The scaled VkExtent3D + */ +static constexpr VkExtent3D ScaleToMipLevel(const VkExtent3D& extent, uint32_t level) +{ + const VkExtent3D mip_extent = VkExtent3D{ std::max(1u, extent.width >> level), + std::max(1u, extent.height >> level), + std::max(1u, extent.depth >> level) }; + + return mip_extent; +} + +/** + * @brief Scales a VkExtent3D with the provided scaling factor + * + * @param[in] extent The VkExtent3D to scale + * @param[in] scale The scaling factor + * @return The scaled VkExtent3D + */ +static constexpr VkExtent3D ScaleExtent(const VkExtent3D& extent, float scale) +{ + const VkExtent3D scaled_extent = + VkExtent3D{ static_cast(std::max(1.0f, static_cast(extent.width) * scale)), + static_cast(std::max(1.0f, static_cast(extent.height) * scale)), + static_cast(std::max(1.0f, static_cast(extent.depth) * scale)) }; + + return scaled_extent; +} + GFXRECON_END_NAMESPACE(graphics) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/util/CMakeLists.txt b/third_party/gfxreconstruct/framework/util/CMakeLists.txt index f5c8de8ee..7c680a8ce 100644 --- a/third_party/gfxreconstruct/framework/util/CMakeLists.txt +++ b/third_party/gfxreconstruct/framework/util/CMakeLists.txt @@ -45,10 +45,13 @@ target_sources(gfxrecon_util ${CMAKE_CURRENT_LIST_DIR}/argument_parser.cpp ${CMAKE_CURRENT_LIST_DIR}/buffer_writer.h ${CMAKE_CURRENT_LIST_DIR}/buffer_writer.cpp + ${CMAKE_CURRENT_LIST_DIR}/clock_cache.h ${CMAKE_CURRENT_LIST_DIR}/compressor.h ${CMAKE_CURRENT_LIST_DIR}/date_time.h ${CMAKE_CURRENT_LIST_DIR}/date_time.cpp ${CMAKE_CURRENT_LIST_DIR}/defines.h + ${CMAKE_CURRENT_LIST_DIR}/file_input_stream.h + ${CMAKE_CURRENT_LIST_DIR}/file_input_stream.cpp ${CMAKE_CURRENT_LIST_DIR}/file_output_stream.h ${CMAKE_CURRENT_LIST_DIR}/file_output_stream.cpp ${CMAKE_CURRENT_LIST_DIR}/driver_info.h @@ -56,6 +59,8 @@ target_sources(gfxrecon_util ${CMAKE_CURRENT_LIST_DIR}/file_path.h ${CMAKE_CURRENT_LIST_DIR}/file_path.cpp ${CMAKE_CURRENT_LIST_DIR}/hash.h + ${CMAKE_CURRENT_LIST_DIR}/heap_buffer.h + ${CMAKE_CURRENT_LIST_DIR}/heap_buffer.cpp ${CMAKE_CURRENT_LIST_DIR}/image_writer.h ${CMAKE_CURRENT_LIST_DIR}/image_writer.cpp ${CMAKE_CURRENT_LIST_DIR}/json_util.h @@ -86,6 +91,7 @@ target_sources(gfxrecon_util ${CMAKE_CURRENT_LIST_DIR}/platform.h ${CMAKE_CURRENT_LIST_DIR}/settings_loader.h ${CMAKE_CURRENT_LIST_DIR}/settings_loader.cpp + ${CMAKE_CURRENT_LIST_DIR}/span.h ${CMAKE_CURRENT_LIST_DIR}/options.h ${CMAKE_CURRENT_LIST_DIR}/options.cpp ${CMAKE_CURRENT_LIST_DIR}/spirv_helper.h @@ -116,6 +122,7 @@ target_sources(gfxrecon_util ${CMAKE_CURRENT_LIST_DIR}/to_string.cpp ${CMAKE_CURRENT_LIST_DIR}/thread_data.h ${CMAKE_CURRENT_LIST_DIR}/thread_data.cpp + ${CMAKE_CURRENT_LIST_DIR}/type_traits_extras.h ${CMAKE_CURRENT_LIST_DIR}/custom_common_to_string.h ${CMAKE_CURRENT_LIST_DIR}/custom_common_to_string.cpp $<$:${PROJECT_SOURCE_DIR}/framework/generated/generated_openxr_enum_to_string.h> @@ -230,6 +237,7 @@ if (${RUN_TESTS}) ${CMAKE_CURRENT_LIST_DIR}/test/main.cpp ${CMAKE_CURRENT_LIST_DIR}/test/test_linear_hashmap.cpp ${CMAKE_CURRENT_LIST_DIR}/test/test_spirv_parsing_util.cpp + ${CMAKE_CURRENT_LIST_DIR}/test/test_valid_pointer.cpp ${CMAKE_CURRENT_LIST_DIR}/../../tools/platform_debug_helper.cpp $<$:${CMAKE_CURRENT_LIST_DIR}/test/dx_pointers.h> $<$:${CMAKE_CURRENT_LIST_DIR}/test/dx12_utils.cpp> diff --git a/third_party/gfxreconstruct/framework/util/buffer_writer.cpp b/third_party/gfxreconstruct/framework/util/buffer_writer.cpp index 344e0db6e..b8a06187b 100644 --- a/third_party/gfxreconstruct/framework/util/buffer_writer.cpp +++ b/third_party/gfxreconstruct/framework/util/buffer_writer.cpp @@ -23,12 +23,13 @@ #include "buffer_writer.h" #include "platform.h" #include "logging.h" +#include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(util) GFXRECON_BEGIN_NAMESPACE(bufferwriter) -bool WriteBuffer(const std::string& filename, const void* data, size_t size) +size_t WriteBuffer(const std::string& filename, const void* data, size_t size, const Compressor* compressor) { assert(data); assert(size); @@ -44,11 +45,34 @@ bool WriteBuffer(const std::string& filename, const void* data, size_t size) return false; } - bool success = util::platform::FileWrite(data, size, file); + bool success; + size_t bytes_written; + if (compressor != nullptr) + { + std::vector compressed_data; + const size_t compressed_size = + compressor->Compress(size, static_cast(data), &compressed_data, 0); + + if (compressed_size) + { + success = util::platform::FileWrite(compressed_data.data(), compressed_size, file); + bytes_written = compressed_size; + } + else + { + success = util::platform::FileWrite(data, size, file); + bytes_written = size; + } + } + else + { + success = util::platform::FileWrite(data, size, file); + bytes_written = size; + } util::platform::FileClose(file); - return success; + return success ? bytes_written : 0; } GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/util/buffer_writer.h b/third_party/gfxreconstruct/framework/util/buffer_writer.h index 251be14c2..7c599fe8f 100644 --- a/third_party/gfxreconstruct/framework/util/buffer_writer.h +++ b/third_party/gfxreconstruct/framework/util/buffer_writer.h @@ -24,6 +24,7 @@ #define GFXRECON_UTIL_BUFFER_WRITER_H #include "util/defines.h" +#include "util/compressor.h" #include @@ -31,7 +32,7 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(util) GFXRECON_BEGIN_NAMESPACE(bufferwriter) -bool WriteBuffer(const std::string& filename, const void* data, size_t size); +size_t WriteBuffer(const std::string& filename, const void* data, size_t size, const Compressor* compressor = nullptr); GFXRECON_END_NAMESPACE(gfxrecon) GFXRECON_END_NAMESPACE(util) diff --git a/third_party/gfxreconstruct/framework/util/clock_cache.h b/third_party/gfxreconstruct/framework/util/clock_cache.h new file mode 100644 index 000000000..89ec2b2a1 --- /dev/null +++ b/third_party/gfxreconstruct/framework/util/clock_cache.h @@ -0,0 +1,151 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ +#ifndef GFXRECON_UTIL_CLOCK_CACHE_H + +#include "util/defines.h" +#include "util/logging.h" + +#include +#include +#include +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(util) +template +struct IdentityTransform +{ + const T& operator()(const T& v) { return v; } +}; + +template , + typename Hash = std::hash, + typename Equal = std::equal_to> +class ClockCache +{ + public: + constexpr static size_t kCacheSize = (1U << LogSize); + + using Cache = std::array; + using SizeType = typename Cache::size_type; + using Map = std::unordered_map; + + using value_type = typename Cache::value_type; + using key_type = KeyType; + + using UseBits = std::array; + + ClockCache() { use_bits_.fill(false); } + + std::optional Lookup(const KeyType& key) + { + auto find_it = index_.find(key); + if (find_it != index_.end()) + { + const SizeType index = find_it->second; + use_bits_[index] = true; + return cache_[index]; + } + return std::nullopt; + } + + template + bool Insert(T&& value) + { + static_assert(std::is_same_v, ValueType>, "Passed argument must be ValueType lvalue or rvalue"); + + // Look for value in cache. + // Note lifetime. Do not use key after forwarding value + const KeyType& key = GetKey(value); + auto find_it = index_.find(key); + if (find_it != index_.end()) + { + ++hit_; + use_bits_[find_it->second] = true; + return false; + } + + auto fill_slot = [&key, &value, this](SizeType index) { + index_.insert(std::make_pair(key, index)); + cache_[index] = std::forward(value); + use_bits_[index] = true; + }; + + // Key not in cache_, find next non-recent slot to replace + ++miss_; + + if (size_ < kCacheSize) + { + // No victim search because the cache is still filling, so we take the next free slot + // Don't advance the next_slot needelessly + fill_slot(size_); + size_++; + } + else + { + GFXRECON_ASSERT(size_ == kCacheSize); + // May loop through kCachSize + 1 times if use_bits_ uniformly true + while (use_bits_[next_slot_]) + { + // Set slot to not used since checked + use_bits_[next_slot_] = false; + AdvanceNextSlot(); + } + + // Victim found, remove and replace + index_.erase(GetKey(cache_[next_slot_])); + fill_slot(next_slot_); + AdvanceNextSlot(); + } + return true; + } + + double HitRate() const + { + size_t total = hit_ + miss_; + if (total) + { + return static_cast(hit_) / static_cast(total); + } + return 0.; + } + + private: + static const KeyType& GetKey(const ValueType& value) { return KeyExtractor()(value); } + void AdvanceNextSlot() { next_slot_ = (next_slot_ + 1) % kCacheSize; } + + Cache cache_; + UseBits use_bits_; + Map index_; + SizeType next_slot_ = 0; + SizeType size_ = 0; + + size_t hit_ = 0; + size_t miss_ = 0; +}; + +GFXRECON_END_NAMESPACE(util) +GFXRECON_END_NAMESPACE(gfxrecon) +#endif // GFXRECON_UTIL_CLOCK_CACHE_H diff --git a/third_party/gfxreconstruct/framework/util/compressor.h b/third_party/gfxreconstruct/framework/util/compressor.h index 212d7e164..11df2b6aa 100644 --- a/third_party/gfxreconstruct/framework/util/compressor.h +++ b/third_party/gfxreconstruct/framework/util/compressor.h @@ -46,10 +46,10 @@ class Compressor std::vector* compressed_data, size_t compressed_data_offset) const = 0; - virtual size_t Decompress(size_t compressed_size, - const std::vector& compressed_data, - size_t expected_uncompressed_size, - std::vector* uncompressed_data) const = 0; + virtual size_t Decompress(size_t compressed_size, + const uint8_t* compressed_data, + size_t expected_uncompressed_size, + uint8_t* uncompressed_data) const = 0; }; GFXRECON_END_NAMESPACE(util) diff --git a/third_party/gfxreconstruct/framework/util/driver_info.cpp b/third_party/gfxreconstruct/framework/util/driver_info.cpp index 7984dca1b..7982f1ec9 100644 --- a/third_party/gfxreconstruct/framework/util/driver_info.cpp +++ b/third_party/gfxreconstruct/framework/util/driver_info.cpp @@ -110,7 +110,7 @@ bool AMD_GetUMDInfo(const std::string& active_driver_path, std::string& driver_i active_driver_path.substr(active_driver_path.find_last_of("/\\") + 1).length()); GetFileInfo(file_info, active_driver_path); - if (file_info.FileVersion != "") + if (std::strlen(file_info.FileVersion) != 0) { driver_info += "AMD UMD version (" + static_cast(file_info.AppName) + "): " + static_cast(file_info.FileVersion) + "\n\t"; diff --git a/third_party/gfxreconstruct/framework/util/file_input_stream.cpp b/third_party/gfxreconstruct/framework/util/file_input_stream.cpp new file mode 100644 index 000000000..57987714c --- /dev/null +++ b/third_party/gfxreconstruct/framework/util/file_input_stream.cpp @@ -0,0 +1,230 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** +* copy of this software and associated documentation files (the "Software"), +** to deal in the Software without +* restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, +* sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do +* so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be +* included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT +* WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +* FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#include "util/file_input_stream.h" +#include "util/logging.h" + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(util) + +bool FStreamFileInputStream::Open(const std::string& filename) +{ + if (IsOpen()) + { + Close(); + } + + const int result = util::platform::FileOpen(&fd_, filename.c_str(), "rb"); + const bool success = result == 0; + + if (success) + { + filename_ = filename; + } + return success; +} + +void FStreamFileInputStream::Close() +{ + if (fd_) + { + util::platform::FileClose(fd_); + fd_ = nullptr; + } +} + +bool FStreamFileInputStream::FileSeek(int64_t offset, util::platform::FileSeekOrigin origin) +{ + if (fd_) + { + if (read_ahead_bytes_ && (origin == util::platform::FileSeekOrigin::FileSeekCurrent)) + { + // The file read pos is read_ahead_bytes_ further, than the caller thinks it is so the relative offset must + // be adjusted + if (offset > 0 && (read_ahead_bytes_ >= offset)) + { + // This is a forward seek, so we shouldn't assume the file can be rewound, therefore adjust the seek + // Offset is positive and in size_t range + const size_t u_offset = static_cast(offset); + read_ahead_bytes_ -= u_offset; + if (read_ahead_bytes_ == 0) + { + read_ahead_offset_ = 0; + } + else + { + read_ahead_offset_ += u_offset; + } + + // The seek was contained within the read ahead bytes + return true; // vini vidi quaesivi (we came, we saw, we sought) + } + else + { + // Either the original offset was negative or beyond the peeked region, so it's fair to just adjust it + // read_ahead_bytes_ is positive and <= kReadAheadBufferSize which is << int64_t max + offset = offset - static_cast(read_ahead_bytes_); + } + } + + // The seek position is now both the FILE and the classes read position + read_ahead_bytes_ = 0; + read_ahead_offset_ = 0; + + return util::platform::FileSeek(fd_, offset, origin); + } + return false; +} + +size_t FStreamFileInputStream::ReadFromReadAheadBuffer(void* buffer, size_t bytes) +{ + char* dest = static_cast(buffer); + + size_t copy_bytes = 0; + if (read_ahead_bytes_) + { + // Get the data from the read ahead buffer up to the whole remaining contents of it (read_ahead_bytes_ bytes) + copy_bytes = std::min(bytes, read_ahead_bytes_); + std::memcpy(dest, &read_ahead_buffer_[read_ahead_offset_], copy_bytes); + if (copy_bytes == read_ahead_bytes_) + { + // All read ahead bytes read, reset the read_ahead_buffer_ state to empty + read_ahead_bytes_ = 0; + read_ahead_offset_ = 0; + } + else + { + // Update the read ahead buffer state to reflect the consumed bytes + read_ahead_bytes_ -= copy_bytes; + read_ahead_offset_ += copy_bytes; + GFXRECON_ASSERT(read_ahead_bytes_ != 0); + } + } + + size_t remain_bytes = bytes - copy_bytes; + if ((remain_bytes > 0) && (remain_bytes < kReadAheadBufferSize)) + { + // If the remaining bytes to read is less than the read-ahead buffer size, fill the read-ahead buffer + // even if it saves only a few bytes reading from the file + GFXRECON_ASSERT(read_ahead_bytes_ == 0); + GFXRECON_ASSERT(read_ahead_offset_ == 0); + char* tail = static_cast(buffer) + copy_bytes; + const size_t bytes_read = util::platform::FileReadBytes(&read_ahead_buffer_[0], kReadAheadBufferSize, fd_); + const size_t remain_read = std::min(remain_bytes, bytes_read); + std::memcpy(tail, &read_ahead_buffer_[0], remain_read); + + copy_bytes += remain_read; + read_ahead_offset_ = remain_read; + read_ahead_bytes_ = bytes_read - remain_read; + } + + return copy_bytes; +} + +bool FStreamFileInputStream::ReadBytes(void* buffer, size_t bytes) +{ + GFXRECON_ASSERT(fd_); + char* dest = static_cast(buffer); + bool success = true; + + // Get whatever part of the request read data from the read ahead buffer if present + size_t copy_bytes = ReadFromReadAheadBuffer(dest, bytes); + bytes -= copy_bytes; + + if (bytes) + { + dest += copy_bytes; + success = util::platform::FileRead(dest, bytes, fd_); + } + + return success; +} + +// The goal of PeekBytes is to have a small read-ahead capability for reading things +// like protocol block headers or sizes. This is implemented using the read_ahead_buffer_, +// which also serves the ReadBytes function for small reads, and to reduce system calls. +size_t FStreamFileInputStream::PeekBytes(void* buffer, size_t bytes) +{ + GFXRECON_ASSERT(fd_); + + // Limit to the maximum number of peeked bytes + bytes = std::min(bytes, kMaxPeekBytes); + + if (read_ahead_bytes_ < bytes) + { + // We don't have all the bytes we need peeked already, shift existing bytes down and refill the buffer + std::memmove(&read_ahead_buffer_[0], &read_ahead_buffer_[read_ahead_offset_], read_ahead_bytes_); + + // Fill the remainder of the read_ahead_buffer_ + char* read_ahead = &read_ahead_buffer_[read_ahead_bytes_]; + const size_t bytes_fill = kReadAheadBufferSize - read_ahead_bytes_; // fill the rest of the buffer + const size_t bytes_read = util::platform::FileReadBytes(read_ahead, bytes_fill, fd_); + + // This read may be less than bytes_fill at EOF, which is why we track read_ahead_bytes_ separately + read_ahead_bytes_ += bytes_read; + read_ahead_offset_ = 0; + } + + // Note that at EOF read_ahead_bytes_ may be < bytes requested, even after attempting to fill the buffer + const size_t bytes_to_copy = std::min(bytes, read_ahead_bytes_); + std::memcpy(buffer, &read_ahead_buffer_[read_ahead_offset_], bytes_to_copy); + + return bytes_to_copy; +} + +bool FStreamFileInputStream::ReadOverwriteSpan(const size_t bytes, DataSpan& span) +{ + span.Reset(buffer_pool_, bytes); + bool success = ReadBytes(const_cast(span.GetDataAs()), bytes); + return success; +} + +DataSpan FStreamFileInputStream::ReadSpan(const size_t bytes) +{ + auto pool_entry = buffer_pool_->Acquire(bytes); + char* buffer = pool_entry.GetAs(); + bool success = ReadBytes(buffer, bytes); + if (success) + { + return DataSpan(std::move(pool_entry), bytes); + } + return DataSpan(); +} + +// GOOGLE: [single-frame-looping] Add tell so we can find the loop point +int64_t FStreamFileInputStream::FileTell() +{ + GFXRECON_ASSERT(fd_); + return util::platform::FileTell(fd_); +} + +GFXRECON_END_NAMESPACE(util) +GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/util/file_input_stream.h b/third_party/gfxreconstruct/framework/util/file_input_stream.h new file mode 100644 index 000000000..ecc436bb5 --- /dev/null +++ b/third_party/gfxreconstruct/framework/util/file_input_stream.h @@ -0,0 +1,96 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ +#ifndef GFXRECON_UTIL_FILE_INPUT_STREAM_H +#define GFXRECON_UTIL_FILE_INPUT_STREAM_H + +#include "util/logging.h" +#include "util/platform.h" +#include "util/span.h" + +#include +#include +#include +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(util) + +class FStreamFileInputStream +{ + public: + using BufferPool = HeapBufferPool; + using BufferPoolPtr = BufferPool::PoolPtr; + + FStreamFileInputStream() : filename_(), fd_(nullptr), buffer_pool_(BufferPool::Create()) {} + FStreamFileInputStream(const FStreamFileInputStream&) = delete; + FStreamFileInputStream& operator=(const FStreamFileInputStream&) = delete; + + ~FStreamFileInputStream() { Close(); } + + const std::string& GetFilename() const { return filename_; } + + bool IsOpen() const { return fd_ != nullptr; } + bool IsEof() const { return IsOpen() && (read_ahead_bytes_ == 0) && (feof(fd_) != 0); } + bool IsError() const { return IsOpen() && (ferror(fd_) != 0); } + bool IsReady() const { return IsOpen() && !IsEof() && !IsError(); } + + bool Open(const std::string& filename); + void Close(); + bool FileSeek(int64_t offset, util::platform::FileSeekOrigin origin); + bool ReadBytes(void* buffer, size_t bytes); + size_t PeekBytes(void* buffer, size_t bytes); + bool ReadOverwriteSpan(const size_t bytes, DataSpan& span); + DataSpan ReadSpan(const size_t bytes); + + // GOOGLE: [single-frame-looping] Add tell so we can find the loop point + int64_t FileTell(); + + explicit operator bool() const { return IsOpen(); } + + // This saves on fread calls for small reads/peeks. 1024 is as big + // as useful for performance if using fread. If we go larger we should + // go to read/_read system calls, directly and avoid the fread buffer + // entirely. + constexpr static size_t kReadAheadBufferSize = 1024U; + + // Design assumes kMaxPeekBytes << kReadAheadBufferSize, as we move data when peeking would + // exceed the read ahead buffer size, and we want to avoid moving large amounts of data. + constexpr static size_t kMaxPeekBytes = 32U; + + size_t GetMaxPeekBytes() const { return kMaxPeekBytes; } + + protected: + size_t ReadFromReadAheadBuffer(void* buffer, size_t bytes); + + std::string filename_; + FILE* fd_{ nullptr }; + BufferPoolPtr buffer_pool_; + size_t read_ahead_bytes_ = 0U; + size_t read_ahead_offset_ = 0U; + + std::array read_ahead_buffer_; +}; + +GFXRECON_END_NAMESPACE(util) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // GFXRECON_UTIL_FILE_INPUT_STREAM_H diff --git a/third_party/gfxreconstruct/framework/util/file_path.cpp b/third_party/gfxreconstruct/framework/util/file_path.cpp index 166c0b325..3eeab56cf 100644 --- a/third_party/gfxreconstruct/framework/util/file_path.cpp +++ b/third_party/gfxreconstruct/framework/util/file_path.cpp @@ -595,6 +595,67 @@ std::string FindModulePath(const std::string& target_module, bool case_sensitive return target_module_path; } +enum PathVariable : uint32_t +{ + kAppName, + kInternalDataPath, + + kMaxValue, +}; + +std::vector GetPathVariables() +{ + std::vector path_variables; + path_variables.resize(PathVariable::kMaxValue); + + path_variables[PathVariable::kAppName] = "${AppName}"; + path_variables[PathVariable::kInternalDataPath] = "${InternalDataPath}"; + + return path_variables; +} + +std::string ExpandPathVariables(const FileInfo& info, const std::string& path) +{ + static auto variables = GetPathVariables(); + + std::string expanded_path = path; + + // Replace variable patterns in the path. + for (uint32_t i = 0; i < variables.size(); ++i) + { + const char* pattern = variables[i]; + size_t pos = expanded_path.find(pattern); + while (pos != std::string::npos) + { + std::string replacement = ""; + + switch (static_cast(i)) + { + case PathVariable::kAppName: + replacement = info.AppName; + break; + case PathVariable::kInternalDataPath: +#ifdef __ANDROID__ + replacement = "/data/data/" + std::string(info.AppName); +#else + GFXRECON_LOG_WARNING( + "Unimplemented path variable pattern: %s. This pattern is only supported on Android.", pattern); +#endif + break; + default: + GFXRECON_LOG_WARNING("Unimplemented path variable pattern: %s", pattern); + } + + expanded_path.replace(pos, std::strlen(pattern), replacement); + + // Search for the next occurrence of the pattern. + pos = expanded_path.find(pattern, pos + replacement.length()); + } + } + + return expanded_path; +} + GFXRECON_END_NAMESPACE(filepath) GFXRECON_END_NAMESPACE(util) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/util/file_path.h b/third_party/gfxreconstruct/framework/util/file_path.h index b556757a3..455503381 100644 --- a/third_party/gfxreconstruct/framework/util/file_path.h +++ b/third_party/gfxreconstruct/framework/util/file_path.h @@ -115,6 +115,19 @@ bool EqualStr(const std::string& str1, const std::string& str2, bool case_sensit std::string FindModulePath(const std::string& target_module, bool case_sensitive); +/** + * @brief Expands variable patterns in a file path string. + * + * This function searches the input path string for variable patterns of the form `${VariableName}` + * (e.g., `${InternalDataPath}`, `${AppName}`), and replaces them with the corresponding values. This allows for dynamic + * construction of file paths based on application or environment-specific information. + * + * @param info The FileInfo structure containing values for variable substitution. + * @param path The input path string, which may contain variable patterns to expand. + * @return A new string with all recognized variable patterns replaced by their corresponding values. + */ +std::string ExpandPathVariables(const FileInfo& info, const std::string& path); + GFXRECON_END_NAMESPACE(filepath) GFXRECON_END_NAMESPACE(util) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/util/heap_buffer.cpp b/third_party/gfxreconstruct/framework/util/heap_buffer.cpp new file mode 100644 index 000000000..27a766aa7 --- /dev/null +++ b/third_party/gfxreconstruct/framework/util/heap_buffer.cpp @@ -0,0 +1,171 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** +* copy of this software and associated documentation files (the "Software"), +** to deal in the Software without +* restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, +* sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do +* so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be +* included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT +* WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +* FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#include "util/heap_buffer.h" +#include "util/alignment_utils.h" + +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(util) + +// Grow the capacity of the HeapBuffer without attempting to preserve the current contents +void HeapBuffer::ReserveDiscarding(size_t capacity) +{ + if (capacity && (capacity > capacity_)) + { + capacity = util::next_pow_2(capacity); + store_ = Store(new DataType[capacity]); + capacity_ = capacity; + } +} + +// Grow the capacity of the HeapBuffer while conserving the current contents +void HeapBuffer::ReservePreserving(size_t new_capacity) +{ + if (IsEmpty()) + { + ReserveDiscarding(new_capacity); + } + else if (new_capacity > capacity_) + { + HeapBuffer destination(new_capacity); + std::memcpy(destination.Get(), Get(), capacity_); + *this = std::move(destination); + } +} + +void HeapBuffer::Reset() +{ + store_.reset(); + capacity_ = 0; +} + +HeapBufferPool::Entry::~Entry() noexcept +{ + Reset(); +} + +void HeapBufferPool::Entry::Reset() noexcept +{ + // Return to pool_ if not reset + if (pool_) + { + pool_->Release(std::move(*this)); + } +} + +HeapBufferPool::Entry::Entry(Entry&& other) noexcept : + Base(std::move(other)), pool_(std::exchange(other.pool_, nullptr)) +{} + +HeapBufferPool::Entry& HeapBufferPool::Entry::operator=(Entry&& other) noexcept +{ + if (this == &other) + return *this; + + if (pool_) + { + pool_->Release(std::move(*this)); + GFXRECON_ASSERT(pool_ == nullptr); + } + + Base::operator=(std::move(other)); + pool_ = other.pool_; + other.pool_ = nullptr; + + return *this; +} + +HeapBufferPool::Entry HeapBufferPool::Acquire(size_t size) +{ + if (!store_.empty()) + { + Entry entry = std::move(store_.front()); + store_.pop_front(); + entry.ReserveDiscarding(size); // Realloc will only grow the buffer + + acquired_++; + return entry; + } + acquired_++; + return Entry(Entry::PoolAcquireTag{}, this, size); +} + +void HeapBufferPool::Reset() noexcept +{ + // Doesn't remove any acquired buffers, just clears the pool + // Disavow all entries in the pool so they don't try to return themselve to a pool that is being reset + for (auto& entry : store_) + { + entry.DisavowPool(); + } + store_.clear(); +} + +HeapBufferPool::~HeapBufferPool() +{ + if (acquired_ != 0) + { + GFXRECON_LOG_ERROR("Deleted HeapBufferPool without releasing all Acquired entries. Outstanding count = %zu.", + acquired_); + GFXRECON_ASSERT(acquired_ == 0); + } + Reset(); +} + +void HeapBufferPool::Release(Entry&& entry) noexcept +{ + GFXRECON_ASSERT(acquired_ > 0); + acquired_--; + + // No point in storing empty buffers + if (!entry.IsEmpty() && (store_.size() < max_entries_)) + { + // NOTE: Might not want to hang onto *giant* buffers... or add a full pow2 bucket set + try + { + store_.push_back(std::move(entry)); + } + catch (...) + { + // This is only from ~Entry so we don't have to worry about cleaning up entry + } + } + else + { + // Mark the entry as released, even if we don't take its contents back into the pool + entry.DisavowPool(); + } +} + +GFXRECON_END_NAMESPACE(util) +GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/util/heap_buffer.h b/third_party/gfxreconstruct/framework/util/heap_buffer.h new file mode 100644 index 000000000..4ed021fdf --- /dev/null +++ b/third_party/gfxreconstruct/framework/util/heap_buffer.h @@ -0,0 +1,180 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ +#ifndef GFXRECON_UTIL_HEAP_BUFFER_H +#define GFXRECON_UTIL_HEAP_BUFFER_H + +#include "util/logging.h" +#include "util/type_traits_extras.h" + +#include +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(util) + +// Basic heap buffer management class to use instead of std::vector +// +// NOTE: Access is designed to be read-write +// NOTE: ReserveDiscarding will only grow the buffer, never shrink it +// NOTE: ReserveDiscarding doesn't preserve existing data, but also doesn't clear it for performance reasons +// NOTE: This class is *NOT* copyable, only movable +class HeapBuffer +{ + public: + using DataType = std::byte; + using Store = std::unique_ptr; + + using value_type = DataType; + using pointer = DataType*; + + HeapBuffer() = default; + HeapBuffer(size_t capacity) { ReserveDiscarding(capacity); } + HeapBuffer(HeapBuffer&& other) noexcept = default; + HeapBuffer& operator=(HeapBuffer&& other) noexcept = default; + + // Grow the capacity of the HeapBuffer without attempting to preserve the current contents + void ReserveDiscarding(size_t capacity); + void reserve_discarding(size_t capacity) { ReserveDiscarding(capacity); } + + // Grow the capacity of the HeapBuffer while conserving the current contents + void ReservePreserving(size_t new_capacity); + void reserve_preserving(size_t capacity) { ReservePreserving(capacity); } + void reserve(size_t capacity) { ReservePreserving(capacity); } + + void Reset(); + void reset() { Reset(); } + + [[nodiscard]] DataType* Get() { return store_.get(); } + [[nodiscard]] pointer data() noexcept { return store_.get(); } + + template + [[nodiscard]] T* GetAs() noexcept + { + static_assert(!std::is_reference_v, "T must not be a reference type"); + static_assert(IsByteEquivalent_v, "Buffer reinterpretation only valid for byte-like types."); + return reinterpret_cast(store_.get()); + } + + template + [[nodiscard]] auto GetAs() const noexcept + { + static_assert(!std::is_reference_v, "T must not be a reference type"); + static_assert(IsByteEquivalent_v, "Buffer reinterpretation only valid for byte-like types."); + return reinterpret_cast*>(store_.get()); + } + + size_t Capacity() const { return store_ ? capacity_ : 0U; } + bool IsEmpty() const { return store_ == nullptr; } + + DataType* get() { return store_.get(); } + size_t capacity() const { return Capacity(); } + bool empty() const { return IsEmpty(); } + + private: + size_t capacity_{ 0 }; + Store store_; +}; + +// Now a pool of heap buffers to avoid repeated allocations/deallocations +// NOTE: This class is *NOT* copyable, only movable +class HeapBufferPool : public std::enable_shared_from_this +{ + public: + using DataBuffer = HeapBuffer; + using DataType = DataBuffer::DataType; + using SizeType = size_t; + using PoolPtr = std::shared_ptr; + + // Wrapper around DataBuffer that returns to the pool on destruction + // NOTE: This class is *NOT* copyable, only movable + // NOTE: The pool_ weak_ptr is used to avoid circular references + class Entry : public DataBuffer + { + public: + using Base = DataBuffer; + using Pool = HeapBufferPool; + friend Pool; + + ~Entry() noexcept; + + Entry(const Entry&) = delete; + Entry& operator=(const Entry&) = delete; + + Entry(Entry&& other) noexcept; + + Entry& operator=(Entry&& other) noexcept; + Entry() = default; + + void Reset() noexcept; + Pool* GetPool() const { return pool_; } + + // The public "pool" constructor aquires an entry from the pool + // suitable for use in emplaced containers or wrappers + Entry(Pool* pool, size_t size) : Entry(pool->Acquire(size)) {} + + private: + // The private constructor is used by the pool to create new entries + struct PoolAcquireTag + {}; + Entry(PoolAcquireTag, Pool* pool, size_t size) : DataBuffer(size), pool_(pool) {} + void DisavowPool() { pool_ = nullptr; } + + // Pool is guarded by a refcount of Acquire'd Entry objects + Pool* pool_ = nullptr; + }; + + Entry Acquire(size_t size); + + void Reset() noexcept; + void clear() { Reset(); } + + // Since the entry destructor needs to return to the pool, we need to use a shared_ptr. + static PoolPtr Create(size_t max_entries = kDefaultMaxCount) + { + // Can't use make_shared as the constructor is private + return PoolPtr(new HeapBufferPool(max_entries)); + } + HeapBufferPool(const HeapBufferPool&) = delete; + HeapBufferPool(HeapBufferPool&&) = delete; + + ~HeapBufferPool(); + + private: + friend Entry::~Entry() noexcept; + void Release(Entry&& entry) noexcept; + + // NOTE: This is a WAG. Current designed usage is 1 except during preloading, which doesn't recur + static constexpr size_t kDefaultMaxCount = 16; + HeapBufferPool(size_t max_entries = kDefaultMaxCount) : max_entries_(max_entries), store_() {} + using Store = std::deque; + size_t max_entries_ = kDefaultMaxCount; + + // NOTE: As Store isn't thread safe, acquired_ doesn't have to be atomic, if Store acquires a mutex + // acquired_ should be guarded by it as well + size_t acquired_ = 0; + Store store_; +}; + +GFXRECON_END_NAMESPACE(util) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // GFXRECON_UTIL_HEAP_BUFFER_H diff --git a/third_party/gfxreconstruct/framework/util/image_writer.cpp b/third_party/gfxreconstruct/framework/util/image_writer.cpp index ae3b79794..ec0beda7b 100644 --- a/third_party/gfxreconstruct/framework/util/image_writer.cpp +++ b/third_party/gfxreconstruct/framework/util/image_writer.cpp @@ -320,6 +320,31 @@ static const uint8_t* ConvertIntoTemporaryBuffer(uint32_t width, } break; + case kFormat_S8_UINT: + { + const uint8_t* bytes = reinterpret_cast(data); + for (uint32_t y = 0; y < height; ++y) + { + for (uint32_t x = 0; x < width; ++x) + { + const uint8_t s = bytes[x]; + + *(temp_buffer++) = s; + *(temp_buffer++) = s; + *(temp_buffer++) = s; + + if (write_alpha) + { + *(temp_buffer++) = 0xff; + } + } + + bytes = bytes + data_pitch; + temp_buffer = temporary_buffer.data() + (y + 1) * output_pitch; + } + } + break; + default: GFXRECON_LOG_ERROR("Format %u not handled", format); assert(0); diff --git a/third_party/gfxreconstruct/framework/util/image_writer.h b/third_party/gfxreconstruct/framework/util/image_writer.h index 6fa1ac9e8..fd6bc39cf 100644 --- a/third_party/gfxreconstruct/framework/util/image_writer.h +++ b/third_party/gfxreconstruct/framework/util/image_writer.h @@ -73,7 +73,8 @@ enum DataFormats kFormat_BGRA, kFormat_D32_FLOAT, kFormat_D24_UNORM, - kFormat_D16_UNORM + kFormat_D16_UNORM, + kFormat_S8_UINT }; constexpr bool DataFormatHasAlpha(DataFormats format) @@ -89,6 +90,7 @@ constexpr bool DataFormatHasAlpha(DataFormats format) case kFormat_D32_FLOAT: case kFormat_D24_UNORM: case kFormat_D16_UNORM: + case kFormat_S8_UINT: return false; default: @@ -145,12 +147,8 @@ bool WritePngImage(const std::string& filename, DataFormats format = kFormat_BGRA, bool write_alpha = false); -bool WritePngImageSeparateAlpha(const std::string& filename, - uint32_t width, - uint32_t height, - const void* data, - uint32_t pitch, - DataFormats format); +bool WritePngImageSeparateAlpha( + const std::string& filename, uint32_t width, uint32_t height, const void* data, uint32_t pitch, DataFormats format); GFXRECON_END_NAMESPACE(imagewriter) GFXRECON_END_NAMESPACE(util) diff --git a/third_party/gfxreconstruct/framework/util/interception/create_process.cpp b/third_party/gfxreconstruct/framework/util/interception/create_process.cpp index ed36d0db9..f6b01ab9b 100644 --- a/third_party/gfxreconstruct/framework/util/interception/create_process.cpp +++ b/third_party/gfxreconstruct/framework/util/interception/create_process.cpp @@ -26,6 +26,7 @@ #include "injection.h" #include "ref_tracker.h" #include "ref_tracker_counter.h" +#include "util/strings.h" #include @@ -81,15 +82,6 @@ CreateProcessWFunc real_create_process_w = CreateProcessW; const static int k_max_hop_count_ = 20; static int total_hop_count_ = 0; -//---------------------------------------------------------------------------- -/// Utility function to convert string to lowercase -/// \param str output string -//---------------------------------------------------------------------------- -static void ToLowerCase(std::string& str) -{ - std::transform(str.begin(), str.end(), str.begin(), [](char c) { return (char)::tolower(c); }); -} - //---------------------------------------------------------------------------- /// Try to detect blacklisted app /// \param app_name @@ -97,7 +89,7 @@ static void ToLowerCase(std::string& str) //---------------------------------------------------------------------------- static bool CheckBlackList(std::string app_name) { - ToLowerCase(app_name); + gfxrecon::util::strings::ToLowerCase(app_name); const int count = sizeof(kBlackList) / sizeof(kBlackList[0]); diff --git a/third_party/gfxreconstruct/framework/util/json_util.cpp b/third_party/gfxreconstruct/framework/util/json_util.cpp index 240b772b7..eb89679ca 100644 --- a/third_party/gfxreconstruct/framework/util/json_util.cpp +++ b/third_party/gfxreconstruct/framework/util/json_util.cpp @@ -189,27 +189,7 @@ void FieldToJson(nlohmann::ordered_json& jdata, const std::string_view data, con void FieldToJson(nlohmann::ordered_json& jdata, const std::wstring_view data, const util::JsonOptions& options) { -#if defined(__clang__) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -#endif - -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - - std::wstring_convert> utf8_conv; - -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic pop -#endif - -#if defined(__clang__) -#pragma clang diagnostic pop -#endif - - jdata = utf8_conv.to_bytes(data.data(), data.data() + data.length()); + jdata = util::strings::convert_wstring_to_utf8(data); } #if defined(D3D12_SUPPORT) @@ -232,6 +212,11 @@ const static std::unordered_map kHresults{ // D3D9 Errors inherited by D3D12: { D3DERR_INVALIDCALL, "D3DERR_INVALIDCALL" }, { D3DERR_WASSTILLDRAWING, "D3DERR_WASSTILLDRAWING" }, + // DXGI Status codes from : + // https://learn.microsoft.com/en-us/windows/win32/direct3ddxgi/dxgi-status + { DXGI_STATUS_OCCLUDED, "DXGI_STATUS_OCCLUDED" }, + { DXGI_STATUS_MODE_CHANGED, "DXGI_STATUS_MODE_CHANGED" }, + { DXGI_STATUS_MODE_CHANGE_IN_PROGRESS, "DXGI_STATUS_MODE_CHANGE_IN_PROGRESS" }, // DXGI Errors from : // https://learn.microsoft.com/en-us/windows/win32/direct3ddxgi/dxgi-error { DXGI_ERROR_ACCESS_DENIED, "DXGI_ERROR_ACCESS_DENIED" }, @@ -409,7 +394,7 @@ bool RepresentBinaryFile(const util::JsonOptions& json_options, { std::string filename = GenerateFilename(filename_base, instance_counter); std::string basename = gfxrecon::util::filepath::Join(json_options.data_sub_dir, filename); - std::string filepath = gfxrecon::util::filepath::Join(json_options.root_dir, basename); + std::string filepath = gfxrecon::util::filepath::Join(json_options.root_dir, filename); if (WriteBinaryFile(filepath, data_size, data)) { FieldToJson(jdata, basename, json_options); diff --git a/third_party/gfxreconstruct/framework/util/keyboard.cpp b/third_party/gfxreconstruct/framework/util/keyboard.cpp index 9095b8b69..02b81bf2f 100644 --- a/third_party/gfxreconstruct/framework/util/keyboard.cpp +++ b/third_party/gfxreconstruct/framework/util/keyboard.cpp @@ -25,6 +25,7 @@ #include "util/logging.h" #include "util/platform.h" +#include "util/strings.h" #if defined(VK_USE_PLATFORM_XCB_KHR) #include @@ -90,23 +91,26 @@ bool Keyboard::Initialize(Display* display) bool Keyboard::GetKeyState(const std::string& key) { bool result = false; + using namespace gfxrecon::util::strings; #if defined(VK_USE_PLATFORM_WIN32_KHR) - static const std::unordered_map win32_key_code_map = { { "F1", VK_F1 }, - { "F2", VK_F2 }, - { "F3", VK_F3 }, - { "F4", VK_F4 }, - { "F5", VK_F5 }, - { "F6", VK_F6 }, - { "F7", VK_F7 }, - { "F8", VK_F8 }, - { "F9", VK_F9 }, - { "F10", VK_F10 }, - { "F11", VK_F11 }, - { "F12", VK_F12 }, - { "TAB", VK_TAB }, - { "ControlLeft", VK_LCONTROL }, - { "ControlRight", VK_RCONTROL } }; + static const std::unordered_map win32_key_code_map = { + { "F1", VK_F1 }, + { "F2", VK_F2 }, + { "F3", VK_F3 }, + { "F4", VK_F4 }, + { "F5", VK_F5 }, + { "F6", VK_F6 }, + { "F7", VK_F7 }, + { "F8", VK_F8 }, + { "F9", VK_F9 }, + { "F10", VK_F10 }, + { "F11", VK_F11 }, + { "F12", VK_F12 }, + { "TAB", VK_TAB }, + { "ControlLeft", VK_LCONTROL }, + { "ControlRight", VK_RCONTROL } + }; auto iterator_key_code = win32_key_code_map.find(key); if (iterator_key_code != win32_key_code_map.end()) @@ -116,21 +120,23 @@ bool Keyboard::GetKeyState(const std::string& key) #endif #if defined(VK_USE_PLATFORM_XCB_KHR) - static const std::unordered_map xcb_key_code_map = { { "F1", XK_F1 }, - { "F2", XK_F2 }, - { "F3", XK_F3 }, - { "F4", XK_F4 }, - { "F5", XK_F5 }, - { "F6", XK_F6 }, - { "F7", XK_F7 }, - { "F8", XK_F8 }, - { "F9", XK_F9 }, - { "F10", XK_F10 }, - { "F11", XK_F11 }, - { "F12", XK_F12 }, - { "Tab", XK_Tab }, - { "ControlLeft", XK_Control_L }, - { "ControlRight", XK_Control_R } }; + static const std::unordered_map xcb_key_code_map = { + { "F1", XK_F1 }, + { "F2", XK_F2 }, + { "F3", XK_F3 }, + { "F4", XK_F4 }, + { "F5", XK_F5 }, + { "F6", XK_F6 }, + { "F7", XK_F7 }, + { "F8", XK_F8 }, + { "F9", XK_F9 }, + { "F10", XK_F10 }, + { "F11", XK_F11 }, + { "F12", XK_F12 }, + { "Tab", XK_Tab }, + { "ControlLeft", XK_Control_L }, + { "ControlRight", XK_Control_R } + }; if (xcb_connection_) { auto& xcb_keysyms = xcb_keysyms_loader_.GetFunctionTable(); @@ -161,25 +167,26 @@ bool Keyboard::GetKeyState(const std::string& key) #endif #if defined(VK_USE_PLATFORM_METAL_EXT) - static const std::unordered_map carbon_key_code_map = { - { "F1", kVK_F1 }, - { "F2", kVK_F2 }, - { "F3", kVK_F3 }, - { "F4", kVK_F4 }, - { "F5", kVK_F5 }, - { "F6", kVK_F6 }, - { "F7", kVK_F7 }, - { "F8", kVK_F8 }, - { "F9", kVK_F9 }, - { "F10", kVK_F10 }, - { "F11", kVK_F11 }, - { "F12", kVK_F12 }, - { "Tab", kVK_Tab }, - { "ControlLeft", kVK_Control }, - { "ControlRight", kVK_RightControl }, - { "CommandLeft", kVK_Command }, - { "CommandRight", kVK_RightCommand }, - }; + static const std::unordered_map + carbon_key_code_map = { + { "F1", kVK_F1 }, + { "F2", kVK_F2 }, + { "F3", kVK_F3 }, + { "F4", kVK_F4 }, + { "F5", kVK_F5 }, + { "F6", kVK_F6 }, + { "F7", kVK_F7 }, + { "F8", kVK_F8 }, + { "F9", kVK_F9 }, + { "F10", kVK_F10 }, + { "F11", kVK_F11 }, + { "F12", kVK_F12 }, + { "Tab", kVK_Tab }, + { "ControlLeft", kVK_Control }, + { "ControlRight", kVK_RightControl }, + { "CommandLeft", kVK_Command }, + { "CommandRight", kVK_RightCommand }, + }; auto iterator_key_code = carbon_key_code_map.find(key); if (iterator_key_code != carbon_key_code_map.end()) diff --git a/third_party/gfxreconstruct/framework/util/logging.cpp b/third_party/gfxreconstruct/framework/util/logging.cpp index d951f3d3c..d6e6f3df6 100644 --- a/third_party/gfxreconstruct/framework/util/logging.cpp +++ b/third_party/gfxreconstruct/framework/util/logging.cpp @@ -93,6 +93,7 @@ void Log::Init(Severity min_severity, if (!settings_.leave_file_open) { platform::FileClose(settings_.file_pointer); + settings_.file_pointer = nullptr; } } } @@ -127,6 +128,7 @@ void Log::Init(const util::Log::Settings& settings) if (!settings_.leave_file_open) { platform::FileClose(settings_.file_pointer); + settings_.file_pointer = nullptr; } } } @@ -148,7 +150,7 @@ void Log::LogMessage( bool opened_file = false; bool write_indent = settings_.use_indent && (settings_.indent > 0); bool output_to_stderr = false; - FILE* log_file_ptr; + FILE* log_file_ptr = nullptr; // Log message prefix const char process_tag[] = "gfxrecon"; diff --git a/third_party/gfxreconstruct/framework/util/lz4_compressor.cpp b/third_party/gfxreconstruct/framework/util/lz4_compressor.cpp index e4af20b84..04d345525 100644 --- a/third_party/gfxreconstruct/framework/util/lz4_compressor.cpp +++ b/third_party/gfxreconstruct/framework/util/lz4_compressor.cpp @@ -66,10 +66,10 @@ size_t Lz4Compressor::Compress(const size_t uncompressed_size, return data_size; } -size_t Lz4Compressor::Decompress(const size_t compressed_size, - const std::vector& compressed_data, - const size_t expected_uncompressed_size, - std::vector* uncompressed_data) const +size_t Lz4Compressor::Decompress(const size_t compressed_size, + const uint8_t* compressed_data, + const size_t expected_uncompressed_size, + uint8_t* uncompressed_data) const { size_t data_size = 0; @@ -78,8 +78,8 @@ size_t Lz4Compressor::Decompress(const size_t compressed_size, return 0; } - int uncompressed_size_generated = LZ4_decompress_safe(reinterpret_cast(compressed_data.data()), - reinterpret_cast(uncompressed_data->data()), + int uncompressed_size_generated = LZ4_decompress_safe(reinterpret_cast(compressed_data), + reinterpret_cast(uncompressed_data), static_cast(compressed_size), static_cast(expected_uncompressed_size)); diff --git a/third_party/gfxreconstruct/framework/util/lz4_compressor.h b/third_party/gfxreconstruct/framework/util/lz4_compressor.h index e7736811d..0cccb7b4d 100644 --- a/third_party/gfxreconstruct/framework/util/lz4_compressor.h +++ b/third_party/gfxreconstruct/framework/util/lz4_compressor.h @@ -41,10 +41,10 @@ class Lz4Compressor : public Compressor std::vector* compressed_data, size_t compressed_data_offset) const override; - size_t Decompress(size_t compressed_size, - const std::vector& compressed_data, - size_t expected_uncompressed_size, - std::vector* uncompressed_data) const override; + size_t Decompress(size_t compressed_size, + const uint8_t* compressed_data, + const size_t expected_uncompressed_size, + uint8_t* uncompressed_data) const override; }; GFXRECON_END_NAMESPACE(util) diff --git a/third_party/gfxreconstruct/framework/util/options.h b/third_party/gfxreconstruct/framework/util/options.h index dda74e0d1..611c80a27 100644 --- a/third_party/gfxreconstruct/framework/util/options.h +++ b/third_party/gfxreconstruct/framework/util/options.h @@ -55,6 +55,23 @@ enum class SwapchainOption : uint32_t kOffscreen = 2, }; +enum class PresentModeOption : uint32_t +{ + kCapture = 0, + kImmediate = 1, + kMailbox = 2, + kFifo = 3, + kFifoRelaxed = 4, +}; + +const char kScreenshotFormatBmp[] = "bmp"; +const char kScreenshotFormatPng[] = "png"; + +const char kCompressionTypeNone[] = "none"; +const char kCompressionTypeLz4[] = "lz4"; +const char kCompressionTypeZlib[] = "zlib"; +const char kCompressionTypeZstd[] = "zstd"; + //---------------------------------------------------------------------------- /// Read a boolean value out of a string /// \param value_string Input string diff --git a/third_party/gfxreconstruct/framework/util/page_guard_manager.h b/third_party/gfxreconstruct/framework/util/page_guard_manager.h index ce3fad314..79ea3dc17 100644 --- a/third_party/gfxreconstruct/framework/util/page_guard_manager.h +++ b/third_party/gfxreconstruct/framework/util/page_guard_manager.h @@ -116,7 +116,7 @@ class PageGuardManager // shadow_memory is true. // // The shadow_memory_handle parameter is an option value that allows the lifetime of the shadow memory allocation to - // be managed externally. Unless opy-on-map is disabled, copies from the mapped_range portion of mapped_memory to + // be managed externally. Unless copy-on-map is disabled, copies from the mapped_range portion of mapped_memory to // the shadow memory are performed once, the first time that the shadow memory is added for tracking. Copies will // not be performed if the mapped range is removed from tracking and then added again. // diff --git a/third_party/gfxreconstruct/framework/util/platform.h b/third_party/gfxreconstruct/framework/util/platform.h index a3369c6f9..5c4ebae6a 100644 --- a/third_party/gfxreconstruct/framework/util/platform.h +++ b/third_party/gfxreconstruct/framework/util/platform.h @@ -35,6 +35,17 @@ #include #include +// NOTE: this works around potential issues on msvc / VS 2019 with wrongly defined __cplusplus constant +#if defined(_MSVC_LANG) +#define CPP_STD _MSVC_LANG +#else +#define CPP_STD __cplusplus +#endif + +#if CPP_STD < 202002L +#warning "Unsupported compiler: this project requires support for C++20." +#endif + #if defined(WIN32) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN @@ -623,7 +634,7 @@ inline std::string GetCpuAffinity() std::string affinity; #ifdef __linux__ - cpu_set_t mask; + cpu_set_t mask; if (sched_getaffinity(0, sizeof(mask), &mask)) { return affinity; @@ -756,16 +767,44 @@ inline bool FilePuts(const char* char_string, FILE* stream) return FileWrite(char_string, strlen(char_string), stream); } -inline bool FileRead(void* buffer, size_t bytes, FILE* stream) +inline size_t FileReadBytes(void* buffer, size_t bytes, FILE* stream) { - size_t read_count = 0; - int err = 0; - do + size_t read_count = 0; + char* dest_buffer = static_cast(buffer); + size_t bytes_to_read = bytes; + while (read_count < bytes) // Early out for zero byte reads { - read_count = fread(buffer, bytes, 1, stream); - err = ferror(stream); - } while (!feof(stream) && read_count < 1 && (err == EWOULDBLOCK || err == EINTR || err == EAGAIN)); - return (read_count == 1 || bytes == 0); + size_t bytes_read = fread(dest_buffer, 1, bytes_to_read, stream); + read_count += bytes_read; + if (bytes_read < bytes_to_read) + { + dest_buffer += bytes_read; + bytes_to_read -= bytes_read; + + if (feof(stream)) + { + break; + } + else if (ferror(stream)) + { + int err = errno; + if ((err == EWOULDBLOCK) || (err == EINTR) || (err == EAGAIN)) + { + clearerr(stream); + } + else + { + break; + } + } + } + } + return read_count; +} + +inline bool FileRead(void* buffer, size_t bytes, FILE* stream) +{ + return FileReadBytes(buffer, bytes, stream) == bytes; } inline int32_t SetFileBufferSize(FILE* stream, size_t buffer_size) @@ -800,6 +839,78 @@ inline uint64_t SizeTtoUint64(size_t value) #endif } +/// @brief Get the start address of the memory page containing the given pointer. +/// @param ptr Pointer to the memory location. +/// @return The start address of the memory page containing the pointer. +inline uintptr_t GetPageStartAddress(const void* ptr) +{ + static size_t page_size = GetSystemPageSize(); + return (reinterpret_cast(ptr) / page_size) * page_size; +} + +#if defined(WIN32) + +/// @brief Heuristically determine whether a pointer likely refers to readable +/// memory in the current process on Windows. +/// @param ptr Pointer to the memory location to check. +/// @return `true` if the pointer is valid, `false` otherwise. +/// @note This is a best-effort probe only; it cannot guarantee safety. +/// Even if this returns true, dereferencing the pointer can still fault. +/// @note This implementation is adapted from the LLVM compiler-rt project: +/// `llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp` +/// @copyright License notice for the original source: https://llvm.org/LICENSE.txt +/// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +inline bool PointerIsValid(const void* ptr) +{ + if (ptr == nullptr) + { + return false; + } + + uintptr_t page = GetPageStartAddress(ptr); + + MEMORY_BASIC_INFORMATION info; + if (VirtualQuery(reinterpret_cast(page), &info, sizeof(info)) != sizeof(info)) + { + return false; + } + + if (info.Protect == 0 || info.Protect == PAGE_NOACCESS || info.Protect == PAGE_EXECUTE) + { + // The page is not accessible. + return false; + } + + if (info.RegionSize == 0) + { + return false; + } + + return true; +} + +#else // (WIN32) + +/// @brief This implementation probes whether the page containing ptr is currently mapped in this process, +/// to guess whether the pointer might be valid. +/// @param ptr Pointer to the memory location to check. +/// @return `true` if the pointer is valid, `false` otherwise. +/// @note This is not a safety/readability guarantee. A mapped page may still be unreadable (e.g., `PROT_NONE`), +/// so dereferencing ptr can still fault even if this returns `true`. +inline bool PointerIsValid(const void* ptr) +{ + if (ptr == nullptr) + { + return false; + } + + uintptr_t page_start = GetPageStartAddress(ptr); + static size_t page_size = GetSystemPageSize(); + // Returns -1 with errno=ENOMEM if the indicated memory (or part of it) was not mapped. + return msync(reinterpret_cast(page_start), page_size, MS_ASYNC) == 0; +} +#endif // !WIN32 + GFXRECON_END_NAMESPACE(platform) GFXRECON_END_NAMESPACE(util) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/util/span.h b/third_party/gfxreconstruct/framework/util/span.h new file mode 100644 index 000000000..488cb4876 --- /dev/null +++ b/third_party/gfxreconstruct/framework/util/span.h @@ -0,0 +1,273 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_UTIL_SPAN_H +#define GFXRECON_UTIL_SPAN_H + +#include "util/heap_buffer.h" +#include "util/type_traits_extras.h" + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(util) + +// Back porting a portion from C++20 +// Dynamic extent only +template +class Span +{ + public: + using element_type = T; + using value_type = std::remove_cv_t; + using size_type = std::size_t; + using difference_type = std::ptrdiff_t; + using pointer = T*; + using const_pointer = const T*; + using reference = T&; + using const_reference = const T&; + + // This is where we get lazy about the backport + using iterator = pointer; + using const_iterator = const_pointer; + + // No extent parameter + constexpr Span() noexcept : data_(nullptr), size_(0U) {} + constexpr Span(pointer ptr, size_type count) noexcept : data_(ptr), size_(count) + { + GFXRECON_ASSERT((data_ != nullptr) || (count == 0)); + } + + Span(Span&&) = default; + Span(const Span&) = default; + Span& operator=(Span&&) = default; + Span& operator=(const Span&) = default; + + // Add other constructors as needed (c.f. YAGNI) + + constexpr iterator begin() noexcept { return data_; } + constexpr iterator end() noexcept { return data_ ? data_ + size_ : data_; } + + constexpr iterator begin() const noexcept { return data_; } + constexpr iterator end() const noexcept { return data_ ? data_ + size_ : data_; } + + constexpr const_iterator cbegin() const noexcept { return data_; } + constexpr const_iterator cend() const noexcept { return data_ ? data_ + size_ : data_; } + + constexpr pointer data() noexcept { return data_; } + constexpr const_pointer data() const noexcept { return data_; } + + [[nodiscard]] constexpr size_type size() const noexcept { return size_; } + [[nodiscard]] constexpr bool empty() const noexcept { return size_ == 0U; } + + private: + pointer data_; + size_type size_; +}; + +// A type anonymous union that can represent a data span from one of four sources: +// 1) A heap allocated buffer owned by this object +// 2) An entry from a heap buffer pool +// 3) A shared pointer to externally owned data +// 4) A non-owned, sized reference to other storage. NOTE: Must be lifecycle managed +// +// NOTE: Access is designed to be read-only +// NOTE: Only one of the available sources will be active at any time. +// NOTE: This class is *NOT* copyable, only movable +// NOTE: Additional constructors could be added to support other data sources +// +// TODO: Some housekeeping +// Add capacity assert in DataSpan(HeapBuffer&&, size_type). +// Decide if empty() should reflect size_ == 0 rather than !IsValid(). Document. +class DataSpan +{ + public: + using DataType = std::byte; + using SizeType = size_t; + + // STL style types + using value_type = DataType; + using size_type = SizeType; + using const_pointer = const DataType*; + + // Output Span + using OutputSpan = Span; + static constexpr size_type kRemainder = static_cast(-1); + + using PoolEntry = HeapBufferPool::Entry; + using PoolPointer = HeapBufferPool::PoolPtr; + + using SharedBuffer = std::shared_ptr; + + // NOTE: we use SharedBuffer instead std::monostate, as + // 1) it's a safe "empty" state + // 2) it avoids issues with variant's triviality when using monostate (MSVC 17.14 specific) + using Storage = std::variant; + using FirstVariant = std::variant_alternative_t<0, Storage>; + // NOTE: When adding supported types + // * they must be move-assignable + // * they noexcept move-constructible + // * they noexcept move-assignable + static_assert(std::is_move_assignable_v, + "All variant members must be move-assignable for variant to be move-assignable."); + static_assert(std::is_nothrow_move_constructible_v, + "All variant members must have noexcept move constructors"); + static_assert(std::is_nothrow_move_assignable_v, + "All variant members must have noexcept move assignment operators"); + + // Could check for size as well, but we'll just say non-nullptr is valid, and ensure size is non-zero when data_ is + // set + [[nodiscard]] bool IsValid() const { return data_ != nullptr; } + [[nodiscard]] size_type Size() const { return size_; } + + [[nodiscard]] const_pointer GetData() const { return data_; } + + template + [[nodiscard]] const T* GetDataAs() const noexcept + { + static_assert(!std::is_reference_v, "T must not be a reference type"); + static_assert(IsByteEquivalent_v, "Buffer reinterpretation only valid for byte-like types."); + return reinterpret_cast(data_); + } + + explicit operator bool() const { return IsValid(); } + + // Alternate STL style interface... + [[nodiscard]] const_pointer data() const { return data_; } + [[nodiscard]] size_type size() const { return size_; } + [[nodiscard]] bool has_value() const { return IsValid(); } + [[nodiscard]] bool empty() const { return !IsValid(); } + + DataSpan() : size_(0), data_(nullptr) {} + DataSpan(const DataSpan&) = delete; + + // Create an unowned DataSpan from a pointer or a span... OutputSpan is default initialized no reason to double + // store the span but *do* set the holds to something value. + DataSpan(const DataType* data, size_type size) : size_(size), data_(data), store_(OutputSpan()) + { + GFXRECON_ASSERT((data_ != nullptr) || (size_ == 0)); + } + + // Get a Non-Owning DataSpan that copies anything with a data() and a size() of the correct type + struct NonOwnedSpanTag + {}; + template + DataSpan(const SpanType& data_span, NonOwnedSpanTag) : DataSpan(data_span.data(), data_span.size()) + {} + + DataSpan(DataSpan&& other) noexcept : size_(other.size_), data_(other.data_), store_(std::move(other.store_)) + { + other.Reset(); + } + + DataSpan& operator=(const DataSpan&) = delete; + DataSpan& operator=(DataSpan&& from_span) noexcept + { + if (this != &from_span) + { + size_ = from_span.size_; + data_ = from_span.data_; + store_ = std::move(from_span.store_); + + from_span.Reset(); + } + return *this; + } + + DataSpan(const SharedBuffer& shared, size_type size) : size_(size), data_(shared.get()), store_(shared) {} + DataSpan(SharedBuffer&& from_shared, size_type size) : + size_(size), data_(from_shared.get()), store_(std::move(from_shared)) + {} + + DataSpan(HeapBuffer&& from_heap, size_type size) : size_(size) + { + store_.emplace(std::move(from_heap)); + data_ = std::get(store_).GetAs(); + } + + DataSpan(PoolEntry&& from_pool, size_type size) : size_(size) + { + GFXRECON_ASSERT(size <= from_pool.Capacity()); + store_.emplace(std::move(from_pool)); + data_ = std::get(store_).GetAs(); + } + + void Reset() noexcept + { + data_ = nullptr; + size_ = 0; + store_.emplace(); + } + void reset() noexcept { Reset(); } + + void Reset(const PoolPointer& buffer_pool, size_t size) + { + PoolEntry* entry = std::get_if(&store_); + if ((entry != nullptr) && (entry->GetPool() == buffer_pool.get())) + { + // If we already have a pool entry from the same pool, reuse it, no need to Release and re-Acquire + // Reserve does a capacity check and only reallocates if needed + entry->ReserveDiscarding(size); + data_ = entry->GetAs(); + } + else + { + data_ = store_.emplace(buffer_pool.get(), size).GetAs(); + } + + size_ = size; + } + + [[nodiscard]] OutputSpan AsSpan(size_type offset = 0, size_type count = kRemainder) const noexcept + { + const_pointer span_data = nullptr; + size_type span_count = 0; + if (data_ && (offset <= size_)) + { + // Remainder can be zero, offset starting address can be "end" + // If we ask for (size_, kRemainder) return empty span at end (it's what std::span does, apparently) + const size_type remainder = size_ - offset; + const_pointer offset_data = data_ + offset; + if (count == kRemainder) + { + span_data = offset_data; + span_count = remainder; + } + else if (count <= remainder) + { + span_data = offset_data; + span_count = count; + } + } + + return OutputSpan(span_data, span_count); + } + + private: + size_type size_{ 0 }; + const_pointer data_{ nullptr }; + + Storage store_; +}; + +GFXRECON_END_NAMESPACE(util) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // GFXRECON_UTIL_SPAN_H diff --git a/third_party/gfxreconstruct/framework/util/spirv_parsing_util.cpp b/third_party/gfxreconstruct/framework/util/spirv_parsing_util.cpp index 5ef001317..b4220c042 100644 --- a/third_party/gfxreconstruct/framework/util/spirv_parsing_util.cpp +++ b/third_party/gfxreconstruct/framework/util/spirv_parsing_util.cpp @@ -25,17 +25,84 @@ #include #include #include "spirv_reflect.h" +#include "util/alignment_utils.h" #include "util/spirv_helper.h" #include "util/logging.h" GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(util) -// used to enable type as key for std::set/map -bool operator<(const SpirVParsingUtil::BufferReferenceInfo& lhs, const SpirVParsingUtil::BufferReferenceInfo& rhs) +struct LayoutInfo { - return std::make_tuple(lhs.source, lhs.set, lhs.binding, lhs.buffer_offset, lhs.array_stride) < - std::make_tuple(rhs.source, rhs.set, rhs.binding, rhs.buffer_offset, rhs.array_stride); + uint32_t alignment = 0; + uint32_t size = 0; +}; + +LayoutInfo compute_type_layout(const SpvReflectTypeDescription* type_description) +{ + // TODO: alignment should handle different block-layouts (std140, std430, scalar), when types are padded + uint32_t alignment = 0; + uint32_t num_bytes = type_description->traits.numeric.scalar.width / 8; + + switch (type_description->op) + { + case SpvOpTypeVector: + num_bytes *= type_description->traits.numeric.vector.component_count; + break; + + case SpvOpTypeMatrix: + { + bool is_col_major = type_description->decoration_flags & SPV_REFLECT_DECORATION_COLUMN_MAJOR || + !(type_description->decoration_flags & SPV_REFLECT_DECORATION_ROW_MAJOR); + + num_bytes = (is_col_major ? type_description->traits.numeric.matrix.column_count + : type_description->traits.numeric.matrix.row_count) * + type_description->traits.numeric.matrix.stride; + } + + break; + + case SpvOpTypeArray: + case SpvOpTypeRuntimeArray: + num_bytes = std::max(num_bytes, type_description->traits.array.stride); + for (uint32_t d = 0; d < type_description->traits.array.dims_count; ++d) + { + num_bytes *= type_description->traits.array.dims[d] == SPV_REFLECT_ARRAY_DIM_RUNTIME + ? 1 + : type_description->traits.array.dims[d]; + } + break; + + case SpvOpTypeStruct: + { + uint32_t offset = 0; + uint32_t max_align = 0; + + for (uint32_t i = 0; i < type_description->member_count; ++i) + { + LayoutInfo layout_info = compute_type_layout(&type_description->members[i]); + offset = util::aligned_value(offset, layout_info.alignment); + offset += layout_info.size; + max_align = std::max(max_align, layout_info.alignment); + } + + num_bytes = util::aligned_value(offset, max_align); + } + break; + + case SpvOpTypePointer: + case SpvOpTypeForwardPointer: + // Vulkan device address / buffer ref + num_bytes = sizeof(uint64_t); + + // TODO: only true for std140, std430, could fail for scalar? + // alignment = sizeof(uint64_t); + break; + + default: + break; + } + return { alignment, num_bytes }; } // Instruction represents a single Spv::Op instruction. @@ -79,7 +146,7 @@ class SpirVParsingUtil::Instruction [[nodiscard]] uint32_t length() const { return words_[0] >> 16; } //! the instruction's op-code - [[nodiscard]] uint32_t opcode() const { return words_[0] & 0x0ffffu; } + [[nodiscard]] spv::Op opcode() const { return static_cast(words_[0] & 0x0ffffu); } //! operand id, return 0 if no result [[nodiscard]] uint32_t resultId() const { return (result_id_index_ == 0) ? 0 : words_[result_id_index_]; } @@ -242,6 +309,9 @@ bool SpirVParsingUtil::ParseBufferReferences(const uint32_t* const spirv_code, s } // forward spirv-reflect-pass + constexpr bool use_forward_spirv_reflect_pass = true; + + if constexpr (use_forward_spirv_reflect_pass) { // define a function to walk blocks breadth-first and check for buffer-references auto check_buffer_references = [this](const SpvReflectTypeDescription* type, @@ -295,33 +365,10 @@ bool SpirVParsingUtil::ParseBufferReferences(const uint32_t* const spirv_code, s auto* member = td->members + j; queue.push_back({ member, offset, stride, member_names }); - uint32_t num_scalar_bytes = member->traits.numeric.scalar.width / 8; - - if (member->op == SpvOpTypeVector) - { - num_scalar_bytes *= member->traits.numeric.vector.component_count; - } - else if (member->op == SpvOpTypeMatrix) - { - num_scalar_bytes *= member->traits.numeric.matrix.column_count; - num_scalar_bytes *= member->traits.numeric.matrix.row_count; - num_scalar_bytes = std::max(num_scalar_bytes, member->traits.numeric.matrix.stride); - } - else if (member->op == SpvOpTypePointer || member->op == SpvOpTypeForwardPointer) - { - num_scalar_bytes = sizeof(uint64_t); - } - else if (member->op == SpvOpTypeArray || member->op == SpvOpTypeRuntimeArray) - { - num_scalar_bytes = std::max(num_scalar_bytes, member->traits.array.stride); - for (uint32_t d = 0; d < member->traits.array.dims_count; ++d) - { - num_scalar_bytes *= member->traits.array.dims[d] == spv::OpTypeRuntimeArray - ? 1 - : member->traits.array.dims[d]; - } - } - offset += num_scalar_bytes; + // align offset, add size + auto layout_info = compute_type_layout(member); + offset = util::aligned_value(offset, layout_info.alignment); + offset += layout_info.size; } } } @@ -471,30 +518,12 @@ bool SpirVParsingUtil::ParseBufferReferences(const uint32_t* const spirv_code, s // offset calculation for (uint32_t m = 0; m < idx; ++m) { - uint32_t num_scalar_bytes = 0; - const auto& member = td->members[m]; - num_scalar_bytes = member.traits.numeric.scalar.width / 8; - - if (member.op == SpvOpTypeVector) - { - num_scalar_bytes *= member.traits.numeric.vector.component_count; - } - else if (member.op == SpvOpTypeMatrix) - { - num_scalar_bytes *= member.traits.numeric.matrix.column_count; - num_scalar_bytes *= member.traits.numeric.matrix.row_count; - num_scalar_bytes = - std::max(num_scalar_bytes, member.traits.numeric.matrix.stride); - } - else if (member.op == SpvOpTypePointer || member.op == SpvOpTypeForwardPointer) - { - num_scalar_bytes = sizeof(uint64_t); - } - else if (member.op == SpvOpTypeArray || member.op == SpvOpTypeRuntimeArray) - { - num_scalar_bytes = std::max(num_scalar_bytes, member.traits.array.stride); - } - buffer_reference_info.buffer_offset += num_scalar_bytes; + auto layout_info = compute_type_layout(&td->members[m]); + + // align offset, add size + buffer_reference_info.buffer_offset = util::aligned_value( + buffer_reference_info.buffer_offset, layout_info.alignment); + buffer_reference_info.buffer_offset += layout_info.size; } td = td->members + idx; @@ -644,52 +673,5 @@ std::vector SpirVParsingUtil::GetBufferRe return ret; } -static VkDescriptorType SpvReflectToVkDescriptorType(SpvReflectDescriptorType type) -{ - switch (type) - { - case SPV_REFLECT_DESCRIPTOR_TYPE_SAMPLER: - return VK_DESCRIPTOR_TYPE_SAMPLER; - - case SPV_REFLECT_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: - return VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; - - case SPV_REFLECT_DESCRIPTOR_TYPE_SAMPLED_IMAGE: - return VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE; - - case SPV_REFLECT_DESCRIPTOR_TYPE_STORAGE_IMAGE: - return VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; - - case SPV_REFLECT_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: - return VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER; - - case SPV_REFLECT_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: - return VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER; - - case SPV_REFLECT_DESCRIPTOR_TYPE_UNIFORM_BUFFER: - return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; - - case SPV_REFLECT_DESCRIPTOR_TYPE_STORAGE_BUFFER: - return VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; - - case SPV_REFLECT_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: - return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC; - - case SPV_REFLECT_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: - return VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC; - - case SPV_REFLECT_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: - return VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT; - - case SPV_REFLECT_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: - return VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR; - - default: - GFXRECON_LOG_WARNING("%s(): Unrecognised SPIRV-Reflect descriptor type"); - assert(0); - return VK_DESCRIPTOR_TYPE_MAX_ENUM; - } -} - GFXRECON_END_NAMESPACE(util) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/util/spirv_parsing_util.h b/third_party/gfxreconstruct/framework/util/spirv_parsing_util.h index a43ca6f21..c58473bb8 100644 --- a/third_party/gfxreconstruct/framework/util/spirv_parsing_util.h +++ b/third_party/gfxreconstruct/framework/util/spirv_parsing_util.h @@ -27,6 +27,7 @@ #include #include #include +#include #include "util/defines.h" #include "encode/vulkan_state_info.h" @@ -53,6 +54,8 @@ class SpirVParsingUtil uint32_t binding = 0; uint32_t buffer_offset = 0; uint32_t array_stride = 0; + + bool operator==(const SpirVParsingUtil::BufferReferenceInfo& other) const = default; }; SpirVParsingUtil() = default; @@ -76,6 +79,14 @@ class SpirVParsingUtil std::map> buffer_reference_map_{}; }; +// used to enable type as key for std::set/map +inline bool operator<(const SpirVParsingUtil::BufferReferenceInfo& lhs, + const SpirVParsingUtil::BufferReferenceInfo& rhs) +{ + return std::make_tuple(lhs.source, lhs.set, lhs.binding, lhs.buffer_offset, lhs.array_stride) < + std::make_tuple(rhs.source, rhs.set, rhs.binding, rhs.buffer_offset, rhs.array_stride); +} + GFXRECON_END_NAMESPACE(util) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/util/strings.cpp b/third_party/gfxreconstruct/framework/util/strings.cpp index 689c32e12..0f681a934 100644 --- a/third_party/gfxreconstruct/framework/util/strings.cpp +++ b/third_party/gfxreconstruct/framework/util/strings.cpp @@ -24,6 +24,8 @@ #include "util/strings.h" #include #include +#include +#include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(util) @@ -84,6 +86,53 @@ std::string_view ViewOfCharArray(const char* array, const size_t capacity) return std::string_view(array, zero_end - array); } +std::string convert_wstring_to_utf8(const std::wstring_view& wstr) +{ +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +#endif + +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + + std::wstring_convert> conv; + +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic pop +#endif + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + return conv.to_bytes(wstr.data(), wstr.data() + wstr.length()); +} + +// Wraps stoul so the caller doesn't have to worry about exceptions +bool StringToU32(const std::string& value_string, uint32_t& value) +{ + bool success = true; + try + { + value = std::stoul(value_string); + } + catch (std::exception&) + { + success = false; + } + return success; +} + +/// Convert string to lowercase +std::string ToLowerCase(const std::string& str) +{ + std::string lower = str; + std::transform(str.begin(), str.end(), lower.begin(), [](char c) { return (char)::tolower(c); }); + return lower; +} + GFXRECON_END_NAMESPACE(strings) GFXRECON_END_NAMESPACE(util) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/util/strings.h b/third_party/gfxreconstruct/framework/util/strings.h index c8cf2a4ee..6e558aa23 100644 --- a/third_party/gfxreconstruct/framework/util/strings.h +++ b/third_party/gfxreconstruct/framework/util/strings.h @@ -54,6 +54,32 @@ void RemoveWhitespace(std::string& str); /// to the given capacity as a protection against ill-formed input. std::string_view ViewOfCharArray(const char* array, const size_t capacity); +/// Convert a std::wstring_view to an UTF-8 encoded std::string +std::string convert_wstring_to_utf8(const std::wstring_view& wstr); + +// Wraps stoul so the caller doesn't have to worry about exceptions +bool StringToU32(const std::string& value_string, uint32_t& value); + +/// Convert string to lowercase +std::string ToLowerCase(const std::string& str); + +/// Case-insensitive hash; use with unordered_map to make case-insensitive map +struct CaseInsensitiveHash +{ + size_t operator()(const std::string& key) const { return std::hash{}(strings::ToLowerCase(key)); } +}; + +/// Case-insensitive equality; use with unordered_map to make case-insensitive map +struct CaseInsensitiveEqual +{ + bool operator()(const std::string& lhs, const std::string& rhs) const + { + return std::equal(lhs.begin(), lhs.end(), rhs.begin(), rhs.end(), [](char a, char b) { + return std::tolower(a) == std::tolower(b); + }); + } +}; + GFXRECON_END_NAMESPACE(strings) GFXRECON_END_NAMESPACE(util) GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/framework/util/test/main.cpp b/third_party/gfxreconstruct/framework/util/test/main.cpp index 3953d746d..8e16943a0 100644 --- a/third_party/gfxreconstruct/framework/util/test/main.cpp +++ b/third_party/gfxreconstruct/framework/util/test/main.cpp @@ -403,3 +403,48 @@ TEST_CASE("UtcString", "[datetime]") gfxrecon::util::Log::Release(); } + +TEST_CASE("ExpandPathVariables", "[strings]") +{ + using namespace gfxrecon::util; + + Log::Init(Log::kDebugSeverity); + + filepath::FileInfo info{}; + + // Empty AppName + REQUIRE(ExpandPathVariables(info, "${AppName}/file.gfxr") == "/file.gfxr"); +#ifdef __ANDROID__ + REQUIRE(ExpandPathVariables(info, "${AppName}/${InternalDataPath}") == "//data/data/"); +#endif + +#define APP_NAME "com.example.app" + const char* app_name = APP_NAME; + strncpy(info.AppName, app_name, std::strlen(app_name)); + + const std::string expected_internal = "/data/data/" APP_NAME; + + // No variables + REQUIRE(ExpandPathVariables(info, "/foo/bar.txt") == "/foo/bar.txt"); + // AppName variable + REQUIRE(ExpandPathVariables(info, "${AppName}/file.gfxr") == APP_NAME "/file.gfxr"); + // Empty path + REQUIRE(ExpandPathVariables(info, "") == ""); + // Multiple occurrences + REQUIRE(ExpandPathVariables(info, "${AppName}/${AppName}/${AppName}") == APP_NAME "/" APP_NAME "/" APP_NAME); + // Unknown variable (should remain unchanged) + REQUIRE(ExpandPathVariables(info, "${UnknownVar}/file.gfxr") == "${UnknownVar}/file.gfxr"); + +#ifdef __ANDROID__ + // InternalDataPath variable + REQUIRE(ExpandPathVariables(info, "${InternalDataPath}/file.gfxr") == expected_internal + "/file.gfxr"); + // Both variables + REQUIRE(ExpandPathVariables(info, "${InternalDataPath}/${AppName}/file.gfxr") == expected_internal + "/" APP_NAME + "/file.gfxr"); + // Mixed known and unknown variables + REQUIRE(ExpandPathVariables(info, "${AppName}/${UnknownVar}/${InternalDataPath}") == + APP_NAME "/${UnknownVar}/" + expected_internal); +#endif + + Log::Release(); +} diff --git a/third_party/gfxreconstruct/framework/util/test/test_spirv_parsing_util.cpp b/third_party/gfxreconstruct/framework/util/test/test_spirv_parsing_util.cpp index ab60a8206..7f18202c5 100644 --- a/third_party/gfxreconstruct/framework/util/test/test_spirv_parsing_util.cpp +++ b/third_party/gfxreconstruct/framework/util/test/test_spirv_parsing_util.cpp @@ -25,598 +25,549 @@ #include "util/logging.h" #include "util/spirv_parsing_util.h" -const uint32_t test_bda_spirv[] = { - 0x07230203, 0x00010300, 0x0008000b, 0x0000064e, 0x00000000, 0x00020011, 0x00000001, 0x00020011, 0x000014e3, - 0x0009000a, 0x5f565053, 0x5f52484b, 0x73796870, 0x6c616369, 0x6f74735f, 0x65676172, 0x6675625f, 0x00726566, - 0x0006000b, 0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, 0x00000000, 0x0003000e, 0x000014e4, 0x00000001, - 0x0006000f, 0x00000005, 0x00000004, 0x6e69616d, 0x00000000, 0x00000121, 0x00060010, 0x00000004, 0x00000011, - 0x00000020, 0x00000001, 0x00000001, 0x00030003, 0x00000002, 0x000001cc, 0x00070004, 0x455f4c47, 0x625f5458, - 0x65666675, 0x65725f72, 0x65726566, 0x0065636e, 0x00080004, 0x455f4c47, 0x625f5458, 0x65666675, 0x65725f72, - 0x65726566, 0x3265636e, 0x00000000, 0x000d0004, 0x455f4c47, 0x735f5458, 0x65646168, 0x78655f72, 0x63696c70, - 0x615f7469, 0x68746972, 0x6974656d, 0x79745f63, 0x5f736570, 0x36746e69, 0x00000034, 0x000d0004, 0x455f4c47, - 0x735f5458, 0x65646168, 0x78655f72, 0x63696c70, 0x615f7469, 0x68746972, 0x6974656d, 0x79745f63, 0x5f736570, - 0x38746e69, 0x00000000, 0x000a0004, 0x475f4c47, 0x4c474f4f, 0x70635f45, 0x74735f70, 0x5f656c79, 0x656e696c, - 0x7269645f, 0x69746365, 0x00006576, 0x00080004, 0x475f4c47, 0x4c474f4f, 0x6e695f45, 0x64756c63, 0x69645f65, - 0x74636572, 0x00657669, 0x00040005, 0x00000004, 0x6e69616d, 0x00000000, 0x00080005, 0x00000121, 0x475f6c67, - 0x61626f6c, 0x766e496c, 0x7461636f, 0x496e6f69, 0x00000044, 0x00070005, 0x0000012c, 0x77617264, 0x6c75635f, - 0x61645f6c, 0x745f6174, 0x00000000, 0x00050006, 0x0000012c, 0x00000000, 0x77656976, 0x00000000, 0x00040006, - 0x0000012c, 0x00000001, 0x00303050, 0x00040006, 0x0000012c, 0x00000002, 0x00313150, 0x00050006, 0x0000012c, - 0x00000003, 0x61656e7a, 0x00000072, 0x00050006, 0x0000012c, 0x00000004, 0x7261667a, 0x00000000, 0x00050006, - 0x0000012c, 0x00000005, 0x73757266, 0x006d7574, 0x00060006, 0x0000012c, 0x00000006, 0x5f6d756e, 0x77617264, - 0x00000073, 0x00060006, 0x0000012c, 0x00000007, 0x5f646f6c, 0x65736162, 0x00000000, 0x00060006, 0x0000012c, - 0x00000008, 0x5f646f6c, 0x70657473, 0x00000000, 0x00070006, 0x0000012c, 0x00000009, 0x5f78616d, 0x5f6d756e, - 0x73646f6c, 0x00000000, 0x00070006, 0x0000012c, 0x0000000a, 0x61727970, 0x5f64696d, 0x657a6973, 0x00000000, - 0x00070006, 0x0000012c, 0x0000000b, 0x73757266, 0x5f6d7574, 0x6c6c7563, 0x00000000, 0x00070006, 0x0000012c, - 0x0000000c, 0x6c63636f, 0x6f697375, 0x75635f6e, 0x00006c6c, 0x00080006, 0x0000012c, 0x0000000d, 0x746e6f63, - 0x75626972, 0x6e6f6974, 0x6c75635f, 0x0000006c, 0x00070006, 0x0000012c, 0x0000000e, 0x70696b73, 0x73656d5f, - 0x74656c68, 0x00000073, 0x00060006, 0x0000012c, 0x0000000f, 0x5f646f6c, 0x62616e65, 0x0064656c, 0x00080006, - 0x0000012c, 0x00000010, 0x6b736174, 0x726f775f, 0x6f72676b, 0x735f7075, 0x00657a69, 0x00060006, 0x0000012c, - 0x00000011, 0x77617264, 0x6e695f73, 0x00000000, 0x00070006, 0x0000012c, 0x00000012, 0x6873656d, 0x6172645f, - 0x695f7377, 0x0000006e, 0x00070006, 0x0000012c, 0x00000013, 0x6873656d, 0x746e655f, 0x73656972, 0x006e695f, - 0x00070006, 0x0000012c, 0x00000014, 0x77617264, 0x756f5f73, 0x72705f74, 0x00000065, 0x00070006, 0x0000012c, - 0x00000015, 0x77617264, 0x756f5f73, 0x6f705f74, 0x00007473, 0x00070006, 0x0000012c, 0x00000016, 0x77617264, - 0x756f635f, 0x705f746e, 0x00006572, 0x00070006, 0x0000012c, 0x00000017, 0x77617264, 0x756f635f, 0x705f746e, - 0x0074736f, 0x00060006, 0x0000012c, 0x00000018, 0x77617264, 0x7365725f, 0x00746c75, 0x00090005, 0x0000012d, - 0x65646e69, 0x5f646578, 0x69646e69, 0x74636572, 0x6d6f635f, 0x646e616d, 0x0000745f, 0x00060006, 0x0000012d, - 0x00000000, 0x65646e69, 0x756f4378, 0x0000746e, 0x00070006, 0x0000012d, 0x00000001, 0x74736e69, 0x65636e61, - 0x6e756f43, 0x00000074, 0x00060006, 0x0000012d, 0x00000002, 0x73726966, 0x646e4974, 0x00007865, 0x00070006, - 0x0000012d, 0x00000003, 0x74726576, 0x664f7865, 0x74657366, 0x00000000, 0x00070006, 0x0000012d, 0x00000004, - 0x73726966, 0x736e4974, 0x636e6174, 0x00000065, 0x00060006, 0x0000012d, 0x00000005, 0x756f7267, 0x756f4370, - 0x0058746e, 0x00060006, 0x0000012d, 0x00000006, 0x756f7267, 0x756f4370, 0x0059746e, 0x00060006, 0x0000012d, - 0x00000007, 0x756f7267, 0x756f4370, 0x005a746e, 0x00050006, 0x0000012d, 0x00000008, 0x69736976, 0x00656c62, - 0x00070006, 0x0000012d, 0x00000009, 0x6574616c, 0x7369765f, 0x656c6269, 0x00000000, 0x00070006, 0x0000012d, - 0x0000000a, 0x656a626f, 0x695f7463, 0x7865646e, 0x00000000, 0x00070006, 0x0000012d, 0x0000000b, 0x65736162, - 0x73656d5f, 0x74656c68, 0x00000000, 0x00070006, 0x0000012d, 0x0000000c, 0x5f6d756e, 0x6873656d, 0x7374656c, - 0x00000000, 0x000a0006, 0x0000012d, 0x0000000d, 0x6873656d, 0x5f74656c, 0x69736976, 0x696c6962, 0x695f7974, - 0x7865646e, 0x00000000, 0x00080006, 0x0000012d, 0x0000000e, 0x6e756f63, 0x75625f74, 0x72656666, 0x66666f5f, - 0x00746573, 0x00080006, 0x0000012d, 0x0000000f, 0x73726966, 0x72645f74, 0x695f7761, 0x7865646e, 0x00000000, - 0x00060005, 0x0000012f, 0x77617244, 0x66667542, 0x74507265, 0x00000072, 0x00040006, 0x0000012f, 0x00000000, - 0x00000076, 0x00050005, 0x00000130, 0x6e617274, 0x726f6673, 0x00745f6d, 0x00070006, 0x00000130, 0x00000000, - 0x6e617274, 0x74616c73, 0x5f6e6f69, 0x00000078, 0x00070006, 0x00000130, 0x00000001, 0x6e617274, 0x74616c73, - 0x5f6e6f69, 0x00000079, 0x00070006, 0x00000130, 0x00000002, 0x6e617274, 0x74616c73, 0x5f6e6f69, 0x0000007a, - 0x00060006, 0x00000130, 0x00000003, 0x61746f72, 0x6e6f6974, 0x0000785f, 0x00060006, 0x00000130, 0x00000004, - 0x61746f72, 0x6e6f6974, 0x0000795f, 0x00060006, 0x00000130, 0x00000005, 0x61746f72, 0x6e6f6974, 0x00007a5f, - 0x00060006, 0x00000130, 0x00000006, 0x61746f72, 0x6e6f6974, 0x0000775f, 0x00050006, 0x00000130, 0x00000007, - 0x6c616373, 0x00785f65, 0x00050006, 0x00000130, 0x00000008, 0x6c616373, 0x00795f65, 0x00050006, 0x00000130, - 0x00000009, 0x6c616373, 0x007a5f65, 0x00060005, 0x00000131, 0x7274616d, 0x735f7869, 0x63757274, 0x00745f74, - 0x00060006, 0x00000131, 0x00000000, 0x6a6f7270, 0x69746365, 0x00006e6f, 0x00050006, 0x00000131, 0x00000001, - 0x74786574, 0x00657275, 0x00060006, 0x00000131, 0x00000002, 0x6e617274, 0x726f6673, 0x0000006d, 0x00050005, - 0x00000132, 0x6873656d, 0x6172645f, 0x00745f77, 0x00080006, 0x00000132, 0x00000000, 0x72727563, 0x5f746e65, - 0x7274616d, 0x73656369, 0x00000000, 0x00070006, 0x00000132, 0x00000001, 0x7473616c, 0x74616d5f, 0x65636972, - 0x00000073, 0x00060006, 0x00000132, 0x00000002, 0x6873656d, 0x646e695f, 0x00007865, 0x00070006, 0x00000132, - 0x00000003, 0x6574616d, 0x6c616972, 0x646e695f, 0x00007865, 0x00070005, 0x00000134, 0x6873654d, 0x77617244, - 0x66667542, 0x74507265, 0x00000072, 0x00040006, 0x00000134, 0x00000000, 0x00000076, 0x00040005, 0x00000135, - 0x5f646f6c, 0x00000074, 0x00060006, 0x00000135, 0x00000000, 0x65736162, 0x646e695f, 0x00007865, 0x00060006, - 0x00000135, 0x00000001, 0x5f6d756e, 0x69646e69, 0x00736563, 0x00070006, 0x00000135, 0x00000002, 0x65736162, - 0x73656d5f, 0x74656c68, 0x00000000, 0x00070006, 0x00000135, 0x00000003, 0x5f6d756e, 0x6873656d, 0x7374656c, - 0x00000000, 0x00060005, 0x00000138, 0x6873656d, 0x746e655f, 0x745f7972, 0x00000000, 0x00050006, 0x00000138, - 0x00000000, 0x746e6563, 0x00007265, 0x00050006, 0x00000138, 0x00000001, 0x69646172, 0x00007375, 0x00070006, - 0x00000138, 0x00000002, 0x74726576, 0x6f5f7865, 0x65736666, 0x00000074, 0x00070006, 0x00000138, 0x00000003, - 0x74726576, 0x635f7865, 0x746e756f, 0x00000000, 0x00060006, 0x00000138, 0x00000004, 0x5f646f6c, 0x6e756f63, - 0x00000074, 0x00050006, 0x00000138, 0x00000005, 0x73646f6c, 0x00000000, 0x00070005, 0x0000013a, 0x6873654d, - 0x72746e45, 0x66754279, 0x50726566, 0x00007274, 0x00040006, 0x0000013a, 0x00000000, 0x00000076, 0x00070005, - 0x0000013c, 0x77617244, 0x6e756f43, 0x66754274, 0x50726566, 0x00007274, 0x00040006, 0x0000013c, 0x00000000, - 0x00000076, 0x00070005, 0x0000013d, 0x77617264, 0x6c75635f, 0x65725f6c, 0x746c7573, 0x0000745f, 0x00060006, - 0x0000013d, 0x00000000, 0x5f6d756e, 0x77617264, 0x00000073, 0x00080006, 0x0000013d, 0x00000001, 0x5f6d756e, - 0x73757266, 0x5f6d7574, 0x6c6c7563, 0x00006465, 0x00090006, 0x0000013d, 0x00000002, 0x5f6d756e, 0x6c63636f, - 0x6f697375, 0x75635f6e, 0x64656c6c, 0x00000000, 0x00090006, 0x0000013d, 0x00000003, 0x5f6d756e, 0x746e6f63, - 0x75626972, 0x6e6f6974, 0x6c75635f, 0x0064656c, 0x00070006, 0x0000013d, 0x00000004, 0x5f6d756e, 0x61697274, - 0x656c676e, 0x00000073, 0x00070006, 0x0000013d, 0x00000005, 0x5f6d756e, 0x6873656d, 0x7374656c, 0x00000000, - 0x00060005, 0x0000013e, 0x77617244, 0x75736552, 0x7450746c, 0x00000072, 0x00040006, 0x0000013e, 0x00000000, - 0x00000076, 0x00060005, 0x0000013f, 0x6c6c7563, 0x61746164, 0x6f62755f, 0x0000745f, 0x00060006, 0x0000013f, - 0x00000000, 0x6c6c7563, 0x7461645f, 0x00000061, 0x00030005, 0x00000141, 0x00000000, 0x00040005, 0x000001ca, - 0x5f646f6c, 0x00000074, 0x00060006, 0x000001ca, 0x00000000, 0x65736162, 0x646e695f, 0x00007865, 0x00060006, - 0x000001ca, 0x00000001, 0x5f6d756e, 0x69646e69, 0x00736563, 0x00070006, 0x000001ca, 0x00000002, 0x65736162, - 0x73656d5f, 0x74656c68, 0x00000000, 0x00070006, 0x000001ca, 0x00000003, 0x5f6d756e, 0x6873656d, 0x7374656c, - 0x00000000, 0x00040005, 0x00000236, 0x746e6563, 0x00007265, 0x00040005, 0x00000256, 0x62626161, 0x00000000, - 0x00040005, 0x00000257, 0x61726170, 0x0000006d, 0x00050005, 0x00000268, 0x65726373, 0x615f6e65, 0x00616572, - 0x00040005, 0x00000276, 0x61726170, 0x0000006d, 0x00040005, 0x0000027a, 0x61726170, 0x0000006d, 0x00060005, - 0x000002d1, 0x65645f75, 0x5f687470, 0x61727970, 0x0064696d, 0x00040047, 0x00000121, 0x0000000b, 0x0000001c, - 0x00040048, 0x0000012c, 0x00000000, 0x00000005, 0x00050048, 0x0000012c, 0x00000000, 0x00000007, 0x00000010, - 0x00050048, 0x0000012c, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x0000012c, 0x00000001, 0x00000023, - 0x00000040, 0x00050048, 0x0000012c, 0x00000002, 0x00000023, 0x00000044, 0x00050048, 0x0000012c, 0x00000003, - 0x00000023, 0x00000048, 0x00050048, 0x0000012c, 0x00000004, 0x00000023, 0x0000004c, 0x00050048, 0x0000012c, - 0x00000005, 0x00000023, 0x00000050, 0x00050048, 0x0000012c, 0x00000006, 0x00000023, 0x00000060, 0x00050048, - 0x0000012c, 0x00000007, 0x00000023, 0x00000064, 0x00050048, 0x0000012c, 0x00000008, 0x00000023, 0x00000068, - 0x00050048, 0x0000012c, 0x00000009, 0x00000023, 0x0000006c, 0x00050048, 0x0000012c, 0x0000000a, 0x00000023, - 0x00000070, 0x00050048, 0x0000012c, 0x0000000b, 0x00000023, 0x00000078, 0x00050048, 0x0000012c, 0x0000000c, - 0x00000023, 0x0000007c, 0x00050048, 0x0000012c, 0x0000000d, 0x00000023, 0x00000080, 0x00050048, 0x0000012c, - 0x0000000e, 0x00000023, 0x00000084, 0x00050048, 0x0000012c, 0x0000000f, 0x00000023, 0x00000088, 0x00050048, - 0x0000012c, 0x00000010, 0x00000023, 0x0000008c, 0x00050048, 0x0000012c, 0x00000011, 0x00000023, 0x00000090, - 0x00050048, 0x0000012c, 0x00000012, 0x00000023, 0x00000098, 0x00050048, 0x0000012c, 0x00000013, 0x00000023, - 0x000000a0, 0x00050048, 0x0000012c, 0x00000014, 0x00000023, 0x000000a8, 0x00050048, 0x0000012c, 0x00000015, - 0x00000023, 0x000000b0, 0x00050048, 0x0000012c, 0x00000016, 0x00000023, 0x000000b8, 0x00050048, 0x0000012c, - 0x00000017, 0x00000023, 0x000000c0, 0x00050048, 0x0000012c, 0x00000018, 0x00000023, 0x000000c8, 0x00050048, - 0x0000012d, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x0000012d, 0x00000001, 0x00000023, 0x00000004, - 0x00050048, 0x0000012d, 0x00000002, 0x00000023, 0x00000008, 0x00050048, 0x0000012d, 0x00000003, 0x00000023, - 0x0000000c, 0x00050048, 0x0000012d, 0x00000004, 0x00000023, 0x00000010, 0x00050048, 0x0000012d, 0x00000005, - 0x00000023, 0x00000014, 0x00050048, 0x0000012d, 0x00000006, 0x00000023, 0x00000018, 0x00050048, 0x0000012d, - 0x00000007, 0x00000023, 0x0000001c, 0x00050048, 0x0000012d, 0x00000008, 0x00000023, 0x00000020, 0x00050048, - 0x0000012d, 0x00000009, 0x00000023, 0x00000024, 0x00050048, 0x0000012d, 0x0000000a, 0x00000023, 0x00000028, - 0x00050048, 0x0000012d, 0x0000000b, 0x00000023, 0x0000002c, 0x00050048, 0x0000012d, 0x0000000c, 0x00000023, - 0x00000030, 0x00050048, 0x0000012d, 0x0000000d, 0x00000023, 0x00000034, 0x00050048, 0x0000012d, 0x0000000e, - 0x00000023, 0x00000038, 0x00050048, 0x0000012d, 0x0000000f, 0x00000023, 0x0000003c, 0x00040047, 0x0000012e, - 0x00000006, 0x00000040, 0x00030047, 0x0000012f, 0x00000002, 0x00050048, 0x0000012f, 0x00000000, 0x00000023, - 0x00000000, 0x00050048, 0x00000130, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000130, 0x00000001, - 0x00000023, 0x00000004, 0x00050048, 0x00000130, 0x00000002, 0x00000023, 0x00000008, 0x00050048, 0x00000130, - 0x00000003, 0x00000023, 0x0000000c, 0x00050048, 0x00000130, 0x00000004, 0x00000023, 0x00000010, 0x00050048, - 0x00000130, 0x00000005, 0x00000023, 0x00000014, 0x00050048, 0x00000130, 0x00000006, 0x00000023, 0x00000018, - 0x00050048, 0x00000130, 0x00000007, 0x00000023, 0x0000001c, 0x00050048, 0x00000130, 0x00000008, 0x00000023, - 0x00000020, 0x00050048, 0x00000130, 0x00000009, 0x00000023, 0x00000024, 0x00040048, 0x00000131, 0x00000000, - 0x00000005, 0x00050048, 0x00000131, 0x00000000, 0x00000007, 0x00000010, 0x00050048, 0x00000131, 0x00000000, - 0x00000023, 0x00000000, 0x00040048, 0x00000131, 0x00000001, 0x00000005, 0x00050048, 0x00000131, 0x00000001, - 0x00000007, 0x00000010, 0x00050048, 0x00000131, 0x00000001, 0x00000023, 0x00000040, 0x00050048, 0x00000131, - 0x00000002, 0x00000023, 0x00000080, 0x00050048, 0x00000132, 0x00000000, 0x00000023, 0x00000000, 0x00050048, - 0x00000132, 0x00000001, 0x00000023, 0x000000b0, 0x00050048, 0x00000132, 0x00000002, 0x00000023, 0x00000160, - 0x00050048, 0x00000132, 0x00000003, 0x00000023, 0x00000164, 0x00040047, 0x00000133, 0x00000006, 0x00000170, - 0x00030047, 0x00000134, 0x00000002, 0x00040048, 0x00000134, 0x00000000, 0x00000018, 0x00050048, 0x00000134, - 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000135, 0x00000000, 0x00000023, 0x00000000, 0x00050048, - 0x00000135, 0x00000001, 0x00000023, 0x00000004, 0x00050048, 0x00000135, 0x00000002, 0x00000023, 0x00000008, - 0x00050048, 0x00000135, 0x00000003, 0x00000023, 0x0000000c, 0x00040047, 0x00000137, 0x00000006, 0x00000010, - 0x00050048, 0x00000138, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000138, 0x00000001, 0x00000023, - 0x0000000c, 0x00050048, 0x00000138, 0x00000002, 0x00000023, 0x00000010, 0x00050048, 0x00000138, 0x00000003, - 0x00000023, 0x00000014, 0x00050048, 0x00000138, 0x00000004, 0x00000023, 0x00000018, 0x00050048, 0x00000138, - 0x00000005, 0x00000023, 0x0000001c, 0x00040047, 0x00000139, 0x00000006, 0x000000a0, 0x00030047, 0x0000013a, - 0x00000002, 0x00040048, 0x0000013a, 0x00000000, 0x00000018, 0x00050048, 0x0000013a, 0x00000000, 0x00000023, - 0x00000000, 0x00040047, 0x0000013b, 0x00000006, 0x00000004, 0x00030047, 0x0000013c, 0x00000002, 0x00050048, - 0x0000013c, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x0000013d, 0x00000000, 0x00000023, 0x00000000, - 0x00050048, 0x0000013d, 0x00000001, 0x00000023, 0x00000004, 0x00050048, 0x0000013d, 0x00000002, 0x00000023, - 0x00000008, 0x00050048, 0x0000013d, 0x00000003, 0x00000023, 0x0000000c, 0x00050048, 0x0000013d, 0x00000004, - 0x00000023, 0x00000010, 0x00050048, 0x0000013d, 0x00000005, 0x00000023, 0x00000014, 0x00030047, 0x0000013e, - 0x00000002, 0x00050048, 0x0000013e, 0x00000000, 0x00000023, 0x00000000, 0x00030047, 0x0000013f, 0x00000002, - 0x00050048, 0x0000013f, 0x00000000, 0x00000023, 0x00000000, 0x00040047, 0x00000141, 0x00000021, 0x00000001, - 0x00040047, 0x00000141, 0x00000022, 0x00000000, 0x00040047, 0x000002d1, 0x00000021, 0x00000000, 0x00040047, - 0x000002d1, 0x00000022, 0x00000000, 0x00040047, 0x00000414, 0x0000000b, 0x00000019, 0x00020013, 0x00000002, - 0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040017, 0x00000007, 0x00000006, - 0x00000004, 0x00040017, 0x00000008, 0x00000006, 0x00000003, 0x00040020, 0x00000014, 0x00000007, 0x00000008, - 0x00040020, 0x00000015, 0x00000007, 0x00000006, 0x00040020, 0x00000016, 0x00000007, 0x00000007, 0x00020014, - 0x00000017, 0x00040015, 0x00000027, 0x00000020, 0x00000000, 0x00040020, 0x00000028, 0x00000007, 0x00000027, - 0x0004002b, 0x00000006, 0x0000002e, 0x40000000, 0x0004002b, 0x00000027, 0x00000032, 0x00000003, 0x00040015, - 0x0000003c, 0x00000020, 0x00000001, 0x0004002b, 0x0000003c, 0x0000003d, 0x00000003, 0x0004002b, 0x0000003c, - 0x0000003f, 0x00000004, 0x0004002b, 0x0000003c, 0x00000041, 0x00000005, 0x0004002b, 0x0000003c, 0x00000043, - 0x00000006, 0x0004002b, 0x0000003c, 0x00000047, 0x00000007, 0x0004002b, 0x0000003c, 0x00000049, 0x00000008, - 0x0004002b, 0x0000003c, 0x0000004b, 0x00000009, 0x0004002b, 0x0000003c, 0x00000052, 0x00000000, 0x0004002b, - 0x0000003c, 0x00000054, 0x00000001, 0x0004002b, 0x0000003c, 0x00000056, 0x00000002, 0x0004002b, 0x00000027, - 0x0000005c, 0x00000002, 0x0004002b, 0x00000027, 0x0000005f, 0x00000001, 0x0004002b, 0x00000027, 0x00000063, - 0x00000000, 0x0003002a, 0x00000017, 0x0000008c, 0x00040017, 0x0000008e, 0x00000006, 0x00000002, 0x00040020, - 0x0000008f, 0x00000007, 0x0000008e, 0x00040018, 0x000000ac, 0x0000008e, 0x00000002, 0x0004002b, 0x00000006, - 0x000000ad, 0x3f800000, 0x0004002b, 0x00000006, 0x0000010d, 0x3f000000, 0x0004002b, 0x00000006, 0x0000010e, - 0xbf000000, 0x0007002c, 0x00000007, 0x0000010f, 0x0000010d, 0x0000010e, 0x0000010d, 0x0000010e, 0x0007002c, - 0x00000007, 0x00000111, 0x0000010d, 0x0000010d, 0x0000010d, 0x0000010d, 0x00030029, 0x00000017, 0x00000113, - 0x00040017, 0x0000011f, 0x00000027, 0x00000003, 0x00040020, 0x00000120, 0x00000001, 0x0000011f, 0x0004003b, - 0x00000120, 0x00000121, 0x00000001, 0x00040020, 0x00000122, 0x00000001, 0x00000027, 0x00040018, 0x00000126, - 0x00000007, 0x00000004, 0x00030027, 0x00000127, 0x000014e5, 0x00030027, 0x00000128, 0x000014e5, 0x00030027, - 0x00000129, 0x000014e5, 0x00030027, 0x0000012a, 0x000014e5, 0x00030027, 0x0000012b, 0x000014e5, 0x001b001e, - 0x0000012c, 0x00000126, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000007, 0x00000027, 0x00000006, - 0x00000006, 0x00000027, 0x0000008e, 0x00000027, 0x00000027, 0x00000027, 0x00000027, 0x00000027, 0x00000027, - 0x00000127, 0x00000128, 0x00000129, 0x00000127, 0x00000127, 0x0000012a, 0x0000012a, 0x0000012b, 0x0012001e, - 0x0000012d, 0x00000027, 0x00000027, 0x00000027, 0x0000003c, 0x00000027, 0x00000027, 0x00000027, 0x00000027, - 0x00000027, 0x00000027, 0x00000027, 0x00000027, 0x00000027, 0x00000027, 0x00000027, 0x00000027, 0x0003001d, - 0x0000012e, 0x0000012d, 0x0003001e, 0x0000012f, 0x0000012e, 0x00040020, 0x00000127, 0x000014e5, 0x0000012f, - 0x000c001e, 0x00000130, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, - 0x00000006, 0x00000006, 0x00000006, 0x0005001e, 0x00000131, 0x00000126, 0x00000126, 0x00000130, 0x0006001e, - 0x00000132, 0x00000131, 0x00000131, 0x00000027, 0x00000027, 0x0003001d, 0x00000133, 0x00000132, 0x0003001e, - 0x00000134, 0x00000133, 0x00040020, 0x00000128, 0x000014e5, 0x00000134, 0x0006001e, 0x00000135, 0x00000027, - 0x00000027, 0x00000027, 0x00000027, 0x0004002b, 0x00000027, 0x00000136, 0x00000008, 0x0004001c, 0x00000137, - 0x00000135, 0x00000136, 0x0008001e, 0x00000138, 0x00000008, 0x00000006, 0x00000027, 0x00000027, 0x00000027, - 0x00000137, 0x0003001d, 0x00000139, 0x00000138, 0x0003001e, 0x0000013a, 0x00000139, 0x00040020, 0x00000129, - 0x000014e5, 0x0000013a, 0x0003001d, 0x0000013b, 0x00000027, 0x0003001e, 0x0000013c, 0x0000013b, 0x00040020, - 0x0000012a, 0x000014e5, 0x0000013c, 0x0008001e, 0x0000013d, 0x00000027, 0x00000027, 0x00000027, 0x00000027, - 0x00000027, 0x00000027, 0x0003001e, 0x0000013e, 0x0000013d, 0x00040020, 0x0000012b, 0x000014e5, 0x0000013e, - 0x0003001e, 0x0000013f, 0x0000012c, 0x00040020, 0x00000140, 0x00000002, 0x0000013f, 0x0004003b, 0x00000140, - 0x00000141, 0x00000002, 0x00040020, 0x00000142, 0x00000002, 0x00000027, 0x0004002b, 0x0000003c, 0x0000014c, - 0x00000011, 0x00040020, 0x0000014d, 0x00000002, 0x00000127, 0x00040020, 0x00000151, 0x000014e5, 0x0000012d, - 0x0004002b, 0x0000003c, 0x0000016d, 0x0000000a, 0x0004002b, 0x0000003c, 0x00000170, 0x0000000b, 0x0004002b, - 0x0000003c, 0x00000173, 0x0000000c, 0x0004002b, 0x0000003c, 0x00000176, 0x0000000d, 0x0004002b, 0x0000003c, - 0x00000179, 0x0000000e, 0x0004002b, 0x0000003c, 0x0000017c, 0x0000000f, 0x0004002b, 0x0000003c, 0x00000182, - 0x00000012, 0x00040020, 0x00000183, 0x00000002, 0x00000128, 0x00040020, 0x00000188, 0x000014e5, 0x00000132, - 0x0006001e, 0x000001ca, 0x00000027, 0x00000027, 0x00000027, 0x00000027, 0x0004001c, 0x000001cb, 0x000001ca, - 0x00000136, 0x0004002b, 0x0000003c, 0x000001cf, 0x00000013, 0x00040020, 0x000001d0, 0x00000002, 0x00000129, - 0x00040020, 0x000001d5, 0x000014e5, 0x00000138, 0x00040020, 0x000001e3, 0x00000007, 0x000001cb, 0x00040020, - 0x000001e6, 0x00000007, 0x000001ca, 0x00040020, 0x00000237, 0x00000002, 0x00000126, 0x00040020, 0x0000025c, - 0x00000002, 0x00000006, 0x00040020, 0x0000027b, 0x00000002, 0x00000007, 0x0004002b, 0x0000003c, 0x00000285, - 0x00000018, 0x00040020, 0x00000286, 0x00000002, 0x0000012b, 0x00040020, 0x00000289, 0x000014e5, 0x00000027, - 0x00090019, 0x000002ce, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, - 0x0003001b, 0x000002cf, 0x000002ce, 0x00040020, 0x000002d0, 0x00000000, 0x000002cf, 0x0004003b, 0x000002d0, - 0x000002d1, 0x00000000, 0x0004002b, 0x0000003c, 0x0000033d, 0x00000010, 0x0004002b, 0x00000027, 0x00000358, - 0x00000020, 0x0004002b, 0x0000003c, 0x0000037d, 0x00000016, 0x00040020, 0x0000037e, 0x00000002, 0x0000012a, - 0x0004002b, 0x0000003c, 0x00000385, 0x00000014, 0x00040020, 0x00000395, 0x000014e5, 0x0000003c, 0x0004002b, - 0x0000003c, 0x000003d6, 0x00000017, 0x0004002b, 0x0000003c, 0x000003dd, 0x00000015, 0x0006002c, 0x0000011f, - 0x00000414, 0x00000358, 0x0000005f, 0x0000005f, 0x0003002e, 0x00000008, 0x00000570, 0x0004002b, 0x00000027, - 0x00000571, 0x0000001f, 0x00030001, 0x00000007, 0x00000574, 0x00050036, 0x00000002, 0x00000004, 0x00000000, - 0x00000003, 0x000200f8, 0x00000005, 0x0004003b, 0x000001e3, 0x0000053d, 0x00000007, 0x0004003b, 0x0000008f, - 0x00000441, 0x00000007, 0x0004003b, 0x0000008f, 0x00000442, 0x00000007, 0x0004003b, 0x0000008f, 0x00000443, - 0x00000007, 0x0004003b, 0x0000008f, 0x00000445, 0x00000007, 0x0004003b, 0x0000008f, 0x00000446, 0x00000007, - 0x0004003b, 0x0000008f, 0x00000447, 0x00000007, 0x0004003b, 0x00000014, 0x00000236, 0x00000007, 0x0004003b, - 0x00000016, 0x00000256, 0x00000007, 0x0004003b, 0x00000014, 0x00000257, 0x00000007, 0x0004003b, 0x0000008f, - 0x00000268, 0x00000007, 0x0004003b, 0x00000014, 0x00000276, 0x00000007, 0x0004003b, 0x00000016, 0x0000027a, - 0x00000007, 0x000300f7, 0x00000415, 0x00000000, 0x000300fb, 0x00000063, 0x00000416, 0x000200f8, 0x00000416, - 0x00050041, 0x00000122, 0x00000123, 0x00000121, 0x00000063, 0x0004003d, 0x00000027, 0x00000124, 0x00000123, - 0x00060041, 0x00000142, 0x00000143, 0x00000141, 0x00000052, 0x00000043, 0x0004003d, 0x00000027, 0x00000144, - 0x00000143, 0x000500ae, 0x00000017, 0x00000145, 0x00000124, 0x00000144, 0x000300f7, 0x00000147, 0x00000000, - 0x000400fa, 0x00000145, 0x00000146, 0x00000147, 0x000200f8, 0x00000146, 0x000200f9, 0x00000415, 0x000200f8, - 0x00000147, 0x00060041, 0x0000014d, 0x0000014e, 0x00000141, 0x00000052, 0x0000014c, 0x0004003d, 0x00000127, - 0x0000014f, 0x0000014e, 0x00060041, 0x00000151, 0x00000152, 0x0000014f, 0x00000052, 0x00000124, 0x0006003d, - 0x0000012d, 0x00000153, 0x00000152, 0x00000002, 0x00000010, 0x00050051, 0x00000027, 0x00000154, 0x00000153, - 0x00000000, 0x00050051, 0x00000027, 0x00000156, 0x00000153, 0x00000001, 0x00050051, 0x00000027, 0x00000158, - 0x00000153, 0x00000002, 0x00050051, 0x0000003c, 0x0000015a, 0x00000153, 0x00000003, 0x00050051, 0x00000027, - 0x0000015d, 0x00000153, 0x00000004, 0x00050051, 0x00000027, 0x0000015f, 0x00000153, 0x00000005, 0x00050051, - 0x00000027, 0x00000161, 0x00000153, 0x00000006, 0x00050051, 0x00000027, 0x00000163, 0x00000153, 0x00000007, - 0x00050051, 0x00000027, 0x00000165, 0x00000153, 0x00000008, 0x000500ab, 0x00000017, 0x00000166, 0x00000165, - 0x00000063, 0x00050051, 0x00000027, 0x00000169, 0x00000153, 0x00000009, 0x000500ab, 0x00000017, 0x0000016a, - 0x00000169, 0x00000063, 0x00050051, 0x00000027, 0x0000016c, 0x00000153, 0x0000000a, 0x00050051, 0x00000027, - 0x0000016f, 0x00000153, 0x0000000b, 0x00050051, 0x00000027, 0x00000172, 0x00000153, 0x0000000c, 0x00050051, - 0x00000027, 0x00000175, 0x00000153, 0x0000000d, 0x00050051, 0x00000027, 0x00000178, 0x00000153, 0x0000000e, - 0x00050051, 0x00000027, 0x0000017b, 0x00000153, 0x0000000f, 0x00060041, 0x00000183, 0x00000184, 0x00000141, - 0x00000052, 0x00000182, 0x0004003d, 0x00000128, 0x00000185, 0x00000184, 0x00060041, 0x00000188, 0x00000189, - 0x00000185, 0x00000052, 0x0000016c, 0x0006003d, 0x00000132, 0x0000018a, 0x00000189, 0x00000002, 0x00000010, - 0x00050051, 0x00000131, 0x0000018b, 0x0000018a, 0x00000000, 0x00050051, 0x00000130, 0x00000193, 0x0000018b, - 0x00000002, 0x00050051, 0x00000006, 0x00000196, 0x00000193, 0x00000000, 0x00050051, 0x00000006, 0x00000198, - 0x00000193, 0x00000001, 0x00050051, 0x00000006, 0x0000019a, 0x00000193, 0x00000002, 0x00050051, 0x00000006, - 0x0000019c, 0x00000193, 0x00000003, 0x00050051, 0x00000006, 0x0000019e, 0x00000193, 0x00000004, 0x00050051, - 0x00000006, 0x000001a0, 0x00000193, 0x00000005, 0x00050051, 0x00000006, 0x000001a2, 0x00000193, 0x00000006, - 0x00050051, 0x00000006, 0x000001a4, 0x00000193, 0x00000007, 0x00050051, 0x00000006, 0x000001a6, 0x00000193, - 0x00000008, 0x00050051, 0x00000006, 0x000001a8, 0x00000193, 0x00000009, 0x00050051, 0x00000027, 0x000001c6, - 0x0000018a, 0x00000002, 0x00060041, 0x000001d0, 0x000001d1, 0x00000141, 0x00000052, 0x000001cf, 0x0004003d, - 0x00000129, 0x000001d2, 0x000001d1, 0x00060041, 0x000001d5, 0x000001d6, 0x000001d2, 0x00000052, 0x000001c6, - 0x0006003d, 0x00000138, 0x000001d7, 0x000001d6, 0x00000002, 0x00000010, 0x00050051, 0x00000008, 0x000001d8, - 0x000001d7, 0x00000000, 0x00050051, 0x00000006, 0x000001da, 0x000001d7, 0x00000001, 0x00050051, 0x00000027, - 0x000001dc, 0x000001d7, 0x00000002, 0x00050051, 0x00000027, 0x000001e0, 0x000001d7, 0x00000004, 0x00050051, - 0x00000137, 0x000001e2, 0x000001d7, 0x00000005, 0x00050051, 0x00000135, 0x000001e5, 0x000001e2, 0x00000000, - 0x00050041, 0x000001e6, 0x000001e7, 0x0000053d, 0x00000052, 0x00050051, 0x00000027, 0x000001e8, 0x000001e5, - 0x00000000, 0x00050041, 0x00000028, 0x000001e9, 0x000001e7, 0x00000052, 0x0003003e, 0x000001e9, 0x000001e8, - 0x00050051, 0x00000027, 0x000001ea, 0x000001e5, 0x00000001, 0x00050041, 0x00000028, 0x000001eb, 0x000001e7, - 0x00000054, 0x0003003e, 0x000001eb, 0x000001ea, 0x00050051, 0x00000027, 0x000001ec, 0x000001e5, 0x00000002, - 0x00050041, 0x00000028, 0x000001ed, 0x000001e7, 0x00000056, 0x0003003e, 0x000001ed, 0x000001ec, 0x00050051, - 0x00000027, 0x000001ee, 0x000001e5, 0x00000003, 0x00050041, 0x00000028, 0x000001ef, 0x000001e7, 0x0000003d, - 0x0003003e, 0x000001ef, 0x000001ee, 0x00050051, 0x00000135, 0x000001f0, 0x000001e2, 0x00000001, 0x00050041, - 0x000001e6, 0x000001f1, 0x0000053d, 0x00000054, 0x00050051, 0x00000027, 0x000001f2, 0x000001f0, 0x00000000, - 0x00050041, 0x00000028, 0x000001f3, 0x000001f1, 0x00000052, 0x0003003e, 0x000001f3, 0x000001f2, 0x00050051, - 0x00000027, 0x000001f4, 0x000001f0, 0x00000001, 0x00050041, 0x00000028, 0x000001f5, 0x000001f1, 0x00000054, - 0x0003003e, 0x000001f5, 0x000001f4, 0x00050051, 0x00000027, 0x000001f6, 0x000001f0, 0x00000002, 0x00050041, - 0x00000028, 0x000001f7, 0x000001f1, 0x00000056, 0x0003003e, 0x000001f7, 0x000001f6, 0x00050051, 0x00000027, - 0x000001f8, 0x000001f0, 0x00000003, 0x00050041, 0x00000028, 0x000001f9, 0x000001f1, 0x0000003d, 0x0003003e, - 0x000001f9, 0x000001f8, 0x00050051, 0x00000135, 0x000001fa, 0x000001e2, 0x00000002, 0x00050041, 0x000001e6, - 0x000001fb, 0x0000053d, 0x00000056, 0x00050051, 0x00000027, 0x000001fc, 0x000001fa, 0x00000000, 0x00050041, - 0x00000028, 0x000001fd, 0x000001fb, 0x00000052, 0x0003003e, 0x000001fd, 0x000001fc, 0x00050051, 0x00000027, - 0x000001fe, 0x000001fa, 0x00000001, 0x00050041, 0x00000028, 0x000001ff, 0x000001fb, 0x00000054, 0x0003003e, - 0x000001ff, 0x000001fe, 0x00050051, 0x00000027, 0x00000200, 0x000001fa, 0x00000002, 0x00050041, 0x00000028, - 0x00000201, 0x000001fb, 0x00000056, 0x0003003e, 0x00000201, 0x00000200, 0x00050051, 0x00000027, 0x00000202, - 0x000001fa, 0x00000003, 0x00050041, 0x00000028, 0x00000203, 0x000001fb, 0x0000003d, 0x0003003e, 0x00000203, - 0x00000202, 0x00050051, 0x00000135, 0x00000204, 0x000001e2, 0x00000003, 0x00050041, 0x000001e6, 0x00000205, - 0x0000053d, 0x0000003d, 0x00050051, 0x00000027, 0x00000206, 0x00000204, 0x00000000, 0x00050041, 0x00000028, - 0x00000207, 0x00000205, 0x00000052, 0x0003003e, 0x00000207, 0x00000206, 0x00050051, 0x00000027, 0x00000208, - 0x00000204, 0x00000001, 0x00050041, 0x00000028, 0x00000209, 0x00000205, 0x00000054, 0x0003003e, 0x00000209, - 0x00000208, 0x00050051, 0x00000027, 0x0000020a, 0x00000204, 0x00000002, 0x00050041, 0x00000028, 0x0000020b, - 0x00000205, 0x00000056, 0x0003003e, 0x0000020b, 0x0000020a, 0x00050051, 0x00000027, 0x0000020c, 0x00000204, - 0x00000003, 0x00050041, 0x00000028, 0x0000020d, 0x00000205, 0x0000003d, 0x0003003e, 0x0000020d, 0x0000020c, - 0x00050051, 0x00000135, 0x0000020e, 0x000001e2, 0x00000004, 0x00050041, 0x000001e6, 0x0000020f, 0x0000053d, - 0x0000003f, 0x00050051, 0x00000027, 0x00000210, 0x0000020e, 0x00000000, 0x00050041, 0x00000028, 0x00000211, - 0x0000020f, 0x00000052, 0x0003003e, 0x00000211, 0x00000210, 0x00050051, 0x00000027, 0x00000212, 0x0000020e, - 0x00000001, 0x00050041, 0x00000028, 0x00000213, 0x0000020f, 0x00000054, 0x0003003e, 0x00000213, 0x00000212, - 0x00050051, 0x00000027, 0x00000214, 0x0000020e, 0x00000002, 0x00050041, 0x00000028, 0x00000215, 0x0000020f, - 0x00000056, 0x0003003e, 0x00000215, 0x00000214, 0x00050051, 0x00000027, 0x00000216, 0x0000020e, 0x00000003, - 0x00050041, 0x00000028, 0x00000217, 0x0000020f, 0x0000003d, 0x0003003e, 0x00000217, 0x00000216, 0x00050051, - 0x00000135, 0x00000218, 0x000001e2, 0x00000005, 0x00050041, 0x000001e6, 0x00000219, 0x0000053d, 0x00000041, - 0x00050051, 0x00000027, 0x0000021a, 0x00000218, 0x00000000, 0x00050041, 0x00000028, 0x0000021b, 0x00000219, - 0x00000052, 0x0003003e, 0x0000021b, 0x0000021a, 0x00050051, 0x00000027, 0x0000021c, 0x00000218, 0x00000001, - 0x00050041, 0x00000028, 0x0000021d, 0x00000219, 0x00000054, 0x0003003e, 0x0000021d, 0x0000021c, 0x00050051, - 0x00000027, 0x0000021e, 0x00000218, 0x00000002, 0x00050041, 0x00000028, 0x0000021f, 0x00000219, 0x00000056, - 0x0003003e, 0x0000021f, 0x0000021e, 0x00050051, 0x00000027, 0x00000220, 0x00000218, 0x00000003, 0x00050041, - 0x00000028, 0x00000221, 0x00000219, 0x0000003d, 0x0003003e, 0x00000221, 0x00000220, 0x00050051, 0x00000135, - 0x00000222, 0x000001e2, 0x00000006, 0x00050041, 0x000001e6, 0x00000223, 0x0000053d, 0x00000043, 0x00050051, - 0x00000027, 0x00000224, 0x00000222, 0x00000000, 0x00050041, 0x00000028, 0x00000225, 0x00000223, 0x00000052, - 0x0003003e, 0x00000225, 0x00000224, 0x00050051, 0x00000027, 0x00000226, 0x00000222, 0x00000001, 0x00050041, - 0x00000028, 0x00000227, 0x00000223, 0x00000054, 0x0003003e, 0x00000227, 0x00000226, 0x00050051, 0x00000027, - 0x00000228, 0x00000222, 0x00000002, 0x00050041, 0x00000028, 0x00000229, 0x00000223, 0x00000056, 0x0003003e, - 0x00000229, 0x00000228, 0x00050051, 0x00000027, 0x0000022a, 0x00000222, 0x00000003, 0x00050041, 0x00000028, - 0x0000022b, 0x00000223, 0x0000003d, 0x0003003e, 0x0000022b, 0x0000022a, 0x00050051, 0x00000135, 0x0000022c, - 0x000001e2, 0x00000007, 0x00050041, 0x000001e6, 0x0000022d, 0x0000053d, 0x00000047, 0x00050051, 0x00000027, - 0x0000022e, 0x0000022c, 0x00000000, 0x00050041, 0x00000028, 0x0000022f, 0x0000022d, 0x00000052, 0x0003003e, - 0x0000022f, 0x0000022e, 0x00050051, 0x00000027, 0x00000230, 0x0000022c, 0x00000001, 0x00050041, 0x00000028, - 0x00000231, 0x0000022d, 0x00000054, 0x0003003e, 0x00000231, 0x00000230, 0x00050051, 0x00000027, 0x00000232, - 0x0000022c, 0x00000002, 0x00050041, 0x00000028, 0x00000233, 0x0000022d, 0x00000056, 0x0003003e, 0x00000233, - 0x00000232, 0x00050051, 0x00000027, 0x00000234, 0x0000022c, 0x00000003, 0x00050041, 0x00000028, 0x00000235, - 0x0000022d, 0x0000003d, 0x0003003e, 0x00000235, 0x00000234, 0x00060041, 0x00000237, 0x00000238, 0x00000141, - 0x00000052, 0x00000052, 0x0004003d, 0x00000126, 0x00000239, 0x00000238, 0x00070050, 0x00000007, 0x00000425, - 0x0000019c, 0x0000019e, 0x000001a0, 0x000001a2, 0x00060050, 0x00000008, 0x00000429, 0x000001a4, 0x000001a6, - 0x000001a8, 0x00050085, 0x00000008, 0x0000042c, 0x000001d8, 0x00000429, 0x0008004f, 0x00000008, 0x00000435, - 0x00000425, 0x00000425, 0x00000000, 0x00000001, 0x00000002, 0x0007000c, 0x00000008, 0x00000437, 0x00000001, - 0x00000044, 0x00000435, 0x0000042c, 0x0005008e, 0x00000008, 0x00000439, 0x0000042c, 0x000001a2, 0x00050081, - 0x00000008, 0x0000043a, 0x00000437, 0x00000439, 0x0007000c, 0x00000008, 0x0000043b, 0x00000001, 0x00000044, - 0x00000435, 0x0000043a, 0x0005008e, 0x00000008, 0x0000043c, 0x0000043b, 0x0000002e, 0x00050081, 0x00000008, - 0x0000043d, 0x0000042c, 0x0000043c, 0x00060050, 0x00000008, 0x00000431, 0x00000196, 0x00000198, 0x0000019a, - 0x00050081, 0x00000008, 0x00000432, 0x0000043d, 0x00000431, 0x00050051, 0x00000006, 0x0000023f, 0x00000432, - 0x00000000, 0x00050051, 0x00000006, 0x00000240, 0x00000432, 0x00000001, 0x00050051, 0x00000006, 0x00000241, - 0x00000432, 0x00000002, 0x00070050, 0x00000007, 0x00000242, 0x0000023f, 0x00000240, 0x00000241, 0x000000ad, - 0x00050091, 0x00000007, 0x00000243, 0x00000239, 0x00000242, 0x0008004f, 0x00000008, 0x00000244, 0x00000243, - 0x00000243, 0x00000000, 0x00000001, 0x00000002, 0x0003003e, 0x00000236, 0x00000244, 0x0006000c, 0x00000006, - 0x0000024a, 0x00000001, 0x00000004, 0x000001a4, 0x0006000c, 0x00000006, 0x0000024d, 0x00000001, 0x00000004, - 0x000001a6, 0x0007000c, 0x00000006, 0x0000024e, 0x00000001, 0x00000028, 0x0000024a, 0x0000024d, 0x0006000c, - 0x00000006, 0x00000251, 0x00000001, 0x00000004, 0x000001a8, 0x0007000c, 0x00000006, 0x00000252, 0x00000001, - 0x00000028, 0x0000024e, 0x00000251, 0x00050085, 0x00000006, 0x00000253, 0x000001da, 0x00000252, 0x0003003e, - 0x00000257, 0x00000244, 0x00060041, 0x0000025c, 0x0000025d, 0x00000141, 0x00000052, 0x0000003d, 0x0004003d, - 0x00000006, 0x0000025e, 0x0000025d, 0x00060041, 0x0000025c, 0x00000260, 0x00000141, 0x00000052, 0x00000054, - 0x0004003d, 0x00000006, 0x00000261, 0x00000260, 0x00060041, 0x0000025c, 0x00000263, 0x00000141, 0x00000052, - 0x00000056, 0x0004003d, 0x00000006, 0x00000264, 0x00000263, 0x000300f7, 0x000004c8, 0x00000000, 0x000300fb, - 0x00000063, 0x0000044a, 0x000200f8, 0x0000044a, 0x00050041, 0x00000015, 0x0000044b, 0x00000257, 0x0000005c, - 0x0004003d, 0x00000006, 0x0000044c, 0x0000044b, 0x0004007f, 0x00000006, 0x0000044d, 0x0000044c, 0x00050081, - 0x00000006, 0x00000450, 0x00000253, 0x0000025e, 0x000500b8, 0x00000017, 0x00000451, 0x0000044d, 0x00000450, - 0x000300f7, 0x00000453, 0x00000000, 0x000400fa, 0x00000451, 0x00000452, 0x00000453, 0x000200f8, 0x00000452, - 0x000200f9, 0x000004c8, 0x000200f8, 0x00000453, 0x00050041, 0x00000015, 0x00000454, 0x00000257, 0x00000063, - 0x0004003d, 0x00000006, 0x00000455, 0x00000454, 0x0004007f, 0x00000006, 0x00000456, 0x00000455, 0x0004003d, - 0x00000006, 0x00000458, 0x0000044b, 0x00050050, 0x0000008e, 0x00000459, 0x00000456, 0x00000458, 0x00050094, - 0x00000006, 0x0000045c, 0x00000459, 0x00000459, 0x00050085, 0x00000006, 0x0000045f, 0x00000253, 0x00000253, - 0x00050083, 0x00000006, 0x00000460, 0x0000045c, 0x0000045f, 0x0006000c, 0x00000006, 0x00000461, 0x00000001, - 0x0000001f, 0x00000460, 0x00050050, 0x0000008e, 0x00000463, 0x00000461, 0x00000253, 0x0003003e, 0x00000441, - 0x00000463, 0x00050041, 0x00000015, 0x00000464, 0x00000441, 0x00000063, 0x0004003d, 0x00000006, 0x00000465, - 0x00000464, 0x00050041, 0x00000015, 0x00000466, 0x00000441, 0x0000005f, 0x0004003d, 0x00000006, 0x00000467, - 0x00000466, 0x0004003d, 0x00000006, 0x00000469, 0x00000466, 0x0004007f, 0x00000006, 0x0000046a, 0x00000469, - 0x0004003d, 0x00000006, 0x0000046c, 0x00000464, 0x00050050, 0x0000008e, 0x0000046d, 0x00000465, 0x00000467, - 0x00050050, 0x0000008e, 0x0000046e, 0x0000046a, 0x0000046c, 0x00050050, 0x000000ac, 0x0000046f, 0x0000046d, - 0x0000046e, 0x00050091, 0x0000008e, 0x00000471, 0x0000046f, 0x00000459, 0x0003003e, 0x00000442, 0x00000471, - 0x0004003d, 0x00000006, 0x00000473, 0x00000464, 0x0004003d, 0x00000006, 0x00000475, 0x00000466, 0x0004007f, - 0x00000006, 0x00000476, 0x00000475, 0x0004003d, 0x00000006, 0x00000478, 0x00000466, 0x0004003d, 0x00000006, - 0x0000047a, 0x00000464, 0x00050050, 0x0000008e, 0x0000047b, 0x00000473, 0x00000476, 0x00050050, 0x0000008e, - 0x0000047c, 0x00000478, 0x0000047a, 0x00050050, 0x000000ac, 0x0000047d, 0x0000047b, 0x0000047c, 0x00050091, - 0x0000008e, 0x0000047f, 0x0000047d, 0x00000459, 0x0003003e, 0x00000443, 0x0000047f, 0x0007004f, 0x0000008e, - 0x00000481, 0x00000243, 0x00000570, 0x00000001, 0x00000002, 0x00050094, 0x00000006, 0x00000484, 0x00000481, - 0x00000481, 0x00050083, 0x00000006, 0x00000488, 0x00000484, 0x0000045f, 0x0006000c, 0x00000006, 0x00000489, - 0x00000001, 0x0000001f, 0x00000488, 0x00050050, 0x0000008e, 0x0000048b, 0x00000489, 0x00000253, 0x0003003e, - 0x00000445, 0x0000048b, 0x00050041, 0x00000015, 0x0000048c, 0x00000445, 0x00000063, 0x0004003d, 0x00000006, - 0x0000048d, 0x0000048c, 0x00050041, 0x00000015, 0x0000048e, 0x00000445, 0x0000005f, 0x0004003d, 0x00000006, - 0x0000048f, 0x0000048e, 0x0004003d, 0x00000006, 0x00000491, 0x0000048e, 0x0004007f, 0x00000006, 0x00000492, - 0x00000491, 0x0004003d, 0x00000006, 0x00000494, 0x0000048c, 0x00050050, 0x0000008e, 0x00000495, 0x0000048d, - 0x0000048f, 0x00050050, 0x0000008e, 0x00000496, 0x00000492, 0x00000494, 0x00050050, 0x000000ac, 0x00000497, - 0x00000495, 0x00000496, 0x00050091, 0x0000008e, 0x00000499, 0x00000497, 0x00000481, 0x0003003e, 0x00000446, - 0x00000499, 0x0004003d, 0x00000006, 0x0000049b, 0x0000048c, 0x0004003d, 0x00000006, 0x0000049d, 0x0000048e, - 0x0004007f, 0x00000006, 0x0000049e, 0x0000049d, 0x0004003d, 0x00000006, 0x000004a0, 0x0000048e, 0x0004003d, - 0x00000006, 0x000004a2, 0x0000048c, 0x00050050, 0x0000008e, 0x000004a3, 0x0000049b, 0x0000049e, 0x00050050, - 0x0000008e, 0x000004a4, 0x000004a0, 0x000004a2, 0x00050050, 0x000000ac, 0x000004a5, 0x000004a3, 0x000004a4, - 0x00050091, 0x0000008e, 0x000004a7, 0x000004a5, 0x00000481, 0x0003003e, 0x00000447, 0x000004a7, 0x00050041, - 0x00000015, 0x000004a8, 0x00000442, 0x00000063, 0x0004003d, 0x00000006, 0x000004a9, 0x000004a8, 0x00050041, - 0x00000015, 0x000004aa, 0x00000442, 0x0000005f, 0x0004003d, 0x00000006, 0x000004ab, 0x000004aa, 0x00050088, - 0x00000006, 0x000004ac, 0x000004a9, 0x000004ab, 0x00050085, 0x00000006, 0x000004ae, 0x000004ac, 0x00000261, - 0x00050041, 0x00000015, 0x000004af, 0x00000446, 0x00000063, 0x0004003d, 0x00000006, 0x000004b0, 0x000004af, - 0x00050041, 0x00000015, 0x000004b1, 0x00000446, 0x0000005f, 0x0004003d, 0x00000006, 0x000004b2, 0x000004b1, - 0x00050088, 0x00000006, 0x000004b3, 0x000004b0, 0x000004b2, 0x00050085, 0x00000006, 0x000004b5, 0x000004b3, - 0x00000264, 0x00050041, 0x00000015, 0x000004b6, 0x00000443, 0x00000063, 0x0004003d, 0x00000006, 0x000004b7, - 0x000004b6, 0x00050041, 0x00000015, 0x000004b8, 0x00000443, 0x0000005f, 0x0004003d, 0x00000006, 0x000004b9, - 0x000004b8, 0x00050088, 0x00000006, 0x000004ba, 0x000004b7, 0x000004b9, 0x00050085, 0x00000006, 0x000004bc, - 0x000004ba, 0x00000261, 0x00050041, 0x00000015, 0x000004bd, 0x00000447, 0x00000063, 0x0004003d, 0x00000006, - 0x000004be, 0x000004bd, 0x00050041, 0x00000015, 0x000004bf, 0x00000447, 0x0000005f, 0x0004003d, 0x00000006, - 0x000004c0, 0x000004bf, 0x00050088, 0x00000006, 0x000004c1, 0x000004be, 0x000004c0, 0x00050085, 0x00000006, - 0x000004c3, 0x000004c1, 0x00000264, 0x00070050, 0x00000007, 0x000004c4, 0x000004ae, 0x000004b5, 0x000004bc, - 0x000004c3, 0x00050085, 0x00000007, 0x000004c6, 0x000004c4, 0x0000010f, 0x00050081, 0x00000007, 0x000004c7, - 0x000004c6, 0x00000111, 0x000200f9, 0x000004c8, 0x000200f8, 0x000004c8, 0x000700f5, 0x00000007, 0x00000573, - 0x00000574, 0x00000452, 0x000004c7, 0x00000453, 0x000700f5, 0x00000017, 0x00000572, 0x0000008c, 0x00000452, - 0x00000113, 0x00000453, 0x0003003e, 0x00000256, 0x00000573, 0x0007004f, 0x0000008e, 0x0000026a, 0x00000573, - 0x00000573, 0x00000002, 0x00000003, 0x0007004f, 0x0000008e, 0x0000026c, 0x00000573, 0x00000573, 0x00000000, - 0x00000001, 0x00050083, 0x0000008e, 0x0000026d, 0x0000026a, 0x0000026c, 0x0003003e, 0x00000268, 0x0000026d, - 0x00060041, 0x00000142, 0x0000026e, 0x00000141, 0x00000052, 0x00000170, 0x0004003d, 0x00000027, 0x0000026f, - 0x0000026e, 0x000500ab, 0x00000017, 0x00000270, 0x0000026f, 0x00000063, 0x000300f7, 0x00000272, 0x00000000, - 0x000400fa, 0x00000270, 0x00000271, 0x00000272, 0x000200f8, 0x00000271, 0x000300f7, 0x00000275, 0x00000000, - 0x000400fa, 0x00000113, 0x00000274, 0x00000275, 0x000200f8, 0x00000274, 0x0003003e, 0x00000276, 0x00000244, - 0x00060041, 0x0000027b, 0x0000027c, 0x00000141, 0x00000052, 0x00000041, 0x0004003d, 0x00000007, 0x0000027d, - 0x0000027c, 0x0003003e, 0x0000027a, 0x0000027d, 0x00050041, 0x00000015, 0x000004cc, 0x00000276, 0x0000005c, - 0x0004003d, 0x00000006, 0x000004cd, 0x000004cc, 0x00050041, 0x00000015, 0x000004ce, 0x0000027a, 0x0000005f, - 0x0004003d, 0x00000006, 0x000004cf, 0x000004ce, 0x00050085, 0x00000006, 0x000004d0, 0x000004cd, 0x000004cf, - 0x00050041, 0x00000015, 0x000004d1, 0x00000276, 0x00000063, 0x0004003d, 0x00000006, 0x000004d2, 0x000004d1, - 0x0006000c, 0x00000006, 0x000004d3, 0x00000001, 0x00000004, 0x000004d2, 0x00050041, 0x00000015, 0x000004d4, - 0x0000027a, 0x00000063, 0x0004003d, 0x00000006, 0x000004d5, 0x000004d4, 0x00050085, 0x00000006, 0x000004d6, - 0x000004d3, 0x000004d5, 0x00050083, 0x00000006, 0x000004d7, 0x000004d0, 0x000004d6, 0x0004007f, 0x00000006, - 0x000004d9, 0x00000253, 0x000500ba, 0x00000017, 0x000004da, 0x000004d7, 0x000004d9, 0x000300f7, 0x000004eb, - 0x00000000, 0x000400fa, 0x000004da, 0x000004db, 0x000004eb, 0x000200f8, 0x000004db, 0x0004003d, 0x00000006, - 0x000004dd, 0x000004cc, 0x0004007f, 0x00000006, 0x000004de, 0x000004dd, 0x00050041, 0x00000015, 0x000004df, - 0x0000027a, 0x00000032, 0x0004003d, 0x00000006, 0x000004e0, 0x000004df, 0x00050085, 0x00000006, 0x000004e1, - 0x000004de, 0x000004e0, 0x00050041, 0x00000015, 0x000004e2, 0x00000276, 0x0000005f, 0x0004003d, 0x00000006, - 0x000004e3, 0x000004e2, 0x0006000c, 0x00000006, 0x000004e4, 0x00000001, 0x00000004, 0x000004e3, 0x00050041, - 0x00000015, 0x000004e5, 0x0000027a, 0x0000005c, 0x0004003d, 0x00000006, 0x000004e6, 0x000004e5, 0x00050085, - 0x00000006, 0x000004e7, 0x000004e4, 0x000004e6, 0x00050083, 0x00000006, 0x000004e8, 0x000004e1, 0x000004e7, - 0x000500b8, 0x00000017, 0x000004ea, 0x000004e8, 0x00000253, 0x000200f9, 0x000004eb, 0x000200f8, 0x000004eb, - 0x000700f5, 0x00000017, 0x000004ec, 0x000004da, 0x00000274, 0x000004ea, 0x000004db, 0x000400a8, 0x00000017, - 0x000004ed, 0x000004ec, 0x000400a8, 0x00000017, 0x0000027f, 0x000004ed, 0x000200f9, 0x00000275, 0x000200f8, - 0x00000275, 0x000700f5, 0x00000017, 0x00000280, 0x00000113, 0x00000271, 0x0000027f, 0x000004eb, 0x000400a8, - 0x00000017, 0x00000282, 0x00000280, 0x000300f7, 0x00000284, 0x00000000, 0x000400fa, 0x00000282, 0x00000283, - 0x00000284, 0x000200f8, 0x00000283, 0x00060041, 0x00000286, 0x00000287, 0x00000141, 0x00000052, 0x00000285, - 0x0004003d, 0x0000012b, 0x00000288, 0x00000287, 0x00060041, 0x00000289, 0x0000028a, 0x00000288, 0x00000052, - 0x00000054, 0x000700ea, 0x00000027, 0x0000028b, 0x0000028a, 0x0000005f, 0x00000063, 0x0000005f, 0x000200f9, - 0x00000284, 0x000200f8, 0x00000284, 0x000200f9, 0x00000272, 0x000200f8, 0x00000272, 0x000700f5, 0x00000017, - 0x00000576, 0x00000113, 0x000004c8, 0x00000280, 0x00000284, 0x000300f7, 0x0000028e, 0x00000000, 0x000400fa, - 0x00000576, 0x0000028d, 0x0000028e, 0x000200f8, 0x0000028d, 0x00060041, 0x00000142, 0x0000028f, 0x00000141, - 0x00000052, 0x00000176, 0x0004003d, 0x00000027, 0x00000290, 0x0000028f, 0x000500ab, 0x00000017, 0x00000291, - 0x00000290, 0x00000063, 0x000200f9, 0x0000028e, 0x000200f8, 0x0000028e, 0x000700f5, 0x00000017, 0x00000292, - 0x00000576, 0x00000272, 0x00000291, 0x0000028d, 0x000500a7, 0x00000017, 0x00000294, 0x00000292, 0x00000572, - 0x000300f7, 0x00000296, 0x00000000, 0x000400fa, 0x00000294, 0x00000295, 0x00000296, 0x000200f8, 0x00000295, - 0x00070041, 0x0000025c, 0x00000298, 0x00000141, 0x00000052, 0x0000016d, 0x00000063, 0x0004003d, 0x00000006, - 0x00000299, 0x00000298, 0x00050088, 0x00000006, 0x0000029a, 0x000000ad, 0x00000299, 0x000300f7, 0x0000029d, - 0x00000000, 0x000400fa, 0x00000576, 0x0000029c, 0x0000029d, 0x000200f8, 0x0000029c, 0x00050041, 0x00000015, - 0x0000029e, 0x00000268, 0x00000063, 0x0004003d, 0x00000006, 0x0000029f, 0x0000029e, 0x00050041, 0x00000015, - 0x000002a0, 0x00000268, 0x0000005f, 0x0004003d, 0x00000006, 0x000002a1, 0x000002a0, 0x0007000c, 0x00000006, - 0x000002a2, 0x00000001, 0x00000028, 0x0000029f, 0x000002a1, 0x000500be, 0x00000017, 0x000002a4, 0x000002a2, - 0x0000029a, 0x000200f9, 0x0000029d, 0x000200f8, 0x0000029d, 0x000700f5, 0x00000017, 0x000002a5, 0x00000576, - 0x00000295, 0x000002a4, 0x0000029c, 0x000400a8, 0x00000017, 0x000002a7, 0x000002a5, 0x000300f7, 0x000002a9, - 0x00000000, 0x000400fa, 0x000002a7, 0x000002a8, 0x000002a9, 0x000200f8, 0x000002a8, 0x00060041, 0x00000286, - 0x000002aa, 0x00000141, 0x00000052, 0x00000285, 0x0004003d, 0x0000012b, 0x000002ab, 0x000002aa, 0x00060041, - 0x00000289, 0x000002ac, 0x000002ab, 0x00000052, 0x0000003d, 0x000700ea, 0x00000027, 0x000002ad, 0x000002ac, - 0x0000005f, 0x00000063, 0x0000005f, 0x000200f9, 0x000002a9, 0x000200f8, 0x000002a9, 0x000200f9, 0x00000296, - 0x000200f8, 0x00000296, 0x000700f5, 0x00000017, 0x00000579, 0x00000576, 0x0000028e, 0x000002a5, 0x000002a9, - 0x000300f7, 0x000002b0, 0x00000000, 0x000400fa, 0x00000579, 0x000002af, 0x000002b0, 0x000200f8, 0x000002af, - 0x00060041, 0x00000142, 0x000002b1, 0x00000141, 0x00000052, 0x00000173, 0x0004003d, 0x00000027, 0x000002b2, - 0x000002b1, 0x000500ab, 0x00000017, 0x000002b3, 0x000002b2, 0x00000063, 0x000200f9, 0x000002b0, 0x000200f8, - 0x000002b0, 0x000700f5, 0x00000017, 0x000002b4, 0x00000579, 0x00000296, 0x000002b3, 0x000002af, 0x000500a7, - 0x00000017, 0x000002b6, 0x000002b4, 0x00000572, 0x000300f7, 0x000002b8, 0x00000000, 0x000400fa, 0x000002b6, - 0x000002b7, 0x000002b8, 0x000200f8, 0x000002b7, 0x00050041, 0x00000015, 0x000002ba, 0x00000268, 0x00000063, - 0x0004003d, 0x00000006, 0x000002bb, 0x000002ba, 0x00070041, 0x0000025c, 0x000002bc, 0x00000141, 0x00000052, - 0x0000016d, 0x00000063, 0x0004003d, 0x00000006, 0x000002bd, 0x000002bc, 0x00050085, 0x00000006, 0x000002be, - 0x000002bb, 0x000002bd, 0x00050041, 0x00000015, 0x000002c0, 0x00000268, 0x0000005f, 0x0004003d, 0x00000006, - 0x000002c1, 0x000002c0, 0x00070041, 0x0000025c, 0x000002c2, 0x00000141, 0x00000052, 0x0000016d, 0x0000005f, - 0x0004003d, 0x00000006, 0x000002c3, 0x000002c2, 0x00050085, 0x00000006, 0x000002c4, 0x000002c1, 0x000002c3, - 0x0007000c, 0x00000006, 0x000002c8, 0x00000001, 0x00000028, 0x000002be, 0x000002c4, 0x0006000c, 0x00000006, - 0x000002c9, 0x00000001, 0x0000001e, 0x000002c8, 0x0006000c, 0x00000006, 0x000002ca, 0x00000001, 0x00000008, - 0x000002c9, 0x0004003d, 0x000002cf, 0x000002d2, 0x000002d1, 0x00050081, 0x0000008e, 0x000002d7, 0x0000026c, - 0x0000026a, 0x0005008e, 0x0000008e, 0x000002d8, 0x000002d7, 0x0000010d, 0x00070058, 0x00000007, 0x000002da, - 0x000002d2, 0x000002d8, 0x00000002, 0x000002ca, 0x00050051, 0x00000006, 0x000002db, 0x000002da, 0x00000000, - 0x00050088, 0x00000006, 0x000002dc, 0x0000025e, 0x000002db, 0x00060041, 0x0000025c, 0x000002df, 0x00000141, - 0x00000052, 0x0000003f, 0x0004003d, 0x00000006, 0x000002e0, 0x000002df, 0x0008000c, 0x00000006, 0x000002e1, - 0x00000001, 0x0000002b, 0x000002dc, 0x0000025e, 0x000002e0, 0x00050041, 0x00000015, 0x000002e3, 0x00000236, - 0x0000005c, 0x0004003d, 0x00000006, 0x000002e4, 0x000002e3, 0x0004007f, 0x00000006, 0x000002e5, 0x000002e4, - 0x00050083, 0x00000006, 0x000002e7, 0x000002e5, 0x00000253, 0x000500bc, 0x00000017, 0x000002ea, 0x000002e7, - 0x000002e1, 0x000400a8, 0x00000017, 0x000002ec, 0x000002ea, 0x000300f7, 0x000002ee, 0x00000000, 0x000400fa, - 0x000002ec, 0x000002ed, 0x000002ee, 0x000200f8, 0x000002ed, 0x00060041, 0x00000286, 0x000002ef, 0x00000141, - 0x00000052, 0x00000285, 0x0004003d, 0x0000012b, 0x000002f0, 0x000002ef, 0x00060041, 0x00000289, 0x000002f1, - 0x000002f0, 0x00000052, 0x00000056, 0x000700ea, 0x00000027, 0x000002f2, 0x000002f1, 0x0000005f, 0x00000063, - 0x0000005f, 0x000200f9, 0x000002ee, 0x000200f8, 0x000002ee, 0x000200f9, 0x000002b8, 0x000200f8, 0x000002b8, - 0x000700f5, 0x00000017, 0x0000057b, 0x00000579, 0x000002b0, 0x000002ea, 0x000002ee, 0x000300f7, 0x000002f5, - 0x00000000, 0x000400fa, 0x0000057b, 0x000002f4, 0x000002f5, 0x000200f8, 0x000002f4, 0x00060041, 0x00000142, - 0x000002f6, 0x00000141, 0x00000052, 0x0000017c, 0x0004003d, 0x00000027, 0x000002f7, 0x000002f6, 0x000500ab, - 0x00000017, 0x000002f8, 0x000002f7, 0x00000063, 0x000200f9, 0x000002f5, 0x000200f8, 0x000002f5, 0x000700f5, - 0x00000017, 0x000002f9, 0x0000057b, 0x000002b8, 0x000002f8, 0x000002f4, 0x000300f7, 0x000002fb, 0x00000000, - 0x000400fa, 0x000002f9, 0x000002fa, 0x000002fb, 0x000200f8, 0x000002fa, 0x00050041, 0x00000015, 0x000002fd, - 0x00000256, 0x0000005c, 0x0004003d, 0x00000006, 0x000002fe, 0x000002fd, 0x00050041, 0x00000015, 0x000002ff, - 0x00000256, 0x00000063, 0x0004003d, 0x00000006, 0x00000300, 0x000002ff, 0x00050083, 0x00000006, 0x00000301, - 0x000002fe, 0x00000300, 0x00050041, 0x00000015, 0x00000302, 0x00000256, 0x00000032, 0x0004003d, 0x00000006, - 0x00000303, 0x00000302, 0x00050041, 0x00000015, 0x00000304, 0x00000256, 0x0000005f, 0x0004003d, 0x00000006, - 0x00000305, 0x00000304, 0x00050083, 0x00000006, 0x00000306, 0x00000303, 0x00000305, 0x00050085, 0x00000006, - 0x00000307, 0x00000301, 0x00000306, 0x00060041, 0x0000025c, 0x00000309, 0x00000141, 0x00000052, 0x00000047, - 0x0004003d, 0x00000006, 0x0000030a, 0x00000309, 0x00050088, 0x00000006, 0x0000030c, 0x0000030a, 0x00000307, - 0x0006000c, 0x00000006, 0x0000030d, 0x00000001, 0x0000001e, 0x0000030c, 0x00060041, 0x0000025c, 0x0000030e, - 0x00000141, 0x00000052, 0x00000049, 0x0004003d, 0x00000006, 0x0000030f, 0x0000030e, 0x0006000c, 0x00000006, - 0x00000310, 0x00000001, 0x0000001e, 0x0000030f, 0x00050088, 0x00000006, 0x00000311, 0x0000030d, 0x00000310, - 0x00060041, 0x00000142, 0x00000313, 0x00000141, 0x00000052, 0x0000004b, 0x0004003d, 0x00000027, 0x00000314, - 0x00000313, 0x000500ac, 0x00000017, 0x00000315, 0x00000314, 0x00000063, 0x000300f7, 0x00000318, 0x00000000, - 0x000400fa, 0x00000315, 0x00000317, 0x0000031e, 0x000200f8, 0x00000317, 0x0007000c, 0x00000027, 0x0000031d, - 0x00000001, 0x00000026, 0x00000314, 0x000001e0, 0x000200f9, 0x00000318, 0x000200f8, 0x0000031e, 0x000200f9, - 0x00000318, 0x000200f8, 0x00000318, 0x000700f5, 0x00000027, 0x0000057e, 0x0000031d, 0x00000317, 0x000001e0, - 0x0000031e, 0x00050082, 0x00000027, 0x00000322, 0x0000057e, 0x0000005f, 0x000300f7, 0x00000327, 0x00000000, - 0x000400fa, 0x00000572, 0x00000326, 0x0000032d, 0x000200f8, 0x00000326, 0x00050081, 0x00000006, 0x00000329, - 0x00000311, 0x000000ad, 0x0004006d, 0x00000027, 0x0000032a, 0x00000329, 0x0008000c, 0x00000027, 0x0000032c, - 0x00000001, 0x0000002c, 0x0000032a, 0x00000063, 0x00000322, 0x000200f9, 0x00000327, 0x000200f8, 0x0000032d, - 0x000200f9, 0x00000327, 0x000200f8, 0x00000327, 0x000700f5, 0x00000027, 0x0000057f, 0x0000032c, 0x00000326, - 0x00000063, 0x0000032d, 0x00050041, 0x000001e6, 0x0000053e, 0x0000053d, 0x0000057f, 0x0004003d, 0x000001ca, - 0x00000332, 0x0000053e, 0x00050051, 0x00000027, 0x00000544, 0x00000332, 0x00000000, 0x00050051, 0x00000027, - 0x00000545, 0x00000332, 0x00000001, 0x00050051, 0x00000027, 0x00000546, 0x00000332, 0x00000002, 0x00050051, - 0x00000027, 0x00000547, 0x00000332, 0x00000003, 0x0004007c, 0x0000003c, 0x00000335, 0x000001dc, 0x00060041, - 0x00000142, 0x00000342, 0x00000141, 0x00000052, 0x0000033d, 0x0004003d, 0x00000027, 0x00000343, 0x00000342, - 0x00050080, 0x00000027, 0x000004f2, 0x00000547, 0x00000343, 0x00050082, 0x00000027, 0x000004f3, 0x000004f2, - 0x0000005f, 0x00050086, 0x00000027, 0x000004f5, 0x000004f3, 0x00000343, 0x000200f9, 0x0000034f, 0x000200f8, - 0x0000034f, 0x000700f5, 0x00000027, 0x000005b2, 0x00000175, 0x00000327, 0x00000360, 0x00000350, 0x000700f5, - 0x00000027, 0x00000580, 0x00000063, 0x00000327, 0x00000363, 0x00000350, 0x000500b0, 0x00000017, 0x00000356, - 0x00000580, 0x0000057f, 0x000400f6, 0x00000351, 0x00000350, 0x00000000, 0x000400fa, 0x00000356, 0x00000350, - 0x00000351, 0x000200f8, 0x00000350, 0x00060041, 0x00000028, 0x0000053f, 0x0000053d, 0x00000580, 0x0000003d, - 0x0004003d, 0x00000027, 0x0000035b, 0x0000053f, 0x00050080, 0x00000027, 0x000004fb, 0x0000035b, 0x00000571, - 0x00050086, 0x00000027, 0x000004fd, 0x000004fb, 0x00000358, 0x00050080, 0x00000027, 0x00000360, 0x000005b2, - 0x000004fd, 0x00050080, 0x00000027, 0x00000363, 0x00000580, 0x00000054, 0x000200f9, 0x0000034f, 0x000200f8, - 0x00000351, 0x000200f9, 0x000002fb, 0x000200f8, 0x000002fb, 0x000700f5, 0x00000027, 0x00000611, 0x00000158, - 0x000002f5, 0x00000544, 0x00000351, 0x000700f5, 0x0000003c, 0x00000602, 0x0000015a, 0x000002f5, 0x00000335, - 0x00000351, 0x000700f5, 0x00000027, 0x000005f3, 0x0000015f, 0x000002f5, 0x000004f5, 0x00000351, 0x000700f5, - 0x00000027, 0x000005b5, 0x0000016f, 0x000002f5, 0x00000546, 0x00000351, 0x000700f5, 0x00000027, 0x000005a4, - 0x00000175, 0x000002f5, 0x000005b2, 0x00000351, 0x000700f5, 0x00000027, 0x00000595, 0x00000172, 0x000002f5, - 0x00000547, 0x00000351, 0x000700f5, 0x00000027, 0x00000586, 0x00000154, 0x000002f5, 0x00000545, 0x00000351, - 0x000600a9, 0x00000027, 0x0000064c, 0x000002f9, 0x0000005f, 0x00000161, 0x000600a9, 0x00000027, 0x0000064d, - 0x000002f9, 0x0000005f, 0x00000163, 0x000300f7, 0x00000366, 0x00000000, 0x000400fa, 0x0000057b, 0x00000365, - 0x00000366, 0x000200f8, 0x00000365, 0x00060041, 0x00000286, 0x00000367, 0x00000141, 0x00000052, 0x00000285, - 0x0004003d, 0x0000012b, 0x00000368, 0x00000367, 0x00060041, 0x00000289, 0x00000369, 0x00000368, 0x00000052, - 0x00000052, 0x000700ea, 0x00000027, 0x0000036a, 0x00000369, 0x0000005f, 0x00000063, 0x0000005f, 0x00060041, - 0x00000289, 0x0000036d, 0x00000368, 0x00000052, 0x0000003f, 0x00050086, 0x00000027, 0x00000370, 0x00000586, - 0x00000032, 0x000700ea, 0x00000027, 0x00000371, 0x0000036d, 0x0000005f, 0x00000063, 0x00000370, 0x00060041, - 0x00000289, 0x00000374, 0x00000368, 0x00000052, 0x00000041, 0x000700ea, 0x00000027, 0x00000377, 0x00000374, - 0x0000005f, 0x00000063, 0x00000595, 0x000400a8, 0x00000017, 0x0000037b, 0x00000166, 0x00060041, 0x0000037e, - 0x0000037f, 0x00000141, 0x00000052, 0x0000037d, 0x0004003d, 0x0000012a, 0x00000380, 0x0000037f, 0x00060041, - 0x00000289, 0x00000383, 0x00000380, 0x00000052, 0x00000178, 0x000700ea, 0x00000027, 0x00000384, 0x00000383, - 0x0000005f, 0x00000063, 0x0000005f, 0x00060041, 0x0000014d, 0x00000386, 0x00000141, 0x00000052, 0x00000385, - 0x0004003d, 0x00000127, 0x00000387, 0x00000386, 0x00050080, 0x00000027, 0x0000038b, 0x0000017b, 0x00000384, - 0x00060041, 0x00000151, 0x0000038d, 0x00000387, 0x00000052, 0x0000038b, 0x00050041, 0x00000289, 0x0000038f, - 0x0000038d, 0x00000052, 0x0005003e, 0x0000038f, 0x00000586, 0x00000002, 0x00000000, 0x00050041, 0x00000289, - 0x00000391, 0x0000038d, 0x00000054, 0x0005003e, 0x00000391, 0x00000156, 0x00000002, 0x00000004, 0x00050041, - 0x00000289, 0x00000393, 0x0000038d, 0x00000056, 0x0005003e, 0x00000393, 0x00000611, 0x00000002, 0x00000008, - 0x00050041, 0x00000395, 0x00000396, 0x0000038d, 0x0000003d, 0x0005003e, 0x00000396, 0x00000602, 0x00000002, - 0x00000004, 0x00050041, 0x00000289, 0x00000398, 0x0000038d, 0x0000003f, 0x0005003e, 0x00000398, 0x0000015d, - 0x00000002, 0x00000010, 0x00050041, 0x00000289, 0x0000039a, 0x0000038d, 0x00000041, 0x0005003e, 0x0000039a, - 0x000005f3, 0x00000002, 0x00000004, 0x00050041, 0x00000289, 0x0000039c, 0x0000038d, 0x00000043, 0x0005003e, - 0x0000039c, 0x0000064c, 0x00000002, 0x00000008, 0x00050041, 0x00000289, 0x0000039e, 0x0000038d, 0x00000047, - 0x0005003e, 0x0000039e, 0x0000064d, 0x00000002, 0x00000004, 0x000600a9, 0x00000027, 0x000003a0, 0x00000166, - 0x0000005f, 0x00000063, 0x00050041, 0x00000289, 0x000003a1, 0x0000038d, 0x00000049, 0x0005003e, 0x000003a1, - 0x000003a0, 0x00000002, 0x00000020, 0x000600a9, 0x00000027, 0x000003a3, 0x0000016a, 0x0000005f, 0x00000063, - 0x00050041, 0x00000289, 0x000003a4, 0x0000038d, 0x0000004b, 0x0005003e, 0x000003a4, 0x000003a3, 0x00000002, - 0x00000004, 0x00050041, 0x00000289, 0x000003a6, 0x0000038d, 0x0000016d, 0x0005003e, 0x000003a6, 0x0000016c, - 0x00000002, 0x00000008, 0x00050041, 0x00000289, 0x000003a8, 0x0000038d, 0x00000170, 0x0005003e, 0x000003a8, - 0x000005b5, 0x00000002, 0x00000004, 0x00050041, 0x00000289, 0x000003aa, 0x0000038d, 0x00000173, 0x0005003e, - 0x000003aa, 0x00000595, 0x00000002, 0x00000010, 0x00050041, 0x00000289, 0x000003ac, 0x0000038d, 0x00000176, - 0x0005003e, 0x000003ac, 0x000005a4, 0x00000002, 0x00000004, 0x00050041, 0x00000289, 0x000003ae, 0x0000038d, - 0x00000179, 0x0005003e, 0x000003ae, 0x00000178, 0x00000002, 0x00000008, 0x00050041, 0x00000289, 0x000003b0, - 0x0000038d, 0x0000017c, 0x0005003e, 0x000003b0, 0x0000017b, 0x00000002, 0x00000004, 0x000400a8, 0x00000017, - 0x000003b2, 0x0000037b, 0x000300f7, 0x000003b4, 0x00000000, 0x000400fa, 0x000003b2, 0x000003b3, 0x000003b4, - 0x000200f8, 0x000003b3, 0x00060041, 0x00000142, 0x000003b5, 0x00000141, 0x00000052, 0x00000179, 0x0004003d, - 0x00000027, 0x000003b6, 0x000003b5, 0x000500ab, 0x00000017, 0x000003b7, 0x000003b6, 0x00000063, 0x000300f7, - 0x000003b9, 0x00000000, 0x000400fa, 0x000003b7, 0x000003b8, 0x000003b9, 0x000200f8, 0x000003b8, 0x000500ac, - 0x00000017, 0x000003bc, 0x00000595, 0x00000063, 0x000200f9, 0x000003b9, 0x000200f8, 0x000003b9, 0x000700f5, - 0x00000017, 0x000003bd, 0x000003b7, 0x000003b3, 0x000003bc, 0x000003b8, 0x000200f9, 0x000003b4, 0x000200f8, - 0x000003b4, 0x000700f5, 0x00000017, 0x000003be, 0x0000037b, 0x00000365, 0x000003bd, 0x000003b9, 0x000300f7, - 0x000003c0, 0x00000000, 0x000400fa, 0x000003be, 0x000003bf, 0x000003c0, 0x000200f8, 0x000003bf, 0x000300f7, - 0x000003c4, 0x00000000, 0x000400fa, 0x000003b2, 0x000003c3, 0x000003c4, 0x000200f8, 0x000003c3, 0x00060041, - 0x00000142, 0x000003c5, 0x00000141, 0x00000052, 0x00000179, 0x0004003d, 0x00000027, 0x000003c6, 0x000003c5, - 0x000500ab, 0x00000017, 0x000003c7, 0x000003c6, 0x00000063, 0x000300f7, 0x000003c9, 0x00000000, 0x000400fa, - 0x000003c7, 0x000003c8, 0x000003c9, 0x000200f8, 0x000003c8, 0x00070041, 0x00000289, 0x000003cf, 0x0000014f, - 0x00000052, 0x00000124, 0x00000170, 0x0006003d, 0x00000027, 0x000003d0, 0x000003cf, 0x00000002, 0x00000004, - 0x000500ab, 0x00000017, 0x000003d1, 0x000005b5, 0x000003d0, 0x000200f9, 0x000003c9, 0x000200f8, 0x000003c9, - 0x000700f5, 0x00000017, 0x000003d2, 0x000003c7, 0x000003c3, 0x000003d1, 0x000003c8, 0x000200f9, 0x000003c4, - 0x000200f8, 0x000003c4, 0x000700f5, 0x00000017, 0x000003d3, 0x0000037b, 0x000003bf, 0x000003d2, 0x000003c9, - 0x00060041, 0x0000037e, 0x000003d7, 0x00000141, 0x00000052, 0x000003d6, 0x0004003d, 0x0000012a, 0x000003d8, - 0x000003d7, 0x00060041, 0x00000289, 0x000003db, 0x000003d8, 0x00000052, 0x00000178, 0x000700ea, 0x00000027, - 0x000003dc, 0x000003db, 0x0000005f, 0x00000063, 0x0000005f, 0x00060041, 0x0000014d, 0x000003de, 0x00000141, - 0x00000052, 0x000003dd, 0x0004003d, 0x00000127, 0x000003df, 0x000003de, 0x00050080, 0x00000027, 0x000003e3, - 0x0000017b, 0x000003dc, 0x00060041, 0x00000151, 0x000003e5, 0x000003df, 0x00000052, 0x000003e3, 0x00050041, - 0x00000289, 0x000003e7, 0x000003e5, 0x00000052, 0x0005003e, 0x000003e7, 0x00000586, 0x00000002, 0x00000000, - 0x00050041, 0x00000289, 0x000003e9, 0x000003e5, 0x00000054, 0x0005003e, 0x000003e9, 0x00000156, 0x00000002, - 0x00000004, 0x00050041, 0x00000289, 0x000003eb, 0x000003e5, 0x00000056, 0x0005003e, 0x000003eb, 0x00000611, - 0x00000002, 0x00000008, 0x00050041, 0x00000395, 0x000003ed, 0x000003e5, 0x0000003d, 0x0005003e, 0x000003ed, - 0x00000602, 0x00000002, 0x00000004, 0x00050041, 0x00000289, 0x000003ef, 0x000003e5, 0x0000003f, 0x0005003e, - 0x000003ef, 0x0000015d, 0x00000002, 0x00000010, 0x00050041, 0x00000289, 0x000003f1, 0x000003e5, 0x00000041, - 0x0005003e, 0x000003f1, 0x000005f3, 0x00000002, 0x00000004, 0x00050041, 0x00000289, 0x000003f3, 0x000003e5, - 0x00000043, 0x0005003e, 0x000003f3, 0x0000064c, 0x00000002, 0x00000008, 0x00050041, 0x00000289, 0x000003f5, - 0x000003e5, 0x00000047, 0x0005003e, 0x000003f5, 0x0000064d, 0x00000002, 0x00000004, 0x00050041, 0x00000289, - 0x000003f8, 0x000003e5, 0x00000049, 0x0005003e, 0x000003f8, 0x000003a0, 0x00000002, 0x00000020, 0x000600a9, - 0x00000027, 0x000003fa, 0x000003d3, 0x0000005f, 0x00000063, 0x00050041, 0x00000289, 0x000003fb, 0x000003e5, - 0x0000004b, 0x0005003e, 0x000003fb, 0x000003fa, 0x00000002, 0x00000004, 0x00050041, 0x00000289, 0x000003fd, - 0x000003e5, 0x0000016d, 0x0005003e, 0x000003fd, 0x0000016c, 0x00000002, 0x00000008, 0x00050041, 0x00000289, - 0x000003ff, 0x000003e5, 0x00000170, 0x0005003e, 0x000003ff, 0x000005b5, 0x00000002, 0x00000004, 0x00050041, - 0x00000289, 0x00000401, 0x000003e5, 0x00000173, 0x0005003e, 0x00000401, 0x00000595, 0x00000002, 0x00000010, - 0x00050041, 0x00000289, 0x00000403, 0x000003e5, 0x00000176, 0x0005003e, 0x00000403, 0x000005a4, 0x00000002, - 0x00000004, 0x00050041, 0x00000289, 0x00000405, 0x000003e5, 0x00000179, 0x0005003e, 0x00000405, 0x00000178, - 0x00000002, 0x00000008, 0x00050041, 0x00000289, 0x00000407, 0x000003e5, 0x0000017c, 0x0005003e, 0x00000407, - 0x0000017b, 0x00000002, 0x00000004, 0x000200f9, 0x000003c0, 0x000200f8, 0x000003c0, 0x000200f9, 0x00000366, - 0x000200f8, 0x00000366, 0x000600a9, 0x00000027, 0x0000040c, 0x0000057b, 0x0000005f, 0x00000063, 0x00070041, - 0x00000289, 0x0000040d, 0x0000014f, 0x00000052, 0x00000124, 0x00000049, 0x0005003e, 0x0000040d, 0x0000040c, - 0x00000002, 0x00000010, 0x00070041, 0x00000289, 0x00000413, 0x0000014f, 0x00000052, 0x00000124, 0x00000170, - 0x0005003e, 0x00000413, 0x000005b5, 0x00000002, 0x00000004, 0x000200f9, 0x00000415, 0x000200f8, 0x00000415, - 0x000100fd, 0x00010038 +#if 0 // original glsl: https://github.com/SaschaWillems/Vulkan/blob/master/shaders/glsl/raytracinggltf/closesthit.rchit +/* Copyright (c) 2023, Sascha Willems + * + * SPDX-License-Identifier: MIT + * + */ + +#version 460 + +#extension GL_EXT_ray_tracing : require +#extension GL_GOOGLE_include_directive : require +#extension GL_EXT_nonuniform_qualifier : require +#extension GL_EXT_buffer_reference2 : require +#extension GL_EXT_scalar_block_layout : require +#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require + +layout(location = 0) rayPayloadInEXT vec3 hitValue; +layout(location = 2) rayPayloadEXT bool shadowed; +hitAttributeEXT vec2 attribs; + +layout(binding = 0, set = 0) uniform accelerationStructureEXT topLevelAS; +layout(binding = 3, set = 0) uniform sampler2D image; + +struct GeometryNode { + uint64_t vertexBufferDeviceAddress; + uint64_t indexBufferDeviceAddress; + int textureIndexBaseColor; + int textureIndexOcclusion; +}; +layout(binding = 4, set = 0) buffer GeometryNodes { GeometryNode nodes[]; } geometryNodes; + +layout(binding = 5, set = 0) uniform sampler2D textures[]; + +#include "bufferreferences.glsl" +#include "geometrytypes.glsl" + +void main() +{ + Triangle tri = unpackTriangle(gl_PrimitiveID, 112); + hitValue = vec3(tri.normal); + + GeometryNode geometryNode = geometryNodes.nodes[gl_GeometryIndexEXT]; + + vec3 color = texture(textures[nonuniformEXT(geometryNode.textureIndexBaseColor)], tri.uv).rgb; + if (geometryNode.textureIndexOcclusion > -1) { + float occlusion = texture(textures[nonuniformEXT(geometryNode.textureIndexOcclusion)], tri.uv).r; + color *= occlusion; + } + + hitValue = color; + + // Shadow casting + float tmin = 0.001; + float tmax = 10000.0; + float epsilon = 0.001; + vec3 origin = gl_WorldRayOriginEXT + gl_WorldRayDirectionEXT * gl_HitTEXT + tri.normal * epsilon; + shadowed = true; + vec3 lightVector = vec3(-5.0, -2.5, -5.0); + // Trace shadow ray and offset indices to match shadow hit/miss shader group indices +// traceRayEXT(topLevelAS, gl_RayFlagsTerminateOnFirstHitEXT | gl_RayFlagsOpaqueEXT | gl_RayFlagsSkipClosestHitShaderEXT, 0xFF, 0, 0, 1, origin, tmin, lightVector, tmax, 2); +// if (shadowed) { +// hitValue *= 0.7; +// } +} +#endif + +const uint32_t spirv_bda_array[] = { + 0x07230203, 0x00010500, 0x0008000b, 0x000001da, 0x00000000, 0x00020011, 0x0000000b, 0x00020011, 0x0000117f, + 0x00020011, 0x000014b5, 0x00020011, 0x000014b6, 0x00020011, 0x000014bb, 0x00020011, 0x000014e3, 0x0006000a, + 0x5f565053, 0x5f52484b, 0x5f796172, 0x63617274, 0x00676e69, 0x0006000b, 0x00000001, 0x4c534c47, 0x6474732e, + 0x3035342e, 0x00000000, 0x0003000e, 0x000014e4, 0x00000001, 0x000c000f, 0x000014c4, 0x00000004, 0x6e69616d, + 0x00000000, 0x00000021, 0x00000024, 0x0000007c, 0x000000b2, 0x000000ba, 0x000000c7, 0x000000fe, 0x00030003, + 0x00000002, 0x000001cc, 0x00070004, 0x455f4c47, 0x625f5458, 0x65666675, 0x65725f72, 0x65726566, 0x0065636e, + 0x00080004, 0x455f4c47, 0x625f5458, 0x65666675, 0x65725f72, 0x65726566, 0x3265636e, 0x00000000, 0x00080004, + 0x455f4c47, 0x6e5f5458, 0x6e756e6f, 0x726f6669, 0x75715f6d, 0x66696c61, 0x00726569, 0x00060004, 0x455f4c47, + 0x725f5458, 0x745f7961, 0x69636172, 0x0000676e, 0x00080004, 0x455f4c47, 0x735f5458, 0x616c6163, 0x6c625f72, + 0x5f6b636f, 0x6f79616c, 0x00007475, 0x000d0004, 0x455f4c47, 0x735f5458, 0x65646168, 0x78655f72, 0x63696c70, + 0x615f7469, 0x68746972, 0x6974656d, 0x79745f63, 0x5f736570, 0x36746e69, 0x00000034, 0x000a0004, 0x475f4c47, + 0x4c474f4f, 0x70635f45, 0x74735f70, 0x5f656c79, 0x656e696c, 0x7269645f, 0x69746365, 0x00006576, 0x00080004, + 0x475f4c47, 0x4c474f4f, 0x6e695f45, 0x64756c63, 0x69645f65, 0x74636572, 0x00657669, 0x00040005, 0x00000004, + 0x6e69616d, 0x00000000, 0x00040005, 0x0000000d, 0x74726556, 0x00007865, 0x00040006, 0x0000000d, 0x00000000, + 0x00736f70, 0x00050006, 0x0000000d, 0x00000001, 0x6d726f6e, 0x00006c61, 0x00040006, 0x0000000d, 0x00000002, + 0x00007675, 0x00060005, 0x0000001a, 0x6d6f6547, 0x79727465, 0x65646f4e, 0x00000000, 0x000a0006, 0x0000001a, + 0x00000000, 0x74726576, 0x75427865, 0x72656666, 0x69766544, 0x64416563, 0x73657264, 0x00000073, 0x000a0006, + 0x0000001a, 0x00000001, 0x65646e69, 0x66754278, 0x44726566, 0x63697665, 0x64644165, 0x73736572, 0x00000000, + 0x00090006, 0x0000001a, 0x00000002, 0x74786574, 0x49657275, 0x7865646e, 0x65736142, 0x6f6c6f43, 0x00000072, + 0x00090006, 0x0000001a, 0x00000003, 0x74786574, 0x49657275, 0x7865646e, 0x6c63634f, 0x6f697375, 0x0000006e, + 0x00060005, 0x0000001d, 0x6d6f6547, 0x79727465, 0x65646f4e, 0x00000000, 0x000a0006, 0x0000001d, 0x00000000, + 0x74726576, 0x75427865, 0x72656666, 0x69766544, 0x64416563, 0x73657264, 0x00000073, 0x000a0006, 0x0000001d, + 0x00000001, 0x65646e69, 0x66754278, 0x44726566, 0x63697665, 0x64644165, 0x73736572, 0x00000000, 0x00090006, + 0x0000001d, 0x00000002, 0x74786574, 0x49657275, 0x7865646e, 0x65736142, 0x6f6c6f43, 0x00000072, 0x00090006, + 0x0000001d, 0x00000003, 0x74786574, 0x49657275, 0x7865646e, 0x6c63634f, 0x6f697375, 0x0000006e, 0x00060005, + 0x0000001f, 0x6d6f6547, 0x79727465, 0x65646f4e, 0x00000073, 0x00050006, 0x0000001f, 0x00000000, 0x65646f6e, + 0x00000073, 0x00060005, 0x00000021, 0x6d6f6567, 0x79727465, 0x65646f4e, 0x00000073, 0x00070005, 0x00000024, + 0x475f6c67, 0x656d6f65, 0x49797274, 0x7865646e, 0x00545845, 0x00040005, 0x0000002c, 0x69646e49, 0x00736563, + 0x00040006, 0x0000002c, 0x00000000, 0x00000069, 0x00050005, 0x00000037, 0x74726556, 0x73656369, 0x00000000, + 0x00040006, 0x00000037, 0x00000000, 0x00000076, 0x00040005, 0x0000007c, 0x72747461, 0x00736269, 0x00060005, + 0x000000b2, 0x505f6c67, 0x696d6972, 0x65766974, 0x00004449, 0x00050005, 0x000000ba, 0x56746968, 0x65756c61, + 0x00000000, 0x00050005, 0x000000c7, 0x74786574, 0x73657275, 0x00000000, 0x00050005, 0x000000fe, 0x64616873, + 0x6465776f, 0x00000000, 0x00050048, 0x0000001d, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x0000001d, + 0x00000001, 0x00000023, 0x00000008, 0x00050048, 0x0000001d, 0x00000002, 0x00000023, 0x00000010, 0x00050048, + 0x0000001d, 0x00000003, 0x00000023, 0x00000014, 0x00040047, 0x0000001e, 0x00000006, 0x00000018, 0x00030047, + 0x0000001f, 0x00000002, 0x00050048, 0x0000001f, 0x00000000, 0x00000023, 0x00000000, 0x00040047, 0x00000021, + 0x00000021, 0x00000004, 0x00040047, 0x00000021, 0x00000022, 0x00000000, 0x00040047, 0x00000024, 0x0000000b, + 0x000014e8, 0x00040047, 0x0000002b, 0x00000006, 0x00000004, 0x00030047, 0x0000002c, 0x00000002, 0x00050048, + 0x0000002c, 0x00000000, 0x00000023, 0x00000000, 0x00040047, 0x00000036, 0x00000006, 0x00000010, 0x00030047, + 0x00000037, 0x00000002, 0x00050048, 0x00000037, 0x00000000, 0x00000023, 0x00000000, 0x00040047, 0x000000b2, + 0x0000000b, 0x00000007, 0x00040047, 0x000000c7, 0x00000021, 0x00000005, 0x00040047, 0x000000c7, 0x00000022, + 0x00000000, 0x00030047, 0x000000ca, 0x000014b4, 0x00030047, 0x000000cc, 0x000014b4, 0x00030047, 0x000000cd, + 0x000014b4, 0x00030047, 0x000000dd, 0x000014b4, 0x00030047, 0x000000de, 0x000014b4, 0x00030047, 0x000000df, + 0x000014b4, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00040015, 0x00000006, 0x00000020, + 0x00000000, 0x00040015, 0x00000008, 0x00000020, 0x00000001, 0x00030016, 0x0000000a, 0x00000020, 0x00040017, + 0x0000000b, 0x0000000a, 0x00000003, 0x00040017, 0x0000000c, 0x0000000a, 0x00000002, 0x0005001e, 0x0000000d, + 0x0000000b, 0x0000000b, 0x0000000c, 0x0004002b, 0x00000006, 0x0000000e, 0x00000003, 0x0004001c, 0x0000000f, + 0x0000000d, 0x0000000e, 0x00040015, 0x00000019, 0x00000040, 0x00000000, 0x0006001e, 0x0000001a, 0x00000019, + 0x00000019, 0x00000008, 0x00000008, 0x0006001e, 0x0000001d, 0x00000019, 0x00000019, 0x00000008, 0x00000008, + 0x0003001d, 0x0000001e, 0x0000001d, 0x0003001e, 0x0000001f, 0x0000001e, 0x00040020, 0x00000020, 0x0000000c, + 0x0000001f, 0x0004003b, 0x00000020, 0x00000021, 0x0000000c, 0x0004002b, 0x00000008, 0x00000022, 0x00000000, + 0x00040020, 0x00000023, 0x00000001, 0x00000008, 0x0004003b, 0x00000023, 0x00000024, 0x00000001, 0x00040020, + 0x00000026, 0x0000000c, 0x0000001d, 0x00030027, 0x0000002a, 0x000014e5, 0x0003001d, 0x0000002b, 0x00000006, + 0x0003001e, 0x0000002c, 0x0000002b, 0x00040020, 0x0000002a, 0x000014e5, 0x0000002c, 0x0004002b, 0x00000008, + 0x0000002f, 0x00000001, 0x00030027, 0x00000034, 0x000014e5, 0x00040017, 0x00000035, 0x0000000a, 0x00000004, + 0x0003001d, 0x00000036, 0x00000035, 0x0003001e, 0x00000037, 0x00000036, 0x00040020, 0x00000034, 0x000014e5, + 0x00000037, 0x0004002b, 0x00000006, 0x0000003e, 0x00000000, 0x00020014, 0x00000045, 0x00040020, 0x0000004c, + 0x000014e5, 0x00000006, 0x0004002b, 0x00000006, 0x0000004f, 0x00000006, 0x00040020, 0x00000056, 0x000014e5, + 0x00000035, 0x0004002b, 0x00000006, 0x0000005c, 0x00000001, 0x00040020, 0x00000065, 0x00000007, 0x0000000b, + 0x0004002b, 0x00000008, 0x00000072, 0x00000002, 0x00040020, 0x00000075, 0x00000007, 0x0000000c, 0x0004002b, + 0x0000000a, 0x0000007a, 0x3f800000, 0x00040020, 0x0000007b, 0x000014db, 0x0000000c, 0x0004003b, 0x0000007b, + 0x0000007c, 0x000014db, 0x00040020, 0x0000007d, 0x000014db, 0x0000000a, 0x0004003b, 0x00000023, 0x000000b2, + 0x00000001, 0x00040020, 0x000000b9, 0x000014de, 0x0000000b, 0x0004003b, 0x000000b9, 0x000000ba, 0x000014de, + 0x00090019, 0x000000c3, 0x0000000a, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, + 0x0003001b, 0x000000c4, 0x000000c3, 0x0003001d, 0x000000c5, 0x000000c4, 0x00040020, 0x000000c6, 0x00000000, + 0x000000c5, 0x0004003b, 0x000000c6, 0x000000c7, 0x00000000, 0x00040020, 0x000000cb, 0x00000000, 0x000000c4, + 0x0004002b, 0x0000000a, 0x000000d0, 0x00000000, 0x0004002b, 0x00000008, 0x000000d6, 0xffffffff, 0x00040020, + 0x000000fd, 0x000014da, 0x00000045, 0x0004003b, 0x000000fd, 0x000000fe, 0x000014da, 0x00030029, 0x00000045, + 0x000000ff, 0x00040020, 0x00000183, 0x00000007, 0x0000000f, 0x00050036, 0x00000002, 0x00000004, 0x00000000, + 0x00000003, 0x000200f8, 0x00000005, 0x0004003b, 0x00000183, 0x00000184, 0x00000007, 0x0004003d, 0x00000008, + 0x000000b3, 0x000000b2, 0x0004007c, 0x00000006, 0x000000b4, 0x000000b3, 0x00050084, 0x00000006, 0x00000118, + 0x000000b4, 0x0000000e, 0x0004003d, 0x00000008, 0x00000119, 0x00000024, 0x00060041, 0x00000026, 0x0000011a, + 0x00000021, 0x00000022, 0x00000119, 0x0004003d, 0x0000001d, 0x0000011b, 0x0000011a, 0x00040190, 0x0000001a, + 0x0000011c, 0x0000011b, 0x00050051, 0x00000019, 0x00000181, 0x0000011c, 0x00000000, 0x00050051, 0x00000019, + 0x00000182, 0x0000011c, 0x00000001, 0x00040078, 0x0000002a, 0x0000011f, 0x00000182, 0x00040078, 0x00000034, + 0x00000122, 0x00000181, 0x000200f9, 0x00000123, 0x000200f8, 0x00000123, 0x000700f5, 0x00000006, 0x000001d8, + 0x0000003e, 0x00000005, 0x0000014c, 0x00000127, 0x000500b0, 0x00000045, 0x00000126, 0x000001d8, 0x0000000e, + 0x000400f6, 0x0000014d, 0x00000127, 0x00000000, 0x000400fa, 0x00000126, 0x00000127, 0x0000014d, 0x000200f8, + 0x00000127, 0x00050080, 0x00000006, 0x0000012b, 0x00000118, 0x000001d8, 0x00060041, 0x0000004c, 0x0000012c, + 0x0000011f, 0x00000022, 0x0000012b, 0x0006003d, 0x00000006, 0x0000012d, 0x0000012c, 0x00000002, 0x00000004, + 0x00050084, 0x00000006, 0x0000012e, 0x0000012d, 0x0000004f, 0x00060041, 0x00000056, 0x00000132, 0x00000122, + 0x00000022, 0x0000012e, 0x0006003d, 0x00000035, 0x00000133, 0x00000132, 0x00000002, 0x00000010, 0x00050080, + 0x00000006, 0x00000136, 0x0000012e, 0x0000005c, 0x00060041, 0x00000056, 0x00000137, 0x00000122, 0x00000022, + 0x00000136, 0x0006003d, 0x00000035, 0x00000138, 0x00000137, 0x00000002, 0x00000010, 0x0008004f, 0x0000000b, + 0x0000013b, 0x00000133, 0x00000133, 0x00000000, 0x00000001, 0x00000002, 0x00060041, 0x00000065, 0x00000187, + 0x00000184, 0x000001d8, 0x00000022, 0x0003003e, 0x00000187, 0x0000013b, 0x00050051, 0x0000000a, 0x0000013f, + 0x00000133, 0x00000003, 0x00050051, 0x0000000a, 0x00000142, 0x00000138, 0x00000000, 0x00050051, 0x0000000a, + 0x00000143, 0x00000138, 0x00000001, 0x00060050, 0x0000000b, 0x00000144, 0x0000013f, 0x00000142, 0x00000143, + 0x00060041, 0x00000065, 0x00000188, 0x00000184, 0x000001d8, 0x0000002f, 0x0003003e, 0x00000188, 0x00000144, + 0x0007004f, 0x0000000c, 0x00000148, 0x00000138, 0x00000138, 0x00000002, 0x00000003, 0x00060041, 0x00000075, + 0x00000189, 0x00000184, 0x000001d8, 0x00000072, 0x0003003e, 0x00000189, 0x00000148, 0x00050080, 0x00000006, + 0x0000014c, 0x000001d8, 0x0000002f, 0x000200f9, 0x00000123, 0x000200f8, 0x0000014d, 0x00050041, 0x0000007d, + 0x0000014e, 0x0000007c, 0x0000003e, 0x0004003d, 0x0000000a, 0x0000014f, 0x0000014e, 0x00050083, 0x0000000a, + 0x00000150, 0x0000007a, 0x0000014f, 0x00050041, 0x0000007d, 0x00000151, 0x0000007c, 0x0000005c, 0x0004003d, + 0x0000000a, 0x00000152, 0x00000151, 0x00050083, 0x0000000a, 0x00000153, 0x00000150, 0x00000152, 0x0004003d, + 0x0000000a, 0x00000155, 0x0000014e, 0x0004003d, 0x0000000a, 0x00000157, 0x00000151, 0x00060041, 0x00000075, + 0x0000018a, 0x00000184, 0x00000022, 0x00000072, 0x0004003d, 0x0000000c, 0x0000015a, 0x0000018a, 0x0005008e, + 0x0000000c, 0x0000015d, 0x0000015a, 0x00000153, 0x00060041, 0x00000075, 0x0000018b, 0x00000184, 0x0000002f, + 0x00000072, 0x0004003d, 0x0000000c, 0x0000015f, 0x0000018b, 0x0005008e, 0x0000000c, 0x00000162, 0x0000015f, + 0x00000155, 0x00050081, 0x0000000c, 0x00000163, 0x0000015d, 0x00000162, 0x00060041, 0x00000075, 0x0000018c, + 0x00000184, 0x00000072, 0x00000072, 0x0004003d, 0x0000000c, 0x00000165, 0x0000018c, 0x0005008e, 0x0000000c, + 0x00000168, 0x00000165, 0x00000157, 0x00050081, 0x0000000c, 0x00000169, 0x00000163, 0x00000168, 0x00060041, + 0x00000065, 0x0000018d, 0x00000184, 0x00000022, 0x0000002f, 0x0004003d, 0x0000000b, 0x0000016c, 0x0000018d, + 0x0005008e, 0x0000000b, 0x0000016f, 0x0000016c, 0x00000153, 0x00060041, 0x00000065, 0x0000018e, 0x00000184, + 0x0000002f, 0x0000002f, 0x0004003d, 0x0000000b, 0x00000171, 0x0000018e, 0x0005008e, 0x0000000b, 0x00000174, + 0x00000171, 0x00000155, 0x00050081, 0x0000000b, 0x00000175, 0x0000016f, 0x00000174, 0x00060041, 0x00000065, + 0x0000018f, 0x00000184, 0x00000072, 0x0000002f, 0x0004003d, 0x0000000b, 0x00000177, 0x0000018f, 0x0005008e, + 0x0000000b, 0x0000017a, 0x00000177, 0x00000157, 0x00050081, 0x0000000b, 0x0000017b, 0x00000175, 0x0000017a, + 0x0003003e, 0x000000ba, 0x0000017b, 0x0004003d, 0x0000001d, 0x000000c0, 0x0000011a, 0x00040190, 0x0000001a, + 0x000000c1, 0x000000c0, 0x00050051, 0x00000008, 0x000001a6, 0x000000c1, 0x00000002, 0x00050051, 0x00000008, + 0x000001a7, 0x000000c1, 0x00000003, 0x00040053, 0x00000008, 0x000000ca, 0x000001a6, 0x00050041, 0x000000cb, + 0x000000cc, 0x000000c7, 0x000000ca, 0x0004003d, 0x000000c4, 0x000000cd, 0x000000cc, 0x00070058, 0x00000035, + 0x000000d1, 0x000000cd, 0x00000169, 0x00000002, 0x000000d0, 0x0008004f, 0x0000000b, 0x000000d2, 0x000000d1, + 0x000000d1, 0x00000000, 0x00000001, 0x00000002, 0x000500ad, 0x00000045, 0x000000d7, 0x000001a7, 0x000000d6, + 0x000300f7, 0x000000d9, 0x00000000, 0x000400fa, 0x000000d7, 0x000000d8, 0x000000d9, 0x000200f8, 0x000000d8, + 0x00040053, 0x00000008, 0x000000dd, 0x000001a7, 0x00050041, 0x000000cb, 0x000000de, 0x000000c7, 0x000000dd, + 0x0004003d, 0x000000c4, 0x000000df, 0x000000de, 0x00070058, 0x00000035, 0x000000e2, 0x000000df, 0x00000169, + 0x00000002, 0x000000d0, 0x00050051, 0x0000000a, 0x000000e3, 0x000000e2, 0x00000000, 0x0005008e, 0x0000000b, + 0x000000e6, 0x000000d2, 0x000000e3, 0x000200f9, 0x000000d9, 0x000200f8, 0x000000d9, 0x000700f5, 0x0000000b, + 0x000001d9, 0x000000d2, 0x0000014d, 0x000000e6, 0x000000d8, 0x0003003e, 0x000000ba, 0x000001d9, 0x0003003e, + 0x000000fe, 0x000000ff, 0x000100fd, 0x00010038 +}; + +#if 0 // original glsl -> bda_push_constant_offset.comp +#version 450 +#extension GL_ARB_gpu_shader_int64 : require +#extension GL_EXT_buffer_reference2 : require +layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in; + +layout(buffer_reference) readonly buffer BDA { + uint a; + uint b; +}; + +// sizeof(address_wrapper_t) == 16 +struct address_wrapper_t +{ + uint64_t base_address; + uint offset; + uint pad[1]; +}; + +layout(push_constant) uniform PC +{ + // offset 0 + address_wrapper_t address_0; + + // offset 16 + address_wrapper_t address_1; + + uint num_elements; +} pc; + +void main() { + + uint gid = gl_GlobalInvocationID.x; + if(gid >= pc.num_elements){ return; } + + BDA input_ptr = BDA(pc.address_0.base_address + pc.address_0.offset); + BDA output_ptr = BDA(pc.address_1.base_address + pc.address_1.offset); + + output_ptr[gid].a = input_ptr[gid].a; + output_ptr[gid].b = input_ptr[gid].b; +} +#endif + +const uint32_t spirv_bda_push_constant_offset[] = { + 0x07230203, 0x00010500, 0x0008000b, 0x00000069, 0x00000000, 0x00020011, 0x00000001, 0x00020011, 0x0000000b, + 0x00020011, 0x000014e3, 0x0006000b, 0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, 0x00000000, 0x0003000e, + 0x000014e4, 0x00000001, 0x0007000f, 0x00000005, 0x00000004, 0x6e69616d, 0x00000000, 0x0000000b, 0x00000017, + 0x00060010, 0x00000004, 0x00000011, 0x00000020, 0x00000001, 0x00000001, 0x00030003, 0x00000002, 0x000001c2, + 0x00070004, 0x415f4c47, 0x675f4252, 0x735f7570, 0x65646168, 0x6e695f72, 0x00343674, 0x00070004, 0x455f4c47, + 0x625f5458, 0x65666675, 0x65725f72, 0x65726566, 0x0065636e, 0x00080004, 0x455f4c47, 0x625f5458, 0x65666675, + 0x65725f72, 0x65726566, 0x3265636e, 0x00000000, 0x00040005, 0x00000004, 0x6e69616d, 0x00000000, 0x00080005, + 0x0000000b, 0x475f6c67, 0x61626f6c, 0x766e496c, 0x7461636f, 0x496e6f69, 0x00000044, 0x00070005, 0x00000014, + 0x72646461, 0x5f737365, 0x70617277, 0x5f726570, 0x00000074, 0x00070006, 0x00000014, 0x00000000, 0x65736162, + 0x6464615f, 0x73736572, 0x00000000, 0x00050006, 0x00000014, 0x00000001, 0x7366666f, 0x00007465, 0x00040006, + 0x00000014, 0x00000002, 0x00646170, 0x00030005, 0x00000015, 0x00004350, 0x00060006, 0x00000015, 0x00000000, + 0x72646461, 0x5f737365, 0x00000030, 0x00060006, 0x00000015, 0x00000001, 0x72646461, 0x5f737365, 0x00000031, + 0x00070006, 0x00000015, 0x00000002, 0x5f6d756e, 0x6d656c65, 0x73746e65, 0x00000000, 0x00030005, 0x00000017, + 0x00006370, 0x00030005, 0x00000023, 0x00414442, 0x00040006, 0x00000023, 0x00000000, 0x00000061, 0x00040006, + 0x00000023, 0x00000001, 0x00000062, 0x00040047, 0x0000000b, 0x0000000b, 0x0000001c, 0x00040047, 0x00000013, + 0x00000006, 0x00000004, 0x00050048, 0x00000014, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000014, + 0x00000001, 0x00000023, 0x00000008, 0x00050048, 0x00000014, 0x00000002, 0x00000023, 0x0000000c, 0x00030047, + 0x00000015, 0x00000002, 0x00050048, 0x00000015, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000015, + 0x00000001, 0x00000023, 0x00000010, 0x00050048, 0x00000015, 0x00000002, 0x00000023, 0x00000020, 0x00030047, + 0x00000023, 0x00000002, 0x00040048, 0x00000023, 0x00000000, 0x00000018, 0x00050048, 0x00000023, 0x00000000, + 0x00000023, 0x00000000, 0x00040048, 0x00000023, 0x00000001, 0x00000018, 0x00050048, 0x00000023, 0x00000001, + 0x00000023, 0x00000004, 0x00040047, 0x00000066, 0x0000000b, 0x00000019, 0x00020013, 0x00000002, 0x00030021, + 0x00000003, 0x00000002, 0x00040015, 0x00000006, 0x00000020, 0x00000000, 0x00040017, 0x00000009, 0x00000006, + 0x00000003, 0x00040020, 0x0000000a, 0x00000001, 0x00000009, 0x0004003b, 0x0000000a, 0x0000000b, 0x00000001, + 0x0004002b, 0x00000006, 0x0000000c, 0x00000000, 0x00040020, 0x0000000d, 0x00000001, 0x00000006, 0x00040015, + 0x00000011, 0x00000040, 0x00000000, 0x0004002b, 0x00000006, 0x00000012, 0x00000001, 0x0004001c, 0x00000013, + 0x00000006, 0x00000012, 0x0005001e, 0x00000014, 0x00000011, 0x00000006, 0x00000013, 0x0005001e, 0x00000015, + 0x00000014, 0x00000014, 0x00000006, 0x00040020, 0x00000016, 0x00000009, 0x00000015, 0x0004003b, 0x00000016, + 0x00000017, 0x00000009, 0x00040015, 0x00000018, 0x00000020, 0x00000001, 0x0004002b, 0x00000018, 0x00000019, + 0x00000002, 0x00040020, 0x0000001a, 0x00000009, 0x00000006, 0x00020014, 0x0000001d, 0x00030027, 0x00000022, + 0x000014e5, 0x0004001e, 0x00000023, 0x00000006, 0x00000006, 0x00040020, 0x00000022, 0x000014e5, 0x00000023, + 0x0004002b, 0x00000018, 0x00000026, 0x00000000, 0x00040020, 0x00000027, 0x00000009, 0x00000011, 0x0004002b, + 0x00000018, 0x0000002a, 0x00000001, 0x00040015, 0x0000003b, 0x00000040, 0x00000001, 0x0005002b, 0x00000011, + 0x0000003f, 0x00000010, 0x00000000, 0x00040020, 0x0000004c, 0x000014e5, 0x00000006, 0x0004002b, 0x00000006, + 0x00000065, 0x00000020, 0x0006002c, 0x00000009, 0x00000066, 0x00000065, 0x00000012, 0x00000012, 0x00050036, + 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200f8, 0x00000005, 0x000300f7, 0x00000067, 0x00000000, + 0x000300fb, 0x0000000c, 0x00000068, 0x000200f8, 0x00000068, 0x00050041, 0x0000000d, 0x0000000e, 0x0000000b, + 0x0000000c, 0x0004003d, 0x00000006, 0x0000000f, 0x0000000e, 0x00050041, 0x0000001a, 0x0000001b, 0x00000017, + 0x00000019, 0x0004003d, 0x00000006, 0x0000001c, 0x0000001b, 0x000500ae, 0x0000001d, 0x0000001e, 0x0000000f, + 0x0000001c, 0x000300f7, 0x00000020, 0x00000000, 0x000400fa, 0x0000001e, 0x0000001f, 0x00000020, 0x000200f8, + 0x0000001f, 0x000200f9, 0x00000067, 0x000200f8, 0x00000020, 0x00060041, 0x00000027, 0x00000028, 0x00000017, + 0x00000026, 0x00000026, 0x0004003d, 0x00000011, 0x00000029, 0x00000028, 0x00060041, 0x0000001a, 0x0000002b, + 0x00000017, 0x00000026, 0x0000002a, 0x0004003d, 0x00000006, 0x0000002c, 0x0000002b, 0x00040071, 0x00000011, + 0x0000002d, 0x0000002c, 0x00050080, 0x00000011, 0x0000002e, 0x00000029, 0x0000002d, 0x00040078, 0x00000022, + 0x0000002f, 0x0000002e, 0x00060041, 0x00000027, 0x00000031, 0x00000017, 0x0000002a, 0x00000026, 0x0004003d, + 0x00000011, 0x00000032, 0x00000031, 0x00060041, 0x0000001a, 0x00000033, 0x00000017, 0x0000002a, 0x0000002a, + 0x0004003d, 0x00000006, 0x00000034, 0x00000033, 0x00040071, 0x00000011, 0x00000035, 0x00000034, 0x00050080, + 0x00000011, 0x00000036, 0x00000032, 0x00000035, 0x00040078, 0x00000022, 0x00000037, 0x00000036, 0x00040075, + 0x00000011, 0x00000039, 0x00000037, 0x00040071, 0x00000011, 0x0000003c, 0x0000000f, 0x0004007c, 0x0000003b, + 0x0000003d, 0x0000003c, 0x0004007c, 0x00000011, 0x0000003e, 0x0000003d, 0x00050084, 0x00000011, 0x00000040, + 0x0000003e, 0x0000003f, 0x00050080, 0x00000011, 0x00000041, 0x00000039, 0x00000040, 0x00040078, 0x00000022, + 0x00000042, 0x00000041, 0x00040075, 0x00000011, 0x00000044, 0x0000002f, 0x00050080, 0x00000011, 0x0000004a, + 0x00000044, 0x00000040, 0x00040078, 0x00000022, 0x0000004b, 0x0000004a, 0x00050041, 0x0000004c, 0x0000004d, + 0x0000004b, 0x00000026, 0x0006003d, 0x00000006, 0x0000004e, 0x0000004d, 0x00000002, 0x00000010, 0x00050041, + 0x0000004c, 0x0000004f, 0x00000042, 0x00000026, 0x0005003e, 0x0000004f, 0x0000004e, 0x00000002, 0x00000010, + 0x00040075, 0x00000011, 0x00000051, 0x00000037, 0x00050080, 0x00000011, 0x00000057, 0x00000051, 0x00000040, + 0x00040078, 0x00000022, 0x00000058, 0x00000057, 0x00040075, 0x00000011, 0x0000005a, 0x0000002f, 0x00050080, + 0x00000011, 0x00000060, 0x0000005a, 0x00000040, 0x00040078, 0x00000022, 0x00000061, 0x00000060, 0x00050041, + 0x0000004c, 0x00000062, 0x00000061, 0x0000002a, 0x0006003d, 0x00000006, 0x00000063, 0x00000062, 0x00000002, + 0x00000004, 0x00050041, 0x0000004c, 0x00000064, 0x00000058, 0x0000002a, 0x0005003e, 0x00000064, 0x00000063, + 0x00000002, 0x00000004, 0x000200f9, 0x00000067, 0x000200f8, 0x00000067, 0x000100fd, 0x00010038 +}; + +#if 0 // original glsl -> bda_pointer_chaining.comp +#version 460 + +#extension GL_EXT_scalar_block_layout : require +#extension GL_EXT_buffer_reference2 : require +#extension GL_EXT_shader_explicit_arithmetic_types : require + +struct camera_t +{ + mat4 view_projection; +}; + +struct mesh_entry_t +{ + mat4 transform; + uint buffer_index; + uint num_vertices; +}; + +struct vertex_t +{ + float x, y, z; + uint normal; + uint tangent; + float16_t u, v; +}; + +// buffer of mesh_entry +layout(buffer_reference, scalar) readonly buffer MeshEntryBuffer { mesh_entry_t v[]; }; + +// array of vertex-buffers +layout(buffer_reference, scalar) readonly buffer VertexBuffer { vertex_t v[]; }; +layout(buffer_reference, scalar) readonly buffer VertexBufferArray { VertexBuffer v[]; }; + +layout(binding = 0, set = 0, std140) uniform UBO +{ + camera_t camera; + + MeshEntryBuffer entries; // regular BDA + VertexBufferArray vertex_buffers; // this BDA holds an array of pointers (vertex_t*[]) + + VertexBuffer out_vertices; +} data; + +layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in; + +void main() +{ + uint gid = gl_GlobalInvocationID.x; + + // normally fetched from somewhere else + uint entry_index = 0, vertex_offset = gid; + + // regular BDA-access + mesh_entry_t entry = data.entries.v[entry_index]; + if(gid >= entry.num_vertices){ return; } + + // pointer-chain + vertex_t vertex = data.vertex_buffers.v[entry.buffer_index].v[vertex_offset]; + + data.out_vertices.v[vertex_offset] = vertex; +} +#endif + +const uint32_t spirv_bda_pointer_chaining[] = { + 0x07230203, 0x00010500, 0x0008000b, 0x00000063, 0x00000000, 0x00020011, 0x00000001, 0x00020011, 0x00000009, + 0x00020011, 0x00001151, 0x00020011, 0x000014e3, 0x0006000b, 0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, + 0x00000000, 0x0003000e, 0x000014e4, 0x00000001, 0x0007000f, 0x00000005, 0x00000004, 0x6e69616d, 0x00000000, + 0x0000000b, 0x00000028, 0x00060010, 0x00000004, 0x00000011, 0x00000040, 0x00000001, 0x00000001, 0x00030003, + 0x00000002, 0x000001cc, 0x00070004, 0x455f4c47, 0x625f5458, 0x65666675, 0x65725f72, 0x65726566, 0x0065636e, + 0x00080004, 0x455f4c47, 0x625f5458, 0x65666675, 0x65725f72, 0x65726566, 0x3265636e, 0x00000000, 0x00080004, + 0x455f4c47, 0x735f5458, 0x616c6163, 0x6c625f72, 0x5f6b636f, 0x6f79616c, 0x00007475, 0x000b0004, 0x455f4c47, + 0x735f5458, 0x65646168, 0x78655f72, 0x63696c70, 0x615f7469, 0x68746972, 0x6974656d, 0x79745f63, 0x00736570, + 0x00040005, 0x00000004, 0x6e69616d, 0x00000000, 0x00080005, 0x0000000b, 0x475f6c67, 0x61626f6c, 0x766e496c, + 0x7461636f, 0x496e6f69, 0x00000044, 0x00060005, 0x00000016, 0x6873656d, 0x746e655f, 0x745f7972, 0x00000000, + 0x00060006, 0x00000016, 0x00000000, 0x6e617274, 0x726f6673, 0x0000006d, 0x00070006, 0x00000016, 0x00000001, + 0x66667562, 0x695f7265, 0x7865646e, 0x00000000, 0x00070006, 0x00000016, 0x00000002, 0x5f6d756e, 0x74726576, + 0x73656369, 0x00000000, 0x00050005, 0x00000019, 0x656d6163, 0x745f6172, 0x00000000, 0x00070006, 0x00000019, + 0x00000000, 0x77656976, 0x6f72705f, 0x7463656a, 0x006e6f69, 0x00030005, 0x0000001d, 0x004f4255, 0x00050006, + 0x0000001d, 0x00000000, 0x656d6163, 0x00006172, 0x00050006, 0x0000001d, 0x00000001, 0x72746e65, 0x00736569, + 0x00070006, 0x0000001d, 0x00000002, 0x74726576, 0x625f7865, 0x65666675, 0x00007372, 0x00070006, 0x0000001d, + 0x00000003, 0x5f74756f, 0x74726576, 0x73656369, 0x00000000, 0x00060005, 0x0000001e, 0x6873656d, 0x746e655f, + 0x745f7972, 0x00000000, 0x00060006, 0x0000001e, 0x00000000, 0x6e617274, 0x726f6673, 0x0000006d, 0x00070006, + 0x0000001e, 0x00000001, 0x66667562, 0x695f7265, 0x7865646e, 0x00000000, 0x00070006, 0x0000001e, 0x00000002, + 0x5f6d756e, 0x74726576, 0x73656369, 0x00000000, 0x00060005, 0x00000020, 0x6873654d, 0x72746e45, 0x66754279, + 0x00726566, 0x00040006, 0x00000020, 0x00000000, 0x00000076, 0x00070005, 0x00000022, 0x74726556, 0x75427865, + 0x72656666, 0x61727241, 0x00000079, 0x00040006, 0x00000022, 0x00000000, 0x00000076, 0x00050005, 0x00000024, + 0x74726576, 0x745f7865, 0x00000000, 0x00040006, 0x00000024, 0x00000000, 0x00000078, 0x00040006, 0x00000024, + 0x00000001, 0x00000079, 0x00040006, 0x00000024, 0x00000002, 0x0000007a, 0x00050006, 0x00000024, 0x00000003, + 0x6d726f6e, 0x00006c61, 0x00050006, 0x00000024, 0x00000004, 0x676e6174, 0x00746e65, 0x00040006, 0x00000024, + 0x00000005, 0x00000075, 0x00040006, 0x00000024, 0x00000006, 0x00000076, 0x00060005, 0x00000026, 0x74726556, + 0x75427865, 0x72656666, 0x00000000, 0x00040006, 0x00000026, 0x00000000, 0x00000076, 0x00040005, 0x00000028, + 0x61746164, 0x00000000, 0x00050005, 0x0000003d, 0x74726576, 0x745f7865, 0x00000000, 0x00040006, 0x0000003d, + 0x00000000, 0x00000078, 0x00040006, 0x0000003d, 0x00000001, 0x00000079, 0x00040006, 0x0000003d, 0x00000002, + 0x0000007a, 0x00050006, 0x0000003d, 0x00000003, 0x6d726f6e, 0x00006c61, 0x00050006, 0x0000003d, 0x00000004, + 0x676e6174, 0x00746e65, 0x00040006, 0x0000003d, 0x00000005, 0x00000075, 0x00040006, 0x0000003d, 0x00000006, + 0x00000076, 0x00040047, 0x0000000b, 0x0000000b, 0x0000001c, 0x00040048, 0x00000019, 0x00000000, 0x00000005, + 0x00050048, 0x00000019, 0x00000000, 0x00000007, 0x00000010, 0x00050048, 0x00000019, 0x00000000, 0x00000023, + 0x00000000, 0x00030047, 0x0000001d, 0x00000002, 0x00050048, 0x0000001d, 0x00000000, 0x00000023, 0x00000000, + 0x00050048, 0x0000001d, 0x00000001, 0x00000023, 0x00000040, 0x00050048, 0x0000001d, 0x00000002, 0x00000023, + 0x00000048, 0x00050048, 0x0000001d, 0x00000003, 0x00000023, 0x00000050, 0x00040048, 0x0000001e, 0x00000000, + 0x00000005, 0x00050048, 0x0000001e, 0x00000000, 0x00000007, 0x00000010, 0x00050048, 0x0000001e, 0x00000000, + 0x00000023, 0x00000000, 0x00050048, 0x0000001e, 0x00000001, 0x00000023, 0x00000040, 0x00050048, 0x0000001e, + 0x00000002, 0x00000023, 0x00000044, 0x00040047, 0x0000001f, 0x00000006, 0x00000048, 0x00030047, 0x00000020, + 0x00000002, 0x00040048, 0x00000020, 0x00000000, 0x00000018, 0x00050048, 0x00000020, 0x00000000, 0x00000023, + 0x00000000, 0x00040047, 0x00000021, 0x00000006, 0x00000008, 0x00030047, 0x00000022, 0x00000002, 0x00040048, + 0x00000022, 0x00000000, 0x00000018, 0x00050048, 0x00000022, 0x00000000, 0x00000023, 0x00000000, 0x00050048, + 0x00000024, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000024, 0x00000001, 0x00000023, 0x00000004, + 0x00050048, 0x00000024, 0x00000002, 0x00000023, 0x00000008, 0x00050048, 0x00000024, 0x00000003, 0x00000023, + 0x0000000c, 0x00050048, 0x00000024, 0x00000004, 0x00000023, 0x00000010, 0x00050048, 0x00000024, 0x00000005, + 0x00000023, 0x00000014, 0x00050048, 0x00000024, 0x00000006, 0x00000023, 0x00000016, 0x00040047, 0x00000025, + 0x00000006, 0x00000018, 0x00030047, 0x00000026, 0x00000002, 0x00040048, 0x00000026, 0x00000000, 0x00000018, + 0x00050048, 0x00000026, 0x00000000, 0x00000023, 0x00000000, 0x00040047, 0x00000028, 0x00000021, 0x00000000, + 0x00040047, 0x00000028, 0x00000022, 0x00000000, 0x00040047, 0x00000057, 0x0000000b, 0x00000019, 0x00020013, + 0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00040015, 0x00000006, 0x00000020, 0x00000000, 0x00040017, + 0x00000009, 0x00000006, 0x00000003, 0x00040020, 0x0000000a, 0x00000001, 0x00000009, 0x0004003b, 0x0000000a, + 0x0000000b, 0x00000001, 0x0004002b, 0x00000006, 0x0000000c, 0x00000000, 0x00040020, 0x0000000d, 0x00000001, + 0x00000006, 0x00030016, 0x00000013, 0x00000020, 0x00040017, 0x00000014, 0x00000013, 0x00000004, 0x00040018, + 0x00000015, 0x00000014, 0x00000004, 0x0005001e, 0x00000016, 0x00000015, 0x00000006, 0x00000006, 0x0003001e, + 0x00000019, 0x00000015, 0x00030027, 0x0000001a, 0x000014e5, 0x00030027, 0x0000001b, 0x000014e5, 0x00030027, + 0x0000001c, 0x000014e5, 0x0006001e, 0x0000001d, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 0x0005001e, + 0x0000001e, 0x00000015, 0x00000006, 0x00000006, 0x0003001d, 0x0000001f, 0x0000001e, 0x0003001e, 0x00000020, + 0x0000001f, 0x00040020, 0x0000001a, 0x000014e5, 0x00000020, 0x0003001d, 0x00000021, 0x0000001c, 0x0003001e, + 0x00000022, 0x00000021, 0x00040020, 0x0000001b, 0x000014e5, 0x00000022, 0x00030016, 0x00000023, 0x00000010, + 0x0009001e, 0x00000024, 0x00000013, 0x00000013, 0x00000013, 0x00000006, 0x00000006, 0x00000023, 0x00000023, + 0x0003001d, 0x00000025, 0x00000024, 0x0003001e, 0x00000026, 0x00000025, 0x00040020, 0x0000001c, 0x000014e5, + 0x00000026, 0x00040020, 0x00000027, 0x00000002, 0x0000001d, 0x0004003b, 0x00000027, 0x00000028, 0x00000002, + 0x00040015, 0x00000029, 0x00000020, 0x00000001, 0x0004002b, 0x00000029, 0x0000002a, 0x00000001, 0x00040020, + 0x0000002b, 0x00000002, 0x0000001a, 0x0004002b, 0x00000029, 0x0000002e, 0x00000000, 0x00040020, 0x00000030, + 0x000014e5, 0x0000001e, 0x0004002b, 0x00000029, 0x00000035, 0x00000002, 0x00020014, 0x00000038, 0x0009001e, + 0x0000003d, 0x00000013, 0x00000013, 0x00000013, 0x00000006, 0x00000006, 0x00000023, 0x00000023, 0x00040020, + 0x00000040, 0x00000002, 0x0000001b, 0x00040020, 0x00000045, 0x000014e5, 0x0000001c, 0x00040020, 0x00000049, + 0x000014e5, 0x00000024, 0x0004002b, 0x00000029, 0x0000004d, 0x00000003, 0x00040020, 0x0000004e, 0x00000002, + 0x0000001c, 0x0004002b, 0x00000006, 0x00000055, 0x00000040, 0x0004002b, 0x00000006, 0x00000056, 0x00000001, + 0x0006002c, 0x00000009, 0x00000057, 0x00000055, 0x00000056, 0x00000056, 0x00050036, 0x00000002, 0x00000004, + 0x00000000, 0x00000003, 0x000200f8, 0x00000005, 0x000300f7, 0x00000058, 0x00000000, 0x000300fb, 0x0000000c, + 0x00000059, 0x000200f8, 0x00000059, 0x00050041, 0x0000000d, 0x0000000e, 0x0000000b, 0x0000000c, 0x0004003d, + 0x00000006, 0x0000000f, 0x0000000e, 0x00050041, 0x0000002b, 0x0000002c, 0x00000028, 0x0000002a, 0x0004003d, + 0x0000001a, 0x0000002d, 0x0000002c, 0x00060041, 0x00000030, 0x00000031, 0x0000002d, 0x0000002e, 0x0000000c, + 0x0006003d, 0x0000001e, 0x00000032, 0x00000031, 0x00000002, 0x00000008, 0x00040190, 0x00000016, 0x00000033, + 0x00000032, 0x00050051, 0x00000006, 0x00000061, 0x00000033, 0x00000001, 0x00050051, 0x00000006, 0x00000062, + 0x00000033, 0x00000002, 0x000500ae, 0x00000038, 0x00000039, 0x0000000f, 0x00000062, 0x000300f7, 0x0000003b, + 0x00000000, 0x000400fa, 0x00000039, 0x0000003a, 0x0000003b, 0x000200f8, 0x0000003a, 0x000200f9, 0x00000058, + 0x000200f8, 0x0000003b, 0x00050041, 0x00000040, 0x00000041, 0x00000028, 0x00000035, 0x0004003d, 0x0000001b, + 0x00000042, 0x00000041, 0x00060041, 0x00000045, 0x00000046, 0x00000042, 0x0000002e, 0x00000061, 0x0006003d, + 0x0000001c, 0x00000047, 0x00000046, 0x00000002, 0x00000008, 0x00060041, 0x00000049, 0x0000004a, 0x00000047, + 0x0000002e, 0x0000000f, 0x0006003d, 0x00000024, 0x0000004b, 0x0000004a, 0x00000002, 0x00000008, 0x00040190, + 0x0000003d, 0x0000004c, 0x0000004b, 0x00050041, 0x0000004e, 0x0000004f, 0x00000028, 0x0000004d, 0x0004003d, + 0x0000001c, 0x00000050, 0x0000004f, 0x00060041, 0x00000049, 0x00000053, 0x00000050, 0x0000002e, 0x0000000f, + 0x00040190, 0x00000024, 0x00000054, 0x0000004c, 0x0005003e, 0x00000053, 0x00000054, 0x00000002, 0x00000008, + 0x000200f9, 0x00000058, 0x000200f8, 0x00000058, 0x000100fd, 0x00010038 }; -TEST_CASE("SPIRV", "[buffer_references]") +TEST_CASE("SpirVParsingUtil", "[buffer_references]") { // setting this to kDebugSeverity yields debug-output from parser - gfxrecon::util::Log::Init(gfxrecon::util::Log::kInfoSeverity); + gfxrecon::util::Log::Init(gfxrecon::util::Log::kErrorSeverity); gfxrecon::util::SpirVParsingUtil spirVParsingUtil; // parsing nullptr yields false REQUIRE(!spirVParsingUtil.ParseBufferReferences(nullptr, 0)); - REQUIRE(spirVParsingUtil.ParseBufferReferences(test_bda_spirv, sizeof(test_bda_spirv))); + REQUIRE(spirVParsingUtil.ParseBufferReferences(spirv_bda_array, sizeof(spirv_bda_array))); - // there are 8 buffer-references in a uniform-buffer + // there are 2 buffer-references in a storage-buffer, pointing at an array of 'geometry-nodes' auto buffer_references = spirVParsingUtil.GetBufferReferenceInfos(); - REQUIRE(buffer_references.size() == 8); - REQUIRE(buffer_references[0].source == gfxrecon::util::SpirVParsingUtil::BufferReferenceLocation::UNIFORM_BUFFER); + REQUIRE(buffer_references.size() == 2); + REQUIRE(buffer_references[0].source == gfxrecon::util::SpirVParsingUtil::BufferReferenceLocation::STORAGE_BUFFER); REQUIRE(buffer_references[0].set == 0); - REQUIRE(buffer_references[0].binding == 1); - REQUIRE(buffer_references[0].buffer_offset == 144); + REQUIRE(buffer_references[0].binding == 4); + REQUIRE(buffer_references[0].buffer_offset == 0); + REQUIRE(buffer_references[0].array_stride == 24); - REQUIRE(buffer_references[7].source == gfxrecon::util::SpirVParsingUtil::BufferReferenceLocation::UNIFORM_BUFFER); - REQUIRE(buffer_references[7].set == 0); - REQUIRE(buffer_references[7].binding == 1); - REQUIRE(buffer_references[7].buffer_offset == 200); + REQUIRE(buffer_references[1].source == gfxrecon::util::SpirVParsingUtil::BufferReferenceLocation::STORAGE_BUFFER); + REQUIRE(buffer_references[1].set == 0); + REQUIRE(buffer_references[1].binding == 4); + REQUIRE(buffer_references[1].buffer_offset == 8); + REQUIRE(buffer_references[1].array_stride == 24); gfxrecon::util::Log::Release(); } + +TEST_CASE("SpirVParsingUtil_offsets", "[buffer_references_with_offset]") +{ + // setting this to kDebugSeverity yields debug-output from parser + gfxrecon::util::Log::Init(gfxrecon::util::Log::kErrorSeverity); + + gfxrecon::util::SpirVParsingUtil spirVParsingUtil; + + REQUIRE( + spirVParsingUtil.ParseBufferReferences(spirv_bda_push_constant_offset, sizeof(spirv_bda_push_constant_offset))); + + auto buffer_references = spirVParsingUtil.GetBufferReferenceInfos(); + + // define what to expect + REQUIRE(buffer_references.size() == 2); + REQUIRE(buffer_references[0].source == + gfxrecon::util::SpirVParsingUtil::BufferReferenceLocation::PUSH_CONSTANT_BLOCK); + REQUIRE(buffer_references[0].buffer_offset == 0); + REQUIRE(buffer_references[1].source == + gfxrecon::util::SpirVParsingUtil::BufferReferenceLocation::PUSH_CONSTANT_BLOCK); + + // check correct struct-offset calculation + REQUIRE(buffer_references[1].buffer_offset == 16); + + gfxrecon::util::Log::Release(); +} + +TEST_CASE("SpirVParsingUtil_pointer_chaining", "[buffer_references_pointer_chaining]") +{ + // setting this to kDebugSeverity yields debug-output from parser + gfxrecon::util::Log::Init(gfxrecon::util::Log::kErrorSeverity); + + gfxrecon::util::SpirVParsingUtil spirVParsingUtil; + + REQUIRE(spirVParsingUtil.ParseBufferReferences(spirv_bda_pointer_chaining, sizeof(spirv_bda_pointer_chaining))); + + auto buffer_references = spirVParsingUtil.GetBufferReferenceInfos(); + + // define what to expect + REQUIRE(buffer_references.size() == 4); + + // MeshEntryBuffer entries; // regular BDA + REQUIRE(buffer_references[0].source == gfxrecon::util::SpirVParsingUtil::BufferReferenceLocation::UNIFORM_BUFFER); + REQUIRE(buffer_references[0].buffer_offset == 64); + + // VertexBufferArray vertex_buffers; -> 1st access + REQUIRE(buffer_references[1].source == gfxrecon::util::SpirVParsingUtil::BufferReferenceLocation::UNIFORM_BUFFER); + REQUIRE(buffer_references[1].set == 0); + REQUIRE(buffer_references[1].binding == 0); + REQUIRE(buffer_references[1].buffer_offset == 72); + REQUIRE(buffer_references[1].array_stride == 0); + + // NOTE: we identify chained accesses by similar set/binding/offset + // VertexBufferArray vertex_buffers; -> 2nd access + REQUIRE(buffer_references[2].source == buffer_references[1].source); + REQUIRE(buffer_references[2].set == buffer_references[1].set); + REQUIRE(buffer_references[2].binding == buffer_references[1].binding); + REQUIRE(buffer_references[2].buffer_offset == buffer_references[1].buffer_offset); + REQUIRE(buffer_references[2].array_stride == 8); + + // VertexBuffer out_vertices; + REQUIRE(buffer_references[3].source == gfxrecon::util::SpirVParsingUtil::BufferReferenceLocation::UNIFORM_BUFFER); + REQUIRE(buffer_references[3].buffer_offset == 80); + REQUIRE(buffer_references[3].array_stride == 0); + + gfxrecon::util::Log::Release(); +} \ No newline at end of file diff --git a/third_party/gfxreconstruct/framework/util/test/test_valid_pointer.cpp b/third_party/gfxreconstruct/framework/util/test/test_valid_pointer.cpp new file mode 100644 index 000000000..2598c891f --- /dev/null +++ b/third_party/gfxreconstruct/framework/util/test/test_valid_pointer.cpp @@ -0,0 +1,53 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#include +#include "util/platform.h" + +using namespace gfxrecon::util::platform; + +TEST_CASE("valid_pointer - stack", "[]") +{ + int ans = 42; + void* p = &ans; + REQUIRE(PointerIsValid(p)); +} + +TEST_CASE("valid_pointer - null", "[]") +{ + void* p = nullptr; + REQUIRE_FALSE(PointerIsValid(p)); +} + +TEST_CASE("valid_pointer - invalid", "[]") +{ + // This is an address that is very likely to be invalid in any process. + void* p = reinterpret_cast(0x123); + REQUIRE_FALSE(PointerIsValid(p)); +} + +TEST_CASE("valid_pointer - heap", "[]") +{ + int* p = new int(42); + REQUIRE(PointerIsValid(p)); + delete p; +} diff --git a/third_party/gfxreconstruct/framework/util/type_traits_extras.h b/third_party/gfxreconstruct/framework/util/type_traits_extras.h new file mode 100644 index 000000000..470b759e0 --- /dev/null +++ b/third_party/gfxreconstruct/framework/util/type_traits_extras.h @@ -0,0 +1,74 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_UTIL_TYPE_TRAITS_EXTRAS_H +#define GFXRECON_UTIL_TYPE_TRAITS_EXTRAS_H + +#include +#include +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(util) + +// Metaprogramming utilities +// remove_cvref is C++ 20 and later +template +using RemoveCvRef_t = std::remove_cv_t>; + +template +struct ExactTypeMatchesAny : std::bool_constant<(std::is_same_v || ...)> +{}; + +template +inline constexpr bool ExactTypeMatchesAny_v = ExactTypeMatchesAny::value; + +template +struct RemoveCvRefTypeMatchesAny : std::bool_constant<(std::is_same_v, RemoveCvRef_t> || ...)> +{}; + +// Primary template. +// Will result in compile error if the partial specialization fails on non-variant type +template +struct IsVariantAlternative; + +// Uses a fold expression to OR together whether +template +struct IsVariantAlternative> : RemoveCvRefTypeMatchesAny +{}; + +template +inline constexpr bool IsVariantAlternative_v = IsVariantAlternative>::value; + +// NOTE: int8_t and uint8_t aren't on this list as that is not fully portable. However for all platforms where they are +// byte equivalent +// we'll define a ::value of true. +template +struct IsByteEquivalent : ExactTypeMatchesAny, std::byte, char, signed char, unsigned char> +{}; +template +inline constexpr bool IsByteEquivalent_v = IsByteEquivalent::value; + +GFXRECON_END_NAMESPACE(util) +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // GFXRECON_UTIL_TYPE_TRAITS_EXTRAS_H diff --git a/third_party/gfxreconstruct/framework/util/zlib_compressor.cpp b/third_party/gfxreconstruct/framework/util/zlib_compressor.cpp index 89bd53b6c..7fd749cc7 100644 --- a/third_party/gfxreconstruct/framework/util/zlib_compressor.cpp +++ b/third_party/gfxreconstruct/framework/util/zlib_compressor.cpp @@ -21,6 +21,7 @@ ** DEALINGS IN THE SOFTWARE. */ +#include "util/logging.h" #ifdef GFXRECON_ENABLE_ZLIB_COMPRESSION #include "util/zlib_compressor.h" @@ -30,6 +31,8 @@ GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(util) +static constexpr size_t CHUNK = 256; + size_t ZlibCompressor::Compress(const size_t uncompressed_size, const uint8_t* uncompressed_data, std::vector* compressed_data, @@ -57,24 +60,49 @@ size_t ZlibCompressor::Compress(const size_t uncompressed_size, compress_stream.next_in = const_cast(uncompressed_data); GFXRECON_CHECK_CONVERSION_DATA_LOSS(uInt, compressed_data->size()); - compress_stream.avail_out = static_cast(compressed_data->size()); + compress_stream.avail_out = static_cast(compressed_data->size() - compressed_data_offset); compress_stream.next_out = compressed_data->data() + compressed_data_offset; - // Perform the compression (deflate the data). + // Initialize the compressor deflateInit(&compress_stream, Z_BEST_COMPRESSION); - deflate(&compress_stream, Z_FINISH); + + while (true) + { + // Perform the compression (deflate the data). + int ret = deflate(&compress_stream, Z_FINISH); + + if (ret == Z_STREAM_ERROR) + { + GFXRECON_LOG_ERROR("%s() There was an error while compressing.") + return 0; + } + + // This means that the compression is complete + if (ret == Z_STREAM_END) + { + break; + } + + // deflate() has exhausted the out buffer. Allocate some more and call deflate again + const size_t current_size = compressed_data->size(); + compressed_data->resize(current_size + CHUNK); + compress_stream.avail_out = static_cast(CHUNK); + compress_stream.next_out = compressed_data->data() + current_size; + } + deflateEnd(&compress_stream); // Determine the size of data from the stream copy_size = compress_stream.total_out; + compressed_data->resize(copy_size); return copy_size; } -size_t ZlibCompressor::Decompress(const size_t compressed_size, - const std::vector& compressed_data, - const size_t expected_uncompressed_size, - std::vector* uncompressed_data) const +size_t ZlibCompressor::Decompress(const size_t compressed_size, + const uint8_t* compressed_data, + const size_t expected_uncompressed_size, + uint8_t* uncompressed_data) const { size_t copy_size = 0; @@ -90,11 +118,11 @@ size_t ZlibCompressor::Decompress(const size_t compressed_size, GFXRECON_CHECK_CONVERSION_DATA_LOSS(uInt, compressed_size); decompress_stream.avail_in = static_cast(compressed_size); - decompress_stream.next_in = const_cast(compressed_data.data()); + decompress_stream.next_in = const_cast(compressed_data); GFXRECON_CHECK_CONVERSION_DATA_LOSS(uInt, expected_uncompressed_size); decompress_stream.avail_out = static_cast(expected_uncompressed_size); - decompress_stream.next_out = uncompressed_data->data(); + decompress_stream.next_out = reinterpret_cast(uncompressed_data); // Perform the decompression (inflate the data). inflateInit(&decompress_stream); diff --git a/third_party/gfxreconstruct/framework/util/zlib_compressor.h b/third_party/gfxreconstruct/framework/util/zlib_compressor.h index f76960457..5eda48a66 100644 --- a/third_party/gfxreconstruct/framework/util/zlib_compressor.h +++ b/third_party/gfxreconstruct/framework/util/zlib_compressor.h @@ -41,10 +41,10 @@ class ZlibCompressor : public Compressor std::vector* compressed_data, size_t compressed_data_offset) const override; - size_t Decompress(size_t compressed_size, - const std::vector& compressed_data, - size_t expected_uncompressed_size, - std::vector* uncompressed_data) const override; + size_t Decompress(size_t compressed_size, + const uint8_t* compressed_data, + size_t expected_uncompressed_size, + uint8_t* uncompressed_data) const override; }; GFXRECON_END_NAMESPACE(util) diff --git a/third_party/gfxreconstruct/framework/util/zstd_compressor.cpp b/third_party/gfxreconstruct/framework/util/zstd_compressor.cpp index 4c08bf22b..14a32dff9 100644 --- a/third_party/gfxreconstruct/framework/util/zstd_compressor.cpp +++ b/third_party/gfxreconstruct/framework/util/zstd_compressor.cpp @@ -71,10 +71,10 @@ size_t ZstdCompressor::Compress(const size_t uncompressed_size, return data_size; } -size_t ZstdCompressor::Decompress(const size_t compressed_size, - const std::vector& compressed_data, - const size_t expected_uncompressed_size, - std::vector* uncompressed_data) const +size_t ZstdCompressor::Decompress(const size_t compressed_size, + const uint8_t* compressed_data, + const size_t expected_uncompressed_size, + uint8_t* uncompressed_data) const { size_t data_size = 0; @@ -83,9 +83,9 @@ size_t ZstdCompressor::Decompress(const size_t compressed_size, return 0; } - size_t uncompressed_size_generated = ZSTD_decompress(reinterpret_cast(uncompressed_data->data()), + size_t uncompressed_size_generated = ZSTD_decompress(reinterpret_cast(uncompressed_data), expected_uncompressed_size, - reinterpret_cast(compressed_data.data()), + reinterpret_cast(compressed_data), compressed_size); if (!ZSTD_isError(uncompressed_size_generated)) diff --git a/third_party/gfxreconstruct/framework/util/zstd_compressor.h b/third_party/gfxreconstruct/framework/util/zstd_compressor.h index 694c6cbc9..9b74dc55e 100644 --- a/third_party/gfxreconstruct/framework/util/zstd_compressor.h +++ b/third_party/gfxreconstruct/framework/util/zstd_compressor.h @@ -40,10 +40,10 @@ class ZstdCompressor : public Compressor std::vector* compressed_data, size_t compressed_data_offset) const override; - size_t Decompress(size_t compressed_size, - const std::vector& compressed_data, - size_t expected_uncompressed_size, - std::vector* uncompressed_data) const override; + size_t Decompress(size_t compressed_size, + const uint8_t* compressed_data, + size_t expected_uncompressed_size, + uint8_t* uncompressed_data) const override; }; GFXRECON_END_NAMESPACE(util) diff --git a/third_party/gfxreconstruct/layer/CMakeLists.txt b/third_party/gfxreconstruct/layer/CMakeLists.txt index 17a908266..71fa9919c 100644 --- a/third_party/gfxreconstruct/layer/CMakeLists.txt +++ b/third_party/gfxreconstruct/layer/CMakeLists.txt @@ -69,7 +69,8 @@ target_link_libraries(VkLayer_gfxreconstruct gfxrecon_util vulkan_registry $<$:OpenXR> - platform_specific) + platform_specific + project_version) # Limit what symbols are exported if(MSVC) diff --git a/third_party/gfxreconstruct/layer/ags_capture/CMakeLists.txt b/third_party/gfxreconstruct/layer/ags_capture/CMakeLists.txt index c592272b2..c8f48d55c 100644 --- a/third_party/gfxreconstruct/layer/ags_capture/CMakeLists.txt +++ b/third_party/gfxreconstruct/layer/ags_capture/CMakeLists.txt @@ -44,9 +44,7 @@ if(MSVC) endif() add_custom_command(TARGET ags_capture PRE_BUILD - COMMAND lib /def:${CMAKE_CURRENT_LIST_DIR}/amd_ags_x64_orig.def /out:${LINK_AGS_OUTPUT} /machine:${LINK_ARCH} - DEPENDS ${CMAKE_CURRENT_LIST_DIR}/amd_ags_x64_orig.def) - + COMMAND lib /def:${CMAKE_CURRENT_LIST_DIR}/amd_ags_x64_orig.def /out:${LINK_AGS_OUTPUT} /machine:${LINK_ARCH}) install(FILES $/amd_ags_x64_capture.dll DESTINATION ${CMAKE_INSTALL_BINDIR}/d3d12_capture) diff --git a/third_party/gfxreconstruct/layer/d3d12/CMakeLists.txt b/third_party/gfxreconstruct/layer/d3d12/CMakeLists.txt index f69921921..be831fae2 100644 --- a/third_party/gfxreconstruct/layer/d3d12/CMakeLists.txt +++ b/third_party/gfxreconstruct/layer/d3d12/CMakeLists.txt @@ -51,8 +51,7 @@ endif() common_build_directives(d3d12) add_custom_command(TARGET d3d12 PRE_BUILD - COMMAND lib /def:${CMAKE_CURRENT_LIST_DIR}/d3d12_ms.def /out:${LINK_D3D12_OUTPUT} /machine:${LINK_ARCH} - DEPENDS ${CMAKE_CURRENT_LIST_DIR}/d3d12_ms.def) + COMMAND lib /def:${CMAKE_CURRENT_LIST_DIR}/d3d12_ms.def /out:${LINK_D3D12_OUTPUT} /machine:${LINK_ARCH}) install(FILES $/d3d12.dll DESTINATION ${CMAKE_INSTALL_BINDIR}/d3d12_capture) diff --git a/third_party/gfxreconstruct/layer/dxgi/CMakeLists.txt b/third_party/gfxreconstruct/layer/dxgi/CMakeLists.txt index 8f6dd2a18..19fcb1bb6 100644 --- a/third_party/gfxreconstruct/layer/dxgi/CMakeLists.txt +++ b/third_party/gfxreconstruct/layer/dxgi/CMakeLists.txt @@ -45,7 +45,6 @@ endif() common_build_directives(dxgi) add_custom_command(TARGET dxgi PRE_BUILD - COMMAND lib /def:${CMAKE_CURRENT_LIST_DIR}/dxgi_ms.def /out:${LINK_DXGI_OUTPUT} /machine:${LINK_ARCH} - DEPENDS ${CMAKE_CURRENT_LIST_DIR}/dxgi_ms.def) + COMMAND lib /def:${CMAKE_CURRENT_LIST_DIR}/dxgi_ms.def /out:${LINK_DXGI_OUTPUT} /machine:${LINK_ARCH}) install(FILES $/dxgi.dll DESTINATION ${CMAKE_INSTALL_BINDIR}/d3d12_capture) diff --git a/third_party/gfxreconstruct/layer/json/VkLayer_gfxreconstruct.json.in b/third_party/gfxreconstruct/layer/json/VkLayer_gfxreconstruct.json.in index 62cc1050d..fbf9fcfa1 100644 --- a/third_party/gfxreconstruct/layer/json/VkLayer_gfxreconstruct.json.in +++ b/third_party/gfxreconstruct/layer/json/VkLayer_gfxreconstruct.json.in @@ -157,6 +157,14 @@ "type": "STRING", "default": "" }, + { + "key": "capture_process_name", + "env": "GFXRECON_CAPTURE_PROCESS_NAME", + "label": "Capture Specific process", + "description": "Specify one process name to capture.", + "type": "STRING", + "default": "" + }, { "key": "capture_file", "env": "GFXRECON_CAPTURE_FILE", diff --git a/third_party/gfxreconstruct/layer/layer_vulkan_entry.cpp b/third_party/gfxreconstruct/layer/layer_vulkan_entry.cpp index f8a5ca55e..32cfbda80 100644 --- a/third_party/gfxreconstruct/layer/layer_vulkan_entry.cpp +++ b/third_party/gfxreconstruct/layer/layer_vulkan_entry.cpp @@ -122,222 +122,6 @@ LayerVulkanEntry::LayerVulkanEntry(const encode::VulkanFunctionTable& vulkan_fun LayerVulkanEntry::~LayerVulkanEntry() {} -VkResult LayerVulkanEntry::dispatch_CreateInstance(const VkInstanceCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkInstance* pInstance) -{ - VkResult result = VK_ERROR_INITIALIZATION_FAILED; - - VkLayerInstanceCreateInfo* chain_info = - const_cast(GetInstanceChainInfo(pCreateInfo, VK_LAYER_LINK_INFO)); - - if (chain_info && chain_info->u.pLayerInfo) - { - PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; - - if (fpGetInstanceProcAddr) - { - PFN_vkCreateInstance fpCreateInstance = - reinterpret_cast(fpGetInstanceProcAddr(VK_NULL_HANDLE, "vkCreateInstance")); - - if (fpCreateInstance) - { - // Advance the link info for the next element on the chain - auto pLayerInfo = chain_info->u.pLayerInfo; - chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; - - result = fpCreateInstance(pCreateInfo, pAllocator, pInstance); - - if ((result == VK_SUCCESS) && pInstance && (*pInstance != nullptr)) - { - AddInstanceHandle(*pInstance); - VkInstance unwrapped_instance = *pInstance; - - encode::VulkanCaptureManager* manager = encode::VulkanCaptureManager::Get(); - assert(manager != nullptr); - manager->InitVkInstance(pInstance, fpGetInstanceProcAddr); - - // Register the next layer's GetPhysicalDeviceProcAddr func only after *pInstance - // has been updated to our wrapper in manager->InitVkInstance() above: - auto fpNextGetPhysicalDeviceProcAddr = reinterpret_cast( - fpGetInstanceProcAddr(unwrapped_instance, "vk_layerGetPhysicalDeviceProcAddr")); - SetInstanceNextGPDPA(*pInstance, fpNextGetPhysicalDeviceProcAddr); - } - } - } - } - - return result; -} - -VkResult LayerVulkanEntry::dispatch_CreateDevice(VkPhysicalDevice physicalDevice, - const VkDeviceCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDevice* pDevice) -{ - VkResult result = VK_ERROR_INITIALIZATION_FAILED; - VkLayerDeviceCreateInfo* chain_info = - const_cast(GetDeviceChainInfo(pCreateInfo, VK_LAYER_LINK_INFO)); - - if (chain_info && chain_info->u.pLayerInfo) - { - VkInstance layer_instance = GetInstanceHandle(physicalDevice); - - PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; - PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr; - - if (fpGetInstanceProcAddr && fpGetDeviceProcAddr && layer_instance) - { - PFN_vkCreateDevice fpCreateDevice = - reinterpret_cast(fpGetInstanceProcAddr(layer_instance, "vkCreateDevice")); - - if (fpCreateDevice) - { - // Advance the link info for the next element on the chain - chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; - - result = fpCreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice); - - if ((result == VK_SUCCESS) && pDevice && (*pDevice != nullptr)) - { - encode::VulkanCaptureManager* manager = encode::VulkanCaptureManager::Get(); - assert(manager != nullptr); - manager->InitVkDevice(pDevice, fpGetDeviceProcAddr); - } - } - } - } - - return result; -} - -PFN_vkVoidFunction LayerVulkanEntry::GetInstanceProcAddr(VkInstance instance, const char* pName) -{ - PFN_vkVoidFunction result = nullptr; - - // This is required by the loader and is called directly with an "instance" actually - // set to the internal "loader_instance". Detect that case and return - if (!strcmp(pName, "vkCreateInstance")) - { - return reinterpret_cast(encode::vkCreateInstance); - } - - bool has_implementation = false; - - // Check for implementation in the next level - if (instance != VK_NULL_HANDLE) - { - auto table = encode::vulkan_wrappers::GetInstanceTable(instance); - if ((table != nullptr) && (table->GetInstanceProcAddr != nullptr)) - { - has_implementation = (table->GetInstanceProcAddr(instance, pName) != nullptr); - } - } - - // Check for implementation in the layer itself - if (!has_implementation) - { - for (const auto& ext_props : kVulkanDeviceExtensionProps) - { - if (std::find(ext_props.instance_funcs.begin(), ext_props.instance_funcs.end(), pName) != - ext_props.instance_funcs.end()) - { - has_implementation = true; - break; - } - } - } - - // Only intercept the requested function if there is an implementation available, or if - // the instance handle is null and we can't determine if it is available from the next level. - if (has_implementation || (instance == VK_NULL_HANDLE)) - { - const auto entry = vulkan_function_table_.find(pName); - - if (entry != vulkan_function_table_.end()) - { - result = entry->second; - } - } - - // Lastly check custom GFXR exposed functions - if (result == nullptr) - { - const auto entry = custom_func_table.find(pName); - - if (entry != custom_func_table.end()) - { - result = entry->second; - } - } - - return result; -} - -PFN_vkVoidFunction LayerVulkanEntry::GetDeviceProcAddr(VkDevice device, const char* pName) -{ - PFN_vkVoidFunction result = nullptr; - - if (device != VK_NULL_HANDLE) - { - bool has_implementation = false; - - // Check for implementation in the next level - auto table = encode::vulkan_wrappers::GetDeviceTable(device); - if ((table != nullptr) && (table->GetDeviceProcAddr != nullptr)) - { - has_implementation = (table->GetDeviceProcAddr(device, pName) != nullptr); - } - - // Check for implementation in the layer itself - if (!has_implementation) - { - for (const auto& ext_props : kVulkanDeviceExtensionProps) - { - if (std::find(ext_props.device_funcs.begin(), ext_props.device_funcs.end(), pName) != - ext_props.device_funcs.end()) - { - has_implementation = true; - break; - } - } - } - - // Only intercept the requested function if there is an implementation available - if (has_implementation) - { - const auto entry = vulkan_function_table_.find(pName); - if (entry != vulkan_function_table_.end()) - { - result = entry->second; - } - } - } - - return result; -} - -/** - * We don't actually need to do anything for this function, - * but we do need to unwrap the instance before the downstream layer - * sees it. - */ -PFN_vkVoidFunction LayerVulkanEntry::GetPhysicalDeviceProcAddr(VkInstance ourInstanceWrapper, const char* pName) -{ - PFN_vkVoidFunction result = nullptr; - - if (ourInstanceWrapper != VK_NULL_HANDLE) - { - PFN_GetPhysicalDeviceProcAddr vulkan_next_gpdpa = GetNextGPDPA(ourInstanceWrapper); - if (vulkan_next_gpdpa != nullptr) - { - result = vulkan_next_gpdpa(ourInstanceWrapper, pName); - } - } - - return result; -} - VkResult LayerVulkanEntry::EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, @@ -376,10 +160,9 @@ VkResult LayerVulkanEntry::EnumerateDeviceExtensionProperties(VkPhysicalDevice } else { - // If this function was not called with the layer's name, we expect to dispatch down the chain to obtain the ICD - // provided extensions. - // In order to screen out unsupported extensions, we always query the chain - // twice, and remove those that are present from the count. + // If this function was not called with the layer's name, we expect to dispatch down the chain to obtain the + // ICD provided extensions. In order to screen out unsupported extensions, we always query the chain twice, + // and remove those that are present from the count. auto instance_table = encode::vulkan_wrappers::GetInstanceTable(physicalDevice); uint32_t downstream_property_count = 0; @@ -402,7 +185,8 @@ VkResult LayerVulkanEntry::EnumerateDeviceExtensionProperties(VkPhysicalDevice kVulkanUnsupportedDeviceExtensions.data(), std::end(kVulkanUnsupportedDeviceExtensions) - std::begin(kVulkanUnsupportedDeviceExtensions)); - // Append the extensions we provide in the list to the caller if they aren't already provided downstream. + // Append the extensions we provide in the list to the caller if they aren't already provided + // downstream. if (pLayerName == nullptr) { for (auto& provided_prop : kVulkanDeviceExtensionProps) @@ -464,39 +248,111 @@ VkResult LayerVulkanEntry::EnumerateInstanceExtensionProperties(const char* return result; } -VkResult LayerVulkanEntry::EnumerateInstanceLayerProperties(uint32_t* pPropertyCount, VkLayerProperties* pProperties) +VkResult LayerVulkanEntry::dispatch_CreateInstance(const VkInstanceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkInstance* pInstance) { - VkResult result = VK_SUCCESS; + VkResult result = VK_ERROR_INITIALIZATION_FAILED; + + VkLayerInstanceCreateInfo* chain_info = + const_cast(GetInstanceChainInfo(pCreateInfo, VK_LAYER_LINK_INFO)); - if (pProperties == nullptr) + if (chain_info && chain_info->u.pLayerInfo) { - if (pPropertyCount != nullptr) + PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; + + if (fpGetInstanceProcAddr) { - *pPropertyCount = 1; + PFN_vkCreateInstance fpCreateInstance = + reinterpret_cast(fpGetInstanceProcAddr(VK_NULL_HANDLE, "vkCreateInstance")); + + if (fpCreateInstance) + { + // Advance the link info for the next element on the chain + auto pLayerInfo = chain_info->u.pLayerInfo; + chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; + + result = fpCreateInstance(pCreateInfo, pAllocator, pInstance); + + if ((result == VK_SUCCESS) && pInstance && (*pInstance != nullptr)) + { + AddInstanceHandle(*pInstance); + VkInstance unwrapped_instance = *pInstance; + + encode::VulkanCaptureManager* manager = encode::VulkanCaptureManager::Get(); + assert(manager != nullptr); + manager->InitVkInstance(pInstance, fpGetInstanceProcAddr); + + // Register the next layer's GetPhysicalDeviceProcAddr func only after *pInstance + // has been updated to our wrapper in manager->InitVkInstance() above: + auto fpNextGetPhysicalDeviceProcAddr = reinterpret_cast( + fpGetInstanceProcAddr(unwrapped_instance, "vk_layerGetPhysicalDeviceProcAddr")); + SetInstanceNextGPDPA(*pInstance, fpNextGetPhysicalDeviceProcAddr); + } + } } } - else + + return result; +} + +VkResult LayerVulkanEntry::dispatch_CreateDevice(VkPhysicalDevice physicalDevice, + const VkDeviceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDevice* pDevice) +{ + VkResult result = VK_ERROR_INITIALIZATION_FAILED; + VkLayerDeviceCreateInfo* chain_info = + const_cast(GetDeviceChainInfo(pCreateInfo, VK_LAYER_LINK_INFO)); + + if (chain_info && chain_info->u.pLayerInfo) { - if ((pPropertyCount != nullptr) && (*pPropertyCount >= 1)) - { - util::platform::MemoryCopy(pProperties, sizeof(*pProperties), &kLayerProps, sizeof(kLayerProps)); - *pPropertyCount = 1; - } - else + VkInstance layer_instance = GetInstanceHandle(physicalDevice); + + PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; + PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr; + + if (fpGetInstanceProcAddr && fpGetDeviceProcAddr && layer_instance) { - result = VK_INCOMPLETE; + PFN_vkCreateDevice fpCreateDevice = + reinterpret_cast(fpGetInstanceProcAddr(layer_instance, "vkCreateDevice")); + + if (fpCreateDevice) + { + // Advance the link info for the next element on the chain + chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; + + result = fpCreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice); + + if ((result == VK_SUCCESS) && pDevice && (*pDevice != nullptr)) + { + encode::VulkanCaptureManager* manager = encode::VulkanCaptureManager::Get(); + assert(manager != nullptr); + manager->InitVkDevice(pDevice, fpGetDeviceProcAddr); + } + } } } return result; } -VkResult LayerVulkanEntry::EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkLayerProperties* pProperties) +PFN_vkVoidFunction LayerVulkanEntry::GetInstanceProcAddr(VkInstance instance, const char* pName) { - GFXRECON_UNREFERENCED_PARAMETER(physicalDevice); - return EnumerateInstanceLayerProperties(pPropertyCount, pProperties); + PFN_vkVoidFunction result = VulkanEntryBase::GetInstanceProcAddr(instance, pName); + + // Lastly check custom GFXR exposed functions + if (result == nullptr) + { + const auto entry = custom_func_table.find(pName); + + if (entry != custom_func_table.end()) + { + result = entry->second; + } + } + + return result; } GFXRECON_END_NAMESPACE(vulkan_layer) diff --git a/third_party/gfxreconstruct/layer/layer_vulkan_entry.h b/third_party/gfxreconstruct/layer/layer_vulkan_entry.h index e3a3e2c43..d6988fb6d 100644 --- a/third_party/gfxreconstruct/layer/layer_vulkan_entry.h +++ b/third_party/gfxreconstruct/layer/layer_vulkan_entry.h @@ -77,23 +77,15 @@ class LayerVulkanEntry : public encode::VulkanEntryBase LayerVulkanEntry(const encode::VulkanFunctionTable& vulkan_function_table); virtual ~LayerVulkanEntry(); - // The following prototype declarations are required so the dispatch table can find these - // functions which are defined in trace_layer.cpp virtual PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* pName) override; - virtual PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* pName) override; - virtual PFN_vkVoidFunction GetPhysicalDeviceProcAddr(VkInstance ourInstanceWrapper, const char* pName) override; - virtual VkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, - const char* pLayerName, - uint32_t* pPropertyCount, - VkExtensionProperties* pProperties) override; - virtual VkResult EnumerateInstanceExtensionProperties(const char* pLayerName, - uint32_t* pPropertyCount, - VkExtensionProperties* pProperties) override; - virtual VkResult EnumerateInstanceLayerProperties(uint32_t* pPropertyCount, - VkLayerProperties* pProperties) override; - virtual VkResult EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkLayerProperties* pProperties) override; + + virtual VkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, + const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) override; + virtual VkResult EnumerateInstanceExtensionProperties(const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) override; virtual VkResult dispatch_CreateInstance(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, diff --git a/third_party/gfxreconstruct/project_version.cpp b/third_party/gfxreconstruct/project_version.cpp new file mode 100644 index 000000000..d68a44cd3 --- /dev/null +++ b/third_party/gfxreconstruct/project_version.cpp @@ -0,0 +1,31 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#include PROJECT_VERSION_HEADER_FILE + +// This will be generated by CMake and contain the full version string with the SHA +#include "project_version_string.h" + +const char* GetProjectVersionString() +{ + return GFXRECON_PROJECT_VERSION_STRING_MACRO; +} diff --git a/third_party/gfxreconstruct/project_version.h.in b/third_party/gfxreconstruct/project_version.h.in index e6ec300b9..23807f83d 100644 --- a/third_party/gfxreconstruct/project_version.h.in +++ b/third_party/gfxreconstruct/project_version.h.in @@ -28,7 +28,6 @@ #define GFXRECON_PROJECT_VERSION_PATCH @GFXRECONSTRUCT_PROJECT_VERSION_PATCH@ #define GFXRECON_PROJECT_VERSION_DESIGNATION "@GFXRECON_PROJECT_VERSION_DESIGNATION@" -#define GFXRECON_PROJECT_VERSION_SHA1 "@GFXRECON_PROJECT_VERSION_SHA1@" #define GFXRECON_PROJECT_BUILD_TYPE "$" #define GFXRECON_VERSION_STR_EXPAND(x) #x @@ -40,10 +39,8 @@ #define API_SUPPORT "" #endif -#define GFXRECON_PROJECT_VERSION_STRING \ - GFXRECON_VERSION_STR(GFXRECON_PROJECT_VERSION_MAJOR) \ - "." GFXRECON_VERSION_STR(GFXRECON_PROJECT_VERSION_MINOR) "." GFXRECON_VERSION_STR(GFXRECON_PROJECT_VERSION_PATCH) \ - GFXRECON_PROJECT_VERSION_DESIGNATION " (" GFXRECON_PROJECT_VERSION_SHA1 API_SUPPORT") " GFXRECON_PROJECT_BUILD_TYPE +// Returns the full version including major, minor, patch, designation, SHA, API, and build type. +const char* GetProjectVersionString(); #define GFXRECON_PROJECT_NAME "GFXReconstruct" #define GFXRECON_PROJECT_VULKAN_LAYER_NAME "VK_LAYER_LUNARG_gfxreconstruct" diff --git a/third_party/gfxreconstruct/project_version_string.h.in b/third_party/gfxreconstruct/project_version_string.h.in new file mode 100644 index 000000000..7e40e5f25 --- /dev/null +++ b/third_party/gfxreconstruct/project_version_string.h.in @@ -0,0 +1,41 @@ +/* +** Copyright (c) 2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +// Users should not include this header file since it will cause unnecessary rebuilds whenever the SHA changes. +// Instead, the user should link against project_version, #include PROJECT_VERSION_HEADER_FILE, and call +// GetProjectVersionString(). This file is only required for version.rc, otherwise this information could be hidden in a +// .cpp file. + +#ifndef GFXRECON_PROJECT_VERSION_STRING_H +#define GFXRECON_PROJECT_VERSION_STRING_H + +#include PROJECT_VERSION_HEADER_FILE + +#define GFXRECON_PROJECT_VERSION_SHA1 "@GFXRECON_PROJECT_VERSION_SHA1@" + +#define GFXRECON_PROJECT_VERSION_STRING_MACRO \ + GFXRECON_VERSION_STR(GFXRECON_PROJECT_VERSION_MAJOR) \ + "." GFXRECON_VERSION_STR(GFXRECON_PROJECT_VERSION_MINOR) "." GFXRECON_VERSION_STR(GFXRECON_PROJECT_VERSION_PATCH) \ + GFXRECON_PROJECT_VERSION_DESIGNATION " (" GFXRECON_PROJECT_VERSION_SHA1 API_SUPPORT \ + ") " GFXRECON_PROJECT_BUILD_TYPE + +#endif // GFXRECON_PROJECT_VERSION_STRING_H diff --git a/third_party/gfxreconstruct/scripts/CMakeLists.txt b/third_party/gfxreconstruct/scripts/CMakeLists.txt index 7ccaf7103..6718e950d 100644 --- a/third_party/gfxreconstruct/scripts/CMakeLists.txt +++ b/third_party/gfxreconstruct/scripts/CMakeLists.txt @@ -33,8 +33,7 @@ if (D3D12_SUPPORT) set_target_properties(gfxrecon-optimize-renamed.py PROPERTIES FOLDER "gfxreconstruct") endif() - add_custom_command(TARGET gfxrecon-optimize-renamed.py - DEPENDS ${CMAKE_SOURCE_SOURCE_DIR}/gfxrecon-optimize-renamed.py + add_custom_command(TARGET gfxrecon-optimize-renamed.py POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gfxrecon-optimize-renamed.py ${CMAKE_CURRENT_BINARY_DIR}/gfxrecon-optimize-renamed.py) install(FILES gfxrecon-optimize-renamed.py DESTINATION ${CMAKE_INSTALL_BINDIR} PERMISSIONS @@ -42,13 +41,11 @@ if (D3D12_SUPPORT) add_custom_target(gfxrecon-replay-renamed.py ALL) - # GOOGLE: Add folder organization for windows build in dive. if(MSVC) set_target_properties(gfxrecon-replay-renamed.py PROPERTIES FOLDER "gfxreconstruct") endif() - add_custom_command(TARGET gfxrecon-replay-renamed.py - DEPENDS ${CMAKE_SOURCE_SOURCE_DIR}/gfxrecon-replay-renamed.py + add_custom_command(TARGET gfxrecon-replay-renamed.py POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gfxrecon-replay-renamed.py ${CMAKE_CURRENT_BINARY_DIR}/gfxrecon-replay-renamed.py) install(FILES gfxrecon-replay-renamed.py DESTINATION ${CMAKE_INSTALL_BINDIR} PERMISSIONS diff --git a/third_party/gfxreconstruct/scripts/build.py b/third_party/gfxreconstruct/scripts/build.py index 4f97f471f..9c338f951 100644 --- a/third_party/gfxreconstruct/scripts/build.py +++ b/third_party/gfxreconstruct/scripts/build.py @@ -125,7 +125,7 @@ def parse_args(): help='Build test apps') arg_parser.add_argument( '--cmake-system-version', dest='cmake_system_version', - type=str, default="10.0.20348.0",help='Select SDK version') + type=str, default="10.0.26100.0",help='Select SDK version') arg_parser.add_argument( '--skip-d3d12-support', dest='skip_d3d12_support', action='store_true', default=False,help='Skip Direct3D 12 build') @@ -140,6 +140,10 @@ def parse_args(): '--cmake-extra', dest='cmake_extra', action='append', default=[], help='Extra variables to set on the cmake invocation') + arg_parser.add_argument( + '-g', '--generator', dest='generator', + metavar='GENERATOR', action='store', default=None, + help='CMake generator to use for the build. If not specified, the default generator will be used.') return arg_parser.parse_args() @@ -240,6 +244,8 @@ def cmake_generate_options(args): '-DBUILD_LAUNCHER_AND_INTERCEPTOR={}'.format( 'OFF' if not args.build_launcher else 'ON')) generate_options.extend('-D' + arg for arg in args.cmake_extra) + if args.generator: + generate_options.append('-G{}'.format(args.generator)) return generate_options diff --git a/third_party/gfxreconstruct/test.ref b/third_party/gfxreconstruct/test.ref new file mode 100644 index 000000000..a5500de68 --- /dev/null +++ b/third_party/gfxreconstruct/test.ref @@ -0,0 +1 @@ +a0de85cc91b851bdce58b78edb237be18c977ed9 diff --git a/third_party/gfxreconstruct/test/CMakeLists.txt b/third_party/gfxreconstruct/test/CMakeLists.txt index 84c252e41..d97c2b74a 100644 --- a/third_party/gfxreconstruct/test/CMakeLists.txt +++ b/third_party/gfxreconstruct/test/CMakeLists.txt @@ -31,6 +31,9 @@ if (NOT DEFINED ENV{GFXRECON_NO_TEST_APPS}) set(GFXRECON_INSTALL_TESTDIR ${CMAKE_INSTALL_PREFIX}/test) add_subdirectory(icd) + if(NOT CMAKE_SYSTEM_NAME MATCHES "Android") + add_subdirectory(android_mock) + endif() add_subdirectory(test_apps) enable_testing() @@ -39,6 +42,7 @@ if (NOT DEFINED ENV{GFXRECON_NO_TEST_APPS}) include(GoogleTest) set(GFXRECON_TESTCASES + test_cases/ahb.cpp test_cases/triangle.cpp test_cases/multisample-depth.cpp test_cases/shader-objects.cpp @@ -52,10 +56,6 @@ if (NOT DEFINED ENV{GFXRECON_NO_TEST_APPS}) list(APPEND GFXRECON_TESTCASES test_cases/wait-for-present.cpp) endif() - if(CMAKE_SYSTEM_NAME MATCHES "Android") - list(APPEND GFXRECON_TESTCASES test_cases/ahb.cpp) - endif() - add_executable(gfxrecon-testapp-runner ${GFXRECON_TESTCASES}) add_dependencies(gfxrecon-testapp-runner gfxrecon-test-launcher VkICD_mock_icd gfxrecon-convert VkLayer_gfxreconstruct) diff --git a/third_party/gfxreconstruct/test/android_mock/CMakeLists.txt b/third_party/gfxreconstruct/test/android_mock/CMakeLists.txt new file mode 100644 index 000000000..61554ffe5 --- /dev/null +++ b/third_party/gfxreconstruct/test/android_mock/CMakeLists.txt @@ -0,0 +1,29 @@ +############################################################################### +# Copyright (c) 2025 LunarG, Inc. +# All rights reserved +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +# Author: LunarG Team +# Description: CMake script for Android Mock Driver +############################################################################### + +add_library(gfxrecon_android_mock ${CMAKE_CURRENT_SOURCE_DIR}/android/hardware_buffer.cpp) +target_compile_definitions(gfxrecon_android_mock PUBLIC VK_USE_PLATFORM_ANDROID_KHR VVL_MOCK_ANDROID) +target_include_directories(gfxrecon_android_mock SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/third_party/gfxreconstruct/test/android_mock/README.md b/third_party/gfxreconstruct/test/android_mock/README.md new file mode 100644 index 000000000..1437e9ffa --- /dev/null +++ b/third_party/gfxreconstruct/test/android_mock/README.md @@ -0,0 +1,11 @@ +# Android Mock + +When dealing with AndroidHardwareBuffers (`VK_ANDROID_external_memory_android_hardware_buffer`) there are API calls that are only found when deploying on Android. + +In order to easily and properly do some testing for extensions that don't have devices yet (`VK_ANDROID_external_format_resolve`) we need a way to have a MockICD driver. + +Instead of trying to deploy a MockICD driver for android, we are leaving the MockICD alone and instead just mocking the bare minimum AHB calls in order to run the tests locally. + +This allows both developers and GitHub CI to test the AHB logic against something instead of having to rely on a phyiscal Android device. + +This is not a **replacement** for the Android devices as the same way MockICD is not a replacement for phyiscal hardware \ No newline at end of file diff --git a/third_party/gfxreconstruct/test/android_mock/android/api-level.h b/third_party/gfxreconstruct/test/android_mock/android/api-level.h new file mode 100644 index 000000000..ab526d271 --- /dev/null +++ b/third_party/gfxreconstruct/test/android_mock/android/api-level.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 The Khronos Group Inc. + * Copyright (c) 2023 Valve Corporation + * Copyright (c) 2023 LunarG, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#define __ANDROID_API_FUTURE__ 10000 + +#ifndef __ANDROID_API__ +#define __ANDROID_API__ __ANDROID_API_FUTURE__ +#endif + +#define __ANDROID_API_O__ 26 +#define __ANDROID_API_O_MR1__ 27 +#define __ANDROID_API_P__ 28 +#define __ANDROID_API_Q__ 29 +#define __ANDROID_API_R__ 30 +#define __ANDROID_API_S__ 31 +#define __ANDROID_API_T__ 33 +#define __ANDROID_API_U__ 34 diff --git a/third_party/gfxreconstruct/test/android_mock/android/hardware_buffer.cpp b/third_party/gfxreconstruct/test/android_mock/android/hardware_buffer.cpp new file mode 100644 index 000000000..ae62e24b3 --- /dev/null +++ b/third_party/gfxreconstruct/test/android_mock/android/hardware_buffer.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 The Khronos Group Inc. + * Copyright (c) 2023 Valve Corporation + * Copyright (c) 2023 LunarG, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "hardware_buffer.h" + +// Because test and layer have 2 instance of this file, store everything in the AHB +struct AHardwareBuffer +{ + AHardwareBuffer_Desc desc; +}; + +// Just keep a single global AHB +static AHardwareBuffer kAHB; +static AHardwareBuffer* kpAHB = &kAHB; + +int AHardwareBuffer_allocate(const AHardwareBuffer_Desc* desc, AHardwareBuffer** outBuffer) +{ + *outBuffer = kpAHB; + kAHB.desc = *desc; + return 0; +} + +void AHardwareBuffer_release(AHardwareBuffer* buffer) +{ + (void)buffer; +} + +void AHardwareBuffer_describe(const AHardwareBuffer* buffer, AHardwareBuffer_Desc* outDesc) +{ + *outDesc = buffer->desc; +}; \ No newline at end of file diff --git a/third_party/gfxreconstruct/test/android_mock/android/hardware_buffer.h b/third_party/gfxreconstruct/test/android_mock/android/hardware_buffer.h new file mode 100644 index 000000000..4380d9fb0 --- /dev/null +++ b/third_party/gfxreconstruct/test/android_mock/android/hardware_buffer.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 The Khronos Group Inc. + * Copyright (c) 2023 Valve Corporation + * Copyright (c) 2023 LunarG, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include + +enum AHardwareBuffer_Format +{ + AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM = 1, + AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM = 2, + AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM = 3, + AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM = 4, + AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT = 0x16, + AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM = 0x2b, + AHARDWAREBUFFER_FORMAT_BLOB = 0x21, + AHARDWAREBUFFER_FORMAT_D16_UNORM = 0x30, + AHARDWAREBUFFER_FORMAT_D24_UNORM = 0x31, + AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT = 0x32, + AHARDWAREBUFFER_FORMAT_D32_FLOAT = 0x33, + AHARDWAREBUFFER_FORMAT_D32_FLOAT_S8_UINT = 0x34, + AHARDWAREBUFFER_FORMAT_S8_UINT = 0x35, + AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420 = 0x23, + AHARDWAREBUFFER_FORMAT_YCbCr_P010 = 0x36, + AHARDWAREBUFFER_FORMAT_R8_UNORM = 0x38, +}; + +enum AHardwareBuffer_UsageFlags +{ + AHARDWAREBUFFER_USAGE_CPU_READ_NEVER = 0UL, + AHARDWAREBUFFER_USAGE_CPU_READ_RARELY = 2UL, + AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN = 3UL, + AHARDWAREBUFFER_USAGE_CPU_READ_MASK = 0xFUL, + AHARDWAREBUFFER_USAGE_CPU_WRITE_NEVER = 0UL << 4, + AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY = 2UL << 4, + AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN = 3UL << 4, + AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK = 0xFUL << 4, + AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE = 1UL << 8, + AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER = 1UL << 9, + AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT = AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER, + AHARDWAREBUFFER_USAGE_COMPOSER_OVERLAY = 1ULL << 11, + AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT = 1UL << 14, + AHARDWAREBUFFER_USAGE_VIDEO_ENCODE = 1UL << 16, + AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA = 1UL << 23, + AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER = 1UL << 24, + AHARDWAREBUFFER_USAGE_GPU_CUBE_MAP = 1UL << 25, + AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE = 1UL << 26, +}; + +typedef struct AHardwareBuffer_Desc +{ + uint32_t width; + uint32_t height; + uint32_t layers; + uint32_t format; + uint64_t usage; + uint32_t stride; + uint32_t rfu0; + uint64_t rfu1; +} AHardwareBuffer_Desc; + +typedef struct AHardwareBuffer AHardwareBuffer; + +int AHardwareBuffer_allocate(const AHardwareBuffer_Desc* desc, AHardwareBuffer** outBuffer); + +void AHardwareBuffer_release(AHardwareBuffer* buffer); + +void AHardwareBuffer_describe(const AHardwareBuffer* buffer, AHardwareBuffer_Desc* outDesc); diff --git a/third_party/gfxreconstruct/test/android_mock/android/log.h b/third_party/gfxreconstruct/test/android_mock/android/log.h new file mode 100644 index 000000000..9866882ce --- /dev/null +++ b/third_party/gfxreconstruct/test/android_mock/android/log.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 The Khronos Group Inc. + * Copyright (c) 2023 Valve Corporation + * Copyright (c) 2023 LunarG, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +typedef enum android_LogPriority +{ + ANDROID_LOG_UNKNOWN = 0, + ANDROID_LOG_DEFAULT, + ANDROID_LOG_VERBOSE, + ANDROID_LOG_DEBUG, + ANDROID_LOG_INFO, + ANDROID_LOG_WARN, + ANDROID_LOG_ERROR, + ANDROID_LOG_FATAL, + ANDROID_LOG_SILENT, +} android_LogPriority; + +static int __android_log_print(int prio, const char* tag, const char* fmt, ...) +{ + return 0; +} \ No newline at end of file diff --git a/third_party/gfxreconstruct/test/android_mock/android/ndk-version.h b/third_party/gfxreconstruct/test/android_mock/android/ndk-version.h new file mode 100644 index 000000000..56cb8e800 --- /dev/null +++ b/third_party/gfxreconstruct/test/android_mock/android/ndk-version.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 The Khronos Group Inc. + * Copyright (c) 2023 Valve Corporation + * Copyright (c) 2023 LunarG, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once +#define __ANDROID_NDK__ 1 +#define __NDK_MAJOR__ 25 +#define __NDK_MINOR__ 1 +#define __NDK_BETA__ 0 +#define __NDK_BUILD__ 8937393 +#define __NDK_CANARY__ 0 diff --git a/third_party/gfxreconstruct/test/android_mock/android_native_app_glue.h b/third_party/gfxreconstruct/test/android_mock/android_native_app_glue.h new file mode 100644 index 000000000..58649a3af --- /dev/null +++ b/third_party/gfxreconstruct/test/android_mock/android_native_app_glue.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2023 The Khronos Group Inc. + * Copyright (c) 2023 Valve Corporation + * Copyright (c) 2023 LunarG, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include +#include + +struct android_app; diff --git a/third_party/gfxreconstruct/test/android_mock/sys/system_properties.h b/third_party/gfxreconstruct/test/android_mock/sys/system_properties.h new file mode 100644 index 000000000..58f730717 --- /dev/null +++ b/third_party/gfxreconstruct/test/android_mock/sys/system_properties.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 The Khronos Group Inc. + * Copyright (c) 2023 Valve Corporation + * Copyright (c) 2023 LunarG, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include + +typedef struct prop_info prop_info; + +static const prop_info* __system_property_find(const char* __name) +{ + return nullptr; +} + +static void __system_property_read_callback( + const prop_info* __pi, + void (*__callback)(void* __cookie, const char* __name, const char* __value, uint32_t __serial), + void* __cookie) +{} \ No newline at end of file diff --git a/third_party/gfxreconstruct/test/icd/CMakeLists.txt b/third_party/gfxreconstruct/test/icd/CMakeLists.txt index 676e0e9e7..24e880087 100644 --- a/third_party/gfxreconstruct/test/icd/CMakeLists.txt +++ b/third_party/gfxreconstruct/test/icd/CMakeLists.txt @@ -25,7 +25,8 @@ endif() set(MOCK_ICD_NAME VkICD_mock_icd) set(GENERATED generated) -option(BUILD_MOCK_ANDROID_SUPPORT "Build with Android Platform headers" OFF) +# Enable for testing Android-specific functionalities such as hardware buffers. +option(BUILD_MOCK_ANDROID_SUPPORT "Build with Android Platform headers" ON) if(WIN32) add_definitions(-DVK_USE_PLATFORM_WIN32_KHR -DVK_USE_PLATFORM_WIN32_KHX -DWIN32_LEAN_AND_MEAN) @@ -51,7 +52,7 @@ endif() add_library(VkICD_mock_icd MODULE) target_sources(VkICD_mock_icd PRIVATE mock_icd.cpp) -target_link_libraries(VkICD_mock_icd PRIVATE Vulkan::Headers) +target_link_libraries(VkICD_mock_icd PUBLIC gfxrecon_android_mock PRIVATE Vulkan::Headers) target_include_directories(VkICD_mock_icd PUBLIC ${GENERATED} diff --git a/third_party/gfxreconstruct/test/icd/mock_icd.h b/third_party/gfxreconstruct/test/icd/mock_icd.h index 000a22e2c..f8f107344 100644 --- a/third_party/gfxreconstruct/test/icd/mock_icd.h +++ b/third_party/gfxreconstruct/test/icd/mock_icd.h @@ -35,6 +35,9 @@ #include "vk_video/vulkan_video_codec_h265std_decode.h" #include "vk_video/vulkan_video_codec_h265std_encode.h" #include "vulkan/vulkan.h" +#ifdef VK_USE_PLATFORM_ANDROID_KHR +#include "vulkan/vulkan_android.h" +#endif #include "vulkan/vk_icd.h" #include "vk_typemap_helper.h" diff --git a/third_party/gfxreconstruct/test/known_good/ahb.gfxr b/third_party/gfxreconstruct/test/known_good/ahb.gfxr new file mode 100644 index 000000000..36c0afa23 Binary files /dev/null and b/third_party/gfxreconstruct/test/known_good/ahb.gfxr differ diff --git a/third_party/gfxreconstruct/test/known_good/set-environment.gfxr b/third_party/gfxreconstruct/test/known_good/set-environment.gfxr index b91474981..08df4fb0e 100644 Binary files a/third_party/gfxreconstruct/test/known_good/set-environment.gfxr and b/third_party/gfxreconstruct/test/known_good/set-environment.gfxr differ diff --git a/third_party/gfxreconstruct/test/test_apps/CMakeLists.txt b/third_party/gfxreconstruct/test/test_apps/CMakeLists.txt index 23408faba..5718c0210 100644 --- a/third_party/gfxreconstruct/test/test_apps/CMakeLists.txt +++ b/third_party/gfxreconstruct/test/test_apps/CMakeLists.txt @@ -41,12 +41,10 @@ add_subdirectory(shader-objects) add_subdirectory(sparse-resources) add_subdirectory(acquired-image) add_subdirectory(set-environment) +add_subdirectory(ahb) if(CMAKE_SYSTEM_NAME MATCHES "Linux|BSD|GNU") add_subdirectory(external-memory-fd-export) add_subdirectory(external-memory-fd-import) add_subdirectory(wait-for-present) endif() -if(CMAKE_SYSTEM_NAME MATCHES "Android") - add_subdirectory(ahb) -endif() add_subdirectory(launcher) diff --git a/third_party/gfxreconstruct/test/test_apps/ahb/CMakeLists.txt b/third_party/gfxreconstruct/test/test_apps/ahb/CMakeLists.txt index ed1741a0c..85611a7cd 100644 --- a/third_party/gfxreconstruct/test/test_apps/ahb/CMakeLists.txt +++ b/third_party/gfxreconstruct/test/test_apps/ahb/CMakeLists.txt @@ -28,10 +28,13 @@ add_library(gfxrecon-testapp-ahb app.cpp) target_include_directories(gfxrecon-testapp-ahb PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) -target_link_libraries(gfxrecon-testapp-ahb PUBLIC gfxrecon-testapp-base) +set(GFXRECON_TESTAPP_AHB_LINK_LIBRARIES gfxrecon-testapp-base) common_build_directives(gfxrecon-testapp-ahb) if(NOT CMAKE_SYSTEM_NAME MATCHES "Android") + list(APPEND GFXRECON_TESTAPP_AHB_LINK_LIBRARIES gfxrecon_android_mock) install(TARGETS gfxrecon-testapp-ahb RUNTIME DESTINATION ${GFXRECON_INSTALL_TESTAPPDIR}/ahb) endif() + +target_link_libraries(gfxrecon-testapp-ahb ${GFXRECON_TESTAPP_AHB_LINK_LIBRARIES}) diff --git a/third_party/gfxreconstruct/test/test_apps/ahb/ahb_app.h b/third_party/gfxreconstruct/test/test_apps/ahb/ahb_app.h index 7ec1e219b..09c8f8176 100644 --- a/third_party/gfxreconstruct/test/test_apps/ahb/ahb_app.h +++ b/third_party/gfxreconstruct/test/test_apps/ahb/ahb_app.h @@ -32,9 +32,14 @@ GFXRECON_BEGIN_NAMESPACE(test_app) GFXRECON_BEGIN_NAMESPACE(ahb) const size_t MAX_FRAMES_IN_FLIGHT = 2; +const size_t WIDTH = 128; +const size_t HEIGHT = 128; +const size_t CHANNEL_COUNT = 4; class App : public test::TestAppBase { + uint8_t mock_memory_[WIDTH * HEIGHT * CHANNEL_COUNT]; + VkQueue graphics_queue_; VkQueue present_queue_; diff --git a/third_party/gfxreconstruct/test/test_apps/ahb/app.cpp b/third_party/gfxreconstruct/test/test_apps/ahb/app.cpp index fc09c62c2..400e88da1 100644 --- a/third_party/gfxreconstruct/test/test_apps/ahb/app.cpp +++ b/third_party/gfxreconstruct/test/test_apps/ahb/app.cpp @@ -37,6 +37,7 @@ void App::configure_instance_builder(test::InstanceBuilder& instance_builder, vk if (test_config) { test_config->device_api_version_override = VK_MAKE_API_VERSION(0, 1, 3, 296); + test_config->map_addr_override = mock_memory_; } instance_builder.enable_extension(VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME); } @@ -57,6 +58,7 @@ void App::configure_physical_device_selector(test::PhysicalDeviceSelector& phys_ void App::configure_swapchain_builder(test::SwapchainBuilder& swapchain_builder, vkmock::TestConfig* test_config) { swapchain_builder.add_image_usage_flags(VK_IMAGE_USAGE_TRANSFER_DST_BIT); + swapchain_builder.set_desired_extent(WIDTH, HEIGHT); } void App::recreate_swapchain() @@ -377,7 +379,7 @@ void App::fill_ahb_image() // fill staging buffer { void* staging_ptr = nullptr; - result = init.disp.mapMemory(staging_memory, 0, ahb_size_, 0, &staging_ptr); + result = init.disp.mapMemory(staging_memory, 0, ahb_size_, 0, reinterpret_cast(&staging_ptr)); VERIFY_VK_RESULT("failed to map staging memory", result); const uint32_t channel_count = 4; // RGBA diff --git a/third_party/gfxreconstruct/test/test_apps/common/CMakeLists.txt b/third_party/gfxreconstruct/test/test_apps/common/CMakeLists.txt index ed56db646..b02d13776 100644 --- a/third_party/gfxreconstruct/test/test_apps/common/CMakeLists.txt +++ b/third_party/gfxreconstruct/test/test_apps/common/CMakeLists.txt @@ -1,4 +1,15 @@ add_library(gfxrecon-testapp-base STATIC test_app_base.cpp) target_include_directories(gfxrecon-testapp-base PRIVATE ${PROJECT_SOURCE_DIR}/external) target_include_directories(gfxrecon-testapp-base PUBLIC ${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../../icd) -target_link_libraries(gfxrecon-testapp-base PUBLIC gfxrecon_application gfxrecon_util) + +set(GFXRECON_TESTAPP_BASE_LINK_LIBRARIES + gfxrecon_application + gfxrecon_util + gfxrecon_android_mock +) + +target_link_libraries(gfxrecon-testapp-base + PUBLIC + ${GFXRECON_TESTAPP_BASE_LINK_LIBRARIES} +) + diff --git a/third_party/gfxreconstruct/test/test_apps/common/test_app_base.cpp b/third_party/gfxreconstruct/test/test_apps/common/test_app_base.cpp index d260a5e3f..a521a9d60 100644 --- a/third_party/gfxreconstruct/test/test_apps/common/test_app_base.cpp +++ b/third_party/gfxreconstruct/test/test_apps/common/test_app_base.cpp @@ -3056,7 +3056,7 @@ bool DeviceBuilder::enable_features_if_present(const VkPhysicalDeviceFeatures& f return physical_device.enable_features_if_present(features_to_enable); } -#ifdef __ANDROID__ +#ifdef VK_USE_PLATFORM_ANDROID_KHR void TestAppBase::set_android_app(struct android_app* app) { init.android_app = app; diff --git a/third_party/gfxreconstruct/test/test_apps/common/test_app_base.h b/third_party/gfxreconstruct/test/test_apps/common/test_app_base.h index 1c2c13a72..905945428 100644 --- a/third_party/gfxreconstruct/test/test_apps/common/test_app_base.h +++ b/third_party/gfxreconstruct/test/test_apps/common/test_app_base.h @@ -35,13 +35,13 @@ #include -#include "test_app_dispatch.h" -#include "mock_icd_test_config.h" - -#if defined(__ANDROID__) +#ifdef VK_USE_PLATFORM_ANDROID_KHR #include #endif +#include "test_app_dispatch.h" +#include "mock_icd_test_config.h" + #include #include @@ -1067,7 +1067,7 @@ VkShaderModule readShaderFromFile(vkb::DispatchTable const& disp, const std::str struct InitInfo { -#ifdef __ANDROID__ +#ifdef VK_USE_PLATFORM_ANDROID_KHR struct android_app* android_app = nullptr; #endif Instance instance; @@ -1097,7 +1097,7 @@ class TestAppBase void run(const std::string& window_name); -#ifdef __ANDROID__ +#ifdef VK_USE_PLATFORM_ANDROID_KHR void set_android_app(struct android_app*); #endif protected: diff --git a/third_party/gfxreconstruct/test/test_apps/launcher/CMakeLists.txt b/third_party/gfxreconstruct/test/test_apps/launcher/CMakeLists.txt index 8f7f599ab..d61dc53b8 100644 --- a/third_party/gfxreconstruct/test/test_apps/launcher/CMakeLists.txt +++ b/third_party/gfxreconstruct/test/test_apps/launcher/CMakeLists.txt @@ -39,6 +39,7 @@ target_include_directories(${TARGET_NAME} set(GFXRECON_TEST_LAUNCHER_LINK_LIBRARIES gfxrecon-testapp-acquired-image + gfxrecon-testapp-ahb gfxrecon-testapp-host-image-copy gfxrecon-testapp-multisample-depth gfxrecon-testapp-pipeline-binaries @@ -57,7 +58,8 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux|BSD|GNU") endif() target_link_libraries(${TARGET_NAME} - ${GFXRECON_TEST_LAUNCHER_LINK_LIBRARIES}) + ${GFXRECON_TEST_LAUNCHER_LINK_LIBRARIES} + project_version) common_build_directives(${TARGET_NAME}) diff --git a/third_party/gfxreconstruct/test/test_apps/launcher/test_launcher.cpp b/third_party/gfxreconstruct/test/test_apps/launcher/test_launcher.cpp index 1360fe87a..6c098c2a4 100644 --- a/third_party/gfxreconstruct/test/test_apps/launcher/test_launcher.cpp +++ b/third_party/gfxreconstruct/test/test_apps/launcher/test_launcher.cpp @@ -32,6 +32,9 @@ #include #include #include +#ifdef VK_USE_PLATFORM_ANDROID_KHR +#include +#endif #ifdef __linux__ #include @@ -48,8 +51,6 @@ #include #if defined(__ANDROID__) -#include - #include #include #endif @@ -74,7 +75,7 @@ static const char* kAppNames[] = { "external-memory-fd-import", "wait-for-present", #endif -#ifdef __ANDROID__ +#ifdef VK_USE_PLATFORM_ANDROID_KHR "ahb" #endif // Add more test apps here as needed. @@ -182,12 +183,14 @@ CreateTestApp(std::unique_ptr application, app = std::make_unique(); } #endif // __linux__ -#if defined(__ANDROID__) +#ifdef VK_USE_PLATFORM_ANDROID_KHR else if (app_name == "ahb") { app = std::make_unique(); } +#endif +#if defined(__ANDROID__) app->set_android_app(android_app); #endif // __ANDROID__ @@ -223,12 +226,12 @@ int inner_main( const auto& app_name = positional_arguments[0]; #ifdef __ANDROID__ - auto application = std::make_unique(kApplicationName, nullptr); - application->InitializeWsiContext(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, android_app); + auto application = std::make_unique( + kApplicationName, nullptr, VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, android_app); #else // Select WSI context based on CLI std::string wsi_extension = GetFirstWsiExtensionName(GetWsiPlatform(arg_parser)); - auto application = std::make_unique(app_name, wsi_extension, nullptr); + auto application = std::make_unique(app_name, nullptr, wsi_extension, nullptr); #endif std::unique_ptr app = CreateTestApp(std::move(application), diff --git a/third_party/gfxreconstruct/test/verify-gfxr.cpp b/third_party/gfxreconstruct/test/verify-gfxr.cpp index 94bb6a2cb..fb02aa4e8 100644 --- a/third_party/gfxreconstruct/test/verify-gfxr.cpp +++ b/third_party/gfxreconstruct/test/verify-gfxr.cpp @@ -10,11 +10,17 @@ bool clean_gfxr_json(int depth, nlohmann::json::parse_event_t event, nlohmann::json& parsed) { + static bool skip_next_buffer = false; + switch (event) { case nlohmann::json::parse_event_t::key: { auto key = to_string(parsed); + if (key == "\"api_version\"") + return false; + if (key == "\"apiVersion\"") + return false; if (std::strncmp("\"pfn\"", key.c_str(), 4) == 0) return false; if (key == "\"hinstance\"") @@ -31,6 +37,21 @@ bool clean_gfxr_json(int depth, nlohmann::json::parse_event_t event, nlohmann::j return false; if (key == "\"app_name\"") return false; + if (skip_next_buffer && key == "\"buffer\"") + { + skip_next_buffer = false; + return false; + } + } + break; + case nlohmann::json::parse_event_t::value: + { + auto value = to_string(parsed); + if (value == "\"VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID\"" || + value == "\"vkGetAndroidHardwareBufferPropertiesANDROID\"") + { + skip_next_buffer = true; + } } break; case nlohmann::json::parse_event_t::object_end: diff --git a/third_party/gfxreconstruct/test_suite.ref b/third_party/gfxreconstruct/test_suite.ref new file mode 100644 index 000000000..b8681cc05 --- /dev/null +++ b/third_party/gfxreconstruct/test_suite.ref @@ -0,0 +1 @@ +0ea35f8126b37f2c0bdd15a365a54914a29c36e7 diff --git a/third_party/gfxreconstruct/tools/CMakeLists.txt b/third_party/gfxreconstruct/tools/CMakeLists.txt index cebc08d66..fddb52347 100644 --- a/third_party/gfxreconstruct/tools/CMakeLists.txt +++ b/third_party/gfxreconstruct/tools/CMakeLists.txt @@ -1,6 +1,7 @@ add_subdirectory(replay) add_subdirectory(compress) add_subdirectory(info) +add_subdirectory(file_version_patch) if(GFXRECON_TOCPP_SUPPORT) add_subdirectory(tocpp) diff --git a/third_party/gfxreconstruct/tools/compress/CMakeLists.txt b/third_party/gfxreconstruct/tools/compress/CMakeLists.txt index bb4dc6d52..4e2113ddd 100644 --- a/third_party/gfxreconstruct/tools/compress/CMakeLists.txt +++ b/third_party/gfxreconstruct/tools/compress/CMakeLists.txt @@ -55,7 +55,7 @@ endif() target_include_directories(gfxrecon-compress PUBLIC ${CMAKE_BINARY_DIR}) -target_link_libraries(gfxrecon-compress gfxrecon_decode gfxrecon_graphics gfxrecon_format gfxrecon_util platform_specific) +target_link_libraries(gfxrecon-compress gfxrecon_decode gfxrecon_graphics gfxrecon_format gfxrecon_util platform_specific project_version) common_build_directives(gfxrecon-compress) diff --git a/third_party/gfxreconstruct/tools/compress/compression_converter.cpp b/third_party/gfxreconstruct/tools/compress/compression_converter.cpp index a1d0a2362..db1f8c693 100644 --- a/third_party/gfxreconstruct/tools/compress/compression_converter.cpp +++ b/third_party/gfxreconstruct/tools/compress/compression_converter.cpp @@ -72,201 +72,95 @@ bool CompressionConverter::WriteFileHeader(const format::FileHeader& return FileTransformer::WriteFileHeader(header, output_options); } -bool CompressionConverter::ProcessFunctionCall(const format::BlockHeader& block_header, format::ApiCallId call_id) +bool CompressionConverter::ProcessFunctionCall(decode::ParsedBlock& parsed_block) { - size_t parameter_buffer_size = static_cast(block_header.size) - sizeof(call_id); - uint64_t uncompressed_size = 0; - format::ThreadId thread_id = 0; - - bool success = ReadBytes(&thread_id, sizeof(thread_id)); + // Decompress reports its own errors. + bool success = parsed_block.Decompress(GetBlockParser()); if (success) { - parameter_buffer_size -= sizeof(thread_id); - - if (format::IsBlockCompressed(block_header.type)) - { - success = ReadBytes(&uncompressed_size, sizeof(uncompressed_size)); + const auto& args = parsed_block.Get(); // Asserts if !Holds. + success = WriteFunctionCall(args.call_id, args.call_info.thread_id, args.data_size, args.data); + } - if (success) - { - parameter_buffer_size -= sizeof(uncompressed_size); - - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, uncompressed_size); - - size_t actual_size = 0; - success = ReadCompressedParameterBuffer( - parameter_buffer_size, static_cast(uncompressed_size), &actual_size); - - if (success) - { - assert(actual_size == uncompressed_size); - parameter_buffer_size = static_cast(uncompressed_size); - } - else - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read compressed function call block data"); - } - } - else - { - HandleBlockReadError(kErrorReadingCompressedBlockHeader, - "Failed to read compressed function call block header"); - } - } - else - { - success = ReadParameterBuffer(parameter_buffer_size); + return success; +} - if (!success) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read function call block data"); - } - } +bool CompressionConverter::ProcessMethodCall(decode::ParsedBlock& parsed_block) +{ + // Decompress reports its own errors. + bool success = parsed_block.Decompress(GetBlockParser()); - if (success) - { - success = WriteFunctionCall(call_id, thread_id, parameter_buffer_size); - } - } - else + if (success) { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read function call block header"); + const auto& args = parsed_block.Get(); // Asserts if !Holds. + success = WriteMethodCall(args.call_id, args.object_id, args.call_info.thread_id, args.data_size, args.data); } return success; } -bool CompressionConverter::ProcessMethodCall(const format::BlockHeader& block_header, - format::ApiCallId call_id, - uint64_t block_index /*= 0*/) +bool CompressionConverter::ProcessMetaData(decode::ParsedBlock& parsed_block) { - size_t parameter_buffer_size = static_cast(block_header.size) - sizeof(call_id); - uint64_t uncompressed_size = 0; - format::HandleId object_id = 0; - format::ThreadId thread_id = 0; - - bool success = ReadBytes(&object_id, sizeof(object_id)); - success = success && ReadBytes(&thread_id, sizeof(thread_id)); - + // We can infer format::IsBlockCompressed from NeedsDecompression as long + // as the DecompressionPolicy is "never". + auto& block_parser = GetBlockParser(); + GFXRECON_ASSERT(block_parser.GetDecompressionPolicy() == decode::BlockParser::kNever); + const bool compressed_block = parsed_block.NeedsDecompression(); + + // Unconditional decompress the metadata block wastes no time as all compressible meta_data_id have non-trivial + // overrides, and decompress fast returns on uncompressed blocks. + bool success = parsed_block.Decompress(block_parser); if (success) { - parameter_buffer_size -= (sizeof(object_id) + sizeof(thread_id)); + auto visit_meta = [this](auto&& store) { return WriteMetaData(*store); }; + VisitResult result = std::visit(visit_meta, parsed_block.GetArgs()); - if (format::IsBlockCompressed(block_header.type)) + if (result == kNeedsPassthrough) { - success = ReadBytes(&uncompressed_size, sizeof(uncompressed_size)); - - if (success) + if (!compressed_block) { - parameter_buffer_size -= sizeof(uncompressed_size); - - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, uncompressed_size); - - size_t actual_size = 0; - success = ReadCompressedParameterBuffer( - parameter_buffer_size, static_cast(uncompressed_size), &actual_size); - - if (success) - { - assert(actual_size == uncompressed_size); - parameter_buffer_size = static_cast(uncompressed_size); - } - else - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read compressed method call block data"); - } + success = FileTransformer::ProcessMetaData(parsed_block); } else { - HandleBlockReadError(kErrorReadingCompressedBlockHeader, - "Failed to read compressed method call block header"); + // Since this file transformer is converting compression formats, it cannot passthrough + // NOTE: This condition should not occur, as all compressible meta_data_id *should* have non-trivial + // overrides, indicating that the BlockParser recognized the block, but that the CompressionConverter + // does not. + GFXRECON_ASSERT(!compressed_block); + HandleBlockWriteError(decode::kErrorUnsupportedBlockType, + "Failed to process unrecognized compressed meta data block type."); + success = false; } } else { - success = ReadParameterBuffer(parameter_buffer_size); - - if (!success) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read method call block data"); - } - } - - if (success) - { - success = WriteMethodCall(call_id, object_id, thread_id, parameter_buffer_size); + success = result == kSuccess; } } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read method call block header"); - } - return success; } -bool CompressionConverter::ProcessMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id) +bool CompressionConverter::WriteFunctionCall(format::ApiCallId call_id, + format::ThreadId thread_id, + size_t buffer_size, + const uint8_t* buffer) { - // Only the meta data blocks that contain resource data support compression. The rest of the meta data block types - // can be copied directly to the new file. - format::MetaDataType meta_data_type = format::GetMetaDataType(meta_data_id); - if (meta_data_type == format::MetaDataType::kFillMemoryCommand) - { - return WriteFillMemoryMetaData(block_header, meta_data_id); - } - else if (meta_data_type == format::MetaDataType::kInitBufferCommand) - { - return WriteInitBufferMetaData(block_header, meta_data_id); - } - else if (meta_data_type == format::MetaDataType::kInitImageCommand) - { - return WriteInitImageMetaData(block_header, meta_data_id); - } - else if (meta_data_type == format::MetaDataType::kInitSubresourceCommand) - { - return WriteInitSubresourceMetaData(block_header, meta_data_id); - } - else if (meta_data_type == format::MetaDataType::kInitDx12AccelerationStructureCommand) - { - return WriteInitDx12AccelerationStructureMetaData(block_header, meta_data_id); - } - else if (meta_data_type == format::MetaDataType::kFillMemoryResourceValueCommand) - { - return WriteFillMemoryResourceValueMetaData(block_header, meta_data_id); - } - else - { - // The current block should not be compressed. If it is compressed, it is most likely a new block type that is - // not supported. - if (format::IsBlockCompressed(block_header.type)) - { - HandleBlockWriteError(kErrorUnsupportedBlockType, - "Failed to process unrecognized compressed meta data block type."); - return false; - } - - return FileTransformer::ProcessMetaData(block_header, meta_data_id); - } -} - -bool CompressionConverter::WriteFunctionCall(format::ApiCallId call_id, format::ThreadId thread_id, size_t buffer_size) -{ - bool write_uncompressed = decompressing_; - const auto& buffer = GetParameterBuffer(); + bool write_uncompressed = decompressing_; if (!write_uncompressed) { - assert(target_compressor_ != nullptr); + GFXRECON_ASSERT(target_compressor_ != nullptr); // Compress the buffer with the new compression format and write to the new file. auto& compressed_buffer = GetCompressedParameterBuffer(); size_t packet_size = 0; - size_t compressed_size = target_compressor_->Compress(buffer_size, buffer.data(), &compressed_buffer, 0); + size_t compressed_size = target_compressor_->Compress(buffer_size, buffer, &compressed_buffer, 0); - if (0 < compressed_size && compressed_size < buffer_size) + // Note: we not only have to compress smaller than uncompressed, we have to include the compression overhead. + if ((0 < compressed_size) && + ((compressed_size + sizeof(format::CompressedFunctionCallHeader::uncompressed_size)) < buffer_size)) { format::CompressedFunctionCallHeader compressed_func_call_header = {}; compressed_func_call_header.block_header.type = format::BlockType::kCompressedFunctionCallBlock; @@ -282,14 +176,14 @@ bool CompressionConverter::WriteFunctionCall(format::ApiCallId call_id, format:: if (!WriteBytes(&compressed_func_call_header, sizeof(compressed_func_call_header))) { - HandleBlockWriteError(kErrorWritingCompressedBlockHeader, + HandleBlockWriteError(decode::kErrorWritingCompressedBlockHeader, "Failed to write compressed function call block header"); return false; } if (!WriteBytes(compressed_buffer.data(), compressed_size)) { - HandleBlockWriteError(kErrorWritingCompressedBlockData, + HandleBlockWriteError(decode::kErrorWritingCompressedBlockData, "Failed to write compressed function call block data"); return false; } @@ -317,13 +211,13 @@ bool CompressionConverter::WriteFunctionCall(format::ApiCallId call_id, format:: if (!WriteBytes(&func_call_header, sizeof(func_call_header))) { - HandleBlockWriteError(kErrorWritingBlockHeader, "Failed to write function call block header"); + HandleBlockWriteError(decode::kErrorWritingBlockHeader, "Failed to write function call block header"); return false; } - if (!WriteBytes(buffer.data(), buffer_size)) + if (!WriteBytes(buffer, buffer_size)) { - HandleBlockWriteError(kErrorWritingBlockData, "Failed to write function call block data"); + HandleBlockWriteError(decode::kErrorWritingBlockData, "Failed to write function call block data"); return false; } } @@ -334,10 +228,10 @@ bool CompressionConverter::WriteFunctionCall(format::ApiCallId call_id, format:: bool CompressionConverter::WriteMethodCall(format::ApiCallId call_id, format::HandleId object_id, format::ThreadId thread_id, - size_t buffer_size) + size_t buffer_size, + const uint8_t* buffer) { - bool write_uncompressed = decompressing_; - const auto& buffer = GetParameterBuffer(); + bool write_uncompressed = decompressing_; if (!write_uncompressed) { @@ -346,9 +240,11 @@ bool CompressionConverter::WriteMethodCall(format::ApiCallId call_id, // Compress the buffer with the new compression format and write to the new file. auto& compressed_buffer = GetCompressedParameterBuffer(); size_t packet_size = 0; - size_t compressed_size = target_compressor_->Compress(buffer_size, buffer.data(), &compressed_buffer, 0); + size_t compressed_size = target_compressor_->Compress(buffer_size, buffer, &compressed_buffer, 0); - if (0 < compressed_size && compressed_size < buffer_size) + // Note: we not only have to compress smaller than uncompressed, we have to include the compression overhead. + if ((0 < compressed_size) && + ((compressed_size + sizeof(format::CompressedMethodCallHeader::uncompressed_size)) < buffer_size)) { format::CompressedMethodCallHeader compressed_method_call_header = {}; compressed_method_call_header.block_header.type = format::BlockType::kCompressedMethodCallBlock; @@ -366,14 +262,14 @@ bool CompressionConverter::WriteMethodCall(format::ApiCallId call_id, if (!WriteBytes(&compressed_method_call_header, sizeof(compressed_method_call_header))) { - HandleBlockWriteError(kErrorWritingCompressedBlockHeader, + HandleBlockWriteError(decode::kErrorWritingCompressedBlockHeader, "Failed to write compressed method call block header"); return false; } if (!WriteBytes(compressed_buffer.data(), compressed_size)) { - HandleBlockWriteError(kErrorWritingCompressedBlockData, + HandleBlockWriteError(decode::kErrorWritingCompressedBlockData, "Failed to write compressed method call block data"); return false; } @@ -403,13 +299,13 @@ bool CompressionConverter::WriteMethodCall(format::ApiCallId call_id, if (!WriteBytes(&method_call_header, sizeof(method_call_header))) { - HandleBlockWriteError(kErrorWritingBlockHeader, "Failed to write method call block header"); + HandleBlockWriteError(decode::kErrorWritingBlockHeader, "Failed to write method call block header"); return false; } - if (!WriteBytes(buffer.data(), buffer_size)) + if (!WriteBytes(buffer, buffer_size)) { - HandleBlockWriteError(kErrorWritingBlockData, "Failed to write method call block data"); + HandleBlockWriteError(decode::kErrorWritingBlockData, "Failed to write method call block data"); return false; } } @@ -417,511 +313,255 @@ bool CompressionConverter::WriteMethodCall(format::ApiCallId call_id, return true; } -bool CompressionConverter::WriteFillMemoryMetaData(const format::BlockHeader& block_header, - format::MetaDataId meta_data_id) +decode::FileTransformer::VisitResult CompressionConverter::WriteMetaData(const decode::FillMemoryArgs& args) { - assert(format::GetMetaDataType(meta_data_id) == format::MetaDataType::kFillMemoryCommand); + GFXRECON_ASSERT(format::GetMetaDataType(args.meta_data_id) == format::MetaDataType::kFillMemoryCommand); format::FillMemoryCommandHeader fill_cmd; - bool success = ReadBytes(&fill_cmd.thread_id, sizeof(fill_cmd.thread_id)); - success = success && ReadBytes(&fill_cmd.memory_id, sizeof(fill_cmd.memory_id)); - success = success && ReadBytes(&fill_cmd.memory_offset, sizeof(fill_cmd.memory_offset)); - success = success && ReadBytes(&fill_cmd.memory_size, sizeof(fill_cmd.memory_size)); + fill_cmd.thread_id = args.thread_id; + fill_cmd.memory_id = args.memory_id; + fill_cmd.memory_offset = args.offset; + fill_cmd.memory_size = args.data_size; - if (success) - { - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, fill_cmd.memory_size); + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, args.data_size); + size_t data_size = static_cast(args.data_size); + const uint8_t* data_address = args.data; - size_t data_size = static_cast(fill_cmd.memory_size); - - if (format::IsBlockCompressed(block_header.type)) - { - size_t uncompressed_size = 0; - size_t compressed_size = - static_cast(block_header.size - format::GetMetaDataBlockBaseSize(fill_cmd)); + PrepMetadataBlock(fill_cmd.meta_header, args.meta_data_id, data_address, data_size); - if (!ReadCompressedParameterBuffer(compressed_size, data_size, &uncompressed_size)) - { - HandleBlockReadError(kErrorReadingCompressedBlockData, "Failed to read fill memory meta-data block"); - return false; - } + // Calculate size of packet with compressed or uncompressed data size. + fill_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(fill_cmd) + data_size; - assert(uncompressed_size == data_size); - } - else - { - if (!ReadParameterBuffer(data_size)) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read fill memory meta-data block"); - return false; - } - } - - const auto& buffer = GetParameterBuffer(); - const uint8_t* data_address = buffer.data(); - - PrepMetadataBlock(fill_cmd.meta_header, meta_data_id, data_address, data_size); - - // Calculate size of packet with compressed or uncompressed data size. - fill_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(fill_cmd) + data_size; - - if (!WriteBytes(&fill_cmd, sizeof(fill_cmd))) - { - HandleBlockWriteError(kErrorWritingBlockHeader, "Failed to write fill memory meta-data block header"); - return false; - } - - if (!WriteBytes(data_address, data_size)) - { - HandleBlockWriteError(kErrorWritingBlockData, "Failed to write fill memory meta-data block"); - return false; - } + if (!WriteBytes(&fill_cmd, sizeof(fill_cmd))) + { + HandleBlockWriteError(decode::kErrorWritingBlockHeader, "Failed to write fill memory meta-data block header"); + return kError; } - else + + if (!WriteBytes(data_address, data_size)) { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read fill memory meta-data block header"); - return false; + HandleBlockWriteError(decode::kErrorWritingBlockData, "Failed to write fill memory meta-data block"); + return kError; } - return true; + return kSuccess; } -bool CompressionConverter::WriteInitBufferMetaData(const format::BlockHeader& block_header, - format::MetaDataId meta_data_id) +decode::FileTransformer::VisitResult CompressionConverter::WriteMetaData(const decode::InitBufferArgs& args) { - assert(format::GetMetaDataType(meta_data_id) == format::MetaDataType::kInitBufferCommand); + GFXRECON_ASSERT(format::GetMetaDataType(args.meta_data_id) == format::MetaDataType::kInitBufferCommand); format::InitBufferCommandHeader init_cmd; - bool success = ReadBytes(&init_cmd.thread_id, sizeof(init_cmd.thread_id)); - success = success && ReadBytes(&init_cmd.device_id, sizeof(init_cmd.device_id)); - success = success && ReadBytes(&init_cmd.buffer_id, sizeof(init_cmd.buffer_id)); - success = success && ReadBytes(&init_cmd.data_size, sizeof(init_cmd.data_size)); - - if (success) - { - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, init_cmd.data_size); - - size_t data_size = static_cast(init_cmd.data_size); - - if (format::IsBlockCompressed(block_header.type)) - { - size_t uncompressed_size = 0; - size_t compressed_size = - static_cast(block_header.size - format::GetMetaDataBlockBaseSize(init_cmd)); - - if (!ReadCompressedParameterBuffer(compressed_size, data_size, &uncompressed_size)) - { - HandleBlockReadError(kErrorReadingCompressedBlockData, "Failed to read init buffer meta-data block"); - return false; - } - - assert(uncompressed_size == data_size); - } - else - { - if (!ReadParameterBuffer(data_size)) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read init buffer meta-data block"); - return false; - } - } - - const auto& buffer = GetParameterBuffer(); - const uint8_t* data_address = buffer.data(); + init_cmd.thread_id = args.thread_id; + init_cmd.device_id = args.device_id; + init_cmd.buffer_id = args.buffer_id; + init_cmd.data_size = args.data_size; - PrepMetadataBlock(init_cmd.meta_header, meta_data_id, data_address, data_size); + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, init_cmd.data_size); + size_t data_size = static_cast(init_cmd.data_size); + const uint8_t* data_address = args.data; - // Calculate size of packet with compressed or uncompressed data size. - init_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(init_cmd) + data_size; + PrepMetadataBlock(init_cmd.meta_header, args.meta_data_id, data_address, data_size); - if (!WriteBytes(&init_cmd, sizeof(init_cmd))) - { - HandleBlockWriteError(kErrorWritingBlockHeader, "Failed to write init buffer meta-data block header"); - return false; - } + // Calculate size of packet with compressed or uncompressed data size. + init_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(init_cmd) + data_size; - if (!WriteBytes(data_address, data_size)) - { - HandleBlockWriteError(kErrorWritingBlockData, "Failed to write init buffer meta-data block"); - return false; - } + if (!WriteBytes(&init_cmd, sizeof(init_cmd))) + { + HandleBlockWriteError(decode::kErrorWritingBlockHeader, "Failed to write init buffer meta-data block header"); + return kError; } - else + + if (!WriteBytes(data_address, data_size)) { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read init buffer meta-data block header"); - return false; + HandleBlockWriteError(decode::kErrorWritingBlockData, "Failed to write init buffer meta-data block"); + return kError; } - return true; + return kSuccess; } -bool CompressionConverter::WriteInitImageMetaData(const format::BlockHeader& block_header, - format::MetaDataId meta_data_id) +decode::FileTransformer::VisitResult CompressionConverter::WriteMetaData(const decode::InitImageArgs& args) { - assert(format::GetMetaDataType(meta_data_id) == format::MetaDataType::kInitImageCommand); + GFXRECON_ASSERT(format::GetMetaDataType(args.meta_data_id) == format::MetaDataType::kInitImageCommand); format::InitImageCommandHeader init_cmd; std::vector level_sizes; size_t levels_size = 0; - bool success = ReadBytes(&init_cmd.thread_id, sizeof(init_cmd.thread_id)); - success = success && ReadBytes(&init_cmd.device_id, sizeof(init_cmd.device_id)); - success = success && ReadBytes(&init_cmd.image_id, sizeof(init_cmd.image_id)); - success = success && ReadBytes(&init_cmd.data_size, sizeof(init_cmd.data_size)); - success = success && ReadBytes(&init_cmd.aspect, sizeof(init_cmd.aspect)); - success = success && ReadBytes(&init_cmd.layout, sizeof(init_cmd.layout)); - success = success && ReadBytes(&init_cmd.level_count, sizeof(init_cmd.level_count)); + init_cmd.thread_id = args.thread_id; + init_cmd.device_id = args.device_id; + init_cmd.image_id = args.image_id; + init_cmd.data_size = args.data_size; + init_cmd.aspect = args.aspect; + init_cmd.layout = args.layout; + init_cmd.level_count = args.level_sizes.size(); - if (success && (init_cmd.level_count > 0)) + if (init_cmd.level_count > 0) { - level_sizes.resize(init_cmd.level_count); + level_sizes = args.level_sizes; levels_size = init_cmd.level_count * sizeof(level_sizes[0]); - success = ReadBytes(level_sizes.data(), levels_size); - } - - if (success) - { - // Packet size without the resource data. - init_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(init_cmd); - init_cmd.meta_header.block_header.type = format::kMetaDataBlock; - init_cmd.meta_header.meta_data_id = meta_data_id; - - if (init_cmd.data_size > 0) - { - assert(init_cmd.data_size == std::accumulate(level_sizes.begin(), level_sizes.end(), 0ull)); - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, init_cmd.data_size); - - size_t data_size = static_cast(init_cmd.data_size); - - if (format::IsBlockCompressed(block_header.type)) - { - size_t uncompressed_size = 0; - size_t compressed_size = - static_cast(block_header.size - format::GetMetaDataBlockBaseSize(init_cmd)) - levels_size; - - if (!ReadCompressedParameterBuffer(compressed_size, data_size, &uncompressed_size)) - { - HandleBlockReadError(kErrorReadingCompressedBlockData, "Failed to read init image meta-data block"); - return false; - } - - assert(uncompressed_size == data_size); - } - else - { - if (!ReadParameterBuffer(data_size)) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read init image meta-data block"); - return false; - } - } - - const auto& buffer = GetParameterBuffer(); - const uint8_t* data_address = buffer.data(); - - PrepMetadataBlock(init_cmd.meta_header, meta_data_id, data_address, data_size); - - // Calculate size of packet with compressed or uncompressed data size. - init_cmd.meta_header.block_header.size = - format::GetMetaDataBlockBaseSize(init_cmd) + levels_size + data_size; - - if (!WriteBytes(&init_cmd, sizeof(init_cmd))) - { - HandleBlockWriteError(kErrorWritingBlockHeader, "Failed to write init image meta-data block header"); - return false; - } - - if (!WriteBytes(level_sizes.data(), levels_size)) - { - HandleBlockWriteError(kErrorWritingBlockHeader, "Failed to write init image meta-data block"); - return false; - } - - if (!WriteBytes(data_address, data_size)) - { - HandleBlockWriteError(kErrorWritingBlockData, "Failed to write init image meta-data block"); - return false; - } - } - else - { - // Write a packet without resource data; replay must still perform a layout transition at image - // initialization. - init_cmd.data_size = 0; - init_cmd.level_count = 0; - - if (!WriteBytes(&init_cmd, sizeof(init_cmd))) - { - HandleBlockWriteError(kErrorWritingBlockHeader, "Failed to write init image meta-data block header"); - return false; - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read init image meta-data block header"); - return false; } - return true; -} + // Packet size without the resource data. + init_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(init_cmd); + init_cmd.meta_header.block_header.type = format::kMetaDataBlock; + init_cmd.meta_header.meta_data_id = args.meta_data_id; -bool CompressionConverter::WriteInitSubresourceMetaData(const format::BlockHeader& block_header, - format::MetaDataId meta_data_id) -{ - assert(format::GetMetaDataType(meta_data_id) == format::MetaDataType::kInitSubresourceCommand); - - format::InitSubresourceCommandHeader init_cmd; - - bool success = ReadBytes(&init_cmd.thread_id, sizeof(init_cmd.thread_id)); - success = success && ReadBytes(&init_cmd.device_id, sizeof(init_cmd.device_id)); - success = success && ReadBytes(&init_cmd.resource_id, sizeof(init_cmd.resource_id)); - success = success && ReadBytes(&init_cmd.subresource, sizeof(init_cmd.subresource)); - success = success && ReadBytes(&init_cmd.initial_state, sizeof(init_cmd.initial_state)); - success = success && ReadBytes(&init_cmd.resource_state, sizeof(init_cmd.resource_state)); - success = success && ReadBytes(&init_cmd.barrier_flags, sizeof(init_cmd.barrier_flags)); - success = success && ReadBytes(&init_cmd.data_size, sizeof(init_cmd.data_size)); - - if (success) + if (init_cmd.data_size > 0) { GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, init_cmd.data_size); - size_t data_size = static_cast(init_cmd.data_size); + const uint8_t* data_address = args.data; - if (format::IsBlockCompressed(block_header.type)) - { - size_t uncompressed_size = 0; - size_t compressed_size = - static_cast(block_header.size - format::GetMetaDataBlockBaseSize(init_cmd)); + PrepMetadataBlock(init_cmd.meta_header, args.meta_data_id, data_address, data_size); - if (!ReadCompressedParameterBuffer(compressed_size, data_size, &uncompressed_size)) - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read init subresource meta-data block"); - return false; - } + // Calculate size of packet with compressed or uncompressed data size. + init_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(init_cmd) + levels_size + data_size; - assert(uncompressed_size == data_size); - } - else + if (!WriteBytes(&init_cmd, sizeof(init_cmd))) { - if (!ReadParameterBuffer(data_size)) - { - HandleBlockReadError(kErrorReadingBlockData, "Failed to read init subresource meta-data block"); - return false; - } + HandleBlockWriteError(decode::kErrorWritingBlockHeader, + "Failed to write init image meta-data block header"); + return kError; } - const auto& buffer = GetParameterBuffer(); - const uint8_t* data_address = buffer.data(); - - PrepMetadataBlock(init_cmd.meta_header, meta_data_id, data_address, data_size); - - // Calculate size of packet with compressed or uncompressed data size. - init_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(init_cmd) + data_size; - - if (!WriteBytes(&init_cmd, sizeof(init_cmd))) + if (!WriteBytes(level_sizes.data(), levels_size)) { - HandleBlockWriteError(kErrorWritingBlockHeader, "Failed to write init subresource meta-data block header"); - return false; + HandleBlockWriteError(decode::kErrorWritingBlockHeader, "Failed to write init image meta-data block"); + return kError; } if (!WriteBytes(data_address, data_size)) { - HandleBlockWriteError(kErrorWritingBlockData, "Failed to write init subresource meta-data block"); - return false; + HandleBlockWriteError(decode::kErrorWritingBlockData, "Failed to write init image meta-data block"); + return kError; } } else { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read init subresource meta-data block header"); - return false; - } + // Write a packet without resource data; replay must still perform a layout transition at image + // initialization. + init_cmd.data_size = 0; + init_cmd.level_count = 0; - return true; -} - -bool CompressionConverter::WriteInitDx12AccelerationStructureMetaData(const format::BlockHeader& block_header, - format::MetaDataId meta_data_id) -{ - assert(format::GetMetaDataType(meta_data_id) == format::MetaDataType::kInitDx12AccelerationStructureCommand); - - format::InitDx12AccelerationStructureCommandHeader init_cmd; - bool success = ReadBytes(&init_cmd.thread_id, sizeof(init_cmd.thread_id)); - success = success && - ReadBytes(&init_cmd.dest_acceleration_structure_data, sizeof(init_cmd.dest_acceleration_structure_data)); - success = success && ReadBytes(&init_cmd.copy_source_gpu_va, sizeof(init_cmd.copy_source_gpu_va)); - success = success && ReadBytes(&init_cmd.copy_mode, sizeof(init_cmd.copy_mode)); - success = success && ReadBytes(&init_cmd.inputs_type, sizeof(init_cmd.inputs_type)); - success = success && ReadBytes(&init_cmd.inputs_flags, sizeof(init_cmd.inputs_flags)); - success = success && ReadBytes(&init_cmd.inputs_num_instance_descs, sizeof(init_cmd.inputs_num_instance_descs)); - success = success && ReadBytes(&init_cmd.inputs_num_geometry_descs, sizeof(init_cmd.inputs_num_geometry_descs)); - success = success && ReadBytes(&init_cmd.inputs_data_size, sizeof(init_cmd.inputs_data_size)); - - // Parse geometry descs. - - std::vector geom_descs; - if (success) - { - for (uint32_t i = 0; i < init_cmd.inputs_num_geometry_descs; ++i) + if (!WriteBytes(&init_cmd, sizeof(init_cmd))) { - format::InitDx12AccelerationStructureGeometryDesc geom_desc; - success = success && ReadBytes(&geom_desc.geometry_type, sizeof(geom_desc.geometry_type)); - success = success && ReadBytes(&geom_desc.geometry_flags, sizeof(geom_desc.geometry_flags)); - success = success && ReadBytes(&geom_desc.aabbs_count, sizeof(geom_desc.aabbs_count)); - success = success && ReadBytes(&geom_desc.aabbs_stride, sizeof(geom_desc.aabbs_stride)); - success = - success && ReadBytes(&geom_desc.triangles_has_transform, sizeof(geom_desc.triangles_has_transform)); - success = success && ReadBytes(&geom_desc.triangles_index_format, sizeof(geom_desc.triangles_index_format)); - success = - success && ReadBytes(&geom_desc.triangles_vertex_format, sizeof(geom_desc.triangles_vertex_format)); - success = success && ReadBytes(&geom_desc.triangles_index_count, sizeof(geom_desc.triangles_index_count)); - success = success && ReadBytes(&geom_desc.triangles_vertex_count, sizeof(geom_desc.triangles_vertex_count)); - success = - success && ReadBytes(&geom_desc.triangles_vertex_stride, sizeof(geom_desc.triangles_vertex_stride)); - geom_descs.push_back(geom_desc); + HandleBlockWriteError(decode::kErrorWritingBlockHeader, + "Failed to write init image meta-data block header"); + return kError; } } - if (success) - { - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, init_cmd.inputs_data_size); + return kSuccess; +} - size_t data_size = static_cast(init_cmd.inputs_data_size); +decode::FileTransformer::VisitResult CompressionConverter::WriteMetaData(const decode::InitSubresourceArgs& args) +{ + GFXRECON_ASSERT(format::GetMetaDataType(args.meta_data_id) == format::MetaDataType::kInitSubresourceCommand); - if (format::IsBlockCompressed(block_header.type)) - { - size_t uncompressed_size = 0; - size_t compressed_size = - static_cast(block_header.size) - - (sizeof(init_cmd) - sizeof(init_cmd.meta_header.block_header)) - - (sizeof(format::InitDx12AccelerationStructureGeometryDesc) * init_cmd.inputs_num_geometry_descs); + // The header needs to be a copy as we are rewriting it below + format::InitSubresourceCommandHeader init_cmd = args.command_header; - if (!ReadCompressedParameterBuffer(compressed_size, data_size, &uncompressed_size)) - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read init DX12 acceleration structure meta-data block"); - return false; - } + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, init_cmd.data_size); + size_t data_size = static_cast(init_cmd.data_size); + const uint8_t* data_address = args.data; - assert(uncompressed_size == data_size); - } - else - { - if (!ReadParameterBuffer(data_size)) - { - HandleBlockReadError(kErrorReadingBlockData, - "Failed to read init DX12 acceleration structure meta-data block"); - return false; - } - } - - const auto& buffer = GetParameterBuffer(); - const uint8_t* data_address = buffer.data(); + PrepMetadataBlock(init_cmd.meta_header, args.meta_data_id, data_address, data_size); - PrepMetadataBlock(init_cmd.meta_header, meta_data_id, data_address, data_size); - - // Calculate size of packet with compressed or uncompressed data size. - init_cmd.meta_header.block_header.size = - format::GetMetaDataBlockBaseSize(init_cmd) + data_size + - (sizeof(format::InitDx12AccelerationStructureGeometryDesc) * init_cmd.inputs_num_geometry_descs); + // Calculate size of packet with compressed or uncompressed data size. + init_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(init_cmd) + data_size; - if (!WriteBytes(&init_cmd, sizeof(init_cmd))) - { - HandleBlockWriteError(kErrorWritingBlockHeader, - "Failed to write init DX12 acceleration structure meta-data block header"); - return false; - } - if (!WriteBytes(geom_descs.data(), - sizeof(format::InitDx12AccelerationStructureGeometryDesc) * geom_descs.size())) - { - HandleBlockWriteError(kErrorWritingBlockHeader, - "Failed to write init DX12 acceleration structure geometry block"); - return false; - } - if (!WriteBytes(data_address, data_size)) - { - HandleBlockWriteError(kErrorWritingBlockData, - "Failed to write init DX12 acceleration structure meta-data block"); - return false; - } + if (!WriteBytes(&init_cmd, sizeof(init_cmd))) + { + HandleBlockWriteError(decode::kErrorWritingBlockHeader, + "Failed to write init subresource meta-data block header"); + return kError; } - else + + if (!WriteBytes(data_address, data_size)) { - HandleBlockReadError(kErrorReadingBlockHeader, - "Failed to read init DX12 acceleration structure meta-data block header"); + HandleBlockWriteError(decode::kErrorWritingBlockData, "Failed to write init subresource meta-data block"); + return kError; } - return true; + return kSuccess; } -bool CompressionConverter::WriteFillMemoryResourceValueMetaData(const format::BlockHeader& block_header, - format::MetaDataId meta_data_id) +decode::FileTransformer::VisitResult +CompressionConverter::WriteMetaData(const decode::InitDx12AccelerationStructureArgs& args) { - format::FillMemoryResourceValueCommandHeader rv_cmd; - bool success = ReadBytes(&rv_cmd.thread_id, sizeof(rv_cmd.thread_id)); + GFXRECON_ASSERT(format::GetMetaDataType(args.meta_data_id) == + format::MetaDataType::kInitDx12AccelerationStructureCommand); - success = success && ReadBytes(&rv_cmd.resource_value_count, sizeof(rv_cmd.resource_value_count)); + // The header needs to be a copy as we are rewriting it below + format::InitDx12AccelerationStructureCommandHeader init_cmd = args.command_header; + const std::vector& geom_descs = args.geometry_descs; + GFXRECON_ASSERT(args.geometry_descs.size() == init_cmd.inputs_num_geometry_descs); - if (success) - { - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, rv_cmd.resource_value_count); - size_t data_size = - static_cast(rv_cmd.resource_value_count * (sizeof(format::ResourceValueType) + sizeof(uint64_t))); + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, init_cmd.inputs_data_size); + size_t data_size = static_cast(init_cmd.inputs_data_size); + const uint8_t* data_address = args.data; - if (format::IsBlockCompressed(block_header.type)) - { - size_t uncompressed_size = 0; - size_t compressed_size = static_cast(block_header.size - format::GetMetaDataBlockBaseSize(rv_cmd)); + PrepMetadataBlock(init_cmd.meta_header, args.meta_data_id, data_address, data_size); - if (!ReadCompressedParameterBuffer(compressed_size, data_size, &uncompressed_size)) - { - HandleBlockReadError(kErrorReadingCompressedBlockData, - "Failed to read fill memory resource value meta-data block"); - return false; - } + // Calculate size of packet with compressed or uncompressed data size. + init_cmd.meta_header.block_header.size = + format::GetMetaDataBlockBaseSize(init_cmd) + data_size + + (sizeof(format::InitDx12AccelerationStructureGeometryDesc) * init_cmd.inputs_num_geometry_descs); - assert(uncompressed_size == data_size); - } - else - { - if (!ReadParameterBuffer(data_size)) - { - HandleBlockReadError(kErrorReadingBlockData, - "Failed to read fill memory resource value meta-data block"); - return false; - } - } + if (!WriteBytes(&init_cmd, sizeof(init_cmd))) + { + HandleBlockWriteError(decode::kErrorWritingBlockHeader, + "Failed to write init DX12 acceleration structure meta-data block header"); + return kError; + } + if (!WriteBytes(geom_descs.data(), sizeof(format::InitDx12AccelerationStructureGeometryDesc) * geom_descs.size())) + { + HandleBlockWriteError(decode::kErrorWritingBlockHeader, + "Failed to write init DX12 acceleration structure geometry block"); + return kError; + } + if (!WriteBytes(data_address, data_size)) + { + HandleBlockWriteError(decode::kErrorWritingBlockData, + "Failed to write init DX12 acceleration structure meta-data block"); + return kError; + } - const auto& buffer = GetParameterBuffer(); - const uint8_t* data_address = buffer.data(); + return kSuccess; +} - PrepMetadataBlock(rv_cmd.meta_header, meta_data_id, data_address, data_size); +decode::FileTransformer::VisitResult +CompressionConverter::WriteMetaData(const decode::FillMemoryResourceValueArgs& args) +{ + // The header needs to be a copy as we are rewriting it below + format::FillMemoryResourceValueCommandHeader rv_cmd = args.command_header; + GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, args.data_size); + size_t data_size = static_cast(args.data_size); + const uint8_t* data_address = args.data; - // Calculate size of packet with compressed or uncompressed data size. - rv_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(rv_cmd) + data_size; + PrepMetadataBlock(rv_cmd.meta_header, args.meta_data_id, data_address, data_size); - if (!WriteBytes(&rv_cmd, sizeof(rv_cmd))) - { - HandleBlockWriteError(kErrorWritingBlockHeader, "Failed to write fill memory meta-data block header"); - return false; - } + // Calculate size of packet with compressed or uncompressed data size. + rv_cmd.meta_header.block_header.size = format::GetMetaDataBlockBaseSize(rv_cmd) + data_size; - if (!WriteBytes(data_address, data_size)) - { - HandleBlockWriteError(kErrorWritingBlockData, "Failed to read fill memory resource value meta-data block"); - return false; - } + if (!WriteBytes(&rv_cmd, sizeof(rv_cmd))) + { + HandleBlockWriteError(decode::kErrorWritingBlockHeader, "Failed to write fill memory meta-data block header"); + return kError; } - else + + if (!WriteBytes(data_address, data_size)) { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to write fill memory resource value meta-data block"); - return false; + HandleBlockWriteError(decode::kErrorWritingBlockData, + "Failed to read fill memory resource value meta-data block"); + return kError; } - return true; + return kSuccess; } void CompressionConverter::PrepMetadataBlock(format::MetaDataHeader& meta_data_header, @@ -934,11 +574,13 @@ void CompressionConverter::PrepMetadataBlock(format::MetaDataHeader& meta_data_h if (!decompressing_) { - assert(target_compressor_ != nullptr); + GFXRECON_ASSERT(target_compressor_ != nullptr); auto& compressed_buffer = GetCompressedParameterBuffer(); size_t compressed_size = target_compressor_->Compress(data_size, data_address, &compressed_buffer, 0); + // Note: With MetaDataBlocks the uncompressed size is encoded (or computable from) other fields in the + // block, s.t. there is no data size overhead for using compressed_data if ((compressed_size > 0) && (compressed_size < data_size)) { meta_data_header.block_header.type = format::BlockType::kCompressedMetaDataBlock; diff --git a/third_party/gfxreconstruct/tools/compress/compression_converter.h b/third_party/gfxreconstruct/tools/compress/compression_converter.h index c97620ce0..a5784f6be 100644 --- a/third_party/gfxreconstruct/tools/compress/compression_converter.h +++ b/third_party/gfxreconstruct/tools/compress/compression_converter.h @@ -46,36 +46,36 @@ class CompressionConverter : public decode::FileTransformer format::CompressionType target_compression_type); protected: - virtual bool WriteFileHeader(const format::FileHeader& header, - const std::vector& options) override; + bool WriteFileHeader(const format::FileHeader& header, const std::vector& options) override; - virtual bool ProcessFunctionCall(const format::BlockHeader& block_header, format::ApiCallId call_id) override; + bool ProcessFunctionCall(decode::ParsedBlock& parsed_block) override; + bool ProcessMethodCall(decode::ParsedBlock& parsed_block) override; - virtual bool - ProcessMethodCall(const format::BlockHeader& block_header, format::ApiCallId call_id, uint64_t block_index = 0) override; - - virtual bool ProcessMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id) override; + bool ProcessMetaData(decode::ParsedBlock& parsed_block) override; private: - bool WriteFunctionCall(format::ApiCallId call_id, format::ThreadId thread_id, size_t buffer_size); + bool + WriteFunctionCall(format::ApiCallId call_id, format::ThreadId thread_id, size_t buffer_size, const uint8_t* buffer); bool WriteMethodCall(format::ApiCallId call_id, format::HandleId object_id, format::ThreadId thread_id, - size_t buffer_size); - - bool WriteFillMemoryMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id); - - bool WriteInitBufferMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id); - - bool WriteInitImageMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id); - - bool WriteInitSubresourceMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id); - - bool WriteInitDx12AccelerationStructureMetaData(const format::BlockHeader& block_header, - format::MetaDataId meta_data_id); - - bool WriteFillMemoryResourceValueMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id); + size_t buffer_size, + const uint8_t* buffer); + + // Specialists called by the vistor in ProcessMetaData + VisitResult WriteMetaData(const decode::FillMemoryArgs& args); + VisitResult WriteMetaData(const decode::InitBufferArgs& args); + VisitResult WriteMetaData(const decode::InitImageArgs& args); + VisitResult WriteMetaData(const decode::InitSubresourceArgs& args); + VisitResult WriteMetaData(const decode::InitDx12AccelerationStructureArgs& args); + VisitResult WriteMetaData(const decode::FillMemoryResourceValueArgs& args); + + template + VisitResult WriteMetaData(Args&) + { + return kNeedsPassthrough; + } void PrepMetadataBlock(format::MetaDataHeader& meta_data_header, format::MetaDataId meta_data_id, diff --git a/third_party/gfxreconstruct/tools/compress/main.cpp b/third_party/gfxreconstruct/tools/compress/main.cpp index 1679c76e4..6c1be611b 100644 --- a/third_party/gfxreconstruct/tools/compress/main.cpp +++ b/third_party/gfxreconstruct/tools/compress/main.cpp @@ -108,7 +108,7 @@ static bool CheckOptionPrintVersion(const char* exe_name, const gfxrecon::util:: } GFXRECON_WRITE_CONSOLE("%s version info:", app_name.c_str()); - GFXRECON_WRITE_CONSOLE(" GFXReconstruct Version %s", GFXRECON_PROJECT_VERSION_STRING); + GFXRECON_WRITE_CONSOLE(" GFXReconstruct Version %s", GetProjectVersionString()); GFXRECON_WRITE_CONSOLE(" Vulkan Header Version %u.%u.%u", VK_VERSION_MAJOR(VK_HEADER_VERSION_COMPLETE), VK_VERSION_MINOR(VK_HEADER_VERSION_COMPLETE), diff --git a/third_party/gfxreconstruct/tools/convert/CMakeLists.txt b/third_party/gfxreconstruct/tools/convert/CMakeLists.txt index 6346ccfd7..516ef8bee 100644 --- a/third_party/gfxreconstruct/tools/convert/CMakeLists.txt +++ b/third_party/gfxreconstruct/tools/convert/CMakeLists.txt @@ -52,7 +52,7 @@ endif() target_include_directories(gfxrecon-convert PUBLIC ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_LIST_DIR}/..) -target_link_libraries(gfxrecon-convert gfxrecon_decode gfxrecon_graphics gfxrecon_format gfxrecon_util platform_specific) +target_link_libraries(gfxrecon-convert gfxrecon_decode gfxrecon_graphics gfxrecon_format gfxrecon_util platform_specific project_version) common_build_directives(gfxrecon-convert) diff --git a/third_party/gfxreconstruct/tools/convert/main.cpp b/third_party/gfxreconstruct/tools/convert/main.cpp index aa3ae936d..5f067516a 100644 --- a/third_party/gfxreconstruct/tools/convert/main.cpp +++ b/third_party/gfxreconstruct/tools/convert/main.cpp @@ -109,14 +109,19 @@ static void PrintUsage(const char* exe_name) #endif } -static std::string GetOutputFileName(const gfxrecon::util::ArgumentParser& arg_parser, - const std::string& input_filename, - JsonFormat output_format) +static void GetOutputFileName(const gfxrecon::util::ArgumentParser& arg_parser, + const std::string& input_filename, + JsonFormat output_format, + bool& output_to_stdout, + std::string& output_stem, + std::string& output_filename, + std::string& output_data_dir) { - std::string output_filename; if (arg_parser.IsArgumentSet(kOutput)) { output_filename = arg_parser.GetArgumentValue(kOutput); + + output_to_stdout = (output_filename == "stdout"); } else { @@ -128,8 +133,24 @@ static std::string GetOutputFileName(const gfxrecon::util::ArgumentParser& arg_p output_filename = output_filename.substr(0, ext_pos); } output_filename += "." + gfxrecon::util::get_json_format(output_format); + + output_to_stdout = false; + } + + // If we're outputing to stdout, we still need to use a data filename using the + // capture file prefix + std::string output_dir; + if (output_to_stdout) + { + output_stem = gfxrecon::util::filepath::GetFilenameStem(input_filename); + output_dir = gfxrecon::util::filepath::GetBasedir(input_filename); } - return output_filename; + else + { + output_stem = gfxrecon::util::filepath::GetFilenameStem(output_filename); + output_dir = gfxrecon::util::filepath::GetBasedir(output_filename); + } + output_data_dir = gfxrecon::util::filepath::Join(output_dir, output_stem); } static gfxrecon::util::JsonFormat GetOutputFormat(const gfxrecon::util::ArgumentParser& arg_parser) @@ -218,18 +239,19 @@ int main(int argc, const char** argv) gfxrecon::util::Log::Release(); gfxrecon::util::Log::Init(log_settings); + std::string filename_stem; + std::string output_filename; + std::string output_dir; + bool output_to_stdout; const auto& positional_arguments = arg_parser.GetPositionalArguments(); std::string input_filename = positional_arguments[0]; JsonFormat output_format = GetOutputFormat(arg_parser); - std::string output_filename = GetOutputFileName(arg_parser, input_filename, output_format); - std::string filename_stem = gfxrecon::util::filepath::GetFilenameStem(output_filename); - std::string output_dir = gfxrecon::util::filepath::GetBasedir(output_filename); - std::string data_dir = gfxrecon::util::filepath::Join(output_dir, filename_stem); - bool dump_binaries = arg_parser.IsOptionSet(kIncludeBinariesOption); - bool expand_flags = arg_parser.IsOptionSet(kExpandFlagsOption); - bool file_per_frame = arg_parser.IsOptionSet(kFilePerFrameOption); - bool output_to_stdout = output_filename == "stdout"; + GetOutputFileName( + arg_parser, input_filename, output_format, output_to_stdout, filename_stem, output_filename, output_dir); + bool dump_binaries = arg_parser.IsOptionSet(kIncludeBinariesOption); + bool expand_flags = arg_parser.IsOptionSet(kExpandFlagsOption); + bool file_per_frame = arg_parser.IsOptionSet(kFilePerFrameOption); std::vector frame_indices; bool frame_range_option = GetFrameIndices(arg_parser, frame_indices); @@ -266,7 +288,7 @@ int main(int argc, const char** argv) if (dump_binaries) { - gfxrecon::util::filepath::MakeDirectory(data_dir); + gfxrecon::util::filepath::MakeDirectory(output_dir); } if (file_processor.Initialize(input_filename)) @@ -327,7 +349,7 @@ int main(int argc, const char** argv) json_options.dump_binaries = dump_binaries; json_options.expand_flags = expand_flags; - gfxrecon::decode::JsonWriter json_writer{ json_options, GFXRECON_PROJECT_VERSION_STRING, input_filename }; + gfxrecon::decode::JsonWriter json_writer{ json_options, GetProjectVersionString(), input_filename }; file_processor.SetAnnotationProcessor(&json_writer); bool success = true; @@ -450,14 +472,16 @@ int main(int argc, const char** argv) if (tmp_file_handle != nullptr) { gfxrecon::util::platform::FileClose(tmp_file_handle); + tmp_file_handle = nullptr; } if (!output_to_stdout) { gfxrecon::util::platform::FileClose(out_file_handle); + out_file_handle = nullptr; } - if (file_processor.GetErrorState() != gfxrecon::decode::FileProcessor::kErrorNone) + if (file_processor.GetErrorState() != gfxrecon::decode::BlockIOError::kErrorNone) { GFXRECON_LOG_ERROR("Failed to process trace."); ret_code = 1; diff --git a/third_party/gfxreconstruct/tools/extract/CMakeLists.txt b/third_party/gfxreconstruct/tools/extract/CMakeLists.txt index 36136f102..a712708e1 100644 --- a/third_party/gfxreconstruct/tools/extract/CMakeLists.txt +++ b/third_party/gfxreconstruct/tools/extract/CMakeLists.txt @@ -54,7 +54,7 @@ endif() target_include_directories(gfxrecon-extract PUBLIC ${CMAKE_BINARY_DIR}) -target_link_libraries(gfxrecon-extract gfxrecon_decode gfxrecon_graphics gfxrecon_format gfxrecon_util platform_specific) +target_link_libraries(gfxrecon-extract gfxrecon_decode gfxrecon_graphics gfxrecon_format gfxrecon_util platform_specific project_version) common_build_directives(gfxrecon-extract) diff --git a/third_party/gfxreconstruct/tools/extract/main.cpp b/third_party/gfxreconstruct/tools/extract/main.cpp index 9b07f9b5c..25f7c5eb7 100644 --- a/third_party/gfxreconstruct/tools/extract/main.cpp +++ b/third_party/gfxreconstruct/tools/extract/main.cpp @@ -95,7 +95,7 @@ static bool CheckOptionPrintVersion(const char* exe_name, const gfxrecon::util:: } GFXRECON_WRITE_CONSOLE("%s version info:", app_name.c_str()); - GFXRECON_WRITE_CONSOLE(" GFXReconstruct Version %s", GFXRECON_PROJECT_VERSION_STRING); + GFXRECON_WRITE_CONSOLE(" GFXReconstruct Version %s", GetProjectVersionString()); GFXRECON_WRITE_CONSOLE(" Vulkan Header Version %u.%u.%u", VK_VERSION_MAJOR(VK_HEADER_VERSION_COMPLETE), VK_VERSION_MINOR(VK_HEADER_VERSION_COMPLETE), @@ -321,7 +321,7 @@ int main(int argc, const char** argv) file_processor.AddDecoder(&decoder); file_processor.ProcessAllFrames(); - if (file_processor.GetErrorState() != gfxrecon::decode::FileProcessor::kErrorNone) + if (file_processor.GetErrorState() != gfxrecon::decode::BlockIOError::kErrorNone) { GFXRECON_WRITE_CONSOLE("A failure has occurred during file processing"); gfxrecon::util::Log::Release(); diff --git a/third_party/gfxreconstruct/tools/file_version_patch/CMakeLists.txt b/third_party/gfxreconstruct/tools/file_version_patch/CMakeLists.txt new file mode 100644 index 000000000..54b78387a --- /dev/null +++ b/third_party/gfxreconstruct/tools/file_version_patch/CMakeLists.txt @@ -0,0 +1,62 @@ +############################################################################### +# Copyright (c) 2018-2020 LunarG, Inc. +# Copyright (c) 2020-2023 Advanced Micro Devices, Inc. +# All rights reserved +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +# Author: LunarG Team +# Author: AMD Developer Tools Team +# Description: CMake script for framework util target +############################################################################### + +add_executable(gfxrecon-file-version-patch "") + +target_sources(gfxrecon-file-version-patch + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/main.cpp + ${CMAKE_CURRENT_LIST_DIR}/../platform_debug_helper.cpp + $<$:${PROJECT_SOURCE_DIR}/version.rc> + ) + +if (MSVC) + # Force inclusion of "gfxrecon_disable_popup_result" variable in linking. + # On 32-bit windows, MSVC prefixes symbols with "_" but on 64-bit windows it doesn't. + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + target_link_options(gfxrecon-file-version-patch PUBLIC "LINKER:/Include:_gfxrecon_disable_popup_result") + else() + target_link_options(gfxrecon-file-version-patch PUBLIC "LINKER:/Include:gfxrecon_disable_popup_result") + endif() +endif() + +target_include_directories(gfxrecon-file-version-patch PUBLIC ${CMAKE_BINARY_DIR}) +target_compile_definitions(gfxrecon_decode PUBLIC VULKAN_HPP_NO_STRUCT_SETTERS) + +target_link_libraries(gfxrecon-file-version-patch + gfxrecon_decode + gfxrecon_graphics + gfxrecon_format + gfxrecon_util + platform_specific + project_version + $<$:dxgi.lib>) + +common_build_directives(gfxrecon-file-version-patch) + +install(TARGETS gfxrecon-file-version-patch RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/third_party/gfxreconstruct/tools/file_version_patch/main.cpp b/third_party/gfxreconstruct/tools/file_version_patch/main.cpp new file mode 100644 index 000000000..697598bed --- /dev/null +++ b/third_party/gfxreconstruct/tools/file_version_patch/main.cpp @@ -0,0 +1,248 @@ +/* +** Copyright (c) 2020-2024 LunarG, Inc. +** Copyright (c) 2022-2024 Advanced Micro Devices, Inc. All rights reserved. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#include PROJECT_VERSION_HEADER_FILE + +#include "decode/file_processor.h" + +#include "decode/info_decoder.h" +#include "decode/info_consumer.h" + +#include "util/argument_parser.h" +#include "util/strings.h" +#include "util/logging.h" +#include "util/to_string.h" +#include "util/platform.h" + +#include + +#include + +const char kHelpShortOption[] = "-h"; +const char kHelpLongOption[] = "--help"; +const char kVersionOption[] = "--version"; +const char kNoDebugPopup[] = "--no-debug-popup"; + +const char kOptions[] = "-h|--help,--version,--no-debug-popup"; + +const char kUnrecognizedFormatString[] = ""; + +static void PrintUsage(const char* exe_name) +{ + std::string app_name = exe_name; + size_t dir_location = app_name.find_last_of("/\\"); + if (dir_location >= 0) + { + app_name.replace(0, dir_location + 1, ""); + } + GFXRECON_WRITE_CONSOLE("\n%s - Patch the file format version of a GFXReconstruct capture file.\n", + app_name.c_str()); + GFXRECON_WRITE_CONSOLE("Usage:"); + GFXRECON_WRITE_CONSOLE(" %s [-h | --help] [--version]\n", app_name.c_str()); + GFXRECON_WRITE_CONSOLE("Required arguments:"); + GFXRECON_WRITE_CONSOLE(" \t\tThe GFXReconstruct capture file to be processed."); + GFXRECON_WRITE_CONSOLE("\nOptional arguments:"); + GFXRECON_WRITE_CONSOLE(" -h\t\t\tPrint usage information and exit (same as --help)."); + GFXRECON_WRITE_CONSOLE(" --version\t\tPrint version information and exit."); +#if defined(WIN32) && defined(_DEBUG) + GFXRECON_WRITE_CONSOLE(" --no-debug-popup\tDisable the 'Abort, Retry, Ignore' message box"); + GFXRECON_WRITE_CONSOLE(" \t\tdisplayed when abort() is called (Windows debug only)."); +#endif +} + +static bool CheckOptionPrintUsage(const char* exe_name, const gfxrecon::util::ArgumentParser& arg_parser) +{ + if (arg_parser.IsOptionSet(kHelpShortOption) || arg_parser.IsOptionSet(kHelpLongOption)) + { + PrintUsage(exe_name); + return true; + } + + return false; +} + +static bool CheckOptionPrintVersion(const char* exe_name, const gfxrecon::util::ArgumentParser& arg_parser) +{ + if (arg_parser.IsOptionSet(kVersionOption)) + { + std::string app_name = exe_name; + size_t dir_location = app_name.find_last_of("/\\"); + + if (dir_location >= 0) + { + app_name.replace(0, dir_location + 1, ""); + } + + GFXRECON_WRITE_CONSOLE("%s version info:", app_name.c_str()); + GFXRECON_WRITE_CONSOLE(" GFXReconstruct Version %s", GetProjectVersionString()); + GFXRECON_WRITE_CONSOLE(" Vulkan Header Version %u.%u.%u", + VK_VERSION_MAJOR(VK_HEADER_VERSION_COMPLETE), + VK_VERSION_MINOR(VK_HEADER_VERSION_COMPLETE), + VK_VERSION_PATCH(VK_HEADER_VERSION_COMPLETE)); + + return true; + } + + return false; +} + +static std::string GetVersionString(uint32_t api_version) +{ + uint32_t major = api_version >> 22; + uint32_t minor = (api_version >> 12) & 0x3ff; + uint32_t patch = api_version & 0xfff; + + return std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(patch); +} + +struct FileFormatInfo +{ + uint32_t major_version = 0; + uint32_t minor_version = 0; + bool uses_frame_markers = false; + bool file_supports_frame_markers = false; + + FileFormatInfo(const gfxrecon::decode::FileProcessor& file_processor) + { + const gfxrecon::format::FileHeader& file_header = file_processor.GetFileHeader(); + major_version = file_header.major_version; + minor_version = file_header.minor_version; + uses_frame_markers = file_processor.UsesFrameMarkers(); + file_supports_frame_markers = file_processor.FileSupportsFrameMarkers(); + } + + bool NeedsUpdate() const + { + return major_version == 0 && minor_version == 0 && uses_frame_markers && !file_supports_frame_markers; + } +}; + +void PrintFileFormatInfo(const FileFormatInfo& file_format_info) +{ + GFXRECON_WRITE_CONSOLE( + "\tFile format version: %u.%u", file_format_info.major_version, file_format_info.minor_version); + const char* frame_marker_type = file_format_info.uses_frame_markers + ? (file_format_info.NeedsUpdate() ? "explicit (unsupported)" : "explicit") + : "implicit"; + GFXRECON_WRITE_CONSOLE("\tFrame delimiters: %s", frame_marker_type); +} + +FileFormatInfo GatherFileFormatInfo(gfxrecon::decode::FileProcessor& file_processor, + gfxrecon::decode::InfoConsumer& info_consumer) +{ + gfxrecon::decode::InfoDecoder info_decoder; + info_decoder.AddConsumer(&info_consumer); + file_processor.AddDecoder(&info_decoder); + bool success = file_processor.ProcessNextFrame(); + if (success && !file_processor.UsesFrameMarkers()) + { + file_processor.ProcessNextFrame(); + } + return FileFormatInfo(file_processor); +} + +// Get file format info, and if appropriate update it. Only processes the first two frames of a capture +// file. +void PatchFileFormatInfo(const std::string& input_filename) +{ + bool update_file_format = false; + // Wrap file_processor s.t. it closes the input file + { + const gfxrecon::decode::InfoConsumer::NoMaxBlockTag no_max_tag; + gfxrecon::decode::InfoConsumer info_consumer(no_max_tag); + gfxrecon::decode::FileProcessor file_processor; + if (file_processor.Initialize(input_filename)) + { + FileFormatInfo file_format_info = GatherFileFormatInfo(file_processor, info_consumer); + GFXRECON_WRITE_CONSOLE("File format info:"); + PrintFileFormatInfo(file_format_info); + // Only files with the original format, and containing frame markers can be updated + if (file_format_info.NeedsUpdate()) + { + update_file_format = true; + } + } + } + + const char* status = "SKIPPED"; + if (update_file_format) + { + // Open and rewrite byte 8 to 1, changing the file version from 0, 0 to 0, 1 + FILE* file = nullptr; + int32_t result = gfxrecon::util::platform::FileOpen(&file, input_filename.c_str(), "rb+"); + status = "FAILED"; + if (result == 0) + { + const int64_t kMinorVersionOffset = 8; + bool success = gfxrecon::util::platform::FileSeek( + file, kMinorVersionOffset, gfxrecon::util::platform::FileSeekOrigin::FileSeekSet); + if (success) + { + uint8_t one = 1; + success = gfxrecon::util::platform::FileWrite(&one, 1, file); + if (success) + { + status = "SUCCEEDED"; + } + } + gfxrecon::util::platform::FileClose(file); + } + } + GFXRECON_WRITE_CONSOLE("File format update: %s", status); +} + +int main(int argc, const char** argv) +{ + gfxrecon::util::Log::Init(); + + gfxrecon::util::ArgumentParser arg_parser(argc, argv, kOptions, ""); + + if (CheckOptionPrintUsage(argv[0], arg_parser) || CheckOptionPrintVersion(argv[0], arg_parser)) + { + gfxrecon::util::Log::Release(); + exit(0); + } + else if (arg_parser.IsInvalid() || (arg_parser.GetPositionalArgumentsCount() != 1)) + { + PrintUsage(argv[0]); + gfxrecon::util::Log::Release(); + exit(-1); + } + else + { +#if defined(WIN32) && defined(_DEBUG) + if (arg_parser.IsOptionSet(kNoDebugPopup)) + { + _set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT); + } +#endif + } + + const std::vector& positional_arguments = arg_parser.GetPositionalArguments(); + std::string input_filename = positional_arguments[0]; + + PatchFileFormatInfo(input_filename); + + gfxrecon::util::Log::Release(); + return 0; +} diff --git a/third_party/gfxreconstruct/tools/info/CMakeLists.txt b/third_party/gfxreconstruct/tools/info/CMakeLists.txt index c94c4c4c7..89156ab6b 100644 --- a/third_party/gfxreconstruct/tools/info/CMakeLists.txt +++ b/third_party/gfxreconstruct/tools/info/CMakeLists.txt @@ -61,6 +61,7 @@ target_link_libraries(gfxrecon-info gfxrecon_format gfxrecon_util platform_specific + project_version $<$:dxgi.lib>) common_build_directives(gfxrecon-info) diff --git a/third_party/gfxreconstruct/tools/info/main.cpp b/third_party/gfxreconstruct/tools/info/main.cpp index 253545a1d..8a29f4976 100644 --- a/third_party/gfxreconstruct/tools/info/main.cpp +++ b/third_party/gfxreconstruct/tools/info/main.cpp @@ -70,15 +70,17 @@ #include -const char kHelpShortOption[] = "-h"; -const char kHelpLongOption[] = "--help"; -const char kVersionOption[] = "--version"; -const char kNoDebugPopup[] = "--no-debug-popup"; -const char kExeInfoOnlyOption[] = "--exe-info-only"; -const char kEnvVarsOnlyOption[] = "--env-vars-only"; -const char kEnumGpuIndices[] = "--enum-gpu-indices"; - -const char kOptions[] = "-h|--help,--version,--no-debug-popup,--exe-info-only,--env-vars-only,--enum-gpu-indices"; +const char kHelpShortOption[] = "-h"; +const char kHelpLongOption[] = "--help"; +const char kVersionOption[] = "--version"; +const char kNoDebugPopup[] = "--no-debug-popup"; +const char kExeInfoOnlyOption[] = "--exe-info-only"; +const char kEnvVarsOnlyOption[] = "--env-vars-only"; +const char kFileFormatOnlyOption[] = "--file-format-only"; +const char kEnumGpuIndices[] = "--enum-gpu-indices"; + +const char kOptions[] = + "-h|--help,--version,--no-debug-popup,--exe-info-only,--env-vars-only,--file-format-only,--enum-gpu-indices"; const char kUnrecognizedFormatString[] = ""; @@ -117,11 +119,11 @@ class AnnotationRecorder : public gfxrecon::decode::AnnotationHandler struct ApiAgnosticStats { - gfxrecon::format::CompressionType compression_type; - uint32_t trim_start_frame; - uint32_t frame_count; - gfxrecon::decode::FileProcessor::Error error_state; - bool uses_frame_markers; + gfxrecon::format::CompressionType compression_type; + uint32_t trim_start_frame; + uint32_t frame_count; + gfxrecon::decode::BlockIOError error_state; + bool uses_frame_markers; }; std::string AdapterTypeToString(gfxrecon::format::AdapterType type) @@ -156,6 +158,7 @@ static void PrintUsage(const char* exe_name) GFXRECON_WRITE_CONSOLE(" -h\t\t\tPrint usage information and exit (same as --help)."); GFXRECON_WRITE_CONSOLE(" --version\t\tPrint version information and exit."); GFXRECON_WRITE_CONSOLE(" --exe-info-only\tQuickly exit after extracting captured application's executable name"); + GFXRECON_WRITE_CONSOLE(" --file-format-only\tQuickly exit after extracting file format information"); GFXRECON_WRITE_CONSOLE( " --env-vars-only\tQuickly exit after extracting captured application's environment variables"); #if defined(WIN32) && defined(_DEBUG) @@ -191,7 +194,7 @@ static bool CheckOptionPrintVersion(const char* exe_name, const gfxrecon::util:: } GFXRECON_WRITE_CONSOLE("%s version info:", app_name.c_str()); - GFXRECON_WRITE_CONSOLE(" GFXReconstruct Version %s", GFXRECON_PROJECT_VERSION_STRING); + GFXRECON_WRITE_CONSOLE(" GFXReconstruct Version %s", GetProjectVersionString()); GFXRECON_WRITE_CONSOLE(" Vulkan Header Version %u.%u.%u", VK_VERSION_MAJOR(VK_HEADER_VERSION_COMPLETE), VK_VERSION_MINOR(VK_HEADER_VERSION_COMPLETE), @@ -314,6 +317,43 @@ void PrintAnnotations(uint32_t annotation_count, } } +struct FileFormatInfo +{ + uint32_t major_version = 0; + uint32_t minor_version = 0; + bool uses_frame_markers = false; + bool file_supports_frame_markers = false; + + FileFormatInfo(const gfxrecon::decode::FileProcessor& file_processor) + { + const gfxrecon::format::FileHeader& file_header = file_processor.GetFileHeader(); + major_version = file_header.major_version; + minor_version = file_header.minor_version; + uses_frame_markers = file_processor.UsesFrameMarkers(); + file_supports_frame_markers = file_processor.FileSupportsFrameMarkers(); + } + + bool NeedsUpdate() const + { + return major_version == 0 && minor_version == 0 && uses_frame_markers && !file_supports_frame_markers; + } +}; + +void PrintFileFormatInfo(const FileFormatInfo& file_format_info) +{ + GFXRECON_WRITE_CONSOLE( + "\tFile format version: %u.%u", file_format_info.major_version, file_format_info.minor_version); + const char* frame_marker_type = file_format_info.uses_frame_markers + ? (file_format_info.NeedsUpdate() ? "explicit (unsupported)" : "explicit") + : "implicit"; + GFXRECON_WRITE_CONSOLE("\tFrame delimiters: %s", frame_marker_type); +} + +void PrintFileFormatInfo(const gfxrecon::decode::FileProcessor& file_processor) +{ + PrintFileFormatInfo(FileFormatInfo{ file_processor }); +} + void PrintDriverInfo(const gfxrecon::decode::InfoConsumer& driver_info_consumer) { GFXRECON_WRITE_CONSOLE(""); @@ -361,7 +401,7 @@ void GatherExeInfo(gfxrecon::decode::FileProcessor& file_processor, gfxrecon::de } // A short pass to get exe info. Only processes the first blocks of a capture file. -void GatherAndPrintExeInfo(const std::string& input_filename) +bool GatherAndPrintExeInfo(const std::string& input_filename) { gfxrecon::decode::InfoConsumer info_consumer(true); gfxrecon::decode::FileProcessor file_processor; @@ -370,6 +410,38 @@ void GatherAndPrintExeInfo(const std::string& input_filename) GatherExeInfo(file_processor, info_consumer); PrintExeInfo(info_consumer); } + + return file_processor.GetErrorState() == gfxrecon::decode::BlockIOError::kErrorNone; +} + +FileFormatInfo GatherFileFormatInfo(gfxrecon::decode::FileProcessor& file_processor, + gfxrecon::decode::InfoConsumer& info_consumer) +{ + gfxrecon::decode::InfoDecoder info_decoder; + info_decoder.AddConsumer(&info_consumer); + file_processor.AddDecoder(&info_decoder); + bool success = file_processor.ProcessNextFrame(); + if (success && !file_processor.UsesFrameMarkers()) + { + file_processor.ProcessNextFrame(); + } + return FileFormatInfo(file_processor); +} + +// A short pass to get file format info. Only processes the first two frames of a capture file. +bool GatherAndPrintFileFormatInfo(const std::string& input_filename) +{ + const gfxrecon::decode::InfoConsumer::NoMaxBlockTag no_max_tag; + gfxrecon::decode::InfoConsumer info_consumer(no_max_tag); + gfxrecon::decode::FileProcessor file_processor; + if (file_processor.Initialize(input_filename)) + { + FileFormatInfo file_format_info = GatherFileFormatInfo(file_processor, info_consumer); + GFXRECON_WRITE_CONSOLE("File format info:"); + PrintFileFormatInfo(file_format_info); + } + + return file_processor.GetErrorState() == gfxrecon::decode::BlockIOError::kErrorNone; } #if ENABLE_OPENXR_SUPPORT @@ -399,10 +471,11 @@ void PrintVulkanStats(const gfxrecon::decode::FileProcessor& file_processo const ApiAgnosticStats& api_agnostic_stats, const AnnotationRecorder& annotation_recoder) { - if (api_agnostic_stats.error_state == gfxrecon::decode::FileProcessor::kErrorNone) + if (api_agnostic_stats.error_state == gfxrecon::decode::BlockIOError::kErrorNone) { GFXRECON_WRITE_CONSOLE(""); GFXRECON_WRITE_CONSOLE("File info:"); + gfxrecon::format::CompressionType compression_type = gfxrecon::format::CompressionType::kNone; auto file_options = file_processor.GetFileOptions(); @@ -443,6 +516,8 @@ void PrintVulkanStats(const gfxrecon::decode::FileProcessor& file_processo trim_start_frame + frame_count - 1); } + PrintFileFormatInfo(file_processor); + // Application info. uint32_t api_version = vulkan_stats_consumer.GetApiVersion(); GFXRECON_WRITE_CONSOLE("\nVulkan application info:"); @@ -535,7 +610,7 @@ void PrintVulkanStats(const gfxrecon::decode::FileProcessor& file_processo GFXRECON_WRITE_CONSOLE("\nFile did not contain any frames"); } } - else if (api_agnostic_stats.error_state != gfxrecon::decode::FileProcessor::kErrorNone) + else if (api_agnostic_stats.error_state != gfxrecon::decode::BlockIOError::kErrorNone) { GFXRECON_WRITE_CONSOLE("A failure has occurred during file processing"); gfxrecon::util::Log::Release(); @@ -585,7 +660,7 @@ void PrintDx12AdapterInfo(gfxrecon::decode::Dx12StatsConsumer& dx12_consumer) for (const auto& adapter : adapters) { - const int64_t luid = (adapter.LuidHighPart << 31) | adapter.LuidLowPart; + const int64_t luid = pack_luid(adapter); std::string adapter_workload_pct = ""; @@ -680,12 +755,13 @@ void PrintDxrEiInfo(gfxrecon::decode::Dx12StatsConsumer& dx12_consumer) } } -void PrintD3D12Stats(gfxrecon::decode::Dx12StatsConsumer& dx12_consumer, +void PrintD3D12Stats(gfxrecon::decode::FileProcessor& file_processor, + gfxrecon::decode::Dx12StatsConsumer& dx12_consumer, const ApiAgnosticStats& api_agnostic_stats, gfxrecon::decode::InfoConsumer& info_consumer, const AnnotationRecorder& annotation_recoder) { - if (api_agnostic_stats.error_state == gfxrecon::decode::FileProcessor::kErrorNone) + if (api_agnostic_stats.error_state == gfxrecon::decode::BlockIOError::kErrorNone) { GFXRECON_WRITE_CONSOLE(""); GFXRECON_WRITE_CONSOLE("File info:"); @@ -724,6 +800,8 @@ void PrintD3D12Stats(gfxrecon::decode::Dx12StatsConsumer& dx12_consumer, GFXRECON_WRITE_CONSOLE("\tTest present count: %u", dx12_consumer.GetDXGITestPresentCount()); } + PrintFileFormatInfo(file_processor); + PrintDriverInfo(info_consumer); PrintDx12RuntimeInfo(dx12_consumer); @@ -734,7 +812,7 @@ void PrintD3D12Stats(gfxrecon::decode::Dx12StatsConsumer& dx12_consumer, PrintDxrEiInfo(dx12_consumer); } - else if (api_agnostic_stats.error_state != gfxrecon::decode::FileProcessor::kErrorNone) + else if (api_agnostic_stats.error_state != gfxrecon::decode::BlockIOError::kErrorNone) { GFXRECON_WRITE_CONSOLE("A failure has occurred during file processing"); gfxrecon::util::Log::Release(); @@ -801,7 +879,7 @@ void PrintEnvironmentVariableInfo(gfxrecon::decode::InfoConsumer& info_consumer) } } -void GatherAndPrintEnvVars(const std::string& input_filename) +bool GatherAndPrintEnvVars(const std::string& input_filename) { gfxrecon::decode::FileProcessor file_processor; if (file_processor.Initialize(input_filename)) @@ -811,7 +889,7 @@ void GatherAndPrintEnvVars(const std::string& input_filename) info_decoder.AddConsumer(&info_consumer); file_processor.AddDecoder(&info_decoder); file_processor.ProcessAllFrames(); - if (file_processor.GetErrorState() == gfxrecon::decode::FileProcessor::kErrorNone) + if (file_processor.GetErrorState() == gfxrecon::decode::BlockIOError::kErrorNone) { PrintEnvironmentVariableInfo(info_consumer); } @@ -820,9 +898,11 @@ void GatherAndPrintEnvVars(const std::string& input_filename) GFXRECON_LOG_ERROR("Encountered error while reading capture. Unable to report environment variables."); } } + + return file_processor.GetErrorState() == gfxrecon::decode::BlockIOError::kErrorNone; } -void GatherAndPrintAllInfo(const std::string& input_filename) +bool GatherAndPrintAllInfo(const std::string& input_filename) { gfxrecon::decode::FileProcessor file_processor; if (file_processor.Initialize(input_filename)) @@ -868,7 +948,7 @@ void GatherAndPrintAllInfo(const std::string& input_filename) #endif file_processor.ProcessAllFrames(); - if (file_processor.GetErrorState() == gfxrecon::decode::FileProcessor::kErrorNone) + if (file_processor.GetErrorState() == gfxrecon::decode::BlockIOError::kErrorNone) { ApiAgnosticStats api_agnostic_stats = {}; GatherApiAgnosticStats(api_agnostic_stats, file_processor, stat_consumer); @@ -907,7 +987,7 @@ void GatherAndPrintAllInfo(const std::string& input_filename) #if defined(D3D12_SUPPORT) if (dx12_detection_consumer.WasD3D12APIDetected() || print_all_apis) { - PrintD3D12Stats(dx12_consumer, api_agnostic_stats, info_consumer, annotation_recorder); + PrintD3D12Stats(file_processor, dx12_consumer, api_agnostic_stats, info_consumer, annotation_recorder); } #endif #if ENABLE_OPENXR_SUPPORT @@ -926,6 +1006,8 @@ void GatherAndPrintAllInfo(const std::string& input_filename) GFXRECON_WRITE_CONSOLE("Encountered error while reading capture. Stats unavailable."); } } + + return file_processor.GetErrorState() == gfxrecon::decode::BlockIOError::kErrorNone; } int main(int argc, const char** argv) @@ -964,20 +1046,25 @@ int main(int argc, const char** argv) const std::vector& positional_arguments = arg_parser.GetPositionalArguments(); std::string input_filename = positional_arguments[0]; + bool success = true; if (arg_parser.IsOptionSet(kExeInfoOnlyOption)) { - GatherAndPrintExeInfo(input_filename); + success = GatherAndPrintExeInfo(input_filename); } else if (arg_parser.IsOptionSet(kEnvVarsOnlyOption)) { - GatherAndPrintEnvVars(input_filename); + success = GatherAndPrintEnvVars(input_filename); + } + else if (arg_parser.IsOptionSet(kFileFormatOnlyOption)) + { + success = GatherAndPrintFileFormatInfo(input_filename); } else { - GatherAndPrintAllInfo(input_filename); + success = GatherAndPrintAllInfo(input_filename); } gfxrecon::util::Log::Release(); - return 0; + return success ? EXIT_SUCCESS : EXIT_FAILURE; } diff --git a/third_party/gfxreconstruct/tools/optimize/CMakeLists.txt b/third_party/gfxreconstruct/tools/optimize/CMakeLists.txt index 87e7793b6..cc831bdeb 100644 --- a/third_party/gfxreconstruct/tools/optimize/CMakeLists.txt +++ b/third_party/gfxreconstruct/tools/optimize/CMakeLists.txt @@ -70,6 +70,7 @@ target_link_libraries(gfxrecon-optimize gfxrecon_graphics gfxrecon_format platform_specific + project_version $<$:d3d12.lib> $<$:dxgi.lib> $<$:${DXC_LIBRARY_PATH}>) diff --git a/third_party/gfxreconstruct/tools/optimize/block_skipping_file_processor.cpp b/third_party/gfxreconstruct/tools/optimize/block_skipping_file_processor.cpp index 8f76c50ee..66a58a3ca 100644 --- a/third_party/gfxreconstruct/tools/optimize/block_skipping_file_processor.cpp +++ b/third_party/gfxreconstruct/tools/optimize/block_skipping_file_processor.cpp @@ -41,185 +41,19 @@ bool BlockSkippingFileProcessor::IsSkippingFinished() return blocks_skipped_ == blocks_to_skip_.size(); } -bool BlockSkippingFileProcessor::ShouldSkipBlock() +bool BlockSkippingFileProcessor::SkipBlockProcessing() { - return (!(blocks_to_skip_.empty())) && (blocks_to_skip_.find(block_index_) != blocks_to_skip_.end()); -} - -bool BlockSkippingFileProcessor::ProcessBlocks() -{ - format::BlockHeader block_header; - bool success = true; - - while (success) + if (ShouldSkipBlock()) { - PrintBlockInfo(); - success = ContinueDecoding(); - - if (success) - { - success = ReadBlockHeader(&block_header); - - for (auto decoder : decoders_) - { - decoder->SetCurrentBlockIndex(block_index_); - } - - if (success) - { - if (ShouldSkipBlock()) - { - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, block_header.size); - success = SkipBytes(static_cast(block_header.size)); - blocks_skipped_++; - } - else if (format::RemoveCompressedBlockBit(block_header.type) == format::BlockType::kFunctionCallBlock) - { - format::ApiCallId api_call_id = format::ApiCallId::ApiCall_Unknown; - - success = ReadBytes(&api_call_id, sizeof(api_call_id)); - - if (success) - { - bool should_break = false; - success = ProcessFunctionCall(block_header, api_call_id, should_break); - if (should_break) - { - break; - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read function call block header"); - } - } - else if (format::RemoveCompressedBlockBit(block_header.type) == format::BlockType::kMethodCallBlock) - { - format::ApiCallId api_call_id = format::ApiCallId::ApiCall_Unknown; - - success = ReadBytes(&api_call_id, sizeof(api_call_id)); - - if (success) - { - bool should_break = false; - success = ProcessMethodCall(block_header, api_call_id, should_break); - - if (should_break) - { - break; - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read function call block header"); - } - } - else if (format::RemoveCompressedBlockBit(block_header.type) == format::BlockType::kMetaDataBlock) - { - format::MetaDataId meta_data_id = format::MakeMetaDataId( - format::ApiFamilyId::ApiFamily_None, format::MetaDataType::kUnknownMetaDataType); - - success = ReadBytes(&meta_data_id, sizeof(meta_data_id)); - - if (success) - { - success = ProcessMetaData(block_header, meta_data_id); - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read meta-data block header"); - } - } - else if (block_header.type == format::BlockType::kFrameMarkerBlock) - { - format::MarkerType marker_type = format::MarkerType::kUnknownMarker; - uint64_t frame_number = 0; - - success = ReadBytes(&marker_type, sizeof(marker_type)); - - if (success) - { - bool should_break = false; - success = ProcessFrameMarker(block_header, marker_type, should_break); - - if (should_break) - { - break; - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read frame marker header"); - } - } - else if (block_header.type == format::BlockType::kStateMarkerBlock) - { - format::MarkerType marker_type = format::MarkerType::kUnknownMarker; - uint64_t frame_number = 0; - - success = ReadBytes(&marker_type, sizeof(marker_type)); - - if (success) - { - success = ProcessStateMarker(block_header, marker_type); - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read state marker header"); - } - } - else if (block_header.type == format::BlockType::kAnnotation) - { - if (annotation_handler_ != nullptr) - { - format::AnnotationType annotation_type = format::AnnotationType::kUnknown; - - success = ReadBytes(&annotation_type, sizeof(annotation_type)); - - if (success) - { - success = ProcessAnnotation(block_header, annotation_type); - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read annotation block header"); - } - } - else - { - // If there is no annotation handler to process the annotation, we can skip the annotation - // block. - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, block_header.size); - success = SkipBytes(static_cast(block_header.size)); - } - } - else - { - // Unrecognized block type. - GFXRECON_LOG_WARNING("Skipping unrecognized file block with type %u", block_header.type); - GFXRECON_CHECK_CONVERSION_DATA_LOSS(size_t, block_header.size); - success = SkipBytes(static_cast(block_header.size)); - } - } - else - { - if (!feof(GetFileDescriptor())) - { - // No data has been read for the current block, so we don't use 'HandleBlockReadError' here, as it - // assumes that the block header has been successfully read and will print an incomplete block at - // end of file warning when the file is at EOF without an error. For this case (the normal EOF case) - // we print nothing at EOF, or print an error message and set the error code directly when not at - // EOF. - GFXRECON_LOG_ERROR("Failed to read block header"); - error_state_ = kErrorReadingBlockHeader; - } - } - - ++block_index_; - } + blocks_skipped_++; + return true; } + return false; +} - return success; +bool BlockSkippingFileProcessor::ShouldSkipBlock() +{ + return (!(blocks_to_skip_.empty())) && (blocks_to_skip_.find(block_index_) != blocks_to_skip_.end()); } GFXRECON_END_NAMESPACE(decode) diff --git a/third_party/gfxreconstruct/tools/optimize/block_skipping_file_processor.h b/third_party/gfxreconstruct/tools/optimize/block_skipping_file_processor.h index fcbd15f46..381af6d28 100644 --- a/third_party/gfxreconstruct/tools/optimize/block_skipping_file_processor.h +++ b/third_party/gfxreconstruct/tools/optimize/block_skipping_file_processor.h @@ -43,7 +43,7 @@ class BlockSkippingFileProcessor : public FileProcessor bool IsSkippingFinished(); private: - virtual bool ProcessBlocks() override; + bool SkipBlockProcessing() override; bool ShouldSkipBlock(); private: diff --git a/third_party/gfxreconstruct/tools/optimize/dx12_file_optimizer.cpp b/third_party/gfxreconstruct/tools/optimize/dx12_file_optimizer.cpp index 6ebca3c33..557b62fd1 100644 --- a/third_party/gfxreconstruct/tools/optimize/dx12_file_optimizer.cpp +++ b/third_party/gfxreconstruct/tools/optimize/dx12_file_optimizer.cpp @@ -44,8 +44,7 @@ void Dx12FileOptimizer::SetFillCommandResourceValues( } } -bool Dx12FileOptimizer::AddFillMemoryResourceValueCommand(const format::BlockHeader& block_header, - format::MetaDataId meta_data_id) +bool Dx12FileOptimizer::AddFillMemoryResourceValueCommand() { bool success = true; @@ -125,20 +124,25 @@ bool Dx12FileOptimizer::AddFillMemoryResourceValueCommand(const format::BlockHea return success; } -bool Dx12FileOptimizer::ProcessMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id) +template +decode::FileTransformer::VisitResult Dx12FileOptimizer::VisitMetaData([[maybe_unused]] const Args& args) { - format::MetaDataType meta_data_type = format::GetMetaDataType(meta_data_id); - + constexpr bool kIsFillMemoryCommand = std::is_same_v; + constexpr bool kIsInitSubresourceCommand = std::is_same_v; // If needed, add a FillMemoryResourceValueCommand before the fill memory command. - if ((meta_data_type == format::MetaDataType::kFillMemoryCommand) || - (meta_data_type == format::MetaDataType::kInitSubresourceCommand)) + if constexpr (kIsFillMemoryCommand || kIsInitSubresourceCommand) { + GFXRECON_ASSERT(!kIsFillMemoryCommand || + (format::MetaDataType::kFillMemoryCommand == format::GetMetaDataType(args.meta_data_id))); + GFXRECON_ASSERT(!kIsInitSubresourceCommand || + (format::MetaDataType::kInitSubresourceCommand == format::GetMetaDataType(args.meta_data_id))); + if ((fill_command_resource_values_ != nullptr) && (!fill_command_resource_values_->empty())) { if ((resource_values_iter_ != fill_command_resource_values_->end()) && (resource_values_iter_->first == GetCurrentBlockIndex())) { - if (!AddFillMemoryResourceValueCommand(block_header, meta_data_id)) + if (!AddFillMemoryResourceValueCommand()) { GFXRECON_LOG_ERROR("Failed to write the FillMemoryResourceValueCommand needed for DXR or EI " "optimization. Optimized file may be invalid."); @@ -155,7 +159,7 @@ bool Dx12FileOptimizer::ProcessMetaData(const format::BlockHeader& block_header, fill_command_resource_values_ = &rvm; resource_values_iter_ = fill_command_resource_values_->begin(); - if (!AddFillMemoryResourceValueCommand(block_header, meta_data_id)) + if (!AddFillMemoryResourceValueCommand()) { GFXRECON_LOG_ERROR("Failed to write the FillMemoryResourceValueCommand needed for DXR/EI optimization. " "Optimized file may be invalid."); @@ -166,7 +170,21 @@ bool Dx12FileOptimizer::ProcessMetaData(const format::BlockHeader& block_header, } } - return FileOptimizer::ProcessMetaData(block_header, meta_data_id); + // Always passthrough, even on failure. + return kNeedsPassthrough; +} + +bool Dx12FileOptimizer::ProcessMetaData(decode::ParsedBlock& parsed_block) +{ + auto meta_visitor = [this](const auto& store) { return VisitMetaData(*store); }; + VisitResult result = std::visit(meta_visitor, parsed_block.GetArgs()); + + if (result == kNeedsPassthrough) + { + return FileOptimizer::ProcessMetaData(parsed_block); + } + + return result == kSuccess; } GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/tools/optimize/dx12_file_optimizer.h b/third_party/gfxreconstruct/tools/optimize/dx12_file_optimizer.h index ba354e6f8..d538f0e6d 100644 --- a/third_party/gfxreconstruct/tools/optimize/dx12_file_optimizer.h +++ b/third_party/gfxreconstruct/tools/optimize/dx12_file_optimizer.h @@ -43,9 +43,11 @@ class Dx12FileOptimizer : public FileOptimizer uint64_t GetNumOptimizedFillCommands() { return num_optimized_fill_commands_; } private: - bool AddFillMemoryResourceValueCommand(const format::BlockHeader& block_header, format::MetaDataId meta_data_id); + bool AddFillMemoryResourceValueCommand(); - virtual bool ProcessMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id) override; + template + decode::FileTransformer::VisitResult VisitMetaData(const Args& args); + bool ProcessMetaData(decode::ParsedBlock& parsed_block) override; const decode::Dx12FillCommandResourceValueMap* fill_command_resource_values_; decode::Dx12FillCommandResourceValueMap::const_iterator resource_values_iter_; diff --git a/third_party/gfxreconstruct/tools/optimize/dx12_optimize_util.cpp b/third_party/gfxreconstruct/tools/optimize/dx12_optimize_util.cpp index c39d283d7..dd3d812a9 100644 --- a/third_party/gfxreconstruct/tools/optimize/dx12_optimize_util.cpp +++ b/third_party/gfxreconstruct/tools/optimize/dx12_optimize_util.cpp @@ -93,7 +93,7 @@ bool FileProcessorSucceeded(const decode::FileProcessor& processor) GFXRECON_WRITE_CONSOLE("Did not detect any frames in the capture."); } - if ((processor.GetErrorState() == gfxrecon::decode::FileProcessor::kErrorNone) == false) + if ((processor.GetErrorState() == gfxrecon::decode::BlockIOError::kErrorNone) == false) { GFXRECON_WRITE_CONSOLE("Encountered error while reading the capture."); } @@ -104,7 +104,7 @@ bool FileProcessorSucceeded(const decode::FileProcessor& processor) } return (processor.GetCurrentFrameNumber() > 0) && - (processor.GetErrorState() == gfxrecon::decode::FileProcessor::kErrorNone) && + (processor.GetErrorState() == gfxrecon::decode::BlockIOError::kErrorNone) && processor.EntireFileWasProcessed(); } @@ -160,7 +160,7 @@ bool GetPsoOptimizationInfo(const std::string& input_filename, options.optimize_resource_values = false; } } - else if (pso_pass_file_processor.GetErrorState() != gfxrecon::decode::FileProcessor::kErrorNone) + else if (pso_pass_file_processor.GetErrorState() != gfxrecon::decode::BlockIOError::kErrorNone) { GFXRECON_WRITE_CONSOLE("A failure has occurred during scanning capture file for unreferenced PSOs"); } @@ -262,7 +262,7 @@ bool GetDxrOptimizationInfo(const std::string& input_filename, dxr_scan_result = true; } - else if (dxr_pass_file_processor.GetErrorState() != gfxrecon::decode::FileProcessor::kErrorNone) + else if (dxr_pass_file_processor.GetErrorState() != gfxrecon::decode::BlockIOError::kErrorNone) { GFXRECON_WRITE_CONSOLE("A failure has occurred during capture processing for DXR/EI optimization"); } @@ -397,7 +397,7 @@ bool ApplyDx12OptimizationInfo(const std::string& input_file file_optimizer.Process(); - if (file_optimizer.GetErrorState() != gfxrecon::FileOptimizer::kErrorNone) + if (file_optimizer.GetErrorState() != gfxrecon::decode::BlockIOError::kErrorNone) { GFXRECON_WRITE_CONSOLE("A failure has occurred during capture processing (error=%d). If it was " "created, the output file may be invalid.", diff --git a/third_party/gfxreconstruct/tools/optimize/dx12_resource_value_tracking_consumer.cpp b/third_party/gfxreconstruct/tools/optimize/dx12_resource_value_tracking_consumer.cpp index 30fc80e1f..0c1020a41 100644 --- a/third_party/gfxreconstruct/tools/optimize/dx12_resource_value_tracking_consumer.cpp +++ b/third_party/gfxreconstruct/tools/optimize/dx12_resource_value_tracking_consumer.cpp @@ -81,9 +81,9 @@ void Dx12ResourceValueTrackingConsumer::Process_ID3D12GraphicsCommandList4_CopyR } void Dx12ResourceValueTrackingConsumer::ProcessInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) { dxr_workload_ = true; diff --git a/third_party/gfxreconstruct/tools/optimize/dx12_resource_value_tracking_consumer.h b/third_party/gfxreconstruct/tools/optimize/dx12_resource_value_tracking_consumer.h index 374e9613f..6679241a2 100644 --- a/third_party/gfxreconstruct/tools/optimize/dx12_resource_value_tracking_consumer.h +++ b/third_party/gfxreconstruct/tools/optimize/dx12_resource_value_tracking_consumer.h @@ -56,9 +56,9 @@ class Dx12ResourceValueTrackingConsumer : public Dx12ReplayConsumer D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode) override; virtual void ProcessInitDx12AccelerationStructureCommand( - const format::InitDx12AccelerationStructureCommandHeader& command_header, - std::vector& geometry_descs, - const uint8_t* build_inputs_data) override; + const format::InitDx12AccelerationStructureCommandHeader& command_header, + const std::vector& geometry_descs, + const uint8_t* build_inputs_data) override; virtual void OverrideExecuteIndirect(DxObjectInfo* command_list_object_info, DxObjectInfo* command_signature_object_info, diff --git a/third_party/gfxreconstruct/tools/optimize/file_optimizer.cpp b/third_party/gfxreconstruct/tools/optimize/file_optimizer.cpp index ed0813d44..fb9666415 100644 --- a/third_party/gfxreconstruct/tools/optimize/file_optimizer.cpp +++ b/third_party/gfxreconstruct/tools/optimize/file_optimizer.cpp @@ -50,226 +50,121 @@ uint64_t FileOptimizer::GetUnreferencedBlocksSize() return unreferenced_blocks_.size(); } -bool FileOptimizer::ProcessMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id) +bool FileOptimizer::ProcessMetaData(decode::ParsedBlock& parsed_block) { - format::MetaDataType meta_data_type = format::GetMetaDataType(meta_data_id); - if (meta_data_type == format::MetaDataType::kInitBufferCommand) - { - return FilterInitBufferMetaData(block_header, meta_data_id); - } - else if (meta_data_type == format::MetaDataType::kInitImageCommand) - { - return FilterInitImageMetaData(block_header, meta_data_id); - } - else + auto filter_visitor = [this](const auto& store) { return FilterMetaData(*store); }; + + VisitResult result = std::visit(filter_visitor, parsed_block.GetArgs()); + + if (result == kNeedsPassthrough) { - // Copy the meta data block, if it was not filtered. - return FileTransformer::ProcessMetaData(block_header, meta_data_id); + return FileTransformer::ProcessMetaData(parsed_block); } + return result == kSuccess; } -bool FileOptimizer::ProcessMethodCall(const format::BlockHeader& block_header, - format::ApiCallId api_call_id, - uint64_t block_index) +bool FileOptimizer::ProcessMethodCall(decode::ParsedBlock& parsed_block) { - if (api_call_id == format::ApiCallId::ApiCall_ID3D12Device_CreateGraphicsPipelineState || - api_call_id == format::ApiCallId::ApiCall_ID3D12Device_CreateComputePipelineState || - api_call_id == format::ApiCallId::ApiCall_ID3D12PipelineLibrary_StorePipeline) - { - return FilterMethodCall(block_header, api_call_id, block_index); - } - else + const auto& args = parsed_block.Get(); + bool filter_out = FilterMethodCall(args); + + if (!filter_out) { // Copy the method call block, if it was not filtered. - return FileTransformer::ProcessMethodCall(block_header, api_call_id); + return FileTransformer::ProcessMethodCall(parsed_block); } + return true; // Successful filtering no passthrough write. } -bool FileOptimizer::FilterInitBufferMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id) +decode::FileTransformer::VisitResult FileOptimizer::FilterMetaData(const decode::InitBufferArgs& args) { - GFXRECON_ASSERT(format::GetMetaDataType(meta_data_id) == format::MetaDataType::kInitBufferCommand); + GFXRECON_ASSERT(format::GetMetaDataType(args.meta_data_id) == format::MetaDataType::kInitBufferCommand); - format::InitBufferCommandHeader header; - - bool success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.device_id, sizeof(header.device_id)); - success = success && ReadBytes(&header.buffer_id, sizeof(header.buffer_id)); - success = success && ReadBytes(&header.data_size, sizeof(header.data_size)); - - if (success) + // If the buffer is in the unused list, omit its initialization data from the file. + if (unreferenced_ids_.find(args.buffer_id) != unreferenced_ids_.end()) { - // Total number of bytes remaining to be read for the current block. - uint64_t unread_bytes = block_header.size - (sizeof(header) - sizeof(block_header)); - - // If the buffer is in the unused list, omit its initialization data from the file. - if (unreferenced_ids_.find(header.buffer_id) != unreferenced_ids_.end()) - { - // In its place insert a dummy annotation meta command. This should keep the block index when - // replaying an optimized trimmed capture in in alignment with the block index calculated - // at capture time - const char* label = format::kAnnotationLabelRemovedResource; - const std::string data = "Removed buffer " + std::to_string(header.buffer_id); - - const size_t label_length = util::platform::StringLength(label); - const size_t data_length = data.length(); - - format::AnnotationHeader annotation; - annotation.block_header.size = format::GetAnnotationBlockBaseSize() + label_length + data_length; - annotation.block_header.type = format::BlockType::kAnnotation; - annotation.annotation_type = format::kText; - annotation.label_length = static_cast(label_length); - annotation.data_length = static_cast(data.length()); - - if (!WriteBytes(&annotation, sizeof(annotation)) || !WriteBytes(label, label_length) || - !WriteBytes(data.c_str(), data_length)) - { - HandleBlockWriteError(kErrorReadingBlockHeader, "Failed to write annotation meta-data block"); - return false; - } - - if (!SkipBytes(unread_bytes)) - { - HandleBlockReadError(kErrorSeekingFile, "Failed to skip init buffer data meta-data block data"); - return false; - } - } - else + // In its place insert a dummy annotation meta command. This should keep the block index when + // replaying an optimized trimmed capture in in alignment with the block index calculated + // at capture time + const char* label = format::kAnnotationLabelRemovedResource; + const std::string data = "Removed buffer " + std::to_string(args.buffer_id); + + const size_t label_length = util::platform::StringLength(label); + const size_t data_length = data.length(); + + format::AnnotationHeader annotation; + annotation.block_header.size = format::GetAnnotationBlockBaseSize() + label_length + data_length; + annotation.block_header.type = format::BlockType::kAnnotation; + annotation.annotation_type = format::kText; + annotation.label_length = static_cast(label_length); + annotation.data_length = static_cast(data.length()); + + if (!WriteBytes(&annotation, sizeof(annotation)) || !WriteBytes(label, label_length) || + !WriteBytes(data.c_str(), data_length)) { - // Copy the block from the input file to the output file. - header.meta_header.block_header = block_header; - header.meta_header.meta_data_id = meta_data_id; - - if (!WriteBytes(&header, sizeof(header))) - { - HandleBlockWriteError(kErrorReadingBlockHeader, - "Failed to write init buffer data meta-data block header"); - return false; - } - - if (!CopyBytes(unread_bytes)) - { - HandleBlockCopyError(kErrorCopyingBlockData, "Failed to copy init buffer data meta-data block data"); - return false; - } + HandleBlockWriteError(decode::kErrorWritingBlockData, "Failed to write annotation meta-data block"); + return kError; } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read init buffer data meta-data block header"); - return false; + return kSuccess; } - return true; + return kNeedsPassthrough; } -bool FileOptimizer::FilterInitImageMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id) +decode::FileTransformer::VisitResult FileOptimizer::FilterMetaData(const decode::InitImageArgs& args) { - GFXRECON_ASSERT(format::GetMetaDataType(meta_data_id) == format::MetaDataType::kInitImageCommand); - - format::InitImageCommandHeader header; - std::vector level_sizes; - - bool success = ReadBytes(&header.thread_id, sizeof(header.thread_id)); - success = success && ReadBytes(&header.device_id, sizeof(header.device_id)); - success = success && ReadBytes(&header.image_id, sizeof(header.image_id)); - success = success && ReadBytes(&header.data_size, sizeof(header.data_size)); - success = success && ReadBytes(&header.aspect, sizeof(header.aspect)); - success = success && ReadBytes(&header.layout, sizeof(header.layout)); - success = success && ReadBytes(&header.level_count, sizeof(header.level_count)); + GFXRECON_ASSERT(format::GetMetaDataType(args.meta_data_id) == format::MetaDataType::kInitImageCommand); - if (success) + // If the image is in the unused list, omit its initialization data from the file. + if (unreferenced_ids_.find(args.image_id) != unreferenced_ids_.end()) { - // Total number of bytes remaining to be read for the current block. - uint64_t unread_bytes = block_header.size - (sizeof(header) - sizeof(block_header)); - - // If the image is in the unused list, omit its initialization data from the file. - if (unreferenced_ids_.find(header.image_id) != unreferenced_ids_.end()) + // In its place insert a dummy annotation meta command. This should keep the block index when + // replaying an optimized trimmed capture in in alignment with the block index calculated + // at capture time + const char* label = format::kAnnotationLabelRemovedResource; + const std::string data = "Removed subresource from image " + std::to_string(args.image_id); + + const size_t label_length = util::platform::StringLength(label); + const size_t data_length = data.length(); + + format::AnnotationHeader annotation; + annotation.block_header.size = format::GetAnnotationBlockBaseSize() + label_length + data_length; + annotation.block_header.type = format::BlockType::kAnnotation; + annotation.annotation_type = format::kText; + annotation.label_length = static_cast(label_length); + annotation.data_length = static_cast(data.length()); + + if (!WriteBytes(&annotation, sizeof(annotation)) || !WriteBytes(label, label_length) || + !WriteBytes(data.c_str(), data_length)) { - // In its place insert a dummy annotation meta command. This should keep the block index when - // replaying an optimized trimmed capture in in alignment with the block index calculated - // at capture time - const char* label = format::kAnnotationLabelRemovedResource; - const std::string data = "Removed subresource from image " + std::to_string(header.image_id); - - const size_t label_length = util::platform::StringLength(label); - const size_t data_length = data.length(); - - format::AnnotationHeader annotation; - annotation.block_header.size = format::GetAnnotationBlockBaseSize() + label_length + data_length; - annotation.block_header.type = format::BlockType::kAnnotation; - annotation.annotation_type = format::kText; - annotation.label_length = static_cast(label_length); - annotation.data_length = static_cast(data.length()); - - if (!WriteBytes(&annotation, sizeof(annotation)) || !WriteBytes(label, label_length) || - !WriteBytes(data.c_str(), data_length)) - { - HandleBlockWriteError(kErrorReadingBlockHeader, "Failed to write annotation meta-data block"); - return false; - } - - if (!SkipBytes(unread_bytes)) - { - HandleBlockReadError(kErrorSeekingFile, "Failed to skip init image data meta-data block data"); - return false; - } + HandleBlockWriteError(decode::kErrorWritingBlockData, "Failed to write annotation meta-data block"); + return kError; } - else - { - // Copy the block from the input file to the output file. - header.meta_header.block_header = block_header; - header.meta_header.meta_data_id = meta_data_id; - if (!WriteBytes(&header, sizeof(header))) - { - HandleBlockWriteError(kErrorReadingBlockHeader, - "Failed to write init image data meta-data block header"); - return false; - } - - if (!CopyBytes(unread_bytes)) - { - HandleBlockCopyError(kErrorCopyingBlockData, "Failed to copy init image data meta-data block data"); - return false; - } - } - } - else - { - HandleBlockReadError(kErrorReadingBlockHeader, "Failed to read init image data meta-data block header"); - return false; + return kSuccess; } - return true; + return kNeedsPassthrough; } -bool FileOptimizer::FilterMethodCall(const format::BlockHeader& block_header, - format::ApiCallId api_call_id, - uint64_t block_index) +// Returns whether or not to filter this MethodCall block or not +bool FileOptimizer::FilterMethodCall(const decode::MethodCallArgs& args) { - GFXRECON_ASSERT(api_call_id == format::ApiCallId::ApiCall_ID3D12Device_CreateGraphicsPipelineState || - api_call_id == format::ApiCallId::ApiCall_ID3D12Device_CreateComputePipelineState || - api_call_id == format::ApiCallId::ApiCall_ID3D12PipelineLibrary_StorePipeline); - - // Total number of bytes remaining to be read for the current block. - uint64_t unread_bytes = block_header.size - sizeof(format::ApiCallId); + const format::ApiCallId api_call_id = args.call_id; + const uint64_t block_index = args.call_info.index; + bool filter_out = false; - // If the buffer is in the unused list, omit the call block from the file. - if (unreferenced_blocks_.find(block_index) != unreferenced_blocks_.end()) - { - unreferenced_blocks_.erase(block_index); - if (!SkipBytes(unread_bytes)) - { - HandleBlockReadError(kErrorSeekingFile, "Failed to skip method call block data"); - return false; - } - } - else + // Only a subset of blocks can be filtered out... + if (api_call_id == format::ApiCallId::ApiCall_ID3D12Device_CreateGraphicsPipelineState || + api_call_id == format::ApiCallId::ApiCall_ID3D12Device_CreateComputePipelineState || + api_call_id == format::ApiCallId::ApiCall_ID3D12PipelineLibrary_StorePipeline) { - return FileTransformer::ProcessMethodCall(block_header, api_call_id); - } - return true; + // If the buffer is in the unused list, omit the call block from the file. + // NOTE: Erase returns number of items erased, so only > 0 if the block_index is found + filter_out = (unreferenced_blocks_.erase(block_index) > 0); + } + return filter_out; } GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/tools/optimize/file_optimizer.h b/third_party/gfxreconstruct/tools/optimize/file_optimizer.h index 82a660bc7..e85c12da5 100644 --- a/third_party/gfxreconstruct/tools/optimize/file_optimizer.h +++ b/third_party/gfxreconstruct/tools/optimize/file_optimizer.h @@ -44,18 +44,19 @@ class FileOptimizer : public decode::FileTransformer uint64_t GetUnreferencedBlocksSize(); protected: - virtual bool ProcessMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id) override; - - virtual bool ProcessMethodCall(const format::BlockHeader& block_header, - format::ApiCallId call_id, - uint64_t block_index = 0) override; + bool ProcessMethodCall(decode::ParsedBlock& parsed_block) override; + bool ProcessMetaData(decode::ParsedBlock& parsed_block) override; private: - bool FilterInitBufferMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id); - - bool FilterInitImageMetaData(const format::BlockHeader& block_header, format::MetaDataId meta_data_id); - - bool FilterMethodCall(const format::BlockHeader& block_header, format::ApiCallId api_call_id, uint64_t block_index); + VisitResult FilterMetaData(const decode::InitBufferArgs& args); + VisitResult FilterMetaData(const decode::InitImageArgs& args); + template + VisitResult FilterMetaData(const Args& args) + { + return kNeedsPassthrough; + } + + bool FilterMethodCall(const decode::MethodCallArgs& args); private: std::unordered_set unreferenced_ids_; diff --git a/third_party/gfxreconstruct/tools/optimize/main.cpp b/third_party/gfxreconstruct/tools/optimize/main.cpp index 20228bfc4..dd2d5828a 100644 --- a/third_party/gfxreconstruct/tools/optimize/main.cpp +++ b/third_party/gfxreconstruct/tools/optimize/main.cpp @@ -52,11 +52,11 @@ #if defined(WIN32) extern "C" { - __declspec(dllexport) extern const UINT D3D12SDKVersion = 615; + __declspec(dllexport) extern const UINT D3D12SDKVersion = 616; } extern "C" { - __declspec(dllexport) extern const char* D3D12SDKPath = u8".\\D3D12\\"; + __declspec(dllexport) extern const char* D3D12SDKPath = reinterpret_cast(u8".\\D3D12\\"); } #endif @@ -136,12 +136,12 @@ void GetUnreferencedResources(const std::string& in exit(65); } else if ((file_processor.GetCurrentFrameNumber() > 0) && - (file_processor.GetErrorState() == gfxrecon::decode::FileProcessor::kErrorNone)) + (file_processor.GetErrorState() == gfxrecon::decode::BlockIOError::kErrorNone)) { // Get the list of resources that were included in a command buffer submission during replay. resref_consumer.GetReferencedResourceIds(nullptr, unreferenced_ids); } - else if (file_processor.GetErrorState() != gfxrecon::decode::FileProcessor::kErrorNone) + else if (file_processor.GetErrorState() != gfxrecon::decode::BlockIOError::kErrorNone) { GFXRECON_WRITE_CONSOLE("A failure has occurred during file processing"); gfxrecon::util::Log::Release(); @@ -165,7 +165,7 @@ void FilterUnreferencedResources(const std::string& { file_processor.Process(); - if (file_processor.GetErrorState() != gfxrecon::FileOptimizer::kErrorNone) + if (file_processor.GetErrorState() != gfxrecon::decode::BlockIOError::kErrorNone) { GFXRECON_WRITE_CONSOLE("A failure has occurred during file processing"); gfxrecon::util::Log::Release(); diff --git a/third_party/gfxreconstruct/tools/replay/CMakeLists.txt b/third_party/gfxreconstruct/tools/replay/CMakeLists.txt index 29b9097d3..46fb5c830 100644 --- a/third_party/gfxreconstruct/tools/replay/CMakeLists.txt +++ b/third_party/gfxreconstruct/tools/replay/CMakeLists.txt @@ -36,6 +36,9 @@ target_sources(gfxrecon-replay ${CMAKE_CURRENT_LIST_DIR}/desktop_main.cpp ${CMAKE_CURRENT_LIST_DIR}/parse_dump_resources_cli.cpp ${CMAKE_CURRENT_LIST_DIR}/../platform_debug_helper.cpp + ${CMAKE_CURRENT_LIST_DIR}/recapture_vulkan_entry.cpp + ${CMAKE_CURRENT_LIST_DIR}/recapture_vulkan_entry.h + ${PROJECT_SOURCE_DIR}/framework/generated/generated_vulkan_recapture_func_table.h $<$:${PROJECT_SOURCE_DIR}/version.rc> ) @@ -44,9 +47,11 @@ target_include_directories(gfxrecon-replay PUBLIC ${CMAKE_BINARY_DIR}) target_link_libraries(gfxrecon-replay gfxrecon_application gfxrecon_decode + gfxrecon_encode gfxrecon_graphics gfxrecon_format platform_specific + project_version $<$:d3d12.lib> $<$:dxgi.lib> $<$:${DXC_LIBRARY_PATH}>) diff --git a/third_party/gfxreconstruct/tools/replay/android_main.cpp b/third_party/gfxreconstruct/tools/replay/android_main.cpp index 6c6891e46..555e0e212 100644 --- a/third_party/gfxreconstruct/tools/replay/android_main.cpp +++ b/third_party/gfxreconstruct/tools/replay/android_main.cpp @@ -39,6 +39,10 @@ #include "decode/vulkan_pre_process_consumer.h" #include "format/format.h" +// Includes for recapture +#include "encode/vulkan_capture_manager.h" +#include "recapture_vulkan_entry.h" + #if ENABLE_OPENXR_SUPPORT #include "decode/openxr_tracked_object_info_table.h" #include "generated/generated_openxr_decoder.h" @@ -71,8 +75,8 @@ const char kLayerProperty[] = "debug.vulkan.layers"; const int32_t kSwipeDistance = 200; -void ProcessAppCmd(struct android_app* app, int32_t cmd); -int32_t ProcessInputEvent(struct android_app* app, AInputEvent* event); +void ProcessAppCmd(struct android_app* app, int32_t cmd); +int32_t ProcessInputEvent(struct android_app* app, AInputEvent* event); static std::unique_ptr file_processor; @@ -80,19 +84,33 @@ extern "C" { uint64_t MainGetCurrentBlockIndex() { - return file_processor->GetCurrentBlockIndex(); + if (file_processor != nullptr) + { + return file_processor->GetCurrentBlockIndex(); + } + else + { + return 0; + } } bool MainGetLoadingTrimmedState() { - return file_processor->GetLoadingTrimmedState(); + if (file_processor != nullptr) + { + return file_processor->GetLoadingTrimmedState(); + } + else + { + return false; + } } } void android_main(struct android_app* app) { - GFXRECON_WRITE_CONSOLE("====== Entering android_main"); gfxrecon::util::Log::Init(); + GFXRECON_WRITE_CONSOLE("====== Entering android_main"); // Keep screen on while window is active. ANativeActivity_setWindowFlags(app->activity, AWINDOW_FLAG_KEEP_SCREEN_ON, 0); @@ -146,9 +164,8 @@ void android_main(struct android_app* app) } else { - auto application = - std::make_shared(kApplicationName, file_processor.get()); - application->InitializeWsiContext(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, app); + auto application = std::make_shared( + kApplicationName, file_processor.get(), VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, app); gfxrecon::decode::VulkanTrackedObjectInfoTable tracked_object_info_table; gfxrecon::decode::VulkanReplayOptions replay_options = @@ -172,7 +189,7 @@ void android_main(struct android_app* app) // GOOGLE: replace VulkanReplayConsumer with dive specific DiveVulkanReplayConsumer gfxrecon::decode::DiveVulkanReplayConsumer vulkan_replay_consumer(application, replay_options); - gfxrecon::decode::VulkanDecoder vulkan_decoder; + gfxrecon::decode::VulkanDecoder vulkan_decoder; // GOOGLE: Pass replay options to enable/disable gpu time if (arg_parser.IsOptionSet(kEnableGPUTime)) @@ -180,6 +197,18 @@ void android_main(struct android_app* app) vulkan_replay_consumer.SetEnableGPUTime(replay_options.enable_gpu_time); } + if (replay_options.capture) + { + gfxrecon::vulkan_recapture::RecaptureVulkanEntry::InitSingleton(); + + // Set replay to use the GetInstanceProcAddr function from RecaptureVulkanEntry so that replay first + // calls into the capture layer instead of directly into the loader and Vulkan runtime. + // Also sets the capture manager's instance and device creation callbacks. + vulkan_replay_consumer.SetupForRecapture(gfxrecon::vulkan_recapture::GetInstanceProcAddr, + gfxrecon::vulkan_recapture::dispatch_CreateInstance, + gfxrecon::vulkan_recapture::dispatch_CreateDevice); + } + ApiReplayOptions api_replay_options; ApiReplayConsumer api_replay_consumer; api_replay_options.vk_replay_options = &replay_options; @@ -260,7 +289,7 @@ void android_main(struct android_app* app) fps_info.EndFile(file_processor->GetCurrentFrameNumber() + 1); if ((file_processor->GetCurrentFrameNumber() > 0) && - (file_processor->GetErrorState() == gfxrecon::decode::FileProcessor::kErrorNone)) + (file_processor->GetErrorState() == gfxrecon::decode::BlockIOError::kErrorNone)) { if (file_processor->GetCurrentFrameNumber() < measurement_start_frame) { @@ -275,7 +304,7 @@ void android_main(struct android_app* app) fps_info.LogMeasurements(); } } - else if (file_processor->GetErrorState() != gfxrecon::decode::FileProcessor::kErrorNone) + else if (file_processor->GetErrorState() != gfxrecon::decode::BlockIOError::kErrorNone) { GFXRECON_WRITE_CONSOLE("A failure has occurred during replay"); } @@ -299,6 +328,11 @@ void android_main(struct android_app* app) GFXRECON_WRITE_CONSOLE("Unable to write GPU stats file"); } } + + if (replay_options.capture) + { + gfxrecon::vulkan_recapture::RecaptureVulkanEntry::DestroySingleton(); + } } } catch (std::runtime_error& error) @@ -318,9 +352,12 @@ void android_main(struct android_app* app) app->userData = nullptr; } + GFXRECON_WRITE_CONSOLE("====== Exiting android_main"); + gfxrecon::util::Log::Release(); gfxrecon::util::DestroyActivity(app); + raise(SIGTERM); } diff --git a/third_party/gfxreconstruct/tools/replay/desktop_main.cpp b/third_party/gfxreconstruct/tools/replay/desktop_main.cpp index 7e522d861..8106c6a9a 100644 --- a/third_party/gfxreconstruct/tools/replay/desktop_main.cpp +++ b/third_party/gfxreconstruct/tools/replay/desktop_main.cpp @@ -58,6 +58,10 @@ #include "parse_dump_resources_cli.h" #include "replay_pre_processing.h" +// Includes for recapture +#include "encode/vulkan_capture_manager.h" +#include "recapture_vulkan_entry.h" + #include #include #include @@ -66,11 +70,11 @@ extern "C" { - __declspec(dllexport) extern const UINT D3D12SDKVersion = 615; + __declspec(dllexport) extern const UINT D3D12SDKVersion = 616; } extern "C" { - __declspec(dllexport) extern const char* D3D12SDKPath = u8".\\D3D12\\"; + __declspec(dllexport) extern const char* D3D12SDKPath = reinterpret_cast(u8".\\D3D12\\"); } #include @@ -153,7 +157,7 @@ int main(int argc, const char** argv) // Select WSI context based on CLI std::string wsi_extension = GetWsiExtensionName(GetWsiPlatform(arg_parser)); auto application = std::make_shared( - kApplicationName, wsi_extension, file_processor.get()); + kApplicationName, file_processor.get(), wsi_extension, nullptr); gfxrecon::decode::VulkanTrackedObjectInfoTable tracked_object_info_table; gfxrecon::decode::VulkanReplayOptions vulkan_replay_options = @@ -202,6 +206,18 @@ int main(int argc, const char** argv) gfxrecon::decode::VulkanReplayConsumer vulkan_replay_consumer(application, vulkan_replay_options); gfxrecon::decode::VulkanDecoder vulkan_decoder; + if (vulkan_replay_options.capture) + { + gfxrecon::vulkan_recapture::RecaptureVulkanEntry::InitSingleton(); + + // Set replay to use the GetInstanceProcAddr function from RecaptureVulkanEntry so that replay first + // calls into the capture layer instead of directly into the loader and Vulkan runtime. + // Set the capture manager's instance and device creation callbacks. + vulkan_replay_consumer.SetupForRecapture(gfxrecon::vulkan_recapture::GetInstanceProcAddr, + gfxrecon::vulkan_recapture::dispatch_CreateInstance, + gfxrecon::vulkan_recapture::dispatch_CreateDevice); + } + ApiReplayOptions api_replay_options; ApiReplayConsumer api_replay_consumer; api_replay_options.vk_replay_options = &vulkan_replay_options; @@ -307,7 +323,7 @@ int main(int argc, const char** argv) fps_info.EndFile(file_processor->GetCurrentFrameNumber() + 1); if ((file_processor->GetCurrentFrameNumber() > 0) && - (file_processor->GetErrorState() == gfxrecon::decode::FileProcessor::kErrorNone)) + (file_processor->GetErrorState() == gfxrecon::decode::BlockIOError::kErrorNone)) { if (file_processor->GetCurrentFrameNumber() < measurement_start_frame) { @@ -335,7 +351,7 @@ int main(int argc, const char** argv) fps_info.LogMeasurements(); } } - else if (file_processor->GetErrorState() != gfxrecon::decode::FileProcessor::kErrorNone) + else if (file_processor->GetErrorState() != gfxrecon::decode::BlockIOError::kErrorNone) { GFXRECON_WRITE_CONSOLE("A failure has occurred during replay"); return_code = -1; @@ -344,6 +360,11 @@ int main(int argc, const char** argv) { GFXRECON_WRITE_CONSOLE("File did not contain any frames"); } + + if (vulkan_replay_options.capture) + { + gfxrecon::vulkan_recapture::RecaptureVulkanEntry::DestroySingleton(); + } } } catch (const std::runtime_error& error) diff --git a/third_party/gfxreconstruct/tools/replay/parse_dump_resources_cli.cpp b/third_party/gfxreconstruct/tools/replay/parse_dump_resources_cli.cpp index d6b10a91f..f5a2826f6 100644 --- a/third_party/gfxreconstruct/tools/replay/parse_dump_resources_cli.cpp +++ b/third_party/gfxreconstruct/tools/replay/parse_dump_resources_cli.cpp @@ -22,18 +22,23 @@ ** DEALINGS IN THE SOFTWARE. */ -#include "decode/vulkan_replay_dump_resources_compute_ray_tracing.h" +#include "decode/vulkan_replay_dump_resources_options.h" #include "decode/vulkan_replay_options.h" #include "replay_settings.h" #include "util/json_util.h" #include "util/logging.h" #include "decode/vulkan_pre_process_consumer.h" +#include "util/options.h" +#include "util/platform.h" +#include #include #include +#include #include #include #include +#include GFXRECON_BEGIN_NAMESPACE(gfxrecon) GFXRECON_BEGIN_NAMESPACE(parse_dump_resources) @@ -159,347 +164,428 @@ static bool CheckIndicesForErrors(const gfxrecon::decode::VulkanReplayOptions& v return false; } -// Function to parse the --dump-resoures argument, specifically vulkan_replay_options.dump_resources. -// If the text of the argument looks like it is for DX12 dump resources, it quietly returns. - -bool parse_dump_resources_arg(gfxrecon::decode::VulkanReplayOptions& vulkan_replay_options) +static VkImageAspectFlags StrToImageAspectFlagBits(const std::string& str) { - bool parse_error = false; - bool dump_resource_option_is_d3d12 = false; - std::string parse_error_message; - -#if defined(D3D12_SUPPORT) - // Parse dump_resource arg to see if it is for d3d12 - // (i.e. it consists of 3 comma-separated integers) - std::vector values = - gfxrecon::util::strings::SplitString(vulkan_replay_options.dump_resources_block_indices, ','); - if (values.size() == 3) + static const std::map aspect_flags = { + { "VK_IMAGE_ASPECT_COLOR_BIT", VK_IMAGE_ASPECT_COLOR_BIT }, + { "VK_IMAGE_ASPECT_DEPTH_BIT", VK_IMAGE_ASPECT_DEPTH_BIT }, + { "VK_IMAGE_ASPECT_STENCIL_BIT", VK_IMAGE_ASPECT_STENCIL_BIT }, + { "VK_IMAGE_ASPECT_METADATA_BIT", VK_IMAGE_ASPECT_METADATA_BIT }, + { "VK_IMAGE_ASPECT_PLANE_0_BIT", VK_IMAGE_ASPECT_PLANE_0_BIT }, + { "VK_IMAGE_ASPECT_PLANE_1_BIT", VK_IMAGE_ASPECT_PLANE_1_BIT }, + { "VK_IMAGE_ASPECT_PLANE_2_BIT", VK_IMAGE_ASPECT_PLANE_2_BIT }, + { "VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT", VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT }, + { "VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT", VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT }, + { "VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT", VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT }, + { "VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT", VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT }, + { "VK_IMAGE_ASPECT_PLANE_0_BIT_KHR", VK_IMAGE_ASPECT_PLANE_0_BIT_KHR }, + { "VK_IMAGE_ASPECT_PLANE_1_BIT_KHR", VK_IMAGE_ASPECT_PLANE_1_BIT_KHR }, + { "VK_IMAGE_ASPECT_PLANE_2_BIT_KHR", VK_IMAGE_ASPECT_PLANE_2_BIT_KHR } + }; + + VkImageAspectFlags flags = VK_IMAGE_ASPECT_NONE; + + for (const auto& aspect : aspect_flags) { - dump_resource_option_is_d3d12 = true; - for (int n = 0; n < 3; n++) + if (str.find(aspect.first) != std::string::npos) { - std::string v = values[n]; - dump_resource_option_is_d3d12 &= (!v.empty() && std::all_of(v.begin(), v.end(), ::isdigit)); + flags |= aspect.second; } } -#endif - if (vulkan_replay_options.dump_resources_block_indices.empty() || dump_resource_option_is_d3d12) - { - // Clear dump resources indices and return if arg is either null or intended for d3d12 - vulkan_replay_options.BeginCommandBuffer_Indices.clear(); - vulkan_replay_options.Draw_Indices.clear(); - vulkan_replay_options.RenderPass_Indices.clear(); - vulkan_replay_options.Dispatch_Indices.clear(); - vulkan_replay_options.TraceRays_Indices.clear(); - vulkan_replay_options.QueueSubmit_Indices.clear(); - return true; - } + return flags; +} - if (ends_with(to_lower(vulkan_replay_options.dump_resources_block_indices), ".json")) +static void ExtractVulkanDumpResourcesParameters(const nlohmann::ordered_json jargs, + gfxrecon::decode::VulkanReplayOptions& vulkan_replay_options) +{ + if (jargs.contains(gfxrecon::decode::kVDROptions)) { - // dump-resource arg value is a json file. Read and parse the json file. + for (auto vdr_option = jargs[gfxrecon::decode::kVDROptions].begin(); + vdr_option != jargs[gfxrecon::decode::kVDROptions].end(); + ++vdr_option) { - std::ifstream dr_json_file(vulkan_replay_options.dump_resources_block_indices, std::ifstream::binary); - if (!dr_json_file.is_open()) + const std::string option_name = vdr_option.key(); + + if (!util::platform::StringCompareNoCase(option_name.c_str(), gfxrecon::decode::kVDROptionScale)) { - GFXRECON_LOG_ERROR("Could not open \"%s\" for input", - vulkan_replay_options.dump_resources_block_indices.c_str()); - vulkan_replay_options.dumping_resources = false; - return false; + vulkan_replay_options.dump_resources_scale = *vdr_option; } - - nlohmann::ordered_json jargs; - dr_json_file >> jargs; - - // Transfer jargs to vectors in vulkan_replay_options - for (int idx0 = 0; idx0 < jargs[decode::DUMP_ARG_BEGIN_COMMAND_BUFFER].size(); idx0++) + else if (!util::platform::StringCompareNoCase(option_name.c_str(), gfxrecon::decode::kVDROptionOutputDir)) { - vulkan_replay_options.BeginCommandBuffer_Indices.push_back( - jargs[decode::DUMP_ARG_BEGIN_COMMAND_BUFFER][idx0]); + vulkan_replay_options.dump_resources_output_dir = *vdr_option; } - - for (int idx0 = 0; idx0 < jargs[decode::DUMP_ARG_DRAW].size(); idx0++) + else if (!util::platform::StringCompareNoCase(option_name.c_str(), + gfxrecon::decode::kVDROptionColorAttachmentIndex)) { - vulkan_replay_options.Draw_Indices.push_back(std::vector()); - for (int idx1 = 0; idx1 < jargs[decode::DUMP_ARG_DRAW][idx0].size(); idx1++) - { - vulkan_replay_options.Draw_Indices[idx0].push_back(jargs[decode::DUMP_ARG_DRAW][idx0][idx1]); - } + vulkan_replay_options.dump_resources_color_attachment_index = *vdr_option; } - - for (int idx0 = 0; idx0 < jargs[decode::DUMP_ARG_RENDER_PASS].size(); idx0++) + else if (!util::platform::StringCompareNoCase(option_name.c_str(), gfxrecon::decode::kVDROptionBefore)) { - vulkan_replay_options.RenderPass_Indices.push_back(std::vector>()); - for (int idx1 = 0; idx1 < jargs[decode::DUMP_ARG_RENDER_PASS][idx0].size(); idx1++) - { - vulkan_replay_options.RenderPass_Indices[idx0].push_back(std::vector()); - for (int idx2 = 0; idx2 < jargs[decode::DUMP_ARG_RENDER_PASS][idx0][idx1].size(); idx2++) - { - vulkan_replay_options.RenderPass_Indices[idx0][idx1].push_back( - jargs[decode::DUMP_ARG_RENDER_PASS][idx0][idx1][idx2]); - } - } + vulkan_replay_options.dump_resources_before = *vdr_option; } - - for (int idx0 = 0; idx0 < jargs[decode::DUMP_ARG_TRACE_RAYS].size(); idx0++) + else if (!util::platform::StringCompareNoCase(option_name.c_str(), gfxrecon::decode::kVDROptionDumpDepth)) { - vulkan_replay_options.TraceRays_Indices.push_back(std::vector()); - for (int idx1 = 0; idx1 < jargs[decode::DUMP_ARG_TRACE_RAYS][idx0].size(); idx1++) - { - vulkan_replay_options.TraceRays_Indices[idx0].push_back( - jargs[decode::DUMP_ARG_TRACE_RAYS][idx0][idx1]); - } + vulkan_replay_options.dump_resources_dump_depth = *vdr_option; } - - for (int idx0 = 0; idx0 < jargs[decode::DUMP_ARG_DISPATCH].size(); idx0++) + else if (!util::platform::StringCompareNoCase(option_name.c_str(), + gfxrecon::decode::kVDROptionDumpVertexIndexBuffer)) { - vulkan_replay_options.Dispatch_Indices.push_back(std::vector()); - for (int idx1 = 0; idx1 < jargs[decode::DUMP_ARG_DISPATCH][idx0].size(); idx1++) - { - vulkan_replay_options.Dispatch_Indices[idx0].push_back( - jargs[decode::DUMP_ARG_DISPATCH][idx0][idx1]); - } + vulkan_replay_options.dump_resources_dump_vertex_index_buffer = *vdr_option; } - - for (int idx0 = 0; idx0 < jargs[decode::DUMP_ARG_EXECUTE_COMMANDS].size(); ++idx0) + else if (!util::platform::StringCompareNoCase(option_name.c_str(), + gfxrecon::decode::kVDROptionDumpAllDescriptors)) { - vulkan_replay_options.ExecuteCommands_Indices.push_back(decode::ExecuteCommands()); - for (int idx1 = 0; idx1 < jargs[decode::DUMP_ARG_EXECUTE_COMMANDS][idx0].size(); idx1++) - { - if (!jargs[decode::DUMP_ARG_EXECUTE_COMMANDS][idx0][idx1].empty()) - { - const uint64_t execute_commands_index = jargs[decode::DUMP_ARG_EXECUTE_COMMANDS][idx0][idx1][0]; - for (int idx2 = 1; idx2 < jargs[decode::DUMP_ARG_EXECUTE_COMMANDS][idx0][idx1].size(); idx2++) - { - const uint64_t secondardy_bcb = jargs[decode::DUMP_ARG_EXECUTE_COMMANDS][idx0][idx1][idx2]; - vulkan_replay_options.ExecuteCommands_Indices[idx0][execute_commands_index].push_back( - secondardy_bcb); - } - } - } + vulkan_replay_options.dump_all_descriptors = *vdr_option; } - - for (int idx0 = 0; idx0 < jargs[decode::DUMP_ARG_QUEUE_SUBMIT].size(); idx0++) + else if (!util::platform::StringCompareNoCase(option_name.c_str(), + gfxrecon::decode::kVDROptionDumpAllImageSubresources)) { - uint64_t qs = static_cast(jargs[decode::DUMP_ARG_QUEUE_SUBMIT][idx0]); - vulkan_replay_options.QueueSubmit_Indices.push_back( - static_cast(jargs[decode::DUMP_ARG_QUEUE_SUBMIT][idx0])); + vulkan_replay_options.dump_resources_dump_all_image_subresources = *vdr_option; } - } - } - else - { - // Check to see if dump-resource arg value is a file. If it is, read the dump args from the file. - // Allow either spaces or commas to separate fields in the file. - std::ifstream infile(vulkan_replay_options.dump_resources_block_indices); - std::vector drargs; - if (!infile.fail()) - { - bool err = false; - for (std::string line; std::getline(infile, line);) + else if (!util::platform::StringCompareNoCase(option_name.c_str(), + gfxrecon::decode::kVDROptionDumpRawImages)) { - // Replace all whitespace with space character. - // Windows text files have CR/LF line endings that sometimes - // end up at the end of the input line. Get rid of them, and - // while we are at it, get rid of other whitespace. - const char* whitespace = "\n\t\v\r\f"; - for (auto pws = whitespace; *pws; pws++) std::replace(line.begin(), line.end(), *pws, ' '); - - // Remove leading and trailing spaces - line.erase(0, line.find_first_not_of(" ")); - line.erase(line.find_last_not_of(" ") + 1); - - // Remove instances of multiple spaces. - // This is slow and inefficient, but it's compact code - // and the loop should be executed only a few times. - while (line.find(" ") != std::string::npos) - { - line.replace(line.find(" "), 2, " "); - } - - // Replace spaces with commas - std::replace(line.begin(), line.end(), ' ', ','); + vulkan_replay_options.dump_resources_dump_raw_images = *vdr_option; + } + else if (!util::platform::StringCompareNoCase(option_name.c_str(), + gfxrecon::decode::kVDROptionDumpSeparateAlpha)) + { + vulkan_replay_options.dump_resources_dump_separate_alpha = *vdr_option; + } + else if (!util::platform::StringCompareNoCase(option_name.c_str(), + gfxrecon::decode::kVDROptionDumpUnusedVertexBindings)) + { + vulkan_replay_options.dump_resources_dump_unused_vertex_bindings = *vdr_option; + } + else if (!util::platform::StringCompareNoCase(option_name.c_str(), gfxrecon::decode::kVDROptionImageFormat)) + { + const std::string image_format = *vdr_option; - // Save the modified line if it is non-blank - if (line.length()) + if (!util::platform::StringCompareNoCase(image_format.c_str(), util::kScreenshotFormatBmp)) { - drargs.push_back(line); + vulkan_replay_options.dump_resources_image_format = gfxrecon::util::ScreenshotFormat::kBmp; } - } - } - else - { - // dump-resource args are all specified on the command line - drargs.push_back(vulkan_replay_options.dump_resources_block_indices); - } - - // Process non-json dump_resources args. - // Go through the non-json args one line at at time. - // Each line should add indices for BeginCommandBuffer, Draw, RenderPass, Dispatch, - // TraceRays, and QueueSubmit. If on a particular line one of those is not specified, - // an empty entry is added. We validate these indicies later. - for (int i = 0; i < drargs.size() && !parse_error; i++) - { - uint64_t num; - uint64_t BeginCommandBuffer = 0; - uint64_t Draw = 0; - uint64_t BeginRenderPass = 0; - std::vector NextSubPass; - uint64_t EndRenderPass = 0; - uint64_t Dispatch = 0; - uint64_t TraceRays = 0; - uint64_t QueueSubmit = 0; - size_t apos = 0; - errno = 0; - - while (apos < drargs[i].length() && !parse_error) - { - size_t epos, cpos; // '=' and ',' positions - char* endptr; - // Find next '=' and next ',' - epos = drargs[i].find_first_of('=', apos); - cpos = drargs[i].find_first_of(',', apos); - if (cpos == std::string::npos) - cpos = drargs[i].length(); - - // Extract number after '=' - num = strtol(drargs[i].c_str() + epos + 1, &endptr, 10); - parse_error |= ((errno != 0) || (*endptr != ',' && *endptr != 0)); - if (parse_error) + else if (!util::platform::StringCompareNoCase(image_format.c_str(), util::kScreenshotFormatPng)) { - parse_error_message = - "Parameter value for " + drargs[i].substr(apos, epos - apos) + " is not a valid number"; - break; + vulkan_replay_options.dump_resources_image_format = gfxrecon::util::ScreenshotFormat::kPng; } - - if (drargs[i].compare(apos, epos - apos, decode::DUMP_ARG_BEGIN_COMMAND_BUFFER) == 0) - BeginCommandBuffer = num; - else if (drargs[i].compare(apos, epos - apos, decode::DUMP_ARG_DRAW) == 0) - Draw = num; - else if (drargs[i].compare(apos, epos - apos, decode::DUMP_ARG_BEGIN_RENDER_PASS) == 0) - BeginRenderPass = num; - else if (drargs[i].compare(apos, epos - apos, decode::DUMP_ARG_NEXT_SUB_PASS) == 0) - NextSubPass.push_back(num); - else if (drargs[i].compare(apos, epos - apos, decode::DUMP_ARG_END_RENDER_PASS) == 0) - EndRenderPass = num; - else if (drargs[i].compare(apos, epos - apos, decode::DUMP_ARG_DISPATCH) == 0) - Dispatch = num; - else if (drargs[i].compare(apos, epos - apos, decode::DUMP_ARG_TRACE_RAYS) == 0) - TraceRays = num; - else if (drargs[i].compare(apos, epos - apos, decode::DUMP_ARG_QUEUE_SUBMIT) == 0) - QueueSubmit = num; else { - parse_error = true; - parse_error_message = "Bad --dump-resources parameter: " + drargs[i].substr(apos, epos - apos); - break; + GFXRECON_LOG_WARNING("Unrecognized image format \"%s\" in input json.", image_format.c_str()); } - - apos = cpos + 1; } - - if (!parse_error) + else if (!util::platform::StringCompareNoCase(option_name.c_str(), + gfxrecon::decode::kVDROptionJsonOutputPerCommand)) { - if (!BeginCommandBuffer) + vulkan_replay_options.dump_resources_json_per_command = *vdr_option; + } + else if (!util::platform::StringCompareNoCase(option_name.c_str(), + gfxrecon::decode::kVDROptionBinaryFileCompressionType)) + { + const std::string compression_type_str = *vdr_option; + + if (!util::platform::StringCompareNoCase(compression_type_str.c_str(), util::kCompressionTypeNone)) { - parse_error = true; - parse_error_message = "Bad --dump-resources parameter: Missing BeginCommandBuffer"; - break; + vulkan_replay_options.dump_resources_binary_file_compression_type = format::CompressionType::kNone; } - else + else if (!util::platform::StringCompareNoCase(compression_type_str.c_str(), util::kCompressionTypeLz4)) { - vulkan_replay_options.BeginCommandBuffer_Indices.push_back(BeginCommandBuffer); + vulkan_replay_options.dump_resources_binary_file_compression_type = format::CompressionType::kLz4; } - - vulkan_replay_options.Draw_Indices.push_back(std::vector()); - if (Draw) + else if (!util::platform::StringCompareNoCase(compression_type_str.c_str(), util::kCompressionTypeZlib)) { - vulkan_replay_options.Draw_Indices[i].push_back(Draw); + vulkan_replay_options.dump_resources_binary_file_compression_type = format::CompressionType::kZlib; } - - vulkan_replay_options.RenderPass_Indices.push_back(std::vector>()); - if (BeginRenderPass || NextSubPass.size() || EndRenderPass) + else if (!util::platform::StringCompareNoCase(compression_type_str.c_str(), util::kCompressionTypeZstd)) + { + vulkan_replay_options.dump_resources_binary_file_compression_type = format::CompressionType::kZstd; + } + else { - vulkan_replay_options.RenderPass_Indices[i].push_back(std::vector()); - vulkan_replay_options.RenderPass_Indices[i][0].push_back(BeginRenderPass); + GFXRECON_LOG_WARNING("Unrecognized compression method \"%s\" in input json.", + compression_type_str.c_str()); + } + } + else if (!util::platform::StringCompareNoCase( + option_name.c_str(), gfxrecon::decode::kVDROptionDumpBuildAccelerationStructuresInputBuffers)) + { + vulkan_replay_options.dump_resources_dump_build_AS_input_buffers = *vdr_option; + } + else + { + GFXRECON_LOG_WARNING("Unrecognized VDR option detected in input json: %s", option_name.c_str()) + } + } + } +} - vulkan_replay_options.RenderPass_Indices[i][0].insert( - vulkan_replay_options.RenderPass_Indices[i][0].end(), NextSubPass.begin(), NextSubPass.end()); +template +static void ExtractIndexAndDescriptors(const json_iterator it, + decode::Index bcb_index, + std::vector& cmd_indices, + decode::CommandImageSubresource& command_subresources) +{ + if (it->is_number()) + { + cmd_indices[bcb_index].push_back(*it); + } + else + { + const decode::Index cmd_index = it->at("Index"); + cmd_indices[bcb_index].push_back(cmd_index); - vulkan_replay_options.RenderPass_Indices[i][0].push_back(EndRenderPass); - } + if (it->contains("Descriptors")) + { + const auto& subresources = it->at("Descriptors"); + for (const auto& sr : subresources) + { + const uint32_t set = sr["Set"]; + const uint32_t binding = sr["Binding"]; + const uint32_t ai = sr["ArrayIndex"]; - vulkan_replay_options.Dispatch_Indices.push_back(std::vector()); - if (Dispatch) + VkImageSubresourceRange subresource_range; + if (sr.contains("SubresourceRange")) { - vulkan_replay_options.Dispatch_Indices[i].push_back(Dispatch); - } + const auto& range = sr["SubresourceRange"]; + const VkImageAspectFlags aspect = StrToImageAspectFlagBits(range["AspectMask"]); + const uint32_t base_level = range["BaseMipLevel"]; + const uint32_t base_layer = range["BaseArrayLayer"]; + + uint32_t level_count; + if (range["LevelCount"].is_number()) + { + level_count = range["LevelCount"]; + } + else + { + const std::string level_count_str = range["LevelCount"]; + if (!level_count_str.compare("VK_REMAINING_MIP_LEVELS")) + { + level_count = VK_REMAINING_MIP_LEVELS; + } + else + { + GFXRECON_LOG_WARNING( + "The string \"%s\", that is being passed as \"LevelCount\" for command index: %" PRIu64 + ", descriptor set: %" PRIu64 ", binding set: %" PRIu64 " and, array index: %" PRIu64 + ", is not recognized and will be ignored (will use 1 instead).", + level_count_str.c_str(), + cmd_index, + set, + binding, + ai); + level_count = 1; + } + } - vulkan_replay_options.TraceRays_Indices.push_back(std::vector()); - if (TraceRays) + uint32_t layer_count; + if (range["LayerCount"].is_number()) + { + layer_count = range["LayerCount"]; + } + else + { + const std::string layer_count_str = range["LayerCount"]; + if (!layer_count_str.compare("VK_REMAINING_ARRAY_LAYERS")) + { + layer_count = VK_REMAINING_ARRAY_LAYERS; + } + else + { + GFXRECON_LOG_WARNING( + "The string \"%s\", that is being passed as \"LayerCount\" for command index: %" PRIu64 + ", descriptor set: %" PRIu64 ", binding set: %" PRIu64 " and, array index: %" PRIu64 + ", is not recognized and will be ignored (will use 1 instead).", + layer_count_str.c_str(), + cmd_index, + set, + binding, + ai); + layer_count = 1; + } + } + + subresource_range = { aspect, base_level, level_count, base_layer, layer_count }; + } + else { - vulkan_replay_options.TraceRays_Indices[i].push_back(TraceRays); + subresource_range = { + VK_IMAGE_ASPECT_NONE, 0, VK_REMAINING_MIP_LEVELS, 0, VK_REMAINING_ARRAY_LAYERS + }; } - - vulkan_replay_options.QueueSubmit_Indices.push_back(QueueSubmit); + command_subresources[cmd_index].emplace(decode::DescriptorLocation{ set, binding, ai }, + subresource_range); } } + } +} - // Some indices are only specified for a particular type of resource dump. - // For each one that is not specified in the args, clear its vector. - bool clear_it = true; - for (const auto& indices : vulkan_replay_options.Draw_Indices) +// Function to parse the --dump-resoures argument, specifically vulkan_replay_options.dump_resources. +// If the text of the argument looks like it is for DX12 dump resources, it quietly returns. + +bool parse_dump_resources_arg(gfxrecon::decode::VulkanReplayOptions& vulkan_replay_options) +{ + bool dump_resource_option_is_d3d12 = false; + std::string parse_error_message; + +#if defined(D3D12_SUPPORT) + // Parse dump_resource arg to see if it is for d3d12 + // (i.e. it consists of 3 comma-separated integers) + std::vector values = + gfxrecon::util::strings::SplitString(vulkan_replay_options.dump_resources_block_indices, ','); + if (values.size() == 3) + { + dump_resource_option_is_d3d12 = true; + for (int n = 0; n < 3; n++) { - clear_it &= (indices.size() == 0); + std::string v = values[n]; + dump_resource_option_is_d3d12 &= (!v.empty() && std::all_of(v.begin(), v.end(), ::isdigit)); } - if (clear_it) + } +#endif + + if (vulkan_replay_options.dump_resources_block_indices.empty() || dump_resource_option_is_d3d12) + { + // Clear dump resources indices and return if arg is either null or intended for d3d12 + vulkan_replay_options.BeginCommandBufferQueueSubmit_Indices.clear(); + vulkan_replay_options.Draw_Indices.clear(); + vulkan_replay_options.RenderPass_Indices.clear(); + vulkan_replay_options.Dispatch_Indices.clear(); + vulkan_replay_options.TraceRays_Indices.clear(); + return true; + } + + // Vulkan dump resources expects only a json file + if (ends_with(to_lower(vulkan_replay_options.dump_resources_block_indices), ".json")) + { + std::ifstream dr_json_file(vulkan_replay_options.dump_resources_block_indices, std::ifstream::binary); + if (!dr_json_file.is_open()) { - vulkan_replay_options.Draw_Indices.clear(); + GFXRECON_LOG_ERROR("Could not open \"%s\" for input", + vulkan_replay_options.dump_resources_block_indices.c_str()); + vulkan_replay_options.dumping_resources = false; + return false; } - clear_it = true; - for (const auto& indices : vulkan_replay_options.RenderPass_Indices) + nlohmann::ordered_json jargs; + dr_json_file >> jargs; + + // Parse VDR input options from json file + ExtractVulkanDumpResourcesParameters(jargs, vulkan_replay_options); + + // BeginCommandBuffer and QueueSubmit lists are expected to have the same length + if (jargs[decode::DUMP_ARG_BEGIN_COMMAND_BUFFER].size() != jargs[decode::DUMP_ARG_QUEUE_SUBMIT].size()) { - clear_it &= (indices.size() == 0); + GFXRECON_LOG_FATAL("Malformed VDR input json: BeginCommandBuffer and QueueSubmit index lists are " + "expected to have the same length."); + vulkan_replay_options.dumping_resources = false; + return false; } - if (clear_it) + + // Transfer command indices from json to vectors in vulkan_replay_options + for (int idx0 = 0; idx0 < jargs[decode::DUMP_ARG_BEGIN_COMMAND_BUFFER].size(); idx0++) { - vulkan_replay_options.RenderPass_Indices.clear(); + const decode::Index qs = jargs[decode::DUMP_ARG_QUEUE_SUBMIT][idx0]; + const decode::Index bcb = jargs[decode::DUMP_ARG_BEGIN_COMMAND_BUFFER][idx0]; + + const decode::BeginCmdBufQueueSubmitPair new_pair = std::make_pair(bcb, qs); + if (std::find(vulkan_replay_options.BeginCommandBufferQueueSubmit_Indices.begin(), + vulkan_replay_options.BeginCommandBufferQueueSubmit_Indices.end(), + new_pair) != vulkan_replay_options.BeginCommandBufferQueueSubmit_Indices.end()) + { + GFXRECON_LOG_FATAL("Malformed VDR input json: BeginCommandBuffer and QueueSubmit index pair (%" PRIu64 + ", %" PRIu64 ") already exist", + bcb, + qs); + vulkan_replay_options.dumping_resources = false; + return false; + } + vulkan_replay_options.BeginCommandBufferQueueSubmit_Indices.emplace_back(new_pair); } - clear_it = true; - for (const auto& indices : vulkan_replay_options.Dispatch_Indices) + for (int idx0 = 0; idx0 < jargs[decode::DUMP_ARG_DRAW].size(); idx0++) { - clear_it &= (indices.size() == 0); + vulkan_replay_options.Draw_Indices.push_back(std::vector()); + for (auto it = jargs[decode::DUMP_ARG_DRAW][idx0].begin(); it != jargs[decode::DUMP_ARG_DRAW][idx0].end(); + ++it) + { + ExtractIndexAndDescriptors( + it, idx0, vulkan_replay_options.Draw_Indices, vulkan_replay_options.DrawSubresources); + } } - if (clear_it) + + for (int idx0 = 0; idx0 < jargs[decode::DUMP_ARG_RENDER_PASS].size(); idx0++) { - vulkan_replay_options.Dispatch_Indices.clear(); + vulkan_replay_options.RenderPass_Indices.push_back(std::vector>()); + for (int idx1 = 0; idx1 < jargs[decode::DUMP_ARG_RENDER_PASS][idx0].size(); idx1++) + { + vulkan_replay_options.RenderPass_Indices[idx0].push_back(std::vector()); + for (int idx2 = 0; idx2 < jargs[decode::DUMP_ARG_RENDER_PASS][idx0][idx1].size(); idx2++) + { + vulkan_replay_options.RenderPass_Indices[idx0][idx1].push_back( + jargs[decode::DUMP_ARG_RENDER_PASS][idx0][idx1][idx2]); + } + } } - clear_it = true; - for (const auto& indices : vulkan_replay_options.TraceRays_Indices) + for (int idx0 = 0; idx0 < jargs[decode::DUMP_ARG_TRACE_RAYS].size(); idx0++) { - clear_it &= (indices.size() == 0); + vulkan_replay_options.TraceRays_Indices.push_back(std::vector()); + for (auto it = jargs[decode::DUMP_ARG_TRACE_RAYS][idx0].begin(); + it != jargs[decode::DUMP_ARG_TRACE_RAYS][idx0].end(); + ++it) + { + ExtractIndexAndDescriptors( + it, idx0, vulkan_replay_options.TraceRays_Indices, vulkan_replay_options.TraceRaysSubresources); + } } - if (clear_it) + + for (int idx0 = 0; idx0 < jargs[decode::DUMP_ARG_DISPATCH].size(); idx0++) { - vulkan_replay_options.TraceRays_Indices.clear(); + vulkan_replay_options.Dispatch_Indices.push_back(std::vector()); + for (auto it = jargs[decode::DUMP_ARG_DISPATCH][idx0].begin(); + it != jargs[decode::DUMP_ARG_DISPATCH][idx0].end(); + ++it) + { + ExtractIndexAndDescriptors( + it, idx0, vulkan_replay_options.Dispatch_Indices, vulkan_replay_options.DispatchSubresources); + } } - } - if (parse_error) - { - GFXRECON_LOG_ERROR("%s", parse_error_message.c_str()); - } + for (int idx0 = 0; idx0 < jargs[decode::DUMP_ARG_EXECUTE_COMMANDS].size(); ++idx0) + { + vulkan_replay_options.ExecuteCommands_Indices.push_back(decode::ExecuteCommands()); + for (int idx1 = 0; idx1 < jargs[decode::DUMP_ARG_EXECUTE_COMMANDS][idx0].size(); idx1++) + { + if (!jargs[decode::DUMP_ARG_EXECUTE_COMMANDS][idx0][idx1].empty()) + { + const uint64_t execute_commands_index = jargs[decode::DUMP_ARG_EXECUTE_COMMANDS][idx0][idx1][0]; + for (int idx2 = 1; idx2 < jargs[decode::DUMP_ARG_EXECUTE_COMMANDS][idx0][idx1].size(); idx2++) + { + const uint64_t secondardy_bcb = jargs[decode::DUMP_ARG_EXECUTE_COMMANDS][idx0][idx1][idx2]; + vulkan_replay_options.ExecuteCommands_Indices[idx0][execute_commands_index].push_back( + secondardy_bcb); + } + } + } + } - // Perform some sanity checks on the provided indices - if (!parse_error) - { - parse_error = CheckIndicesForErrors(vulkan_replay_options); + for (int idx0 = 0; idx0 < jargs[decode::DUMP_ARG_TRANSFER].size(); idx0++) + { + vulkan_replay_options.Transfer_Indices.push_back(std::vector()); + for (auto it = jargs[decode::DUMP_ARG_TRANSFER][idx0].begin(); + it != jargs[decode::DUMP_ARG_TRANSFER][idx0].end(); + ++it) + { + ExtractIndexAndDescriptors( + it, idx0, vulkan_replay_options.Transfer_Indices, vulkan_replay_options.TraceRaysSubresources); + } + } } + bool parse_error = CheckIndicesForErrors(vulkan_replay_options); + vulkan_replay_options.dumping_resources = !parse_error; return !parse_error; } diff --git a/third_party/gfxreconstruct/tools/replay/recapture_vulkan_entry.cpp b/third_party/gfxreconstruct/tools/replay/recapture_vulkan_entry.cpp new file mode 100644 index 000000000..0b42fc012 --- /dev/null +++ b/third_party/gfxreconstruct/tools/replay/recapture_vulkan_entry.cpp @@ -0,0 +1,322 @@ +/* +** Copyright (c) 2018-2023 Valve Corporation +** Copyright (c) 2018-2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#include PROJECT_VERSION_HEADER_FILE + +#include "recapture_vulkan_entry.h" +#include "encode/vulkan_capture_manager.h" +#include "encode/vulkan_handle_wrapper_util.h" +#include "generated/generated_vulkan_api_call_encoders.h" +#include "generated/generated_vulkan_recapture_func_table.h" +#include "util/platform.h" + +#include "vulkan/vk_layer.h" + +#include +#include +#include +#include +#include +#include +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(vulkan_recapture) + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char* pName) +{ + return RecaptureVulkanEntry::Get()->GetInstanceProcAddr(instance, pName); +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char* pName) +{ + return RecaptureVulkanEntry::Get()->GetDeviceProcAddr(device, pName); +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetPhysicalDeviceProcAddr(VkInstance ourInstanceWrapper, const char* pName) +{ + return RecaptureVulkanEntry::Get()->GetPhysicalDeviceProcAddr(ourInstanceWrapper, pName); +} + +VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, + const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) +{ + return RecaptureVulkanEntry::Get()->EnumerateDeviceExtensionProperties( + physicalDevice, pLayerName, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) +{ + return RecaptureVulkanEntry::Get()->EnumerateInstanceExtensionProperties(pLayerName, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(uint32_t* pPropertyCount, + VkLayerProperties* pProperties) +{ + return RecaptureVulkanEntry::Get()->EnumerateInstanceLayerProperties(pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkLayerProperties* pProperties) +{ + return RecaptureVulkanEntry::Get()->EnumerateDeviceLayerProperties(physicalDevice, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL dispatch_CreateInstance(const VkInstanceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkInstance* pInstance) +{ + return RecaptureVulkanEntry::Get()->dispatch_CreateInstance(pCreateInfo, pAllocator, pInstance); +} + +VKAPI_ATTR VkResult VKAPI_CALL dispatch_CreateDevice(VkPhysicalDevice physicalDevice, + const VkDeviceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDevice* pDevice) +{ + return RecaptureVulkanEntry::Get()->dispatch_CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice); +} + +encode::VulkanEntryBase* RecaptureVulkanEntry::InitSingleton() +{ + return VulkanEntryBase::InitSingleton(GetVulkanRecaptureFuncTable()); +} + +RecaptureVulkanEntry::RecaptureVulkanEntry(const encode::VulkanFunctionTable& vulkan_function_table) : + VulkanEntryBase(vulkan_function_table) +{ + InitializeLoader(); +} + +RecaptureVulkanEntry::~RecaptureVulkanEntry() +{ + ReleaseLoader(); +} + +VkResult RecaptureVulkanEntry::EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, + const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) +{ + VkResult result = VK_SUCCESS; + + if ((pLayerName != nullptr) && (util::platform::StringCompare(pLayerName, kLayerProps.layerName) == 0)) + { + if (pPropertyCount != nullptr) + { + *pPropertyCount = 0; + } + } + else + { + // If this function was not called with the layer's name, we expect to dispatch down the chain to obtain the ICD + // provided extensions. + // In order to screen out unsupported extensions, we always query the chain + // twice, and remove those that are present from the count. + auto instance_table = encode::vulkan_wrappers::GetInstanceTable(physicalDevice); + uint32_t downstream_property_count = 0; + + result = instance_table->EnumerateDeviceExtensionProperties( + physicalDevice, pLayerName, &downstream_property_count, nullptr); + if (result != VK_SUCCESS) + { + return result; + } + + std::vector device_extension_properties(downstream_property_count); + result = instance_table->EnumerateDeviceExtensionProperties( + physicalDevice, pLayerName, &downstream_property_count, device_extension_properties.data()); + if (result != VK_SUCCESS) + { + return result; + } + + RemoveExtensions(device_extension_properties, + kVulkanUnsupportedDeviceExtensions.data(), + std::end(kVulkanUnsupportedDeviceExtensions) - std::begin(kVulkanUnsupportedDeviceExtensions)); + + // Output the reduced count or the reduced extension list: + if (pProperties == nullptr) + { + *pPropertyCount = static_cast(device_extension_properties.size()); + } + else + { + if (*pPropertyCount < static_cast(device_extension_properties.size())) + { + result = VK_INCOMPLETE; + } + *pPropertyCount = std::min(*pPropertyCount, static_cast(device_extension_properties.size())); + std::copy(device_extension_properties.begin(), + device_extension_properties.begin() + *pPropertyCount, + pProperties); + } + } + + return result; +} + +VkResult RecaptureVulkanEntry::EnumerateInstanceExtensionProperties(const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) +{ + VkResult result = VK_SUCCESS; + + if ((pLayerName != nullptr) && (util::platform::StringCompare(pLayerName, kLayerProps.layerName) == 0)) + { + if (pPropertyCount != nullptr) + { + *pPropertyCount = 0; + } + } + else if (pLayerName == nullptr) + { + // During trim, the GFXR capture code is not a layer registered with the loader, so forward the call to the + // loader here. + if (loader_handle_ != nullptr) + { + auto loader_enumerate_instance_extension_properties = + reinterpret_cast( + util::platform::GetProcAddress(loader_handle_, "vkEnumerateInstanceExtensionProperties")); + result = loader_enumerate_instance_extension_properties(pLayerName, pPropertyCount, pProperties); + } + else + { + result = VK_ERROR_INITIALIZATION_FAILED; + } + } + else + { + result = VK_ERROR_LAYER_NOT_PRESENT; + } + + return result; +} + +// For the trim tool, this function is called by the capture manager handling for vkCreateInstance in +// VulkanCaptureManager::OverrideCreateInstance. It needs to create the actual (not wrapped) VkInstance object. +VkResult RecaptureVulkanEntry::dispatch_CreateInstance(const VkInstanceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkInstance* pInstance) +{ + VkResult result = VK_ERROR_INITIALIZATION_FAILED; + + if (loader_handle_ != nullptr) + { + auto loader_get_instance_proc_addr = reinterpret_cast( + util::platform::GetProcAddress(loader_handle_, "vkGetInstanceProcAddr")); + + if (loader_get_instance_proc_addr != nullptr) + { + auto loader_create_instance_function = + reinterpret_cast(loader_get_instance_proc_addr(nullptr, "vkCreateInstance")); + + if (loader_create_instance_function != nullptr) + { + // Make the Vulkan call to create the instance. + result = loader_create_instance_function(pCreateInfo, pAllocator, pInstance); + + if ((result == VK_SUCCESS) && pInstance && (*pInstance != nullptr)) + { + AddInstanceHandle(*pInstance); + VkInstance unwrapped_instance = *pInstance; + + encode::VulkanCaptureManager* manager = encode::VulkanCaptureManager::Get(); + assert(manager != nullptr); + + // Initialize the capture manager with the Vulkan loader's vkGetInstanceProcAddr so the capture + // manager is calling Vulkan functions directly. + manager->InitVkInstance(pInstance, loader_get_instance_proc_addr); + + // Register the next layer's GetPhysicalDeviceProcAddr func only after *pInstance + // has been updated to our wrapper in manager->InitVkInstance() above: + auto fpNextGetPhysicalDeviceProcAddr = reinterpret_cast( + loader_get_instance_proc_addr(unwrapped_instance, "vk_layerGetPhysicalDeviceProcAddr")); + SetInstanceNextGPDPA(*pInstance, fpNextGetPhysicalDeviceProcAddr); + } + } + } + } + + return result; +} + +// For the trim tool, this function is called by the capture manager handling for vkCreateDevice in +// VulkanCaptureManager::OverrideCreateDevice. It needs to create the actual (not wrapped) VkDevice object. +VkResult RecaptureVulkanEntry::dispatch_CreateDevice(VkPhysicalDevice physicalDevice, + const VkDeviceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDevice* pDevice) +{ + VkResult result = VK_ERROR_INITIALIZATION_FAILED; + + VkInstance layer_instance = GetInstanceHandle(physicalDevice); + + if (loader_handle_ != nullptr) + { + auto loader_get_instance_proc_addr = reinterpret_cast( + util::platform::GetProcAddress(loader_handle_, "vkGetInstanceProcAddr")); + + PFN_vkCreateDevice loader_create_device_function = + reinterpret_cast(loader_get_instance_proc_addr(layer_instance, "vkCreateDevice")); + + if (loader_create_device_function) + { + result = loader_create_device_function(physicalDevice, pCreateInfo, pAllocator, pDevice); + + if ((result == VK_SUCCESS) && pDevice && (*pDevice != nullptr)) + { + auto get_device_proc_addr = reinterpret_cast( + loader_get_instance_proc_addr(layer_instance, "vkGetDeviceProcAddr")); + + encode::VulkanCaptureManager* manager = encode::VulkanCaptureManager::Get(); + assert(manager != nullptr); + manager->InitVkDevice(pDevice, get_device_proc_addr); + } + } + } + + return result; +} + +void RecaptureVulkanEntry::InitializeLoader() +{ + loader_handle_ = graphics::InitializeLoader(); + GFXRECON_ASSERT(loader_handle_ != nullptr); +} + +void RecaptureVulkanEntry::ReleaseLoader() +{ + if (loader_handle_) + { + graphics::ReleaseLoader(loader_handle_); + } +} + +GFXRECON_END_NAMESPACE(vulkan_recapture) +GFXRECON_END_NAMESPACE(gfxrecon) diff --git a/third_party/gfxreconstruct/tools/replay/recapture_vulkan_entry.h b/third_party/gfxreconstruct/tools/replay/recapture_vulkan_entry.h new file mode 100644 index 000000000..8271aba46 --- /dev/null +++ b/third_party/gfxreconstruct/tools/replay/recapture_vulkan_entry.h @@ -0,0 +1,110 @@ +/* +** Copyright (c) 2018 Valve Corporation +** Copyright (c) 2018-2025 LunarG, Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and associated documentation files (the "Software"), +** to deal in the Software without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Software, and to permit persons to whom the +** Software is furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +** DEALINGS IN THE SOFTWARE. +*/ + +#ifndef GFXRECON_recapture_vulkan_entry_H +#define GFXRECON_recapture_vulkan_entry_H + +#include "encode/vulkan_entry_base.h" + +#include "util/defines.h" +#include "util/logging.h" + +#include "vulkan/vk_layer.h" + +#include +#include +#include + +GFXRECON_BEGIN_NAMESPACE(gfxrecon) +GFXRECON_BEGIN_NAMESPACE(vulkan_recapture) + +// The following prototype declarations are required so the dispatch table can find these +// functions which are defined in the .cpp +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char* pName); +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char* pName); +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetPhysicalDeviceProcAddr(VkInstance ourInstanceWrapper, const char* pName); +VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, + const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(uint32_t* pPropertyCount, + VkLayerProperties* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkLayerProperties* pProperties); + +VKAPI_ATTR VkResult VKAPI_CALL dispatch_CreateInstance(const VkInstanceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkInstance* pInstance); +VKAPI_ATTR VkResult VKAPI_CALL dispatch_CreateDevice(VkPhysicalDevice physicalDevice, + const VkDeviceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDevice* pDevice); + +class RecaptureVulkanEntry : public encode::VulkanEntryBase +{ + public: + static VulkanEntryBase* InitSingleton(); + + RecaptureVulkanEntry(const encode::VulkanFunctionTable& vulkan_function_table); + virtual ~RecaptureVulkanEntry(); + + virtual VkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, + const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) override; + virtual VkResult EnumerateInstanceExtensionProperties(const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) override; + + virtual VkResult dispatch_CreateInstance(const VkInstanceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkInstance* pInstance) override; + virtual VkResult dispatch_CreateDevice(VkPhysicalDevice physicalDevice, + const VkDeviceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDevice* pDevice) override; + + private: + void InitializeLoader(); + void ReleaseLoader(); + + util::platform::LibraryHandle loader_handle_ = nullptr; +}; + +GFXRECON_END_NAMESPACE(vulkan_recapture) + +#if ENABLE_OPENXR_SUPPORT +GFXRECON_BEGIN_NAMESPACE(openxr_entry) + +// TODOTRIM: Add openxr support to recapture + +GFXRECON_END_NAMESPACE(openxr_entry) +#endif // ENABLE_OPENXR_SUPPORT + +GFXRECON_END_NAMESPACE(gfxrecon) + +#endif // GFXRECON_recapture_vulkan_entry_H diff --git a/third_party/gfxreconstruct/tools/replay/replay_settings.h b/third_party/gfxreconstruct/tools/replay/replay_settings.h index 0141967a5..17c8c0b21 100644 --- a/third_party/gfxreconstruct/tools/replay/replay_settings.h +++ b/third_party/gfxreconstruct/tools/replay/replay_settings.h @@ -35,22 +35,16 @@ const char kOptions[] = "measurement-range,--flush-inside-measurement-range,--vssb|--virtual-swapchain-skip-blit,--use-captured-swapchain-" "indices,--dcp,--discard-cached-psos,--use-colorspace-fallback,--use-cached-psos,--dx12-override-object-names,--" "dx12-ags-inject-markers,--offscreen-swapchain-frame-boundary,--wait-before-present,--dump-resources-before-draw," - "--dump-resources-dump-depth-attachment,--dump-resources-dump-vertex-index-buffers," - "--dump-resources-json-output-per-command,--dump-resources-dump-immutable-resources," - "--dump-resources-dump-all-image-subresources,--dump-resources-dump-raw-images,--dump-resources-dump-" - "separate-alpha,--dump-resources-modifiable-state-only,--pbi-all,--preload-measurement-range," - "--add-new-pipeline-caches,--screenshot-ignore-FrameBoundaryANDROID,--dump-resources-dump-unused-vertex-bindings,--" - "deduplicate-device,--log-timestamps,--enable-gpu-time"; + "--dump-resources-modifiable-state-only,--pbi-all,--preload-measurement-range,--add-new-pipeline-caches,--" + "screenshot-ignore-FrameBoundaryANDROID,--deduplicate-device,--log-timestamps,--capture,--enable-gpu-time"; const char kArguments[] = "--log-level,--log-file,--cpu-mask,--gpu,--gpu-group,--pause-frame,--wsi,--surface-index,-m|--memory-translation," "--replace-shaders,--screenshots,--screenshot-interval,--denied-messages,--allowed-messages,--screenshot-format,--" "screenshot-dir,--screenshot-prefix,--screenshot-size,--screenshot-scale,--mfr|--measurement-frame-range,--fw|--" "force-windowed,--fwo|--force-windowed-origin,--batching-memory-usage,--measurement-file,--swapchain,--sgfs|--skip-" - "get-fence-status,--sgfr|--" - "skip-get-fence-ranges,--dump-resources,--dump-resources-scale,--dump-resources-" - "image-format,--dump-resources-dir," - "--dump-resources-dump-color-attachment-index,--pbis,--pcj|--pipeline-creation-jobs,--save-pipeline-cache,--load-" - "pipeline-cache,--quit-after-frame,--loop-single-frame-count"; + "get-fence-status,--sgfr|--skip-get-fence-ranges,--dump-resources,--dump-resources-dir,--dump-resources-image-" + "format,pbis,--pcj|--pipeline-creation-jobs,--save-pipeline-cache,--load-pipeline-cache,--quit-after-frame,--" + "present-mode,--loop-single-frame-count"; static void PrintUsage(const char* exe_name) { @@ -71,13 +65,14 @@ static void PrintUsage(const char* exe_name) GFXRECON_WRITE_CONSOLE("\t\t\t[--screenshot-dir ] [--screenshot-prefix ]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--screenshot-size x]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--screenshot-scale ] [--screenshot-interval ]"); + GFXRECON_WRITE_CONSOLE("\t\t\t[--capture]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--sfa | --skip-failed-allocations] [--replace-shaders ]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--opcd | --omit-pipeline-cache-data] [--wsi ]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--use-cached-psos] [--surface-index ]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--remove-unsupported] [--validate]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--onhb | --omit-null-hardware-buffers]"); GFXRECON_WRITE_CONSOLE("\t\t\t[-m | --memory-translation ]"); - GFXRECON_WRITE_CONSOLE("\t\t\t[--swapchain ]"); + GFXRECON_WRITE_CONSOLE("\t\t\t[--swapchain ] [--present-mode ]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--vssb | --virtual-swapchain-skip-blit]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--use-captured-swapchain-indices]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--use-colorspace-fallback]"); @@ -89,16 +84,10 @@ static void PrintUsage(const char* exe_name) GFXRECON_WRITE_CONSOLE("\t\t\t[--sgfs | --skip-get-fence-status ]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--sgfr | --skip-get-fence-ranges ]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--pbi-all] [--pbis ]"); - GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources ]"); - GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources ] [--dump-resources ]"); - GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources-before-draw] [--dump-resources-scale ]"); - GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources-dir ] [--dump-resources-image-format ]"); - GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources-dump-depth-attachment]"); - GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources-dump-color-attachment-index ]"); - GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources-dump-vertex-index-buffers]"); - GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources-json-output-per-command]"); - GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources-dump-immutable-resources]"); - GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources-dump-all-image-subresources]"); +#if !defined(WIN32) + GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources .json]"); +#endif + GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources-dir ]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--debug-messenger-level ]"); // GOOGLE: [single-frame-looping] Usage message @@ -107,7 +96,9 @@ static void PrintUsage(const char* exe_name) GFXRECON_WRITE_CONSOLE("\t\t\t[--enable-gpu-time]"); #if defined(WIN32) + GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources ]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources-modifiable-state-only]"); + GFXRECON_WRITE_CONSOLE("\t\t\t[--dump-resources-image-format ]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--fwo | --force-windowed-origin ]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--log-level ] [--log-file ] [--log-debugview]"); GFXRECON_WRITE_CONSOLE("\t\t\t[--batching-memory-usage ]"); @@ -161,8 +152,9 @@ static void PrintUsage(const char* exe_name) GFXRECON_WRITE_CONSOLE(" \t\tImage file format to use for screenshot generation."); GFXRECON_WRITE_CONSOLE(" \t\tAvailable formats are:"); GFXRECON_WRITE_CONSOLE(" \t\t %s\t\tBitmap file format. This is the default format.", - kScreenshotFormatBmp); - GFXRECON_WRITE_CONSOLE(" \t\t %s\t\tPortable Network Graphics file format.", kScreenshotFormatPng); + gfxrecon::util::kScreenshotFormatBmp); + GFXRECON_WRITE_CONSOLE(" \t\t %s\t\tPortable Network Graphics file format.", + gfxrecon::util::kScreenshotFormatPng); GFXRECON_WRITE_CONSOLE(" --screenshot-dir "); GFXRECON_WRITE_CONSOLE(" \t\tDirectory to write screenshots. Default is the current"); GFXRECON_WRITE_CONSOLE(" \t\tworking directory."); @@ -197,19 +189,6 @@ static void PrintUsage(const char* exe_name) GFXRECON_WRITE_CONSOLE(" --pbi-all\t\tPrint all block information."); GFXRECON_WRITE_CONSOLE( " --pbis \t\tPrint block information between block index1 and block index2."); - GFXRECON_WRITE_CONSOLE(" --dump-resources-before-draw"); - GFXRECON_WRITE_CONSOLE(" \t\tIn addition to dumping GPU resources after the draw calls"); - GFXRECON_WRITE_CONSOLE(" \t\tspecified by the --dump-resources argument, also dump resources"); - GFXRECON_WRITE_CONSOLE(" \t\tbefore the draw calls."); - GFXRECON_WRITE_CONSOLE(" --dump-resources "); - GFXRECON_WRITE_CONSOLE(" \t\tDump resources for a specific drawcall."); - GFXRECON_WRITE_CONSOLE( - " \t\tThis can include vertex, index, const buffer, shader resource, render target,"); - GFXRECON_WRITE_CONSOLE(" \t\tand depth stencil resources. Resources are dumped after the drawcall."); - GFXRECON_WRITE_CONSOLE(" --dump-resources-dir "); - GFXRECON_WRITE_CONSOLE(" \t\tDirectory to write dump resources output files."); - GFXRECON_WRITE_CONSOLE(" \t\tDefault is the current working directory."); - // GOOGLE: [single-frame-looping] Usage message details GFXRECON_WRITE_CONSOLE(" --loop-single-frame-count "); GFXRECON_WRITE_CONSOLE(" \t\tNon-negative integer used only for replaying a single frame GFXR "); @@ -217,14 +196,17 @@ static void PrintUsage(const char* exe_name) GFXRECON_WRITE_CONSOLE(" \t\tthe application terminates. 1 indicates no looping behaviour "); GFXRECON_WRITE_CONSOLE(" \t\t(replay a single frame), and 0 indicates looping infinitely "); GFXRECON_WRITE_CONSOLE(" \t\tuntil the app is forced to stop."); - // GOOGLE: [enable-gpu-time] Usage message details GFXRECON_WRITE_CONSOLE(" --enable-gpu-time"); GFXRECON_WRITE_CONSOLE(" \t\tWhen enabled, gpu time measurement will be enabled for replay."); - #if defined(WIN32) GFXRECON_WRITE_CONSOLE("") GFXRECON_WRITE_CONSOLE("Windows only:") + GFXRECON_WRITE_CONSOLE(" --dump-resources "); + GFXRECON_WRITE_CONSOLE(" \t\tDump resources for a specific drawcall."); + GFXRECON_WRITE_CONSOLE( + " \t\tThis can include vertex, index, const buffer, shader resource, render target,"); + GFXRECON_WRITE_CONSOLE(" \t\tand depth stencil resources. Resources are dumped after the drawcall."); GFXRECON_WRITE_CONSOLE( " --fwo \t\tForce windowed mode if not already, and allow setting of a custom window location."); GFXRECON_WRITE_CONSOLE(" \t\t(Same as --force-windowed-origin)"); @@ -235,6 +217,12 @@ static void PrintUsage(const char* exe_name) #endif GFXRECON_WRITE_CONSOLE("") GFXRECON_WRITE_CONSOLE("Vulkan only:") + GFXRECON_WRITE_CONSOLE(" --capture\t\tCapture the replaying GFXR file. Capture uses the same log"); + GFXRECON_WRITE_CONSOLE(" \t\t\toptions as replay. All other capture option behavior and"); + GFXRECON_WRITE_CONSOLE(" \t\t\tusage is the same as when capturing with the GFXR layer. The"); + GFXRECON_WRITE_CONSOLE(" \t\t\tcapture functionality is included in the `gfxrecon-replay`"); + GFXRECON_WRITE_CONSOLE(" \t\t\texecutable--no GFXR capture layer is added to the Vulkan layer"); + GFXRECON_WRITE_CONSOLE(" \t\t\tchain."); GFXRECON_WRITE_CONSOLE(" --sfa\t\t\tSkip vkAllocateMemory, vkAllocateCommandBuffers, and"); GFXRECON_WRITE_CONSOLE(" \t\t\tvkAllocateDescriptorSets calls that failed during"); GFXRECON_WRITE_CONSOLE(" \t\t\tcapture (same as --skip-failed-allocations)."); @@ -282,6 +270,13 @@ static void PrintUsage(const char* exe_name) GFXRECON_WRITE_CONSOLE(" \t\t \tcapture directly on the swapchain setup for replay."); GFXRECON_WRITE_CONSOLE(" \t\t %s\tDisable creating swapchains, surfaces", kSwapchainOffscreen); GFXRECON_WRITE_CONSOLE(" \t\t \tand windows. To see rendering, add the --screenshots option."); + GFXRECON_WRITE_CONSOLE(" --present-mode \tSet swapchain's VkPresentModeKHR."); + GFXRECON_WRITE_CONSOLE(" \t\tAvailable modes are:"); + GFXRECON_WRITE_CONSOLE(" \t\t\t%s: Present mode used at capture time.", kPresentModeCapture); + GFXRECON_WRITE_CONSOLE(" \t\t\t%s: VK_PRESENT_MODE_IMMEDIATE_KHR", kPresentModeImmediate); + GFXRECON_WRITE_CONSOLE(" \t\t\t%s: VK_PRESENT_MODE_MAILBOX_KHR", kPresentModeMailbox); + GFXRECON_WRITE_CONSOLE(" \t\t\t%s: VK_PRESENT_MODE_FIFO_KHR", kPresentModeFifo); + GFXRECON_WRITE_CONSOLE(" \t\t\t%s: VK_PRESENT_MODE_FIFO_RELAXED_KHR", kPresentModeFifoRelaxed); GFXRECON_WRITE_CONSOLE(" --vssb"); GFXRECON_WRITE_CONSOLE(" \t\tSkip blit to real swapchain to gain performance during replay."); GFXRECON_WRITE_CONSOLE(" --use-captured-swapchain-indices"); @@ -328,7 +323,7 @@ static void PrintUsage(const char* exe_name) GFXRECON_WRITE_CONSOLE(" \t\tif the specified device group is not compatible with the"); GFXRECON_WRITE_CONSOLE(" \t\toriginal capture device group."); GFXRECON_WRITE_CONSOLE(" --sgfs "); - GFXRECON_WRITE_CONSOLE(" \t\tSpecify behaviour to skip calls to vkWaitForFences and vkGetFenceStatus:"); + GFXRECON_WRITE_CONSOLE(" \t\tSpecify behavior to skip calls to vkWaitForFences and vkGetFenceStatus:"); GFXRECON_WRITE_CONSOLE(" \t\t\tstatus=0 : Don't skip"); GFXRECON_WRITE_CONSOLE(" \t\t\tstatus=1 : Skip unsuccessful calls"); GFXRECON_WRITE_CONSOLE(" \t\t\tstatus=2 : Always skip"); @@ -341,43 +336,12 @@ static void PrintUsage(const char* exe_name) GFXRECON_WRITE_CONSOLE(" \t\tForce wait on completion of queue operations for all queues"); GFXRECON_WRITE_CONSOLE(" \t\tbefore calling Present. This is needed for accurate acquisition"); GFXRECON_WRITE_CONSOLE(" \t\tof instrumentation data on some platforms."); - GFXRECON_WRITE_CONSOLE(" --dump-resources "); - GFXRECON_WRITE_CONSOLE(" \t\t is BeginCommandBuffer=,Draw=,BeginRenderPass=

,"); - GFXRECON_WRITE_CONSOLE(" \t\tNextSubpass=,EndRenderPass=,Dispatch=,TraceRays=,"); - GFXRECON_WRITE_CONSOLE(" \t\tQueueSubmit="); - GFXRECON_WRITE_CONSOLE(" \t\tGPU resources are dumped after the given vkCmdDraw*,"); - GFXRECON_WRITE_CONSOLE(" \t\tvkCmdDispatch, or vkCmdTraceRaysKHR is replayed."); - GFXRECON_WRITE_CONSOLE(" --dump-resources "); - GFXRECON_WRITE_CONSOLE(" \t\tExtract --dump-resources block indices args from the specified file. Can be"); - GFXRECON_WRITE_CONSOLE(" \t\teither a json or a text file. If a text file is used, each"); - GFXRECON_WRITE_CONSOLE(" \t\tline of the file should contain comma separated indices as in"); - GFXRECON_WRITE_CONSOLE(" \t\t--dump-resources above."); - GFXRECON_WRITE_CONSOLE(" --dump-resources-scale "); - GFXRECON_WRITE_CONSOLE(" \t\tScale images generated by dump resources by the given scale factor."); - GFXRECON_WRITE_CONSOLE(" \t\tThe scale factor must be a floating point number greater than 0."); - GFXRECON_WRITE_CONSOLE(" \t\tValues greater than 10 are capped at 10. Default value is 1.0."); - GFXRECON_WRITE_CONSOLE(" --dump-resources-image-format "); - GFXRECON_WRITE_CONSOLE(" \t\tImage file format to use when dumping image resources."); - GFXRECON_WRITE_CONSOLE(" \t\tAvailable formats are: bmp, png"); - GFXRECON_WRITE_CONSOLE(" --dump-resources-dump-depth-attachment"); - GFXRECON_WRITE_CONSOLE(" \t\tConfigures whether to dump the depth attachment of draw calls."); - GFXRECON_WRITE_CONSOLE(" \t\tDefault is false."); - GFXRECON_WRITE_CONSOLE(" --dump-resources-dump-color-attachment-index "); - GFXRECON_WRITE_CONSOLE(" \t\tConfigures which color attachment to dump when dumping draw calls."); - GFXRECON_WRITE_CONSOLE(" \t\tDefault is all attachments."); - GFXRECON_WRITE_CONSOLE(" --dump-resources-dump-vertex-index-buffers"); - GFXRECON_WRITE_CONSOLE(" \t\tEnable dumping of vertex and index buffers while dumping draw"); - GFXRECON_WRITE_CONSOLE(" \t\tcall resources. Default is disabled."); - GFXRECON_WRITE_CONSOLE(" --dump-resources-json-output-per-command"); - GFXRECON_WRITE_CONSOLE(" \t\tEnable storing a json output file for each dumped command."); - GFXRECON_WRITE_CONSOLE(" \t\tOverrides default behavior which is generating one output json file that"); - GFXRECON_WRITE_CONSOLE(" \t\tcontains the information for all dumped commands."); - GFXRECON_WRITE_CONSOLE(" --dump-resources-dump-immutable-resources"); - GFXRECON_WRITE_CONSOLE(" \t\tDump immutable shader resources."); - GFXRECON_WRITE_CONSOLE(" --dump-resources-dump-all-image-subresources"); - GFXRECON_WRITE_CONSOLE(" \t\tDump all available mip levels and layers when dumping images."); - GFXRECON_WRITE_CONSOLE(" --dump-resources-dump-unused-vertex-bindings"); - GFXRECON_WRITE_CONSOLE(" \t\tDump a vertex binding even if no vertex attributes references it."); +#if !defined(WIN32) + GFXRECON_WRITE_CONSOLE(" --dump-resources .json"); + GFXRECON_WRITE_CONSOLE(" \t\tExtract dump resources block indices and options from the"); + GFXRECON_WRITE_CONSOLE(" \t\tspecified json file. The format for the json file is"); + GFXRECON_WRITE_CONSOLE(" \t\tdocumented in detail in vulkan_dump_resources.md."); +#endif GFXRECON_WRITE_CONSOLE(" --pipeline-creation-jobs "); GFXRECON_WRITE_CONSOLE(" \t\tSpecify the number of asynchronous pipeline-creation jobs as integer."); GFXRECON_WRITE_CONSOLE(" \t\tIf is negative it will be added to the number of cpu-cores"); @@ -399,7 +363,8 @@ static void PrintUsage(const char* exe_name) GFXRECON_WRITE_CONSOLE(" \t\tIf set, frames switced with vkFrameBoundANDROID will be ignored from"); GFXRECON_WRITE_CONSOLE(" \t\tthe screenshot handler."); GFXRECON_WRITE_CONSOLE(" --deduplicate-device"); - GFXRECON_WRITE_CONSOLE(" \t\tIf set, at most one VkDevice will be created for each VkPhysicalDevice."); + GFXRECON_WRITE_CONSOLE(" \t\tIf set, at most one VkDevice will be created for each VkPhysicalDevice for " + "RenderDoc and DXVK case."); #if defined(WIN32) GFXRECON_WRITE_CONSOLE("") GFXRECON_WRITE_CONSOLE("D3D12 only:") @@ -429,6 +394,10 @@ static void PrintUsage(const char* exe_name) GFXRECON_WRITE_CONSOLE(" --dump-resources-modifiable-state-only"); GFXRECON_WRITE_CONSOLE( " \t\tOnly dump resources that are in a modifiable state set by D3D12 ResourceBarrier") + GFXRECON_WRITE_CONSOLE(" --dump-resources-image-format "); + GFXRECON_WRITE_CONSOLE(" \t\tImage file format to use when dumping image resources."); + GFXRECON_WRITE_CONSOLE(" \t\tAvailable formats are: bmp, png"); + #endif } diff --git a/third_party/gfxreconstruct/tools/tocpp/CMakeLists.txt b/third_party/gfxreconstruct/tools/tocpp/CMakeLists.txt index c5fdba855..d10b6f4c3 100644 --- a/third_party/gfxreconstruct/tools/tocpp/CMakeLists.txt +++ b/third_party/gfxreconstruct/tools/tocpp/CMakeLists.txt @@ -14,7 +14,7 @@ target_sources(gfxrecon-tocpp target_include_directories(gfxrecon-tocpp PUBLIC ${CMAKE_BINARY_DIR}) -target_link_libraries(gfxrecon-tocpp gfxrecon_decode gfxrecon_format gfxrecon_util platform_specific) +target_link_libraries(gfxrecon-tocpp gfxrecon_decode gfxrecon_format gfxrecon_util platform_specific project_version) common_build_directives(gfxrecon-tocpp) diff --git a/third_party/gfxreconstruct/tools/tocpp/main.cpp b/third_party/gfxreconstruct/tools/tocpp/main.cpp index 98ea27104..4c6b7353d 100644 --- a/third_party/gfxreconstruct/tools/tocpp/main.cpp +++ b/third_party/gfxreconstruct/tools/tocpp/main.cpp @@ -136,7 +136,7 @@ static bool CheckOptionPrintVersion(const char* exe_name, const gfxrecon::util:: } GFXRECON_WRITE_CONSOLE("%s version info:", app_name.c_str()); - GFXRECON_WRITE_CONSOLE(" GFXReconstruct Version %s", GFXRECON_PROJECT_VERSION_STRING); + GFXRECON_WRITE_CONSOLE(" GFXReconstruct Version %s", GetProjectVersionString()); GFXRECON_WRITE_CONSOLE(" Vulkan Header Version %u.%u.%u", VK_VERSION_MAJOR(VK_HEADER_VERSION_COMPLETE), VK_VERSION_MINOR(VK_HEADER_VERSION_COMPLETE), @@ -370,7 +370,7 @@ bool ProcessCapture(gfxrecon::decode::VulkanCppConsumer& cpp_consumer, } while (success && file_processor.GetCurrentFrameNumber() <= frame_limit); printf("\nDone processing file\n"); - return (file_processor.GetErrorState() == file_processor.kErrorNone); + return (file_processor.GetErrorState() == gfxrecon::decode::BlockIOError::kErrorNone); } int main(int argc, const char** argv) diff --git a/third_party/gfxreconstruct/tools/tool_settings.h b/third_party/gfxreconstruct/tools/tool_settings.h index a0f4eaa0b..4594740a2 100644 --- a/third_party/gfxreconstruct/tools/tool_settings.h +++ b/third_party/gfxreconstruct/tools/tool_settings.h @@ -1,5 +1,5 @@ /* -** Copyright (c) 2019-2023 LunarG, Inc. +** Copyright (c) 2019-2025 LunarG, Inc. ** Copyright (c) 2021-2025 Advanced Micro Devices, Inc. All rights reserved. ** ** Permission is hereby granted, free of charge, to any person obtaining a @@ -38,6 +38,7 @@ #include "decode/vulkan_resource_tracking_consumer.h" #include "decode/vulkan_tracked_object_info_table.h" #include "generated/generated_vulkan_decoder.h" +#include "format/format.h" #if ENABLE_OPENXR_SUPPORT #include "generated/generated_openxr_decoder.h" @@ -81,6 +82,7 @@ const char kOverrideGpuArgument[] = "--gpu"; const char kOverrideGpuGroupArgument[] = "--gpu-group"; const char kPausedOption[] = "--paused"; const char kPauseFrameArgument[] = "--pause-frame"; +const char kCaptureOption[] = "--capture"; const char kSkipFailedAllocationShortOption[] = "--sfa"; const char kSkipFailedAllocationLongOption[] = "--skip-failed-allocations"; const char kDiscardCachedPsosShortOption[] = "--dcp"; @@ -122,6 +124,7 @@ const char kQuitAfterFrameArgument[] = "--quit-after-frame"; const char kFlushMeasurementRangeOption[] = "--flush-measurement-range"; const char kFlushInsideMeasurementRangeOption[] = "--flush-inside-measurement-range"; const char kSwapchainOption[] = "--swapchain"; +const char kPresentModeOption[] = "--present-mode"; const char kEnableUseCapturedSwapchainIndices[] = "--use-captured-swapchain-indices"; // The same: util::SwapchainOption::kCaptured const char kVirtualSwapchainSkipBlitShortOption[] = "--vssb"; @@ -148,27 +151,16 @@ const char kDeduplicateDevice[] = "--deduplicate-device"; const char kScreenshotIgnoreFrameBoundaryArgument[] = "--screenshot-ignore-FrameBoundaryANDROID"; #if defined(WIN32) -const char kDxTwoPassReplay[] = "--dx12-two-pass-replay"; -const char kDxOverrideObjectNames[] = "--dx12-override-object-names"; -const char kDxAgsMarkRenderPasses[] = "--dx12-ags-inject-markers"; -const char kBatchingMemoryUsageArgument[] = "--batching-memory-usage"; +const char kDxTwoPassReplay[] = "--dx12-two-pass-replay"; +const char kDxOverrideObjectNames[] = "--dx12-override-object-names"; +const char kDxAgsMarkRenderPasses[] = "--dx12-ags-inject-markers"; +const char kBatchingMemoryUsageArgument[] = "--batching-memory-usage"; +const char kDumpResourcesModifiableStateOnly[] = "--dump-resources-modifiable-state-only"; +const char kDumpResourcesBeforeDrawOption[] = "--dump-resources-before-draw"; #endif -const char kDumpResourcesArgument[] = "--dump-resources"; -const char kDumpResourcesBeforeDrawOption[] = "--dump-resources-before-draw"; -const char kDumpResourcesImageFormat[] = "--dump-resources-image-format"; -const char kDumpResourcesScaleArgument[] = "--dump-resources-scale"; -const char kDumpResourcesDepth[] = "--dump-resources-dump-depth-attachment"; -const char kDumpResourcesDirArgument[] = "--dump-resources-dir"; -const char kDumpResourcesModifiableStateOnly[] = "--dump-resources-modifiable-state-only"; -const char kDumpResourcesColorAttIdxArg[] = "--dump-resources-dump-color-attachment-index"; -const char kDumpResourcesDumpVertexIndexBuffers[] = "--dump-resources-dump-vertex-index-buffers"; -const char kDumpResourcesJsonPerCommand[] = "--dump-resources-json-output-per-command"; -const char kDumpResourcesDumpImmutableResources[] = "--dump-resources-dump-immutable-resources"; -const char kDumpResourcesDumpImageSubresources[] = "--dump-resources-dump-all-image-subresources"; -const char kDumpResourcesDumpRawImages[] = "--dump-resources-dump-raw-images"; -const char kDumpResourcesDumpSeparateAlpha[] = "--dump-resources-dump-separate-alpha"; -const char kDumpResourcesDumpUnusedVertexBindings[] = "--dump-resources-dump-unused-vertex-bindigs"; +const char kDumpResourcesArgument[] = "--dump-resources"; +const char kDumpResourcesDirArgument[] = "--dump-resources-dir"; // GOOGLE: [single-frame-looping] const char kLoopSingleFrameCount[] = "--loop-single-frame-count"; @@ -206,8 +198,11 @@ const char kSwapchainVirtual[] = "virtual"; const char kSwapchainCaptured[] = "captured"; const char kSwapchainOffscreen[] = "offscreen"; -const char kScreenshotFormatBmp[] = "bmp"; -const char kScreenshotFormatPng[] = "png"; +const char kPresentModeCapture[] = "capture"; +const char kPresentModeImmediate[] = "immediate"; +const char kPresentModeMailbox[] = "mailbox"; +const char kPresentModeFifo[] = "fifo"; +const char kPresentModeFifoRelaxed[] = "fifo_relaxed"; #if defined(__ANDROID__) const char kDefaultScreenshotDir[] = "/sdcard"; @@ -567,11 +562,11 @@ static gfxrecon::util::ScreenshotFormat GetScreenshotFormat(const gfxrecon::util if (!value.empty()) { - if (gfxrecon::util::platform::StringCompareNoCase(kScreenshotFormatBmp, value.c_str()) == 0) + if (!gfxrecon::util::platform::StringCompareNoCase(gfxrecon::util::kScreenshotFormatBmp, value.c_str())) { format = gfxrecon::util::ScreenshotFormat::kBmp; } - else if (gfxrecon::util::platform::StringCompareNoCase(kScreenshotFormatPng, value.c_str()) == 0) + else if (!gfxrecon::util::platform::StringCompareNoCase(gfxrecon::util::kScreenshotFormatPng, value.c_str())) { format = gfxrecon::util::ScreenshotFormat::kPng; } @@ -584,30 +579,6 @@ static gfxrecon::util::ScreenshotFormat GetScreenshotFormat(const gfxrecon::util return format; } -static gfxrecon::util::ScreenshotFormat GetDumpresourcesImageFormat(const gfxrecon::util::ArgumentParser& arg_parser) -{ - gfxrecon::util::ScreenshotFormat format = gfxrecon::util::ScreenshotFormat::kBmp; - const auto& value = arg_parser.GetArgumentValue(kDumpResourcesImageFormat); - - if (!value.empty()) - { - if (gfxrecon::util::platform::StringCompareNoCase(kScreenshotFormatBmp, value.c_str()) == 0) - { - format = gfxrecon::util::ScreenshotFormat::kBmp; - } - else if (gfxrecon::util::platform::StringCompareNoCase(kScreenshotFormatPng, value.c_str()) == 0) - { - format = gfxrecon::util::ScreenshotFormat::kPng; - } - else - { - GFXRECON_LOG_WARNING("Ignoring unrecognized dump resources image format option \"%s\"", value.c_str()); - } - } - - return format; -} - static std::string GetScreenshotDir(const gfxrecon::util::ArgumentParser& arg_parser) { const auto& value = arg_parser.GetArgumentValue(kScreenshotDirArgument); @@ -686,36 +657,6 @@ static float GetScreenshotScale(const gfxrecon::util::ArgumentParser& arg_parser return scale; } -static float GetDumpResourcesScale(const gfxrecon::util::ArgumentParser& arg_parser) -{ - const auto& value = arg_parser.GetArgumentValue(kDumpResourcesScaleArgument); - - float scale = 1.0f; - - if (!value.empty()) - { - try - { - scale = std::stof(value); - } - catch (std::exception&) - { - GFXRECON_LOG_WARNING("Ignoring invalid dump resources scale option."); - } - if (scale <= 0.0f) - { - GFXRECON_LOG_WARNING("Ignoring invalid dump resources scale option. Value must > 0.0."); - scale = 1.0f; - } - if (scale >= 10.0f) - { - scale = 10.0f; - } - } - - return scale; -} - static std::vector GetScreenshotRanges(const gfxrecon::util::ArgumentParser& arg_parser) { @@ -1069,6 +1010,11 @@ GetVulkanReplayOptions(const gfxrecon::util::ArgumentParser& arg_parse gfxrecon::decode::VulkanReplayOptions replay_options; GetReplayOptions(replay_options, arg_parser, filename); + if (arg_parser.IsOptionSet(kCaptureOption)) + { + replay_options.capture = true; + } + const auto& override_gpu_group = arg_parser.GetArgumentValue(kOverrideGpuGroupArgument); if (!override_gpu_group.empty()) { @@ -1124,6 +1070,32 @@ GetVulkanReplayOptions(const gfxrecon::util::ArgumentParser& arg_parse } } + auto present_mode_option = arg_parser.GetArgumentValue(kPresentModeOption); + if (gfxrecon::util::platform::StringCompareNoCase(kPresentModeCapture, present_mode_option.c_str()) == 0) + { + replay_options.present_mode_option = gfxrecon::util::PresentModeOption::kCapture; + } + else if (gfxrecon::util::platform::StringCompareNoCase(kPresentModeImmediate, present_mode_option.c_str()) == 0) + { + replay_options.present_mode_option = gfxrecon::util::PresentModeOption::kImmediate; + } + else if (gfxrecon::util::platform::StringCompareNoCase(kPresentModeMailbox, present_mode_option.c_str()) == 0) + { + replay_options.present_mode_option = gfxrecon::util::PresentModeOption::kMailbox; + } + else if (gfxrecon::util::platform::StringCompareNoCase(kPresentModeFifo, present_mode_option.c_str()) == 0) + { + replay_options.present_mode_option = gfxrecon::util::PresentModeOption::kFifo; + } + else if (gfxrecon::util::platform::StringCompareNoCase(kPresentModeFifoRelaxed, present_mode_option.c_str()) == 0) + { + replay_options.present_mode_option = gfxrecon::util::PresentModeOption::kFifoRelaxed; + } + else if (!present_mode_option.empty()) + { + GFXRECON_LOG_WARNING("Ignoring unrecognized \"--present-mode\" option: %s", present_mode_option.c_str()); + } + if (arg_parser.IsOptionSet(kColorspaceFallback)) { replay_options.use_colorspace_fallback = true; @@ -1271,29 +1243,7 @@ GetVulkanReplayOptions(const gfxrecon::util::ArgumentParser& arg_parse } } - replay_options.dump_resources_before = arg_parser.IsOptionSet(kDumpResourcesBeforeDrawOption); - replay_options.dump_resources_dump_depth = arg_parser.IsOptionSet(kDumpResourcesDepth); - replay_options.dump_resources_image_format = GetDumpresourcesImageFormat(arg_parser); - replay_options.dump_resources_scale = GetDumpResourcesScale(arg_parser); - replay_options.dump_resources_output_dir = GetDumpResourcesDir(arg_parser); - replay_options.dumping_resources = !replay_options.dump_resources_block_indices.empty(); - replay_options.dump_resources_dump_vertex_index_buffer = - arg_parser.IsOptionSet(kDumpResourcesDumpVertexIndexBuffers); - replay_options.dump_resources_json_per_command = arg_parser.IsOptionSet(kDumpResourcesJsonPerCommand); - replay_options.dump_resources_dump_immutable_resources = - arg_parser.IsOptionSet(kDumpResourcesDumpImmutableResources); - replay_options.dump_resources_dump_all_image_subresources = - arg_parser.IsOptionSet(kDumpResourcesDumpImageSubresources); - replay_options.dump_resources_dump_raw_images = arg_parser.IsOptionSet(kDumpResourcesDumpRawImages); - replay_options.dump_resources_dump_separate_alpha = arg_parser.IsOptionSet(kDumpResourcesDumpSeparateAlpha); - replay_options.dump_resources_dump_unused_vertex_bindings = - arg_parser.IsOptionSet(kDumpResourcesDumpUnusedVertexBindings); - - std::string dr_color_att_idx = arg_parser.GetArgumentValue(kDumpResourcesColorAttIdxArg); - if (!dr_color_att_idx.empty()) - { - replay_options.dump_resources_color_attachment_index = std::stoi(dr_color_att_idx); - } + replay_options.dump_resources_output_dir = GetDumpResourcesDir(arg_parser); replay_options.save_pipeline_cache_filename = arg_parser.GetArgumentValue(kSavePipelineCacheArgument); replay_options.load_pipeline_cache_filename = arg_parser.GetArgumentValue(kLoadPipelineCacheArgument); @@ -1422,7 +1372,7 @@ static bool CheckOptionPrintVersion(const char* exe_name, const gfxrecon::util:: } GFXRECON_WRITE_CONSOLE("%s version info:", app_name.c_str()); - GFXRECON_WRITE_CONSOLE(" GFXReconstruct Version %s", GFXRECON_PROJECT_VERSION_STRING); + GFXRECON_WRITE_CONSOLE(" GFXReconstruct Version %s", GetProjectVersionString()); GFXRECON_WRITE_CONSOLE(" Vulkan Header Version %u.%u.%u", VK_VERSION_MAJOR(VK_HEADER_VERSION_COMPLETE), VK_VERSION_MINOR(VK_HEADER_VERSION_COMPLETE), diff --git a/third_party/gfxreconstruct/version.rc b/third_party/gfxreconstruct/version.rc index d6f4f0ee1..a333293e1 100644 --- a/third_party/gfxreconstruct/version.rc +++ b/third_party/gfxreconstruct/version.rc @@ -21,6 +21,7 @@ */ #include PROJECT_VERSION_HEADER_FILE +#include "project_version_string.h" #include "winres.h" VS_VERSION_INFO VERSIONINFO @@ -32,7 +33,7 @@ BEGIN BEGIN VALUE "FileDescription", GFXRECON_PROJECT_NAME VALUE "ProductName", GFXRECON_PROJECT_NAME - VALUE "ProductVersion", GFXRECON_PROJECT_VERSION_STRING + VALUE "ProductVersion", GFXRECON_PROJECT_VERSION_STRING_MACRO VALUE "LegalCopyright", "Copyright (C) 2023" END END diff --git a/third_party/gfxreconstruct/vulkan_dump_resources.md b/third_party/gfxreconstruct/vulkan_dump_resources.md index 26cfcc212..dbd6a8a51 100644 --- a/third_party/gfxreconstruct/vulkan_dump_resources.md +++ b/third_party/gfxreconstruct/vulkan_dump_resources.md @@ -10,8 +10,11 @@ 5. [Simple examples](#simple-examples) 6. [Index vector dimensionality](#index-vector-dimensionality) 7. [A more complex example](#a-more-complex-example) -2. [Command line options and input](#command-line-options-and-input) - 1. [gfxrecon-replay command line params](#gfxrecon-replay-command-line-params) + 8. [Culling dumped descriptors](#culling-dumped-descriptors) + 9. [Transfer commands](#transfer-commands) +2. [Vulkan dump resources options](#vulkan-dump-resources-options) + 1. [gfxrecon-replay command line parameters](#gfxrecon-replay-command-line-parameters) + 2. [Input json options](#input-json-options) 3. [Output](#output) 1. [Json file output](#json-file-output) 2. [Image file output](#image-file-output) @@ -39,6 +42,10 @@ GFXReconstruct offers the capability to dump resources when replaying a capture All images and buffers used as descriptor bindings by draw calls, dispatch and ray tracing shaders. +5. Transfer commands + + Target resources of transfer commands + The resources are dumped into files and can either be image files (bmp or png) or binary files. Dumping can take place only while replaying a capture file either on desktop with the `gfxrecon-replay` tool or when replaying a capture file on Android with the replay application. @@ -159,7 +166,7 @@ In order to dump the draw call from the secondary command buffer `230` the follo "Draw": [ [ 761 ], [ ] ], "RenderPass": [ [ [ ] ], [ [ 3948, 3950 ] ] ], "ExecuteCommands": [ [ [ ] ], [ [ 3949, 754 ] ] ], - "QueueSubmit": [ 3952 ] + "QueueSubmit": [ 3952, 3952 ] } ``` @@ -169,7 +176,7 @@ Indices are provided in GFXReconstruct as vectors of indices. Each index vector, * `"BeginCommandBuffer"` and `"QueueSubmit"`: **1D** -Commands recorded in multiple command buffers can be dumped in a single run. For each command buffer the index of the `vkBeginCommandBuffer` must be provided. The index of the `vkQueueSubmit` in which the command buffer is submitted must be provided. Both these vectors must have the same number of indices. +Commands recorded in multiple command buffers can be dumped in a single run. For each command buffer the index of the `vkBeginCommandBuffer` must be provided. The index of the `vkQueueSubmit` in which the command buffer is submitted must be provided. Both these vectors must have the same number of indices, so in the case of multiple command buffers being submitted in the same `vkQueueSubmit` the submission index needs to be duplicated. * `"Draw"`, `"Dispatch"` and `"TraceRays"`: **2D** @@ -250,66 +257,206 @@ In this example two command buffers are submitted for dumping, one with object I * `[ 26, 30 ]`: `vkCmdBeginRenderPass`: `26` and `vkCmdEndRenderPass`: `30` * Command buffer `59` is submitted for execution with `vkQueueSubmit` with index `50` and command buffer `60` is submitted in `vkQueueSubmit` with index `51` -## Command line options and input - -### gfxrecon-replay command line params - -Dump resources feature can be control in several ways. To do so, a number of parameters can be provided to either to the `gfxrecon-replay` tool or to the Android application through the `gfxrecon.py` script: - -```text - --dump-resources - The capture file will be examined, and - will be converted to as used in --dump-resources below. - The converted args will be used as the args for dump resources. - --dump-resources - is BeginCommandBuffer=,Draw=,BeginRenderPass=

, - NextSubpass=,EndRenderPass=,Dispatch=,TraceRays=, - QueueSubmit= - Dump gpu resources after the given vkCmdDraw*, vkCmdDispatch, or vkCmdTraceRaysKHR is replayed. The parameter for - each is a block index from the capture file. The additional parameters are used to identify during which occurence - of the vkCmdDraw/VkCmdDispath/VkCmdTrancRaysKHR resources will be dumped. NextSubPass can be repeated 0 or more times to - indicate subpasses withing a render pass. Note that the minimal set of parameters must be one of: - BeginCmdBuffer, Draw, BeginRenderPass, EndRenderPass, QueueSubmit - BeginCmdBuffer, Dispatch, QueueSubmit - BeginCmdBuffer, TraceRays, QueueSubmit - --dump-resources - Extract --dump-resources block indices args from the specified file, with each line in the file containing a comma - or space separated list of the parameters to --dump-resources . The file can contain multiple lines - specifying multiple dumps. - --dump-resources .json - Extract --dump-resources block indices args from the specified json file. The format for the json file is - documented in detail in the gfxreconstruct documentation. - --dump-resources-image-format - Image file format to use for image resource dumping. - Available formats are: - bmp Bitmap file format. This is the default format. - png Png file format. - --dump-resources-before-draw - In addition to dumping gpu resources after the CmdDraw, CmdDispatch and CmdTraceRays calls specified by the - --dump-resources argument, also dump resources before those calls. - --dump-resources-scale - Scale images generated by dump resources by the given scale factor. The scale factor must be a floating point number - greater than 0. Values greater than 10 are capped at 10. Default value is 1.0. - --dump-resources-dir

- Directory to write dump resources output files. Default is the current working directory. - --dump-resources-dump-depth-attachment - Configures whether to dump the depth attachment when dumping draw calls. Default is disabled. - --dump-resources-dump-color-attachment-index - Specify which color attachment to dump when dumping draw calls. Index should be an unsigned zero - based integer. Default is to dump all color attachments. - --dump-resources-dump-vertex-index-buffers - Enables dumping of vertex and index buffers while dumping draw call resources. - --dump-resources-json-output-per-command - Enables storing a json output file for each dumped command. Overrides default behavior which - is generating one output json file that contains the information for all dumped commands. - --dump-resources-dump-immutable-resources - Enables dumping of resources that are used as inputs in the commands requested for dumping - --dump-resources-dump-all-image-subresources - Enables dumping of all image sub resources (mip map levels and array layers) - --dump-resources-dump-raw-images - When enabled all image resources will be dumped verbatim as raw bin files. - --dump-resources-dump-separate-alpha - When enabled alpha channel of dumped images will be dumped in a separate file. +### Culling dumped descriptors +There is an option to ask for specific descriptors and image subresources to be dumped instead of dumping all bound descriptors. This can be done by providing for each command index the 1) descriptor set index, 2) binding index and, 3) array index of the descriptors to be dumped for the specific command. +This is an example: +```Json +{ + "BeginCommandBuffer": [ + 2525 + ], + "QueueSubmit": [ + 2548 + ], + "Draw": [ + [ + { + "Index": 2533, + "Descriptors": [ + { + "Set": 0, + "Binding": 1, + "ArrayIndex": 0 + }, + { + "Set": 0, + "Binding": 0, + "ArrayIndex": 0 + } + ] + }, + 2537 + ] + ], + "RenderPass": [ + [ + [ + 2526, + 2538 + ] + ] + ] +} +``` + +Image descriptors can be fine grained further by specifying the desired subresources with a `VkImageSubresourceRange` like this: + +```Json +"Index": 2533, +"Descriptors": [ + { + "Set": 0, + "Binding": 1, + "ArrayIndex": 0, + "SubresourceRange": { + "AspectMask": "VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT", + "BaseMipLevel": 2, + "LevelCount": 1, + "BaseArrayLayer": 2, + "LayerCount": 1 + } + } +] +``` + +`VK_REMAINING_MIP_LEVELS` and `VK_REMAINING_ARRAY_LAYERS` can be used in `LevelCount` and `LayerCount` respectively. + +### Transfer commands + +Target resources of transfer commands can also be dumped. Currently the supported transfer commands are the following: +- `vkCmdCopyBuffer` +- `vkCmdCopyBuffer2` +- `vkCmdCopyBuffer2KHR` +- `vkCmdCopyBufferToImage` +- `vkCmdCopyBufferToImage2` +- `vkCmdCopyBufferToImage2KHR` +- `vkCmdCopyImage` +- `vkCmdCopyImage2` +- `vkCmdCopyImage2KHR` +- `vkCmdCopyImageToBuffer` +- `vkCmdCopyImageToBuffer2` +- `vkCmdCopyImageToBuffer2KHR` +- `vkCmdBlitImage` +- `vkCmdBlitImage2` +- `vkCmdBlitImage2KHR` +- `vkCmdBuildAccelerationStructuresKHR` +- `vkCmdCopyAccelerationStructureKHR` + +Additionally the following GFXR transfer meta commands can also be dumped: +- `kInitBufferCommand` +- `kInitImageCommand` +- `kVulkanBuildAccelerationStructuresCommand` +- `kVulkanCopyAccelerationStructuresCommand` +The meta commands can only exist in the state setup block. The state setup block exists only for trimmed captures and its purpose is to initialize all Vulkan objects that have been created outside the captured region. + +`vkCmdCopyBuffer` and its variations and `vkCmdCopyImageToBuffer` and its variations will dump the target buffer's regions as separate binary files. + +`vkCmdCopyImage` and its variations and `vkCmdCopyBufferToImage` and its variations will dump the target image's regions as separate image files (or binary files depending on the circumstances). + +Transfer command indices need to specified in a similar manner as with the other commands. The `Transfer` json entry is used for this. An example: + +```Json +"BeginCommandBuffer": [ 250 ], +"Transfer": [[266, 267]], +"QueueSubmit": [ 270 ] +``` + +The supported transfer meta commands can be found in the state setup of a trimmed capture. To do so `0` should be used a special block index for both `BeginCommandBuffer` and `QueueSubmit`. For example: + +```Json +"BeginCommandBuffer": [ 0 ], +"Transfer": [[266, 267]], +"QueueSubmit": [ 0 ] +``` + +## Vulkan dump resources options + +### gfxrecon-replay command line parameters + +Dump resources feature can be controled in several ways. This is done either by providing the appropriate options via the command line or using the input json. +The majority of the options are only available via the input json. The command line options, which can be passed to either to the `gfxrecon-replay` tool or to the Android application through the `gfxrecon.py` script are the following: + +- ```--dump-resources .json``` +Specify the input json file. It should contain the command indices and the various options that control how and which the resources should be dumped. The format for the json file is documented in detail in the gfxreconstruct documentation. + +- ```--dump-resources-dir ``` +Directory to write dump resources output files. Default is the current working directory. + + +### Input json options + +The rest of the dump resources options are available through the input json file. They are expected to be inside a json object named `DumpResourcesOptions`. +The possible options are the following: + +* `Scale` <`float`>: Scale images generated by dump resources by the given scale factor. The scale factor must be a floating point number greater than 0. Values greater than 10 are capped at 10. Default value is `1.0`. + +* `ImageFormat` <`image format`>: +Image file format to use for image resource dumping. Available formats are: `bmp` and `png`. Default is `bmp`. + +* `DumpBeforeCommand` <`boolean`>: +In addition to dumping gpu resources after the CmdDraw, CmdDispatch and CmdTraceRays calls, also dump resources before those calls. Default is `false`. + +* `DumpDepth` <`boolean`>: +Enables dumping of the depth attachment when dumping draw calls. Default is disabled. Default is `false`. + +* `ColorAttachmentIndex` <`unsigned integer`>: +Specify which color attachment to dump when dumping draw calls. Index should be an unsigned zero +based integer. Default is to dump all color attachments. By default all attachments are dumped. + +* `DumpVertexIndexBuffer` <`boolean`>: +Enables dumping of vertex and index buffers while dumping draw call resources. Default is `false`. + +* `DumpAllDescriptors` <`boolean`>: +Enables dumping all descriptors used in the shaders referenced by the commands that have been marked for dumping. Default is `false`. + +* `DumpAllImageSubresources` <`boolean`>: +Enables dumping of all image sub resources (mip map levels and array layers). Default is `false`. + +* `DumpRawImages` <`boolean`>: +When enabled all image resources will be dumped verbatim as raw bin files. Default is `false`. + +* `DumpSeparateAlpha` <`boolean`>: +When enabled alpha channel of dumped images will be dumped in a separate file. Default is `false`. + +* `DumpUnusedVertexBindings` <`boolean`>: +Bound vertex buffer bindings are filtered based on the currently active graphics pipeline. Setting this option to true will dump all bound vertex buffers. Default is `false`. + +* `JsonOutputPerCommand` <`boolean`>: +Enables storing a json output file for each dumped command. Overrides default behavior which +is generating one output json file that contains the information for all dumped commands. Default is `false`. + +* `BinaryFileCompressionType` <`compression method`>: +Compress files that are dumped as binary. Available compression methods are: [`none`, `lz4` (block format), `zlib`, `zlib`, `zstd`]. Default is `none` (no compression). + +* `DumpBuildAccelerationStructuresInputBuffers` <`boolean`>: +Dump all input buffers used in vkCmdBuildAccelerationStructures. This includes vertex, index, transformation matrix, AABB and instance buffers. Default is `false`. + +A json example specifying the above options: + +```Json +{ + "DumpResourcesOptions": { + "Scale": 0.2, + "OutputDir": "", + "ColorAttachmentIndex": -1, + "OutputDir": "", + "ImageFormat": "png", + "DumpBeforeCommand": false, + "DumpDepth": false, + "DumpVertexIndexBuffer": false, + "DumpAllDescriptors": true, + "DumpAllImageSubresources": true, + "DumpRawImages": false, + "DumpSeparateAlpha": false, + "DumpUnusedVertexBindings": false, + "BinaryFileCompressionType": "None", + "DumpBuildAccelerationStructuresInputBuffers": true + }, + + "BeginCommandBuffer": [ 448 ], + "TraceRays": [[ 451 ]], + "QueueSubmit": [ 466 ] +} ``` ## Output